私はAndroid開発にまったく慣れていないので、ローカリゼーションに少し問題があります。デバイスの現在の言語以外の既定の言語を使用することをユーザーが選択できるアプリがあります。たとえば、ドイツに住んでいるフランス人ユーザーで、自分の電話を「ドイツ語」に設定している場合、(さまざまな理由で) 私のアプリをフランス語で使用したいが、自分の電話のデフォルト言語をフランス語に設定したくない場合があります。
私のアプリには、いくつかのビューをロードおよびアンロードするアクティビティが 1 つしかありません。非常にシンプルなアプリですが、大きなコンテンツ (テキストと画像) があります。
これを実現するために、以下のコードを使用します。
うまく機能しますが、いくつかの問題があります。
ユーザーが適切なボタンを使用して新しい言語を選択し、アプリを再起動した場合 (または、アプリを強制的に終了させた場合...): 最初のビューのみが新しい言語を使用します。次のビューは以前の言語に設定されたままです。
ユーザーが自分のデバイスをオフにすることを選択した場合、同じ問題: アクティビティの最初のビューのみが選択した言語に設定されます (変数は設定から読み取られます)。
ただし、ユーザーがアプリをもう一度再起動することを選択した場合、すべてのビューとサブビューは新しい言語に正しく設定されます。
また、ユーザーが以前にアプリを少なくとも 1 回再起動した場合、各言語の変更は正常に完了します。アプリをもう一度再起動する必要はありません。
それで、新しい言語を正しく設定する方法はありますか
アプリの最初の再起動直後
ユーザーが以前に自分のデバイスの電源を入れ直したことがある場合
どんな助けでも大歓迎です。これが私が使用するコードです(簡略化):
public void onCreate(Bundle savedInstanceState) {
SharedPreferences myPrefs;
myPrefs = getSharedPreferences("langage", MODE_PRIVATE);
String langageToLoad = myPrefs.getString("langageToLoad", "");
changeLangage(langageToLoad);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
(...some other code...)
}
public void setLangageEn(View view){
changeLangage( "en");
setPreference( "en");
// finish(); // optionnal
}
public void changeLangage(String langage) {
Locale locale = new Locale(langage);
Locale systemLocale = Locale.getDefault();
if (systemLocale != null && systemLocale.equals(locale)) {
return;
}
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}
public void setPreference( String langage){
SharedPreferences languagepref = getSharedPreferences("langage",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("langageToLoad",langage );
editor.commit();
}