- 在项目文件中设置支持国际化
选中 `PROJECT` -> `INFO`, 可以看到设置国际化(localizations)的选项。如下图:
点击下面的加号,可以选择需要国际化的语言支持。
点击 `Finish` , 则新建成功。从上图也可以看出,已存在的资源文件,会咨询从哪一个已存的资源数据复制一份。
这里的storyboard有两种选项,一个是只复制它的文字资源(localizable strings),点击还可以新建一个完全一样的storyboard。
新建之后,我们的目录会多出一个对应的资源文件目录。
它里面存储着国际化的字符串(.strings)文件和storyboard文件。
- 文字的国际化
文字的国际化主要通过API `Bundle` (类) 的方法 `localizedString(forKey:value:table:)` 来实现。它主要负责读取国际化文件,并按照系统的 `语言(除了语言,还有区域)` 配置,来获取当前的国际化文字。
我们按照key-value的形式,在`.strings`文件中写入要国际化的文本后,可以通过这个api读取当前国际化后的文字。
- plist的国际化
plist的国际化主要分为几个步骤。
- 生成对应的国际化文件。这个文件名必须是 `InfoPlist`, 类型为`.strings`。
- 显示plist文件的key值。按照这个key值,在 `InfoPlist` 分别进行配置。(如何显示plist的key值,网上有相当多的资料,可以查阅)。
- 系统语言和区域对国际化的影响
我在做国际化的时候遇到一个问题。当我对韩语进行国际化时,选择了.ko ;这是如果系统的语言配置为韩语,区域配置为除 south/north korean 以外的区域时,显示正常。
但是,当我把区域选择会 north korean时,系统显示的dialog(比如定位弹出的alert等),在plist国际化后依然显示base文件的内容。
这是因为选择区域后,如果区域为支持该语言的子集,则需要建立新的国际化文件。如下图:
由此可见,iOS对国际化的支持,不仅仅要以语言来区分,还会参考当前的系统设置的区域值。