iOS 多語(yǔ)言版本的開(kāi)發(fā)(一)

iOS 多語(yǔ)言版本的開(kāi)發(fā)(一)

引言

多語(yǔ)言 & 本地化,隨你怎么叫褐桌,道理差不多;一個(gè)App 要想走出國(guó)門象迎,只支持一種語(yǔ)言是不能夠的荧嵌,也是不可能的,多元化世界已經(jīng)融入我們的生活砾淌,對(duì)于一些應(yīng)用啦撮,開(kāi)發(fā)多語(yǔ)言版本,已經(jīng)是不可避免的汪厨,特別是旅游等方面的應(yīng)用赃春;國(guó)內(nèi)也有很多App 已經(jīng)接入多語(yǔ)言,例如:支付寶劫乱、微信织中、收留我(嘻嘻,做下廣告)等衷戈;

開(kāi)發(fā)多語(yǔ)言狭吼,一般有兩種情況

1、App還沒(méi)有開(kāi)始寫殖妇,這個(gè)時(shí)候創(chuàng)建一個(gè)多語(yǔ)言版本刁笙,很是容易,然后再寫代碼的時(shí)候稍微留意下哪里需要保持多語(yǔ)言就行了谦趣;
2疲吸、App已經(jīng)上線了,而且之前沒(méi)有任何的為開(kāi)發(fā)多語(yǔ)言準(zhǔn)備過(guò)前鹅,這時(shí)候Boss讓開(kāi)發(fā)多語(yǔ)言版本摘悴,這下你就苦逼了,想想項(xiàng)目中長(zhǎng)長(zhǎng)短短的中文字符串舰绘,沒(méi)有上千也得上幾百了吧烦租,在想想一個(gè)一個(gè)替換,哎呀媽呀除盏,那么多叉橱,想想都想死了,在想想還容易出錯(cuò)者蠕,哎呀媽呀窃祝,讓我死了算了;

別急踱侣,這次我就針對(duì)兩種情況都講解下粪小;

項(xiàng)目剛開(kāi)始啟動(dòng)

1大磺、新建一個(gè)項(xiàng)目(我就不多說(shuō)了)

2、command + N 添加多語(yǔ)言文件探膊,如下圖


localized01.jpg

3杠愧、添加多語(yǔ)言,如圖


localized02.jpg

選擇English 點(diǎn)擊Localize
localized03.jpg

到這里已經(jīng)算是添加好了多語(yǔ)言文件逞壁,接下來(lái)就是添加多語(yǔ)言

之前的XCode(具體到哪一個(gè)版本之前流济,不清楚了,我使用的是XCode7)腌闯,是可以在如下圖中直接點(diǎn)擊?號(hào) 绳瘟,添加多語(yǔ)言的


localized04.jpg

現(xiàn)在需要進(jìn)入項(xiàng)目的Project中的Localizations 中進(jìn)行添加,如圖


localized05.jpg

我只添加了中文繁體姿骏,簡(jiǎn)體糖声,以及英文,Demo使用的StoryBoard, 而添加多語(yǔ)言時(shí)分瘦,我沒(méi)有選擇為StoryBoard添加多語(yǔ)言版本的蘸泻,畢竟是Demo??;但是不影響使用嘲玫。
localized06.jpg

到這里多語(yǔ)言文件中會(huì)出現(xiàn)如上圖中的三個(gè).strings 后綴的文件悦施,這就是多語(yǔ)言對(duì)應(yīng)的文件了,多語(yǔ)言添加的方式類似趁冈,字典 key=value 一一對(duì)應(yīng)的關(guān)系歼争,key 在三個(gè).strings 中必須一致拜马,而value 則分別對(duì)應(yīng)不同的語(yǔ)言字體渗勘,即可;

4俩莽、多語(yǔ)言文件的使用

現(xiàn)分別在不同的語(yǔ)言文件中添加如下測(cè)試文本:

"showTxt"="this is test text";
"showTxt"="這是一個(gè)測(cè)試的文本";
"showTxt"="這是一個(gè)測(cè)試的文本";

