我可以通过点击按钮本地化我的整个Android应用程序

时间:2014-06-03 07:35:25

标签: java android

我必须为英语和阿拉伯语用户本地化一个Android项目。 从下一个链接我获得执行此任务的代码

programmatically-change-language

我的activity_main.xml包含两个按钮英文按钮,用于更改英文用户的应用程序文本,  和阿拉伯语按钮,用于更改阿拉伯语用户的应用程序文本。

在我的activity_main.xml上有按钮文本,按下英语或阿拉伯语按钮后,从语言转换为另一种语言。

我的问题

如何在其他活动中转换按钮的文字? 如果我尝试通过 updateTexts()方法更新它们,我会收到错误: - 不幸的是应用已停止(因为他们的活动没有开始)。

MainActivity.java

public class MainActivity extends Activity
    {
    private Button English,Arabic;  
    private Locale myLocale;
    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();
    }

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 loadLocale()
{
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
    String language = prefs.getString(langPref, "");
    changeLang(language);
}

private void updateTexts()
{

 English.setText(R.string.English);
 Arabic.setText(R.string.Arabic);

}
 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.English= (Button)findViewById(R.id.English);
    this.Arabic = (Button)findViewById(R.id.Arabic);

 Button  english = (Button) findViewById(R.id.English);
 english.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
  String lang = "en";
 switch (v.getId()) {
 case R.id.English:
 lang = "en";
 break;
 case R.id.Arabic:
 lang = "ar";
 break;
 default:
 break;  
 }
 changeLang(lang);
 }
 });
 Button  Arabic= (Button) findViewById(R.id.Arabic);
 english.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
 String lang = "ar";
 switch (v.getId()) {
 case R.id.English:
lang = "en";
break;
case R.id.Arabic:
lang = "ar";
break;
default:
break;  
}
changeLang(lang);
}  
});
}}

2 个答案:

答案 0 :(得分:0)

尝试以下代码:

Locale locale = new Locale("en_US"); 
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getApplicationContext().getResources().updateConfiguration(config, null);

在SharedPreferences中保存区域设置:

/*
  SETTINGS_NAME - string variable or constant
  LANG_SETTINGS - lang settings identificator
  lang - language, en_US for example 
 */
SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor = editor.putString(LANG_SETTINGS, lang);
editor.commit();

加载SharedPreferences:

SharedPreferences preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
String lang = preferences.getString(LANG_SETTING, "")

答案 1 :(得分:0)

我找到了解决问题的方法。 不需要updateTexts()方法或`更改文本。 只需使用上面的代码单击相应的按钮,即可自动更改文本。