From 30bf3b4e82d404f23b94e593bbf7c59d9e4fd173 Mon Sep 17 00:00:00 2001
From: Waldir Pimenta <waldyrious@gmail.com>
Date: Thu, 5 Jul 2018 00:25:49 +0100
Subject: [PATCH 01/44] Create pt.json

based on pt-br.json and en.json
---
 lang/pt.json | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 lang/pt.json

diff --git a/lang/pt.json b/lang/pt.json
new file mode 100644
index 0000000..e21475a
--- /dev/null
+++ b/lang/pt.json
@@ -0,0 +1,68 @@
+{
+    "category:administrative": "Regiões administrativas",
+    "category:agriculture": "Agricultura",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "Rotas",
+    "category:buildings": "Edifícios",
+    "category:car_amenities": "",
+    "category:car_furniture": "Mobiliário urbano",
+    "category:car_maxspeed": "Velocidade máxima",
+    "category:children": "",
+    "category:communication": "Comunicação",
+    "category:construction": "Locais de construção",
+    "category:craft": "Artesanato",
+    "category:culture": "Cultura",
+    "category:culture_religion": "Cultura e religião",
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "Ciclovias",
+    "category:education": "Educação",
+    "category:emergency": "Emergência",
+    "category:financial": "Finanças",
+    "category:gastro-smoking": "Restauração livre de tabaco",
+    "category:gastro": "Restauração",
+    "category:health": "Saúde",
+    "category:hiking_routes": "Rotas de caminhada",
+    "category:historic": "Histórico",
+    "category:index": null,
+    "category:internet": "Acesso à Internet",
+    "category:leisure": "Lazer",
+    "category:military": "Militar",
+    "category:natural": "Formações naturais",
+    "category:other": "Outros",
+    "category:phone": "Telefone",
+    "category:places": "Lugares",
+    "category:places_geo": "Lugares",
+    "category:playgrounds": "Parques infantis",
+    "category:post": "Correios",
+    "category:power": "Eletricidade",
+    "category:pt_amenities": "",
+    "category:pt_routes": "Rotas",
+    "category:pt_stops": "Paragens e estações",
+    "category:public": "Serviços públicos",
+    "category:railway-electrification": "Eletrificação ferroviária",
+    "category:railway-infrastructure": "Infraestrutura ferroviária",
+    "category:religion": "Religião",
+    "category:residential": "Áreas residenciais",
+    "category:resources": "Extração de recursos",
+    "category:shop": "Compras",
+    "category:sport": "Desporto",
+    "category:tourism_attractions": "Turismo",
+    "category:tourism_services": "Turismo",
+    "category:transport_alternative": null,
+    "category:walk_amenities": "",
+    "category:waste": "Lixo",
+    "category:water": "Massas de água",
+    "category:wikipedia": "Wikipédia",
+    "category:works": "Fábricas",
+    "category:cycle_infrastructure": "Ciclovias",
+    "category:infrastructure": "Infraestrutura",
+    "category:leisure_sport_shopping": "Lazer, desporto e compras",
+    "category:railway": "Linhas ferroviárias",
+    "category:services": "Serviços",
+    "category:special": "Especial",
+    "category:transport": "Transportes",
+    "category:transport_car": "Transporte individual",
+    "category:transport_cycle": "Ciclismo",
+    "category:transport_pt": "Transportes públicos",
+    "category:transport_walk": "Pedestre"
+}

From 63bad9136cb796395d45f58f1b041fd6be0c6caf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 5 Jul 2018 09:09:16 +0200
Subject: [PATCH 02/44] Distribute pt language strings to categories

---
 administrative.json          |  1 +
 agriculture.json             |  1 +
 alternative_routes.json      |  1 +
 buildings.json               |  1 +
 car_furniture.json           |  1 +
 car_maxspeed.json            |  1 +
 communication.json           |  1 +
 construction.json            |  1 +
 craft.json                   |  1 +
 culture.json                 |  1 +
 culture_religion.json        |  1 +
 cycle_routes.json            |  1 +
 education.json               |  1 +
 emergency.json               |  1 +
 financial.json               |  1 +
 gastro-smoking.json          |  1 +
 gastro.json                  |  1 +
 health.json                  |  1 +
 hiking_routes.json           |  1 +
 historic.json                |  1 +
 index.json                   | 30 ++++++++++++++++++++----------
 internet.json                |  1 +
 leisure.json                 |  1 +
 military.json                |  1 +
 natural.json                 |  1 +
 other.json                   |  1 +
 phone.json                   |  1 +
 places.json                  |  1 +
 places_geo.json              |  1 +
 playgrounds.json             |  1 +
 post.json                    |  1 +
 power.json                   |  1 +
 pt_routes.json               |  1 +
 pt_stops.json                |  1 +
 public.json                  |  1 +
 railway-electrification.json |  1 +
 railway-infrastructure.json  |  1 +
 religion.json                |  1 +
 residential.json             |  1 +
 resources.json               |  1 +
 shop.json                    |  1 +
 sport.json                   |  1 +
 tourism_attractions.json     |  1 +
 tourism_services.json        |  1 +
 waste.json                   |  1 +
 water.json                   |  1 +
 wikipedia.json               |  1 +
 works.json                   |  1 +
 48 files changed, 67 insertions(+), 10 deletions(-)

diff --git a/administrative.json b/administrative.json
index 7f6bf0e..05bc2d1 100644
--- a/administrative.json
+++ b/administrative.json
@@ -11,6 +11,7 @@
         "hu": "Adminisztratív határok",
         "it": "Suddivisioni amministrative",
         "nl": "Administratieve gebieden",
+        "pt": "Regiões administrativas",
         "pt-br": "Divisão Político-Administrativa",
         "ro": "Zona administrativa",
         "ru": "Административные границы"
diff --git a/agriculture.json b/agriculture.json
index e7f2927..3777772 100644
--- a/agriculture.json
+++ b/agriculture.json
@@ -12,6 +12,7 @@
         "it": "Agricoltura",
         "ja": "農業",
         "nl": "Landbouw",
+        "pt": "Agricultura",
         "pt-br": "Agricultura",
         "ro": "Agricultura",
         "ru": "Сельское хозяйство"
diff --git a/alternative_routes.json b/alternative_routes.json
index f9ad554..019e49d 100644
--- a/alternative_routes.json
+++ b/alternative_routes.json
@@ -8,6 +8,7 @@
         "it": "Itinerari segnalati",
         "ja": "ルート",
         "nl": "Alternatieve routes",
+        "pt": "Rotas",
         "pt-br": "Rotas",
         "ru": "Маршруты",
         "uk": "Маршрути"
diff --git a/buildings.json b/buildings.json
index 17b49fa..eba8b83 100644
--- a/buildings.json
+++ b/buildings.json
@@ -4,6 +4,7 @@
         "de": "Gebäude",
         "en": "Buildings",
         "fr": "Bâtiments",
+        "pt": "Edifícios",
         "pt-br": "Edificações"
     },
     "query": {
diff --git a/car_furniture.json b/car_furniture.json
index 39cb629..9e64dc3 100644
--- a/car_furniture.json
+++ b/car_furniture.json
@@ -9,6 +9,7 @@
         "ja": "街路設置公共物",
         "nl": "Straatmeubilair",
         "pl": "Elementy drogowe",
+        "pt": "Mobiliário urbano",
         "pt-br": "Mobiliário Urbano",
         "ru": "Элементы дороги",
         "uk": "Street Furniture"
diff --git a/car_maxspeed.json b/car_maxspeed.json
index 4cd4929..5c5be40 100644
--- a/car_maxspeed.json
+++ b/car_maxspeed.json
@@ -4,6 +4,7 @@
         "de": "Höchstgeschwindigkeiten",
         "en": "Maxspeed",
         "fr": "Limites de vitesse",
+        "pt": "Velocidade máxima",
         "pt-br": "Velocidade Máxima"
     },
     "query": {
diff --git a/communication.json b/communication.json
index ca554a1..27f8372 100644
--- a/communication.json
+++ b/communication.json
@@ -13,6 +13,7 @@
         "it": "Communicazioni",
         "ja": "交流",
         "nl": "Communicatie",
+        "pt": "Comunicação",
         "pt-br": "Comunicação",
         "ro": "Comunicatii",
         "ru": "Услуги связи",
diff --git a/construction.json b/construction.json
index 97249d1..6a52740 100644
--- a/construction.json
+++ b/construction.json
@@ -9,6 +9,7 @@
         "it": "Cantieri",
         "ja": "工事中",
         "nl": "Bouwterrein",
+        "pt": "Locais de construção",
         "pt-br": "Terrenos e Obras",
         "ru": "Места строительства"
     },
diff --git a/craft.json b/craft.json
index 1c24c53..c1b119b 100644
--- a/craft.json
+++ b/craft.json
@@ -4,6 +4,7 @@
         "de": "Handwerk",
         "en": "Craft",
         "fr": "Artisanat",
+        "pt": "Artesanato",
         "pt-br": "Ofícios"
     },
     "query": {
diff --git a/culture.json b/culture.json
index aeb7220..9fd02fc 100644
--- a/culture.json
+++ b/culture.json
@@ -15,6 +15,7 @@
         "ja": "文化",
         "nl": "Cultuur",
         "pl": "Kultura",
+        "pt": "Cultura",
         "pt-br": "Cultura",
         "ro": "Cultura",
         "ru": "Культура",
diff --git a/culture_religion.json b/culture_religion.json
index 9ba32a8..ee1cd5d 100644
--- a/culture_religion.json
+++ b/culture_religion.json
@@ -15,6 +15,7 @@
         "ja": "文化",
         "nl": "Cultuur",
         "pl": "Kultura",
+        "pt": "Cultura e religião",
         "pt-br": "Cultura",
         "ro": "Cultura",
         "ru": "Культура",
diff --git a/cycle_routes.json b/cycle_routes.json
index 14cd4fa..581ed13 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -4,6 +4,7 @@
         "de": "Radrouten",
         "en": "Cycle Routes",
         "fr": "Itinéraires vélo",
+        "pt": "Ciclovias",
         "pt-br": "Ciclorrotas"
     },
     "query": {
diff --git a/education.json b/education.json
index 7b2ac9d..57bdc3d 100644
--- a/education.json
+++ b/education.json
@@ -12,6 +12,7 @@
         "ja": "教育サービス",
         "nl": "Onderwijs",
         "pl": "Edukacyjne",
+        "pt": "Educação",
         "pt-br": "Educação",
         "ro": "Servicii educatie",
         "ru": "Образование",
diff --git a/emergency.json b/emergency.json
index 0b39e12..acb39c6 100644
--- a/emergency.json
+++ b/emergency.json
@@ -13,6 +13,7 @@
         "it": "Servizi d'emergenza",
         "ja": "緊急サービス",
         "nl": "Hulpdiensten",
+        "pt": "Emergência",
         "pt-br": "Emergência",
         "ro": "Servicii urgenta",
         "ru": "Экстренные службы",
diff --git a/financial.json b/financial.json
index b8dc5b5..0320bbc 100644
--- a/financial.json
+++ b/financial.json
@@ -11,6 +11,7 @@
         "ja": "金融",
         "nl": "Financieel",
         "pl": "Finasowe",
+        "pt": "Finanças",
         "pt-br": "Finanças",
         "ro": "Financiar",
         "ru": "Финансы",
diff --git a/gastro-smoking.json b/gastro-smoking.json
index d7ac6ec..2bd2b6f 100644
--- a/gastro-smoking.json
+++ b/gastro-smoking.json
@@ -4,6 +4,7 @@
         "de": "Rauchfreie Gastronomie",
         "en": "Smokefree Gastronomy",
         "fr": "Restauration sans tabac",
+        "pt": "Restauração livre de tabaco",
         "pt-br": "Gastronomia sem fumo"
     },
     "query": {
diff --git a/gastro.json b/gastro.json
index c0c1298..028f8b3 100644
--- a/gastro.json
+++ b/gastro.json
@@ -12,6 +12,7 @@
         "ja": "食べ物",
         "nl": "Gastronomie",
         "pl": "Gastronomia",
+        "pt": "Restauração",
         "pt-br": "Gastronomia",
         "ro": "Gastronomie",
         "ru": "Общепит",
diff --git a/health.json b/health.json
index 92c8c91..4c9937f 100644
--- a/health.json
+++ b/health.json
@@ -11,6 +11,7 @@
         "ja": "健康",
         "nl": "Gezondheid",
         "pl": "Zdrowie",
+        "pt": "Saúde",
         "pt-br": "Saúde e Assistência",
         "ro": "Sanatate",
         "ru": "Медицина",
diff --git a/hiking_routes.json b/hiking_routes.json
index 16bcd05..ef7828a 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -4,6 +4,7 @@
         "de": "Wanderrouten",
         "en": "Hiking routes",
         "fr": "Itinéraires pédestres",
+        "pt": "Rotas de caminhada",
         "pt-br": "Rotas de Caminhada"
     },
     "query": {
diff --git a/historic.json b/historic.json
index 48e2727..815f955 100644
--- a/historic.json
+++ b/historic.json
@@ -13,6 +13,7 @@
         "ja": "記念",
         "nl": "Historisch",
         "pl": "Miejsca Historyczne",
+        "pt": "Histórico",
         "pt-br": "Histórico",
         "ro": "Istoric",
         "ru": "Историческое",
diff --git a/index.json b/index.json
index 1b5b475..b855d85 100644
--- a/index.json
+++ b/index.json
@@ -22,7 +22,8 @@
                 "ro": "Timp liber, Sport si Cumparaturi",
                 "ru": "Досуг",
                 "uk": "Дозвілля",
-                "pt-br": "Lazer, Esportes e Compras"
+                "pt-br": "Lazer, Esportes e Compras",
+                "pt": "Lazer, desporto e compras"
             },
             "subCategories": [
                 {
@@ -66,7 +67,8 @@
                 "ro": "Servicii",
                 "ru": "Услуги",
                 "uk": "Послуги",
-                "pt-br": "Serviços"
+                "pt-br": "Serviços",
+                "pt": "Serviços"
             },
             "subCategories": [
                 {
@@ -114,7 +116,8 @@
                 "ro": "Transport",
                 "ru": "Транспорт",
                 "uk": "Транспорт",
-                "pt-br": "Transportes"
+                "pt-br": "Transportes",
+                "pt": "Transportes"
             },
             "subCategories": [
                 {
@@ -124,7 +127,8 @@
                         "de": "Zu Fuß gehen",
                         "en": "Walking",
                         "fr": "Marche à pied",
-                        "pt-br": "Pedestre"
+                        "pt-br": "Pedestre",
+                        "pt": "Pedestre"
                     },
                     "subCategories": [
                         {
@@ -142,7 +146,8 @@
                         "de": "Radfahren",
                         "en": "Cycling",
                         "fr": "Cyclisme",
-                        "pt-br": "Ciclismo"
+                        "pt-br": "Ciclismo",
+                        "pt": "Ciclismo"
                     },
                     "subCategories": [
                         {
@@ -172,7 +177,8 @@
                         "ro": "Transport public",
                         "ru": "Общественный транспорт",
                         "uk": "Громадський транспорт",
-                        "pt-br": "Transporte Público"
+                        "pt-br": "Transporte Público",
+                        "pt": "Transportes públicos"
                     },
                     "subCategories": [
                         {
@@ -202,7 +208,8 @@
                         "ro": "Trafic individual",
                         "ru": "Частный транспорт",
                         "uk": "Приватний транспорт",
-                        "pt-br": "Tráfego Individual"
+                        "pt-br": "Tráfego Individual",
+                        "pt": "Transporte individual"
                     },
                     "subCategories": [
                         {
@@ -222,7 +229,8 @@
                 "de": "Infrastruktur",
                 "en": "Infrastructure",
                 "fr": "Infrastructures",
-                "pt-br": "Infraestrutura"
+                "pt-br": "Infraestrutura",
+                "pt": "Infraestrutura"
             },
             "subCategories": [
                 {
@@ -252,7 +260,8 @@
                         "ja": "鉄道",
                         "nl": "Spoorwegen",
                         "ru": "Железные дороги",
-                        "pt-br": "Ferrovia"
+                        "pt-br": "Ferrovia",
+                        "pt": "Linhas ferroviárias"
                     },
                     "subCategories": [
                         {
@@ -287,7 +296,8 @@
                 "en": "Special",
                 "de": "Spezial",
                 "pt-br": "Especial",
-                "fr": "Catégories spéciales"
+                "fr": "Catégories spéciales",
+                "pt": "Especial"
             },
             "subCategories": [
                 {
diff --git a/internet.json b/internet.json
index 1bafbe4..04454ce 100644
--- a/internet.json
+++ b/internet.json
@@ -10,6 +10,7 @@
         "hu": "Internethozzáférés",
         "ja": "インターネット接続",
         "nl": "Internettoegang",
+        "pt": "Acesso à Internet",
         "pt-br": "Acesso à Internet",
         "ro": "Acces internet"
     }
diff --git a/leisure.json b/leisure.json
index 2dfbcf2..2dca403 100644
--- a/leisure.json
+++ b/leisure.json
@@ -10,6 +10,7 @@
         "it": "Tempo libero",
         "ja": "レジャー",
         "nl": "Vrije tijd",
+        "pt": "Lazer",
         "pt-br": "Lazer",
         "ro": "Timp liber",
         "ru": "Досуг",
diff --git a/military.json b/military.json
index 9c3e3ce..602868c 100644
--- a/military.json
+++ b/military.json
@@ -11,6 +11,7 @@
         "it": "Militare",
         "ja": "軍事",
         "nl": "Militair",
+        "pt": "Militar",
         "pt-br": "Militar",
         "ro": "Militar",
         "ru": "Вооружённые силы"
diff --git a/natural.json b/natural.json
index ec35b9f..4faac84 100644
--- a/natural.json
+++ b/natural.json
@@ -11,6 +11,7 @@
         "it": "Natura",
         "ja": "自然地層",
         "nl": "Natuurlijke Formaties",
+        "pt": "Formações naturais",
         "pt-br": "Formações Naturais",
         "ru": "Природные образования",
         "uk": "Природне середовище"
diff --git a/other.json b/other.json
index 8ea0472..dc04ed9 100644
--- a/other.json
+++ b/other.json
@@ -10,6 +10,7 @@
         "it": "Altri",
         "ja": "その他",
         "nl": "Andere",
+        "pt": "Outros",
         "pt-br": "Outros",
         "ro": "Altele",
         "ru": "Прочее",
diff --git a/phone.json b/phone.json
index a2554e1..50ac08a 100644
--- a/phone.json
+++ b/phone.json
@@ -9,6 +9,7 @@
         "hu": "Telefon",
         "ja": "電話",
         "nl": "Telefonie",
+        "pt": "Telefone",
         "pt-br": "Telefone",
         "ro": "Telefon"
     }
diff --git a/places.json b/places.json
index f0fc803..2ca3d01 100644
--- a/places.json
+++ b/places.json
@@ -13,6 +13,7 @@
         "ja": "場所",
         "nl": "Plaatsen",
         "pl": "Miejsca",
+        "pt": "Lugares",
         "pt-br": "Lugares",
         "ro": "Locuri",
         "ru": "Места",
diff --git a/places_geo.json b/places_geo.json
index e83a837..4e871ff 100644
--- a/places_geo.json
+++ b/places_geo.json
@@ -13,6 +13,7 @@
         "ja": "場所",
         "nl": "Plaatsen",
         "pl": "Miejsca",
+        "pt": "Lugares",
         "pt-br": "Lugares",
         "ro": "Locuri",
         "ru": "Места",
diff --git a/playgrounds.json b/playgrounds.json
index 79802ee..789cf3e 100644
--- a/playgrounds.json
+++ b/playgrounds.json
@@ -6,6 +6,7 @@
         "en": "Playground",
         "et": "Mänguväljak",
         "fr": "Jeux pour enfants",
+        "pt": "Parques infantis",
         "pt-br": "Parquinhos",
         "ro": "Loc de joaca",
         "uk": "Дитячий майданчик"
diff --git a/post.json b/post.json
index 1e851be..90b660c 100644
--- a/post.json
+++ b/post.json
@@ -7,6 +7,7 @@
         "hu": "Posta",
         "ja": "郵便",
         "nl": "Post",
+        "pt": "Correios",
         "pt-br": "Correios"
     }
 }
diff --git a/power.json b/power.json
index b833d32..4be4028 100644
--- a/power.json
+++ b/power.json
@@ -11,6 +11,7 @@
         "it": "Energia",
         "ja": "電力",
         "nl": "Stroomvoorziening",
+        "pt": "Eletricidade",
         "pt-br": "Energia",
         "ro": "Energie",
         "ru": "Энергетика"
diff --git a/pt_routes.json b/pt_routes.json
index 6f8f365..dbcf8df 100644
--- a/pt_routes.json
+++ b/pt_routes.json
@@ -4,6 +4,7 @@
         "de": "Routen",
         "en": "Routes",
         "fr": "Lignes",
+        "pt": "Rotas",
         "pt-br": "Rotas"
     },
     "query": {
diff --git a/pt_stops.json b/pt_stops.json
index 0905b23..97b35d9 100644
--- a/pt_stops.json
+++ b/pt_stops.json
@@ -13,6 +13,7 @@
         "ja": "停留所と駅",
         "nl": "Haltes en Stations",
         "pl": "Przystanki i Stacje",
+        "pt": "Paragens e estações",
         "pt-br": "Paradas e Estações",
         "ru": "Остановки и станции",
         "uk": "Зупинки та станції"
diff --git a/public.json b/public.json
index 2678071..55c4c18 100644
--- a/public.json
+++ b/public.json
@@ -11,6 +11,7 @@
         "it": "Servizi pubblici",
         "ja": "公共サービス",
         "nl": "Openbare diensten",
+        "pt": "Serviços públicos",
         "pt-br": "Serviços Públicos",
         "ro": "Servicii publice",
         "ru": "Общественные места",
diff --git a/railway-electrification.json b/railway-electrification.json
index 72a6941..20d340c 100644
--- a/railway-electrification.json
+++ b/railway-electrification.json
@@ -4,6 +4,7 @@
         "de": "Eisenbahn Elektrifizierung",
         "en": "Railway electrification",
         "fr": "Puissance électrique ferroviaire",
+        "pt": "Eletrificação ferroviária",
         "pt-br": "Eletrificação Ferroviária"
     },
     "query": {
diff --git a/railway-infrastructure.json b/railway-infrastructure.json
index a33e91e..d5cd252 100644
--- a/railway-infrastructure.json
+++ b/railway-infrastructure.json
@@ -4,6 +4,7 @@
         "de": "Eisenbahn Infrastruktur",
         "en": "Railway infrastructure",
         "fr": "Infrastructure ferroviaire",
+        "pt": "Infraestrutura ferroviária",
         "pt-br": "Infraestrutura Ferroviária"
     },
     "query": {
diff --git a/religion.json b/religion.json
index 9da14ab..967b59e 100644
--- a/religion.json
+++ b/religion.json
@@ -12,6 +12,7 @@
         "it": "Religione",
         "ja": "宗教",
         "nl": "Religie",
+        "pt": "Religião",
         "pt-br": "Religião",
         "ro": "Religie",
         "ru": "Религия",
diff --git a/residential.json b/residential.json
index 23278be..cb97078 100644
--- a/residential.json
+++ b/residential.json
@@ -12,6 +12,7 @@
         "it": "Aree residenziali",
         "ja": "住居エリア",
         "nl": "Woongebieden",
+        "pt": "Áreas residenciais",
         "pt-br": "Áreas Residenciais",
         "ro": "Zona rezidentiala",
         "ru": "Жилые районы",
diff --git a/resources.json b/resources.json
index cf2f4e4..e0f8436 100644
--- a/resources.json
+++ b/resources.json
@@ -8,6 +8,7 @@
         "fr": "Extraction des ressources",
         "it": "Areee estrattive",
         "nl": "Grondstoffenwinning",
+        "pt": "Extração de recursos",
         "pt-br": "Extração de Recursos",
         "ru": "Добыча ресурсов"
     },
diff --git a/shop.json b/shop.json
index b99c127..ce8c8cb 100644
--- a/shop.json
+++ b/shop.json
@@ -13,6 +13,7 @@
         "ja": "ショッピング",
         "nl": "Winkelen",
         "pl": "Zakupy",
+        "pt": "Compras",
         "pt-br": "Compras",
         "ro": "Cumpărături",
         "ru": "Покупки",
diff --git a/sport.json b/sport.json
index 50ee5b0..2caadbc 100644
--- a/sport.json
+++ b/sport.json
@@ -11,6 +11,7 @@
         "it": "Sport",
         "ja": "スポーツ",
         "nl": "Sport",
+        "pt": "Desporto",
         "pt-br": "Esportes",
         "ru": "Спорт",
         "uk": "Спорт. Інше."
diff --git a/tourism_attractions.json b/tourism_attractions.json
index 0df04af..f9a36f3 100644
--- a/tourism_attractions.json
+++ b/tourism_attractions.json
@@ -13,6 +13,7 @@
         "ja": "観光",
         "nl": "Toerisme",
         "pl": "Turystyka",
+        "pt": "Turismo",
         "pt-br": "Turismo",
         "ro": "Turism",
         "ru": "Туризм",
diff --git a/tourism_services.json b/tourism_services.json
index 910dbb8..e7a0fb6 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -13,6 +13,7 @@
         "ja": "観光",
         "nl": "Toerisme",
         "pl": "Turystyka",
+        "pt": "Turismo",
         "pt-br": "Turismo",
         "ro": "Turism",
         "ru": "Туризм",
diff --git a/waste.json b/waste.json
index 00fd5d7..662e2c7 100644
--- a/waste.json
+++ b/waste.json
@@ -9,6 +9,7 @@
         "it": "Smaltimento",
         "ja": "処理場",
         "nl": "Afvalverwijdering",
+        "pt": "Lixo",
         "pt-br": "Lixo",
         "ru": "Переработка отходов"
     },
diff --git a/water.json b/water.json
index a601e01..137f0b9 100644
--- a/water.json
+++ b/water.json
@@ -4,6 +4,7 @@
         "de": "Gewässer",
         "en": "Waterbodies",
         "fr": "Hydrographie",
+        "pt": "Massas de água",
         "pt-br": "Hidrografia"
     },
     "query": {
diff --git a/wikipedia.json b/wikipedia.json
index a3babd5..72bcf0d 100644
--- a/wikipedia.json
+++ b/wikipedia.json
@@ -4,6 +4,7 @@
         "de": "Wikipedia",
         "en": "Wikipedia",
         "fr": "Wikipédia",
+        "pt": "Wikipédia",
         "pt-br": "Wikipédia"
     },
     "query": {
diff --git a/works.json b/works.json
index 9906f29..75bc26e 100644
--- a/works.json
+++ b/works.json
@@ -9,6 +9,7 @@
         "it": "Fabbriche",
         "ja": "工場",
         "nl": "Fabrieken",
+        "pt": "Fábricas",
         "pt-br": "Fábricas",
         "ru": "Промышленность"
     },

From c74852a03b1b74b9cead5c9dc6e0dc0519b1522d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 5 Jul 2018 09:17:54 +0200
Subject: [PATCH 03/44] lint

---
 agriculture.json      | 2 +-
 car_amenities.json    | 5 ++---
 emergency.json        | 2 +-
 health.json           | 2 +-
 historic.json         | 2 +-
 tourism_services.json | 2 +-
 6 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/agriculture.json b/agriculture.json
index 3777772..7ef928f 100644
--- a/agriculture.json
+++ b/agriculture.json
@@ -38,4 +38,4 @@
             "{% endif %}"
         ]
     }
-}
\ No newline at end of file
+}
diff --git a/car_amenities.json b/car_amenities.json
index 67daf23..9351fee 100644
--- a/car_amenities.json
+++ b/car_amenities.json
@@ -43,10 +43,9 @@
         "car_rental": "R",
         "car_sharing": "S",
         "car_wash": "🚿",
