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

Получить активную локаль в приложении Grails

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

request.locale не работает, поскольку он не отражает изменения, сделанные с помощью < ?lang=xx "

4b9b3361

Ответ 1

Внутри вашего контроллера вы можете получить локаль с помощью RequestContextUtils.

import org.springframework.web.servlet.support.RequestContextUtils as RCU

Затем, чтобы решить локаль для запроса:

RCU.getLocale(request)

Ответ 2

Grails использует Spring внутренне. Вы можете получить текущий язык из Spring RequestContextUtils: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/servlet/support/RequestContextUtils.html#getLocale(javax.servlet.http.HttpServletRequest)

import org.springframework.web.servlet.support.RequestContextUtils

def locale = RequestContextUtils.getLocale(request)

Проверить < g: message > для получения дополнительной информации:

http://grails.org/doc/latest/ref/Tags/message.html

Ответ 3

Вы также можете использовать LocaleContextHolder, который не нуждается в запросе в качестве параметра

import org.springframework.context.i18n.LocaleContextHolder;

LocaleContextHolder.getLocale();

Ответ 4

Если вы показываете properties of RequestContextUtils.getLocale(request), вы найдете следующее:

ISO3Country= 
ISO3Language=ara 
displayCountry= 
class=class java.util.Locale 
default=fr_FR 
language=ar 
variant= 
ISOLanguages=[Ljava.lang.String;@4269f8e3 
availableLocales=[Ljava.util.Locale;@3b532125 
displayName=arabe 
ISOCountries=[Ljava.lang.String;@4ea52290 
displayVariant= 
displayLanguage=arabe 
country=