Как именно работают «Locale.getDefault()» и «getResources().getConfiguration().getLocales().get(0)»?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как именно работают «Locale.getDefault()» и «getResources().getConfiguration().getLocales().get(0)»?

Сообщение Anonymous »

Мое приложение (Java 11, минимум: API 29, цель: API 30 = Android 11) в настоящее время поддерживает два языка: немецкий (по умолчанию) и английский
The "build.gradle( Модуль:app)" содержит файлы resConfigs("de", "en") и два файла strings.xml с переводами.
Согласно официальные документы, Locale.getDefault() должен возвращать:

текущее значение локали по умолчанию для указанной категории для этого экземпляра виртуальной машины Java.

Если я правильно понимаю, то это локаль, которая в настоящее время используется приложением.
В документации для getLocales() говорится только:

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

... но, согласно нескольким потокам, эта функция также должна возвращать языковой стандарт, который в данный момент используется приложением. Я хочу знать, что это за язык, поэтому я провел тестирование со следующим текстом:

Код: Выделить всё

Log.d(TAG,"1="+Locale.getDefault()+", 2="+getResources().getConfiguration().getLocales().get(0));
  • Установите для эмулятора значение «Английский (США)» -> Английский выбран правильно, печатается «1=en_US, 2=en_US»
  • Немецкий (CH) -> Немецкий выбран правильно, печатается «1=de_CH, 2=de_CH»
  • Немецкий + английский (США) -> Немецкий выбран правильно , печатает "1=de_CH, 2=de_CH"
  • Датский + немецкий (CH) -> немецкий выбран правильно, печатается "1=de_CH, 2=de_CH"
  • Датский + Английский (США) -> Английский выбран правильно, печатается «1=en_US, 2=en_US»
  • Датский + Итальянский -> Правильно выбран немецкий, печатается «1=da_DK, 2=da_DK"
  • Итальянский + Испанский -> Немецкий выбран правильно, печатается "1=in_IT, 2=in_IT"
Похоже, что для них либо установлен язык, который поддерживается приложением и выбран пользователем в настройках Android, ИЛИ первый язык, выбранный пользователем, если ни один из них не поддерживается приложением. >
В моем приложении есть спиннер, меняющий язык. Звонок, например. Locale.setDefault(Locale.English) переключает все на английский, но если я переключусь с первого действия на второе, то это значение сбрасывается. Например:
Немецкий + английский (США) -> немецкий выбирается автоматически (печатается «1=de_CH, 2=de_CH») -> переключиться на английский -> элементы пользовательского интерфейса тоже переключаются -> активность переключения -> печатает «1=de_CH, 2=en» в onCreateView, при этом все элементы пользовательского интерфейса на английском языке; с датским + итальянским печатается "1=da_DK, 2=en"
Я знаю, что getResources().getConfiguration().getLocales().get(0) для изменения требуется вызов onConfigurationChanged, а Locale.setDefault() применяет изменение мгновенно, но почему последний внезапно сбрасывается? Почему я получил результаты, полученные во время тестов, а не тот локаль, который используется сейчас? Как получить надежный результат для языкового стандарта, который фактически использует приложение (это не может быть просто так, верно?)?
Или лучше: как оба этих параметра функции действительно работают? Они просто глючат?
В документации ничего из этого не упоминается, а только то, как выбирается языковой стандарт при запуске приложения (здесь) и последние изменения в языковых настройках. применимо только к Android 13+.

Подробнее здесь: https://stackoverflow.com/questions/773 ... getlocales
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как именно работают «Locale.getDefault()» и «getResources().getConfiguration().getLocales().get(0)»?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • React Native 0.78.0 IOS Build TypeError: _nativernlocalize.default.getlocales не является функцией (он не определен)
    Anonymous » » в форуме IOS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Smsmanager.getDefault () - Унимок - что заменить?
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как правильно использовать ClassLoader.getResources()?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Android getResources().getDrawable() устаревший API 22
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»