-        "charging_station": "🔌 ",
+        "charging_station": "🔌",
         "fuel": "⛽",
         "parking": "🅿",
-        "motorcycle_parking": "🅿",
-        "charging_station": "🔌"
+        "motorcycle_parking": "🅿"
     }
 }
diff --git a/emergency.json b/emergency.json
index acb39c6..2889d1e 100644
--- a/emergency.json
+++ b/emergency.json
@@ -84,4 +84,4 @@
             "sign": "📞"
         }
     }
-}
\ No newline at end of file
+}
diff --git a/health.json b/health.json
index 4c9937f..f35801e 100644
--- a/health.json
+++ b/health.json
@@ -88,4 +88,4 @@
         "amenity=social_facility": "",
         "amenity=veterinary": "<img src='maki:veterinary'>"
     }
-}
\ No newline at end of file
+}
diff --git a/historic.json b/historic.json
index 815f955..76c2e27 100644
--- a/historic.json
+++ b/historic.json
@@ -83,4 +83,4 @@
             "zoom": 11
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tourism_services.json b/tourism_services.json
index e7a0fb6..680c183 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -97,4 +97,4 @@
             "zoom": 16
         }
     }
-}
\ No newline at end of file
+}

From e40239f646df4d59462d77f3148bb628908963d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 10 Jul 2018 13:43:03 +0200
Subject: [PATCH 04/44] Replace pt_routes/pt_stops by new pt category

---
 index.json                | 33 +-------------------------
 pt_routes.json => pt.json | 48 ++++++++++++++++++++++++++++++++++++++
 pt_stops.json             | 49 ---------------------------------------
 3 files changed, 49 insertions(+), 81 deletions(-)
 rename pt_routes.json => pt.json (54%)
 delete mode 100644 pt_stops.json

diff --git a/index.json b/index.json
index b855d85..9bc3268 100644
--- a/index.json
+++ b/index.json
@@ -159,38 +159,7 @@
                     ]
                 },
                 {
-                    "id": "transport_pt",
-                    "type": "index",
-                    "name": {
-                        "ast": "Tresporte Públicu",
-                        "cs": "Veřejná doprava",
-                        "de": "Öffentlicher Verkehr",
-                        "el": "Δημόσιες Μεταφορές",
-                        "en": "Public Transportation",
-                        "et": "Ühistransport",
-                        "fr": "Transports publics",
-                        "hu": "Tömegközlekedés",
-                        "it": "Trasporti pubblici",
-                        "ja": "公共輸送",
-                        "nl": "Openbaar vervoer",
-                        "pl": "Transport Publiczny",
-                        "ro": "Transport public",
-                        "ru": "Общественный транспорт",
-                        "uk": "Громадський транспорт",
-                        "pt-br": "Transporte Público",
-                        "pt": "Transportes públicos"
-                    },
-                    "subCategories": [
-                        {
-                            "id": "pt_amenities"
-                        },
-                        {
-                            "id": "pt_stops"
-                        },
-                        {
-                            "id": "pt_routes"
-                        }
-                    ]
+                    "id": "pt"
                 },
                 {
                     "id": "transport_car",
diff --git a/pt_routes.json b/pt.json
similarity index 54%
rename from pt_routes.json
rename to pt.json
index dbcf8df..1ac160d 100644
--- a/pt_routes.json
+++ b/pt.json
@@ -1,6 +1,25 @@
 {
     "type": "overpass",
     "name": {
+        "ast": "Tresporte Públicu",
+        "cs": "Veřejná doprava",
+        "de": "Öffentlicher Verkehr",
+        "el": "Δημόσιες Μεταφορές",
+        "en": "Public Transportation",
+        "et": "Ühistransport",
+        "fr": "Transports publics",
+        "hu": "Tömegközlekedés",
+        "it": "Trasporti pubblici",
+        "ja": "公共輸送",
+        "nl": "Openbaar vervoer",
+        "pl": "Transport Publiczny",
+        "ro": "Transport public",
+        "ru": "Общественный транспорт",
+        "uk": "Громадський транспорт",
+        "pt-br": "Transporte Público",
+        "pt": "Transportes públicos"
+    },
+    "name_routes": {
         "de": "Routen",
         "en": "Routes",
         "fr": "Lignes",
@@ -11,13 +30,23 @@
         "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
         "14": "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];"
     },
+    "members": true,
     "feature": {
+        "styles": "",
         "title": [
             "{% if tags.ref %}{{ tags.ref }} - {% endif %}",
             "",
             "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) | default(localizedTag(tags, 'ref')) | default(trans('unnamed')) }}"
         ],
         "description": "{{ tagTrans('route', tags.route) }}",
+        "body": [
+            "<h4>Stops</h4>",
+            "{% for member in members %}",
+            "{% if member.role|slice(-4) == 'stop' %}",
+            "<div object='{{ member.id }}' sublayer='member'><b>{{ member.tags.name }}</b></div>",
+            "{% endif %}",
+            "{% endfor %}"
+        ],
         "listMarkerSign": "{{ const[tags.route].sign|raw }}",
         "markerSymbol": null,
         "listMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
@@ -25,6 +54,25 @@
             "color": "{{ const[tags.route].color }}"
         }
     },
+    "memberFeature": {
+        "listMarkerSymbol": "{{ markerCircle({})|raw }}",
+        "style": {
+            "color": [
+                "{% set master = masters[0] %}",
+                "{{ {'subway':'#0000ff','tram':'#007fff','trolley':'#ff007f','bus':'#ff0000'}[master.tags.route]|default('#000000') }}"
+            ],
+            "width": "{% if map.zoom>=15 %}5{% else %}3{% endif %}"
+        },
+        "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name }}{% endif %}",
+        "listStopsTitle": "{{ tags.name }}: {% for master in masters %}{{ master.tags.ref }} {% endfor %}",
+        "body": [
+            "{% for master in masters %}",
+            "      '<div object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> ({{ master.id }})</div>",
+            "{% endfor %}"
+        ],
+        "listRoutesExclude": "true",
+        "listStopsExclude": "{% set isStop = 0 %}{% for master in masters %}{% if master.role|slice(-4) == 'stop' %}{% set isStop = 1 %}{% endif %}{% endfor %}{{ not isStop }}"
+    },
     "info": [
         "<table>",
         "{% for value, data in const %}",
diff --git a/pt_stops.json b/pt_stops.json
deleted file mode 100644
index 97b35d9..0000000
--- a/pt_stops.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Paraes y estaciones",
-        "cs": "Zastávky & Stanice",
-        "de": "Haltestellen",
-        "el": "Στάσεις & Σταθμοί",
-        "en": "Stops & Stations",
-        "es": "Paradas y estaciones",
-        "fr": "Arrêts/Stops, Stations",
-        "hu": "Megállók és állomások",
-        "it": "Stazioni e fermate",
-        "ja": "停留所と駅",
-        "nl": "Haltes en Stations",
-        "pl": "Przystanki i Stacje",
-        "pt": "Paragens e estações",
-        "pt-br": "Paradas e Estações",
-        "ru": "Остановки и станции",
-        "uk": "Зупинки та станції"
-    },
-    "query": {
-        "14": [
-            "(",
-            "node[railway~\"^(station|halt|tram_stop|platform)$\"];",
-            "way[railway~\"^(station|platform)$\"];",
-            "node[highway~\"^(bus_stop|platform)$\"];",
-            "way[highway~\"^(platform)$\"];",
-            "node[public_transport~\"^(stop_position|platform)$\"];",
-            "way[public_transport~\"^(platform)$\"];",
-            "node[amenity~\"^(ferry_terminal|bus_station)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity in [ 'ferry_terminal', 'bus_station' ] %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% elseif tags.railway == 'platform' or tags.highway == 'platform' or tags.public_transport == 'platform' %}",
-            "  {% set key = 'public_transport' %}",
-            "  {% set value = 'platform' %}",
-            "{% else %}",
-            "  {% set key = 'public_transport' %}",
-            "  {% set value = 'stop_position' %}",
-            "{% endif %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}"
-    }
-}

From 8c4fc6f64e8eba7f2eedd6bbd1996a3dfe53f5b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 11 Jul 2018 10:12:11 +0200
Subject: [PATCH 05/44] pt: fixes

---
 pt.json | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/pt.json b/pt.json
index 1ac160d..ee10b35 100644
--- a/pt.json
+++ b/pt.json
@@ -49,17 +49,14 @@
         ],
         "listMarkerSign": "{{ const[tags.route].sign|raw }}",
         "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
-        "style": {
-            "color": "{{ const[tags.route].color }}"
-        }
+        "listMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}"
     },
     "memberFeature": {
         "listMarkerSymbol": "{{ markerCircle({})|raw }}",
         "style": {
             "color": [
                 "{% set master = masters[0] %}",
-                "{{ {'subway':'#0000ff','tram':'#007fff','trolley':'#ff007f','bus':'#ff0000'}[master.tags.route]|default('#000000') }}"
+                "{{ const[master.tags.route].color|default('#ff0000') }}"
             ],
             "width": "{% if map.zoom>=15 %}5{% else %}3{% endif %}"
         },

From 2d1ca4dfe5b45e8e40be35a854fce61eadfa0bc8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 11 Jul 2018 10:45:50 +0200
Subject: [PATCH 06/44] pt: improve colors

---
 pt.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pt.json b/pt.json
index ee10b35..0ed5eb1 100644
--- a/pt.json
+++ b/pt.json
@@ -86,12 +86,12 @@
         "train": {
             "sign": "<img src='maki:rail?fill=#ffffff'>",
             "zoom": 12,
-            "color": "#202020"
+            "color": "#00007f"
         },
         "subway": {
             "sign": "<img src='maki:rail-metro?fill=#ffffff'>",
             "zoom": 12,
-            "color": "#00007f"
+            "color": "#0000ff"
         },
         "monorail": {
             "sign": "<span style='color: #ffffff'>M</span>",

From 371ca42047cf625bcb8802cd48ad102ffd7eac30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 11 Jul 2018 21:49:08 +0200
Subject: [PATCH 07/44] pt: sub lists

---
 pt.json | 50 ++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 38 insertions(+), 12 deletions(-)

diff --git a/pt.json b/pt.json
index 0ed5eb1..29cbfa7 100644
--- a/pt.json
+++ b/pt.json
@@ -19,18 +19,43 @@
         "pt-br": "Transporte Público",
         "pt": "Transportes públicos"
     },
-    "name_routes": {
-        "de": "Routen",
-        "en": "Routes",
-        "fr": "Lignes",
-        "pt": "Rotas",
-        "pt-br": "Rotas"
-    },
     "query": {
         "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
         "14": "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];"
     },
     "members": true,
+    "lists": {
+        "stops": {
+            "prefix": "listStops",
+	    "name": {
+		"ast": "Paraes y estaciones",
+		"cs": "Zastávky & Stanice",
+		"de": "Haltestellen",
+		"el": "Στάσεις & Σταθμοί",
+		"en": "Stops & Stations",
+		"es": "Paradas y estaciones",
+		"fr": "Arrêts/Stops, Stations",
+		"hu": "Megállók és állomások",
+		"it": "Stazioni e fermate",
+		"ja": "停留所と駅",
+		"nl": "Haltes en Stations",
+		"pl": "Przystanki i Stacje",
+		"pt-br": "Paradas e Estações",
+		"ru": "Остановки и станции",
+		"uk": "Зупинки та станції"
+	    }
+        },
+        "routes": {
+            "prefix": "listRoutes",
+            "name": {
+                "de": "Routen",
+                "en": "Routes",
+                "fr": "Lignes",
+                "pt": "Rotas",
+                "pt-br": "Rotas"
+            }
+        }
+    },
     "feature": {
         "styles": "",
         "title": [
@@ -40,19 +65,20 @@
         ],
         "description": "{{ tagTrans('route', tags.route) }}",
         "body": [
-            "<h4>Stops</h4>",
+            "<h4>Stops {{ map.zoom }}</h4>",
             "{% for member in members %}",
             "{% if member.role|slice(-4) == 'stop' %}",
             "<div object='{{ member.id }}' sublayer='member'><b>{{ member.tags.name }}</b></div>",
             "{% endif %}",
             "{% endfor %}"
         ],
-        "listMarkerSign": "{{ const[tags.route].sign|raw }}",
+	"listStopsExclude": "true",
+        "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
         "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}"
+        "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}"
     },
     "memberFeature": {
-        "listMarkerSymbol": "{{ markerCircle({})|raw }}",
+        "listStopsMarkerSymbol": "{{ markerCircle({})|raw }}",
         "style": {
             "color": [
                 "{% set master = masters[0] %}",
@@ -61,7 +87,7 @@
             "width": "{% if map.zoom>=15 %}5{% else %}3{% endif %}"
         },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name }}{% endif %}",
-        "listStopsTitle": "{{ tags.name }}: {% for master in masters %}{{ master.tags.ref }} {% endfor %}",
+        "listStopsTitle": "{{ tags.name }}<br/>{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
         "body": [
             "{% for master in masters %}",
             "      '<div object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> ({{ master.id }})</div>",

From fdf93ee86e3327e6b23e9fe4e6a6d342c613b03c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Thu, 12 Jul 2018 08:03:15 +0200
Subject: [PATCH 08/44] railway-infrastructure: localization for service tag

---
 railway-infrastructure.json | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/railway-infrastructure.json b/railway-infrastructure.json
index d5cd252..722a78b 100644
--- a/railway-infrastructure.json
+++ b/railway-infrastructure.json
@@ -18,10 +18,9 @@
         "body": [
             "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br>{% endif %}",
             "{% if tags.usage %}{{ keyTrans('usage') }}: {{ tagTrans('usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",
-            "{% if tags.service %}{{ keyTrans('service') }}: {{ tagTrans('service', tags.service ) }}<br/>{% endif %}",
+            "{% if tags.service %}{{ keyTrans('railway=rail service') }}: {{ tagTrans('railway=rail service', tags.service ) }}<br/>{% endif %}",
             "{{ keyTrans('gauge') }}: {{ tags.gauge|default(trans('unknown')) }}<br/>",
-            "{% if tags.electrified == 'no' %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', 'no') }}{% elseif tags.electrified %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', tags.electrified) }}, {{ keyTrans('voltage') }}: {{ tags.voltage|default(trans('unknown')) }}, {{ keyTrans('frequency') }}: {{ tags.frequency|default(trans('unknown')) }}<br/>{% endif %}",
-            ""
+            "{% if tags.electrified == 'no' %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', 'no') }}{% elseif tags.electrified %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', tags.electrified) }}, {{ keyTrans('voltage') }}: {{ tags.voltage|default(trans('unknown')) }}, {{ keyTrans('frequency') }}: {{ tags.frequency|default(trans('unknown')) }}<br/>{% endif %}"
         ],
         "markerSign": "{% if tags.railway in [ 'halt', 'tram_stop', 'station', 'stop', 'subway_entrance' ] %}X{% endif %}",
         "markerSymbol": [
@@ -145,4 +144,4 @@
         "{% endif %}",
         "</table>"
     ]
-}
+}
\ No newline at end of file

