私はこのようにしていました:
context.getResources().getConfiguration().locale
Configuration.locale
は、ターゲットが24の場合は推奨されません。したがって、この変更を行いました。
context.getResources().getConfiguration().getLocales().get(0)
今ではminSdkVersion
24専用であると言われているので、最小ターゲットが低いため使用できません。
適切な方法は何ですか?
実行しているバージョンを確認し、非推奨のソリューションにフォールバックします。
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = context.getResources().getConfiguration().getLocales().get(0);
} else {
locale = context.getResources().getConfiguration().locale;
}
Locale.getDefault()
を使用できます。これは、Java現在のLocale
を取得する標準的な方法です。
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
を使用すると、基本的にユーザーが設定したprimaryロケールを返します。受け入れの答えは、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;