Grails - 计算机/浏览器语言环境不会影响i18n机制

时间:2015-10-21 08:50:12

标签: grails browser internationalization operating-system locale

我有一个奇怪的问题,或者我无法理解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']:''

当我运行给定的代码片段时,上面是我的默认输出。

我试图了解究竟是什么影响了这些变量,所以我做了接下来的步骤:

  1. 我更改了Chrome的区域设置

    设置 - >显示高级设置 - >语言和输入设置)

  2. 我更改了操作系统的区域设置(Windows 7)

    控制面板 - >地区和语言 - >格式+位置+系统区域设置

  3. 在这些更改之后,我重新启动了我的计算机并期望更改区域设置变量的值,但它们仍然保持不变。

    我知道我可以使用?lang参数更改区域设置&有一些代码,但我有兴趣让Grails决定选择哪个Locale。

    究竟是什么影响了这些变量? Grails如何决定机器的语言环境?

3 个答案:

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

http://grails.github.io/grails-doc/latest/guide/i18n.html

答案 2 :(得分:0)

默认情况下,从传入的Accept-Language HTTP标头中检测用户Locale,此标头由用户使用的浏览器生成。 每个浏览器以不同方式确定系统区域设置:

  1. Internet Explorer使用操作系统区域设置。

  2. Firefox / Chrome允许用户决定使用哪种语言环境(在语言设置中)。

  3. 请参阅:http://www.w3.org/International/questions/qa-lang-priorities.en.php