From bcfeb519cb20c7419a3d1a6a2b41eaff156bfa3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 12 Jul 2018 20:48:23 +0200
Subject: [PATCH 09/44] railway-infrastructure: localization for usage tag

---
 railway-infrastructure.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/railway-infrastructure.json b/railway-infrastructure.json
index 722a78b..bc17df1 100644
--- a/railway-infrastructure.json
+++ b/railway-infrastructure.json
@@ -17,7 +17,7 @@
         "description": "{{ tagTrans('railway', tags.railway) }}",
         "body": [
             "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br>{% endif %}",
-            "{% if tags.usage %}{{ keyTrans('usage') }}: {{ tagTrans('usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",
+            "{% if tags.usage %}{{ keyTrans('railway=rail usage') }}: {{ tagTrans('railway=rail usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",
             "{% if tags.service %}{{ keyTrans('railway=rail service') }}: {{ tagTrans('railway=rail service', tags.service ) }}<br/>{% endif %}",
             "{{ keyTrans('gauge') }}: {{ tags.gauge|default(trans('unknown')) }}<br/>",
             "{% if tags.electrified == 'no' %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', 'no') }}{% elseif tags.electrified %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', tags.electrified) }}, {{ keyTrans('voltage') }}: {{ tags.voltage|default(trans('unknown')) }}, {{ keyTrans('frequency') }}: {{ tags.frequency|default(trans('unknown')) }}<br/>{% endif %}"

From 1acb3fd7f84145f4bf13d75a4f03d934117c474b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 12 Jul 2018 20:48:53 +0200
Subject: [PATCH 10/44] railway-infrastructure: include usage=* and service=*
 in description

---
 railway-infrastructure.json | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/railway-infrastructure.json b/railway-infrastructure.json
index bc17df1..1e8a258 100644
--- a/railway-infrastructure.json
+++ b/railway-infrastructure.json
@@ -14,7 +14,15 @@
     },
     "feature": {
         "title": "{% if tags.ref %}{{ localizedTag(tags, 'ref') }} - {% endif %}{{ localizedTag(tags, 'name')|default(localizedTag(tags, 'operator'))|default(trans('unnamed')) }}",
-        "description": "{{ tagTrans('railway', tags.railway) }}",
+        "description": [
+            "{{ tagTrans('railway', tags.railway) -}}",
+            "{%- if tags.usage %}",
+            ", {{ tagTrans('railway=rail usage', tags.usage) }}",
+            "{% endif -%}",
+            "{%- if tags.service %}",
+            ", {{ tagTrans('railway=rail service', tags.service) }}",
+            "{% endif -%}"
+        ],
         "body": [
             "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br>{% endif %}",
             "{% if tags.usage %}{{ keyTrans('railway=rail usage') }}: {{ tagTrans('railway=rail usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",

From 89b8bb41c9934e90e4f9135920f90c145b8318ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 15 Jul 2018 08:43:02 +0200
Subject: [PATCH 11/44] pt: improvements

- use data-object instead of object
---
 pt.json | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/pt.json b/pt.json
index 29cbfa7..aee7bc3 100644
--- a/pt.json
+++ b/pt.json
@@ -65,12 +65,13 @@
         ],
         "description": "{{ tagTrans('route', tags.route) }}",
         "body": [
-            "<h4>Stops {{ map.zoom }}</h4>",
+            "<h4>Stops</h4><ul>",
             "{% for member in members %}",
             "{% if member.role|slice(-4) == 'stop' %}",
-            "<div object='{{ member.id }}' sublayer='member'><b>{{ member.tags.name }}</b></div>",
+            "<li data-object='{{ member.id }}' data-sublayer='member'><b>{{ member.tags.name|default(member.id) }}</li>",
             "{% endif %}",
-            "{% endfor %}"
+            "{% endfor %}",
+            "</ul>"
         ],
 	"listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
@@ -87,11 +88,15 @@
             "width": "{% if map.zoom>=15 %}5{% else %}3{% endif %}"
         },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name }}{% endif %}",
-        "listStopsTitle": "{{ tags.name }}<br/>{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
+        "listStopsTitle": "{{ tags.name }}",
+        "listStopsDescription": "{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
         "body": [
+            "<h4>Routes</h4>",
+            "<ul>",
             "{% for master in masters %}",
-            "      '<div object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> ({{ master.id }})</div>",
-            "{% endfor %}"
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</li>",
+            "{% endfor %}",
+            "</ul>"
         ],
         "listRoutesExclude": "true",
         "listStopsExclude": "{% set isStop = 0 %}{% for master in masters %}{% if master.role|slice(-4) == 'stop' %}{% set isStop = 1 %}{% endif %}{% endfor %}{{ not isStop }}"

From 2338dfdd29dacce96975c29a3d846c5ec158aeca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 15 Jul 2018 21:35:03 +0200
Subject: [PATCH 12/44] pt: show route refs on ways

---
 pt.json | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/pt.json b/pt.json
index aee7bc3..3e3e9c5 100644
--- a/pt.json
+++ b/pt.json
@@ -85,7 +85,11 @@
                 "{% set master = masters[0] %}",
                 "{{ const[master.tags.route].color|default('#ff0000') }}"
             ],
-            "width": "{% if map.zoom>=15 %}5{% else %}3{% endif %}"
+            "width": "3",
+            "text": "{% for master in masters %}{{ master.tags.ref }}  {% endfor %}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
         },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name }}{% endif %}",
         "listStopsTitle": "{{ tags.name }}",

From 3b8466b204bd90be8518c8e800c2435ca6ee1555 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 15 Jul 2018 21:52:56 +0200
Subject: [PATCH 13/44] pt: also load stop_areas, use relation name if
 stop_position has no name

- missing: stop list of a route does not evaluate stop_areas
---
 pt.json | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/pt.json b/pt.json
index 3e3e9c5..2f76edc 100644
--- a/pt.json
+++ b/pt.json
@@ -21,7 +21,12 @@
     },
     "query": {
         "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
-        "14": "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];"
+        "14": [
+            "(",
+            "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];",
+            "relation[type=public_transport][public_transport=stop_area];",
+            ")"
+        ]
     },
     "members": true,
     "lists": {
@@ -57,6 +62,8 @@
         }
     },
     "feature": {
+        "pre": "{% set isStopArea = tags.public_transport == 'stop_area' %}",
+        "listRoutesExclude": "{{ isStopArea }}",
         "styles": "",
         "title": [
             "{% if tags.ref %}{{ tags.ref }} - {% endif %}",
@@ -79,6 +86,14 @@
         "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}"
     },
     "memberFeature": {
+        "pre": [
+            "{% set stopName = '' %}",
+            "{% for master in masters %}",
+            "  {% if master.tags.public_transport == 'stop_area' %}",
+            "  {% set stopName = master.tags.name %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
         "listStopsMarkerSymbol": "{{ markerCircle({})|raw }}",
         "style": {
             "color": [
@@ -91,14 +106,16 @@
             "textOffset": "12",
             "textFontWeight": "bold"
         },
-        "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name }}{% endif %}",
-        "listStopsTitle": "{{ tags.name }}",
+        "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
+        "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
         "listStopsDescription": "{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
         "body": [
             "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
+            "  {% if master.tags.public_transport != 'stop_area' %}",
             "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</li>",
+            "  {% endif %}",
             "{% endfor %}",
             "</ul>"
         ],

From 01997790e513776bc8fde41e0c82ff82ca841bff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 15 Jul 2018 22:11:46 +0200
Subject: [PATCH 14/44] pt: different styles for stop, way, platform

---
 pt.json | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/pt.json b/pt.json
index 2f76edc..838c83c 100644
--- a/pt.json
+++ b/pt.json
@@ -88,17 +88,27 @@
     "memberFeature": {
         "pre": [
             "{% set stopName = '' %}",
+            "{% set isStop = false %}",
+            "{% set isWay = false %}",
+            "{% set aRoute = null %}",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport == 'stop_area' %}",
-            "  {% set stopName = master.tags.name %}",
+            "    {% set stopName = master.tags.name %}",
+            "  {% else %}",
+            "    {% if master.role|slice(-4) == 'stop' %}",
+            "      {% set isStop = true %}",
+            "    {% elseif master.role|matches('^(|forward|backward)$') %}",
+            "      {% set isWay = true %}",
+            "    {% endif %}",
+            "    {% set aRoute = master %}",
             "  {% endif %}",
             "{% endfor %}"
         ],
         "listStopsMarkerSymbol": "{{ markerCircle({})|raw }}",
-        "style": {
+        "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}platform{% endif %}",
+        "style:way": {
             "color": [
-                "{% set master = masters[0] %}",
-                "{{ const[master.tags.route].color|default('#ff0000') }}"
+                "{{ const[aRoute.tags.route].color|default('#ff0000') }}"
             ],
             "width": "3",
             "text": "{% for master in masters %}{{ master.tags.ref }}  {% endfor %}             ",
@@ -106,6 +116,17 @@
             "textOffset": "12",
             "textFontWeight": "bold"
         },
+        "style:stop": {
+            "color": [
+                "{{ const[aRoute.tags.route].color|default('#ff0000') }}"
+            ],
+            "width": "5",
+            "radius": 3
+        },
+        "style:platform": {
+            "color": "#7f7f7f",
+            "width": "1"
+        },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
         "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
         "listStopsDescription": "{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
@@ -116,11 +137,12 @@
             "  {% if master.tags.public_transport != 'stop_area' %}",
             "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</li>",
             "  {% endif %}",
+            "  {{ master.role }}",
             "{% endfor %}",
             "</ul>"
         ],
         "listRoutesExclude": "true",
-        "listStopsExclude": "{% set isStop = 0 %}{% for master in masters %}{% if master.role|slice(-4) == 'stop' %}{% set isStop = 1 %}{% endif %}{% endfor %}{{ not isStop }}"
+        "listStopsExclude": "{{ not isStop }}"
     },
     "info": [
         "<table>",

From ea69d063c49b0e5c87413fb0c3adfafd5eae4a91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 15 Jul 2018 22:40:33 +0200
Subject: [PATCH 15/44] pt: remove duplicate refs, order naturally

---
 pt.json | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/pt.json b/pt.json
index 838c83c..d2021f4 100644
--- a/pt.json
+++ b/pt.json
@@ -91,6 +91,7 @@
             "{% set isStop = false %}",
             "{% set isWay = false %}",
             "{% set aRoute = null %}",
+            "{% set refs = [] %}",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport == 'stop_area' %}",
             "    {% set stopName = master.tags.name %}",
@@ -101,8 +102,14 @@
             "      {% set isWay = true %}",
             "    {% endif %}",
             "    {% set aRoute = master %}",
+            "",
+            "    {% if master.tags.ref %}",
+            "      {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "    {% endif %}",
             "  {% endif %}",
-            "{% endfor %}"
+            "{% endfor %}",
+            "",
+            "{% set refs = refs|unique|natsort({ insensitive: true }) %}"
         ],
         "listStopsMarkerSymbol": "{{ markerCircle({})|raw }}",
         "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}platform{% endif %}",
@@ -111,7 +118,7 @@
                 "{{ const[aRoute.tags.route].color|default('#ff0000') }}"
             ],
             "width": "3",
-            "text": "{% for master in masters %}{{ master.tags.ref }}  {% endfor %}             ",
+            "text": "{{ refs|join('  ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
             "textFontWeight": "bold"
@@ -129,7 +136,7 @@
         },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
         "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
-        "listStopsDescription": "{% for master in masters %}{{ master.tags.ref }} {% endfor %}",
+        "listStopsDescription": "{{ refs|join(' ') }}",
         "body": [
             "<h4>Routes</h4>",
             "<ul>",

From 4fe9d70dcceb2f9b253dbef3a57663c28d428349 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 18 Jul 2018 18:00:50 +0200
Subject: [PATCH 16/44] railway-electrification: translate non electrified

---
 railway-electrification.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/railway-electrification.json b/railway-electrification.json
index 20d340c..fdb6cde 100644
--- a/railway-electrification.json
+++ b/railway-electrification.json
@@ -39,12 +39,12 @@
         ],
         "title": "{% if tags.ref %}{{ localizedTag(tags, 'ref') }} - {% endif %}{{ localizedTag(tags, 'name')|default(localizedTag(tags, 'operator'))|default(trans('unnamed')) }}",
         "description": [
-            "{{ tagTrans('railway', tags.railway) }} -",
+            "{{ tagTrans('railway', tags.railway) }}",
             "",
             "{% if tags.electrified == 'no' %}",
-            "  {{ trans('not electrified') }}",
+            "  - {{ tagTrans('electrified', 'no') }}",
             "{% elseif tags.electrified %}",
-            "  {{ tags.voltage|default(trans('unknown')) }}V, {{ tags.frequency|default(trans('unknown')) }}Hz",
+            "  - {{ tags.voltage|default(trans('unknown')) }}V, {{ tags.frequency|default(trans('unknown')) }}Hz",
             "{% endif %}"
         ],
         "body": [

From add73ee88d35de99424b2a00271ee08e2ec0edff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 25 Jul 2018 21:05:46 +0200
Subject: [PATCH 17/44] pt: hide platforms, marker for stops in list

---
 pt.json | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/pt.json b/pt.json
index d2021f4..0843303 100644
--- a/pt.json
+++ b/pt.json
@@ -109,13 +109,15 @@
             "  {% endif %}",
             "{% endfor %}",
             "",
-            "{% set refs = refs|unique|natsort({ insensitive: true }) %}"
+            "{% set refs = refs|unique|natsort({ insensitive: true }) %}",
+            "{% set color = const[aRoute.tags.route].color %}"
         ],
-        "listStopsMarkerSymbol": "{{ markerCircle({})|raw }}",
-        "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}platform{% endif %}",
+        "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
+        "listStopsMarkerSign": " ",
+        "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}{% endif %}",
         "style:way": {
             "color": [
-                "{{ const[aRoute.tags.route].color|default('#ff0000') }}"
+                "{{ color|default('#ff0000') }}"
             ],
             "width": "3",
             "text": "{{ refs|join('  ') }}             ",
@@ -125,15 +127,11 @@
         },
         "style:stop": {
             "color": [
-                "{{ const[aRoute.tags.route].color|default('#ff0000') }}"
+                "{{ color|default('#ff0000') }}"
             ],
             "width": "5",
             "radius": 3
         },
-        "style:platform": {
-            "color": "#7f7f7f",
-            "width": "1"
-        },
         "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
         "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
         "listStopsDescription": "{{ refs|join(' ') }}",

From 034d0c448b72734fef0a5e5f21823b269b8c1c79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 26 Jul 2018 22:10:34 +0200
Subject: [PATCH 18/44] pt: fixes

---
 pt.json | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pt.json b/pt.json
index 0843303..65afdd6 100644
--- a/pt.json
+++ b/pt.json
@@ -113,7 +113,7 @@
             "{% set color = const[aRoute.tags.route].color %}"
         ],
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
-        "listStopsMarkerSign": " ",
+        "listStopsMarkerSign": "",
         "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}{% endif %}",
         "style:way": {
             "color": [
@@ -142,7 +142,6 @@
             "  {% if master.tags.public_transport != 'stop_area' %}",
             "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</li>",
             "  {% endif %}",
-            "  {{ master.role }}",
             "{% endfor %}",
             "</ul>"
         ],

From 89746d5e1e8916fe3b98136b6c2ef9958d3e806c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 27 Jul 2018 06:27:36 +0200
Subject: [PATCH 19/44] Replace null in lang strings by ""; remove deleted
 categories

---
 lang/ast.json      | 27 +++++++------
 lang/ca.json       | 97 +++++++++++++++++++++++-----------------------
 lang/cs.json       | 27 +++++++------
 lang/de.json       |  5 +--
 lang/el.json       | 57 +++++++++++++--------------
 lang/en.json       |  5 +--
 lang/es.json       | 97 +++++++++++++++++++++++-----------------------
 lang/et.json       | 65 +++++++++++++++----------------
 lang/fr.json       |  5 +--
 lang/hu.json       | 59 ++++++++++++++--------------
 lang/it.json       | 35 ++++++++---------
 lang/ja.json       | 33 ++++++++--------
 lang/nl.json       | 29 +++++++-------
 lang/pl.json       | 79 +++++++++++++++++++------------------
 lang/pt-br.json    |  5 +--
 lang/pt.json       |  5 +--
 lang/ro.json       | 53 +++++++++++++------------
 lang/ru.json       | 35 ++++++++---------
 lang/template.json | 13 +------
 lang/uk.json       | 49 ++++++++++++-----------
 20 files changed, 375 insertions(+), 405 deletions(-)

diff --git a/lang/ast.json b/lang/ast.json
index 827a031..aa0699b 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -3,27 +3,27 @@
     "category:agriculture": "Agricultura",
     "category:alternative_amenities": "Infraestructures",
     "category:alternative_routes": "Rutes",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Infraestructures",
     "category:car_furniture": "Acondicionamientu urbanu",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicaciones",
     "category:construction": "Sitios d'obres",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Servicios educativos",
     "category:emergency": "Servicios d'emerxencia",
     "category:financial": "Dineru",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomía",
     "category:health": "Salú",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Hestoria",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Accesu a Internet",
     "category:leisure": "Recréu",
     "category:military": "Militar",
@@ -36,11 +36,11 @@
     "category:post": "Corréu",
     "category:power": "Enerxía",
     "category:pt_amenities": "Infraestructures",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Paraes y estaciones",
     "category:public": "Serviciu Públicu",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Relixón",
     "category:residential": "Zones residenciales",
     "category:resources": "Estraición de recursos",
@@ -49,12 +49,11 @@
     "category:tourism_attractions": "Turismu",
     "category:tourism_services": "Turismu",
     "category:transport_alternative": "Alternativu (Ciclismu, senderismu, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Basures",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fábriques",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Recréu, deportes y compres",
     "category:railway": "Ferrocarril",
     "category:services": "Servicios",
diff --git a/lang/ca.json b/lang/ca.json
index 6a797d9..d52d525 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -1,60 +1,59 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicacions",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura i religió",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
     "category:emergency": "Serveis d'emergència",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
-    "category:historic": null,
-    "category:index": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
+    "category:historic": "",
+    "category:index": "",
     "category:internet": "Accés a Internet",
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
-    "category:places": null,
-    "category:places_geo": null,
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
-    "category:shop": null,
-    "category:sport": null,
-    "category:tourism_attractions": null,
-    "category:tourism_services": null,
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:leisure": "",
+    "category:military": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:phone": "",
+    "category:places": "",
+    "category:places_geo": "",
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
+    "category:pt_stops": "",
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
+    "category:shop": "",
+    "category:sport": "",
+    "category:tourism_attractions": "",
+    "category:tourism_services": "",
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Oci, esport i compres",
     "category:services": "Serveis"
 }
