我有一个使用Struts 2(以及许多其他部分)的应用程序,那就是我用两种不同的语言获取页面。我在控制器中翻译的部分有一种语言,我在jsp上翻译的部分有另一种语言。
所以在控制器中我使用
getText("something");
我用西班牙语得到了结果,但是在jsp中得到了使用
的部分
我进入加泰罗尼亚语。我希望能用加泰罗尼亚语获得一切。
所以我有一个拦截器:
public String intercept(ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
Map<String, Object> session = context.getSession();
if(session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE) == null){
Locale locale = chooseLocale(request.getLocale());
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);
context.setLocale(locale);
}
return invocation.invoke();
}
这是基于I18nIntereptor,我的函数chooseLocale返回Locale“es_ES”或“ca_ES”。 如果我做一些调试,我可以看到我有这个值:
session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE) //ca_ES
request.getAttribute(I18nInterceptor.DEFAULT_PARAMETER) //ca_Es
request.getLocale() //ca
所以我猜问题是请求中的语言环境是ca(而不是ca_ES),这在我的bundle上没有定义,然后又回到了默认值(我猜)。我也看到Chrome有它的标题
Accept-Language:ca,es;q=0.8
那么有什么方法可以将请求区域设置更改为ca_ES或es_ES吗?