iOS 本地化 國(guó)際化 筆記

字符串的本地化

本地化用到的宏

//接收一個(gè) key, 返回對(duì)應(yīng)的 value, comment是對(duì)鍵值對(duì)的評(píng)注 一般傳 nil
NSLocalizedString(key, comment) 
  
//通過(guò)指定的 xxxx.string 文件名, 取出對(duì)應(yīng)的value
NSLocalizedStringFromTable(key, tbl, comment) 

//可以指定 budle 的名稱加載對(duì)應(yīng)的Localizable.string 文件 (或者其他 xxxx.string 文件)     
NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) 

//傳入各個(gè)參數(shù), 如果都找不到對(duì)應(yīng)的 value, 就用你傳入的 val 參數(shù)的值作為返回值
NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)

這四個(gè)宏全部是對(duì)這個(gè)方法的 #define盾致,直接在蘋果官方文檔搜索這個(gè) API顶瞒,會(huì)有詳細(xì)的解釋

localizedStringForKey:key   value:value   table:table

創(chuàng)建一個(gè)新工程,作為測(cè)試本地化的 test 工程
Command + N 創(chuàng)建办斑,指定 .string文件名稱為L(zhǎng)ocalizable.string 文件

創(chuàng)建 Localizable string 文件.png

在文件中寫上需要本地化的字符串

需要本地化的字符串.png

對(duì)字符串進(jìn)行行本地化處理增蹭,點(diǎn)擊右邊的Localize 按鈕對(duì)Localizable.string
進(jìn)行本地化。這里一般會(huì)有兩個(gè)選項(xiàng)午乓,Base 和 English站宗,English 就是當(dāng)系統(tǒng)語(yǔ)言是英文的時(shí)候展示的字符串。那么 Base 是什么呢益愈? 官方文檔中有一篇Enabling Base Internationalization 的 Guide 詳細(xì)說(shuō)了 Base 的本地化是為了 Xib 和 SB 準(zhǔn)備的梢灭,有興趣可以去查閱。

本地化處理.png

可以先選擇 English 選項(xiàng)蒸其, 然后

本地化后的.string.png

默認(rèn)只有English 和 Base 兩個(gè)選項(xiàng)敏释,這里可以本地化成多少種語(yǔ)言取決于你在項(xiàng)目配置中添加了多少種語(yǔ)言,如下圖

為項(xiàng)目配置更多本地化語(yǔ)言選項(xiàng).png

這里再添加一個(gè)簡(jiǎn)體中文摸袁,Chinese(Simplified) 那么Localizable.string 下就會(huì)多了一個(gè)簡(jiǎn)體中文的選項(xiàng)

多個(gè)語(yǔ)言選項(xiàng)的.string.png

同樣一個(gè) "hello" 的鍵钥顽,在簡(jiǎn)體中文中對(duì)應(yīng) "你好", 在英文中對(duì)應(yīng)"hello"靠汁,至于要在對(duì)應(yīng)的Localizable.string 里編寫鍵值對(duì)就 OK了蜂大。

"hello" = "hello";   Localizable.strings (English)
"hello" = "你好";    Localizable.strings (Chinese Simplified)

這個(gè)時(shí)候 SB 中也會(huì)多了一個(gè)簡(jiǎn)體中文的選項(xiàng),和 Base 選項(xiàng)蝶怔,Base對(duì)應(yīng)的就是 SB 本身奶浦,就是當(dāng)找不到對(duì)應(yīng)本地化語(yǔ)言的時(shí)候就默認(rèn)顯示成 Base 的文字。這個(gè)下面再說(shuō)踢星。

這個(gè)時(shí)候你在 SB 中隨便拖一個(gè) Label澳叉,把手機(jī)語(yǔ)言設(shè)置成英語(yǔ)和簡(jiǎn)體中文,那么對(duì)應(yīng) label 就會(huì)顯示為 "hello" 和 "你好"斩狱。

    self.Label.text = NSLocalizedString(@"hello", nil);

