Chore: formatting

This commit is contained in:
Pieter Vander Vennet 2023-09-01 16:06:22 +02:00
parent 1e8ce3cc2d
commit a129b5c3bf
32 changed files with 930 additions and 614 deletions

View file

@ -195,7 +195,7 @@ The question is *What kind of message is shown?*
- Unselecting this answer will add - Unselecting this answer will add
- *Message from non-profit organizations* corresponds with `message=non_profit` - *Message from non-profit organizations* corresponds with `message=non_profit`
- Unselecting this answer will add - Unselecting this answer will add
- *To expres your opinion* corresponds with `message=opinion` - *To express your opinion* corresponds with `message=opinion`
- Unselecting this answer will add - Unselecting this answer will add
- *Religious message* corresponds with `message=religion` - *Religious message* corresponds with `message=religion`
- Unselecting this answer will add - Unselecting this answer will add

View file

@ -572,6 +572,16 @@ This tagrendering has no question and is thus read-only
### delete-button
This tagrendering has no question and is thus read-only
### last_edit ### last_edit

View file

@ -189,7 +189,7 @@
}, },
{ {
"key": "message", "key": "message",
"description": "Layer 'Advertise' shows message=opinion with a fixed text, namely 'To expres your opinion' and allows to pick this as a default answer (in the mapcomplete.org theme 'Advertising')", "description": "Layer 'Advertise' shows message=opinion with a fixed text, namely 'To express your opinion' and allows to pick this as a default answer (in the mapcomplete.org theme 'Advertising')",
"value": "opinion" "value": "opinion"
}, },
{ {

View file

@ -189,7 +189,7 @@
}, },
{ {
"key": "message", "key": "message",
"description": "Layer 'Advertise' shows message=opinion with a fixed text, namely 'To expres your opinion' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", "description": "Layer 'Advertise' shows message=opinion with a fixed text, namely 'To express your opinion' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')",
"value": "opinion" "value": "opinion"
}, },
{ {

View file

@ -27,6 +27,7 @@ Available languages:
- en - en
- de - de
- es
This document is autogenerated from [assets/themes/elongated_coin/elongated_coin.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/elongated_coin/elongated_coin.json) This document is autogenerated from [assets/themes/elongated_coin/elongated_coin.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/elongated_coin/elongated_coin.json)

View file

@ -28,6 +28,7 @@ Available languages:
- en - en
- nl - nl
- de - de
- fr
This document is autogenerated from [assets/themes/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/vending_machine/vending_machine.json) This document is autogenerated from [assets/themes/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/vending_machine/vending_machine.json)

View file

@ -247,7 +247,7 @@
{{service_item {{service_item
|name= [https://mapcomplete.org/elongated_coin elongated_coin] |name= [https://mapcomplete.org/elongated_coin elongated_coin]
|region= Worldwide |region= Worldwide
|lang= {{#language:en|en}}, {{#language:de|en}} |lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:es|en}}
|descr= A MapComplete theme: Find penny presses to create your own elongated coins |descr= A MapComplete theme: Find penny presses to create your own elongated coins
|material= {{yes|[https://mapcomplete.org/ Yes]}} |material= {{yes|[https://mapcomplete.org/ Yes]}}
|image= MapComplete_Screenshot.png |image= MapComplete_Screenshot.png
@ -499,7 +499,7 @@
{{service_item {{service_item
|name= [https://mapcomplete.org/vending_machine vending_machine] |name= [https://mapcomplete.org/vending_machine vending_machine]
|region= Worldwide |region= Worldwide
|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}} |lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:fr|en}}
|descr= A MapComplete theme: Find vending machines for everything |descr= A MapComplete theme: Find vending machines for everything
|material= {{yes|[https://mapcomplete.org/ Yes]}} |material= {{yes|[https://mapcomplete.org/ Yes]}}
|image= MapComplete_Screenshot.png |image= MapComplete_Screenshot.png

View file

@ -643,7 +643,8 @@
"fr": "Message commercial", "fr": "Message commercial",
"pt": "Mensagem comercial", "pt": "Mensagem comercial",
"pt_BR": "Mensagem comercial", "pt_BR": "Mensagem comercial",
"he": "מסר מסחרי" "he": "מסר מסחרי",
"nl": "Commerciële boodschap"
} }
}, },
{ {
@ -657,7 +658,8 @@
"cs": "Místní informace", "cs": "Místní informace",
"fr": "Informations locales", "fr": "Informations locales",
"pt": "Informação local", "pt": "Informação local",
"he": "מידע מקומי" "he": "מידע מקומי",
"nl": "Lokale informatie"
} }
}, },
{ {
@ -701,7 +703,7 @@
"es": "Información sobre teatros, conciertos, …", "es": "Información sobre teatros, conciertos, …",
"en": "Information related to theatre, concerts, …", "en": "Information related to theatre, concerts, …",
"de": "Informationen über Theater, Konzerte, …", "de": "Informationen über Theater, Konzerte, …",
"cs": "Informace týkající se divadla, koncertů, ...", "cs": "Informace týkající se divadla, koncertů, ",
"fr": "Informations liées au théâtre, à des concerts, …", "fr": "Informations liées au théâtre, à des concerts, …",
"nl": "Informatie over cultuurevenementen zoals theaters, optredens, …", "nl": "Informatie over cultuurevenementen zoals theaters, optredens, …",
"pt": "Informações relacionadas com teatro, concertos, ...", "pt": "Informações relacionadas com teatro, concertos, ...",
@ -1312,7 +1314,8 @@
"de": "eine Wandmalerei", "de": "eine Wandmalerei",
"cs": "nástěnná malba", "cs": "nástěnná malba",
"fr": "une peinture murale", "fr": "une peinture murale",
"pt": "uma pintura de parede" "pt": "uma pintura de parede",
"nl": "een muurschildering"
}, },
"exampleImages": [ "exampleImages": [
"./assets/themes/advertising/Capitol_wall.jpg", "./assets/themes/advertising/Capitol_wall.jpg",

View file

@ -867,7 +867,7 @@
"de": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, …", "de": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, …",
"fr": "Par exemple, sur une plaque accrochée, sur le dossier, ...", "fr": "Par exemple, sur une plaque accrochée, sur le dossier, ...",
"ca": "P. ex. en una placa, al respatller, ...", "ca": "P. ex. en una placa, al respatller, ...",
"cs": "Např. na připevněné desce, v opěradle, ...", "cs": "Např. na připevněné desce, v opěradle, ",
"pt": "Por exemplo: em placa montada, no encosto, ..." "pt": "Por exemplo: em placa montada, no encosto, ..."
} }
}, },

View file

@ -166,7 +166,7 @@
"es": "Este es un punto de entrega, ej. un aparcamiento reservado para colocar las bicicletas, claramente marcado como solo para el servicio de alquiler", "es": "Este es un punto de entrega, ej. un aparcamiento reservado para colocar las bicicletas, claramente marcado como solo para el servicio de alquiler",
"fr": "C'est un point de dépôt, p.ex. un emplacement de parking réservé aux vélos de location", "fr": "C'est un point de dépôt, p.ex. un emplacement de parking réservé aux vélos de location",
"da": "Dette er et afleveringssted, f.eks. en reserveret parkeringsplads til cykler, som er tydeligt markeret som værende forbeholdt udlejningstjenesten", "da": "Dette er et afleveringssted, f.eks. en reserveret parkeringsplads til cykler, som er tydeligt markeret som værende forbeholdt udlejningstjenesten",
"cs": "Jedná se o místo předání, např. vyhrazené parkoviště pro umístění jízdních kol, které je zřetelně označeno jako místo určené pouze pro půjčovnu", "cs": "Jedná se o místo předání, např. vyhrazené parkoviště pro umístění jízdních kol, zřetelně označené jako místo určené pouze pro půjčovnu",
"ca": "Aquest és un punt de baixada, p. ex. un aparcament reservat per col·locar les bicicletes marcades clarament com a només per al servei de lloguer" "ca": "Aquest és un punt de baixada, p. ex. un aparcament reservat per col·locar les bicicletes marcades clarament com a només per al servei de lloguer"
} }
} }

View file

@ -309,7 +309,8 @@
"pt_BR": "Quando este café de bicicleta abre?", "pt_BR": "Quando este café de bicicleta abre?",
"de": "Wann ist dieses Fahrradcafé geöffnet?", "de": "Wann ist dieses Fahrradcafé geöffnet?",
"pt": "Quando este café de bicicleta abre?", "pt": "Quando este café de bicicleta abre?",
"da": "Hvornår er denne cykelcafé åbent?" "da": "Hvornår er denne cykelcafé åbent?",
"cs": "Kdy byla tato cyklistická kavárna otevřena?"
} }
} }
} }

View file

@ -217,7 +217,7 @@
"es": "Este servicio de limpieza es de pago", "es": "Este servicio de limpieza es de pago",
"ca": "Aquest servei de neteja és de pagament", "ca": "Aquest servei de neteja és de pagament",
"de": "Dieser Reinigungsservice ist kostenpflichtig", "de": "Dieser Reinigungsservice ist kostenpflichtig",
"cs": "Tato úklidová služba je placená" "cs": "Využití úklidové služby je zpoplatněno"
} }
} }
], ],

View file

@ -54,7 +54,8 @@
"pt": "Reparo/loja de bicicletas", "pt": "Reparo/loja de bicicletas",
"ca": "Botiga/reparació de bicicletes", "ca": "Botiga/reparació de bicicletes",
"da": "Cykelværksted/butik", "da": "Cykelværksted/butik",
"es": "Taller/tienda de bicis" "es": "Taller/tienda de bicis",
"cs": "Oprava kol/obchod"
}, },
"mappings": [ "mappings": [
{ {
@ -165,7 +166,8 @@
"pt": "Loja de bicicletas <i>{name}</i>", "pt": "Loja de bicicletas <i>{name}</i>",
"es": "Tienda de bicis <i>{name}</i>", "es": "Tienda de bicis <i>{name}</i>",
"da": "Cykelforretning <i>{name}</i>", "da": "Cykelforretning <i>{name}</i>",
"ca": "Botiga de bicis <i>{name}</i>" "ca": "Botiga de bicis <i>{name}</i>",
"cs": "Prodejna kol <i>{name}</i>"
} }
}, },
{ {
@ -181,7 +183,8 @@
"pt": "Loja/reparo de bicicletas <i>{name}</i>", "pt": "Loja/reparo de bicicletas <i>{name}</i>",
"da": "Cykelværksted<i>{name}</i>", "da": "Cykelværksted<i>{name}</i>",
"es": "Taller/tienda de bicis <i>{name}</i>", "es": "Taller/tienda de bicis <i>{name}</i>",
"ca": "Taller/botiga de bicis <i>{name}</i>" "ca": "Taller/botiga de bicis <i>{name}</i>",
"cs": "Oprava kol/obchod <i>{name}</i>"
} }
} }
] ]

View file

@ -8,7 +8,8 @@
"it": "Oggetto relativo alle bici", "it": "Oggetto relativo alle bici",
"es": "Objeto relacionado con bicis", "es": "Objeto relacionado con bicis",
"da": "Cykelrelateret genstand", "da": "Cykelrelateret genstand",
"ca": "Objectes relacionats amb bicicletes" "ca": "Objectes relacionats amb bicicletes",
"cs": "Objekt související s jízdním kolem"
}, },
"minzoom": 13, "minzoom": 13,
"source": { "source": {
@ -35,7 +36,8 @@
"it": "Oggetto relativo alle bici", "it": "Oggetto relativo alle bici",
"es": "Objeto relacionado con bicis", "es": "Objeto relacionado con bicis",
"da": "Cykelrelateret objekt", "da": "Cykelrelateret objekt",
"ca": "Objecte relacionat amb bicis" "ca": "Objecte relacionat amb bicis",
"cs": "Objekt související s jízdním kolem"
}, },
"mappings": [ "mappings": [
{ {
@ -53,7 +55,8 @@
"ru": "Велотрек", "ru": "Велотрек",
"ca": "Pista ciclable", "ca": "Pista ciclable",
"es": "Carril bici", "es": "Carril bici",
"da": "Cykelsti" "da": "Cykelsti",
"cs": "Cyklostezka"
} }
} }
] ]
@ -89,6 +92,7 @@
"es": "Una capa con los objetos relacionados con bicis pero que no coinciden con ninguna otra capa", "es": "Una capa con los objetos relacionados con bicis pero que no coinciden con ninguna otra capa",
"fr": "Une couche sur le thème des vélos mais qui ne correspondent à aucune autre couche", "fr": "Une couche sur le thème des vélos mais qui ne correspondent à aucune autre couche",
"da": "Et lag med objekter med cykeltema, men som ikke matcher noget andet lag", "da": "Et lag med objekter med cykeltema, men som ikke matcher noget andet lag",
"ca": "Una capa amb els objectes relacionats amb bicis però que no coinxideixen amb cap altra capa" "ca": "Una capa amb els objectes relacionats amb bicis però que no coinxideixen amb cap altra capa",
"cs": "Vrstva s objekty s tématikou jízdních kol, které však neodpovídají žádné jiné vrstvě"
} }
} }

View file

@ -9,7 +9,8 @@
"da": "Kikkert", "da": "Kikkert",
"es": "Prismáticos", "es": "Prismáticos",
"fr": "Jumelles", "fr": "Jumelles",
"pa_PK": "بائینوکولر" "pa_PK": "بائینوکولر",
"cs": "Dalekohledy"
}, },
"minzoom": 0, "minzoom": 0,
"title": { "title": {
@ -34,7 +35,8 @@
"da": "Kikkerter", "da": "Kikkerter",
"es": "Prismáticos", "es": "Prismáticos",
"fr": "Jumelles", "fr": "Jumelles",
"pa_PK": "بائینوکولر" "pa_PK": "بائینوکولر",
"cs": "Dalekohledy"
}, },
"tagRenderings": [ "tagRenderings": [
"images", "images",
@ -54,7 +56,8 @@
"da": "Gratis at bruge", "da": "Gratis at bruge",
"es": "De uso gratuito", "es": "De uso gratuito",
"fr": "En libre service", "fr": "En libre service",
"ca": "Debades" "ca": "Debades",
"cs": "Použití zdarma"
} }
} }
], ],
@ -80,7 +83,8 @@
"es": "¿Cuánto hay que pagar para utilizar estos prismáticos?", "es": "¿Cuánto hay que pagar para utilizar estos prismáticos?",
"da": "Hvor meget koster det at bruge denne kikkert?", "da": "Hvor meget koster det at bruge denne kikkert?",
"fr": "Combien lutilisation des ces jumelles coûte-t-elle ?", "fr": "Combien lutilisation des ces jumelles coûte-t-elle ?",
"ca": "Quant s'ha de pagar per utilitzar aquests prismàtics?" "ca": "Quant s'ha de pagar per utilitzar aquests prismàtics?",
"cs": "Kolik se platí za používání těchto dalekohledů?"
}, },
"id": "binocular-charge" "id": "binocular-charge"
}, },
@ -123,7 +127,8 @@
"ca": "uns prismàtics", "ca": "uns prismàtics",
"da": "en kikkert", "da": "en kikkert",
"es": "unos prismáticos", "es": "unos prismáticos",
"fr": "des jumelles" "fr": "des jumelles",
"cs": "dalekohled"
}, },
"description": { "description": {
"en": "A telescope or pair of binoculars mounted on a pole, available to the public to look around. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />", "en": "A telescope or pair of binoculars mounted on a pole, available to the public to look around. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />",
@ -132,7 +137,8 @@
"fr": "Une longue-vue ou une paire de jumelles montée sur un poteau, disponible au public pour scruter les environs. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />", "fr": "Une longue-vue ou une paire de jumelles montée sur un poteau, disponible au public pour scruter les environs. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />",
"da": "Et teleskop eller en kikkert monteret på en stang, som offentligheden kan se sig omkring med. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />", "da": "Et teleskop eller en kikkert monteret på en stang, som offentligheden kan se sig omkring med. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />",
"es": "Un telescopio o unos prismáticos montados en un poste, disponible para que el público mire alrededor. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />", "es": "Un telescopio o unos prismáticos montados en un poste, disponible para que el público mire alrededor. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />",
"ca": "Un telescopi o un parell de prismàtics muntats en un pal, a disposició del públic per mirar al seu voltant. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />" "ca": "Un telescopi o un parell de prismàtics muntats en un pal, a disposició del públic per mirar al seu voltant. <img src='./assets/layers/binocular/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />",
"cs": "Jednooký teleskop nebo dalekohled umístěný na stožáru, který je k dispozici veřejnosti k prohlídce. <img src='./assets/layers/binoculars/binoculars_example.jpg' style='height: 300px; width: auto; display: block;' />"
} }
} }
], ],

View file

