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]