diff --git a/lang/cs.json b/lang/cs.json
index 92078a4..cd448be 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -3,27 +3,27 @@
     "category:agriculture": "Zemědělství",
     "category:alternative_amenities": "Občanská vybavenost",
     "category:alternative_routes": "Trasy cest",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Občasnká vybavenost",
     "category:car_furniture": "Pouliční přislušenství",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Komunikace",
     "category:construction": "Staveniště",
     "category:craft": "",
     "category:culture": "Kultura",
     "category:culture_religion": "Kultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Vzdělávací služby",
     "category:emergency": "Pohotovostní služby",
     "category:financial": "Finanční služby",
     "category:gastro-smoking": "",
     "category:gastro": "Stravování",
     "category:health": "Zdravotnictví",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Historické",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Přístup k internetu",
     "category:leisure": "Volný čas",
     "category:military": "Vojenské",
@@ -36,11 +36,11 @@
     "category:post": "Poštovní služby",
     "category:power": "Elektřina",
     "category:pt_amenities": "Občanská vybavenost",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Zastávky & Stanice",
     "category:public": "Veřejné služby",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Religion",
     "category:residential": "Obytné oblasti",
     "category:resources": "Těžba surovin",
@@ -49,12 +49,11 @@
     "category:tourism_attractions": "Turistika",
     "category:tourism_services": "Turistika",
     "category:transport_alternative": "Alternativní (Cyklistika, Pěší turistika, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Nakládání s odpady",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Továrny",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Volný čas, sporty a nákupy",
     "category:railway": "Železnice",
     "category:services": "Služby",
diff --git a/lang/de.json b/lang/de.json
index ba51927..1dd18f3 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -23,7 +23,7 @@
     "category:health": "Gesundheitsdienste",
     "category:hiking_routes": "Wanderrouten",
     "category:historic": "Geschichte",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internetzugang",
     "category:leisure": "Freizeit",
     "category:military": "Militär",
@@ -48,13 +48,12 @@
     "category:sport": "Sport",
     "category:tourism_attractions": "Tourismus",
     "category:tourism_services": "Tourismus",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Einrichtungen",
     "category:waste": "Entsorgung",
     "category:water": "Gewässer",
     "category:wikipedia": "Wikipedia",
     "category:works": "Fabriken",
-    "category:cycle_infrastructure": "Radwege",
     "category:infrastructure": "Infrastruktur",
     "category:leisure_sport_shopping": "Freizeit, Sport und Einkauf",
     "category:railway": "Eisenbahn",
diff --git a/lang/el.json b/lang/el.json
index a8b68ee..ee4f505 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -1,60 +1,59 @@
 {
     "category:administrative": "Διοικητικά Όρια",
     "category:agriculture": "Γεωργία",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Επικοινωνίες",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Πολιτισμός",
     "category:culture_religion": "Πολιτισμός",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Υπηρεσίες Εκπαίδευσης",
     "category:emergency": "Υπηρεσίες Έκτακτης Ανάγκης",
     "category:financial": "Χρήμα",
     "category:gastro-smoking": "",
     "category:gastro": "Γαστρονομία",
     "category:health": "Υγεία",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Ιστορικά",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Αναψυχή",
     "category:military": "Στρατιωτικό",
     "category:natural": "Φυσικοί Σχηματισμοί",
-    "category:other": null,
-    "category:phone": null,
+    "category:other": "",
+    "category:phone": "",
     "category:places": "Μέρη",
     "category:places_geo": "Μέρη",
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
     "category:pt_stops": "Στάσεις & Σταθμοί",
     "category:public": "Δημόσιες Υπηρεσίες",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Θρησκεία",
     "category:residential": "Περιοχές Κατοικίας",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Αγορές",
     "category:sport": "Άθληση",
     "category:tourism_attractions": "Τουρισμός",
     "category:tourism_services": "Τουρισμός",
     "category:transport_alternative": "Εναλλακτικά (ποδηλασία, ορειβασία,...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Αναψυχή, Αθλητισμός και Αγορές",
     "category:services": "Υπηρεσίες",
     "category:transport": "Μεταφορές",
diff --git a/lang/en.json b/lang/en.json
index 2b8fc3c..0efdfc5 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -23,7 +23,7 @@
     "category:health": "Health",
     "category:hiking_routes": "Hiking routes",
     "category:historic": "Historic",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internet access",
     "category:leisure": "Leisure",
     "category:military": "Military",
@@ -48,13 +48,12 @@
     "category:sport": "Sport",
     "category:tourism_attractions": "Tourism",
     "category:tourism_services": "Tourism",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Amenities",
     "category:waste": "Disposal",
     "category:water": "Waterbodies",
     "category:wikipedia": "Wikipedia",
     "category:works": "Works",
-    "category:cycle_infrastructure": "Cycleways",
     "category:infrastructure": "Infrastructure",
     "category:leisure_sport_shopping": "Leisure, Sport and Shopping",
     "category:railway": "Railway",
diff --git a/lang/es.json b/lang/es.json
index f82052d..5a5d049 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -1,60 +1,59 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
-    "category:communication": null,
-    "category:construction": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
+    "category:communication": "",
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura y religión",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
     "category:emergency": "Servicios de emergencia",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
-    "category:historic": null,
-    "category:index": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
+    "category:historic": "",
+    "category:index": "",
     "category:internet": "Acceso a Internet",
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
-    "category:places": null,
-    "category:places_geo": null,
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
+    "category:leisure": "",
+    "category:military": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:phone": "",
+    "category:places": "",
+    "category:places_geo": "",
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
     "category:pt_stops": "Paradas y estaciones",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
-    "category:shop": null,
-    "category:sport": null,
-    "category:tourism_attractions": null,
-    "category:tourism_services": null,
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
+    "category:shop": "",
+    "category:sport": "",
+    "category:tourism_attractions": "",
+    "category:tourism_services": "",
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Ocio, deporte y compras",
     "category:services": "Servicios"
 }
diff --git a/lang/et.json b/lang/et.json
index a325cf5..6b38d80 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -1,60 +1,59 @@
 {
     "category:administrative": "Administratiivalad",
     "category:agriculture": "Põllumajandus",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Kommunikatsioon",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultuur",
     "category:culture_religion": "Kultuur ja religioon",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Haridusteenused",
     "category:emergency": "Hädaabi teenused",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
     "category:historic": "Ajalooline",
-    "category:index": null,
-    "category:internet": null,
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
+    "category:index": "",
+    "category:internet": "",
+    "category:leisure": "",
+    "category:military": "",
+    "category:natural": "",
     "category:other": "Ülejäänud",
     "category:phone": "Telefon",
     "category:places": "Kohad",
     "category:places_geo": "Kohad",
     "category:playgrounds": "Mänguväljak",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Elekter",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
+    "category:pt_stops": "",
     "category:public": "Kommunaalteenused",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Religioon",
     "category:residential": "Elamupiirkonnad",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Ostmine",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport_alternative": "Alternatiivne (jalgrattasõit, matkamine, ...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Vaba aeg, sport ja ostmine",
     "category:railway": "Raudtee",
     "category:services": "Teenused",
diff --git a/lang/fr.json b/lang/fr.json
index 7a833b3..b9af207 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -23,7 +23,7 @@
     "category:health": "Santé",
     "category:hiking_routes": "Itinéraires pédestres",
     "category:historic": "Histoire",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:military": "Militaire",
@@ -33,7 +33,7 @@
     "category:places": "Lieux",
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Énergie",
     "category:pt_amenities": "Équipements",
     "category:pt_routes": "Lignes",
@@ -54,7 +54,6 @@
     "category:water": "Hydrographie",
     "category:wikipedia": "Wikipédia",
     "category:works": "Zones industrielles",
-    "category:cycle_infrastructure": "Infrastructures vélo",
     "category:infrastructure": "Infrastructures",
     "category:leisure_sport_shopping": "Loisirs",
     "category:railway": "Chemins de fer",
diff --git a/lang/hu.json b/lang/hu.json
index 7cb807f..6ba56f5 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -1,60 +1,59 @@
 {
     "category:administrative": "Adminisztratív határok",
     "category:agriculture": "Mezőgazdaság",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Kommunikácó",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultúra",
     "category:culture_religion": "Kultúra",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
-    "category:emergency": null,
-    "category:financial": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
+    "category:emergency": "",
+    "category:financial": "",
     "category:gastro-smoking": "",
     "category:gastro": "Gasztronómia",
-    "category:health": null,
-    "category:hiking_routes": null,
+    "category:health": "",
+    "category:hiking_routes": "",
     "category:historic": "Historikus",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internethozzáférés",
-    "category:leisure": null,
+    "category:leisure": "",
     "category:military": "Katonai",
     "category:natural": "Természeti képződmények",
     "category:other": "Egyéb",
     "category:phone": "Telefon",
     "category:places": "Helyek",
     "category:places_geo": "Helyek",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "Posta",
     "category:power": "Áramellátás",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
     "category:pt_stops": "Megállók és állomások",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Vallás",
     "category:residential": "Lakóövezetek",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Vásárlás",
     "category:sport": "Sport",
     "category:tourism_attractions": "Túrizmus",
     "category:tourism_services": "Túrizmus",
     "category:transport_alternative": "Alternatív (Krékpár, Túra)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Szabadidő",
     "category:railway": "Vasút",
     "category:services": "Szolgáltatás",
diff --git a/lang/it.json b/lang/it.json
index 7478533..d8b9817 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -3,44 +3,44 @@
     "category:agriculture": "Agricoltura",
     "category:alternative_amenities": "Infrastrutture",
     "category:alternative_routes": "Itinerari segnalati",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Infrastrutture",
     "category:car_furniture": "Dotazioni stradali",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Communicazioni",
     "category:construction": "Cantieri",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Istruzione",
     "category:emergency": "Servizi d'emergenza",
     "category:financial": "Finanze",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomia",
     "category:health": "Sanità",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Storia",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Tempo libero",
     "category:military": "Militare",
     "category:natural": "Natura",
     "category:other": "Altri",
-    "category:phone": null,
+    "category:phone": "",
     "category:places": "Luoghi",
     "category:places_geo": "Luoghi",
-    "category:playgrounds": null,
-    "category:post": null,
+    "category:playgrounds": "",
+    "category:post": "",
     "category:power": "Energia",
     "category:pt_amenities": "Infrastrutture",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Stazioni e fermate",
     "category:public": "Servizi pubblici",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Religione",
     "category:residential": "Aree residenziali",
     "category:resources": "Areee estrattive",
@@ -49,12 +49,11 @@
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport_alternative": "Alternativi (bicicletta, camminate, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Smaltimento",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fabbriche",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Tempo libero, sport e shopping",
     "category:railway": "Ferrovie",
     "category:services": "Servizi",
diff --git a/lang/ja.json b/lang/ja.json
index 173f467..2723a5d 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -1,29 +1,29 @@
 {
-    "category:administrative": null,
+    "category:administrative": "",
     "category:agriculture": "農業",
     "category:alternative_amenities": "生活環境",
     "category:alternative_routes": "ルート",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "生活環境",
     "category:car_furniture": "街路設置公共物",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "交流",
     "category:construction": "工事中",
     "category:craft": "",
     "category:culture": "文化",
     "category:culture_religion": "文化",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "教育サービス",
     "category:emergency": "緊急サービス",
     "category:financial": "金融",
     "category:gastro-smoking": "",
     "category:gastro": "食べ物",
     "category:health": "健康",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "記念",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "インターネット接続",
     "category:leisure": "レジャー",
     "category:military": "軍事",
@@ -32,29 +32,28 @@
     "category:phone": "電話",
     "category:places": "場所",
     "category:places_geo": "場所",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "郵便",
     "category:power": "電力",
     "category:pt_amenities": "生活環境",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "停留所と駅",
     "category:public": "公共サービス",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "宗教",
     "category:residential": "住居エリア",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "ショッピング",
     "category:sport": "スポーツ",
     "category:tourism_attractions": "観光",
     "category:tourism_services": "観光",
     "category:transport_alternative": "その他交通 (サイクリング、ハイキング、...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "処理場",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "工場",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "レジャー",
     "category:railway": "鉄道",
     "category:services": "サービス",
diff --git a/lang/nl.json b/lang/nl.json
index e542067..d1a4351 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -3,27 +3,27 @@
     "category:agriculture": "Landbouw",
     "category:alternative_amenities": "Voorzieningen",
     "category:alternative_routes": "Alternatieve routes",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Voorzieningen",
     "category:car_furniture": "Straatmeubilair",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Communicatie",
     "category:construction": "Bouwterrein",
     "category:craft": "",
     "category:culture": "Cultuur",
     "category:culture_religion": "Cultuur",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Onderwijs",
     "category:emergency": "Hulpdiensten",
     "category:financial": "Financieel",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomie",
     "category:health": "Gezondheid",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Historisch",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internettoegang",
     "category:leisure": "Vrije tijd",
     "category:military": "Militair",
@@ -32,15 +32,15 @@
     "category:phone": "Telefonie",
     "category:places": "Plaatsen",
     "category:places_geo": "Plaatsen",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "Post",
     "category:power": "Stroomvoorziening",
     "category:pt_amenities": "Voorzieningen",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Haltes en Stations",
     "category:public": "Openbare diensten",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Religie",
     "category:residential": "Woongebieden",
     "category:resources": "Grondstoffenwinning",
@@ -49,12 +49,11 @@
     "category:tourism_attractions": "Toerisme",
     "category:tourism_services": "Toerisme",
     "category:transport_alternative": "Alternatief (Fiets, Wandel, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Afvalverwijdering",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fabrieken",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Vrije tijd, Sport en Winkelen",
     "category:railway": "Spoorwegen",
     "category:services": "Dienstverlening",
diff --git a/lang/pl.json b/lang/pl.json
index 251dc1d..9b2215c 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -1,60 +1,59 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
     "category:car_furniture": "Elementy drogowe",
-    "category:car_maxspeed": null,
-    "category:children": null,
-    "category:communication": null,
-    "category:construction": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
+    "category:communication": "",
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultura",
     "category:culture_religion": "Kultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Edukacyjne",
-    "category:emergency": null,
+    "category:emergency": "",
     "category:financial": "Finasowe",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomia",
     "category:health": "Zdrowie",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Miejsca Historyczne",
-    "category:index": null,
-    "category:internet": null,
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
+    "category:index": "",
+    "category:internet": "",
+    "category:leisure": "",
+    "category:military": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:phone": "",
     "category:places": "Miejsca",
     "category:places_geo": "Miejsca",
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
     "category:pt_stops": "Przystanki i Stacje",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
     "category:shop": "Zakupy",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turystyka",
     "category:tourism_services": "Turystyka",
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Wypoczynek, Sport i Zakupy",
     "category:services": "Usługi",
     "category:transport": "Transport",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index dc34575..0b7f7c1 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -23,7 +23,7 @@
     "category:health": "Saúde e Assistência",
     "category:hiking_routes": "Rotas de Caminhada",
     "category:historic": "Histórico",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:military": "Militar",
@@ -48,13 +48,12 @@
     "category:sport": "Esportes",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Equipamentos",
     "category:waste": "Lixo",
     "category:water": "Hidrografia",
     "category:wikipedia": "Wikipédia",
     "category:works": "Fábricas",
-    "category:cycle_infrastructure": "Ciclovias",
     "category:infrastructure": "Infraestrutura",
     "category:leisure_sport_shopping": "Lazer, Esportes e Compras",
     "category:railway": "Ferrovia",
diff --git a/lang/pt.json b/lang/pt.json
index e21475a..cb6d166 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -23,7 +23,7 @@
     "category:health": "Saúde",
     "category:hiking_routes": "Rotas de caminhada",
     "category:historic": "Histórico",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:military": "Militar",
@@ -48,13 +48,12 @@
     "category:sport": "Desporto",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "",
     "category:waste": "Lixo",
     "category:water": "Massas de água",
     "category:wikipedia": "Wikipédia",
     "category:works": "Fábricas",
-    "category:cycle_infrastructure": "Ciclovias",
     "category:infrastructure": "Infraestrutura",
     "category:leisure_sport_shopping": "Lazer, desporto e compras",
     "category:railway": "Linhas ferroviárias",
diff --git a/lang/ro.json b/lang/ro.json
index d726a6c..217cfc2 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -1,60 +1,59 @@
 {
     "category:administrative": "Zona administrativa",
     "category:agriculture": "Agricultura",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicatii",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Servicii educatie",
     "category:emergency": "Servicii urgenta",
     "category:financial": "Financiar",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomie",
     "category:health": "Sanatate",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Istoric",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Acces internet",
     "category:leisure": "Timp liber",
     "category:military": "Militar",
-    "category:natural": null,
+    "category:natural": "",
     "category:other": "Altele",
     "category:phone": "Telefon",
     "category:places": "Locuri",
     "category:places_geo": "Locuri",
     "category:playgrounds": "Loc de joaca",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Energie",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
+    "category:pt_amenities": "",
+    "category:pt_routes": "",
+    "category:pt_stops": "",
     "category:public": "Servicii publice",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Religie",
     "category:residential": "Zona rezidentiala",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Cumpărături",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport_alternative": "Alternativ(Bicicleta,Drumetii)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Timp liber, Sport si Cumparaturi",
     "category:services": "Servicii",
     "category:transport": "Transport",
diff --git a/lang/ru.json b/lang/ru.json
index 9985ae0..f6957a3 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -3,44 +3,44 @@
     "category:agriculture": "Сельское хозяйство",
     "category:alternative_amenities": "Полезные места",
     "category:alternative_routes": "Маршруты",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Обслуживание транспорта",
     "category:car_furniture": "Элементы дороги",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Услуги связи",
     "category:construction": "Места строительства",
     "category:craft": "",
     "category:culture": "Культура",
     "category:culture_religion": "Культура",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Образование",
     "category:emergency": "Экстренные службы",
     "category:financial": "Финансы",
     "category:gastro-smoking": "",
     "category:gastro": "Общепит",
     "category:health": "Медицина",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Историческое",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Досуг",
     "category:military": "Вооружённые силы",
     "category:natural": "Природные образования",
     "category:other": "Прочее",
-    "category:phone": null,
+    "category:phone": "",
     "category:places": "Места",
     "category:places_geo": "Места",
-    "category:playgrounds": null,
-    "category:post": null,
+    "category:playgrounds": "",
+    "category:post": "",
     "category:power": "Энергетика",
     "category:pt_amenities": "Транспортные принадлежности",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Остановки и станции",
     "category:public": "Общественные места",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Религия",
     "category:residential": "Жилые районы",
     "category:resources": "Добыча ресурсов",
@@ -49,12 +49,11 @@
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport_alternative": "Альтернативное передвижение (Велоспорт, Пешие прогулки, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Переработка отходов",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Промышленность",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Досуг",
     "category:railway": "Железные дороги",
     "category:services": "Услуги",
diff --git a/lang/template.json b/lang/template.json
index 54044bd..014f66e 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -53,16 +53,5 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "",
-    "category:cycle_infrastructure": "",
-    "category:infrastructure": "",
-    "category:leisure_sport_shopping": "",
-    "category:railway": "",
-    "category:services": "",
-    "category:special": "",
-    "category:transport": "",
-    "category:transport_car": "",
-    "category:transport_cycle": "",
-    "category:transport_pt": "",
-    "category:transport_walk": ""
+    "category:works": ""
 }
diff --git a/lang/uk.json b/lang/uk.json
index f8e7d1d..ba208f5 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -1,60 +1,59 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
+    "category:administrative": "",
+    "category:agriculture": "",
     "category:alternative_amenities": "Amenities",
     "category:alternative_routes": "Маршрути",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Amenities",
     "category:car_furniture": "Street Furniture",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Телекомунікації",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Культура ",
     "category:culture_religion": "Культура ",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Освіта",
     "category:emergency": "Швидка допомога",
     "category:financial": "Фінанси",
     "category:gastro-smoking": "",
     "category:gastro": "Гастрономія",
     "category:health": "Здоров'я",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Історія",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Дозвілля",
-    "category:military": null,
+    "category:military": "",
     "category:natural": "Природне середовище",
     "category:other": "Інше",
-    "category:phone": null,
+    "category:phone": "",
     "category:places": "Місцевість",
     "category:places_geo": "Місцевість",
     "category:playgrounds": "Дитячий майданчик",
-    "category:post": null,
-    "category:power": null,
+    "category:post": "",
+    "category:power": "",
     "category:pt_amenities": "Amenities",
-    "category:pt_routes": null,
+    "category:pt_routes": "",
     "category:pt_stops": "Зупинки та станції",
     "category:public": "Громадські місця",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
     "category:religion": "Релігія",
     "category:residential": "Житлова зона",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Торгівля",
     "category:sport": "Спорт. Інше.",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport_alternative": "Інші (Велосипедні, піші, ...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Дозвілля",
     "category:services": "Послуги",
     "category:transport": "Транспорт",

From bd4585e532c730c1983ca2cb8e4197c347dbc81c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 27 Jul 2018 06:34:42 +0200
Subject: [PATCH 20/44] pt: Add list names to lang/

---
 lang/ast.json      | 8 ++++----
 lang/ca.json       | 5 +++--
 lang/cs.json       | 8 ++++----
 lang/de.json       | 6 +++---
 lang/el.json       | 8 ++++----
 lang/en.json       | 6 +++---
 lang/es.json       | 5 +++--
 lang/et.json       | 8 ++++----
 lang/fr.json       | 6 +++---
 lang/hu.json       | 8 ++++----
 lang/it.json       | 8 ++++----
 lang/ja.json       | 8 ++++----
 lang/nl.json       | 8 ++++----
 lang/pl.json       | 8 ++++----
 lang/pt-br.json    | 6 +++---
 lang/pt.json       | 6 +++---
 lang/ro.json       | 8 ++++----
 lang/ru.json       | 8 ++++----
 lang/template.json | 5 +++--
 lang/uk.json       | 8 ++++----
 20 files changed, 72 insertions(+), 69 deletions(-)

diff --git a/lang/ast.json b/lang/ast.json
index aa0699b..b443288 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Xuegos infantiles",
     "category:post": "Corréu",
     "category:power": "Enerxía",
+    "category:pt": "Tresporte Públicu",
+    "category:pt:stops": "Paraes y estaciones",
+    "category:pt:routes": "",
     "category:pt_amenities": "Infraestructures",
-    "category:pt_routes": "",
-    "category:pt_stops": "Paraes y estaciones",
     "category:public": "Serviciu Públicu",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "Ferrocarril",
     "category:services": "Servicios",
     "category:transport": "Tresporte",
-    "category:transport_car": "Tráficu individual",
-    "category:transport_pt": "Tresporte Públicu"
+    "category:transport_car": "Tráficu individual"
 }
diff --git a/lang/ca.json b/lang/ca.json
index d52d525..c2518a1 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
diff --git a/lang/cs.json b/lang/cs.json
index cd448be..e1c1230 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Hřiště",
     "category:post": "Poštovní služby",
     "category:power": "Elektřina",
+    "category:pt": "Veřejná doprava",
+    "category:pt:stops": "Zastávky & Stanice",
+    "category:pt:routes": "",
     "category:pt_amenities": "Občanská vybavenost",
-    "category:pt_routes": "",
-    "category:pt_stops": "Zastávky & Stanice",
     "category:public": "Veřejné služby",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "Železnice",
     "category:services": "Služby",
     "category:transport": "Doprava",
-    "category:transport_car": "Individuální doprava",
-    "category:transport_pt": "Veřejná doprava"
+    "category:transport_car": "Individuální doprava"
 }
diff --git a/lang/de.json b/lang/de.json
index 1dd18f3..4b1c9da 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Spielplätze",
     "category:post": "Post",
     "category:power": "Energie",
+    "category:pt": "Öffentlicher Verkehr",
+    "category:pt:stops": "Haltestellen",
+    "category:pt:routes": "Routen",
     "category:pt_amenities": "Einrichtungen",
-    "category:pt_routes": "Routen",
-    "category:pt_stops": "Haltestellen",
     "category:public": "Öffentliche Dienste",
     "category:railway-electrification": "Eisenbahn Elektrifizierung",
     "category:railway-infrastructure": "Eisenbahn Infrastruktur",
@@ -62,6 +63,5 @@
     "category:transport": "Transport",
     "category:transport_car": "Motorisierter Individualverkehr",
     "category:transport_cycle": "Radfahren",
-    "category:transport_pt": "Öffentlicher Verkehr",
     "category:transport_walk": "Zu Fuß gehen"
 }
diff --git a/lang/el.json b/lang/el.json
index ee4f505..c2405f9 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "Δημόσιες Μεταφορές",
+    "category:pt:stops": "Στάσεις & Σταθμοί",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "Στάσεις & Σταθμοί",
     "category:public": "Δημόσιες Υπηρεσίες",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -56,6 +57,5 @@
     "category:works": "",
     "category:leisure_sport_shopping": "Αναψυχή, Αθλητισμός και Αγορές",
     "category:services": "Υπηρεσίες",
-    "category:transport": "Μεταφορές",
-    "category:transport_pt": "Δημόσιες Μεταφορές"
+    "category:transport": "Μεταφορές"
 }
diff --git a/lang/en.json b/lang/en.json
index 0efdfc5..e99027c 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Playground",
     "category:post": "Post",
     "category:power": "Power",
+    "category:pt": "Public Transportation",
+    "category:pt:stops": "Stops & Stations",
+    "category:pt:routes": "Routes",
     "category:pt_amenities": "Amenities",
-    "category:pt_routes": "Routes",
-    "category:pt_stops": "Stops & Stations",
     "category:public": "Public Services",
     "category:railway-electrification": "Railway electrification",
     "category:railway-infrastructure": "Railway infrastructure",
@@ -62,6 +63,5 @@
     "category:transport": "Transportation",
     "category:transport_car": "Individual Traffic",
     "category:transport_cycle": "Cycling",
-    "category:transport_pt": "Public Transportation",
     "category:transport_walk": "Walking"
 }
diff --git a/lang/es.json b/lang/es.json
index 5a5d049..71bf829 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "Paradas y estaciones",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "Paradas y estaciones",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
diff --git a/lang/et.json b/lang/et.json
index 6b38d80..f69c266 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Mänguväljak",
     "category:post": "",
     "category:power": "Elekter",
+    "category:pt": "Ühistransport",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "",
     "category:public": "Kommunaalteenused",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -57,6 +58,5 @@
     "category:leisure_sport_shopping": "Vaba aeg, sport ja ostmine",
     "category:railway": "Raudtee",
     "category:services": "Teenused",
-    "category:transport": "Transport",
-    "category:transport_pt": "Ühistransport"
+    "category:transport": "Transport"
 }
