接了个变态的需求,要在程序内切换程序语言实现国际化。
可以先看看这个,比较详细。
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 git@github.com:githhhh/Test_Local_Two.git
done
IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源),布布扣,bubuko.com