Files
e-party-iOS/yana/Utils/LocalizationManager.swift
edwinQQQ f9f3dec53f feat: 更新Podfile和Podfile.lock,移除Alamofire依赖并添加API认证机制文档
- 注释掉Podfile中的Alamofire依赖,更新Podfile.lock以反映更改。
- 在yana/APIs/API-README.md中新增自动认证Header机制的详细文档,描述其工作原理、实现细节及最佳实践。
- 在yana/yanaApp.swift中将print语句替换为debugInfo以增强调试信息的输出。
- 在API相关文件中实现用户认证状态检查和相关header的自动添加逻辑,提升API请求的安全性和用户体验。
- 更新多个文件中的日志输出,确保在DEBUG模式下提供详细的调试信息。
2025-07-11 16:53:46 +08:00

146 lines
4.6 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 {
do {
try KeychainManager.shared.storeString(currentLanguage.rawValue, forKey: "AppLanguage")
} catch {
debugError("❌ 保存语言设置失败: \(error)")
}
//
objectWillChange.send()
}
}
private init() {
// Keychain
let savedLanguage: String?
do {
savedLanguage = try KeychainManager.shared.retrieveString(forKey: "AppLanguage")
} catch {
debugError("❌ 读取语言设置失败: \(error)")
savedLanguage = nil
}
if let language = savedLanguage, let supportedLanguage = SupportedLanguage(rawValue: language) {
self.currentLanguage = supportedLanguage
} else {
// 使
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)
}
}