我的目标是在运行时将应用程序语言从英语更改为中文,有什么建议吗?
language_spinner = (Spinner)findViewById(R.id.settings_language_spinner);
language_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (pos == 1){
Toast.makeText(parent.getContext(),"You have selected English",Toast.LENGTH_SHORT).show();
setLocale("en");
}else if (pos == 2){
Toast.makeText(parent.getContext(),"You have selected Chinese",Toast.LENGTH_SHORT).show();
setLocale("zh");
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
if (!conf.locale.getLanguage().equals(lang)) {
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, SettingsActivity.class);
startActivity(refresh);
finish();
}
}
此代码适用于英语,但不适用于中文 请帮我找到解决方案..
答案 0 :(得分:0)
我可以告诉你如何实现这个:
第1步:为值目录中的所有文本生成字符串文件为string-ch
,ch是中文的代码。并在代码中获取getResources.getString(R.string.text_name);
的每个字符串,以便它可以在运行时使用英语或中文字符串值。
第2步:现在创建方法:
void changeLanguage(String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
第3步:如果您想根据设备语言更改应用程序的语言,请调用此方法来更改语言,然后您可以调用:
changeLanguage(Locale.getDefault().getLanguage());
答案 1 :(得分:0)
在Util类中创建下面的函数
public static void setLocale(Activity activity, String languageCode) {
Locale locale = new Locale(languageCode);
Locale.setDefault(locale);
Resources resources = activity.getResources();
Configuration config = resources.getConfiguration();
config.setLocale(locale);
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
在开始时从活动中调用此函数。可以在 Change app language programmatically in Android 页找到包含此代码段的原始帖子。