Android получить текущую Локаль, а не по умолчанию


Как получить текущую Локаль пользователя в Android?

Я могу получить значение по умолчанию, но это может быть не текущий правильный?

в основном я хочу, двухбуквенный код языка от текущей локали. Не по умолчанию. Нет никакого Locale.current()

4 224

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]