У меня есть приложение, которое использует Struts 2 (и многие другие), и дело в том, что я получаю страницы на 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), который не определен в моих пакетахи затем возвращается к значению по умолчанию (я думаю).Я также вижу, что в Chrome есть заголовки
Accept-Language:ca,es;q=0.8
Так есть ли способ изменить локаль запроса на ca_ES или es_ES?