为en-US和en_US创建区域设置有什么区别?

时间:2011-01-08 07:22:59

标签: java internationalization

我在表中拥有所有resourcebundle值,并根据要求进行格式化。我必须根据页面顶部的下拉菜单中的用户选择更改网站中的语言。如果我使用语言代码作为en_US,那么它的工作正常。如果我使用en-Us作为语言代码,那么它不起作用。可能是什么问题。哪个是正确的?

4 个答案:

答案 0 :(得分:28)

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

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

将字符串转换为Locale个对象时,最好通过拆分连字符和下划线上的组件进行规范化,小写第一个组件(语言代码)并将第二个组件(国家/地区代码)置于上限。< / p>

答案 1 :(得分:26)

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

答案 2 :(得分:6)

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

答案 3 :(得分:3)

从Java8开始, 应使用语言标记“en-US”来初始化语言环境 Locale.forLanguageTag( “EN-US”)的toString()。返回输出:en_US

Locale.forLanguageTag(“en_US”)无法创建所需的区域设置。它将默认为系统区域设置。  Locale.forLanguageTag(“en_US”)。toString()返回null