From 09b230b5be0b8db698f9e3de7d0af7695100cbed Mon Sep 17 00:00:00 2001
From: pietervdvn <pietervdvn@posteo.net>
Date: Fri, 24 Jun 2022 03:52:54 +0200
Subject: [PATCH] Housekeeping...

---
 Docs/BuiltinLayers.md                         |   1 +
 Docs/Layers/cafe_pub.md                       |  10 +
 Docs/Layers/hackerspace.md                    |  61 ++++
 Docs/SpecialInputElements.md                  |   9 +-
 Docs/TagInfo/mapcomplete_hackerspaces.json    |  30 ++
 Docs/TagInfo/mapcomplete_personal.json        | 109 +++++++
 assets/contributors.json                      |   2 +-
 assets/layers/bike_parking/bike_parking.json  |   6 +-
 .../bike_repair_station.json                  |   9 +-
 assets/layers/bike_shop/bike_shop.json        |   3 +-
 assets/layers/cafe_pub/cafe_pub.json          |   6 +-
 assets/layers/etymology/etymology.json        |   2 +
 assets/layers/hackerspace/hackerspace.json    |  27 +-
 .../kindergarten_childcare.json               |  33 ++-
 assets/layers/maxspeed/maxspeed.json          |  30 +-
 assets/layers/school/school.json              |  19 +-
 assets/themes/education/education.json        |   6 +-
 assets/themes/maxspeed/maxspeed.json          |   9 +-
 assets/translators.json                       |  12 +-
 langs/de.json                                 |  96 +++----
 langs/layers/de.json                          | 270 +++++++++---------
 langs/layers/es.json                          |  24 +-
 langs/layers/nl.json                          |   6 +-
 langs/nl.json                                 |  62 ++--
 langs/themes/de.json                          |  20 +-
 25 files changed, 563 insertions(+), 299 deletions(-)

diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md
index b8ef3fc89..8754f882e 100644
--- a/Docs/BuiltinLayers.md
+++ b/Docs/BuiltinLayers.md
@@ -821,6 +821,7 @@ The following layers are included in MapComplete:
   - [left_right_style](./Layers/left_right_style.md)
   - [map](./Layers/map.md)
   - [matchpoint](./Layers/matchpoint.md)
+  - [maxspeed](./Layers/maxspeed.md)
   - [named_streets](./Layers/named_streets.md)
   - [nature_reserve](./Layers/nature_reserve.md)
   - [note](./Layers/note.md)
diff --git a/Docs/Layers/cafe_pub.md b/Docs/Layers/cafe_pub.md
index 52de985fd..3b98fa7d9 100644
--- a/Docs/Layers/cafe_pub.md
+++ b/Docs/Layers/cafe_pub.md
@@ -277,6 +277,16 @@ The question is  Are dogs allowed in this business?
   - Dogs are <b>not</b> allowed corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:dog' target='_blank'>dog</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:dog%3Dno' target='_blank'>no</a>
   - Dogs are allowed, but they have to be leashed corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:dog' target='_blank'>dog</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:dog%3Dleashed' target='_blank'>leashed</a>
   - Dogs are allowed and can run around freely corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:dog' target='_blank'>dog</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:dog%3Dunleashed' target='_blank'>unleashed</a>
+
+
+
+
+### reviews 
+
+
+
+This tagrendering has no question and is thus read-only
+
  
 
 This document is autogenerated from [assets/layers/cafe_pub/cafe_pub.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/cafe_pub/cafe_pub.json)
