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

Jot*_*thi 37 java internationalization

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

Lau*_*ves 33

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

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

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


Nav*_*ved 30

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


use*_*100 6

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