缺少Java中的语言环境?

我在java语言环境中找到了许多缺少的国家 – 如果我打印出可用语言环境列表,

TreeSet m = new TreeSet(); for ( Locale l : Locale.getAvailableLocales() ) { m.add( l.getDisplayCountry() ); } for ( String s : m ) { System.out.println( s ); } 

我错过了一些国家,包括尼日利亚,伊朗,吉尔吉斯斯坦和巴基斯坦。 任何人都可以对此有所了解,还是有一种更好(更全面)的方式来获取java中的国家/地区列表?

1.6.0_16-B01

世界各国和地区之间没有一对一的映射。 区域设置指定区域。 它们旨在标记语言多样性等内容。 只是一个澄清的例子:印度,斯里兰卡,巴基斯坦,孟加拉国都是不同的国家……但他们使用英语的方式在任何重要方面都没有什么不同……人口统计的东西……所有这些国家都可以依赖于印度的地方

Sun Java 6仅支持有限的语言环境子集。 支持格式化类/写入系统/等的向量。 列在JDK文档中 。

现在,我还没有这样做,但……

您可以通过SPI插入对其他语言环境的支持( 此处描述)。 例如,要为新语言环境提供日期格式化程序,可以通过实现DateFormatProvider服务来完成。 您可以通过修改现有实现来实现此目的 – 我将查看ICU4J库,看看它是否提供了您想要的支持。

静态方法Locale.getISOCountries()返回ISO 3166国家/地区列表中国家/地区的所有两个字母代码。 如果您运行以下代码:

 String[] codes = Locale.getISOCountries(); for (String code : codes) { System.out.println(code); } 

您会注意到PK(PAKISTAN),NG(NIGERIA)和KG(KYRGYZSTAN)都在列表中。 请注意,这并不意味着安装了与国家/地区关联的区域设置。 如果要实现任何特定于语言环境的行为,则支持的唯一语言环境是Locale.getAvailableLocales返回的语言环境。

如果您想支持比当前Sun JDK中更多的语言环境/国家/地区,请考虑将ICU4J jar添加到您的java.ext.dirs – 您不仅可以获得更完整的国家/地区列表,还可以获得对CollatorDateFormat良好支持等