Files
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

56 lines
2.0 KiB
Swift

import Foundation
import MacToolsPluginKit
@MainActor
struct LanguagePreferenceStore {
private let storage: PluginStorage
init(storage: PluginStorage) {
self.storage = storage
}
func loadPair() -> TranslatorLanguagePair {
let defaultPair = Self.defaultPair(fromPreferredLanguages: PluginRuntimeLocalization.preferredLanguages)
guard let firstRawValue = storage.string(forKey: TranslatorConstants.StorageKey.firstPreferredLanguage),
let secondRawValue = storage.string(forKey: TranslatorConstants.StorageKey.secondPreferredLanguage),
let first = TranslatorLanguage(rawValue: firstRawValue),
let second = TranslatorLanguage(rawValue: secondRawValue),
first != second
else {
return defaultPair
}
return TranslatorLanguagePair(first: first, second: second)
}
func savePair(_ pair: TranslatorLanguagePair) {
storage.set(pair.first.rawValue, forKey: TranslatorConstants.StorageKey.firstPreferredLanguage)
storage.set(pair.second.rawValue, forKey: TranslatorConstants.StorageKey.secondPreferredLanguage)
}
static func defaultPair(fromPreferredLanguages preferredLanguages: [String]) -> TranslatorLanguagePair {
var languages: [TranslatorLanguage] = []
for identifier in preferredLanguages {
guard let language = TranslatorLanguage.from(localeIdentifier: identifier),
!languages.contains(language)
else {
continue
}
languages.append(language)
if languages.count == 2 {
return TranslatorLanguagePair(first: languages[0], second: languages[1])
}
}
if let language = languages.first, language != .english {
return TranslatorLanguagePair(first: language, second: .english)
}
return TranslatorLanguagePair(first: .simplifiedChinese, second: .english)
}
}