В Configuration.java
есть:
/**
* ...
* @deprecated Do not set or read this directly. Use {@link #getLocales()} and
* {@link #setLocales(LocaleList)}. If only the primary locale is needed,
* <code>getLocales().get(0)</code> is now the preferred accessor.
*/
@Deprecated public Locale locale;
...
configOut.mLocaleList = LocaleList.forLanguageTags(localesStr);
configOut.locale = configOut.mLocaleList.get(0);
Так в основном с использованием locale
основном возвращает первичный локали пользовательские наборы. Ответ на прием делает то же самое, что и прямое чтение locale
.
Однако этот язык не обязательно используется при получении ресурсов. Это может быть вторичная локаль пользователя, если основной язык недоступен.
Вот более правильный вариант:
Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
? resources.getConfiguration().getLocales()
.getFirstMatch(resources.getAssets().getLocales())
: resources.getConfiguration().locale;
Это будет возвращать только локаль, указанную в настройках системы. Многие приложения имеют свои собственные функции выбора языка. Если это так, то ответ от @Egor является предпочтительным. –
Если вы выберете язык вручную, вы должны вызвать Locale.setDefault() –
Это очень важно, потому что в противном случае библиотеки Java не будут правильно выбирать правильный язык. –