Java 我可以通过点击按钮来本地化我的整个android应用程序吗
我必须为英语和阿拉伯语用户本地化一个android项目。 从下一个链接中,我得到了执行此任务的代码 My activity_main.xml包含两个按钮英语按钮,用于为英语用户更改我的应用程序文本, 和阿拉伯语按钮,用于为阿拉伯语用户更改我的应用程序文本 在我的activity_main.xml上,有一些按钮的文本,在按下英语或阿拉伯语按钮后,这些按钮会从该语言转换为另一种语言 我的问题在这里 如何在其他活动中转换按钮的文本? 如果我试图通过updateTexts()方法更新它们,我将得到错误:- 不幸的是,应用程序已停止(因为他们的活动未启动) MainActivity.javaJava 我可以通过点击按钮来本地化我的整个android应用程序吗,java,android,Java,Android,我必须为英语和阿拉伯语用户本地化一个android项目。 从下一个链接中,我得到了执行此任务的代码 My activity_main.xml包含两个按钮英语按钮,用于为英语用户更改我的应用程序文本, 和阿拉伯语按钮,用于为阿拉伯语用户更改我的应用程序文本 在我的activity_main.xml上,有一些按钮的文本,在按下英语或阿拉伯语按钮后,这些按钮会从该语言转换为另一种语言 我的问题在这里 如何在其他活动中转换按钮的文本? 如果我试图通过updateTexts()方法更新它们,我将得到错误
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);
}
});
}}
请尝试以下代码:
Locale locale = new Locale("en_US");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getApplicationContext().getResources().updateConfiguration(config, null);
在SharedReferences中保存区域设置:
/*
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 preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
String lang = preferences.getString(LANG_SETTING, "")
加载共享引用:
/*
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 preferences = getSharedPreferences(SETTINGS_NAME, MODE_PRIVATE);
String lang = preferences.getString(LANG_SETTING, "")
我已经找到了解决我问题的办法。 不需要updateTexts()方法或“已更改的文本”。
只需使用上面的“我的代码”单击相应的按钮,文本就会自动更改 按钮的文本也可以从为locale.getApplicationContext().getResources().updateConfiguration(config,null)配置的string.xml中获取;此代码不起作用,可能是如果我使用上下文它会起作用,但我如何使用上下文。如果我尝试新建MainActivity().getApplicationContext().getResources().updateConfiguration(配置,null),则您的活动为context;应用程序已停止您是否在活动中使用此方法?您是否使用了正确的语言代码?