在使用微信等APP中,我們經(jīng)常會(huì)看到切換語(yǔ)言的功能,那么這個(gè)功能是怎么實(shí)現(xiàn)的呢,讓我們來(lái)一探究竟。
關(guān)鍵字:NSLocalizedString

這是一個(gè)Objective-C自帶的宏,那么,他究竟是如何實(shí)現(xiàn)的呢,我們可以按住Command+鼠標(biāo)左鍵,給他來(lái)一槍。

OK!通過(guò)這個(gè)這段代碼,我們可以得知NSLocalizedString這個(gè)宏,最終調(diào)用了
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
這樣的一個(gè)方法。
通過(guò)查看文檔和Dash:


我們得出該方法的作用為:根據(jù)鍵和值返回特定的本地化的字符串。
至此,我們可以推斷出,這個(gè)方法會(huì)去特定的目錄或者文件中,通過(guò)鍵key去找到對(duì)應(yīng)值value,并返回。
APP國(guó)際化
1、在我們的項(xiàng)目中添加需要的語(yǔ)言(以中文和英文為例)

2、在Xcode中Command+N新建一個(gè)String文件,命名必須為infoPlist

3、選中新建的infoPlist.Strings文件,在Xcode右側(cè)信息欄中選中Localize并添加語(yǔ)言(隨便選中那個(gè)都可以,這里我們Chinese)

這個(gè)操作完成后,我們會(huì)發(fā)現(xiàn)信息欄變成這樣了

把項(xiàng)目需要支持的語(yǔ)言前面的勾勾上。
再回到左側(cè)目錄,infoPlist.Strings下自動(dòng)生成了不同語(yǔ)言文件

4、再對(duì)應(yīng)語(yǔ)言文件內(nèi)對(duì)照格式,寫(xiě)入不同語(yǔ)言下APP名




至此,APP名字國(guó)際化已經(jīng)完成。
應(yīng)用內(nèi)語(yǔ)言切換
1、新建語(yǔ)言Strings文件,由于我的項(xiàng)目只需要中文和英文,故我只創(chuàng)建了兩個(gè)Strings文件,更多語(yǔ)言請(qǐng)重復(fù)該操作

2、在Chinese.strings文件和English.strings文件中,以鍵值對(duì)的形式對(duì)內(nèi)容進(jìn)行編寫(xiě),如下圖


3、根據(jù)對(duì)Objective-C自帶宏NSLocalizedString的分析和理解,我們可以按照我們的需求定義如下圖的宏
其中,參數(shù)key即你在strings文件中所使用的key(如上圖pay_succeed和pay_failed),參數(shù)table為查詢strings文件名字(如上圖Chinese和English)
PS:我項(xiàng)目是以[NSUserDefaults standardUserDefaults]存儲(chǔ)當(dāng)前語(yǔ)言的,請(qǐng)以你項(xiàng)目實(shí)際為準(zhǔn)!

4、至此,在項(xiàng)目中可以使用我們剛才自定義的宏獲取對(duì)應(yīng)的文本內(nèi)容了
在中文情況下,即[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]返回Chinese時(shí),會(huì)返回Chinese.strings文件內(nèi)對(duì)應(yīng)的文本
在中文情況下,即[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]返回English時(shí),會(huì)返回English.strings文件內(nèi)對(duì)應(yīng)的文本