Как получить стиль / код страны / языка из локали Java - PullRequest
2 голосов
/ 26 марта 2012

Мне было интересно, знает ли кто-нибудь, как получить отформатированные или стилизованные коды из класса Locale. То, что я хотел бы видеть, это "en_US" для английского языка для США. Например, если я обнаруживаю язык из Firefox, он возвращается как «en-us, en; q = 0.5». Позже, когда я хочу вывести его (используя getLanguage () или toString ()), он возвращается как «en-us, en; q = 0.5» вместо «en_US». Я пробовал разные функции, но все они, похоже, возвращают строку, которая использовалась для генерации локали.

Эти значения входят в различные элементы пользовательского интерфейса и файлы конфигурации, поэтому было бы лучше, чтобы они выглядели одинаково, независимо от того, кто или как он был сгенерирован, а также сравнение не так просто, когда они преобразованы в строки (должны быть) .

Приветствия и спасибо!

ПРИМЕЧАНИЕ. Я спрашиваю об этом, потому что у нас есть устаревший код, который выполняет много (и я действительно имею в виду большинство) вещей, когда данные представлены в формате string / xml, поэтому форматирование имеет решающее значение.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Locale#toString() возвращает то, что вы хотите.

Вот в чем дело: языки, которые вы обнаруживаете в Firefox, используют формат, указанный в RFC 2616 , который является спецификацией HTTP. Этот формат отличается от всего, что вы видите в Java Locale, потому что этот формат очень сильно зависит от HTTP.

0 голосов
/ 26 марта 2012

Проблема в том, что вы пытаетесь напечатать.

ан-нас, еп, д = 0,5

Означает, что предпочтительное качество английского языка составляет 50%, и его можно определить как en-us или en.

В случае, если вы получаете HTTP-запрос

Accept-Language: da, en-gb; q = 0,8, en; q = 0,7

это означает: «Я предпочитаю датский, но приму британский английский и другие типы английского» * ​​1011 *

поэтому сначала вам нужно будет декодировать ваш http-запрос в соответствии со спецификацией, а затем получить Locales

...