如何用Swift開發(fā)多語言macOS程序?

本文開發(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添加需要國際化的語言:

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

代碼中通過調(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"; 
  1. .strings中重復(fù)的key會(huì)導(dǎo)致只取第一個(gè)匹配或辖。
  2. 格式key = value ;最后的冒號(hào)必須寫全瘾英。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市颂暇,隨后出現(xiàn)的幾起案子缺谴,更是在濱河造成了極大的恐慌,老刑警劉巖耳鸯,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿蛔,死亡現(xiàn)場離奇詭異,居然都是意外死亡片拍,警方通過查閱死者的電腦和手機(jī)煌集,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捌省,“玉大人苫纤,你說我怎么就攤上這事「倩海” “怎么了卷拘?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祝高。 經(jīng)常有香客問我栗弟,道長,這世上最難降的妖魔是什么工闺? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任乍赫,我火速辦了婚禮,結(jié)果婚禮上陆蟆,老公的妹妹穿的比我還像新娘雷厂。我一直安慰自己,他們只是感情好叠殷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布改鲫。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪像棘。 梳的紋絲不亂的頭發(fā)上稽亏,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音缕题,去河邊找鬼截歉。 笑死糖儡,一個(gè)胖子當(dāng)著我的面吹牛线定,可吹牛的內(nèi)容都是我干的村斟。 我是一名探鬼主播徘键,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼懈万,長吁一口氣:“原來是場噩夢啊……” “哼榆鼠!你這毒婦竟也來了踊跟?” 一聲冷哼從身側(cè)響起阁危,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤群井,失蹤者是張志新(化名)和其女友劉穎状飞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體书斜,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诬辈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荐吉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焙糟。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖样屠,靈堂內(nèi)的尸體忽然破棺而出穿撮,到底是詐尸還是另有隱情,我是刑警寧澤痪欲,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布悦穿,位于F島的核電站,受9級(jí)特大地震影響业踢,放射性物質(zhì)發(fā)生泄漏栗柒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一知举、第九天 我趴在偏房一處隱蔽的房頂上張望瞬沦。 院中可真熱鬧,春花似錦雇锡、人聲如沸蛙埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叠赐,卻和暖如春欲账,著一層夾襖步出監(jiān)牢的瞬間屡江,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工赛不, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惩嘉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓踢故,卻偏偏與公主長得像文黎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殿较,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容