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:
这是美国的条目:
我有一个 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:
这是美国的条目: