我們在開發一款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圖片資源,在不同的語言環境下,顯示不一樣的圖片資源,很不錯吧?