標籤:blog http os io 檔案 for 2014 art
接了個變態的需求,要在程式內切換程式語言實現國際化。
可以先看看這個,比較詳細。
http://blog.csdn.net/xwren362922604/article/details/17190061
看完之後問題來了,
1,工程裡面大量的 xib 或 storyboard 裡面的UI 設定了text ,怎麼實現讓它們動態載入語言【非設定系統語言重啟】
2,一個簡單的思路,當代碼觸發切換語言 發個通知讓 記憶體裡的viewController 重新整理UI的text 。[工程裡這麼都vc 每個都加 豈不累死]
所有 接下來還可完善下。
1,切換語言,重新載入window 的根視圖。根據不同語言。【搜下網上的storyboard 國際化】
你會發現 你操作後 xcode 為Main storyboard 添加了三個 檔案
這裡依這為理。base和你添加的語言。
你在這些檔案上右鍵 show in finder 。
看到那三個檔案夾沒 .lproj 這裡是對應語言的 資源檔。你切換語言是 拿到當前語言eg: en 拼路徑en.lproj
[[NSBundle mainBundle] pathForResource:userLanguage ofType:@"lproj"];
根據path 得到
NSBundle
熟悉吧。這玩意裡面就是我們程式需要得資源檔。其實就是XX.lproj 檔案夾裡德東東
初始化
[UIStoryboard storyboardWithName:@"Main" bundle:bundle];
我們更習慣於 後面的參數滋味nil 。
寫到這有個問題。其實真正的main 放在了那個base 檔案夾裡。程式蹦了。讓我們來幹掉base 。千萬別直接刪除base檔案。那樣直接把main 。storyboard 刪了。
在這裡
點檔案。右側邊欄。去掉base 溝。不要管警告。
再看
現在可以了。分別在兩個檔案夾了。
遺留問題:如果支援很多語言,程式會變的很大.有解決的可以交流下
2, 寫一個vc 基類。註冊 和 移除 通知。對於自動重新整理vc 內的 UI 。可以在基類裡加個陣列變數 【blok 的】
在subVC,這裡注意防止循環參考。_weak
在superVC
遍曆執行。
實現自動重新整理
可以在這裡下載工程:
git clone [email protected]:githhhh/Test_Local_Two.git
done