56 lines
1.3 KiB
Swift
56 lines
1.3 KiB
Swift
//
|
|
// 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
|
|
}
|