【发布时间】:2013-10-23 15:46:00
【问题描述】:
我想制作一个多语言网站。
我有一个普通的拦截器堆栈,其中包含
<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{
.........
但它没有工作?!我错过了什么,还是应该编写自己的拦截器?
【问题讨论】:
-
你想做什么?如果您想更改语言环境,则无需执行任何操作来更改它。
标签: java jsp struts2 internationalization struts2-interceptors