diff --git a/langs/ca.json b/langs/ca.json index fafb1f2e9..1e596ce6e 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -276,17 +276,17 @@ "willBePublished": "La teva foto serà publicada: " }, "importHelper": { - "allAttributesSame": "Totes les funcions a importar tenen aquesta etiqueta", - "description": "L'ajudant d'importació converteix un conjunt de dades extern en notes. El conjunt de dades extern ha de coincidir amb una de les capes MapComplete existents. Per a cada article que introdueixes a l'importador, es crearà una nota única. Aquestes notes es mostraran juntament amb les característiques rellevants en aquests mapes per afegir-les fàcilment.", - "importFormat": "Un text d'una nota ha de tenir el format següent per poder ser recollit:
[Una petita introducció]
https://mapcomplete.osm.be /[themename].html?[paràmetres com ara lat i lon]#import
[totes les etiquetes de la funció]
", - "inspectDataTitle": "Inspecciona les dades de {count} funcions per importar", - "inspectDidAutoDected": "La capa es va seleccionar automàticament", - "inspectLooksCorrect": "Aquests valors semblen correctes", - "lockNotice": "Aquesta pàgina està bloquejada. Necessites {importHelperUnlock} conjunts de canvis per poder accedir aquí.", - "locked": "Necessites almenys {importHelperUnlock} per utilitzar l'ajudant d'importació", - "loggedInWith": "Actualment has entrat com a {name} i has fet {csCount} conjunts de canvis", - "loginIsCorrect": "{name} és el compte correcte per crear les notes d'importació.", - "loginRequired": "Has d'entrar per continuar", + "introduction": { + "description": "L'ajudant d'importació converteix un conjunt de dades extern en notes. El conjunt de dades extern ha de coincidir amb una de les capes MapComplete existents. Per a cada article que introdueixes a l'importador, es crearà una nota única. Aquestes notes es mostraran juntament amb les característiques rellevants en aquests mapes per afegir-les fàcilment.", + "importFormat": "Un text d'una nota ha de tenir el format següent per poder ser recollit:
[Una petita introducció]
https://mapcomplete.osm.be /[themename].html?[paràmetres com ara lat i lon]#import
[totes les etiquetes de la funció]
" + }, + "login": { + "lockNotice": "Aquesta pàgina està bloquejada. Necessites {importHelperUnlock} conjunts de canvis per poder accedir aquí.", + "loggedInWith": "Actualment has entrat com a {name} i has fet {csCount} conjunts de canvis", + "loginIsCorrect": "{name} és el compte correcte per crear les notes d'importació.", + "loginRequired": "Has d'entrar per continuar", + "userAccountTitle": "Seleccionar compte d'usuari" + }, "mapPreview": { "autodetected": "La capa es va deduir automàticament en funció de les propietats", "confirm": "Les característiques es troben a la ubicació correcta del mapa", @@ -294,6 +294,12 @@ "selectLayer": "Amb quina capa coincideix aquesta importació?", "title": "Vista prèvia del mapa" }, + "previewAttributes": { + "allAttributesSame": "Totes les funcions a importar tenen aquesta etiqueta", + "inspectDataTitle": "Inspecciona les dades de {count} funcions per importar", + "inspectLooksCorrect": "Aquests valors semblen correctes", + "someHaveSame": "{count} característiques per importar tenen aquesta etiqueta, això és un {percentage}% del total" + }, "selectFile": { "description": "Seleccionar un fitxer .csv o .geojson per començar", "errDuplicate": "Algunes columnes tenen el mateix nom", @@ -308,11 +314,7 @@ "noFilesLoaded": "No s'ha carregat cap arxiu", "title": "Seleccionar arxiu" }, - "selectLayer": "Seleccionar capa...", - "someHaveSame": "{count} característiques per importar tenen aquesta etiqueta, això és un {percentage}% del total", - "title": "Ajuda de l'importador", - "userAccountTitle": "Seleccionar compte d'usuari", - "validateDataTitle": "Validar dades" + "title": "Ajuda de l'importador" }, "importInspector": { "title": "Inspeccionar i controlar notes d'importació" diff --git a/langs/de.json b/langs/de.json index 0c28eca83..dcbdbfe5f 100644 --- a/langs/de.json +++ b/langs/de.json @@ -276,17 +276,17 @@ "willBePublished": "Ihr Bild wird veröffentlicht " }, "importHelper": { - "allAttributesSame": "Alle zu importierenden Objekte haben diesen Tag", - "description": "Der Import-Helfer konvertiert einen externen Datensatz in Hinweise. Der externe Datensatz muss mit einer der vorhandenen MapComplete-Ebenen übereinstimmen. Für jedes Element, das Sie in den Import-Helfer eingeben, wird ein einzelner Hinweis erstellt. Diese Hinweise werden zusammen mit den entsprechenden Objekten in diesen Karten angezeigt, um sie leicht hinzufügen zu können.", - "importFormat": "Der Hinweistext sollte folgendes Format haben, um aufgenommen zu werden:
[Eine kleine Einführung]
https://mapcomplete.osm.be/[themenname].html?[Parameter wie lat und lon]#import
[alle Tags des Objekts]
", - "inspectDataTitle": "Daten von {count} zu importierenden Objekten prüfen", - "inspectDidAutoDected": "Ebene wurde automatisch ausgewählt", - "inspectLooksCorrect": "Die Werte sehen richtig aus", - "lockNotice": "Diese Seite ist gesperrt. Du brauchst die Änderungen {importHelperUnlock} bevor du die Seite öffnen kannst.", - "locked": "Du benötigst mindestens {importHelperUnlock} um die Importhilfe zu benutzen", - "loggedInWith": "Du bist eingeloggt als {name} und hast {csCount} Änderungen", - "loginIsCorrect": "{name} ist der richtige Account um Importnotizen zu erstellen.", - "loginRequired": "Sie müssen eingeloggt sein, um fortzufahren", + "introduction": { + "description": "Der Import-Helfer konvertiert einen externen Datensatz in Hinweise. Der externe Datensatz muss mit einer der vorhandenen MapComplete-Ebenen übereinstimmen. Für jedes Element, das Sie in den Import-Helfer eingeben, wird ein einzelner Hinweis erstellt. Diese Hinweise werden zusammen mit den entsprechenden Objekten in diesen Karten angezeigt, um sie leicht hinzufügen zu können.", + "importFormat": "Der Hinweistext sollte folgendes Format haben, um aufgenommen zu werden:
[Eine kleine Einführung]
https://mapcomplete.osm.be/[themenname].html?[Parameter wie lat und lon]#import
[alle Tags des Objekts]
" + }, + "login": { + "lockNotice": "Diese Seite ist gesperrt. Du brauchst die Änderungen {importHelperUnlock} bevor du die Seite öffnen kannst.", + "loggedInWith": "Du bist eingeloggt als {name} und hast {csCount} Änderungen", + "loginIsCorrect": "{name} ist der richtige Account um Importnotizen zu erstellen.", + "loginRequired": "Sie müssen eingeloggt sein, um fortzufahren", + "userAccountTitle": "Wähle einen Benutzeraccount" + }, "mapPreview": { "autodetected": "Die Ebene wurde anhand der Eigenschaften automatisch abgezogen", "confirm": "Die Objekte befinden sich an der richtigen Stelle auf der Karte", @@ -294,6 +294,12 @@ "selectLayer": "Zu welcher Ebene passt dieser Import?", "title": "Kartenvorschau" }, + "previewAttributes": { + "allAttributesSame": "Alle zu importierenden Objekte haben diesen Tag", + "inspectDataTitle": "Daten von {count} zu importierenden Objekten prüfen", + "inspectLooksCorrect": "Die Werte sehen richtig aus", + "someHaveSame": "{count} der zu importierenden Objekte haben dieses Tag, das sind {percentage}% der Gesamtzahl" + }, "selectFile": { "description": "Wähle eine .csv oder .geojson Datei um anzufangen", "errDuplicate": "Einige Spalten haben den selben Namen", @@ -308,11 +314,7 @@ "noFilesLoaded": "Keine Datei geladen", "title": "Wähle eine Datei" }, - "selectLayer": "Wähle eine Ebene...", - "someHaveSame": "{count} der zu importierenden Objekte haben dieses Tag, das sind {percentage}% der Gesamtzahl", - "title": "Import-Helfer", - "userAccountTitle": "Wähle einen Benutzeraccount", - "validateDataTitle": "Bestätige Daten" + "title": "Import-Helfer" }, "importInspector": { "title": "Importhinweise überprüfen und verwalten" diff --git a/langs/es.json b/langs/es.json index f5316e305..7aeb05d29 100644 --- a/langs/es.json +++ b/langs/es.json @@ -215,8 +215,7 @@ "selectFile": { "title": "Seleccionar archivo" }, - "title": "Ayudante de importación", - "validateDataTitle": "Validar datos" + "title": "Ayudante de importación" }, "importLayer": { "layerName": "Posible {title}", diff --git a/langs/hu.json b/langs/hu.json index a5750aa36..915c5e98d 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -267,8 +267,12 @@ "willBePublished": "A képed így lesz közzétéve: " }, "importHelper": { - "allAttributesSame": "Ez a címke minden importálandó objektumon szerepel", - "description": "Az importálási segédprogram egy külső adatkészletet konvertál OSM-jegyzetekké. A külső adatkészletnek meg kell felelnie a MapComplete egyik meglévő rétegének. Az importálóba helyezett minden egyes elemhez egyetlen jegyzet fog létrejönni. Ezek a jegyzetek a megfelelő objektumokkal együtt fognak megjelenni ezeken a térképekben, hogy könnyen fel lehessen rajzolni őket a térképre." + "introduction": { + "description": "Az importálási segédprogram egy külső adatkészletet konvertál OSM-jegyzetekké. A külső adatkészletnek meg kell felelnie a MapComplete egyik meglévő rétegének. Az importálóba helyezett minden egyes elemhez egyetlen jegyzet fog létrejönni. Ezek a jegyzetek a megfelelő objektumokkal együtt fognak megjelenni ezeken a térképekben, hogy könnyen fel lehessen rajzolni őket a térképre." + }, + "previewAttributes": { + "allAttributesSame": "Ez a címke minden importálandó objektumon szerepel" + } }, "index": { "#": "Ezek a szövegek akkor jelennek meg a témagombok felett, ha nincs betöltve téma", diff --git a/langs/nl.json b/langs/nl.json index 4ef911f2d..92573b6ba 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -276,17 +276,17 @@ "willBePublished": "Jouw foto wordt gepubliceerd " }, "importHelper": { - "allAttributesSame": "Alle kaart-objecten om te importeren hebben deze tag", - "description": "De importeer-helper converteert een externe dataset in OSM-kaartnotas. De externe data moet overeenkomen met een bestaande MapComplete-laag. Voor elk item wordt er een kaartnota gemaakt. Deze notas worden dan samen met de relevante POI getoond en kunnen dan (via MapComplete) snel en eenvoudig toegevoegd worden.", - "importFormat": "Een kaartnota moet het volgende formaat hebben om gedetecteerd te worden binnen een laag:
[Een introductietekst]
https://mapcomplete.osm.be/[themename].html?[parameters waaronder lon en lat]#import
[alle tags van het te importeren object]
", - "inspectDataTitle": "Bekijk de data van {count} te importeren objecten", - "inspectDidAutoDected": "Deze laag werd automatisch gekozen", - "inspectLooksCorrect": "Deze waardes zien er correct uit", - "lockNotice": "Deze pagina is afgeschermd. Je hebt minstens {importHelperUnlock} changesets nodig voor je deze pagina mag gebruiken.", - "locked": "Je hebt minstens {importHelperUnlock} changesets nodig om de import helper te gebruiken", - "loggedInWith": "Je bent momenteel aangemeld als {name} and maakte {csCount} eerdere wijzigingen", - "loginIsCorrect": "{name} is de correcte account om de import-nota's mee te maken.", - "loginRequired": "Je moet ingelogd zijn om verder te gaan", + "introduction": { + "description": "De importeer-helper converteert een externe dataset in OSM-kaartnotas. De externe data moet overeenkomen met een bestaande MapComplete-laag. Voor elk item wordt er een kaartnota gemaakt. Deze notas worden dan samen met de relevante POI getoond en kunnen dan (via MapComplete) snel en eenvoudig toegevoegd worden.", + "importFormat": "Een kaartnota moet het volgende formaat hebben om gedetecteerd te worden binnen een laag:
[Een introductietekst]
https://mapcomplete.osm.be/[themename].html?[parameters waaronder lon en lat]#import
[alle tags van het te importeren object]
" + }, + "login": { + "lockNotice": "Deze pagina is afgeschermd. Je hebt minstens {importHelperUnlock} changesets nodig voor je deze pagina mag gebruiken.", + "loggedInWith": "Je bent momenteel aangemeld als {name} and maakte {csCount} eerdere wijzigingen", + "loginIsCorrect": "{name} is de correcte account om de import-nota's mee te maken.", + "loginRequired": "Je moet ingelogd zijn om verder te gaan", + "userAccountTitle": "Selecteer een account" + }, "mapPreview": { "autodetected": "Deze laag was automatisch gekozen gebaseerd op de aanwezige eigenschappen", "confirm": "De objecten bevinden zich op de juiste locatie", @@ -294,6 +294,12 @@ "selectLayer": "Met welke laag komt deze te importeren dataset overeen?", "title": "Voorbeeldkaart" }, + "previewAttributes": { + "allAttributesSame": "Alle kaart-objecten om te importeren hebben deze tag", + "inspectDataTitle": "Bekijk de data van {count} te importeren objecten", + "inspectLooksCorrect": "Deze waardes zien er correct uit", + "someHaveSame": "{count} te importeren objecten hebben dit attribuut, dit is {percentage}% van het totaal" + }, "selectFile": { "description": "Selecteer een .csv of .geojson-bestand", "errDuplicate": "Sommige kolommen hebben dezelfde naam", @@ -308,11 +314,7 @@ "noFilesLoaded": "Geen bestand ingeladen op dit moment", "title": "Selecteer bestand" }, - "selectLayer": "Selecteer een laag...", - "someHaveSame": "{count} te importeren objecten hebben dit attribuut, dit is {percentage}% van het totaal", - "title": "Importeer-helper", - "userAccountTitle": "Selecteer een account", - "validateDataTitle": "Valideer data" + "title": "Importeer-helper" }, "importInspector": { "title": "Inspecteer en beheer importeer-notas" diff --git a/langs/themes/en.json b/langs/themes/en.json index 572617acd..58279b6f6 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -268,7 +268,7 @@ }, "climbing": { "description": "On this map you will find various climbing opportunities such as climbing gyms, bouldering halls and rocks in nature.", - "descriptionTail": "The climbing map was originally made by Christian Neumann. Please get in touch if you have feedback or questions.

The project uses data of the OpenStreetMap project.

", + "descriptionTail": "The climbing map was originally made by Christian Neumann. Please get in touch if you have feedback or questions.

The project uses data of the OpenStreetMap project.

", "overrideAll": { "tagRenderings+": { "0": { diff --git a/scripts/automoveTranslations.ts b/scripts/automoveTranslations.ts new file mode 100644 index 000000000..662b91fb0 --- /dev/null +++ b/scripts/automoveTranslations.ts @@ -0,0 +1,61 @@ +import * as languages from "../assets/generated/used_languages.json" +import {readFileSync, writeFileSync} from "fs"; + +/** + * Moves values around in 'section'. Section will be changed + * @param section + * @param referenceSection + * @param language + */ +function fixSection(section, referenceSection, language: string) { + if(section === undefined){ + return + } + outer: for (const key of Object.keys(section)) { + const v = section[key] + if(typeof v ==="string" && referenceSection[key] === undefined){ + // Not found in reference, search for a subsection with this key + for (const subkey of Object.keys(referenceSection)) { + const subreference = referenceSection[subkey] + if(subreference[key] !== undefined){ + if(section[subkey] !== undefined && section[subkey][key] !== undefined) { + console.log(`${subkey}${key} is already defined... Looking furhter`) + continue + } + if(typeof section[subkey] === "string"){ + console.log(`NOT overwriting '${section[subkey]}' for ${subkey} (needed for ${key})`) + }else{ + // apply fix + if(section[subkey] === undefined){ + section[subkey] = {} + } + section[subkey][key] = section[key] + delete section[key] + console.log(`Rewritten key: ${key} --> ${subkey}.${key} in language ${language}`) + continue outer + } + } + } + console.log("No solution found for "+key) + } + } +} + + +function main(args:string[]):void{ + const sectionName = args[0] + const l = args[1] + if(sectionName === undefined){ + console.log("Tries to automatically move translations to a new subsegment. Usage: 'sectionToCheck' 'language'") + return + } + const reference = JSON.parse( readFileSync("./langs/en.json","UTF8")) + const path = `./langs/${l}.json` + const file = JSON.parse( readFileSync(path,"UTF8")) + fixSection(file[sectionName], reference[sectionName], l) + writeFileSync(path, JSON.stringify(file, null, " ")+"\n") + + +} + +main(process.argv.slice(2)) \ No newline at end of file diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts index 5b4f0a42d..a046eabbd 100644 --- a/scripts/generateTranslations.ts +++ b/scripts/generateTranslations.ts @@ -300,7 +300,7 @@ function transformTranslation(obj: any, path: string[] = [], languageWhitelist : if(value["en"] === undefined){ - throw `At ${path.join(".")}: Missing 'en' translation for ${JSON.stringify(value)}` + throw `At ${path.join(".")}: Missing 'en' translation at path ${path.join(".")}.${key}\n\tThe translations in other languages are ${JSON.stringify(value)}` } const subParts : string[] = value["en"].match(/{[^}]*}/g) let expr = `return new Translation(${JSON.stringify(value)}, "core:${path.join(".")}.${key}")`