В Java, есть ли способ получить Locale, учитывая его отображаемое имя? - PullRequest
3 голосов
/ 06 июня 2009

То есть, если у меня есть «Английский (США)», я бы хотел получить «en-US» или соответствующий java.util.Locale. Похоже, API - это улица с односторонним движением, но, возможно, я не смотрю в нужном месте. Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 06 июня 2009

Нет, не похоже, что в API есть такой метод. Однако вы можете создать кеш, используя Locales, возвращаемое Locale.getAvailableLocales(); тогда вы можете просто посмотреть отображаемое имя в этом кэше.

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 голосов
/ 06 июня 2009

Отображаемое имя на каком языке?

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

Я предполагаю, что если вы имеете дело с локалями, вам нужно работать с несколькими языками.

1 голос
/ 06 июня 2009

Я сделал это один раз, и я не думаю, что он гарантированно будет работать все время, потому что в каждой реализации JVM локали могут иметь разные имена Перебирайте локали, пока не найдете нужный.

0 голосов
/ 08 октября 2013

Вы можете использовать Apache Commons-Lang:

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