在我们自己的Android应用程序内,可以实现多语言切换的功能。
首先我们先了解多国语言文件夹命名方式
当然你也可以创建一些特定的文件夹,一般命名规则:values-xx。
好了,现在来看看具体实现吧(有不足的地方欢迎大家留言);我自己写了demo,源码托管在github上:LanguageDemo
先看demo的截图吧:
现在来看看具体实现吧:
在功能清单文件中对要进行切换MainAcitivity 进行配置:
android:launchMode="singleTop"
android:configChanges="locale|layoutDirection"
切换语言的关键代码:
/**
* 设置语言
*/
private void setLanguage(int index){
Log.d("setLanguage",""+index);
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources .getDisplayMetrics();
switch (index){
case 0:
//跟随系统
config.locale = Locale.getDefault();
break;
case 1:
//简体中文
config.locale = Locale.SIMPLIFIED_CHINESE;
break;
case 2:
//英文
config.locale = Locale.ENGLISH;
break;
case 3:
//德文
config.locale = Locale.GERMAN;
break;
case 4:
//法文
config.locale = Locale.FRENCH;
break;
case 5:
//其他语言 本地语言
config.locale = new Locale("xj");
break;
}
resources.updateConfiguration(config, dm);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().putString("local",config.locale.getLanguage()).commit();
startActivity(new Intent(this,MainActivity.class));
}
选择完语言后,必须要刷新或重启Activity,
@Override
public void onCreate() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String localconfig = sp.getString("local","");
Configuration config = getResources().getConfiguration();
DisplayMetrics metrics = getResources().getDisplayMetrics();
if(null!=localconfig&&!"".equals(localconfig)){
mlocale = new Locale(localconfig);
}else{
mlocale = Locale.getDefault();
}
config.locale = mlocale;
getResources().updateConfiguration(config, metrics);
}
这样进入或打开程序都可以应用之前用户的设置了;