一般Android多语言的切换,是通过在不同的语言环境下加载不同的资源。在不同的res/value-xx下放置不同语言的strings.xml实现字符的本地化,而这个value-xx目录的选择是根据Resource中的Configuration.Locale这项的值来决定的。这里说明除了一般切换外遇到的另外两种情况。
1.需求:不根据Android系统的Locale配置来改变应用的语言。这里我们可以直接调用Android开放的接口:
public static void alterSystemLanguage(Context context, String language) {
if (context == null || TextUtils.isEmpty(language)) {
return;
}
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
if (Locale.SIMPLIFIED_CHINESE.getLanguage().equals(language)) {
config.locale = Locale.SIMPLIFIED_CHINESE;
} else {
config.locale = new Locale(language);
}
resources.updateConfiguration(config, null);
}
2.需求:应用不随系统字体的改变而改变。这样也能避免当字体变大或者变小时对布局的影响,这里只需要重写getResources()方法即可。
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
目前对多语言的切换需求接触到的只有以上,有其他的大家可以提出来。