iOS 13 多语言适配

本文基于 R.swift 中的 strings。
R.swift 的具体使用就不介绍了,主要说应用内的语言设置和 iOS13 的设置中的语言切换之间的联动。
NSLocalizedString 使用 bundle 来配置不同的语言,现在大多数应用内部切换语言都是通过它来实现的。

NSLocalizedString("???", bundle: bundle, comment: "")

这里说一下为什么使用 R.swift, 因为在编译的时候他就可以帮你找到哪个语言文件缺少那些 strings, 而且删除的时候也会对应的报错。

通过下面代码来配置 bundle,UserDefaultWrapper 可以参考链接

每次启动 APP 都获取一次当前系统配置的 bundle

static var langagues: [String: String] = ["English": "en",
                                          "中文": "zh",
                                          "Nederlands": "nl",
                                          "Italiano": "it",
                                          "Français": "fr",
                                          "Deutsch": "de"]
if let preferredLang = Bundle.main.preferredLocalizations.first {
    for language in Config.langagues.values {
        if preferredLang.contains(language) {
            UserDefaultsUnit.langague = language
            break
        }
    }
}

@UserDefaultWrapper("langague", "en")
    static var langague: String!

通过下面代码,iOS 13 设置中 APP 的语言:

UserDefaults.standard.set(["zh"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()

因为系统切换语言时必须重启,但如果不想重启,就需要给每个视图重新赋值一次。所以最好写个统一的方法来刷新视图的文字。
因为在设置中设置语言苹果默认直接重启 APP,所以进来通过 Bundle.main.preferredLocalizations.first 获取的一定是当前选中的。

详细的 Demo 可以参考。

你可能感兴趣的:(iOS 13 多语言适配)