溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS如何實(shí)現(xiàn)應(yīng)用內(nèi)切換本地化語(yǔ)言的方法

發(fā)布時(shí)間:2021-05-24 11:54:47 來(lái)源:億速云 閱讀:291 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹了iOS如何實(shí)現(xiàn)應(yīng)用內(nèi)切換本地化語(yǔ)言的方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

當(dāng)我們的應(yīng)用僅僅面向國(guó)內(nèi)用戶群,一般僅支持一種語(yǔ)言--中文就可以了。當(dāng)面向國(guó)外用戶時(shí)就需要進(jìn)行國(guó)際化了,不僅僅是語(yǔ)言的轉(zhuǎn)變,也可能包括設(shè)計(jì)風(fēng)格,頁(yè)面布局、交互效果的轉(zhuǎn)變,如微信,微博,QQ這類應(yīng)用都有著切換語(yǔ)言的功能。

最近因?yàn)楣ぷ鞯脑颍龅絺€(gè)需要在應(yīng)用內(nèi)部設(shè)置語(yǔ)言的需求,默認(rèn)使用系統(tǒng)設(shè)置的語(yǔ)言,如果用戶在App內(nèi)設(shè)置了別的語(yǔ)言,以后則按照新設(shè)置的語(yǔ)言顯示界面。

iOS確定應(yīng)用的語(yǔ)言

      1.iOS首先搜索用戶的語(yǔ)言偏好設(shè)置(設(shè)置-通用-語(yǔ)言與地區(qū))

      2.檢測(cè)你的應(yīng)用是否支持用戶的語(yǔ)言,先用偏好設(shè)置的第一個(gè)語(yǔ)言,檢測(cè)應(yīng)用是否包含該語(yǔ)言對(duì)應(yīng)的文件夾(后綴是.lproj,文件名部分,英語(yǔ)為en,中文簡(jiǎn)體為zh-Hans,日語(yǔ)為ja)如果存在,那就是該語(yǔ)言,否則用偏好設(shè)置第二個(gè)語(yǔ)言來(lái)匹配。重復(fù)該過(guò)程。

      3.一旦系統(tǒng)為應(yīng)用確定了語(yǔ)言,對(duì)應(yīng)的.lproj文件夾就會(huì)用作本地化資源。

于是,寫(xiě)了個(gè)新輪子SOLocalization (本地下載),希望大家喜歡,其實(shí)代碼很簡(jiǎn)單,有興趣的可以直接去讀源代碼,有補(bǔ)充的可以直接向我提交 pull request。下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

方法如下:

1.創(chuàng)建本地化文件。

創(chuàng)建本地化字符串文件,文件名可以是默認(rèn)的 infoPlist.strings,也可以是別的,為這個(gè)文件設(shè)置好要支持的語(yǔ)言及內(nèi)容。

2.導(dǎo)入 SOLocalization。

3.配置 SOLocalization。

設(shè)置支持的語(yǔ)言及默認(rèn)語(yǔ)言,當(dāng)系統(tǒng)設(shè)置的語(yǔ)言不屬于支持的語(yǔ)言時(shí)會(huì)使用默認(rèn)語(yǔ)言。

[SOLocalization configSupportRegions:@[SOLocalizationEnglish, SOLocalizationSimplifiedChinese] fallbackRegion:SOLocalizationEnglish];

4.設(shè)置 UIKit 對(duì)象。

為 UIKit 對(duì)象設(shè)置合適的屬性,像下面這樣簡(jiǎn)單,而且這樣設(shè)置后,當(dāng)語(yǔ)言切換時(shí),這些 UIKit 對(duì)象的文本內(nèi)容會(huì)自動(dòng)變?yōu)樾略O(shè)置的語(yǔ)言,不需要任何額外處理。

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 暫不支持切換語(yǔ)言后自動(dòng)修改文本內(nèi)容的 UIKit 對(duì)象,可以這樣獲取需要的本地化字符串:

// 其中 “title” 為 strings 文件中對(duì)應(yīng)的 key,“infoPlist”是本地化字符串文件名
NSString *localizedString = SOLocalizedStringFromTable(@"title", @"infoPlist");

5.修改應(yīng)用內(nèi)使用的語(yǔ)言

// to use English
[SOLocalization sharedLocalization].region = SOLocalizationEnglish;
// to use 簡(jiǎn)體中文
[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");

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“iOS如何實(shí)現(xiàn)應(yīng)用內(nèi)切換本地化語(yǔ)言的方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

ios
AI