Подтвердить что ты не робот

В чем разница между созданием локали для en-US и en_US?

У меня есть все мои значения ресурса в таблице и отформатированы в соответствии с требованиями. Мне нужно изменить языки на веб-сайте на основе выбора пользователя в раскрывающемся списке вверху страницы. Если я использую код языка как en_US, тогда его работа прекращается. если я использую en-Us как код языка, тогда он не работает. В чем может быть проблема. Что правильно делать?

4b9b3361

Ответ 1

"en" - это код языка, указанный в ISO 639. В то время как США являются кодом страны, указанным 3166.
В Java объект Locale распознает язык как languageCode_countryCode (например, en_US), а не как languageCode-countryCode.

Ответ 2

"en-US" является тегом языка IETF. Хотя класс Java'a Locale был явно основан на тегах языка IETF, он использует символы подчеркивания вместо дефиса при разделении кодов языков из кодов стран ( а также варианты), поэтому вызов toString() на эквивалентном Locale даст вам en_US.

С Java 7 вы можете использовать Locale.forLanguageTag(String) и toLanguageTag() для преобразования между языковыми тегами и объектами Locale.

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

Ответ 3

Или вы можете использовать Locale us = Locale.forLanguageTag("en-US") и us.toLanguageTag(), и это сделает для вас преобразование без необходимости создания собственной ошибки.

Ответ 4

Начиная с Java8, Инициализация языка должна выполняться с использованием тега языка "en-US" Locale.forLanguageTag( "EN-US" ) ToString(). возвращает результат: en_US

Где в качестве Locale.forLanguageTag( "en_US" ) не создается требуемая локаль. Он по умолчанию будет соответствовать языку системы.  Locale.forLanguageTag( "en_US" ). ToString() возвращает null