最近因为项目要做国际化,所以正好研究了下实现方法,很简单,就一个工具类!
工具类
public class LanguageUtil {
/**
* 获取系统的locale
*/
public static Locale getSystemLocale() {
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else
locale = Resources.getSystem().getConfiguration().locale;
return locale;
}
/**
* 设置语言(核心方法)
*/
public static Context attachBaseContext(Context context) {
Resources resources = context.getResources();
Locale locale = getUserLanguageLocale();//建议使用本地存储的语言
Configuration configuration = resources.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(locale);
configuration.setLocales(new LocaleList(locale));
return context.createConfigurationContext(configuration);
} else {
configuration.setLocale(locale);
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return context;
}
}
/**
* 假装这里是本地存储的语言
*/
public static Locale getUserLanguageLocale() {
return Locale.ENGLISH;
}
}
如何使用
在Activity中的attachBaseContext()方法调用它,最好是写一个基类
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LanguageUtil.attachBaseContext(newBase));
}
建议
在用户选择语言后将Local保存在本地,下次直接使用本地Local,这样就不会随着系统切换语言或者应用重启而还原。
举例:
(英语) Locale.ENGLISH
(越南语) new Locale(“vi”, “”)