diff --git a/assets/layers/elevator/elevator.json b/assets/layers/elevator/elevator.json index ac773ac13d..4a00a45ce6 100644 --- a/assets/layers/elevator/elevator.json +++ b/assets/layers/elevator/elevator.json @@ -213,22 +213,26 @@ { "id": "speech_output_available", "question": { - "en": "Has this elevator speech output?" + "en": "Has this elevator speech output?", + "de": "Verfügt der Aufzug über eine Sprachausgabe?" }, "questionHint": { - "en": "E.g. it announces the current floor" + "en": "E.g. it announces the current floor", + "de": "Z.B. werden Stockwerke angesagt" }, "mappings": [ { "if": "speech_output=yes", "then": { - "en": "This elevator has speech output" + "en": "This elevator has speech output", + "de": "Der Aufzug verfügt über eine Sprachausgabe" } }, { "if": "speech_output=no", "then": { - "en": "This elevator does not have speech output" + "en": "This elevator does not have speech output", + "de": "Der Aufzug verfügt über keine Sprachausgabe" } } ] diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 64b55a87de..5d2c367178 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -1012,13 +1012,7 @@ "options": [ { "question": { - "en": "Has a vegetarian menu", - "de": "Vegetarische Gerichte im Angebot", - "es": "Tiene menú vegetariano", - "fr": "A un menu végétarien", - "nl": "Heeft een vegetarisch menu", - "pl": "Ma menu wegetariańskie", - "ca": "Té menú vegetarià" + "en": "Restaurants and fast food businesses" } }, { @@ -1048,13 +1042,8 @@ "options": [ { "question": { - "en": "Has a vegan menu", - "nl": "Heeft een veganistisch menu", - "de": "Vegane Gerichte im Angebot", - "es": "Tiene menú vegano", - "fr": "A un menu végétalien", - "pl": "Ma menu wegańskie", - "ca": "Té menú vegà" + "en": "Has a vegetarian menu", + "nl": "Heeft een vegetarisch menu" }, "osmTags": { "or": [ @@ -1072,13 +1061,13 @@ "options": [ { "question": { - "en": "Has a halal menu", - "nl": "Heeft een halal menu", - "de": "Halal Gerichte im Angebot", - "es": "Tiene menú halah", - "fr": "A un menu halal", - "da": "Har en halalmenu", - "ca": "Té menú halal" + "en": "Has a vegan menu", + "nl": "Heeft een veganistisch menu", + "de": "Vegane Gerichte im Angebot", + "es": "Tiene menú vegano", + "fr": "A un menu végétalien", + "pl": "Ma menu wegańskie", + "ca": "Té menú vegà" }, "osmTags": { "or": [ diff --git a/assets/layers/map/map.json b/assets/layers/map/map.json index 6bdc9dd296..41177739ef 100644 --- a/assets/layers/map/map.json +++ b/assets/layers/map/map.json @@ -59,7 +59,8 @@ "if": "map_type=topo", "then": { "en": "Topographical map

The map contains contour lines.

", - "de": "Topographische Katte

Die Karte enthält Höhenlinien.

" + "de": "Topographische Katte

Die Karte enthält Höhenlinien.

", + "ca": "Mapa topogràfic

El mapa conté línies de contorn.

" } }, { @@ -75,7 +76,8 @@ "then": { "en": "This is a schematic map.

A sketched map with only important ways and POIs. The angles, distances etc. are merely illustrative, not accurate.

", "de": "Dies ist eine schematische Karte.

Eine skizzierte Karte mit nur wichtigen Wegen und POIs. Die Winkel, Entfernungen usw. sind lediglich illustrativ, nicht genau.

", - "pl": "To jest mapa schematyczna.

Mapa-szkic z tylko ważnymi drogami i POI. Kąty, odległości itp. są tylko ilustratywne, niedokładne.

" + "pl": "To jest mapa schematyczna.

Mapa-szkic z tylko ważnymi drogami i POI. Kąty, odległości itp. są tylko ilustratywne, niedokładne.

", + "ca": "Això és un mapa esquemàtic.

Un mapa esbossat amb només camins importants i PDI. Els angles, els trajectes etc. són merament il·lustratius, no acurat.

" } }, { @@ -92,7 +94,8 @@ "question": { "en": "What is the size of the shown area on the map?", "de": "Was wird von der Fläche abgedeckt?", - "pl": "Jaki jest rozmiar obszaru pokazanego na tej mapie?" + "pl": "Jaki jest rozmiar obszaru pokazanego na tej mapie?", + "ca": "Quina és la mida de l'àrea mostrada en el mapa?" }, "mappings": [ { @@ -100,14 +103,16 @@ "then": { "en": "A map of the rooms within a building", "de": "Eine Karte der Räume innerhalb eines Gebäudes", - "pl": "Plan pomieszczeń w budynku" + "pl": "Plan pomieszczeń w budynku", + "ca": "Un mapa de les habitacions dins d'un edifici" } }, { "if": "map_size=site", "then": { "en": "A map of special site, like of a historical castle, a park, a campus, a forest, ....", - "de": "Örtlichkeit (z.B. Burg)" + "de": "Örtlichkeit (z.B. Burg)", + "ca": "Un mapa d'un lloc especial, com un castell històric, un parc, un campus, un bosc, …" } }, { @@ -115,7 +120,8 @@ "then": { "en": "A map showing the village or town", "de": "Eine Karte, die das Dorf oder die Stadt anzeigt", - "pl": "Mapa pokazująca wieś lub niewielkie miasto" + "pl": "Mapa pokazująca wieś lub niewielkie miasto", + "ca": "Un mapa que mostra el poble o la ciutat" } }, { @@ -123,7 +129,8 @@ "then": { "en": " A map of a city", "de": "Stadt", - "pl": " Mapa miasta" + "pl": " Mapa miasta", + "ca": " Un mapa d'una ciutat" } }, { @@ -131,7 +138,8 @@ "then": { "en": "The map of an entire region, showing multiple cities and villages", "de": "Region", - "pl": "Mapa całego regionu, pokazująca wiele miast i wsi" + "pl": "Mapa całego regionu, pokazująca wiele miast i wsi", + "ca": "El mapa d'una regió sencera, mostrant múltiples ciutats i pobles" } } ] diff --git a/assets/layers/note/note.json b/assets/layers/note/note.json index 8509ed685d..eb71c8c5e1 100644 --- a/assets/layers/note/note.json +++ b/assets/layers/note/note.json @@ -4,7 +4,8 @@ "en": "OpenStreetMap notes", "nl": "OpenStreetMap Notes", "de": "OpenStreetMap-Hinweise", - "es": "Notas de OpenStreetMap" + "es": "Notas de OpenStreetMap", + "ca": "Notes d'OpenStreetMap" }, "description": "This layer shows notes on OpenStreetMap. Having this layer in your theme will trigger the 'add new note' functionality in the 'addNewPoint'-popup (or if your theme has no presets, it'll enable adding notes)", "source": { @@ -33,7 +34,8 @@ "nl": "Gesloten Note", "de": "Geschlossene Notiz", "es": "Nota cerrada", - "pl": "Zamknięta notatka" + "pl": "Zamknięta notatka", + "ca": "Nota tancada" } } ] @@ -72,7 +74,8 @@ "en": "

Nearby images

The pictures below are nearby geotagged images and might be helpful to handle this note.", "de": "

Bilder aus der Nähe

Die folgenden Bilder sind mit Geotags versehene Bilder aus der Nähe und könnten für die Bearbeitung dieser Notiz hilfreich sein.", "es": "

Imágenes cercanas

Las imágenes de debajo son imágenes geoetiquetadas cercanas y pueden ser útiles para encargarse de esta nota.", - "nl": "

Afbeeldingen in de buurt

Onderstaande afbeeldingen zijn afbeeldingen met geo-referentie en die in de buurt genomen zijn. Mogelijks zijn ze nuttig om deze kaartnota af te handelen." + "nl": "

Afbeeldingen in de buurt

Onderstaande afbeeldingen zijn afbeeldingen met geo-referentie en die in de buurt genomen zijn. Mogelijks zijn ze nuttig om deze kaartnota af te handelen.", + "ca": "

Imatges properes

Les imatges de sota són imatges geoetiquetades properes i poden ser útils per a encarregar-se d'aquesta nota." }, "special": { "type": "nearby_images", @@ -86,7 +89,8 @@ "en": "Report {_first_user} for spam or inappropriate messages", "nl": "{_first_user} melden voor spam of ongepaste opmerkingen", "de": "", - "es": "Reportar {_first_user}" + "es": "Reportar {_first_user}", + "ca": "Reporta {_first_user} per spam o missatges inapropiats" }, "condition": "_opened_by_anonymous_user=false" }, @@ -96,7 +100,8 @@ "en": "Report this note as spam or inappropriate", "nl": "Deze note melden als spam of ongepast", "de": "Notiz als Spam oder unangemessen melden", - "es": "Reporta esta nota como spam o inapropiada" + "es": "Reporta esta nota como spam o inapropiada", + "ca": "Reporta aquesta nota com spam o inapropiada" } } ], @@ -330,7 +335,8 @@ "en": "Hide import notes", "nl": "Verberg import Notes", "de": "Importnotizen ausblenden", - "es": "Ocultar las nostras de importación" + "es": "Ocultar las notas de importación", + "ca": "Oculta les notes d'importació" } }, { @@ -339,7 +345,8 @@ "en": "Show only import Notes", "nl": "Toon enkel import Notes", "de": "Nur Importnotizen anzeigen", - "es": "Solo mostrar las notas de importación" + "es": "Solo mostrar las notas de importación", + "ca": "Mostrar només les notes d'importació" } } ] diff --git a/assets/layers/observation_tower/observation_tower.json b/assets/layers/observation_tower/observation_tower.json index d5446b2d0a..bb8c0c59e3 100644 --- a/assets/layers/observation_tower/observation_tower.json +++ b/assets/layers/observation_tower/observation_tower.json @@ -40,7 +40,8 @@ "nl": "Torens om van het uitzicht te genieten", "de": "Türme zur Aussicht auf die umgebende Landschaft", "es": "Torres con vista panorámica", - "pl": "Wieże z panoramicznym widokiem" + "pl": "Wieże z panoramicznym widokiem", + "ca": "Torres amb vista panoràmica" }, "tagRenderings": [ "images", @@ -93,7 +94,8 @@ "nl": "Deze toren is {height} hoog", "de": "Dieser Turm ist {height} hoch", "es": "Esta torre mide {height}", - "pl": "Ta wieża ma wysokość {height}" + "pl": "Ta wieża ma wysokość {height}", + "ca": "Aquesta torre fa {height}" }, "freeform": { "key": "height", @@ -141,14 +143,16 @@ "nl": "Hoeveel moet men betalen om deze toren te bezoeken?", "de": "Was kostet der Zugang zu diesem Turm?", "es": "¿Cuánto hay que pagar para entrar en esta torre?", - "pl": "Ile kosztuje wstęp na tę wieżę?" + "pl": "Ile kosztuje wstęp na tę wieżę?", + "ca": "Quant hi ha que pagar per entrar a aquesta torre?" }, "render": { "en": "Visiting this tower costs {charge}", "nl": "Deze toren bezoeken kost {charge}", "de": "Der Besuch des Turms kostet {charge}", "es": "Visitar esta torre cuesta {charge}", - "pl": "Wizyta na tej wieży kosztuje {charge}" + "pl": "Wizyta na tej wieży kosztuje {charge}", + "ca": "Visitar aquesta torre costa {charge}" }, "freeform": { "key": "charge", @@ -228,8 +232,9 @@ "en": "Does this tower have an elevator?", "nl": "Heeft deze toren een lift?", "de": "Hat dieser Turm einen Aufzug?", - "es": "¿Tiene ascensor esta torre?", - "pl": "Czy ta wieża ma windę?" + "es": "¿Esta torre tiene ascensor?", + "pl": "Czy ta wieża ma windę?", + "ca": "Aquesta torre té ascensor?" }, "mappings": [ { @@ -239,7 +244,8 @@ "nl": "Deze toren heeft een lift die bezoekers naar de top van de toren brengt", "de": "Dieser Turm verfügt über einen Aufzug, der die Besucher nach oben bringt", "es": "Esta torre tiene un ascensor que lleva a los visitantes a la cima", - "pl": "Ta wieża ma windę, która zabiera zwiedzających na górę" + "pl": "Ta wieża ma windę, która zabiera zwiedzających na górę", + "ca": "Aquesta torre té un ascensor que porta els visitants al cim" } }, { @@ -249,7 +255,8 @@ "nl": "Deze toren heeft geen lift", "de": "Dieser Turm hat keinen Aufzug", "es": "Esta torre no tiene ascensor", - "pl": "Ta wieża nie ma windy" + "pl": "Ta wieża nie ma windy", + "ca": "Aquesta torre no té ascensor" } } ], @@ -274,7 +281,8 @@ "en": "Maintained by {operator}", "de": "Betrieben von {operator}", "es": "Mantenida por {operator}", - "pl": "Obsługiwana przez {operator}" + "pl": "Obsługiwana przez {operator}", + "ca": "Mantés per {operator}" }, "freeform": { "key": "operator" diff --git a/assets/layers/parking/parking.json b/assets/layers/parking/parking.json index c61d92edbf..a37c763175 100644 --- a/assets/layers/parking/parking.json +++ b/assets/layers/parking/parking.json @@ -21,7 +21,8 @@ "de": "Parkplatz", "es": "aparcamiento de coches", "fr": "Lieu de stationnement", - "pl": "Parking samochodowy" + "pl": "Parking samochodowy", + "ca": "Aparcament de cotxes" } }, "description": { @@ -55,7 +56,8 @@ "en": "This is a parking bay next to a street", "nl": "Dit is een parkeerplek langs een weg", "de": "Dies ist eine Parkbucht neben einer Straße", - "fr": "C'est un lieu de stationnement à côté d'une route" + "fr": "C'est un lieu de stationnement à côté d'une route", + "ca": "Es tracta d'un aparcament al costat d'un carrer" } }, { @@ -76,7 +78,8 @@ "nl": "Dit is een bovengrondse parkeergarage met meerdere verdiepingen", "de": "Dies ist ein mehrstöckiges oberirdisches Parkhaus", "fr": "C'est un parking à plusieurs étages", - "pl": "To jest wielopiętrowy parking" + "pl": "To jest wielopiętrowy parking", + "ca": "Es tracta d'un garatge de diverses plantes" } }, { @@ -95,7 +98,8 @@ "nl": "Dit is een strook voor parkeren op de weg", "de": "Dies ist eine Fahrspur zum Parken auf der Straße", "fr": "C'est une voie de stationnement sur la route", - "pl": "To jest pas do parkowania na jezdni" + "pl": "To jest pas do parkowania na jezdni", + "ca": "Aquest és un carril per aparcar al carrer" } }, { @@ -122,7 +126,8 @@ "en": "This is a parking on a layby", "nl": "Dit is een parkeerplek op een layby", "de": "Hier gibt es Parkmöglichkeiten auf einem kleinen Rastplatz", - "fr": "C'est un parking sur une aire de stationnement" + "fr": "C'est un parking sur une aire de stationnement", + "ca": "Aquest és un aparcament en una zona de descans" } }, { @@ -178,7 +183,8 @@ "nl": "Er zijn geen parkeerplaatsen voor gehandicapten", "de": "Es gibt keine barrierefreien Stellplätze", "fr": "Il n'y a pas de places de stationnement pour personnes à mobilité réduite", - "pl": "Nie ma tutaj żadnych miejsc parkingowych dla niepełnosprawnych" + "pl": "Nie ma tutaj żadnych miejsc parkingowych dla niepełnosprawnych", + "ca": "No hi ha places d'aparcament per a minusvàlids" }, "hideInAnswer": true }, diff --git a/assets/layers/parking_spaces/parking_spaces.json b/assets/layers/parking_spaces/parking_spaces.json index 4126a614cd..69d9ae6676 100644 --- a/assets/layers/parking_spaces/parking_spaces.json +++ b/assets/layers/parking_spaces/parking_spaces.json @@ -4,13 +4,15 @@ "en": "Parking Spaces", "de": "Stellplätze", "nl": "Parkeerplekken", - "pl": "Miejsca parkingowe" + "pl": "Miejsca parkingowe", + "ca": "Places d'aparcament" }, "description": { "en": "Layer showing individual parking spaces.", "de": "Ebene mit den einzelnen PKW Stellplätzen.", "nl": "Laag met individuele parkeerplekken.", - "pl": "Warstwa pokazująca pojedyncze miejsca parkingowe." + "pl": "Warstwa pokazująca pojedyncze miejsca parkingowe.", + "ca": "Capa que mostra aparcaments de cotxes individuals." }, "minzoom": 19, "source": { @@ -43,7 +45,8 @@ "en": "This is a normal parking space.", "de": "Dies ist ein normaler Stellplatz.", "nl": "Dit is een normale parkeerplek.", - "pl": "To jest zwykłe miejsce parkingowe." + "pl": "To jest zwykłe miejsce parkingowe.", + "ca": "Aquesta és una plaça d'aparcament normal." } }, { @@ -52,7 +55,8 @@ "en": "This is a disabled parking space.", "de": "Dies ist ein Behindertenstellplatz.", "nl": "Dit is een gehandicaptenparkeerplaats.", - "pl": "To jest miejsce parkingowe dla niepełnosprawnych." + "pl": "To jest miejsce parkingowe dla niepełnosprawnych.", + "ca": "Aquesta és una plaça d'aparcament per a minusvàlids." } }, { @@ -61,7 +65,8 @@ "en": "This is a private parking space.", "de": "Dies ist ein privater Stellplatz.", "nl": "Dit is een privéparkeerplek.", - "pl": "To jest prywatne miejsce parkingowe." + "pl": "To jest prywatne miejsce parkingowe.", + "ca": "Es tracta d'una plaça d'aparcament privada." } }, { @@ -70,7 +75,8 @@ "en": "This is parking space reserved for charging vehicles.", "de": "Dies ist ein Stellplatz, der für das Laden von Fahrzeugen reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor het opladen van voertuigen.", - "pl": "To miejsce parkingowe jest zarezerwowane dla ładowania pojazdów." + "pl": "To miejsce parkingowe jest zarezerwowane dla ładowania pojazdów.", + "ca": "Es tracta d'una plaça d'aparcament reservada per a la recàrrega de vehicles." } }, { @@ -79,7 +85,8 @@ "en": "This is parking space reserved for deliveries.", "de": "Dies ist ein Stellplatz, der für Lieferfahrzeuge reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor leveringen.", - "pl": "To miejsce parkingowe jest przeznaczone dla dostaw." + "pl": "To miejsce parkingowe jest przeznaczone dla dostaw.", + "ca": "Es tracta d'una plaça d'aparcament reservada per a repartidors." } }, { @@ -104,7 +111,8 @@ "en": "This is parking space reserved for buses.", "de": "Dies ist ein Stellplatz, der für Busse reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor bussen.", - "pl": "To miejsce parkingowe jest przeznaczone dla busów." + "pl": "To miejsce parkingowe jest przeznaczone dla busów.", + "ca": "Es tracta d'una plaça d'aparcament reservada per a autobusos." } }, { @@ -113,7 +121,8 @@ "en": "This is parking space reserved for motorcycles.", "de": "Dies ist ein Stellplatz, der für Motorräder reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor motoren.", - "pl": "To miejsce parkingowe jest przeznaczone dla motocykli." + "pl": "To miejsce parkingowe jest przeznaczone dla motocykli.", + "ca": "Es tracta d'una plaça d'aparcament reservada per a motos." } }, { @@ -122,7 +131,8 @@ "en": "This is a parking space reserved for parents with children.", "de": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor ouders met kinderen.", - "pl": "To miejsce jest przeznaczone dla rodziców z dziećmi." + "pl": "To miejsce jest przeznaczone dla rodziców z dziećmi.", + "ca": "Es tracta d'una plaça d'aparcament reservada per a pares amb fills." } }, { @@ -131,7 +141,8 @@ "en": "This is a parking space reserved for staff.", "de": "Dies ist ein Stellplatz, der für das Personal reserviert ist.", "nl": "Deze parkeerplek is gereserveerd voor personeel.", - "pl": "To jest miejsce parkingowe przeznaczone dla pracowników." + "pl": "To jest miejsce parkingowe przeznaczone dla pracowników.", + "ca": "Es tracta d'una plaça d'aparcament reservada al personal." } }, { diff --git a/assets/layers/postoffices/postoffices.json b/assets/layers/postoffices/postoffices.json index d61face7ab..d463f9b4d2 100644 --- a/assets/layers/postoffices/postoffices.json +++ b/assets/layers/postoffices/postoffices.json @@ -59,7 +59,8 @@ }, "then": { "en": "Post partner at {name}", - "de": "Postfiliale im {name}" + "de": "Postfiliale im {name}", + "ca": "Col·laborador postal a {name}" } } ] @@ -415,7 +416,8 @@ "question": { "en": "Does this post office have an ATM?", "nl": "Heeft dit postkantoor een bankautomaat?", - "de": "Verfügt die Postfiliale über einen Geldautomat?" + "de": "Verfügt die Postfiliale über einen Geldautomat?", + "ca": "Aquesta oficina postal té un caixer automàtic?" }, "mappings": [ { @@ -423,7 +425,8 @@ "then": { "en": "This post office has an ATM", "nl": "Dit postkantoor heeft een bankautomaat", - "de": "Die Postfiliale verfügt über einen Geldautomat" + "de": "Die Postfiliale verfügt über einen Geldautomat", + "ca": "Aquesta oficina postal té un caixer automàtic" } }, { @@ -431,7 +434,8 @@ "then": { "en": "This post office does not have an ATM", "nl": "Dit postkantoor heeft geen bankautomaaat", - "de": "Die Postfiliale verfügt nicht über einen Geldautomat" + "de": "Die Postfiliale verfügt nicht über einen Geldautomat", + "ca": "Aquesta oficina postal no té un caixer automàtic" } }, { @@ -439,7 +443,8 @@ "then": { "en": "This post office does have an ATM, but it is mapped as a different icon", "nl": "Dit postkantoor heeft een bankautomaat, maar deze staat apart op de kaart aangeduid", - "de": "Die Postfiliale verfügt über einen Geldautomat, der aber bereits separat kartiert ist" + "de": "Die Postfiliale verfügt über einen Geldautomat, der aber bereits separat kartiert ist", + "ca": "Aquesta oficina postal té un caixer automàtic, però està mapejat com a un element diferent" } } ] diff --git a/assets/layers/vending_machine/condom.svg b/assets/layers/vending_machine/condom.svg new file mode 100644 index 0000000000..3d2c88a755 --- /dev/null +++ b/assets/layers/vending_machine/condom.svg @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/assets/layers/vending_machine/condom.svg.license b/assets/layers/vending_machine/condom.svg.license new file mode 100644 index 0000000000..7ac182ac73 --- /dev/null +++ b/assets/layers/vending_machine/condom.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Jesus Jezzini De Anda +SPDX-License-Identifier: CC0-1.0 \ No newline at end of file diff --git a/assets/layers/vending_machine/license_info.json b/assets/layers/vending_machine/license_info.json index c1b4502001..f910585c2d 100644 --- a/assets/layers/vending_machine/license_info.json +++ b/assets/layers/vending_machine/license_info.json @@ -1,4 +1,14 @@ [ + { + "path": "condom.svg", + "license": "CC0-1.0", + "authors": [ + " \tJesus Jezzini De Anda" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Condom_-_The_Noun_Project.svg" + ] + }, { "path": "cow.svg", "license": "CC-BY-4.0", diff --git a/assets/layers/vending_machine/vending_machine.json b/assets/layers/vending_machine/vending_machine.json index f3bdcef84e..b9a92c1ed8 100644 --- a/assets/layers/vending_machine/vending_machine.json +++ b/assets/layers/vending_machine/vending_machine.json @@ -130,7 +130,8 @@ "de": "Kondome werden verkauft", "fr": "Vent des préservatifs", "ca": "Es venen preservatius" - } + }, + "icon": "./assets/layers/vending_machine/condom.svg" }, { "if": "vending=coffee", @@ -279,6 +280,14 @@ "ca": "Es venen bitllets de transport públic" }, "icon": "./assets/themes/stations/public_transport_tickets.svg" + }, + { + "if": "vending=meat", + "then": { + "en": "Meat products are being sold", + "nl": "Vleesproducten worden hier verkocht" + }, + "icon": "./assets/layers/id_presets/temaki-meat.svg" } ], "multiAnswer": true @@ -357,7 +366,18 @@ } ] }, - "level" + "level", + { + "builtin": "phone", + "override": { + "question": { + "en": "What is the phone number of the operator of this vending machine?" + }, + "questionHint": { + "en": "This is the number you can call in case of problems with the vending machine" + } + } + } ], "calculatedTags": [ "_vending_count=feat.properties.vending.split(';').length" @@ -436,6 +456,10 @@ { "if": "vending=flowers", "then": "circle:white;./assets/layers/id_presets/maki-florist.svg" + }, + { + "if": "vending=condoms", + "then": "circle:white;./assets/layers/vending_machine/condom.svg" } ] }, @@ -777,6 +801,30 @@ "ca": "Venda de flors" }, "osmTags": "vending~i~.*flowers.*" + }, + { + "osmTags": "vending~i~.*parking_tickets.*", + "question": { + "en": "Sale of parking" + } + }, + { + "osmTags": "vending=elongated_coin", + "question": { + "en": "Sale of pressed pennies" + } + }, + { + "osmTags": "vending~i~.*public_transport_tickets.*", + "question": { + "en": "Sale of public transport tickets" + } + }, + { + "osmTags": "vending=meat", + "question": { + "en": "Sale of meat products" + } } ] } @@ -786,4 +834,4 @@ "enableRelocation": true }, "deletion": true -} \ No newline at end of file +} diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 2c38dae55b..62d38abba2 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -131,7 +131,7 @@ "render": { "en": "Change made with {host}", "ca": "Canviat fet amb {host}", - "de": "Änderung über {host}", + "de": "Geändert über {host}", "fr": "Modification faite avec {host}", "nl": "Wijziging gemaakt met {host}" }, diff --git a/langs/ca.json b/langs/ca.json index 772d018783..21c6d7381a 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -405,6 +405,9 @@ "doDelete": "Esborrar imatge", "dontDelete": "Cancel·lar", "isDeleted": "Esborrada", + "nearby": { + "seeNearby": "Explora i vincula imatges properes" + }, "pleaseLogin": "Entrar per pujar una foto", "respectPrivacy": "Respecta la privacitat. No fotografiïs gent o matrícules. No facis servir imatges de Google Maps, Google Streetview o altres fonts amb copyright.", "toBig": "La teva imatge és massa gran ara que medeix {actual_size}. Usa imatges de com a molt {max_size}", diff --git a/langs/de.json b/langs/de.json index f4b2280f8f..671f97a024 100644 --- a/langs/de.json +++ b/langs/de.json @@ -405,6 +405,11 @@ "doDelete": "Bild entfernen", "dontDelete": "Abbrechen", "isDeleted": "Gelöscht", + "nearby": { + "link": "Dieses Bild zeigt das Objekt", + "seeNearby": "Bilder in der Nähe durchsuchen und verlinken", + "title": "Straßenbilder in der Nähe" + }, "pleaseLogin": "Bitte anmelden, um ein Bild hinzuzufügen", "respectPrivacy": "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder. Benutzen Sie keine urheberrechtlich geschützten Quellen wie z.B. Google Maps oder Google Streetview.", "toBig": "Ihr Bild ist mit {actual_size} zu groß. Die maximale Bildgröße ist {max_size}", diff --git a/langs/fr.json b/langs/fr.json index 19c56011b6..7d94229915 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -279,7 +279,8 @@ "public": { "name": "Publique" } - } + }, + "title": "Envoyer votre trace sur OpenStreetMap.org" }, "weekdays": { "abbreviations": { diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 3d8ccb9d36..08e5831f0b 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -3940,9 +3940,6 @@ }, "2": { "options": { - "0": { - "question": "Té menú vegetarià" - }, "1": { "question": "Només negocis de menjar ràpid" }, @@ -3951,17 +3948,10 @@ } } }, - "3": { - "options": { - "0": { - "question": "Té menú vegà" - } - } - }, "4": { "options": { "0": { - "question": "Té menú halal" + "question": "Té menú vegà" } } }, @@ -4795,6 +4785,36 @@ } }, "question": "En quines dades es basa aquest mapa?" + }, + "map_size": { + "mappings": { + "0": { + "then": "Un mapa de les habitacions dins d'un edifici" + }, + "1": { + "then": "Un mapa d'un lloc especial, com un castell històric, un parc, un campus, un bosc, …" + }, + "2": { + "then": "Un mapa que mostra el poble o la ciutat" + }, + "3": { + "then": " Un mapa d'una ciutat" + }, + "4": { + "then": "El mapa d'una regió sencera, mostrant múltiples ciutats i pobles" + } + }, + "question": "Quina és la mida de l'àrea mostrada en el mapa?" + }, + "map_type": { + "mappings": { + "0": { + "then": "Mapa topogràfic

El mapa conté línies de contorn.

" + }, + "2": { + "then": "Això és un mapa esquemàtic.

Un mapa esbossat amb només camins importants i PDI. Els angles, els trajectes etc. són merament il·lustratius, no acurat.

" + } + } } }, "title": { @@ -5061,18 +5081,56 @@ } }, "note": { + "filter": { + "10": { + "options": { + "1": { + "question": "Oculta les notes d'importació" + }, + "2": { + "question": "Mostrar només les notes d'importació" + } + } + } + }, + "name": "Notes d'OpenStreetMap", + "tagRenderings": { + "nearby-images": { + "render": { + "before": "

Imatges properes

Les imatges de sota són imatges geoetiquetades properes i poden ser útils per a encarregar-se d'aquesta nota." + } + }, + "report-contributor": { + "render": "Reporta {_first_user} per spam o missatges inapropiats" + }, + "report-note": { + "render": "Reporta aquesta nota com spam o inapropiada" + } + }, "title": { + "mappings": { + "0": { + "then": "Nota tancada" + } + }, "render": "Nota" } }, "observation_tower": { + "description": "Torres amb vista panoràmica", "name": "Torres d'observació", "tagRenderings": { + "Fee": { + "question": "Quant hi ha que pagar per entrar a aquesta torre?", + "render": "Visitar aquesta torre costa {charge}" + }, "Height": { - "question": "Quina és l'alçada d'aquesta torre?" + "question": "Quina és l'alçada d'aquesta torre?", + "render": "Aquesta torre fa {height}" }, "Operator": { - "question": "Qui manté aquesta torre?" + "question": "Qui manté aquesta torre?", + "render": "Mantés per {operator}" }, "access": { "mappings": { @@ -5085,6 +5143,17 @@ }, "question": "Es pot visitar aquesta torre?" }, + "elevator": { + "mappings": { + "0": { + "then": "Aquesta torre té un ascensor que porta els visitants al cim" + }, + "1": { + "then": "Aquesta torre no té ascensor" + } + }, + "question": "Aquesta torre té ascensor?" + }, "name": { "mappings": { "0": { @@ -5272,6 +5341,9 @@ "0": { "then": "Hi ha places d'aparcament per a gent amb mobilitat reduïda, però no es sap quantes" }, + "1": { + "then": "No hi ha places d'aparcament per a minusvàlids" + }, "2": { "then": "No hi ha places d'aparcament per a persones amb mobilitat reduïda" } @@ -5284,15 +5356,32 @@ "0": { "then": "Aquest és un aparcament en superfície" }, + "1": { + "then": "Es tracta d'un aparcament al costat d'un carrer" + }, "2": { "then": "Aquest és un aparcament subterrani" + }, + "3": { + "then": "Es tracta d'un garatge de diverses plantes" + }, + "5": { + "then": "Aquest és un carril per aparcar al carrer" + }, + "8": { + "then": "Aquest és un aparcament en una zona de descans" } }, "question": "Quin tipus d'aparcament és aquest?" } + }, + "title": { + "render": "Aparcament de cotxes" } }, "parking_spaces": { + "description": "Capa que mostra aparcaments de cotxes individuals.", + "name": "Places d'aparcament", "tagRenderings": { "capacity": { "mappings": { @@ -5306,6 +5395,33 @@ "mappings": { "0": { "then": "És un lloc normal d'aparcament." + }, + "1": { + "then": "Aquesta és una plaça d'aparcament normal." + }, + "2": { + "then": "Aquesta és una plaça d'aparcament per a minusvàlids." + }, + "3": { + "then": "Es tracta d'una plaça d'aparcament privada." + }, + "4": { + "then": "Es tracta d'una plaça d'aparcament reservada per a la recàrrega de vehicles." + }, + "5": { + "then": "Es tracta d'una plaça d'aparcament reservada per a repartidors." + }, + "8": { + "then": "Es tracta d'una plaça d'aparcament reservada per a autobusos." + }, + "9": { + "then": "Es tracta d'una plaça d'aparcament reservada per a motos." + }, + "10": { + "then": "Es tracta d'una plaça d'aparcament reservada per a pares amb fills." + }, + "11": { + "then": "Es tracta d'una plaça d'aparcament reservada al personal." } } } @@ -5512,6 +5628,20 @@ } }, "tagRenderings": { + "has_atm": { + "mappings": { + "0": { + "then": "Aquesta oficina postal té un caixer automàtic" + }, + "1": { + "then": "Aquesta oficina postal no té un caixer automàtic" + }, + "2": { + "then": "Aquesta oficina postal té un caixer automàtic, però està mapejat com a un element diferent" + } + }, + "question": "Aquesta oficina postal té un caixer automàtic?" + }, "letter-from": { "mappings": { "0": { @@ -5606,6 +5736,11 @@ } }, "title": { + "mappings": { + "1": { + "then": "Col·laborador postal a {name}" + } + }, "render": "Oficina de correus" } }, diff --git a/langs/layers/da.json b/langs/layers/da.json index c292c0ae06..b47321dca9 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -2063,13 +2063,6 @@ }, "food": { "filter": { - "4": { - "options": { - "0": { - "question": "Har en halalmenu" - } - } - }, "5": { "options": { "0": { diff --git a/langs/layers/de.json b/langs/layers/de.json index c69e5f4617..d4e1387ef7 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -4202,6 +4202,18 @@ } } }, + "speech_output_available": { + "mappings": { + "0": { + "then": "Der Aufzug verfügt über eine Sprachausgabe" + }, + "1": { + "then": "Der Aufzug verfügt über keine Sprachausgabe" + } + }, + "question": "Verfügt der Aufzug über eine Sprachausgabe?", + "questionHint": "Z.B. werden Stockwerke angesagt" + }, "tactile_writing_language": { "render": { "special": { @@ -4839,9 +4851,6 @@ }, "2": { "options": { - "0": { - "question": "Vegetarische Gerichte im Angebot" - }, "1": { "question": "Nur Fastfood-Geschäfte" }, @@ -4850,17 +4859,10 @@ } } }, - "3": { - "options": { - "0": { - "question": "Vegane Gerichte im Angebot" - } - } - }, "4": { "options": { "0": { - "question": "Halal Gerichte im Angebot" + "question": "Vegane Gerichte im Angebot" } } }, diff --git a/langs/layers/en.json b/langs/layers/en.json index dba18196cc..8593731189 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -4892,7 +4892,7 @@ "2": { "options": { "0": { - "question": "Has a vegetarian menu" + "question": "Restaurants and fast food businesses" }, "1": { "question": "Only fastfood businesses" @@ -4905,14 +4905,14 @@ "3": { "options": { "0": { - "question": "Has a vegan menu" + "question": "Has a vegetarian menu" } } }, "4": { "options": { "0": { - "question": "Has a halal menu" + "question": "Has a vegan menu" } } }, @@ -9872,6 +9872,18 @@ }, "16": { "question": "Sale of flowers" + }, + "17": { + "question": "Sale of parking" + }, + "18": { + "question": "Sale of pressed pennies" + }, + "19": { + "question": "Sale of public transport tickets" + }, + "20": { + "question": "Sale of meat products" } } } @@ -9904,6 +9916,12 @@ "question": "Who operates this vending machine?", "render": "This vending machine is operated by {operator}" }, + "phone": { + "override": { + "question": "What is the phone number of the operator of this vending machine?", + "questionHint": "This is the number you can call in case of problems with the vending machine" + } + }, "vending": { "mappings": { "0": { @@ -9962,6 +9980,9 @@ }, "18": { "then": "Public transport tickets are sold" + }, + "19": { + "then": "Meat products are being sold" } }, "question": "What does this vending machine sell?", diff --git a/langs/layers/es.json b/langs/layers/es.json index b05d4a0e5e..96bab0796e 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -2679,24 +2679,10 @@ }, "description": "Una capa mostrando restaurantes y locales de comida rápida (con un renderizado especial para friterías)", "filter": { - "2": { - "options": { - "0": { - "question": "Tiene menú vegetariano" - } - } - }, - "3": { - "options": { - "0": { - "question": "Tiene menú vegano" - } - } - }, "4": { "options": { "0": { - "question": "Tiene menú halah" + "question": "Tiene menú vegano" } } }, @@ -3215,7 +3201,7 @@ "question": "Todas las notas" }, "1": { - "question": "Ocultar las nostras de importación" + "question": "Ocultar las notas de importación" }, "2": { "question": "Solo mostrar las notas de importación" @@ -3282,7 +3268,7 @@ "then": "Esta torre no tiene ascensor" } }, - "question": "¿Tiene ascensor esta torre?" + "question": "¿Esta torre tiene ascensor?" }, "name": { "mappings": { diff --git a/langs/layers/fr.json b/langs/layers/fr.json index 21915cd191..15583d684a 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -3409,9 +3409,6 @@ }, "2": { "options": { - "0": { - "question": "A un menu végétarien" - }, "1": { "question": "Seulement les fastfood" }, @@ -3420,17 +3417,10 @@ } } }, - "3": { - "options": { - "0": { - "question": "A un menu végétalien" - } - } - }, "4": { "options": { "0": { - "question": "A un menu halal" + "question": "A un menu végétalien" } } }, diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 3961df739b..460b43f845 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -4526,24 +4526,17 @@ } } }, - "2": { + "3": { "options": { "0": { "question": "Heeft een vegetarisch menu" } } }, - "3": { - "options": { - "0": { - "question": "Heeft een veganistisch menu" - } - } - }, "4": { "options": { "0": { - "question": "Heeft een halal menu" + "question": "Heeft een veganistisch menu" } } }, @@ -9147,6 +9140,9 @@ }, "18": { "then": "Openbaar vervoerkaartjes worden verkocht" + }, + "19": { + "then": "Vleesproducten worden hier verkocht" } }, "question": "Wat verkoopt deze verkoopautomaat?", diff --git a/langs/layers/pl.json b/langs/layers/pl.json index 3624477a40..606dc16b08 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -1473,9 +1473,6 @@ }, "2": { "options": { - "0": { - "question": "Ma menu wegetariańskie" - }, "1": { "question": "Tylko fast-foody" }, @@ -1484,7 +1481,7 @@ } } }, - "3": { + "4": { "options": { "0": { "question": "Ma menu wegańskie" diff --git a/langs/themes/de.json b/langs/themes/de.json index 8a31bbcd5b..d528c5bb6a 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -925,7 +925,7 @@ }, "host": { "question": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?", - "render": "Änderung über {host}" + "render": "Geändert über {host}" }, "locale": { "question": "In welcher Benutzersprache wurde diese Änderung vorgenommen?", diff --git a/src/Logic/Tags/TagUtils.ts b/src/Logic/Tags/TagUtils.ts index 91ce6c5e1d..f319f13162 100644 --- a/src/Logic/Tags/TagUtils.ts +++ b/src/Logic/Tags/TagUtils.ts @@ -98,7 +98,7 @@ export class TagUtils { "Invalid type to flatten the multiAnswer: key is a regex too", tagsFilter ) - throw "Invalid type to FlattenMultiAnswer" + throw "Invalid type to FlattenMultiAnswer: key is a regex too" } const keystr = key if (keyValues[keystr] === undefined) { @@ -109,7 +109,10 @@ export class TagUtils { } console.error("Invalid type to flatten the multiAnswer", tagsFilter) - throw "Invalid type to FlattenMultiAnswer" + throw ( + "Invalid type to FlattenMultiAnswer, not one of RegexTag, Tag or And: " + + tagsFilter.asHumanString(false, false, {}) + ) } return keyValues } diff --git a/src/Logic/UIEventSource.ts b/src/Logic/UIEventSource.ts index 39db7dd4e5..b726465391 100644 --- a/src/Logic/UIEventSource.ts +++ b/src/Logic/UIEventSource.ts @@ -357,14 +357,18 @@ class ListenerTracker { let toDelete = undefined let startTime = new Date().getTime() / 1000 for (const callback of this._callbacks) { - if (callback(data) === true) { - // This callback wants to be deleted - // Note: it has to return precisely true in order to avoid accidental deletions - if (toDelete === undefined) { - toDelete = [callback] - } else { - toDelete.push(callback) + try { + if (callback(data) === true) { + // This callback wants to be deleted + // Note: it has to return precisely true in order to avoid accidental deletions + if (toDelete === undefined) { + toDelete = [callback] + } else { + toDelete.push(callback) + } } + } catch (e) { + console.error("Got an error while running a callback:", e) } } let endTime = new Date().getTime() / 1000 diff --git a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte index 237568e0e1..d50d0efcdd 100644 --- a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte +++ b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte @@ -54,6 +54,7 @@ if ( confg.mappings?.length > 0 && + confg.multiAnswer && (checkedMappings === undefined || checkedMappings?.length < confg.mappings.length + (confg.freeform ? 1 : 0)) ) {