语言切换 自动 swift playground

第一部分
IMG_0313
第二部分
代码1


import SwiftUI
@main
struct MyApp: App {
    @State var language: String = LanguageManager.shared.getAppLanguage()
    var body: some Scene {
        WindowGroup {
            ZStack{
                ContentView()
                    .onReceive(NotificationCenter.default.publisher(for: NSLocale.currentLocaleDidChangeNotification)) { _ in
                        let newLanguage = LanguageManager.shared.getAppLanguage()
                        if newLanguage != language {
                            language = newLanguage
                        }
                    }
                    .environment(\.locale, .init(identifier: language)) 
            }
        }
    }
}
class LanguageManager {
    // MARK: - Properties
    static let shared = LanguageManager()
    private let defaults = UserDefaults.standard
    // MARK: - Public Methods
    func setAppLanguage(to language: String) {
        defaults.set([language], forKey: "AppleLanguages")
        defaults.synchronize()
    }
    func getAppLanguage() -> String {
        guard let languages = defaults.object(forKey: "AppleLanguages") as? [String],
              let language = languages.first else {
            return "en"
        }
        return language
    }
}

代码2


import SwiftUI
struct ContentView: View {
    @Environment(\.locale) var locale
    var languageCode: String? {locale.language.languageCode?.identifier}
    var isChineseLanguage: Bool { languageCode == "zh"}
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            if isChineseLanguage {
                Text("你好,世界!")
            } else {
                Text("Hello, world!")
            }
        }
    }
}