diff --git a/lang/fr.json b/lang/fr.json
index b9af207..1b73c1c 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
     "category:power": "Énergie",
+    "category:pt": "Transports publics",
+    "category:pt:stops": "Arrêts/Stops, Stations",
+    "category:pt:routes": "Lignes",
     "category:pt_amenities": "Équipements",
-    "category:pt_routes": "Lignes",
-    "category:pt_stops": "Arrêts/Stops, Stations",
     "category:public": "Services Publics",
     "category:railway-electrification": "Puissance électrique ferroviaire",
     "category:railway-infrastructure": "Infrastructure ferroviaire",
@@ -62,6 +63,5 @@
     "category:transport": "Transports",
     "category:transport_car": "Transport automobile",
     "category:transport_cycle": "Cyclisme",
-    "category:transport_pt": "Transports publics",
     "category:transport_walk": "Marche à pied"
 }
diff --git a/lang/hu.json b/lang/hu.json
index 6ba56f5..531ad16 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "Posta",
     "category:power": "Áramellátás",
+    "category:pt": "Tömegközlekedés",
+    "category:pt:stops": "Megállók és állomások",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "Megállók és állomások",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -57,6 +58,5 @@
     "category:leisure_sport_shopping": "Szabadidő",
     "category:railway": "Vasút",
     "category:services": "Szolgáltatás",
-    "category:transport": "Közlekedés",
-    "category:transport_pt": "Tömegközlekedés"
+    "category:transport": "Közlekedés"
 }
diff --git a/lang/it.json b/lang/it.json
index d8b9817..b929314 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "Energia",
+    "category:pt": "Trasporti pubblici",
+    "category:pt:stops": "Stazioni e fermate",
+    "category:pt:routes": "",
     "category:pt_amenities": "Infrastrutture",
-    "category:pt_routes": "",
-    "category:pt_stops": "Stazioni e fermate",
     "category:public": "Servizi pubblici",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "Ferrovie",
     "category:services": "Servizi",
     "category:transport": "Trasporti",
-    "category:transport_car": "Trasporti individuali",
-    "category:transport_pt": "Trasporti pubblici"
+    "category:transport_car": "Trasporti individuali"
 }
diff --git a/lang/ja.json b/lang/ja.json
index 2723a5d..601a6a6 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "郵便",
     "category:power": "電力",
+    "category:pt": "公共輸送",
+    "category:pt:stops": "停留所と駅",
+    "category:pt:routes": "",
     "category:pt_amenities": "生活環境",
-    "category:pt_routes": "",
-    "category:pt_stops": "停留所と駅",
     "category:public": "公共サービス",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "鉄道",
     "category:services": "サービス",
     "category:transport": "輸送",
-    "category:transport_car": "個人輸送機関",
-    "category:transport_pt": "公共輸送"
+    "category:transport_car": "個人輸送機関"
 }
diff --git a/lang/nl.json b/lang/nl.json
index d1a4351..6aa9128 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "Post",
     "category:power": "Stroomvoorziening",
+    "category:pt": "Openbaar vervoer",
+    "category:pt:stops": "Haltes en Stations",
+    "category:pt:routes": "",
     "category:pt_amenities": "Voorzieningen",
-    "category:pt_routes": "",
-    "category:pt_stops": "Haltes en Stations",
     "category:public": "Openbare diensten",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "Spoorwegen",
     "category:services": "Dienstverlening",
     "category:transport": "Vervoer",
-    "category:transport_car": "Gemotoriseerd individueel verkeer",
-    "category:transport_pt": "Openbaar vervoer"
+    "category:transport_car": "Gemotoriseerd individueel verkeer"
 }
diff --git a/lang/pl.json b/lang/pl.json
index 9b2215c..426a133 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "Transport Publiczny",
+    "category:pt:stops": "Przystanki i Stacje",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "Przystanki i Stacje",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -57,6 +58,5 @@
     "category:leisure_sport_shopping": "Wypoczynek, Sport i Zakupy",
     "category:services": "Usługi",
     "category:transport": "Transport",
-    "category:transport_car": "Transport Indywidualny",
-    "category:transport_pt": "Transport Publiczny"
+    "category:transport_car": "Transport Indywidualny"
 }
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 0b7f7c1..885e601 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
     "category:power": "Energia",
+    "category:pt": "Transporte Público",
+    "category:pt:stops": "Paradas e Estações",
+    "category:pt:routes": "Rotas",
     "category:pt_amenities": "Equipamentos",
-    "category:pt_routes": "Rotas",
-    "category:pt_stops": "Paradas e Estações",
     "category:public": "Serviços Públicos",
     "category:railway-electrification": "Eletrificação Ferroviária",
     "category:railway-infrastructure": "Infraestrutura Ferroviária",
@@ -62,6 +63,5 @@
     "category:transport": "Transportes",
     "category:transport_car": "Tráfego Individual",
     "category:transport_cycle": "Ciclismo",
-    "category:transport_pt": "Transporte Público",
     "category:transport_walk": "Pedestre"
 }
diff --git a/lang/pt.json b/lang/pt.json
index cb6d166..55fd1fa 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Parques infantis",
     "category:post": "Correios",
     "category:power": "Eletricidade",
+    "category:pt": "Transportes públicos",
+    "category:pt:stops": "",
+    "category:pt:routes": "Rotas",
     "category:pt_amenities": "",
-    "category:pt_routes": "Rotas",
-    "category:pt_stops": "Paragens e estações",
     "category:public": "Serviços públicos",
     "category:railway-electrification": "Eletrificação ferroviária",
     "category:railway-infrastructure": "Infraestrutura ferroviária",
@@ -62,6 +63,5 @@
     "category:transport": "Transportes",
     "category:transport_car": "Transporte individual",
     "category:transport_cycle": "Ciclismo",
-    "category:transport_pt": "Transportes públicos",
     "category:transport_walk": "Pedestre"
 }
diff --git a/lang/ro.json b/lang/ro.json
index 217cfc2..46bc912 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Loc de joaca",
     "category:post": "",
     "category:power": "Energie",
+    "category:pt": "Transport public",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "",
     "category:public": "Servicii publice",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -57,6 +58,5 @@
     "category:leisure_sport_shopping": "Timp liber, Sport si Cumparaturi",
     "category:services": "Servicii",
     "category:transport": "Transport",
-    "category:transport_car": "Trafic individual",
-    "category:transport_pt": "Transport public"
+    "category:transport_car": "Trafic individual"
 }
diff --git a/lang/ru.json b/lang/ru.json
index f6957a3..50243a8 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "Энергетика",
+    "category:pt": "Общественный транспорт",
+    "category:pt:stops": "Остановки и станции",
+    "category:pt:routes": "",
     "category:pt_amenities": "Транспортные принадлежности",
-    "category:pt_routes": "",
-    "category:pt_stops": "Остановки и станции",
     "category:public": "Общественные места",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -58,6 +59,5 @@
     "category:railway": "Железные дороги",
     "category:services": "Услуги",
     "category:transport": "Транспорт",
-    "category:transport_car": "Частный транспорт",
-    "category:transport_pt": "Общественный транспорт"
+    "category:transport_car": "Частный транспорт"
 }
diff --git a/lang/template.json b/lang/template.json
index 014f66e..9740aee 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
diff --git a/lang/uk.json b/lang/uk.json
index ba208f5..7663c5e 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -35,9 +35,10 @@
     "category:playgrounds": "Дитячий майданчик",
     "category:post": "",
     "category:power": "",
+    "category:pt": "Громадський транспорт",
+    "category:pt:stops": "Зупинки та станції",
+    "category:pt:routes": "",
     "category:pt_amenities": "Amenities",
-    "category:pt_routes": "",
-    "category:pt_stops": "Зупинки та станції",
     "category:public": "Громадські місця",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
@@ -57,6 +58,5 @@
     "category:leisure_sport_shopping": "Дозвілля",
     "category:services": "Послуги",
     "category:transport": "Транспорт",
-    "category:transport_car": "Приватний транспорт",
-    "category:transport_pt": "Громадський транспорт"
+    "category:transport_car": "Приватний транспорт"
 }

From e17ef2db6dfe5e6676076858cd845e56bf9947f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 28 Jul 2018 21:59:44 +0200
Subject: [PATCH 21/44] cycle_routes: use new members queries

---
 cycle_routes.json | 56 ++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 53 insertions(+), 3 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 581ed13..2a1da86 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -13,12 +13,62 @@
         "12": "relation[type=route][route=bicycle][network~'^(icn|ncn|rcn)$']",
         "15": "relation[type=route][route=bicycle]"
     },
+    "members": true,
     "feature": {
-        "priority": "{% if tags.network=='icn' %}0{% elseif tags.network=='ncn' %}1{% elseif tags.network=='rcn' %}2{% else %}3{% endif %}",
+        "priority": "{{ {icn:0,ncn:1,rcn:2,lcn:3}[tags.network] }}",
+        "description": "{{ tagTrans('network', tags.network) }}",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set priority = 4 %}",
+            "{% set network = '' %}",
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% set _p = {icn:0,ncn:1,rcn:2,lcn:3}[master.tags.network] %}",
+            "  {% if _p < priority %}",
+            "    {% set priority = _p %}",
+            "    {% set network = master.tags.network %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "title": "",
+        "body": [
+            "<ul>",
+            "{% for master in masters %}",
+            "  {% if master.tags.public_transport != 'stop_area' %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</li>",
+            "  {% endif %}",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
         "style": {
+            "color": "{{ const[network].color }}",
             "width": 4,
-            "color": "{% if tags.network=='icn' %}#ff0000{% elseif tags.network=='ncn' %}#ff007f{% elseif tags.network=='rcn' %}#7f00ff{% else %}#0000ff{% endif %}",
-            "opacity": 1
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    },
+    "const": {
+        "icn": {
+            "color": "#ff0000"
+        },
+        "ncn": {
+            "color": "#ff007f"
+        },
+        "rcn": {
+            "color": "#7f00ff"
+        },
+        "lcn": {
+            "color": "#0000ff"
         }
     }
 }

From bedbfe18a16592f855a733bc160589199169f47f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 28 Jul 2018 22:14:36 +0200
Subject: [PATCH 22/44] cycle_routes: add map key, list symbols, improve colors

---
 cycle_routes.json | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 2a1da86..5db1660 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -17,6 +17,7 @@
     "feature": {
         "priority": "{{ {icn:0,ncn:1,rcn:2,lcn:3}[tags.network] }}",
         "description": "{{ tagTrans('network', tags.network) }}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color })|raw }}",
         "styles": ""
     },
     "memberFeature": {
@@ -59,16 +60,32 @@
     },
     "const": {
         "icn": {
-            "color": "#ff0000"
+            "color": "#ff0000",
+            "zoom": 6
         },
         "ncn": {
-            "color": "#ff007f"
+            "color": "#ff00ba",
+            "zoom": 9
         },
         "rcn": {
-            "color": "#7f00ff"
+            "color": "#ba00ff",
+            "zoom": 12
         },
         "lcn": {
-            "color": "#0000ff"
+            "color": "#0000ff",
+            "zoom": 15
         }
-    }
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
+        "    <td>{{ tagTrans('network', value) }}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ]
 }

From 601fcd0f3139930fe1a868560984c4b1637356f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 28 Jul 2018 22:16:05 +0200
Subject: [PATCH 23/44] fix

---
 cycle_routes.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 5db1660..a0a648a 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -42,7 +42,7 @@
             "<ul>",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport != 'stop_area' %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</li>",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</i></li>",
             "  {% endif %}",
             "{% endfor %}",
             "</ul>"

From 300b6d78a8d9cec0c0b3de140e2dde475f1af9e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 29 Jul 2018 08:33:16 +0200
Subject: [PATCH 24/44] Hiking Routes: copy code from cycle networks

---
 hiking_routes.json | 74 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 63 insertions(+), 11 deletions(-)

diff --git a/hiking_routes.json b/hiking_routes.json
index ef7828a..c1b5391 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -13,27 +13,79 @@
         "12": "relation[type=route][route=hiking][network~\"^(iwn|nwn|rwn)$\"]",
         "14": "relation[type=route][route=hiking]"
     },
