Ответ 1
Внутри вашего контроллера вы можете получить локаль с помощью RequestContextUtils
.
import org.springframework.web.servlet.support.RequestContextUtils as RCU
Затем, чтобы решить локаль для запроса:
RCU.getLocale(request)
Я знаю, что могу использовать параметр "lang" для автоматического изменения текущей локали, как описано в docs, но как я могу отслеживать эти изменения, например, для обновления языка, хранящегося в текущем объекте пользовательского домена?
request.locale
не работает, поскольку он не отражает изменения, сделанные с помощью < ?lang=xx
"
Внутри вашего контроллера вы можете получить локаль с помощью RequestContextUtils
.
import org.springframework.web.servlet.support.RequestContextUtils as RCU
Затем, чтобы решить локаль для запроса:
RCU.getLocale(request)
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 > для получения дополнительной информации:
Вы также можете использовать LocaleContextHolder
, который не нуждается в запросе в качестве параметра
import org.springframework.context.i18n.LocaleContextHolder;
LocaleContextHolder.getLocale();
Если вы показываете 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=