【Swift】语言国际化进阶

本文介绍了如何在iOS应用中通过LROLocalizedString类实现语言选择和本地化,包括自定义语言包、语言切换以及利用InfoPlist.strings进行参数拼接的方法。
摘要由CSDN通过智能技术生成

该方案是围绕LROLocalizedString类来完成的。

APP内语言选择

代码

自定义语言包类

class LROLocalizedString {
    static var share: LROLocalizedString = LROLocalizedString()
    lazy var bundle: Bundle = {
        if let languages = UserDefaults.standard.object(forKey: "AppleLanguages") as? Array<String>, let language = languages.first {
            if let path = Bundle.main.path(forResource: language, ofType: "lproj") {
                if let b = Bundle(path: path) {
                    return b
                }
            }
        }
        return Bundle.main
    }()
    func string(key: String) -> String {
        return NSLocalizedString(key, bundle: self.bundle, comment: "")
    }
}

类的使用

// 更改语言包
LROLocalizedString.share.bundle = Bundle(path: Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")!)!
// 根据语言包获取本地化文本
LROLocalizedString.share.string(key: "your key")

语言切换

// AppleLanguages是语言包列表,启动APP时,会从AppleLanguages里取当前语言进行本地化
UserDefaults.standard.set(["zh-Hans"], forKey: "AppleLanguages")
// 更改LROLocalizedString类的语言包
LROLocalizedString.share.bundle = Bundle(path: Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")!)!
//执行上面代码后,重新设置根视图刷新界面

语言本地化拼接参数

因为本地化文件的格式只有文本格式"key" = "value";,所以只能借助String(format: <#T##String#>, <#T##arguments: CVarArg...##CVarArg#>),来完成本地化文本拼接不固定的内容。

// en
"scroe" = "score: %d";
// zh-Hans
"scroe" = "分数: %d";
let format = LROLocalizedString.share.string(key: "score")
let str = String(format: format, 100)

Localizable.strings

创建的本地化文件的必须是这个名字

InfoPlist.strings

这是info.plist文件的本地化文件,如果需要按照这个名称创建。

info.plist的Key获取方法

Key的获取方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值