代码之家  ›  专栏  ›  技术社区  ›  Steve B.

Java中缺少区域设置?

  •  10
  • Steve B.  · 技术社区  · 16 年前

    我在Java语言环境中发现了一些丢失的国家——如果我打印出可用的区域列表,

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

    我错过了很多国家,包括尼日利亚、伊朗、吉尔吉斯斯坦和巴基斯坦。任何人都能对此有所了解,还是有更好的(更全面的)方式来获取Java国家列表?

    1.60.16-B01

    4 回复  |  直到 7 年前
        1
  •  3
  •   Aadith Ramia    16 年前

    世界各国与当地之间没有一对一的地图。区域设置指定区域。它们是用来标记诸如语言多样性之类的东西的。只是一个明确的例子:印度、斯里兰卡、巴基斯坦、孟加拉国都是不同的国家……但是他们使用英语的方式在任何意义上都没有什么不同……这是一个人口统计学的问题……所以所有这些国家都可以依赖于印度的地区。

        2
  •  6
  •   Tomasz Szymulewski McDowell    7 年前

    Sun Java 6只为区域的有限子集提供支持。支持格式化类/写入系统等的向量列在 JDK documentation .

    现在,我还没这么做,但是…

    您可以通过SPI插入对其他区域设置的支持(如所述 here )。例如,要为新区域设置提供日期格式化程序,可以通过实现 DateFormatProvider 服务。您可以通过修饰现有的实现来实现这一点-我将查看 ICU4J 库来查看它是否提供了您想要的支持。

        3
  •  2
  •   Tendayi Mawushe    16 年前

    静态方法 Locale.getISOCountries() 返回 ISO 3166 Countries 名单。如果运行以下代码:

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

    你会注意到,巴基斯坦、尼日利亚和吉尔吉斯斯坦都在名单上。注意,这并不意味着安装了与国家/地区相关的区域设置。如果要实现任何特定于区域设置的行为,则只支持由返回的区域设置。 Locale.getAvailableLocales .

        4
  •  1
  •   mindas    14 年前

    如果您希望支持比Sun JDK当前提供的更多的地区/国家,请考虑添加 ICU4J 对着你的罐子 java.ext.dirs -您不仅可以获得更完整的国家和地区列表,还可以获得 Collator , DateFormat 等。