代码之家  ›  专栏  ›  技术社区  ›  Deepesh kumar Gupta

Java区域设置到国家代码(ISO 3166)

  •  1
  • Deepesh kumar Gupta  · 技术社区  · 3 年前

    我有一个例子 Locale 例如

    Locale l = new Locale("en", "USA");
    

    现在,我想获得ISO 3166格式的区域设置 en-US 。当我 toString 不过,我只知道 en_USA 但不是 en-US .

    如何正确执行此操作?

    1 回复  |  直到 3 年前
        1
  •  2
  •   Zabuzard Louis-Philippe Lebouthillier    3 年前

    您的代码中存在两个问题。

    如何获得正确的格式?

    首先,获取所需格式的方法是 Locale#toLanguageTag() ,请参见:

    System.out.println(Locale.US.toLanguageTag()); // en-US
    

    为什么美国不起作用?

    其次,您在构造函数中提供的地区/国家, USA 根据ISO的有效地区/国家。构造函数因此简单地忽略了它。正确的区域是 "US" ,那么它也起作用:

    System.out.println(new Locale("en", "US").toLanguageTag()); // en-US
    

    请参阅的javadoc constructor :

    country-ISO 3166字母-2国家代码或UN M.49数字-3地区代码。有关有效的国家/地区值,请参阅区域设置类描述。

    有关详细信息,请参阅优秀的类文档,它非常详细。


    有效代码

    有关有效代码的列表,请参阅ISO标准。 Wikipedia 还有一张漂亮的桌子:

    ISO language codes table

    这是美国的参赛作品:

    usa entry