2013-12-05 1 views
0

Я просто столкнулся с этой проблемой при тестировании языковой установки в настройках против постоянных значений:Android new Locale («en_US») и Locale.US отличаются?

(new Locale("en_US")).equals(Locale.US) == false 

При взгляде на детали получается, что новый Locale("en_us") возвращает объект с кодом языка «en_US» и код страны, который является строкой нулевой длины, тогда как Locale.US возвращает объект с кодом языка «en» и кодом страны «US». Locale("en","US") возвращает тот же результат, что и Locale.US, поэтому легко избежать этой проблемы, но является ли это ожидаемым поведением конструкторов Locale?

+2

Это неправильный конструктор. Один параметр определяет язык, en_US по сравнению с США, как ожидалось. Используйте Locale (String language, String country), как вы уже сказали. –

ответ

1

Конструкторы локалей работают должным образом. Вы можете сравнить объекты локали, как это:.

(новый Locale ("en_US")) ToString() equalsIgnoreCase ((Locale.US) .ToString())

Это даст. вы ожидаемое значение

+0

getDefault() возвращает динамическое значение, я бы избегал этого, так как он определенно бросает исключения на устройства с другим языком –

+0

@ M.Bennett: Спасибо, улучшил мой ответ –

+1

Спасибо. Вероятно, это также объясняет, почему новый Locale («en_US») создает локаль, который «иногда» работает, например, с функциями, которые тестируют определенную локаль таким образом. – Nantoka

Смежные вопросы