如何在swiftUI运行时手动更改语言

如何在swiftUI运行时手动更改语言,swift,swiftui,localization,runtime,Swift,Swiftui,Localization,Runtime,我是新手,动作敏捷。对于我的项目,我需要多种语言。我搜索并发现我需要字符串文件。我做到了这一点,除了一件事,在运行时手动更改语言,其他一切都正常工作。我试过其他人的一些代码,但都不管用。我有一个设置视图,您可以在其中更改语言,但没有任何效果。我很想向您展示我以前的代码,但我删除了它首先,您需要在项目中创建一个本地化的.string文件。 例如,把你的翻译放在那里 "key" = "value"; 别忘了分号 选择右侧边栏上的localizable.str

我是新手,动作敏捷。对于我的项目,我需要多种语言。我搜索并发现我需要字符串文件。我做到了这一点,除了一件事,在运行时手动更改语言,其他一切都正常工作。我试过其他人的一些代码,但都不管用。我有一个设置视图,您可以在其中更改语言,但没有任何效果。我很想向您展示我以前的代码,但我删除了它首先,您需要在项目中创建一个本地化的.string文件。 例如,把你的翻译放在那里

"key" = "value";
别忘了分号 选择右侧边栏上的localizable.string后,单击localizable按钮。 然后,您可以在swiftUI中通过将其放入

Text("key")
就这么简单:) 要在左侧边栏中添加更多语言,请单击您的项目蓝色图标,然后选择您的项目并添加更多语言,然后单击添加语言的完成。请确保选中了localize.string复选框。在Localizable.string旁边有一个小箭头,表示您有另一种语言的新本地化文件

为了能够在运行时更改语言,我们可以扩展字符串,例如:

extension String {
    func localizedLanguage(language: String = "en") -> String {
        if let bundlePath = Bundle.main.path(forResource: language, ofType: "lproj") {
            if let bundle = Bundle(path: bundlePath) {
                return bundle.localizedString(forKey: self, value: self, table: nil)
            }
        }
    
        return self
    }
}
Text("WELCOME".localizedLanguage(language: "en"))
然后我们可以这样使用它:

extension String {
    func localizedLanguage(language: String = "en") -> String {
        if let bundlePath = Bundle.main.path(forResource: language, ofType: "lproj") {
            if let bundle = Bundle(path: bundlePath) {
                return bundle.localizedString(forKey: self, value: self, table: nil)
            }
        }
    
        return self
    }
}
Text("WELCOME".localizedLanguage(language: "en"))

当然,这只是一个快速的概念验证,我们可以编写得更好,并添加一些功能,如从用户默认设置中获取所选语言、数据核心等。

是的,但有了这些功能,语言将被设置为系统语言,您无法更改它。我需要手动更改它是的对不起,我编辑了我的答案以帮助您解决这个问题:)