我必须为英语和阿拉伯语用户本地化一个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);
}
});
}}
答案 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()方法或`更改文本。 只需使用上面的代码单击相应的按钮,即可自动更改文本。