上篇
IOS APP 國際化(實現不跟隨系統語言,不用重啟應用,代碼切換stroyboard ,xib ,圖片,其他資源
介紹了純代碼刷新 實現程序內切換語言。 但效率底下,也存在一些問題。暫放棄。
第二種是 從跟視圖切換 storyboard 實現 代碼結合 storyboard 刷新 UI,
上篇遺留的問題是,在開發的時候我們要用到 base.lproj 和 對應語言下得.string 文件。
方便開發(腳本實現 base storyboard 被編輯會 自動刷新對應語言的.string 文件。而不會覆蓋掉之前翻譯好的內容。)編譯觸發腳本
but 如果我要運行程序調試在 模擬器或真機上。我就要去掉base 。把對應語言.string 文件轉換為.storyboard . 因為刷新sb 文件原理上就是去 app 包種的mainbundle 中 對應語言包下找 sb 文件。加載它。 如果對應語言包下 是。string 或 沒有sb 文件則會奔潰。
來看: 這是對應 demo 工程 編譯后的 app 包內容。 從 .storyboard 變成了 .storybardc 。這是xcode 編譯 sb 文件后的 文件后綴名。
應該想到 如果我把 對應的.string 文件轉換為.storyboardc 文件 拷貝到 對應app 包種的.Lproj 中。 是不是就可以啦。
so 各種嗨皮的 去搞在shell 中。 使用ibtool 轉換.string 文件為.storyboard。 然后 修改 .storyboard 文件后綴 .storybardc 。拷貝到 app 包中。運行 切換語言奔潰。
靠,明明在 那個路徑下。就是加載不到。 郁悶了幾天。
可怎么能得到.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