我正在我的webapp中实现i18n,目前正处于测试阶段。我在服务器端使用java.util.Locale
将语言环境传递给使用该信息的相关API(日期时间等)。这是我的设置:
hi-IN
,但无论我的操作系统上的国家/地区设置如何,该值仍为hi
...实际值{{1} } Accept-Language:hi;en-US,en;q=0.8,q=0.6
来表示语言和国家/地区。此测试用例按照我的预期以正确的语言打印值,但由于请求中的值仅为new Locale("hi", "IN")
,因此无法看到所需的结果。 不确定为什么浏览器(Chrome和Firefox)不支持所选条目中hi
格式的所有条目。有什么我想念的吗?
编辑:我根据@ pawel-dyda的回答做了一些修改。引用他的一部分答案
你的语言标签应该是hi-IN,我认为应该解释这种奇怪的行为。
问题的关键(我在这里提出这个问题的原因)是我无法让我的浏览器在language_country
标题中将值hi-IN
发送到服务器。
答案 0 :(得分:1)
我认为你缺少一些东西。
关于第二点,设置操作系统国家/地区通常不会影响Web浏览器在其Accept-Language
列表上发送的内容。通常,因为我可以给你一个反例:Mac OS X上的Safari
它对移动网络浏览器有一定影响,但我自己还没有进行任何测试。
关于第3点和第5点......嗯,你举了一个Accept-Language
列表的例子。请仔细查看:它包含en-US
,即英语(美国)。您的语言标记应为hi-IN
,我认为应该解释这种奇怪的行为。
我不确定你在第4点的含义。不知道实现细节,我只能猜测你是在尝试加载资源文件(并且根据语言环境格式判断它是Java属性...... )以及格式化等内容的默认值 对于属性文件通常(并不总是!)语言就足够了。但格式化存在问题 好吧,大多数时候你只会接受语言,你别无选择,只能接受这个事实。有两种方法可以缓解此问题:
不要忘记后退!这是区域设置回退(通过Accept-Language
标题中的列表,直到找到您的应用程序支持的内容)和资源回退(如果您有messages_fr.properties
,但没有messages_fr_ca.properties
,但请求来了如fr-CA
,从前一个文件返回法语翻译是有意义的。
顺便说一句:您可以打开Firefox about:config
网站。它有一个名为intl.accept_languages
的设置。我打赌,如果你改变它的内容,你就能发送你想要的东西。但是,正如我所说它没用,因为用户不会改变他们的设置......