57 lines
1.9 KiB
Swift
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")
|
|
}
|
|
}
|
|
}
|