前言
語言本地化,又叫做語言國際化。是指根據(jù)用戶操作系統(tǒng)的語言設(shè)置,自動將應(yīng)用程序的語言設(shè)置為和用戶操作系統(tǒng)語言一致的語言。往往一些應(yīng)用程序需要提供給多個國家的人群使用,或者一個國家有多種語言,這就要求應(yīng)用程序所展示的文字、圖片等信息,能夠讓講不同語言的用戶讀懂、看懂。進(jìn)而提出為同一個應(yīng)用程序適配多種語言,也即是國際化。語言國際化之所以又叫做語言本地化,這是站在每個用戶的角度而言的,是指能夠讓用戶本地、本土人群能夠看懂的語言信息,顧名思義,語言本地化。其實(shí)語言本地化 == 語言國際化!
本文將分如下7個主要章節(jié)一步一步講解如何完全本地化一個App。
配置需要國際化的語言
配置需要國際化的語言,這也是國際化之前的準(zhǔn)備工作,無論我們是國際化App名稱、代碼中的字符串、圖片、還是storyboard和xib,都需要進(jìn)行這一步的準(zhǔn)備工作(一個項(xiàng)目中需要且僅需要配置一次)。
選中project->Info->Localizations,然后點(diǎn)擊"+",添加需要國際化/本地化的語言,如下圖(默認(rèn)需要勾選Use Base Internationalization):

此處以添加法語為例,如下圖:

彈出如下對話框,直接點(diǎn)擊finish,如下圖:

同理,添加簡體中文、繁體中文、韓語,最終結(jié)果如下圖:

備注: “zh-Hans”和“zh-Hant”是簡體中文和繁體中文的縮寫。這是標(biāo)準(zhǔn)的縮寫。H可大寫也可小寫。"en"是英語的縮寫。ko是韓語的縮寫,fr是法語的縮寫。其他語言請百度各國語言縮寫即可查詢。
(一)應(yīng)用名稱本地化/國際化
應(yīng)用名稱本地化,是指同一個App的名稱,在不同的語言環(huán)境下(也就是手機(jī)設(shè)備的語言設(shè)置)顯示不同的名稱。比如,微信在簡體中文環(huán)境下App名稱顯示為“ 微信 ”,在英語環(huán)境下顯示為“ weChat ”。下面就開始進(jìn)行應(yīng)用名稱本地化。
選中Info.plist,按下鍵盤上的command + N,選擇 Strings File (iOS->Resource->Strings File)

文件名字命名為 InfoPlist ,且 必須是這個名字 (因每個人電腦設(shè)置差異,此處本人電腦沒有顯示strings后綴名):

點(diǎn)擊create后,Xcode左側(cè)導(dǎo)航列表就會出現(xiàn)名為InfoPlist.strings的文件,如下圖:

選中InfoPlist.strings,在Xcode的File inspection(Xcode右側(cè)文件檢查器)中點(diǎn)擊Localize,目的是選擇我們需要本地化的語言,如下圖:
注意: 在點(diǎn)擊Localize之前,一定要保證我們已經(jīng)添加了需要本地化的語言,也就是上面 配置需要國際化的語言 那一步(步驟:project->Info->Localizations,然后點(diǎn)擊"+",添加需要國際化/本地化的語言)。

點(diǎn)擊Localize后,會彈出一個對話框,展開對話框列表,發(fā)現(xiàn)下拉列表所展示的語言正是我們在上面配置的需要國際化的語言,選擇我們需要本地化的語言,然后點(diǎn)擊對話框的Localize按鈕,如下圖:


注意: 如果我們沒有在 PROJECT 中配置需要國際化的語言(project->Info->Localizations,然后點(diǎn)擊"+"),上圖下拉列表中將只會出現(xiàn)"Base"和"English"選項(xiàng),English語言是系統(tǒng)默認(rèn)的語言,其他需要國際化的語言(例如中文簡體、法語)必須通過上面的 配置本地化語言 那一步手動添加。
然后我們發(fā)現(xiàn)Xcode右側(cè)的File inspection變成了下圖的樣式:

接下來,勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:

此時,Xcode左側(cè)的InfoPlist.stirings左側(cè)多了一個箭頭,點(diǎn)擊箭頭可以展開,如下圖所示:

從上圖可以看出,InfoPlist.strings文件下包含了English、French、Chinese(Simplified)、Chinese(Traditional)、Korean這五種語言的文件。
原理:程序啟動時,會根據(jù)操作系統(tǒng)設(shè)置的語言,自動加載InfoPlist.strings文件下對應(yīng)的語言文件,然后顯示應(yīng)用程序的名字。
接下來,我們分別用不同的語言給InfoPlist.strings下的文件設(shè)置對應(yīng)的名字。
(1)在InfoPlist.strings(english)中加入如下代碼:
// Localizable App Name是App在英語環(huán)境環(huán)境下顯示的名稱CFBundleDisplayName = "Localizable App Name";
備注: CFBundleDisplayName可以使用雙引號,也可以不使用雙引號!

(2)在InfoPlist.strings(French)中加入如下代碼:
CFBundleDisplayName = "Le nom de la localisation de l'App";

(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代碼:
CFBundleDisplayName = "國際化App名稱";

(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代碼: