Почему Locale.getDefault (). GetLanguage () в Android возвращает отображаемое имя вместо кода языка?

Согласно ссылке на Java, Locale.getLanguage () должен вернуть 2-буквенный код ISO с нижним регистром языка (например, «en»), в то время как getDisplayLanguage () – это метод получения читаемого имени (например, «английский») ,

Итак, как получается, что следующий код в Android:

Locale.getDefault().getLanguage() 

Возвращает «английский» или «Español» вместо «en» и «es» ????

Я полностью озадачен …

использование

GetResources (). getConfiguration (). locale.getLanguage ()

И он будет работать отлично, даже если я рассмотрю ваше наблюдаемое поведение как ошибку.

Я понял это. Это произошло из-за того, что я ранее называл Locale.setDefault () и передал ему Locale, который, в свою очередь, я создал, ошибочно передав ему все языковое имя (я взял язык из настройки предпочтений и я ошибочно выбрал метку записи вместо От стоимости).

То есть, я сделал:

 String lang= //... here I assigned "English" while I thought // I was assigning it "en" Locale locale=new Locale(lang); Locale.setDefault(locale); // (*) // and later Locale.getLocale().getLanguage(); //returns "english" 

Поэтому, когда я запросил языковой стандарт по умолчанию, на самом деле это был язык, который я создал, код языка которого я ошибочно установил на «английский».

Однако есть несколько забавных вещей:

  1. Линия (*) фактически работает и фактически меняет локаль на английский (или на испанский, когда я использовал «испанский язык»), то есть setDefault (), похоже, принимает «искаженный» язык и даже понимает его. Но это не исправляет.
  2. Примечание. Я использовал заглавную английскую версию при неправильной настройке языка, но в конце он возвращает «английский» все строчные буквы.

Я не знаю, почему эта проблема возникает, но другим стандартом для языков является код ISO3. Вы можете вызвать Locale.getDefault().getISO3Language() и он должен вернуть «eng» или «esp».

Android возвращает читаемые имена вместо кодов.

Locale.getDefault () имеет строку. Поэтому, если вы вызываете какие-либо отпечатки или журналы, они будут работать … то есть Locale.getDefault (). ToString () имеет ваш код языка.

Intereting Posts
Объедините гистограмму и линейный график Как изменить actionbarsherlock пункт меню шрифта при использовании пользовательской темы для панели действий? Как найти реализации системных вызовов в Linux / Android 2.6.29? Почему данные байта изображения в onPictureTaken приводят к зеркальному отображению? Расположение стола для Android Как использовать AsyncTask Кнопка с прозрачным фоном темнеет в Lolipop android Как узнать, отображается ли WebView на экране / на экране с помощью JavaScript Android – меняет ли идентификатор R.Resource во время выполнения Как узнать, отображается ли вид на экране в Android? Android: как найти позицию, нажатую из контекстного меню FindFragmentByTag null для фрагмента A, если setRetain (true) на фрагменте B Как загрузить ответный родной пакет JS из сети в Android? Как найти больницу недалеко от моего местоположения? Возможно ли сделать setSystemUiVisibility () повлиять на всю систему, а не на ваше приложение?