@ -10,7 +10,7 @@
{ {
"question": { "question": {
"en": "Open now", "en": "Open now",
"nl": "Nu geopened", "nl": "Nu open",
"de": "Jetzt geöffnet", "de": "Jetzt geöffnet",
"ca": "Obert ara", "ca": "Obert ara",
"es": "Abierta ahora", "es": "Abierta ahora",

View file

@ -153,7 +153,8 @@
"render": { "render": {
"en": "This parking spaces has {capacity} spaces.", "en": "This parking spaces has {capacity} spaces.",
"de": "Dieser Parkplatz hat {capacity} Stellplätze.", "de": "Dieser Parkplatz hat {capacity} Stellplätze.",
"nl": "Deze parkeerplek heeft {capacity} plaatsen." "nl": "Deze parkeerplek heeft {capacity} plaatsen.",
"ca": "Aquests espais d'aparcament tenen {espais} places."
}, },
"mappings": [ "mappings": [
{ {
@ -161,7 +162,8 @@
"then": { "then": {
"en": "This parking space has 1 space.", "en": "This parking space has 1 space.",
"de": "Dieser Parkplatz hat 1 Stellplatz.", "de": "Dieser Parkplatz hat 1 Stellplatz.",
"nl": "Deze parkeerplek heeft 1 plaats." "nl": "Deze parkeerplek heeft 1 plaats.",
"ca": "Aquest espai d'aparcament té 1 plaça."
} }
} }
] ]

View file

@ -1,21 +1,13 @@
{ {
"id": "mapcomplete-changes", "id": "mapcomplete-changes",
"title": { "title": {
"en": "Changes made with MapComplete", "en": "Changes made with MapComplete"
"de": "Mit MapComplete erstellte Änderungen",
"fr": "Changements faits avec MapComplete",
"nl": "Wijzigingen gemaakt met MapComplete"
}, },
"shortDescription": { "shortDescription": {
"en": "Show changes made with MapComplete", "en": "Shows changes made by MapComplete"
"de": "Mit MapComplete erstellte Änderungen anzeigen",
"nl": "Toon wijzigingen gemaakt met MapComplete"
}, },
"description": { "description": {
"en": "This maps shows all the changes made with MapComplete", "en": "This maps shows all the changes made with MapComplete"
"de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
"fr": "Cette carte montre tous les changements faits avec MapComplete",
"nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden"
}, },
"icon": "./assets/svg/logo.svg", "icon": "./assets/svg/logo.svg",
"hideFromOverview": true, "hideFromOverview": true,
@ -28,9 +20,7 @@
{ {
"id": "mapcomplete-changes", "id": "mapcomplete-changes",
"name": { "name": {
"en": "Changeset centers", "en": "Changeset centers"
"de": "Zentrum der Änderungssätze",
"nl": "Centerpunt van changeset"
}, },
"minzoom": 0, "minzoom": 0,
"source": { "source": {
@ -41,57 +31,41 @@
}, },
"title": { "title": {
"render": { "render": {
"en": "Changeset for {theme}", "en": "Changeset for {theme}"
"de": "Änderungssatz für {theme}",
"fr": "Groupe de modifications pour {theme}"
} }
}, },
"description": { "description": {
"en": "Show all MapComplete changes", "en": "Shows all MapComplete changes"
"de": "Alle MapComplete-Änderungen anzeigen",
"nl": "Toon alle MapComplete wijzigingen"
}, },
"tagRenderings": [ "tagRenderings": [
{ {
"id": "show_changeset_id", "id": "show_changeset_id",
"render": { "render": {
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>", "en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
"de": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"fr": "Groupe de modifications <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
} }
}, },
{ {
"id": "contributor", "id": "contributor",
"question": { "question": {
"en": "Which contributor made this change?", "en": "What contributor did make this change?"
"de": "Welcher Mitwirkende hat diese Änderung vorgenommen?",
"fr": "Quel contributeur a fait cette modification ?",
"nl": "Welke bijdrager maakte deze wijziging?"
}, },
"freeform": { "freeform": {
"key": "user" "key": "user"
}, },
"render": { "render": {
"en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>", "en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
"de": "Änderung gemacht von <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"fr": "Modification faite par <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"nl": "Wijziging gemaakt door <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
} }
}, },
{ {
"id": "theme-id", "id": "theme-id",
"question": { "question": {
"en": "What theme was used to make this change?", "en": "What theme was used to make this change?"
"de": "Welches Thema wurde für diese Änderung verwendet?",
"fr": "Quel thème a été utilisé pour faire cette modification ?"
}, },
"freeform": { "freeform": {
"key": "theme" "key": "theme"
}, },
"render": { "render": {
"en": "Change with theme <a href='https://mapcomplete.org/{theme}'>{theme}</a>", "en": "Change with theme <a href='https://mapcomplete.org/{theme}'>{theme}</a>"
"de": "Geändert mit Thema <a href='https://mapcomplete.org/{theme}'>{theme}</a>",
"fr": "Modifié avec le thème <a href='https://mapcomplete.org/{theme}'>{theme}</a>"
} }
}, },
{ {
@ -100,29 +74,19 @@
"key": "locale" "key": "locale"
}, },
"question": { "question": {
"en": "What locale (language) was this change made in?", "en": "What locale (language) was this change made in?"
"de": "In welcher Sprache wurde diese Änderung vorgenommen?",
"fr": "En quelle langue est-ce que ce changement a été fait ?",
"nl": "In welke locale (taal) werd deze wijziging gemaakt?"
}, },
"render": { "render": {
"en": "User locale is {locale}", "en": "User locale is {locale}"
"de": "Usersprache ist {locale}",
"nl": "De gebruikerstaal is {locale}"
} }
}, },
{ {
"id": "host", "id": "host",
"render": { "render": {
"en": "Change made with <a href='{host}'>{host}</a>", "en": "Change with with <a href='{host}'>{host}</a>"
"de": "Änderung vorgenommen mit <a href='{host}'>{host}</a>",
"fr": "Modification faite avec <a href='{host}'>{host}</a>",
"nl": "Wijziging gemaakt met <a href='{host}'>{host}</a>"
}, },
"question": { "question": {
"en": "What host (website) was this change made with?", "en": "What host (website) was this change made with?"
"de": "Mit welchem Host / welcher Website wurde diese Änderung gemacht?",
"nl": "Met welke host (website) werd deze wijziging gemaakt?"
}, },
"freeform": { "freeform": {
"key": "host" "key": "host"
@ -143,14 +107,10 @@
{ {
"id": "version", "id": "version",
"question": { "question": {
"en": "What version of MapComplete was used to make this change?", "en": "What version of MapComplete was used to make this change?"
"de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?",
"fr": "Quelle version de MapComplete a été utilisée pour faire cette modification ?"
}, },
"render": { "render": {
"en": "Made with {editor}", "en": "Made with {editor}"
"de": "Erstellt mit {editor}",
"fr": "Fait avec {editor}"
}, },
"freeform": { "freeform": {
"key": "editor" "key": "editor"
@ -492,9 +452,7 @@
} }
], ],
"question": { "question": {
"en": "Theme name contains {search}", "en": "Themename contains {search}"
"de": "Themenname enthält {search}",
"nl": "Themenaam bevat {search}"
} }
} }
] ]
@ -510,9 +468,7 @@
} }
], ],
"question": { "question": {
"en": "Made by contributor {search}", "en": "Made by contributor {search}"
"de": "Erstellt von {search}",
"nl": "Gemaakt door bijdrager {search}"
} }
} }
] ]
@ -528,10 +484,7 @@
} }
], ],
"question": { "question": {
"en": "<b>Not</b> made by contributor {search}", "en": "<b>Not</b> made by contributor {search}"
"de": "<b>Nicht</b> erstellt von {search}",
"es": "<b>No</b> hecho por colaborador {search}",
"nl": "<b>Niet</b> gemaakt door bijdrager {search}"
} }
} }
] ]
@ -548,10 +501,7 @@
} }
], ],
"question": { "question": {
"en": "Made before {search}", "en": "Made before {search}"
"de": "Erstellt vor {search}",
"es": "Hecho antes de {search}",
"nl": "Gemaakt voor {search}"
} }
} }
] ]
@ -568,9 +518,7 @@
} }
], ],
"question": { "question": {
"en": "Made after {search}", "en": "Made after {search}"
"de": "Erstellt nach {search}",
"nl": "Gemaakt na {search}"
} }
} }
] ]
@ -586,10 +534,7 @@
} }
], ],
"question": { "question": {
"en": "User language (iso-code) {search}", "en": "User language (iso-code) {search}"
"de": "Benutzersprache (ISO-Code) {search}",
"fr": "Langage utilisateur (code-ISO) {search}",
"nl": "De taal van de bijdrager is {search}"
} }
} }
] ]
@ -605,9 +550,7 @@
} }
], ],
"question": { "question": {
"en": "Made with host {search}", "en": "Made with host {search}"
"de": "Erstellt mit Host {search}",
"nl": "Gemaakt met host {search}"
} }
} }
] ]
@ -618,10 +561,7 @@
{ {
"osmTags": "add-image>0", "osmTags": "add-image>0",
"question": { "question": {
"en": "Changeset added at least one image", "en": "Changeset added at least one image"
"de": "Changeset fügte mindestens ein Bild hinzu",
"fr": "Le groupe de modifications a ajouté au moins une image",
"nl": "Changeset bevat minstens één afbeelding"
} }
} }
] ]
@ -636,9 +576,7 @@
{ {
"id": "link_to_more", "id": "link_to_more",
"render": { "render": {
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>", "en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
"de": "Mehr Statistiken gibt es <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>",
"fr": "D'autres statistiques sont disponibles <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>ici</a>"
} }
}, },
{ {

View file

@ -35,16 +35,6 @@
"1": { "1": {
"title": "un mupi" "title": "un mupi"
}, },
"10": {
"description": "S'utilitza per a cartells publicitaris, retols de neó, logotips i cartells en entrades institucionals",
"title": "un lletrer"
},
"11": {
"title": "una escupltura"
},
"12": {
"title": "una paret pintada"
},
"2": { "2": {
"title": "un mupi sobre la paret" "title": "un mupi sobre la paret"
}, },
@ -71,6 +61,16 @@
}, },
"9": { "9": {
"title": "un tòtem" "title": "un tòtem"
},
"10": {
"description": "S'utilitza per a cartells publicitaris, retols de neó, logotips i cartells en entrades institucionals",
"title": "un lletrer"
},
"11": {
"title": "una escupltura"
},
"12": {
"title": "una paret pintada"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -165,9 +165,6 @@
"1": { "1": {
"then": "Açò és un tauló d'anunis" "then": "Açò és un tauló d'anunis"
}, },
"10": {
"then": "Açò és una paret pintada"
},
"2": { "2": {
"then": "Açò és una columna" "then": "Açò és una columna"
}, },
@ -191,6 +188,9 @@
}, },
"9": { "9": {
"then": "Açò és un tòtem" "then": "Açò és un tòtem"
},
"10": {
"then": "Açò és una paret pintada"
} }
}, },
"question": "Quin tipus d'element publicitari és aquest?", "question": "Quin tipus d'element publicitari és aquest?",
@ -205,9 +205,6 @@
"1": { "1": {
"then": "Tauló d'anuncis" "then": "Tauló d'anuncis"
}, },
"10": {
"then": "Paret Pintada"
},
"2": { "2": {
"then": "Mupi" "then": "Mupi"
}, },
@ -231,6 +228,9 @@
}, },
"9": { "9": {
"then": "Tòtem" "then": "Tòtem"
},
"10": {
"then": "Paret Pintada"
} }
} }
} }
@ -312,15 +312,6 @@
"1": { "1": {
"then": "Mural" "then": "Mural"
}, },
"10": {
"then": "Azulejo (Rajoles decoratives espanyoles i portugueses)"
},
"11": {
"then": "Enrajolat"
},
"12": {
"then": "Tallat a la fusta"
},
"2": { "2": {
"then": "Pintura" "then": "Pintura"
}, },
@ -344,6 +335,15 @@
}, },
"9": { "9": {
"then": "Relleu" "then": "Relleu"
},
"10": {
"then": "Azulejo (Rajoles decoratives espanyoles i portugueses)"
},
"11": {
"then": "Enrajolat"
},
"12": {
"then": "Tallat a la fusta"
} }
}, },
"question": "Quin tipus d'obra és aquesta peça?", "question": "Quin tipus d'obra és aquesta peça?",
@ -1743,9 +1743,6 @@
"1": { "1": {
"question": "Té un connector <div style='display: inline-block'><b><b>Schuko</b> sense pin de terra (CEE7/4 tipus F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> connector" "question": "Té un connector <div style='display: inline-block'><b><b>Schuko</b> sense pin de terra (CEE7/4 tipus F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> connector"
}, },
"13": {
"question": "Té un connector <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Tipus 2 amb un cable de marca tesla)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"4": { "4": {
"question": "Té un connector de <div style='display: inline-block'><b><b>Tipus 1 amb cable</b> (J1772)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>" "question": "Té un connector de <div style='display: inline-block'><b><b>Tipus 1 amb cable</b> (J1772)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>"
}, },
@ -1760,6 +1757,9 @@
}, },
"8": { "8": {
"question": "Té un connector <div style='display: inline-block'><b><b>Tipus 2</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>" "question": "Té un connector <div style='display: inline-block'><b><b>Tipus 2</b> (mennekes)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>"
},
"13": {
"question": "Té un connector <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Tipus 2 amb un cable de marca tesla)</b><img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
} }
} }
} }
@ -1809,6 +1809,30 @@
"1": { "1": {
"then": "<b>Endoll de paret Schuko</b> sense pin a terra (CEE7/4 tipus F)" "then": "<b>Endoll de paret Schuko</b> sense pin a terra (CEE7/4 tipus F)"
}, },
"2": {
"then": "<b>Endoll de paret Europeu</b> amb pin de terra (CEE7/4 tipus E)"
},
"3": {
"then": "<b>Endoll de paret Europeu</b> amb pin a terra (CEE7/4 tipus E)"
},
"4": {
"then": "<b>CHAdeMo</b>"
},
"5": {
"then": "<b>Chademo</b>"
},
"6": {
"then": "<b>Tipus 1 amb cable</b> (J1772)"
},
"7": {
"then": "<b>Tipus 1 amb cable</b> (J1772)"
},
"8": {
"then": "<b>Tipus 1 <i>sense</i> cable</b> (J1772)"
},
"9": {
"then": "<b>Tipus 1 <i>sense</i> cable</b> (J1772)"
},
"10": { "10": {
"then": "<b>CSS 1Tipus 1</b> (també conegut com Tipus 1 combo)" "then": "<b>CSS 1Tipus 1</b> (també conegut com Tipus 1 combo)"
}, },
@ -1839,9 +1863,6 @@
"19": { "19": {
"then": "<b>Tipus 2 amb cable</b> (mennekes)" "then": "<b>Tipus 2 amb cable</b> (mennekes)"
}, },
"2": {
"then": "<b>Endoll de paret Europeu</b> amb pin de terra (CEE7/4 tipus E)"
},
"20": { "20": {
"then": "<b>CSS Supercarregador Tesla</b> (tipus2_css de la marca)" "then": "<b>CSS Supercarregador Tesla</b> (tipus2_css de la marca)"
}, },
@ -1859,27 +1880,6 @@
}, },
"26": { "26": {
"then": "<b>USB</b> per a carregar mòbils i dispositius petits" "then": "<b>USB</b> per a carregar mòbils i dispositius petits"
},
"3": {
"then": "<b>Endoll de paret Europeu</b> amb pin a terra (CEE7/4 tipus E)"
},
"4": {
"then": "<b>CHAdeMo</b>"
},
"5": {
"then": "<b>Chademo</b>"
},
"6": {
"then": "<b>Tipus 1 amb cable</b> (J1772)"
},
"7": {
"then": "<b>Tipus 1 amb cable</b> (J1772)"
},
"8": {
"then": "<b>Tipus 1 <i>sense</i> cable</b> (J1772)"
},
"9": {
"then": "<b>Tipus 1 <i>sense</i> cable</b> (J1772)"
} }
}, },
"question": "Quins tipus de connexions de càrrega estan disponibles aquí?" "question": "Quins tipus de connexions de càrrega estan disponibles aquí?"
@ -2948,21 +2948,6 @@
"1": { "1": {
"then": "Això és una fregiduria" "then": "Això és una fregiduria"
}, },
"10": {
"then": "Aquí es serveixen plats xinesos"
},
"11": {
"then": "Aquí es serveixen plats grecs"
},
"12": {
"then": "Aquí es serveixen plats indis"
},
"13": {
"then": "Aquí es serveixen plats turcs"
},
"14": {
"then": "Aquí es serveixen plats tailandesos"
},
"2": { "2": {
"then": "Principalment serveix pasta" "then": "Principalment serveix pasta"
}, },
@ -2983,6 +2968,21 @@
}, },
"9": { "9": {
"then": "Aquí es serveixen plats francesos" "then": "Aquí es serveixen plats francesos"
},
"10": {
"then": "Aquí es serveixen plats xinesos"
},
"11": {
"then": "Aquí es serveixen plats grecs"
},
"12": {
"then": "Aquí es serveixen plats indis"
},
"13": {
"then": "Aquí es serveixen plats turcs"
},
"14": {
"then": "Aquí es serveixen plats tailandesos"
} }
}, },
"question": "Quin menjar es serveix aquí?", "question": "Quin menjar es serveix aquí?",
@ -4607,6 +4607,30 @@
"1": { "1": {
"question": "Reciclatge de piles" "question": "Reciclatge de piles"
}, },
"2": {
"question": "Reciclatge de cartrons de begudes"
},
"3": {
"question": "Reciclatge de llaunes"
},
"4": {
"question": "Reciclatge de roba"
},
"5": {
"question": "Reciclatge d'oli de cuina"
},
"6": {
"question": "Reciclatge d'oli de motor"
},
"7": {
"question": "Reciclatge de tubs fluorescents"
},
"8": {
"question": "Reciclatge de residus verds"
},
"9": {
"question": "Reciclatge d'ampolles de vidre"
},
"10": { "10": {
"question": "Reciclatge de vidre" "question": "Reciclatge de vidre"
}, },
@ -4637,35 +4661,11 @@
"19": { "19": {
"question": "Reciclatge del rebuig" "question": "Reciclatge del rebuig"
}, },
"2": {
"question": "Reciclatge de cartrons de begudes"
},
"20": { "20": {
"question": "Reciclatge de cartutxos d'impressora" "question": "Reciclatge de cartutxos d'impressora"
}, },
"21": { "21": {
"question": "Reciclatge de bicicletes" "question": "Reciclatge de bicicletes"
},
"3": {
"question": "Reciclatge de llaunes"
},
"4": {
"question": "Reciclatge de roba"
},
"5": {
"question": "Reciclatge d'oli de cuina"
},
"6": {
"question": "Reciclatge d'oli de motor"
},
"7": {
"question": "Reciclatge de tubs fluorescents"
},
"8": {
"question": "Reciclatge de residus verds"
},
"9": {
"question": "Reciclatge d'ampolles de vidre"
} }
} }
}, },
@ -4728,6 +4728,30 @@
"1": { "1": {
"then": "Aquí es poden reciclar els cartons de begudes" "then": "Aquí es poden reciclar els cartons de begudes"
}, },
"2": {
"then": "Aquí es poden reciclar llaunes"
},
"3": {
"then": "Aquí es pot reciclar roba"
},
"4": {
"then": "Aquí es pot reciclar oli de cuina"
},
"5": {
"then": "Aquí es pot reciclar oli de motor"
},
"6": {
"then": "Aquí es poden reciclar tub fluroescents"
},
"7": {
"then": "Aquí es poden reciclar residus verds"
},
"8": {
"then": "Ací es poden reciclar residus orgànics"
},
"9": {
"then": "Aquí es poden reciclar ampolles de vidre"
},
"10": { "10": {
"then": "Aquí es pot reciclar vidre" "then": "Aquí es pot reciclar vidre"
}, },
@ -4758,9 +4782,6 @@
"19": { "19": {
"then": "Aquí es poden reciclar sabates" "then": "Aquí es poden reciclar sabates"
}, },
"2": {
"then": "Aquí es poden reciclar llaunes"
},
"20": { "20": {
"then": "Aquí es poden reciclar petits electrodomèstics" "then": "Aquí es poden reciclar petits electrodomèstics"
}, },
@ -4775,27 +4796,6 @@
}, },
"24": { "24": {
"then": "Aquí es poden reciclar bicicletes" "then": "Aquí es poden reciclar bicicletes"
},
"3": {
"then": "Aquí es pot reciclar roba"
},
"4": {
"then": "Aquí es pot reciclar oli de cuina"
},
"5": {
"then": "Aquí es pot reciclar oli de motor"
},
"6": {
"then": "Aquí es poden reciclar tub fluroescents"
},
"7": {
"then": "Aquí es poden reciclar residus verds"
},
"8": {
"then": "Ací es poden reciclar residus orgànics"
},
"9": {
"then": "Aquí es poden reciclar ampolles de vidre"
} }
}, },
"question": "Què es pot reciclar aquí?" "question": "Què es pot reciclar aquí?"
@ -5258,12 +5258,6 @@
"1": { "1": {
"then": "Aquest fanal utilitza LED" "then": "Aquest fanal utilitza LED"
}, },
"10": {
"then": "Aquest fanal utilitza làmpades de sodi d'alta pressió (taronja amb blanc)"
},
"11": {
"then": "Aquest fanal s'il·lumina amb gas"
},
"2": { "2": {
"then": "Aquest fanal utilitza il·luminació incandescent" "then": "Aquest fanal utilitza il·luminació incandescent"
}, },
@ -5287,6 +5281,12 @@
}, },
"9": { "9": {
"then": "Aquest fanal utilitza làmpades de sodi de baixa pressió (taronja monocroma)" "then": "Aquest fanal utilitza làmpades de sodi de baixa pressió (taronja monocroma)"
},
"10": {
"then": "Aquest fanal utilitza làmpades de sodi d'alta pressió (taronja amb blanc)"
},
"11": {
"then": "Aquest fanal s'il·lumina amb gas"
} }
}, },
"question": "Quin tipus d'il·luminació utilitza aquest fanal?" "question": "Quin tipus d'il·luminació utilitza aquest fanal?"
@ -6125,4 +6125,4 @@
} }
} }
} }
} }

