我有一个实例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
,您在构造函数中提供的地区/国家不是有效的地区/国家。因此构造函数简单地忽略了它。正确的区域是"US"
,那么它也可以工作:
System.out.println(new Locale("en", "US").toLanguageTag()); // en-US
请参阅构造函数的 javadoc :
country - ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区域代码。请参阅有关有效国家/地区值的 Locale 类描述。
具体可以参考类的优秀文档,很详细。
有关有效代码的列表,请参阅 ISO 标准。维基百科也有一个不错的表格:
这是美国的条目: