2013年8月3日 星期六

說說,iOS裡面的語系。


最近開始寫iOS,老實說不像是在學校可以沒日沒夜的慢慢摸,可能是自己心態問題吧?可以的話要再多操自己一點,把工具練熟才行。


話說回來,在iOS的多語系開發中,不像Android是在res之中設置指定名稱的資料夾,而是在PROJECT之中Info進行語言的設定,裡面有一個Localizatios的欄位可以填寫,
其中要注意的部分有:


  1. 一開始設定如果是英文,可以看見在Resources欄位中顯示2個資料夾。如果我們刪掉再重建,他會報錯,說已經有資料夾了?ㄎㄎ,這時候我進去Finder裡面果然發現親愛的XCode沒有把資料夾刪掉。於是手動把他刪掉之後就解決了。
  2. 上述的作法可能還是會報錯,是因為Tests的資料夾中也有一樣的檔案,我把他刪掉之後就沒事了。創建時候也會產生3個資料夾。
  3. 於是我對這3個資料夾很好奇,稍微看了一下發現他分別是:
    1. Supporting Files的InfoPlist.strings ,每個語系都在Finder裡面都會有自己的資料夾,但是在XCode會整理到InfoPlist裡面。
    2. Tests資料夾中Supporting Files的InfoPlist.strings (老實說我不太懂這個資料夾是作什麼用的)
    3. storyboard。
所以我們會發現,各國語系的文字應該統一放在InfoPlist.strings裡面,但是要注意Storyboard也會有獨立的layout可以動作,所以我做了一個demo,結構展開來長這樣:

我們可以在storyboard裡面作每個語系應該要有的畫面和靜態的文字,而如果需要從.m檔產生的文字,則需要利用到InfoPlist.strings的內容啦!

在InfoPlist.strings裡面應該長這樣:

就像是一個table,使用map的型式,等號左邊是key值,右邊是語系對應的value。

接著就是要調用文字了,這邊不禁要抱怨一下,網路上都說用

NSLocalizedString()方法,整個蛋疼啊,因為這個方法指定了Localization.strings的文件,可是偏偏他預設的文件叫做InfoPlist.strings,心想為什麼Apple要騙我...於是使用了另外一種方法:

NSLocalizedStringFromTable(@"文件的Key值", @"文件名稱", nil);



文件的key值就是我們剛剛說的等號左邊的內容;文件名稱就指定輸入InfoPlist;而第三個參數輸入的內容是一個類似註解的東西,這邊我查到的結果一般是不需要輸入的。

好惹,用了以後就可以如願產生不同語系的資料內文了,
該怎麼測試呢?我們可以在裝置的"設定"->"一般"->"國際設定"中指定語言,調整看看就會發現,我們之前的設定也會跟著改變喔!

最後作個筆記,在選擇語系檔的時候常常搞混:

繁體中文:zh-Hant
簡體中文:zh-Hans

以上。









沒有留言:

張貼留言

你好,我是小書,如果文章內容有錯誤,或是看到有建議以及任何感想時,歡迎提出分享,我們一起學習一起努力。

追蹤者