带有 SwiftUI 的 Swift 5:如何即时更改环境语言环境

Bar*_*art 2 environment locale swiftui

我必须让用户从列表中选择应用程序的语言。

将下一行放入 SceneDelegate 工作正常,因为它在开头加载指定的语言:

window.rootViewController = UIHostingController(rootView: ContentView().environment(\.locale, .init(identifier: "de")))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从包含列表的视图中设置语言环境以在整个应用程序中切换语言。

谢谢你的帮助

Nic*_*ica 6

您可以使用 a@State var作为区域设置标识符。在这个例子中,我使用按钮来改变状态,文本会立即改变。

struct LanguageView: View {
    @State var identifier = "en"

    var body: some View {
        VStack {
            Button("French", action: {
                self.identifier = "fr"
            })
            Button("English", action: {
                self.identifier = "en"
            })
            Text("Test")
        }
        .environment(\.locale, .init(identifier: identifier))
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 Localizable.strings 中,我添加"Test" = "My english text";了英语和"Test" = "Mon texte français";法语。