我想制作一个多语言网站。
我有一个普通的拦截器堆栈,其中包含
<interceptor-ref name="i18n" />
用于更改语言环境的常用 jsp:
<s:a action="locale-manager" namespace="/common">
<s:param name="request_locale">fa_IR</s:param>
فارسی
</s:a>
<s:a action="locale-manager" namespace="/common">
<s:param name="request_locale">en_US</s:param>
English
</s:a>
还有一个简单的 LocaleManager 动作
public class LocaleManager extends ActionSupport{
private static final Logger log = LoggerFactory.getLogger(LocaleManager.class);
public String execute() {
log.debug("Change the local to {}", getLocale() );
return "homepage";
}
}
在上述场景中,i18n 拦截器始终针对所有操作运行,但没有得到解决方案。因为仅当用户单击 locale-manager 操作时,区域设置才会更改。
我尝试删除拦截器堆栈并将 i18n 拦截器仅添加到 LocaleManager 如下
@InterceptorRefs({ @InterceptorRef("i18n") })
public class LocaleManager extends ActionSupport{
.........
但它没有奏效?!我错过了什么,还是应该编写自己的拦截器?