Как я могу заставить Grails использовать только один язык?

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

Ответы

Ответ 1

Определите LocaleResolver bean в 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 повторно устанавливается для каждого запроса. Было бы более элегантным отключить локализацию браузеров через опцию конфигурации.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

beans = {
    localeResolver(org.springframework.web.servlet.i18n.FixedLocaleResolver) {
        setLocale(Locale.US)
    }
}