iOS實(shí)現(xiàn)應(yīng)用內(nèi)切換本地化語言的方法實(shí)例
前言
當(dāng)我們的應(yīng)用僅僅面向國內(nèi)用戶群,一般僅支持一種語言--中文就可以了。當(dāng)面向國外用戶時(shí)就需要進(jìn)行國際化了,不僅僅是語言的轉(zhuǎn)變,也可能包括設(shè)計(jì)風(fēng)格,頁面布局、交互效果的轉(zhuǎn)變,如微信,微博,QQ這類應(yīng)用都有著切換語言的功能。
最近因?yàn)楣ぷ鞯脑?,遇到個(gè)需要在應(yīng)用內(nèi)部設(shè)置語言的需求,默認(rèn)使用系統(tǒng)設(shè)置的語言,如果用戶在App內(nèi)設(shè)置了別的語言,以后則按照新設(shè)置的語言顯示界面。
iOS確定應(yīng)用的語言
1.iOS首先搜索用戶的語言偏好設(shè)置(設(shè)置-通用-語言與地區(qū))
2.檢測(cè)你的應(yīng)用是否支持用戶的語言,先用偏好設(shè)置的第一個(gè)語言,檢測(cè)應(yīng)用是否包含該語言對(duì)應(yīng)的文件夾(后綴是.lproj,文件名部分,英語為en,中文簡體為zh-Hans,日語為ja)如果存在,那就是該語言,否則用偏好設(shè)置第二個(gè)語言來匹配。重復(fù)該過程。
3.一旦系統(tǒng)為應(yīng)用確定了語言,對(duì)應(yīng)的.lproj文件夾就會(huì)用作本地化資源。
于是,寫了個(gè)新輪子SOLocalization (本地下載),希望大家喜歡,其實(shí)代碼很簡單,有興趣的可以直接去讀源代碼,有補(bǔ)充的可以直接向我提交 pull request。下面話不多說了,來一起看看詳細(xì)的介紹吧。
方法如下:
1.創(chuàng)建本地化文件。
創(chuàng)建本地化字符串文件,文件名可以是默認(rèn)的 infoPlist.strings,也可以是別的,為這個(gè)文件設(shè)置好要支持的語言及內(nèi)容。
2.導(dǎo)入 SOLocalization。
3.配置 SOLocalization。
設(shè)置支持的語言及默認(rèn)語言,當(dāng)系統(tǒng)設(shè)置的語言不屬于支持的語言時(shí)會(huì)使用默認(rèn)語言。
[SOLocalization configSupportRegions:@[SOLocalizationEnglish, SOLocalizationSimplifiedChinese] fallbackRegion:SOLocalizationEnglish];
4.設(shè)置 UIKit 對(duì)象。
為 UIKit 對(duì)象設(shè)置合適的屬性,像下面這樣簡單,而且這樣設(shè)置后,當(dāng)語言切換時(shí),這些 UIKit 對(duì)象的文本內(nèi)容會(huì)自動(dòng)變?yōu)樾略O(shè)置的語言,不需要任何額外處理。
UIBarButtonItem *change = [[UIBarButtonItem alloc]initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(changeLanguage:)]; // 這里的 @"Setting" 就是 strings 文件中對(duì)應(yīng)的那個(gè) key,下同 change.sol_title = @"Setting"; self.navigationItem.rightBarButtonItem = change; self.label.sol_text = @"label"; [self.button sol_setTitle:@"button" forState:UIControlStateNormal]; self.textField.sol_placeholder = @"textField placeholder"; self.navigationItem.sol_title = @"title";
對(duì)于 SOLocalization 暫不支持切換語言后自動(dòng)修改文本內(nèi)容的 UIKit 對(duì)象,可以這樣獲取需要的本地化字符串:
// 其中 “title” 為 strings 文件中對(duì)應(yīng)的 key,“infoPlist”是本地化字符串文件名 NSString *localizedString = SOLocalizedStringFromTable(@"title", @"infoPlist");
5.修改應(yīng)用內(nèi)使用的語言
// to use English [SOLocalization sharedLocalization].region = SOLocalizationEnglish; // to use 簡體中文 [SOLocalization sharedLocalization].region = SOLocalizationSimplifiedChinese;
6.自定義的本地化字符串文件名
SOLocalization 提供的 API 中,默認(rèn)使用的本地化字符串文件名為 infoPlist.strings 文件,如果使用其他文件名(比如使用這個(gè)文件名:local.strings),如下即可:
// 對(duì)于支持的 UIKit 對(duì)象 label.sol_table = @"local"; // 使用 SOLocalizedStringFromTable 時(shí) NSString *localizedString = SOLocalizedStringFromTable(@"title", @"local");
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡單工廠和工廠方法模式的運(yùn)用
這篇文章主要介紹了iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡單工廠和工廠方法模式的運(yùn)用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03iOS實(shí)現(xiàn)圖片存在本地、再從本地獲取圖片的功能
本文主要介紹了iOS實(shí)現(xiàn)圖片存在本地、再從本地獲取圖片的功能的代碼。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03IOS MenuViewController實(shí)現(xiàn)彈出菜單效果
這篇文章主要介紹了IOS MenuViewController實(shí)現(xiàn)彈出菜單效果,實(shí)現(xiàn)一個(gè)從下移動(dòng)上來的彈出菜單,背景逐漸變深,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07iOS實(shí)現(xiàn)步驟進(jìn)度條功能實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)步驟進(jìn)度條功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11iOS開發(fā)APP跳轉(zhuǎn)到設(shè)置或系統(tǒng)頁面詳解
這篇文章主要為大家介紹了iOS開發(fā)APP跳轉(zhuǎn)到設(shè)置或系統(tǒng)頁面詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06IOS App圖標(biāo)和啟動(dòng)畫面尺寸詳細(xì)介紹
這篇文章主要介紹了IOS App圖標(biāo)和啟動(dòng)畫面尺寸詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02