在Grails应用程序中检索活动区域设置

时间:2011-08-30 14:39:50

标签: java grails locale

我知道我可以使用“lang”参数自动更改当前语言环境,如docs中所述,但如何跟踪这些更改,例如更新存储在当前用户域对象中的语言?

request.locale不起作用,因为它不会反映通过“?lang=xx”所做的更改

4 个答案:

答案 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> 标记来源以获取更多信息:

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

答案 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=