Как я могу заставить Grails использовать только один язык? - PullRequest
15 голосов
/ 10 января 2012

Я хочу, чтобы мое приложение Grails поддерживало только один язык, который я могу где-то определить, полностью игнорируя заголовки клиента или параметр "lang".Есть ли способ, которым я могу это сделать?Спасибо.

Ответы [ 4 ]

19 голосов
/ 11 января 2012

Определите bean LocaleResolver в вашем config/spring/resources.groovy, чтобы установить локаль по умолчанию.

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

Это полезно, если вам не нужно иметь дело с параметром lang, иначе он будет переопределен. Чтобы даже игнорировать значение параметра lang, вы можете установить языковой стандарт в Filter при каждом запросе:

import org.springframework.web.servlet.support.RequestContextUtils as RCU
...
def filters = {
    all(controller:'*', action:'*') {

        before = {
            def locale = new Locale("sv","SV")
            RCU.getLocaleResolver(request).setLocale(request, response, locale)                  
        }

    }
}

Этот подход кажется несколько повторяющимся, так как Locale переустанавливается при каждом запросе. Было бы более элегантно отключить определение локали браузера через параметр конфигурации.

5 голосов
/ 11 января 2012

удаляет все файлы messages_xx.properties и сохраняет только файлы messages.properties.Это пакет сообщений по умолчанию, к которому система всегда будет прибегать к помощи, если не может найти правильный пакет сообщений.

Таким образом, вы все равно можете использовать сообщения (и, таким образом, оставить возможность национализировать свое приложение), нопользователи получат всегда один и тот же язык.

4 голосов
/ 13 декабря 2013

По умолчанию LocaleResolver Grails - SessionLocaleResolver. Если вы хотите всегда использовать de_DE, вы можете изменить это на FixedLocaleResolver.

beans {
  localeResolver(FixedLocaleResolver) {
      locale = new Locale("de", "DE")
  }
}

Если вы хотите ограничить набор локалей, вам понадобится фильтр и используйте метод SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale).

0 голосов
/ 08 июля 2019

Это сработало для меня, чтобы переопределить bean-компонент localResolver по умолчанию

beans = {
    localeResolver(org.springframework.web.servlet.i18n.FixedLocaleResolver) {
        setLocale(Locale.US)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...