我有一个奇怪的问题,或者我无法理解Grails i18n机制是如何运作的。
我将以下内容插入到我的index.gsp文件中:
LocaleContextHolder.locale: '${org.springframework.context.i18n.LocaleContextHolder.locale}'
java.util.Locale.getDefault(): '${java.util.Locale.getDefault()}'
RequestContextUtils.getLocale(request): '${org.springframework.web.servlet.support.RequestContextUtils.getLocale(request)}'
session['SessionLocaleResolver.LOCALE']: '${session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE']}'
此代码段应该打印Locale,它确实如此:
LocaleContextHolder.locale:' iw'
java.util.Locale.getDefault():' en_US'
RequestContextUtils.getLocale(request):' iw'
会话[' SessionLocaleResolver.LOCALE']:''
当我运行给定的代码片段时,上面是我的默认输出。
我试图了解究竟是什么影响了这些变量,所以我做了接下来的步骤:
我更改了Chrome的区域设置
设置 - >显示高级设置 - >语言和输入设置)
我更改了操作系统的区域设置(Windows 7)
控制面板 - >地区和语言 - >格式+位置+系统区域设置
在这些更改之后,我重新启动了我的计算机并期望更改区域设置变量的值,但它们仍然保持不变。
我知道我可以使用?lang参数更改区域设置&有一些代码,但我有兴趣让Grails决定选择哪个Locale。
究竟是什么影响了这些变量? Grails如何决定机器的语言环境?
答案 0 :(得分:0)
15.2更改区域设置
默认情况下,从传入的Accept-Language标头中检测用户区域设置。但是,您可以通过将名为lang的参数作为请求参数传递给Grails来为用户提供切换区域设置的功能: /电子书/列表?lang = es编辑 Grails将自动切换用户的语言环境并将其存储在cookie中,以便后续请求具有新标题。
从这里: https://grails.github.io/grails-doc/2.4.3/guide/i18n.html
如果要在tomcat中部署,可以在 catalina.sh 脚本中设置区域设置:
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Duser.language=en -Duser.region=US"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Duser.language=en -Duser.region=US"
fi
答案 1 :(得分:0)
我认为在URL中传递lang参数时国际化是有效的。它在文档中提到
By default the user locale is detected from the incoming Accept-Language header.
However, you can provide users the capability to switch locales by simply passing
a parameter called lang to Grails as a request parameter:
/book/list?lang=es
答案 2 :(得分:0)
默认情况下,从传入的Accept-Language HTTP标头中检测用户Locale,此标头由用户使用的浏览器生成。 每个浏览器以不同方式确定系统区域设置:
Internet Explorer使用操作系统区域设置。
Firefox / Chrome允许用户决定使用哪种语言环境(在语言设置中)。
请参阅:http://www.w3.org/International/questions/qa-lang-priorities.en.php