如果您有ISO国家代码`US`,`FR`,您如何获得Locale代码(`Locale.US`,`Locale.FRANCE`)?
如果你有国家代码US
, FR
(ISO-3166-1 alpha-2国家代码),你如何获得Locale代码( Locale.US
, Locale.FRANCE
)来做这样的事情:
System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34)); System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34)); $12.34 12,34 €
您不能,因为Locale用于保存语言,而不是国家/地区。 它可以包含特定国家/地区的语言,以及该国家/地区的特定变体,但它首先是语言。 语言和国家之间没有一对一的关系。 大多数语言在不同的国家使用,许多国家都有多种语言。
如果您拥有某种语言的国家/地区代码,则可以使用new Locale(code)
。 但是使用国家/地区代码,您只需调用getAvailableLocales
,循环搜索结果,然后找到包含国家/地区代码的结果。 但可能有几个。
您可以创建语言环境,
new Locale("en", "US") new Locale("fr", "FR")
要么
迭代Locale.getAvailableLocales()
直到找到您的语言环境,然后使用该实例。
区域设置最重要的是由ISO-639语言代码指定,也可能是ISO-3166国家/地区代码和变体。 Locale
类具有构造函数,这些构造函数既可以使用语言代码,也可以使用国家代码,或者另外使用变体。
如果您只有国家/地区代码,则首先需要一个将其转换为语言代码的地图 – 但这不一定会产生独特的结果,许多国家/地区使用多种官方语言。
在Java7中有Locale.Builder
,但在此之前没有一种简单的方法。 但是,您可以创建一个实用程序方法:
- 循环
Locale.getAvailableLocales()
- 对于每个检查
locale.getCountryCode().equals(countryCodeParam)
并返回它