Android 多语言切换,适配7.0以上(8.0)

最近公司项目也开始做国际版本,正好我来负责适配,刚开始以为就是简单的新增几套词条资源,更改一下app的语言环境,

然而测试的时候发现,问题太多了,,,,,

百度 Google搜了很多,借鉴了很多适配的方案,目前为止,总算是稳定了很多,记录一下:

1.首先是首次安装获取 手机系统语言,并且给 app 环境也保存个 语言环境,之后 app 的语言就和 手机系统的 没关系了

2.之后每次通过按钮切换语言,保存本地,并且更新页面

3.每次切换语言的时候,通知服务器,用户修改了语言环境,接下来的操作,就是新的语言了

4.我们项目中做了几处地方的修改:(这点不重要)

       主动通知服务器 用户更改过后的语言环境,

        修改语言之后 公共请求头携带新语言参数(首次安装是按手机系统环境走的)

     设置页面 切换语言之后,重建页面,更新语言,并且页面仍保留在当前页面;

正文:

写的很混乱,凑合着理解吧,尽量写的清楚点。。

更新一下:适配8.0

8.0网搜一下 ,语言的初始化和之前的不一样,需要返回个context。

上新一下utils的最新代码;

资源文件 :简写的values 文件夹,如果写成 values-zh-rCN等,5.0 、6.0的手机 有时候会切换失败 语言混乱,debug 模式下,发现引用的资源文件是 默认文件夹下的,改成简写的 就显示正常了。

context引用:util 方法  建议就传当前activity的 context 就可以了。   一个是全局工具类对context的引用,

代码中 对string资源文件的引用,使用 context.getResources().getString()或者getResources().getString() 或者getString()

避免使用全局缓存的context,如果使用 初始化时 application 传给某个全局类的context 可能会出现语言混乱。

哦,这里推荐一篇大佬写的文章,建议看一下了解的深一点

https://mp.weixin.qq.com/s/A27dvFV3glX26Ur0WsdJ9g

测试中发现,通过 下面 getAppLocale()获取到的local,7.0以上版本  华为P20,一加 等 偶尔 出现混乱,锤子 坚果pro 从始至终就没出现过混乱,但是 7.0 以下的 努比亚  小米 三星 大概率出现切换失败,特别是 activity  嵌套 fragment 特别频繁,个别页面切换OK。

/**
 * 获取系统local
 * @return
 */
public static Locale getSystemLocale() {
    Locale locale = Resources.getSystem().getConfiguration().locale;
    Log.d(TAG ,"getLanguage : " + Locale.getDefault().getLanguage());
    return locale;
}

/**
 * 获取locale
 * @return Locale对象
 */
public static Locale getAppLocale() {
    Locale locale;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        locale = LocaleList.getDefault().get(0);
    } else {
        locale = Locale.getDefault();
    }
    Log.i(TAG, locale.getLanguage());

    return locale;
}


/**
 * 设置语言 ,网上大部分都是用的这个方法更新的

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值