2011-01-08 42 views
22

我在表格中拥有所有的资源捆绑值,并按照要求进行了格式设置。我必须根据用户选择在页面顶部的下拉菜单中更改网站中的语言。如果我使用语言代码作为en_US,那么它的工作正常。如果我使用en-Us作为语言代码,那么它不起作用。可能是什么问题。遵循什么是正确的?为en-US和en_US创建语言环境有什么区别?

回答

17

“en”是由ISO 639指定的语言代码,而美国是3166
在Java中指定的国家代码,Locale对象识别语言languageCode_countryCode(如EN_US),而不是为languageCode- countryCode

21

“en-US”是一个IETF language tag。虽然Java'a Locale类明显基于IETF语言标记,但在将语言代码与国家代码(以及变体)分开时,它使用下划线代替连字符,因此在等效的Locale上调用toString()会给您en_US

从Java 7开始,您可以使用Locale.forLanguageTag(String)toLanguageTag()在语言标记和Locale对象之间进行转换。

将字符串转换为Locale对象时,通过分割连字符和下划线上的组件,降低第一个组件(语言代码)和上方第二个组件(国家代码)来标准化是一个好主意。

+0

此答案是在java代码中做什么的最佳答案。对于其他语言/框架,并非如此。在使用不同约定的框架之间进行调用时,您需要了解需要知道转换的编码器的“pratfall”。建议使用您正在调用的框架的约定。当您调用另一个框架时,请提供进行转换的“代理”。为什么?它消除了需要知道被调用的框架使用不同的约定。贡献者只会“看到”使用那一个的惯例将会避免这种失败。 – DaBlick

6

或者你可以使用 Locale us = Locale.forLanguageTag("en-US")us.toLanguageTag(),这将为你做转换,而不必创建你自己的容易出错的实现。

1

从Java8开始, 应使用语言标记“en-US”来完成区域设置的初始化。Locale.forLanguageTag(“en-US”)。toString();返回输出:en_US

Locale.forLanguageTag(“en_US”)不会创建所需的语言环境。它将默认为系统区域设置。 Locale.forLanguageTag(“en_US”)。toString()返回null

相关问题