From cd1c7c3e5ef7de4c72b01e50f1c70e51e4399b4f Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 20 May 2021 00:10:38 +0200 Subject: [PATCH] Sync translations --- assets/themes/benches/benches.json | 12 +- .../bike_monitoring_stations.json | 12 +- assets/themes/campersites/campersites.json | 6 +- assets/themes/climbing/climbing.json | 4 +- assets/themes/fritures/fritures.json | 3 +- langs/themes/de.json | 3 + langs/themes/fr.json | 19 +- langs/themes/nl.json | 334 ++++++++++++++++-- scripts/generateTranslations.ts | 58 ++- 9 files changed, 394 insertions(+), 57 deletions(-) diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index 5ee52aeff..d257c61ff 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -3,22 +3,26 @@ "title": { "en": "Benches", "de": "Sitzbänke", - "fr": "Bancs" + "fr": "Bancs", + "nl": "Zitbanken" }, "shortDescription": { "en": "A map of benches", "de": "Eine Karte aller Sitzbänke", - "fr": "Carte des bancs" + "fr": "Carte des bancs", + "nl": "Een kaart met zitbanken" }, "description": { "en": "This map shows all benches that are recorded in OpenStreetMap: Individual benches, and benches belonging to public transport stops or shelters. With an OpenStreetMap account, you can map new benches or edit details of existing benches.", "de": "Diese Karte zeigt alle Sitzbänke, die in OpenStreetMap eingetragen sind: Einzeln stehende Bänke und Bänke, die zu Haltestellen oder Unterständen gehören. Mit einem OpenStreetMap-Account können Sie neue Bänke eintragen oder Detailinformationen existierender Bänke bearbeiten.", - "fr": "Cette carte affiche les bancs mappés dans OpenStreetMap, entre autres : bancs des transports en commun, bancs publics, etc. À l'aide de votre compte OpenStretMap, vous pourrez ajouter de nouveaux bancs ou modifier les bancs existants." + "fr": "Cette carte affiche les bancs mappés dans OpenStreetMap, entre autres : bancs des transports en commun, bancs publics, etc. À l'aide de votre compte OpenStretMap, vous pourrez ajouter de nouveaux bancs ou modifier les bancs existants.", + "nl": "Deze kaart toont alle zitbanken die in OpenStreetMap gekend zijn: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account can je informatie verbeteren en nieuwe zitbanken in toevoegen." }, "language": [ "en", "de", - "fr" + "fr", + "nl" ], "maintainer": "Florian Edelmann", "icon": "./assets/themes/benches/bench_poi.svg", diff --git a/assets/themes/bike_monitoring_station/bike_monitoring_stations.json b/assets/themes/bike_monitoring_station/bike_monitoring_stations.json index b077b9264..50b47321a 100644 --- a/assets/themes/bike_monitoring_station/bike_monitoring_stations.json +++ b/assets/themes/bike_monitoring_station/bike_monitoring_stations.json @@ -1,16 +1,20 @@ { "id": "bike_monitoring_stations", "title": { - "en": "Bike Monitoring stations" + "en": "Bike Monitoring stations", + "nl": "Fietstelstations" }, "shortDescription": { - "en": "Bike monitoring stations with live data from Brussels Mobility" + "en": "Bike monitoring stations with live data from Brussels Mobility", + "nl": "Fietstelstations met live data van Brussels Mobiliteit" }, "description": { - "en": "This theme shows bike monitoring stations with live data" + "en": "This theme shows bike monitoring stations with live data", + "nl": "Dit thema toont fietstelstations met live data" }, "language": [ - "en" + "en", + "nl" ], "hideFromOverview": true, "maintainer": "", diff --git a/assets/themes/campersites/campersites.json b/assets/themes/campersites/campersites.json index f6f9abd4e..9992e721b 100644 --- a/assets/themes/campersites/campersites.json +++ b/assets/themes/campersites/campersites.json @@ -1,7 +1,8 @@ { "id": "campersite", "title": { - "en": "Campersites" + "en": "Campersites", + "nl": "Kampeersite" }, "shortDescription": { "en": "Find sites to spend the night with your camper" @@ -10,7 +11,8 @@ "en": "This site collects all official camper stopover places and places where you can dump grey and black water. You can add details about the services provided and the cost. Add pictures and reviews. This is a website and a webapp. The data is stored in OpenStreetMap, so it will be free forever and can be re-used by any app." }, "language": [ - "en" + "en", + "nl" ], "maintainer": "joost schouppe", "icon": "./assets/themes/campersites/caravan.svg", diff --git a/assets/themes/climbing/climbing.json b/assets/themes/climbing/climbing.json index 34503d4c0..fea59bfdb 100644 --- a/assets/themes/climbing/climbing.json +++ b/assets/themes/climbing/climbing.json @@ -16,9 +16,9 @@ "de": "

kletterspots.de wird betrieben von Christian Neumann. Bitte melden Sie sich, wenn Sie Feedback oder Fragen haben.

Das Projekt nutzt Daten des OpenStreetMap Projekts und basiert auf der freien Software MapComplete.

" }, "language": [ + "nl", "de", - "en", - "nl" + "en" ], "maintainer": "Christian Neumann ", "icon": "./assets/themes/climbing/climbing_icon.svg", diff --git a/assets/themes/fritures/fritures.json b/assets/themes/fritures/fritures.json index 2b6c04560..f282f9c68 100644 --- a/assets/themes/fritures/fritures.json +++ b/assets/themes/fritures/fritures.json @@ -9,7 +9,8 @@ }, "language": [ "nl", - "fr" + "fr", + "en" ], "maintainer": "", "icon": "./assets/themes/fritures/logo.svg", diff --git a/langs/themes/de.json b/langs/themes/de.json index 1d1381e2d..0cf18efa7 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -164,6 +164,9 @@ }, "3": { "render": "Diese Route ist {climbing:length} Meter lang" + }, + "4": { + "render": "Die Schwierigkeit ist {climbing:grade:french} entsprechend des französisch/belgischen Systems" } } }, diff --git a/langs/themes/fr.json b/langs/themes/fr.json index 14273a7f5..f3a55d50d 100644 --- a/langs/themes/fr.json +++ b/langs/themes/fr.json @@ -96,10 +96,12 @@ "description": "Le but de cette carte est de présenter aux cyclistes une solution facile à utiliser pour trouver l'infrastructure appropriée à leurs besoins.

Vous pouvez suivre votre localisation précise (mobile uniquement) et sélectionner les couches qui vous concernent dans le coin inférieur gauche. Vous pouvez également utiliser cet outil pour ajouter ou modifier des épingles (points d'intérêt) sur la carte et fournir plus de données en répondant aux questions.

Toutes les modifications que vous apportez seront automatiquement enregistrées dans la base de données mondiale d'OpenStreetMap et peuvent être librement réutilisées par d'autres.

Pour plus d'informations sur le projet cyclofix, rendez-vous sur cyclofix.osm.be." }, "fritures": { + "title": "Carte des friteries", "layers": { "0": { "name": "Friteries", "title": { + "render": "Friterie", "mappings": { "0": { "then": " {name}" @@ -108,41 +110,56 @@ }, "tagRenderings": { "1": { + "render": "{name}", "question": "Quel est le nom de cette friterie?" }, "2": { + "render": "

Horaires

{opening_hours_table(opening_hours)}", "question": "Quand est ce-que ce friterie ouvert?" }, "3": { "question": "Quel est le site web de cette friterie?" }, "4": { + "render": "{phone}", "question": "Quel est le numéro de téléphone de cette friterie?" }, "5": { + "question": "Cette friterie est-elle équipée de snacks végétariens ?", "mappings": { "0": { "then": "Des collations végétariennes sont disponibles" }, + "1": { + "then": "Quelques snacks végétariens seulement" + }, "2": { "then": "Pas d'en-cas végétariens disponibles" } } }, "6": { + "question": "Cette friterie est-elle équipée de snacks végétaliens ?", "mappings": { "0": { "then": "Des collations végétaliens sont disponibles" }, + "1": { + "then": "Quelques snacks végétaliens seulement" + }, "2": { "then": "Pas d'en-cas végétaliens disponibles" } } }, "7": { + "question": "Cette friteuse fonctionne-t-elle avec de la graisse animale ou végétale ?", "mappings": { "0": { "then": "Huile végétale" + }, + "1": { + "then": "Graisse animale" } } } @@ -249,4 +266,4 @@ "title": "Carte des WC et toilettes publiques", "description": "Carte affichant les WC et toilettes publiques" } -} +} \ No newline at end of file diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 2b669bf8c..4834ded10 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -3,6 +3,10 @@ "title": "Open AED-kaart", "description": "Op deze kaart kan je informatie over AEDs vinden en verbeteren" }, + "aed_brugge": { + "title": "Open AED-kaart - Brugge edition", + "description": "Op deze kaart kan je informatie over AEDs vinden en verbeteren + een export van de brugse defibrillatoren" + }, "artworks": { "title": "Kunstwerkenkaart", "description": "Welkom op de Open Kunstwerken Kaart", @@ -82,63 +86,161 @@ } } }, + "benches": { + "title": "Zitbanken", + "shortDescription": "Een kaart met zitbanken", + "description": "Deze kaart toont alle zitbanken die in OpenStreetMap gekend zijn: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account can je informatie verbeteren en nieuwe zitbanken in toevoegen." + }, "bicyclelib": { "title": "Fietsbibliotheken", "description": "Een fietsbibliotheek is een plaats waar men een fiets kan lenen, vaak voor een klein bedrag per jaar. Een typisch voorbeeld zijn kinderfietsbibliotheken, waar men een fiets op maat van het kind kan lenen. Is het kind de fiets ontgroeid, dan kan het te kleine fietsje omgeruild worden voor een grotere." }, + "bike_monitoring_stations": { + "title": "Fietstelstations", + "shortDescription": "Fietstelstations met live data van Brussels Mobiliteit", + "description": "Dit thema toont fietstelstations met live data" + }, "bookcases": { "title": "Open Boekenruilkastenkaart", "description": "Een boekenruilkast is een kastje waar iedereen een boek kan nemen of achterlaten. Op deze kaart kan je deze boekenruilkasten terugvinden en met een gratis OpenStreetMap-account, ook boekenruilkasten toevoegen of informatie verbeteren" }, "buurtnatuur": { + "title": "Breng jouw buurtnatuur in kaart", + "shortDescription": "Met deze tool kan je natuur in je buurt in kaart brengen en meer informatie geven over je favoriete plekje", + "description": "logo-groenmeld je aan voor e-mailupdates.", "descriptionTail": "

Tips

De oorspronkelijke data komt van OpenStreetMap en je antwoorden worden daar bewaard.
Omdat iedereen vrij kan meewerken aan dit project, kunnen we niet garanderen dat er geen fouten opduiken.Kan je hier niet aanpassen wat je wilt, dan kan je dat zelf via OpenStreetMap.org doen. Groen kan geen enkele verantwoordelijkheid nemen over de kaart.

Je privacy is belangrijk. We tellen wel hoeveel gebruikers deze website bezoeken. We plaatsen een cookie waar geen persoonlijke informatie in bewaard wordt. Als je inlogt, komt er een tweede cookie bij met je inloggegevens.
", "layers": { "0": { + "name": "Natuurgebied", "title": { + "render": "Natuurgebied", "mappings": { + "0": { + "then": "{name:nl}" + }, "1": { "then": "{name}" } } + }, + "description": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid.", + "presets": { + "0": { + "title": "Natuurreservaat", + "description": "Voeg een ontbrekend, erkend natuurreservaat toe, bv. een gebied dat beheerd wordt door het ANB of natuurpunt" + } } }, "1": { "name": "Park", - "description": "Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ..." - }, - "2": { "title": { - "render": "Bos" + "render": "Park", + "mappings": { + "0": { + "then": "{name:nl}" + }, + "1": { + "then": "{name}" + } + } }, + "description": "Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ...", "presets": { "0": { - "title": "Bos" + "title": "Park", + "description": "Voeg een ontbrekend park toe" + } + } + }, + "2": { + "name": "Bos", + "title": { + "render": "Bos", + "mappings": { + "0": { + "then": "{name:nl}" + }, + "1": { + "then": "{name}" + } + } + }, + "description": "Een bos is een verzameling bomen, al dan niet als productiehout.", + "presets": { + "0": { + "title": "Bos", + "description": "Voeg een ontbrekend bos toe aan de kaart" } } } }, "roamingRenderings": { "0": { + "render": "De toegankelijkheid van dit gebied is: {access:description}", + "question": "Is dit gebied toegankelijk?", "mappings": { "0": { "then": "Dit gebied is vrij toegankelijk" }, + "1": { + "then": "Vrij toegankelijk" + }, + "2": { + "then": "Niet toegankelijk" + }, + "3": { + "then": "Niet toegankelijk, want privégebied" + }, "4": { "then": "Toegankelijk, ondanks dat het privegebied is" + }, + "5": { + "then": "Enkel toegankelijk met een gids of tijdens een activiteit" + }, + "6": { + "then": "Toegankelijk mits betaling" } } }, "1": { - "question": "Wie beheert dit gebied?" + "render": "Beheer door {operator}", + "question": "Wie beheert dit gebied?", + "mappings": { + "1": { + "then": "Dit gebied wordt beheerd door Natuurpunt" + }, + "2": { + "then": "Dit gebied wordt beheerd door {operator}" + }, + "3": { + "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos" + } + } }, "2": { "render": "Extra info: {description}" }, + "3": { + "render": "Extra info via buurtnatuur.be: {description:0}" + }, + "4": { + "render": "Dit gebied heet {name:nl}", + "question": "Wat is de Nederlandstalige naam van dit gebied?" + }, "5": { - "render": "Dit gebied heet {name}" + "render": "Dit gebied heet {name}", + "question": "Wat is de naam van dit gebied?", + "mappings": { + "0": { + "then": "Dit gebied heeft geen naam" + } + } } } }, + "campersite": { + "title": "Kampeersite" + }, "climbing": { "title": "Open Klimkaart", "description": "Op deze kaart vind je verschillende klimgelegenheden, zoals klimzalen, bolderzalen en klimmen in de natuur", @@ -338,28 +440,55 @@ } }, "fietsstraten": { + "title": "Fietsstraten", + "shortDescription": "Een kaart met alle gekende fietsstraten", + "description": "Een fietsstraat is een straat waar

Op deze open kaart kan je alle gekende fietsstraten zien en kan je ontbrekende fietsstraten aanduiden. Om de kaart aan te passen, moet je je aanmelden met OpenStreetMap en helemaal inzoomen tot straatniveau.", "roamingRenderings": { "0": { "question": "Is deze straat een fietsstraat?", "mappings": { + "0": { + "then": "Deze straat is een fietsstraat (en dus zone 30)" + }, + "1": { + "then": "Deze straat is een fietsstraat" + }, + "2": { + "then": "Deze straat wordt binnenkort een fietsstraat" + }, "3": { "then": "Deze straat is geen fietsstraat" } } + }, + "1": { + "question": "Wanneer wordt deze straat een fietsstraat?", + "render": "Deze straat wordt fietsstraat op {cyclestreet:start_date}" } }, "layers": { "0": { + "name": "Fietsstraten", "description": "Een fietsstraat is een straat waar gemotoriseerd verkeer een fietser niet mag inhalen." }, "1": { + "name": "Toekomstige fietsstraat", + "description": "Deze straat wordt binnenkort een fietsstraat", "title": { + "render": "Toekomstige fietsstraat", "mappings": { "0": { "then": "{name} wordt fietsstraat" } } } + }, + "2": { + "name": "Alle straten", + "description": "Laag waar je een straat als fietsstraat kan markeren", + "title": { + "render": "Straat" + } } } }, @@ -459,35 +588,74 @@ } }, "fritures": { + "title": "Friturenkaart", + "description": "Op deze kaart vind je je favoriete frituur!", "layers": { "0": { + "name": "Frituren", "title": { - "render": "Frituur" + "render": "Frituur", + "mappings": { + "0": { + "then": " {name}" + } + } }, "tagRenderings": { "1": { + "render": "{name}", "question": "Wat is de naam van deze frituur?" }, + "2": { + "render": "

Openingsuren

{opening_hours_table(opening_hours)}", + "question": "Wat zijn de openinguren van deze frituur?" + }, "3": { "question": "Wat is de website van deze frituur?" }, "4": { + "render": "{phone}", "question": "Wat is het telefoonnummer van deze frituur?" }, "5": { + "question": "Heeft deze frituur vegetarische snacks?", "mappings": { + "0": { + "then": "Er zijn vegetarische snacks aanwezig" + }, + "1": { + "then": "Slechts enkele vegetarische snacks" + }, "2": { "then": "Geen vegetarische snacks beschikbaar" } } }, "6": { + "question": "Heeft deze frituur veganistische snacks?", "mappings": { + "0": { + "then": "Er zijn veganistische snacks aanwezig" + }, + "1": { + "then": "Slechts enkele veganistische snacks" + }, "2": { "then": "Geen veganistische snacks beschikbaar" } } }, + "7": { + "question": "Bakt deze frituur in dierlijk vetof plantaardig olie?", + "mappings": { + "0": { + "then": "Plantaardige olie" + }, + "1": { + "then": "Dierlijk vet" + } + } + }, "8": { "question": "Als je je eigen container (bv. kookpot of kleine potjes voor saus) meeneemt, gebruikt de frituur deze dan om je bestelling in te doen?", "mappings": { @@ -502,32 +670,60 @@ } } } + }, + "presets": { + "0": { + "title": "Frituur" + } } } } }, "boomgaarden": { + "title": "Open Boomgaardenkaart", + "shortDescription": "Boomgaarden en fruitbomen", "description": "Op deze kaart vindt je boomgaarden en fruitbomen", "layers": { "0": { + "name": "Boomgaarden", + "title": { + "render": "Boomgaard" + }, "presets": { "0": { + "title": "Boomgaard", "description": "Voeg een boomgaard toe (als punt - omtrek nog te tekenen)" } } }, "1": { + "name": "Boom", + "title": { + "render": "Boom" + }, + "description": "Een boom", "tagRenderings": { "0": { - "render": "De soort is {species:nl}" + "render": "De soort is {species:nl}", + "question": "Wat is de soort van deze boom (in het Nederlands)?" + }, + "1": { + "render": "Het ras (taxon) van deze boom is {taxon}", + "question": "Wat is het taxon (ras) van deze boom?" }, "2": { - "render": "Beschrijving: {description}" + "render": "Beschrijving: {description}", + "question": "Welke beschrijving past bij deze boom?" + }, + "3": { + "render": "Referentienummer: {ref}", + "question": "Is er een refernetienummer?" } }, "presets": { "0": { - "title": "Boom" + "title": "Boom", + "description": "Voeg hier een boom toe" } } } @@ -538,22 +734,50 @@ "description": "Een Witte Fiets of Spookfiets is een aandenken aan een fietser die bij een verkeersongeval om het leven kwam. Het gaat om een fiets die volledig wit is geschilderd en in de buurt van het ongeval werd geinstalleerd.

Op deze kaart zie je alle witte fietsen die door OpenStreetMap gekend zijn. Ontbreekt er een Witte Fiets of wens je informatie aan te passen? Meld je dan aan met een (gratis) OpenStreetMap account." }, "grb": { + "title": "GRB Fixup", + "shortDescription": "Grb Fixup", + "description": "GRB Fixup", "layers": { "0": { "name": "Fixmes op gebouwen", + "title": { + "render": "{addr:street} {addr:housenumber}", + "mappings": { + "0": { + "then": "{fixme}" + } + } + }, + "description": "Dit gebouw heeft een foutmelding", "tagRenderings": { "0": { - "render": "Het huisnummer is {addr:housenumber}" + "render": "Het huisnummer is {addr:housenumber}", + "question": "Wat is het huisnummer?", + "mappings": { + "0": { + "then": "Geen huisnummer" + } + } + }, + "1": { + "render": "De wooneenheid-aanduiding is {addr:unit} " }, "2": { - "render": "De straat is {addr:street}" + "render": "De straat is {addr:street}", + "question": "Wat is de straat?" }, "3": { + "render": "De fixme is {fixme}", + "question": "Wat zegt de fixme?", "mappings": { "0": { "then": "Geen fixme" } } + }, + "4": { + "render": "Dit gebouw begint maar op de {building:min_level} verdieping", + "question": "Hoeveel verdiepingen ontbreken?" } } } @@ -564,48 +788,102 @@ "shortDescription": "Een kaart met alle kaarten die OpenStreetMap kent", "description": "Op deze kaart kan je alle kaarten zien die OpenStreetMap kent.

Ontbreekt er een kaart, dan kan je die kaart hier ook gemakelijk aan deze kaart toevoegen." }, + "nature": { + "title": "De Natuur in", + "shortDescription": "Deze kaart bevat informatie voor natuurliefhebbers", + "description": "Op deze kaart vind je informatie voor natuurliefhebbers, zoals info over het natuurgebied waar je inzit, vogelkijkhutten, informatieborden, ..." + }, "personal": { "title": "Persoonlijk thema", "description": "Stel je eigen thema samen door lagen te combineren van alle andere themas" }, + "play_forests": { + "title": "Speelbossen", + "shortDescription": "Deze kaart toont speelbossen", + "description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord." + }, "playgrounds": { "title": "Speelplekken", "shortDescription": "Een kaart met speeltuinen", "description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen" }, "speelplekken": { + "title": "Speelplekken in de Antwerpse Zuidrand", + "shortDescription": "Speelplekken in de Antwerpse Zuidrand", + "description": "Speelplekken in de Antwerpse Zuidrand. Een project van Provincie Antwerpen, in samenwerking met Createlli, Sportpret en OpenStreetMap België", "layers": { "7": { "name": "Wandelroutes van provincie Antwerpen", "tagRenderings": { + "0": { + "render": "Deze wandeling is {_length:km}km lang" + }, "1": { "mappings": { + "0": { + "then": "Dit is een internationale wandelroute" + }, + "1": { + "then": "Dit is een nationale wandelroute" + }, "2": { "then": "Dit is een regionale wandelroute" + }, + "3": { + "then": "Dit is een lokale wandelroute" } } }, + "2": { + "render": "

Korte beschrijving:

{description}" + }, + "3": { + "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?" + }, "4": { - "question": "Naar wie kan men emailen bij problemen rond signalisatie?" + "question": "Naar wie kan men emailen bij problemen rond signalisatie?", + "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}" } } } } }, "speelplekken_temp": { + "title": "Speelplekken in de Antwerpse Zuidrand", + "shortDescription": "Speelplekken in de Antwerpse Zuidrand", "description": "Speelplekken in de Antwerpse Zuidrand. Een project van Provincie Antwerpen, in samenwerking met Createlli, Sportpret en OpenStreetMap België", "layers": { "6": { + "name": "Wandelroutes van provincie Antwerpen", "tagRenderings": { + "0": { + "render": "Deze wandeling is {_length:km}km lang" + }, "1": { "mappings": { + "0": { + "then": "Dit is een internationale wandelroute" + }, "1": { "then": "Dit is een nationale wandelroute" + }, + "2": { + "then": "Dit is een regionale wandelroute" + }, + "3": { + "then": "Dit is een lokale wandelroute" } } }, + "2": { + "render": "

