Есть ли аккуратный способ получить экземпляр Локали от его "программного имени", как возвращено Локалью toString()
метод? Очевидное и ужасное решение проанализировало бы Строку и затем создало бы новый экземпляр Локали согласно этому, но возможно существует лучший путь / готовое решение для этого?
Потребность состоит в том, что я хочу сохранить некоторую локаль определенные настройки в базе данных SQL, включая сами Локали, но это было бы ужасно для помещения сериализированных Объектов языкового стандарта там. Я сохранил бы их Строковые представления, которые, кажется, вполне соответствуют подробно.
См. 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);
}
Что ж, я бы вместо этого сохранил конкатенацию строк Locale.getISO3Language ()
, getISO3Country ()
и getVariant () в качестве ключа, что позволило бы мне позже вызвать ] Локаль (язык строк, страна строк, вариант строки)
конструктор.
действительно, использование displayLanguage подразумевает использование языка локали для его отображения, что делает его зависимым от локали, в отличие от кода языка ISO.
Например, ключ локали можно сохранить как
en_EN
en_US
и так далее ...
Похоже, что для этого нет статического valueOf
, что немного удивительно.
Одним из довольно уродливых, но простых способов было бы перебирать Locale.getAvailableLocales()
, сравнивая их значения toString
с вашим значением.
Не очень приятно, но разбор строк не требуется. Можно предварительно заполнить Map
строк в локали и найти строку базы данных в этой карте.