forked from MapComplete/MapComplete
		
	Prepare script to let translations flow back into the themes
This commit is contained in:
		
							parent
							
								
									8361cfac7a
								
							
						
					
					
						commit
						e057f10409
					
				
					 2 changed files with 83 additions and 9 deletions
				
			
		
							
								
								
									
										4
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								Utils.ts
									
										
									
									
									
								
							| 
						 | 
					@ -161,6 +161,9 @@ export class Utils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static Merge(source: any, target: any) {
 | 
					    static Merge(source: any, target: any) {
 | 
				
			||||||
        for (const key in source) {
 | 
					        for (const key in source) {
 | 
				
			||||||
 | 
					            if(!source.hasOwnProperty(key)){
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            const sourceV = source[key];
 | 
					            const sourceV = source[key];
 | 
				
			||||||
            const targetV = target[key]
 | 
					            const targetV = target[key]
 | 
				
			||||||
            if (typeof sourceV === "object") {
 | 
					            if (typeof sourceV === "object") {
 | 
				
			||||||
| 
						 | 
					@ -322,6 +325,7 @@ export class Utils {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return bestColor ?? hex;
 | 
					        return bestColor ?? hex;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static tile2long(x, z) {
 | 
					    private static tile2long(x, z) {
 | 
				
			||||||
        return (x / Math.pow(2, z) * 360 - 180);
 | 
					        return (x / Math.pow(2, z) * 360 - 180);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import LayerConfig from "../Customizations/JSON/LayerConfig";
 | 
				
			||||||
import {LayerConfigJson} from "../Customizations/JSON/LayerConfigJson";
 | 
					import {LayerConfigJson} from "../Customizations/JSON/LayerConfigJson";
 | 
				
			||||||
import * as bookcases from "../assets/layers/public_bookcase/public_bookcase.json"
 | 
					import * as bookcases from "../assets/layers/public_bookcase/public_bookcase.json"
 | 
				
			||||||
import LayerOverviewUtils from "./generateLayerOverview";
 | 
					import LayerOverviewUtils from "./generateLayerOverview";
 | 
				
			||||||
 | 
					import {Script} from "vm";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const knownLanguages = ["en", "nl", "de", "fr", "es", "gl", "ca"];
 | 
					const knownLanguages = ["en", "nl", "de", "fr", "es", "gl", "ca"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,6 +197,7 @@ function generateTranslationFromLayerConfig(layerConfig: LayerConfigJson): Trans
 | 
				
			||||||
    return tr;
 | 
					    return tr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get all the string out of the themes
 | 
				
			||||||
function generateLayerTranslationsObject() {
 | 
					function generateLayerTranslationsObject() {
 | 
				
			||||||
    const layerFiles = new LayerOverviewUtils().getLayerFiles();
 | 
					    const layerFiles = new LayerOverviewUtils().getLayerFiles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -222,8 +224,76 @@ function generateLayerTranslationsObject() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function MergeTranslation(source: any, target: any, language: string, context: string = "") {
 | 
				
			||||||
 | 
					    for (const key in source) {
 | 
				
			||||||
 | 
					        if (!source.hasOwnProperty(key)) {
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const sourceV = source[key];
 | 
				
			||||||
 | 
					        const targetV = target[key]
 | 
				
			||||||
 | 
					        if (typeof sourceV === "string") {
 | 
				
			||||||
 | 
					            if (targetV[language] === sourceV) {
 | 
				
			||||||
 | 
					                // Already the same
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if(typeof targetV === "string"){
 | 
				
			||||||
 | 
					                console.error("Could not add a translation to string ", targetV, ". The translation is", sourceV, " in "+context)
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            targetV[language] = sourceV;
 | 
				
			||||||
 | 
					            console.log("   + ",context + "." + language, "-->", sourceV)
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (typeof sourceV === "object") {
 | 
				
			||||||
 | 
					            if (targetV === undefined) {
 | 
				
			||||||
 | 
					                throw "MergingTranslations failed: source object has a path that does not exist anymore in the target: " + context
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                MergeTranslation(sourceV, targetV, language, context + "." + key);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        throw "Case fallthrough"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return target;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function mergeLayerTranslation(layerConfig: LayerConfigJson, path: string, translationFiles: Map<string, any>) {
 | 
				
			||||||
 | 
					    const id = layerConfig.id;
 | 
				
			||||||
 | 
					    translationFiles.forEach((translations, lang) => {
 | 
				
			||||||
 | 
					        const translationsForLayer = translations[id]
 | 
				
			||||||
 | 
					      //  MergeTranslation(translationsForLayer, layerConfig, lang, id)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    writeFileSync(path, JSON.stringify(layerConfig, null, "  "))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Load the translations back into the layers
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function mergeLayerTranslations() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const translationFilePaths = ScriptUtils.readDirRecSync("./langs/layers")
 | 
				
			||||||
 | 
					        .filter(path => path.endsWith(".json"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const translationFiles = new Map<string, any>();
 | 
				
			||||||
 | 
					    for (const translationFilePath of translationFilePaths) {
 | 
				
			||||||
 | 
					        let language = translationFilePath.substr(translationFilePath.lastIndexOf("/") + 1)
 | 
				
			||||||
 | 
					        language = language.substr(0, language.length - 5)
 | 
				
			||||||
 | 
					        translationFiles.set(language, JSON.parse(readFileSync(translationFilePath, "utf8")))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const layerFiles = new LayerOverviewUtils().getLayerFiles();
 | 
				
			||||||
 | 
					    for (const layerFile of layerFiles) {
 | 
				
			||||||
 | 
					        mergeLayerTranslation(layerFile.parsed, layerFile.path, translationFiles)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// generateLayerTranslationsObject()
 | 
				
			||||||
 | 
					mergeLayerTranslations();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
generateLayerTranslationsObject()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
compileTranslationsFromWeblate();
 | 
					compileTranslationsFromWeblate();
 | 
				
			||||||
genTranslations()
 | 
					genTranslations()
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue