iOS库中字符串国际化的实现

对于App中的国际化,大家想必已是轻车熟路了。

不过对于某些情况下我们需要对库中的字符串做国际化操作,这篇博文就来探讨一下如何完成这一任务。

其实理论上可以将库中的国际化字符串数据放在App的国际化文件中,但这样做打破了封装性,假如有100个App使用该库,则需要在创建100次国际化字符串,违反了DRY原则。

下面就静态库和动态库两种情况分别讨论。

1.静态库的国际化

静态库中是不能放入资源文件的,这意味着国际化字符串一定要放在静态库项目外部:

myStaticLib.a
StaticRes.bundle

所以我们在Xcode中新创建一个bundle文件,保存到本地,但不要对其做任何编辑。在Finder中进入该bundle文件,在其中根据需要创建若干文件夹,然后将对应字符串文件放入其中:

![这里写图片描述](https://img-blog.csdn.net/20180821100632701?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L215ZG8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 使用时需要将其包含入App文件中。因为使用了独立的bundle文件,所以我们要写一个方法加载国际化字符串:
fileprivate class ResBundle:Bundle{
    static var bundle:Bundle = ResBundle()

    private init(){
        //资源bundle文件必须嵌入App的主bundle中,下面一句从主bundle中取得资源bundle的路径
        let resBundlePath = Bundle.main.path(forResource: resBundleName, ofType: "bundle")!
        super.init(path: resBundlePath)!
    }
}

func hyLocalizedString(key:String,comment:String="")->String{
    return NSLocalizedString(key, tableName: "HyCommon", bundle: ResBundle.bundle, value: "", comment: comment)
}

我们用如下方式取得国际化字符串:

let myString = hyLocalizedString("contentString")

这样做的好处是,我们只要创建1份与该静态库相关的资源文件就可以被任意数量的App所使用。

2.动态库的国际化

对于动态库来说,情况貌似简单了不少。因为动态库是可以嵌入资源文件的,所以我们没必要单独创建一个bundle,而是将国际化的数据直接放在动态库里面就可以了。

在Xcode中打开动态库项目,在其中添加xxx.strings文件。是的,你没看错,strings文件名可以随意。因为你别指望直接使用NSLocalizedString(…)之类的方法来取得它们。

为什么呢?

其原因是NSLocalizedString默认是从主Bundle中获取指定名称的strings文件(Localizable.strings),但现在我们的资源文件是在动态库里,所以有必要写一个帮助方法来完成国际化功能.

这个帮助方法和上面静态库的实现差不多,唯一不同的是对资源路径的获取:

private init(){
        //取得动态库所在的子目录
        let frameworkPath = Bundle.main.path(forResource: "Frameworks", ofType: nil)!
        //取得动态库本身的路径
        let resBundlePath = URL(fileURLWithPath: frameworkPath, isDirectory: true).appendingPathComponent(resBundleName).path
        super.init(path: resBundlePath)!
}

动态库字符串国际化的获取代码和静态库完全一样,这里就不再介绍了。

总结

综上所述,无论是静态库还是动态库,我们只要把握2点:

  1. 资源文件的名称
  2. 资源文件中strings文件的名称

就可以一招鲜吃遍天,无论何种情况都可以轻松搞定了。

以上就是iOS静态库和动态库中国际化的实现,感谢观赏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值