2

我有一个实例Locale,例如:

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

现在,我想获得 ISO 3166 格式的语言环境en-US。当我toString这样做时,我只得到en_USA但没有en-US

如何正确执行此操作?

4

1 回答 1

2

您的代码中有两个问题。

如何获得正确的格式?

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

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

为什么美国不工作?

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

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

请参阅构造函数的 javadoc :

country - ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区域代码。请参阅有关有效国家/地区值的 Locale 类描述。

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


有效代码

有关有效代码的列表,请参阅 ISO 标准。维基百科也有一个不错的表格:

ISO 语言代码表

这是美国的条目:

美国入境

于 2021-11-12T10:39:22.653 回答