Подтвердить что ты не робот

Grails, как изменить текущий язык

Как изменить текущий язык?

  • Я попытался установить controller/action?lang=de, но моя локаль все еще en_US
  • Я попытался переопределить значение, используя этот фрагмент кода:

    def key = "org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER"
    def localeResolver = request.getAttribute(key)
    localeResolver.setLocale(request, response, new Locale("de","DE"))
    

Ничего не изменилось.

  • Я попытался переопределить значение, используя этот фрагмент кода:

    import org.springframework.web.servlet.support.RequestContextUtils as RCU;
    RCU.getLocaleResolver(request).setLocale(request, response, new Locale("de","DE"))
    

И... ничего не произошло. я все еще установил свой локаль в en_US.

Любая идея изменить локаль?

4b9b3361

Ответ 1

Согласно главе 10. Интернационализация документации Grails, Grails поддерживает i18n из коробки, и вы действительно должны иметь возможность изменить локаль с помощью параметра lang:

По умолчанию определяется локаль пользователя из входящего Accept-Languageзаголовок. Однако вы можете предоставить пользователям возможность переключения локалей на просто передавая параметр langдля Grails в качестве параметра запроса:

/book/list?lang=de

Grails автоматически переключит пользовательский язык и сохраните его в файле cookie поэтому последующие запросы будут иметь новый заголовок.

Но иногда вы можете запрограммировать язык по умолчанию, потому что не все ваши приложения будут на английском языке. Для этого вам нужно всего лишь установить localeResolver в конфигурационный файл resources.groovy spring, как показано ниже:

beans = {
   localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
      defaultLocale = new Locale("de","DE")
      java.util.Locale.setDefault(defaultLocale)
   }
}

Теперь, без каких-либо подробностей, я не могу сказать, почему использование параметра lang не работает в вашем случае. На всякий случай, откуда вы знаете, что локаль все еще en_US?.

Ответ 2

Вы пытаетесь изменить локаль в корневом URL-адресе приложения (например, http://localhost:8080/myapp/?lang=de)?

В базовой настройке Grails, пытающейся изменить локаль в корневом корне приложения, не работает. Grails меняет локаль в localChangeInterceptor, который вызывается до вызова всех контроллеров. Когда вы обращаетесь к корневому URL-адресу приложения, никакой контроллер не вызывается, как это можно видеть по умолчанию UrlMappings.

Вот почему изменение языка в корневом корне приложения не работает. Если вы попытаетесь изменить URL-адрес на каком-то контроллере, он работает.

Текущая локаль хранится под ключом org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME в сеансе http. Вы можете проверить его там.

Правильное решение - сопоставить корневой URL-адрес некоторому контроллеру в UrlMappings.

Ответ 3

Это, вероятно, слишком поздно, но для справки я делаю это в своем контроллере индексной страницы:

session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR")

Ответ 4

Насколько я понимаю, как вы проверяете локаль "request.locale", это неверно, она дает локаль браузера, а не локаль приложения grails.

Вы должны использовать " LocaleContextHolder.locale".

В 2.0.3 он изменяет локаль, просто передавая параметр lang=someLocale.

Ответ 5

У меня была аналогичная проблема, и это было из-за пространства. У меня было:

[space]messages_de.properties вместо messages_de.properties

Ответ 6

У меня возникла проблема с этим временем назад, когда прокси-сервер через более старую версию Apache2.2 и использование военного файла grails (2.3.9). Мне повезло с помощью mod_proxy_html (3.1)/Apache 2.4. Возможно, более совершенные версии grails исправить это.