我已经看到一些iOS应用程序动态地改变应用程序中使用的语言,我的意思是当应用程序被推出时,用户可以动态地更改语言(法语,英语,...);我在网上搜索过,我发现了这个。
任何的想法 ?谢谢
您需要编写自己的NSLocalizedString宏版本,该宏根据用户首选项而不是手机区域设置选择语言包
我们正在使用类似下面的内容(受Localize-Swift启发)。请注意,如果您使用的是应用扩展程序,则必须将所选语言存储在UserDefaults.standard
以外的其他位置。如果需要,应该很容易扩展多种支持。
在下面添加类和字符串扩展后,您将调用"key_from_string_files".localized()
而不是NSLocalizedString
的变体来获取本地化字符串。
extension String {
func localized(_ key: String, arguments: [CVarArg] = []) -> String {
return Localize.localized(key, arguments: arguments)
}
}
class Localize {
static var storeKey = "custom_current_language"
class func localized(_ key: String, arguments: [CVarArg]) -> String {
let string: String
let lang = currentLanguage()
if let path = Bundle.main.path(forResource: lang, ofType: "lproj"), let bundle = Bundle(path: path) {
string = bundle.localizedString(forKey: key, value: nil, table: nil)
} else {
string = key
}
return String(format: string, arguments: arguments)
}
class func currentLanguage() -> String {
if let current = UserDefaults.standard.object(forKey: storeKey) as? String, Bundle.main.localizations.contains(current) {
return current
} else if let preferred = Bundle.main.preferredLocalizations.first {
return preferred
}
fatalError("Could not determine application localization")
}
class func setCurrentLanguage(_ language: String?) {
UserDefaults.standard.set(language, forKey: storeKey)
UserDefaults.standard.synchronize()
}
}