+    "members": true,
     "feature": {
+        "priority": "{{ {iwn:0,nwn:1,rwn:2,lwn:3}[tags.network] }}",
         "description": "{{ tagTrans('network', tags.network) }}",
-        "priority": [
-            "{% set network_data = const[tags.network] %}",
-            "{% if network_data %}",
-            "{{ network_data.priority }}",
-            "{% endif %}"
-        ]
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color })|raw }}",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set priority = 4 %}",
+            "{% set network = '' %}",
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% set _p = {iwn:0,nwn:1,rwn:2,lwn:3}[master.tags.network] %}",
+            "  {% if _p < priority %}",
+            "    {% set priority = _p %}",
+            "    {% set network = master.tags.network %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "title": "",
+        "body": [
+            "<ul>",
+            "{% for master in masters %}",
+            "  {% if master.tags.public_transport != 'stop_area' %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</i></li>",
+            "  {% endif %}",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "{{ const[network].color }}",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
     },
     "const": {
         "iwn": {
-            "priority": 1
+            "color": "#ff0000",
+            "zoom": 10
         },
         "nwn": {
-            "priority": 2
+            "color": "#ff00ba",
+            "zoom": 11
         },
         "rwn": {
-            "priority": 3
+            "color": "#ba00ff",
+            "zoom": 12
         },
         "lwn": {
-            "priority": 4
+            "color": "#0000ff",
+            "zoom": 14
         }
-    }
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
+        "    <td>{{ tagTrans('network', value) }}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ]
 }

From 256dc891930ff690b36b686532576f808ea92ec4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 29 Jul 2018 17:41:51 +0200
Subject: [PATCH 25/44] cycle_routes, hiking_routes: improve code

---
 cycle_routes.json  | 13 ++++++++-----
 hiking_routes.json | 20 +++++++++++---------
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index a0a648a..d5ad8fe 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -27,7 +27,7 @@
             "{% set refs = [] %}",
             "",
             "{% for master in masters %}",
-            "  {% set _p = {icn:0,ncn:1,rcn:2,lcn:3}[master.tags.network] %}",
+            "  {% set _p = {icn:0,ncn:1,rcn:2,lcn:3}[master.tags.network]|default(4) %}",
             "  {% if _p < priority %}",
             "    {% set priority = _p %}",
             "    {% set network = master.tags.network %}",
@@ -39,11 +39,10 @@
         ],
         "title": "",
         "body": [
+            "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  {% if master.tags.public_transport != 'stop_area' %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</i></li>",
-            "  {% endif %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
             "{% endfor %}",
             "</ul>"
         ],
@@ -74,6 +73,10 @@
         "lcn": {
             "color": "#0000ff",
             "zoom": 15
+        },
+        "": {
+            "color": "#007fff",
+            "zoom": 15
         }
     },
     "info": [
@@ -82,7 +85,7 @@
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
-        "    <td>{{ tagTrans('network', value) }}</td>",
+        "    <td>{% if value %}{{ tagTrans('network', value) }}{% else %}{{ trans('unknown') }}{% endif %}</td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
diff --git a/hiking_routes.json b/hiking_routes.json
index c1b5391..486238b 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -15,9 +15,9 @@
     },
     "members": true,
     "feature": {
-        "priority": "{{ {iwn:0,nwn:1,rwn:2,lwn:3}[tags.network] }}",
-        "description": "{{ tagTrans('network', tags.network) }}",
-        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color })|raw }}",
+        "priority": "{{ {iwn:0,nwn:1,rwn:2,lwn:3}[tags.network]|default(4) }}",
+        "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network|default('')].color })|raw }}",
         "styles": ""
     },
     "memberFeature": {
@@ -27,7 +27,7 @@
             "{% set refs = [] %}",
             "",
             "{% for master in masters %}",
-            "  {% set _p = {iwn:0,nwn:1,rwn:2,lwn:3}[master.tags.network] %}",
+            "  {% set _p = {iwn:0,nwn:1,rwn:2,lwn:3}[master.tags.network]|default(4) %}",
             "  {% if _p < priority %}",
             "    {% set priority = _p %}",
             "    {% set network = master.tags.network %}",
@@ -37,13 +37,11 @@
             "  {% endif %}",
             "{% endfor %}"
         ],
-        "title": "",
         "body": [
+            "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  {% if master.tags.public_transport != 'stop_area' %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b> <i>{{ tagTrans('network', master.tags.network) }}</i></li>",
-            "  {% endif %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
             "{% endfor %}",
             "</ul>"
         ],
@@ -74,6 +72,10 @@
         "lwn": {
             "color": "#0000ff",
             "zoom": 14
+        },
+        "": {
+            "color": "#007fff",
+            "zoom": 14
         }
     },
     "info": [
@@ -82,7 +84,7 @@
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
-        "    <td>{{ tagTrans('network', value) }}</td>",
+        "    <td>{% if value %}{{ tagTrans('network', value) }}{% else %}{{ trans('unknown') }}{% endif %}</td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",

From fcd65084cace3f70a10b2291106b15ef993c4186 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 3 Aug 2018 10:04:21 +0200
Subject: [PATCH 26/44] railway-routes

---
 index.json          |  3 +++
 railway-routes.json | 46 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 railway-routes.json

diff --git a/index.json b/index.json
index 9bc3268..53f5edb 100644
--- a/index.json
+++ b/index.json
@@ -238,6 +238,9 @@
                         },
                         {
                             "id": "railway-electrification"
+                        },
+                        {
+                            "id": "railway-routes"
                         }
                     ]
                 },
diff --git a/railway-routes.json b/railway-routes.json
new file mode 100644
index 0000000..881d2d2
--- /dev/null
+++ b/railway-routes.json
@@ -0,0 +1,46 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Railway Routes"
+    },
+    "query": {
+        "12": "relation[type=route][route=railway]"
+    },
+    "members": true,
+    "feature": {
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#ff0000' })|raw }}",
+        "description": "{{ tags.operator }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "title": "",
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "#ff0000",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}

From e4ad01f1ce3408e295e1110191f273dd2ba96326 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 3 Aug 2018 21:04:56 +0200
Subject: [PATCH 27/44] railway-routes: color routes by operator

---
 railway-routes.json | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/railway-routes.json b/railway-routes.json
index 881d2d2..c3e928f 100644
--- a/railway-routes.json
+++ b/railway-routes.json
@@ -8,16 +8,22 @@
     },
     "members": true,
     "feature": {
-        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#ff0000' })|raw }}",
+        "pre": "{% set color = '#' ~ tags.operator|default('')|md5|slice(0, 6) %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': color })|raw }}",
         "description": "{{ tags.operator }}",
         "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
-        "styles": ""
+        "styles": "",
+        "markerSymbol": ""
     },
     "memberFeature": {
         "pre": [
             "{% set refs = [] %}",
+            "{% set color = '#d41d8c' %}",
             "",
             "{% for master in masters %}",
+            "  {% if master.tags.operator %}",
+            "    {% set color = '#' ~ master.tags.operator|md5|slice(0, 6) %}",
+            "  {% endif %}",
             "  {% if master.tags.ref %}",
             "    {% set refs = refs|merge([ master.tags.ref ]) %}",
             "  {% endif %}",
@@ -28,13 +34,14 @@
             "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>{{ markerLine({ width: 4, color: _color })|raw }}<b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ master.tags.operator }}</i>{% endif %}</li>",
             "{% endfor %}",
             "</ul>"
         ],
         "listExclude": "1",
         "style": {
-            "color": "#ff0000",
+            "color": "{{ color }}",
             "width": 4,
             "opacity": 1,
             "text": "{{ refs|join('  ') }}             ",

From f9c0ba53ab9e644e35ba31d87618c3f68f240bed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 3 Aug 2018 21:18:30 +0200
Subject: [PATCH 28/44] railway-routes: improve popup

---
 railway-routes.json | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/railway-routes.json b/railway-routes.json
index c3e928f..39ac63c 100644
--- a/railway-routes.json
+++ b/railway-routes.json
@@ -32,10 +32,14 @@
         "title": "",
         "body": [
             "<h4>Routes</h4>",
-            "<ul>",
+            "<ul style='padding-left: 0'>",
             "{% for master in masters %}",
             "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
-            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>{{ markerLine({ width: 4, color: _color })|raw }}<b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ master.tags.operator }}</i>{% endif %}</li>",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    {{ markerLine({ width: 4, color: _color })|raw }}",
+            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+            "    <i style='color: #707070'>{{ master.tags.operator }}</i>",
+            "  </li>",
             "{% endfor %}",
             "</ul>"
         ],

From 0c9e212b4ab5683236267a7457a4c5cb9cc182f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 3 Aug 2018 22:36:27 +0200
Subject: [PATCH 29/44] cycle_routes, hiking_routes: improve popup

---
 cycle_routes.json  | 12 +++++++++---
 hiking_routes.json | 12 +++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index d5ad8fe..44509f6 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -17,8 +17,10 @@
     "feature": {
         "priority": "{{ {icn:0,ncn:1,rcn:2,lcn:3}[tags.network] }}",
         "description": "{{ tagTrans('network', tags.network) }}",
-        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color })|raw }}",
-        "styles": ""
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color|default(const[''].color) })|raw }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "styles": "",
+        "markerSymbol": ""
     },
     "memberFeature": {
         "pre": [
@@ -42,7 +44,11 @@
             "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    {{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}",
+            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+            "    <i style='color: #707070'>{{ tagTrans('network', master.tags.network) }}</i>",
+            "  </li>",
             "{% endfor %}",
             "</ul>"
         ],
diff --git a/hiking_routes.json b/hiking_routes.json
index 486238b..964a701 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -17,8 +17,10 @@
     "feature": {
         "priority": "{{ {iwn:0,nwn:1,rwn:2,lwn:3}[tags.network]|default(4) }}",
         "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
-        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network|default('')].color })|raw }}",
-        "styles": ""
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network|default('')].color|default(const[''].color) })|raw }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "styles": "",
+        "markerSymbol": ""
     },
     "memberFeature": {
         "pre": [
@@ -41,7 +43,11 @@
             "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    {{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}",
+            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+            "    <i style='color: #707070'>{{ tagTrans('network', master.tags.network) }}</i>",
+            "  </li>",
             "{% endfor %}",
             "</ul>"
         ],

From d767e9303f2d18a71cc88b6b4cca9e1499509bff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 4 Aug 2018 03:59:17 +0200
Subject: [PATCH 30/44] * routes: improve popup display

---
 cycle_routes.json   | 10 +++++-----
 hiking_routes.json  | 10 +++++-----
 pt.json             |  8 ++++++--
 railway-routes.json |  6 +++---
 4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 44509f6..e2a8757 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -42,12 +42,12 @@
         "title": "",
         "body": [
             "<h4>Routes</h4>",
-            "<ul>",
+            "<ul class='overpass-layer-list'>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
-            "    {{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}",
-            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
-            "    <i style='color: #707070'>{{ tagTrans('network', master.tags.network) }}</i>",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ tagTrans('network', master.tags.network) }}</span>",
             "  </li>",
             "{% endfor %}",
             "</ul>"
diff --git a/hiking_routes.json b/hiking_routes.json
index 964a701..929ffa9 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -41,12 +41,12 @@
         ],
         "body": [
             "<h4>Routes</h4>",
-            "<ul>",
+            "<ul class='overpass-layer-list'>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
-            "    {{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}",
-            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
-            "    <i style='color: #707070'>{{ tagTrans('network', master.tags.network) }}</i>",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].color) })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ tagTrans('network', master.tags.network) }}</span>",
             "  </li>",
             "{% endfor %}",
             "</ul>"
diff --git a/pt.json b/pt.json
index 65afdd6..509e0d3 100644
--- a/pt.json
+++ b/pt.json
@@ -137,10 +137,14 @@
         "listStopsDescription": "{{ refs|join(' ') }}",
         "body": [
             "<h4>Routes</h4>",
-            "<ul>",
+            "<ul class='overpass-layer-list'>",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport != 'stop_area' %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</li>",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.route].color })|raw }}</div></span>",
+            "    <span class='title'>{{ master.tags.name|default(master.tags.ref) }}</a></span>",
+            "    <span class='description'>{{ tagTrans('route', master.tags.route) }}</span>",
+            "  </li>",
             "  {% endif %}",
             "{% endfor %}",
             "</ul>"
diff --git a/railway-routes.json b/railway-routes.json
index 39ac63c..c81f51f 100644
--- a/railway-routes.json
+++ b/railway-routes.json
@@ -36,9 +36,9 @@
             "{% for master in masters %}",
             "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
             "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
-            "    {{ markerLine({ width: 4, color: _color })|raw }}",
-            "    {% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
-            "    <i style='color: #707070'>{{ master.tags.operator }}</i>",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: _color })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ master.tags.operator }}</span>",
             "  </li>",
             "{% endfor %}",
             "</ul>"

From 805e910681b6f170847ec40c29e232e0bbd9e008 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 4 Aug 2018 15:06:26 +0200
Subject: [PATCH 31/44] cycle_routes, hiking_routes: fix priority

---
 cycle_routes.json  | 9 +++++++--
 hiking_routes.json | 9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index e2a8757..5df6c4c 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -15,7 +15,7 @@
     },
     "members": true,
     "feature": {
-        "priority": "{{ {icn:0,ncn:1,rcn:2,lcn:3}[tags.network] }}",
+        "priority": "{{ const[tags.network].priority|default(4) }}",
         "description": "{{ tagTrans('network', tags.network) }}",
         "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color|default(const[''].color) })|raw }}",
         "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
@@ -29,7 +29,7 @@
             "{% set refs = [] %}",
             "",
             "{% for master in masters %}",
-            "  {% set _p = {icn:0,ncn:1,rcn:2,lcn:3}[master.tags.network]|default(4) %}",
+            "  {% set _p = const[master.tags.network].priority|default(4) %}",
             "  {% if _p < priority %}",
             "    {% set priority = _p %}",
             "    {% set network = master.tags.network %}",
@@ -66,22 +66,27 @@
     "const": {
         "icn": {
             "color": "#ff0000",
+            "priority": 0,
             "zoom": 6
         },
         "ncn": {
             "color": "#ff00ba",
+            "priority": 1,
             "zoom": 9
         },
         "rcn": {
             "color": "#ba00ff",
+            "priority": 2,
             "zoom": 12
         },
         "lcn": {
             "color": "#0000ff",
+            "priority": 3,
             "zoom": 15
         },
         "": {
             "color": "#007fff",
+            "priority": 4,
             "zoom": 15
         }
     },
diff --git a/hiking_routes.json b/hiking_routes.json
index 929ffa9..0ae1629 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -15,7 +15,7 @@
     },
     "members": true,
     "feature": {
-        "priority": "{{ {iwn:0,nwn:1,rwn:2,lwn:3}[tags.network]|default(4) }}",
+        "priority": "{{ const[tags.network].priority|default(4) }}",
         "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
         "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network|default('')].color|default(const[''].color) })|raw }}",
         "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
@@ -29,7 +29,7 @@
             "{% set refs = [] %}",
             "",
             "{% for master in masters %}",
-            "  {% set _p = {iwn:0,nwn:1,rwn:2,lwn:3}[master.tags.network]|default(4) %}",
+            "  {% set _p = const[master.tags.network].priority|default(4) %}",
             "  {% if _p < priority %}",
             "    {% set priority = _p %}",
             "    {% set network = master.tags.network %}",
@@ -65,22 +65,27 @@
     "const": {
         "iwn": {
             "color": "#ff0000",
+            "priority": 0,
             "zoom": 10
         },
         "nwn": {
             "color": "#ff00ba",
+            "priority": 1,
             "zoom": 11
         },
         "rwn": {
             "color": "#ba00ff",
+            "priority": 2,
             "zoom": 12
         },
         "lwn": {
             "color": "#0000ff",
+            "priority": 3,
             "zoom": 14
         },
         "": {
             "color": "#007fff",
+            "priority": 4,
             "zoom": 14
         }
     },

From 95a2fa0cb4a46f25f98adf2e7194eea148c149c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 4 Aug 2018 16:17:10 +0200
Subject: [PATCH 32/44] New sub category 'outdoor' which includes mtb routes

---
 index.json      |  3 +++
 mtb-routes.json | 50 +++++++++++++++++++++++++++++++++++++++++++++++++
 outdoor.json    | 12 ++++++++++++
 3 files changed, 65 insertions(+)
 create mode 100644 mtb-routes.json
 create mode 100644 outdoor.json

diff --git a/index.json b/index.json
index 53f5edb..2853a80 100644
--- a/index.json
+++ b/index.json
@@ -43,6 +43,9 @@
                 },
                 {
                     "id": "children"
+                },
+                {
+                    "id": "outdoor"
                 }
             ]
         },
diff --git a/mtb-routes.json b/mtb-routes.json
new file mode 100644
index 0000000..9793a62
--- /dev/null
+++ b/mtb-routes.json
@@ -0,0 +1,50 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Mountain bike routes"
+    },
+    "query": {
+        "13": "relation[type=route][route=mtb]"
+    },
+    "members": true,
+    "feature": {
+        "description": "{{ tagTrans('route', 'mtb') }}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#007fff' })|raw }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "styles": "",
+        "markerSymbol": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul class='overpass-layer-list'>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: '#007fff' })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ tagTrans('route', 'mtb') }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "#007fff",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}
diff --git a/outdoor.json b/outdoor.json
new file mode 100644
index 0000000..eee4aca
--- /dev/null
+++ b/outdoor.json
@@ -0,0 +1,12 @@
+{
+    "type": "index",
+    "name": {
+        "de": "Freiluftaktivitäten",
+        "en": "Outdoor activities"
+    },
+    "subCategories": [
+        {
+            "id": "mtb-routes"
+        }
+    ]
+}

From fb8fc5c05c99138876b2c7b4e8da9a15356f0691 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 4 Aug 2018 20:37:34 +0200
Subject: [PATCH 33/44] pt: support PTv1 (and PTv3?)

---
 pt.json | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/pt.json b/pt.json