Korte beschrijving:

{description}" + }, "3": { "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?" + }, + "4": { + "question": "Naar wie kan men emailen bij problemen rond signalisatie?", + "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}" } } } @@ -627,23 +905,21 @@ "description": "Breng bomen in kaart!" }, "width": { + "title": "Straatbreedtes", + "shortDescription": "Is de straat breed genoeg?", + "description": "

De straat is opgebruikt

\n

Er is steeds meer druk op de openbare ruimte. Voetgangers, fietsers, steps, auto's, bussen, bestelwagens, buggies, cargobikes, ... willen allemaal hun deel van de openbare ruimte.

\n

In deze studie nemen we Brugge onder de loep en kijken we hoe breed elke straat is én hoe breed elke straat zou moeten zijn voor een veilig én vlot verkeer.

\n

Legende

\n     Straat te smal voor veilig verkeer
\n     Straat is breed genoeg veilig verkeer
\n     Straat zonder voetpad, te smal als ook voetgangers plaats krijgen
\n     Woonerf, autoluw, autoloos of enkel plaatselijk verkeer
\n
\n
\n Een gestippelde lijn is een straat waar ook voor fietsers éénrichtingsverkeer geldt.
\n Klik op een straat om meer informatie te zien.\n

Hoe gaan we verder?

