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

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

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

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

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

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

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

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

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