本文基于 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 可以参考。
网友评论