上篇 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