如果您有ISO国家代码`US`,`FR`,您如何获得Locale代码(`Locale.US`,`Locale.FRANCE`)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果您有ISO国家代码`US`,`FR`,您如何获得Locale代码(`Locale.US`,`Locale.FRANCE`)?相关的知识,希望对你有一定的参考价值。

如果你有国家代码USFR(ISO-3166-1 alpha-2国家代码),你怎么得到Locale代码(Locale.USLocale.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,循环搜索结果,然后找到包含您的国家/地区代码的代码。但可能有几个。

另一答案

在Java7中有Locale.Builder,但在此之前没有一个简单的方法。但是,您可以创建一个实用程序方法:

  1. 循环Locale.getAvailableLocales()
  2. 每次检查locale.getCountryCode().equals(countryCodeParam)并返回它
另一答案

您可以创建区域设置,

new Locale("en", "US")
new Locale("fr", "FR")

要么

迭代Locale.getAvailableLocales()直到找到你的语言环境,然后使用该实例。

另一答案

区域设置最重要的是由ISO-639语言代码指定,也可能是ISO-3166国家/地区代码和变体。 Locale类具有构造函数,其仅采用语言代码,或者另外采用国家代码,或者另外采用变体。

如果您只有国家/地区代码,则首先需要一个将其转换为语言代码的地图 - 但这并不一定会产生独特的结果,许多国家/地区使用多种官方语言。

以上是关于如果您有ISO国家代码`US`,`FR`,您如何获得Locale代码(`Locale.US`,`Locale.FRANCE`)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .NET 中的 CultureInfo 获取 ISO 3166 国家代码

不支持文化。参数名称:名称 US 是无效的文化标识符

如何使用python计算一列中每行的唯一值?

世界货币查找表 - 使用 ISO 3166-1 alpha-2 代码?

如何区分国家

从 GEO 坐标确定国家 iso 代码