美文网首页iOS SB
xcode6下storyboard国际化的一点思路

xcode6下storyboard国际化的一点思路

作者: MadLife程序员 | 来源:发表于2015-09-14 15:27 被阅读1525次

    最近一个app需要实现切换语言的功能。

    如果项目是纯代码编写的话,不涉及stroyboard。则这个只需要指定不同语言包里面的指定的table就可以了(默认是Localizable.Strings)

    实现过程如下:
    1.获得目标语言包.lproj文件的bundle(一般都是mainBundle)
    2.利用这个bundle指定你的table(若指定为nil则默认是Localizable.Strings),使用func localizedStringForKey(key: String, value: String?, table tableName: String?) -> String

    我的项目里面包含了storyboard,则需要对storyboard进行国际化。参考了这篇文章IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    1.在xocde6里面,对storyboard进行国际化有两种形式,




    就是interface builder storyboard和localizable strings两种。localizable strings这种是很常见的替换storyboard里的字符串文件,而interface builder storyboard则是一个完整的storyboard,你能修改更多东西(比如约束,图片等)但是要注意的是,这几个storyboard是独立的,就是说,比如你想要添加一个按钮,你要在这些stroyboard里逐个添加按钮,然后逐个连约束。

    2.我国际化的storyboard使用的是interface builder storyboard这种形式,假如想再app内切换语言,第一就是切换Localizable文件,第二就是就是切换storyboard文件。

    2.1 切换Localizable文件,可以拿到.lproj目录下的Localizable文件path作为bundle切换

        // 获得语言bundle
        let path = bundle.pathForResource(curLanguage, ofType: "lproj")
        if (path != nil) {
            newBundle = NSBundle(path: path!)!
        }
        // 用刚才获得的bundle作为国际化
        newBundle.localizedStringForKey(key, value: "", table: table)
    

    2.2切换stroyboard文件,其实也是同样的拿到.lproj目录下的stroyboard文件,然后把keywindow的rootViewController切换成新stroyboard的initial Controller。

        // 获得语言bundle
        let path = bundle.pathForResource(curLanguage, ofType: "lproj")
        if (path != nil) {
            newBundle = NSBundle(path: path!)!
        }
    
        // 这里需要指定你storyboard的initial Controller的storybordID
        let sb = localizedStrongWithName(UIStoryboard(name: name, bundle: newBundle)
        let vc = sb.instantiateViewControllerWithIdentifier(stroyboardInitIdentifier) as! UIViewController
        UIApplication.sharedApplication().keyWindow?.rootViewController = vc
    

    2.3 假如你成功切换storyboard之后你可能会发现,app里的图片都没了。这个时候需要对图片进行国际化,一个比较简单的做法就是,直接把需要用到的图片拖进行项目里(不放到Image.xcassets),然后点击图片右则属性栏进行国际化。

    最后:建议storyboard的国际化放到项目最后再做,因为想要在添加什么ui元素的话要同时在多个storyboard上操作,十分没必要。。。

    相关文章

      网友评论

        本文标题:xcode6下storyboard国际化的一点思路

        本文链接:https://www.haomeiwen.com/subject/oqfmcttx.html