View file

@ -35,16 +35,6 @@
"1": { "1": {
"title": "volně stojící plakátovací skříň" "title": "volně stojící plakátovací skříň"
}, },
"10": {
"description": "Používá se pro reklamní nápisy, neonové nápisy, loga a vstupní nápisy institucí",
"title": "cedule"
},
"11": {
"title": "socha"
},
"12": {
"title": "nástěnná malba"
},
"2": { "2": {
"title": "plakátovací skříň připevněná na stěnu" "title": "plakátovací skříň připevněná na stěnu"
}, },
@ -71,6 +61,16 @@
}, },
"9": { "9": {
"title": "totem" "title": "totem"
},
"10": {
"description": "Používá se pro reklamní nápisy, neonové nápisy, loga a vstupní nápisy institucí",
"title": "cedule"
},
"11": {
"title": "socha"
},
"12": {
"title": "nástěnná malba"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -165,9 +165,6 @@
"1": { "1": {
"then": "Toto je deska" "then": "Toto je deska"
}, },
"10": {
"then": "Toto je nástěnná malba"
},
"2": { "2": {
"then": "Toto je sloup" "then": "Toto je sloup"
}, },
@ -191,6 +188,9 @@
}, },
"9": { "9": {
"then": "Toto je totem" "then": "Toto je totem"
},
"10": {
"then": "Toto je nástěnná malba"
} }
}, },
"question": "O jaký typ reklamního prvku se jedná?", "question": "O jaký typ reklamního prvku se jedná?",
@ -205,9 +205,6 @@
"1": { "1": {
"then": "Deska" "then": "Deska"
}, },
"10": {
"then": "Nástěnná malba"
},
"2": { "2": {
"then": "Skříň na plakáty" "then": "Skříň na plakáty"
}, },
@ -231,6 +228,9 @@
}, },
"9": { "9": {
"then": "Totem" "then": "Totem"
},
"10": {
"then": "Nástěnná malba"
} }
} }
} }
@ -312,15 +312,6 @@
"1": { "1": {
"then": "Nástěnná malba" "then": "Nástěnná malba"
}, },
"10": {
"then": "Azulejo (španělské dekorativní dlaždice)"
},
"11": {
"then": "Obklady a dlažba"
},
"12": {
"then": "Dřevořezba"
},
"2": { "2": {
"then": "Malba" "then": "Malba"
}, },
@ -344,6 +335,15 @@
}, },
"9": { "9": {
"then": "Reliéf" "then": "Reliéf"
},
"10": {
"then": "Azulejo (španělské dekorativní dlaždice)"
},
"11": {
"then": "Obklady a dlažba"
},
"12": {
"then": "Dřevořezba"
} }
}, },
"question": "Jaký je typ tohoto uměleckého díla?", "question": "Jaký je typ tohoto uměleckého díla?",
@ -1987,4 +1987,4 @@
"walls_and_buildings": { "walls_and_buildings": {
"description": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat." "description": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat."
} }
} }

View file

