Struts 2 getText использует другой язык на контроллере и JSP - PullRequest
1 голос
/ 07 марта 2012

У меня есть приложение, которое использует 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?

...