Android получить текущую Локаль, а не по умолчанию
Как получить текущую Локаль пользователя в Android?
Я могу получить значение по умолчанию, но это может быть не текущий правильный?
в основном я хочу, двухбуквенный код языка от текущей локали. Не по умолчанию. Нет никакого Locale.current()
4 ответа:
по умолчанию
Localeстроится статически во время выполнения для вашего процесса приложения из параметров системного свойства, поэтому он будет представлятьLocaleвыбранный на этом устройстве когда приложение было запущено. Как правило, это нормально, но это означает, что если пользователь изменяет ихLocaleв настройках после запуска процесса подачи заявки, значениеgetDefaultLocale()вероятно, не будет немедленно обновляться.Если вам нужно поймать события, как это по какой-то причине в вашем приложении, вы можете попробовать получить
Localeдоступно с ресурса
Android N (уровень Api 24) обновление (без предупреждений):
Locale getCurrentLocale(Context context){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ return context.getResources().getConfiguration().getLocales().get(0); } else{ //noinspection deprecation return context.getResources().getConfiguration().locale; } }
С
getDefault's документация:возвращает предпочтительный язык пользователя. Это может быть переопределено для этого процесса с помощью setDefault (Locale).
и с
Localeдокументы:локаль по умолчанию подходит для задач, связанных с представлением данных пользователю.
Кажется, вы должны просто использовать его.
Если вы используете библиотеку поддержки Android вы можете использовать
ConfigurationCompatвместо метода @Makalele, чтобы избавиться от предупреждений об устаревании:Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);или в Котлин:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]