\ No newline at end of file
diff --git a/Docs/Layers/hackerspace.md b/Docs/Layers/hackerspace.md
index 1013ba163..97a5856a0 100644
--- a/Docs/Layers/hackerspace.md
+++ b/Docs/Layers/hackerspace.md
@@ -66,6 +66,9 @@ attribute | type | values which are supported by this layer
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | 
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | 
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7)
+[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:3dprinter#values) [service:3dprinter](https://wiki.openstreetmap.org/wiki/Key:service:3dprinter) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:3dprinter%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:3dprinter%3Dno)
+[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:lasercutter#values) [service:lasercutter](https://wiki.openstreetmap.org/wiki/Key:service:lasercutter) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:lasercutter%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:lasercutter%3Dno)
+[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:cnc_drilling_machine#values) [service:cnc_drilling_machine](https://wiki.openstreetmap.org/wiki/Key:service:cnc_drilling_machine) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:cnc_drilling_machine%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:cnc_drilling_machine%3Dno)
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno)
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/drink:club-mate#values) [drink:club-mate](https://wiki.openstreetmap.org/wiki/Key:drink:club-mate) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dno)
 [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | 
@@ -182,6 +185,64 @@ This is rendered with  {opening_hours_table()}
 
 
 
+### hackerspaces-service-3dprinter 
+
+
+
+The question is  Is a 3D-printer available at this hackerspace?
+
+
+
+
+
+  - There is a 3D-printer available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:3dprinter' target='_blank'>service:3dprinter</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:3dprinter%3Dyes' target='_blank'>yes</a>
+  - There is no 3D-printer available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:3dprinter' target='_blank'>service:3dprinter</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:3dprinter%3Dno' target='_blank'>no</a>
+
+
+
+
+### hackerspaces-service-lasercutter 
+
+
+
+The question is  Is a laser cutter available at this hackerspace?
+
+
+
+
+
+  - There is a laser cutter available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:lasercutter' target='_blank'>service:lasercutter</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:lasercutter%3Dyes' target='_blank'>yes</a>
+  - There is no laser cutter available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:lasercutter' target='_blank'>service:lasercutter</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:lasercutter%3Dno' target='_blank'>no</a>
+
+
+
+
+### hackerspaces-service-cnc_drilling_machine 
+
+
+
+The question is  Is a CNC drill available at this hackerspace?
+
+
+
+
+
+  - There is a CNC drill available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:cnc_drilling_machine' target='_blank'>service:cnc_drilling_machine</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:cnc_drilling_machine%3Dyes' target='_blank'>yes</a>
+  - There is no CNC drill available at this hackerspace corresponds with  <a href='https://wiki.openstreetmap.org/wiki/Key:service:cnc_drilling_machine' target='_blank'>service:cnc_drilling_machine</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:cnc_drilling_machine%3Dno' target='_blank'>no</a>
+
+
+
+
+### reviews 
+
+
+
+This tagrendering has no question and is thus read-only
+
+
+
+
+
 ### wheelchair-access 
 
 
diff --git a/Docs/SpecialInputElements.md b/Docs/SpecialInputElements.md
index fd3bcfe44..2fe4305b0 100644
--- a/Docs/SpecialInputElements.md
+++ b/Docs/SpecialInputElements.md
@@ -104,8 +104,8 @@ options | A JSON-object of type `{ removePrefixes: string[], removePostfixes: st
 
 subarg | doc
 -------- | -----
-removePrefixes | remove these snippets of text from the start of the passed string to search
-removePostfixes | remove these snippets of text from the end of the passed string to search
+removePrefixes | remove these snippets of text from the start of the passed string to search. This is either a list OR a hash of languages to a list
+removePostfixes | remove these snippets of text from the end of the passed string to search. This is either a list OR a hash of languages to a list
 instanceOf | A list of Q-identifier which indicates that the search results _must_ be an entity of this type, e.g. [`Q5`](https://www.wikidata.org/wiki/Q5) for humans
 notInstanceof | A list of Q-identifiers which indicates that the search results _must not_ be an entity of this type, e.g. [`Q79007`](https://www.wikidata.org/wiki/Q79007) to filter away all streets from the search results
 
@@ -122,13 +122,16 @@ notInstanceof | A list of Q-identifiers which indicates that the search results
     "helperArgs": [
         "name",
         {
-            "removePostfixes": [
+            "removePostfixes": {"en": [
                 "street",
                 "boulevard",
                 "path",
                 "square",
                 "plaza",
             ],
+             "nl": ["straat","plein","pad","weg",laan"]
+             },
+            
             "#": "Remove streets and parks from the search results:"
              "notInstanceOf": ["Q79007","Q22698"] 
         }
diff --git a/Docs/TagInfo/mapcomplete_hackerspaces.json b/Docs/TagInfo/mapcomplete_hackerspaces.json
index f10096e89..bb931e1f4 100644
--- a/Docs/TagInfo/mapcomplete_hackerspaces.json
+++ b/Docs/TagInfo/mapcomplete_hackerspaces.json
@@ -62,6 +62,36 @@
       "description": "Layer 'Hackerspace' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
       "value": "24/7"
     },
+    {
+      "key": "service:3dprinter",
+      "description": "Layer 'Hackerspace' shows service:3dprinter=yes with a fixed text, namely 'There is a 3D-printer available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "yes"
+    },
+    {
+      "key": "service:3dprinter",
+      "description": "Layer 'Hackerspace' shows service:3dprinter=no with a fixed text, namely 'There is no 3D-printer available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "no"
+    },
+    {
+      "key": "service:lasercutter",
+      "description": "Layer 'Hackerspace' shows service:lasercutter=yes with a fixed text, namely 'There is a laser cutter available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "yes"
+    },
+    {
+      "key": "service:lasercutter",
+      "description": "Layer 'Hackerspace' shows service:lasercutter=no with a fixed text, namely 'There is no laser cutter available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "no"
+    },
+    {
+      "key": "service:cnc_drilling_machine",
+      "description": "Layer 'Hackerspace' shows service:cnc_drilling_machine=yes with a fixed text, namely 'There is a CNC drill available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "yes"
+    },
+    {
+      "key": "service:cnc_drilling_machine",
+      "description": "Layer 'Hackerspace' shows service:cnc_drilling_machine=no with a fixed text, namely 'There is no CNC drill available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
+      "value": "no"
+    },
     {
       "key": "wheelchair",
       "description": "Layer 'Hackerspace' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hackerspaces')",
diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json
index 146b21685..fe2e7b13c 100644
--- a/Docs/TagInfo/mapcomplete_personal.json
+++ b/Docs/TagInfo/mapcomplete_personal.json
@@ -5438,6 +5438,36 @@
       "description": "Layer 'Hackerspace' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
       "value": "24/7"
     },
+    {
+      "key": "service:3dprinter",
+      "description": "Layer 'Hackerspace' shows service:3dprinter=yes with a fixed text, namely 'There is a 3D-printer available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "yes"
+    },
+    {
+      "key": "service:3dprinter",
+      "description": "Layer 'Hackerspace' shows service:3dprinter=no with a fixed text, namely 'There is no 3D-printer available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "no"
+    },
+    {
+      "key": "service:lasercutter",
+      "description": "Layer 'Hackerspace' shows service:lasercutter=yes with a fixed text, namely 'There is a laser cutter available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "yes"
+    },
+    {
+      "key": "service:lasercutter",
+      "description": "Layer 'Hackerspace' shows service:lasercutter=no with a fixed text, namely 'There is no laser cutter available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "no"
+    },
+    {
+      "key": "service:cnc_drilling_machine",
+      "description": "Layer 'Hackerspace' shows service:cnc_drilling_machine=yes with a fixed text, namely 'There is a CNC drill available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "yes"
+    },
+    {
+      "key": "service:cnc_drilling_machine",
+      "description": "Layer 'Hackerspace' shows service:cnc_drilling_machine=no with a fixed text, namely 'There is no CNC drill available at this hackerspace' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "no"
+    },
     {
       "key": "wheelchair",
       "description": "Layer 'Hackerspace' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
@@ -5652,6 +5682,85 @@
       "description": "Layer 'Maps' shows map_source:attribution=no with a fixed text, namely 'There is no attribution at all' (in the MapComplete.osm.be theme 'Personal theme')",
       "value": "no"
     },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "residential"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "living_street"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "motorway"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "tertiary"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "unclassified"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "secondary"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "primary"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "trunk"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "motorway"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "tertiary_link"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "secondary_link"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "primary_link"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "trunk_link"
+    },
+    {
+      "key": "highway",
+      "description": "The MapComplete theme Personal theme has a layer Maxspeed showing features with this tag",
+      "value": "motorway_link"
+    },
+    {
+      "key": "maxspeed",
+      "description": "Layer 'Maxspeed' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Personal theme')"
+    },
+    {
+      "key": "highway",
+      "description": "Layer 'Maxspeed' shows highway=living_street with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')",
+      "value": "living_street"
+    },
     {
       "key": "leisure",
       "description": "The MapComplete theme Personal theme has a layer Nature reserve showing features with this tag",
diff --git a/assets/contributors.json b/assets/contributors.json
index 37951ff95..9879c0017 100644
--- a/assets/contributors.json
+++ b/assets/contributors.json
@@ -1,7 +1,7 @@
 {
   "contributors": [
     {
-      "commits": 3924,
+      "commits": 3990,
       "contributor": "Pieter Vander Vennet"
     },
     {
diff --git a/assets/layers/bike_parking/bike_parking.json b/assets/layers/bike_parking/bike_parking.json
index cd7482a85..b1cc87c0b 100644
--- a/assets/layers/bike_parking/bike_parking.json
+++ b/assets/layers/bike_parking/bike_parking.json
@@ -561,7 +561,7 @@
             "zh_Hant": "這停車場有設計 (官方) 空間給裝箱的單車。",
             "pt_BR": "Este estacionamento tem vagas (oficiais) projetadas para bicicletas de carga.",
             "pt": "Este estacionamento tem vagas (oficiais) projetadas para bicicletas de carga.",
-            "es": "Este aparcamiento tiene huecos (oficialmente) designados para bicicletas de carga.",
+            "es": "Este aparcamiento tiene huecos designados (oficialmente) para bicicletas de carga.",
             "da": "Denne parkeringsplads har udpegede (officielle) pladser til ladcykler."
           }
         },
@@ -576,7 +576,7 @@
             "it": "Il parcheggio delle bici da trasporto è proibito",
             "pt_BR": "Você não tem permissão para estacionar bicicletas de carga",
             "pt": "Não tem permissão para estacionar bicicletas de carga",
-            "es": "No se permite aparcar bicicletas de carga",
+            "es": "No está permitido aparcar bicicletas de carga",
             "da": "Det er ikke tilladt at parkere ladcykler"
           }
         }
@@ -605,7 +605,7 @@
         "it": "Questo parcheggio può contenere {capacity:cargo_bike} bici da trasporto",
         "pt_BR": "Neste estacionamento cabem {capacity:cargo_bike} bicicletas de carga",
         "pt": "Neste estacionamento cabem {capacity:cargo_bike} bicicletas de carga",
-        "es": "En este aparcamiento caben {capacity:cargo_bike} bicis de carga",
+        "es": "En este aparcamiento caben {capacity:cargo_bike} bicicletas de carga",
         "da": "Der er plads til {capacity:cargo_bike} på denne cykelparkering"
       },
       "condition": "cargo_bike~designated|yes",
diff --git a/assets/layers/bike_repair_station/bike_repair_station.json b/assets/layers/bike_repair_station/bike_repair_station.json
index 2d8d58117..367d59f6d 100644
--- a/assets/layers/bike_repair_station/bike_repair_station.json
+++ b/assets/layers/bike_repair_station/bike_repair_station.json
@@ -554,7 +554,8 @@
         "en": "<a href='mailto:{email}?subject=Broken bicycle pump&body=Hello,%0D%0A%0D%0AWith this email, I&#39;d like to inform you that the bicycle pump located at https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} is broken.%0D%0A%0D%0A Kind regards'>Report this bicycle pump as broken</a>",
         "nl": "<a href='mailto:{email}?subject=Kapotte fietspomp&body=Geachte,%0D%0A%0D%0AGraag had ik u gemeld dat een fietspomp defect is. De fietspomp bevindt zich hier: https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id}.%0D%0A%0D%0AMet vriendelijke groeten.'>Rapporteer deze fietspomp als kapot</a>",
         "de": "<a href='mailto:{email}?subject=Fahrradpumpe kaputt&body=Hallo,%0D%0A%0D%0AMit dieser E-Mail möchte ich Ihnen mitteilen, dass die Fahrradpumpe, die sich unter https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} befindet, kaputt ist.'>Melde diese Fahrradpumpe als kaputt</a>",
-        "da": "<a href='mailto:{email}?subject=Cykelpumpe i stykker&body=Hej,%0D%0A%0D%0D%0Med denne e-mail vil jeg gerne oplyse, at cykelpumpen, der befinder sig på https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} er i stykker.%0D%0A%0D%0D%0A Med venlig hilsen'>Anmeld denne cykelpumpe som værende i stykker</a>"
+        "da": "<a href='mailto:{email}?subject=Cykelpumpe i stykker&body=Hej,%0D%0A%0D%0D%0Med denne e-mail vil jeg gerne oplyse, at cykelpumpen, der befinder sig på https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} er i stykker.%0D%0A%0D%0D%0A Med venlig hilsen'>Anmeld denne cykelpumpe som værende i stykker</a>",
+        "es": "<a href='mailto:{email}?subject=Bomba de bicicletas rota&body=Hola,%0D%0A%0ACon este correo, me gustaría informarte de que la bomba para bicicletas que se encuentra en https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} está rota.%0D%0A%0D%0A Un saludo'>Reportar esta bomba para bicicletas como rota</a>"
       },
       "id": "Email maintainer"
     },
@@ -600,7 +601,8 @@
             "de": "Sklaverand-/Presta-Ventile (für Rennräder)",
             "it": "Sclaverand (detta anche Presta)",
             "ru": "Клапан Presta (также известный как французский клапан)",
-            "da": "Sclaverand (også kendt som Presta og racerventil)"
+            "da": "Sclaverand (også kendt som Presta og racerventil)",
+            "es": "Sclaverand/Presata (ruedas de bicicleta estrechas)"
           }
         },
         {
@@ -626,7 +628,8 @@
             "gl": "Schrader (para automóbiles)",
             "de": "Schrader-Ventile (für Autos und Mountainbikes)",
             "it": "Schrader (valvola delle auto)",
-            "da": "Schrader (biler)"
+            "da": "Schrader (biler)",
+            "es": "Schrader (coches y bicicletas de montaña)"
           }
         }
       ],
diff --git a/assets/layers/bike_shop/bike_shop.json b/assets/layers/bike_shop/bike_shop.json
index a32161fa7..3c90d23c5 100644
--- a/assets/layers/bike_shop/bike_shop.json
+++ b/assets/layers/bike_shop/bike_shop.json
@@ -90,7 +90,8 @@
         "then": {
           "en": "Winkel",
           "de": "Geschäfte",
-          "nl": "Shop"
+          "nl": "Shop",
+          "es": "Winkel"
         }
       },
       {
diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json
index 843999ce7..2161bbb79 100644
--- a/assets/layers/cafe_pub/cafe_pub.json
+++ b/assets/layers/cafe_pub/cafe_pub.json
@@ -90,7 +90,8 @@
         "en": "A <b>cafe</b> to drink tea, coffee or an alcoholical bevarage in a quiet environment",
         "nl": "Dit is een <b>cafe</b> - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen.",
         "de": "Ein <b>Café</b>, um in ruhiger Umgebung Tee, Kaffee oder ein alkoholisches Getränk zu trinken",
-        "da": "En <b>café</b> til at drikke te, kaffe eller en alkoholisk drik i rolige omgivelser"
+        "da": "En <b>café</b> til at drikke te, kaffe eller en alkoholisk drik i rolige omgivelser",
+        "es": "Una <b>cafetería</b> para beber té, café o una bebida alcohólica en un ambiente tranquilo"
       },
       "preciseInput": {
         "preferredBackground": "map"
@@ -108,7 +109,8 @@
       "description": {
         "en": "A <b>nightclub</b> or disco with a focus on dancing, music by a DJ with accompanying light show and a bar to get (alcoholic) drinks",
         "nl": "Een <b>nachtclub</b> met dansvloer, DJ met bijhorende lichteffecten en bar waar men (alcoholische) dranken kan nuttigen",
-        "de": "Ein <b>Club</b> oder eine Diskothek mit Fokus auf Tanzen, Musik von einem DJ mit begleitender Lichtshow und einer Bar, an der man (alkoholische) Getränke bekommt"
+        "de": "Ein <b>Club</b> oder eine Diskothek mit Fokus auf Tanzen, Musik von einem DJ mit begleitender Lichtshow und einer Bar, an der man (alkoholische) Getränke bekommt",
+        "es": "Un <b>club nocturno</b> o discoteca centrada en bailar, la música de un DJ acompañado por un espectáculo de luces y un bar donde conseguir bebidas (alcohólicas)"
       },
       "preciseInput": {
         "preferredBackground": "map"
diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json
index ecbbed6b9..da56f02e5 100644
--- a/assets/layers/etymology/etymology.json
+++ b/assets/layers/etymology/etymology.json
@@ -61,6 +61,7 @@
               "Q22698"
             ],
             "removePrefixes": {
+              "#": "no-translations",
               "fr": [
                 "allée de",
                 "allée du",
@@ -158,6 +159,7 @@
               ]
             },
             "removePostfixes": {
+              "#": "no-translations",
               "nl": [
                 "baan",
                 "boulevard",
diff --git a/assets/layers/hackerspace/hackerspace.json b/assets/layers/hackerspace/hackerspace.json
index 76ee445ef..5ff688966 100644
--- a/assets/layers/hackerspace/hackerspace.json
+++ b/assets/layers/hackerspace/hackerspace.json
@@ -161,33 +161,39 @@
             "3dprinter",
             {
               "en": "a 3D-printer",
-              "nl": "een 3D-printer"
+              "nl": "een 3D-printer",
+              "de": "einen 3D-Drucker"
             },
             {
               "en": "3D-printer",
-              "nl": "3D-printer"
+              "nl": "3D-printer",
+              "de": "3D-Drucker"
             }
           ],
           [
             "lasercutter",
             {
               "en": "a laser cutter",
-              "nl": "een lasercutter"
+              "nl": "een lasercutter",
+              "de": "einen Laserschneider"
             },
             {
               "en": "laser cutter",
-              "nl": "lasercutter"
+              "nl": "lasercutter",
+              "de": "Laserschneider"
             }
           ],
           [
             "cnc_drilling_machine",
             {
               "en": "a CNC drill",
-              "nl": "een CNC-boormachine"
+              "nl": "een CNC-boormachine",
+              "de": "eine CNC-Fräse"
             },
             {
               "en": "CNC drill",
-              "nl": "CNC-boormachine"
+              "nl": "CNC-boormachine",
+              "de": "CNC-Fräse"
             }
           ]
         ]
@@ -196,21 +202,24 @@
         {
           "question": {
             "en": "Is {device-name} available at this hackerspace?",
-            "nl": "Is er {device-name} beschikbaar in deze hackerspace?"
+            "nl": "Is er {device-name} beschikbaar in deze hackerspace?",
+            "de": "Gibt es {device-name} in diesem Hackerspace?"
           },
           "mappings": [
             {
               "if": "service:device-key=yes",
               "then": {
                 "en": "There is {device-name} available at this hackerspace",
-                "nl": "Er is {device-name} beschikbaar in deze hackerspace"
+                "nl": "Er is {device-name} beschikbaar in deze hackerspace",
+                "de": "In diesem Hackerspace gibt es {device-name}"
               }
             },
             {
               "if": "service:device-key=no",
               "then": {
                 "en": "There is no {negative-name} available at this hackerspace",
-                "nl": "Er is geen {negative-name} beschikbaar in deze hackerspace"
+                "nl": "Er is geen {negative-name} beschikbaar in deze hackerspace",
+                "de": "In diesem Hackerspace gibt es kein {negative-name}"
               }
             }
           ],
diff --git a/assets/layers/kindergarten_childcare/kindergarten_childcare.json b/assets/layers/kindergarten_childcare/kindergarten_childcare.json
index 77f2e0363..7af59d380 100644
--- a/assets/layers/kindergarten_childcare/kindergarten_childcare.json
+++ b/assets/layers/kindergarten_childcare/kindergarten_childcare.json
@@ -2,7 +2,8 @@
   "id": "kindergarten_childcare",
   "name": {
     "en": "Kindergartens and childcare",
-    "nl": "Kleuterscholen en kinderopvang"
+    "nl": "Kleuterscholen en kinderopvang",
+    "de": "Kindergärten und Kinderkrippen"
   },
   "description": "Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other",
   "minzoom": 12,
@@ -21,14 +22,16 @@
         "if": "amenity=kindergarten",
         "then": {
           "en": "Kindergarten {name}",
-          "nl": "Kleuterschool {name}"
+          "nl": "Kleuterschool {name}",
+          "de": "Kindergarten {name}"
         }
       },
       {
         "if": "amenity=childcare",
         "then": {
           "en": "Childcare {name}",
-          "nl": "Kinderopvang {name}"
+          "nl": "Kinderopvang {name}",
+          "de": "Kinderkrippe {name}"
         }
       }
     ]
@@ -38,14 +41,16 @@
       "id": "childcare-type",
       "question": {
         "en": "What type of facility is this?",
-        "nl": "Wat voor faciliteit is dit?"
+        "nl": "Wat voor faciliteit is dit?",
+        "de": "Um welche Art von Einrichtung handelt es sich?"
       },
       "mappings": [
         {
           "if": "amenity=kindergarten",
           "then": {
             "en": "This is a kindergarten (also known as <i>preschool</i>) where small kids receive early education.",
-            "nl": "Dit is een kleuterschool waar kindjes (voorbereidend) onderwijs krijgen."
+            "nl": "Dit is een kleuterschool waar kindjes (voorbereidend) onderwijs krijgen.",
+            "de": "Dies ist ein Kindergarten (auch bekannt als <i>Vorschule</i>), in dem kleine Kinder eine Früherziehung erhalten."
           },
           "addExtraTags": [
             "isced:level=0",
@@ -56,7 +61,8 @@
           "if": "amenity=childcare",
           "then": {
             "en": "This is a childcare facility, such as a nursery or daycare where small kids are looked after. They do not offer an education and are ofter run as private businesses",
-            "nl": "Dit is een kinderopvang (ook een creche of onthaalmoeder genoemd) waar er voor kleine kinderen gezorgd wordt. Onderwijs is niet de hoofdfocus."
+            "nl": "Dit is een kinderopvang (ook een creche of onthaalmoeder genoemd) waar er voor kleine kinderen gezorgd wordt. Onderwijs is niet de hoofdfocus.",
+            "de": "Dies ist eine Kinderbetreuungseinrichtung, z. B. ein Kinderkrippe oder eine Tagesmutter, in der Kleinkinder betreut werden. Sie bieten keine Ausbildung an und werden oft als Privatunternehmen geführt"
           },
           "addExtraTags": [
             "isced:level=",
@@ -81,7 +87,8 @@
       "override": {
         "question": {
           "en": "When is this childcare opened?",
-          "nl": "Wanneer is deze kinderopvang geopend?"
+          "nl": "Wanneer is deze kinderopvang geopend?",
+          "de": "Wann ist diese Kinderbetreuung geöffnet?"
         },
         "condition": "amenity=childcare"
       }
@@ -90,11 +97,13 @@
       "id": "capacity",
       "question": {
         "en": "How much kids (at most) can be enrolled here?",
-        "nl": "Hoeveel kinderen kunnen hier terecht?"
+        "nl": "Hoeveel kinderen kunnen hier terecht?",
+        "de": "Wie viele Kinder können hier maximal angemeldet werden?"
       },
       "render": {
         "en": "This facility has room for {capacity} kids",
-        "nl": "Hier kunnen {capacity} kinderen terecht"
+        "nl": "Hier kunnen {capacity} kinderen terecht",
+        "de": "Diese Einrichtung bietet Platz für {capacity} Kinder"
       },
       "freeform": {
         "key": "capacity",
@@ -106,7 +115,8 @@
     {
       "title": {
         "en": "a kindergarten",
-        "nl": "een kleuterschool"
+        "nl": "een kleuterschool",
+        "de": "einen Kindergarten"
       },
       "description": "A kindergarten (also known as <i>preschool</i>) is a school where small kids receive early education.",
       "tags": [
@@ -118,7 +128,8 @@
     {
       "title": {
         "en": "a childcare",
-        "nl": "een kinderopvang"
+        "nl": "een kinderopvang",
+        "de": "eine Kinderkrippe"
       },
       "description": "A childcare (also known as <i>a nursery</i> or <i>daycare</i>) is a facility which looks after small kids, but does not offer them an education program.",
       "tags": [
diff --git a/assets/layers/maxspeed/maxspeed.json b/assets/layers/maxspeed/maxspeed.json
index c7bd64185..fe5caaec6 100644
--- a/assets/layers/maxspeed/maxspeed.json
+++ b/assets/layers/maxspeed/maxspeed.json
@@ -3,7 +3,8 @@
   "name": {
     "en": "Maxspeed",
     "es": "Velocidad",
-    "ca": "Velocitat"
+    "ca": "Velocitat",
+    "de": "Höchstgeschwindigkeit"
   },
   "source": {
     "osmTags": {
@@ -40,23 +41,27 @@
       {
         "if": "name=",
         "then": {
-          "en": "Road without a name"
+          "en": "Road without a name",
+          "de": "Straße ohne Namen"
         }
       }
     ]
   },
   "description": {
-    "en": "Shows the allowed speed for every road"
+    "en": "Shows the allowed speed for every road",
+    "de": "Zeigt die zulässige Geschwindigkeit für jede Straße an"
   },
   "tagRenderings": [
     {
       "render": {
-        "en": "The maximum allowed speed on this road is {maxspeed}"
+        "en": "The maximum allowed speed on this road is {maxspeed}",
+        "de": "Die zulässige Höchstgeschwindigkeit auf dieser Straße ist {maxspeed}"
       },
       "question": {
         "es": "Qué velocidad tiene",
         "ca": "Quina velocitat té",
-        "en": "What is the legal maximum speed one is allowed to drive on this road?"
+        "en": "What is the legal maximum speed one is allowed to drive on this road?",
+        "de": "Wie hoch ist die zulässige Höchstgeschwindigkeit, die man auf dieser Straße fahren darf?"
       },
       "freeform": {
         "key": "maxspeed",
@@ -67,7 +72,8 @@
           "if": "highway=living_street",
           "then": {
             "en": "This is a living street, which has a maxspeed of 20km/h",
-            "nl": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h"
+            "nl": "Dit is een woonerf en heeft dus een maximale snelheid van 20km/h",
+            "de": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt"
           },
           "icon": {
             "path": "./assets/layers/maxspeed/living_street_be.svg",
@@ -131,13 +137,15 @@
             "en": "kilometers/hour",
             "ca": "quilòmetres/hora",
             "es": "kilómetros/hora",
-            "nl": "kilometers/uur"
+            "nl": "kilometers/uur",
+            "de": "Kilometer/Stunde"
           },
           "humanShort": {
             "en": "km/h",
             "ca": "km/h",
             "es": "km/h",
-            "nl": "km/u"
+            "nl": "km/u",
+            "de": "km/h"
           }
         },
         {
@@ -151,13 +159,15 @@
             "en": "miles/hour",
             "ca": "milles/hora",
             "es": "millas/hora",
-            "nl": "miles/uur"
+            "nl": "miles/uur",
+            "de": "Meilen/Stunde"
           },
           "humanShort": {
             "en": "mph",
             "ca": "mph",
             "es": "mph",
-            "nl": "mph"
+            "nl": "mph",
+            "de": "mph"
           }
         }
       ],
diff --git a/assets/layers/school/school.json b/assets/layers/school/school.json
index 28e7de821..00bb9d973 100644
--- a/assets/layers/school/school.json
+++ b/assets/layers/school/school.json
@@ -2,7 +2,8 @@
   "id": "school",
   "name": {
     "en": "Primary and secondary schools",
-    "nl": "Lagere en middelbare scholen"
+    "nl": "Lagere en middelbare scholen",
+    "de": "Grund- und weiterführende Schulen"
   },
   "description": "Schools giving primary and secondary education and post-secondary, non-tertiary education. Note that this level of education does not imply an age of the pupiles",
   "minzoom": 12,
@@ -48,11 +49,14 @@
     {
       "id": "capacity",
       "question": {
-        "en": "How much students can at most enroll in this school?"
+        "en": "How much students can at most enroll in this school?",
+        "de": "Wie viele Schüler können sich maximal an dieser Schule anmelden?",
+        "nl": "Hoeveel studenten kunnen er les volgen in deze school?"
       },
       "render": {
         "en": "This school can enroll at most {capacity} students",
-        "nl": "Deze school kan maximaal {capacity} studenten lesgeven"
+        "nl": "Deze school kan maximaal {capacity} studenten lesgeven",
+        "de": "Diese Schule kann höchstens {capacity} Schüler aufnehmen"
       },
       "freeform": {
         "key": "capacity",
@@ -71,14 +75,16 @@
           "if": "school=kindergarten",
           "then": {
             "en": "This is a school with a kindergarten section where young kids receive some education which prepares reading and writing.",
-            "nl": "Dit is een school die ook een kleuterschool bevat"
+            "nl": "Dit is een school die ook een kleuterschool bevat",
+            "de": "Es handelt sich um eine Schule mit einer Kindergartenabteilung, in der kleine Kinder eine Ausbildung erhalten, die auf das Lesen und Schreiben vorbereitet."
           }
         },
         {
           "if": "school=primary",
           "then": {
             "en": "This is a school where one learns primary skills such as basic literacy and numerical skills. <div class='subtle'>Pupils typically enroll from 6 years old till 12 years old</div>",
-            "nl": "Dit is een lagere school"
+            "nl": "Dit is een lagere school",
+            "de": "In dieser Schule lernt man grundlegende Fähigkeiten wie Lesen, Schreiben und Rechnen. <div class='subtle'>Schüler besuchen die Schule in der Regel im Alter von 6 bis 12 Jahren</div>"
           }
         },
         {
@@ -276,7 +282,8 @@
       ],
       "title": {
         "en": "a primary or secondary school",
-        "nl": "een lagere of middelbare school"
+        "nl": "een lagere of middelbare school",
+        "de": "eine Grundschule oder weiterführende Schule"
       }
     }
   ],
diff --git a/assets/themes/education/education.json b/assets/themes/education/education.json
index af4f211e4..4cfb76549 100644
--- a/assets/themes/education/education.json
+++ b/assets/themes/education/education.json
@@ -2,11 +2,13 @@
   "id": "education",
   "description": {
     "en": "On this map, you'll find information about all types of schools and eduction and can easily add more information",
-    "nl": "Deze kaart toont info over verschillende onderwijsinstellingen zoals kleuterscholen, middelbare scholen en tertiair onderwijs."
+    "nl": "Deze kaart toont info over verschillende onderwijsinstellingen zoals kleuterscholen, middelbare scholen en tertiair onderwijs.",
+    "de": "Auf dieser Karte können Sie Informationen über Bildungseinrichtungen finden und hinzufügen"
   },
   "title": {
     "en": "Education",
-    "nl": "Onderwijs"
+    "nl": "Onderwijs",
+    "de": "Bildung"
   },
   "defaultBackgroundId": "CartoDB.Voyager",
   "maintainer": "MapComplete",
diff --git a/assets/themes/maxspeed/maxspeed.json b/assets/themes/maxspeed/maxspeed.json
index 1d08e627d..421cb9766 100644
--- a/assets/themes/maxspeed/maxspeed.json
+++ b/assets/themes/maxspeed/maxspeed.json
@@ -3,13 +3,16 @@
   "title": {
     "en": "Maxspeed",
     "es": "Velocidad",
-    "ca": "Velocitat"
+    "ca": "Velocitat",
+    "de": "Höchstgeschwindigkeit"
   },
   "shortDescription": {
-    "en": "This map shows the legally allowed maximum speed on every road."
+    "en": "This map shows the legally allowed maximum speed on every road.",
+    "de": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße."
   },
   "description": {
-    "en": "This map shows the legally allowed maximum speed on every road. If a maxspeed is missing or wrong, you can correct it here."
+    "en": "This map shows the legally allowed maximum speed on every road. If a maxspeed is missing or wrong, you can correct it here.",
+    "de": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße. Wenn eine Höchstgeschwindigkeit fehlt oder falsch ist, können Sie dies hier korrigieren."
   },
   "maintainer": "",
   "icon": "./assets/themes/maxspeed/maxspeed_logo.svg",
diff --git a/assets/translators.json b/assets/translators.json
index 922d04ec2..005fff757 100644
--- a/assets/translators.json
+++ b/assets/translators.json
@@ -1,11 +1,11 @@
 {
   "contributors": [
     {
-      "commits": 165,
+      "commits": 169,
       "contributor": "Pieter Vander Vennet"
     },
     {
-      "commits": 123,
+      "commits": 127,
       "contributor": "kjon"
     },
     {
@@ -16,6 +16,10 @@
       "commits": 51,
       "contributor": "Allan Nordhøy"
     },
+    {
+      "commits": 29,
+      "contributor": "Iago"
+    },
     {
       "commits": 29,
       "contributor": "Babos Gábor"
@@ -24,10 +28,6 @@
       "commits": 29,
       "contributor": "Artem"
     },
-    {
-      "commits": 27,
-      "contributor": "Iago"
-    },
     {
       "commits": 23,
       "contributor": "Supaplex"
diff --git a/langs/de.json b/langs/de.json
index 1462b3d91..510a1d3f8 100644
--- a/langs/de.json
+++ b/langs/de.json
@@ -56,8 +56,8 @@
                 "importTags": "Das Element wird {tags} bekommen",
                 "officialThemesOnly": "Die Import-Schaltfläche ist für inoffizielle Themen deaktiviert, um Störfälle zu vermeiden",
                 "wrongType": "Dieses Element ist kein Punkt oder Weg und kann deshalb nicht importiert werden",
-                "zoomInMore": "Ansicht vergrößern, um das Objekt zu importieren",
-                "wrongTypeToConflate": "Dieses Element ist weder ein Punkt noch ein Weg und kann nicht zusammengeführt werden"
+                "wrongTypeToConflate": "Dieses Element ist weder ein Punkt noch ein Weg und kann nicht zusammengeführt werden",
+                "zoomInMore": "Ansicht vergrößern, um das Objekt zu importieren"
             },
             "importTags": "Das Element erhält {tags}",
             "intro": "An dieser Stelle sind noch keine Daten vorhanden.<br>",
@@ -453,33 +453,42 @@
         "commandNotFound": "Ihre Anfrage wurde nicht verstanden. Meinten Sie vielleicht {0}, {1}, {2} oder {2}? <p>Geben Sie <code>help</code> ein, um eine Übersicht über alle Befehle zu sehen</p>",
         "commands": {
             "dm": {
-                "failed": "Ich konnte <code>{cmd}</code> aufgrund von {message} nicht ausführen",
-                "sendReason": "Ich habe Ihnen diese Nachricht geschickt, weil <b>{sender}</b> mich gebeten hat, diese mit <code>{cmd}</code> zu senden",
+                "argbody": "Der eigentliche Befehlstext des Befehls",
                 "argto": "Die ID, an welche die Ausgabe gesendet werden soll",
                 "commandNotFound": "Befehl {key} nicht gefunden - siehe <code>help</code> für alle Befehle",
                 "docs": "Führt einen Befehl aus und sendet die Ausgabe an eine andere Person",
                 "executing": "Führt <code>{_}</code> aus und sendet das Ergebnis an <b>{to}</b>…",
+                "failed": "Ich konnte <code>{cmd}</code> aufgrund von {message} nicht ausführen",
                 "noDm": "Ich konnte keinen Raum mit {to} erstellen",
                 "receipt": "Ich habe die Nachricht an {to} übermittelt",
                 "selectValidCommand": "Geben Sie einen gültigen Befehl an",
                 "selectValidUser": "Geben Sie einen gültigen Zielbenutzer an",
-                "argbody": "Der eigentliche Befehlstext des Befehls"
+                "sendReason": "Ich habe Ihnen diese Nachricht geschickt, weil <b>{sender}</b> mich gebeten hat, diese mit <code>{cmd}</code> zu senden"
             },
             "documentation": {
                 "argid": "Die ID einer {list} oder {list_end}, für welche die Dokumente benötigt werden. Alternativ können Sie auch eine von {coded_list} schreiben, um die verfügbaren IDs zu sehen.",
                 "didYouMean": "Meinten Sie",
                 "docs": "Ruft die Dokumentation zu einer MapComplete-Ebene, einem Thema oder einem URL-Parameter ab",
+                "file": {
+                    "plural": "Dateien",
+                    "singular": "Datei"
+                },
+                "inputElement": {
+                    "plural": "Eingabeelemente",
+                    "singular": "Eingabeelement"
+                },
+                "layer": {
+                    "plural": "Ebenen",
+                    "singular": "Ebene"
+                },
                 "noIdIntro": "Geben Sie eine ID an, um weitere Informationen über ein MapComplete-Programmierelement zu erhalten. Bekannte Typen sind {list}",
                 "notFound": "Kein {singular} mit Namen <code>{id}</code> gefunden",
-                "urlParam": "URL-Parameter <code>{id}<code></code></code>",
-                "layer": {
-                    "singular": "Ebene",
-                    "plural": "Ebenen"
-                },
+                "overview": "Die folgenden {plural} existieren:",
                 "theme": {
-                    "singular": "Thema",
-                    "plural": "Themen"
+                    "plural": "Themen",
+                    "singular": "Thema"
                 },
+                "urlParam": "URL-Parameter <code>{id}<code></code></code>",
                 "url_parameter": {
                     "plural": "URL-Parameter",
                     "singular": "URL-Parameter"
@@ -487,15 +496,6 @@
                 "visualisation": {
                     "plural": "Visualisierungen",
                     "singular": "Visualisierung"
-                },
-                "file": {
-                    "singular": "Datei",
-                    "plural": "Dateien"
-                },
-                "overview": "Die folgenden {plural} existieren:",
-                "inputElement": {
-                    "plural": "Eingabeelemente",
-                    "singular": "Eingabeelement"
                 }
             },
             "dream": {
@@ -514,9 +514,11 @@
                 "supported": "Meine unterstützten Befehle sind:"
             },
             "info": {
+                "argsearch": "Die ID des OSM-Objekts oder eine Suchanfrage",
                 "closed": "Geschlossen",
                 "closedTodayAndTomorrow": "Heute und morgen geschlossen",
                 "couldNotDownload": "<code>{id}</code> konnte nicht heruntergeladen werden",
+                "docs": "Ermittelt Informationen über ein OSM-Objekt. Geben Sie entweder eine ID ODER einen Suchstring an; die Objekte werden interpretiert und bekannte Werte werden angezeigt.",
                 "editWith": "Dieses Element mit {title} bearbeiten",
                 "fetchingInfoAbout": "Daten über {id} abrufen…",
                 "foundResults": "{total} Ergebnisse gefunden für <code>{search}</code>, rufe Details ab…",
@@ -525,9 +527,7 @@
                 "noOpeningHours": "Es sind keine Öffnungszeiten bekannt.",
                 "nothingFound": "Nichts gefunden für <code>{_}</code>",
                 "provideSearch": "Bitte geben Sie einen Suchbegriff der id an, um diesen Befehl zu verwenden",
-                "searchingWorldwide": "Durchsuche OpenStreetMap.org nach Ihrer Suche <code>{_}</code>",
-                "docs": "Ermittelt Informationen über ein OSM-Objekt. Geben Sie entweder eine ID ODER einen Suchstring an; die Objekte werden interpretiert und bekannte Werte werden angezeigt.",
-                "argsearch": "Die ID des OSM-Objekts oder eine Suchanfrage"
+                "searchingWorldwide": "Durchsuche OpenStreetMap.org nach Ihrer Suche <code>{_}</code>"
             },
             "language": {
                 "arglang": "Die von nun an zu verwendende Sprache",
@@ -550,61 +550,61 @@
                 "noRolesYet": "<b>{user}</b> hat derzeit keine Rollen.",
                 "noSuchRole": "Die Rolle <code>{role}</code> kann nicht an <code>{user}</code> vergeben werden. Eine Rolle ist dasselbe wie ein Befehlsname, geben Sie <code>help</code> ein, um alle Befehle zu sehen.",
                 "userHasRoles": "<b>{user}</b> hat derzeit die folgenden Rollen:",
-                "verbremove": "Entfernt eine Rolle von dem angegebenen Benutzer",
+                "verbadd": "Fügt eine Rolle für den angegebenen Benutzer hinzu",
                 "verbdefault": "Liste der Rollen des Benutzers",
                 "verblist": "Alle Benutzerrollen des angegebenen Benutzers auflisten",
-                "verbrevoke": "Entzieht alle Rechte eines Benutzers",
-                "verbadd": "Fügt eine Rolle für den angegebenen Benutzer hinzu"
+                "verbremove": "Entfernt eine Rolle von dem angegebenen Benutzer",
+                "verbrevoke": "Entzieht alle Rechte eines Benutzers"
+            },
+            "scheme": {
+                "argkey": "Der Name des Schlüssels",
+                "docs": "Enthält Informationen über einen Schlüssel in einer theme-config-Datei",
+                "noMatchingLayer": "Keine passenden Schlüssel gefunden, vielleicht meinten Sie einen von:",
+                "notype": "kein Typ angegeben",
+                "title": "{key} (verwendet bei <code>{path}</code>, {type})"
             },
             "search": {
-                "searching": "Suche {layerTitle} {mode} <code>{search}</code>…",
-                "nothingFound": "Entschuldigung, ich konnte nichts für <code>{search}</code> finden, also kann ich nicht nach {layerTitle} suchen",
                 "announceLimited": "<p><i>Ich zeige nur die {cutoff} Elemente, die dem <a href=\"{href}\" target=\"_blank\">gesuchten Ort</a> am nächsten liegen.</i></p>",
                 "arglayerid": "Der Name einer Ebene ODER ein einzelner Suchbegriff",
                 "argsearch": "Der Suchbegriff",
                 "argverb": "Entweder in einem geografischen Gebiet (z. B. einer Stadt) oder in der Nähe eines POI suchen",
-                "noNearOrIn": "Entschuldigung, ich habe Ihren Befehl nicht verstanden, da ich in Ihrer Suchanfrage kein <code>in der Nähe</code> oder <code>in</code> gefunden habe.\n Versuchen Sie etwas wie <code>Suche Trinkwasser in London</code>, <code>Suche Friture in Brüssel</code><p></p>\n <p>Alternativ versuchen Sie <code>info {cmd}</code>, um Informationen über ein einzelnes Objekt zu erhalten.</p>",
                 "noMatchingLayer": "Ich habe keine passende Ebene gefunden",
-                "overview": "Ich habe {length} passende Artikel gefunden."
+                "noNearOrIn": "Entschuldigung, ich habe Ihren Befehl nicht verstanden, da ich in Ihrer Suchanfrage kein <code>in der Nähe</code> oder <code>in</code> gefunden habe.\n Versuchen Sie etwas wie <code>Suche Trinkwasser in London</code>, <code>Suche Friture in Brüssel</code><p></p>\n <p>Alternativ versuchen Sie <code>info {cmd}</code>, um Informationen über ein einzelnes Objekt zu erhalten.</p>",
+                "nothingFound": "Entschuldigung, ich konnte nichts für <code>{search}</code> finden, also kann ich nicht nach {layerTitle} suchen",
+                "overview": "Ich habe {length} passende Artikel gefunden.",
+                "searching": "Suche {layerTitle} {mode} <code>{search}</code>…"
             },
             "shutdown": {
                 "argmode": "Gibt an, ob der Dienst neu gestartet werden soll, muss einer der folgenden Werte sein: {verbs}",
                 "docs": "Schaltet den Bot ab",
                 "goodbye": "Ich schließe… Bis später!",
                 "notYetShuttingDown": "Ich starte noch nicht neu, da ich erst vor {uptime} Sekunden gebootet habe. Ich werde mindestens {min_uptime} warten, bevor ich neu starte.",
-                "verbupdate": "Versucht, die eingebettete MapComplete-Codebasis zu aktualisieren, wird danach beendet",
-                "verbshutdown": "Beendet den Bot"
+                "verbshutdown": "Beendet den Bot",
+                "verbupdate": "Versucht, die eingebettete MapComplete-Codebasis zu aktualisieren, wird danach beendet"
             },
             "tags": {
                 "announceSearch": "<code>{id}</code> scheint keine gültige OSM-id zu sein - suche stattdessen weltweit nach {search}…",
-                "nothingFound": "Nichts gefunden für {_}",
                 "argsearch": "Die ID des OSM-Objekts oder eine Suchanfrage",
+                "docs": "Zeigt die Tags eines OSM-Objekts an. Geben Sie entweder eine ID ODER einen Suchstring ein; die Objekte werden interpretiert und bekannte Werte werden angezeigt.",
                 "noSearchGiven": "Bitte geben Sie einen Suchbegriff der ID an, um diesen Befehl zu verwenden",
-                "docs": "Zeigt die Tags eines OSM-Objekts an. Geben Sie entweder eine ID ODER einen Suchstring ein; die Objekte werden interpretiert und bekannte Werte werden angezeigt."
+                "nothingFound": "Nichts gefunden für {_}"
             },
             "welcome": {
+                "docs": "Gibt eine freundliche Begrüßungsnachricht",
                 "p0": "Hallo! Ich bin MapComplete-bot. Ich bin ein Computerprogramm, das OpenStreetMap durchsucht und einige Informationen über <a href=\"https://mapcomplete.osm.be\">MapComplete</a> geben kann, eine Webseite und App, die thematische Karten zeigt. Wenn Informationen fehlen, können Sie sie dort leicht hinzufügen.",
                 "p1": "Senden Sie mir <code>info [searchterm]</code> und ich werde OpenStreetMap für Sie durchsuchen. Ich zeige Ihnen dann die Informationen über das, was ich gefunden habe.",
                 "p2": "Alternativ können auch <code>search [ojecttype] near [placename]</code> oder <code>search [objecttype] in [placename]</code> verwendet werden, um nach weiteren Orten zu suchen. Unterstützte Objekttypen sind diejenigen, die in MapComplete gefunden werden können. Weitere Kategorien werden in Zukunft hinzugefügt - und wenn Sie der Herausforderung gewachsen sind, <a href=\"https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Making_Your_Own_Theme.md\">können Sie Ihre thematische Karte und damit auch eine Kategorie erstellen</a>",
-                "p3": "Es gibt noch einige weitere Befehle, senden Sie <code>help</code>, um sie alle zu sehen.",
-                "docs": "Gibt eine freundliche Begrüßungsnachricht"
+                "p3": "Es gibt noch einige weitere Befehle, senden Sie <code>help</code>, um sie alle zu sehen."
             },
             "wiki": {
-                "docs": "Gibt (einen Teil) der angegebenen Seite von {backend} aus. In öffentlichen Räumen wird der erste Absatz angezeigt; in einer Direktnachricht wird die gesamte Seite gesendet.",
                 "argsearch": "Der Titel der Seite oder der Suchbegriff",
+                "docs": "Gibt (einen Teil) der angegebenen Seite von {backend} aus. In öffentlichen Räumen wird der erste Absatz angezeigt; in einer Direktnachricht wird die gesamte Seite gesendet.",
                 "foundMatching": "Eine passende Wikiseite gefunden, nämlich {title}",
                 "gotResults": "Habe {count} Ergebnisse für Suchanfrage <code>{search}</code> erhalten:",
                 "loadingFailed": "Entschuldigung, die Seite <code>{pagename}</code> konnte nicht geladen werden",
                 "noWiki": "Bitte geben Sie eine Wikiseite an, nach der Sie suchen möchten",
                 "nothingFound": "Ich konnte auf {backend} für {search} nichts finden",
                 "searching": "Suche auf {backend}…"
-            },
-            "scheme": {
-                "title": "{key} (verwendet bei <code>{path}</code>, {type})",
-                "argkey": "Der Name des Schlüssels",
-                "docs": "Enthält Informationen über einen Schlüssel in einer theme-config-Datei",
-                "noMatchingLayer": "Keine passenden Schlüssel gefunden, vielleicht meinten Sie einen von:",
-                "notype": "kein Typ angegeben"
             }
         },
         "decryptionFailed": "Es tut mir leid, ich konnte die Nachricht nicht entschlüsseln. Sie können versuchen, diesen Kanal zu verlassen und sich erneut zu verbinden",
@@ -829,6 +829,9 @@
         "direction": {
             "description": "Eine Himmelsrichtung"
         },
+        "distance": {
+            "description": "Entfernung in Meter"
+        },
         "email": {
             "description": "E-Mail Adresse",
             "feedback": "Dies ist keine gültige E-Mail Adresse",
@@ -874,9 +877,6 @@
         },
         "wikidata": {
             "description": "Eine Wikidata-Kennung"
-        },
-        "distance": {
-            "description": "Entfernung in Meter"
         }
     }
 }
diff --git a/langs/layers/de.json b/langs/layers/de.json
index cce8438ba..60cea6cea 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -3895,6 +3895,37 @@
             }
         },
         "tagRenderings": {
+            "6": {
+                "renderings": {
+                    "0": {
+                        "mappings": {
+                            "0": {
+                                "then": "In diesem Hackerspace gibt es {device-name}"
+                            },
+                            "1": {
+                                "then": "In diesem Hackerspace gibt es kein {negative-name}"
+                            }
+                        },
+                        "question": "Gibt es {device-name} in diesem Hackerspace?"
+                    }
+                },
+                "rewrite": {
+                    "into": {
+                        "0": {
+                            "1": "einen 3D-Drucker",
+                            "2": "3D-Drucker"
+                        },
+                        "1": {
+                            "1": "einen Laserschneider",
+                            "2": "Laserschneider"
+                        },
+                        "2": {
+                            "1": "eine CNC-Fräse",
+                            "2": "CNC-Fräse"
+                        }
+                    }
+                }
+            },
             "hackerspaces-name": {
                 "question": "Wie lautet der Name dieses Hackerspace?",
                 "render": "Dieser Hackerspace heißt <b>{name}</b>"
@@ -3933,37 +3964,6 @@
                     }
                 },
                 "question": "Ist dies ein Hackerspace oder ein Makerspace?"
-            },
-            "6": {
-                "rewrite": {
-                    "into": {
-                        "0": {
-                            "1": "einen 3D-Drucker",
-                            "2": "3D-Drucker"
-                        },
-                        "2": {
-                            "2": "CNC-Fräse",
-                            "1": "eine CNC-Fräse"
-                        },
-                        "1": {
-                            "1": "einen Laserschneider",
-                            "2": "Laserschneider"
-                        }
-                    }
-                },
-                "renderings": {
-                    "0": {
-                        "mappings": {
-                            "1": {
-                                "then": "In diesem Hackerspace gibt es kein {negative-name}"
-                            },
-                            "0": {
-                                "then": "In diesem Hackerspace gibt es {device-name}"
-                            }
-                        },
-                        "question": "Gibt es {device-name} in diesem Hackerspace?"
-                    }
-                }
             }
         },
         "title": {
@@ -4052,6 +4052,49 @@
             "render": "Informationstafel"
         }
     },
+    "kindergarten_childcare": {
+        "name": "Kindergärten und Kinderkrippen",
+        "presets": {
+            "0": {
+                "title": "einen Kindergarten"
+            },
+            "1": {
+                "title": "eine Kinderkrippe"
+            }
+        },
+        "tagRenderings": {
+            "5": {
+                "override": {
+                    "question": "Wann ist diese Kinderbetreuung geöffnet?"
+                }
+            },
+            "capacity": {
+                "question": "Wie viele Kinder können hier maximal angemeldet werden?",
+                "render": "Diese Einrichtung bietet Platz für {capacity} Kinder"
+            },
+            "childcare-type": {
+                "mappings": {
+                    "0": {
+                        "then": "Dies ist ein Kindergarten (auch bekannt als <i>Vorschule</i>), in dem kleine Kinder eine Früherziehung erhalten."
+                    },
+                    "1": {
+                        "then": "Dies ist eine Kinderbetreuungseinrichtung, z. B. ein Kinderkrippe oder eine Tagesmutter, in der Kleinkinder betreut werden. Sie bieten keine Ausbildung an und werden oft als Privatunternehmen geführt"
+                    }
+                },
+                "question": "Um welche Art von Einrichtung handelt es sich?"
+            }
+        },
+        "title": {
+            "mappings": {
+                "0": {
+                    "then": "Kindergarten {name}"
+                },
+                "1": {
+                    "then": "Kinderkrippe {name}"
+                }
+            }
+        }
+    },
     "map": {
         "description": "Eine Karte, die für Touristen gedacht ist und dauerhaft im öffentlichen Raum aufgestellt ist",
         "name": "Karten",
@@ -4096,6 +4139,42 @@
             "render": "Karte"
         }
     },
+    "maxspeed": {
+        "description": "Zeigt die zulässige Geschwindigkeit für jede Straße an",
+        "name": "Höchstgeschwindigkeit",
+        "tagRenderings": {
+            "maxspeed-maxspeed": {
+                "mappings": {
+                    "0": {
+                        "then": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt"
+                    }
+                },
+                "question": "Wie hoch ist die zulässige Höchstgeschwindigkeit, die man auf dieser Straße fahren darf?",
+                "render": "Die zulässige Höchstgeschwindigkeit auf dieser Straße ist {maxspeed}"
+            }
+        },
+        "title": {
+            "mappings": {
+                "0": {
+                    "then": "Straße ohne Namen"
+                }
+            }
+        },
+        "units": {
+            "0": {
+                "applicableUnits": {
+                    "0": {
+                        "human": "Kilometer/Stunde",
+                        "humanShort": "km/h"
+                    },
+                    "1": {
+                        "human": "Meilen/Stunde",
+                        "humanShort": "mph"
+                    }
+                }
+            }
+        }
+    },
     "nature_reserve": {
         "description": "Ein Naturschutzgebiet ist ein Gebiet, das der Natur überlassen wurde",
         "filter": {
@@ -4903,6 +4982,30 @@
             "render": "Recyclinganlage"
         }
     },
+    "school": {
+        "name": "Grund- und weiterführende Schulen",
+        "presets": {
+            "0": {
+                "title": "eine Grundschule oder weiterführende Schule"
+            }
+        },
+        "tagRenderings": {
+            "capacity": {
+                "question": "Wie viele Schüler können sich maximal an dieser Schule anmelden?",
+                "render": "Diese Schule kann höchstens {capacity} Schüler aufnehmen"
+            },
+            "education-level-belgium": {
+                "mappings": {
+                    "0": {
+                        "then": "Es handelt sich um eine Schule mit einer Kindergartenabteilung, in der kleine Kinder eine Ausbildung erhalten, die auf das Lesen und Schreiben vorbereitet."
+                    },
+                    "1": {
+                        "then": "In dieser Schule lernt man grundlegende Fähigkeiten wie Lesen, Schreiben und Rechnen. <div class='subtle'>Schüler besuchen die Schule in der Regel im Alter von 6 bis 12 Jahren</div>"
+                    }
+                }
+            }
+        }
+    },
     "shops": {
         "deletion": {
             "extraDeleteReasons": {
@@ -6020,108 +6123,5 @@
                 }
             }
         }
-    },
-    "school": {
-        "name": "Grund- und weiterführende Schulen",
-        "tagRenderings": {
-            "education-level-belgium": {
-                "mappings": {
-                    "0": {
-                        "then": "Es handelt sich um eine Schule mit einer Kindergartenabteilung, in der kleine Kinder eine Ausbildung erhalten, die auf das Lesen und Schreiben vorbereitet."
-                    },
-                    "1": {
-                        "then": "In dieser Schule lernt man grundlegende Fähigkeiten wie Lesen, Schreiben und Rechnen. <div class='subtle'>Schüler besuchen die Schule in der Regel im Alter von 6 bis 12 Jahren</div>"
-                    }
-                }
-            },
-            "capacity": {
-                "question": "Wie viele Schüler können sich maximal an dieser Schule anmelden?",
-                "render": "Diese Schule kann höchstens {capacity} Schüler aufnehmen"
-            }
-        },
-        "presets": {
-            "0": {
-                "title": "eine Grundschule oder weiterführende Schule"
-            }
-        }
-    },
-    "kindergarten_childcare": {
-        "presets": {
-            "1": {
-                "title": "eine Kinderkrippe"
-            },
-            "0": {
-                "title": "einen Kindergarten"
-            }
-        },
-        "tagRenderings": {
-            "childcare-type": {
-                "question": "Um welche Art von Einrichtung handelt es sich?",
-                "mappings": {
-                    "0": {
-                        "then": "Dies ist ein Kindergarten (auch bekannt als <i>Vorschule</i>), in dem kleine Kinder eine Früherziehung erhalten."
-                    },
-                    "1": {
-                        "then": "Dies ist eine Kinderbetreuungseinrichtung, z. B. ein Kinderkrippe oder eine Tagesmutter, in der Kleinkinder betreut werden. Sie bieten keine Ausbildung an und werden oft als Privatunternehmen geführt"
-                    }
-                }
-            },
-            "5": {
-                "override": {
-                    "question": "Wann ist diese Kinderbetreuung geöffnet?"
-                }
-            },
-            "capacity": {
-                "render": "Diese Einrichtung bietet Platz für {capacity} Kinder",
-                "question": "Wie viele Kinder können hier maximal angemeldet werden?"
-            }
-        },
-        "name": "Kindergärten und Kinderkrippen",
-        "title": {
-            "mappings": {
-                "0": {
-                    "then": "Kindergarten {name}"
-                },
-                "1": {
-                    "then": "Kinderkrippe {name}"
-                }
-            }
-        }
-    },
-    "maxspeed": {
-        "name": "Höchstgeschwindigkeit",
-        "title": {
-            "mappings": {
-                "0": {
-                    "then": "Straße ohne Namen"
-                }
-            }
-        },
-        "units": {
-            "0": {
-                "applicableUnits": {
-                    "0": {
-                        "humanShort": "km/h",
-                        "human": "Kilometer/Stunde"
-                    },
-                    "1": {
-                        "human": "Meilen/Stunde",
-                        "humanShort": "mph"
-                    }
-                }
-            }
-        },
-        "description": "Zeigt die zulässige Geschwindigkeit für jede Straße an",
-        "tagRenderings": {
-            "maxspeed-maxspeed": {
-                "mappings": {
-                    "0": {
-                        "then": "Dies ist eine Wohnstraße, auf der eine Höchstgeschwindigkeit von 20 km/h gilt"
-                    }
-                },
-                "question": "Wie hoch ist die zulässige Höchstgeschwindigkeit, die man auf dieser Straße fahren darf?",
-                "render": "Die zulässige Höchstgeschwindigkeit auf dieser Straße ist {maxspeed}"
-            }
-        }
     }
-}
+}
\ No newline at end of file
diff --git a/langs/layers/es.json b/langs/layers/es.json
index bd1bf3f10..323a83868 100644
--- a/langs/layers/es.json
+++ b/langs/layers/es.json
@@ -728,6 +728,9 @@
             }
         },
         "tagRenderings": {
+            "Email maintainer": {
+                "render": "<a href='mailto:{email}?subject=Bomba de bicicletas rota&body=Hola,%0D%0A%0ACon este correo, me gustaría informarte de que la bomba para bicicletas que se encuentra en https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} está rota.%0D%0A%0D%0A Un saludo'>Reportar esta bomba para bicicletas como rota</a>"
+            },
             "Operational status": {
                 "mappings": {
                     "0": {
@@ -840,21 +843,18 @@
             },
             "bike_repair_station-valves": {
                 "mappings": {
-                    "1": {
-                        "then": "Dunlop"
-                    },
                     "0": {
                         "then": "Sclaverand/Presata (ruedas de bicicleta estrechas)"
                     },
+                    "1": {
+                        "then": "Dunlop"
+                    },
                     "2": {
                         "then": "Schrader (coches y bicicletas de montaña)"
                     }
                 },
                 "question": "¿Que válvulas se soportan?",
                 "render": "Esta bomba soporta las siguiente válvulas: {valves}"
-            },
-            "Email maintainer": {
-                "render": "<a href='mailto:{email}?subject=Bomba de bicicletas rota&body=Hola,%0D%0A%0ACon este correo, me gustaría informarte de que la bomba para bicicletas que se encuentra en https://mapcomplete.osm.be/cyclofix?lat={_lat}%26lon={_lon}%26z=18%23{id} está rota.%0D%0A%0D%0A Un saludo'>Reportar esta bomba para bicicletas como rota</a>"
             }
         },
         "title": {
@@ -1012,6 +1012,9 @@
                 "0": {
                     "then": "Tienda de artículos deportivos <i>{name}</i>"
                 },
+                "1": {
+                    "then": "Winkel"
+                },
                 "2": {
                     "then": "Alquiler de bicicletas <i>{name}</i>"
                 },
@@ -1023,9 +1026,6 @@
                 },
                 "5": {
                     "then": "Taller/tienda de bicis <i>{name}</i>"
-                },
-                "1": {
-                    "then": "Winkel"
                 }
             },
             "render": "Taller/tienda de bicis"
@@ -1140,8 +1140,8 @@
                 "title": "un bar"
             },
             "2": {
-                "title": "una cafetería",
-                "description": "Una <b>cafetería</b> para beber té, café o una bebida alcohólica en un ambiente tranquilo"
+                "description": "Una <b>cafetería</b> para beber té, café o una bebida alcohólica en un ambiente tranquilo",
+                "title": "una cafetería"
             },
             "3": {
                 "description": "Un <b>club nocturno</b> o discoteca centrada en bailar, la música de un DJ acompañado por un espectáculo de luces y un bar donde conseguir bebidas (alcohólicas)"
@@ -3965,4 +3965,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 41afb80a2..5b9de8923 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -4929,8 +4929,8 @@
         },
         "tagRenderings": {
             "capacity": {
-                "render": "Deze school kan maximaal {capacity} studenten lesgeven",
-                "question": "Hoeveel studenten kunnen er les volgen in deze school?"
+                "question": "Hoeveel studenten kunnen er les volgen in deze school?",
+                "render": "Deze school kan maximaal {capacity} studenten lesgeven"
             },
             "education-level-belgium": {
                 "mappings": {
@@ -6329,4 +6329,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/langs/nl.json b/langs/nl.json
index 76c77386e..06eef9b5f 100644
--- a/langs/nl.json
+++ b/langs/nl.json
@@ -56,8 +56,8 @@
                 "importTags": "Het element zal deze tags krijgen: {tags}",
                 "officialThemesOnly": "In onofficiële thema's is de importeerknop uitgeschakeld om ongelukjes te vermijden",
                 "wrongType": "Dit object is geen punt of lijn, en kan daarom niet geïmporteerd worden",
-                "zoomInMore": "Zoom verder in om dit object af te handelen",
-                "wrongTypeToConflate": "Dit element is geen punt of weg en kan dus niet samengevoegd worden"
+                "wrongTypeToConflate": "Dit element is geen punt of weg en kan dus niet samengevoegd worden",
+                "zoomInMore": "Zoom verder in om dit object af te handelen"
             },
             "importTags": "Het object zal deze tags krijgen: {tags}",
             "intro": "Kies hieronder welk punt je wilt toevoegen<br/>",
@@ -453,30 +453,25 @@
         "commandNotFound": "Sorry, ik heb je commando niet verstaan. Zou het kunnen dat je {0}, {1}, {2} of {2} bedoelt? <p>Je kan ook <code>help</code> sturen om een overzicht van alle commando's te zien</p>",
         "commands": {
             "dm": {
-                "failed": "I kon <code>{cmd}</code> niet uitvoeren doordag {message}",
-                "sendReason": "Ik stuurde jou dit bericht omdat <b>{sender}</b> mij gevraagd heeft om je het resultaat van <code>{cmd}</code> te sturen",
                 "argbody": "Het commando om uit te voeren",
-                "docs": "Voert een commando uit en stuurt de output naar iemand anders",
                 "argto": "De ID van degene die de output moet ontvangen",
                 "commandNotFound": "Commando {key} niet gevonden - zie <code>help</code> voor een overzicht van alle commando's",
+                "docs": "Voert een commando uit en stuurt de output naar iemand anders",
                 "executing": "<code>{_}</code> aan het uitvoeren, het resultaat stuur ik naar <b>{to}</b>",
+                "failed": "I kon <code>{cmd}</code> niet uitvoeren doordag {message}",
                 "noDm": "Ik kon geen chat opzetten met {to}",
                 "receipt": "Ik leverde het bericht af aan {to}",
                 "selectValidCommand": "Geef een geldig commando",
-                "selectValidUser": "Geef een geldige ID van een gebruiker"
+                "selectValidUser": "Geef een geldige ID van een gebruiker",
+                "sendReason": "Ik stuurde jou dit bericht omdat <b>{sender}</b> mij gevraagd heeft om je het resultaat van <code>{cmd}</code> te sturen"
             },
             "documentation": {
+                "argid": "Het id van een {list} of {list_end} waarvan de documentatie gevraagd is. Je can ook {coded_list} schrijven om beschikbare ids te zien.",
                 "didYouMean": "Bedoelde je misschien één van onderstaande URL-parameters? ",
                 "docs": "Vraag documentatie over een MapComplete-laag, -thema of URL-parameter",
-                "notFound": "Ik kong geen {singular} vinden met naam <code>{id}</code>.",
-                "urlParam": "URL-parameter <code>{id}</code>",
-                "visualisation": {
-                    "plural": "visualisaties",
-                    "singular": "visualisatie"
-                },
                 "file": {
-                    "singular": "bestand",
-                    "plural": "bestanden"
+                    "plural": "bestanden",
+                    "singular": "bestand"
                 },
                 "inputElement": {
                     "plural": "input elementen",
@@ -486,17 +481,22 @@
                     "plural": "lagen",
                     "singular": "laag"
                 },
+                "noIdIntro": "Om meer informatie te krijgen over een MapComplete-deel, moet je een ID geven. Bekende types zijn {list}",
+                "notFound": "Ik kong geen {singular} vinden met naam <code>{id}</code>.",
+                "overview": "De volgende {plural} bestaan:",
+                "theme": {
+                    "plural": "kaartthemas",
+                    "singular": "kaartthema"
+                },
+                "urlParam": "URL-parameter <code>{id}</code>",
                 "url_parameter": {
                     "plural": "url-parameters",
                     "singular": "url-parameter"
                 },
-                "theme": {
-                    "singular": "kaartthema",
-                    "plural": "kaartthemas"
-                },
-                "overview": "De volgende {plural} bestaan:",
-                "argid": "Het id van een {list} of {list_end} waarvan de documentatie gevraagd is. Je can ook {coded_list} schrijven om beschikbare ids te zien.",
-                "noIdIntro": "Om meer informatie te krijgen over een MapComplete-deel, moet je een ID geven. Bekende types zijn {list}"
+                "visualisation": {
+                    "plural": "visualisaties",
+                    "singular": "visualisatie"
+                }
             },
             "dream": {
                 "docs": "Stuurt een dromerige, computer-gegenereerde tekst",
@@ -514,9 +514,11 @@
                 "supported": "De commando's die ik ken zijn:"
             },
             "info": {
+                "argsearch": "Het ID van een OSM-object of een zoekterm",
                 "closed": "Gesloten",
                 "closedTodayAndTomorrow": "Vandaag en morgen gesloten",
                 "couldNotDownload": "Ik kon <code>{id}</code> niet downloaden",
+                "docs": "Haal informatie op over een OSM-object. Dit kan met het ID of via een zoekterm. De objecten worden geinterpreteerd en getoond.",
                 "editWith": "Bewerk dit element op {title}",
                 "fetchingInfoAbout": "Data over {id} aan het ophalen...",
                 "foundResults": "Ik vond {total} resultaten voor <code>{search}</code>, ik ben informatie erover aan het ophalen...",
@@ -525,9 +527,7 @@
                 "noOpeningHours": "Geen openingsuren gekend",
                 "nothingFound": "Ik kon niets vinden voor <code>{_}</code>",
                 "provideSearch": "Gelieve een zoekterm of id te geven",
-                "searchingWorldwide": "OpenStreetMap aan het doorzoeken voor <code>{_}</code>",
-                "docs": "Haal informatie op over een OSM-object. Dit kan met het ID of via een zoekterm. De objecten worden geinterpreteerd en getoond.",
-                "argsearch": "Het ID van een OSM-object of een zoekterm"
+                "searchingWorldwide": "OpenStreetMap aan het doorzoeken voor <code>{_}</code>"
             },
             "language": {
                 "arglang": "De taal die ik vanaf nu in deze ruimte ga spreken",
@@ -552,10 +552,13 @@
                 "userHasRoles": "<b>{user}</b> heeft op dit moment de volgende rechten:",
                 "verbadd": "Voegt een rol toe aan de aangeduide gebruiker",
                 "verbdefault": "Geeft een lijst van rollen van de gebruiker",
-                "verbremove": "Verwijdert een rol van de aangeduide gebruiker",
                 "verblist": "Geeft een lijst van rollen van de gebruiker",
+                "verbremove": "Verwijdert een rol van de aangeduide gebruiker",
                 "verbrevoke": "Verwijdert alle rollen van de gebruiker"
             },
+            "scheme": {
+                "argkey": "De naam van de key"
+            },
             "search": {
                 "searching": "Aan het zoeken naar {layerTitle} {mode} <code>{search}</code>..."
             },
@@ -576,14 +579,11 @@
             },
             "wiki": {
                 "docs": "Stuurt een (deel van) de gevraagde pagina van {backend}. In een publieke ruimte stuur ik enkel de eerste paragraaf, in een privaat bericht krijg je de volledige pagina.",
-                "loadingFailed": "Sorry, pagina <code>{pagename}</code> kon niet geladen worden",
                 "gotResults": "Ik vond {count} resultaten voor <code>{search}</code>:",
-                "searching": "Aan het zoeken op {backend}…",
+                "loadingFailed": "Sorry, pagina <code>{pagename}</code> kon niet geladen worden",
+                "noWiki": "Gelieve zoekterm voor een wiki-pagina te geven",
                 "nothingFound": "Ik kon niets vinden voor {search} op {backend}",
-                "noWiki": "Gelieve zoekterm voor een wiki-pagina te geven"
-            },
-            "scheme": {
-                "argkey": "De naam van de key"
+                "searching": "Aan het zoeken op {backend}…"
             }
         },
         "decryptionFailed": "Sorry, ik kon je bericht niet ontcijferen. Probeer om deze kamer te verlaten en opnieuw te connecteren",
diff --git a/langs/themes/de.json b/langs/themes/de.json
index c2031382e..1773fd927 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -443,6 +443,10 @@
         "description": "Eine Karte zum Anzeigen und Bearbeiten öffentlicher Trinkwasserstellen",
         "title": "Trinkwasserstellen"
     },
+    "education": {
+        "description": "Auf dieser Karte können Sie Informationen über Bildungseinrichtungen finden und hinzufügen",
+        "title": "Bildung"
+    },
     "entrances": {
         "description": "Eine Karte mit allen Eingängen, die wichtige Aspekte für Rollstuhlfahrer erfasst",
         "shortDescription": "Eingänge prüfen, um die Rollstuhlnavigation zu verbessern",
@@ -710,6 +714,11 @@
         "shortDescription": "Dieses Thema zeigt alle (touristischen) Karten, die OpenStreetMap kennt",
         "title": "Eine Karte der Karten"
     },
+    "maxspeed": {
+        "description": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße. Wenn eine Höchstgeschwindigkeit fehlt oder falsch ist, können Sie dies hier korrigieren.",
+        "shortDescription": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße.",
+        "title": "Höchstgeschwindigkeit"
+    },
     "nature": {
         "description": "Auf dieser Karte findet man interessante Informationen für Touristen und Naturliebhaber. ",
         "shortDescription": "Eine Karte mit interessanten Orten für Naturliebhaber",
@@ -953,14 +962,5 @@
         "description": "Auf dieser Karte findest Du Abfalleimer in Deiner Nähe. Wenn ein Abfalleimer auf dieser Karte fehlt, kannst du ihn selbst hinzufügen",
         "shortDescription": "Eine Karte mit Abfalleimern",
         "title": "Abfalleimer"
-    },
-    "education": {
-        "title": "Bildung",
-        "description": "Auf dieser Karte können Sie Informationen über Bildungseinrichtungen finden und hinzufügen"
-    },
-    "maxspeed": {
-        "title": "Höchstgeschwindigkeit",
-        "description": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße. Wenn eine Höchstgeschwindigkeit fehlt oder falsch ist, können Sie dies hier korrigieren.",
-        "shortDescription": "Diese Karte zeigt die zulässige Höchstgeschwindigkeit auf jeder Straße."
     }
-}
+}
\ No newline at end of file