TranslationService.swift (2105B)
1 // 2 // TranslationService.swift 3 // damus 4 // 5 // Created by Terry Yiu on 2/3/23. 6 // 7 8 import Foundation 9 10 enum TranslationService: String, CaseIterable, Identifiable, StringCodable { 11 init?(from string: String) { 12 guard let ts = TranslationService(rawValue: string) else { 13 return nil 14 } 15 16 self = ts 17 } 18 19 func to_string() -> String { 20 return self.rawValue 21 } 22 23 var id: String { self.rawValue } 24 25 struct Model: Identifiable, Hashable { 26 var id: String { self.tag } 27 var tag: String 28 var displayName: String 29 } 30 31 case none 32 case purple 33 case libretranslate 34 case deepl 35 case nokyctranslate 36 case winetranslate 37 38 var model: Model { 39 switch self { 40 case .none: 41 return .init(tag: self.rawValue, displayName: NSLocalizedString("none_translation_service", value: "None", comment: "Dropdown option for selecting no translation service.")) 42 case .purple: 43 return .init(tag: self.rawValue, displayName: NSLocalizedString("Damus Purple", comment: "Dropdown option for selecting Damus Purple as a translation service.")) 44 case .libretranslate: 45 return .init(tag: self.rawValue, displayName: NSLocalizedString("LibreTranslate (Open Source)", comment: "Dropdown option for selecting LibreTranslate as the translation service.")) 46 case .deepl: 47 return .init(tag: self.rawValue, displayName: NSLocalizedString("DeepL (Proprietary, Higher Accuracy)", comment: "Dropdown option for selecting DeepL as the translation service.")) 48 case .nokyctranslate: 49 return .init(tag: self.rawValue, displayName: NSLocalizedString("NoKYCTranslate.com (Prepay with BTC)", comment: "Dropdown option for selecting NoKYCTranslate.com as the translation service.")) 50 case .winetranslate: 51 return .init(tag: self.rawValue, displayName: NSLocalizedString("translate.nostr.wine (DeepL, Pay with BTC)", comment: "Dropdown option for selecting translate.nostr.wine as the translation service.")) 52 } 53 } 54 }