0

我想要一份所有国家的清单。我发现 java Locale 非常适用于此目的。Locale.getAvailableLocales()返回 JRE 上所有已安装的语言环境。

问题是:

  1. 跨不同的 JRE 使用是否安全?比方说 OpenJDK、IBM Java、Oracle Java、1.6、1.7?有更好的实现吗?
  2. 是否可以提供Locale.getCountry()特定语言环境的翻译?我发现是否仅可用于这几个提供的语言环境ENGLISH,FRENCH,GERMAN,ITALIAN,JAPANESE,KOREAN,CHINESE,SIMPLIFIED_CHINESE,TRADITIONAL_CHINESE,FRANCE,GERMANY,ITALY,JAPAN,KOREA,CHINA,PRC,TAIWAN,UK,US,CANADA_FRENCH ,但如果我想将其翻译成Locale("sk", "SK")斯洛伐克语怎么办。所有国家都保留其英文名称,只有斯洛伐克语被正确翻译:SK EN:Slovak (Slovakia) FR:slovaque (Slovaquie) SK:Slovenčina (Slovenská republika). Locale用新翻译扩展可用国家/地区翻译的 java 目录的正确方法是什么?

private static final Locale SLOVAK = new Locale("sk", "SK");
Collection<?> COUNTRIES_LIST_EN = (Collection<?>) CollectionUtils
    .collect(Arrays.asList(Locale.ENGLISH.getAvailableLocales()), new Transformer() {
      @Override
      public String transform(Object input) {
        System.out.println(String.format("%s EN:%s FR:%s SK:%s", ((Locale) input).getCountry(),
                                         ((Locale) input).getDisplayName(),
                                         ((Locale) input).getDisplayName(Locale.FRANCE),
                                         ((Locale) input).getDisplayName(SLOVAK)));
        return ((Locale) input).getDisplayCountry();
      }
    });

输出:

JP EN:Japanese (Japan) FR:japonais (Japon) SK:Japanese (Japan)
PE EN:Spanish (Peru) FR:espagnol (Pérou) SK:Spanish (Peru)
 EN:English FR:anglais SK:English
JP EN:Japanese (Japan,JP) FR:japonais (Japon,JP) SK:Japanese (Japan,JP)
PA EN:Spanish (Panama) FR:espagnol (Panama) SK:Spanish (Panama)
CH EN:German (Switzerland) FR:allemand (Suisse) SK:German (Switzerland)
US EN:English (United States) FR:anglais (Etats-Unis) SK:English (United States)
SK EN:Slovak (Slovakia) FR:slovaque (Slovaquie) SK:Slovenčina (Slovenská republika)
4

1 回答 1

1

根据 API Locale.getAvaliableLocale 返回至少一个等于 Locale.US 的 Locale 实例。也就是说,API 不保证所有 JRE 的结果都相同

于 2013-08-23T11:20:34.853 回答