【问题标题】:Missing Locales in Java? [duplicate]Java中缺少语言环境? [复制]
【发布时间】:2010-01-21 17:12:19
【问题描述】:

我在 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.6.0_16-b01

【问题讨论】:

  • 我怀疑国务院的出口限制至少与该清单有关...
  • 但无论如何,我质疑语言环境表是否是构建国家列表的合理方式。当然,这取决于您的使用情况,但我认为大多数应用程序最好使用较小的列表,而任何必须处理历史数据的东西都需要更大的列表。
  • 让我好奇是否有办法以某种方式将您自己的语言环境添加到列表中......
  • 注意,JDK 支持的语言环境比 JRE 多。
  • @kdgregory - 只是间接的。真正的原因是 Sun / Oracle 没有看到足够的(付费)客户需求来证明实施和维护语言环境的努力(== 成本)是合理的。

标签: java


【解决方案1】:

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

现在,我还没有这样做,但是...

您可以通过 SPI 插入对其他语言环境的支持(描述为 here)。例如,要为新的语言环境提供日期格式化程序,您可以通过实现DateFormatProvider 服务来实现。您可以通过装饰现有实现来做到这一点 - 我会查看 ICU4J 库,看看它是否提供了您想要的支持。

【讨论】:

    【解决方案2】:

    世界上的国家和地区之间没有一对一的映射。语言环境指定区域。它们旨在标记诸如语言多样性之类的东西。只是一个说明性的例子:印度、斯里兰卡、巴基斯坦、孟加拉国都是不同的国家……但他们使用英语的方式并没有任何显着的不同……这是人口统计问题……所以所有这些国家都可能取决于印度地区

    【讨论】:

    • 是的,我知道地区和国家之间并没有真正的概念上的 1-1 映射;尽管如此,我希望(假设?)我得到了一个完整的列表(我猜看的不够仔细)。 javadoc 引用的 ISO 列表也错过了巴基斯坦 (loc.gov/standards/iso639-2/php/English_list.php),但它再次是语言列表,而不是国家/地区。
    【解决方案3】:

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

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

    您会注意到 PK(巴基斯坦)、NG(尼日利亚)和 KG(吉尔吉斯斯坦)都在列表中。请注意,这并不意味着安装了与国家/地区关联的语言环境。如果您想实现任何特定于语言环境的行为,唯一支持的语言环境是Locale.getAvailableLocales 返回的语言环境。

    【讨论】:

    • @Tendayi Mawushe - 国家代码可能存在,但这并不意味着日期/数字格式化程序(例如)会自动提供所需的功能。
    • 是的,PK 在那里,但据我所知,除了获得 2 个字母的 ISO 代码之外,您什么也做不了。例如,您无法从 2 字母代码中获取国家/地区名称。
    • 我知道这并不意味着安装了相关国家的语言环境。然而,这个问题似乎只是试图获得一个国家列表,而不是做任何特定于语言环境的行为。我会在答案中明确说明。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多