@ -27,9 +27,6 @@
"advertising": { "advertising": {
"name": "Reclame", "name": "Reclame",
"presets": { "presets": {
"12": {
"title": "een muurschildering"
},
"3": { "3": {
"description": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers", "description": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers",
"title": "een uithangbord" "title": "een uithangbord"
@ -50,6 +47,9 @@
"8": { "8": {
"description": "Een stuk groot, weerbestendig textiel met opgedrukte reclameboodschap die permanent aan de muur hangt", "description": "Een stuk groot, weerbestendig textiel met opgedrukte reclameboodschap die permanent aan de muur hangt",
"title": "een spandoek" "title": "een spandoek"
},
"12": {
"title": "een muurschildering"
} }
}, },
"tagRenderings": { "tagRenderings": {
@ -107,9 +107,6 @@
}, },
"title": { "title": {
"mappings": { "mappings": {
"10": {
"then": "Muurschildering"
},
"3": { "3": {
"then": "Aanplakzuil" "then": "Aanplakzuil"
}, },
@ -127,6 +124,9 @@
}, },
"9": { "9": {
"then": "Aanplakzuil" "then": "Aanplakzuil"
},
"10": {
"then": "Muurschildering"
} }
} }
} }
@ -208,15 +208,6 @@
"1": { "1": {
"then": "Muurschildering" "then": "Muurschildering"
}, },
"10": {
"then": "Azulejo (Spaanse siertegels)"
},
"11": {
"then": "Tegelwerk"
},
"12": {
"then": "Houtsculptuur"
},
"2": { "2": {
"then": "Schilderij" "then": "Schilderij"
}, },
@ -240,6 +231,15 @@
}, },
"9": { "9": {
"then": "Reliëf" "then": "Reliëf"
},
"10": {
"then": "Azulejo (Spaanse siertegels)"
},
"11": {
"then": "Tegelwerk"
},
"12": {
"then": "Houtsculptuur"
} }
}, },
"question": "Wat voor soort kunstwerk is dit?", "question": "Wat voor soort kunstwerk is dit?",
@ -1729,27 +1729,6 @@
"1": { "1": {
"question": "Heeft een <div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>" "question": "Heeft een <div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>"
}, },
"10": {
"question": "Heeft een <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"11": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
},
"12": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
},
"13": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"14": {
"question": "Heeft een <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
},
"15": {
"question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 3 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div>"
},
"16": {
"question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
},
"2": { "2": {
"question": "Heeft een <div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>" "question": "Heeft een <div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>"
}, },
@ -1773,6 +1752,27 @@
}, },
"9": { "9": {
"question": "Heeft een <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>" "question": "Heeft een <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
},
"10": {
"question": "Heeft een <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"11": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>"
},
"12": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
},
"13": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"14": {
"question": "Heeft een <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
},
"15": {
"question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 3 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-3pin.svg'/></div>"
},
"16": {
"question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
} }
} }
} }
@ -1828,6 +1828,30 @@
"1": { "1": {
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)" "then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)"
}, },
"2": {
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"3": {
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"4": {
"then": "<b>Chademo</b>"
},
"5": {
"then": "<b>Chademo</b>"
},
"6": {
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"7": {
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"8": {
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
},
"9": {
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
},
"10": { "10": {
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo)" "then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo)"
}, },
@ -1858,9 +1882,6 @@
"19": { "19": {
"then": "<b>Type 2 met kabel</b> (J1772)" "then": "<b>Type 2 met kabel</b> (J1772)"
}, },
"2": {
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"20": { "20": {
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)" "then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)"
}, },
@ -1891,32 +1912,11 @@
"29": { "29": {
"then": "<b>Bosch Active Connect met 3 pinnen</b> aan een kabel" "then": "<b>Bosch Active Connect met 3 pinnen</b> aan een kabel"
}, },
"3": {
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"30": { "30": {
"then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel" "then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
}, },
"31": { "31": {
"then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel" "then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
},
"4": {
"then": "<b>Chademo</b>"
},
"5": {
"then": "<b>Chademo</b>"
},
"6": {
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"7": {
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"8": {
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
},
"9": {
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
} }
}, },
"question": "Welke laadaansluitingen zijn hier beschikbaar?" "question": "Welke laadaansluitingen zijn hier beschikbaar?"
@ -3449,15 +3449,6 @@
"1": { "1": {
"then": "Dit fietspad is geplaveid" "then": "Dit fietspad is geplaveid"
}, },
"10": {
"then": "Dit fietspad is gemaakt van fijn grind"
},
"11": {
"then": "Dit fietspad is gemaakt van kiezelsteentjes"
},
"12": {
"then": "Dit fietspad is gemaakt van aarde"
},
"2": { "2": {
"then": "Dit fietspad is gemaakt van asfalt" "then": "Dit fietspad is gemaakt van asfalt"
}, },
@ -3481,6 +3472,15 @@
}, },
"9": { "9": {
"then": "Dit fietspad is gemaakt van grind" "then": "Dit fietspad is gemaakt van grind"
},
"10": {
"then": "Dit fietspad is gemaakt van fijn grind"
},
"11": {
"then": "Dit fietspad is gemaakt van kiezelsteentjes"
},
"12": {
"then": "Dit fietspad is gemaakt van aarde"
} }
}, },
"question": "Waaruit is het oppervlak van het fietspad van gemaakt?", "question": "Waaruit is het oppervlak van het fietspad van gemaakt?",
@ -3529,15 +3529,6 @@
"1": { "1": {
"then": "Dit fietspad is geplaveid" "then": "Dit fietspad is geplaveid"
}, },
"10": {
"then": "Dit fietspad is gemaakt van fijn grind"
},
"11": {
"then": "Dit fietspad is gemaakt van kiezelsteentjes"
},
"12": {
"then": "Dit fietspad is gemaakt van aarde"
},
"2": { "2": {
"then": "Dit fietspad is gemaakt van asfalt" "then": "Dit fietspad is gemaakt van asfalt"
}, },
@ -3561,6 +3552,15 @@
}, },
"9": { "9": {
"then": "Dit fietspad is gemaakt van grind" "then": "Dit fietspad is gemaakt van grind"
},
"10": {
"then": "Dit fietspad is gemaakt van fijn grind"
},
"11": {
"then": "Dit fietspad is gemaakt van kiezelsteentjes"
},
"12": {
"then": "Dit fietspad is gemaakt van aarde"
} }
}, },
"question": "Waaruit is het oppervlak van de straat gemaakt?", "question": "Waaruit is het oppervlak van de straat gemaakt?",
@ -4565,21 +4565,6 @@
"1": { "1": {
"then": "Dit is een frituur" "then": "Dit is een frituur"
}, },
"10": {
"then": "Dit is een Chinees restaurant"
},
"11": {
"then": "Dit is een Grieks restaurant"
},
"12": {
"then": "Dit is een Indisch restaurant"
},
"13": {
"then": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)"
},
"14": {
"then": "Dit is een Thaïs restaurant"
},
"2": { "2": {
"then": "Dit is een pastazaak" "then": "Dit is een pastazaak"
}, },
@ -4603,6 +4588,21 @@
}, },
"9": { "9": {
"then": "Dit is een Frans restaurant" "then": "Dit is een Frans restaurant"
},
"10": {
"then": "Dit is een Chinees restaurant"
},
"11": {
"then": "Dit is een Grieks restaurant"
},
"12": {
"then": "Dit is een Indisch restaurant"
},
"13": {
"then": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)"
},
"14": {
"then": "Dit is een Thaïs restaurant"
} }
}, },
"question": "Welk soort gerechten worden hier geserveerd?", "question": "Welk soort gerechten worden hier geserveerd?",
@ -5737,19 +5737,6 @@
} }
} }
}, },
"10": {
"options": {
"0": {
"question": "Alle Notes"
},
"1": {
"question": "Verberg import Notes"
},
"2": {
"question": "Toon enkel import Notes"
}
}
},
"2": { "2": {
"options": { "options": {
"0": { "0": {
@ -5805,6 +5792,19 @@
"question": "Toon enkel open Notes" "question": "Toon enkel open Notes"
} }
} }
},
"10": {
"options": {
"0": {
"question": "Alle Notes"
},
"1": {
"question": "Verberg import Notes"
},
"2": {
"question": "Toon enkel import Notes"
}
}
} }
}, },
"name": "OpenStreetMap Notes", "name": "OpenStreetMap Notes",
@ -6100,21 +6100,6 @@
"1": { "1": {
"then": "Dit is een normale parkeerplek." "then": "Dit is een normale parkeerplek."
}, },
"10": {
"then": "Deze parkeerplek is gereserveerd voor ouders met kinderen."
},
"11": {
"then": "Deze parkeerplek is gereserveerd voor personeel."
},
"12": {
"then": "Deze parkeerplek is gereserveerd voor taxis."
},
"13": {
"then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger."
},
"14": {
"then": "Deze parkeerplek is gereserveerd voor autodelen."
},
"2": { "2": {
"then": "Dit is een gehandicaptenparkeerplaats." "then": "Dit is een gehandicaptenparkeerplaats."
}, },
@ -6138,6 +6123,21 @@
}, },
"9": { "9": {
"then": "Deze parkeerplek is gereserveerd voor motoren." "then": "Deze parkeerplek is gereserveerd voor motoren."
},
"10": {
"then": "Deze parkeerplek is gereserveerd voor ouders met kinderen."
},
"11": {
"then": "Deze parkeerplek is gereserveerd voor personeel."
},
"12": {
"then": "Deze parkeerplek is gereserveerd voor taxis."
},
"13": {
"then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger."
},
"14": {
"then": "Deze parkeerplek is gereserveerd voor autodelen."
} }
}, },
"question": "Wat voor parkeerplek is dit?" "question": "Wat voor parkeerplek is dit?"
@ -7028,6 +7028,30 @@
"1": { "1": {
"question": "Recycling van batterijen" "question": "Recycling van batterijen"
}, },
"2": {
"question": "Recycling van drankpakken"
},
"3": {
"question": "Recycling van blikken"
},
"4": {
"question": "Recycling van kleding"
},
"5": {
"question": "Recycling van frituurvet"
},
"6": {
"question": "Recycling van motorolie"
},
"7": {
"question": "Recycling van tl-buizen"
},
"8": {
"question": "Recycling van groen afval"
},
"9": {
"question": "Recycling van glazen flessen"
},
"10": { "10": {
"question": "Recycling van glas" "question": "Recycling van glas"
}, },
@ -7058,35 +7082,11 @@
"19": { "19": {
"question": "Recycling van restafval" "question": "Recycling van restafval"
}, },
"2": {
"question": "Recycling van drankpakken"
},
"20": { "20": {
"question": "Recycling van inktpatronen" "question": "Recycling van inktpatronen"
}, },
"21": { "21": {
"question": "Recycling van fietsen" "question": "Recycling van fietsen"
},
"3": {
"question": "Recycling van blikken"
},
"4": {
"question": "Recycling van kleding"
},
"5": {
"question": "Recycling van frituurvet"
},
"6": {
"question": "Recycling van motorolie"
},
"7": {
"question": "Recycling van tl-buizen"
},
"8": {
"question": "Recycling van groen afval"
},
"9": {
"question": "Recycling van glazen flessen"
} }
} }
}, },
@ -7154,6 +7154,30 @@
"1": { "1": {
"then": "Drankpakken kunnen hier gerecycled worden" "then": "Drankpakken kunnen hier gerecycled worden"
}, },
"2": {
"then": "Blikken kunnen hier gerecycled worden"
},
"3": {
"then": "Kleren kunnen hier gerecycled worden"
},
"4": {
"then": "Frituurvet kan hier gerecycled worden"
},
"5": {
"then": "Motorolie kan hier gerecycled worden"
},
"6": {
"then": "TL-buizen kunnen hier gerecycled worden"
},
"7": {
"then": "Groen afval kan hier gerecycled worden"
},
"8": {
"then": "Organisch afval kan hier gerecycled worden"
},
"9": {
"then": "Glazen flessen kunnen hier gerecycled worden"
},
"10": { "10": {
"then": "Glas kan hier gerecycled worden" "then": "Glas kan hier gerecycled worden"
}, },
@ -7184,9 +7208,6 @@
"19": { "19": {
"then": "Schoenen kunnen hier gerecycled worden" "then": "Schoenen kunnen hier gerecycled worden"
}, },
"2": {
"then": "Blikken kunnen hier gerecycled worden"
},
"20": { "20": {
"then": "Kleine elektrische apparaten kunnen hier gerecycled worden" "then": "Kleine elektrische apparaten kunnen hier gerecycled worden"
}, },
@ -7201,27 +7222,6 @@
}, },
"24": { "24": {
"then": "Fietsen (en fietswrakken) kunnen hier gerecycled worden" "then": "Fietsen (en fietswrakken) kunnen hier gerecycled worden"
},
"3": {
"then": "Kleren kunnen hier gerecycled worden"
},
"4": {
"then": "Frituurvet kan hier gerecycled worden"
},
"5": {
"then": "Motorolie kan hier gerecycled worden"
},
"6": {
"then": "TL-buizen kunnen hier gerecycled worden"
},
"7": {
"then": "Groen afval kan hier gerecycled worden"
},
"8": {
"then": "Organisch afval kan hier gerecycled worden"
},
"9": {
"then": "Glazen flessen kunnen hier gerecycled worden"
} }
}, },
"question": "Wat kan hier gerecycled worden?" "question": "Wat kan hier gerecycled worden?"
@ -7948,12 +7948,6 @@
"1": { "1": {
"then": "Deze lantaarn gebruikt LEDs" "then": "Deze lantaarn gebruikt LEDs"
}, },
"10": {
"then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)"
},
"11": {
"then": "Deze lantaarn wordt verlicht met gas"
},
"2": { "2": {
"then": "Deze lantaarn gebruikt gloeilampen" "then": "Deze lantaarn gebruikt gloeilampen"
}, },
@ -7977,6 +7971,12 @@
}, },
"9": { "9": {
"then": "Deze lantaarn gebruikt lagedruknatriumlampen (monochroom oranje)" "then": "Deze lantaarn gebruikt lagedruknatriumlampen (monochroom oranje)"
},
"10": {
"then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)"
},
"11": {
"then": "Deze lantaarn wordt verlicht met gas"
} }
}, },
"question": "Wat voor verlichting gebruikt deze lantaarn?" "question": "Wat voor verlichting gebruikt deze lantaarn?"
@ -8936,27 +8936,6 @@
"1": { "1": {
"question": "Verkoop van dranken" "question": "Verkoop van dranken"
}, },
"10": {
"question": "Verkoop van melk"
},
"11": {
"question": "Verkoop van brood"
},
"12": {
"question": "Verkoop van eieren"
},
"13": {
"question": "Verkoop van kaas"
},
"14": {
"question": "Verkoop van honing"
},
"15": {
"question": "Verkoop van aardappelen"
},
"16": {
"question": "Verkoop van bloemen"
},
"2": { "2": {
"question": "Verkoop van snoep" "question": "Verkoop van snoep"
}, },
@ -8980,6 +8959,27 @@
}, },
"9": { "9": {
"question": "Verkoop van fietsbinnenbanden" "question": "Verkoop van fietsbinnenbanden"
},
"10": {
"question": "Verkoop van melk"
},
"11": {
"question": "Verkoop van brood"
},
"12": {
"question": "Verkoop van eieren"
},
"13": {
"question": "Verkoop van kaas"
},
"14": {
"question": "Verkoop van honing"
},
"15": {
"question": "Verkoop van aardappelen"
},
"16": {
"question": "Verkoop van bloemen"
} }
} }
} }
@ -9020,24 +9020,6 @@
"1": { "1": {
"then": "Snoep wordt verkocht" "then": "Snoep wordt verkocht"
}, },
"10": {
"then": "Brood wordt verkocht"
},
"11": {
"then": "Eieren worden verkocht"
},
"12": {
"then": "Kaas wordt verkocht"
},
"13": {
"then": "Honing wordt verkocht"
},
"14": {
"then": "Aardappelen worden verkocht"
},
"15": {
"then": "Bloemen worden verkocht"
},
"2": { "2": {
"then": "Eten wordt verkocht" "then": "Eten wordt verkocht"
}, },
@ -9061,6 +9043,24 @@
}, },
"9": { "9": {
"then": "Melk wordt verkocht" "then": "Melk wordt verkocht"
},
"10": {
"then": "Brood wordt verkocht"
},
"11": {
"then": "Eieren worden verkocht"
},
"12": {
"then": "Kaas wordt verkocht"
},
"13": {
"then": "Honing wordt verkocht"
},
"14": {
"then": "Aardappelen worden verkocht"
},
"15": {
"then": "Bloemen worden verkocht"
} }
}, },
"question": "Wat verkoopt deze verkoopautomaat?", "question": "Wat verkoopt deze verkoopautomaat?",
@ -9398,4 +9398,4 @@
} }
} }
} }
} }

