由於 iOS App 可以在全世界進行銷售,當要將 App 放上 App Store 時,一般都會將語言設定為英文,這樣不論美國、歐洲或其他國家,都可以使用你的 App,並且了解你的內容。但是針對亞洲國家,使用當地的語言是接受度最高的,例如台灣、香港等地使用繁體中文,中國使用簡體中文,日本使用日文,所以若是能針對特定國家使用當地的語言,除了提高 App 的親切度,相對也能提高 App 的下載數量。因此,本文將介紹如何將 NSString 轉換成多國語言的設定。
在 Xcode 中,多國語言的設定需要靠 Localizable.strings 來進行設定,但是不是直接產生一個 Localizable.strings 就可以使用。另外在使用上,不要變更 Localizable.strings 的名稱,必須保持 Localizable 這樣的名稱,才能讓程式抓到。首先開啟一個 View-Based Template 的專案。然後在 view controller 的 XIB 檔案中,新增兩個 UILabel 到 view controller 的 view 上面, 在此我們分別命名這兩個 Label 為 "Furnace Digital" 以及 "Language"。
接下來在 view controller 中,新增兩個 UILabel 的 instance variable,並且設定為 IBOutlet 以連接在 XIB 中的 UILabel。然後我們在 viewDidLoad 方法中,輸入下列程式碼:
self.lowerLabel.text = NSLocalizedString(@"Language", @"Language Setting");
self.upperLabel.text = NSLocalizedString(@"Furnace Digital", @"Furnace Digital Title");
NSLocalizedString 是一個判斷國際化語言設定的函式,它會根據現在使用者使用的語言版本,到 Localizable.strings 抓取符合語言版本的字串。在 NSLocalizedString 函式中,第一個參數是 key, 第二個參數是 comment,也就是註解。使用上,建議一開始就使用英文當做 key ,方便進行管理。當設定好 NSLocalizedString 函式之後,在 Mac 上我們開啟 "終端機" 程式,接者輸入以下指令:
cd /Users/myHome/Documents/Xproject/LocalizedExec/LocalizedExec
cd 後面所接的是 viewcontroller.m 檔所屬的資料夾位置,接下來我們使用 genstrings 指令來產生 Localizable.strings ,同樣在終端機程式中,輸入以下指令:
genstrings viewcontroller.m
viewcontroller.m 是我們剛剛使用 NSLocalizedString 函式的實作檔案,輸入以上指令之後,在該實作檔案的資料夾中,會出現 Localizable.strings,將它拖曳到 Xcode 專案當中,當我們點選 Localizable.strings 時,應該會出現一堆顛倒的問號,這時到 Xcode 的 Utilities 視窗當中,Text Setting 中的 Text Encoding 選項中,選取 Unicode (UTF-16) 的格式,接下來會跳出對話框,詢問是否進行 Reinterpret ,點選 Reinterpret 之後,這時應該會看到如下的結果:
/* Furnace Digital Title */
"Furnace Digital" = "Furnace Digital";
/* Language Setting */
"Language" = "Language";
所看到的 "Furnace Digital" = "Furnace Digital" 的意思是,前面的 Furnace Digital 為我們之前輸入的 Key ,而後面的字串則為輸出的字串。再來我們點選 Localizable.strings ,然後到 Xcode 右方的 Utilities 視窗中,Localization 的地方,新增我們需要的語言類別,在此範例中,選擇新增 Chinese Traditional 以及 Chinese Simple,然後會看到以下的結果:
接下來到左邊的 Project navigator 中,找到 Localizable.strings , 將它展開會出現其他三個 Localizable.strings, 分別是 English 以及 繁體和簡體中文,不更動 English 的 Localizable.strings 中的字串設定,我們修改繁體 Localizable.strings 的字串如下:
/* Furnace Digital Title */
"Furnace Digital" = "鑫穎數位工作室";
/* Language Setting */
"Language" = "語言設定";
在 簡體的 Localizable.strings 中,修改字串如下所示:
/* Furnace Digital Title */
"Furnace Digital" = "鑫颖数位工作室";
/* Language Setting */
"Language" = "语言设定";
完成以上設定之後,就可以執行程式了。要觀看結果,記得到 "設定" 中,修改語言環境的設定,才能看到不同的語言結果。
最後提供一個指令,就是當所有的 NSLocalizedString 分布在不同的實作檔案中,該如何將所有的 NSLocalizedString 的 Key 收集到同一個 Localizable.strings 當中,可以在 "終端機" 程式中,一樣位於實作檔案的資料夾位置,輸入下列指令:
genstrings -o en.lproj *.m
如此就可以將分布在不同實作檔案中的 NSLocalizedString 所包含的 Key 都集中到同一個 Localizable.strings 檔案當中。
如果不在多語言設定內的能否預設為英文
回覆刪除你可以在 info.plist裡看看,我記得有可以預設語言的項目。
刪除