SB 中的本地化

剛才在對(duì)Localizable.strings 進(jìn)行多語(yǔ)言本地化的時(shí)候耳高,SB 的選擇項(xiàng)下也會(huì)出現(xiàn)對(duì)應(yīng)多個(gè)語(yǔ)言的選項(xiàng)扎瓶, 如果沒(méi)有的話所踊, 你可以選擇本地化 SB

如何對(duì) SB 本地化.png

如果 SB 中有相應(yīng)的 Label 控件,那么在本地化的 string 文件里應(yīng)該會(huì)有類似這種格式的文字概荷,如果沒(méi)有的話, 那就隨便再多加一種語(yǔ)言秕岛,勾選 SB 的Localization,就會(huì)根據(jù)最新的空間情況生成以下信息:

/* Class = "UILabel"; text = "我是 label"; ObjectID = "r36-3S-eeu"; */
"r36-3S-eeu.text" = "我是 label";

那么,我以后每添加一次控件继薛, string 文件并不會(huì)主動(dòng)刷新修壕, 那我怎么控制控件的本地化文字呢?看了下圖你應(yīng)該明白遏考,SB 就是 xml 文件嘛慈鸠, 他要的就是一個(gè)ObjectID,我們都知道這個(gè) ID 了灌具,那前面的格式照搬就 OK 了青团。

查看 Label 的屬性.png

本地化 app 名稱

同理,,創(chuàng)建InfoPlist.string 文件咖楣, 然后點(diǎn)擊Localize 按鈕

CFBundleDisplayName="中文名稱";     InfoPlist.strings (Chinese simplified)
CFBundleDisplayName="English Name";   InfoPlist.strings (English) 

同樣我們還可以有很多的 key 可以設(shè)置督笆, 這些 key 在官方文檔里搜索 cocoa keys 就可以查詢得到, 這樣你就可以對(duì)這些 key 進(jìn)行本地化

NSCameraUsageDescription   //打開相機(jī)的描述信息
NSPhotoLibraryUsageDescription  //使用相冊(cè)的描述信息
NSLocationUsageDescription
......

神奇的Localization native development region

這個(gè) info.plist 里的 key 一開始是很疑惑诱贿,覺(jué)得他好像沒(méi)什么用娃肿,region 寫在哪,也和我的 app 語(yǔ)言好像沒(méi)什么影響珠十,后來(lái)在這篇文章里找到了答案, 他解釋了 app 應(yīng)用哪種語(yǔ)言的優(yōu)先級(jí),寫得很不錯(cuò)料扰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宵睦,隨后出現(xiàn)的幾起案子记罚,更是在濱河造成了極大的恐慌,老刑警劉巖壳嚎,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐智,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烟馅,警方通過(guò)查閱死者的電腦和手機(jī)说庭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)郑趁,“玉大人刊驴,你說(shuō)我怎么就攤上這事」讶螅” “怎么了捆憎?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梭纹。 經(jīng)常有香客問(wèn)我躲惰,道長(zhǎng),這世上最難降的妖魔是什么变抽? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任础拨,我火速辦了婚禮氮块,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诡宗。我一直安慰自己滔蝉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布塔沃。 她就那樣靜靜地躺著蝠引,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛀柴。 梳的紋絲不亂的頭發(fā)上立肘,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音名扛,去河邊找鬼谅年。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肮韧,可吹牛的內(nèi)容都是我干的融蹂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼弄企,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼超燃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拘领,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤意乓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后约素,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體届良,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年圣猎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了士葫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡送悔,死狀恐怖慢显,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欠啤,我是刑警寧澤荚藻,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站洁段,受9級(jí)特大地震影響应狱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜眉撵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一侦香、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纽疟,春花似錦罐韩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蟆肆,卻和暖如春矾睦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炎功。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工枚冗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛇损。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓赁温,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淤齐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子股囊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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