import Foundation import SwiftUI import Combine // 支持的语言枚举 enum Language: String, CaseIterable { case english = "en" case chinese = "zh-Hans" var displayName: String { switch self { case .english: return "English" case .chinese: return "中文" } } var flag: String { switch self { case .english: return "🇺🇸" case .chinese: return "🇨🇳" } } } // 语言管理器 class LanguageManager: ObservableObject { static let shared = LanguageManager() @Published var currentLanguage: Language = .english private let languageKey = "selected_language" private init() { loadLanguage() } // 加载保存的语言设置 private func loadLanguage() { if let savedLanguage = UserDefaults.standard.string(forKey: languageKey), let language = Language(rawValue: savedLanguage) { currentLanguage = language } else { // 默认使用英文 currentLanguage = .english } } // 切换语言 func switchLanguage(to language: Language) { currentLanguage = language UserDefaults.standard.set(language.rawValue, forKey: languageKey) // 通知语言变化 NotificationCenter.default.post(name: .languageChanged, object: language) } // 获取本地化字符串 func localizedString(for key: String) -> String { let bundle = Bundle.main let language = currentLanguage.rawValue if let path = bundle.path(forResource: language, ofType: "lproj"), let languageBundle = Bundle(path: path) { return languageBundle.localizedString(forKey: key, value: key, table: nil) } // 如果找不到本地化文件,返回英文 if let path = bundle.path(forResource: "en", ofType: "lproj"), let languageBundle = Bundle(path: path) { return languageBundle.localizedString(forKey: key, value: key, table: nil) } return key } } // 本地化字符串扩展 extension String { var localized: String { return LanguageManager.shared.localizedString(for: self) } } // 通知名称扩展 extension Notification.Name { static let languageChanged = Notification.Name("languageChanged") }