Android 内多语言切换实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 内多语言切换实现相关的知识,希望对你有一定的参考价值。

参考技术A 网上有很多安卓内多语言切换的文章,我也看了一些,很多都千篇一律,而且还是有问题,我就自己重新改了一下。整好分享给各位同学,废话不多说,我们正式开始

我们在点击切换语言的按钮时候弹窗dialog 然后用户可以选择 简体中文 英文 繁体中文 跟随系统 四种选项 ,这是我们基本的需求

首先我们要在资源文件res目录下面创建多语言的目录文件夹 values values-en values-zh-rTW values-TW 如图所示:

我们适配多语言的只需要在 values values-en values-zh-rTW 这个三个目录下面的string.xml文件里面写入对应的引用的文本即可

我们只需要这样配置就然后在布局的xml文件里面引用可以达到适配多语言的效果 :
具体引用:

切换的dialog实现这个我用原生的AlertDialog 你们自己可以自定义继承系统的Dialog来实现

这里的语言种类获取到的sta是重SharedPreferences 缓存里面获取到的因为需要
SharedPreferences 工具类:

我们在dialog点击事件里发送一个广播通知 用来触发刷新

然我们在baseActivity里面接收广播重启activity 来刷新多语言切换

关于Locale
实现多语言切换用到了Locale。Locale里很多常见国家和地区以及语言,如果我们做常见的语言,可以直接调用系统的,比如Locale.CHINESE。但是这次做的繁体中文的适配,略我坑一下。
繁体中文我们直接在Locale 属性里面传入 zh-rTW 但是切换没有生效 我翻了下源码只有TW的属性配置我就要修改了
问题是,我最开始直接这样写的:

到此我们说明下开头提到到为什么多出了 values-TW目录 是因为我发现在多语言切换更新 Configuration 中的 locale 属性 的时候翻开源码看到繁体中文(泛指港澳台并没有看到zh-rTW的属性配置)

所以目前的解决方案就是用values-TW来替代:

我这边目前是这样处理来兼容繁体中文切换不生效的做法 ,如果你有更好的方案 麻烦留言大家一起探讨。

android 内多语言的切换网上的文章也挺多的,基本都千篇一律 很多有纰漏 ,这边也是翻了一下源码勉强能够兼容繁体中文, 项目地址

Android:应用多语言切换,国际化实现

参考技术A 生成多种语言的string.xml,里面放置对应的语言,修改配置(Configuration),重启之后就会加载对应语言的string.xml。

1:在res目录下,生成对应的语言包,比如英语:

在res目录下生成了可看到生成了:

<string name="hello">你好</string>
英语:
<string name="hello">hello</string>
之后就可以使用getResource.getString(R.string.hello),这个字符串会加载相对应的配置的语言。
3:修改语言配置

修改语言配置后,需要重新启动进程,并且杀死进程。

1:有些手机是可以在设置里直接切换语言的,这个也就是Configuration改变。用户重新设置系统语言导致应用的语言也会重新设置。Configuration改变,如果在Manifest中不设置android:configChanges忽略掉配置改变,Activity会重新创建,那么我们就可以在Activity的onCreate中,重新修改语言配置。
2:切换语言后,退出应用,重新进来,你会发现又是系统设置的语言。所以需要在Application开启时,需要再次切换语言配置。

以上是关于Android 内多语言切换实现的主要内容,如果未能解决你的问题,请参考以下文章

Android app应用多语言切换功能实现

Android应用内切换语言

Android国际化多语言切换

Android 实现应用内语言切换(包括不重启应用方式)

Android:应用多语言切换,国际化实现

App多语言实现