java 如果您有ISO国家代码'US','FR',如何获得区域设置代码('Locale.US','Locale.FRANCE')?

zengzsys  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(107)

如果您有国家代码USFR(ISO-3166-1 alpha-2国家代码),如何获取区域设置代码(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 €
8cdiaqws

8cdiaqws1#

不能,因为区域设置用于保存语言,而不是国家。它可以保存特定国家的语言,以及该国家的特定变体,但它首先是语言。语言和国家之间没有一对一的关系。大多数语言在不同的国家使用,许多国家有几种语言。
如果你有一种语言的国家代码,你可以使用new Locale(code),但是有了国家代码,你所能做的就是调用getAvailableLocales,循环结果,找到一个有你的国家代码的,但是可能有几个。

wn9m85ua

wn9m85ua2#

在Java7中有Locale.Builder,但在此之前没有一个简单的方法。不过,您可以创建一个实用方法:
1.回路Locale.getAvailableLocales()
1.对于每次检查,如果locale.getCountryCode().equals(countryCodeParam),则返回

gj3fmq9x

gj3fmq9x3#

您可以创建区域设置,

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


迭代Locale.getAvailableLocales(),直到找到本地语言环境,然后使用该示例。

gfttwv5a

gfttwv5a4#

区域设置最重要的是由ISO-639语言代码指定,也可能是ISO-3166国家代码和变量。Locale类的构造函数要么只接受语言代码,要么额外接受国家代码,要么额外接受变量。
如果您只有国家代码,您首先需要一个将其转换为语言代码的Map-但这不一定会产生唯一的结果,许多国家使用不止一种官方语言。

ig9co6j1

ig9co6j15#

公认的答案当然是正确的,但仍然需要一个解决方案。因此,下面是我尝试实现它:

public static Locale countryCodeToLocate(String countryCode) {

        for(Locale l : Locale.getAvailableLocales()) {
            // try to convert `en_US` into `us`
            String lang = l.toString().toLowerCase();
            String prefix = l.getLanguage().toLowerCase();
            if (lang.startsWith(prefix + "_" + countryCode)) {
                return l;
            }
        }
        return Locale.getDefault();
    }

相关问题