如何在Android中更改整个应用程序语言?

时间:2016-02-01 06:35:35

标签: android

我有一个要求,当用户点击荷兰语时,所有活动的语言必须是荷兰语,如果是英语,那么它应该是英语。我有以下代码。我只能为一个Activity更改语言,而不是整个应用程序。

当用户选择英语按钮时,下一个活动以英语显示。现在,当用户选择俄语时,该活动必须以俄语显示

public class MainActivity extends Activity implements OnClickListener{

private TextView txt_hello;
private Button btn_en, btn_ru, btn_fr, btn_de;
private Locale myLocale;    

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    this.txt_hello = (TextView)findViewById(R.id.txt_hello);
    this.btn_en = (Button)findViewById(R.id.btn_en);
    this.btn_ru = (Button)findViewById(R.id.btn_ru);
    this.btn_fr = (Button)findViewById(R.id.btn_fr);
    this.btn_de = (Button)findViewById(R.id.btn_de);

    this.btn_en.setOnClickListener(this);
    this.btn_ru.setOnClickListener(this);
    this.btn_fr.setOnClickListener(this);
    this.btn_de.setOnClickListener(this);

    loadLocale();
}

public void loadLocale()
{
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
    String language = prefs.getString(langPref, "");
    changeLang(language);
}

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

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

private void updateTexts()
{
    txt_hello.setText(R.string.hello_world);
    btn_en.setText(R.string.btn_en);
    btn_ru.setText(R.string.btn_ru);
    btn_fr.setText(R.string.btn_fr);
    btn_de.setText(R.string.btn_de);
}

@Override
public void onClick(View v) {
    String lang = "en";
    switch (v.getId()) {
    case R.id.btn_en:
        lang = "en";
        Intent english = new Intent(MainActivity.this, SamplePage.class);
        startActivity(english);
        break;
    case R.id.btn_ru:
        lang = "ru";
        Intent russia = new Intent(MainActivity.this, SamplePage_Russia.class);
        startActivity(russia);
        break;
    case R.id.btn_de:
        lang = "de";
        break;
    case R.id.btn_fr:   
        lang = "fr";
        break;          
    default:
        break;
    }
    changeLang(lang);
}

@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (myLocale != null){
        newConfig.locale = myLocale;
        Locale.setDefault(myLocale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}
}

1 个答案:

答案 0 :(得分:1)

您可以在全局范围内更可行地进行操作,而不是手动更改每个文本或为每种语言单独编写Activity。有关如何请参阅以下链接。

Supporting Different Languages

Localizing with Resources

您必须为每种语言创建单独的values文件夹,并在那里提及您的字符串资源。并在用户点击按钮时更改您的应用。 Android非常聪明地为当前本地语言找到适当的资源(值)文件夹。如果文件夹不可用,则从默认资源文件夹加载资源。