在Java中,有没有办法获得一个Locale给它的显示名称?

时间:2009-06-05 21:11:35

标签: java internationalization locale

也就是说,如果我有“英语(美国)”,我想获得“en-US”或合适的java.util.Locale。看起来API是一条单行道,但也许我找不到合适的地方。提前谢谢。

4 个答案:

答案 0 :(得分:6)

不,似乎API中没有这样的方法。但是,您可以使用Locale.getAvailableLocales()返回的Locales创建缓存;然后,您只需在此缓存中查找显示名称即可。

private static Map<String, Locale> displayNames = new HashMap<String, Locale>();
static {
    for (Locale l : Locale.getAvailableLocales()) {
        displayNames.put(l.getDisplayName(), l);
    }
}

public static Locale getLocale(String displayName) {
    return displayNames.get(displayName);
}

答案 1 :(得分:3)

以哪种语言显示姓名?

Locale[] locales = Locale.getAvailableLocales();
for (Locale current : locales) {
  for (Locale test : locales) {
    System.out
        .print(test.getDisplayName(current) + " ");
  }
  System.out.println();
}

我认为如果您正在处理语言环境,则需要处理多种语言。

答案 2 :(得分:1)

我这样做了一次,我认为它不能保证一直有效,因为在每个JVM实现中,locales的命名方式可能不同。遍历语言环境,直到找到所需的语言环境。

答案 3 :(得分:0)

您可以使用Apache的commons-lang:

org.apache.commons.lang.LocaleUtils.toLocale(localeStr);