Files
wehub-resource-sync 869b84f27c
Build / build (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 12:29:30 +08:00

57 lines
1.9 KiB
Swift

import Foundation
enum AppLanguage: String, CaseIterable, Identifiable {
case system = "system"
case english = "en"
case spanish = "es"
case japanese = "ja"
case arabic = "ar"
case portugueseBrazil = "pt-BR"
case simplifiedChinese = "zh-Hans"
case traditionalChinese = "zh-Hant"
static let preferenceKey = "settings.general.appLanguage"
var id: String { rawValue }
var displayName: String {
switch self {
case .system: return "System Default"
case .english: return "English"
case .spanish: return "Spanish"
case .japanese: return "Japanese"
case .arabic: return "Arabic"
case .portugueseBrazil: return "Portuguese (Brazil)"
case .simplifiedChinese: return "Chinese (Simplified)"
case .traditionalChinese: return "Chinese (Traditional)"
}
}
static var current: AppLanguage {
if let selectedLanguage = UserDefaults.standard.string(forKey: preferenceKey),
let language = AppLanguage(rawValue: selectedLanguage) {
return language
}
guard let bundleIdentifier = Bundle.main.bundleIdentifier,
let appDefaults = UserDefaults.standard.persistentDomain(forName: bundleIdentifier),
let preferredLanguages = appDefaults["AppleLanguages"] as? [String],
let preferredLanguage = preferredLanguages.first else {
return .system
}
let normalized = preferredLanguage.replacingOccurrences(of: "_", with: "-")
return allCases.first { $0.rawValue == normalized } ?? .system
}
}
enum AppLanguagePreferences {
static func apply(_ language: AppLanguage, defaults: UserDefaults = .standard) {
if language == .system {
defaults.removeObject(forKey: "AppleLanguages")
} else {
defaults.set([language.rawValue], forKey: "AppleLanguages")
}
}
}