我對Android開發很陌生,而且我有一點本地化問題。 我有一個應用程序,用戶可以選擇使用除設備當前語言之外的其他默認語言。 例如,居住在德國並且手機設置爲「德語」的法國用戶可能希望以法語使用我的應用程序(出於各種原因),但不要使用法語設置其手機的默認語言。android如何正確設置應用程序的默認語言,即使在關閉設備後也是如此
我的應用程序只有一個活動,我加載和卸載一些視圖。 這是一個非常簡單的應用程序,但內容很大(文本和圖像)。
要做到這一點,我使用下面的代碼。
它運作良好,但也存在一些問題:
當用戶選擇了一種新的語言與相應的按鈕,並重新啓動應用程序(或者,如果我強迫應用程序來完成().. 。):只有第一個視圖使用新的語言。下一個視圖仍然設置爲以前的語言。
如果用戶選擇關閉他的設備,同樣的問題:只有活動的第一個視圖設置爲選擇的語言(該變量從首選項中讀取)。
但是,如果用戶選擇第二次重新啓動應用程序,則所有視圖和子視圖都會正確設置爲新語言。
另外,如果用戶之前已重新啓動應用至少一次,則每次語言更改都已成功完成。無需第二次重新啓動應用程序。
那麼,有沒有一種方法來應用
的第一重新開張後正確設置新的語言
立即如果用戶之前已經轉向和他的設備上
任何幫助將不勝感激。 這裏是我使用的代碼(簡化):
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();
}