背景

最近项目在适配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多语言适配,填坑日记(附多语言插件)相关推荐

  1. c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...

    C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...

  2. 数据仓库有坑怎么办,如何从0到1来填坑

    |0x00 什么是数据仓库的坑 "填坑"是一个新人刚加入团队,或者是接手一个新业务,所以经常需要面对的事情. "坑"的出现,与历史业务的发展,密切相关.通常体现 ...

  3. kylin4.0.1安装与填坑

    kylin4.0.1安装 解压安装包 将hdfs-site.xml,core-site.xml,hive-site.xml,spark-defaults.conf文件添加到/$KYLIN_HOME/c ...

  4. NW.JS填坑指南(解决Flash插件、视频播放等故障)

    目录 NW.JS填坑指南 NW.js是什么? NW.js 和 electron的选择 开发工具IDE 下载nwjs 版本信息 简单的实例 改图标 改合成exe的图标 改图标第二种方案是 播放不了视频 ...

  5. 0基础学会 守护进程(内附C语言源码)

    1.当父进程创建子进程的时候,默认子进程与父进程同属一个进程组,可以用kill -SIGKILL -进程组id(负数)来将整个进程组的id全部杀死. 2.组长进程不能创建会话. 3.setsid 函数 ...

  6. 0基础学会 端口复用(内附C语言源码)

    一.端口复用最常用的用途是: 1.防止服务器重启时之前绑定的端口还未释放: 2.程序突然退出而系统没有释放端口 二.相关API #include <sys/types.h> #includ ...

  7. 滑动平均滤波c语言_11种经典软件滤波算法及其波形效果图(附C语言程序)

    (后页附带C语言程序) 注意注意注意:(图像中红线都是经过滤波的)1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A) 每次检测到新值时判断: 如果 ...

  8. 弦截法c语言程序,The Secant Method(正割法、弦截法) 附C语言代码

    弦截法是一种求方程根的基该方法,在计算机编程中经常使用. 他的思路是这种:任取两个数x1.x2,求得相应的函数值f(x1).f(x2).假设两函数值同号,则又一次取数.直到这两个函数值异号为止. 连接 ...

  9. android gradle proguard,Android Gradle插件2.2.0 ProGuard开始保留内部类

    在将Android Studio更新为2.2版并将Android Gradle插件更新为2.2.0之后,在构建发行版apk时会有很多警告,例如: Error:warning: Ignoring Inn ...

最新文章

  1. 世界经济增速统一放缓,网络拓扑发现统一增速
  2. 单点登录之SessionExpireFilter重置session有效期
  3. fork join框架_Java中的Fork / Join框架的简要概述
  4. 大数据技术之 Kafka (第 1 章 Kafka 概述)
  5. java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下
  6. 人工智能python基础知识_AI 人工智能基础知识-习题
  7. iOS新的旅程之Swift语言的学习
  8. OCJP考试习题(1z0-808)答案+解析
  9. mysql 2000安装教程_Win10 64位安装个人版SQL2000图文教程
  10. JS基础知识思维导图
  11. 计算机在档案管理出现的问题,浅议档案管理中存在的问题及解决措施_档案管理员资格证...
  12. VMware Workstation 虚拟机安装
  13. U盘文件夹为空恢复方法,恢复U盘的空白文件夹
  14. 坚持学下去!转行程序员的2020年度总结
  15. 曾“须知少时凌云志,曾许人间第一流”,却10平米不到屋子像极了你小时候的“梦想”
  16. (十四)商品详情页实现
  17. 标注、注记、图形文本
  18. Js 显示 服务器 目录,js获得服务器目录
  19. weblogic10.3.6升级补丁时间慢的问题
  20. 计算机高中竞赛自主招生,自主招生必备常识:高校认可的各类竞赛

热门文章

  1. 全国计算机考试考ms还是wps,计算机wps和ms哪个简单?计算机一级office考试技巧有什么?...
  2. Android前台服务讲解二之自定义通知视图(RemoteViews)及数据UI更新
  3. Android excludeFromRecents属性 隐藏任务栏中的APP
  4. 画板(DrawBoard)
  5. 计算机管理器里不显示用户,电脑Administrator用户帐户不显示的解决方法
  6. 同样line-height下ios和Android显示不一致的问题
  7. 区块链和区块链联盟_您可能对区块链有误解。 让我来帮助您修复它们。
  8. BMP位图转为RGB三通道图
  9. centos8上安装MP-SPDZ
  10. Python极简方法生成Zip文件