Java 语言环境到国家代码 (ISO 3166)

Java Locale to country codes (ISO 3166)

我有一个 Locale 的实例,例如:

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

现在,我想获取 ISO 3166 格式的语言环境 en-US。但是,当我 toString 它时,我只得到 en_USA 而不是 en-US.

如何正确执行此操作?

您的代码中有两个问题。

如何得到正确的格式?

首先,获取你想要的格式的方法是Locale#toLanguageTag(),看这个:

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

为什么美国不行?

其次,根据 ISO,您在构造函数 USA 中提供的 region/country 不是 有效的 region/country。因此,构造函数只是简单地忽略了它。正确的区域是"US",那么也可以:

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

查看 constructor 的 javadoc:

country - An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. See the Locale class description about valid country values.

具体可以参考class的优秀文档,很详细


有效代码

有关有效代码的列表,请参阅 ISO 标准。 Wikipedia也有不错的table:

这是美国的条目: