From e3f90e0d48a19f9927f7227f7b8d171001d0bc7f Mon Sep 17 00:00:00 2001 From: Thibaut Schmitt Date: Mon, 8 Aug 2022 12:14:18 +0200 Subject: [PATCH] Correction Stringium pour bien prendre en compte les tags des chaines strings (ex: ios,droid, iosonly...- --- .../Strings/Generator/StringsFileGenerator.swift | 16 +++++++++++++++- Sources/Strings/Model/Definition.swift | 7 +++++++ Sources/Strings/Model/Section.swift | 10 +++++----- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Sources/Strings/Generator/StringsFileGenerator.swift b/Sources/Strings/Generator/StringsFileGenerator.swift index 7fd7ca4..bc1579d 100644 --- a/Sources/Strings/Generator/StringsFileGenerator.swift +++ b/Sources/Strings/Generator/StringsFileGenerator.swift @@ -54,16 +54,26 @@ class StringsFileGenerator { stringsFileContent += "\n/********** \(section.name) **********/\n\n" section.definitions.forEach { definition in + var skipDefinition = false // Set to true if not matching tag let translationOpt: String? = { + // If no matching tag => skip + if definition.hasOneOrMoreMatchingTags(inputTags: inputTags) == false { + skipDefinition = true + return nil + } + + // If tags contains `noTranslationTag` => get default lang if definition.tags.contains(Stringium.noTranslationTag) { return definition.translations[defaultLang] } + + // Else: get specific lang return definition.translations[lang] }() if let translation = translationOpt { stringsFileContent += "\"\(definition.name)\" = \"\(translation)\";\n\n" - } else { + } else if skipDefinition == false { let error = StringiumError.langNotDefined(lang, definition.name, definition.reference != nil) print(error.localizedDescription) Stringium.exit(withError: error) @@ -90,6 +100,10 @@ class StringsFileGenerator { content += "\n\t// MARK: - \(section.name)" section.definitions.forEach { definition in + guard definition.hasOneOrMoreMatchingTags(inputTags: tags) == true else { + return // Go to next definition + } + if staticVar { content += "\n\n\(definition.getNSLocalizedStringStaticProperty(forLang: lang))" } else { diff --git a/Sources/Strings/Model/Definition.swift b/Sources/Strings/Model/Definition.swift index 2eca192..c600bdf 100644 --- a/Sources/Strings/Model/Definition.swift +++ b/Sources/Strings/Model/Definition.swift @@ -36,6 +36,13 @@ class Definition { return Definition(name: definitionName) } + func hasOneOrMoreMatchingTags(inputTags: [String]) -> Bool { + if Set(inputTags).intersection(Set(self.tags)).isEmpty { + return false + } + return true + } + // MARK: - private func getStringParameters(input: String) -> (inputParameters: [String], translationArguments: [String])? { diff --git a/Sources/Strings/Model/Section.swift b/Sources/Strings/Model/Section.swift index 5c8cee1..42241d2 100644 --- a/Sources/Strings/Model/Section.swift +++ b/Sources/Strings/Model/Section.swift @@ -28,12 +28,12 @@ class Section { func hasOneOrMoreMatchingTags(tags: [String]) -> Bool { let allTags = definitions.flatMap { $0.tags } + let allTagsSet = Set(allTags) - for tag in tags { - if allTags.contains(tag) { - return true - } + let intersection = Set(tags).intersection(allTagsSet) + if intersection.isEmpty { + return false } - return false + return true } }