2016-07-08 7 views
12

:ターゲットが24であれば現在のロケール(APIレベル24)の取得方法は?私はこの方法をやっていた

context.getResources().getConfiguration().locale 

Configuration.localeが推奨されませんので、私はこの変更を行った:

context.getResources().getConfiguration().getLocales().get(0) 

今ではそれが唯一のminSdkVersion 24のためですので、私は使用できないことを言いますそれは私の最小目標が低いためです。

正しい方法はありますか?あなたは上で動作していると、非推奨ソリューションにフォールバックしているバージョン

答えて

33

チェック:

Locale locale; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    locale = context.getResources().getConfiguration().getLocales().get(0); 
} else { 
    locale = context.getResources().getConfiguration().locale; 
} 
5

現在のLocaleを取得するJavaの標準的な方法である、Locale.getDefault()を使用することができます。 Configuration.java

+1

はここで、より正しいバージョンです。多くのアプリは独自の言語セレクタ機能を備えています。そうであれば、@Egorからの回答が優先されます。 –

+1

ロケールを手動で選択した場合は、Locale.setDefault()を呼び出す必要があります。 –

+1

これは非常に重要です。そうしないと、Javaライブラリが正しいロケールを正しく取得できなくなるからです。 –

0

がある:

/** 
* ... 
* @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を使用することは基本的にプライマリロケールユーザセットを返します。受諾応答は、直接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; 
関連する問題