index 509e0d3..9a39c65 100644
--- a/pt.json
+++ b/pt.json
@@ -74,7 +74,7 @@
         "body": [
             "<h4>Stops</h4><ul>",
             "{% for member in members %}",
-            "{% if member.role|slice(-4) == 'stop' %}",
+            "{% if member.tags.highway == 'bus_stop' or member.tags.amenity == 'bus_station' or member.tags.amenity == 'ferry_terminal' or member.tags.railway == 'tram_stop' or member.tags.railway == 'halt' or member.tags.railway == 'station' or member.tags.aerialway == 'station' or member.tags.public_transport == 'stop_position' or member.role|slice(-4) == 'stop' %}",
             "<li data-object='{{ member.id }}' data-sublayer='member'><b>{{ member.tags.name|default(member.id) }}</li>",
             "{% endif %}",
             "{% endfor %}",
@@ -89,6 +89,7 @@
         "pre": [
             "{% set stopName = '' %}",
             "{% set isStop = false %}",
+            "{% if tags.highway == 'bus_stop' or tags.amenity == 'bus_station' or tags.amenity == 'ferry_terminal' or tags.railway == 'tram_stop' or tags.railway == 'halt' or tags.railway == 'station' or tags.aerialway == 'station' or tags.public_transport == 'stop_position' %}{% set isStop = true %}{% endif %}",
             "{% set isWay = false %}",
             "{% set aRoute = null %}",
             "{% set refs = [] %}",
@@ -96,9 +97,9 @@
             "  {% if master.tags.public_transport == 'stop_area' %}",
             "    {% set stopName = master.tags.name %}",
             "  {% else %}",
-            "    {% if master.role|slice(-4) == 'stop' %}",
+            "    {% if master.role|matches('^(|.*stop)$') and isStop %}",
             "      {% set isStop = true %}",
-            "    {% elseif master.role|matches('^(|forward|backward)$') %}",
+            "    {% elseif master.role|matches('^(|forward|backward)$') and type == 'way' %}",
             "      {% set isWay = true %}",
             "    {% endif %}",
             "    {% set aRoute = master %}",
@@ -132,7 +133,7 @@
             "width": "5",
             "radius": 3
         },
-        "title": "{% if tags.public_transport == 'stop_position' %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
+        "title": "{% if isStop %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
         "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
         "listStopsDescription": "{{ refs|join(' ') }}",
         "body": [
@@ -142,7 +143,7 @@
             "  {% if master.tags.public_transport != 'stop_area' %}",
             "  <li data-object=\"{{ master.id }}\">",
             "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.route].color })|raw }}</div></span>",
-            "    <span class='title'>{{ master.tags.name|default(master.tags.ref) }}</a></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
             "    <span class='description'>{{ tagTrans('route', master.tags.route) }}</span>",
             "  </li>",
             "  {% endif %}",

From ce40299b2ab37e010b05261e03468f859c5681ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 4 Aug 2018 22:17:16 +0200
Subject: [PATCH 34/44] PT: re-enable PT Amenities category

---
 index.json | 30 +++++++++++++++++++++++++++++-
 pt.json    | 19 ++-----------------
 2 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/index.json b/index.json
index 2853a80..7e3ca9a 100644
--- a/index.json
+++ b/index.json
@@ -162,7 +162,35 @@
                     ]
                 },
                 {
-                    "id": "pt"
+                    "id": "transport_pt",
+                    "type": "index",
+                    "name": {
+                        "ast": "Tresporte Públicu",
+                        "cs": "Veřejná doprava",
+                        "de": "Öffentlicher Verkehr",
+                        "el": "Δημόσιες Μεταφορές",
+                        "en": "Public Transportation",
+                        "et": "Ühistransport",
+                        "fr": "Transports publics",
+                        "hu": "Tömegközlekedés",
+                        "it": "Trasporti pubblici",
+                        "ja": "公共輸送",
+                        "nl": "Openbaar vervoer",
+                        "pl": "Transport Publiczny",
+                        "ro": "Transport public",
+                        "ru": "Общественный транспорт",
+                        "uk": "Громадський транспорт",
+                        "pt-br": "Transporte Público",
+                        "pt": "Transportes públicos"
+                    },
+                    "subCategories": [
+                        {
+                            "id": "pt_amenities"
+                        },
+                        {
+                            "id": "pt"
+                        }
+                    ]
                 },
                 {
                     "id": "transport_car",
diff --git a/pt.json b/pt.json
index 9a39c65..bf8ca22 100644
--- a/pt.json
+++ b/pt.json
@@ -1,23 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "ast": "Tresporte Públicu",
-        "cs": "Veřejná doprava",
-        "de": "Öffentlicher Verkehr",
-        "el": "Δημόσιες Μεταφορές",
-        "en": "Public Transportation",
-        "et": "Ühistransport",
-        "fr": "Transports publics",
-        "hu": "Tömegközlekedés",
-        "it": "Trasporti pubblici",
-        "ja": "公共輸送",
-        "nl": "Openbaar vervoer",
-        "pl": "Transport Publiczny",
-        "ro": "Transport public",
-        "ru": "Общественный транспорт",
-        "uk": "Громадський транспорт",
-        "pt-br": "Transporte Público",
-        "pt": "Transportes públicos"
+        "en": "Public transport map",
+        "de": "ÖV Karte"
     },
     "query": {
         "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",

From ece50087985eecd85b4166666ff809705335325d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 5 Aug 2018 07:55:44 +0200
Subject: [PATCH 35/44] pt: route icons in stop/way popup

---
 pt.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pt.json b/pt.json
index bf8ca22..6dd8884 100644
--- a/pt.json
+++ b/pt.json
@@ -127,7 +127,7 @@
             "{% for master in masters %}",
             "  {% if master.tags.public_transport != 'stop_area' %}",
             "  <li data-object=\"{{ master.id }}\">",
-            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.route].color })|raw }}</div></span>",
+            "    <span class='markerParent'><div class='marker'>{{ markerCircle({fillColor:const[master.tags.route].color})|raw }}</div><div class='icon'>{{ const[master.tags.route].sign|raw }}</div></span>",
             "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
             "    <span class='description'>{{ tagTrans('route', master.tags.route) }}</span>",
             "  </li>",

From dcb7010a7107bdd7cd72c6c6f2bd7f02238d1320 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 5 Aug 2018 08:23:04 +0200
Subject: [PATCH 36/44] pt: show only stops with min. 1 route

---
 pt.json | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/pt.json b/pt.json
index 6dd8884..2ebef1b 100644
--- a/pt.json
+++ b/pt.json
@@ -74,6 +74,7 @@
         "pre": [
             "{% set stopName = '' %}",
             "{% set isStop = false %}",
+            "{% set stopCount = 0 %}",
             "{% if tags.highway == 'bus_stop' or tags.amenity == 'bus_station' or tags.amenity == 'ferry_terminal' or tags.railway == 'tram_stop' or tags.railway == 'halt' or tags.railway == 'station' or tags.aerialway == 'station' or tags.public_transport == 'stop_position' %}{% set isStop = true %}{% endif %}",
             "{% set isWay = false %}",
             "{% set aRoute = null %}",
@@ -84,6 +85,7 @@
             "  {% else %}",
             "    {% if master.role|matches('^(|.*stop)$') and isStop %}",
             "      {% set isStop = true %}",
+            "      {% set stopCount = stopCount + 1 %}",
             "    {% elseif master.role|matches('^(|forward|backward)$') and type == 'way' %}",
             "      {% set isWay = true %}",
             "    {% endif %}",
@@ -100,7 +102,7 @@
         ],
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
         "listStopsMarkerSign": "",
-        "styles": "{% if isStop %}stop{% elseif isWay %}way{% else %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
         "style:way": {
             "color": [
                 "{{ color|default('#ff0000') }}"
@@ -136,7 +138,7 @@
             "</ul>"
         ],
         "listRoutesExclude": "true",
-        "listStopsExclude": "{{ not isStop }}"
+        "listStopsExclude": "{{ not isStop or stopCount == 0 }}"
     },
     "info": [
         "<table>",

From a0bfccf64e58e315fc8cf0d1eb6bebbdd229768a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 7 Aug 2018 16:16:23 +0200
Subject: [PATCH 37/44] Update language files

---
 lang/ast.json      | 8 ++++++--
 lang/ca.json       | 3 +++
 lang/cs.json       | 8 ++++++--
 lang/de.json       | 6 +++++-
 lang/el.json       | 8 ++++++--
 lang/en.json       | 6 +++++-
 lang/es.json       | 3 +++
 lang/et.json       | 8 ++++++--
 lang/fr.json       | 6 +++++-
 lang/hu.json       | 8 ++++++--
 lang/it.json       | 8 ++++++--
 lang/ja.json       | 8 ++++++--
 lang/nl.json       | 8 ++++++--
 lang/pl.json       | 8 ++++++--
 lang/pt-br.json    | 6 +++++-
 lang/pt.json       | 6 +++++-
 lang/ro.json       | 8 ++++++--
 lang/ru.json       | 8 ++++++--
 lang/template.json | 3 +++
 lang/uk.json       | 8 ++++++--
 20 files changed, 106 insertions(+), 29 deletions(-)

diff --git a/lang/ast.json b/lang/ast.json
index b443288..54948ae 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -27,21 +27,24 @@
     "category:internet": "Accesu a Internet",
     "category:leisure": "Recréu",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "Formaciones naturales",
     "category:other": "Otres",
+    "category:outdoor": "",
     "category:phone": "Teléfonos",
     "category:places": "Llugares",
     "category:places_geo": "Llugares",
     "category:playgrounds": "Xuegos infantiles",
     "category:post": "Corréu",
     "category:power": "Enerxía",
-    "category:pt": "Tresporte Públicu",
+    "category:pt": "",
     "category:pt:stops": "Paraes y estaciones",
     "category:pt:routes": "",
     "category:pt_amenities": "Infraestructures",
     "category:public": "Serviciu Públicu",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Relixón",
     "category:residential": "Zones residenciales",
     "category:resources": "Estraición de recursos",
@@ -59,5 +62,6 @@
     "category:railway": "Ferrocarril",
     "category:services": "Servicios",
     "category:transport": "Tresporte",
-    "category:transport_car": "Tráficu individual"
+    "category:transport_car": "Tráficu individual",
+    "category:transport_pt": "Tresporte Públicu"
 }
diff --git a/lang/ca.json b/lang/ca.json
index c2518a1..de49b3a 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -27,8 +27,10 @@
     "category:internet": "Accés a Internet",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "",
     "category:places_geo": "",
@@ -42,6 +44,7 @@
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "",
     "category:residential": "",
     "category:resources": "",
diff --git a/lang/cs.json b/lang/cs.json
index e1c1230..14c38f7 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -27,21 +27,24 @@
     "category:internet": "Přístup k internetu",
     "category:leisure": "Volný čas",
     "category:military": "Vojenské",
+    "category:mtb-routes": "",
     "category:natural": "Přírodní úkazy",
     "category:other": "Jiné",
+    "category:outdoor": "",
     "category:phone": "Telefony",
     "category:places": "Sídla",
     "category:places_geo": "Sídla",
     "category:playgrounds": "Hřiště",
     "category:post": "Poštovní služby",
     "category:power": "Elektřina",
-    "category:pt": "Veřejná doprava",
+    "category:pt": "",
     "category:pt:stops": "Zastávky & Stanice",
     "category:pt:routes": "",
     "category:pt_amenities": "Občanská vybavenost",
     "category:public": "Veřejné služby",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religion",
     "category:residential": "Obytné oblasti",
     "category:resources": "Těžba surovin",
@@ -59,5 +62,6 @@
     "category:railway": "Železnice",
     "category:services": "Služby",
     "category:transport": "Doprava",
-    "category:transport_car": "Individuální doprava"
+    "category:transport_car": "Individuální doprava",
+    "category:transport_pt": "Veřejná doprava"
 }
diff --git a/lang/de.json b/lang/de.json
index 4b1c9da..1f9715d 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -27,21 +27,24 @@
     "category:internet": "Internetzugang",
     "category:leisure": "Freizeit",
     "category:military": "Militär",
+    "category:mtb-routes": "",
     "category:natural": "Geographische Objekte",
     "category:other": "Andere",
+    "category:outdoor": "Freiluftaktivitäten",
     "category:phone": "Telekommunikation",
     "category:places": "Orte",
     "category:places_geo": "Orte",
     "category:playgrounds": "Spielplätze",
     "category:post": "Post",
     "category:power": "Energie",
-    "category:pt": "Öffentlicher Verkehr",
+    "category:pt": "ÖV Karte",
     "category:pt:stops": "Haltestellen",
     "category:pt:routes": "Routen",
     "category:pt_amenities": "Einrichtungen",
     "category:public": "Öffentliche Dienste",
     "category:railway-electrification": "Eisenbahn Elektrifizierung",
     "category:railway-infrastructure": "Eisenbahn Infrastruktur",
+    "category:railway-routes": "",
     "category:religion": "Religion",
     "category:residential": "Wohngebiete",
     "category:resources": "Ressourcengewinnung",
@@ -63,5 +66,6 @@
     "category:transport": "Transport",
     "category:transport_car": "Motorisierter Individualverkehr",
     "category:transport_cycle": "Radfahren",
+    "category:transport_pt": "Öffentlicher Verkehr",
     "category:transport_walk": "Zu Fuß gehen"
 }
diff --git a/lang/el.json b/lang/el.json
index c2405f9..a629d53 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "Αναψυχή",
     "category:military": "Στρατιωτικό",
+    "category:mtb-routes": "",
     "category:natural": "Φυσικοί Σχηματισμοί",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "Μέρη",
     "category:places_geo": "Μέρη",
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
-    "category:pt": "Δημόσιες Μεταφορές",
+    "category:pt": "",
     "category:pt:stops": "Στάσεις & Σταθμοί",
     "category:pt:routes": "",
     "category:pt_amenities": "",
     "category:public": "Δημόσιες Υπηρεσίες",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Θρησκεία",
     "category:residential": "Περιοχές Κατοικίας",
     "category:resources": "",
@@ -57,5 +60,6 @@
     "category:works": "",
     "category:leisure_sport_shopping": "Αναψυχή, Αθλητισμός και Αγορές",
     "category:services": "Υπηρεσίες",
-    "category:transport": "Μεταφορές"
+    "category:transport": "Μεταφορές",
+    "category:transport_pt": "Δημόσιες Μεταφορές"
 }
diff --git a/lang/en.json b/lang/en.json
index e99027c..c5920a4 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -27,21 +27,24 @@
     "category:internet": "Internet access",
     "category:leisure": "Leisure",
     "category:military": "Military",
+    "category:mtb-routes": "Mountain bike routes",
     "category:natural": "Natural Formations",
     "category:other": "Other",
+    "category:outdoor": "Outdoor activities",
     "category:phone": "Phone",
     "category:places": "Places",
     "category:places_geo": "Places",
     "category:playgrounds": "Playground",
     "category:post": "Post",
     "category:power": "Power",
-    "category:pt": "Public Transportation",
+    "category:pt": "Public transport map",
     "category:pt:stops": "Stops & Stations",
     "category:pt:routes": "Routes",
     "category:pt_amenities": "Amenities",
     "category:public": "Public Services",
     "category:railway-electrification": "Railway electrification",
     "category:railway-infrastructure": "Railway infrastructure",
+    "category:railway-routes": "Railway Routes",
     "category:religion": "Religion",
     "category:residential": "Residential Areas",
     "category:resources": "Resource Extraction",
@@ -63,5 +66,6 @@
     "category:transport": "Transportation",
     "category:transport_car": "Individual Traffic",
     "category:transport_cycle": "Cycling",
+    "category:transport_pt": "Public Transportation",
     "category:transport_walk": "Walking"
 }
diff --git a/lang/es.json b/lang/es.json
index 71bf829..18d7d3e 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -27,8 +27,10 @@
     "category:internet": "Acceso a Internet",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "",
     "category:places_geo": "",
@@ -42,6 +44,7 @@
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "",
     "category:residential": "",
     "category:resources": "",
diff --git a/lang/et.json b/lang/et.json
index f69c266..fcd6066 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "Ülejäänud",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Kohad",
     "category:places_geo": "Kohad",
     "category:playgrounds": "Mänguväljak",
     "category:post": "",
     "category:power": "Elekter",
-    "category:pt": "Ühistransport",
+    "category:pt": "",
     "category:pt:stops": "",
     "category:pt:routes": "",
     "category:pt_amenities": "",
     "category:public": "Kommunaalteenused",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religioon",
     "category:residential": "Elamupiirkonnad",
     "category:resources": "",
@@ -58,5 +61,6 @@
     "category:leisure_sport_shopping": "Vaba aeg, sport ja ostmine",
     "category:railway": "Raudtee",
     "category:services": "Teenused",
-    "category:transport": "Transport"
+    "category:transport": "Transport",
+    "category:transport_pt": "Ühistransport"
 }
diff --git a/lang/fr.json b/lang/fr.json
index 1b73c1c..290c767 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -27,21 +27,24 @@
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:military": "Militaire",
+    "category:mtb-routes": "",
     "category:natural": "Éléments naturels",
     "category:other": "Autres",
+    "category:outdoor": "",
     "category:phone": "Téléphone",
     "category:places": "Lieux",
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
     "category:power": "Énergie",
-    "category:pt": "Transports publics",
+    "category:pt": "",
     "category:pt:stops": "Arrêts/Stops, Stations",
     "category:pt:routes": "Lignes",
     "category:pt_amenities": "Équipements",
     "category:public": "Services Publics",
     "category:railway-electrification": "Puissance électrique ferroviaire",
     "category:railway-infrastructure": "Infrastructure ferroviaire",
+    "category:railway-routes": "",
     "category:religion": "Religion",
     "category:residential": "Zones résidentielles",
     "category:resources": "Extraction des ressources",
@@ -63,5 +66,6 @@
     "category:transport": "Transports",
     "category:transport_car": "Transport automobile",
     "category:transport_cycle": "Cyclisme",
+    "category:transport_pt": "Transports publics",
     "category:transport_walk": "Marche à pied"
 }
diff --git a/lang/hu.json b/lang/hu.json
index 531ad16..18aff4a 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -27,21 +27,24 @@
     "category:internet": "Internethozzáférés",
     "category:leisure": "",
     "category:military": "Katonai",
+    "category:mtb-routes": "",
     "category:natural": "Természeti képződmények",
     "category:other": "Egyéb",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Helyek",
     "category:places_geo": "Helyek",
     "category:playgrounds": "",
     "category:post": "Posta",
     "category:power": "Áramellátás",
-    "category:pt": "Tömegközlekedés",
+    "category:pt": "",
     "category:pt:stops": "Megállók és állomások",
     "category:pt:routes": "",
     "category:pt_amenities": "",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Vallás",
     "category:residential": "Lakóövezetek",
     "category:resources": "",
@@ -58,5 +61,6 @@
     "category:leisure_sport_shopping": "Szabadidő",
     "category:railway": "Vasút",
     "category:services": "Szolgáltatás",
-    "category:transport": "Közlekedés"
+    "category:transport": "Közlekedés",
+    "category:transport_pt": "Tömegközlekedés"
 }
diff --git a/lang/it.json b/lang/it.json
index b929314..d910d5c 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "Tempo libero",
     "category:military": "Militare",
+    "category:mtb-routes": "",
     "category:natural": "Natura",
     "category:other": "Altri",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "Luoghi",
     "category:places_geo": "Luoghi",
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "Energia",
-    "category:pt": "Trasporti pubblici",
+    "category:pt": "",
     "category:pt:stops": "Stazioni e fermate",
     "category:pt:routes": "",
     "category:pt_amenities": "Infrastrutture",
     "category:public": "Servizi pubblici",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religione",
     "category:residential": "Aree residenziali",
     "category:resources": "Areee estrattive",
@@ -59,5 +62,6 @@
     "category:railway": "Ferrovie",
     "category:services": "Servizi",
     "category:transport": "Trasporti",
-    "category:transport_car": "Trasporti individuali"
+    "category:transport_car": "Trasporti individuali",
+    "category:transport_pt": "Trasporti pubblici"
 }
diff --git a/lang/ja.json b/lang/ja.json
index 601a6a6..bb9baa3 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -27,21 +27,24 @@
     "category:internet": "インターネット接続",
     "category:leisure": "レジャー",
     "category:military": "軍事",
+    "category:mtb-routes": "",
     "category:natural": "自然地層",
     "category:other": "その他",
+    "category:outdoor": "",
     "category:phone": "電話",
     "category:places": "場所",
     "category:places_geo": "場所",
     "category:playgrounds": "",
     "category:post": "郵便",
     "category:power": "電力",
-    "category:pt": "公共輸送",
+    "category:pt": "",
     "category:pt:stops": "停留所と駅",
     "category:pt:routes": "",
     "category:pt_amenities": "生活環境",
     "category:public": "公共サービス",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "宗教",
     "category:residential": "住居エリア",
     "category:resources": "",
@@ -59,5 +62,6 @@
     "category:railway": "鉄道",
     "category:services": "サービス",
     "category:transport": "輸送",
-    "category:transport_car": "個人輸送機関"
+    "category:transport_car": "個人輸送機関",
+    "category:transport_pt": "公共輸送"
 }
diff --git a/lang/nl.json b/lang/nl.json
index 6aa9128..beab190 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -27,21 +27,24 @@
     "category:internet": "Internettoegang",
     "category:leisure": "Vrije tijd",
     "category:military": "Militair",
+    "category:mtb-routes": "",
     "category:natural": "Natuurlijke Formaties",
     "category:other": "Andere",
+    "category:outdoor": "",
     "category:phone": "Telefonie",
     "category:places": "Plaatsen",
     "category:places_geo": "Plaatsen",
     "category:playgrounds": "",
     "category:post": "Post",
     "category:power": "Stroomvoorziening",
-    "category:pt": "Openbaar vervoer",
+    "category:pt": "",
     "category:pt:stops": "Haltes en Stations",
     "category:pt:routes": "",
     "category:pt_amenities": "Voorzieningen",
     "category:public": "Openbare diensten",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religie",
     "category:residential": "Woongebieden",
     "category:resources": "Grondstoffenwinning",
@@ -59,5 +62,6 @@
     "category:railway": "Spoorwegen",
     "category:services": "Dienstverlening",
     "category:transport": "Vervoer",
-    "category:transport_car": "Gemotoriseerd individueel verkeer"
+    "category:transport_car": "Gemotoriseerd individueel verkeer",
+    "category:transport_pt": "Openbaar vervoer"
 }
