macOS

如何用Swift开发多语言macOS程序?

2017-08-27  本文已影响27人  Anricx

本文开发环境说明

KEY VALUE
Xcode 8.3.3
Swift 3.0
macOS 10.12.6

在macOS中的国际化总体可分为两部分:

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添加需要国际化的语言:

1.4.jpg

然后这里需要用到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"; 
  1. .strings中重复的key会导致只取第一个匹配。
  2. 格式key = value ;最后的冒号必须写全。
上一篇下一篇

猜你喜欢

热点阅读