大部分的 App 都會支援多國語系 (Localization)。在 iOS 上實現 Localization 很簡單。我們不需要自己做語系檔,因為 Xcode 會幫我們產生語系檔。填好翻譯的字串後,匯入 Xcode 就可以了。本章就來介紹如何用 Xcode 實現 Localization。
Table of Contents
建立專案
首先我們先建立一個簡單的 App。在這 App 中,點擊 Click Me 按鈕後,下面的 … 就會換成 Hello。接下來我們會讓 Click Me 和 Hello 支援中文。

class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBAction func onClick(_ sender: Any) {
label.text = "Hello"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}新增 Xcode 中文語系
一般專案建立後,預設是英文語系。我們來給它新增中文語系。

勾選要支援中文語系的檔案。請勾選 Main.storyboard,因為 Click Me 按鈕在裡面。

新增好後,專案中的 Localizations 下面多了 Chinese, Traditional。另外 Main.storyboard 下面有多出 Main.strings,而且旁邊有註明是中文語系。
這個 Main.strings 就是 Main.storyboard 的中文語系檔。不過我們不會直接去新增中文翻譯在這裡面,因為 Xcode 提供更便利的方法。我們將在下面介紹 .Xliff。

NSLocalizedString
NSLocalizedString 會根據目前 App 的語系,傳回相對應語系的字串。所以在程式中的字串,都要透過 NSLocalizedString 來取得。我們將修改成以下的程式。
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBAction func onClick(_ sender: Any) {
label.text = NSLocalizedString("Hello", comment: "Shown by click me")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}Xliff 檔案
接下來,我們要加上中文字串。首先匯出語系檔。匯出後,在匯出的資料夾裡面找 .xliff 檔案。我們現在有英文和中文語系,所以你會找到 en.xliff 和 zh-Hant.xliff。因為我們是要加入中文,所以就看 zh-Hant.xliff。

zh-Hant.xliff是 XML 格式的檔案。每個需要翻譯的字串都有一對 <trans-unit> 包起來。<source> 是英文語系的,而 <target> 就是相對應的中文語系。另外 NSLocalizedString 的 comment 參數的值會填入 <note>。
<trans-unit id="PeQ-rk-iei.normalTitle" xml:space="preserve">
<source>Click Me</source>
<target>Click Me</target>
<note>Class = "UIButton"; normalTitle = "Click Me"; ObjectID = "PeQ-rk-iei";</note>
</trans-unit>
<trans-unit id="Hello" xml:space="preserve">
<source>Hello</source>
<target>Hello</target>
<note>Shown by click me</note>
</trans-unit>將 <target> 替換成中文。
<trans-unit id="PeQ-rk-iei.normalTitle" xml:space="preserve">
<source>Click Me</source>
<target>點我 </target>
<note>Class = "UIButton"; normalTitle = "Click Me"; ObjectID = "PeQ-rk-iei";</note>
</trans-unit>
<trans-unit id="Hello" xml:space="preserve">
<source>Hello</source>
<target>哈囉</target>
<note>Shown by click me</note>
</trans-unit>存檔後,我們匯入 zh-Hant.xcloc 資料夾。匯入之後,專案下面會多一個 Localizable.strings 的檔案。NSLocalizedString 就是會透過這檔案找出翻譯字串。

當要翻譯的字串很多時,直接編輯 .xliff 檔會變得很混亂。有很多免費的線上 Xliff 編輯器可以用。Mac App 的話, Xliff Editor 是不錯的選擇。
預覽 Storyboard
當我們匯入中文語系檔後,我們可以直接在 Storyboard 上預覽中文語系。點擊右上角的 Adjust Editor Options -> Preview。

在預覽畫面的右下方,你可以切換語系。

執行 App
當程式在模擬器上執行的時候,預設是使用英文語系。我們可以讓 App 用中文語系執行,而不用去改模擬器的系統語系。


結語
在 Xcode 中我們可以將字串寫在任何的地方。匯出語系檔時,這些字串就會被包含在裡面。我們不需要自己做語系檔。有很多的開發工具並沒有支援這樣的方式,那時後你就必須要自己手動建立語系檔。雖然它不難,但是在維護上卻是很繁瑣。









