Получить активную локаль в приложении Grails - PullRequest
19 голосов
/ 30 августа 2011

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

request.locale не работает, так как он не отражает изменения, сделанные через "?lang=xx"

Ответы [ 4 ]

35 голосов
/ 30 августа 2011

В вашем контроллере вы можете получить локаль, используя RequestContextUtils.

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

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

RCU.getLocale(request)
12 голосов
/ 15 сентября 2016

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

import org.springframework.context.i18n.LocaleContextHolder;

LocaleContextHolder.getLocale();
12 голосов
/ 30 августа 2011

Grails использует Spring внутри. Вы можете получить текущую локаль из запроса SpringContextUtils: 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)

Проверьте источник тегов для получения дополнительной информации:

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

0 голосов
/ 19 сентября 2013

Если вы отобразите properties из 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=
...