国际化多语言

官网介绍
NSLocalizedString 使用说明

一、国际化多语言的介绍

App 国际化多语言,就是在 App 里预定义了多种语言的Localizable.strings文件,根据设备的系统语言自动识别显示对应的语言,或者是在应用内设置不同的语言识别显示对应的语言。

1、随系统语言国际化
跟随系统语言进行改变。
实现时,需要Kill掉App重新打开才会有效果。

2、随应用内语言设置国际化
应用内部语言不跟随系统语言,由应用自己进行控制,通过配置多个语言文件,根据用户的选择动态获取不同文件夹下的语言文件,显示在界面上。
最后把用户选择的语言持久化到本地,下次运行时读取。
实现时,需要动态刷新所有页面,主要有三种方式实现。
(1) 重新载入rootViewController
这个方法应该是编码成本最低的方法了,只需要把原有的rootViewController移除并清空,然后重新设置一遍rootViewController就行了。但是这种实现方式会重新加载已经原来已经加载好的所有界面。
(2)语言改变发送通知
在用户切换语言的时候,发送一个通知,然后在各个界面接收通知,更新所有需要更新的文本即可。这种方法适合新建的项目,在代码编写之初就预留好更新文本的方法,收到通知后调用此方法就行。如果已经是一个已上线项目,则改动成本比较高,需要改动的地方比较多。
(3).h暴露一个更新文字的方法
在用户切换语言的时候,遍历所有已经加载的界面,调用更新文字的方法。这种实现也是比较适合新建的项目,在代码编写之初就预留好更新文本的方法。如果项目已上线,则改动成本较高。

微信和支付宝也实现了应用内切换语言实现国际化,但貌似微信和支付宝的实现方式不太一样。根据观察和判断,微信使用的是上面的第一种方法,也就是重新载入rootViewController的方法。因为微信切换完语言之后,迅速的切换到了根页面,又迅速的push到了设置界面,有一个界面跳跃的过程,而且原来所有的已经滑到底部的列表全部都重置到了最顶部。根据我推断,微信项目在编写之初也是没有考虑到后期国际化的需求,迫于过大的改动成本,只好使用第一种方法。而支付宝切换过程就比较完美,实现了无缝切换,和有可能是前期编码过程中就预留了更新文本的方法,后期直接调用就可以(不排除后期投入精力进行重构的可能)。

<

你可能感兴趣的:(iOS,开发编码收集,iOS,进阶/学习资源,国际化,多语言)