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