標籤:
一、簡介
* 使用本地化功能,可以輕鬆地將應用程式翻譯成多種語言,甚至可以翻譯成同一語言的多種方言
* 如果要添加本地化功能,需要為每種支援的語言建立一個子目錄,稱為”本地化檔案夾”,通常使用.lproj作為拓展名
* 當本地化的應用程式需要載入某一資源時,像、屬性列表、nib檔案,應用程式會檢查使用者的語言和地區,並尋找相匹配的本地化檔案夾。如果找到了相應的檔案夾,就會載入這個檔案夾中的資源
二、預設的
工程目錄結構
運行(因為沒有使用本地化功能,所以不管使用者選擇什麼語言環境,啟動並執行效果都是一樣的)
現在想在中文語言環境下,換另一套實現,其中包括:
* 更改nib檔案中的文字(nib本地化)
* 更改登入按鈕下面的圖片(圖片本地化)
* 更改對話方塊中的文字(Tip和Ok)(字串本地化)
* 更改應用程式名稱(應用程式名稱本地化,即本地化Info.plist檔案)
三、本地化前的準備
其實就是先建立好中文的本地化檔案夾(zh-Hans.lproj),讓應用程式支援中文語言環境
選擇當前需要本地化的資源
選擇Finish後,會發現硬碟上多了一個中文的本地化檔案夾zh-Hans.lproj,至於en.lproj檔案夾是英文的本地化檔案夾,建立項目時預設就有的
項目中的MJViewController.xib、InfoPlist.strings檔案左邊也多了個可以展開的三角形,展開可以發現分別都有2個版本的檔案
MJViewController.xib(English)對應en.lproj檔案夾中的MJViewController.xib檔案
InfoPlist.strings(English)對應en.lproj檔案夾中的InfoPlist.strings檔案
MJViewController.xib(Chinese)對應zh-Hans.lproj檔案夾中的MJViewController.xib檔案
InfoPlist.strings(Chinese)對應zh-Hans.lproj檔案夾中的InfoPlist.strings檔案
準備工作做完後,就可以開始展開本地化工作了
四、nib檔案的本地化
開啟MJViewController.xib(Chinese)檔案,修改裡面的文字資訊(這裡不修改圖片)
五、應用程式名稱本地化(Info.plist本地化)
知識背景:Info.plist中有個叫CFBundleDisplayName的key決定了應用程式的名稱
1.為Info.plist添加一個key-value,讓應用程式支援名稱本地化,Info.plist就會去InfoPlist.strings載入CFBundleDisplayName對應的字串
2.在InfoPlist.strings(English)檔案中加入:
[java] view plaincopy
- CFBundleDisplayName="Localization";
3.在InfoPlist.strings(Chinese)檔案中加入:
[java] view plaincopy
- CFBundleDisplayName="本地化";
六、圖片本地化
(這裡示範本地化home.png,nib檔案中登入按鈕下面的房子圖片)
1.單擊選中home.png,然後查看右上方的視圖
2.選了Localize代表會將home.png加入到英語的本地化檔案夾en.lproj中去
3.添加圖片支援中文語言
4.查看下硬碟中home.png的情況
5.而且項目中的home.png左邊也多了個可以展開的三角形,展開可以發現有2個版本的檔案
home.png(English)對應en.lproj檔案夾中的home.png檔案
home.png(Chinese)對應zh-Hans.lproj檔案夾中的home.png檔案
6.用預先準備好的另外一張圖片替換zh-Hans.lproj檔案夾中的home.png
7.替換後查看項目中home.png的情況
8.在代碼中照常使用圖片即可
[java] view plaincopy
- [UIImage imageNamed:@"home.png"];
注意:本地化完圖片檔案,記得Clean一下項目,而且最好先刪除應用程式,再重新安裝
七、字串的本地化
1.建立一個字串資源檔
2.檔案名稱最好是Localizable.strings,如果使用其他檔案名稱,使用字串時的調用會有些區別
3.為Localizable.strings添加多語言支援(跟上面圖片本地化類似),選中Localizable.strings檔案,查看右上方的視圖
4.選了Localize代表會將Localizable.strings加入到英語的本地化檔案夾en.lproj中去
5.添加支援中文語言
6.查看下硬碟中Localizable.strings的情況
7.而且項目中的Localizable.strings左邊也多了個可以展開的三角形,展開可以發現有2個版本的檔案
Localizable.strings(English)對應en.lproj檔案夾中的Localizable.strings檔案
Localizable.strings(Chinese)對應zh-Hans.lproj檔案夾中的Localizable.strings檔案
8.在Localizable.strings(English)檔案加入:
[java] view plaincopy
- Tip="Tip";
-
- Ok="Ok";
9.在Localizable.strings(Chinese)檔案加入:
[java] view plaincopy
- Tip="提示";
-
- Ok="好的";
10.在代碼中使用NSLocalizedString(key, comment)來讀取本地化字串,key是Localizable.strings檔案中等號左邊的字串,comment純粹是注釋
[java] view plaincopy
- NSString *tip = NSLocalizedString(@"Tip", nil);
- NSString *ok = NSLocalizedString(@"Ok", nil);
如果沒有對字串進行本地化 或者 找不到key對應的值,NSLocalizedString將直接返回key這個字串
注意:如果你的字串資源檔名不是Localizable.strings,如mj.strings,那麼你就得使用NSLocalizedStringFromTable()來讀取本地化字串:
[java] view plaincopy
- NSLocalizedStringFromTable(@"Tip", @"mj", nil);
補充:產生字串資源檔的另一種方式(通過終端命令)
1.首先添加擷取字串的代碼,比如在MJViewController.m
[java] view plaincopy
- NSString *tip = NSLocalizedString(@"Tip", @"dialog title");
- NSString *ok = NSLocalizedString(@"Ok", @"dialog button");
2.開啟終端,定位到MJViewController.m所在的檔案夾,輸入genstrings命令,產生字串資源檔
3.開啟檔案夾,已經產生了字串資源檔
如果使用NSLocalizedStringFromTable(key, tbl, comment)來擷取字串,資源檔會以tbl參數作為檔案名稱,比如
[java] view plaincopy
- NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");
- NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");
產生的資源檔為:mj.strings
4.將資源檔匯入項目即可,然後開啟資源檔,可以發現已經產生了key和comment
[java] view plaincopy
- /* dialog button */
- "Ok" = "Ok";
-
- /* dialog title */
- "Tip" = "Tip";
八、其他檔案的本地化
跟六中圖片本地化的原理是一樣的,重複六中的每個步驟即可
九、最終效果示範
1.英文環境下
2.中文環境下
iOS開發之本地化