forked from MapComplete/MapComplete
		
	Fix: fix validation of question input; remove some obsolete logging; stabilize output of generate:translations wrt newlines
This commit is contained in:
		
							parent
							
								
									755f905c36
								
							
						
					
					
						commit
						1f39ba9ab5
					
				
					 26 changed files with 7328 additions and 71 deletions
				
			
		|  | @ -1,6 +1,6 @@ | |||
| import * as fs from "fs" | ||||
| import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" | ||||
| import { Utils } from "../Utils" | ||||
| import {existsSync, mkdirSync, readFileSync, writeFileSync} from "fs" | ||||
| import {Utils} from "../Utils" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| 
 | ||||
| const knownLanguages = ["en", "nl", "de", "fr", "es", "gl", "ca"] | ||||
|  | @ -12,7 +12,7 @@ class TranslationPart { | |||
|         const files = ScriptUtils.readDirRecSync(path, 1).filter((file) => file.endsWith(".json")) | ||||
|         const rootTranslation = new TranslationPart() | ||||
|         for (const file of files) { | ||||
|             const content = JSON.parse(readFileSync(file, { encoding: "utf8" })) | ||||
|             const content = JSON.parse(readFileSync(file, {encoding: "utf8"})) | ||||
|             rootTranslation.addTranslation(file.substr(0, file.length - ".json".length), content) | ||||
|         } | ||||
|         return rootTranslation | ||||
|  | @ -52,10 +52,10 @@ class TranslationPart { | |||
|             if (typeof v != "string") { | ||||
|                 console.error( | ||||
|                     `Non-string object at ${context} in translation while trying to add the translation ` + | ||||
|                         JSON.stringify(v) + | ||||
|                         ` to '` + | ||||
|                         translationsKey + | ||||
|                         "'. The offending object which _should_ be a translation is: ", | ||||
|                     JSON.stringify(v) + | ||||
|                     ` to '` + | ||||
|                     translationsKey + | ||||
|                     "'. The offending object which _should_ be a translation is: ", | ||||
|                     v, | ||||
|                     "\n\nThe current object is (only showing en):", | ||||
|                     this.toJson(), | ||||
|  | @ -94,9 +94,9 @@ class TranslationPart { | |||
|             if (noTranslate !== undefined) { | ||||
|                 console.log( | ||||
|                     "Ignoring some translations for " + | ||||
|                         context + | ||||
|                         ": " + | ||||
|                         dontTranslateKeys.join(", ") | ||||
|                     context + | ||||
|                     ": " + | ||||
|                     dontTranslateKeys.join(", ") | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|  | @ -243,14 +243,14 @@ class TranslationPart { | |||
|                 } | ||||
|                 subparts = subparts.map((p) => p.split(/\(.*\)/)[0]) | ||||
|                 for (const subpart of subparts) { | ||||
|                     neededSubparts.add({ part: subpart, usedByLanguage: lang }) | ||||
|                     neededSubparts.add({part: subpart, usedByLanguage: lang}) | ||||
|                 } | ||||
|             } | ||||
|         }) | ||||
| 
 | ||||
|         // Actually check for the needed sub-parts, e.g. that {key} isn't translated into {sleutel}
 | ||||
|         this.contents.forEach((value, key) => { | ||||
|             neededSubparts.forEach(({ part, usedByLanguage }) => { | ||||
|             neededSubparts.forEach(({part, usedByLanguage}) => { | ||||
|                 if (typeof value !== "string") { | ||||
|                     return | ||||
|                 } | ||||
|  | @ -444,6 +444,7 @@ function removeEmptyString(object: object) { | |||
|     } | ||||
|     return object | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Formats the specified file, helps to prevent merge conflicts | ||||
|  * */ | ||||
|  | @ -659,7 +660,8 @@ function mergeLayerTranslations() { | |||
|     const layerFiles = ScriptUtils.getLayerFiles() | ||||
|     for (const layerFile of layerFiles) { | ||||
|         mergeLayerTranslation(layerFile.parsed, layerFile.path, loadTranslationFilesFrom("layers")) | ||||
|         writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, "  ")) // layers use 2 spaces
 | ||||
|         const endsWithNewline = readFileSync(layerFile.path, {encoding: "utf8"})?.endsWith("\n") ?? true | ||||
|         writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, "  ") + (endsWithNewline ? "\n" : "")) // layers use 2 spaces
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -674,7 +676,8 @@ function mergeThemeTranslations() { | |||
| 
 | ||||
|         const allTranslations = new TranslationPart() | ||||
|         allTranslations.recursiveAdd(config, themeFile.path) | ||||
|         writeFileSync(themeFile.path, JSON.stringify(config, null, "  ")) // Themefiles use 2 spaces
 | ||||
|         const endsWithNewline = readFileSync(themeFile.path, {encoding: "utf8"})?.endsWith("\n") ?? true | ||||
|         writeFileSync(themeFile.path, JSON.stringify(config, null, "  ") + (endsWithNewline ? "\n" : "")) // Themefiles use 2 spaces
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -693,7 +696,8 @@ if (!themeOverwritesWeblate) { | |||
|         questionsPath, | ||||
|         loadTranslationFilesFrom("shared-questions") | ||||
|     ) | ||||
|     writeFileSync(questionsPath, JSON.stringify(questionsParsed, null, "  ")) | ||||
|     const endsWithNewline = readFileSync(questionsPath, {encoding: "utf8"}).endsWith("\n") | ||||
|     writeFileSync(questionsPath, JSON.stringify(questionsParsed, null, "  ") + (endsWithNewline ? "\n" : "")) | ||||
| } else { | ||||
|     console.log("Ignore weblate") | ||||
| } | ||||
|  | @ -704,13 +708,13 @@ const l2 = generateTranslationsObjectFrom( | |||
|     "themes" | ||||
| ) | ||||
| const l3 = generateTranslationsObjectFrom( | ||||
|     [{ path: questionsPath, parsed: questionsParsed }], | ||||
|     [{path: questionsPath, parsed: questionsParsed}], | ||||
|     "shared-questions" | ||||
| ) | ||||
| 
 | ||||
| const usedLanguages: string[] = Utils.Dedup(l1.concat(l2).concat(l3)).filter((v) => v !== "*") | ||||
| usedLanguages.sort() | ||||
| fs.writeFileSync("./assets/used_languages.json", JSON.stringify({ languages: usedLanguages })) | ||||
| fs.writeFileSync("./assets/used_languages.json", JSON.stringify({languages: usedLanguages})) | ||||
| 
 | ||||
| if (!themeOverwritesWeblate) { | ||||
|     // Generates the core translations
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue