本文開發(fā)環(huán)境說明
KEY | VALUE |
---|---|
Xcode | 8.3.3 |
Swift | 3.0 |
macOS | 10.12.6 |
在macOS中的國際化總體可分為兩部分:
- Storyboard國際化
- 代碼字符串國際化
I. Storyboard國際化
選中需要國際化的Storyboard并打開File inspector
如下圖:
勾選English項(xiàng)目將自動(dòng)創(chuàng)建在工程目錄下創(chuàng)建
en.lproj
文件夾,并自動(dòng)導(dǎo)出當(dāng)前Storyboard對(duì)應(yīng)名稱.strings
文件,這里是Main.strings
文件,內(nèi)容如下:
...
/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "Mhl-qE-EK5"; */
"Mhl-qE-EK5.title" = "Label";
...
系統(tǒng)將自動(dòng)為所有控件文本顯示屬性分配國際化字符串鍵值企量,例如這里的Mhl-qE-EK5
,所以這個(gè)控件的title
屬性就可以各個(gè)語言獨(dú)立配置亡电。
故我們可也創(chuàng)建中文翻譯.strings
文件如下圖:
類似的方法按照你項(xiàng)目所需做好各種語言的翻譯届巩,軟件運(yùn)行時(shí)便會(huì)根據(jù)當(dāng)前用戶環(huán)境的首選語言對(duì)界面顯示語言進(jìn)行自動(dòng)設(shè)置。
II. 代碼字符串國際化
首選在工程中新建國際化需要用到的資源文件Localizable.strings
份乒,并在File inspector
點(diǎn)擊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
代碼中通過調(diào)用方法完成自動(dòng)讀取需要顯示語言字符串:
self.label.stringValue = NSLocalizedString("message.input.empty", comment: "EMPTY_INPUT")
系統(tǒng)將默認(rèn)查找Localizable.strings
文件中message.input.empty
對(duì)應(yīng)的字符串并返回恕汇,否則默認(rèn)顯示key
。
X. 一些說明
X.I Xcode工程文件管理
Xcode自動(dòng)將工程中的.strings
文件按照語言放在對(duì)應(yīng)語言的文件夾下統(tǒng)一管理:
X.II .strings格式
"key" = "value";
-
.strings
中重復(fù)的key
會(huì)導(dǎo)致只取第一個(gè)匹配或辖。 - 格式
key = value ;
最后的冒號(hào)必須寫全瘾英。