上篇 html
介紹了純代碼刷新 實現程序內切換語言。 但效率底下,也存在一些問題。暫放棄。ios
第二種是 從跟視圖切換 storyboard 實現 代碼結合 storyboard 刷新 UI, git
上篇遺留的問題是,在開發的時候咱們要用到 base.lproj 和 對應語言下得.string 文件。github
方便開發(腳本實現 base storyboard 被編輯會 自動刷新對應語言的.string 文件。而不會覆蓋掉以前翻譯好的內容。)編譯觸發腳本shell
but 若是我要運行程序調試在 模擬器或真機上。我就要去掉base 。把對應語言.string 文件轉換爲.storyboard . 由於刷新sb 文件原理上就是去 app 包種的mainbundle 中 對應語言包下找 sb 文件。加載它。 若是對應語言包下 是。string 或 沒有sb 文件則會奔潰。swift
來看: 這是對應 demo 工程 編譯後的 app 包內容。 從 .storyboard 變成了 .storybardc 。這是xcode 編譯 sb 文件後的 文件後綴名。xcode
應該想到 若是我把 對應的.string 文件轉換爲.storyboardc 文件 拷貝到 對應app 包種的.Lproj 中。 是否是就能夠啦。app
so 各類嗨皮的 去搞在shell 中。 使用ibtool 轉換.string 文件爲.storyboard。 而後 修改 .storyboard 文件後綴 .storybardc 。拷貝到 app 包中。運行 切換語言奔潰。spa
靠,明明在 那個路徑下。就是加載不到。 鬱悶了幾天。.net
可怎麼能獲得.storyboardc 文件? 使用ibtool 能夠作到。 到這裏你會覺得 轉換的.storyboardc 是個文件。其實 它跟.lproj 同樣是個文件夾。
看 顯示包內容。。 每一個vc -> .nib 文件 還有.plist 清單。
到此若是咱們有這個腳本,那麼就太幸福啦。使用base 和對應語言.string 文件 編輯 運行程序也不用去掉。腳本生成對應語言.storyboardc 文件到
對應語言下同時存在.storyboardc 和 .string 這樣一切問題得宜解決。 支持重設系統語言 和 程序內切換語言。 並且開發時只關心程序邏輯 翻譯複製粘貼。 剩下的一切交給腳本搞定。
一樣支持 xib 的國際化 ,工程中 能夠同時用 sb 和 xib 或其中一個。
===================支持xib和sb中得圖片國際化==========================
2015.4.30
demo 已更新,切換語言圖片不會丟失。
說明:適用於不一樣語言使用相同圖片在 sb 和 xib中。若是想不一樣語言使用不一樣圖片在sb 和 xib 中的話,仍是別折騰了吧。有那功夫仍是直接在代碼裏寫吧。
圖片國際化實現過程:
因爲在xib 和 sb 中添加Img 控件並不會在 對應.string 文件裏有相似這樣的記錄
及 控件id = 「圖片名」。這裏記錄得也只是控件的文本。默認並不會對圖片國際化。
其實xib 和 sb 只是個xml 文件而已,
source Code 查看。
搜索image 能夠查看ImageView 控件節點。固然也能夠看到
resources 節點。。沒錯,這就是xib 和 sb 用到的資源。
到這裏思路就有了。我是否是能夠找到這些圖片 分別拷貝到 不一樣語言包(xx.lproj)下面和 sb 或xib 一個目錄。
腳本實現爲 解析xml ,在
${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} 【參見xcode 環境變量】下找到圖片,在拷貝到對應文件夾下。
so easy。
因爲當時也只是技術調研,並咩有真正作一個國際化的應用;若是有什麼好需求能夠在這裏提...歡迎討論和交流。
最終demo 在這裏 :
https://github.com/githhhh/Test_Local_Two
以上還有些小不足,算是記錄當時遇到的坑,推薦一個不錯的解決方案:
雖然是swift ,但思路很不錯。
http://blog.csdn.net/VictorMoKai/article/details/48894873
接管系統Bundle方法這樣不須要在拷貝storyboardc文件到對應.lproj目錄。
object_setClass(NSBundle.mainBundle(), BundleEx.self)
找到一個oc 版本:
https://github.com/maximbilan/ios_language_manager/blob/master/README.md
參考:
http://www.futuresvision.net/?p=1127
http://stackoverflow.com/questions/1371351/add-files-to-an-xcode-project-from-a-script