Localization
在我的应用程序中工作正常。我想本地化权限对话框文本消息。更改设备语言后一切正常,但我想根据我的应用程序语言来更改消息。
我尝试了以下代码
import UIKit
class LocalizeHelper: NSObject {
private var myBundle: Bundle? = nil
static let shared: LocalizeHelper = {
let instance = LocalizeHelper()
return instance
}()
override init() {
super.init()
// use systems main bundle as default bundle
myBundle = Bundle.main
}
func localizedString(forKey key: String) -> String {
return myBundle!.localizedString(forKey: key, value: "", table: nil)
}
// Converted with Swiftify v1.0.6331 - https://objectivec2swift.com/
func setLanguage(_ lang: String) {
// path to this languages bundle
let path: String? = Bundle.main.path(forResource: lang, ofType: "lproj")
if path == nil {
// there is no bundle for that language
// use main bundle instead
myBundle = Bundle.main
}
else {
// use this bundle as my bundle from now on:
myBundle = Bundle(path: path!)
// to be absolutely shure (this is probably unnecessary):
if myBundle == nil {
myBundle = Bundle.main
}
}
}
func getLanguage() -> String {
print("\(String(describing: myBundle?.bundlePath.last))")
//return myBundle!.bundlePath.last >> Error
return myBundle!.bundlePath.lastCharacter!
}
}
extension String {
public var lastCharacter: String? {
guard let aLast = self.last else {
return nil
}
return String(aLast)
}
}
我已经在StackOverflow中冲浪,但是没有找到任何解决方案。我们感谢任何帮助壳。
答案 0 :(得分:0)
您最好的选择是将用户默认语言中的应用程序语言保存为字符串,然后从用户默认值中删除该应用程序语言时,将其解析为自定义应用程序语言枚举。如果您没有任何应用程序语言保存,则可以随时使用设备语言,但是在用户默认设置为nil的情况下,可以使用应用程序语言来替代或覆盖它。同样,最好将用户默认交互与您在视图控制器中访问的用户默认管理器进行包装。
因此建议的步骤是: