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;
}
}
Android Support Libraryを使用している場合は、@ Makaleleのメソッドの代わりにConfigurationCompat
を使用して廃止予定の警告を取り除くことができます。
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
またはコトリンで:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
getDefault
のドキュメントから:
ユーザーの優先ロケールを返します。これはsetDefault(Locale)でこのプロセスに対して上書きされた可能性があります。
Locale
のドキュメントからも:
デフォルトのロケールは、データをユーザーに提示することを含むタスクに適しています。
あなたはそれを使うべきだと思われます。
private Locale getLocale(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;
}
}