DEVTOOLS-181 Gérer le tag noTranslation pour les xcstrings

This commit is contained in:
2024-04-17 09:44:09 +02:00
parent 27f86f5c4d
commit fb2ddb2227
6 changed files with 59 additions and 115 deletions

View File

@ -9,7 +9,7 @@ import Foundation
enum GenerateError: Error {
case fileNotExists(String)
case invalidConfigurationFile(String)
case invalidConfigurationFile(String, String)
case commandError([String], String)
case writeFile(String, String)
@ -18,8 +18,8 @@ enum GenerateError: Error {
case .fileNotExists(let filename):
return "error: [\(Generate.toolName)] File \(filename) does not exists"
case .invalidConfigurationFile(let filename):
return "error: [\(Generate.toolName)] File \(filename) is not a valid configuration file"
case .invalidConfigurationFile(let filename, let underneathErrorDescription):
return "error: [\(Generate.toolName)] File \(filename) is not a valid configuration file. Underneath error: \(underneathErrorDescription)"
case .commandError(let command, let terminationStatus):
let readableCommand = command

View File

@ -16,12 +16,15 @@ class ConfigurationFileParser {
Generate.exit(withError: error)
}
guard let configuration = try? YAMLDecoder().decode(ConfigurationFile.self, from: data) else {
let error = GenerateError.invalidConfigurationFile(configurationFile)
do {
return try YAMLDecoder().decode(ConfigurationFile.self, from: data)
} catch {
let error = GenerateError.invalidConfigurationFile(
configurationFile,
error.localizedDescription.description
)
print(error.description)
Generate.exit(withError: error)
}
return configuration
}
}

View File

@ -163,6 +163,7 @@ class StringsFileGenerator {
section.definitions.forEach { definition in
var skipDefinition = false
var isNoTranslation = false
var localizationTab: [XCStringLocalization] = []
@ -170,17 +171,37 @@ class StringsFileGenerator {
skipDefinition = true
}
if definition.tags.contains(Stringium.noTranslationTag) {
isNoTranslation = true
}
if !skipDefinition {
for (lang, value) in definition.translations where !value.isEmpty {
if isNoTranslation {
// Search for langs in yaml
for lang in langs {
if let value = definition.translations[defaultLang], !value.isEmpty {
let localization = XCStringLocalization(
lang: lang,
content: XCStringLocalizationLangContent(
stringUnit: DefaultStringUnit(state: "translated", value: value)
)
)
localizationTab.append(localization)
}
}
} else {
// Search for langs in twine
for (lang, value) in definition.translations where !value.isEmpty {
let localization = XCStringLocalization(
lang: lang,
content: XCStringLocalizationLangContent(
stringUnit: DefaultStringUnit(state: "translated", value: value)
let localization = XCStringLocalization(
lang: lang,
content: XCStringLocalizationLangContent(
stringUnit: DefaultStringUnit(state: "translated", value: value)
)
)
)
localizationTab.append(localization)
localizationTab.append(localization)
}
}
let xcStringDefinition = XCStringDefinition(

View File

@ -53,17 +53,6 @@ struct Stringium: ParsableCommand {
tags: options.tags,
outputPath: options.stringsFileOutputPath,
inputFilenameWithoutExt: options.inputFilenameWithoutExt)
// Generate extension
StringsFileGenerator.writeExtensionFiles(sections: sections,
defaultLang: options.defaultLang,
tags: options.tags,
staticVar: options.staticMembers,
inputFilename: options.inputFilenameWithoutExt,
extensionName: options.extensionName,
extensionFilePath: options.extensionFilePath,
extensionSuffix: options.extensionSuffix)
} else {
print("[\(Self.toolName)] Will generate xcStrings")
StringsFileGenerator.writeXcStringsFiles(sections: sections,
@ -74,6 +63,16 @@ struct Stringium: ParsableCommand {
inputFilenameWithoutExt: options.inputFilenameWithoutExt)
}
// Generate extension
StringsFileGenerator.writeExtensionFiles(sections: sections,
defaultLang: options.defaultLang,
tags: options.tags,
staticVar: options.staticMembers,
inputFilename: options.inputFilenameWithoutExt,
extensionName: options.extensionName,
extensionFilePath: options.extensionFilePath,
extensionSuffix: options.extensionSuffix)
print("[\(Self.toolName)] Strings generated")
}