2010年6月27日 星期日

iOS 開發教學 - 讓 App 支援多國語言、依語言顯示 App 名稱

LocalizableString

iTunes App Store 可在於多個國家販售、散佈分享所寫的 App,因此,客製化不同語言的操作介面是很基本的功夫,概念上很簡單,凡是在 App 上使用 NSString 印出來的字串,都可以透過查表的方式,依照設定的語言,更改成想要的。

如:

UILabel *show = [[UILabel alloc] init];
show.textLabel.text = @"Hello Moto";

希望可以依照語言改變時,那就改用 NSLocalizedString 處理:

UILabel *show = [[UILabel alloc] init];

show.textLabel.text = NSLocalizedString( @"Hello Moto" , @"note" );

其中後面的 @"note" 也可以空白,那類似註解、用來回憶的,但如果要顯示的文字已經很有記憶性跟意義性,那其實後面就乾脆留白就好囉。透過上述的使用,如果沒有建立甚麼查表,那其實 show.textLabel.text = NSLocalizedString( @"Hello Moto" ,
@"note" ); 等同於
show.textLabel.text = @"Hello Moto"; 這樣的效果,也就是可以把一堆常用輸出的部分改成 NSLocalizedString 也不會怎樣。

接著建立查表,在此僅提供簡單的 source code 轉換的部分,關於使用 Interface Builder 也可以透過 Xcode 介面產出,只是我沒再用啦,所以也忘了。

$ cd YourProject ;
$ mkdir English.lproj ;
$ genstrings -o English.lproj/ iPhone/*.m iPhone/*.h iPad/*.m iPad/*.h *.m *.h

透過上述三步,就將 YourProject 裡頭所有的 *.m 和 *.h 裡頭用到的 NSLocalizedString 部份,拉出來見出可以查詢的表格,並儲存在 YourProject/English.lproj/ 中,其內文:

/* No comment provided by engineer. */
"Hello Moto" = "Hello Moto";

這等同於 Key-Value Pair 的模式,因此,如果你希望在繁體中文顯是為"你好機車",那對應則改成:

/* No comment provided by engineer. */

"Hello Moto" = "你好機車";

以上是簡短的範例。真正的使用的過程,一開始是使用 genstrings 產生出 Localizable.strings 檔案,接著把他拖拉進去 Project 中,這時彈跳的視窗記得要選成 UTF-16 ,而當你想要新增另一個語言時,則是對 Localizable.strings 點選右鍵挑選 Get Info,彈跳的視窗下面則可以直接按 Add Localization ,接著可以打入語言,如 zh_TW 、 zh_CN 等

utf16

Add Localization

如此一來,在 Localizable.strings 下則會自動幫你複製一份 zh_TW 出來,而 Project 目錄下也會自動產生 zh_TW.lproj 目錄。接著一樣的用法,只是變成在 zh_TW 語言時,想要顯示的字是甚麼。而 App 預設的語言是 English ,可以在 Project-Info.plist 中 Localization native development region 項目裡看到這個設定值。

經過上述的設定,你的程式就可以依照設備的語言,顯示內容囉,然而,還有一種設定,那就應用程式在設備上顯示的名稱,此部分則是另外在建立一個檔案 InfoPlist.strings 並且拉到 Project 裡頭,一樣挑選 UTF-16 ,其內文:

CFBundleName = "HelloMoto";  
CFBundleDisplayName = "HelloMoto";

一樣可以透過對 InfoPlist.strings 進行 Get Info 和 Add Localization 來建立其他語言的顯示。

1 則留言:

  1. Good, 詳細的教學! ^^

    版主回覆:(06/01/2010 01:13:30 AM)


    筆記而已啦 :D

    回覆刪除