Как получить Локаль от ее Строкового представления в Java?

Есть ли аккуратный способ получить экземпляр Локали от его "программного имени", как возвращено Локалью toString() метод? Очевидное и ужасное решение проанализировало бы Строку и затем создало бы новый экземпляр Локали согласно этому, но возможно существует лучший путь / готовое решение для этого?

Потребность состоит в том, что я хочу сохранить некоторую локаль определенные настройки в базе данных SQL, включая сами Локали, но это было бы ужасно для помещения сериализированных Объектов языкового стандарта там. Я сохранил бы их Строковые представления, которые, кажется, вполне соответствуют подробно.

99
задан Joonas Pulakka 26 March 2010 в 10:00
поделиться

3 ответа

См. Locale.getLanguage(), Locale.getCountry()... Храните эту комбинацию в базе данных вместо "программного имени"...
Когда вы захотите создать Locale обратно, используйте public Locale(String language, String country)

Вот пример кода :)

// May contain simple syntax error, I don't have java right now to test..
// but this is a bigger picture for your algo...
public String localeToString(Locale l) {
    return l.getLanguage() + "," + l.getCountry();
}

public Locale stringToLocale(String s) {
    StringTokenizer tempStringTokenizer = new StringTokenizer(s,",");
    if(tempStringTokenizer.hasMoreTokens())
    String l = tempStringTokenizer.nextElement();
    if(tempStringTokenizer.hasMoreTokens())
    String c = tempStringTokenizer.nextElement();
    return new Locale(l,c);
}
33
ответ дан 24 November 2019 в 04:58
поделиться

Что ж, я бы вместо этого сохранил конкатенацию строк Locale.getISO3Language () , getISO3Country () и getVariant () в качестве ключа, что позволило бы мне позже вызвать ] Локаль (язык строк, страна строк, вариант строки) конструктор.

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

Например, ключ локали можно сохранить как

en_EN
en_US

и так далее ...

1
ответ дан 24 November 2019 в 04:58
поделиться

Похоже, что для этого нет статического valueOf, что немного удивительно.

Одним из довольно уродливых, но простых способов было бы перебирать Locale.getAvailableLocales(), сравнивая их значения toString с вашим значением.

Не очень приятно, но разбор строк не требуется. Можно предварительно заполнить Map строк в локали и найти строку базы данных в этой карте.

3
ответ дан 24 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: