Android Получить локаль для текущего приложения, но не локаль по умолчанию для устройства - PullRequest
1 голос
/ 06 марта 2020

Как узнать язык текущего приложения, но не язык устройства?

Я провел онлайн-исследование и обнаружил, что большинство ответов используют: Locale.getDefault() и getResources().getConfiguration().getLocales(), а я нет думаю, что подойдет для моей ситуации.

Например, я установил Android язык устройства на «French (Belgium)» (языковой тег: fr-be), и мое приложение поддерживает только «fr, fr-CA, fr -СН». После установки приложения оно отображается на французском языке, но обе эти функции возвращают «fr-be»:

Locale.getDefault() -> fr-be
fragment.getResources().getConfiguration().getLocales().get(0) -> fr-be

Я в замешательстве, так как мое приложение не поддерживает fr-be, но оно делает показать по-французски. Итак, как я могу получить то, что мое приложение использует прямо сейчас? Это должно быть что-то из "fr, fr-CA или fr-CH".

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2020

Как узнать язык текущего приложения, но не язык устройства?

Приложение не имеет языка. Следовательно, «текущий язык приложения» отсутствует.

Я в замешательстве, так как мое приложение не поддерживает fr-be

Приложение не поддерживает "язык.

Приложение имеет строковые ресурсы. Эти строковые ресурсы могут включать переводы на несколько языков. Каждый строковый ресурс имеет свой собственный набор переводов на свой собственный набор языков. Таким образом, один из ваших собственных строковых ресурсов может иметь переводы только для fr, fr-CA или fr-CH, но строковый ресурс, который вы получаете из библиотек, может иметь переводы для разных наборов языков.

Итак, как я могу получить то, что мое приложение использует прямо сейчас?

Ваше приложение ничего не использует.

То, что Android использует в качестве перевода для строкового ресурса, определяется в время выполнения для этого отдельного строкового ресурса во время его запроса. Вполне возможно, что для 100 различных строковых ресурсов будет сделано 100 вариантов выбора языка на основе доступных переводов в приложении и настроек языка на уровне устройства пользователя.

Это должно быть что-то из "fr , fr-CA или fr-CH "

Для любого заданного строкового ресурса он может быть одним из них. Это может быть от fr-BE, если строковый ресурс происходит из библиотеки, которая предлагает перевод fr-BE. Это может быть из исходного набора res/values/ по умолчанию, если у строкового ресурса нет лучшего перевода.

Но главное - выбор языка для каждого отдельного строкового ресурса , не для всего приложения.

...