实现 iOS App 内语言切换

问题描述

App 支持国际化之后,在用户切换手机系统 Settings 里的 Language 时,App就会切换成对应的语言(前提是做过该语言国际化)。如果在 App 内部实现切换语言,应该怎么做呢?

需求分析

要实现 App 内语言切换,可能思路总共两种:

非入侵方式(暂不支持)

因为 App 开发的过程中可能会引入各种的 SDK,每个 SDK 可能都会有自身的国际化资源,那么只要要求 所有 SDK 的厂商都提供一个统一的接口来实现自家 SDK 的语言切换就行,但是这个可能性基本上很渺茫,没人能要求所有的厂商这么做,除非苹果这么要求。

入侵方式(支持)

修改系统代码的执行逻辑,原始的切换语言是由 iOS 系统内部决定到底读取哪个资源包下的 .strings 文件,如果通过 runtime 的方式,我们可以修改读取资源包 .strings 文件的逻辑,让系统读取我们指定的资源包,那么就可以让所有的 SDK 包括 App 本身都支持内部切换语言。

解决方案中的 Demo 使用的就是这个思路,需要说明的是使用这种方式需要把整个 UI 堆栈给重建,然后系统才会读取指定的资源包,就实现了语言的切换,微信切换语言有个页面切换的动画,也是这个原因。

解决方案:Demo

我们在 Demo 中作了简单实现,详细参考 Demo 代码。

注:该 Demo 使用 pod 管理

RCIMKitDemo内置多语言切换.zip (275.1 KB)