Androidでユーザーの現在のロケールを取得するにはどうすればよいですか?
デフォルトのものを入手できますが、これは現在のものではない可能性がありますか?
基本的に、現在のロケールの2文字の言語コードが必要です。デフォルトではありません。ありませんLocale.current()
Androidでユーザーの現在のロケールを取得するにはどうすればよいですか?
デフォルトのものを入手できますが、これは現在のものではない可能性がありますか?
基本的に、現在のロケールの2文字の言語コードが必要です。デフォルトではありません。ありませんLocale.current()
回答:
デフォルトLocale
は、システムプロパティ設定からアプリケーションプロセスの実行時に静的に構築されるため、アプリケーションの起動時Locale
にそのデバイスで選択されたものを表します。通常、これで問題ありませんがLocale
、アプリケーションプロセスの実行後にユーザーが設定を変更しても、値getDefaultLocale()
がすぐに更新されない可能性があります。
アプリケーションで何らかの理由でこのようなイベントをトラップする必要がある場合は、代わりLocale
にリソースConfiguration
オブジェクトから利用可能なものを取得してみてください。
Locale current = getResources().getConfiguration().locale;
アプリケーションで必要な場合は、設定の変更後、この値がより速く更新されることがあります。
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
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;
}
}
LocaleList.getDefault().get(0);
これは、優先言語でソートされたロケールを返すため、使用する必要があります。
ConfigurationCompat
として、ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Androidサポートライブラリを使用している場合ConfigurationCompat
は、@ Makaleleのメソッドの代わりに使用して、非推奨の警告を取り除くことができます。
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
またはコトリンで:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
getDefault
のドキュメントから:
ユーザーの優先ロケールを返します。これは、このプロセスではsetDefault(Locale)でオーバーライドされている可能性があります。
また、Locale
ドキュメントから:
デフォルトのロケールは、ユーザーへのデータの提示を伴うタスクに適しています。
あなたはそれを使うべきだと思われます。
Locale.setDefault()
、それは私が(それまで私がテストした限りの)少なくともアンドロイド5.0に背をデバイスの言語を変更するときに呼び出さの取得
上記のすべての回答-機能しません。だから私はここに4と9のアンドロイドで機能する関数を入れます
private String getCurrentLanguage(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return LocaleList.getDefault().get(0).getLanguage();
} else{
return Locale.getDefault().getLanguage();
}
}
LocaleListCompat.getDefault()
AndroidXを使用している場合も使用できます。
公式ドキュメントによると、 ConfigurationCompatはサポートライブラリで非推奨になっています
あなたは使用を検討することができます
LocaleListCompat.getDefault()[0].toLanguageTag()
0番目の位置はユーザーの優先ロケールになります
デフォルトのロケールを0番目の位置に取得するには、
LocaleListCompat.getAdjustedDefault()
default()
かなり安全な賭けです、(ドキュメントが言うように)それを処理に使用しないでください。