我知道我可以使用“lang”参数自动更改当前语言环境,如docs中所述,但如何跟踪这些更改,例如更新存储在当前用户域对象中的语言?
request.locale
不起作用,因为它不会反映通过“?lang=xx
”所做的更改
答案 0 :(得分:35)
在您的控制器中,您可以使用RequestContextUtils
获取区域设置。
import org.springframework.web.servlet.support.RequestContextUtils as RCU
然后解析请求的语言环境:
RCU.getLocale(request)
答案 1 :(得分:12)
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> 标记来源以获取更多信息:
答案 2 :(得分:11)
您还可以使用不需要请求的LocaleContextHolder
作为参数
import org.springframework.context.i18n.LocaleContextHolder;
LocaleContextHolder.getLocale();
答案 3 :(得分:0)
如果您显示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=