【问题标题】:How to override the user language inside the app?如何覆盖应用程序内的用户语言?
【发布时间】:2021-12-29 01:54:01
【问题描述】:

我正在尝试根据用户的决定更改我的应用程序中的语言。我尝试了以下但没有运气,想知道是否有人可以帮助我指出正确的方向?

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

最后我尝试了以下方法,但也没有运气:

    enum Language: String, CaseIterable {
        case japanese, russian, spanish, english
        var code: String {
            switch self {
            case .japanese: return "ja"
            case .russian: return "ru"
            case .spanish: return "es"
            case .english: return "en"
            }
        }

        static var selected: Language {
            set {
                UserDefaults.standard.set([newValue.code], forKey: "AppleLanguages")
                UserDefaults.standard.set(newValue.rawValue, forKey: "language")
            }
            get {
                return Language(rawValue: UserDefaults.standard.string(forKey: "language") ?? "") ?? .english

            }
        }
    }

调用它:

Language.selected = .russian

任何帮助将不胜感激。干杯。

【问题讨论】:

标签: swift enums localization


【解决方案1】:

您必须使用可本地化的字符串,请查看以下链接:Swift App localization

【讨论】:

  • 嘿 Omar,我实际上遵循了这一步,所以我知道知道用户设备是否使用说日语,应用程序将切换到日语,但我也希望用户能够如果有意义,请更改应用设置中的语言?
【解决方案2】:

我能够通过在设置之前先删除对象值来解决这个问题。这使我能够在应用程序中更改语言。感谢大家。 解决方案:

NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages")
NSUserDefaults.standardUserDefaults().setObject(["de"], forKey: "AppleLanguages"   
NSUserDefaults.standardUserDefaults().synchronize()

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2012-10-06
    • 1970-01-01
    • 2017-09-19
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多