Sync translations

This commit is contained in:
pietervdvn 2021-05-20 00:10:38 +02:00
parent 8065c18fe1
commit cd1c7c3e5e
9 changed files with 394 additions and 57 deletions

View file

@ -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",

View file

@ -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": "",

View file

@ -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",

View file

@ -16,9 +16,9 @@
"de": "<p><strong>kletterspots.de</strong> wird betrieben von <a href='https://utopicode.de/?ref=kletterspots' target='_blank'>Christian Neumann</a>. Bitte <a href='https://utopicode.de/kontakt/?project=kletterspots&ref=kletterspots' target='blank'>melden Sie sich</a>, wenn Sie Feedback oder Fragen haben.</p><p>Das Projekt nutzt Daten des <a href='https://www.openstreetmap.org/' target='_blank'>OpenStreetMap</a> Projekts und basiert auf der freien Software <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>MapComplete</a>.</p>"
},
"language": [
"nl",
"de",
"en",
"nl"
"en"
],
"maintainer": "Christian Neumann <christian@utopicode.de>",
"icon": "./assets/themes/climbing/climbing_icon.svg",

View file

@ -9,7 +9,8 @@
},
"language": [
"nl",
"fr"
"fr",
"en"
],
"maintainer": "",
"icon": "./assets/themes/fritures/logo.svg",

View file

@ -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"
}
}
},

View file

