文章结构:
前言
本地化是将一个 App 的语言文字转换成多种语言的过程,如:原来只支持一种语言的 App,经过本地化后,能够支持多种语言。本地化有助于让更多人使用你的 App,让 App 国际化。
本地化不只是单纯的翻译,它还包括以下内容:
- 日期和时间格式。不同地区的日期时间格式不一样。
- 文字的排版。如:有的语言是从右至左的阅读顺序。
- 界面排版优化。同样的词汇在不同语言下长短不一,在 App 界面上显示效果不一样,需要用 Auto Layout 进行适配。
- 代码的适配。当程序中需要根据语言文字进行分类、排序、搜索、解析等操作时,不同的语言需要有不同的处理方案。
- ......
由于本地化涵盖了大量的内容,完整的文档请参考:Internationalization and Localization Guide。
本文针对的情况是:
-
轻量级的本地化。需要本地化的内容较少,主要存在于:
- Storyboard(Main,LaunchScreen)等 UI 元素中;
- Info.plist 文件中;
- 代码里(较少)。
接下去将针对这三个方面进行讨论。
本地化
Storyboard
本地化的第一步:勾选 Use Base Internationalization
。如下图,在项目的 Info 页面底部:
然后在 Localizations 列表里添加需要本地化的语言。Xcode 项目的开发语言是 English,在这里添加的是 Chinese(Simplified)。添加时会提示勾选需要本地化的文件,可以勾选 Main.storyboard 和 LaunchScreen.storyboard。
之后在导航栏里可以发现 Main.storyboard 和 LaunchScreen.storyboard 里分别包含了两个文件:
Main.strings 里包含了从 Main.storyboard 中提取出的可本地化的元素,是一系列的键-值对和注释。在这个文件中,把需要本地化的内容进行翻译即可,如下:
本地化 storyboard 中的内容后,可以在 Assistant Editor 中预览本地化效果(打开 Assistant Editor 后,选择 Preview,在右下角可以选择模拟的语言):
Info.plist
Info.plist 中常常会包含有对 App 进行描述的文字。对于 Info.plist 的本地化,不要点击 Localize...
(Xcode8):
而应该在项目中 New File...
,新建一个 InfoPlist.strings 文件:
之后在该文件中对需要本地化的 Info.plist 条目进行配置,如修改 App 的名称:
CFBundleDisplayName = "TextEdit";
或者修改其他的键值:
这样在 App 运行时,会根据系统选择的语言读取相应 Info.plist 里的配置。
代码中的本地化(少量)
当代码中仅有少量内容需要本地化时,可以使用下面代码获取当前系统的语言,再根据不同语言使用相应的代码:
Objective-C:
NSString *languageID = [[NSBundle mainBundle] preferredLocalizations].firstObject;
Swift:
let languageID = Bundle.main.preferredLocalizations.first
使用以上方法基本上可以完成普通 App 的本地化,重度本地化请参考官方文档 Internationalization and Localization Guide。
附上一个已实现中英文本地化的 App 源码:ColorPicker,已上架 AppStore:链接。
我的Github:LinShiwei (Lin Shiwei) · GitHub
有任何疑问的话,欢迎在下方评论区讨论。