本文首发于个人博客
前言
- 我们日常使用App中,只有中文就够了,然而如果我们的App是面向国际化的,那么多语言就必不可少。本文整理了在iOS中多语言的实现。
 
准备工作
添加支持的语言
- 选择工程,在info下面的
Localizations中,点击加号按钮,添加支持的语言 
建立strings文件
- 方法1.选择一个
storyboard,例如默认的Main.storyboard,在Localization栏中勾选支持的语言。系统就会生成对应的文件。 - 方法2.我们直接新建
strings资源文件。在该文件的File Inspecter的Localization栏中勾选支持的语言。 
准备对应文案
- 例如在
Localizable.strings(English)中, 
1  | "消息" = "Messages";  | 
实现
- 思路:
- 偏好设置中存储我们设置的语言,默认是简体中文
 - 当我们切换多语言的时候,更改偏好设置中存储的语言
 - 显示的时候,传入key。
 - 如果设置了其他语言,就根据对应的bundle中的key取出对应value来显示
 
 
切换多语言的实现
定义宏
- 定义多语言的宏,如下,定义了三种宏,分别是简体中文,繁体中文,英文,韩文
 
1  | 
定义偏好设置的文件名称
1  | 
设置多语言
1  | /// 设置多语言  | 
使用
1  | 
  | 
具体实现如下,先偏好设置存储的当前语言获取对应bundle,然后拿到这个bundle之后,根据key找到对应的值。
1  | // 根据语言名获取bundle  | 
NSLocalizedString
NSLocalizedString是一个定义在NSBundle.h中的宏,用途是寻找当前系统语言对应的Localizable.strings文件中的某个key的值。第一个参数是
key的名字,第二个参数是对这个“键值对”的注释,在用genstrings工具生成Loclizable.strings文件时会自动加上去。例如上面代码中的HelloWord就是注释。
NSLocalizedString系列的四个宏,其实最终都是调用了[bundle localizedStringForKey:(key) value:(val) table:(tbl)]。根据我们的自定义程度不同可以选择不同的宏。
1  | #define NSLocalizedString(key, comment) \  | 
上面基本就是实现一个可控的多语言版本的实现过程。