
- 修改Package.swift以支持iOS 15和macOS 12。 - 更新swift-tca-architecture-guidelines.mdc中的alwaysApply设置为false。 - 注释掉AppDelegate中的NIMSDK导入,移除不再使用的NIMConfigurationManager和NIMSessionManager文件。 - 添加新的API相关文件,包括EMailLoginFeature、IDLoginFeature和相关视图,增强登录功能。 - 更新APIConstants和APIEndpoints以反映新的API路径。 - 添加本地化支持文件,包含英文和中文简体的本地化字符串。 - 新增字体管理和安全工具类,支持AES和DES加密。 - 更新Xcode项目配置,调整版本号和启动画面设置。
135 lines
4.2 KiB
Swift
135 lines
4.2 KiB
Swift
import Foundation
|
||
import SwiftUI
|
||
|
||
/// 多语言管理工具类
|
||
/// 提供便捷的本地化字符串获取和语言切换功能
|
||
///
|
||
/// 默认语言策略:
|
||
/// - 应用全局默认语言为英文,不依赖系统语言设置
|
||
/// - 用户可通过语言设置界面手动切换到其他支持的语言
|
||
/// - 用户的语言选择会保存在UserDefaults中,下次启动时保持
|
||
class LocalizationManager: ObservableObject {
|
||
|
||
// MARK: - 单例
|
||
static let shared = LocalizationManager()
|
||
|
||
// MARK: - 支持的语言
|
||
enum SupportedLanguage: String, CaseIterable {
|
||
case english = "en"
|
||
case chineseSimplified = "zh-Hans"
|
||
|
||
var displayName: String {
|
||
switch self {
|
||
case .english:
|
||
return "English"
|
||
case .chineseSimplified:
|
||
return "简体中文"
|
||
}
|
||
}
|
||
|
||
var localizedDisplayName: String {
|
||
switch self {
|
||
case .english:
|
||
return "English"
|
||
case .chineseSimplified:
|
||
return "简体中文"
|
||
}
|
||
}
|
||
}
|
||
|
||
// MARK: - 当前语言
|
||
@Published var currentLanguage: SupportedLanguage {
|
||
didSet {
|
||
UserDefaults.standard.set(currentLanguage.rawValue, forKey: "AppLanguage")
|
||
// 通知视图更新
|
||
objectWillChange.send()
|
||
}
|
||
}
|
||
|
||
private init() {
|
||
// 从 UserDefaults 读取保存的语言设置
|
||
let savedLanguage = UserDefaults.standard.string(forKey: "AppLanguage") ?? ""
|
||
self.currentLanguage = SupportedLanguage(rawValue: savedLanguage) ?? .english
|
||
|
||
// 如果没有保存过语言设置,使用系统首选语言
|
||
if savedLanguage.isEmpty {
|
||
self.currentLanguage = Self.getSystemPreferredLanguage()
|
||
}
|
||
}
|
||
|
||
// MARK: - 本地化方法
|
||
|
||
/// 获取本地化字符串
|
||
/// - Parameters:
|
||
/// - key: 本地化 key
|
||
/// - arguments: 格式化参数
|
||
/// - Returns: 本地化后的字符串
|
||
func localizedString(_ key: String, arguments: CVarArg...) -> String {
|
||
let format = getLocalizedString(for: key)
|
||
if arguments.isEmpty {
|
||
return format
|
||
} else {
|
||
return String(format: format, arguments: arguments)
|
||
}
|
||
}
|
||
|
||
/// 获取本地化字符串(私有方法)
|
||
private func getLocalizedString(for key: String) -> String {
|
||
guard let path = Bundle.main.path(forResource: currentLanguage.rawValue, ofType: "lproj"),
|
||
let bundle = Bundle(path: path) else {
|
||
// 如果找不到对应语言包,返回 key 本身
|
||
return NSLocalizedString(key, comment: "")
|
||
}
|
||
|
||
return NSLocalizedString(key, bundle: bundle, comment: "")
|
||
}
|
||
|
||
// MARK: - 语言切换
|
||
|
||
/// 切换到指定语言
|
||
/// - Parameter language: 目标语言
|
||
func switchLanguage(to language: SupportedLanguage) {
|
||
currentLanguage = language
|
||
}
|
||
|
||
/// 获取系统首选语言
|
||
/// 注意:应用全局默认语言已设置为英文,用户可通过设置手动切换语言
|
||
private static func getSystemPreferredLanguage() -> SupportedLanguage {
|
||
// 全局默认语言设置为英文
|
||
// 用户仍可通过语言设置界面切换到其他支持的语言
|
||
return .english
|
||
}
|
||
}
|
||
|
||
// MARK: - SwiftUI Extensions
|
||
extension View {
|
||
/// 应用本地化字符串
|
||
/// - Parameter key: 本地化 key
|
||
/// - Returns: 带有本地化文本的视图
|
||
func localized(_ key: String) -> some View {
|
||
self.modifier(LocalizedTextModifier(key: key))
|
||
}
|
||
}
|
||
|
||
/// 本地化文本修饰器
|
||
struct LocalizedTextModifier: ViewModifier {
|
||
let key: String
|
||
@ObservedObject private var localizationManager = LocalizationManager.shared
|
||
|
||
func body(content: Content) -> some View {
|
||
content
|
||
}
|
||
}
|
||
|
||
// MARK: - 便捷方法
|
||
extension String {
|
||
/// 获取本地化字符串
|
||
var localized: String {
|
||
return LocalizationManager.shared.localizedString(self)
|
||
}
|
||
|
||
/// 获取本地化字符串(带参数)
|
||
func localized(arguments: CVarArg...) -> String {
|
||
return LocalizationManager.shared.localizedString(self, arguments: arguments)
|
||
}
|
||
} |