アプリのローカリゼーションに関して小さな問題が発生しました:
これがケースです - システム言語に関係なく、常にノルウェー語でアプリケーションを使用するオプションをユーザーに与えました.
ほとんどの場合は問題なく動作します (設定に移動し、ノルウェー語を強制するボックスにチェックを入れ、「戻る」を押すと、前のアクティビティがノルウェー語で表示されます - 同じことが「逆」です)、ただし、言語の変更のみです。 「バックスタック」の最初のアクティビティを正しく更新 (リソースをリロード) しているようです。
典型的なシナリオを説明するには:
ユーザーがアプリを起動すると、メインのアクティビティ (英語) が表示されます。そこから、彼は 2 番目のアクティビティを選択します (これも英語です)。次に、(2 番目のアクティビティのメニューから) 設定に移動し、ノルウェー語を強制するように設定します。
その後、元に戻ると、2 番目のアクティビティが正しく更新され、ノルウェー語で表示されます (今のところ問題ありません)。しかし、メインのアクティビティに戻るためにもう一度「戻る」を押すと、まだ英語で表示されます...
彼が戻ってアプリを再度起動すると、メインのアクティビティがノルウェー語で正しく表示されます...
私が何をすべきかについて提案してくれる明るい人はいますか?
関連するソース コード:
表示言語を設定するためにすべてのアクティビティに含まれるコード:
onCreate では:Globals.locale_default = Locale.getDefault().getDisplayLanguage();
public void onStart() {
super.onStart();
forceNorwegian = settings.getBoolean(getString(R.string.pref_key_forceNorwegian).toString(), false);
if (forceNorwegian) {
languageCheck("no");
} else {
Globals.locale = null;
languageCheck(Globals.locale_default);
}
}
public void languageCheck(String lang) {
Globals.locale = new Locale( lang );
// Check the current system locale and change it to Norwegian if it's not already the default
Globals.checkLocale( this );
if (Globals.language_changed) {
// Restart activity
Intent restart = getIntent();
finish();
Globals.language_changed = false;
startActivity(restart);
}
}
Globals.java:
public class Globals {
public static Locale locale = null;
public static String locale_default = null;
public static boolean language_changed = false;
public static void checkLocale( Activity a ) {
if( locale == null )
return;
Configuration config = a.getBaseContext().getResources().getConfiguration();
if( !config.locale.equals( locale ) )
{ // Change to the new locale. Everything will need to be closed or reloaded.
config.locale = locale;
a.getBaseContext().getResources().updateConfiguration( config, null );
language_changed = true;
}
}
}