diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json
index 7f0b017433..e622e74997 100644
--- a/assets/layers/etymology/etymology.json
+++ b/assets/layers/etymology/etymology.json
@@ -104,7 +104,9 @@
{
"id": "wikipedia-etymology",
"condition": {
- "and":["name:etymology!=unknown"]
+ "and": [
+ "name:etymology!=unknown"
+ ]
},
"question": {
"en": "What is the Wikidata-item that this object is named after?",
diff --git a/assets/layers/indoors/indoors.json b/assets/layers/indoors/indoors.json
index 36e0aeebf2..cb94e518f8 100644
--- a/assets/layers/indoors/indoors.json
+++ b/assets/layers/indoors/indoors.json
@@ -571,7 +571,6 @@
}
}
},
-
{
"builtin": "toilet.relevant-questions",
"override": {
diff --git a/assets/layers/unit/unit.json b/assets/layers/unit/unit.json
index 0d45d7662c..bb441f6496 100644
--- a/assets/layers/unit/unit.json
+++ b/assets/layers/unit/unit.json
@@ -423,7 +423,6 @@
"nl": "{quantity} maanden"
}
}
-
]
}
]
diff --git a/langs/layers/ca.json b/langs/layers/ca.json
index add9c3d86f..8aa055ac2a 100644
--- a/langs/layers/ca.json
+++ b/langs/layers/ca.json
@@ -308,10 +308,6 @@
}
},
"question": "Quina és la finalitat del refugi d'animals?"
- },
- "7": {
- "question": "Quan està obert aquest refugi d'animals?",
- "render": "{opening_hours_table()}"
}
},
"title": {
@@ -7129,6 +7125,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "En quina direcció geogràfica apunta aquesta càmera?",
+ "render": "Grava en direcció {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Velocitat màxima permesa"
diff --git a/langs/layers/cs.json b/langs/layers/cs.json
index 9ef69176f8..4ec8e3268a 100644
--- a/langs/layers/cs.json
+++ b/langs/layers/cs.json
@@ -7425,6 +7425,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "Ve kterém geografickém směru tato kamera snímá?",
+ "render": "Snímané oblasti podle směru kompasu {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Maximální povolená rychlost"
diff --git a/langs/layers/da.json b/langs/layers/da.json
index 2f2a68740d..b02ab560f6 100644
--- a/langs/layers/da.json
+++ b/langs/layers/da.json
@@ -1747,6 +1747,14 @@
}
}
},
+ "speed_camera": {
+ "tagRenderings": {
+ "camera_direction": {
+ "question": "I hvilken geografisk retning filmer dette kamera?",
+ "render": "Filmer til en kompasretning af {direction}"
+ }
+ }
+ },
"surveillance_camera": {
"tagRenderings": {
"Surveillance type: public, outdoor, indoor": {
diff --git a/langs/layers/de.json b/langs/layers/de.json
index 0904de91ac..86544b2c8d 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -393,10 +393,6 @@
}
},
"question": "Was ist der Zweck des Tierheims?"
- },
- "7": {
- "question": "Wann ist das Tierheim geöffnet?",
- "render": "{opening_hours_table()}"
}
},
"title": {
@@ -8956,6 +8952,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "In welche Himmelsrichtung filmt diese Kamera?",
+ "render": "filmt in Himmelsrichtung {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Zulässige Höchstgeschwindigkeit"
diff --git a/langs/layers/en.json b/langs/layers/en.json
index e7f7a22c04..3b766ac55e 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -394,9 +394,26 @@
},
"question": "What is the purpose of the animal shelter?"
},
- "7": {
- "question": "When is this animal shelter opened?",
- "render": "{opening_hours_table()}"
+ "boarded_animals": {
+ "mappings": {
+ "0": {
+ "then": "Dogs are kept here"
+ },
+ "1": {
+ "then": "Cats are kept here"
+ },
+ "2": {
+ "then": "Horses are kept here"
+ },
+ "3": {
+ "then": "Birds are kept here"
+ },
+ "4": {
+ "then": "Wild animals are kept here"
+ }
+ },
+ "question": "Which animals are accepted here?",
+ "render": "{animal_shelter} is kept here"
}
},
"title": {
@@ -1489,10 +1506,18 @@
},
"question": "Are these bicycle parkings free to use?"
},
+ "maxstay": {
+ "question": "What is the maximum allowed parking duration?",
+ "questionHint": "If the bicycle is parked for a longer amount, it might be removed by the operator",
+ "render": "A bike can be parked here for at most {canonical(maxstay)}"
+ },
"operator": {
"question": "Who maintains this bicycle parking?",
"render": "This bicycle parking is maintained by {operator}"
},
+ "operator_email": {
+ "question": "What is the email address of the operator of this bicycle parking?"
+ },
"operator_phone": {
"question": "What is the phone number of the operator of this bicycle parking?",
"questionHint": "One might be able to call this number in case of problems, e.g. to remove unmaintained bicycles"
@@ -2160,6 +2185,9 @@
},
"16": {
"question": "Has a
Bosch Active Connect with 5 pins and cable 
connector"
+ },
+ "17": {
+ "question": "Has a BS1363 (Type G) 
connector"
}
}
}
@@ -2304,6 +2332,12 @@
},
"31": {
"then": "Bosch Active Connect with 5 pins and cable"
+ },
+ "32": {
+ "then": "BS1363 (Type G)"
+ },
+ "33": {
+ "then": "BS1363 (Type G)"
}
},
"question": "Which charging connections are available here?"
@@ -2538,6 +2572,9 @@
},
"15": {
"2": "Bosch Active Connect with 5 pins and cable"
+ },
+ "16": {
+ "2": "BS1363 (Type G)"
}
}
}
@@ -5112,6 +5149,22 @@
"render": "Restaurant"
}
},
+ "food_courts": {
+ "description": "Food courts with a variety of food options.",
+ "name": "Food Courts",
+ "tagRenderings": {
+ "name": {
+ "freeform": {
+ "placeholder": "Name of the food court"
+ },
+ "question": "What is the name of this food court?",
+ "render": "This food court is called {name}."
+ }
+ },
+ "title": {
+ "render": "Food Court"
+ }
+ },
"ghost_bike": {
"description": "A layer showing memorials for cyclists, killed in road accidents",
"name": "Ghost bikes",
@@ -6624,6 +6677,74 @@
"render": "OSM Community Index"
}
},
+ "outdoor_seating": {
+ "description": "Outdoor seating areas, usually located near cafes and restaurants.",
+ "name": "Outdoor Seating",
+ "tagRenderings": {
+ "access": {
+ "mappings": {
+ "0": {
+ "then": "Anyone can use this outdoor seating area."
+ },
+ "1": {
+ "then": "Only customers can use this outdoor seating area."
+ },
+ "2": {
+ "then": "This outdoor seating area is private."
+ }
+ },
+ "question": "Who can use this outdoor seating area?"
+ },
+ "covered": {
+ "mappings": {
+ "0": {
+ "then": "This outdoor seating area is covered."
+ },
+ "1": {
+ "then": "This outdoor seating area is not covered."
+ }
+ },
+ "question": "Is this outdoor seating area covered?"
+ },
+ "heating": {
+ "mappings": {
+ "0": {
+ "then": "This outdoor seating area is heated."
+ },
+ "1": {
+ "then": "This outdoor seating area is not heated."
+ }
+ },
+ "question": "Is this outdoor seating area heated?"
+ },
+ "seasonal": {
+ "mappings": {
+ "0": {
+ "then": "This outdoor seating area is available all year round."
+ },
+ "1": {
+ "then": "This outdoor seating area is available in spring."
+ },
+ "2": {
+ "then": "This outdoor seating area is available in summer."
+ },
+ "3": {
+ "then": "This outdoor seating area is available in autumn."
+ },
+ "4": {
+ "then": "This outdoor seating area is available in winter."
+ },
+ "5": {
+ "then": "This outdoor seating area is available in the dry season."
+ }
+ },
+ "question": "Is this outdoor seating area seasonal?"
+ }
+ },
+ "title": {
+ "render": "Outdoor Seating area"
+ }
+ },
"parcel_lockers": {
"description": "Layer showing parcel lockers for collecting and sending parcels.",
"name": "Parcel Lockers",
@@ -8956,6 +9077,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "In which geographical direction does this camera film?",
+ "render": "Films to a compass heading of {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Maximum speed allowed"
@@ -10532,6 +10657,14 @@
"2": {
"human": "{quantity} days",
"humanSingular": "one day"
+ },
+ "3": {
+ "human": "{quantity} weeks",
+ "humanSingular": "one week"
+ },
+ "4": {
+ "human": "{quantity} months",
+ "humanSingular": "one month"
}
}
}
diff --git a/langs/layers/es.json b/langs/layers/es.json
index c48d5e2848..d2fc81df35 100644
--- a/langs/layers/es.json
+++ b/langs/layers/es.json
@@ -310,10 +310,6 @@
}
},
"question": "¿Cuál es la finalidad del refugio de animales?"
- },
- "7": {
- "question": "¿Cuándo se abre este refugio de animales?",
- "render": "{opening_hours_table()}"
}
},
"title": {
@@ -4058,6 +4054,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "¿A qué dirección geográfica apunta esta cámara?",
+ "render": "Graba en dirección a {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Velocidad máxima permitida"
diff --git a/langs/layers/fr.json b/langs/layers/fr.json
index 8f5599bd7f..16ea867be2 100644
--- a/langs/layers/fr.json
+++ b/langs/layers/fr.json
@@ -5503,6 +5503,10 @@
},
"speed_camera": {
"tagRenderings": {
+ "camera_direction": {
+ "question": "Dans quelle direction géographique cette caméra filme-t-elle ?",
+ "render": "Filme dans une direction {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Vitesse maximale autorisée"
diff --git a/langs/layers/it.json b/langs/layers/it.json
index 7bb29573c7..b57b1ae26f 100644
--- a/langs/layers/it.json
+++ b/langs/layers/it.json
@@ -2373,6 +2373,14 @@
}
}
},
+ "speed_camera": {
+ "tagRenderings": {
+ "camera_direction": {
+ "question": "In quale direzione geografica punta questa videocamera?",
+ "render": "Punta in direzione {direction}"
+ }
+ }
+ },
"sport_pitch": {
"description": "Un campo sportivo",
"name": "Campi sportivi",
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 5cefd9b799..8f0dd132ac 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -1222,10 +1222,18 @@
},
"question": "Is deze fietsenstalling gratis te gebruiken?"
},
+ "maxstay": {
+ "question": "Wat is de toegestane, maximale parkeerduur?",
+ "questionHint": "Indien een fiets langer geparkeerd staat, kan deze verwijderd worden door de beheerder",
+ "render": "Een fiets mag hier maximaal {canonical(maxstay)} parkeren"
+ },
"operator": {
"question": "Wie beheert deze fietsenstalling?",
"render": "Deze fietsenstalling wordt beheerd door {operator}"
},
+ "operator_email": {
+ "question": "Wat is het emailadres van de beheerder van deze parking?"
+ },
"operator_phone": {
"question": "Wat is het telefoonnummer van de operator van deze fietsenstalling?",
"questionHint": "Men kan dit nummer bellen om bv. fietswrakken of defecten te melden"
@@ -1869,6 +1877,9 @@
},
"16": {
"question": "Heeft een Bosch Active Connect met 5 pinnen aan een kabel 
"
+ },
+ "17": {
+ "question": "Heeft een BS1363 (VK 3-pin) 
"
}
}
}
@@ -2013,6 +2024,12 @@
},
"31": {
"then": "Bosch Active Connect met 5 pinnen aan een kabel"
+ },
+ "32": {
+ "then": "BS1363 (VK 3-pin)"
+ },
+ "33": {
+ "then": "BS1363 (VK 3-pin)"
}
},
"question": "Welke aansluitingen zijn hier beschikbaar?"
@@ -2247,6 +2264,9 @@
},
"15": {
"2": "Bosch Active Connect met 5 pinnen aan een kabel"
+ },
+ "16": {
+ "2": "BS1363 (VK 3-pin)"
}
}
}
@@ -7341,6 +7361,10 @@
}
},
"tagRenderings": {
+ "camera_direction": {
+ "question": "In welke geografische richting filmt deze camera?",
+ "render": "Filmt in kompasrichting {direction}"
+ },
"maxspeed": {
"freeform": {
"placeholder": "Maximum toegestane snelheid"
@@ -8692,6 +8716,14 @@
"2": {
"human": "{quantity} day",
"humanSingular": "één dag"
+ },
+ "3": {
+ "human": "{quantity} weken",
+ "humanSingular": "één week"
+ },
+ "4": {
+ "human": "{quantity} maanden",
+ "humanSingular": "één maand"
}
}
}
diff --git a/langs/layers/sl.json b/langs/layers/sl.json
index 710497b57e..9387209d9e 100644
--- a/langs/layers/sl.json
+++ b/langs/layers/sl.json
@@ -223,6 +223,12 @@
"0": {
"title": "hitrostna kamera"
}
+ },
+ "tagRenderings": {
+ "camera_direction": {
+ "question": "V katero geografsko smer snema ta kamera?",
+ "render": "Snema v smeri kompasa {direction}"
+ }
}
},
"surveillance_camera": {
diff --git a/langs/layers/zh_Hans.json b/langs/layers/zh_Hans.json
index 3159a582d2..818a2be188 100644
--- a/langs/layers/zh_Hans.json
+++ b/langs/layers/zh_Hans.json
@@ -292,10 +292,6 @@
}
},
"question": "动物收容所的目的是什么?"
- },
- "7": {
- "question": "这个动物收容所什么时候开放?",
- "render": "{opening_hours_table()}"
}
},
"title": {
diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts
index d254a0d58a..cd5c8ab45a 100644
--- a/scripts/generateTranslations.ts
+++ b/scripts/generateTranslations.ts
@@ -570,10 +570,6 @@ function MergeTranslation(source: any, target: any, language: string, context: s
}
for (const key in source) {
- if (!source.hasOwnProperty(key)) {
- continue
- }
-
const sourceV = source[key]
const targetV = target[keyRemapping?.get(key) ?? key]
@@ -582,10 +578,7 @@ function MergeTranslation(source: any, target: any, language: string, context: s
if (targetV === undefined) {
if (typeof target === "string") {
throw (
- "Trying to merge a translation into a fixed string at " +
- context +
- " for key " +
- key
+ `Trying to merge a translation for ${language} into a fixed string at ${context} for key ${key}`
)
}
target[key] = source[key]