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"
В моем приложении есть спиннер, меняющий язык. Звонок, например. 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