iOS國際化(應(yīng)用內(nèi)切換語言)
2018-05-08 17:20 編輯: yyuuzhu 分類:iOS開發(fā) 來源:anonymousCat
2 2412
招聘信息:
- iOS開發(fā)工程師
- 京東招聘iOS開發(fā)工程師
- cocos2d-x主程
- iOS架構(gòu)師
- iOS高級開發(fā)工程師
- Cocos2d-x開發(fā)工程師
- 手游服務(wù)器開發(fā)工程師(C++)
- Android / iOS / Web / Backend 資深開發(fā)工程師
- iOS 開發(fā)工程師(實習(xí))
- C++工程師
- Cocos2d-x游戲客戶端開發(fā)
[](javascript:void(0))[](javascript:void(0))
首先問一個弱弱的問題,在項目開發(fā)過程中盗棵,哪些內(nèi)容需要國際化征峦?App中出現(xiàn)的所有文本內(nèi)容本文嗎?非也非也。
本文將以適配中文和英文為例台丛,分為四個部分來介紹國際化的實現(xiàn)纬朝。
1.哪些內(nèi)容需要國際化个绍?
首先來說開頭提到的看似弱弱的問題。乍一看写穴,你一定會覺得不就是所有的文本內(nèi)容嗎惰拱?非也。舉個栗子:比如你要發(fā)一條微博啊送,文本內(nèi)容包括:用戶名偿短,XX分鐘前,來自XX設(shè)備删掀,正文內(nèi)容翔冀。僅這四個對象,你覺得哪幾個需要適應(yīng)用戶的語言呢披泪?用戶名纤子,顯然不需要翻譯,我給自己起名叫二狗子,你給我翻譯成 The second son of dog控硼,你覺得合適么泽论?XX分鐘前,"分鐘前"就是一個需要翻譯的內(nèi)容卡乾。同樣翼悴,來自XX設(shè)備的“來自”也需要翻譯,而XX設(shè)備則是獲取的動態(tài)數(shù)據(jù)幔妨,不需要翻譯鹦赎,當(dāng)然也不是所有的動態(tài)數(shù)據(jù)都不需要翻譯,這個就要根據(jù)各自項目視不同情況而定了误堡。正文內(nèi)容古话,與用戶名同理,比如我是個泰國人锁施,我發(fā)個“薩瓦迪卡”陪踩,你給我翻譯成“你好”,我反而看不懂了悉抵。這一段話寫的稍顯啰嗦肩狂,總結(jié)起來就一句話:固定文本內(nèi)容一般需要翻譯,動態(tài)數(shù)據(jù)要視情況而定姥饰,另外傻谁,項目名稱依據(jù)實際需求而定。
2.需要哪些類媳否,文件栅螟,配置作為支持?
類:皮膚管理者類篱竭,繼承自NSObject
文件:Strings File如圖
3.各個文件力图,類之間如何配合?
- 皮膚管理者類會包含三個方法供外部調(diào)用掺逼。
一吃媒、生成單利+ (instancetype)sharedInstance;
二、獲取文本內(nèi)容+ (NSString *)localizedStringWithKey:(NSString *)key;
三吕喘、切換語言+ (void)changeLanguage;注意赘那,正式項目中該方法會根據(jù)實際需求有所變化,在該例中僅做簡單的中英文互相切換氯质。
下面來具體說說募舟,單利方法自不必多說。主要講最核心的方法+localizedStringWithKey:它的內(nèi)部是這樣的
方法一共有四行代碼
第一行[self currentLanguage] 會獲取本地偏好中保存的當(dāng)前語言闻察,比如英文返回en拱礁,中文返回zh-Hans琢锋。獲取這個值的目的是選擇下圖中紅色標(biāo)注的路徑:
en.lproj中會保存 英文環(huán)境需要的strings文件。zh-Hans.lproj中則保存中文環(huán)境需要的stings文件呢灶。strings文件內(nèi)部是這樣的:
這個文件中每一行可以寫一對 鍵值對吴超, = 前面的是鍵(切換語言),= 后面的是要顯示在界面上的值(language)鸯乃。
第二行就是獲取到當(dāng)前語言環(huán)境的路徑了鲸阻。
第三行[[NSBundle bundleWithPath:lPath] localizedStringForKey:key value:nil table:@"Localizable"]則是根據(jù)第二行獲取到的路徑再根據(jù) 剛才我們提到的=前面的鍵 比如“切換語言”,以及文件名字"Localizable" 獲取到我們最終要在界面上顯示的內(nèi)容缨睡,就是前面說到的 =后面的值鸟悴。
所以,外部的實例通過調(diào)用語言管理者的localizedStringWithKey:方法奖年,傳入key(比如:傳入切換語言)遣臼,就能得到英文環(huán)境下要顯示的內(nèi)容:language,中文環(huán)境下則是:切換語言拾并。
動圖效果如下:
4.總結(jié)
通過上面的描述可以看到,國際化的核心在于
[[NSBundle bundleWithPath:lPath] localizedStringForKey:key value:nil table:@"Localizable"] 這個方法以及Localizable.strings文件鹏浅。我們在切換語言時嗅义,僅僅是在本地偏好中保存了一個字符串,en或者zh-Hans隐砸,而最終顯示的內(nèi)容要依賴于我們在Localizable.strings文件中寫的內(nèi)容之碗,以及NSBundle加載哪個路徑的strings文件。
如果有不妥之處季希,歡迎指正補(bǔ)充褪那。謝謝。
作者:anonymousCat