gpt4 book ai didi

ios - 如何动态更改本地化 SwiftUI

转载 作者:行者123 更新时间:2023-11-28 23:26:03 26 4
gpt4 key购买 nike

如何在 SwiftUI 中即时更改应用程序的本地化?

我认为我们可以使用下面的代码,但我们应该找到 SwiftUI 方法。

func localized(_ lang:String) -> String {

let path = Bundle.main.path(forResource: lang, ofType: "lproj")
let bundle = Bundle(path: path!)

return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}}

最佳答案

首先,我们应该创建 2 个 Localizable.strings 文件,在我的例子中是 enru

我们应该存储当前的语言对象,我选择将其属性存储在UserSettings中,例如ObservableObject,我们也可以使用@AppStorage初始化 lang 变量以保留所选语言

class UserSettings: ObservableObject {

@Published var lang: String = "ru"

var bundle: Bundle? {
let b = Bundle.main.path(forResource: lang, ofType: "lproj")!
return Bundle(path: b)
}
}

我们可以像 SceneDelegate.swift 中的 .environmentObject() 一样使用此设置对象,因此层次结构中的每个 View 都会更新。

var settings = UserSettings()
// ...
= UIHostingController(rootView: contentView.environmentObject(settings))

View中我们可以获得理想的行为,注意我们应该在Text初始化中指定bundle

struct ContentView: View {

@EnvironmentObject var settings: UserSettings

var body: some View {
VStack {
Text("App", bundle: settings.bundle)
}
}
}

现在我可以更改应用程序中某个位置的语言,这只是示例循环示例,您可以在中调用此函数changeLanguage() >scene(_ scene:, willConnectTo:, options connectionOptions:) 并且每 3 秒语言就会更改一次。

func changeLanguage() {
print(#function)
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.settings.lang = self.settings.lang == "ru" ? "en" : "ru"
self.changeLanguage()
}
}

关于ios - 如何动态更改本地化 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com