en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

8.10.2011

將 NSString 字串轉換多國語言設定

  

由於 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 檔案當中。






2 則留言:

  1. 如果不在多語言設定內的能否預設為英文

    回覆刪除
    回覆
    1. 你可以在 info.plist裡看看,我記得有可以預設語言的項目。

      刪除