// // Definition.swift // // // Created by Thibaut Schmitt on 04/01/2022. // import Foundation class Definition { let name: String var tags = [String]() var comment: String? var translations = [String: String]() var reference: String? var isPlurals = false var isValid: Bool { name.isEmpty == false && translations.isEmpty == false } init(name: String) { self.name = name } static func match(_ line: String) -> Definition? { guard line.range(of: "\\[(.*?)]$", options: .regularExpression, range: nil, locale: nil) != nil else { return nil } let definitionName = line .replacingOccurrences(of: ["[", "]"], with: "") .removeLeadingTrailingWhitespace() return Definition(name: definitionName) } // MARK: - func getNSLocalizedStringProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) print(error.localizedDescription) Stringium.exit(withError: error) } return """ /// Translation in \(lang) : /// \(translation) var \(name): String { NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "") } """ } func getNSLocalizedStringStaticProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) print(error.localizedDescription) Stringium.exit(withError: error) } return """ /// Translation in \(lang) : /// \(translation) static var \(name): String { NSLocalizedString("\(name)", tableName: kStringsFileName, bundle: Bundle.main, value: "\(translation)", comment: "") } """ } // MARK: - Raw strings func getProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) print(error.localizedDescription) Stringium.exit(withError: error) } return """ /// Translation in \(lang) : /// \(translation) var \(name): String { "\(translation)" } """ } func getStaticProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) print(error.localizedDescription) Stringium.exit(withError: error) } return """ /// Translation in \(lang) : /// \(translation) static var \(name): String { "\(translation)" } """ } }