2017-08-07 23 views
1

私のアプリには、デバイスのロケールが変更されたときに呼び出されるブロードキャスト受信機があります。 Locale.getDefault()が失効/以前の値を返すNexus 5xやGalaxy S8 +など、いくつかのデバイスのアプリにバグがあります。ローカライズされた文字列は新しい言語では正しく表示されていますが、アプリケーション内ではロケールが古くなっています。何か案は?一部のAndroidデバイスでLocale.getDefault()が古くなっています

例:私はドイツ語は多くのデバイスではなく、すべてのデバイスのためにここに返されて表示さ

1) Device is in English -> App locale tells us we are in English.

2) Background the app and change the device language to German

3) App receives the locale changed broadcast event, Locale.getDefault() returns English instead of German

答えて

2

another answerで参照されるように、デフォルトロケールは静的に定義されますat the time the application is created。あなたのリソースから直接ロケールを取得してみてください。

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

残念ながら、これらの各メソッドは同じ失効値を返します。 –