前言:iOS的語言國(guó)際化是指根據(jù)用戶手機(jī)系統(tǒng)的語言設(shè)置,自動(dòng)將APP的語言設(shè)置為和用戶手機(jī)系統(tǒng)語言一致的語言申鱼。通常一些APP需要支持多種語言既琴,這就要求APP所展示的文字信息朝扼,能夠在不同的系統(tǒng)語言下呈現(xiàn)出相對(duì)應(yīng)的語言也拜。本文將簡(jiǎn)單從以下常用的幾方面進(jìn)行圖文講解以舒。
一、APP名稱國(guó)際化
APP名稱國(guó)際化是指同一個(gè)APP的名稱慢哈,在不同的系統(tǒng)語言環(huán)境下顯示不同的名稱蔓钟。
創(chuàng)建一個(gè)新的strings
文件如圖1-1:
點(diǎn)擊Next將文件命名為InfoPlist
且必須是這個(gè)名字(這里有些電腦可能會(huì)顯示出strings
后綴,只需要改后綴前的名字即可)如圖1-2:
點(diǎn)擊Create即創(chuàng)建成功在左側(cè)列表會(huì)顯示一個(gè)InfoPlist.strings
文件如圖1-3:
此時(shí)選中該文件可以在右側(cè)看到如圖1-4:
點(diǎn)擊Localize...
按鈕即可顯示出當(dāng)前已添加的語言如圖1-5:
這里是由于我們還沒有添加任何的語言只有一個(gè)默認(rèn)的英語卵贱,現(xiàn)在可以添加一些我們需要的語言滥沫。如圖1-6:
這里我們添加簡(jiǎn)體中文和繁體中文如圖1-7:
這里選擇了需要添加的資源文件即我們創(chuàng)建的InfoPlist.strings
文件,創(chuàng)建完成后如圖1-8:
可以看到選擇有三種語言:簡(jiǎn)體中文键俱、繁體中文兰绣、英文。這三種語言都只有一個(gè)資源文件即我們的InfoPlist.strings
文件编振。此時(shí)可以看到剛創(chuàng)建的InfoPlist.strings
文件也發(fā)生了變化缀辩,在左側(cè)出現(xiàn)了一個(gè)三角箭頭,意味著該文件已經(jīng)不是一個(gè)文件了,點(diǎn)擊箭頭可見里邊包含了三個(gè)子文件如圖1-9:
同時(shí)選中主文件即當(dāng)選選中的項(xiàng)查看右側(cè)可見多了我們剛添加的語言如圖1-10:
從1-6至1-8這三步其實(shí)可以在工程創(chuàng)建的時(shí)候就可以添加雌澄,前提是Main.storyboard或者Launch.storyboard沒有被刪除,這時(shí)添加語言時(shí)是可以選擇這兩項(xiàng)的杯瞻,要不無法添加镐牺。由于我的開發(fā)習(xí)慣是純代碼開發(fā),故不用這兩項(xiàng)魁莉,所以在創(chuàng)建文件的時(shí)候直接就給刪除了睬涧。這樣就需要在創(chuàng)建了strings
文件之后再添加語言。
至此該創(chuàng)建的文件已創(chuàng)建完成旗唁,現(xiàn)在只需要在剛才圖1-9的文件中按照固定格式(key = value)設(shè)置相應(yīng)的名字即可畦浓,如圖1-11至圖1-13:
CFBundleDisplayName為固定字段,可以加雙引號(hào)也可以不加检疫。
修改模擬器或者手機(jī)語言為英文讶请、簡(jiǎn)體中文、繁體中文顯示如圖1-14至圖1-16:
至此屎媳,APP名稱國(guó)際化已完成夺溢。
二、APP內(nèi)字符串國(guó)際化
APP內(nèi)字符串國(guó)際化實(shí)現(xiàn)有兩種:
1烛谊、通過系統(tǒng)固定strings
文件名稱來實(shí)現(xiàn)风响;
創(chuàng)建strings
文件如圖2-1-1:
點(diǎn)擊Next將文件命名為Localizable
且必須是這個(gè)名字(這里有些電腦可能會(huì)顯示出strings
后綴,只需要改后綴前的名字即可)如圖2-1-2:
點(diǎn)擊Create即創(chuàng)建成功在左側(cè)列表會(huì)顯示一個(gè)Localizable.strings
文件如圖2-1-3:
此時(shí)選中該文件可以在右側(cè)看到如圖2-1-4:
點(diǎn)擊Localize...
按鈕此時(shí)會(huì)彈出一個(gè)選擇語言的彈框(這是由于當(dāng)前工程包含的語言不止一種)如圖2-1-5:
選擇一種語言點(diǎn)擊Localize按鈕即可如圖2-1-6:
現(xiàn)在顯示的是我們剛才選擇的那種語言丹禀,然后在這就可以對(duì)其他未選中的語言選擇就行了状勤,我們把未選中的兩種語言均添加,選擇語言大于一種双泪,該strings
文件會(huì)自動(dòng)添加相應(yīng)語言文件持搜,即左側(cè)會(huì)出現(xiàn)一個(gè)三角箭頭如圖2-1-7:
現(xiàn)在我們只需要在相應(yīng)的文件中按照固定格式(key = value)設(shè)置需要國(guó)際化的字符串即可。這里我們以標(biāo)簽欄標(biāo)題為例如圖2-1-8至圖2-1-10:
使用時(shí)需要用到Foundation
框架下的一個(gè)宏NSLocalizedString(key, comment)
焙矛,該宏中包含兩個(gè)參數(shù)ket
和comment
朵诫。
key
:我們?cè)?code>strings文件中的鍵(key)。
comment
:對(duì)該字符串的描述(注釋)薄扁,可寫nil
或者@""
或者任意字符串剪返。
該宏的意思為根據(jù)傳入的key
來獲取對(duì)應(yīng)的字符串,如果沒有找到相應(yīng)的字符串會(huì)返回傳入的key
邓梅。
代碼中寫法如圖2-1-11:
修改模擬器或者手機(jī)語言為英文脱盲、簡(jiǎn)體中文、繁體中文我們來看一下顯示效果如圖2-1-12至圖2-1-14:
至此通過系統(tǒng)固定strings
文件名稱來實(shí)現(xiàn)APP內(nèi)字符串國(guó)際化已完成日缨。
2钱反、通過自定義strings
文件名稱來實(shí)現(xiàn)。
通過自定義strings
文件名稱來實(shí)現(xiàn)語言國(guó)際化是為了在多人開發(fā)或者自己想發(fā)一個(gè)屬于自己的第三方控件并添加語言國(guó)際化的時(shí)候使用。這是為了避免工程中已存在系統(tǒng)固定strings
文件名稱而產(chǎn)生沖突面哥,同時(shí)也可以避免與其他人共用同一個(gè)strings
文件而造成的不必要的麻煩哎壳。下面我們來簡(jiǎn)單講解該實(shí)現(xiàn)方法。
創(chuàng)建strings
文件如圖2-2-1:
點(diǎn)擊Next將文件命名為RHLocalizable
(這里有些電腦可能會(huì)顯示出strings
后綴尚卫,只需要改后綴前的名字即可)如圖2-2-2:
點(diǎn)擊Create即創(chuàng)建成功在左側(cè)列表會(huì)顯示一個(gè)RHLocalizable.strings
文件如圖2-2-3:
此時(shí)重復(fù)上圖2-1-4至圖2-1-7的操作归榕。接下來我們?cè)趧偛艅?chuàng)建的RHLocalizable
文件中按照固定格式(key = value)設(shè)置需要國(guó)際化的字符串即可。這里我們以字符串“”為例如圖2-2-4至圖2-1-6:
使用時(shí)需要用到Foundation
框架下的一個(gè)宏NSLocalizedStringFromTable(key, tbl, comment)
吱涉,該宏中包含三個(gè)參數(shù)ket
刹泄、tbl
和comment
。
key
:我們?cè)?code>strings文件中的鍵(key)怎爵。
tbl
:我們創(chuàng)建的strings
文件的名稱特石。
comment
:對(duì)該字符串的描述(注釋),可寫nil
或者@""
或者任意字符串鳖链。
該宏的意思為根據(jù)傳入的key
在名為tbl
的strings
文件中來獲取對(duì)應(yīng)的字符串姆蘸,如果沒有找到相應(yīng)的字符串會(huì)返回傳入的key
。
使用時(shí)代碼中寫法如圖2-2-7:
修改模擬器或者手機(jī)語言為英文芙委、簡(jiǎn)體中文乞旦、繁體中文我們來看一下顯示效果如圖2-2-8至圖2-2-10:
至此通過自定義strings
文件名稱來實(shí)現(xiàn)APP內(nèi)字符串國(guó)際化已完成。
由上可見無論是使用系統(tǒng)固定strings
文件名還是自定義strings
文件名的語言國(guó)際化在使用的時(shí)候都要使用到系統(tǒng)提供的相應(yīng)的宏题山,但是這兩個(gè)宏都比較長(zhǎng)并且并不是所有的參數(shù)都是每次需要改變的兰粉,所以我們?cè)谑褂玫臅r(shí)候可以通過系統(tǒng)的宏來再次定義兩個(gè)寫起來比較簡(jiǎn)短的宏來提高開發(fā)寫代碼效率,并且也能稍微的提高一下代碼的美觀顶瞳。
這里給大家暴露一下我的使用習(xí)慣如下:
#define LS(key) NSLocalizedString(key, nil)
#define RHLS(key) NSLocalizedStringFromTable(key, @"RHLocalizable", nil)
最后玖姑,還是希望能夠幫助到有需要的朋友們,愿我們能夠一起學(xué)習(xí)進(jìn)步慨菱,在開發(fā)的道路上越走越順利Q媛纭!!