如何用Swift开发多语言macOS程序?
2017-08-27 本文已影响27人
Anricx
本文开发环境说明
KEY | VALUE |
---|---|
Xcode | 8.3.3 |
Swift | 3.0 |
macOS | 10.12.6 |
在macOS中的国际化总体可分为两部分:
- Storyboard国际化
- 代码字符串国际化
I. Storyboard国际化
选中需要国际化的Storyboard并打开File inspector
如下图:
勾选English项目将自动创建在工程目录下创建
en.lproj
文件夹,并自动导出当前Storyboard对应名称.strings
文件,这里是Main.strings
文件,内容如下:
...
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "Mhl-qE-EK5"; */
"Mhl-qE-EK5.title" = "Label";
...
系统将自动为所有控件文本显示属性分配国际化字符串键值,例如这里的Mhl-qE-EK5
,所以这个控件的title
属性就可以各个语言独立配置。
故我们可也创建中文翻译.strings
文件如下图:
类似的方法按照你项目所需做好各种语言的翻译,软件运行时便会根据当前用户环境的首选语言对界面显示语言进行自动设置。
II. 代码字符串国际化
首选在工程中新建国际化需要用到的资源文件Localizable.strings
,并在File inspector
点击Localization添加需要国际化的语言:
然后这里需要用到Foundation中提供的NSLocalizedString
方法:
/**
* Returns a localized string, using the main bundle if one is not specified.
*
* SDKs
* iOS 10.0+
* macOS 10.12+
* tvOS 10.0+
* watchOS 3.0+
*/
func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String
代码中通过调用方法完成自动读取需要显示语言字符串:
self.label.stringValue = NSLocalizedString("message.input.empty", comment: "EMPTY_INPUT")
系统将默认查找Localizable.strings
文件中message.input.empty
对应的字符串并返回,否则默认显示key
。
X. 一些说明
X.I Xcode工程文件管理
Xcode自动将工程中的.strings
文件按照语言放在对应语言的文件夹下统一管理:
X.II .strings格式
"key" = "value";
-
.strings
中重复的key
会导致只取第一个匹配。 - 格式
key = value ;
最后的冒号必须写全。