我有一个要求,当用户点击荷兰语时,所有活动的语言必须是荷兰语,如果是英语,那么它应该是英语。我有以下代码。我只能为一个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());
}
}
}
答案 0 :(得分:1)
您可以在全局范围内更可行地进行操作,而不是手动更改每个文本或为每种语言单独编写Activity
。有关如何请参阅以下链接。
Supporting Different Languages
您必须为每种语言创建单独的values
文件夹,并在那里提及您的字符串资源。并在用户点击按钮时更改您的应用。 Android非常聪明地为当前本地语言找到适当的资源(值)文件夹。如果文件夹不可用,则从默认资源文件夹加载资源。