Androidでユーザーの現在のロケールを取得するにはどうすればよいですか?
デフォルトのものを入手できますが、これは現在のものではない可能性がありますか?
基本的に、現在のロケールの 2 文字の言語コードが必要です。デフォルトのものではありません。ありませんLocale.current()
デフォルトは、アプリケーション プロセスの実行時にシステム プロパティ設定から静的に構築されるため、アプリケーションの起動時にそのデバイスで選択されたLocale
ものを表します。通常、これは問題ありませんが、アプリケーション プロセスの実行後にユーザーが設定を変更した場合、おそらくの値はすぐには更新されないことを意味します。Locale
Locale
getDefaultLocale()
アプリケーションで何らかの理由でこのようなイベントをトラップする必要がある場合は、代わりLocale
にリソースConfiguration
オブジェクトから利用可能なものを取得してみてください。
Locale current = getResources().getConfiguration().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
のドキュメントから:
ユーザーの優先ロケールを返します。これは、このプロセスでは setDefault(Locale) でオーバーライドされている可能性があります。
また、Locale
ドキュメントから:
デフォルトのロケールは、ユーザーへのデータの提示を伴うタスクに適しています。
そのまま使うしかないようです。
公式ドキュメントによると、 ConfigurationCompatはサポート ライブラリでは非推奨です。
使用を検討できます
LocaleListCompat.getDefault()[0].toLanguageTag()
0 番目の位置は、ユーザーが優先するロケールになります
0 番目の位置でデフォルトのロケールを取得するには、次のようにします。
LocaleListCompat.getAdjustedDefault()
私はこれを使用しました:
String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
//do something
}