一、应用对多语言支持的实现
1、所谓的多语言的实现,是指同一个应用界面能支持多种语言的显示,供不同语言的人使用。也就是我们应用内显示的字符串都要有不同语言的多个备份,共系统根据需要调用。
要实现这个功能,首先的一点是不能把要显示的字符串写死在代码里,而是应该写到对应的配置文件中,也就是res目录下的strings.xml中。
2、根据需求为每种要支持的语言创建一份对应的strings.xml。
1)
2) 在打开的对话框中填写文件名,选择locale,并选择要支持的语言和地区。
这样,应用中显示的每一个字符串在上述方法得到的各个strings.xml文件中都需要有一个备份(当然,语言的内容要更改为对应语言)。
3、至此,对多语言的支持就完成了。只要设备设定的语言在我们支持的语言当中,系统就会自动调用对应的strings.xml中的内容进行显示。
二、应用内语言切换的实现
图1
图2
如上图,图1是应用的登录界面,点击右上角的“语言”,就可以跳转到图2语言切换页面。
在图2中选择一种语言,应用就会显示为对应语言的版本。
切换语言的关键代码如下:
1、
Locale locale = new Locale("zh");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Intent intent = new Intent();
intent.setClass(Language_set.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity,all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.
startActivity(intent);
上面那段灰色的英文解释的意思是:设置为该flag后,如果要启动的activity在栈中已经存在,那么不会创建新的activity而是将栈中该activity上方的所有activity出栈。这样做的目的是使所有的activity都显示为当前设定的语言。
当然至此只能是这次使用过程中语言设定成功。如果想应用下一次启动时还使用当前设置的语言类型就要将当前语言设置保存起来,在下次打开应用时进行读取。
保存很简单就不写了。
在启动activity中进行读取并设置:
String filename="LoginDataStore";
String field="Language";
String lang=ForDataStoreAndRead.getSharePreString(FinishiActivity.this,filename,field);
if (lang.equals("0"))
lang="zh";
switchLanguage(lang);
protected void switchLanguage(String language) {//shezhiyingyong yuyan de leixing
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
switch (language)
{
case "en":
config.locale = Locale.ENGLISH;
resources.updateConfiguration(config, dm);
break;
case "zh":
config.locale = Locale.SIMPLIFIED_CHINESE;
resources.updateConfiguration(config, dm);
break;
default:
config.locale = Locale.SIMPLIFIED_CHINESE;
resources.updateConfiguration(config, dm);
break;
}
}
|