如何在Java中根据显示名称获取Locale?

5

也就是说,如果我的语言设置为"English (United States)",我想得到"en-US"或者一个适当的java.util.Locale。看起来API只提供了单向转换,但也许我没有找对地方。谢谢。


在发布问题前查看API,如果有帮助请点赞。 - Michael Myers
4个回答

7

不,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);
}

3

以哪种语言显示名称?

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

我认为,如果你正在处理本地化,你需要处理多种语言。


不要!不要把它复杂化了!这是一个很好、简单的问题,然后你却来破坏它。:( - Michael Myers

1

我曾经这样做过,但我认为它并不保证始终有效,因为每个JVM实现中的区域设置名称可能不同。请循环遍历区域设置,直到找到所需的那一个。


-2
你可以使用 Apache 的 commons-lang 库:
org.apache.commons.lang.LocaleUtils.toLocale(localeStr);

只适用于此语言和国家代码,无法正常工作。 - Strinder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接