Files
ggbond268--mactools/Plugins/Translator/Sources/Language/AutomaticLanguageSelector.swift
T
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

50 lines
1.5 KiB
Swift

import Foundation
import MacToolsPluginKit
struct TranslatorLanguageSelection: Equatable, Sendable {
var source: TranslatorLanguage?
var target: TranslatorLanguage
var sourceIsAutomatic: Bool {
source == nil
}
var sourceDisplayName: String {
sourceDisplayName()
}
func sourceDisplayName(localization: PluginLocalization = PluginLocalization(bundle: .main)) -> String {
source?.displayName(localization: localization)
?? localization.string("language.automatic", defaultValue: "自动检测")
}
}
struct AutomaticLanguageSelector: Sendable {
private let detector: any LanguageDetecting
private let preferredPair: TranslatorLanguagePair
init(
detector: any LanguageDetecting = LanguageDetector(),
preferredPair: TranslatorLanguagePair
) {
self.detector = detector
self.preferredPair = preferredPair
}
func select(text: String) -> TranslatorLanguageSelection {
guard let source = detector.detect(text) else {
return TranslatorLanguageSelection(source: nil, target: preferredPair.first)
}
if source == preferredPair.first {
return TranslatorLanguageSelection(source: source, target: preferredPair.second)
}
return TranslatorLanguageSelection(source: source, target: preferredPair.first)
}
func select(for text: String) -> TranslatorLanguageSelection {
select(text: text)
}
}