// // LocalContext.swift // KissMeConsole // // Created by ened-book-m1 on 2023/06/10. // import Foundation import KissMe struct LocalName: Codable, PropertyIterable, ArrayDecodable { let fieldName: String let localizedName: String init(array: [String]) throws { guard array.count == 2 else { throw GeneralError.incorrectArrayItems } fieldName = array[0] localizedName = array[1] } } struct LocalContext { static var shared = LocalContext() lazy var localNamesDic: [String: LocalName] = { do { let names = try [LocalName].readCsv(fromFile: KissConsole.localNamesUrl) var nameDic = [String: LocalName]() for name in names { nameDic[name.fieldName] = name if name.localizedName.isEmpty { assertionFailure("Cannot load \(KissConsole.localNamesUrl.path) - no localized name for \(name.fieldName)") } } return nameDic } catch { print(error) assertionFailure("Cannot load \(KissConsole.localNamesUrl.path)") return [:] } }() } func localizeString(_ str: String) -> String { return LocalContext.shared.localNamesDic[str]?.localizedName ?? str } enum OnOff: String { case on case off }