diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index eed10093e..7ed51de84 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -560,7 +560,8 @@ "he": "גילוף בעץ", "eu": "Egur taila", "pl": "Rzeźbienie w drewnie", - "pt_BR": "Entalhe" + "pt_BR": "Entalhe", + "it": "Scultura in legno" } } ], @@ -755,7 +756,8 @@ "ca": "Què representa aquesta obra d'art?", "he": "מה מתארת היצירה הזו?", "pl": "Co przedstawia to dzieło sztuki?", - "pt_BR": "O que esta obra de arte representa?" + "pt_BR": "O que esta obra de arte representa?", + "it": "Che cosa rappresenta quest'opera d'arte?" }, "freeform": { "key": "subject:wikidata", @@ -772,7 +774,8 @@ "ca": "Aquesta obra d'art representa {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}", "fr": "Cette œuvre dépeint {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}", "pl": "To dzieło sztuki przedstawia {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}", - "pt_BR": "Essa arte representa {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}" + "pt_BR": "Essa arte representa {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}", + "it": "Quest'opera d'arte rappresenta {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}" }, "labels": [ "artwork-question" @@ -792,7 +795,8 @@ "pl": "Czy to dzieło sztuki pełni funkcję ławki?", "pt_BR": "Essa obra de arte serve como banco?", "es": "¿Sirve esta obra de arte como banco?", - "pt": "Esta obra de arte serve como banco?" + "pt": "Esta obra de arte serve como banco?", + "it": "Quest'opera d'arte funge da panchina?" }, "mappings": [ { @@ -808,7 +812,8 @@ "pl": "To dzieło sztuki pełni również funkcję ławki", "pt_BR": "Essa obra de arte também serve como banco", "es": "Esta obra de arte también sirve de banco", - "pt": "Esta obra de arte também serve como banco" + "pt": "Esta obra de arte também serve como banco", + "it": "Quest'opera d'arte funge anche da panchina" } }, { @@ -825,7 +830,8 @@ "pl": "To dzieło sztuki nie pełni funkcji ławki", "pt_BR": "Essa obra de arte não serve como banco", "es": "Esta obra no sirve de banco", - "pt": "Esta obra de arte não serve como banco" + "pt": "Esta obra de arte não serve como banco", + "it": "Quest'opera d'arte non funge anche da panchina" } }, { @@ -842,7 +848,8 @@ "pl": "To dzieło sztuki nie pełni funkcji ławki", "pt_BR": "Essa obra de arte não serve como banco", "es": "Esta obra no sirve de banco", - "pt": "Esta obra de arte não serve como banco" + "pt": "Esta obra de arte não serve como banco", + "it": "Quest'opera d'arte non funge anche da panchina" }, "hideInAnswer": true } diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json index aaf06d8fe..e873ec3b2 100644 --- a/assets/layers/atm/atm.json +++ b/assets/layers/atm/atm.json @@ -13,7 +13,8 @@ "pl": "Bankomaty", "pt_BR": "Caixas eletrônicos", "es": "Cajeros automáticos", - "pt": "Multibancos" + "pt": "Multibancos", + "it": "Sportelli Bancomat" }, "description": { "en": "ATMs to withdraw money", @@ -27,7 +28,8 @@ "he": "כספומטים למשיכת כסף", "pl": "Bankomaty do wypłacania pieniędzy", "pt_BR": "Caixas eletrônicos para sacar dinheiro", - "pt": "Multibancos para levantar dinheiro" + "pt": "Multibancos para levantar dinheiro", + "it": "Sportello Bancomat per prelevare denaro" }, "source": { "osmTags": "amenity=atm" @@ -103,7 +105,8 @@ "pl": "bankomat", "pt_BR": "um caixa eletrônico", "es": "Un cajero automático", - "pt": "um multibanco" + "pt": "um multibanco", + "it": "Uno sportello bancomat" } } ], @@ -123,7 +126,8 @@ "pl": "Nazwa tego bankomatu to {name}", "pt_BR": "O nome desse caixa eletrônico é {name}", "es": "El nombre del banco de este cajero automático es {name}", - "pt": "O nome deste multibanco é {name}" + "pt": "O nome deste multibanco é {name}", + "it": "Il nome di questo sportello bancomat è {name}" }, "condition": "name~*" }, @@ -206,7 +210,8 @@ "eu": "Operadorea", "pt_BR": "Operador", "es": "Operador", - "pt": "Operador" + "pt": "Operador", + "it": "Operatore" } }, "render": { @@ -237,7 +242,8 @@ "he": "האם אתה יכול למשוך מזומן מהכספומט הזה?", "pt_BR": "Você pode sacar dinheiro nesse caixa eletrônico?", "es": "¿Se puede sacar dinero de este cajero?", - "pt": "Pode levantar dinheiro neste multibanco?" + "pt": "Pode levantar dinheiro neste multibanco?", + "it": "Puoi prelevare dei contanti da questo sportello bancomat?" }, "mappings": [ { @@ -253,7 +259,8 @@ "pl": "Z tego bankomatu można wypłacić pieniądze", "pt_BR": "Você pode sacar dinheiro nesse caixa eletrônico", "es": "Puede retirar dinero de este cajero automático", - "pt": "Pode levantar dinheiro neste multibanco" + "pt": "Pode levantar dinheiro neste multibanco", + "it": "Puoi prelevare dei contanti da questo sportello bancomat" }, "hideInAnswer": true }, @@ -268,7 +275,8 @@ "he": "אתה יכול למשוך מזומן מהכספומט הזה", "pt_BR": "Você pode sacar dinheiro nesse caixa eletrônico", "es": "Puede retirar dinero de este cajero automático", - "pt": "Pode levantar dinheiro neste multibanco" + "pt": "Pode levantar dinheiro neste multibanco", + "it": "Puoi prelevare dei contanti da questo sportello bancomat" } }, { @@ -282,7 +290,8 @@ "he": "לא ניתן למשוך מזומן מכספומט זה", "pt_BR": "Você não pode sacar dinheiro nesse caixa eletrônico", "es": "No puede retirar dinero de este cajero automático", - "pt": "Não pode levantar dinheiro neste multibanco" + "pt": "Não pode levantar dinheiro neste multibanco", + "it": "Non puoi prelevare dei contanti da questo sportello bancomat" } } ] @@ -300,7 +309,8 @@ "pl": "Czy ten bankomat pozwala wpłacać pieniądze?", "pt_BR": "Você pode depositar dinheiro nesse caixa eletrônico?", "es": "¿Se puede ingresar dinero en efectivo en este cajero?", - "pt": "Pode depositar dinheiro neste multibanco?" + "pt": "Pode depositar dinheiro neste multibanco?", + "it": "Puoi depositare dei contanti in questo sportello bancomat?" }, "mappings": [ { @@ -317,7 +327,8 @@ "pl": "Prawdopodobnie ten bankomat nie pozwala wpłacać pieniędzy", "pt_BR": "Você provavelmente não pode depositar dinheiro nesse caixa eletrônico", "es": "Es probable que no pueda ingresar dinero en efectivo en este cajero automático", - "pt": "Provavelmente não pode depositar dinheiro neste multibanco" + "pt": "Provavelmente não pode depositar dinheiro neste multibanco", + "it": "Probabilmente non puoi depositare dei contanti in questo sportello bancomat" }, "hideInAnswer": true }, @@ -335,7 +346,8 @@ "pl": "Ten bankomat pozwala wpłacać pieniądze", "pt_BR": "Você pode depositar dinheiro nesse caixa eletrônico", "es": "Puede ingresar dinero en efectivo en este cajero automático", - "pt": "Pode depositar dinheiro neste mutibanco" + "pt": "Pode depositar dinheiro neste mutibanco", + "it": "Puoi depositare dei contanti in questo sportello bancomat" } }, { @@ -352,7 +364,8 @@ "pl": "Ten bankomat nie pozwala wpłacać pieniędzy", "pt_BR": "Você não pode depositar dinheiro nesse caixa eletrônico", "es": "No se puede ingresar dinero en efectivo en este cajero automático", - "pt": "Não pode depositar dinheiro neste multibanco" + "pt": "Não pode depositar dinheiro neste multibanco", + "it": "Non puoi depositare dei contanti in questo sportello bancomat" } } ] @@ -386,7 +399,8 @@ "pl": "Jakie banknoty można tutaj wypłacić?", "pt_BR": "Quais notas você pode sacar aqui?", "es": "¿Qué billetes puede retirar aquí?", - "pt": "Quais notas pode levantar aqui?" + "pt": "Quais notas pode levantar aqui?", + "it": "Quali banconote si possono ritirare qui?" }, "multiAnswer": true, "mappings": [ @@ -402,7 +416,8 @@ "fr": "On peut retirer des billets de 5 euros", "pt_BR": "Notas de 5 euros podem ser sacadas", "es": "Se pueden retirar billetes de 5 euros", - "pt": "Notas de 5 euros podem ser levantadas" + "pt": "Notas de 5 euros podem ser levantadas", + "it": "Si possono prelevare banconote da 5 euro" } }, { @@ -417,7 +432,8 @@ "fr": "On peut retirer des billets de 10 euros", "pt_BR": "Notas de 10 euros podem ser sacadas", "es": "Se pueden retirar billetes de 10 euros", - "pt": "Notas de 10 euros podem ser levantadas" + "pt": "Notas de 10 euros podem ser levantadas", + "it": "Si possono prelevare banconote da 10 euro" } }, { @@ -432,7 +448,8 @@ "fr": "On peut retirer des billets de 20 euros", "pt_BR": "Notas de 20 euros podem ser sacadas", "es": "Se pueden retirar billetes de 20 euros", - "pt": "Notas de 20 euros podem ser levantadas" + "pt": "Notas de 20 euros podem ser levantadas", + "it": "Si possono prelevare banconote da 20 euro" } }, { @@ -447,7 +464,8 @@ "fr": "On peut retirer des billets de 50 euros", "pt_BR": "Notas de 50 euros podem ser sacadas", "es": "Se pueden retirar billetes de 50 euros", - "pt": "Notas de 50 euros podem ser levantadas" + "pt": "Notas de 50 euros podem ser levantadas", + "it": "Si possono prelevare banconote da 50 euro" } }, { @@ -462,7 +480,8 @@ "fr": "On peut retirer des billets de 100 euros", "pt_BR": "Notas de 100 euros podem ser sacadas", "es": "Se pueden retirar billetes de 100 euros", - "pt": "Notas de 100 euros podem ser levantadas" + "pt": "Notas de 100 euros podem ser levantadas", + "it": "Si possono prelevare banconote da 100 euro" } }, { @@ -477,7 +496,8 @@ "fr": "On peut retirer des billets de 200 euros", "pt_BR": "Notas de 200 euros podem ser sacadas", "es": "Se pueden retirar billetes de 200 euros", - "pt": "Notas de 200 euros podem ser levantadas" + "pt": "Notas de 200 euros podem ser levantadas", + "it": "Non si possono prelevare banconote da 200 euro" } }, { @@ -492,7 +512,8 @@ "fr": "On peut retirer des billets de 500 euros", "pt_BR": "Notas de 500 euros podem ser sacadas", "es": "Se pueden retirar billetes de 500 euros", - "pt": "Notas de 500 euros podem ser levantadas" + "pt": "Notas de 500 euros podem ser levantadas", + "it": "Non si possono prelevare banconote da 500 euro" } } ] @@ -560,25 +581,25 @@ "pt": "Em que línguas este multibanco tem saída de fala?" }, "render_list_item": { - "en": "This ATM has speech output in {language():font-bold}", - "de": "Dieser Geldautomat hat eine Sprachausgabe in {language():font-bold}", - "nl": "Deze geldautomaat heeft spraak in {language():font-bold}", - "ca": "Aquest caixer té sortida de veu en {language():font-bold}", - "cs": "Tento bankomat má řečový výstup v {language():font-bold}", - "he": "לכספומט הזה יש פלט דיבור ב {language():font-bold}", - "pt_BR": "Este caixa eletrônico tem saída de fala em {language():font-bold}", - "es": "Este cajero automático tiene salida de voz en {language():font-bold}", - "pt": "Este multibanco tem saída de fala em {language():font-bold}" + "en": "This ATM has speech output in {language()}", + "de": "Dieser Geldautomat hat eine Sprachausgabe in {language()}", + "nl": "Deze geldautomaat heeft spraak in {language()}", + "ca": "Aquest caixer té sortida de veu en {language()}", + "cs": "Tento bankomat má řečový výstup v {language()}", + "he": "לכספומט הזה יש פלט דיבור ב {language()}", + "pt_BR": "Este caixa eletrônico tem saída de fala em {language()}", + "es": "Este cajero automático tiene salida de voz en {language()}", + "pt": "Este multibanco tem saída de fala em {language()}" }, "render_single_language": { - "en": "This ATM has speech output in {language():font-bold}", - "de": "Dieser Geldautomat hat eine Sprachausgabe in {language():font-bold}", - "nl": "Deze automaat heeft spraak in {language():font-bold}", - "ca": "Aquest caixer té sortida de veu en {language():font-bold}", - "cs": "Tento bankomat má řečový výstup v {language():font-bold}", - "he": "לכספומט הזה יש פלט דיבור ב {language():font-bold}", - "pt_BR": "Este caixa eletrônico tem saída de fala em {language():font-bold}", - "es": "Este cajero automático tiene salida de voz en {language():font-bold}" + "en": "This ATM has speech output in {language()}", + "de": "Dieser Geldautomat hat eine Sprachausgabe in {language()}", + "nl": "Deze automaat heeft spraak in {language()}", + "ca": "Aquest caixer té sortida de veu en {language()}", + "cs": "Tento bankomat má řečový výstup v {language()}", + "he": "לכספומט הזה יש פלט דיבור ב {language()}", + "pt_BR": "Este caixa eletrônico tem saída de fala em {language()}", + "es": "Este cajero automático tiene salida de voz en {language()}" } } } diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index 6e273a38f..d12d473a6 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -175,8 +175,8 @@ "question": { "en": "Which vehicles are allowed to charge here?", "nl": "Welke voertuigen kunnen hier opgeladen worden?", - "de": "Welche Fahrzeuge können hier laden?", - "ca": "Quins vehicles tenen permesa la càrrega aquí?" + "ca": "Quins vehicles tenen permesa la càrrega aquí?", + "de": "Welche Fahrzeuge können hier laden?" }, "multiAnswer": true, "mappings": [ @@ -186,8 +186,8 @@ "then": { "en": "Bicycles can be charged here", "nl": "Elektrische fietsen kunnen hier opgeladen worden", - "de": "Hier können Fahrräder laden", - "ca": "Aquí es poden carregar bicicletes" + "ca": "Aquí es poden carregar bicicletes", + "de": "Hier können Fahrräder laden" } }, { @@ -196,8 +196,8 @@ "then": { "en": "Cars can be charged here", "nl": "Elektrische auto's kunnen hier opgeladen worden", - "de": "Hier können Autos laden", - "ca": "Aquí es poden carregar cotxes" + "ca": "Aquí es poden carregar cotxes", + "de": "Hier können Autos laden" } }, { @@ -206,8 +206,8 @@ "then": { "en": "Scooters can be charged here", "nl": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden", - "de": "Hier können Roller laden", - "ca": "Aquí es poden carregar Scooters" + "ca": "Aquí es poden carregar Scooters", + "de": "Hier können Roller laden" } }, { @@ -216,8 +216,8 @@ "then": { "en": "Heavy good vehicles (such as trucks) can be charged here", "nl": "Vrachtwagens kunnen hier opgeladen worden", - "de": "Hier können LKW laden", - "ca": "Aquí es poden carregar camions o trailers" + "ca": "Aquí es poden carregar camions o trailers", + "de": "Hier können LKW laden" } }, { @@ -226,8 +226,8 @@ "then": { "en": "Buses can be charged here", "nl": "Bussen kunnen hier opgeladen worden", - "de": "Hier können Busse laden", - "ca": "Aquí es poden carregar autobusos" + "ca": "Aquí es poden carregar autobusos", + "de": "Hier können Busse laden" } } ] @@ -237,14 +237,14 @@ "question": { "en": "Who is allowed to use this charging station?", "nl": "Wie mag er dit oplaadpunt gebruiken?", - "de": "Wer darf diese Ladestation benutzen?", - "ca": "Qui pot utilitzar aquesta estació de càrrega?" + "ca": "Qui pot utilitzar aquesta estació de càrrega?", + "de": "Wer darf diese Ladestation benutzen?" }, "render": { "en": "Access is {access}", "nl": "Toegang voor {access}", - "de": "Zugang ist {access}", - "ca": "L'accés està {access}" + "ca": "L'accés està {access}", + "de": "Zugang ist {access}" }, "freeform": { "key": "access", @@ -258,8 +258,8 @@ "then": { "en": "Anyone can use this charging station (payment might be needed)", "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", - "de": "Jeder kann die Station nutzen (eventuell gegen Bezahlung)", - "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)" + "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)", + "de": "Jeder kann die Station nutzen (eventuell gegen Bezahlung)" } }, { @@ -267,8 +267,8 @@ "then": { "en": "Anyone can use this charging station (payment might be needed)", "nl": "Toegankelijk voor iedereen (mogelijks met aanmelden en/of te betalen)", - "de": "Jeder kann diese Ladestation nutzen (eventuell gegen Bezahlung)", - "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)" + "ca": "Qualsevol persona pot utilitzar aquesta estació de recàrrega (pot ser calgui un pagament)", + "de": "Jeder kann diese Ladestation nutzen (eventuell gegen Bezahlung)" }, "hideInAnswer": true }, @@ -277,8 +277,8 @@ "then": { "en": "Only customers of the place this station belongs to can use this charging station
E.g. a charging station operated by hotel which is only usable by their guests", "nl": "Enkel klanten van de bijhorende plaats mogen dit oplaadpunt gebruiken
Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel", - "de": "Nur Kunden des Ortes, zu dem diese Station gehört, können diese Ladestation nutzen
Z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann", - "ca": "Sols clientes del lloc al que pertany aquest punt de càrrega poden utilitzar-lo
p.e. un punt de càrrega d'un hotel que sols poden utilizar-los els hostes" + "ca": "Sols clientes del lloc al que pertany aquest punt de càrrega poden utilitzar-lo
p.e. un punt de càrrega d'un hotel que sols poden utilizar-los els hostes", + "de": "Nur Kunden des Ortes, zu dem diese Station gehört, können diese Ladestation nutzen
Z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann" } }, { @@ -286,8 +286,8 @@ "then": { "en": "A key must be requested to access this charging station
E.g. a charging station operated by hotel which is only usable by their guests, which receive a key from the reception to unlock the charging station", "nl": "Een sleutel is nodig om dit oplaadpunt te gebruiken
Bv. voor klanten van een hotel of een bar, die de sleutel aan de receptie kunnen krijgen", - "de": "Für den Zugang zur Station muss ein Schlüssel angefordert werden
z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann, die an der Rezeption einen Schlüssel erhalten, um die Ladestation aufzuschließen", - "ca": "S'ha de sol·licitar una clau per a utilitzar aquest punt de càrrega
p.e un punt de càrrega operat per un hotel nomes utilitzable pel seus hostes, els quals reben una clau des de recepció per a desbloquejar el punt de càrrega" + "ca": "S'ha de sol·licitar una clau per a utilitzar aquest punt de càrrega
p.e un punt de càrrega operat per un hotel nomes utilitzable pel seus hostes, els quals reben una clau des de recepció per a desbloquejar el punt de càrrega", + "de": "Für den Zugang zur Station muss ein Schlüssel angefordert werden
z.B. eine von einem Hotel betriebene Ladestation, die nur von dessen Gästen genutzt werden kann, die an der Rezeption einen Schlüssel erhalten, um die Ladestation aufzuschließen" } }, { @@ -295,8 +295,8 @@ "then": { "en": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)", "nl": "Niet toegankelijk voor het publiek
Bv. enkel toegankelijk voor de eigenaar, medewerkers ,... ", - "de": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, …)", - "ca": "No accessible per al públic general (p.e. només accessible pels propietaris, empleats, ...)" + "ca": "No accessible per al públic general (p.e. només accessible pels propietaris, empleats, ...)", + "de": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, ...)" } }, { @@ -304,8 +304,8 @@ "then": { "en": "This charging station is accessible to the public during certain hours or conditions. Restrictions might apply, but general use is allowed.", "nl": "Dit oplaadstation is publiek toegankelijk onder voorwaarden (bv. enkel tijdens bepaalde uren). ", - "de": "Diese Ladestation ist zu gewissen Öffnungszeiten oder Bedingungen öffentlich zugänglich. Einschränkungen sind möglich, aber generelle Nutzung ist erlaubt.", - "ca": "Aquesta estació de càrrega és accessible al públic durant certes hores o condicions. Es poden aplicar restriccions, però es permet l'ús general." + "ca": "Aquesta estació de càrrega és accessible al públic durant certes hores o condicions. Es poden aplicar restriccions, però es permet l'ús general.", + "de": "Diese Ladestation ist zu gewissen Öffnungszeiten oder Bedingungen öffentlich zugänglich. Einschränkungen sind möglich, aber generelle Nutzung ist erlaubt." } } ] @@ -315,14 +315,14 @@ "render": { "en": "{capacity} vehicles can be charged here at the same time", "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden", - "de": "Hier können {capacity} Fahrzeuge gleichzeitig laden", - "ca": "Aquí poden carregar {capacity} vehicles a l'hora" + "ca": "Aquí poden carregar {capacity} vehicles a l'hora", + "de": "Hier können {capacity} Fahrzeuge gleichzeitig laden" }, "question": { "en": "How much vehicles can be charged here at the same time?", "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?", - "de": "Wie viele Fahrzeuge können hier gleichzeitig laden?", - "ca": "Quants vehicles poden carregar a la vegada?" + "ca": "Quants vehicles poden carregar a la vegada?", + "de": "Wie viele Fahrzeuge können hier gleichzeitig laden?" }, "freeform": { "key": "capacity", @@ -344,8 +344,8 @@ "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", - "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", - "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)" + "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, "icon": { "path": "./assets/layers/charging_station/CEE7_4F.svg", @@ -439,8 +439,8 @@ "then": { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", - "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)", - "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)" + "ca": "Endoll de paret Schuko sense pin a terra (CEE7/4 tipus F)", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, "hideInAnswer": true, "icon": { @@ -454,8 +454,8 @@ "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", "nl": "Europese stekker met aardingspin (CEE7/4 type E)", - "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", - "ca": "Endoll de paret Europeu amb pin a terra (CEE7/4 tipus E)" + "ca": "Endoll de paret Europeu amb pin a terra (CEE7/4 tipus E)", + "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" }, "icon": { "path": "./assets/layers/charging_station/TypeE.svg", @@ -518,8 +518,8 @@ "then": { "en": "European wall plug with ground pin (CEE7/4 type E)", "nl": "Europese stekker met aardingspin (CEE7/4 type E)", - "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)", - "ca": "Endoll de paret Europeu amb pin a terra (CEE7/4 tipus E)" + "ca": "Endoll de paret Europeu amb pin a terra (CEE7/4 tipus E)", + "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" }, "hideInAnswer": true, "icon": { @@ -533,8 +533,8 @@ "then": { "en": "Chademo", "nl": "Chademo", - "de": "Chademo-Anschluss", - "ca": "CHAdeMo" + "ca": "CHAdeMo", + "de": "Chademo-Anschluss" }, "icon": { "path": "./assets/layers/charging_station/Chademo_type4.svg", @@ -577,8 +577,8 @@ "then": { "en": "Chademo", "nl": "Chademo", - "de": "Chademo-Anschluss", - "ca": "CHAdeMo" + "ca": "CHAdeMo", + "de": "Chademo-Anschluss" }, "hideInAnswer": true, "icon": { @@ -592,8 +592,8 @@ "then": { "en": "Type 1 with cable (J1772)", "nl": "Type 1 met kabel (J1772)", - "de": "Typ 1 mit Kabel (J1772)", - "ca": "Tipus 1 amb cable" + "ca": "Tipus 1 amb cable", + "de": "Typ 1 mit Kabel (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -636,8 +636,8 @@ "then": { "en": "Type 1 with cable (J1772)", "nl": "Type 1 met kabel (J1772)", - "de": "Typ 1 mit Kabel (J1772)", - "ca": "Tipus 1 amb cable" + "ca": "Tipus 1 amb cable", + "de": "Typ 1 mit Kabel (J1772)" }, "hideInAnswer": true, "icon": { @@ -651,8 +651,8 @@ "then": { "en": "Type 1 without cable (J1772)", "nl": "Type 1 zonder kabel (J1772)", - "de": "Typ 1 ohne Kabel (J1772)", - "ca": "Tipus 1 sense cable" + "ca": "Tipus 1 sense cable", + "de": "Typ 1 ohne Kabel (J1772)" }, "icon": { "path": "./assets/layers/charging_station/Type1_J1772.svg", @@ -695,8 +695,8 @@ "then": { "en": "Type 1 without cable (J1772)", "nl": "Type 1 zonder kabel (J1772)", - "de": " Typ 1 ohne Kabel (J1772)", - "ca": "Tipus 1 sense cable(J1772)" + "ca": "Tipus 1 sense cable(J1772)", + "de": " Typ 1 ohne Kabel (J1772)" }, "hideInAnswer": true, "icon": { @@ -710,8 +710,8 @@ "then": { "en": "Type 1 CCS (aka Type 1 Combo)", "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", - "de": "Typ 1 CCS (Typ 1 Combo)", - "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)" + "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)", + "de": "Typ 1 CCS (Typ 1 Combo)" }, "icon": { "path": "./assets/layers/charging_station/Type1-ccs.svg", @@ -754,8 +754,8 @@ "then": { "en": "Type 1 CCS (aka Type 1 Combo)", "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", - "de": " Typ 1 CCS (auch bekannt als Typ 1 Combo)", - "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)" + "ca": "CSS Tipus 1 (també conegut com a Tipus 1 Combo)", + "de": " Typ 1 CCS (auch bekannt als Typ 1 Combo)" }, "hideInAnswer": true, "icon": { @@ -769,8 +769,8 @@ "then": { "en": "Tesla Supercharger", "nl": "Tesla Supercharger", - "de": "Tesla Supercharger", - "ca": "Supercarregador de Tesla" + "ca": "Supercarregador de Tesla", + "de": "Tesla Supercharger" }, "icon": { "path": "./assets/layers/charging_station/Tesla-hpwc-model-s.svg", @@ -813,8 +813,8 @@ "then": { "en": "Tesla Supercharger", "nl": "Tesla Supercharger", - "de": "Tesla Supercharger", - "ca": "Supercarregador de Tesla" + "ca": "Supercarregador de Tesla", + "de": "Tesla Supercharger" }, "hideInAnswer": true, "icon": { @@ -828,8 +828,8 @@ "then": { "en": "Type 2 (mennekes)", "nl": "Type 2 (mennekes)", - "de": "Typ 2 (Mennekes)", - "ca": "Tipus 2 (mennekes)" + "ca": "Tipus 2 (mennekes)", + "de": "Typ 2 (Mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_socket.svg", @@ -872,8 +872,8 @@ "then": { "en": "Type 2 (mennekes)", "nl": "Type 2 (mennekes)", - "de": "Typ 2 (Mennekes)", - "ca": "Tipus 2 (mennekes)" + "ca": "Tipus 2 (mennekes)", + "de": "Typ 2 (Mennekes)" }, "hideInAnswer": true, "icon": { @@ -887,8 +887,8 @@ "then": { "en": "Type 2 CCS (mennekes)", "nl": "Type 2 CCS (mennekes)", - "de": "Typ 2 CCS (Mennekes)", - "ca": "CSS Tipus 2 (mennekes)" + "ca": "CSS Tipus 2 (mennekes)", + "de": "Typ 2 CCS (Mennekes)" }, "icon": { "path": "./assets/layers/charging_station/Type2_CCS.svg", @@ -931,8 +931,8 @@ "then": { "en": "Type 2 CCS (mennekes)", "nl": "Type 2 CCS (mennekes)", - "de": "Typ 2 CCS (mennekes)", - "ca": "CSS Tipus 2 (mennekes)" + "ca": "CSS Tipus 2 (mennekes)", + "de": "Typ 2 CCS (mennekes)" }, "hideInAnswer": true, "icon": { @@ -1337,7 +1337,8 @@ "socket:schuko", { "en": "Schuko wall plug without ground pin (CEE7/4 type F)", - "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)" + "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F)", + "de": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, "CEE7_4F.svg", [ @@ -1355,7 +1356,8 @@ "socket:typee", { "en": "European wall plug with ground pin (CEE7/4 type E)", - "nl": "Europese stekker met aardingspin (CEE7/4 type E)" + "nl": "Europese stekker met aardingspin (CEE7/4 type E)", + "de": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" }, "TypeE.svg", [ @@ -1374,7 +1376,8 @@ "socket:chademo", { "en": "Chademo", - "nl": "Chademo" + "nl": "Chademo", + "de": "Chademo-Stecker" }, "Chademo_type4.svg", [ @@ -1392,7 +1395,8 @@ "socket:type1_cable", { "en": "Type 1 with cable (J1772)", - "nl": "Type 1 met kabel (J1772)" + "nl": "Type 1 met kabel (J1772)", + "de": "Typ 1 mit Kabel (J1772)" }, "Type1_J1772.svg", [ @@ -1412,7 +1416,8 @@ "socket:type1", { "en": "Type 1 without cable (J1772)", - "nl": "Type 1 zonder kabel (J1772)" + "nl": "Type 1 zonder kabel (J1772)", + "de": " Typ 1 ohne Kabel (J1772)" }, "Type1_J1772.svg", [ @@ -1434,7 +1439,8 @@ "socket:type1_combo", { "en": "Type 1 CCS (aka Type 1 Combo)", - "nl": "Type 1 CCS (ook gekend als Type 1 Combo)" + "nl": "Type 1 CCS (ook gekend als Type 1 Combo)", + "de": "Typ 1 CCS (Typ 1 Combo)" }, "Type1-ccs.svg", [ @@ -1457,7 +1463,8 @@ "socket:tesla_supercharger", { "en": "Tesla Supercharger", - "nl": "Tesla Supercharger" + "nl": "Tesla Supercharger", + "de": "Tesla Supercharger" }, "Tesla-hpwc-model-s.svg", [ @@ -1478,7 +1485,8 @@ "socket:type2", { "en": "Type 2 (mennekes)", - "nl": "Type 2 (mennekes)" + "nl": "Type 2 (mennekes)", + "de": "Typ 2 (Mennekes)" }, "Type2_socket.svg", [ @@ -1499,7 +1507,8 @@ "socket:type2_combo", { "en": "Type 2 CCS (mennekes)", - "nl": "Type 2 CCS (mennekes)" + "nl": "Type 2 CCS (mennekes)", + "de": "Typ 2 CCS (Mennekes)" }, "Type2_CCS.svg", [ @@ -1519,7 +1528,8 @@ "socket:type2_cable", { "en": "Type 2 with cable (mennekes)", - "nl": "Type 2 met kabel (J1772)" + "nl": "Type 2 met kabel (J1772)", + "de": "Typ 2 mit Kabel (Mennekes)" }, "Type2_tethered.svg", [ @@ -1540,7 +1550,8 @@ "socket:tesla_supercharger_ccs", { "en": "Tesla Supercharger CCS (a branded type2_css)", - "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" + "nl": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)", + "de": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" }, "Type2_CCS.svg", [ @@ -1560,7 +1571,8 @@ "socket:tesla_destination", { "en": "Tesla Supercharger (destination)", - "nl": "Tesla Supercharger (destination)" + "nl": "Tesla Supercharger (destination)", + "de": "Tesla Supercharger (Destination)" }, "Tesla-hpwc-model-s.svg", [ @@ -1581,7 +1593,8 @@ "socket:tesla_destination", { "en": "Tesla supercharger (destination) (A Type 2 with cable branded as tesla)", - "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" + "nl": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)", + "de": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)" }, "Type2_tethered.svg", [ @@ -1602,7 +1615,8 @@ "socket:USB-A", { "en": "USB to charge phones and small electronics", - "nl": "USB om GSMs en kleine electronica op te laden" + "nl": "USB om GSMs en kleine electronica op te laden", + "de": "USB zum Aufladen von Handys und kleinen Elektrogeräten" }, "usb_port.svg", [ @@ -1622,7 +1636,8 @@ "socket:bosch_3pin", { "en": "Bosch Active Connect with 3 pins and cable", - "nl": "Bosch Active Connect met 3 pinnen aan een kabel" + "nl": "Bosch Active Connect met 3 pinnen aan een kabel", + "de": " Bosch Active Connect mit 3 Pins und Kabel" }, "bosch-3pin.svg", [], @@ -1634,7 +1649,8 @@ "socket:bosch_5pin", { "en": "Bosch Active Connect with 5 pins and cable", - "nl": "Bosch Active Connect met 5 pinnen aan een kabel" + "nl": "Bosch Active Connect met 5 pinnen aan een kabel", + "de": " Bosch Active Connect mit 5 Pins und Kabel" }, "bosch-5pin.svg", [], @@ -1726,7 +1742,8 @@ }, "render": { "en": "{{description}} outputs at most {canonical({{key}}:current)}", - "nl": "{{description}} levert een stroom van maximaal {canonical({{key}}:current)}" + "nl": "{{description}} levert een stroom van maximaal {canonical({{key}}:current)}", + "de": "{{description}} liefert maximal {canonical({{key}}:current)}" }, "freeform": { "key": "{{key}}:current", @@ -1754,11 +1771,13 @@ ], "question": { "en": "What power output does a single plug of type {{description}} offer?", - "nl": "Welk vermogen levert een enkele stekker van type {{description}}?" + "nl": "Welk vermogen levert een enkele stekker van type {{description}}?", + "de": "Welche Leistung liefert ein einzelner Stecker des Typs {{description}}?" }, "render": { "en": "{{description}} outputs at most {canonical({{key}}:output)}", - "nl": "{{description}} levert een vermogen van maximaal {canonical({{key}}:output)}" + "nl": "{{description}} levert een vermogen van maximaal {canonical({{key}}:output)}", + "de": "{{description}} liefert maximal {canonical({{key}}:output)}" }, "freeform": { "key": "{{key}}:output", @@ -1768,7 +1787,8 @@ "if": "{{key}}:output={{commonOutput}}", "then": { "en": "{{description}} outputs at most {{commonOutput}} A", - "nl": "{{description}} levert een vermogen van maximaal {{commonOutput}} A" + "nl": "{{description}} levert een vermogen van maximaal {{commonOutput}} A", + "de": "{{description}} liefert maximal {{commonOutput}} A" } }, "condition": { @@ -1786,8 +1806,8 @@ "question": { "en": "When is this charging station opened?", "nl": "Wanneer is dit oplaadpunt beschikbaar??", - "de": "Wann ist die Ladestation geöffnet?", - "ca": "Quan està oberta aquesta estació de càrrega?" + "ca": "Quan està oberta aquesta estació de càrrega?", + "de": "Wann ist die Ladestation geöffnet?" } }, "id": "OH" @@ -1797,8 +1817,8 @@ "question": { "en": "Does one have to pay to use this charging station?", "nl": "Moet men betalen om dit oplaadpunt te gebruiken?", - "de": "Muss man für die Nutzung dieser Ladestation bezahlen?", - "ca": "Hi ha que pagar per utilitzar aquest punt de càrrega?" + "ca": "Hi ha que pagar per utilitzar aquest punt de càrrega?", + "de": "Muss man für die Nutzung dieser Ladestation bezahlen?" }, "mappings": [ { @@ -1813,8 +1833,8 @@ "then": { "nl": "Gratis te gebruiken (zonder aan te melden)", "en": "Free to use (without authenticating)", - "de": "Die Nutzung ist kostenlos, keine Authentifizierung erforderlich", - "ca": "Ús gratuït (sense autentificació)" + "ca": "Ús gratuït (sense autentificació)", + "de": "Die Nutzung ist kostenlos, keine Authentifizierung erforderlich" } }, { @@ -1829,8 +1849,8 @@ "then": { "nl": "Gratis te gebruiken, maar aanmelden met een applicatie is verplicht", "en": "Free to use, but one has to authenticate", - "de": "Die Nutzung ist kostenlos, Authentifizierung erforderlich", - "ca": "Ús gratuït, però un s'ha d'autentificar" + "ca": "Ús gratuït, però un s'ha d'autentificar", + "de": "Die Nutzung ist kostenlos, Authentifizierung erforderlich" } }, { @@ -1842,8 +1862,8 @@ "then": { "nl": "Gratis te gebruiken", "en": "Free to use", - "de": "Kostenlose Nutzung", - "ca": "Ús gratuït" + "ca": "Ús gratuït", + "de": "Kostenlose Nutzung" }, "hideInAnswer": true }, @@ -1857,8 +1877,8 @@ "then": { "nl": "Betalend te gebruiken, maar gratis voor klanten van het bijhorende hotel/café/ziekenhuis/...", "en": "Paid use, but free for customers of the hotel/pub/hospital/... who operates the charging station", - "de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, … kostenlos", - "ca": "De pagament, però gratuït per als clients de l'hotel/bar/hospital/... que gestiona l'estació de càrrega" + "ca": "De pagament, però gratuït per als clients de l'hotel/bar/hospital/... que gestiona l'estació de càrrega", + "de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, ... kostenlos" } }, { @@ -1871,8 +1891,8 @@ "then": { "nl": "Betalend", "en": "Paid use", - "de": "Die Nutzung ist kostenpflichtig", - "ca": "Ús de pagament" + "ca": "Ús de pagament", + "de": "Die Nutzung ist kostenpflichtig" } } ] @@ -1882,14 +1902,14 @@ "question": { "en": "How much does one have to pay to use this charging station?", "nl": "Hoeveel moet men betalen om dit oplaadpunt te gebruiken?", - "de": "Wie viel muss man für die Nutzung dieser Ladestation bezahlen?", - "ca": "Quant cal pagar per utilitzar aquesta estació de càrrega?" + "ca": "Quant cal pagar per utilitzar aquesta estació de càrrega?", + "de": "Wie viel muss man für die Nutzung dieser Ladestation bezahlen?" }, "render": { "en": "Using this charging station costs {charge}", "nl": "Dit oplaadpunt gebruiken kost {charge}", - "de": "Die Nutzung dieser Ladestation kostet {charge}", - "ca": "Utilitzar aquesta estació de càrrega costa {charge}" + "ca": "Utilitzar aquesta estació de càrrega costa {charge}", + "de": "Die Nutzung dieser Ladestation kostet {charge}" }, "freeform": { "key": "charge" @@ -1914,8 +1934,8 @@ "question": { "en": "What kind of authentication is available at the charging station?", "nl": "Hoe kan men zich aanmelden aan dit oplaadstation?", - "de": "Welche Art der Authentifizierung ist an der Ladestation möglich?", - "ca": "Quin tipus d'autenticació hi ha disponible a l'estació de càrrega?" + "ca": "Quin tipus d'autenticació hi ha disponible a l'estació de càrrega?", + "de": "Welche Art der Authentifizierung ist an der Ladestation möglich?" }, "multiAnswer": true, "mappings": [ @@ -1961,8 +1981,8 @@ "then": { "en": "Authentication via NFC is available", "nl": "Aanmelden via NFC is mogelijk", - "de": "Authentifizierung per NFC ist möglich", - "ca": "L'autenticació mitjançant NFC està disponible" + "ca": "L'autenticació mitjançant NFC està disponible", + "de": "Authentifizierung per NFC ist möglich" } }, { @@ -1971,8 +1991,8 @@ "then": { "en": "Authentication via Money Card is available", "nl": "Aanmelden met Money Card is mogelijk", - "de": "Authentifizierung per Geldkarte ist möglich", - "ca": "L'autenticació mitjançant targeta de pagament està disponible" + "ca": "L'autenticació mitjançant targeta de pagament està disponible", + "de": "Authentifizierung per Geldkarte ist möglich" } }, { @@ -1981,8 +2001,8 @@ "then": { "en": "Authentication via debit card is available", "nl": "Aanmelden met een betaalkaart is mogelijk", - "de": "Authentifizierung per Kreditkarte ist möglich", - "ca": "L'autenticació mitjançant targeta de debit està disponible" + "ca": "L'autenticació mitjançant targeta de debit està disponible", + "de": "Authentifizierung per Kreditkarte ist möglich" } }, { @@ -1991,8 +2011,8 @@ "then": { "en": "Charging here is (also) possible without authentication", "nl": "Hier opladen is (ook) mogelijk zonder aan te melden", - "de": "Das Laden ist hier (auch) ohne Authentifizierung möglich", - "ca": "Carregar aquí (també) és possible sense autenticació" + "ca": "Carregar aquí (també) és possible sense autenticació", + "de": "Das Laden ist hier (auch) ohne Authentifizierung möglich" } } ], @@ -2031,8 +2051,8 @@ "question": { "en": "What is the maximum amount of time one is allowed to stay here?", "nl": "Hoelang mag een voertuig hier blijven staan?", - "de": "Wie lange darf man hier maximal parken?", - "ca": "Quina és la quantitat màxima de temps que es permet permaneixer aquí?" + "ca": "Quina és la quantitat màxima de temps que es permet permaneixer aquí?", + "de": "Wie lange darf man hier maximal parken?" }, "freeform": { "key": "maxstay" @@ -2040,8 +2060,8 @@ "render": { "en": "One can stay at most {canonical(maxstay)}", "nl": "De maximale parkeertijd hier is {canonical(maxstay)}", - "de": "Die maximale Parkdauer beträgt {canonical(maxstay)}", - "ca": "Un pot quedar-se com a màxim {canonical(maxstay)}" + "ca": "Un pot quedar-se com a màxim {canonical(maxstay)}", + "de": "Die maximale Parkdauer beträgt {canonical(maxstay)}" }, "mappings": [ { @@ -2049,8 +2069,8 @@ "then": { "en": "No timelimit on leaving your vehicle here", "nl": "Geen maximum parkeertijd", - "de": "Keine Höchstparkdauer", - "ca": "No hi ha límit de temps per a deixar el teu vehicle aquí" + "ca": "No hi ha límit de temps per a deixar el teu vehicle aquí", + "de": "Keine Höchstparkdauer" } } ], @@ -2068,14 +2088,14 @@ "render": { "en": "Part of the network {network}", "nl": "Maakt deel uit van het {network}-netwerk", - "de": "Teil des Netzwerks {network}", - "ca": "Part de la xarxa {network}" + "ca": "Part de la xarxa {network}", + "de": "Teil des Netzwerks {network}" }, "question": { "en": "Is this charging station part of a network?", "nl": "Is dit oplaadpunt deel van een groter netwerk?", - "de": "Ist diese Ladestation Teil eines Netzwerks?", - "ca": "Aquesta estació de càrrega forma part d'una xarxa?" + "ca": "Aquesta estació de càrrega forma part d'una xarxa?", + "de": "Ist diese Ladestation Teil eines Netzwerks?" }, "freeform": { "key": "network" @@ -2141,14 +2161,14 @@ "question": { "en": "Who is the operator of this charging station?", "nl": "Wie beheert dit oplaadpunt?", - "de": "Wer ist der Betreiber dieser Ladestation?", - "ca": "Qui és l'operadora d'aquesta estació de càrrega?" + "ca": "Qui és l'operadora d'aquesta estació de càrrega?", + "de": "Wer ist der Betreiber dieser Ladestation?" }, "render": { "en": "This charging station is operated by {operator}", "nl": "Wordt beheerd door {operator}", - "de": "Die Station wird betrieben von {operator}", - "ca": "Aquesta estació de càrrega l'opera {operator}" + "ca": "Aquesta estació de càrrega l'opera {operator}", + "de": "Die Station wird betrieben von {operator}" }, "freeform": { "key": "operator" @@ -2163,8 +2183,8 @@ "then": { "en": "Actually, {operator} is the network", "nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt", - "de": "Eigentlich ist {operator} das Netzwerk", - "ca": "De fet, {operator} és la xarxa" + "ca": "De fet, {operator} és la xarxa", + "de": "Eigentlich ist {operator} das Netzwerk" }, "addExtraTags": [ "operator=" @@ -2179,14 +2199,14 @@ "question": { "en": "What number can one call if there is a problem with this charging station?", "nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?", - "de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?", - "ca": "A quin número es pot cridar si hi ha algun problema amb aquest punt de càrrega?" + "ca": "A quin número es pot cridar si hi ha algun problema amb aquest punt de càrrega?", + "de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?" }, "render": { "en": "In case of problems, call {phone}", "nl": "Bij problemen, bel naar {phone}", - "de": "Bei Problemen, anrufen unter {phone}", - "ca": "En cas de problemes, truqueu a {phone}" + "ca": "En cas de problemes, truqueu a {phone}", + "de": "Bei Problemen, anrufen unter {phone}" }, "freeform": { "key": "phone", @@ -2198,14 +2218,14 @@ "question": { "en": "What is the email address of the operator?", "nl": "Wat is het email-adres van de operator?", - "de": "Wie lautet die E-Mail-Adresse des Betreibers?", - "ca": "Quin és el correu electrònic de l'operadora?" + "ca": "Quin és el correu electrònic de l'operadora?", + "de": "Wie lautet die E-Mail-Adresse des Betreibers?" }, "render": { "en": "In case of problems, send an email to {email}", "nl": "Bij problemen, email naar {email}", - "de": "Bei Problemen senden Sie bitte eine E-Mail an {email}", - "ca": "En cas de problemes, envia un email a {email}" + "ca": "En cas de problemes, envia un email a {email}", + "de": "Bei Problemen senden Sie bitte eine E-Mail an {email}" }, "freeform": { "key": "email", @@ -2253,8 +2273,8 @@ "question": { "en": "Is this charging point in use?", "nl": "Is dit oplaadpunt operationeel?", - "de": "Ist die Station in Betrieb?", - "ca": "Està en ús aquest punt de càrrega?" + "ca": "Està en ús aquest punt de càrrega?", + "de": "Ist die Station in Betrieb?" }, "mappings": [ { @@ -2270,8 +2290,8 @@ "then": { "en": "This charging station works", "nl": "Dit oplaadpunt werkt", - "de": "Die Station ist in Betrieb", - "ca": "Aquesta estació de càrrega funciona" + "ca": "Aquesta estació de càrrega funciona", + "de": "Die Station ist in Betrieb" } }, { @@ -2287,8 +2307,8 @@ "then": { "en": "This charging station is broken", "nl": "Dit oplaadpunt is kapot", - "de": "Die Station ist defekt", - "ca": "Aquesta estació de carrega està trencada" + "ca": "Aquesta estació de carrega està trencada", + "de": "Die Station ist defekt" } }, { @@ -2304,8 +2324,8 @@ "then": { "en": "A charging station is planned here", "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden", - "de": "Die Station ist erst in Planung", - "ca": "Aquí està prevista una estació de recàrrega" + "ca": "Aquí està prevista una estació de recàrrega", + "de": "Die Station ist erst in Planung" } }, { @@ -2337,8 +2357,8 @@ "then": { "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible", "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig", - "de": "Die Station ist dauerhaft geschlossen und nicht mehr in Nutzung, aber noch sichtbar", - "ca": "Aquesta estació de recàrrega s'ha desactivat permanentment i ja no s'utilitza, però encara és visible" + "ca": "Aquesta estació de recàrrega s'ha desactivat permanentment i ja no s'utilitza, però encara és visible", + "de": "Die Station ist dauerhaft geschlossen und nicht mehr in Nutzung, aber noch sichtbar" } } ] @@ -2348,8 +2368,8 @@ "question": { "en": "Does one have to pay a parking fee while charging?", "nl": "Moet men parkeergeld betalen tijdens het opladen?", - "de": "Muss man während des Ladens eine Parkgebühr bezahlen?", - "ca": "Cal pagar una taxa d'aparcament mentre es carrega?" + "ca": "Cal pagar una taxa d'aparcament mentre es carrega?", + "de": "Muss man während des Ladens eine Parkgebühr bezahlen?" }, "mappings": [ { @@ -2357,8 +2377,8 @@ "then": { "en": "No additional parking cost while charging", "nl": "Geen extra parkeerkost tijdens het opladen", - "de": "Keine zusätzlichen Parkkosten während des Ladens", - "ca": "No cal pagar una taxa addicional mentres carrega" + "ca": "No cal pagar una taxa addicional mentres carrega", + "de": "Keine zusätzlichen Parkkosten während des Ladens" } }, { @@ -2366,8 +2386,8 @@ "then": { "en": "An additional parking fee should be paid while charging", "nl": "Tijdens het opladen moet er parkeergeld betaald worden", - "de": "Während des Ladens ist eine zusätzliche Parkgebühr zu entrichten", - "ca": "Cal pagar una taxa addicional d'aparcament mentres carrega" + "ca": "Cal pagar una taxa addicional d'aparcament mentres carrega", + "de": "Während des Ladens ist eine zusätzliche Parkgebühr zu entrichten" } } ], @@ -2497,7 +2517,7 @@ "question": { "en": "Has a
Type 1 CCS (aka Type 1 Combo)
connector", "nl": "Heeft een
Type 1 CCS (ook gekend als Type 1 Combo)
", - "de": "Verfügt über einen
Typ 1 CCS (Typ 1 Combo)
Stecker" + "de": "Verfügt über einen
Typ 1 CCS (Typ 1 Combo)
Stecker" }, "osmTags": "socket:type1_combo~*" }, diff --git a/assets/layers/charging_station/csvToJson.ts b/assets/layers/charging_station/csvToJson.ts index 03df8f6b7..63ba2e508 100644 --- a/assets/layers/charging_station/csvToJson.ts +++ b/assets/layers/charging_station/csvToJson.ts @@ -1,17 +1,14 @@ -import { readFileSync, writeFileSync } from "fs"; -import { Utils } from "../../../src/Utils"; -import ScriptUtils from "../../../scripts/ScriptUtils"; -import { LayerConfigJson } from "../../../src/Models/ThemeConfig/Json/LayerConfigJson"; -import FilterConfigJson from "../../../src/Models/ThemeConfig/Json/FilterConfigJson"; -import { - QuestionableTagRenderingConfigJson -} from "../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; -import RewritableConfigJson from "../../../src/Models/ThemeConfig/Json/RewritableConfigJson"; -import { TagRenderingConfigJson } from "../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson"; +import { readFileSync, writeFileSync } from "fs" +import { Utils } from "../../../src/Utils" +import ScriptUtils from "../../../scripts/ScriptUtils" +import { LayerConfigJson } from "../../../src/Models/ThemeConfig/Json/LayerConfigJson" +import FilterConfigJson from "../../../src/Models/ThemeConfig/Json/FilterConfigJson" +import RewritableConfigJson from "../../../src/Models/ThemeConfig/Json/RewritableConfigJson" +import { TagRenderingConfigJson } from "../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson" function colonSplit(value: string): string[] { - return value.split(";").map(v => v.replace(/"/g, '').trim()).filter(s => s !== ""); + return value.split(";").map(v => v.replace(/"/g, "").trim()).filter(s => s !== "") } function loadCsv(file): { @@ -34,14 +31,14 @@ function loadCsv(file): { return Utils.NoNull(entries.map(entry => { const values = entry.split(",").map(str => str.trim()) if (values[0] === undefined || values[0] === "") { - return undefined; + return undefined } const v = {} const colonSeperated = ["commonVoltages", "commonOutputs", "commonCurrents", "countryWhiteList", "countryBlackList", "associatedVehicleTypes", "neverAssociatedWith"] const descriptionTranslations = new Map() for (let j = 0; j < header.length; j++) { - const key = header[j]; + const key = header[j] if (key.startsWith("description")) { const language = key.substring("description:".length) descriptionTranslations.set(language, values[j]) @@ -54,10 +51,10 @@ function loadCsv(file): { } } v["description"] = descriptionTranslations - if(v["id"] === ""){ - v["id"] = v["key"] + if (v["id"] === "") { + v["id"] = v["key"] } - return v; + return v })) } @@ -70,9 +67,9 @@ function run(file, protojson) { { question: { en: "All connectors", - nl: "Alle types" - } - } + nl: "Alle types", + }, + }, ] const entries = loadCsv(file) @@ -82,7 +79,7 @@ function run(file, protojson) { { // Add the entities to the 'rewrite-able part' - let specificQuestions: RewritableConfigJson = proto.tagRenderings.find(tr => tr["rewrite"] !== undefined && !(tr["rewrite"]["into"]?.length > 0)); + let specificQuestions: RewritableConfigJson = proto.tagRenderings.find(tr => tr["rewrite"] !== undefined && !(tr["rewrite"]["into"]?.length > 0)) specificQuestions.rewrite.into = entries.map(e => [ e.id, e.key, @@ -90,24 +87,24 @@ function run(file, protojson) { e.image, e.commonVoltages, e.commonCurrents, - e.commonOutputs - ]); + e.commonOutputs, + ]) } for (let i = 0; i < entries.length; i++) { - const e = entries[i]; + const e = entries[i] const txt = { en: e.description.get("en"), - nl: e.description.get("nl") + nl: e.description.get("nl"), } const json = { if: `${e.key}=1`, ifnot: `${e.key}=`, then: txt, - icon:{ - path:"./assets/layers/charging_station/" + e.image, - class:"medium" - } + icon: { + path: "./assets/layers/charging_station/" + e.image, + class: "medium", + }, } if (e.countryWhiteList.length > 0 && e.countryBlackList.length > 0) { @@ -116,32 +113,32 @@ function run(file, protojson) { if (e.countryWhiteList.length > 0) { // This is a 'hideInAnswer', thus _reverse_ logic! const countries = e.countryWhiteList.map(country => "_country!=" + country) //HideInAnswer if it is in the wrong country - json["hideInAnswer"] = {and: countries} // Should be and, as we want to hide if it does not match any of the countries + json["hideInAnswer"] = { and: countries } // Should be and, as we want to hide if it does not match any of the countries } else if (e.countryBlackList.length > 0) { const countries = e.countryBlackList.map(country => "_country=" + country) //HideInAnswer if it is in the wrong country - json["hideInAnswer"] = {or: countries} + json["hideInAnswer"] = { or: countries } } if (e.associatedVehicleTypes?.length > 0 && e.associatedVehicleTypes.indexOf("*") < 0 && e.neverAssociatedWith?.length > 0) { // This plug only occurs if some vehicle specific vehicle type is present. // IF all of the needed vehicle types are explicitly NO, then we hide this type as well - let associatedWith = {and: [].concat(...e.associatedVehicleTypes.map(neededVehicle => [neededVehicle + "=no"]))} + let associatedWith = { and: [].concat(...e.associatedVehicleTypes.map(neededVehicle => [neededVehicle + "=no"])) } // We also hide if: // - One of the neverAssociatedVehiclesTYpes is set to 'yes' AND none of the associated types are set/yes let neverAssociatedIsSet = { and: [{ - or: e.neverAssociatedWith.map(vehicleType => vehicleType + "=yes") + or: e.neverAssociatedWith.map(vehicleType => vehicleType + "=yes"), }, - ...e.associatedVehicleTypes.map(associated => associated + "!=yes") - ] + ...e.associatedVehicleTypes.map(associated => associated + "!=yes"), + ], } let conditions = [associatedWith, neverAssociatedIsSet] if (json["hideInAnswer"] !== undefined) { conditions.push(json["hideInAnswer"]) } - json["hideInAnswer"] = {or: conditions} + json["hideInAnswer"] = { or: conditions } } @@ -151,14 +148,14 @@ function run(file, protojson) { // We add a second time for any amount to trigger a visualisation; but this is not an answer option const no_ask_json = { if: { - and:Utils.NoEmpty( [`${e.key}~*`, `${e.key}!=1`, ...e.extraVisualisationCondition.split(";")]) + and: Utils.NoEmpty([`${e.key}~*`, `${e.key}!=1`, ...e.extraVisualisationCondition.split(";")]), }, then: txt, hideInAnswer: true, - icon:{ + icon: { path: `./assets/layers/charging_station/${e.image}`, - class:"medium" - } + class: "medium", + }, } overview_question_answers.push(no_ask_json) @@ -168,9 +165,9 @@ function run(file, protojson) { filterOptions.push({ question: { en: `Has a ${descrWithImage_en} connector`, - nl: `Heeft een ${descrWithImage_nl}` + nl: `Heeft een ${descrWithImage_nl}`, }, - osmTags: `${e.key}~*` + osmTags: `${e.key}~*`, }) } @@ -178,25 +175,25 @@ function run(file, protojson) { "id": "Available_charging_stations (generated)", "question": { "en": "Which charging connections are available here?", - "nl": "Welke aansluitingen zijn hier beschikbaar?" + "nl": "Welke aansluitingen zijn hier beschikbaar?", }, "multiAnswer": true, - "mappings": overview_question_answers + "mappings": overview_question_answers, } const insertQuestionsAt = proto.tagRenderings.findIndex(tr => tr["id"] === "$$$") proto.tagRenderings.splice(insertQuestionsAt, 1, toggles) - if(typeof proto.filter === "string"){ + if (typeof proto.filter === "string") { throw "Filters of a the protojson should be a list of FilterConfigJsons" } - proto.filter = proto.filter; + proto.filter = proto.filter proto.tagRenderings.forEach(tr => { if (typeof tr === "string") { - return; + return } - if(tr["rewrite"]){ + if (tr["rewrite"]) { return } if (tr["id"] === undefined || typeof tr["id"] !== "string") { @@ -207,18 +204,18 @@ function run(file, protojson) { proto.filter.push({ id: "connection_type", - options: filterOptions + options: filterOptions, }) const importedUnits = {} for (const entry of entries) { - importedUnits[entry.key+":voltage"] = "voltage" - importedUnits[entry.key+":current"] = "current" - importedUnits[entry.key+":output"] = { quantity: "power", "denominations":["mW","kW"] } + importedUnits[entry.key + ":voltage"] = "voltage" + importedUnits[entry.key + ":current"] = "current" + importedUnits[entry.key + ":output"] = { quantity: "power", "denominations": ["mW", "kW"] } } - const extraUnits = [importedUnits - ]; + const extraUnits = [importedUnits, + ] if (proto["units"] == undefined) { proto["units"] = [] @@ -228,16 +225,17 @@ function run(file, protojson) { } +// noinspection JSUnusedLocalSymbols async function queryTagInfo(file, type, clean: ((s: string) => string)) { for (const e of loadCsv(file)) { const value = await ScriptUtils.TagInfoHistogram(e.key + ":" + type) const result = value.data const counts = new Map() for (const r of result) { - let key = r.value; + let key = r.value key = clean(key) - key.trim(); - if (key.indexOf('-') >= 0) { + key.trim() + if (key.indexOf("-") >= 0) { continue } if (r.fraction < 0.05) { @@ -255,6 +253,7 @@ async function queryTagInfo(file, type, clean: ((s: string) => string)) { } } +// noinspection JSUnusedLocalSymbols /** * Adds the translations into the 'newConfig' object * @param origPath @@ -276,7 +275,7 @@ function mergeTranslations(origPath, newConfig: LayerConfigJson) { } const applicable = newRenderings.filter(r => r["id"] === oldRenderingName)[0] if (applicable === undefined) { - continue; + continue } // @ts-ignore Utils.Merge(oldRendering, applicable) diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json index e502f75c3..edddd13a4 100644 --- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json +++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json @@ -840,10 +840,12 @@ { "id": "incline", "question": { - "en": "Does {title()} have an incline?" + "en": "Does {title()} have an incline?", + "de": "Hat {title()} eine Steigung?" }, "render": { - "en": "This road has an slope of {incline}" + "en": "This road has an slope of {incline}", + "de": "Die Straße hat {incline} Steigung" }, "freeform": { "key": "incline", @@ -853,7 +855,8 @@ { "if": "incline=", "then": { - "en": "There is (probably) no incline here" + "en": "There is (probably) no incline here", + "de": "Hier gibt es (wahrscheinlich) keine Steigung" }, "hideInAnswer": true }, @@ -866,7 +869,8 @@ ] }, "then": { - "en": "This road has a slope" + "en": "This road has a slope", + "de": "Die Straße hat eine Steigung" }, "hideInAnswer": true } diff --git a/assets/layers/drinking_water/drinking_water.json b/assets/layers/drinking_water/drinking_water.json index 74dac079f..f70d1e089 100644 --- a/assets/layers/drinking_water/drinking_water.json +++ b/assets/layers/drinking_water/drinking_water.json @@ -211,7 +211,8 @@ "id": "type", "question": { "en": "What type of drinking water point is this?", - "nl": "Wat voor soort drinkwaterpunt is dit?" + "nl": "Wat voor soort drinkwaterpunt is dit?", + "de": "Um welche Art von Trinkwasserentnahmestelle handelt es sich?" }, "mappings": [ { @@ -219,7 +220,8 @@ "icon": "./assets/layers/drinking_water/bubbler.svg", "then": { "en": "This is a bubbler fountain. A water jet to drink from is sent upwards, typically controlled by a push button.", - "nl": "Dit is een waterhappertje - een drinkwaterfonteintje waarbij een waterstraaltje omhoog spuit. Dit kan permanent werken of door op een drukknop te duwen." + "nl": "Dit is een waterhappertje - een drinkwaterfonteintje waarbij een waterstraaltje omhoog spuit. Dit kan permanent werken of door op een drukknop te duwen.", + "de": "Dies ist ein Sprudelbrunnen. Ein Wasserstrahl zum Trinken wird nach oben gerichtet und in der Regel durch einen Druckknopf gesteuert." }, "addExtraTags": [ "man_made=" @@ -230,7 +232,8 @@ "icon": "./assets/layers/drinking_water/bottle.svg", "then": { "en": "This is a bottle refill point where the water is sent downwards, typically controlled by a push button or a motion sensor. Drinking directly from the stream might be very hard or impossible.", - "nl": "Dit is een hervulpunt voor drinkwaterflessen. De waterstraal wordt omlaag gestuurd wanneer op een drukknop geduwd wordt of wanneer er beweging gedetecteerd wordt. Rechtstreeks van de waterstraal drinking kan moeilijk of zelfs onmogelijk zijn." + "nl": "Dit is een hervulpunt voor drinkwaterflessen. De waterstraal wordt omlaag gestuurd wanneer op een drukknop geduwd wordt of wanneer er beweging gedetecteerd wordt. Rechtstreeks van de waterstraal drinking kan moeilijk of zelfs onmogelijk zijn.", + "de": "Dies ist eine Flaschenauffüllstation, an der das Wasser nach unten geleitet wird, in der Regel durch einen Druckknopf oder einen Bewegungssensor gesteuert. Direkt aus dem Wasserstrahl zu trinken, kann sehr schwierig oder unmöglich sein." }, "addExtraTags": [ "man_made=", @@ -242,7 +245,8 @@ "icon": "./assets/layers/drinking_water/tap.svg", "then": { "en": "This is a water tap. The water flows downward and the stream is controlled by a valve or push-button.", - "nl": "Dit is een waterkraan. Het water strooomt naar beneden en het volume wordt door een knop of draaimechanisme geregeld." + "nl": "Dit is een waterkraan. Het water strooomt naar beneden en het volume wordt door een knop of draaimechanisme geregeld.", + "de": "Dies ist ein Wasserhahn. Das Wasser fließt nach unten und der Wasserstrahl wird durch ein Ventil oder einen Druckknopf gesteuert." }, "addExtraTags": [ "fountain=" @@ -302,21 +306,24 @@ "id": "fee", "question": { "en": "Is this drinking water point free to use?", - "nl": "Is dit drinkwaterpunt gratis te gebruiken?" + "nl": "Is dit drinkwaterpunt gratis te gebruiken?", + "de": "Kann diese Trinkwasserstelle kostenlos genutzt werden?" }, "mappings": [ { "if": "fee=no", "then": { "en": "Free to use", - "nl": "Gratis te gebruiken" + "nl": "Gratis te gebruiken", + "de": "Die Nutzung ist kostenlos" } }, { "if": "fee=yes", "then": { "en": "One needs to pay to use this drinking water point", - "nl": "Men moet betalen om dit drinkwaterpunt te gebruiken" + "nl": "Men moet betalen om dit drinkwaterpunt te gebruiken", + "de": "Die Nutzung ist kostenpflichtig" } } ] @@ -325,21 +332,24 @@ "id": "seasonal", "question": { "en": "Is this drinking water point available all year round?", - "nl": "Is dit drinkwaterpunt heel het jaar door beschikbaar?" + "nl": "Is dit drinkwaterpunt heel het jaar door beschikbaar?", + "de": "Ist die Trinkwasserstelle ganzjährig in Betrieb?" }, "mappings": [ { "if": "seasonal=no", "then": { "en": "This drinking water point is available all around the year", - "nl": "Dit drinkwaterpunt is heel het jaar door beschikbaar" + "nl": "Dit drinkwaterpunt is heel het jaar door beschikbaar", + "de": "Die Trinkwasserstelle ist ganzjährig in Betrieb" } }, { "if": "seasonal=summer", "then": { "en": "This drinking water point is only available in summer", - "nl": "Dit drinkwaterpunt is enkel in de zomer beschikbaar" + "nl": "Dit drinkwaterpunt is enkel in de zomer beschikbaar", + "de": "Die Trinkwasserstelle ist nur im Sommer in Betrieb" } }, { @@ -347,7 +357,8 @@ "icon": "./assets/layers/drinking_water/no_winter.svg", "then": { "en": "This drinking water point is closed during the winter", - "nl": "Dit drinkwaterpunt is gesloten in de winter" + "nl": "Dit drinkwaterpunt is gesloten in de winter", + "de": "Die Trinkwasserstelle ist im Winter nicht in Betrieb" } } ] @@ -357,7 +368,8 @@ "override": { "questionHint": { "en": "These are the opening hours if the drinking water fountain is operational.", - "nl": "Tijdens deze openingsuren is dit drinkwaterpunt bruikbaar." + "nl": "Tijdens deze openingsuren is dit drinkwaterpunt bruikbaar.", + "de": "Dies sind die Öffnungszeiten des Trinkwasserbrunnens, wenn dieser in Betrieb ist." }, "+mappings": [ { @@ -397,7 +409,8 @@ }, "then": { "en": "This drinking water fountain is closed this season. As such, the opening hours are not shown.", - "nl": "Dit drinkwaterpunt is dit seizoen gesloten. De openingsuren worden dus niet weergegeven." + "nl": "Dit drinkwaterpunt is dit seizoen gesloten. De openingsuren worden dus niet weergegeven.", + "de": "Der Trinkwasserbrunnen ist derzeit nicht in Betrieb. Deshalb werden keine Öffnungszeiten angezeigt." }, "hideInAnswer": true } @@ -408,7 +421,8 @@ "id": "bench-artwork", "question": { "en": "Does this drinking water fountain have an artistic element?", - "nl": "Heeft dit drinkwaterpunt een geintegreerd kunstwerk?" + "nl": "Heeft dit drinkwaterpunt een geintegreerd kunstwerk?", + "de": "Verfügt der Trinkwasserbrunnen über ein künstlerisches Element?" }, "mappings": [ { @@ -418,14 +432,16 @@ ], "then": { "en": "This drinking water point has an integrated artwork", - "nl": "Dit drinkwaterpunt heeft een geintegreerd kunstwerk" + "nl": "Dit drinkwaterpunt heeft een geintegreerd kunstwerk", + "de": "Die Trinkwasserstelle hat ein integriertes Kunstwerk" } }, { "if": "not:tourism:artwork=yes", "then": { "en": "This drinking water point does not have an integrated artwork", - "nl": "Dit drinkwaterpunt heeft geen geïntegreerd kunstwerk" + "nl": "Dit drinkwaterpunt heeft geen geïntegreerd kunstwerk", + "de": "Die Trinkwasserstelle hat kein integriertes Kunstwerk" }, "addExtraTags": [ "tourism=" @@ -435,14 +451,16 @@ "if": "tourism=", "then": { "en": "This drinking water point probably doesn't have an integrated artwork", - "nl": "Dit drinkwaterpunt heeft waarschijnlijk geen geïntegreerd kunstwerk" + "nl": "Dit drinkwaterpunt heeft waarschijnlijk geen geïntegreerd kunstwerk", + "de": "Die Trinkwasserstelle hat wahrscheinlich kein integriertes Kunstwerk" }, "hideInAnswer": true } ], "questionHint": { "en": "E.g. it has an integrated statue or other non-trivial, creative work", - "nl": "Bijvoorbeeld een standbeeld of ander, niet-triviaal kunstwerk" + "nl": "Bijvoorbeeld een standbeeld of ander, niet-triviaal kunstwerk", + "de": "Z.B. eine integrierte Statue oder andere künstlerische Werke" } }, { @@ -519,7 +537,8 @@ }, "then": { "en": "This is a historic, manual water pump where no drinking water can be found", - "nl": "Dit is een historische, manuele waterpomp waar geen drinkwater uitkomt" + "nl": "Dit is een historische, manuele waterpomp waar geen drinkwater uitkomt", + "de": "Dies ist eine historische, manuelle Wasserpumpe, an der kein Trinkwasser zu finden ist" } } ] diff --git a/assets/layers/elevator/elevator.json b/assets/layers/elevator/elevator.json index a6ad92015..6d4fa2317 100644 --- a/assets/layers/elevator/elevator.json +++ b/assets/layers/elevator/elevator.json @@ -267,18 +267,18 @@ "cs": "Ve kterých jazycích má tento výtah hmatové písmo (braillovo písmo)?" }, "render_list_item": { - "en": "This elevator has tactile writing in {language():font-bold}", - "de": "Der Aufzug hat taktile Schrift in {language():font-bold}", - "nl": "Deze lift heeft voelbaar schrift in het {language():font-bold}", - "ca": "Aquest ascensor té l'escriptura tàctil en {language():font-bold}", - "cs": "Tento výtah má hmatové písmo v {language():font-bold}" + "en": "This elevator has tactile writing in {language()}", + "de": "Der Aufzug hat taktile Schrift in {language()}", + "nl": "Deze lift heeft voelbaar schrift in het {language()}", + "ca": "Aquest ascensor té l'escriptura tàctil en {language()}", + "cs": "Tento výtah má hmatové písmo v {language()}" }, "render_single_language": { - "en": "This elevator has tactile writing in {language():font-bold}", - "de": "Der Aufzug hat taktile Schrift in {language():font-bold}", - "nl": "Deze lift heeft voelbaar schrift in het {language():font-bold}", - "ca": "Aquest ascensor té l'escriptura tàctil en {language():font-bold}", - "cs": "Tento výtah má hmatové písmo v {language():font-bold}" + "en": "This elevator has tactile writing in {language()}", + "de": "Der Aufzug hat taktile Schrift in {language()}", + "nl": "Deze lift heeft voelbaar schrift in het {language()}", + "ca": "Aquest ascensor té l'escriptura tàctil en {language()}", + "cs": "Tento výtah má hmatové písmo v {language()}" } } } @@ -330,18 +330,18 @@ "cs": "Ve kterých jazycích má tento výtah hlasový výstup?" }, "render_list_item": { - "en": "This elevator has speech output in {language():font-bold}", - "nl": "Deze lift heeft gesproken tekst in het {language():font-bold}", - "de": "Der Aufzug hat eine Sprachausgabe in {language():font-bold}", - "ca": "Aquest ascensor té sortida de veu en {language():font-bold}", - "cs": "Tento výtah má hlasový výstup v {language():font-bold}" + "en": "This elevator has speech output in {language()}", + "nl": "Deze lift heeft gesproken tekst in het {language()}", + "de": "Der Aufzug hat eine Sprachausgabe in {language()}", + "ca": "Aquest ascensor té sortida de veu en {language()}", + "cs": "Tento výtah má hlasový výstup v {language()}" }, "render_single_language": { - "en": "This elevator has speech output in {language():font-bold}", - "nl": "Deze lift heeft gesproken tekst in het {language():font-bold}", - "de": "Der Aufzug hat eine Sprachausgabe in {language():font-bold}", - "ca": "Aquest ascensor té sortida de veu en {language():font-bold}", - "cs": "Tento výtah má hlasový výstup v {language():font-bold}" + "en": "This elevator has speech output in {language()}", + "nl": "Deze lift heeft gesproken tekst in het {language()}", + "de": "Der Aufzug hat eine Sprachausgabe in {language()}", + "ca": "Aquest ascensor té sortida de veu en {language()}", + "cs": "Tento výtah má hlasový výstup v {language()}" } } } diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 943acab38..9de5d9a81 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -737,7 +737,8 @@ "if": "diet:vegetarian=on_demand", "then": { "en": "Some dishes might be adapted to a vegetarian version, but this should be demanded", - "nl": "Sommige gerechten kunnen op vraag vegetarisch gemaakt worden" + "nl": "Sommige gerechten kunnen op vraag vegetarisch gemaakt worden", + "de": "Einige Gerichte können auf Nachfrage in eine vegetarische Version umgewandelt werden" } } ], @@ -811,7 +812,8 @@ "if": "diet:vegan=on_demand", "then": { "en": "Some dishes might be adapted to a vegan version if asked for", - "nl": "Op vraag kan een veganistische variant van een gerecht gemaakt worden" + "nl": "Op vraag kan een veganistische variant van een gerecht gemaakt worden", + "de": "Einige Gerichte können auf Nachfrage in eine vegane Version umgewandelt werden" } } ], diff --git a/assets/layers/hackerspace/hackerspace.json b/assets/layers/hackerspace/hackerspace.json index e56f05f2f..1553fe78c 100644 --- a/assets/layers/hackerspace/hackerspace.json +++ b/assets/layers/hackerspace/hackerspace.json @@ -308,10 +308,14 @@ [ "media_studio", { - "en": "a multimedia studio" + "en": "a multimedia studio", + "nl": "een multimedia-studio", + "de": "ein Multimediastudio" }, { - "en": "multimedia studio" + "en": "multimedia studio", + "nl": "multimedia-studio", + "de": "Multimediastudio" }, "./assets/layers/hackerspace/media_studio.svg", false @@ -319,10 +323,14 @@ [ "sewing_machine", { - "en": "a sewing machine" + "en": "a sewing machine", + "de": "eine Nähmaschine", + "nl": "een naaimachine" }, { - "en": "sewing machine" + "en": "sewing machine", + "de": "Nähmaschine", + "nl": "naaimachine" }, "./assets/layers/hackerspace/sewing_machine.svg", true @@ -330,10 +338,14 @@ [ "workshop:wood", { - "en": "a woodworking workshop" + "en": "a woodworking workshop", + "nl": "een houtbewerkingsatelier", + "de": "eine Holzwerkstatt" }, { - "en": "woodworking workshop" + "en": "woodworking workshop", + "nl": "houtbewerkingsatelier", + "de": "Holzwerkstatt" }, "./assets/layers/hackerspace/woodworking.svg", false @@ -341,10 +353,14 @@ [ "workshop:ceramics", { - "en": "a ceramics workshop" + "en": "a ceramics workshop", + "nl": "een keramiekatelier", + "de": "eine Keramikwerkstatt" }, { - "en": "ceramics workshop" + "en": "ceramics workshop", + "nl": "keramiekatelier", + "de": "Keramikwerkstatt" }, "./assets/layers/hackerspace/ceramics.svg", false @@ -352,10 +368,14 @@ [ "workshop:metal", { - "en": "a metal workshop" + "en": "a metal workshop", + "nl": "een metaalatelier", + "de": "eine Metallwerkstatt" }, { - "en": "metal workshop" + "en": "metal workshop", + "nl": "metaalatelier", + "de": "Metallwerkstatt" }, "./assets/layers/hackerspace/metal.svg", false @@ -363,10 +383,14 @@ [ "bicycle:diy", { - "en": "a bicycle repair workshop" + "en": "a bicycle repair workshop", + "nl": "een fietsherstelplaats", + "de": "eine Fahrradwerkstatt" }, { - "en": "bicycle repair workshop" + "en": "bicycle repair workshop", + "nl": "fietsherstelplaats", + "de": "Fahrradwerkstatt" }, "./assets/layers/hackerspace/bicycle.svg", false diff --git a/assets/layers/hydrant/hydrant.json b/assets/layers/hydrant/hydrant.json index 8cfe4665d..7aed6ef4a 100644 --- a/assets/layers/hydrant/hydrant.json +++ b/assets/layers/hydrant/hydrant.json @@ -547,6 +547,10 @@ }, "images" ], + "allowMove": { + "enableRelocation": false, + "enableImproveAccuracy": true + }, "units": [ { "fire_hydrant:diameter": { @@ -556,9 +560,5 @@ ] } } - ], - "allowMove": { - "enableRelocation": false, - "enableImproveAccuracy": true - } + ] } diff --git a/assets/layers/icons/icons.json b/assets/layers/icons/icons.json index ebed4cba8..6219db9e5 100644 --- a/assets/layers/icons/icons.json +++ b/assets/layers/icons/icons.json @@ -81,8 +81,6 @@ "condition": { "or": [ "opening_hours~*", - "seasonal=", - "seasonal=no", { "or": [ { @@ -127,7 +125,8 @@ "text": "phone", "arialabel": { "en": "phone", - "nl": "Telefoneer" + "nl": "Telefoneer", + "de": "Telefon" } } }, @@ -142,7 +141,8 @@ "text": "phone", "arialabel": { "en": "phone", - "nl": "Telefoneer" + "nl": "Telefoneer", + "de": "Telefon" } } } @@ -234,7 +234,8 @@ "href": "https://openstreetmap.org/{id}", "arialabel": { "en": "Open on openstreetmap.org", - "nl": "Bekijk op openstreetmap.org" + "nl": "Bekijk op openstreetmap.org", + "de": "Auf openstreetmap.org öffnen" } } }, @@ -253,7 +254,8 @@ "href": "{_backend}/{id}", "arialabel": { "en": "Open on openstreetmap.org", - "nl": "Bekijk op openstreetmap.org" + "nl": "Bekijk op openstreetmap.org", + "de": "Auf openstreetmap.org öffnen" } } } diff --git a/assets/layers/love_hotel/love_hotel.json b/assets/layers/love_hotel/love_hotel.json new file mode 100644 index 000000000..1d8df35b8 --- /dev/null +++ b/assets/layers/love_hotel/love_hotel.json @@ -0,0 +1,80 @@ +{ + "id": "love_hotel", + "name": { + "en": "Love hotels" + }, + "description": { + "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities" + }, + "source": { + "osmTags": "amenity=love_hotel" + }, + "minzoom": 10, + "title": { + "render": { + "en": "Love Hotel {name}" + } + }, + "pointRendering": [ + { + "location": [ + "point", + "centroid" + ], + "marker": [ + { + "icon": "circle", + "color": "white" + }, + { + "icon": "ring", + "color": "blue" + } + ] + }, + { + "location": [ + "point", + "centroid" + ], + "marker": [ + { + "icon": "./assets/layers/hotel/hotel.svg" + } + ], + "iconSize": "27,27" + } + ], + "lineRendering": [], + "presets": [ + { + "title": { + "en": "a love hotel" + }, + "description": { + "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities." + }, + "tags": [ + "amenity=love_hotel" + ] + } + ], + "tagRenderings": [ + "images", + "reviews", + { + "id": "name", + "question": { + "en": "What is the name of this love hotel?" + }, + "render": { + "en": "This love hotel is named {name}" + }, + "freeform": { + "key": "name" + } + }, + "contact" + ], + "credits": "Asteliks" +} diff --git a/assets/layers/note/note.json b/assets/layers/note/note.json index b8f69c142..a39f53107 100644 --- a/assets/layers/note/note.json +++ b/assets/layers/note/note.json @@ -56,7 +56,8 @@ { "ariaLabel": { "en": "See on OpenStreetMap.org", - "nl": "Bekijk op OpenStreetMap.org" + "nl": "Bekijk op OpenStreetMap.org", + "de": "Auf OpenStreetMap.org ansehen" }, "render": "" } diff --git a/assets/layers/playground/playground.json b/assets/layers/playground/playground.json index 4324a58df..52447d8f0 100644 --- a/assets/layers/playground/playground.json +++ b/assets/layers/playground/playground.json @@ -273,14 +273,16 @@ "if": "surface=tartan", "then": { "en": "The surface is tartan - a synthetic, springy surface typically seen on athletic pistes", - "nl": "De ondergrond bestaat uit Tartan - een synthetisch, elastisch en poreus materiaal dat je ook vindt op atletiekpistes" + "nl": "De ondergrond bestaat uit Tartan - een synthetisch, elastisch en poreus materiaal dat je ook vindt op atletiekpistes", + "de": "Der Belag ist aus Tartan - ein synthetischer, federnder Belag, der typischerweise auf Sportbahnen zu finden ist" } }, { "if": "surface=rubber", "then": { "en": "The surface is made from rubber, such as rubber tiles, rubber mulch or a big rubber area", - "nl": "De ondergrond bestaat uit rubber, zoals rubberen tegels, rubber snippers of een groot rubberen oppervlak" + "nl": "De ondergrond bestaat uit rubber, zoals rubberen tegels, rubber snippers of een groot rubberen oppervlak", + "de": "Die Oberfläche besteht aus Gummi, z. B. aus Gummifliesen, Gummimulch oder einer großen Gummifläche" } } ], diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index ada1d0582..e2f06be10 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -193,7 +193,8 @@ }, "editButtonAriaLabel": { "en": "Edit phone number", - "nl": "Pas telefoonnummer aan" + "nl": "Pas telefoonnummer aan", + "de": "Telefonnummer bearbeiten" } }, { @@ -276,7 +277,8 @@ }, "editButtonAriaLabel": { "en": "Edit email address", - "nl": "Pas emailadres aan" + "nl": "Pas emailadres aan", + "de": "E-Mail Adresse bearbeiten" } }, { @@ -330,7 +332,8 @@ ], "editButtonAriaLabel": { "en": "Edit website", - "nl": "Pas website aan" + "nl": "Pas website aan", + "de": "Webseite bearbeiten" } }, { @@ -2629,7 +2632,8 @@ }, "after": { "en": "Scan this code to open this location on another device", - "nl": "Scan deze code om deze locatie op een ander apparaat te zien" + "nl": "Scan deze code om deze locatie op een ander apparaat te zien", + "de": "Scannen Sie den Code, um diesen Ort auf einem anderen Gerät zu öffnen" } } }, @@ -2644,7 +2648,8 @@ "type": "share_link", "text": { "en": "Share this location", - "nl": "Deel deze locatie" + "nl": "Deel deze locatie", + "de": "Standort teilen" } } } diff --git a/assets/layers/school/school.json b/assets/layers/school/school.json index c8d26be0e..07ef243ce 100644 --- a/assets/layers/school/school.json +++ b/assets/layers/school/school.json @@ -435,12 +435,12 @@ "cs": "V této škole se používají následující jazyky:{list()}" }, "render_single_language": { - "en": "{language():font-bold} is the main language of this school", - "de": "{language():font-bold} ist die Hauptsprache der Schule", - "ca": "{language():font-bold} és la llengua principal d'aquesta escola", - "fr": "{language():font-bold} est la langue principale dans cette école", - "pl": "Język {language():font-bold} jest głównym językiem używanym w tej szkole", - "cs": "{language():font-bold} je hlavním jazykem této školy" + "en": "{language()} is the main language of this school", + "de": "{language()} ist die Hauptsprache der Schule", + "ca": "{language()} és la llengua principal d'aquesta escola", + "fr": "{language()} est la langue principale dans cette école", + "pl": "Język {language()} jest głównym językiem używanym w tej szkole", + "cs": "{language()} je hlavním jazykem této školy" }, "question": { "en": "What is the main language of this school?
What language is spoken with the students in non-language related courses and with the administration?
", diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index be124f8ca..d41defa33 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -109,6 +109,21 @@ "override": { "render": "./assets/layers/id_presets/maki-shop.svg", "+mappings": [ + { + "#": "Layer icon rendering", + "if": { + "or": [ + "shop=yes", + { + "and": [ + "shop!=yes", + "id=" + ] + } + ] + }, + "then": "./assets/layers/id_presets/maki-shop.svg" + }, { "if": { "or": [ @@ -128,11 +143,6 @@ { "if": "craft=key_cutter", "then": "./assets/layers/id_presets/fas-key.svg" - }, - { - "#": "Layer icon rendering", - "if": "id=", - "then": "./assets/layers/id_presets/maki-shop.svg" } ] } @@ -206,7 +216,7 @@ "en": "You can specify later on what this shop sells.", "ca": "Podeu especificar més endavant el que ven aquesta botiga.", "cs": "Přidat nový obchod", - "de": "Ein neues Geschäft hinzufügen", + "de": "Sie können später angeben, was das Geschäft verkauft.", "eo": "Enmeti novan butikon", "es": "Añadir una nueva tienda", "fr": "Ajouter un nouveau magasin", diff --git a/assets/layers/sport_pitch/sport_pitch.json b/assets/layers/sport_pitch/sport_pitch.json index 37629af29..8081d8a7a 100644 --- a/assets/layers/sport_pitch/sport_pitch.json +++ b/assets/layers/sport_pitch/sport_pitch.json @@ -475,7 +475,8 @@ "then": { "en": "The surface of this track is Tartan, a synthetic, slightly springy, porous surface", "nl": "De ondergrond is Tartan, een synthetisch, licht verende en poreuze ondergrond", - "ca": "La superfície d'aquesta pista és Tartan, una superfície sintètica, lleugerament molla i porosa" + "ca": "La superfície d'aquesta pista és Tartan, una superfície sintètica, lleugerament molla i porosa", + "de": "Der Belag dieser Laufbahn ist Tartan, ein synthetischer, leicht federnder, poröser Belag" } } ], diff --git a/assets/layers/stairs/stairs.json b/assets/layers/stairs/stairs.json index d51da3c48..c51fbf6a5 100644 --- a/assets/layers/stairs/stairs.json +++ b/assets/layers/stairs/stairs.json @@ -205,18 +205,18 @@ "cs": "Ve kterých jazycích existuje hmatové písmo (braillské písmo) pro navigaci? " }, "render_list_item": { - "en": "These stairs have tactile writing in {language():font-bold}", - "de": "Die Treppe hat taktile Schrift in {language():font-bold}", - "nl": "Deze trap heeft voelbaar schrijft in {language():font-bold}", - "ca": "Aquestes escales tenen escriptura tàctil en {language():font-bold}", - "cs": "Tyto schody mají hmatové písmo v {language():font-bold}" + "en": "These stairs have tactile writing in {language()}", + "de": "Die Treppe hat taktile Schrift in {language()}", + "nl": "Deze trap heeft voelbaar schrijft in {language()}", + "ca": "Aquestes escales tenen escriptura tàctil en {language()}", + "cs": "Tyto schody mají hmatové písmo v {language()}" }, "render_single_language": { - "en": "These stairs have tactile writing in {language():font-bold}", - "de": "Die Treppe hat taktile Schrift in {language():font-bold}", - "nl": "Deze trap heeft voelbaar schrijft in {language():font-bold}", - "ca": "Aquestes escales tenen escriptura tàctil en {language():font-bold}", - "cs": "Tyto schody mají hmatové písmo v {language():font-bold}" + "en": "These stairs have tactile writing in {language()}", + "de": "Die Treppe hat taktile Schrift in {language()}", + "nl": "Deze trap heeft voelbaar schrijft in {language()}", + "ca": "Aquestes escales tenen escriptura tàctil en {language()}", + "cs": "Tyto schody mají hmatové písmo v {language()}" } } } @@ -294,7 +294,8 @@ "id": "incline", "render": { "en": "These stairs have an incline of {incline}", - "ca": "Aquestes escales tenen una inclinació de {incline}" + "ca": "Aquestes escales tenen una inclinació de {incline}", + "de": "Die Treppe hat eine Steigung von {incline}" }, "freeform": { "key": "incline", @@ -302,14 +303,16 @@ }, "question": { "en": "What is the incline of these stairs?", - "ca": "Quina és la inclinació d'aquestes escales?" + "ca": "Quina és la inclinació d'aquestes escales?", + "de": "Welche Steigung hat die Treppe?" }, "mappings": [ { "if": "incline=up", "then": { "en": "The upward direction is {direction_absolute()}", - "ca": "La direcció ascendent és {direction_absolute()}" + "ca": "La direcció ascendent és {direction_absolute()}", + "de": "Die Aufwärtsrichtung ist {direction_absolute()}" }, "hideInAnswer": true }, @@ -317,7 +320,8 @@ "if": "incline=down", "then": { "en": "The downward direction is {direction_absolute()}", - "ca": "La direcció descendent és {direction_absolute()}" + "ca": "La direcció descendent és {direction_absolute()}", + "de": "Die Abwärtsrichtung ist {direction_absolute()}" }, "hideInAnswer": true } diff --git a/assets/layers/toilet/baby.svg b/assets/layers/toilet/baby.svg new file mode 100644 index 000000000..6a711ce21 --- /dev/null +++ b/assets/layers/toilet/baby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/layers/toilet/baby.svg.license b/assets/layers/toilet/baby.svg.license new file mode 100644 index 000000000..e02432610 --- /dev/null +++ b/assets/layers/toilet/baby.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Bianca Teixeira +SPDX-License-Identifier: CC0-1.0 \ No newline at end of file diff --git a/assets/layers/toilet/license_info.json b/assets/layers/toilet/license_info.json index 11318c592..af127dea4 100644 --- a/assets/layers/toilet/license_info.json +++ b/assets/layers/toilet/license_info.json @@ -1,4 +1,14 @@ [ + { + "path": "baby.svg", + "license": "CC0-1.0", + "authors": [ + "Bianca Teixeira" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Baby_(75158)_-_The_Noun_Project.svg" + ] + }, { "path": "toilets.svg", "license": "CC0-1.0", diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index d4266476c..4e528c901 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -576,7 +576,8 @@ "ca": "Hi ha un canviador per a nadons", "cs": "Přebalovací pult je k dispozici" }, - "if": "changing_table=yes" + "if": "changing_table=yes", + "icon": "./assets/layers/toilet/baby.svg" }, { "if": "changing_table=no", @@ -610,10 +611,10 @@ "cs": "Kde je umístěn přebalovací pult?" }, "render": { - "en": "The changing table is located at {changing_table:location}", - "de": "Die Wickeltabelle befindet sich in {changing_table:location}", + "en": "A changing table is located at {changing_table:location}", + "de": "Ein Wickeltisch befindet sich in {changing_table:location}", "fr": "Emplacement de la table à langer : {changing_table:location}", - "nl": "De luiertafel bevindt zich in {changing_table:location}", + "nl": "Er bevindt zich een luiertafel in {changing_table:location}", "it": "Il fasciatoio si trova presso {changing_table:location}", "es": "El cambiador está en {changing_table:location}", "da": "Puslebordet er placeret på {changing_table:location}", @@ -632,10 +633,10 @@ "mappings": [ { "then": { - "en": "The changing table is in the toilet for women. ", - "de": "Der Wickeltisch befindet sich in der Damentoilette. ", + "en": "A changing table is in the toilet for women", + "de": "Ein Wickeltisch ist in der Damentoilette vorhanden", "fr": "La table à langer est dans les toilettes pour femmes. ", - "nl": "De luiertafel bevindt zich in de vrouwentoiletten ", + "nl": "Er bevindt zich een luiertafel in de vrouwentoiletten ", "it": "Il fasciatoio è nei servizi igienici femminili. ", "da": "Puslebordet er på toilettet til kvinder. ", "ca": "El canviador està al lavabo per a dones. ", @@ -645,10 +646,10 @@ }, { "then": { - "en": "The changing table is in the toilet for men. ", - "de": "Der Wickeltisch befindet sich in der Herrentoilette. ", + "en": "A changing table is in the toilet for men", + "de": "Ein Wickeltisch ist in der Herrentoilette vorhanden", "fr": "La table à langer est dans les toilettes pour hommes. ", - "nl": "De luiertafel bevindt zich in de herentoiletten ", + "nl": "Er bevindt zich een luiertafel in de herentoiletten ", "it": "Il fasciatoio è nei servizi igienici maschili. ", "ca": "El canviador està al lavabo per a homes. ", "cs": "Přebalovací pult je na pánské toaletě. " @@ -658,10 +659,10 @@ { "if": "changing_table:location=wheelchair_toilet", "then": { - "en": "The changing table is in the toilet for wheelchair users. ", - "de": "Der Wickeltisch befindet sich in der Toilette für Rollstuhlfahrer. ", + "en": "A changing table is in the toilet for wheelchair users", + "de": "Ein Wickeltisch ist in der barrierefreien Toilette vorhanden", "fr": "La table à langer est dans les toilettes pour personnes à mobilité réduite. ", - "nl": "De luiertafel bevindt zich in de rolstoeltoegankelijke toilet ", + "nl": "Er bevindt zich een luiertafel in de rolstoeltoegankelijke toilet ", "it": "Il fasciatoio è nei servizi igienici per persone in sedia a rotelle. ", "da": "Puslebordet er på toilettet for kørestolsbrugere. ", "ca": "El canviador està al lavabo per a usuaris de cadira de rodes. ", @@ -671,10 +672,10 @@ { "if": "changing_table:location=dedicated_room", "then": { - "en": "The changing table is in a dedicated room. ", - "de": "Der Wickeltisch befindet sich in einem eigenen Raum. ", + "en": "A changing table is in a dedicated room", + "de": "Ein Wickeltisch befindet sich in einem eigenen Raum", "fr": "La table à langer est dans un espace dédié. ", - "nl": "De luiertafel bevindt zich in een daartoe voorziene kamer ", + "nl": "Er bevindt zich een luiertafel in een daartoe voorziene kamer ", "it": "Il fasciatoio è in una stanza dedicata. ", "es": "El cambiador está en una habitación dedicada ", "da": "Vuggestuen står i et særligt rum. ", diff --git a/assets/layers/unit/unit.json b/assets/layers/unit/unit.json index a197e3b02..f05fea928 100644 --- a/assets/layers/unit/unit.json +++ b/assets/layers/unit/unit.json @@ -1,7 +1,8 @@ { "id": "unit", "description": { - "en": "Library layer with all common units. Units can _only_ be imported from this file." + "en": "Library layer with all common units. Units can _only_ be imported from this file.", + "de": "Bibliotheksebene mit allen gängigen Einrichtungen. Einrichtungen können _nur_ aus dieser Datei importiert werden." }, "source": "special:library", "pointRendering": null, @@ -115,7 +116,8 @@ ], "human": { "en": "{quantity} Volt", - "nl": "{quantity} volt" + "nl": "{quantity} volt", + "de": "{quantity} Volt" } } ], @@ -135,7 +137,8 @@ "human": { "en": "{quantity} A", "nl": "{quantity} A", - "ca": "{quantity} A" + "ca": "{quantity} A", + "de": "{quantity} A" } } ], @@ -202,7 +205,8 @@ "humanSingular": { "en": "one centimeter", "nl": "één centimeter", - "ca": "un centímetre" + "ca": "un centímetre", + "de": "ein Zentimeter" } }, { @@ -337,12 +341,14 @@ "human": { "en": "{quantity} minutes", "nl": "{quantity} minuten", - "ca": "{quantity} minuts" + "ca": "{quantity} minuts", + "de": "{quantity} Minuten" }, "humanSingular": { "en": "one minute", "nl": "één minuut", - "ca": "un minut" + "ca": "un minut", + "de": "eine Minute" } }, { @@ -360,12 +366,14 @@ "human": { "en": "{quantity} hours", "nl": "{quantity} uren", - "ca": "{quantity} hores" + "ca": "{quantity} hores", + "de": "{quantity} Stunden" }, "humanSingular": { "en": "one hour", "nl": "één uur", - "ca": "una hora" + "ca": "una hora", + "de": "eine Stunde" } }, { @@ -380,11 +388,13 @@ "human": { "en": "{quantity} days", "nl": "{quantity} day", - "ca": "{quantity} dies" + "ca": "{quantity} dies", + "de": "{quantity} Tage" }, "humanSingular": { "en": "one day", - "nl": "één dag" + "nl": "één dag", + "de": "ein Tag" } } ] diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json index baaaa9bce..3e6673971 100644 --- a/assets/layers/usersettings/usersettings.json +++ b/assets/layers/usersettings/usersettings.json @@ -49,9 +49,10 @@ "icon": "./assets/layers/usersettings/translate_disabled.svg", "then": { "en": "The language was set via an URL-parameter and cannot be set by the user.", - "de": "Die Sprache wurde über einen URL-Parameter gesetzt und kann nicht vom Benutzer eingestellt werden.²", + "de": "Die Sprache wurde über einen URL-Parameter gesetzt und kann nicht vom Benutzer eingestellt werden.", "ca": "L'idioma es va establir mitjançant un paràmetre d'URL i l'usuari no pot definir-lo.", - "cs": "Jazyk byl nastaven pomocí parametru URL a uživatel jej nemůže nastavit.²" + "cs": "Jazyk byl nastaven pomocí parametru URL a uživatel jej nemůže nastavit.²", + "nl": "De taal werd ingesteld via een URL-parameter en kan niet manueel ingesteld worden." } } ] @@ -82,9 +83,10 @@ "type": "link", "text": { "en": "You have {_unreadMessages} messages
Open your inbox", - "de": "Du hast {_unreadMessages}
Öffne Deinen Posteingang", + "de": "Sie haben {_unreadMessages} Nachrichten
Posteingang öffnen", "ca": "Tens {_unreadMessages} missatges
Obri la safata d'entrada", - "cs": "Máte {_unreadMessages}
Otevřít schránku" + "cs": "Máte {_unreadMessages}
Otevřít schránku", + "nl": "Je hebt {_unreadMessages} ongelezen berichten
Ga naar je inbox" }, "href": "{_backend}/messages/inbox" } @@ -101,7 +103,8 @@ "en": "Open your settings on OpenStreetMap.org", "de": "Öffne Deine Einstellungen auf OpenStreetMap.org", "ca": "Obriu la vostra configuració a OpenStreetMap.org", - "cs": "Otevřít vaše nastavení na OpenStreetMap.org" + "cs": "Otevřít vaše nastavení na OpenStreetMap.org", + "nl": "Open je instellingen op OpenStreetMap.org" }, "href": "{_backend}/account/edit" } @@ -116,7 +119,9 @@ { "id": "a11y-features", "question": { - "en": "What accessibility features should be applied?" + "en": "What accessibility features should be applied?", + "nl": "Wanneer moet de toegankelijkheidsmode ingeschakeld worden?", + "de": "Welche Barrierefrei-Funktionen sollen angewendet werden?" }, "mappings": [ { @@ -124,20 +129,26 @@ "alsoShowIf": "mapcomplete-a11y=", "then": { "en": "Enable accessibility features when arrow keys are used to navigate the map", - "ca": "Activar les funcions d'accessibilitat quan s'utilitzen les tecles de fletxa per navegar pel mapa" + "ca": "Activar les funcions d'accessibilitat quan s'utilitzen les tecles de fletxa per navegar pel mapa", + "nl": "Schakel toegankelijkheidsmode aan wanneer op de pijltjestoetsen wordt geduwd om de kaart te bewegen", + "de": "Barrierefrei-Modus aktivieren, wenn Pfeiltasten zum Navigieren in der Karte verwendet werden" } }, { "if": "mapcomplete-a11y=always", "then": { "en": "Always enable accessibility features", - "ca": "Sempre habilita les característiques d'accessibilitat" + "ca": "Sempre habilita les característiques d'accessibilitat", + "nl": "Schakel de toegankelijkheidsmode altijd aan", + "de": "Barrierefrei-Modus immer aktivieren" } }, { "if": "mapcomplete-a11y=never", "then": { - "en": "Never enable accessibility features" + "en": "Never enable accessibility features", + "nl": "Gebruik geen toegankelijkheidsmode", + "de": "Barrierefrei-Modus niemals aktivieren" } } ] @@ -407,7 +418,8 @@ "question": { "en": "Should a crosshair be shown in the center of the display?", "cs": "Měl by se uprostřed displeje zobrazovat kříž?", - "de": "Soll ein Fadenkreuz in der Mitte des Bildschirms angezeigt werden?" + "de": "Soll ein Fadenkreuz in der Mitte des Bildschirms angezeigt werden?", + "nl": "Moet er een kruisje getoond worden in het centrum van je display?" }, "questionHint": { "en": "This can help to accurately position a new element", @@ -442,7 +454,8 @@ "en": "Should north always be up?", "de": "Soll Norden immer oben sein?", "ca": "El nord hauria d'estar sempre amunt?", - "cs": "Měl by být sever vždy nahoře?" + "cs": "Měl by být sever vždy nahoře?", + "nl": "Moet het noorden altijd naar boven getoond worden?" }, "mappings": [ { @@ -464,7 +477,8 @@ "de": "Norden immer nach oben zeigen lassen", "fr": "Toujours garder le nord en haut", "ca": "Mantingueu sempre el nord apuntant cap amunt", - "cs": "Sever vždy směřujte nahoru" + "cs": "Sever vždy směřujte nahoru", + "nl": "Hou het noorden altijd naar boven" } } ] @@ -481,7 +495,8 @@ "de": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter", "da": "Hent den private nøgle til din Mangrove-konto", "ca": "Baixeu la clau privada del vostre compte de Mangrove", - "cs": "Stáhnout soukromý klíč pro Mangrove účet" + "cs": "Stáhnout soukromý klíč pro Mangrove účet", + "nl": "Download de private sleutel van je Mangrove-account" } }, "after": { diff --git a/assets/svg/satellite.svg b/assets/svg/satellite.svg deleted file mode 100644 index 506a593bf..000000000 --- a/assets/svg/satellite.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/themes/cyclenodes/cyclenodes.json b/assets/themes/cyclenodes/cyclenodes.json index 9e2d3ba35..f77308652 100644 --- a/assets/themes/cyclenodes/cyclenodes.json +++ b/assets/themes/cyclenodes/cyclenodes.json @@ -36,7 +36,7 @@ "name": { "en": "Node to node links", "de": "Knotenpunktverbindungen", - "es": "enlaces nodo a nodo", + "es": "Vínculos entre nodos", "nl": "Verbindingen van node naar node", "fr": "liens noeud à noeud", "ca": "Enllaços node a node", @@ -57,7 +57,7 @@ "render": { "en": "Node to node link", "de": "Knotenpunktverbindung", - "es": "enlace nodo a nodo", + "es": "Vínculos entre nodos", "nl": "Node-naar-node verbinding", "fr": "lien noeud à noeud", "ca": "Enllaç node a node", @@ -70,7 +70,7 @@ "then": { "en": "Node to node link {ref}", "de": "Knotenpunktverbindung {ref}", - "es": "enlace nodo a nodo {ref}", + "es": "Vínculos entre nodos {ref}", "nl": "Node-naar-node verbinding {ref}", "fr": "lien noeud à noeud {ref}", "ca": "Enllaç node a node {ref}", @@ -131,7 +131,7 @@ "en": "Nodes", "de": "Knotenpunkte", "ca": "Nodes", - "es": "nodos", + "es": "Nodos", "nb_NO": "noder", "nl": "Knooppunten", "fr": "noeuds", @@ -202,7 +202,8 @@ "then": { "en": "Proposed cycle node {proposed:rcn_ref}", "nl": "Voorgesteld fietsknooppunt {proposed:rcn_ref}", - "de": "Vorgeschlagener Radknoten {proposed:rcn_ref}" + "de": "Vorgeschlagener Radknoten {proposed:rcn_ref}", + "es": "Nodo de ciclo propuesto {proposed:rcn_ref}" } } ] @@ -215,7 +216,8 @@ "nl": "Wat is het referentienummer van dit fietsknooppunt?", "de": "Wie lautet die Nummer des Knotenpunkts im Fahrradknotenpunktnetzwerk?", "cs": "Jaké je referenční číslo tohoto cyklistického uzlu?", - "ca": "Quin és el número de referència d'aquest node ciclista?" + "ca": "Quin és el número de referència d'aquest node ciclista?", + "es": "¿Cuál es el número de referencia de este nodo cíclico?" }, "freeform": { "key": "rcn_ref", @@ -224,7 +226,8 @@ "en": "e.g. 1", "nl": "bijv. 1", "de": "z.B. 1", - "cs": "e.g. 1" + "cs": "e.g. 1", + "es": "Por ejemplo, 1" } }, "render": { @@ -232,7 +235,8 @@ "nl": "Dit fietsknooppunt heeft referentienummer {rcn_ref}", "de": "Knotenpunktnummer {rcn_ref} des Fahrradknotenpunktnetzwerks", "cs": "Tento cyklistický uzel má referenční číslo {rcn_ref}", - "ca": "Aquest node ciclista té la referència número {rcn_ref}" + "ca": "Aquest node ciclista té la referència número {rcn_ref}", + "es": "Este nodo cíclico tiene el número de referencia {rcn_ref}" }, "condition": "rcn_ref~*" }, @@ -290,7 +294,8 @@ "en": "e.g. 3", "nl": "bijv. 3", "de": "z.B. 3", - "cs": "e.g. 3" + "cs": "e.g. 3", + "es": "Por ejemplo, 3" } }, "id": "node-expected_rcn_route_relations" @@ -307,7 +312,8 @@ "en": "a cycling node", "nl": "een fietsknooppunt", "de": "ein Knoten eines Fahrradknotenpunktnetzwerks", - "ca": "un node ciclista" + "ca": "un node ciclista", + "es": "un nodo cíclico" }, "snapToLayer": [ "cycleways_and_roads" @@ -341,13 +347,15 @@ "name": { "en": "Cycling guideposts", "de": "Fahrrad-Wegweiser", - "cs": "Cyklistické ukazatele" + "cs": "Cyklistické ukazatele", + "es": "Indicadores de ciclismo" }, "title": { "render": { "en": "Cycling guidepost", "de": "Fahrrad-Wegweiser", - "cs": "Cyklistický ukazatel" + "cs": "Cyklistický ukazatel", + "es": "Hito ciclista" } } }, @@ -375,7 +383,8 @@ "title": { "en": "a route marker for a node to node link", "de": "Eine Routenmarkierung für eine Verbindung von Knoten zu Knoten", - "cs": "značka trasy pro spojení mezi uzlem" + "cs": "značka trasy pro spojení mezi uzlem", + "es": "Un marcador de ruta para un enlace de nodo a nodo" }, "=exampleImages": [ "./assets/layers/route_marker/bicycle_route_marker.jpg" diff --git a/assets/themes/fritures/fritures.json b/assets/themes/fritures/fritures.json index 7fe6e095a..1543f2b9a 100644 --- a/assets/themes/fritures/fritures.json +++ b/assets/themes/fritures/fritures.json @@ -64,14 +64,16 @@ { "question": { "en": "No oil type preference", - "de": "Kein Öltyp bevorzugt" + "de": "Kein Öltyp bevorzugt", + "es": "No se prefiere ningún tipo de aceite" } }, { "question": { "en": "Only show fritures using vegetable oil", "de": "Nur Friteusen mit Pflanzenöl anzeigen", - "ca": "Només mostra freiduries que utilitzen oli vegetal" + "ca": "Només mostra freiduries que utilitzen oli vegetal", + "es": "Solo muestra freiduras que utilizan aceite vegetal" }, "osmTags": "friture:oil=vegetable" }, @@ -79,7 +81,8 @@ "question": { "en": "Only show fritures using animal oil", "de": "Nur Friteusen mit tierischem Öl anzeigen", - "ca": "Només mostra freiduries que utilitzen oli animal" + "ca": "Només mostra freiduries que utilitzen oli animal", + "es": "Solo muestra freiduras que utilizan aceite animal" }, "osmTags": "friture:oil=animal" } diff --git a/assets/themes/hackerspaces/hackerspaces.json b/assets/themes/hackerspaces/hackerspaces.json index a8bf4a070..48ed9347b 100644 --- a/assets/themes/hackerspaces/hackerspaces.json +++ b/assets/themes/hackerspaces/hackerspaces.json @@ -1,8 +1,8 @@ { "id": "hackerspaces", "title": { - "en": "Hackerspaces", - "de": "Hackerspaces", + "en": "Hackerspaces and makerspaces", + "de": "Hackerspaces und Makerspaces", "it": "Hackerspace", "ru": "Хакерспейсы", "zh_Hant": "駭客空間", @@ -13,7 +13,7 @@ "ca": "Espai per a hackers", "pa_PK": "ہیکر دے تھاں", "cs": "Hackerspaces", - "es": "Hackerspaces", + "es": "Hackerspaces and makerspaces", "eu": "Hackerspace", "pl": "Hackerspace'y" }, diff --git a/assets/themes/icecream/icecream.json b/assets/themes/icecream/icecream.json index cea2d3476..483b5a991 100644 --- a/assets/themes/icecream/icecream.json +++ b/assets/themes/icecream/icecream.json @@ -4,16 +4,19 @@ "en": "Icecream", "de": "Eiscreme", "cs": "Zmrzlina", - "ca": "Gelat" + "ca": "Gelat", + "es": "Helado" }, "description": { "en": "A map showing ice cream parlors and ice cream vending machines", "de": "Eine Karte, die Eisdielen und Eisautomaten zeigt", "cs": "Mapa zobrazující prodej zmrzliny a automaty na zmrzlinu", - "ca": "Un mapa que mostra les gelateries i les màquines expenedores de gelats" + "ca": "Un mapa que mostra les gelateries i les màquines expenedores de gelats", + "es": "Mapa de heladerías y máquinas expendedoras de helados" }, "icon": "./assets/layers/ice_cream/ice_cream.svg", "layers": [ "ice_cream" - ] + ], + "minzoom": "14" } diff --git a/assets/themes/openlovemap/openlovemap.json b/assets/themes/openlovemap/openlovemap.json index 2fd24944b..d7a1a42df 100644 --- a/assets/themes/openlovemap/openlovemap.json +++ b/assets/themes/openlovemap/openlovemap.json @@ -1,6 +1,5 @@ { "id": "openlovemap", - "hideFromOverview": true, "title": { "en": "Open Love Map" }, @@ -8,6 +7,7 @@ "en": "

Love in the palm of your hand

Open Love Map lists various adult entries, such as brothels, erotic stores and stripclubs." }, "icon": "./assets/layers/stripclub/stripclub.svg", + "hideFromOverview": true, "layers": [ "brothel", "stripclub", @@ -22,6 +22,9 @@ "=filter": [ "open_now" ], + "name": { + "en": "Erotic shops" + }, "=presets": [ { "title": { @@ -39,7 +42,10 @@ "override": { "minzoom": 18, "=presets": [], - "=name": null + "=name": null, + "=filter": { + "sameAs": "erotic-shop" + } } }, { @@ -109,13 +115,14 @@ "override": { "minzoom": 18, "=presets": [], - "=name": null + "=name": null } }, - { "builtin": "cinema", - "hideTagRenderingsWithLabels": ["wikipedia"], + "hideTagRenderingsWithLabels": [ + "wikipedia" + ], "override": { "id": "erotic_cinema", "pointRendering": [ @@ -154,7 +161,9 @@ "=filter": [ "open_now" ], - "tagRenderings+": ["opening_hours"], + "tagRenderings+": [ + "opening_hours" + ], "source": { "osmTags": { "=and": [ @@ -182,29 +191,63 @@ "override": { "minzoom": 18, "=presets": [], - "=name": null + "=name": null + } + }, + "love_hotel", + { + "builtin": "hotel", + "override": { + "minzoom": 17, + "+tagRenderings": [ + { + "id": "hotel-type", + "question": { + "en": "What type of hotel is this?" + }, + "mappings": [ + { + "if": "tourism=hotel", + "then": "This is a regular, tourist hotel where people stay multiple days", + "addExtraTags": [ + "amenity=" + ] + }, + { + "if": "amenity=love_hotel", + "then": "This is a love hotel where people rent rooms for sexual activity. The hotel rent rooms for a few days", + "addExtraTags": [ + "tourism=" + ] + } + ] + } + ], + "=presets": [] } } ], "overrideAll": { - "tagRenderings+": [{ - "id": "has_video_booth", - "question": {"en": - "Does {title()} have a private video booth?" - }, - "questionHint": { - "en": "This is for use by a single person." - }, - "mappings": [ - { - "if": "service:private_video_booth=yes", - "then": "Private video booths are available" + "tagRenderings+": [ + { + "id": "has_video_booth", + "question": { + "en": "Does {title()} have a private video booth?" }, - { - "if": "service:private_video_booth=no", - "then": "No private video booths" - } - ] - }] + "questionHint": { + "en": "This is for use by a single person." + }, + "mappings": [ + { + "if": "service:private_video_booth=yes", + "then": "Private video booths are available" + }, + { + "if": "service:private_video_booth=no", + "then": "No private video booths" + } + ] + } + ] } } diff --git a/langs/ca.json b/langs/ca.json index a3ec84188..9c967bc8f 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -347,7 +347,6 @@ "uploading": "S'està penjant la teva traça…" }, "useSearch": "Utilitzeu la cerca de dalt per veure els valors predefinits", - "useSearchForMore": "Utilitzeu la funció de cerca per cercar dins de {total} valors més…", "visualFeedback": { "directionsRelative": { "left": "esquerra", diff --git a/langs/cs.json b/langs/cs.json index d2e244343..17aa939ff 100644 --- a/langs/cs.json +++ b/langs/cs.json @@ -345,7 +345,6 @@ "uploadPendingSingle": "Čeká se na jednu změnu", "uploadingChanges": "Nahrávání změn…", "useSearch": "Pro zobrazení předvoleb použijte vyhledávání výše", - "useSearchForMore": "Pomocí funkce hledání můžete v rámci {total} vyhledat více hodnot…", "waitingForGeopermission": "Čekáme na vaše povolení používat geolokaci…", "waitingForLocation": "Vyhledávání vaší aktuální polohy…", "weekdays": { diff --git a/langs/de.json b/langs/de.json index d9a6a85a6..dd1f6c862 100644 --- a/langs/de.json +++ b/langs/de.json @@ -186,7 +186,8 @@ "backgroundSwitch": "Hintergrund wechseln", "cancel": "Abbrechen", "confirm": "Bestätigen", - "customThemeIntro": "

Benutzerdefinierte Themen

Dies sind zuvor angesehene nutzergenerierte Themen.", + "customThemeIntro": "Bereits angesehene nutzergenerierte Themen.", + "customThemeTitle": "Benutzerdefinierte Themen", "download": { "downloadAsPdf": "Aktuelle Karte als PDF herunterladen", "downloadAsPdfHelper": "Ideal zum Drucken der aktuellen Karte", @@ -230,6 +231,7 @@ "labels": { "background": "Hintergrund ändern", "filter": "Daten filtern", + "jumpToLocation": "Eigenen Standort anzeigen", "menu": "Menü", "zoomIn": "Hineinzoomen", "zoomOut": "Herauszoomen" @@ -279,13 +281,17 @@ "openTheMap": "Karte öffnen", "openTheMapAtGeolocation": "Zum eigenen Standort zoomen", "opening_hours": { + "all_days_from": "Geöffnet täglich {ranges}", "closed_permanently": "Geschlossen auf unbestimmte Zeit", "closed_until": "Geschlossen bis {date}", + "error": "Öffnungszeiten können nicht ausgewertet werden", "error_loading": "Fehler: Diese Öffnungszeiten können nicht angezeigt werden.", "friday": "Am Freitag {ranges}", "loadingCountry": "Land ermitteln…", "monday": "Am Montag {ranges}", "not_all_rules_parsed": "Die Öffnungszeiten sind kompliziert. Folgenden Regeln werden im Eingabefenster ignoriert:", + "on_weekdays": "Geöffnet werktags {ranges}", + "on_weekends": "Geöffnet am Wochenende {ranges}", "openTill": "bis", "open_24_7": "Durchgehend geöffnet", "open_during_ph": "An Feiertagen ist hier", @@ -344,6 +350,7 @@ "searchShort": "Suche…", "searching": "Suchen …" }, + "searchAnswer": "Option suchen…", "share": "Teilen", "sharescreen": { "copiedToClipboard": "Verknüpfung in Zwischenablage kopiert", @@ -359,7 +366,7 @@ "testing": "Testen - Änderungen werden nicht gespeichert", "uploadError": "Fehler beim Hochladen von Änderungen: {error}", "uploadGpx": { - "choosePermission": "Wählen Sie unten, ob Ihre Strecke geteilt werden soll:", + "choosePermission": "Wählen Sie unten, wie Ihre Strecke geteilt werden soll:", "confirm": "Hochladen bestätigen", "gpxServiceOffline": "Der GPX-Dienst ist derzeit offline - ein Hochladen ist derzeit nicht möglich. Versuchen Sie es später noch einmal.", "intro0": "Wenn Sie Ihre Strecke hochladen, behält OpenStreetMap.org eine vollständige Kopie der Strecke.", @@ -389,8 +396,8 @@ "uploadPendingSingle": "Eine Änderung ausstehend", "uploadingChanges": "Änderungen werden hochgeladen…", "useSearch": "Verwenden Sie die Suche oben, um Voreinstellungen anzuzeigen", - "useSearchForMore": "Verwenden Sie die Suchfunktion, um innerhalb von {total} weitere Werte zu suchen…", "visualFeedback": { + "closestFeaturesAre": "{n} Objekte im Anzeigebereich.", "directionsAbsolute": { "E": "Ost", "N": "Nord", @@ -402,6 +409,7 @@ "W": "West" }, "directionsRelative": { + "behind": "in deinem Rücken", "left": "links", "right": "rechts", "sharp_left": "scharf links", @@ -409,7 +417,23 @@ "slight_left": "leicht links", "slight_right": "leicht rechts", "straight": "geradeaus" - } + }, + "east": "Nach Osten bewegen", + "fromGps": "{distance} {direction} von deinem Standort", + "fromMapCenter": "{distance} {direction} von der Kartenmitte", + "in": "Hineinzoomen auf Stufe {z}", + "islocked": "Die Ansicht ist an Ihren GPS-Standort gebunden, Bewegen ist deaktiviert. Drücken Sie zum Entsperren die Geolocation-Taste.", + "locked": "Die Ansicht ist jetzt an Ihren GPS-Standort gebunden, Bewegen ist deaktiviert.", + "navigation": "Verwenden Sie die Pfeiltasten, um die Karte zu bewegen, drücken Sie die Leertaste, um das nächstgelegene Objekt auszuwählen. Drücken Sie eine Zahl, um weiter entfernte Objekte auszuwählen.", + "noCloseFeatures": "Keine Objekte im Anzeigebereich.", + "north": "Nach Norden bewegen", + "oneFeatureInView": "Ein Objekt im Anzeigebereich.", + "out": "Herauszoomen auf Stufe {z}", + "south": "Nach Süden bewegen", + "unlocked": "Bewegen aktiviert.", + "viewportCenterCloseToGps": "Die Karte wird um Ihren Standort zentriert.", + "viewportCenterDetails": "Die Kartenmitte ist {distance} und {bearing} von Ihrem Standort entfernt.", + "west": "Nach Westen bewegen" }, "waitingForGeopermission": "Warten auf Ihre Erlaubnis, Standortdaten zu verwenden…", "waitingForLocation": "Ihr Standort wird gesucht…", @@ -461,18 +485,22 @@ "geolocate": "Karte auf den aktuellen Standort verschieben oder zoomen. Erfordert Standortberechtigung", "intro": "MapComplete unterstützt folgende Tastaturbefehle:", "key": "Tastenkombination", + "openFilterPanel": "Öffnet das Panel für POI-Ebenen und Filter", "openLayersPanel": "Auswahl für Hintergrundebenen öffnen", + "queryCurrentLocation": "Adresse anzeigen, die der Kartenmitte am nächsten liegt", "selectAerial": "Hintergrund als Luftbild oder Satellitenbild einstellen. Wechselt zwischen den zwei besten verfügbaren Ebenen", "selectFavourites": "Favoriten anzeigen", "selectItem": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am nächsten liegt. Nur wenn die Tastaturnavigation verwendet wird", "selectItem2": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am zweitnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird", "selectItem3": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am drittnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird", - "selectItemI": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am viertnächsten liegt. Nur wenn die Tastaturnavigation verwendet wird", + "selectItemI": "Objekt auswählen, das dem Kartenmittelpunkt (Fadenkreuz) am {i} nächsten liegt. Nur wenn die Tastaturnavigation verwendet wird", "selectMap": "Karte aus externer Quelle als Hintergrund wählen. Wechselt zwischen den zwei besten verfügbaren Ebenen", "selectMapnik": "OpenStreetMap-carto als Hintergrundebene wählen", "selectOsmbasedmap": "OpenStreetMap-basierte Karte als Hintergrund auswählen (oder Hintergrundebene deaktivieren)", "selectSearch": "Suchleiste auswählen, um nach Orten zu suchen", - "title": "Tastaturbefehle" + "shakePhone": "Telefon schütteln", + "title": "Tastaturbefehle", + "translationMode": "Übersetzungsmodus ein- oder ausschalten" }, "image": { "addPicture": "Bild hinzufügen", @@ -481,7 +509,9 @@ "dontDelete": "Abbrechen", "isDeleted": "Gelöscht", "nearby": { + "close": "Übersicht mit nahegelegenen Bildern ausklappen", "link": "Dieses Bild zeigt das Objekt", + "noNearbyImages": "Keine nahegelegenen Bilder gefunden", "seeNearby": "Bilder in der Nähe durchsuchen und verlinken", "title": "Straßenbilder in der Nähe" }, @@ -628,15 +658,19 @@ "reviews": { "affiliated_reviewer_warning": "(Partner-Rezension)", "attribution": "Rezensionen von Mangrove Reviews sind unter CC-BY 4.0 verfügbar.", + "averageRating": "Mittlere Bewertung von {n} Sternen", "i_am_affiliated": "Ich bin mit diesem Objekt vertraut", "i_am_affiliated_explanation": "Prüfung, ob Sie der Eigentümer, Ersteller, Angestellter, … sind", "name_required": "Der Name des Objekts ist erforderlich, um Bewertungen zu erstellen und anzuzeigen", "no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!", "question": "Wie bewerten Sie {title()}?", "question_opinion": "Wie war Ihre Erfahrung?", + "rate": "Mit {n} Sternen bewerten", + "rated": "Mit {n} Sternen bewertet", + "reviewPlaceholder": "Beschreibe deine Erfahrung…", "reviewing_as": "Als {nickname} bewerten", "reviewing_as_anonymous": "Anonym bewerten", - "save": "Speichern", + "save": "Bewertung speichern", "saved": "Bewertung gespeichert. Danke fürs Teilen!", "saving_review": "Speichern…", "title": "{count} Rezensionen", @@ -649,7 +683,7 @@ "hasBeenSplit": "Dieser Weg wurde geteilt", "inviteToSplit": "Die Straße in Abschnitte teilen. Dadurch können je Abschnitt unterschiedliche Eigenschaften angegeben werden.", "loginToSplit": "Anmeldung erforderlich, um Straßen zu teilen", - "split": "Teilen", + "split": "Aufteilen", "splitAgain": "Diese Straße erneut teilen", "splitTitle": "Wähle auf der Karte aus, wo sich die Eigenschaften dieser Straße ändern" }, @@ -723,6 +757,10 @@ "description": "eine positive, ganze Zahl", "noZero": "Null ist nicht erlaubt" }, + "slope": { + "inputExplanation": "Legen Sie Ihr Telefon so auf den Boden, dass die Oberseite des Telefons zum oberen Ende des Hangs zeigt.", + "inputIncorrect": "Für korrekte Messungen achten Sie darauf, dass sich der Pfeil in der grünen Fläche befindet." + }, "string": { "description": "ein Stück Text" }, diff --git a/langs/en.json b/langs/en.json index f1a5e5c1f..613b798f1 100644 --- a/langs/en.json +++ b/langs/en.json @@ -217,6 +217,7 @@ }, "enableGeolocationForSafari": "Did you not get the popup to ask for geopermission?", "enableGeolocationForSafariLink": "Learn how to enable the geolocation permission in settings", + "eraseValue": "Erase this value", "error": "Something went wrong", "example": "Example", "examples": "Examples", @@ -395,8 +396,7 @@ "uploadPending": "{count} changes pending", "uploadPendingSingle": "One change pending", "uploadingChanges": "Uploading changes…", - "useSearch": "Use the search above to see presets", - "useSearchForMore": "Use the search function to search within {total} more values…", + "useSearch": "Use the search above to see more options", "visualFeedback": { "closestFeaturesAre": "{n} features within viewport.", "directionsAbsolute": { @@ -723,7 +723,8 @@ "fediverse": { "description": "A fediverse handle, often @username@server.tld", "feedback": "A fediverse handle consists of @username@server.tld or is a link to a profile", - "invalidHost": "{host} is not a valid hostname" + "invalidHost": "{host} is not a valid hostname", + "onYourServer": "See and follow on your server" }, "float": { "description": "a number", diff --git a/langs/fi.json b/langs/fi.json index 5ae0f8515..6c059697a 100644 --- a/langs/fi.json +++ b/langs/fi.json @@ -157,6 +157,7 @@ "attributionBackgroundLayerWithCopyright": "Nykyinen taustataso on {name}: {copyright}", "attributionContent": "

Kaiken datan tarjoaa OpenStreetMap, vapaasti uudelleenkäytettävissä Open Database Licensen mukaisesti.

", "attributionTitle": "Kiitokset", + "codeContributionsBy": "MapCompleten on tehneet {contributors} ja {hiddenCount} muuta", "donate": "Tue MapCompletea rahallisesti", "editId": "Avaa OpenStreetMap-verkkoeditori tänne", "editJosm": "Muokkaa täällä JOSM:illa", @@ -164,9 +165,17 @@ "iconAttribution": { "title": "Käytetyt kuvakkeet" }, + "josmNotOpened": "JOSM:iin ei saatu yhteyttä. Tarkista, että se on auki ja etähallinta on käytössä", "josmOpened": "JOSM on avattu", + "mapContributionsBy": "Tällä hetkellä näkyvää tietoa on muokannut {contributors}", + "mapContributionsByAndHidden": "Tällä hetkellä näkyvää tietoa on muokannut {contributors} ja {hiddenCount} muuta", + "mapDataByOsm": "Karttatiedot: OpenStreetMap", + "mapillaryHelp": "Mapillary on verkkopalvelu, joka kerää katutason kuvia ja tarjoaa niitä vapaan lisenssi mukaisesti. Näitä kuvia saa käyttää parantamaan OpenStreetMapiä", "openIssueTracker": "Ilmoita ohjelmavirheestä", "openMapillary": "Avaa Mapillary tänne", + "openOsmcha": "Näytä viimeisimmät muokkaukset, jotka on tehty teemalla {theme}", + "seeOnMapillary": "Näytä tämä kuva Mapillaryssä", + "themeBy": "Teemaa ylläpitää {author}", "title": "Tekijänoikeudet ja alkuperä" }, "backToIndex": "Palaa kaikkien teemakarttojen yleiskuvaan", diff --git a/langs/layers/ca.json b/langs/layers/ca.json index f89d20f61..015d90e7a 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -528,8 +528,8 @@ "render": { "special": { "question": "En quins idiomes té sortida de veu aquest caixer?", - "render_list_item": "Aquest caixer té sortida de veu en {language():font-bold}", - "render_single_language": "Aquest caixer té sortida de veu en {language():font-bold}" + "render_list_item": "Aquest caixer té sortida de veu en {language()}", + "render_single_language": "Aquest caixer té sortida de veu en {language()}" } } } @@ -3220,8 +3220,8 @@ "render": { "special": { "question": "Aquest ascensor en quins idiomes té sortida de veu?", - "render_list_item": "Aquest ascensor té sortida de veu en {language():font-bold}", - "render_single_language": "Aquest ascensor té sortida de veu en {language():font-bold}" + "render_list_item": "Aquest ascensor té sortida de veu en {language()}", + "render_single_language": "Aquest ascensor té sortida de veu en {language()}" } } }, @@ -3243,8 +3243,8 @@ "render": { "special": { "question": "Aquest ascensor en quins idiomes té l'escriptura tàctil (braille)?", - "render_list_item": "Aquest ascensor té l'escriptura tàctil en {language():font-bold}", - "render_single_language": "Aquest ascensor té l'escriptura tàctil en {language():font-bold}" + "render_list_item": "Aquest ascensor té l'escriptura tàctil en {language()}", + "render_single_language": "Aquest ascensor té l'escriptura tàctil en {language()}" } } } @@ -6828,7 +6828,7 @@ "no_known_languages": "La llengua principal d'aquesta escola és desconeguda", "question": "Quina és la llengua principal d'aquesta escola?
Quina llengua es parla amb els estudiants en classes no relacionades amb la llengua i l'administració?
", "render_all": "En aquesta escola s'utilitzen els idiomes següents:{list()}", - "render_single_language": "{language():font-bold} és la llengua principal d'aquesta escola" + "render_single_language": "{language()} és la llengua principal d'aquesta escola" } } }, @@ -7374,8 +7374,8 @@ "render": { "special": { "question": "En quins idiomes hi ha escriptura tàctil (braille) per a la navegació? ", - "render_list_item": "Aquestes escales tenen escriptura tàctil en {language():font-bold}", - "render_single_language": "Aquestes escales tenen escriptura tàctil en {language():font-bold}" + "render_list_item": "Aquestes escales tenen escriptura tàctil en {language()}", + "render_single_language": "Aquestes escales tenen escriptura tàctil en {language()}" } } } diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 79561d7ca..8b99ac086 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -489,8 +489,8 @@ "render": { "special": { "question": "V jakých jazycích má tento bankomat řečový výstup?", - "render_list_item": "Tento bankomat má řečový výstup v {language():font-bold}", - "render_single_language": "Tento bankomat má řečový výstup v {language():font-bold}" + "render_list_item": "Tento bankomat má řečový výstup v {language()}", + "render_single_language": "Tento bankomat má řečový výstup v {language()}" } } } @@ -3269,8 +3269,8 @@ "render": { "special": { "question": "Ve kterých jazycích má tento výtah hlasový výstup?", - "render_list_item": "Tento výtah má hlasový výstup v {language():font-bold}", - "render_single_language": "Tento výtah má hlasový výstup v {language():font-bold}" + "render_list_item": "Tento výtah má hlasový výstup v {language()}", + "render_single_language": "Tento výtah má hlasový výstup v {language()}" } } }, @@ -3301,8 +3301,8 @@ "render": { "special": { "question": "Ve kterých jazycích má tento výtah hmatové písmo (braillovo písmo)?", - "render_list_item": "Tento výtah má hmatové písmo v {language():font-bold}", - "render_single_language": "Tento výtah má hmatové písmo v {language():font-bold}" + "render_list_item": "Tento výtah má hmatové písmo v {language()}", + "render_single_language": "Tento výtah má hmatové písmo v {language()}" } } } @@ -7113,7 +7113,7 @@ "no_known_languages": "Hlavní jazyk této školy není znám", "question": "Jaký je hlavní jazyk této školy?
Jakým jazykem se mluví se studenty v nejazykových kurzech a administrativou?
", "render_all": "V této škole se používají následující jazyky:{list()}", - "render_single_language": "{language():font-bold} je hlavním jazykem této školy" + "render_single_language": "{language()} je hlavním jazykem této školy" } } }, @@ -7699,8 +7699,8 @@ "render": { "special": { "question": "Ve kterých jazycích existuje hmatové písmo (braillské písmo) pro navigaci? ", - "render_list_item": "Tyto schody mají hmatové písmo v {language():font-bold}", - "render_single_language": "Tyto schody mají hmatové písmo v {language():font-bold}" + "render_list_item": "Tyto schody mají hmatové písmo v {language()}", + "render_single_language": "Tyto schody mají hmatové písmo v {language()}" } } } diff --git a/langs/layers/de.json b/langs/layers/de.json index ce42f1fb8..a74db0403 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -35,16 +35,6 @@ "1": { "title": "eine freistehende Posterbox" }, - "10": { - "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", - "title": "ein Schild" - }, - "11": { - "title": "eine Skulptur" - }, - "12": { - "title": "eine Wandmalerei" - }, "2": { "title": "eine wandmontierte Posterbox" }, @@ -71,6 +61,16 @@ }, "9": { "title": "ein Totem" + }, + "10": { + "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", + "title": "ein Schild" + }, + "11": { + "title": "eine Skulptur" + }, + "12": { + "title": "eine Wandmalerei" } }, "tagRenderings": { @@ -165,9 +165,6 @@ "1": { "then": "Dies ist ein Brett" }, - "10": { - "then": "Dies ist eine Wandmalerei" - }, "2": { "then": "Dies ist eine Litfaßsäule" }, @@ -191,6 +188,9 @@ }, "9": { "then": "Dies ist ein Totem" + }, + "10": { + "then": "Dies ist eine Wandmalerei" } }, "question": "Welche Art von Werbung ist das?", @@ -205,9 +205,6 @@ "1": { "then": "Brett" }, - "10": { - "then": "Wandmalerei" - }, "2": { "then": "Posterbox" }, @@ -231,6 +228,9 @@ }, "9": { "then": "Totem" + }, + "10": { + "then": "Wandmalerei" } } } @@ -353,15 +353,6 @@ "1": { "then": "Wandbild" }, - "10": { - "then": "Azulejo (spanische dekorative Fliesenarbeit)" - }, - "11": { - "then": "Fliesenarbeit" - }, - "12": { - "then": "Holzschnitzerei" - }, "2": { "then": "Malerei" }, @@ -385,6 +376,15 @@ }, "9": { "then": "Relief" + }, + "10": { + "then": "Azulejo (spanische dekorative Fliesenarbeit)" + }, + "11": { + "then": "Fliesenarbeit" + }, + "12": { + "then": "Holzschnitzerei" } }, "question": "Um welche Art Kunstwerk handelt es sich?", @@ -530,8 +530,8 @@ "render": { "special": { "question": "In welchen Sprachen hat dieser Geldautomat eine Sprachausgabe?", - "render_list_item": "Dieser Geldautomat hat eine Sprachausgabe in {language():font-bold}", - "render_single_language": "Dieser Geldautomat hat eine Sprachausgabe in {language():font-bold}" + "render_list_item": "Dieser Geldautomat hat eine Sprachausgabe in {language()}", + "render_single_language": "Dieser Geldautomat hat eine Sprachausgabe in {language()}" } } } @@ -1942,27 +1942,6 @@ "1": { "question": "Verfügt über einen
Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
" }, - "10": { - "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" - }, - "11": { - "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" - }, - "12": { - "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" - }, - "13": { - "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" - }, - "14": { - "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" - }, - "15": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" - }, - "16": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" - }, "2": { "question": "Verfügt über einen
europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
Anschluss" }, @@ -1986,6 +1965,27 @@ }, "9": { "question": "Hat einen
Typ 2 CCS (Mennekes)
Anschluss" + }, + "10": { + "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" + }, + "11": { + "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" + }, + "12": { + "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" + }, + "13": { + "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" + }, + "14": { + "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" + }, + "15": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" + }, + "16": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" } } } @@ -2041,6 +2041,30 @@ "1": { "then": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, + "2": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, + "3": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, + "4": { + "then": "Chademo-Anschluss" + }, + "5": { + "then": "Chademo-Anschluss" + }, + "6": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "7": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "8": { + "then": "Typ 1 ohne Kabel (J1772)" + }, + "9": { + "then": " Typ 1 ohne Kabel (J1772)" + }, "10": { "then": "Typ 1 CCS (Typ 1 Combo)" }, @@ -2071,9 +2095,6 @@ "19": { "then": "Typ 2 mit Kabel (mennekes)" }, - "2": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, "20": { "then": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" }, @@ -2104,32 +2125,11 @@ "29": { "then": " Bosch Active Connect mit 3 Pins und Kabel" }, - "3": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, "30": { "then": "Bosch Active Connect mit 5 Pins und Kabel" }, "31": { "then": " Bosch Active Connect mit 5 Pins und Kabel" - }, - "4": { - "then": "Chademo-Anschluss" - }, - "5": { - "then": "Chademo-Anschluss" - }, - "6": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "7": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "8": { - "then": "Typ 1 ohne Kabel (J1772)" - }, - "9": { - "then": " Typ 1 ohne Kabel (J1772)" } }, "question": "Welche Ladeanschlüsse gibt es hier?" @@ -2323,24 +2323,6 @@ "1": { "2": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" }, - "10": { - "2": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" - }, - "11": { - "2": "Tesla Supercharger (Destination)" - }, - "12": { - "2": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)" - }, - "13": { - "2": "USB zum Aufladen von Handys und kleinen Elektrogeräten" - }, - "14": { - "2": " Bosch Active Connect mit 3 Pins und Kabel" - }, - "15": { - "2": " Bosch Active Connect mit 5 Pins und Kabel" - }, "2": { "2": "Chademo-Stecker" }, @@ -2364,6 +2346,24 @@ }, "9": { "2": "Typ 2 mit Kabel (Mennekes)" + }, + "10": { + "2": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" + }, + "11": { + "2": "Tesla Supercharger (Destination)" + }, + "12": { + "2": "Tesla Supercharger (Destination) (Typ 2 mit Kabel von Tesla)" + }, + "13": { + "2": "USB zum Aufladen von Handys und kleinen Elektrogeräten" + }, + "14": { + "2": " Bosch Active Connect mit 3 Pins und Kabel" + }, + "15": { + "2": " Bosch Active Connect mit 5 Pins und Kabel" } } } @@ -3141,15 +3141,6 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" - }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3173,6 +3164,15 @@ }, "9": { "then": "Der Radweg ist aus Schotter" + }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieses Radwegs?", @@ -3221,15 +3221,6 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" - }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3253,6 +3244,15 @@ }, "9": { "then": "Der Radweg ist aus Schotter" + }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieser Straße?", @@ -3797,6 +3797,20 @@ } }, "question": "Ist die Trinkwasserstelle ganzjährig in Betrieb?" + }, + "type": { + "mappings": { + "0": { + "then": "Dies ist ein Sprudelbrunnen. Ein Wasserstrahl zum Trinken wird nach oben gerichtet und in der Regel durch einen Druckknopf gesteuert." + }, + "1": { + "then": "Dies ist eine Flaschenauffüllstation, an der das Wasser nach unten geleitet wird, in der Regel durch einen Druckknopf oder einen Bewegungssensor gesteuert. Direkt aus dem Wasserstrahl zu trinken, kann sehr schwierig oder unmöglich sein." + }, + "2": { + "then": "Dies ist ein Wasserhahn. Das Wasser fließt nach unten und der Wasserstrahl wird durch ein Ventil oder einen Druckknopf gesteuert." + } + }, + "question": "Um welche Art von Trinkwasserentnahmestelle handelt es sich?" } }, "title": { @@ -3845,8 +3859,8 @@ "render": { "special": { "question": "In welchen Sprachen verfügt der Aufzug über eine Sprachausgabe?", - "render_list_item": "Der Aufzug hat eine Sprachausgabe in {language():font-bold}", - "render_single_language": "Der Aufzug hat eine Sprachausgabe in {language():font-bold}" + "render_list_item": "Der Aufzug hat eine Sprachausgabe in {language()}", + "render_single_language": "Der Aufzug hat eine Sprachausgabe in {language()}" } } }, @@ -3877,8 +3891,8 @@ "render": { "special": { "question": "In welchen Sprachen hat der Aufzug taktile Schrift (Braille)?", - "render_list_item": "Der Aufzug hat taktile Schrift in {language():font-bold}", - "render_single_language": "Der Aufzug hat taktile Schrift in {language():font-bold}" + "render_list_item": "Der Aufzug hat taktile Schrift in {language()}", + "render_single_language": "Der Aufzug hat taktile Schrift in {language()}" } } } @@ -4193,54 +4207,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Keine Bevorzugung von Hunden" - }, - "1": { - "question": "Hunde erlaubt" - }, - "2": { - "question": "Keine Hunde erlaubt" - } - } - }, - "11": { - "options": { - "0": { - "question": "Internetzugang vorhanden" - } - } - }, - "12": { - "options": { - "0": { - "question": "Stromanschluss vorhanden" - } - } - }, - "13": { - "options": { - "0": { - "question": "Hat zuckerfreie Angebote" - } - } - }, - "14": { - "options": { - "0": { - "question": "Hat glutenfreie Angebote" - } - } - }, - "15": { - "options": { - "0": { - "question": "Hat laktosefreie Angebote" - } - } - }, "2": { "options": { "0": { @@ -4311,6 +4277,54 @@ "question": "Nutzung kostenlos" } } + }, + "10": { + "options": { + "0": { + "question": "Keine Bevorzugung von Hunden" + }, + "1": { + "question": "Hunde erlaubt" + }, + "2": { + "question": "Keine Hunde erlaubt" + } + } + }, + "11": { + "options": { + "0": { + "question": "Internetzugang vorhanden" + } + } + }, + "12": { + "options": { + "0": { + "question": "Stromanschluss vorhanden" + } + } + }, + "13": { + "options": { + "0": { + "question": "Hat zuckerfreie Angebote" + } + } + }, + "14": { + "options": { + "0": { + "question": "Hat glutenfreie Angebote" + } + } + }, + "15": { + "options": { + "0": { + "question": "Hat laktosefreie Angebote" + } + } } } }, @@ -4430,6 +4444,30 @@ "1": { "then": "Die Fitness-Station hat ein Schild mit Anweisungen für eine bestimmte Übung." }, + "2": { + "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." + }, + "3": { + "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." + }, + "4": { + "then": "Die Fitness-Station hat Stangen zum Dehnen." + }, + "5": { + "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." + }, + "6": { + "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." + }, + "7": { + "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." + }, + "8": { + "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." + }, + "9": { + "then": "Die Fitness-Station hat Pfosten für Slalomübungen." + }, "10": { "then": "Die Fitness-Station hat Trittsteine." }, @@ -4460,9 +4498,6 @@ "19": { "then": "Die Fitness-Station hat Kampfseile (battle ropes)." }, - "2": { - "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." - }, "20": { "then": "Die Fitness-Station hat ein Fahrradergometer." }, @@ -4477,27 +4512,6 @@ }, "24": { "then": "Die Fitness-Station hat eine Slackline." - }, - "3": { - "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." - }, - "4": { - "then": "Die Fitness-Station hat Stangen zum Dehnen." - }, - "5": { - "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." - }, - "6": { - "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." - }, - "7": { - "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." - }, - "8": { - "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." - }, - "9": { - "then": "Die Fitness-Station hat Pfosten für Slalomübungen." } }, "question": "Welche Übungsgeräte gibt es an dieser Fitness-Station?" @@ -4617,21 +4631,6 @@ "1": { "then": "Dies ist eine Pommesbude" }, - "10": { - "then": "Hier werden chinesische Gerichte serviert" - }, - "11": { - "then": "Hier werden griechische Gerichte serviert" - }, - "12": { - "then": "Hier werden indische Gerichte serviert" - }, - "13": { - "then": "Hier werden türkische Gerichte serviert" - }, - "14": { - "then": "Hier werden thailändische Gerichte serviert" - }, "2": { "then": "Bietet vorwiegend Pastagerichte an" }, @@ -4655,6 +4654,21 @@ }, "9": { "then": "Hier werden französische Gerichte serviert" + }, + "10": { + "then": "Hier werden chinesische Gerichte serviert" + }, + "11": { + "then": "Hier werden griechische Gerichte serviert" + }, + "12": { + "then": "Hier werden indische Gerichte serviert" + }, + "13": { + "then": "Hier werden türkische Gerichte serviert" + }, + "14": { + "then": "Hier werden thailändische Gerichte serviert" } }, "question": "Was für Essen gibt es hier?", @@ -4719,6 +4733,9 @@ }, "3": { "then": "Hier werden ausschließlich vegane Gerichte angeboten" + }, + "4": { + "then": "Einige Gerichte können auf Nachfrage in eine vegane Version umgewandelt werden" } }, "question": "Werden hier vegane Gerichte angeboten?" @@ -4736,6 +4753,9 @@ }, "3": { "then": "Hier werden ausschließlich vegetarische Gerichte angeboten" + }, + "4": { + "then": "Einige Gerichte können auf Nachfrage in eine vegetarische Version umgewandelt werden" } }, "question": "Werden hier vegetarische Gerichte angeboten?" @@ -5023,9 +5043,29 @@ "1": "eine CNC-Fräse", "2": "CNC-Fräse" }, + "3": { + "1": "ein Multimediastudio", + "2": "Multimediastudio" + }, "4": { "1": "eine Nähmaschine", "2": "Nähmaschine" + }, + "5": { + "1": "eine Holzwerkstatt", + "2": "Holzwerkstatt" + }, + "6": { + "1": "eine Keramikwerkstatt", + "2": "Keramikwerkstatt" + }, + "7": { + "1": "eine Metallwerkstatt", + "2": "Metallwerkstatt" + }, + "8": { + "1": "eine Fahrradwerkstatt", + "2": "Fahrradwerkstatt" } } } @@ -5254,7 +5294,41 @@ } }, "icons": { - "description": "Eine Ebene, die als Bibliothek für Symbol-Tag-Renderings dient, insbesondere um als Abzeichen neben einem POI angezeigt zu werden" + "description": "Eine Ebene, die als Bibliothek für Symbol-Tag-Renderings dient, insbesondere um als Abzeichen neben einem POI angezeigt zu werden", + "tagRenderings": { + "osmlink": { + "mappings": { + "1": { + "then": { + "special": { + "arialabel": "Auf openstreetmap.org öffnen" + } + } + } + }, + "render": { + "special": { + "arialabel": "Auf openstreetmap.org öffnen" + } + } + }, + "phonelink": { + "mappings": { + "0": { + "then": { + "special": { + "arialabel": "Telefon" + } + } + } + }, + "render": { + "special": { + "arialabel": "Telefon" + } + } + } + } }, "indoors": { "description": "Grundlegende Innenraumkartierung: zeigt Umrisse von Räumen", @@ -5286,6 +5360,30 @@ "1": { "then": "Dies ist ein Auditorium" }, + "2": { + "then": "Dies ist ein Schlafzimmer" + }, + "3": { + "then": "Dies ist eine Kapelle" + }, + "4": { + "then": "Dies ist ein Klassenzimmer" + }, + "5": { + "then": "Dies ist ein Klassenzimmer" + }, + "6": { + "then": "Dies ist ein Computerraum" + }, + "7": { + "then": "Dies ist ein Konferenzraum" + }, + "8": { + "then": "Dies ist eine Krypta" + }, + "9": { + "then": "Dies ist eine Küche" + }, "10": { "then": "Dies ist ein Labor" }, @@ -5316,9 +5414,6 @@ "19": { "then": "Dies ist ein Lagerraum" }, - "2": { - "then": "Dies ist ein Schlafzimmer" - }, "20": { "then": "Dies ist ein Technikraum" }, @@ -5327,27 +5422,6 @@ }, "22": { "then": "Dies ist ein Wartezimmer" - }, - "3": { - "then": "Dies ist eine Kapelle" - }, - "4": { - "then": "Dies ist ein Klassenzimmer" - }, - "5": { - "then": "Dies ist ein Klassenzimmer" - }, - "6": { - "then": "Dies ist ein Computerraum" - }, - "7": { - "then": "Dies ist ein Konferenzraum" - }, - "8": { - "then": "Dies ist eine Krypta" - }, - "9": { - "then": "Dies ist eine Küche" } }, "question": "Wie wird dieser Raum genutzt?" @@ -5974,19 +6048,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Alle Notizen" - }, - "1": { - "question": "Importnotizen ausblenden" - }, - "2": { - "question": "Nur Importnotizen anzeigen" - } - } - }, "2": { "options": { "0": { @@ -6042,6 +6103,19 @@ "question": "Nur offene Notizen anzeigen" } } + }, + "10": { + "options": { + "0": { + "question": "Alle Notizen" + }, + "1": { + "question": "Importnotizen ausblenden" + }, + "2": { + "question": "Nur Importnotizen anzeigen" + } + } } }, "name": "OpenStreetMap-Hinweise", @@ -6065,6 +6139,11 @@ } }, "render": "Notiz" + }, + "titleIcons": { + "0": { + "ariaLabel": "Auf OpenStreetMap.org ansehen" + } } }, "observation_tower": { @@ -6361,21 +6440,6 @@ "1": { "then": "Dies ist ein normaler Stellplatz." }, - "10": { - "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." - }, - "11": { - "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." - }, - "12": { - "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." - }, - "13": { - "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." - }, - "14": { - "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." - }, "2": { "then": "Dies ist ein Behindertenstellplatz." }, @@ -6399,6 +6463,21 @@ }, "9": { "then": "Dies ist ein Stellplatz, der für Motorräder reserviert ist." + }, + "10": { + "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." + }, + "11": { + "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." + }, + "12": { + "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." + }, + "13": { + "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." + }, + "14": { + "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." } }, "question": "Welche Art von Stellplatz ist dies?" @@ -6666,6 +6745,12 @@ }, "7": { "then": "Die Oberfläche ist befestigt" + }, + "8": { + "then": "Der Belag ist aus Tartan - ein synthetischer, federnder Belag, der typischerweise auf Sportbahnen zu finden ist" + }, + "9": { + "then": "Die Oberfläche besteht aus Gummi, z. B. aus Gummifliesen, Gummimulch oder einer großen Gummifläche" } }, "question": "Welchen Bodenbelag hat dieser Spielplatz?", @@ -6990,21 +7075,6 @@ "1": { "then": "2-Cent-Münzen werden akzeptiert" }, - "10": { - "then": "20-Centime-Münzen werden akzeptiert" - }, - "11": { - "then": "½-Schweizer Franken-Münzen werden akzeptiert" - }, - "12": { - "then": "1-Schweizer Franken-Münzen werden akzeptiert" - }, - "13": { - "then": "2-Schweizer Franken-Münzen werden akzeptiert" - }, - "14": { - "then": "5-Schweizer Franken-Münzen werden akzeptiert" - }, "2": { "then": "5-Cent-Münzen werden akzeptiert" }, @@ -7028,6 +7098,21 @@ }, "9": { "then": "10-Centime-Münzen werden akzeptiert" + }, + "10": { + "then": "20-Centime-Münzen werden akzeptiert" + }, + "11": { + "then": "½-Schweizer Franken-Münzen werden akzeptiert" + }, + "12": { + "then": "1-Schweizer Franken-Münzen werden akzeptiert" + }, + "13": { + "then": "2-Schweizer Franken-Münzen werden akzeptiert" + }, + "14": { + "then": "5-Schweizer Franken-Münzen werden akzeptiert" } }, "question": "Mit welchen Münzen kann man hier bezahlen?" @@ -7040,15 +7125,6 @@ "1": { "then": "10-Euro-Scheine werden angenommen" }, - "10": { - "then": "100-Schweizer Franken-Scheine werden akzeptiert" - }, - "11": { - "then": "200-Schweizer Franken-Scheine werden akzeptiert" - }, - "12": { - "then": "1000-Schweizer Franken-Scheine werden akzeptiert" - }, "2": { "then": "20-Euro-Scheine werden angenommen" }, @@ -7072,6 +7148,15 @@ }, "9": { "then": "50-Schweizer Franken-Scheine werden akzeptiert" + }, + "10": { + "then": "100-Schweizer Franken-Scheine werden akzeptiert" + }, + "11": { + "then": "200-Schweizer Franken-Scheine werden akzeptiert" + }, + "12": { + "then": "1000-Schweizer Franken-Scheine werden akzeptiert" } }, "question": "Mit welchen Banknoten kann man hier bezahlen?" @@ -7098,6 +7183,7 @@ "question": "Sind Hunde hier erlaubt?" }, "email": { + "editButtonAriaLabel": "E-Mail Adresse bearbeiten", "question": "Wie lautet die Mail-Adresse von {title()}?" }, "gluten_free": { @@ -7296,8 +7382,14 @@ } }, "phone": { + "editButtonAriaLabel": "Telefonnummer bearbeiten", "question": "Wie lautet die Telefonnummer von {title()}?" }, + "qr_code": { + "render": { + "after": "Scannen Sie den Code, um diesen Ort auf einem anderen Gerät zu öffnen" + } + }, "repeated": { "render": "Mehrere identische Objekte können in Geschossen {repeat_on} gefunden werden." }, @@ -7318,6 +7410,13 @@ }, "question": "Gibt es hier Steckdosen, an denen Kunden ihre Geräte laden können?" }, + "share": { + "render": { + "special": { + "text": "Standort teilen" + } + } + }, "single_level": { "mappings": { "0": { @@ -7398,6 +7497,7 @@ "question": "Bietet dieser Ort eine vegane Option an?" }, "website": { + "editButtonAriaLabel": "Webseite bearbeiten", "question": "Wie lautet die Webseite von {title()}?" }, "wheelchair-access": { @@ -7510,6 +7610,30 @@ "1": { "question": "Recycling von Batterien" }, + "2": { + "question": "Recycling von Getränkekartons" + }, + "3": { + "question": "Recycling von Dosen" + }, + "4": { + "question": "Recycling von Kleidung" + }, + "5": { + "question": "Recycling von Speiseöl" + }, + "6": { + "question": "Recycling von Motoröl" + }, + "7": { + "question": "Recycling von Leuchtstoffröhren" + }, + "8": { + "question": "Recycling von Grünabfällen" + }, + "9": { + "question": "Recycling von Glasflaschen" + }, "10": { "question": "Recycling von Glas" }, @@ -7540,35 +7664,11 @@ "19": { "question": "Recycling von Restabfällen" }, - "2": { - "question": "Recycling von Getränkekartons" - }, "20": { "question": "Recycling von Druckerpatronen" }, "21": { "question": "Recycling von Fahrrädern" - }, - "3": { - "question": "Recycling von Dosen" - }, - "4": { - "question": "Recycling von Kleidung" - }, - "5": { - "question": "Recycling von Speiseöl" - }, - "6": { - "question": "Recycling von Motoröl" - }, - "7": { - "question": "Recycling von Leuchtstoffröhren" - }, - "8": { - "question": "Recycling von Grünabfällen" - }, - "9": { - "question": "Recycling von Glasflaschen" } } }, @@ -7636,6 +7736,30 @@ "1": { "then": "Getränkekartons können hier recycelt werden" }, + "2": { + "then": "Dosen können hier recycelt werden" + }, + "3": { + "then": "Kleidung kann hier recycelt werden" + }, + "4": { + "then": "Speiseöl kann hier recycelt werden" + }, + "5": { + "then": "Motoröl kann hier recycelt werden" + }, + "6": { + "then": "Hier können Leuchtstoffröhren recycelt werden" + }, + "7": { + "then": "Grünabfälle können hier recycelt werden" + }, + "8": { + "then": "Bio-Abfall kann hier recycelt werden" + }, + "9": { + "then": "Glasflaschen können hier recycelt werden" + }, "10": { "then": "Glas kann hier recycelt werden" }, @@ -7666,9 +7790,6 @@ "19": { "then": "Schuhe können hier recycelt werden" }, - "2": { - "then": "Dosen können hier recycelt werden" - }, "20": { "then": "Elektrokleingeräte können hier recycelt werden" }, @@ -7683,27 +7804,6 @@ }, "24": { "then": "Fahrräder können hier recycelt werden" - }, - "3": { - "then": "Kleidung kann hier recycelt werden" - }, - "4": { - "then": "Speiseöl kann hier recycelt werden" - }, - "5": { - "then": "Motoröl kann hier recycelt werden" - }, - "6": { - "then": "Hier können Leuchtstoffröhren recycelt werden" - }, - "7": { - "then": "Grünabfälle können hier recycelt werden" - }, - "8": { - "then": "Bio-Abfall kann hier recycelt werden" - }, - "9": { - "then": "Glasflaschen können hier recycelt werden" } }, "question": "Was kann hier recycelt werden?" @@ -7849,7 +7949,7 @@ "no_known_languages": "Die Unterrichtssprache der Schule ist unbekannt", "question": "Was ist die Hauptsprache dieser Schule?
Welche Sprache wird mit den Schülern in den nicht sprachbezogenen Kursen und mit der Verwaltung gesprochen?
", "render_all": "Folgende Sprachen werden in der Schule verwendet:{list()}", - "render_single_language": "{language():font-bold} ist die Hauptsprache der Schule" + "render_single_language": "{language()} ist die Hauptsprache der Schule" } } }, @@ -7967,7 +8067,7 @@ "name": "Geschäfte", "presets": { "0": { - "description": "Ein neues Geschäft hinzufügen", + "description": "Sie können später angeben, was das Geschäft verkauft.", "title": "ein Geschäft" } }, @@ -8414,6 +8514,9 @@ }, "5": { "then": "Die Oberfläche ist feiner Kies" + }, + "6": { + "then": "Der Belag dieser Laufbahn ist Tartan, ein synthetischer, leicht federnder, poröser Belag" } }, "question": "Welchen Belag hat der Sportplatz?", @@ -8464,6 +8567,18 @@ }, "question": "Hat die Treppe einen Handlauf?" }, + "incline": { + "mappings": { + "0": { + "then": "Die Aufwärtsrichtung ist {direction_absolute()}" + }, + "1": { + "then": "Die Abwärtsrichtung ist {direction_absolute()}" + } + }, + "question": "Welche Steigung hat die Treppe?", + "render": "Die Treppe hat eine Steigung von {incline}" + }, "multilevels": { "override": { "question": "Zwischen welchen Stockwerken befindet sich diese Treppe?", @@ -8505,8 +8620,8 @@ "render": { "special": { "question": "In welchen Sprachen gibt es taktile Schrift (Braille) für die Navigation? ", - "render_list_item": "Die Treppe hat taktile Schrift in {language():font-bold}", - "render_single_language": "Die Treppe hat taktile Schrift in {language():font-bold}" + "render_list_item": "Die Treppe hat taktile Schrift in {language()}", + "render_single_language": "Die Treppe hat taktile Schrift in {language()}" } } } @@ -8596,12 +8711,6 @@ "1": { "then": "Diese Straßenlaterne verwendet LEDs" }, - "10": { - "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" - }, - "11": { - "then": "Diese Straßenlaterne wird mit Gas beleuchtet" - }, "2": { "then": "Diese Straßenlaterne verwendet Glühlampenlicht" }, @@ -8625,6 +8734,12 @@ }, "9": { "then": "Diese Straßenlaterne verwendet Niederdruck-Natriumdampflampen (einfarbig orange)" + }, + "10": { + "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" + }, + "11": { + "then": "Diese Straßenlaterne wird mit Gas beleuchtet" } }, "question": "Mit welcher Art von Beleuchtung arbeitet diese Straßenlaterne?" @@ -8990,20 +9105,20 @@ "toilet-changing_table:location": { "mappings": { "0": { - "then": "Der Wickeltisch befindet sich in der Damentoilette. " + "then": "Ein Wickeltisch ist in der Damentoilette vorhanden" }, "1": { - "then": "Der Wickeltisch befindet sich in der Herrentoilette. " + "then": "Ein Wickeltisch ist in der Herrentoilette vorhanden" }, "2": { - "then": "Der Wickeltisch befindet sich in der Toilette für Rollstuhlfahrer. " + "then": "Ein Wickeltisch ist in der barrierefreien Toilette vorhanden" }, "3": { - "then": "Der Wickeltisch befindet sich in einem eigenen Raum. " + "then": "Ein Wickeltisch befindet sich in einem eigenen Raum" } }, "question": "Wo befindet sich der Wickeltisch?", - "render": "Die Wickeltabelle befindet sich in {changing_table:location}" + "render": "Ein Wickeltisch befindet sich in {changing_table:location}" }, "toilet-charge": { "freeform": { @@ -9559,6 +9674,7 @@ } }, "unit": { + "description": "Bibliotheksebene mit allen gängigen Einrichtungen. Einrichtungen können _nur_ aus dieser Datei importiert werden.", "units": { "0": { "applicableUnits": { @@ -9576,6 +9692,20 @@ } } }, + "1": { + "applicableUnits": { + "0": { + "human": "{quantity} Volt" + } + } + }, + "2": { + "applicableUnits": { + "0": { + "human": "{quantity} A" + } + } + }, "3": { "applicableUnits": { "0": { @@ -9583,7 +9713,8 @@ "humanSingular": "ein Meter" }, "1": { - "human": "{quantity} Zentimeter" + "human": "{quantity} Zentimeter", + "humanSingular": "ein Zentimeter" }, "2": { "human": "{quantity} Millimeter", @@ -9605,12 +9736,42 @@ "humanShort": "{quantity} mph" } } + }, + "5": { + "applicableUnits": { + "0": { + "human": "{quantity} Minuten", + "humanSingular": "eine Minute" + }, + "1": { + "human": "{quantity} Stunden", + "humanSingular": "eine Stunde" + }, + "2": { + "human": "{quantity} Tage", + "humanSingular": "ein Tag" + } + } } } }, "usersettings": { "description": "Eine spezielle Ebene, die nicht für die Darstellung auf einer Karte gedacht ist, sondern für die Festlegung von Benutzereinstellungen verwendet wird", "tagRenderings": { + "a11y-features": { + "mappings": { + "0": { + "then": "Barrierefrei-Modus aktivieren, wenn Pfeiltasten zum Navigieren in der Karte verwendet werden" + }, + "1": { + "then": "Barrierefrei-Modus immer aktivieren" + }, + "2": { + "then": "Barrierefrei-Modus niemals aktivieren" + } + }, + "question": "Welche Barrierefrei-Funktionen sollen angewendet werden?" + }, "all-questions-at-once": { "mappings": { "0": { @@ -9685,7 +9846,7 @@ "1": { "then": { "special": { - "text": "Du hast {_unreadMessages}
Öffne Deinen Posteingang" + "text": "Sie haben {_unreadMessages} Nachrichten
Posteingang öffnen" } } } @@ -9694,7 +9855,7 @@ "language_picker": { "mappings": { "0": { - "then": "Die Sprache wurde über einen URL-Parameter gesetzt und kann nicht vom Benutzer eingestellt werden.²" + "then": "Die Sprache wurde über einen URL-Parameter gesetzt und kann nicht vom Benutzer eingestellt werden." } } }, @@ -9828,6 +9989,30 @@ "1": { "question": "Verkauf von Getränken" }, + "2": { + "question": "Verkauf von Süßigkeiten" + }, + "3": { + "question": "Verkauf von Lebensmitteln" + }, + "4": { + "question": "Verkauf von Zigaretten" + }, + "5": { + "question": "Verkauf von Kondomen" + }, + "6": { + "question": "Verkauf von Kaffee" + }, + "7": { + "question": "Verkauf von Trinkwasser" + }, + "8": { + "question": "Verkauf von Zeitungen" + }, + "9": { + "question": "Verkauf von Fahrradschläuchen" + }, "10": { "question": "Verkauf von Milch" }, @@ -9858,9 +10043,6 @@ "19": { "question": "Verkauf von Blumen" }, - "2": { - "question": "Verkauf von Süßigkeiten" - }, "20": { "question": "Verkauf von Parkscheinen" }, @@ -9884,27 +10066,6 @@ }, "27": { "question": "Verkauf von Fahrradschlössern" - }, - "3": { - "question": "Verkauf von Lebensmitteln" - }, - "4": { - "question": "Verkauf von Zigaretten" - }, - "5": { - "question": "Verkauf von Kondomen" - }, - "6": { - "question": "Verkauf von Kaffee" - }, - "7": { - "question": "Verkauf von Trinkwasser" - }, - "8": { - "question": "Verkauf von Zeitungen" - }, - "9": { - "question": "Verkauf von Fahrradschläuchen" } } } @@ -9951,6 +10112,30 @@ "1": { "then": "Süßigkeiten werden verkauft" }, + "2": { + "then": "Lebensmittel werden verkauft" + }, + "3": { + "then": "Zigaretten werden verkauft" + }, + "4": { + "then": "Kondome werden verkauft" + }, + "5": { + "then": "Kaffee wird verkauft" + }, + "6": { + "then": "Trinkwasser wird verkauft" + }, + "7": { + "then": "Zeitungen werden verkauft" + }, + "8": { + "then": "Fahrradschläuche werden verkauft" + }, + "9": { + "then": "Milch wird verkauft" + }, "10": { "then": "Brot wird verkauft" }, @@ -9981,9 +10166,6 @@ "19": { "then": "Parkscheine werden verkauft" }, - "2": { - "then": "Lebensmittel werden verkauft" - }, "20": { "then": "Souvenirmünzen werden verkauft" }, @@ -10004,27 +10186,6 @@ }, "26": { "then": "Fahrradschlösser werden verkauft" - }, - "3": { - "then": "Zigaretten werden verkauft" - }, - "4": { - "then": "Kondome werden verkauft" - }, - "5": { - "then": "Kaffee wird verkauft" - }, - "6": { - "then": "Trinkwasser wird verkauft" - }, - "7": { - "then": "Zeitungen werden verkauft" - }, - "8": { - "then": "Fahrradschläuche werden verkauft" - }, - "9": { - "then": "Milch wird verkauft" } }, "question": "Was wird in diesem Automaten verkauft?", @@ -10316,4 +10477,4 @@ "render": "Windrad" } } -} +} \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index 688ca1679..58b29662f 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -530,8 +530,8 @@ "render": { "special": { "question": "In which languages does this ATM have speech output?", - "render_list_item": "This ATM has speech output in {language():font-bold}", - "render_single_language": "This ATM has speech output in {language():font-bold}" + "render_list_item": "This ATM has speech output in {language()}", + "render_single_language": "This ATM has speech output in {language()}" } } } @@ -1809,6 +1809,24 @@ "render": "Bird watching place" } }, + "brothel": { + "description": "An establishment specifically dedicated to prostitution. ", + "name": "Brothels", + "presets": { + "0": { + "title": "a brothel" + } + }, + "tagRenderings": { + "name": { + "question": "What is the name of this brothel?", + "render": "This brothel is named {name}" + } + }, + "title": { + "render": "Brothel" + } + }, "cafe_pub": { "deletion": { "extraDeleteReasons": { @@ -2385,6 +2403,26 @@ "render": "Charging station" } }, + "cinema": { + "description": " A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US", + "name": "Cinema", + "tagRenderings": { + "cinema_type": { + "mappings": { + "0": { + "then": "This is a normal cinema showing movies for all ages" + }, + "1": { + "then": "This is an erotic cinema showing adult movies" + } + }, + "question": "What type of cinema is this?" + } + }, + "title": { + "render": "Cinema" + } + }, "climbing": { "description": "A dummy layer which contains tagrenderings, shared among the climbing layers", "tagRenderings": { @@ -3859,8 +3897,8 @@ "render": { "special": { "question": "In which languages does this elevator have speech output?", - "render_list_item": "This elevator has speech output in {language():font-bold}", - "render_single_language": "This elevator has speech output in {language():font-bold}" + "render_list_item": "This elevator has speech output in {language()}", + "render_single_language": "This elevator has speech output in {language()}" } } }, @@ -3891,8 +3929,8 @@ "render": { "special": { "question": "In which languages does this elevator have tactile writing (braille)?", - "render_list_item": "This elevator has tactile writing in {language():font-bold}", - "render_single_language": "This elevator has tactile writing in {language():font-bold}" + "render_list_item": "This elevator has tactile writing in {language()}", + "render_single_language": "This elevator has tactile writing in {language()}" } } } @@ -5024,6 +5062,9 @@ }, "1": { "then": "There is no {negative-name} available at this hackerspace" + }, + "2": { + "then": "There is a limited {negative-name} available at this hackerspace" } }, "question": "Is {device-name} available at this hackerspace?" @@ -5622,6 +5663,25 @@ } } }, + "love_hotel": { + "description": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities", + "name": "Love hotels", + "presets": { + "0": { + "description": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities.", + "title": "a love hotel" + } + }, + "tagRenderings": { + "name": { + "question": "What is the name of this love hotel?", + "render": "This love hotel is named {name}" + } + }, + "title": { + "render": "Love Hotel {name}" + } + }, "map": { "description": "A map, meant for tourists which is permanently installed in the public space", "name": "Maps", @@ -7949,7 +8009,7 @@ "no_known_languages": "The main language of this school is unknown", "question": "What is the main language of this school?
What language is spoken with the students in non-language related courses and with the administration?
", "render_all": "The following languages are used in this school:{list()}", - "render_single_language": "{language():font-bold} is the main language of this school" + "render_single_language": "{language()} is the main language of this school" } } }, @@ -8620,8 +8680,8 @@ "render": { "special": { "question": "In which languages is there tactile writing (braille) for navigation? ", - "render_list_item": "These stairs have tactile writing in {language():font-bold}", - "render_single_language": "These stairs have tactile writing in {language():font-bold}" + "render_list_item": "These stairs have tactile writing in {language()}", + "render_single_language": "These stairs have tactile writing in {language()}" } } } @@ -8784,6 +8844,24 @@ "render": "Street Lamp" } }, + "stripclub": { + "description": "A venue where erotic dance, striptease, or lap dances are performed commercially. ", + "name": "Stripclubs", + "presets": { + "0": { + "title": "a stripclub" + } + }, + "tagRenderings": { + "name": { + "question": "What is the name of this stripclub?", + "render": "This stripclub is named {name}" + } + }, + "title": { + "render": "Stripclub" + } + }, "surveillance_camera": { "description": "This layer shows surveillance cameras and allows a contributor to update information and add new cameras", "name": "Surveillance camera's", @@ -9105,20 +9183,20 @@ "toilet-changing_table:location": { "mappings": { "0": { - "then": "The changing table is in the toilet for women. " + "then": "A changing table is in the toilet for women" }, "1": { - "then": "The changing table is in the toilet for men. " + "then": "A changing table is in the toilet for men" }, "2": { - "then": "The changing table is in the toilet for wheelchair users. " + "then": "A changing table is in the toilet for wheelchair users" }, "3": { - "then": "The changing table is in a dedicated room. " + "then": "A changing table is in a dedicated room" } }, "question": "Where is the changing table located?", - "render": "The changing table is located at {changing_table:location}" + "render": "A changing table is located at {changing_table:location}" }, "toilet-charge": { "freeform": { diff --git a/langs/layers/es.json b/langs/layers/es.json index 5d5bc8e36..a5157d619 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -530,8 +530,8 @@ "render": { "special": { "question": "¿En qué idiomas tiene salida de voz este cajero automático?", - "render_list_item": "Este cajero automático tiene salida de voz en {language():font-bold}", - "render_single_language": "Este cajero automático tiene salida de voz en {language():font-bold}" + "render_list_item": "Este cajero automático tiene salida de voz en {language()}", + "render_single_language": "Este cajero automático tiene salida de voz en {language()}" } } } diff --git a/langs/layers/fr.json b/langs/layers/fr.json index d98f26c96..5c2fc8afd 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -5232,7 +5232,7 @@ "no_known_languages": "La langue principale de cette école est inconnue", "question": "Quelle est la langue principale de cette école ?
Quelle langue est parlée avec les élèves des cours non linguistiques et avec l'administration ?
", "render_all": "Ces langues sont utilisées dans cette école :{list()}", - "render_single_language": "{language():font-bold} est la langue principale dans cette école" + "render_single_language": "{language()} est la langue principale dans cette école" } } }, diff --git a/langs/layers/he.json b/langs/layers/he.json index 7b9585d41..9f06b9efa 100644 --- a/langs/layers/he.json +++ b/langs/layers/he.json @@ -281,8 +281,8 @@ "render": { "special": { "question": "באילו שפות יש לכספומט הזה פלט דיבור?", - "render_list_item": "לכספומט הזה יש פלט דיבור ב {language():font-bold}", - "render_single_language": "לכספומט הזה יש פלט דיבור ב {language():font-bold}" + "render_list_item": "לכספומט הזה יש פלט דיבור ב {language()}", + "render_single_language": "לכספומט הזה יש פלט דיבור ב {language()}" } } } diff --git a/langs/layers/it.json b/langs/layers/it.json index a50419e9d..8652c3e0c 100644 --- a/langs/layers/it.json +++ b/langs/layers/it.json @@ -69,15 +69,6 @@ "1": { "then": "Murale" }, - "10": { - "then": "Azulejo (ornamento decorativo piastrellato spagnolo)" - }, - "11": { - "then": "Mosaico di piastrelle" - }, - "12": { - "then": "Scultura in legno" - }, "2": { "then": "Dipinto" }, @@ -101,6 +92,15 @@ }, "9": { "then": "Rilievo" + }, + "10": { + "then": "Azulejo (ornamento decorativo piastrellato spagnolo)" + }, + "11": { + "then": "Mosaico di piastrelle" + }, + "12": { + "then": "Scultura in legno" } }, "question": "Che tipo di opera d’arte è questo?", @@ -1992,6 +1992,27 @@ "1": { "question": "Riciclo di batterie" }, + "2": { + "question": "Riciclo di confezioni per bevande" + }, + "3": { + "question": "Riciclo di lattine" + }, + "4": { + "question": "Riciclo di abiti" + }, + "5": { + "question": "Riciclo di olio da cucina" + }, + "6": { + "question": "Riciclo di olio da motore" + }, + "8": { + "question": "Riciclo di umido" + }, + "9": { + "question": "Riciclo di bottiglie di vetro" + }, "10": { "question": "Riciclo di vetro" }, @@ -2019,29 +2040,8 @@ "19": { "question": "Riciclo di secco" }, - "2": { - "question": "Riciclo di confezioni per bevande" - }, "20": { "question": "Riciclo di secco" - }, - "3": { - "question": "Riciclo di lattine" - }, - "4": { - "question": "Riciclo di abiti" - }, - "5": { - "question": "Riciclo di olio da cucina" - }, - "6": { - "question": "Riciclo di olio da motore" - }, - "8": { - "question": "Riciclo di umido" - }, - "9": { - "question": "Riciclo di bottiglie di vetro" } } }, @@ -2094,6 +2094,27 @@ "1": { "then": "Cartoni per bevande" }, + "2": { + "then": "Lattine" + }, + "3": { + "then": "Abiti" + }, + "4": { + "then": "Olio da cucina" + }, + "5": { + "then": "Olio di motore" + }, + "7": { + "then": "Verde" + }, + "8": { + "then": "Umido" + }, + "9": { + "then": "Bottiglie di vetro" + }, "10": { "then": "Vetro" }, @@ -2118,9 +2139,6 @@ "19": { "then": "Scarpe" }, - "2": { - "then": "Lattine" - }, "20": { "then": "Piccoli elettrodomestici" }, @@ -2132,24 +2150,6 @@ }, "23": { "then": "Secco" - }, - "3": { - "then": "Abiti" - }, - "4": { - "then": "Olio da cucina" - }, - "5": { - "then": "Olio di motore" - }, - "7": { - "then": "Verde" - }, - "8": { - "then": "Umido" - }, - "9": { - "then": "Bottiglie di vetro" } }, "question": "Cosa si può riciclare qui?" @@ -2950,4 +2950,4 @@ "render": "pala eolica" } } -} +} \ No newline at end of file diff --git a/langs/layers/nl.json b/langs/layers/nl.json index c7045b56b..4ca5d1c69 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -27,9 +27,6 @@ "advertising": { "name": "Reclame", "presets": { - "12": { - "title": "een muurschildering" - }, "3": { "description": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers", "title": "een uithangbord" @@ -50,6 +47,9 @@ "8": { "description": "Een stuk groot, weerbestendig textiel met opgedrukte reclameboodschap die permanent aan de muur hangt", "title": "een spandoek" + }, + "12": { + "title": "een muurschildering" } }, "tagRenderings": { @@ -107,9 +107,6 @@ }, "title": { "mappings": { - "10": { - "then": "Muurschildering" - }, "3": { "then": "Aanplakzuil" }, @@ -127,6 +124,9 @@ }, "9": { "then": "Aanplakzuil" + }, + "10": { + "then": "Muurschildering" } } } @@ -208,15 +208,6 @@ "1": { "then": "Muurschildering" }, - "10": { - "then": "Azulejo (Spaanse siertegels)" - }, - "11": { - "then": "Tegelwerk" - }, - "12": { - "then": "Houtsculptuur" - }, "2": { "then": "Schilderij" }, @@ -240,6 +231,15 @@ }, "9": { "then": "Reliëf" + }, + "10": { + "then": "Azulejo (Spaanse siertegels)" + }, + "11": { + "then": "Tegelwerk" + }, + "12": { + "then": "Houtsculptuur" } }, "question": "Wat voor soort kunstwerk is dit?", @@ -385,8 +385,8 @@ "render": { "special": { "question": "In welke taal is de spraak van deze geldautomaat?", - "render_list_item": "Deze geldautomaat heeft spraak in {language():font-bold}", - "render_single_language": "Deze automaat heeft spraak in {language():font-bold}" + "render_list_item": "Deze geldautomaat heeft spraak in {language()}", + "render_single_language": "Deze automaat heeft spraak in {language()}" } } } @@ -1791,27 +1791,6 @@ "1": { "question": "Heeft een
Schuko stekker zonder aardingspin (CEE7/4 type F)
" }, - "10": { - "question": "Heeft een
Type 2 met kabel (J1772)
" - }, - "11": { - "question": "Heeft een
Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
" - }, - "12": { - "question": "Heeft een
Tesla Supercharger (destination)
" - }, - "13": { - "question": "Heeft een
Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
" - }, - "14": { - "question": "Heeft een
USB om GSMs en kleine electronica op te laden
" - }, - "15": { - "question": "Heeft een
Bosch Active Connect met 3 pinnen aan een kabel
" - }, - "16": { - "question": "Heeft een
Bosch Active Connect met 5 pinnen aan een kabel
" - }, "2": { "question": "Heeft een
Europese stekker met aardingspin (CEE7/4 type E)
" }, @@ -1835,6 +1814,27 @@ }, "9": { "question": "Heeft een
Type 2 CCS (mennekes)
" + }, + "10": { + "question": "Heeft een
Type 2 met kabel (J1772)
" + }, + "11": { + "question": "Heeft een
Tesla Supercharger CCS (een type2 CCS met Tesla-logo)
" + }, + "12": { + "question": "Heeft een
Tesla Supercharger (destination)
" + }, + "13": { + "question": "Heeft een
Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)
" + }, + "14": { + "question": "Heeft een
USB om GSMs en kleine electronica op te laden
" + }, + "15": { + "question": "Heeft een
Bosch Active Connect met 3 pinnen aan een kabel
" + }, + "16": { + "question": "Heeft een
Bosch Active Connect met 5 pinnen aan een kabel
" } } } @@ -1890,6 +1890,30 @@ "1": { "then": "Schuko stekker zonder aardingspin (CEE7/4 type F)" }, + "2": { + "then": "Europese stekker met aardingspin (CEE7/4 type E)" + }, + "3": { + "then": "Europese stekker met aardingspin (CEE7/4 type E)" + }, + "4": { + "then": "Chademo" + }, + "5": { + "then": "Chademo" + }, + "6": { + "then": "Type 1 met kabel (J1772)" + }, + "7": { + "then": "Type 1 met kabel (J1772)" + }, + "8": { + "then": "Type 1 zonder kabel (J1772)" + }, + "9": { + "then": "Type 1 zonder kabel (J1772)" + }, "10": { "then": "Type 1 CCS (ook gekend als Type 1 Combo)" }, @@ -1920,9 +1944,6 @@ "19": { "then": "Type 2 met kabel (J1772)" }, - "2": { - "then": "Europese stekker met aardingspin (CEE7/4 type E)" - }, "20": { "then": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" }, @@ -1953,32 +1974,11 @@ "29": { "then": "Bosch Active Connect met 3 pinnen aan een kabel" }, - "3": { - "then": "Europese stekker met aardingspin (CEE7/4 type E)" - }, "30": { "then": "Bosch Active Connect met 5 pinnen aan een kabel" }, "31": { "then": "Bosch Active Connect met 5 pinnen aan een kabel" - }, - "4": { - "then": "Chademo" - }, - "5": { - "then": "Chademo" - }, - "6": { - "then": "Type 1 met kabel (J1772)" - }, - "7": { - "then": "Type 1 met kabel (J1772)" - }, - "8": { - "then": "Type 1 zonder kabel (J1772)" - }, - "9": { - "then": "Type 1 zonder kabel (J1772)" } }, "question": "Welke aansluitingen zijn hier beschikbaar?" @@ -2172,24 +2172,6 @@ "1": { "2": "Europese stekker met aardingspin (CEE7/4 type E)" }, - "10": { - "2": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" - }, - "11": { - "2": "Tesla Supercharger (destination)" - }, - "12": { - "2": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" - }, - "13": { - "2": "USB om GSMs en kleine electronica op te laden" - }, - "14": { - "2": "Bosch Active Connect met 3 pinnen aan een kabel" - }, - "15": { - "2": "Bosch Active Connect met 5 pinnen aan een kabel" - }, "2": { "2": "Chademo" }, @@ -2213,6 +2195,24 @@ }, "9": { "2": "Type 2 met kabel (J1772)" + }, + "10": { + "2": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" + }, + "11": { + "2": "Tesla Supercharger (destination)" + }, + "12": { + "2": "Tesla supercharger (destination (Een Type 2 met kabel en Tesla-logo)" + }, + "13": { + "2": "USB om GSMs en kleine electronica op te laden" + }, + "14": { + "2": "Bosch Active Connect met 3 pinnen aan een kabel" + }, + "15": { + "2": "Bosch Active Connect met 5 pinnen aan een kabel" } } } @@ -2978,15 +2978,6 @@ "1": { "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": { "then": "Dit fietspad is gemaakt van asfalt" }, @@ -3010,6 +3001,15 @@ }, "9": { "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?", @@ -3058,15 +3058,6 @@ "1": { "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": { "then": "Dit fietspad is gemaakt van asfalt" }, @@ -3090,6 +3081,15 @@ }, "9": { "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?", @@ -3684,8 +3684,8 @@ "render": { "special": { "question": "In welke talen heeft deze lift gesproken tekst?", - "render_list_item": "Deze lift heeft gesproken tekst in het {language():font-bold}", - "render_single_language": "Deze lift heeft gesproken tekst in het {language():font-bold}" + "render_list_item": "Deze lift heeft gesproken tekst in het {language()}", + "render_single_language": "Deze lift heeft gesproken tekst in het {language()}" } } }, @@ -3693,8 +3693,8 @@ "render": { "special": { "question": "In welke talen heeft deze lift voelbaar schrift (braille)?", - "render_list_item": "Deze lift heeft voelbaar schrift in het {language():font-bold}", - "render_single_language": "Deze lift heeft voelbaar schrift in het {language():font-bold}" + "render_list_item": "Deze lift heeft voelbaar schrift in het {language()}", + "render_single_language": "Deze lift heeft voelbaar schrift in het {language()}" } } } @@ -4138,21 +4138,6 @@ "1": { "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": { "then": "Dit is een pastazaak" }, @@ -4176,6 +4161,21 @@ }, "9": { "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?", @@ -4498,6 +4498,9 @@ }, "1": { "then": "Er is geen {negative-name} beschikbaar in deze hackerspace" + }, + "2": { + "then": "Er is een beperkte {negative-name} beschikbaar in deze hackerspace" } }, "question": "Is er {device-name} beschikbaar in deze hackerspace?" @@ -5346,19 +5349,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Alle Notes" - }, - "1": { - "question": "Verberg import Notes" - }, - "2": { - "question": "Toon enkel import Notes" - } - } - }, "2": { "options": { "0": { @@ -5414,6 +5404,19 @@ "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", @@ -5705,21 +5708,6 @@ "1": { "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": { "then": "Dit is een gehandicaptenparkeerplaats." }, @@ -5743,6 +5731,21 @@ }, "9": { "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?" @@ -6309,21 +6312,6 @@ "1": { "then": "Munten van 2 cent worden geaccepteerd" }, - "10": { - "then": "Munten van 20 rappen worden geaccepteerd" - }, - "11": { - "then": "Munten van ½ frank worden geaccepteerd" - }, - "12": { - "then": "Munten van 1 frank worden geaccepteerd" - }, - "13": { - "then": "Munten van 2 frank worden geaccepteerd" - }, - "14": { - "then": "Munten van 5 frank worden geaccepteerd" - }, "2": { "then": "Munten van 5 cent worden geaccepteerd" }, @@ -6347,6 +6335,21 @@ }, "9": { "then": "Munten van 10 rappen worden geaccepteerd" + }, + "10": { + "then": "Munten van 20 rappen worden geaccepteerd" + }, + "11": { + "then": "Munten van ½ frank worden geaccepteerd" + }, + "12": { + "then": "Munten van 1 frank worden geaccepteerd" + }, + "13": { + "then": "Munten van 2 frank worden geaccepteerd" + }, + "14": { + "then": "Munten van 5 frank worden geaccepteerd" } }, "question": "Met welke munten kan je hier betalen?" @@ -6359,15 +6362,6 @@ "1": { "then": "Biljetten van 10 euro worden geaccepteerd" }, - "10": { - "then": "Biljetten van 100 frank worden geaccepteerd" - }, - "11": { - "then": "Biljetten van 200 frank worden geaccepteerd" - }, - "12": { - "then": "Biljetten van 1000 frank worden geaccepteerd" - }, "2": { "then": "Biljetten van 20 euro worden geaccepteerd" }, @@ -6391,6 +6385,15 @@ }, "9": { "then": "Biljetten van 50 frank worden geaccepteerd" + }, + "10": { + "then": "Biljetten van 100 frank worden geaccepteerd" + }, + "11": { + "then": "Biljetten van 200 frank worden geaccepteerd" + }, + "12": { + "then": "Biljetten van 1000 frank worden geaccepteerd" } }, "question": "Met welke bankbiljetten kan je hier betalen?" @@ -6709,6 +6712,30 @@ "1": { "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": { "question": "Recycling van glas" }, @@ -6739,35 +6766,11 @@ "19": { "question": "Recycling van restafval" }, - "2": { - "question": "Recycling van drankpakken" - }, "20": { "question": "Recycling van inktpatronen" }, "21": { "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" } } }, @@ -6835,6 +6838,30 @@ "1": { "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": { "then": "Glas kan hier gerecycled worden" }, @@ -6865,9 +6892,6 @@ "19": { "then": "Schoenen kunnen hier gerecycled worden" }, - "2": { - "then": "Blikken kunnen hier gerecycled worden" - }, "20": { "then": "Kleine elektrische apparaten kunnen hier gerecycled worden" }, @@ -6882,27 +6906,6 @@ }, "24": { "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?" @@ -7533,8 +7536,8 @@ "render": { "special": { "question": "In welke talen is er voelbaar schrift (braille) voor navigatie? ", - "render_list_item": "Deze trap heeft voelbaar schrijft in {language():font-bold}", - "render_single_language": "Deze trap heeft voelbaar schrijft in {language():font-bold}" + "render_list_item": "Deze trap heeft voelbaar schrijft in {language()}", + "render_single_language": "Deze trap heeft voelbaar schrijft in {language()}" } } } @@ -7624,12 +7627,6 @@ "1": { "then": "Deze lantaarn gebruikt LEDs" }, - "10": { - "then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)" - }, - "11": { - "then": "Deze lantaarn wordt verlicht met gas" - }, "2": { "then": "Deze lantaarn gebruikt gloeilampen" }, @@ -7653,6 +7650,12 @@ }, "9": { "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?" @@ -7965,20 +7968,20 @@ "toilet-changing_table:location": { "mappings": { "0": { - "then": "De luiertafel bevindt zich in de vrouwentoiletten " + "then": "Er bevindt zich een luiertafel in de vrouwentoiletten " }, "1": { - "then": "De luiertafel bevindt zich in de herentoiletten " + "then": "Er bevindt zich een luiertafel in de herentoiletten " }, "2": { - "then": "De luiertafel bevindt zich in de rolstoeltoegankelijke toilet " + "then": "Er bevindt zich een luiertafel in de rolstoeltoegankelijke toilet " }, "3": { - "then": "De luiertafel bevindt zich in een daartoe voorziene kamer " + "then": "Er bevindt zich een luiertafel in een daartoe voorziene kamer " } }, "question": "Waar bevindt de luiertafel zich?", - "render": "De luiertafel bevindt zich in {changing_table:location}" + "render": "Er bevindt zich een luiertafel in {changing_table:location}" }, "toilet-charge": { "freeform": { @@ -8796,6 +8799,30 @@ "1": { "question": "Verkoop van dranken" }, + "2": { + "question": "Verkoop van snoep" + }, + "3": { + "question": "Verkoop van eten" + }, + "4": { + "question": "Verkoop van sigaretten" + }, + "5": { + "question": "Verkoop van condooms" + }, + "6": { + "question": "Verkoop van koffie" + }, + "7": { + "question": "Verkoop van water" + }, + "8": { + "question": "Verkoop van kranten" + }, + "9": { + "question": "Verkoop van fietsbinnenbanden" + }, "10": { "question": "Verkoop van melk" }, @@ -8826,9 +8853,6 @@ "19": { "question": "Verkoop van bloemen" }, - "2": { - "question": "Verkoop van snoep" - }, "23": { "question": "Verkoop van fietslampjes" }, @@ -8843,27 +8867,6 @@ }, "27": { "question": "Verkoop van fietssloten" - }, - "3": { - "question": "Verkoop van eten" - }, - "4": { - "question": "Verkoop van sigaretten" - }, - "5": { - "question": "Verkoop van condooms" - }, - "6": { - "question": "Verkoop van koffie" - }, - "7": { - "question": "Verkoop van water" - }, - "8": { - "question": "Verkoop van kranten" - }, - "9": { - "question": "Verkoop van fietsbinnenbanden" } } } @@ -8904,6 +8907,30 @@ "1": { "then": "Snoep wordt verkocht" }, + "2": { + "then": "Eten wordt verkocht" + }, + "3": { + "then": "Sigaretten worden verkocht" + }, + "4": { + "then": "Condooms worden verkocht" + }, + "5": { + "then": "Koffie wordt verkocht" + }, + "6": { + "then": "Drinkwater wordt verkocht" + }, + "7": { + "then": "Kranten worden verkocht" + }, + "8": { + "then": "Binnenbanden voor fietsen worden verkocht" + }, + "9": { + "then": "Melk wordt verkocht" + }, "10": { "then": "Brood wordt verkocht" }, @@ -8934,9 +8961,6 @@ "19": { "then": "Parkeerkaarten worden verkocht" }, - "2": { - "then": "Eten wordt verkocht" - }, "21": { "then": "Openbaar vervoerkaartjes worden verkocht" }, @@ -8954,27 +8978,6 @@ }, "26": { "then": "Fietssloten worden verkocht" - }, - "3": { - "then": "Sigaretten worden verkocht" - }, - "4": { - "then": "Condooms worden verkocht" - }, - "5": { - "then": "Koffie wordt verkocht" - }, - "6": { - "then": "Drinkwater wordt verkocht" - }, - "7": { - "then": "Kranten worden verkocht" - }, - "8": { - "then": "Binnenbanden voor fietsen worden verkocht" - }, - "9": { - "then": "Melk wordt verkocht" } }, "question": "Wat verkoopt deze verkoopautomaat?", @@ -9267,4 +9270,4 @@ "render": "windturbine" } } -} +} \ No newline at end of file diff --git a/langs/layers/pl.json b/langs/layers/pl.json index bc9c9bd82..7b9258b57 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -2604,7 +2604,7 @@ "render": { "special": { "render_all": "Następujące języki są używane w tej szkole:{list()}", - "render_single_language": "Język {language():font-bold} jest głównym językiem używanym w tej szkole" + "render_single_language": "Język {language()} jest głównym językiem używanym w tej szkole" } } }, diff --git a/langs/layers/pt.json b/langs/layers/pt.json index 3e2387dc4..ebabfd54e 100644 --- a/langs/layers/pt.json +++ b/langs/layers/pt.json @@ -500,7 +500,7 @@ "render": { "special": { "question": "Em que línguas este multibanco tem saída de fala?", - "render_list_item": "Este multibanco tem saída de fala em {language():font-bold}" + "render_list_item": "Este multibanco tem saída de fala em {language()}" } } } diff --git a/langs/layers/pt_BR.json b/langs/layers/pt_BR.json index a472d715c..a15bc79e7 100644 --- a/langs/layers/pt_BR.json +++ b/langs/layers/pt_BR.json @@ -489,8 +489,8 @@ "render": { "special": { "question": "Em quais línguas esse caixa eletrônico tem saída de fala?", - "render_list_item": "Este caixa eletrônico tem saída de fala em {language():font-bold}", - "render_single_language": "Este caixa eletrônico tem saída de fala em {language():font-bold}" + "render_list_item": "Este caixa eletrônico tem saída de fala em {language()}", + "render_single_language": "Este caixa eletrônico tem saída de fala em {language()}" } } } diff --git a/langs/nl.json b/langs/nl.json index 7c4ffe155..9bd4a1884 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -368,7 +368,6 @@ "uploading": "Traject uploaden…" }, "useSearch": "Gebruik de zoekfunctie hierboven om meer opties te zien", - "useSearchForMore": "Gebruik de zoekfunctie om {total} meer waarden te vinden…", "visualFeedback": { "closestFeaturesAre": "{n} objecten in beeld.", "east": "Naar het oosten", diff --git a/langs/pl.json b/langs/pl.json index 46be4e416..de2674a92 100644 --- a/langs/pl.json +++ b/langs/pl.json @@ -345,7 +345,6 @@ "uploadPendingSingle": "Jedna oczekująca zmiana", "uploadingChanges": "Przesyłanie zmian…", "useSearch": "Skorzystaj z wyszukiwania powyżej, aby zobaczyć gotowe ustawienia", - "useSearchForMore": "Użyj funkcji wyszukiwania, aby wyszukać w obrębie ponad {total} więcej wartości…", "waitingForGeopermission": "Oczekiwanie na Twoją zgodę na użycie geolokalizacji…", "waitingForLocation": "Wyszukiwanie Twojej bieżącej lokalizacji…", "weekdays": { diff --git a/langs/themes/ca.json b/langs/themes/ca.json index 933eb133c..a5cdfc921 100644 --- a/langs/themes/ca.json +++ b/langs/themes/ca.json @@ -868,111 +868,6 @@ }, "title": "Vorals i encreuaments" }, - "mapcomplete-changes": { - "description": "Aquest mapa mostra tots els canvis fets amb MapComplete", - "layers": { - "0": { - "description": "Mostra tots els canvis de MapComplete", - "filter": { - "0": { - "options": { - "0": { - "question": "El nom del tema conté {search}" - } - } - }, - "2": { - "options": { - "0": { - "question": "Fet pel col·laborador {search}" - } - } - }, - "3": { - "options": { - "0": { - "question": "No fet pel col·laborador {search}" - } - } - }, - "4": { - "options": { - "0": { - "question": "Fet abans de {search}" - } - } - }, - "5": { - "options": { - "0": { - "question": "Fet després de {search}" - } - } - }, - "6": { - "options": { - "0": { - "question": "Idioma de l'usuari (codi iso) {search}" - } - } - }, - "7": { - "options": { - "0": { - "question": "Fet amb l'amfitrió {search}" - } - } - }, - "8": { - "options": { - "0": { - "question": "El conjunt de canvis ha afegit almenys una imatge" - } - } - } - }, - "tagRenderings": { - "contributor": { - "question": "Quin col·laborador va fer aquest canvi?", - "render": "Canvi fet per {user}" - }, - "host": { - "question": "Amb quin amfitrió (lloc web) es va fer aquest canvi?", - "render": "Canviat amb {host}" - }, - "locale": { - "question": "Amb quina configuració regional (idioma) s'ha fet aquest canvi?", - "render": "La configuració regional de l'usuari és {locale}" - }, - "show_changeset_id": { - "render": "Conjunt de canvi {id}" - }, - "theme-id": { - "question": "Quin tema es va utilitzar per fer aquest canvi?", - "render": "Canvi amb el tema {theme}" - }, - "version": { - "question": "Quina versió de MapComplete es va utilitzar per fer aquest canvi?", - "render": "Fet amb {editor}" - } - }, - "title": { - "render": "Conjunt de canvis per a {theme}" - } - }, - "1": { - "override": { - "tagRenderings+": { - "0": { - "render": "Es pot trobar més estadística aquí" - } - } - } - } - }, - "shortDescription": "Mostra els canvis fets amb MapComplete", - "title": "Canvis fets amb MapComplete" - }, "maproulette": { "description": "Tema que mostra les tasques de MapRoulette, que us permet cercar-les, filtrar-les i solucionar-les.", "title": "Tasques de MapRoulette" diff --git a/langs/themes/de.json b/langs/themes/de.json index 672a46b9c..598159fdf 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -898,133 +898,6 @@ }, "title": "Bordsteine und Überwege" }, - "mapcomplete-changes": { - "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", - "layers": { - "0": { - "description": "Zeigt alle MapComplete-Änderungen", - "filter": { - "0": { - "options": { - "0": { - "question": "Themename enthält {search}" - } - } - }, - "1": { - "options": { - "0": { - "question": "Der Name enthält nicht {search}" - } - } - }, - "10": { - "options": { - "0": { - "question": "Etymologie-Thema ausschließen" - } - } - }, - "2": { - "options": { - "0": { - "question": "Der Name enthält nicht {search}" - } - } - }, - "3": { - "options": { - "0": { - "question": "Nicht erstellt von {search}" - } - } - }, - "4": { - "options": { - "0": { - "question": "Erstellt vor {search}" - } - } - }, - "5": { - "options": { - "0": { - "question": "Erstellt nach {search}" - } - } - }, - "6": { - "options": { - "0": { - "question": "Benutzersprache (ISO-Code) {search}" - } - } - }, - "7": { - "options": { - "0": { - "question": "Erstellt mit Host {search}" - } - } - }, - "8": { - "options": { - "0": { - "question": "Änderungssatz hat mindestens ein Bild hinzugefügt" - } - } - }, - "9": { - "options": { - "0": { - "question": "GRB-Theme ausschließen" - } - } - } - }, - "name": "Zentrum der Änderungssätze", - "tagRenderings": { - "contributor": { - "question": "Wer hat diese Änderung vorgenommen?", - "render": "Änderung von {user}" - }, - "host": { - "question": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?", - "render": "Geändert über {host}" - }, - "locale": { - "question": "In welcher Benutzersprache wurde diese Änderung vorgenommen?", - "render": "Benutzersprache {locale}" - }, - "show_changeset_id": { - "render": "Änderungssatz {id}" - }, - "theme-id": { - "question": "Welches Theme wurde für diese Änderung verwendet?", - "render": "Geändert mit Thema {theme}" - }, - "version": { - "question": "Welche Version von MapComplete wurde verwendet, um diese Änderung vorzunehmen?", - "render": "Erstellt mit {editor}" - } - }, - "title": { - "render": "Änderungssatz für {theme}" - } - }, - "1": { - "override": { - "tagRenderings+": { - "0": { - "render": "Mehr Statistiken gibt es hier" - } - } - } - } - }, - "shortDescription": "Zeigt die von MapComplete vorgenommenen Änderungen an", - "title": "Mit MapComplete vorgenommene Änderungen" - }, "maproulette": { "description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.", "title": "MapRoulette-Aufgaben" @@ -1056,33 +929,6 @@ "onwheels": { "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen", "layers": { - "19": { - "override": { - "=title": { - "render": "Statistik" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Alle vorgeschlagenen Tags hinzufügen" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1125,6 +971,33 @@ "override": { "name": "Barrierefreie Parkplätze" } + }, + "19": { + "override": { + "=title": { + "render": "Statistik" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Alle vorgeschlagenen Tags hinzufügen" + } + } + } + } + } } }, "title": "Auf Rädern" @@ -1285,6 +1158,10 @@ "stations": { "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen", "layers": { + "3": { + "description": "Ebene mit Bahnhöfen", + "name": "Bahnhöfe" + }, "16": { "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren", "name": "Abfahrtstafeln", @@ -1316,10 +1193,6 @@ "title": { "render": "Abfahrtstafel" } - }, - "3": { - "description": "Ebene mit Bahnhöfen", - "name": "Bahnhöfe" } }, "title": "Bahnhöfe" @@ -1498,4 +1371,4 @@ "shortDescription": "Eine Karte mit Abfalleimern", "title": "Abfalleimer" } -} +} \ No newline at end of file diff --git a/langs/themes/en.json b/langs/themes/en.json index 477cfc170..934d2de15 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -918,13 +918,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Exclude etymology theme" - } - } - }, "2": { "options": { "0": { @@ -980,6 +973,13 @@ "question": "Exclude GRB theme" } } + }, + "10": { + "options": { + "0": { + "question": "Exclude etymology theme" + } + } } }, "name": "Changeset centers", @@ -1056,33 +1056,6 @@ "onwheels": { "description": "On this map, publicly weelchair accessible places are shown and can be easily added", "layers": { - "19": { - "override": { - "=title": { - "render": "Statistics" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Add all the suggested tags" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1125,10 +1098,88 @@ "override": { "name": "Disabled parking spaces" } + }, + "19": { + "override": { + "=title": { + "render": "Statistics" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Add all the suggested tags" + } + } + } + } + } } }, "title": "OnWheels" }, + "openlovemap": { + "description": "

Love in the palm of your hand

Open Love Map lists various adult entries, such as brothels, erotic stores and stripclubs.", + "layers": { + "2": { + "override": { + "=presets": { + "0": { + "title": "an erotic shop" + } + }, + "name": "Erotic shops" + } + }, + "4": { + "override": { + "=presets": { + "0": { + "title": "a condom vending machine" + } + } + } + }, + "6": { + "override": { + "=presets": { + "0": { + "title": "an erotic cinema" + } + } + } + }, + "9": { + "override": { + "+tagRenderings": { + "0": { + "question": "What type of hotel is this?" + } + } + } + } + }, + "overrideAll": { + "tagRenderings+": { + "0": { + "question": "Does {title()} have a private video booth?", + "questionHint": "This is for use by a single person." + } + } + }, + "title": "Open Love Map" + }, "openwindpowermap": { "description": "A map for showing and editing wind turbines.", "title": "Wind power generators" @@ -1285,6 +1336,10 @@ "stations": { "description": "View, edit and add details to a train station", "layers": { + "3": { + "description": "Layer showing train stations", + "name": "Train Stations" + }, "16": { "description": "Displays showing the trains that will leave from this station", "name": "Departures boards", @@ -1316,10 +1371,6 @@ "title": { "render": "Departures board" } - }, - "3": { - "description": "Layer showing train stations", - "name": "Train Stations" } }, "title": "Train Stations" @@ -1498,4 +1549,4 @@ "shortDescription": "A map with waste baskets", "title": "Waste Basket" } -} +} \ No newline at end of file diff --git a/langs/themes/es.json b/langs/themes/es.json index e1a6aa357..796941f9f 100644 --- a/langs/themes/es.json +++ b/langs/themes/es.json @@ -898,23 +898,6 @@ }, "title": "Bordillos y cruces" }, - "mapcomplete-changes": { - "description": "Este mapa muestra todos los cambios realizados con MapComplete", - "layers": { - "0": { - "description": "Muestra todos los cambios de MapComplete", - "filter": { - "0": { - "options": { - "0": { - "question": "El nombre del tema contiene {search}" - } - } - } - } - } - } - }, "maproulette": { "description": "Tema que muestra las tareas de MapRoulette, permitiendo buscarlas, filtrarlas y arreglarlas.", "title": "Tareas de MapRoulette" @@ -946,33 +929,6 @@ "onwheels": { "description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente", "layers": { - "19": { - "override": { - "=title": { - "render": "Estadísticas" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Importar" - } - } - }, - "1": { - "render": { - "special": { - "message": "Añadir todas las etiquetas sugeridas" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1015,6 +971,33 @@ "override": { "name": "Plazas de aparcamiento para discapacitados" } + }, + "19": { + "override": { + "=title": { + "render": "Estadísticas" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Importar" + } + } + }, + "1": { + "render": { + "special": { + "message": "Añadir todas las etiquetas sugeridas" + } + } + } + } + } } }, "title": "Sobre ruedas" @@ -1175,6 +1158,10 @@ "stations": { "description": "Ver, editar y añadir detalles a una estación de tren", "layers": { + "3": { + "description": "Capa que muestra las estaciones de tren", + "name": "Estación de Tren" + }, "16": { "description": "Pantallas que muestran los trenes que saldrán de esta estación", "name": "Tableros de salidas", @@ -1206,10 +1193,6 @@ "title": { "render": "Tablero de salidas" } - }, - "3": { - "description": "Capa que muestra las estaciones de tren", - "name": "Estación de Tren" } }, "title": "Estaciones de tren" @@ -1331,4 +1314,4 @@ "shortDescription": "Un mapa con papeleras", "title": "Papeleras" } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 92b0f86d2..45b19f1fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.36.12", + "version": "0.37.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.36.12", + "version": "0.37.0", "license": "GPL-3.0-or-later", "dependencies": { "@rgossiaux/svelte-headlessui": "^1.0.2", @@ -104,7 +104,7 @@ "ts2json-schema": "^1.4.0", "tslib": "^2.5.0", "typescript": "^4.7.4", - "vite": "^4.0.5" + "vite": "^4.5.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -5343,9 +5343,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001572", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz", - "integrity": "sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -13298,9 +13298,9 @@ } }, "node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -17656,9 +17656,9 @@ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { - "version": "1.0.30001572", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz", - "integrity": "sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true }, "canvg": { @@ -23616,9 +23616,9 @@ } }, "vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "requires": { "esbuild": "^0.18.10", "fsevents": "~2.3.2", diff --git a/package.json b/package.json index 172a1a380..3d2532a23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.36.13", + "version": "0.37.1", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", @@ -202,6 +202,6 @@ "ts2json-schema": "^1.4.0", "tslib": "^2.5.0", "typescript": "^4.7.4", - "vite": "^4.0.5" + "vite": "^4.5.2" } } diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css index 4848be724..a42c4a9a7 100644 --- a/public/css/index-tailwind-output.css +++ b/public/css/index-tailwind-output.css @@ -777,10 +777,6 @@ video { float: left; } -.m-8 { - margin: 2rem; -} - .m-4 { margin: 1rem; } @@ -793,6 +789,10 @@ video { margin: 0px; } +.m-8 { + margin: 2rem; +} + .m-2 { margin: 0.5rem; } @@ -891,10 +891,6 @@ video { margin-right: 3rem; } -.mb-4 { - margin-bottom: 1rem; -} - .mt-4 { margin-top: 1rem; } @@ -927,6 +923,10 @@ video { margin-right: 0.25rem; } +.mb-4 { + margin-bottom: 1rem; +} + .ml-1 { margin-left: 0.25rem; } @@ -1277,6 +1277,12 @@ video { max-width: 100%; } +.max-w-fit { + max-width: -webkit-fit-content; + max-width: -moz-fit-content; + max-width: fit-content; +} + .flex-none { flex: none; } @@ -2600,6 +2606,10 @@ label.checked:not(.neutral-label) { border: 2px solid var(--foreground-color); } +textarea { + color: black; +} + /************************* OTHER CATEGORIES ********************************/ /** diff --git a/scripts/ScriptUtils.ts b/scripts/ScriptUtils.ts index 2a9ac68bc..0f969da76 100644 --- a/scripts/ScriptUtils.ts +++ b/scripts/ScriptUtils.ts @@ -39,7 +39,7 @@ export default class ScriptUtils { public static DownloadFileTo(url, targetFilePath: string): Promise { ScriptUtils.erasableLog("Downloading", url, "to", targetFilePath) - return new Promise((resolve, err) => { + return new Promise((resolve) => { https.get(url, (res) => { const filePath = fs.createWriteStream(targetFilePath) res.pipe(filePath) diff --git a/scripts/conflate.ts b/scripts/conflate.ts index e25abfbf5..f0b342978 100644 --- a/scripts/conflate.ts +++ b/scripts/conflate.ts @@ -112,7 +112,7 @@ export class Conflate extends Script { const changedObjects: OsmObject[] = [] for (const { match, replayed } of bestMatches) { - const { external_feature, d, osm_feature } = match + const { d, osm_feature } = match const { possibly_imported, certainly_imported, resting_properties } = replayed const status = resting_properties["status"] delete resting_properties["status"] diff --git a/scripts/generateIncludedImages.ts b/scripts/generateIncludedImages.ts index b72fb0b75..e9336f201 100644 --- a/scripts/generateIncludedImages.ts +++ b/scripts/generateIncludedImages.ts @@ -7,6 +7,7 @@ function genImages(dryrun = false) { "add", "addSmall", "back", + "circle", "blocked", "brick_wall", "brick_wall_raw", @@ -33,6 +34,7 @@ function genImages(dryrun = false) { "duplicate", "elevator", "elevator_wheelchair", + "envelope", "eye", "filter", "filter_disable", @@ -65,6 +67,7 @@ function genImages(dryrun = false) { "mapillary_black", "mastodon", "min", + "move", "move-arrows", "move_confirm", "move_not_allowed", @@ -72,13 +75,19 @@ function genImages(dryrun = false) { "osm_logo_us", "osm-logo-us", "party", + "pencil", "person", "pin", "plantnet_logo", "plus", "reload", + "resolved", "ring", "robot", + "scissors", + "search", + "search_disable", + "share", "SocialImageForeground", "speech_bubble", "speech_bubble_black_outline", @@ -89,8 +98,10 @@ function genImages(dryrun = false) { "star_outline", "teardrop", "teardrop_with_hole_green", + "statistics", "translate", "triangle", + "up", "Upload", "wikidata", "wikimedia-commons-white", diff --git a/scripts/generateTaginfoProjectFiles.ts b/scripts/generateTaginfoProjectFiles.ts index 0b65be1e0..e5ebe8882 100644 --- a/scripts/generateTaginfoProjectFiles.ts +++ b/scripts/generateTaginfoProjectFiles.ts @@ -5,7 +5,6 @@ import { readFileSync, writeFileSync } from "fs" import LayoutConfig from "../src/Models/ThemeConfig/LayoutConfig" import LayerConfig from "../src/Models/ThemeConfig/LayerConfig" import { Utils } from "../src/Utils" -import TagRenderingConfig from "../src/Models/ThemeConfig/TagRenderingConfig" /** * Generates all the files in "Docs/TagInfo". These are picked up by the taginfo project, showing a link to the mapcomplete theme if the key is used diff --git a/scripts/lint.ts b/scripts/lint.ts index 09206e68c..55ef491ea 100644 --- a/scripts/lint.ts +++ b/scripts/lint.ts @@ -30,17 +30,6 @@ t.OnEveryLanguage((txt, ln) => { return txt }) -const articles = { - /* de: "eine", - es: 'una', - fr: 'une', - it: 'una', - nb_NO: 'en', - nl: 'een', - pt: 'uma', - pt_BR : 'uma',//*/ -} - function reorder(object: object, order: string[]) { const allKeys = new Set(Object.keys(object)) const copy = {} @@ -54,38 +43,6 @@ function reorder(object: object, order: string[]) { return copy } -function addArticleToPresets(layerConfig: { presets?: { title: any }[] }) { - /* - if(layerConfig.presets === undefined){ - return - } - for (const preset of layerConfig.presets) { - preset.title = new Translation(preset.title, "autofix") - .OnEveryLanguage((txt, lang) => { - let article = articles[lang] - if(lang === "en"){ - if(["a","e","u","o","i"].some(vowel => txt.toLowerCase().startsWith(vowel))) { - article = "an" - }else{ - article = "a" - } - } - if(article === undefined){ - return txt; - } - if(txt.startsWith(article+" ")){ - return txt; - } - if(txt.startsWith("an ")){ - return txt; - } - return article +" " + txt.toLowerCase(); - }) - .translations - } - //*/ -} - const layerFiles = ScriptUtils.getLayerFiles() for (const layerFile of layerFiles) { try { @@ -95,7 +52,6 @@ for (const layerFile of layerFiles) { ConversionContext.construct([layerFile.path.split("/").at(-1)], ["update legacy"]) ) ) - addArticleToPresets(fixed) const reordered = reorder(fixed, layerAttributesOrder) writeFileSync(layerFile.path, JSON.stringify(reordered, null, " ") + "\n") } catch (e) { @@ -110,11 +66,7 @@ for (const themeFile of themeFiles) { themeFile.parsed, ConversionContext.construct([themeFile.path.split("/").at(-1)], ["update legacy layer"]) ) - for (const layer of fixed.layers) { - if (layer["presets"] !== undefined) { - addArticleToPresets(layer) - } - } + // extractInlineLayer(fixed) const endsWithNewline = themeFile.raw.at(-1) === "\n" const ordered = reorder(fixed, themeAttributesOrder) diff --git a/src/Logic/ExtraFunctions.ts b/src/Logic/ExtraFunctions.ts index 6575a543f..bcdd2c901 100644 --- a/src/Logic/ExtraFunctions.ts +++ b/src/Logic/ExtraFunctions.ts @@ -15,7 +15,7 @@ export interface ExtraFuncParams { */ getFeaturesWithin: ( layerId: string, - bbox: BBox, + bbox: BBox ) => Feature>[][] getFeatureById: (id: string) => Feature> } @@ -71,7 +71,7 @@ class EnclosingFunc implements ExtraFunction { if ( GeoOperations.completelyWithin( feat, - >otherFeature, + >otherFeature ) ) { result.push({ feat: otherFeature }) @@ -162,7 +162,7 @@ class IntersectionFunc implements ExtraFunction { for (const otherFeature of otherFeatures) { const intersections = GeoOperations.LineIntersections( feat, - >>otherFeature, + >>otherFeature ) if (intersections.length === 0) { continue @@ -192,7 +192,7 @@ class DistanceToFunc implements ExtraFunction { // Feature._lon and ._lat is conveniently place by one of the other metatags return GeoOperations.distanceBetween( [arg0, lat], - GeoOperations.centerpointCoordinates(feature), + GeoOperations.centerpointCoordinates(feature) ) } if (typeof arg0 === "string") { @@ -207,7 +207,7 @@ class DistanceToFunc implements ExtraFunction { // arg0 is probably a geojsonfeature return GeoOperations.distanceBetween( GeoOperations.centerpointCoordinates(arg0), - GeoOperations.centerpointCoordinates(feature), + GeoOperations.centerpointCoordinates(feature) ) } } @@ -253,29 +253,34 @@ class ClosestNObjectFunc implements ExtraFunction { params: ExtraFuncParams, feature: any, features: string | string[] | Feature[], - options?: { maxFeatures?: number; uniqueTag?: string | undefined; maxDistance?: number }, + options?: { maxFeatures?: number; uniqueTag?: string | undefined; maxDistance?: number } ): { feat: any; distance: number }[] { const maxFeatures = options?.maxFeatures ?? 1 const maxDistance = options?.maxDistance ?? 500 const uniqueTag: string | undefined = options?.uniqueTag - let allFeatures: Feature[][] if (typeof features === "string") { features = [features] - } else { - allFeatures = [] - for (const spec of features) { - if (typeof spec === "string") { - const name = spec - const bbox = GeoOperations.bbox( - GeoOperations.buffer(GeoOperations.bbox(feature), maxDistance), - ) - const coors = <[number, number][]>bbox.geometry.coordinates - allFeatures.push(...params.getFeaturesWithin(name, new BBox(coors))) - } else { - allFeatures.push([spec]) - } + } + + let allFeatures: Feature[][] = [] + for (const spec of features) { + if (typeof spec === "string") { + const name = spec + const bbox = GeoOperations.bbox( + GeoOperations.buffer(GeoOperations.bbox(feature), maxDistance) + ) + const coors = <[number, number][]>bbox.geometry.coordinates + allFeatures.push(...params.getFeaturesWithin(name, new BBox(coors))) + } else { + allFeatures.push([spec]) } } + console.log( + "Determining features which are close to", + features, + "other features:", + allFeatures + ) if (features === undefined) { return } @@ -283,7 +288,7 @@ class ClosestNObjectFunc implements ExtraFunction { const selfCenter = GeoOperations.centerpointCoordinates(feature) let closestFeatures: { feat: any; distance: number }[] = [] - for (const feats of allFeatures) { + for (const feats of allFeatures ?? []) { for (const otherFeature of feats) { if (otherFeature.properties === undefined) { console.warn("OtherFeature does not have properties:", otherFeature) @@ -296,14 +301,14 @@ class ClosestNObjectFunc implements ExtraFunction { } const distance = GeoOperations.distanceBetween( GeoOperations.centerpointCoordinates(otherFeature), - selfCenter, + selfCenter ) if (distance === undefined || distance === null || isNaN(distance)) { console.error( "Could not calculate the distance between", feature, "and", - otherFeature, + otherFeature ) throw "Undefined distance!" } @@ -313,7 +318,7 @@ class ClosestNObjectFunc implements ExtraFunction { "Got a suspiciously zero distance between", otherFeature, "and self-feature", - feature, + feature ) } @@ -347,7 +352,7 @@ class ClosestNObjectFunc implements ExtraFunction { const uniqueTagsMatch = otherFeature.properties[uniqueTag] !== undefined && closestFeature.feat.properties[uniqueTag] === - otherFeature.properties[uniqueTag] + otherFeature.properties[uniqueTag] if (uniqueTagsMatch) { targetIndex = -1 if (closestFeature.distance > distance) { @@ -440,7 +445,7 @@ class GetParsed implements ExtraFunction { return parsed } catch (e) { console.warn( - "Could not parse property " + key + " due to: " + e + ", the value is " + value, + "Could not parse property " + key + " due to: " + e + ", the value is " + value ) return undefined } @@ -464,10 +469,10 @@ export class ExtraFunctions { ]), "To enable this feature, add a field `calculatedTags` in the layer object, e.g.:", "````", - "\"calculatedTags\": [", - " \"_someKey=javascript-expression (lazy execution)\",", - " \"_some_other_key:=javascript expression (strict execution)", - " \"name=feat.properties.name ?? feat.properties.ref ?? feat.properties.operator\",", + '"calculatedTags": [', + ' "_someKey=javascript-expression (lazy execution)",', + ' "_some_other_key:=javascript expression (strict execution)', + ' "name=feat.properties.name ?? feat.properties.ref ?? feat.properties.operator",', " \"_distanceCloserThen3Km=distanceTo(feat)( some_lon, some_lat) < 3 ? 'yes' : 'no'\" ", " ]", "````", @@ -506,7 +511,7 @@ export class ExtraFunctions { ] public static constructHelpers( - params: ExtraFuncParams, + params: ExtraFuncParams ): Record Function> { const record: Record Function> = {} for (const f of ExtraFunctions.allFuncs) { diff --git a/src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts b/src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts index 1f2764062..3d2f23cbe 100644 --- a/src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/FavouritesFeatureSource.ts @@ -159,7 +159,6 @@ export default class FavouritesFeatureSource extends StaticFeatureSource { public removeFavourite(feature: Feature, tags?: UIEventSource>) { const id = feature.properties.id.replace("/", "-") - const pref = this._osmConnection.GetPreference("favourite-" + id) this._osmConnection.preferencesHandler.removeAllWithPrefix("mapcomplete-favourite-" + id) if (tags) { delete tags.data._favourite diff --git a/src/Logic/FeatureSource/Sources/LayoutSource.ts b/src/Logic/FeatureSource/Sources/LayoutSource.ts index fa430f561..87546015d 100644 --- a/src/Logic/FeatureSource/Sources/LayoutSource.ts +++ b/src/Logic/FeatureSource/Sources/LayoutSource.ts @@ -46,7 +46,6 @@ export default class LayoutSource extends FeatureSourceMerger { ) const overpassSource = LayoutSource.setupOverpass( - backend, osmLayers, bounds, zoom, @@ -132,7 +131,6 @@ export default class LayoutSource extends FeatureSourceMerger { } private static setupOverpass( - backend: string, osmLayers: LayerConfig[], bounds: Store, zoom: Store, diff --git a/src/Logic/FeatureSource/Sources/NearbyFeatureSource.ts b/src/Logic/FeatureSource/Sources/NearbyFeatureSource.ts index 4ca206498..00ea2fc8e 100644 --- a/src/Logic/FeatureSource/Sources/NearbyFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/NearbyFeatureSource.ts @@ -48,7 +48,7 @@ export default class NearbyFeatureSource implements FeatureSource { flayer.layerDef.minzoom, flayer.isDisplayed ) - calcSource.addCallbackAndRunD((features) => { + calcSource.addCallbackAndRunD(() => { this.update() }) this._allSources.push(calcSource) diff --git a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts index 09d89e086..02ef73c43 100644 --- a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts @@ -103,7 +103,7 @@ export default class OverpassFeatureSource implements FeatureSource { if (!result) { return } - const [bounds, date, updatedLayers] = result + const [bounds, _, __] = result this._lastQueryBBox = bounds } diff --git a/src/Logic/ImageProviders/Mapillary.ts b/src/Logic/ImageProviders/Mapillary.ts index a508263fe..b9e6f70ca 100644 --- a/src/Logic/ImageProviders/Mapillary.ts +++ b/src/Logic/ImageProviders/Mapillary.ts @@ -133,7 +133,7 @@ export class Mapillary extends ImageProvider { return [this.PrepareUrlAsync(key, value)] } - public async DownloadAttribution(url: string): Promise { + public async DownloadAttribution(_: string): Promise { const license = new LicenseInfo() license.artist = undefined license.license = "CC BY-SA 4.0" diff --git a/src/Logic/Maproulette.ts b/src/Logic/Maproulette.ts index 922aa8384..5e1a7296c 100644 --- a/src/Logic/Maproulette.ts +++ b/src/Logic/Maproulette.ts @@ -15,11 +15,11 @@ export default class Maproulette { public static readonly STATUS_MEANING = { 0: "Open", 1: "Fixed", - 2: "False positive", + 2: "False_positive", 3: "Skipped", 4: "Deleted", 5: "Already fixed", - 6: "Too hard", + 6: "Too_hard", 9: "Disabled", } public static singleton = new Maproulette() diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index a6295bd8d..4c6d028de 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -416,7 +416,7 @@ export class OsmConnection { ): Promise<{ id: number }> { if (this._dryRun.data) { console.warn("Dryrun enabled - not actually uploading GPX ", gpx) - return new Promise<{ id: number }>((ok, error) => { + return new Promise<{ id: number }>((ok) => { window.setTimeout( () => ok({ id: Math.floor(Math.random() * 1000) }), Math.random() * 5000 diff --git a/src/Logic/SimpleMetaTagger.ts b/src/Logic/SimpleMetaTagger.ts index a425596ac..25a5e2b30 100644 --- a/src/Logic/SimpleMetaTagger.ts +++ b/src/Logic/SimpleMetaTagger.ts @@ -615,7 +615,7 @@ export default class SimpleMetaTaggers { isLazy: true, includesDates: true, }, - (feature, layer, tagsStore) => { + (feature) => { Utils.AddLazyProperty(feature.properties, "_last_edit:passed_time", () => { const lastEditTimestamp = new Date( feature.properties["_last_edit:timestamp"] diff --git a/src/Logic/Tags/ComparingTag.ts b/src/Logic/Tags/ComparingTag.ts index 8009662f4..981a64a92 100644 --- a/src/Logic/Tags/ComparingTag.ts +++ b/src/Logic/Tags/ComparingTag.ts @@ -20,11 +20,11 @@ export default class ComparingTag implements TagsFilter { this._boundary = boundary } - asChange(properties: Record): { k: string; v: string }[] { + asChange(_: Record): { k: string; v: string }[] { throw "A comparable tag can not be used to be uploaded to OSM" } - asHumanString(linkToWiki: boolean, shorten: boolean, properties: Record) { + asHumanString() { return this._key + this._representation + this._boundary } diff --git a/src/Logic/Web/TagInfo.ts b/src/Logic/Web/TagInfo.ts index 77250ae97..dfc6fb957 100644 --- a/src/Logic/Web/TagInfo.ts +++ b/src/Logic/Web/TagInfo.ts @@ -1,4 +1,3 @@ -import exp from "constants" import { Utils } from "../../Utils" export interface TagInfoStats { @@ -16,9 +15,8 @@ export interface TagInfoStats { } export default class TagInfo { - private readonly _backend: string - public static readonly global = new TagInfo() + private readonly _backend: string constructor(backend = "https://taginfo.openstreetmap.org/") { this._backend = backend diff --git a/src/Logic/Web/ThemeViewStateHashActor.ts b/src/Logic/Web/ThemeViewStateHashActor.ts index df38edce1..129de09ce 100644 --- a/src/Logic/Web/ThemeViewStateHashActor.ts +++ b/src/Logic/Web/ThemeViewStateHashActor.ts @@ -122,7 +122,7 @@ export default class ThemeViewStateHashActor { private loadStateFromHash(hash: string) { const state = this._state const parts = hash.split(":") - outer: for (const { toggle, name, showOverOthers, submenu } of state.guistate.allToggles) { + outer: for (const { toggle, name, submenu } of state.guistate.allToggles) { for (const part of parts) { if (part === name) { toggle.setData(true) diff --git a/src/Models/MapProperties.ts b/src/Models/MapProperties.ts index 73ec1b413..2492c1b50 100644 --- a/src/Models/MapProperties.ts +++ b/src/Models/MapProperties.ts @@ -1,11 +1,12 @@ import { Store, UIEventSource } from "../Logic/UIEventSource" import { BBox } from "../Logic/BBox" import { RasterLayerPolygon } from "./RasterLayers" -import { B } from "vitest/dist/types-aac763a5" + export interface KeyNavigationEvent { date: Date key: "north" | "east" | "south" | "west" | "in" | "out" | "islocked" | "locked" | "unlocked" } + export interface MapProperties { readonly location: UIEventSource<{ lon: number; lat: number }> readonly zoom: UIEventSource diff --git a/src/Models/ThemeConfig/Conversion/Conversion.ts b/src/Models/ThemeConfig/Conversion/Conversion.ts index d74028731..7603e5685 100644 --- a/src/Models/ThemeConfig/Conversion/Conversion.ts +++ b/src/Models/ThemeConfig/Conversion/Conversion.ts @@ -2,7 +2,6 @@ import { LayerConfigJson } from "../Json/LayerConfigJson" import { Utils } from "../../../Utils" import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson" import { ConversionContext } from "./ConversionContext" -import { T } from "vitest/dist/types-aac763a5" export interface DesugaringContext { tagRenderings: Map @@ -11,10 +10,11 @@ export interface DesugaringContext { } export type ConversionMsgLevel = "debug" | "information" | "warning" | "error" + export interface ConversionMessage { - context: ConversionContext - message: string - level: ConversionMsgLevel + readonly context: ConversionContext + readonly message: string + readonly level: ConversionMsgLevel } export abstract class Conversion { @@ -85,6 +85,7 @@ export class Pure extends Conversion { export class Bypass extends DesugaringStep { private readonly _applyIf: (t: T) => boolean private readonly _step: DesugaringStep + constructor(applyIf: (t: T) => boolean, step: DesugaringStep) { super("Applies the step on the object, if the object satisfies the predicate", [], "Bypass") this._applyIf = applyIf @@ -102,7 +103,6 @@ export class Bypass extends DesugaringStep { export class Each extends Conversion { private readonly _step: Conversion private readonly _msg: string - private readonly _filter: (x: X) => boolean constructor(step: Conversion, options?: { msg?: string }) { super( @@ -173,7 +173,7 @@ export class Pass extends Conversion { super(message ?? "Does nothing, often to swap out steps in testing", [], "Pass") } - convert(json: T, context: ConversionContext): T { + convert(json: T, _: ConversionContext): T { return json } } @@ -224,6 +224,7 @@ export class FirstOf extends Conversion { export class Cached extends Conversion { private _step: Conversion private readonly key: string + constructor(step: Conversion) { super("Secretly caches the output for the given input", [], "cached") this._step = step @@ -242,9 +243,11 @@ export class Cached extends Conversion { return converted } } + export class Fuse extends DesugaringStep { - private readonly steps: DesugaringStep[] protected debug = false + private readonly steps: DesugaringStep[] + constructor(doc: string, ...steps: DesugaringStep[]) { super( (doc ?? "") + @@ -301,7 +304,7 @@ export class SetDefault extends DesugaringStep { this._overrideEmptyString = overrideEmptyString } - convert(json: T, context: ConversionContext): T { + convert(json: T, _: ConversionContext): T { if (json === undefined) { return undefined } diff --git a/src/Models/ThemeConfig/Conversion/ConversionContext.ts b/src/Models/ThemeConfig/Conversion/ConversionContext.ts index 2a0e5e848..f0b567c74 100644 --- a/src/Models/ThemeConfig/Conversion/ConversionContext.ts +++ b/src/Models/ThemeConfig/Conversion/ConversionContext.ts @@ -1,6 +1,7 @@ import { ConversionMessage, ConversionMsgLevel } from "./Conversion" export class ConversionContext { + private static reported = false /** * The path within the data structure where we are currently operating */ @@ -10,7 +11,6 @@ export class ConversionContext { */ readonly operation: ReadonlyArray readonly messages: ConversionMessage[] - private _hasErrors: boolean = false private constructor( @@ -32,7 +32,6 @@ export class ConversionContext { } } } - private static reported = false public static construct(path: (string | number)[], operation: string[]) { return new ConversionContext([], [...path], [...operation]) @@ -76,6 +75,31 @@ export class ConversionContext { return "\x1b[31m" + s + "\x1b[0m" } + /** + * Does an inline edit of the messages for which a new path is defined + * This is a slight hack + * @param rewritePath + */ + public rewriteMessages( + rewritePath: ( + p: ReadonlyArray + ) => undefined | ReadonlyArray + ): void { + for (let i = 0; i < this.messages.length; i++) { + const m = this.messages[i] + const newPath = rewritePath(m.context.path) + if (!newPath) { + continue + } + const rewrittenContext = new ConversionContext( + this.messages, + newPath, + m.context.operation + ) + this.messages[i] = { ...m, context: rewrittenContext } + } + } + public enter(key: string | number | (string | number)[]) { if (!Array.isArray(key)) { if (typeof key === "number" && key < 0) { diff --git a/src/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts b/src/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts index b7c94df56..05c95e618 100644 --- a/src/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts +++ b/src/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts @@ -24,7 +24,7 @@ export default class CreateNoteImportLayer extends Conversion { this._desugaring = desugaring } - convert(json: LayerConfigJson, context: ConversionContext): LayerConfigJson { + convert(json: LayerConfigJson, _: ConversionContext): LayerConfigJson { if (this._desugaring.tagRenderings === null) { return json } @@ -1088,7 +1088,7 @@ class AddFavouriteBadges extends DesugaringStep { ) } - convert(json: LayerConfigJson, context: ConversionContext): LayerConfigJson { + convert(json: LayerConfigJson, _: ConversionContext): LayerConfigJson { if (json.source === "special" || json.source === "special:library") { return json } @@ -1113,7 +1113,7 @@ export class AddRatingBadge extends DesugaringStep { ) } - convert(json: LayerConfigJson, context: ConversionContext): LayerConfigJson { + convert(json: LayerConfigJson, _: ConversionContext): LayerConfigJson { if (!json.tagRenderings) { return json } diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index 7ffa505ce..bcff31ad9 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -1,4 +1,14 @@ -import { Concat, Conversion, DesugaringContext, DesugaringStep, Each, Fuse, On, Pass, SetDefault } from "./Conversion" +import { + Concat, + Conversion, + DesugaringContext, + DesugaringStep, + Each, + Fuse, + On, + Pass, + SetDefault, +} from "./Conversion" import { LayoutConfigJson } from "../Json/LayoutConfigJson" import { PrepareLayer } from "./PrepareLayer" import { LayerConfigJson } from "../Json/LayerConfigJson" @@ -19,7 +29,7 @@ class SubstituteLayer extends Conversion 0 ) { context.err( - `When overriding a layer, an override is not allowed to override into tagRenderings. Use "+tagRenderings" or "tagRenderings+" instead to prepend or append some questions.`, + `When overriding a layer, an override is not allowed to override into tagRenderings. Use "+tagRenderings" or "tagRenderings+" instead to prepend or append some questions.` ) } try { - const trPlus = json["override"]["tagRenderings+"] - if(trPlus){ - let index = found.tagRenderings.findIndex(tr => tr["id"] === "leftover-questions") - if(index < 0){ + if (trPlus) { + let index = found.tagRenderings.findIndex( + (tr) => tr["id"] === "leftover-questions" + ) + if (index < 0) { index = found.tagRenderings.length } found.tagRenderings.splice(index, 0, ...trPlus) @@ -90,14 +101,18 @@ class SubstituteLayer extends Conversion = new Set(json["hideTagRenderingsWithLabels"]) // These labels caused at least one deletion @@ -111,9 +126,9 @@ class SubstituteLayer extends Conversion 0) { context.err( "This theme specifies that certain tagrenderings have to be removed based on forbidden layers. One or more of these layers did not match any tagRenderings and caused no deletions: " + - unused.join(", ") + - "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore", + unused.join(", ") + + "\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore" ) } found.tagRenderings = filtered @@ -163,7 +178,7 @@ class AddDefaultLayers extends DesugaringStep { super( "Adds the default layers, namely: " + Constants.added_by_default.join(", "), ["layers"], - "AddDefaultLayers", + "AddDefaultLayers" ) this._state = state } @@ -178,7 +193,7 @@ class AddDefaultLayers extends DesugaringStep { if (v === undefined) { const msg = `Default layer ${layerName} not found. ${state.sharedLayers.size} layers are available` if (layerName === "favourite") { - context.warn(msg) + // context.warn(msg) continue } context.err(msg) @@ -187,10 +202,10 @@ class AddDefaultLayers extends DesugaringStep { if (alreadyLoaded.has(v.id)) { context.warn( "Layout " + - context + - " already has a layer with name " + - v.id + - "; skipping inclusion of this builtin layer", + context + + " already has a layer with name " + + v.id + + "; skipping inclusion of this builtin layer" ) continue } @@ -206,14 +221,14 @@ class AddImportLayers extends DesugaringStep { super( "For every layer in the 'layers'-list, create a new layer which'll import notes. (Note that priviliged layers and layers which have a geojson-source set are ignored)", ["layers"], - "AddImportLayers", + "AddImportLayers" ) } convert(json: LayoutConfigJson, context: ConversionContext): LayoutConfigJson { if (!(json.enableNoteImports ?? true)) { context.info( - "Not creating a note import layers for theme " + json.id + " as they are disabled", + "Not creating a note import layers for theme " + json.id + " as they are disabled" ) return json } @@ -248,7 +263,7 @@ class AddImportLayers extends DesugaringStep { try { const importLayerResult = creator.convert( layer, - context.inOperation(this.name).enter(i1), + context.inOperation(this.name).enter(i1) ) if (importLayerResult !== undefined) { json.layers.push(importLayerResult) @@ -267,7 +282,7 @@ class AddContextToTranslationsInLayout extends DesugaringStep super( "Adds context to translations, including the prefix 'themes:json.id'; this is to make sure terms in an 'overrides' or inline layer are linkable too", ["_context"], - "AddContextToTranlationsInLayout", + "AddContextToTranlationsInLayout" ) } @@ -282,11 +297,11 @@ class ApplyOverrideAll extends DesugaringStep { super( "Applies 'overrideAll' onto every 'layer'. The 'overrideAll'-field is removed afterwards", ["overrideAll", "layers"], - "ApplyOverrideAll", + "ApplyOverrideAll" ) } - convert(json: LayoutConfigJson, context: ConversionContext): LayoutConfigJson { + convert(json: LayoutConfigJson, _: ConversionContext): LayoutConfigJson { const overrideAll = json.overrideAll if (overrideAll === undefined) { return json @@ -310,8 +325,9 @@ class ApplyOverrideAll extends DesugaringStep { if (!layer.tagRenderings) { layer.tagRenderings = tagRenderingsPlus } else { - - let index = layer.tagRenderings.findIndex(tr => tr["id"] === "leftover-questions") + let index = layer.tagRenderings.findIndex( + (tr) => tr["id"] === "leftover-questions" + ) if (index < 0) { index = layer.tagRenderings.length - 1 } @@ -338,7 +354,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { Some layers (e.g. \`all_buildings_and_walls\' or \'streets_with_a_name\') are invisible, so by default, \'force_load\' is set too. `, ["layers"], - "AddDependencyLayersToTheme", + "AddDependencyLayersToTheme" ) this._state = state } @@ -346,7 +362,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { private static CalculateDependencies( alreadyLoaded: LayerConfigJson[], allKnownLayers: Map, - themeId: string, + themeId: string ): { config: LayerConfigJson; reason: string }[] { const dependenciesToAdd: { config: LayerConfigJson; reason: string }[] = [] const loadedLayerIds: Set = new Set(alreadyLoaded.map((l) => l.id)) @@ -369,7 +385,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { for (const layerConfig of alreadyLoaded) { try { const layerDeps = DependencyCalculator.getLayerDependencies( - new LayerConfig(layerConfig, themeId + "(dependencies)"), + new LayerConfig(layerConfig, themeId + "(dependencies)") ) dependencies.push(...layerDeps) } catch (e) { @@ -406,10 +422,10 @@ class AddDependencyLayersToTheme extends DesugaringStep { if (dep === undefined) { const message = [ "Loading a dependency failed: layer " + - unmetDependency.neededLayer + - " is not found, neither as layer of " + - themeId + - " nor as builtin layer.", + unmetDependency.neededLayer + + " is not found, neither as layer of " + + themeId + + " nor as builtin layer.", reason, "Loaded layers are: " + alreadyLoaded.map((l) => l.id).join(","), ] @@ -425,7 +441,7 @@ class AddDependencyLayersToTheme extends DesugaringStep { }) loadedLayerIds.add(dep.id) unmetDependencies = unmetDependencies.filter( - (d) => d.neededLayer !== unmetDependency.neededLayer, + (d) => d.neededLayer !== unmetDependency.neededLayer ) } } while (unmetDependencies.length > 0) @@ -446,14 +462,12 @@ class AddDependencyLayersToTheme extends DesugaringStep { const dependencies = AddDependencyLayersToTheme.CalculateDependencies( layers, allKnownLayers, - theme.id, + theme.id ) - for (const dependency of dependencies) { - } if (dependencies.length > 0) { for (const dependency of dependencies) { context.info( - "Added " + dependency.config.id + " to the theme. " + dependency.reason, + "Added " + dependency.config.id + " to the theme. " + dependency.reason ) } } @@ -495,7 +509,7 @@ class WarnForUnsubstitutedLayersInTheme extends DesugaringStep super( "Generates a warning if a theme uses an unsubstituted layer", ["layers"], - "WarnForUnsubstitutedLayersInTheme", + "WarnForUnsubstitutedLayersInTheme" ) } @@ -507,7 +521,7 @@ class WarnForUnsubstitutedLayersInTheme extends DesugaringStep context .enter("layers") .err( - "No layers are defined. You must define at least one layer to have a valid theme", + "No layers are defined. You must define at least one layer to have a valid theme" ) return json } @@ -531,10 +545,10 @@ class WarnForUnsubstitutedLayersInTheme extends DesugaringStep context.warn( "The theme " + - json.id + - " has an inline layer: " + - layer["id"] + - ". This is discouraged.", + json.id + + " has an inline layer: " + + layer["id"] + + ". This is discouraged." ) } return json @@ -548,7 +562,7 @@ export class PrepareTheme extends Fuse { state: DesugaringContext, options?: { skipDefaultLayers: false | boolean - }, + } ) { super( "Fully prepares and expands a theme", @@ -569,7 +583,7 @@ export class PrepareTheme extends Fuse { ? new Pass("AddDefaultLayers is disabled due to the set flag") : new AddDefaultLayers(state), new AddDependencyLayersToTheme(state), - new AddImportLayers(), + new AddImportLayers() ) this.state = state } @@ -584,13 +598,13 @@ export class PrepareTheme extends Fuse { const needsNodeDatabase = result.layers?.some((l: LayerConfigJson) => l.tagRenderings?.some((tr) => ValidationUtils.getSpecialVisualisations(tr)?.some( - (special) => special.needsNodeDatabase, - ), - ), + (special) => special.needsNodeDatabase + ) + ) ) if (needsNodeDatabase) { context.info( - "Setting 'enableNodeDatabase' as this theme uses a special visualisation which needs to keep track of _all_ nodes", + "Setting 'enableNodeDatabase' as this theme uses a special visualisation which needs to keep track of _all_ nodes" ) result.enableNodeDatabase = true } diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index 549d8da32..bbf306ce1 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -13,7 +13,10 @@ import { And } from "../../../Logic/Tags/And" import Translations from "../../../UI/i18n/Translations" import FilterConfigJson from "../Json/FilterConfigJson" import DeleteConfig from "../DeleteConfig" -import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson" +import { + MappingConfigJson, + QuestionableTagRenderingConfigJson, +} from "../Json/QuestionableTagRenderingConfigJson" import Validators from "../../../UI/InputElement/Validators" import TagRenderingConfig from "../TagRenderingConfig" import { parse as parse_html } from "node-html-parser" @@ -21,9 +24,7 @@ import PresetConfig from "../PresetConfig" import { TagsFilter } from "../../../Logic/Tags/TagsFilter" import { Translatable } from "../Json/Translatable" import { ConversionContext } from "./ConversionContext" -import * as eli from "../../../assets/editor-layer-index.json" import { AvailableRasterLayers } from "../../RasterLayers" -import Back from "../../../assets/svg/Back.svelte" import PointRenderingConfigJson from "../Json/PointRenderingConfigJson" class ValidateLanguageCompleteness extends DesugaringStep { @@ -178,7 +179,7 @@ export class ValidateTheme extends DesugaringStep { if (!json.title) { context.enter("title").err(`The theme ${json.id} does not have a title defined.`) } - if(!json.icon){ + if (!json.icon) { context.enter("icon").err("A theme should have an icon") } if (this._isBuiltin && this._extractImages !== undefined) { @@ -848,13 +849,32 @@ class MiscTagRenderingChecks extends DesugaringStep { CheckTranslation.allowUndefined.convert(json[key], context.enter(key)) } for (let i = 0; i < json.mappings?.length ?? 0; i++) { - const mapping = json.mappings[i] + const mapping: MappingConfigJson = json.mappings[i] CheckTranslation.noUndefined.convert( mapping.then, context.enters("mappings", i, "then") ) if (!mapping.if) { - context.enters("mappings", i).err("No `if` is defined") + console.log( + "Checking mappings", + i, + "if", + mapping.if, + context.path.join("."), + mapping.then + ) + context.enters("mappings", i, "if").err("No `if` is defined") + } + if (mapping.addExtraTags) { + for (let j = 0; j < mapping.addExtraTags.length; j++) { + if (!mapping.addExtraTags[j]) { + context + .enters("mappings", i, "addExtraTags", j) + .err( + "Detected a 'null' or 'undefined' value. Either specify a tag or delete this item" + ) + } + } } const en = mapping?.then?.["en"] if (en && this.detectYesOrNo(en)) { @@ -981,6 +1001,9 @@ class MiscTagRenderingChecks extends DesugaringStep { } } + if (context.hasErrors()) { + return undefined + } return json } @@ -1000,6 +1023,7 @@ export class ValidateTagRenderings extends Fuse { constructor(layerConfig?: LayerConfigJson, doesImageExist?: DoesImageExist) { super( "Various validation on tagRenderingConfigs", + new MiscTagRenderingChecks(), new DetectShadowedMappings(layerConfig), new DetectConflictingAddExtraTags(), // TODO enable new DetectNonErasedKeysInMappings(), @@ -1007,8 +1031,7 @@ export class ValidateTagRenderings extends Fuse { new On("render", new ValidatePossibleLinks()), new On("question", new ValidatePossibleLinks()), new On("questionHint", new ValidatePossibleLinks()), - new On("mappings", new Each(new On("then", new ValidatePossibleLinks()))), - new MiscTagRenderingChecks() + new On("mappings", new Each(new On("then", new ValidatePossibleLinks()))) ) } } @@ -1023,7 +1046,12 @@ export class PrevalidateLayer extends DesugaringStep { private readonly _studioValidations: boolean private readonly _validatePointRendering = new ValidatePointRendering() - constructor(path: string, isBuiltin, doesImageExist, studioValidations) { + constructor( + path: string, + isBuiltin: boolean, + doesImageExist: DoesImageExist, + studioValidations: boolean + ) { super("Runs various checks against common mistakes for a layer", [], "PrevalidateLayer") this._path = path this._isBuiltin = isBuiltin @@ -1111,7 +1139,9 @@ export class PrevalidateLayer extends DesugaringStep { context.enter("pointRendering").err("There are no pointRenderings at all...") } - json.pointRendering?.forEach((pr,i) => this._validatePointRendering.convert(pr, context.enters("pointeRendering", i))) + json.pointRendering?.forEach((pr, i) => + this._validatePointRendering.convert(pr, context.enters("pointeRendering", i)) + ) if (json["mapRendering"]) { context.enter("mapRendering").err("This layer has a legacy 'mapRendering'") @@ -1138,7 +1168,7 @@ export class PrevalidateLayer extends DesugaringStep { } if (json.tagRenderings !== undefined && json.tagRenderings.length > 0) { - new On("tagRendering", new Each(new ValidateTagRenderings(json))) + new On("tagRenderings", new Each(new ValidateTagRenderings(json))) if (json.title === undefined && json.source !== "special:library") { context .enter("title") @@ -1428,29 +1458,33 @@ class ValidatePointRendering extends DesugaringStep { } if (json["markers"]) { - context.enter("markers").err(`Detected a field 'markerS' in pointRendering. It is written as a singular case`) + context + .enter("markers") + .err( + `Detected a field 'markerS' in pointRendering. It is written as a singular case` + ) } if (json.marker && !Array.isArray(json.marker)) { - context.enter("marker").err( - "The marker in a pointRendering should be an array" - ) + context.enter("marker").err("The marker in a pointRendering should be an array") } if (json.location.length == 0) { - context.enter("location").err ( - "A pointRendering should have at least one 'location' to defined where it should be rendered. " - ) + context + .enter("location") + .err( + "A pointRendering should have at least one 'location' to defined where it should be rendered. " + ) } return json - - } } + export class ValidateLayer extends Conversion< LayerConfigJson, { parsed: LayerConfig; raw: LayerConfigJson } > { private readonly _skipDefaultLayers: boolean private readonly _prevalidation: PrevalidateLayer + constructor( path: string, isBuiltin: boolean, diff --git a/src/Models/ThemeConfig/Conversion/ValidationUtils.ts b/src/Models/ThemeConfig/Conversion/ValidationUtils.ts index f82a3577b..96b1396fe 100644 --- a/src/Models/ThemeConfig/Conversion/ValidationUtils.ts +++ b/src/Models/ThemeConfig/Conversion/ValidationUtils.ts @@ -3,7 +3,6 @@ import { Utils } from "../../../Utils" import SpecialVisualizations from "../../../UI/SpecialVisualizations" import { RenderingSpecification, SpecialVisualization } from "../../../UI/SpecialVisualization" import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson" -import { render } from "sass" export default class ValidationUtils { public static getAllSpecialVisualisations( diff --git a/src/Models/ThemeConfig/DependencyCalculator.ts b/src/Models/ThemeConfig/DependencyCalculator.ts index dbeeb6a71..41f0e3050 100644 --- a/src/Models/ThemeConfig/DependencyCalculator.ts +++ b/src/Models/ThemeConfig/DependencyCalculator.ts @@ -3,7 +3,6 @@ import { ExtraFuncParams, ExtraFunctions } from "../../Logic/ExtraFunctions" import LayerConfig from "./LayerConfig" import { SpecialVisualization } from "../../UI/SpecialVisualization" import SpecialVisualizations from "../../UI/SpecialVisualizations" -import { Exception } from "sass" export default class DependencyCalculator { public static GetTagRenderingDependencies(tr: TagRenderingConfig): string[] { diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 9013ff639..cb1396748 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -17,7 +17,6 @@ import { import { FixedUiElement } from "../../UI/Base/FixedUiElement" import Validators, { ValidatorType } from "../../UI/InputElement/Validators" import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" -import Constants from "../Constants" import { RegexTag } from "../../Logic/Tags/RegexTag" export interface Icon {} diff --git a/src/Models/Unit.ts b/src/Models/Unit.ts index 67613500d..06e09446c 100644 --- a/src/Models/Unit.ts +++ b/src/Models/Unit.ts @@ -1,6 +1,4 @@ import BaseUIElement from "../UI/BaseUIElement" -import { FixedUiElement } from "../UI/Base/FixedUiElement" -import Combine from "../UI/Base/Combine" import { Denomination } from "./Denomination" import UnitConfigJson from "./ThemeConfig/Json/UnitConfigJson" import unit from "../../assets/layers/unit/unit.json" @@ -198,6 +196,7 @@ export class Unit { const loaded = this.getFromLibrary(toLoad.quantity, ctx) const quantity = toLoad.quantity + function fetchDenom(d: string): Denomination { const found = loaded.denominations.find( (denom) => denom.canonical.toLowerCase() === d diff --git a/src/UI/AllThemesGui.svelte b/src/UI/AllThemesGui.svelte index 06c36284f..15464fd27 100644 --- a/src/UI/AllThemesGui.svelte +++ b/src/UI/AllThemesGui.svelte @@ -19,7 +19,7 @@ import { LayoutInformation } from "../Models/ThemeConfig/LayoutConfig" import * as themeOverview from "../assets/generated/theme_overview.json" import UnofficialThemeList from "./BigComponents/UnofficialThemeList.svelte" - import Eye from "@babeard/svelte-heroicons/mini/Eye" + import Eye from "../assets/svg/Eye.svelte" const featureSwitches = new OsmConnectionFeatureSwitches() const osmConnection = new OsmConnection({ @@ -56,7 +56,7 @@ .filter((key) => key.startsWith(prefix)) .map((key) => key.substring(prefix.length, key.length - "-enabled".length)) ) - return hiddenThemes.filter((theme) => knownIds.has(theme.id)) + return hiddenThemes.filter((theme) => knownIds.has(theme.id) || state.osmConnection.userDetails.data.name === "Pieter Vander Vennet") }) } diff --git a/src/UI/Base/LinkToWeblate.ts b/src/UI/Base/LinkToWeblate.ts index 0672c0903..2765f61db 100644 --- a/src/UI/Base/LinkToWeblate.ts +++ b/src/UI/Base/LinkToWeblate.ts @@ -1,7 +1,6 @@ import { VariableUiElement } from "./VariableUIElement" import Locale from "../i18n/Locale" import Link from "./Link" -import Svg from "../../Svg" import SvelteUIElement from "./SvelteUIElement" import Translate from "../../assets/svg/Translate.svelte" diff --git a/src/UI/Base/Loading.svelte b/src/UI/Base/Loading.svelte index 57cdd2adc..e76881db0 100644 --- a/src/UI/Base/Loading.svelte +++ b/src/UI/Base/Loading.svelte @@ -1,6 +1,4 @@ - - -
-
- -
- - -
- diff --git a/src/UI/BigComponents/Histogram.ts b/src/UI/BigComponents/Histogram.ts index 2e8886061..922aba746 100644 --- a/src/UI/BigComponents/Histogram.ts +++ b/src/UI/BigComponents/Histogram.ts @@ -5,7 +5,9 @@ import Combine from "../Base/Combine" import { FixedUiElement } from "../Base/FixedUiElement" import { Utils } from "../../Utils" import BaseUIElement from "../BaseUIElement" -import Svg from "../../Svg" +import SvelteUIElement from "../Base/SvelteUIElement" +import Up from "../../assets/svg/Up.svelte" +import Circle from "../../assets/svg/Circle.svelte" export default class Histogram extends VariableUiElement { private static defaultPalette = [ @@ -34,11 +36,11 @@ export default class Histogram extends VariableUiElement { sortMode.map((m) => { switch (m) { case "name": - return Svg.up_svg() + return new SvelteUIElement(Up) case "name-rev": - return Svg.up_svg().SetStyle("transform: rotate(180deg)") + return new SvelteUIElement(Up).SetStyle("transform: rotate(180deg)") default: - return Svg.circle_svg() + return new SvelteUIElement(Circle) } }) ) @@ -56,11 +58,11 @@ export default class Histogram extends VariableUiElement { sortMode.map((m) => { switch (m) { case "count": - return Svg.up_svg() + return new SvelteUIElement(Up) case "count-rev": - return Svg.up_svg().SetStyle("transform: rotate(180deg)") + return new SvelteUIElement(Up).SetStyle("transform: rotate(180deg)") default: - return Svg.circle_svg() + return new SvelteUIElement(Circle) } }) ) diff --git a/src/UI/BigComponents/IndexText.ts b/src/UI/BigComponents/IndexText.ts deleted file mode 100644 index d28321014..000000000 --- a/src/UI/BigComponents/IndexText.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Combine from "../Base/Combine" -import Translations from "../i18n/Translations" -import { FixedUiElement } from "../Base/FixedUiElement" - -export default class IndexText extends Combine { - constructor() { - super([]) - - this.SetClass("flex flex-row") - } -} diff --git a/src/UI/BigComponents/NoThemeResultButton.svelte b/src/UI/BigComponents/NoThemeResultButton.svelte index 2b83ca1d0..9496532b5 100644 --- a/src/UI/BigComponents/NoThemeResultButton.svelte +++ b/src/UI/BigComponents/NoThemeResultButton.svelte @@ -17,6 +17,7 @@ import ToSvelte from "../Base/ToSvelte.svelte" import Translations from "../i18n/Translations" import Tr from "../Base/Tr.svelte" + import Search_disable from "../../assets/svg/Search_disable.svelte" export let search: UIEventSource @@ -27,8 +28,8 @@
{t.noMatchingThemes.toString()}
diff --git a/src/UI/BigComponents/ReverseGeocoding.svelte b/src/UI/BigComponents/ReverseGeocoding.svelte index b7632f2e7..451999722 100644 --- a/src/UI/BigComponents/ReverseGeocoding.svelte +++ b/src/UI/BigComponents/ReverseGeocoding.svelte @@ -4,7 +4,6 @@ **/ import Motion from "../../Sensors/Motion" import { Geocoding } from "../../Logic/Osm/Geocoding" - import type { MapProperties } from "../../Models/MapProperties" import Hotkeys from "../Base/Hotkeys" import Translations from "../i18n/Translations" import Locale from "../i18n/Locale" @@ -21,7 +20,7 @@ let result = await Geocoding.reverse( mapProperties.location.data, mapProperties.zoom.data, - Locale.language.data + Locale.language.data, ) let properties = result.features[0].properties currentLocation = properties.display_name @@ -45,7 +44,7 @@ () => { displayLocation() }, - [Translations.t.hotkeyDocumentation.shakePhone] + [Translations.t.hotkeyDocumentation.shakePhone], ) Motion.singleton.startListening() diff --git a/src/UI/BigComponents/SelectedElementTitle.svelte b/src/UI/BigComponents/SelectedElementTitle.svelte index 5ed4690d8..cc36901a7 100644 --- a/src/UI/BigComponents/SelectedElementTitle.svelte +++ b/src/UI/BigComponents/SelectedElementTitle.svelte @@ -36,7 +36,7 @@