簡(jiǎn)書新人,寫的不好的地方,還請(qǐng)指出。
前期準(zhǔn)備
先點(diǎn)擊工程->PROJECT->Localizations添加你要本地化的語言

如果是已經(jīng)本地化過的項(xiàng)目,這里添加之后會(huì)彈出

Resource File是需要本地化為你剛剛選擇的語言的項(xiàng)目,Reference Language是本地化文件生成時(shí)使用的模板,一般默認(rèn)即可。
1,App名稱(以我的Xcode9.2為例)
點(diǎn)擊工程->TARGETS->General

會(huì)看到如下界面,在Display Name一項(xiàng)填寫你的App名稱(中英文都可),不填可能會(huì)導(dǎo)致編譯不通過,填寫完成之后,Xcode會(huì)自動(dòng)在工程的info.plist里面生成此字段。
此后要在工程目錄下新建一個(gè)strings文件

并命名為InfoPlist(不要問我為什么)

點(diǎn)擊該文件,在Xcode最右邊會(huì)出現(xiàn)此界面

點(diǎn)擊Localize...按鈕

點(diǎn)擊Localize,本地化此語言,一般默認(rèn)即可。完成之后剛才的Localize...按鈕位置的地方會(huì)變成這樣

勾選你要本地化的語言即可。
之后文件就變成了這種狀態(tài),包含各種語言,應(yīng)用安裝時(shí)或者系統(tǒng)語言切換時(shí)會(huì)自動(dòng)加載各語言文件,來設(shè)置不同語言的App名稱

選中一個(gè)


這里用到了CFBundleDisplayName這個(gè)key,這個(gè)key是設(shè)置App名稱的,按照此方法設(shè)置好對(duì)應(yīng)語言App名稱即可(這里和開頭設(shè)置的Display Name字段不沖突,如果這里設(shè)置的話,就會(huì)按照這里的來顯示)。
2,本地化圖片
(1)直接本地化
大致與上面的一樣,選中需要本地化的文件,點(diǎn)擊Localize...按鈕,勾選你需要本地化的語言即可。
之后就變成了這樣

注:Assets.xcassets里面的圖片不能直接本地化
然后右鍵點(diǎn)擊文件

去到工程目錄下,

在 對(duì)應(yīng)的語言文件夾 下,復(fù)制替換 對(duì)應(yīng)圖片的對(duì)應(yīng)語言版本 就好了,可以看到此時(shí)這個(gè)圖片現(xiàn)在是在en 英文語言文件夾下
那么我們就把他替換為 英文版圖片 就好了,同理, 中文 或者 其他語言版本的圖片 的步驟一樣。
(2)間接本地化
請(qǐng)看文末
3,本地化字符串
和本地化App名稱一樣,先創(chuàng)建一個(gè)strings文件,并命名為Localizable(還是不要問我為什么)
接下來選中文件,點(diǎn)擊Localize...按鈕,勾選你要本地化的語言

然后可以在里面以key=value的形式添加一項(xiàng)


在你的代碼里面,找到需要本地化的字符串,加上NSLocalizedString()
NSString *title = NSLocalizedString(@"viewVC_title", nil);

這樣title的值在英文環(huán)境下顯示為hahaha
在中文簡(jiǎn)體環(huán)境下顯示為哈哈哈
注:此NSLocalizedString()宏的返回值為NSString類型,因此可以直接當(dāng)做NSString*對(duì)象來使用,如
self.title = NSLocalizedString(@"viewVC_title", nil);
[button setTitle:NSLocalizedString(@"viewVC_buttontitle", nil) forState:UIControlStateNormal];


這種方法一般需要來回切換文件一行一行的手動(dòng)添加,下面介紹一種相對(duì)來說簡(jiǎn)單一些的方法
首先把需要本地化的字符串按照下面的形式全部包裝起來,第一個(gè)參數(shù)是key,第二個(gè)參數(shù)是注釋,注意是注釋,也就是說你之后要是看到這個(gè)注釋,你就知道這個(gè)字符串是 在哪里用到的, 怎么賦值等等。
NSLocalizedString(@"viewVC_title", "哈哈哈");

選中工程


選擇好導(dǎo)出的目錄和類型(這里我們選擇development language only也就是英文語言),導(dǎo)出之后找到導(dǎo)出的文件

是一個(gè).xliff的文件,右鍵選擇打開方式,選擇Xcode打開它


這個(gè)文件是一個(gè)xml的形式,可以看到有三個(gè)<file>標(biāo)簽,
我們先刪除掉暫時(shí)用不到的兩個(gè),變成了下面這樣

因?yàn)檫@個(gè)是我們導(dǎo)出的英文版翻譯,可以看到source-language為en,也就是這個(gè)導(dǎo)出的語言包的源語言是英文,導(dǎo)入時(shí)要加上目標(biāo)語言,target-language="en"

之后對(duì)<body>標(biāo)簽里面的內(nèi)容進(jìn)行修改,增加一個(gè)<target>標(biāo)簽,內(nèi)容填寫英文翻譯

現(xiàn)在我們導(dǎo)入看看效果,同樣選中工程



導(dǎo)入完成

這樣就完成了英文語言的導(dǎo)入。接下來我們來導(dǎo)出 中文翻譯



選中Xcode打開來看看


刪除掉暫時(shí)用不到的兩個(gè)<file>

然后我們加上<target>標(biāo)簽,填上中文翻譯

然后保存導(dǎo)入

就ok啦,同理,其它語言也和 中文 翻譯的方法一樣的。
最后我們來介紹下圖片的 間接本地化,就是把 圖片名字 當(dāng)做 字符串 來進(jìn)行本地化,
[button setImage:[UIImage imageNamed:NSLocalizedString(@"viewVC_buttonimagename", @"buttonimage")] forState:UIControlStateNormal];



注:圖片名字一定要寫對(duì)。