@ -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.<br><br>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.<br><br>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.<br><br>Pour plus d'informations sur le projet cyclofix, rendez-vous sur <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>."
},
"fritures": {
"title": "Carte des friteries",
"layers": {
"0": {
"name": "Friteries",
"title": {
"render": "Friterie",
"mappings": {
"0": {
"then": " <i>{name}</i>"
@ -108,41 +110,56 @@
},
"tagRenderings": {
"1": {
"render": "{name}",
"question": "Quel est le nom de cette friterie?"
},
"2": {
"render": "<h3>Horaires</h3>{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": "<a href='tel:{phone}'>{phone}</a>",
"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"
}
}
}

View file

@ -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,62 +86,160 @@
}
}
},
"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": "<img style='float:right;margin: 1em;width: 10em;height: auto;' src='./assets/themes/buurtnatuur/groen_logo.svg' alt='logo-groen' class='logo/> <br /><b>Natuur maakt gelukkig.</b> Aan de hand van deze website willen we de natuur dicht bij ons beter inventariseren. Met als doel meer mensen te laten genieten van toegankelijke natuur én te strijden voor meer natuur in onze buurten.<ul><li>In welke natuurgebieden kan jij terecht? Hoe toegankelijk zijn ze?</li><li>In welke bossen kan een gezin in jouw gemeente opnieuw op adem komen?</li><li>Op welke onbekende plekjes is het zalig spelen?</li></ul><p>Samen kleuren we heel Vlaanderen en Brussel groen.Blijf op de hoogte van de resultaten van buurtnatuur.be: <a href='https://www.groen.be/buurtnatuur' target='_blank'>meld je aan voor e-mailupdates</a>.",
"descriptionTail": "<h4>Tips</h4><ul><li>Over groen ingekleurde gebieden weten we alles wat we willen weten.</li><li>Bij rood ingekleurde gebieden ontbreekt nog heel wat info: klik een gebied aan en beantwoord de vragen.</li><li>Je kan altijd een vraag overslaan als je het antwoord niet weet of niet zeker bent</li><li>Je kan altijd een foto toevoegen</li><li>Je kan ook zelf een gebied toevoegen door op de kaart te klikken</li><li>Open buurtnatuur.be <b>op je smartphone</b> om al wandelend foto's te maken en vragen te beantwoorden</li></ul><small><p>De oorspronkelijke data komt van <b>OpenStreetMap</b> en je antwoorden worden daar bewaard.<br/> 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 <b>geen enkele verantwoordelijkheid</b> nemen over de kaart.</p>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.</small>",
"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": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
},
"2": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
},
"3": {
"then": "<img src=\"./assets/themes/buurtnatuur/ANB.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
}
}
},
"2": {
"render": "Extra info: <i>{description}</i>"
},
"3": {
"render": "Extra info via buurtnatuur.be: <i>{description:0}</i>"
},
"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",
@ -338,28 +440,55 @@
}
},
"fietsstraten": {
"title": "Fietsstraten",
"shortDescription": "Een kaart met alle gekende fietsstraten",
"description": "Een fietsstraat is een straat waar <ul><li><b>automobilisten geen fietsers mogen inhalen</b></li><li>Er een maximumsnelheid van <b>30km/u</b> geldt</li><li>Fietsers gemotoriseerde voortuigen links mogen inhalen</li><li>Fietsers nog steeds voorrang aan rechts moeten verlenen - ook aan auto's en voetgangers op het zebrapad</li></ul><br/><br/>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": " <i>{name}</i>"
}
}
},
"tagRenderings": {
"1": {
"render": "{name}",
"question": "Wat is de naam van deze frituur?"
},
"2": {
"render": "<h3>Openingsuren</h3>{opening_hours_table(opening_hours)}",
"question": "Wat zijn de openinguren van deze frituur?"
},
"3": {
"question": "Wat is de website van deze frituur?"
},
"4": {
"render": "<a href='tel:{phone}'>{phone}</a>",
"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 <b>{taxon}</b>",
"question": "Wat is het taxon (ras) van deze boom?"
},
"2": {
"render": "Beschrijving: <i>{description}</i>"
"render": "Beschrijving: <i>{description}</i>",
"question": "Welke beschrijving past bij deze boom?"
},
"3": {
"render": "Referentienummer: <b>{ref}</b>",
"question": "Is er een refernetienummer?"
}
},
"presets": {
"0": {
"title": "Boom"
"title": "Boom",
"description": "Voeg hier een boom toe"
}
}
}
@ -538,22 +734,50 @@
"description": "Een <b>Witte Fiets</b> of <b>Spookfiets</b> 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.<br/><br/>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 <b>{addr:housenumber}</b>"
"render": "Het huisnummer is <b>{addr:housenumber}</b>",
"question": "Wat is het huisnummer?",
"mappings": {
"0": {
"then": "Geen huisnummer"
}
}
},
"1": {
"render": "De wooneenheid-aanduiding is <b>{addr:unit}</b> "
},
"2": {
"render": "De straat is <b>{addr:street}</b>"
"render": "De straat is <b>{addr:street}</b>",
"question": "Wat is de straat?"
},
"3": {
"render": "De fixme is <b>{fixme}</b>",
"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.<br/><br/>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 <b>{_length:km}km</b> 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": "<h3>Korte beschrijving:</h3>{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 <a href='mailto:{operator:email}'>{operator:email}</a>"
}
}
}
}
},
"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 <b>{_length:km}km</b> 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": "<h3>Korte beschrijving:</h3>{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 <a href='mailto:{operator:email}'>{operator:email}</a>"
}
}
}
@ -627,23 +905,21 @@
"description": "Breng bomen in kaart!"
},
"width": {
"title": "Straatbreedtes",
"shortDescription": "Is de straat breed genoeg?",
"description": " <h3>De straat is opgebruikt</h3>\n <p>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.</p>\n <p>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.</p>\n <h3>Legende</h3>\n <span style='background: red'>&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;</span> Straat te smal voor veilig verkeer<br/>\n <span style='background: #0f0'>&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;</span> Straat is breed genoeg veilig verkeer<br/>\n <span style='background: orange'>&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;</span> Straat zonder voetpad, te smal als ook voetgangers plaats krijgen<br/>\n <span style='background: lightgrey'>&NonBreakingSpace;&NonBreakingSpace;&NonBreakingSpace;</span> Woonerf, autoluw, autoloos of enkel plaatselijk verkeer<br/>\n <br/>\n <br/>\n Een gestippelde lijn is een straat waar ook voor fietsers éénrichtingsverkeer geldt.<br/>\n Klik op een straat om meer informatie te zien.\n <h3>Hoe gaan we verder?</h3>\n Verschillende ingrepen kunnen de stad teruggeven aan de inwoners en de stad leefbaarder en levendiger maken.<br/>\n Denk aan:\n <ul>\n <li>De autovrije zone's uitbreiden</li>\n <li>De binnenstad fietszone maken</li>\n <li>Het aantal woonerven uitbreiden</li>\n <li>Grotere auto's meer belasten - ze nemen immers meer parkeerruimte in.</li>\n <li>Laat toeristen verplicht parkeren onder het zand; een (fiets)taxi kan hen naar hun hotel brengen</li>\n <li>Voorzie in elke straat enkele parkeerplaatsen voor kortparkeren. Zo kunnen leveringen, iemand afzetten,... gebeuren zonder op het voetpad en fietspad te parkeren</li>\n </ul>",
"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"
}
}

View file

@ -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())
@ -197,8 +201,6 @@ function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: s
// 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<string, any>) {
function mergeLayerTranslation(layerConfig: { id: string }, 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")
function loadTranslationFilesFrom(target: string): Map<string, any> {
const translationFilePaths = ScriptUtils.readDirRecSync("./langs/" + target)
.filter(path => path.endsWith(".json"))
const translationFiles = new Map<string, any>();
@ -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")