347

Androidでユーザーの現在のロケールを取得するにはどうすればよいですか?

デフォルトのものを入手できますが、これは現在のものではない可能性がありますか?

基本的に、現在のロケールの 2 文字の言語コードが必要です。デフォルトのものではありません。ありませんLocale.current()

4

9 に答える 9

542

デフォルトは、アプリケーション プロセスの実行時にシステム プロパティ設定から静的に構築されるため、アプリケーションの起動時にそのデバイスで選択されたLocaleものを表します。通常、これは問題ありませんが、アプリケーション プロセスの実行後にユーザーが設定を変更した場合、おそらくの値はすぐには更新されないことを意味します。LocaleLocalegetDefaultLocale()

アプリケーションで何らかの理由でこのようなイベントをトラップする必要がある場合は、代わりLocaleにリソースConfigurationオブジェクトから利用可能なものを取得してみてください。

Locale current = getResources().getConfiguration().locale;

アプリケーションで必要な場合は、設定の変更後にこの値がより迅速に更新されることがあります。

于 2013-01-17T22:53:10.567 に答える
212

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;
        }
    }
于 2016-09-22T12:29:24.070 に答える
13

getDefaultのドキュメントから:

ユーザーの優先ロケールを返します。これは、このプロセスでは setDefault(Locale) でオーバーライドされている可能性があります。

また、Localeドキュメントから:

デフォルトのロケールは、ユーザーへのデータの提示を伴うタスクに適しています。

そのまま使うしかないようです。

于 2013-01-17T22:46:53.910 に答える
4

公式ドキュメントによると、 ConfigurationCompatはサポート ライブラリでは非推奨です。

使用を検討できます

LocaleListCompat.getDefault()[0].toLanguageTag()0 番目の位置は、ユーザーが優先するロケールになります

0 番目の位置でデフォルトのロケールを取得するには、次のようにします。 LocaleListCompat.getAdjustedDefault()

于 2020-01-22T15:24:03.300 に答える
2

私はこれを使用しました:

String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
   //do something
}
于 2020-01-24T12:16:21.053 に答える