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