IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

 

 接了个变态的需求,要在程序内切换程序语言实现国际化。

可以先看看这个,比较详细。

http://blog.csdn.net/xwren362922604/article/details/17190061

看完之后问题来了,

1,工程里面大量的 xib  或 storyboard 里面的UI 设定了text ,怎么实现让它们动态加载语言【非设置系统语言重启】

2,一个简单的思路,当代码触发切换语言 发个通知让 内存里的viewController 刷新UI的text 。[工程里这么都vc 每个都加 岂不累死]

所有 接下来还可完善下。

1,切换语言,重新加载window 的根视图。根据不同语言。【搜下网上的storyboard 国际化】

你会发现 你操作后 xcode 为Main storyboard 添加了三个 文件

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

这里依这为理。base和你添加的语言。
你在这些文件上右键 show in finder 。

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

看到那三个文件夹没 .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 删了。

在这里

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

点文件。右边栏。去掉base 沟。不要管警告。

再看

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

现在可以了。分别在两个文件夹了。

遗留问题:如果支持很多语言,程序会变的很大.有解决的可以交流下

2, 写一个vc 基类。注册 和 移除  通知。对于自动刷新vc 内的 UI 。可以在基类里加个数组变量 【blok 的】

在subVC,这里注意防止循环引用。_weak

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

在superVC

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

遍历执行。

实现自动刷新

可以在这里下载工程: 

 git clone    git@github.com:githhhh/Test_Local_Two.git

done

 

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源),布布扣,bubuko.com

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

上一篇:Android -- 浮动组建


下一篇:Android控件系列之RadioButton&RadioGroup