16
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.31.1", "version": "0.31.2",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.31.1", "version": "0.31.2",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"dependencies": { "dependencies": {
"@rgossiaux/svelte-headlessui": "^1.0.2", "@rgossiaux/svelte-headlessui": "^1.0.2",
@ -4511,9 +4511,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001517", "version": "1.0.30001525",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz",
"integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -15736,9 +15736,9 @@
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001517", "version": "1.0.30001525",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz",
"integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==",
"dev": true "dev": true
}, },
"canvg": { "canvg": {

View file

@ -1,22 +1,22 @@
import {DesugaringStep, Each, Fuse, On} from "./Conversion" import { DesugaringStep, Each, Fuse, On } from "./Conversion"
import {LayerConfigJson} from "../Json/LayerConfigJson" import { LayerConfigJson } from "../Json/LayerConfigJson"
import LayerConfig from "../LayerConfig" import LayerConfig from "../LayerConfig"
import {Utils} from "../../../Utils" import { Utils } from "../../../Utils"
import Constants from "../../Constants" import Constants from "../../Constants"
import {Translation} from "../../../UI/i18n/Translation" import { Translation } from "../../../UI/i18n/Translation"
import {LayoutConfigJson} from "../Json/LayoutConfigJson" import { LayoutConfigJson } from "../Json/LayoutConfigJson"
import LayoutConfig from "../LayoutConfig" import LayoutConfig from "../LayoutConfig"
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson" import { TagRenderingConfigJson } from "../Json/TagRenderingConfigJson"
import {TagUtils} from "../../../Logic/Tags/TagUtils" import { TagUtils } from "../../../Logic/Tags/TagUtils"
import {ExtractImages} from "./FixImages" import { ExtractImages } from "./FixImages"
import {And} from "../../../Logic/Tags/And" import { And } from "../../../Logic/Tags/And"
import Translations from "../../../UI/i18n/Translations" import Translations from "../../../UI/i18n/Translations"
import Svg from "../../../Svg" import Svg from "../../../Svg"
import FilterConfigJson from "../Json/FilterConfigJson" import FilterConfigJson from "../Json/FilterConfigJson"
import DeleteConfig from "../DeleteConfig" import DeleteConfig from "../DeleteConfig"
import {QuestionableTagRenderingConfigJson} from "../Json/QuestionableTagRenderingConfigJson" import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson"
import Validators from "../../../UI/InputElement/Validators" import Validators from "../../../UI/InputElement/Validators"
import TagRenderingConfig from "../TagRenderingConfig"; import TagRenderingConfig from "../TagRenderingConfig"
class ValidateLanguageCompleteness extends DesugaringStep<any> { class ValidateLanguageCompleteness extends DesugaringStep<any> {
private readonly _languages: string[] private readonly _languages: string[]
@ -47,12 +47,12 @@ class ValidateLanguageCompleteness extends DesugaringStep<any> {
.forEach((missing) => { .forEach((missing) => {
errors.push( errors.push(
context + context +
"A theme should be translation-complete for " + "A theme should be translation-complete for " +
neededLanguage + neededLanguage +
", but it lacks a translation for " + ", but it lacks a translation for " +
missing.context + missing.context +
".\n\tThe known translation is " + ".\n\tThe known translation is " +
missing.tr.textFor("en") missing.tr.textFor("en")
) )
}) })
} }
@ -86,7 +86,7 @@ export class DoesImageExist extends DesugaringStep<string> {
context: string context: string
): { result: string; errors?: string[]; warnings?: string[]; information?: string[] } { ): { result: string; errors?: string[]; warnings?: string[]; information?: string[] } {
if (this._ignore?.has(image)) { if (this._ignore?.has(image)) {
return {result: image} return { result: image }
} }
const errors = [] const errors = []
@ -94,22 +94,22 @@ export class DoesImageExist extends DesugaringStep<string> {
const information = [] const information = []
if (image.indexOf("{") >= 0) { if (image.indexOf("{") >= 0) {
information.push("Ignoring image with { in the path: " + image) information.push("Ignoring image with { in the path: " + image)
return {result: image} return { result: image }
} }
if (image === "assets/SocialImage.png") { if (image === "assets/SocialImage.png") {
return {result: image} return { result: image }
} }
if (image.match(/[a-z]*/)) { if (image.match(/[a-z]*/)) {
if (Svg.All[image + ".svg"] !== undefined) { if (Svg.All[image + ".svg"] !== undefined) {
// This is a builtin img, e.g. 'checkmark' or 'crosshair' // This is a builtin img, e.g. 'checkmark' or 'crosshair'
return {result: image} return { result: image }
} }
} }
if (image.startsWith("<") && image.endsWith(">")) { if (image.startsWith("<") && image.endsWith(">")) {
// This is probably HTML, you're on your own here // This is probably HTML, you're on your own here
return {result: image} return { result: image }
} }
if (!this._knownImagePaths.has(image)) { if (!this._knownImagePaths.has(image)) {
@ -178,15 +178,15 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
if (json["units"] !== undefined) { if (json["units"] !== undefined) {
errors.push( errors.push(
"The theme " + "The theme " +
json.id + json.id +
" has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) " " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) "
) )
} }
if (json["roamingRenderings"] !== undefined) { if (json["roamingRenderings"] !== undefined) {
errors.push( errors.push(
"Theme " + "Theme " +
json.id + json.id +
" contains an old 'roamingRenderings'. Use an 'overrideAll' instead" " contains an old 'roamingRenderings'. Use an 'overrideAll' instead"
) )
} }
} }
@ -198,10 +198,10 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
for (const remoteImage of remoteImages) { for (const remoteImage of remoteImages) {
errors.push( errors.push(
"Found a remote image: " + "Found a remote image: " +
remoteImage + remoteImage +
" in theme " + " in theme " +
json.id + json.id +
", please download it." ", please download it."
) )
} }
for (const image of images) { for (const image of images) {
@ -228,12 +228,12 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
if (theme.id !== filename) { if (theme.id !== filename) {
errors.push( errors.push(
"Theme ids should be the same as the name.json, but we got id: " + "Theme ids should be the same as the name.json, but we got id: " +
theme.id + theme.id +
" and filename " + " and filename " +
filename + filename +
" (" + " (" +
this._path + this._path +
")" ")"
) )
} }
this._validateImage.convertJoin( this._validateImage.convertJoin(
@ -313,7 +313,7 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
): { result: LayoutConfigJson; errors?: string[]; warnings?: string[] } { ): { result: LayoutConfigJson; errors?: string[]; warnings?: string[] } {
const overrideAll = json.overrideAll const overrideAll = json.overrideAll
if (overrideAll === undefined) { if (overrideAll === undefined) {
return {result: json} return { result: json }
} }
const errors = [] const errors = []
@ -340,7 +340,7 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
} }
} }
return {result: json, errors} return { result: json, errors }
} }
} }
@ -386,49 +386,58 @@ export class PrevalidateTheme extends Fuse<LayoutConfigJson> {
export class DetectConflictingAddExtraTags extends DesugaringStep<TagRenderingConfigJson> { export class DetectConflictingAddExtraTags extends DesugaringStep<TagRenderingConfigJson> {
constructor() { constructor() {
super("The `if`-part in a mapping might set some keys. Those key are not allowed to be set in the `addExtraTags`, as this might result in conflicting values", [], "DetectConflictingAddExtraTags"); super(
"The `if`-part in a mapping might set some keys. Those key are not allowed to be set in the `addExtraTags`, as this might result in conflicting values",
[],
"DetectConflictingAddExtraTags"
)
} }
convert(json: TagRenderingConfigJson, context: string): { convert(
result: TagRenderingConfigJson; json: TagRenderingConfigJson,
errors?: string[]; context: string
warnings?: string[]; ): {
result: TagRenderingConfigJson
errors?: string[]
warnings?: string[]
information?: string[] information?: string[]
} { } {
if (!(json.mappings?.length > 0)) { if (!(json.mappings?.length > 0)) {
return {result: json} return { result: json }
} }
const tagRendering = new TagRenderingConfig(json) const tagRendering = new TagRenderingConfig(json)
const errors = [] const errors = []
for (let i = 0; i < tagRendering.mappings.length; i++) { for (let i = 0; i < tagRendering.mappings.length; i++) {
const mapping = tagRendering.mappings[i]; const mapping = tagRendering.mappings[i]
if (!mapping.addExtraTags) { if (!mapping.addExtraTags) {
continue continue
} }
const keysInMapping = new Set(mapping.if.usedKeys()) const keysInMapping = new Set(mapping.if.usedKeys())
const keysInAddExtraTags = mapping.addExtraTags.map(t => t.key) const keysInAddExtraTags = mapping.addExtraTags.map((t) => t.key)
const duplicateKeys = keysInAddExtraTags.filter(k => keysInMapping.has(k)) const duplicateKeys = keysInAddExtraTags.filter((k) => keysInMapping.has(k))
if (duplicateKeys.length > 0) { if (duplicateKeys.length > 0) {
errors.push( errors.push(
"At " + context + ".mappings[" + i + "]: AddExtraTags overrides a key that is set in the `if`-clause of this mapping. Selecting this answer might thus first set one value (needed to match as answer) and then override it with a different value, resulting in an unsaveable question. The offending `addExtraTags` is " + duplicateKeys.join(", ") "At " +
context +
".mappings[" +
i +
"]: AddExtraTags overrides a key that is set in the `if`-clause of this mapping. Selecting this answer might thus first set one value (needed to match as answer) and then override it with a different value, resulting in an unsaveable question. The offending `addExtraTags` is " +
duplicateKeys.join(", ")
) )
} }
} }
return { return {
result: json, result: json,
errors errors,
}; }
} }
} }
export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJson> { export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJson> {
private readonly _calculatedTagNames: string[] private readonly _calculatedTagNames: string[]
@ -495,7 +504,7 @@ export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJso
const errors = [] const errors = []
const warnings = [] const warnings = []
if (json.mappings === undefined || json.mappings.length === 0) { if (json.mappings === undefined || json.mappings.length === 0) {
return {result: json} return { result: json }
} }
const defaultProperties = {} const defaultProperties = {}
for (const calculatedTagName of this._calculatedTagNames) { for (const calculatedTagName of this._calculatedTagNames) {
@ -521,7 +530,7 @@ export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJso
} }
const keyValues = parsedConditions[i].asChange(defaultProperties) const keyValues = parsedConditions[i].asChange(defaultProperties)
const properties = {} const properties = {}
keyValues.forEach(({k, v}) => { keyValues.forEach(({ k, v }) => {
properties[k] = v properties[k] = v
}) })
for (let j = 0; j < i; j++) { for (let j = 0; j < i; j++) {
@ -538,10 +547,10 @@ export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJso
// The current mapping is shadowed! // The current mapping is shadowed!
errors.push(`At ${context}: Mapping ${i} is shadowed by mapping ${j} and will thus never be shown: errors.push(`At ${context}: Mapping ${i} is shadowed by mapping ${j} and will thus never be shown:
The mapping ${parsedConditions[i].asHumanString( The mapping ${parsedConditions[i].asHumanString(
false, false,
false, false,
{} {}
)} is fully matched by a previous mapping (namely ${j}), which matches: )} is fully matched by a previous mapping (namely ${j}), which matches:
${parsedConditions[j].asHumanString(false, false, {})}. ${parsedConditions[j].asHumanString(false, false, {})}.
To fix this problem, you can try to: To fix this problem, you can try to:
@ -610,7 +619,7 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ
const warnings: string[] = [] const warnings: string[] = []
const information: string[] = [] const information: string[] = []
if (json.mappings === undefined || json.mappings.length === 0) { if (json.mappings === undefined || json.mappings.length === 0) {
return {result: json} return { result: json }
} }
const ignoreToken = "ignore-image-in-then" const ignoreToken = "ignore-image-in-then"
for (let i = 0; i < json.mappings.length; i++) { for (let i = 0; i < json.mappings.length; i++) {
@ -672,17 +681,17 @@ class MiscTagRenderingChecks extends DesugaringStep<TagRenderingConfigJson> {
if (json["special"] !== undefined) { if (json["special"] !== undefined) {
errors.push( errors.push(
"At " + "At " +
context + context +
': detected `special` on the top level. Did you mean `{"render":{ "special": ... }}`' ': detected `special` on the top level. Did you mean `{"render":{ "special": ... }}`'
) )
} }
if (json["group"]) { if (json["group"]) {
errors.push( errors.push(
"At " + "At " +
context + context +
': groups are deprecated, use `"label": ["' + ': groups are deprecated, use `"label": ["' +
json["group"] + json["group"] +
'"]` instead' '"]` instead'
) )
} }
const freeformType = json["freeform"]?.["type"] const freeformType = json["freeform"]?.["type"]
@ -758,9 +767,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (!Constants.priviliged_layers.find((x) => x == json.id)) { if (!Constants.priviliged_layers.find((x) => x == json.id)) {
errors.push( errors.push(
context + context +
": layer " + ": layer " +
json.id + json.id +
" uses 'special' as source.osmTags. However, this layer is not a priviliged layer" " uses 'special' as source.osmTags. However, this layer is not a priviliged layer"
) )
} }
} }
@ -769,13 +778,13 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json.title === undefined && json.source !== "special:library") { if (json.title === undefined && json.source !== "special:library") {
errors.push( errors.push(
context + context +
": this layer does not have a title defined but it does have tagRenderings. Not having a title will disable the popups, resulting in an unclickable element. Please add a title. If not having a popup is intended and the tagrenderings need to be kept (e.g. in a library layer), set `title: null` to disable this error." ": this layer does not have a title defined but it does have tagRenderings. Not having a title will disable the popups, resulting in an unclickable element. Please add a title. If not having a popup is intended and the tagrenderings need to be kept (e.g. in a library layer), set `title: null` to disable this error."
) )
} }
if (json.title === null) { if (json.title === null) {
information.push( information.push(
context + context +
": title is `null`. This results in an element that cannot be clicked - even though tagRenderings is set." ": title is `null`. This results in an element that cannot be clicked - even though tagRenderings is set."
) )
} }
} }
@ -802,9 +811,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
console.log(json.tagRenderings) console.log(json.tagRenderings)
errors.push( errors.push(
"At " + "At " +
context + context +
": some tagrenderings have a duplicate id: " + ": some tagrenderings have a duplicate id: " +
duplicates.join(", ") duplicates.join(", ")
) )
} }
} }
@ -822,8 +831,8 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json["overpassTags"] !== undefined) { if (json["overpassTags"] !== undefined) {
errors.push( errors.push(
"Layer " + "Layer " +
json.id + json.id +
'still uses the old \'overpassTags\'-format. Please use "source": {"osmTags": <tags>}\' instead of "overpassTags": <tags> (note: this isn\'t your fault, the custom theme generator still spits out the old format)' 'still uses the old \'overpassTags\'-format. Please use "source": {"osmTags": <tags>}\' instead of "overpassTags": <tags> (note: this isn\'t your fault, the custom theme generator still spits out the old format)'
) )
} }
const forbiddenTopLevel = [ const forbiddenTopLevel = [
@ -841,18 +850,18 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json[forbiddenKey] !== undefined) if (json[forbiddenKey] !== undefined)
errors.push( errors.push(
context + context +
": layer " + ": layer " +
json.id + json.id +
" still has a forbidden key " + " still has a forbidden key " +
forbiddenKey forbiddenKey
) )
} }
if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) { if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) {
errors.push( errors.push(
context + context +
": layer " + ": layer " +
json.id + json.id +
" contains an old 'hideUnderlayingFeaturesMinPercentage'" " contains an old 'hideUnderlayingFeaturesMinPercentage'"
) )
} }
@ -869,9 +878,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (this._path != undefined && this._path.indexOf(expected) < 0) { if (this._path != undefined && this._path.indexOf(expected) < 0) {
errors.push( errors.push(
"Layer is in an incorrect place. The path is " + "Layer is in an incorrect place. The path is " +
this._path + this._path +
", but expected " + ", but expected " +
expected expected
) )
} }
} }
@ -913,7 +922,7 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
} }
if (json.filter) { if (json.filter) {
const r = new On("filter", new Each( new ValidateFilter())).convert(json, context) const r = new On("filter", new Each(new ValidateFilter())).convert(json, context)
warnings.push(...(r.warnings ?? [])) warnings.push(...(r.warnings ?? []))
errors.push(...(r.errors ?? [])) errors.push(...(r.errors ?? []))
information.push(...(r.information ?? [])) information.push(...(r.information ?? []))
@ -940,9 +949,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (hasCondition?.length > 0) { if (hasCondition?.length > 0) {
errors.push( errors.push(
"At " + "At " +
context + context +
":\n One or more icons in the mapRenderings have a condition set. Don't do this, as this will result in an invisible but clickable element. Use extra filters in the source instead. The offending mapRenderings are:\n" + ":\n One or more icons in the mapRenderings have a condition set. Don't do this, as this will result in an invisible but clickable element. Use extra filters in the source instead. The offending mapRenderings are:\n" +
JSON.stringify(hasCondition, null, " ") JSON.stringify(hasCondition, null, " ")
) )
} }
} }
@ -957,7 +966,7 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
const preset = json.presets[i] const preset = json.presets[i]
const tags: { k: string; v: string }[] = new And( const tags: { k: string; v: string }[] = new And(
preset.tags.map((t) => TagUtils.Tag(t)) preset.tags.map((t) => TagUtils.Tag(t))
).asChange({id: "node/-1"}) ).asChange({ id: "node/-1" })
const properties = {} const properties = {}
for (const tag of tags) { for (const tag of tags) {
properties[tag.k] = tag.v properties[tag.k] = tag.v
@ -966,12 +975,12 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (!doMatch) { if (!doMatch) {
errors.push( errors.push(
context + context +
".presets[" + ".presets[" +
i + i +
"]: This preset does not match the required tags of this layer. This implies that a newly added point will not show up.\n A newly created point will have properties: " + "]: This preset does not match the required tags of this layer. This implies that a newly added point will not show up.\n A newly created point will have properties: " +
JSON.stringify(properties) + JSON.stringify(properties) +
"\n The required tags are: " + "\n The required tags are: " +
baseTags.asHumanString(false, false, {}) baseTags.asHumanString(false, false, {})
) )
} }
} }
@ -1005,11 +1014,10 @@ export class ValidateFilter extends DesugaringStep<FilterConfigJson> {
} { } {
if (typeof filter === "string") { if (typeof filter === "string") {
// Calling another filter, we skip // Calling another filter, we skip
return {result: filter} return { result: filter }
} }
const errors = [] const errors = []
for (const option of filter.options) { for (const option of filter.options) {
for (let i = 0; i < option.fields?.length ?? 0; i++) { for (let i = 0; i < option.fields?.length ?? 0; i++) {
const field = option.fields[i] const field = option.fields[i]
const type = field.type ?? "string" const type = field.type ?? "string"
@ -1021,7 +1029,7 @@ export class ValidateFilter extends DesugaringStep<FilterConfigJson> {
} }
} }
} }
return {result: filter, errors} return { result: filter, errors }
} }
} }
@ -1050,7 +1058,7 @@ export class DetectDuplicateFilters extends DesugaringStep<{
const warnings: string[] = [] const warnings: string[] = []
const information: string[] = [] const information: string[] = []
const {layers, themes} = json const { layers, themes } = json
const perOsmTag = new Map< const perOsmTag = new Map<
string, string,
{ {
@ -1086,7 +1094,7 @@ export class DetectDuplicateFilters extends DesugaringStep<{
return return
} }
let msg = "Possible duplicate filter: " + key let msg = "Possible duplicate filter: " + key
for (const {filter, layer, layout} of value) { for (const { filter, layer, layout } of value) {
let id = "" let id = ""
if (layout !== undefined) { if (layout !== undefined) {
id = layout.id + ":" id = layout.id + ":"

View file

@ -495,9 +495,7 @@ export default class LayerConfig extends WithContextLoader {
usingLayer = [ usingLayer = [
new Title("Themes using this layer", 4), new Title("Themes using this layer", 4),
new List( new List(
(usedInThemes ?? []).map( (usedInThemes ?? []).map((id) => new Link(id, "https://mapcomplete.org/" + id))
(id) => new Link(id, "https://mapcomplete.org/" + id)
)
), ),
] ]
} }

View file

@ -9,7 +9,7 @@
import { Unit } from "../../Models/Unit" import { Unit } from "../../Models/Unit"
import UnitInput from "../Popup/UnitInput.svelte" import UnitInput from "../Popup/UnitInput.svelte"
export let type: ValidatorType export let type: ValidatorType
export let feedback: UIEventSource<Translation> | undefined = undefined export let feedback: UIEventSource<Translation> | undefined = undefined
export let getCountry: () => string | undefined export let getCountry: () => string | undefined
export let placeholder: string | Translation | undefined export let placeholder: string | Translation | undefined

View file

@ -1,6 +1,6 @@
import BaseUIElement from "../BaseUIElement"; import BaseUIElement from "../BaseUIElement"
import { Translation } from "../i18n/Translation"; import { Translation } from "../i18n/Translation"
import Translations from "../i18n/Translations"; import Translations from "../i18n/Translations"
/** /**
* A 'TextFieldValidator' contains various methods to check and cleanup an entered value or to give feedback. * A 'TextFieldValidator' contains various methods to check and cleanup an entered value or to give feedback.
@ -16,13 +16,21 @@ export abstract class Validator {
/** /**
* What HTML-inputmode to use * What HTML-inputmode to use
*/ */
public readonly inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search' public readonly inputmode?:
| "none"
| "text"
| "tel"
| "url"
| "email"
| "numeric"
| "decimal"
| "search"
public readonly textArea: boolean public readonly textArea: boolean
constructor( constructor(
name: string, name: string,
explanation: string | BaseUIElement, explanation: string | BaseUIElement,
inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search', inputmode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search",
textArea?: false | boolean textArea?: false | boolean
) { ) {
this.name = name this.name = name

View file

@ -1,7 +1,7 @@
import { Translation } from "../../i18n/Translation" import { Translation } from "../../i18n/Translation"
import Translations from "../../i18n/Translations" import Translations from "../../i18n/Translations"
import { Validator } from "../Validator" import { Validator } from "../Validator"
import { ValidatorType } from "../Validators"; import { ValidatorType } from "../Validators"
export default class FloatValidator extends Validator { export default class FloatValidator extends Validator {
inputmode: "decimal" = "decimal" inputmode: "decimal" = "decimal"

View file

@ -1,7 +1,7 @@
{ {
"contributors": [ "contributors": [
{ {
"commits": 5849, "commits": 5877,
"contributor": "Pieter Vander Vennet" "contributor": "Pieter Vander Vennet"
}, },
{ {
@ -49,7 +49,7 @@
"contributor": "Ward" "contributor": "Ward"
}, },
{ {
"commits": 21, "commits": 22,
"contributor": "Hosted Weblate" "contributor": "Hosted Weblate"
}, },
{ {
@ -232,6 +232,14 @@
"commits": 2, "commits": 2,
"contributor": "Stanislas Gueniffey" "contributor": "Stanislas Gueniffey"
}, },
{
"commits": 1,
"contributor": "Ciprian"
},
{
"commits": 1,
"contributor": "redfast00"
},
{ {
"commits": 1, "commits": 1,
"contributor": "Daniel McDonald" "contributor": "Daniel McDonald"

View file

@ -246,6 +246,9 @@
"es", "es",
"pt" "pt"
], ],
"GR": [
"el"
],
"GT": [ "GT": [
"es" "es"
], ],
@ -505,7 +508,9 @@
], ],
"PL": [ "PL": [
"pl", "pl",
"pl" "be",
"pl",
"be"
], ],
"PS": [ "PS": [
"ar" "ar"

View file

@ -9,6 +9,7 @@
"fi": "suomi", "fi": "suomi",
"fr": "français", "fr": "français",
"gl": "lingua galega", "gl": "lingua galega",
"he": "עברית",
"hu": "magyar", "hu": "magyar",
"id": "Bahasa Indonesia", "id": "Bahasa Indonesia",
"it": "italiano", "it": "italiano",

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
{ {
"contributors": [ "contributors": [
{ {
"commits": 289, "commits": 294,
"contributor": "kjon" "contributor": "kjon"
}, },
{ {
@ -9,15 +9,15 @@
"contributor": "Pieter Vander Vennet" "contributor": "Pieter Vander Vennet"
}, },
{ {
"commits": 142, "commits": 145,
"contributor": "paunofu" "contributor": "paunofu"
}, },
{ {
"commits": 94, "commits": 95,
"contributor": "Allan Nordhøy" "contributor": "Allan Nordhøy"
}, },
{ {
"commits": 69, "commits": 70,
"contributor": "Robin van der Linde" "contributor": "Robin van der Linde"
}, },
{ {
@ -36,22 +36,22 @@
"commits": 32, "commits": 32,
"contributor": "Babos Gábor" "contributor": "Babos Gábor"
}, },
{
"commits": 31,
"contributor": "Jiří Podhorecký"
},
{ {
"commits": 31, "commits": 31,
"contributor": "Supaplex" "contributor": "Supaplex"
}, },
{ {
"commits": 30, "commits": 29,
"contributor": "Jiří Podhorecký" "contributor": "Lucas"
}, },
{ {
"commits": 29, "commits": 29,
"contributor": "Artem" "contributor": "Artem"
}, },
{
"commits": 25,
"contributor": "Lucas"
},
{ {
"commits": 25, "commits": 25,
"contributor": "Reza Almanda" "contributor": "Reza Almanda"
@ -152,6 +152,10 @@
"commits": 8, "commits": 8,
"contributor": "Vinicius" "contributor": "Vinicius"
}, },
{
"commits": 7,
"contributor": "NetworkedPoncho"
},
{ {
"commits": 7, "commits": 7,
"contributor": "Joost Schouppe" "contributor": "Joost Schouppe"
@ -336,6 +340,10 @@
"commits": 3, "commits": 3,
"contributor": "SiegbjornSitumeang" "contributor": "SiegbjornSitumeang"
}, },
{
"commits": 2,
"contributor": "מוימוי טרייצקי"
},
{ {
"commits": 2, "commits": 2,
"contributor": "lmagreault" "contributor": "lmagreault"