我們知道,Cocoa程式是完全支援多語言的,包括iPhone中的程式。這裡簡單介紹一下製作多語言iPhone程式的方法,同時也是iPhone中顯示中文的最好辦法。這種方法在Toolchain和官方SDK都適用。
一、XCode中支援多語言
如果你使用XCode,那麼方法非常簡單:
在項目中點右鍵,選擇Add->New File
在列表中選擇Strings File
可以叫做Localizable.strings,也可以取別的名字,比如MyApp.strings
選中MyApp.string,按command+i,點擊左下方的Make File Localizable,你會看到General中的Localizations裡面已經有了English。
點擊下面的Add Localization,添加一個zh_CN(簡體中文)和一個zh_TW 或者 zh_HK(繁體中文)。注意zh_Hans(簡體中文)和zh_Hant(繁體中文)在Mac中可以正確識別,但是在iPhone中不能正確識別。
如果你想支援別的語言,可以添加:
日語:Japanese
德語:German
西班牙語:Spanish
法語:French
.strings檔案的內容可以是標準的plist格式,也可以是舊的列表格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>mykey</key>
<string>myvalue</string>
….
</dict>
</plist>
字串如果要換行的話,直接按斷行符號換行,不要寫成/n這種形式。
或者直接使用舊式的列表格式:
"mykey" = "myvalue";
…
注意每行後面加分號。
如果你使用的是Localizable.strings,那麼你在程式中可以這樣擷取字串:
NSLocalizedString(@"mykey", nil)
如果你使用的是自訂名字的.strings,比如MyApp.strings,那麼你在程式中可以這樣擷取字串:
NSLocalizedStringFromTable (@"mykey",@"MyApp", nil)
這樣即可擷取到"myvalue"這個字串,可以是任何語言。
如果你使用的是官方的iPhone SDK,那麼項目中包含這個.strings就可以直接使用了,如果你使用的是toolchain,那麼需要修改一下Makefile:
增加
LANG_FILES=$(wildcard *.lproj)
LANG_FILES_ABS=$(addprefix $(SRCROOT)/,$(LANG_FILES))
RESOURCES=Resources
找到
$(APP_ABS): $(INFOPLIST_ABS)
在最後一行增加:
cp -R $(LANG_FILES_ABS) $(APP_ABS)/$(RESOURCES)
這樣即可讓你的iPhone程式支援多語言環境了。 當然如果你不怕麻煩,也可以每次都手工把這些.lproj目錄複寫到編譯好的Bundle裡,也是一樣的。
二、在其他開發環境支援iPhone多語言環境
如果你使用Windows或者Linux編譯iPhone toolchain,那麼你需要這樣做:
在編譯好的iPhone程式的Bundle(比如MyApp.app這個目錄)裡建一個Resources目錄,然後分別建立:
English.lproj/
zh_CN.lproj/
zh_TW.lproj/
….
每個語言的目錄放一個.strings檔案。比如MyApp.strings 儲存成UTF-8編碼(檔案名稱在不同語言的目錄中要一致)
字串的擷取方法和上文相同,你也可以通過修改Makefile在編譯的時候自動將.strings資源檔的各個目錄複寫到程式的Bundle裡。
另外,在iPhone程式中,語言資來源目錄既可以放在Resources目錄裡,也可以直接放在Bundle裡。
這種方法的好處很明顯:因為iPhone OS中已經內建了多語言的支援,為什麼不把你的程式也做成更多人可以使用的呢?另外,這樣做還可以避免使用傳統的@"中文"顯示為亂碼的問題(因為NSString字串的這種建立方法只支援7Bit ASCII碼)。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/ttth202507/archive/2011/04/13/6320284.aspx