android多语言插件,Android 7.0多语言适配,填坑日记(附多语言插件)
背景
最近项目在适配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
既然看到这了,不如给个..诶别走啊,给个赞啊
android多语言插件,Android 7.0多语言适配,填坑日记(附多语言插件)相关推荐
- c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...
C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...
- 数据仓库有坑怎么办,如何从0到1来填坑
|0x00 什么是数据仓库的坑 "填坑"是一个新人刚加入团队,或者是接手一个新业务,所以经常需要面对的事情. "坑"的出现,与历史业务的发展,密切相关.通常体现 ...
- kylin4.0.1安装与填坑
kylin4.0.1安装 解压安装包 将hdfs-site.xml,core-site.xml,hive-site.xml,spark-defaults.conf文件添加到/$KYLIN_HOME/c ...
- NW.JS填坑指南(解决Flash插件、视频播放等故障)
目录 NW.JS填坑指南 NW.js是什么? NW.js 和 electron的选择 开发工具IDE 下载nwjs 版本信息 简单的实例 改图标 改合成exe的图标 改图标第二种方案是 播放不了视频 ...
- 0基础学会 守护进程(内附C语言源码)
1.当父进程创建子进程的时候,默认子进程与父进程同属一个进程组,可以用kill -SIGKILL -进程组id(负数)来将整个进程组的id全部杀死. 2.组长进程不能创建会话. 3.setsid 函数 ...
- 0基础学会 端口复用(内附C语言源码)
一.端口复用最常用的用途是: 1.防止服务器重启时之前绑定的端口还未释放: 2.程序突然退出而系统没有释放端口 二.相关API #include <sys/types.h> #includ ...
- 滑动平均滤波c语言_11种经典软件滤波算法及其波形效果图(附C语言程序)
(后页附带C语言程序) 注意注意注意:(图像中红线都是经过滤波的)1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A) 每次检测到新值时判断: 如果 ...
- 弦截法c语言程序,The Secant Method(正割法、弦截法) 附C语言代码
弦截法是一种求方程根的基该方法,在计算机编程中经常使用. 他的思路是这种:任取两个数x1.x2,求得相应的函数值f(x1).f(x2).假设两函数值同号,则又一次取数.直到这两个函数值异号为止. 连接 ...
- android gradle proguard,Android Gradle插件2.2.0 ProGuard开始保留内部类
在将Android Studio更新为2.2版并将Android Gradle插件更新为2.2.0之后,在构建发行版apk时会有很多警告,例如: Error:warning: Ignoring Inn ...
最新文章
- 世界经济增速统一放缓,网络拓扑发现统一增速
- 单点登录之SessionExpireFilter重置session有效期
- fork join框架_Java中的Fork / Join框架的简要概述
- 大数据技术之 Kafka (第 1 章 Kafka 概述)
- java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下
- 人工智能python基础知识_AI 人工智能基础知识-习题
- iOS新的旅程之Swift语言的学习
- OCJP考试习题(1z0-808)答案+解析
- mysql 2000安装教程_Win10 64位安装个人版SQL2000图文教程
- JS基础知识思维导图
- 计算机在档案管理出现的问题,浅议档案管理中存在的问题及解决措施_档案管理员资格证...
- VMware Workstation 虚拟机安装
- U盘文件夹为空恢复方法,恢复U盘的空白文件夹
- 坚持学下去!转行程序员的2020年度总结
- 曾“须知少时凌云志,曾许人间第一流”,却10平米不到屋子像极了你小时候的“梦想”
- (十四)商品详情页实现
- 标注、注记、图形文本
- Js 显示 服务器 目录,js获得服务器目录
- weblogic10.3.6升级补丁时间慢的问题
- 计算机高中竞赛自主招生,自主招生必备常识:高校认可的各类竞赛
热门文章
- 全国计算机考试考ms还是wps,计算机wps和ms哪个简单?计算机一级office考试技巧有什么?...
- Android前台服务讲解二之自定义通知视图(RemoteViews)及数据UI更新
- Android excludeFromRecents属性 隐藏任务栏中的APP
- 画板(DrawBoard)
- 计算机管理器里不显示用户,电脑Administrator用户帐户不显示的解决方法
- 同样line-height下ios和Android显示不一致的问题
- 区块链和区块链联盟_您可能对区块链有误解。 让我来帮助您修复它们。
- BMP位图转为RGB三通道图
- centos8上安装MP-SPDZ
- Python极简方法生成Zip文件