I was doing this way:
context.getResources().getConfiguration().locale
Configuration.locale is deprecated if target is 24. So I made this c
You could use Locale.getDefault()
, which is the Java standard way of getting the current Locale
.
Check which version you're running on and fallback to the deprecated solution:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = context.getResources().getConfiguration().getLocales().get(0);
} else {
locale = context.getResources().getConfiguration().locale;
}
In Configuration.java
, there is:
/**
* ...
* @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);
So basically using locale
basically returns the primary locale the user sets. The accept answer does exactly the same as reading locale
directly.
However this locale isn't necessarily the one used when getting resources. It might be the user's secondary locale if the primary locale isn't available.
Here's a more correct version:
Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
? resources.getConfiguration().getLocales()
.getFirstMatch(resources.getAssets().getLocales())
: resources.getConfiguration().locale;