如何更改默認的string.xml?我可以將我的應用更改爲五種不同的語言,但是每當我關閉應用並重新打開它時。它回到默認英語。保存用戶選擇的語言,Android
是否有可能以某種方式更改默認文件夾「值」。例如,從默認爲values-pt(葡萄牙語)的值(英語)。
任何幫助非常感謝!
如何更改默認的string.xml?我可以將我的應用更改爲五種不同的語言,但是每當我關閉應用並重新打開它時。它回到默認英語。保存用戶選擇的語言,Android
是否有可能以某種方式更改默認文件夾「值」。例如,從默認爲values-pt(葡萄牙語)的值(英語)。
任何幫助非常感謝!
您可以使用以下
public void loadLocale() {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
String language = prefs.getString(langPref, "");
changeLang(language);
}
public void changeLang(String lang) {
if (lang.equalsIgnoreCase(""))
return;
myLocale = new Locale(lang);
saveLocale(lang);
Locale.setDefault(myLocale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = myLocale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
}
public void saveLocale(String lang) {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(langPref, lang);
editor.commit();
}
和的onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_change_language);
loadLocale();
}
你可以寫,然後從SharedPreferences
讀來管理用戶選擇的語言
爲了節省:
SharedPreferences shp = getSharedPreferences(
"com.example.yourapp.PREFERENCES",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = shp.edit();
editor.putString("USER_LANGUAGE", language);
editor.commit();
加載:
SharedPreferences shp = getSharedPreferences(
"com.example.yourapp.PREFERENCES",Context.MODE_PRIVATE);
String language = shp.getString("USER_LANGUAGE","en");
當你加載的語言,修改使用它的語言環境
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
嗨安德魯,我想保存就像你使用SharedPreferences顯示我。但保存後,它會再次打開應用程序時自動選擇新的默認語言。例如,如果我更改爲葡萄牙語,當我重新打開應用程序時,所有字符串都會自動從values-pt,string.xml中檢索到 –
謝謝您的幫助。我已經用Ganpta的解決方案解決了我的問題。 –
你可以試試這個:
更改:
public void changeLanguage(String language) {
locale = new Locale(language);
saveLocale(language);
Locale.setDefault(locale);
conf.locale = locale;
getBaseContext().getResources().updateConfiguration(conf, null);
updateText();
}
拯救:
public void saveLocale(String language) {
SharedPreferences sharedPreferences = getSharedPreferences("com.example.myapp.PREFERENCES", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("USER_LANGUAGE", language);
editor.commit();
}
要更新:
private void updateText() {
btn_chat.setText(R.string.live_chat);
}
加載:
public void LoadLanguage(){
SharedPreferences shp = getSharedPreferences(
"com.example.myapp.PREFERENCES",Context.MODE_PRIVATE);
String language = shp.getString("USER_LANGUAGE","");
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}
在MainActivity可以檢查應用程序使用默認語言:
language = getResources().getString(R.string.lang);
然後,如果所用的語言語言你想通過檢查語句,你應該執行updateText()
函數:
if (language.equals("zh")) {
btn_lang.setText(R.string.someName);
updateText();
}
不要忘記在MainActivity中執行LoadLanguage()
以加載用戶保存的語言。
嗨Ganpat,我試過你的解決方案,它有點工作。主菜單和其他活動使用不同語言,但主要活動的按鈕和文字瀏覽仍以英文顯示。很奇怪。這就像應用程序以默認語言英語加載主要活動(textviews和按鈕),然後將語言更改爲用戶選擇的任何語言(葡萄牙語pt)。所以,其他一切都是葡萄牙語。 –
我想我修好了,但不知道這是不是最好的方法。我把「loadLocale();」之前「super.onCreate(savedInstanceState);」謝謝您的幫助。 –