diff --git a/lang/pl.json b/lang/pl.json
index 426a133..e4ef278 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "Miejsca",
     "category:places_geo": "Miejsca",
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
-    "category:pt": "Transport Publiczny",
+    "category:pt": "",
     "category:pt:stops": "Przystanki i Stacje",
     "category:pt:routes": "",
     "category:pt_amenities": "",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "",
     "category:residential": "",
     "category:resources": "",
@@ -58,5 +61,6 @@
     "category:leisure_sport_shopping": "Wypoczynek, Sport i Zakupy",
     "category:services": "Usługi",
     "category:transport": "Transport",
-    "category:transport_car": "Transport Indywidualny"
+    "category:transport_car": "Transport Indywidualny",
+    "category:transport_pt": "Transport Publiczny"
 }
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 885e601..2018af4 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -27,21 +27,24 @@
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "Formações Naturais",
     "category:other": "Outros",
+    "category:outdoor": "",
     "category:phone": "Telefone",
     "category:places": "Lugares",
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
     "category:power": "Energia",
-    "category:pt": "Transporte Público",
+    "category:pt": "",
     "category:pt:stops": "Paradas e Estações",
     "category:pt:routes": "Rotas",
     "category:pt_amenities": "Equipamentos",
     "category:public": "Serviços Públicos",
     "category:railway-electrification": "Eletrificação Ferroviária",
     "category:railway-infrastructure": "Infraestrutura Ferroviária",
+    "category:railway-routes": "",
     "category:religion": "Religião",
     "category:residential": "Áreas Residenciais",
     "category:resources": "Extração de Recursos",
@@ -63,5 +66,6 @@
     "category:transport": "Transportes",
     "category:transport_car": "Tráfego Individual",
     "category:transport_cycle": "Ciclismo",
+    "category:transport_pt": "Transporte Público",
     "category:transport_walk": "Pedestre"
 }
diff --git a/lang/pt.json b/lang/pt.json
index 55fd1fa..6b83f42 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -27,21 +27,24 @@
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "Formações naturais",
     "category:other": "Outros",
+    "category:outdoor": "",
     "category:phone": "Telefone",
     "category:places": "Lugares",
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parques infantis",
     "category:post": "Correios",
     "category:power": "Eletricidade",
-    "category:pt": "Transportes públicos",
+    "category:pt": "",
     "category:pt:stops": "",
     "category:pt:routes": "Rotas",
     "category:pt_amenities": "",
     "category:public": "Serviços públicos",
     "category:railway-electrification": "Eletrificação ferroviária",
     "category:railway-infrastructure": "Infraestrutura ferroviária",
+    "category:railway-routes": "",
     "category:religion": "Religião",
     "category:residential": "Áreas residenciais",
     "category:resources": "Extração de recursos",
@@ -63,5 +66,6 @@
     "category:transport": "Transportes",
     "category:transport_car": "Transporte individual",
     "category:transport_cycle": "Ciclismo",
+    "category:transport_pt": "Transportes públicos",
     "category:transport_walk": "Pedestre"
 }
diff --git a/lang/ro.json b/lang/ro.json
index 46bc912..543a739 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -27,21 +27,24 @@
     "category:internet": "Acces internet",
     "category:leisure": "Timp liber",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "Altele",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Locuri",
     "category:places_geo": "Locuri",
     "category:playgrounds": "Loc de joaca",
     "category:post": "",
     "category:power": "Energie",
-    "category:pt": "Transport public",
+    "category:pt": "",
     "category:pt:stops": "",
     "category:pt:routes": "",
     "category:pt_amenities": "",
     "category:public": "Servicii publice",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religie",
     "category:residential": "Zona rezidentiala",
     "category:resources": "",
@@ -58,5 +61,6 @@
     "category:leisure_sport_shopping": "Timp liber, Sport si Cumparaturi",
     "category:services": "Servicii",
     "category:transport": "Transport",
-    "category:transport_car": "Trafic individual"
+    "category:transport_car": "Trafic individual",
+    "category:transport_pt": "Transport public"
 }
diff --git a/lang/ru.json b/lang/ru.json
index 50243a8..3f308a2 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "Досуг",
     "category:military": "Вооружённые силы",
+    "category:mtb-routes": "",
     "category:natural": "Природные образования",
     "category:other": "Прочее",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "Места",
     "category:places_geo": "Места",
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "Энергетика",
-    "category:pt": "Общественный транспорт",
+    "category:pt": "",
     "category:pt:stops": "Остановки и станции",
     "category:pt:routes": "",
     "category:pt_amenities": "Транспортные принадлежности",
     "category:public": "Общественные места",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Религия",
     "category:residential": "Жилые районы",
     "category:resources": "Добыча ресурсов",
@@ -59,5 +62,6 @@
     "category:railway": "Железные дороги",
     "category:services": "Услуги",
     "category:transport": "Транспорт",
-    "category:transport_car": "Частный транспорт"
+    "category:transport_car": "Частный транспорт",
+    "category:transport_pt": "Общественный транспорт"
 }
diff --git a/lang/template.json b/lang/template.json
index 9740aee..56c2d2c 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -27,8 +27,10 @@
     "category:internet": "",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "",
     "category:places_geo": "",
@@ -42,6 +44,7 @@
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "",
     "category:residential": "",
     "category:resources": "",
diff --git a/lang/uk.json b/lang/uk.json
index 7663c5e..8ac916e 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -27,21 +27,24 @@
     "category:internet": "",
     "category:leisure": "Дозвілля",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "Природне середовище",
     "category:other": "Інше",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "Місцевість",
     "category:places_geo": "Місцевість",
     "category:playgrounds": "Дитячий майданчик",
     "category:post": "",
     "category:power": "",
-    "category:pt": "Громадський транспорт",
+    "category:pt": "",
     "category:pt:stops": "Зупинки та станції",
     "category:pt:routes": "",
     "category:pt_amenities": "Amenities",
     "category:public": "Громадські місця",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Релігія",
     "category:residential": "Житлова зона",
     "category:resources": "",
@@ -58,5 +61,6 @@
     "category:leisure_sport_shopping": "Дозвілля",
     "category:services": "Послуги",
     "category:transport": "Транспорт",
-    "category:transport_car": "Приватний транспорт"
+    "category:transport_car": "Приватний транспорт",
+    "category:transport_pt": "Громадський транспорт"
 }

From 31e66a0388caa3123ee6019d27dc33a1971e050b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 29 Jul 2018 19:10:37 +0200
Subject: [PATCH 38/44] car_routes: inital code (mostly copied from
 cycle_routes)

---
 car_routes.json | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 index.json      |  3 +++
 2 files changed, 50 insertions(+)
 create mode 100644 car_routes.json

diff --git a/car_routes.json b/car_routes.json
new file mode 100644
index 0000000..2cb3ba7
--- /dev/null
+++ b/car_routes.json
@@ -0,0 +1,47 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Car routes"
+    },
+    "query": {
+        "10": "relation[type=route][route=road]"
+    },
+    "members": true,
+    "feature": {
+        "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#ff0000' )].color })|raw }}",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "{% if tags.ref %}",
+            "  {% set refs = refs|merge([ tags.ref ]) %}",
+            "{% endif %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "#ff0000",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}
diff --git a/index.json b/index.json
index 7e3ca9a..dfcb4ee 100644
--- a/index.json
+++ b/index.json
@@ -217,6 +217,9 @@
                         },
                         {
                             "id": "car_maxspeed"
+                        },
+                        {
+                            "id": "car_routes"
                         }
                     ]
                 }

From 529e8ecfd82e23c5c8df12ed6126cf6d8da37cce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 8 Aug 2018 07:06:18 +0200
Subject: [PATCH 39/44] car_routes: complete; color by 'network' tag

---
 car_routes.json     | 18 +++++++++++++++---
 railway-routes.json |  2 +-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/car_routes.json b/car_routes.json
index 2cb3ba7..22e00ba 100644
--- a/car_routes.json
+++ b/car_routes.json
@@ -8,18 +8,25 @@
     },
     "members": true,
     "feature": {
+        "pre": "{% set color = '#' ~ tags.network|default('')|md5|slice(0, 6) %}",
         "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
-        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#ff0000' )].color })|raw }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': color })|raw }}",
+        "markerSymbol": "",
         "styles": ""
     },
     "memberFeature": {
         "pre": [
             "{% set refs = [] %}",
+            "{% set color = '#d41d8c' %}",
             "{% if tags.ref %}",
             "  {% set refs = refs|merge([ tags.ref ]) %}",
             "{% endif %}",
             "",
             "{% for master in masters %}",
+            "  {% if master.tags.network %}",
+            "    {% set color = '#' ~ master.tags.network|md5|slice(0, 6) %}",
+            "  {% endif %}",
             "  {% if master.tags.ref %}",
             "    {% set refs = refs|merge([ master.tags.ref ]) %}",
             "  {% endif %}",
@@ -29,13 +36,18 @@
             "<h4>Routes</h4>",
             "<ul>",
             "{% for master in masters %}",
-            "  <li data-object=\"{{ master.id }}\"><b>{{ master.tags.name|default(master.tags.ref) }}</b>{% if master.tags.network %} <i>{{ tagTrans('network', master.tags.network) }}</i>{% endif %}</li>",
+            "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: _color })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ tagTrans('network', master.tags.network) }}</span>",
+            "  </li>",
             "{% endfor %}",
             "</ul>"
         ],
         "listExclude": "1",
         "style": {
-            "color": "#ff0000",
+            "color": "{{ color }}",
             "width": 4,
             "opacity": 1,
             "text": "{{ refs|join('  ') }}             ",
diff --git a/railway-routes.json b/railway-routes.json
index c81f51f..ba5c66f 100644
--- a/railway-routes.json
+++ b/railway-routes.json
@@ -32,7 +32,7 @@
         "title": "",
         "body": [
             "<h4>Routes</h4>",
-            "<ul style='padding-left: 0'>",
+            "<ul>",
             "{% for master in masters %}",
             "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
             "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",

From b09b903aa6901519b9fa1545700e7aeae848a05c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 9 Aug 2018 08:55:08 +0200
Subject: [PATCH 40/44] pt: order fields as written by openstreetbrowser-editor

---
 pt.json | 88 +++++++++++++++++++++++++++------------------------------
 1 file changed, 42 insertions(+), 46 deletions(-)

diff --git a/pt.json b/pt.json
index 2ebef1b..cfcca14 100644
--- a/pt.json
+++ b/pt.json
@@ -13,27 +13,26 @@
             ")"
         ]
     },
-    "members": true,
     "lists": {
         "stops": {
             "prefix": "listStops",
-	    "name": {
-		"ast": "Paraes y estaciones",
-		"cs": "Zastávky & Stanice",
-		"de": "Haltestellen",
-		"el": "Στάσεις & Σταθμοί",
-		"en": "Stops & Stations",
-		"es": "Paradas y estaciones",
-		"fr": "Arrêts/Stops, Stations",
-		"hu": "Megállók és állomások",
-		"it": "Stazioni e fermate",
-		"ja": "停留所と駅",
-		"nl": "Haltes en Stations",
-		"pl": "Przystanki i Stacje",
-		"pt-br": "Paradas e Estações",
-		"ru": "Остановки и станции",
-		"uk": "Зупинки та станції"
-	    }
+            "name": {
+                "ast": "Paraes y estaciones",
+                "cs": "Zastávky & Stanice",
+                "de": "Haltestellen",
+                "el": "Στάσεις & Σταθμοί",
+                "en": "Stops & Stations",
+                "es": "Paradas y estaciones",
+                "fr": "Arrêts/Stops, Stations",
+                "hu": "Megállók és állomások",
+                "it": "Stazioni e fermate",
+                "ja": "停留所と駅",
+                "nl": "Haltes en Stations",
+                "pl": "Przystanki i Stacje",
+                "pt-br": "Paradas e Estações",
+                "ru": "Остановки и станции",
+                "uk": "Зупинки та станції"
+            }
         },
         "routes": {
             "prefix": "listRoutes",
@@ -48,8 +47,6 @@
     },
     "feature": {
         "pre": "{% set isStopArea = tags.public_transport == 'stop_area' %}",
-        "listRoutesExclude": "{{ isStopArea }}",
-        "styles": "",
         "title": [
             "{% if tags.ref %}{{ tags.ref }} - {% endif %}",
             "",
@@ -65,11 +62,14 @@
             "{% endfor %}",
             "</ul>"
         ],
-	"listStopsExclude": "true",
+        "markerSymbol": "",
+        "styles": "",
+        "listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
-        "markerSymbol": null,
-        "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}"
+        "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
+        "listRoutesExclude": "{{ isStopArea }}"
     },
+    "members": true,
     "memberFeature": {
         "pre": [
             "{% set stopName = '' %}",
@@ -100,29 +100,7 @@
             "{% set refs = refs|unique|natsort({ insensitive: true }) %}",
             "{% set color = const[aRoute.tags.route].color %}"
         ],
-        "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
-        "listStopsMarkerSign": "",
-        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
-        "style:way": {
-            "color": [
-                "{{ color|default('#ff0000') }}"
-            ],
-            "width": "3",
-            "text": "{{ refs|join('  ') }}             ",
-            "textRepeat": "1",
-            "textOffset": "12",
-            "textFontWeight": "bold"
-        },
-        "style:stop": {
-            "color": [
-                "{{ color|default('#ff0000') }}"
-            ],
-            "width": "5",
-            "radius": 3
-        },
         "title": "{% if isStop %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
-        "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
-        "listStopsDescription": "{{ refs|join(' ') }}",
         "body": [
             "<h4>Routes</h4>",
             "<ul class='overpass-layer-list'>",
@@ -137,8 +115,26 @@
             "{% endfor %}",
             "</ul>"
         ],
+        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
+        "listStopsMarkerSign": null,
+        "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
+        "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
+        "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
+        "listStopsDescription": "{{ refs|join(' ') }}",
         "listRoutesExclude": "true",
-        "listStopsExclude": "{{ not isStop or stopCount == 0 }}"
+        "style:way": {
+            "width": "3",
+            "color": "{{ color|default('#ff0000') }}",
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        },
+        "style:stop": {
+            "width": "5",
+            "color": "{{ color|default('#ff0000') }}",
+            "radius": "3"
+        }
     },
     "info": [
         "<table>",

From f10910dc63407ccf9122cc298bd09acbad2609e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 9 Aug 2018 22:03:07 +0200
Subject: [PATCH 41/44] popupBody: link to wikipedia

---
 popupBody.html | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/popupBody.html b/popupBody.html
index c5e9e9e..ffa09d2 100644
--- a/popupBody.html
+++ b/popupBody.html
@@ -115,4 +115,25 @@
 </li>
 {% endif %}
 
+{% set wikipedia = null %}
+{% if attribute(tags, 'wikipedia') %}
+  {% set wikipedia = tags.wikipedia|matches("^([^:]+):(.*)$") %}
+{% endif %}
+
+{% if not wikipedia %}
+  {% for k, v in tags %}
+    {% set m = k|matches("^wikipedia:(.*)$") %}
+    {% if m %}
+      {% set wikipedia = [ 0, m[1], v ] %}
+    {% endif %}
+  {% endfor %}
+{% endif %}
+
+{% if wikipedia %}
+<li class='hasSymbol'>
+  <i class="fa fa-wikipedia-w" aria-hidden="true"></i>
+  <span class='key'>{{ keyTrans('wikipedia') }}:</span>
+  <span class='value'><a href="https://{{ wikipedia[1] }}.wikipedia.org/wiki/{{ wikipedia[2]|replace({ ' ': '_' }) }}">{{ wikipedia[2] }}</a></span>
+{% endif %}
+
 </ul>

From 96e273a8b38d14fb803887c0e4529a86ea98a6c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 12 Aug 2018 13:15:00 +0200
Subject: [PATCH 42/44] gastro: show dietary options

---
 gastro.json | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/gastro.json b/gastro.json
index 028f8b3..369ff4c 100644
--- a/gastro.json
+++ b/gastro.json
@@ -30,6 +30,18 @@
             "   <span class='key'>{{ keyTrans('cuisine') }}:</span>",
             "   <span class='value'>{{ tagTransList('cuisine', tags.cuisine)|default(trans('unknown')) }}</span>",
             "  </li>",
+            "  {% set diets = tagsPrefix(tags, 'diet:') %}",
+            "  {% if diets %}",
+            "    <li class='hasSymbol'>",
+            "     <i class=\"fa fa-cutlery\" aria-hidden=\"true\"></i>",
+            "     <span class='key'>{{ keyTrans('diet') }}:</span>",
+            "     <span class='value'>",
+            "     {% for kv, k in diets %}",
+            "       {% set v = tags[k] %}",
+            "       <span title='{{ k ~ '=' ~ v }}' style='white-space: nowrap; margin-right: 0.5em;'>{% if v == 'no' %}✘ {% elseif v == 'only' %}❗{% else %}✔{% endif %}{{ keyTrans(k) }}</span>",
+            "     {% endfor %}",
+            "    </span></li>",
+            "  {% endif %}",
             "</ul>"
         ],
         "markerSign": "{% if tags.amenity=='bar' %}&#127864;{% elseif tags.amenity=='biergarten'%}&#127867;{% elseif tags.amenity=='cafe' %}&#9749;{% elseif tags.amenity=='fast_food' %}&#127828;{% elseif tags.amenity=='ice_cream' %}&#127848;{% elseif tags.amenity=='pub' %}&#127866;{% else %}&#127860;{% endif %}"

From 5892b4b98b2213ce78ddc41efd5fc404860d31ea Mon Sep 17 00:00:00 2001
From: Cybereric <Cybereric@users.noreply.github.com>
Date: Wed, 15 Aug 2018 20:11:17 +0200
Subject: [PATCH 43/44] Update fr.json

---
 lang/fr.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lang/fr.json b/lang/fr.json
index 290c767..2966570 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -27,10 +27,10 @@
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:military": "Militaire",
-    "category:mtb-routes": "",
+    "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
     "category:other": "Autres",
-    "category:outdoor": "",
+    "category:outdoor": "Activités de plein air",
     "category:phone": "Téléphone",
     "category:places": "Lieux",
     "category:places_geo": "Lieux",
@@ -44,7 +44,7 @@
     "category:public": "Services Publics",
     "category:railway-electrification": "Puissance électrique ferroviaire",
     "category:railway-infrastructure": "Infrastructure ferroviaire",
-    "category:railway-routes": "",
+    "category:railway-routes": "Lignes ferroviaires",
     "category:religion": "Religion",
     "category:residential": "Zones résidentielles",
     "category:resources": "Extraction des ressources",

From 2339038885d6887fd3dba70bd0d201a3deb26a0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 15 Aug 2018 21:37:20 +0200
Subject: [PATCH 44/44] Merge translations into categories (fr)

---
 mtb-routes.json     | 3 ++-
 outdoor.json        | 3 ++-
 pt.json             | 4 ++--
 railway-routes.json | 3 ++-
 4 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/mtb-routes.json b/mtb-routes.json
index 9793a62..f0871f5 100644
--- a/mtb-routes.json
+++ b/mtb-routes.json
@@ -1,7 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Mountain bike routes"
+        "en": "Mountain bike routes",
+        "fr": "Itinéraires de VTT"
     },
     "query": {
         "13": "relation[type=route][route=mtb]"
diff --git a/outdoor.json b/outdoor.json
index eee4aca..9216ef0 100644
--- a/outdoor.json
+++ b/outdoor.json
@@ -2,7 +2,8 @@
     "type": "index",
     "name": {
         "de": "Freiluftaktivitäten",
-        "en": "Outdoor activities"
+        "en": "Outdoor activities",
+        "fr": "Activités de plein air"
     },
     "subCategories": [
         {
diff --git a/pt.json b/pt.json
index cfcca14..3693d84 100644
--- a/pt.json
+++ b/pt.json
@@ -1,8 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Public transport map",
-        "de": "ÖV Karte"
+        "de": "ÖV Karte",
+        "en": "Public transport map"
     },
     "query": {
         "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
diff --git a/railway-routes.json b/railway-routes.json
index ba5c66f..32aae7e 100644
--- a/railway-routes.json
+++ b/railway-routes.json
@@ -1,7 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Railway Routes"
+        "en": "Railway Routes",
+        "fr": "Lignes ferroviaires"
     },
     "query": {
         "12": "relation[type=route][route=railway]"