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