說(shuō)到使用旺坠,就要了解下NSLocalizedString是什么

 #define NSLocalizedString(key, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
 #define NSLocalizedStringFromTable(key, tbl, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
        [bundle localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
        [bundle localizedStringForKey:(key) value:(val) table:(tbl)] 

其實(shí)就是宏,而宏定義的又是在資源文件中尋找對(duì)應(yīng)的資源文件扮超;在這里有個(gè)坑點(diǎn)取刃,當(dāng)你使用第一種實(shí)現(xiàn)多語(yǔ)言本地化,意味著你的多語(yǔ)言文件名字必須是Localizable,否則你的多語(yǔ)言實(shí)現(xiàn)出刷,到最后顯示的卻只能是key璧疗;
第一種適合于,讓應(yīng)用跟隨系統(tǒng)的語(yǔ)言版本進(jìn)行切換馁龟,而用戶卻不能手動(dòng)進(jìn)行切換崩侠; 我們要實(shí)現(xiàn)的是既可以跟隨系統(tǒng),又可以用戶自己切換坷檩,就不能使用這一個(gè)了却音,那就要使用第二種NSLocalizedStringFromTable(key, tbl, comment)?tbl這個(gè)參數(shù)改抡,就是我們自己命名的多語(yǔ)言文件名稱;
因此我們暫且這樣使用(這樣直接使用系瓢,會(huì)跟隨系統(tǒng)語(yǔ)言):

NSLocalizedStringFromTable(@"showTxt", @"ASLocalized", nil);

參數(shù)說(shuō)明: 第一個(gè)參數(shù)阿纤,是多語(yǔ)言中的key, 第二個(gè)參數(shù),是多語(yǔ)言文件的名字夷陋,第三個(gè)是對(duì)key的注釋說(shuō)明欠拾,一般為nil就可以了;
對(duì)于這樣使用NSLocalizedString("showTxt", nil)肌稻,切記多語(yǔ)言文件名必須是Localizable, 這里我們就不可以使用這種了清蚀;

到這里,就可以實(shí)現(xiàn)簡(jiǎn)單的跟隨系統(tǒng)語(yǔ)言的多語(yǔ)言版本了;

效果圖如下:

localized07.png
localized08.png

原文鏈接:http://www.devashen.com/blog/archives/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爹谭,一起剝皮案震驚了整個(gè)濱河市枷邪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诺凡,老刑警劉巖东揣,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腹泌,居然都是意外死亡嘶卧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門凉袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芥吟,“玉大人,你說(shuō)我怎么就攤上這事专甩≈油遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵涤躲,是天一觀的道長(zhǎng)棺耍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)种樱,這世上最難降的妖魔是什么蒙袍? 我笑而不...
    開(kāi)封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮嫩挤,結(jié)果婚禮上害幅,老公的妹妹穿的比我還像新娘。我一直安慰自己岂昭,他們只是感情好以现,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般叼风。 火紅的嫁衣襯著肌膚如雪取董。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天无宿,我揣著相機(jī)與錄音茵汰,去河邊找鬼。 笑死孽鸡,一個(gè)胖子當(dāng)著我的面吹牛蹂午,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彬碱,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豆胸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了巷疼?” 一聲冷哼從身側(cè)響起晚胡,我...
    開(kāi)封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚼沿,沒(méi)想到半個(gè)月后估盘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骡尽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年遣妥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀细。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箫踩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谭贪,到底是詐尸還是另有隱情境钟,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布故河,位于F島的核電站吱韭,受9級(jí)特大地震影響吆豹,放射性物質(zhì)發(fā)生泄漏鱼的。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一痘煤、第九天 我趴在偏房一處隱蔽的房頂上張望凑阶。 院中可真熱鬧,春花似錦衷快、人聲如沸宙橱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)师郑。三九已至环葵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宝冕,已是汗流浹背张遭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留地梨,地道東北人菊卷。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宝剖,于是被迫代替她去往敵國(guó)和親洁闰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容