在开发过程中经常会遇到,app中的文字根据设置的语种进行切换。选择英语,app中的所有文字都要用英文显示,选择汉语,app中的文字都要用汉语显示。
我们都知道app中的文字都是写在values下的strings.xml中的,所以不同的语种要有相应的strings.xml文件。如下图所示。
这里是以美语,英语,汉语,汉语繁体为例。要是可以选择更多语种,value后面要怎么修改,可以百度。
注意所有的values-XXXXXX下的string.xml中<string>中的name的值一定要相同。name的值根据语种变化。
举个例子:
<string name="confirm">confirm</string> 美式英语 <string name="confirm">confirm</string> 英式英语 <string name="confirm">确认</string> 汉语 <string name="confirm">確認</string> 汉语(繁体)
接下来在相应的地方引用这些string。
那么怎么判断当前设置的语种,根据语种进行变化呢?
接下来的方法是根据系统设置的语种进行切换的
@Override
protected void onResume() {
super.onResume();
String lan = sp.getStringValueByKey(Constants.SP_KEY_lANGUAGE, "");
Locale locale = Locale.getDefault();
String language = locale.getCountry();
Log.i("language————————", language);
if (!language.equals("")) {
if (!lan.equals(language)) {
freshView();
}
}
showLanguage(language);
}
protected void showLanguage(String language) {
//设置应用语言类型
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
if (language.equals("CN")) {
config.locale = Locale.SIMPLIFIED_CHINESE;
} else if (language.equals("TW")) {
config.locale = Locale.TRADITIONAL_CHINESE;
} else {
config.locale = Locale.US;
}
resources.updateConfiguration(config, dm);
//保存设置语言的类型
sp.setStringValueByKey(Constants.SP_KEY_lANGUAGE, language);
}
private void freshView() {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}