\n Verschillende ingrepen kunnen de stad teruggeven aan de inwoners en de stad leefbaarder en levendiger maken.
\n Denk aan:\n ", "layers": { "0": { - "name": "Straten met een breedte" + "name": "Straten met een breedte", + "title": { + "render": "{name}", + "mappings": { + "0": { + "then": "Naamloos segmet" + } + } + } } } - }, - "campersite": { - "title": "Campeerplaatsen" - }, - "bike_monitoring_stations": { - "description": "Dit thema toont fietstelstations met live data", - "shortDescription": "Fietstelstations met live data van Brussels Mobiliteit", - "title": "Fietstelstations" - }, - "benches": { - "description": "Deze kaart toont alle zitbanken die in OpenStreetMap gekend zijn: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account can je informatie verbeteren en nieuwe zitbanken in toevoegen.", - "shortDescription": "Een kaart met zitbanken", - "title": "Zitbanken" } -} +} \ No newline at end of file diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts index 9cd8a0470..fde7c82f8 100644 --- a/scripts/generateTranslations.ts +++ b/scripts/generateTranslations.ts @@ -40,6 +40,7 @@ class TranslationPart { this.contents.set(translationsKey, v) } } + recursiveAdd(object: any) { @@ -78,6 +79,9 @@ class TranslationPart { const value = this.contents.get(key); if (typeof value === "string") { + if (key === "#") { + continue; + } languages.push(key) } else { languages.push(...(value as TranslationPart).knownLanguages()) @@ -193,12 +197,10 @@ function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: s const langs = tr.knownLanguages(); for (const lang of langs) { - if(lang === "#"){ + if (lang === "#") { // Lets not export our comments continue; } - console.log("Exporting ", lang) - let json = tr.toJson(lang) try { json = JSON.stringify(JSON.parse(json), null, " "); @@ -229,7 +231,11 @@ function MergeTranslation(source: any, target: any, language: string, context: s } targetV[language] = sourceV; - console.log(" + ", context + "." + language, "-->", sourceV) + let was = "" + if(targetV[language] !== undefined){ + was = " (overwritten "+targetV[language]+")" + } + console.log(" + ", context + "." + language, "-->", sourceV, was) continue } if (typeof sourceV === "object") { @@ -246,22 +252,17 @@ function MergeTranslation(source: any, target: any, language: string, context: s return target; } -function mergeLayerTranslation(layerConfig: LayerConfigJson, path: string, translationFiles: Map) { +function mergeLayerTranslation(layerConfig: { id: string }, path: string, translationFiles: Map) { 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") +function loadTranslationFilesFrom(target: string): Map { + const translationFilePaths = ScriptUtils.readDirRecSync("./langs/" + target) .filter(path => path.endsWith(".json")) const translationFiles = new Map(); @@ -270,14 +271,43 @@ function mergeLayerTranslations() { language = language.substr(0, language.length - 5) translationFiles.set(language, JSON.parse(readFileSync(translationFilePath, "utf8"))) } + return translationFiles; +} + +/** + * Load the translations back into the layers + */ +function mergeLayerTranslations() { const layerFiles = ScriptUtils.getLayerFiles(); for (const layerFile of layerFiles) { - mergeLayerTranslation(layerFile.parsed, layerFile.path, translationFiles) + mergeLayerTranslation(layerFile.parsed, layerFile.path, loadTranslationFilesFrom("layers")) + writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, " ")) } } +function mergeThemeTranslations() { + const themeFiles = ScriptUtils.getThemeFiles(); + for (const themeFile of themeFiles) { + const config = themeFile.parsed; + mergeLayerTranslation(config, themeFile.path, loadTranslationFilesFrom("themes")) + + const oldLanguages = config.language; + const allTranslations = new TranslationPart(); + allTranslations.recursiveAdd(config) + const newLanguages = allTranslations.knownLanguages() + const languageDiff = newLanguages.filter(l => oldLanguages.indexOf(l) < 0).join(", ") + if (languageDiff !== "") { + config.language = newLanguages; + console.log(" :hooray: Got a new language for theme", config.id, ":", languageDiff) + } + writeFileSync(themeFile.path, JSON.stringify(config, null, " ")) + } +} + + mergeLayerTranslations(); +mergeThemeTranslations(); generateTranslationsObjectFrom(ScriptUtils.getLayerFiles(), "layers") generateTranslationsObjectFrom(ScriptUtils.getThemeFiles(), "themes")