我們在開發一款APP的時候,總是會涉及應用程序國際化的事情,用ios裡專業術語叫做本地化,其實都是一個意思,簡而言之就是不同的系統語言,顯示不同的應用名稱、字符串名稱、圖片名稱、等等,除了代碼,ios幾乎可以本地化所有類型的文件。
那麼接下來我就記錄下來ios如何快速本地化項目,【記住千萬不要把說明文字直接以字符形式寫到各個.m文件中,或是統一都編寫成靜態字符串,這些都是不利於本地化的,等以後需要維護時,項目需求不同語言版本時,會很費事】。
一、本地化應用程序名稱
首先我創建了一個simple Application,應用程序默認語言是:english;APP名稱默認為創建項目的名稱。我們打開應用程序-info.plist清單文件:空白處右鍵,選擇Show Raw Keys/Values,就會看到應用程序名實際為CFBundleDisplayName,如下圖所示,【注意:CFbundleName並不是APP名稱的屬性,而是CFbundleDisplayName】
接下來,開始給APP添加一個chinese語言支持,選中項目-Project-Localization-Add,如下圖:
彈出的界面讓我們選擇需要本地化的文件,infoPlist.strings是必不可少的,使用這個才能設置不同的APP名稱,ViewController我們暫且先夠選上,一會本地化xib的時候需要用到,如下圖:
然後展開infoPlist.strings文件(Engilsh),裡添加:CFBundleDisplayName="Localized",英文環境下會顯示這個名稱,chinese裡添加:CFBundleDisplayName="本地化",這是中文環境下顯示的名稱,如下圖:
保存一下,再次運行APP,然後切換一下系統語言,會發現APP顯示我們設置的名稱(如果發現沒有改變,是因為緩存的緣故,嘗試-Project-clean一下,然後設備中刪除我們的demo,再來build)
二、本地化xib文件
選中要本地化的xib文件,在右邊的屬性檢查器視圖中會發現多了一個localization選項,勾選我們要本地化的語言,會發現這個xib變成了和infoPlist.strings一樣的列表:xib(English)、xib(chinese),我們可以在各自的xib中創建不同語言所顯示的界面,等到APP需要顯示此xib時,系統會首先尋找當前語言下的xib文件,如下圖所示:
三、本地化字符串
本地化字符串需要一個Localize.settings文件,在代碼中需要輸入字符串的地方使用NSLocalizeString宏來定義字符串。
原理:在代碼中將加入的字符串加入NSLocalizeString宏中,啟動程序時,系統將根據語言加載相應的文件得到其對應的字符串文件,這個字符串可以通過系統將NSLocalizedString中的宏生成名為“Localizable.strings”的文件,當然你可以自己去創建這個文件,然後手動是添加對應的字符串。
我們先手動創建這個文件:選中項目-new file - Resource-Stringfile
命名一定要是:Localizable
然後選中創建的Localizable.strings文件,在屬性檢查器的localization項點擊-Localizae,我們先添加English的本地化,再添加chinese的本地化。
現在發現這個文件也變成了English和Chinese兩個,那麼我們在各自文件中寫入:
繼續在代碼的viewdidload中,需要設置字符串的地方:
NSlocalizeString第一個參數是內容,第二個參數是在系統生成Localize.strings文件時,生成的注釋,不需要的話可以設置為nil
看一下效果:
四、圖片資源的本地化
我們可以向本地話字符串一樣,把中英文圖片的名字分別存到中英文對應的strings文件,然後通過NSLocalizedStringFromTable來獲取圖片名稱。
選中要本地化的圖片,在右邊的Inspector中 Localization下,點擊localize...
繼續上一次一樣的操作,添加English和chinese,我們發現這個圖片資源也分成了english和chinese的版本,如下圖:
繼續要做的是給chinese的文件設置(替換成)其語言下的圖片資源,如下:
保存-clean後運行看一下:
同樣的avator.png圖片資源,在不同的語言環境下,顯示不一樣的圖片資源,很不錯吧?