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}")`