2015-09-27 62 views
1

如何更改默认的string.xml?我可以将我的应用更改为五种不同的语言,但是每当我关闭应用并重新打开它时。它回到默认英语。保存用户选择的语言,Android

是否有可能以某种方式更改默认文件夹“值”。例如,从默认为values-pt(葡萄牙语)的值(英语)。

任何帮助非常感谢!

回答

4

您可以使用以下

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(); 
    } 
+0

嗨Ganpat,我试过你的解决方案,它有点工作。主菜单和其他活动使用不同语言,但主要活动的按钮和文字浏览仍以英文显示。很奇怪。这就像应用程序以默认语言英语加载主要活动(textviews和按钮),然后将语言更改为用户选择的任何语言(葡萄牙语pt)。所以,其他一切都是葡萄牙语。 –

+0

我想我修好了,但不知道这是不是最好的方法。我把“loadLocale();”之前“super.onCreate(savedInstanceState);”谢谢您的帮助。 –

0

你可以写,然后从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()); 
+0

嗨安德鲁,我想保存就像你使用SharedPreferences显示我。但保存后,它会再次打开应用程序时自动选择新的默认语言。例如,如果我更改为葡萄牙语,当我重新打开应用程序时,所有字符串都会自动从values-pt,string.xml中检索到 –

+0

谢谢您的帮助。我已经用Ganpta的解决方案解决了我的问题。 –

2

你可以试试这个:

更改:

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()以加载用户保存的语言。