android多语言插件,Android 7.0多语言适配,填坑日记(附多语言插件)
背景最近项目在适配7.0系统的时候发现一些问题,其中也有多语言适配的问题,就拿出来说说,记记笔记,填填坑。问题1因为刚接手项目不久,发现一些奇奇怪怪的bug总是让人头疼,最近发现了在华为荣耀7.0系统上App语言变为繁体,本来以为是荣耀7.0的bug,后来试了下其他的app没有这个问题,于是从app内部找问题,后来发现在android7.0 SDK中LocaleExtensions这个对象,在荣耀
背景
最近项目在适配7.0系统的时候发现一些问题,其中也有多语言适配的问题,就拿出来说说,记记笔记,填填坑。
问题1
因为刚接手项目不久,发现一些奇奇怪怪的bug总是让人头疼,最近发现了在华为荣耀7.0系统上App语言变为繁体,本来以为是荣耀7.0的bug,后来试了下其他的app没有这个问题,于是从app内部找问题,后来发现在android7.0 SDK中LocaleExtensions这个对象,在荣耀7.0系统上和7.0以下通过
Locale.getDefault().toString()
获取到的结果分别是
zh-CH#hans
zh-CH
所以当在荣耀7.0系统通过
Locale.getDefault().equals(Locale.SIMPLIFIED_CHINESE)
结果当然是false
问题2
在Android7.0及以上的系统,假设系统语言设置为简体中文(中国),繁体中文(香港),繁体中文(台湾),那么默认情况下通过LocleList.getDefault()获取到的语言列表为
[zh_CN_#Hans,zh_HK_#Hant,zh_TW_#Hant]
这时通过
getResources().getConfiguration().getLocales().get(0)
获取到的默认语言为简体中文,然后在App中设置了应用的语言为繁体中文(香港),那么获取到的语言列表将变为
[zh_HK_#Hant,zh_CN_#Hans,zh_HK_#Hant,zh_TW_#Hant]
这时再设置App的语言为跟随系统,结果获取到的语言列表仍然是
[zh_HK_#Hant,zh_CN_#Hans,zh_HK_#Hant,zh_TW_#Hant]
就是说用户手动设置了app的语言后,会在系统默认语言列表的头部增加一个语言,所以通过
getResources().getConfiguration().getLocales().get(0)
获取到的默认语言就是用户之前手动设置的那种语言,而不是系统默认的语言。
解决
问题一的解决方法是通过getLanguage(),getCountry()来判断
问题二的解决方法是先保存系统默认的LocalelList
下面直接贴上代码
/**
* Created by xieye on 2017/8/15.
*/
public class LanguageHelper {
public static final String SIMPLIFIED_CHINESE = "zh-CN";
public static final String TRADITIONAL_CHINESE = "zh-TW";
private static LanguageHelper lHelper;
private Locale mLocale;
private LocaleList mLocaleList;
private LanguageHelper() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mLocaleList = LocaleList.getDefault();
}
}
public static LanguageHelper getHelper() {
synchronized (LanguageHelper.class) {
if (lHelper == null) {
lHelper = new LanguageHelper();
}
}
return lHelper;
}
/**
* 由于7.0系统 多语言设置是由LocaleList处理
* 所以要针对7.0系统做适配
**/
public Locale getDefault() {
if (mLocale != null) {
return mLocale;
}
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (mLocaleList != null && mLocaleList.size() > 0) {
locale = mLocaleList.get(0);
} else {
mLocaleList = LocaleList.getDefault();
locale = GGBookApplication.getAppContext().getResources().getConfiguration().getLocales().get(0);
}
} else {
locale = GGBookApplication.getAppContext().getResources().getConfiguration().locale;
}
String language = locale.getLanguage() + "-" + locale.getCountry();
if (SIMPLIFIED_CHINESE.equals(language)) {
mLocale = Locale.SIMPLIFIED_CHINESE;
} else if (TRADITIONAL_CHINESE.equals(language)) {
mLocale = Locale.TRADITIONAL_CHINESE;
} else mLocale = Locale.getDefault();
return mLocale;
}
public void clear() {
mLocale = null;
}
}
随手丢个工具
Android Studio 翻译插件AndroidLocalize
File->Settings->Plugins->Browse Repositories,搜索AndroidLocalize,进行install安装,然后重启Android Studio
资源文件一定要是strings.xml
image
既然看到这了,不如给个..诶别走啊,给个赞啊
更多推荐
所有评论(0)