之前公司的app可能要在島國(guó)和東南亞地區(qū)使用缀台,所以最合理的方法就是--國(guó)際化棠赛。
寫(xiě)這篇文章也是為一個(gè)妹子寫(xiě)的(咦~~要是漢子我才不寫(xiě)),她在xib那一塊的國(guó)際化有些不太了解膛腐,正好其他童鞋也可以學(xué)習(xí)下睛约。難度還是不大的,挺簡(jiǎn)單的哲身。
文本分三部分開(kāi)始講國(guó)際化:字符串國(guó)際化(包括app名稱)辩涝、圖片國(guó)際化、sb xib國(guó)際化勘天。(有其他需要補(bǔ)充請(qǐng)?zhí)崾疚艺S時(shí)補(bǔ)充)
先從字符串開(kāi)始吧:
1:字符串國(guó)際化:
打開(kāi)你的工程,選中project->Info->Localizations脯丝,然后點(diǎn)擊”+”沧踏,添加需要國(guó)際化/本地化的語(yǔ)言,如下圖箭頭位置:
添加完你想要的語(yǔ)言之后巾钉,會(huì)顯示如下提示框:
注意: “zh-Hans”和“zh-Hant”是簡(jiǎn)體中文和繁體中文的縮寫(xiě),不要混淆了
(1)選擇完語(yǔ)言之后就是國(guó)際化字符串秘案,先從app名稱開(kāi)始:
選中Info.plist砰苍,按下鍵盤(pán)上的command + N,選擇Strings File(iOS->Resource->Strings File)
選擇之后就是命名阱高,注意:文件名字命名為InfoPlist赚导,且必須是這個(gè)名字
之后你會(huì)發(fā)現(xiàn)工程中會(huì)多出新建的文件:
之后需要做的是選中InfoPlist.strings,在xcode右側(cè)點(diǎn)擊
這個(gè)按鈕赤惊。
會(huì)彈出一個(gè)對(duì)話框吼旧,展開(kāi)對(duì)話框列表,發(fā)現(xiàn)下拉列表所展示的語(yǔ)言正是我們?cè)谏厦媾渲玫男枰獓?guó)際化的語(yǔ)言未舟,選擇我們需要本地化的語(yǔ)言圈暗,然后點(diǎn)擊Localize按鈕:
隨后右側(cè)會(huì)出現(xiàn)好多你添加的語(yǔ)言:
你每個(gè)勾選上就可以了掂为。隨后去剛剛穿件的pilist就能看到勾選上的語(yǔ)言:
簡(jiǎn)單闡述下原理:程序啟動(dòng)時(shí),會(huì)根據(jù)操作系統(tǒng)設(shè)置的語(yǔ)言员串,自動(dòng)加載InfoPlist.strings文件下對(duì)應(yīng)的語(yǔ)言文件勇哗,然后顯示應(yīng)用程序的名字。
接下來(lái)寸齐,我們分別用不同的語(yǔ)言給InfoPlist.strings下的文件設(shè)置對(duì)應(yīng)的名字欲诺。
在不通語(yǔ)言中配置不通的app名字:各個(gè)語(yǔ)言都隨便起一個(gè)名字,拿英語(yǔ)版舉例渺鹦,就不一一配置了扰法。
CFBundleDisplayName = "";是顯示不通的名字
之后更改你的手機(jī)語(yǔ)言,運(yùn)行一下demo就能看到不用的app名稱了毅厚。
以上app名稱國(guó)際化就完成了塞颁,總結(jié)一下:
1.在Project的設(shè)置中通過(guò)點(diǎn)擊”+”添加需要本地化的語(yǔ)言。
2.然后在Xcode右側(cè)的File inspection中點(diǎn)擊Localize卧斟,選中需要本地化App名稱的語(yǔ)言殴边。
3.最后在每個(gè)語(yǔ)言對(duì)應(yīng)的文件中以key = value(CFBundleDisplayName = “App名稱”;);的形式設(shè)置App的名稱。
(2)國(guó)際化字符串:
和應(yīng)用名稱本地化一樣珍语,首先需要command + N锤岸,選擇iOS -> Resource -> Strings File,需要注意的是板乙,字符串國(guó)際化的plist文件名必須是:Localizable
文件創(chuàng)建成功是偷,查看Xcode左側(cè)導(dǎo)航列表,發(fā)現(xiàn)多了一個(gè)名為L(zhǎng)ocalizable.strings的文件募逞,同樣選中Localizable.strings文件蛋铆,在Xcode的File inspection中點(diǎn)擊Localize
選擇需要國(guó)際化的語(yǔ)言:
同樣在每個(gè)語(yǔ)言都勾選上,之后左側(cè)自動(dòng)出現(xiàn)如下:
依舊是以key-value的形式去寫(xiě):
每種語(yǔ)言都寫(xiě)上適當(dāng)?shù)膰?guó)際化語(yǔ)言放接,寫(xiě)完之后刺啦,我們要用到NSLocalizedString(key, comment)這個(gè)宏,根據(jù)Key獲取對(duì)應(yīng)的字符串纠脾,然后賦值給代碼中的字符串玛瘸。
在需要國(guó)際化字符串的地方這樣寫(xiě):
運(yùn)行之后,btn的名字就會(huì)隨著系統(tǒng)的語(yǔ)言而改變苟蹈。
細(xì)心的同學(xué)可以發(fā)現(xiàn)糊渊,我沒(méi)有給English語(yǔ)言適配,原因如下:系統(tǒng)根據(jù)某個(gè)key去獲取對(duì)應(yīng)的字符串時(shí)慧脱,如果沒(méi)有找到渺绒,那么就會(huì)以key作為value返回。
這樣,字符串的國(guó)際化適配就做完了宗兼,不過(guò)如果真的適配到工程里躏鱼,工作量太大了,我們項(xiàng)目都做的差不多了针炉,老板才告知要適配多語(yǔ)言挠他,之后又苦逼的去國(guó)際化。中文太多了篡帕,雖然沒(méi)有技術(shù)含量殖侵,但一整天的適配,累死了镰烧。
(3)突然想到另外一點(diǎn)拢军,就是如果多人共同開(kāi)發(fā)情況下,國(guó)際化字符串的方法法:
項(xiàng)目開(kāi)發(fā)中怔鳖,獨(dú)立開(kāi)發(fā)的還是少數(shù)茉唉。經(jīng)常會(huì)有多人開(kāi)發(fā)的情況,這種情況结执,如果多人同時(shí)操作本地化文件度陆,極有可能會(huì)存在沖突。也就是說(shuō)献幔,我們不希望對(duì)方操作我們的本地化文件懂傀。但是上面介紹的代碼中字符串的本地化是使用的是默認(rèn)的文件名”Localizable”,因?yàn)閱?dòng)程序時(shí),系統(tǒng)將根據(jù)語(yǔ)言加載相應(yīng)的文件得到其對(duì)應(yīng)的字符串文件蜡感,這個(gè)字符串可以通過(guò)系統(tǒng)將NSLocalizedString中的宏生成名為“Localizable.strings”的文件蹬蚁。so我們要用到NSLocalizedStringFromTable(, , )。
也就是說(shuō)郑兴,如果你的strings文件名字不是Localizable而是自定義的話犀斋,如FuckBoss.strings,那么你就得使用NSLocalizedStringFromTable這個(gè)宏來(lái)讀取本地化字符串情连。
三個(gè)參數(shù):1.國(guó)際化的字符串 2.你創(chuàng)建的FuckBoss文件的名稱 3.填nil就ok了
這種做法叽粹,同樣能達(dá)到國(guó)際化的效果禁筏,并且別人還不會(huì)修改你的代碼衡招。
(2)圖片的國(guó)際化
下面開(kāi)始講講圖片的國(guó)際化方法:
1.第一種方式是最簡(jiǎn)單的空执,就是根據(jù)之前字符串key-value方式儲(chǔ)存照片名稱
2.第二種方法
將圖片拖入工程中门坷,例如“music@2x.png”绸吸,然后選中music@2x.png,展開(kāi)Xcode右側(cè)的file Inspection,點(diǎn)擊Localize
然后甫菠,右擊music@2x.png->show in Finder,我們發(fā)現(xiàn)在en.Iproj文件中多了一個(gè)名為music@2x.png的圖片
當(dāng)然脯宿,zh-Hans.Iproj文件夾下并沒(méi)有圖片,因此你需要重復(fù)上一步的步驟,只不過(guò)這次選擇語(yǔ)言的時(shí)候選擇“中文”就ok了
這樣圖片就添加進(jìn)去了哩至,相同的步驟菜谣,把所有需要國(guó)際化的圖片冈敛,按照這個(gè)方法癌压,添加進(jìn)去就行了棠枉,之后去手機(jī)系統(tǒng)里切換不同語(yǔ)言泡挺,運(yùn)行xcode辈讶。
(3)sb贱除、xib國(guó)際化方法:
首先點(diǎn)擊一下xib褂删,之后去右側(cè)找Localize..
這時(shí)候出來(lái)的彈窗,會(huì)想上面一面鳄虱,下拉會(huì)有好多語(yǔ)言弟塞,這時(shí)候,你只需選擇“Base”
下一步倍踪,之后繼續(xù)去xcode右側(cè):
會(huì)出現(xiàn)未勾選的語(yǔ)言系宫,這時(shí)候全部勾選上。去xcode左側(cè)建车,會(huì)出現(xiàn)下圖:
xib能夠點(diǎn)開(kāi)扩借,會(huì)出現(xiàn)不同語(yǔ)種的,隨便點(diǎn)擊一個(gè)(英語(yǔ)為例):
紅框的地方修改成你想表達(dá)的英語(yǔ)癞志,這個(gè)key-value頁(yè)面里往枷,基本涵蓋了xib上所有的屬性,你只需去修改就可以了凄杯。
同理错洁,再去設(shè)置其他語(yǔ)言的內(nèi)容,之后去手機(jī)系統(tǒng)里切換不同語(yǔ)言戒突,運(yùn)行xcode屯碴。
熟悉一邊之后就會(huì)覺(jué)得挺簡(jiǎn)單的,沒(méi)多大難度膊存。
煩人的地方就在于你版本中的中文导而,用NSLocalizedString(key, comment)這個(gè)宏忱叭,全部改為國(guó)際化模式,中文太多今艺,手就廢了韵丑。
以上總結(jié)國(guó)際化,哪里有錯(cuò)誤虚缎,還請(qǐng)童鞋指出撵彻。
溫馨提示:妹子,祝你好運(yùn)实牡。等我北京陌僵,記得帶我去次好次噠。