我們在IOS開發應用中,會碰到做好的一個應用,如何趨向國際化,也就是說支援多種語言?下面我就來簡單示範一下,用一個Demo來實現中文和英文的實現。實現步驟:1.本地化項目中xib的view 1.在view中添加幾個label,把對應的屬性綁定好。 2.ViewController.h:
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (retain, nonatomic) IBOutlet UILabel *languageee; @property (retain, nonatomic) IBOutlet UILabel *label1; @property (retain, nonatomic) IBOutlet UILabel *label2; @end
3.ViewController.m:
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLocale * locale = [NSLocale currentLocale]; NSString * str = [locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier]]; self.languageee.text = str; self.label1.text = NSLocalizedString(@"name",nil); self.label2.text = NSLocalizedString(@"sex", nil); } - (void)dealloc { [_languageee release]; [_label1 release]; [_label2 release]; [super dealloc]; }
@end 4.建立xib的其他語言的版本,具體操作: 1.點擊項目(藍色的表徵圖),然後點擊開啟PROJECT的項目表徵圖,開啟Localizations,勾選上Use Base Internationalizatino,會自動建立一個Basexib檔案,然後點擊+,添加其他的語言版本,本來預設的是english的,那麼我們在建立一個Chinese,第一個選項卡。 2.然後點擊xib,滑鼠移動到最右邊選擇屬性那一欄最左邊的選項卡,開啟Localization,勾選上相應的選項,支援的多語言檔案。 3.點擊修改相應的ViewController.strings(Chinese)中的資料:例如:/* Class = "IBUILabel"; text = "Label"; ObjectID = "8"; */ "8.text" = "Label"; /* Class = "IBUILabel"; text = "Label"; ObjectID = "11"; */ "11.text" = "Label"; /* Class = "IBUILabel"; text = "Label"; ObjectID = "14"; */ "14.text" = "Label"; /* Class = "IBUILabel"; text = "name"; ObjectID = "20"; */ "20.text" = "姓名"; /* Class = "IBUILabel"; text = "sex"; ObjectID = "24"; */ "24.text" = "性別"; /* Class = "IBUIButton"; highlightedTitle = "HaHa"; ObjectID = "28"; */ "28.highlightedTitle" ="HaHa"; /* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "28"; */ "28.normalTitle" ="Button"; /* Class = "IBUISegmentedControl"; 32.segmentTitles[0] = "First"; ObjectID = "32"; */ "32.segmentTitles[0]" ="First"; /* Class = "IBUISegmentedControl"; 32.segmentTitles[1] = "Second"; ObjectID = "32"; */ "32.segmentTitles[1]" ="Second"; 對應的English的檔案也修改成英文版的 以上是本地化的view中靜態label控制項中的資料,如果是動態,就是如果在.h檔案相關聯的資料控制項,那麼就要現在.m檔案中先寫上例如:
self.label1.text = NSLocalizedString(@"name",nil); self.label2.text = NSLocalizedString(@"sex", nil);
這樣才方便在後面自動建立的設定檔中自動產生相應的註冊的對象。4.自動產生對應的動態資料的檔案開啟終端,輸入cd 然後將檔案拖放在終端中,自動產生對應的路徑,然後輸入genstrings ./LocateDemo/*.m會發現在項目中自動產生了一個Localizable.strings的檔案,然後在對應的en.lproj和zh-Hans.lproj也就是兩個對應的語言的檔案包裡面都複製一份這個檔案,然後匯入到項目中,點擊相應的檔案會發現自動產生了相應的欄位/* No comment provided by engineer. */ "name" ="小明"; /* No comment provided by engineer. */ "sex" ="男"; 將對應的中文和英文包中的檔案都改成相應的語言 2.本地化應用程式名稱 建立SingleView的項目之後會發現有一個LocateDemo-Info.plist檔案,雙擊開啟檔案,右擊->Show Row Keys/Values,拷貝CFBundleDisplayName,到InfoPlist.strings中,也將這個檔案本地化一下,產生兩中語言的檔案,然後在各個語言對應的檔案中修改CFBundleDisplayName = "English";還有“中文”,後面測試的話會發現如果模擬器設定的語言不一樣,那麼這個程式對應的應用程式名稱也不一樣。 3.本地化圖片例如兩種語言,我想根據英語和中文不同的環境匯入不同的國旗,美國國旗和中國國旗,在介面中拖放一個ViewImage,然後就圖片資源拖放近項目,也點擊一下本地化,在產生一個 另外一種語言環境下的圖片,然後在對應的檔案中修改這個圖片,但必須確保兩個檔案中的圖片名字是一樣的才行。