diff --git a/src/client/App.tsx b/src/client/App.tsx
new file mode 100755
index 0000000..f28ee93
--- /dev/null
+++ b/src/client/App.tsx
@@ -0,0 +1,347 @@
+// Copyright (C) 2020 Markus Peloso
+//
+// This file is part of Priceless map.
+//
+// Priceless map is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// Priceless map is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with Priceless map. If not, see .
+
+import React, { useEffect } from "react";
+import { Trans, useTranslation } from "react-i18next";
+import { init } from "./init";
+import "./initI18next";
+
+function setMeta(name: string, value: string) {
+ document
+ .querySelector("meta[name='" + name + "']")
+ ?.setAttribute("value", value);
+}
+
+export function App() {
+ let { t } = useTranslation();
+
+ useEffect(() => {
+ init(t);
+ });
+
+ useEffect(() => {
+ document.title = t("meta.title");
+ setMeta("description", t("meta.description"));
+ setMeta("application-name", t("meta.titleShort"));
+ setMeta("apple-mobile-web-app-title", t("meta.titleShort"));
+ });
+
+ return (
+ <>
+
+
+
+
+ {Intro()}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+function Intro() {
+ const { t } = useTranslation();
+
+ return (
+
+
+
{t("intro.title")}
+
+
{t("intro.tagline")}
+
{t("intro.description")}
+
+
{t("intro.legend")}
+
+
+
+
+ ,
+ }}
+ >
+
+
+
+
+ ),
+ }}
+ >
+
+
+ {t("intro.viewSourceCode")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{
+ (
+ document.querySelector(".intro-container") as HTMLElement
+ ).style.display = "none";
+ }}
+ >
+ ×
+
+
+ );
+}
diff --git a/src/client/de/local.json b/src/client/de/local.json
deleted file mode 100755
index 8a1e471..0000000
--- a/src/client/de/local.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "code": "de",
- "title": "Unbezahlbar Karte",
- "description": "Erlebe die Welt. Gratis.",
- "minZoomMessageNoLayer": "Keine Ebene zugewiesen",
- "minZoomMessage": "Zoome hinein, um Kartenmerkmale zu laden",
- "emptyIndicator": "Keine Kartenobjekte in diesem Bereich gefunden",
- "linkCopied": "Link in die Zwischenablage kopiert",
- "capacity": "Kapazität",
- "playground": "Für Kinder",
- "changing_table": "Hat einen Wickeltisch",
- "bottle": "Nachfüllen ist möglich",
- "pump": "Pumpe",
- "tools": "Werkzeuge",
- "repair": "Reparieren",
- "chainTool": "Kettennietdrücker",
- "internet": "Internet",
- "water": "Trinkwasser",
- "bicycle": "Velo",
- "park": "Park",
- "charging": "Aufladen",
- "mobileCharging": "Aufladen",
- "car": "Auto",
- "mobile": "Smartphone",
- "smallElectronics": "Kleine Elektrongeräte",
- "electronics": "Elektrongeräte",
- "furniture": "Möbel",
- "computer": "Computer",
- "defibrillator": "Defibrillator",
- "toy": "Spielzeug",
- "clothes": "Kleider",
- "battery": "Batterie",
- "carBattery": "Autobatterie",
- "cookingOil": "Speiseöl",
- "engineOil": "Maschinenöl",
- "oil": "Altöl",
- "paint": "Farbe",
- "rubble": "Steingut",
- "plastic": "Plastik",
- "plastic_bottles": "Plastikflaschen",
- "plastic_packaging": "Plastikverpackung",
- "PET": "PET",
- "plastic_bags": "Plastiktasche",
- "polyester": "Polyester",
- "polystyrene_foam": "Styropor",
- "hazardous": "Sondermüll",
- "hydrargyrum": "Quecksilber",
- "shoes": "Schuhe",
- "recycling": "Weiterverwerten",
- "reuse": "Wiederverwenden",
- "freeToGive": "Nur bringen",
- "freeToTake": "Nur mitnehmen",
- "freeToTakeOrGive": "Mitnehmen und bringen",
- "borrow": "Nur ausleihen",
- "indoor": "Drinnen",
- "female": "Für Frauen",
- "male": "Für Männer",
- "senior": "Für Ältere",
- "disabled": "Für Behinderte",
- "homeless": "Für Benachteiligte",
- "migrant": "Für Vertriebene",
- "lgbtq": "LGBTQ+ freundlich",
- "hoops": "Körbe",
- "light": "Beleuchtet",
- "covered": "Überdacht",
- "wheelchair": {
- "yes": "Rollstuhlgerecht",
- "limited": "Limitiert Rollstuhlgerecht",
- "no": "Nicht Rollstuhlgerecht"
- },
- "colour": "Farbe",
- "open": "Geöffnet",
- "closed": "Geschlossen",
- "maybeOpen": "Vielleicht geöffnet",
- "maybeOpens": "Öffnet vielleicht",
- "maybeCloses": "Schliesst vielleicht",
- "opens": "Öffnet",
- "closes": "Schliesst",
- "thatDependsOn": "Das hängt ab von",
- "conditionalFee": "Nur zu bestimmten Zeiten kostenlos.",
- "horizontalBar": "Reck",
- "parallelBars": "Parallelbarren",
- "rings": "Ringe",
- "exerciseMachine": "Übungsgerät",
- "balance": "Gleichgewicht",
- "route": "Routen",
- "difficulty": "Schwierigkeitsgrad",
- "externalResources": "Andere",
- "group": {
- "culture": "Kultur",
- "education": "Bildung",
- "natural": "Natur",
- "object_of_utility": "Hilfsmittel",
- "health": "Gesundheit",
- "community": "Gemeinschaft",
- "sport": "Sport",
- "communitySport": "Gemeinschaftssport",
- "trip": "Ausflug",
- "goods": "Gegenstände",
- "material": "Material weiterverwerten"
- }
-}
diff --git a/src/client/de/local.type.json b/src/client/de/local.type.json
deleted file mode 100755
index c79eca4..0000000
--- a/src/client/de/local.type.json
+++ /dev/null
@@ -1,249 +0,0 @@
-{
- "artwork": { "name": "Strassenkunst", "description": "" },
- "fountain": { "name": "Springbrunnen", "description": "" },
- "tourist-attraction": { "name": "Sehenswürdigkeit", "description": "" },
- "archaeological-site": { "name": "Archäologische Stätte", "description": "" },
- "trail": { "name": "Lehrpfad", "description": "" },
- "battery-recycling": {
- "name": "Batterie",
- "description": ""
- },
- "oil-recycling": {
- "name": "Öl",
- "description": ""
- },
- "reusable-bottle-reuse": {
- "name": "Mehrwegflasche",
- "description": ""
- },
- "rubble-recycling": {
- "name": "Steingut",
- "description": ""
- },
- "plastic-recycling": {
- "name": "Plastik",
- "description": ""
- },
- "hazardous-recycling": {
- "name": "Sondermüll",
- "description": ""
- },
- "book-exchange": {
- "name": "Bücher Tausch",
- "description": ""
- },
- "kneipp_water_cure": { "name": "Kneippanlage", "description": "" },
- "castle": { "name": "Burg", "description": "" },
- "mill": { "name": "Mühle", "description": "" },
- "history": { "name": "Geschichte", "description": "" },
- "memorial": { "name": "Gedenkstätte", "description": "" },
- "monument": { "name": "Monument", "description": "" },
- "museum": { "name": "Museum", "description": "" },
- "observatory": { "name": "Observatorium", "description": "" },
- "ruins": { "name": "Ruine", "description": "" },
- "cave": { "name": "Höhle", "description": "" },
- "natural_monument": { "name": "Naturdenkmal", "description": "" },
- "pond": { "name": "Teich", "description": "" },
- "rock": { "name": "Fels", "description": "" },
- "viewpoint": { "name": "Aussichtpunkt", "description": "" },
- "waterfall": { "name": "Wasserfall", "description": "" },
- "spring": { "name": "Quelle", "description": "" },
- "assistance": {
- "name": "Unterstützung",
- "description": ""
- },
- "assistance-female": { "name": "Für Frauen", "description": "" },
- "assistance-male": { "name": "Für Männer", "description": "" },
- "assistance-senior": { "name": "Für Ältere", "description": "" },
- "assistance-disabled": { "name": "Für Behinderte", "description": "" },
- "assistance-homeless": { "name": "Für Benachteiligte", "description": "" },
- "assistance-migrant": { "name": "Für Vertriebene", "description": "" },
- "assistance-children": { "name": "Für Kinder", "description": "" },
- "assisted-repair": {
- "name": "Begleitete Reparatur",
- "description": "Hier kannst du defekte Gegenstände gemeinsam mit Profis reparieren. Du triffts neue Leute und meistens gibt es auch Kaffee und Kuchen. Bekannte Veranstaltungen sind Repair Cafés."
- },
- "barbecue": {
- "name": "Grill",
- "description": ""
- },
- "baking-oven": { "name": "Backofen", "description": "" },
- "bicycle-rental": {
- "name": "Velo Verleih",
- "description": ""
- },
- "bicycle-self-repair": {
- "name": "Velo Selbstreparatur",
- "description": ""
- },
- "charging-station": {
- "name": "Ladestation",
- "description": ""
- },
- "piano": { "name": "Klavier", "description": "" },
- "advertising": {
- "name": "Werbefläche",
- "description": "Hier kannst du Plakate anbringen um für deine Sache zu werben."
- },
- "community-centre": { "name": "Gemeinschaftscenter", "description": "" },
- "community-garden": {
- "name": "Gemeinschaftsgarten",
- "description": "Hier ist ein Garten, welcher du gemeinsam mit anderen bewirtschaften kannst. Du kannst Gemüse, Kräuter, Blumen etc. anpflanzen, giessen und ernten und beim Wachsen zuschauen."
- },
- "diaper-changing-table": { "name": "Wickeltische", "description": "" },
- "drinking-water": { "name": "Trinkwasser", "description": "" },
- "defibrillator": { "name": "Defibrillator", "description": "" },
- "food-sharing": {
- "name": "Lebensmittel teilen",
- "description": "An diesem Ort kannst du Lebensmittel abgeben und holen. Die Bedienungen für das abgeben und holen sind sehr unterschiedlich, über die Webseite des Betreibers oder vor Ort kannst du dich darüber informieren."
- },
- "goods-exchange": {
- "name": "Waren Tausch",
- "description": "Hier findest du einen Tisch, ein Regal oder ein Laden um Gegenstände zu bringen und zu holen. Bekannte Einrichtungen sind Umsonstläden und Giveboxen."
- },
- "hackerspace": {
- "name": "Offene Werkstatt",
- "description": ""
- },
- "coworking": { "name": "Zusammenarbeit", "description": "" },
- "contribute": { "name": "Beitragen", "description": "" },
- "map": { "name": "Karte", "description": "" },
- "openstreetmap": { "name": "OpenStreetMap", "description": "" },
- "internet": {
- "name": "Internet",
- "description": ""
- },
- "public-shower": { "name": "Öffentliche Dusche", "description": "" },
- "pump": {
- "name": "Pumpe",
- "description": ""
- },
- "toilet": { "name": "Öffentliche Toilette", "description": "" },
- "basketball": { "name": "Basketball", "description": "" },
- "bath": { "name": "Bad", "description": "" },
- "bikepark": { "name": "Bikepark", "description": "" },
- "skatepark": { "name": "Skatepark", "description": "" },
- "chess": { "name": "Strassenschach", "description": "" },
- "climbing": {
- "name": "Klettern",
- "description": ""
- },
- "fitness": {
- "name": "Fitness",
- "description": ""
- },
- "horizontal_bar": {
- "name": "Reck",
- "description": ""
- },
- "parallel_bars": {
- "name": "Parallelbarren",
- "description": ""
- },
- "rings": {
- "name": "Ringe",
- "description": ""
- },
- "exercise-machine": {
- "name": "Übungsgerät",
- "description": ""
- },
- "balance": {
- "name": "Gleichgewicht",
- "description": ""
- },
- "fitness-trail": {
- "name": "Vitaparcours",
- "description": ""
- },
- "sledding": { "name": "Schlitteln", "description": "" },
- "running": { "name": "Laufsport", "description": "" },
- "soccer": { "name": "Fussball", "description": "" },
- "table-tennis": { "name": "Tischtennis", "description": "" },
- "table-soccer": { "name": "Tischfussball", "description": "" },
- "boules": { "name": "Boule", "description": "" },
- "volleyball": { "name": "Volleyball", "description": "" },
- "animal": {
- "name": "Tiere",
- "description": ""
- },
- "observation": { "name": "Tiere beobachten", "description": "" },
- "maze": { "name": "Irrgarten", "description": "" },
- "webcam": {
- "name": "Webcam",
- "description": ""
- },
- "fireplace": { "name": "Feuerstelle", "description": "" },
- "garden": {
- "name": "Garten",
- "description": ""
- },
- "garden-with-name": {
- "name": "Garten (Mit Name)",
- "description": ""
- },
- "nature-park": { "name": "Naturpark", "description": "" },
- "park": { "name": "Park", "description": "" },
- "park-with-name": { "name": "Park (Mit Name)", "description": "" },
- "picnic-site": { "name": "Picknickplatz", "description": "" },
- "square": { "name": "Platz", "description": "" },
- "square-with-name": { "name": "Platz (Mit Name)", "description": "" },
- "playground": { "name": "Spielplatz", "description": "" },
- "lounger": { "name": "Liege", "description": "" },
- "clothes": {
- "name": "Kleider",
- "description": ""
- },
- "clothes-give": { "name": "Kleider (Geben)", "description": "" },
- "clothes-take": { "name": "Kleider (Bekommen)", "description": "" },
- "clothes-repair": { "name": "Kleider (Reparieren)", "description": "" },
- "mobile-phones": {
- "name": "Handy",
- "description": ""
- },
- "mobile-phones-give": { "name": "Handy (Geben)", "description": "" },
- "mobile-phones-take": { "name": "Handy (Bekommen)", "description": "" },
- "mobile-phones-repair": { "name": "Handy (Reparieren)", "description": "" },
- "computers": {
- "name": "Computer",
- "description": ""
- },
- "computers-give": { "name": "Computer (Geben)", "description": "" },
- "computers-take": { "name": "Computer (Bekommen)", "description": "" },
- "computers-repair": { "name": "Computer (Reparieren)", "description": "" },
- "toys": {
- "name": "Spielzeug",
- "description": ""
- },
- "toys-give": { "name": "Spielzeug (Geben)", "description": "" },
- "toys-take": { "name": "Spielzeug (Bekommen)", "description": "" },
- "toys-rent": { "name": "Spielzeug (Ausleihen)", "description": "" },
- "toys-repair": { "name": "Spielzeug (Reparieren)", "description": "" },
- "electronics": {
- "name": "Elektrogerät",
- "description": ""
- },
- "electronics-give": { "name": "Elektrogerät (Geben)", "description": "" },
- "electronics-take": { "name": "Elektrogerät (Bekommen)", "description": "" },
- "electronics-repair": {
- "name": "Elektrogerät (Reparieren)",
- "description": ""
- },
- "furniture": {
- "name": "Möbel",
- "description": ""
- },
- "furniture-give": { "name": "Möbel (Geben)", "description": "" },
- "furniture-take": { "name": "Möbel (Bekommen)", "description": "" },
- "furniture-repair": { "name": "Möbel (Reparieren)", "description": "" },
- "bicycle": {
- "name": "Velo",
- "description": ""
- },
- "bicycle-give": { "name": "Velo (Geben)", "description": "" },
- "bicycle-rent": { "name": "Velo (Ausleihen)", "description": "" },
- "bicycle-repair": { "name": "Velo (Reparieren)", "description": "" },
- "bicycle-pump": { "name": "Velo (Aufpumpen)", "description": "" },
- "bicycle-park": { "name": "Velo (Park)", "description": "" },
- "bicycle-charge": { "name": "Velo (Aufladen)", "description": "" }
-}
diff --git a/src/client/en/local.json b/src/client/en/local.json
deleted file mode 100755
index f2b6d71..0000000
--- a/src/client/en/local.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "code": "en",
- "title": "Priceless map",
- "description": "Experience the world. Free of charge.",
- "minZoomMessageNoLayer": "No layer assigned",
- "minZoomMessage": "Zoom in to load map features",
- "emptyIndicator": "No map features found in this area",
- "linkCopied": "Link copied to the clipboard",
- "capacity": "Capacity",
- "playground": "For children",
- "changing_table": "Has a changing table",
- "bottle": "Refilling is possible",
- "pump": "Pump",
- "tools": "Tools",
- "repair": "Repair",
- "chainTool": "Chain tool",
- "internet": "Internet",
- "water": "Drinking water",
- "bicycle": "Bicycle",
- "park": "Park",
- "charging": "Charging",
- "mobileCharging": "Charging",
- "car": "Car",
- "mobile": "Mobile phone",
- "smallElectronics": "Small Electronics",
- "electronics": "Electronics",
- "furniture": "Furniture",
- "computer": "Computer",
- "defibrillator": "Defibrillator",
- "toy": "Toy",
- "clothes": "Clothes",
- "battery": "Battery",
- "carBattery": "Car battery",
- "cookingOil": "Cooking oil",
- "engineOil": "Engine oil",
- "oil": "Waste oil",
- "paint": "Paint",
- "rubble": "Building rubble",
- "plastic": "Plastic",
- "plastic_bottles": "Plastic bottles",
- "plastic_packaging": "Plastic packaging",
- "PET": "PET",
- "plastic_bags": "Plastic bag",
- "polyester": "Polyester",
- "polystyrene_foam": "Polystyrene foam",
- "hazardous": "Hazardous waste",
- "hydrargyrum": "Quicksilver",
- "shoes": "Shoes",
- "recycling": "Recycling",
- "reuse": "Reuse",
- "freeToGive": "Free to give",
- "freeToTake": "Free to take",
- "freeToTakeOrGive": "Free to take or give",
- "borrow": "Borrow only",
- "indoor": "Indoor",
- "female": "For women",
- "male": "For men",
- "senior": "For elderly",
- "disabled": "For disabled",
- "homeless": "For underprivileged",
- "migrant": "For refugees",
- "lgbtq": "LGBTQ+ friendly",
- "hoops": "Hoops",
- "light": "Lit",
- "covered": "Covered",
- "wheelchair": {
- "yes": "Wheelchair accessible",
- "limited": "Limited wheelchair accessible",
- "no": "Not wheelchair accessible"
- },
- "colour": "Color",
- "open": "Open",
- "closed": "Closed",
- "maybeOpen": "Maybe open",
- "maybeOpens": "Maybe opens",
- "maybeCloses": "Maybe closes",
- "opens": "Opens",
- "closes": "Closes",
- "thatDependsOn": "That depends on",
- "conditionalFee": "Only free at certain times.",
- "horizontalBar": "Horizontal bar",
- "parallelBars": "Parallel bars",
- "rings": "Rings",
- "exerciseMachine": "Exercise machine",
- "balance": "Balance",
- "route": "Route",
- "difficulty": "Difficulty",
- "externalResources": "Others",
- "group": {
- "culture": "Culture",
- "education": "Education",
- "natural": "Nature",
- "object_of_utility": "Objects of utility",
- "health": "Health",
- "community": "Community",
- "sport": "Sport",
- "communitySport": "Community sport",
- "trip": "Trip",
- "goods": "Goods",
- "material": "Material recycling"
- }
-}
diff --git a/src/client/en/local.type.json b/src/client/en/local.type.json
deleted file mode 100755
index 941ca01..0000000
--- a/src/client/en/local.type.json
+++ /dev/null
@@ -1,654 +0,0 @@
-{
- "artwork": { "name": "Artwork", "description": "" },
- "fountain": { "name": "Fountain", "description": "" },
- "tourist-attraction": { "name": "Tourist attraction", "description": "" },
- "archaeological-site": { "name": "Archaeological site", "description": "" },
- "trail": { "name": "Educational trail", "description": "" },
- "battery-recycling": {
- "name": "Battery",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "oil-recycling": {
- "name": "Oil",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "reusable-bottle-reuse": {
- "name": "Reusable bottle",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "rubble-recycling": {
- "name": "Building rubble",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "plastic-recycling": {
- "name": "Plastic",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "hazardous-recycling": {
- "name": "Hazardous waste",
- "description": "",
- "externalResources": [
- {
- "name": "Recycling Map",
- "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "book-exchange": {
- "name": "Book exchange",
- "description": "",
- "externalResources": [
- {
- "name": "Bôite À Lire",
- "url": "https://www.boite-a-lire.com/"
- },
- {
- "name": "OpenBookCase",
- "url": "https://openbookcase.org/map"
- },
- {
- "name": "Karte öffentlicher Bücherschränke",
- "url": "https://www.lesestunden.de/karte-oeffentlicher-buecherschraenke/"
- },
- {
- "name": "Little Free Library World Map",
- "url": "https://littlefreelibrary.org/ourmap/"
- },
- {
- "name": "Liste öffentlicher Bücherschränke",
- "url": "https://de.wikipedia.org/wiki/Liste_%C3%B6ffentlicher_B%C3%BCcherschr%C3%A4nke",
- "bounds": [35.81, -10.15, 55.25, 24.22]
- },
- {
- "name": "Tauschgnom",
- "url": "https://www.tauschgnom.de/offene-buecherschraenke",
- "bounds": [45.54, 5.32, 57.91, 17.45]
- },
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- },
- {
- "name": "Zero Waste Map",
- "url": "https://zerowastemap.org/"
- }
- ]
- },
- "kneipp_water_cure": { "name": "Kneipp facility", "description": "" },
- "castle": { "name": "Castle", "description": "" },
- "mill": { "name": "Mill", "description": "" },
- "history": { "name": "History", "description": "" },
- "memorial": { "name": "Memorial", "description": "" },
- "monument": { "name": "Monument", "description": "" },
- "museum": { "name": "Museum", "description": "" },
- "observatory": { "name": "Observatory", "description": "" },
- "ruins": { "name": "Ruins", "description": "" },
- "cave": { "name": "Cave", "description": "" },
- "natural_monument": { "name": "Natural monument", "description": "" },
- "pond": { "name": "Pond", "description": "" },
- "rock": { "name": "Rock", "description": "" },
- "viewpoint": { "name": "Viewpoint", "description": "" },
- "waterfall": { "name": "Waterfall", "description": "" },
- "spring": { "name": "Spring", "description": "" },
- "assistance": {
- "name": "Assistance",
- "description": "",
- "externalResources": [
- {
- "name": "Nachbarschaftshilfe",
- "url": "https://www.nachbarschaftshilfe.ch/standorte",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- }
- ]
- },
- "assistance-female": { "name": "For women", "description": "" },
- "assistance-male": { "name": "For men", "description": "" },
- "assistance-senior": { "name": "For elderly", "description": "" },
- "assistance-disabled": { "name": "For disabled", "description": "" },
- "assistance-homeless": { "name": "For underprivileged", "description": "" },
- "assistance-migrant": { "name": "For refugees", "description": "" },
- "assistance-children": { "name": "For children", "description": "" },
- "assisted-repair": {
- "name": "Assisted repair",
- "description": "Here you can repair broken things together with professionals. You'll meet new people and usually you'll also get coffee and cake. Well-known events are repair cafés.",
- "externalResources": [
- {
- "name": "Repair Café Worldwide",
- "url": "https://repaircafe.org/en/visit/"
- },
- {
- "name": "Repair Café Switzerland",
- "url": "https://repair-cafe.ch/de/events",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Reparatur-Initiativen",
- "url": "https://www.reparatur-initiativen.de/orte",
- "bounds": [45.82, 5.8, 55.26, 17.31]
- },
- {
- "name": "Zero Waste Map",
- "url": "https://zerowastemap.org/"
- },
- {
- "name": "iFixit",
- "url": "https://www.ifixit.com/Guide"
- }
- ]
- },
- "barbecue": {
- "name": "Barbecue",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "baking-oven": { "name": "Baking oven", "description": "" },
- "bicycle-rental": {
- "name": "Bicycle rental",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "bicycle-self-repair": {
- "name": "Bicycle self repair",
- "description": "",
- "externalResources": [
- {
- "name": "Bikekitchen",
- "url": "http://www.heureux-cyclage.org/les-ateliers-dans-le-monde?lang=en"
- },
- {
- "name": "Fahrradselbsthilfewerkstätten in Berlin",
- "url": "https://fahrrad.fandom.com/de/wiki/Fahrradselbsthilfewerkst%C3%A4tten_in_Berlin",
- "bounds": [52.33826, 13.08835, 52.67551, 13.76116]
- },
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "charging-station": {
- "name": "Charging station",
- "description": "",
- "externalResources": [
- {
- "name": "Open Charge Map",
- "url": "https://map.openchargemap.io/"
- },
- {
- "name": "bike energy | Ladestationen für E-Bikes & E-Car",
- "url": "https://www.google.com/maps/d/u/0/viewer?mid=1wdyB_yGO8FqEWUbD-HJTvpQ-KRY&ll={lat}%2C{lng}&z={zoom}"
- }
- ]
- },
- "piano": { "name": "Piano", "description": "" },
- "advertising": {
- "name": "Advertising space",
- "description": "Here you can hang up posters to advertise your concern."
- },
- "community-centre": { "name": "Community centre", "description": "" },
- "community-garden": {
- "name": "Community garden",
- "description": "Here is a garden which you can cultivate together with others. You can plant, water and harvest vegetables, herbs, flowers and so on and watch them grow."
- },
- "diaper-changing-table": {
- "name": "Diaper-changing table",
- "description": ""
- },
- "drinking-water": { "name": "Drinking water", "description": "" },
- "defibrillator": { "name": "Defibrillator", "description": "" },
- "food-sharing": {
- "name": "Food sharing",
- "description": "At this place you can bring and take food. The conditions for bring and take food are very different, you can inform yourself about it on the website of the operator or on site.",
- "externalResources": [
- {
- "name": "Foodsharing",
- "url": "https://foodsharing.de/karte",
- "bounds": [44.57, 2.63, 55.26, 19.55]
- },
- {
- "name": "RestEssBar",
- "url": "http://restessbar.ch/de",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Madame Frigos",
- "url": "https://www.madamefrigo.ch/en/towns/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "foodwaste.ch",
- "url": "https://foodwaste.ch/lokale-initiativen/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Suspended Coffee",
- "url": "https://suspendedcoffees.com/cafes/"
- },
- {
- "name": "Suspended Coffee Germany",
- "url": "https://suspendedcoffee.de/shops/karte/",
- "bounds": [44.57, 2.63, 55.26, 19.55]
- },
- {
- "name": "Café Surprise",
- "url": "https://surprise.ngo/angebote/cafesurprise/ueber-cafe-surprise/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "mundraub",
- "url": "https://mundraub.org/map#z={zoom}&lat={lat}&lng={lng}"
- },
- {
- "name": "falling fruit",
- "url": "http://fallingfruit.org/?z={zoom}&y={lat}&x={lng}&t=OSM&locale=en"
- },
- {
- "name": "Zero Waste Map",
- "url": "https://zerowastemap.org/"
- }
- ]
- },
- "goods-exchange": {
- "name": "Goods exchange",
- "description": "Here you will find a table, a shelf or a shop to bring and take items. Well-known facilities are give-away shops and giveboxes.",
- "externalResources": [
- {
- "name": "nimms",
- "url": "https://www.nimms.ch/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Gratis zu verschenken",
- "url": "https://gratiszuverschenken.ch/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Gratis zu verschenken",
- "url": "https://gratiszuverschenken.de/",
- "bounds": [44.57, 2.63, 55.26, 19.55]
- },
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- },
- {
- "name": "umap - Give box",
- "url": "https://umap.openstreetmap.fr/en/map/give_box_406244#{zoom}/{lat}/{lng}"
- },
- {
- "name": "radar.squat.net",
- "url": "https://radar.squat.net/en/groups/category/free-shop-market"
- },
- {
- "name": "Alles Und Umsonst",
- "url": "https://alles-und-umsonst.de/umsonstladen",
- "bounds": [35.4, -10.2, 55.5, 19.1]
- },
- {
- "name": "Zero Waste Map",
- "url": "https://zerowastemap.org/"
- }
- ]
- },
- "hackerspace": {
- "name": "Hackerspace",
- "description": "",
- "externalResources": [
- {
- "name": "Verbund Offener Werkstätten",
- "url": "https://www.offene-werkstaetten.org/werkstatt-suche",
- "bounds": [35.99, 5.06, 55.5, 24.66]
- },
- {
- "name": "hackerspaces",
- "url": "https://wiki.hackerspaces.org/List_of_hackerspaces"
- }
- ]
- },
- "coworking": { "name": "Coworking", "description": "" },
- "contribute": { "name": "Contribute", "description": "" },
- "map": { "name": "Map", "description": "" },
- "openstreetmap": { "name": "OpenStreetMap", "description": "" },
- "internet": {
- "name": "Internet",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "public-shower": { "name": "Public shower", "description": "" },
- "pump": {
- "name": "Pump",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "toilet": { "name": "Public toilet", "description": "" },
- "basketball": { "name": "Basketball", "description": "" },
- "bath": { "name": "Bath", "description": "" },
- "bikepark": { "name": "Bikepark", "description": "" },
- "skatepark": { "name": "Skatepark", "description": "" },
- "chess": { "name": "Street chess", "description": "" },
- "climbing": {
- "name": "Climbing",
- "description": "",
- "externalResources": [
- {
- "name": "the crag",
- "url": "https://www.thecrag.com/climbing/world/maps#{lat},{lng},{zoom},,auto"
- }
- ]
- },
- "fitness": {
- "name": "Fitness",
- "description": "",
- "externalResources": [
- {
- "name": "Street Workout",
- "url": "https://www.street-workout.com/",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Playparc",
- "url": "https://www.playparc.de/marken/4fcircle/",
- "bounds": [35.13, 2.16, 62.53, 32.75]
- }
- ]
- },
- "horizontal_bar": {
- "name": "Horizontal bar",
- "description": ""
- },
- "parallel_bars": {
- "name": "Parallel bars",
- "description": ""
- },
- "rings": {
- "name": "Rings",
- "description": ""
- },
- "exercise-machine": {
- "name": "Exercise machine",
- "description": ""
- },
- "balance": {
- "name": "Balance",
- "description": ""
- },
- "fitness-trail": {
- "name": "Fitness trail",
- "description": "",
- "externalResources": [
- {
- "name": "Zurich vitaparcours",
- "url": "https://www.zurichvitaparcours.ch/de/Finder",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Trimm-Dich-Pfade",
- "url": "https://www.trimm-dich-pfad.com/standorte/trimm-dich-pfad-in-meiner-naehe#{lat}/{lng}/{zoom}",
- "bounds": [45.11, 2.16, 55.2, 24.4]
- }
- ]
- },
- "sledding": { "name": "Sledding", "description": "" },
- "running": { "name": "Running", "description": "" },
- "soccer": { "name": "Soccer", "description": "" },
- "table-tennis": { "name": "Table tennis", "description": "" },
- "table-soccer": { "name": "Table soccer", "description": "" },
- "boules": { "name": "Boules", "description": "" },
- "volleyball": { "name": "Volleyball", "description": "" },
- "animal": {
- "name": "Animal enclosure",
- "description": "",
- "externalResources": [
- {
- "name": "Zoo-Infos.org - Switzerland",
- "url": "http://ch.zoo-infos.org/set.html?karte.php",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Zoo-Infos.de - Germany",
- "url": "http://www.zoo-infos.de/set-en.html?karte-en.php",
- "bounds": [47.27, 5.87, 55.1, 15.04]
- },
- {
- "name": "Zoo-Infos.org - Austria",
- "url": "http://at.zoo-infos.org/set-en.html?karte-en.php",
- "bounds": [46.3723, 9.5307, 49.0205, 17.1608]
- },
- {
- "name": "Zoo-Infos.org - France",
- "url": "http://fr.zoo-infos.org/set.html?karte.php",
- "bounds": [42.13, -5.02, 51.27, 8.43]
- },
- {
- "name": "Arca-Net",
- "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
- "bounds": [-32.0, -0.3, 52.3, 68.9]
- }
- ]
- },
- "observation": { "name": "Animal observation", "description": "" },
- "maze": { "name": "Maze", "description": "" },
- "webcam": {
- "name": "Webcam",
- "description": "",
- "externalResources": [
- {
- "name": "roundshot",
- "url": "https://www.roundshot.com/xml_1/internet/en/application/d170/f172.cfm"
- },
- {
- "name": "Windy",
- "url": "https://www.windy.com/en/-Webcams/webcams?{lat},{lng},{zoom}"
- },
- {
- "name": "Skyline Webcams",
- "url": "https://www.skylinewebcams.com/en/webcam.html"
- },
- {
- "name": "Wetter.com",
- "url": "https://www.wetter.com/hd-live-webcams/"
- }
- ]
- },
- "fireplace": { "name": "Fireplace", "description": "" },
- "garden": {
- "name": "Garden",
- "description": "",
- "externalResources": [
- {
- "name": "Arca-Net",
- "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
- "bounds": [-32.0, -0.3, 52.3, 68.9]
- }
- ]
- },
- "garden-with-name": {
- "name": "Garden (With name)",
- "description": "",
- "externalResources": [
- {
- "name": "Arca-Net",
- "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
- "bounds": [-32.0, -0.3, 52.3, 68.9]
- }
- ]
- },
- "nature-park": { "name": "Nature park", "description": "" },
- "park": { "name": "Park", "description": "" },
- "park-with-name": { "name": "Park (With name)", "description": "" },
- "picnic-site": { "name": "Picnic site", "description": "" },
- "square": { "name": "Square", "description": "" },
- "square-with-name": { "name": "Square (With name)", "description": "" },
- "playground": { "name": "Playground", "description": "" },
- "lounger": { "name": "Lounger", "description": "" },
- "clothes": {
- "name": "Clothes",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "clothes-give": { "name": "Clothes (Give)", "description": "" },
- "clothes-take": { "name": "Clothes (Take)", "description": "" },
- "clothes-repair": { "name": "Clothes (Repair)", "description": "" },
- "mobile-phones": {
- "name": "Phone",
- "description": "",
- "externalResources": [
- {
- "name": "Swisscom Mobile Aid",
- "url": "https://www.swisscom.ch/de/about/unternehmen/nachhaltigkeit/mobile-aid.html",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Labdoo",
- "url": "https://www.labdoo.org/content/dootronics-dashboard"
- }
- ]
- },
- "mobile-phones-give": { "name": "Phone (Give)", "description": "" },
- "mobile-phones-take": { "name": "Phone (Take)", "description": "" },
- "mobile-phones-repair": { "name": "Phone (Repair)", "description": "" },
- "computers": {
- "name": "Computer",
- "description": "",
- "externalResources": [
- {
- "name": "Labdoo",
- "url": "https://www.labdoo.org/content/dootronics-dashboard"
- }
- ]
- },
- "computers-give": { "name": "Computer (Give)", "description": "" },
- "computers-take": { "name": "Computer (Take)", "description": "" },
- "computers-repair": { "name": "Computer (Repair)", "description": "" },
- "toys": {
- "name": "Toy",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "toys-give": { "name": "Toy (Give)", "description": "" },
- "toys-take": { "name": "Toy (Take)", "description": "" },
- "toys-rent": { "name": "Toy (Rent)", "description": "" },
- "toys-repair": { "name": "Toy (Repair)", "description": "" },
- "electronics": {
- "name": "Electronic",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "electronics-give": { "name": "Electronic (Give)", "description": "" },
- "electronics-take": { "name": "Electronic (Take)", "description": "" },
- "electronics-repair": { "name": "Electronic (Repair)", "description": "" },
- "furniture": {
- "name": "Furniture",
- "description": "",
- "externalResources": [
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "furniture-give": { "name": "Furniture (Give)", "description": "" },
- "furniture-take": { "name": "Furniture (Take)", "description": "" },
- "furniture-repair": { "name": "Furniture (Repair)", "description": "" },
- "bicycle": {
- "name": "Bicycle",
- "description": "",
- "externalResources": [
- {
- "name": "Velafrica",
- "url": "http://velafrica.ch/en/Play-your-part/donate-bicycles",
- "bounds": [45.818, 5.9559, 47.8085, 10.4923]
- },
- {
- "name": "Bikekitchen",
- "url": "http://www.heureux-cyclage.org/les-ateliers-dans-le-monde?lang=en"
- },
- {
- "name": "Fahrradselbsthilfewerkstätten in Berlin",
- "url": "https://fahrrad.fandom.com/de/wiki/Fahrradselbsthilfewerkst%C3%A4tten_in_Berlin",
- "bounds": [52.33826, 13.08835, 52.67551, 13.76116]
- },
- {
- "name": "Pumpipumpe",
- "url": "https://map.pumpipumpe.ch/"
- }
- ]
- },
- "bicycle-give": { "name": "Bicycle (Give)", "description": "" },
- "bicycle-rent": { "name": "Bicycle (Rent)", "description": "" },
- "bicycle-repair": { "name": "Bicycle (Repair)", "description": "" },
- "bicycle-pump": { "name": "Bicycle (Pump)", "description": "" },
- "bicycle-park": { "name": "Bicycle (Park)", "description": "" },
- "bicycle-charge": { "name": "Bicycle (Charge)", "description": "" }
-}
diff --git a/src/client/de/externalResources.json b/src/client/externalResources/de.json
similarity index 100%
rename from src/client/de/externalResources.json
rename to src/client/externalResources/de.json
diff --git a/src/client/en/externalResources.json b/src/client/externalResources/en.json
similarity index 100%
rename from src/client/en/externalResources.json
rename to src/client/externalResources/en.json
diff --git a/src/client/init.ts b/src/client/init.ts
index 5ca1164..649542c 100755
--- a/src/client/init.ts
+++ b/src/client/init.ts
@@ -20,8 +20,8 @@ import { filters } from "./filters";
import "../osm-app-component/style.scss";
import { attributes } from "./attributes";
import { TFunction } from "i18next";
-import externalResourcesEn from "./en/externalResources.json";
-import externalResourcesDe from "./de/externalResources.json";
+import externalResourcesEn from "./externalResources/en.json";
+import externalResourcesDe from "./externalResources/de.json";
export function init(t: TFunction<"translation", undefined>) {
initMap(
diff --git a/src/static/initI18next.ts b/src/client/initI18next.ts
similarity index 55%
rename from src/static/initI18next.ts
rename to src/client/initI18next.ts
index dbcf271..f0969ad 100644
--- a/src/static/initI18next.ts
+++ b/src/client/initI18next.ts
@@ -1,15 +1,18 @@
import i18next from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
+import moment from "moment";
import { initReactI18next } from "react-i18next";
import * as en from "./locales/en.json";
-import * as clientEn from "../client/en/local.json";
-import * as clientTypeEn from "../client/en/local.type.json";
-import * as oapEn from "../osm-app-component/en/local.json";
+import * as oacEn from "../osm-app-component/locales/en.json";
+
import * as de from "./locales/de.json";
-import * as clientDe from "../client/de/local.json";
-import * as clientTypeDe from "../client/de/local.type.json";
-import * as oapDe from "../osm-app-component/de/local.json";
-import moment from "moment";
+import * as oacDe from "../osm-app-component/locales/de.json";
+import * as es from "./locales/es.json";
+import * as oacEs from "../osm-app-component/locales/es.json";
+import * as fr from "./locales/fr.json";
+import * as oacFr from "../osm-app-component/locales/fr.json";
+import * as pl from "./locales/pl.json";
+import * as oacPl from "../osm-app-component/locales/pl.json";
i18next.on("languageChanged", function (lng) {
document.documentElement.setAttribute("lang", lng);
@@ -26,8 +29,11 @@ i18next
fallbackLng: "en",
resources: {
- en: { translation: { ...en, ...clientEn, ...oapEn, type: clientTypeEn } },
- de: { translation: { ...de, ...clientDe, ...oapDe, type: clientTypeDe } },
+ en: { translation: { ...en, ...oacEn } },
+ de: { translation: { ...de, ...oacDe } },
+ es: { translation: { ...es, ...oacEs } },
+ fr: { translation: { ...fr, ...oacFr } },
+ pl: { translation: { ...pl, ...oacPl } },
},
interpolation: {
diff --git a/src/client/locales/de.json b/src/client/locales/de.json
new file mode 100755
index 0000000..575c084
--- /dev/null
+++ b/src/client/locales/de.json
@@ -0,0 +1,380 @@
+{
+ "code": "de",
+
+ "meta": {
+ "title": "Unbezahlbar Karte",
+ "titleShort": "Unbezahlbar",
+ "description": "Erlebe die Welt. Gratis."
+ },
+ "search": {
+ "placeholder": "Einen Ort suchen"
+ },
+ "info": {
+ "osmTags": "Dokumentation",
+ "query": "Abfrage",
+ "overpassTurbo": "overpass-turbo"
+ },
+ "menu": {
+ "note": "Hinweis für Kartographen hinzufügen",
+ "edit": "Karte bearbeiten",
+ "share": "Ort teilen",
+ "theme": "Theme ändern",
+ "about": "Über diese Seite",
+ "donate": "Mich unterstützen"
+ },
+
+ "title": "Unbezahlbar Karte",
+ "description": "Erlebe die Welt. Gratis.",
+ "minZoomMessageNoLayer": "Keine Ebene zugewiesen",
+ "minZoomMessage": "Zoome hinein, um Kartenmerkmale zu laden",
+ "emptyIndicator": "Keine Kartenobjekte in diesem Bereich gefunden",
+ "linkCopied": "Link in die Zwischenablage kopiert",
+ "capacity": "Kapazität",
+ "playground": "Für Kinder",
+ "changing_table": "Hat einen Wickeltisch",
+ "bottle": "Nachfüllen ist möglich",
+ "pump": "Pumpe",
+ "tools": "Werkzeuge",
+ "repair": "Reparieren",
+ "chainTool": "Kettennietdrücker",
+ "internet": "Internet",
+ "water": "Trinkwasser",
+ "bicycle": "Velo",
+ "park": "Park",
+ "charging": "Aufladen",
+ "mobileCharging": "Aufladen",
+ "car": "Auto",
+ "mobile": "Smartphone",
+ "smallElectronics": "Kleine Elektrongeräte",
+ "electronics": "Elektrongeräte",
+ "furniture": "Möbel",
+ "computer": "Computer",
+ "defibrillator": "Defibrillator",
+ "toy": "Spielzeug",
+ "clothes": "Kleider",
+ "battery": "Batterie",
+ "carBattery": "Autobatterie",
+ "cookingOil": "Speiseöl",
+ "engineOil": "Maschinenöl",
+ "oil": "Altöl",
+ "paint": "Farbe",
+ "rubble": "Steingut",
+ "plastic": "Plastik",
+ "plastic_bottles": "Plastikflaschen",
+ "plastic_packaging": "Plastikverpackung",
+ "PET": "PET",
+ "plastic_bags": "Plastiktasche",
+ "polyester": "Polyester",
+ "polystyrene_foam": "Styropor",
+ "hazardous": "Sondermüll",
+ "hydrargyrum": "Quecksilber",
+ "shoes": "Schuhe",
+ "recycling": "Weiterverwerten",
+ "reuse": "Wiederverwenden",
+ "freeToGive": "Nur bringen",
+ "freeToTake": "Nur mitnehmen",
+ "freeToTakeOrGive": "Mitnehmen und bringen",
+ "borrow": "Nur ausleihen",
+ "indoor": "Drinnen",
+ "female": "Für Frauen",
+ "male": "Für Männer",
+ "senior": "Für Ältere",
+ "disabled": "Für Behinderte",
+ "homeless": "Für Benachteiligte",
+ "migrant": "Für Vertriebene",
+ "lgbtq": "LGBTQ+ freundlich",
+ "hoops": "Körbe",
+ "light": "Beleuchtet",
+ "covered": "Überdacht",
+ "wheelchair": {
+ "yes": "Rollstuhlgerecht",
+ "limited": "Limitiert Rollstuhlgerecht",
+ "no": "Nicht Rollstuhlgerecht"
+ },
+ "colour": "Farbe",
+ "open": "Geöffnet",
+ "closed": "Geschlossen",
+ "maybeOpen": "Vielleicht geöffnet",
+ "maybeOpens": "Öffnet vielleicht",
+ "maybeCloses": "Schliesst vielleicht",
+ "opens": "Öffnet",
+ "closes": "Schliesst",
+ "thatDependsOn": "Das hängt ab von",
+ "conditionalFee": "Nur zu bestimmten Zeiten kostenlos.",
+ "horizontalBar": "Reck",
+ "parallelBars": "Parallelbarren",
+ "rings": "Ringe",
+ "exerciseMachine": "Übungsgerät",
+ "balance": "Gleichgewicht",
+ "route": "Routen",
+ "difficulty": "Schwierigkeitsgrad",
+ "externalResources": "Andere",
+ "group": {
+ "culture": "Kultur",
+ "education": "Bildung",
+ "natural": "Natur",
+ "object_of_utility": "Hilfsmittel",
+ "health": "Gesundheit",
+ "community": "Gemeinschaft",
+ "sport": "Sport",
+ "communitySport": "Gemeinschaftssport",
+ "trip": "Ausflug",
+ "goods": "Gegenstände",
+ "material": "Material weiterverwerten"
+ },
+ "type": {
+ "artwork": { "name": "Strassenkunst", "description": "" },
+ "fountain": { "name": "Springbrunnen", "description": "" },
+ "tourist-attraction": { "name": "Sehenswürdigkeit", "description": "" },
+ "archaeological-site": {
+ "name": "Archäologische Stätte",
+ "description": ""
+ },
+ "trail": { "name": "Lehrpfad", "description": "" },
+ "battery-recycling": {
+ "name": "Batterie",
+ "description": ""
+ },
+ "oil-recycling": {
+ "name": "Öl",
+ "description": ""
+ },
+ "reusable-bottle-reuse": {
+ "name": "Mehrwegflasche",
+ "description": ""
+ },
+ "rubble-recycling": {
+ "name": "Steingut",
+ "description": ""
+ },
+ "plastic-recycling": {
+ "name": "Plastik",
+ "description": ""
+ },
+ "hazardous-recycling": {
+ "name": "Sondermüll",
+ "description": ""
+ },
+ "book-exchange": {
+ "name": "Bücher Tausch",
+ "description": ""
+ },
+ "kneipp_water_cure": { "name": "Kneippanlage", "description": "" },
+ "castle": { "name": "Burg", "description": "" },
+ "mill": { "name": "Mühle", "description": "" },
+ "history": { "name": "Geschichte", "description": "" },
+ "memorial": { "name": "Gedenkstätte", "description": "" },
+ "monument": { "name": "Monument", "description": "" },
+ "museum": { "name": "Museum", "description": "" },
+ "observatory": { "name": "Observatorium", "description": "" },
+ "ruins": { "name": "Ruine", "description": "" },
+ "cave": { "name": "Höhle", "description": "" },
+ "natural_monument": { "name": "Naturdenkmal", "description": "" },
+ "pond": { "name": "Teich", "description": "" },
+ "rock": { "name": "Fels", "description": "" },
+ "viewpoint": { "name": "Aussichtpunkt", "description": "" },
+ "waterfall": { "name": "Wasserfall", "description": "" },
+ "spring": { "name": "Quelle", "description": "" },
+ "assistance": {
+ "name": "Unterstützung",
+ "description": ""
+ },
+ "assistance-female": { "name": "Für Frauen", "description": "" },
+ "assistance-male": { "name": "Für Männer", "description": "" },
+ "assistance-senior": { "name": "Für Ältere", "description": "" },
+ "assistance-disabled": { "name": "Für Behinderte", "description": "" },
+ "assistance-homeless": { "name": "Für Benachteiligte", "description": "" },
+ "assistance-migrant": { "name": "Für Vertriebene", "description": "" },
+ "assistance-children": { "name": "Für Kinder", "description": "" },
+ "assisted-repair": {
+ "name": "Begleitete Reparatur",
+ "description": "Hier kannst du defekte Gegenstände gemeinsam mit Profis reparieren. Du triffts neue Leute und meistens gibt es auch Kaffee und Kuchen. Bekannte Veranstaltungen sind Repair Cafés."
+ },
+ "barbecue": {
+ "name": "Grill",
+ "description": ""
+ },
+ "baking-oven": { "name": "Backofen", "description": "" },
+ "bicycle-rental": {
+ "name": "Velo Verleih",
+ "description": ""
+ },
+ "bicycle-self-repair": {
+ "name": "Velo Selbstreparatur",
+ "description": ""
+ },
+ "charging-station": {
+ "name": "Ladestation",
+ "description": ""
+ },
+ "piano": { "name": "Klavier", "description": "" },
+ "advertising": {
+ "name": "Werbefläche",
+ "description": "Hier kannst du Plakate anbringen um für deine Sache zu werben."
+ },
+ "community-centre": { "name": "Gemeinschaftscenter", "description": "" },
+ "community-garden": {
+ "name": "Gemeinschaftsgarten",
+ "description": "Hier ist ein Garten, welcher du gemeinsam mit anderen bewirtschaften kannst. Du kannst Gemüse, Kräuter, Blumen etc. anpflanzen, giessen und ernten und beim Wachsen zuschauen."
+ },
+ "diaper-changing-table": { "name": "Wickeltische", "description": "" },
+ "drinking-water": { "name": "Trinkwasser", "description": "" },
+ "defibrillator": { "name": "Defibrillator", "description": "" },
+ "food-sharing": {
+ "name": "Lebensmittel teilen",
+ "description": "An diesem Ort kannst du Lebensmittel abgeben und holen. Die Bedienungen für das abgeben und holen sind sehr unterschiedlich, über die Webseite des Betreibers oder vor Ort kannst du dich darüber informieren."
+ },
+ "goods-exchange": {
+ "name": "Waren Tausch",
+ "description": "Hier findest du einen Tisch, ein Regal oder ein Laden um Gegenstände zu bringen und zu holen. Bekannte Einrichtungen sind Umsonstläden und Giveboxen."
+ },
+ "hackerspace": {
+ "name": "Offene Werkstatt",
+ "description": ""
+ },
+ "coworking": { "name": "Zusammenarbeit", "description": "" },
+ "contribute": { "name": "Beitragen", "description": "" },
+ "map": { "name": "Karte", "description": "" },
+ "openstreetmap": { "name": "OpenStreetMap", "description": "" },
+ "internet": {
+ "name": "Internet",
+ "description": ""
+ },
+ "public-shower": { "name": "Öffentliche Dusche", "description": "" },
+ "pump": {
+ "name": "Pumpe",
+ "description": ""
+ },
+ "toilet": { "name": "Öffentliche Toilette", "description": "" },
+ "basketball": { "name": "Basketball", "description": "" },
+ "bath": { "name": "Bad", "description": "" },
+ "bikepark": { "name": "Bikepark", "description": "" },
+ "skatepark": { "name": "Skatepark", "description": "" },
+ "chess": { "name": "Strassenschach", "description": "" },
+ "climbing": {
+ "name": "Klettern",
+ "description": ""
+ },
+ "fitness": {
+ "name": "Fitness",
+ "description": ""
+ },
+ "horizontal_bar": {
+ "name": "Reck",
+ "description": ""
+ },
+ "parallel_bars": {
+ "name": "Parallelbarren",
+ "description": ""
+ },
+ "rings": {
+ "name": "Ringe",
+ "description": ""
+ },
+ "exercise-machine": {
+ "name": "Übungsgerät",
+ "description": ""
+ },
+ "balance": {
+ "name": "Gleichgewicht",
+ "description": ""
+ },
+ "fitness-trail": {
+ "name": "Vitaparcours",
+ "description": ""
+ },
+ "sledding": { "name": "Schlitteln", "description": "" },
+ "running": { "name": "Laufsport", "description": "" },
+ "soccer": { "name": "Fussball", "description": "" },
+ "table-tennis": { "name": "Tischtennis", "description": "" },
+ "table-soccer": { "name": "Tischfussball", "description": "" },
+ "boules": { "name": "Boule", "description": "" },
+ "volleyball": { "name": "Volleyball", "description": "" },
+ "animal": {
+ "name": "Tiere",
+ "description": ""
+ },
+ "observation": { "name": "Tiere beobachten", "description": "" },
+ "maze": { "name": "Irrgarten", "description": "" },
+ "webcam": {
+ "name": "Webcam",
+ "description": ""
+ },
+ "fireplace": { "name": "Feuerstelle", "description": "" },
+ "garden": {
+ "name": "Garten",
+ "description": ""
+ },
+ "garden-with-name": {
+ "name": "Garten (Mit Name)",
+ "description": ""
+ },
+ "nature-park": { "name": "Naturpark", "description": "" },
+ "park": { "name": "Park", "description": "" },
+ "park-with-name": { "name": "Park (Mit Name)", "description": "" },
+ "picnic-site": { "name": "Picknickplatz", "description": "" },
+ "square": { "name": "Platz", "description": "" },
+ "square-with-name": { "name": "Platz (Mit Name)", "description": "" },
+ "playground": { "name": "Spielplatz", "description": "" },
+ "lounger": { "name": "Liege", "description": "" },
+ "clothes": {
+ "name": "Kleider",
+ "description": ""
+ },
+ "clothes-give": { "name": "Kleider (Geben)", "description": "" },
+ "clothes-take": { "name": "Kleider (Bekommen)", "description": "" },
+ "clothes-repair": { "name": "Kleider (Reparieren)", "description": "" },
+ "mobile-phones": {
+ "name": "Handy",
+ "description": ""
+ },
+ "mobile-phones-give": { "name": "Handy (Geben)", "description": "" },
+ "mobile-phones-take": { "name": "Handy (Bekommen)", "description": "" },
+ "mobile-phones-repair": { "name": "Handy (Reparieren)", "description": "" },
+ "computers": {
+ "name": "Computer",
+ "description": ""
+ },
+ "computers-give": { "name": "Computer (Geben)", "description": "" },
+ "computers-take": { "name": "Computer (Bekommen)", "description": "" },
+ "computers-repair": { "name": "Computer (Reparieren)", "description": "" },
+ "toys": {
+ "name": "Spielzeug",
+ "description": ""
+ },
+ "toys-give": { "name": "Spielzeug (Geben)", "description": "" },
+ "toys-take": { "name": "Spielzeug (Bekommen)", "description": "" },
+ "toys-rent": { "name": "Spielzeug (Ausleihen)", "description": "" },
+ "toys-repair": { "name": "Spielzeug (Reparieren)", "description": "" },
+ "electronics": {
+ "name": "Elektrogerät",
+ "description": ""
+ },
+ "electronics-give": { "name": "Elektrogerät (Geben)", "description": "" },
+ "electronics-take": {
+ "name": "Elektrogerät (Bekommen)",
+ "description": ""
+ },
+ "electronics-repair": {
+ "name": "Elektrogerät (Reparieren)",
+ "description": ""
+ },
+ "furniture": {
+ "name": "Möbel",
+ "description": ""
+ },
+ "furniture-give": { "name": "Möbel (Geben)", "description": "" },
+ "furniture-take": { "name": "Möbel (Bekommen)", "description": "" },
+ "furniture-repair": { "name": "Möbel (Reparieren)", "description": "" },
+ "bicycle": {
+ "name": "Velo",
+ "description": ""
+ },
+ "bicycle-give": { "name": "Velo (Geben)", "description": "" },
+ "bicycle-rent": { "name": "Velo (Ausleihen)", "description": "" },
+ "bicycle-repair": { "name": "Velo (Reparieren)", "description": "" },
+ "bicycle-pump": { "name": "Velo (Aufpumpen)", "description": "" },
+ "bicycle-park": { "name": "Velo (Park)", "description": "" },
+ "bicycle-charge": { "name": "Velo (Aufladen)", "description": "" }
+ }
+}
diff --git a/src/client/locales/en.json b/src/client/locales/en.json
new file mode 100755
index 0000000..3d35f82
--- /dev/null
+++ b/src/client/locales/en.json
@@ -0,0 +1,779 @@
+{
+ "code": "en",
+
+ "meta": {
+ "title": "Priceless map",
+ "description": "Experience the world. Free of charge.",
+ "titleShort": "Priceless"
+ },
+ "search": {
+ "placeholder": "Search a location"
+ },
+ "info": {
+ "osmTags": "Documentation",
+ "query": "Query",
+ "overpassTurbo": "overpass-turbo"
+ },
+ "menu": {
+ "note": "Add note for mappers",
+ "edit": "Edit map",
+ "share": "Share place",
+ "theme": "Change theme",
+ "about": "About this site",
+ "donate": "Support me"
+ },
+
+ "title": "Priceless map",
+ "description": "Experience the world. Free of charge.",
+ "minZoomMessageNoLayer": "No layer assigned",
+ "minZoomMessage": "Zoom in to load map features",
+ "emptyIndicator": "No map features found in this area",
+ "linkCopied": "Link copied to the clipboard",
+ "capacity": "Capacity",
+ "playground": "For children",
+ "changing_table": "Has a changing table",
+ "bottle": "Refilling is possible",
+ "pump": "Pump",
+ "tools": "Tools",
+ "repair": "Repair",
+ "chainTool": "Chain tool",
+ "internet": "Internet",
+ "water": "Drinking water",
+ "bicycle": "Bicycle",
+ "park": "Park",
+ "charging": "Charging",
+ "mobileCharging": "Charging",
+ "car": "Car",
+ "mobile": "Mobile phone",
+ "smallElectronics": "Small Electronics",
+ "electronics": "Electronics",
+ "furniture": "Furniture",
+ "computer": "Computer",
+ "defibrillator": "Defibrillator",
+ "toy": "Toy",
+ "clothes": "Clothes",
+ "battery": "Battery",
+ "carBattery": "Car battery",
+ "cookingOil": "Cooking oil",
+ "engineOil": "Engine oil",
+ "oil": "Waste oil",
+ "paint": "Paint",
+ "rubble": "Building rubble",
+ "plastic": "Plastic",
+ "plastic_bottles": "Plastic bottles",
+ "plastic_packaging": "Plastic packaging",
+ "PET": "PET",
+ "plastic_bags": "Plastic bag",
+ "polyester": "Polyester",
+ "polystyrene_foam": "Polystyrene foam",
+ "hazardous": "Hazardous waste",
+ "hydrargyrum": "Quicksilver",
+ "shoes": "Shoes",
+ "recycling": "Recycling",
+ "reuse": "Reuse",
+ "freeToGive": "Free to give",
+ "freeToTake": "Free to take",
+ "freeToTakeOrGive": "Free to take or give",
+ "borrow": "Borrow only",
+ "indoor": "Indoor",
+ "female": "For women",
+ "male": "For men",
+ "senior": "For elderly",
+ "disabled": "For disabled",
+ "homeless": "For underprivileged",
+ "migrant": "For refugees",
+ "lgbtq": "LGBTQ+ friendly",
+ "hoops": "Hoops",
+ "light": "Lit",
+ "covered": "Covered",
+ "wheelchair": {
+ "yes": "Wheelchair accessible",
+ "limited": "Limited wheelchair accessible",
+ "no": "Not wheelchair accessible"
+ },
+ "colour": "Color",
+ "open": "Open",
+ "closed": "Closed",
+ "maybeOpen": "Maybe open",
+ "maybeOpens": "Maybe opens",
+ "maybeCloses": "Maybe closes",
+ "opens": "Opens",
+ "closes": "Closes",
+ "thatDependsOn": "That depends on",
+ "conditionalFee": "Only free at certain times.",
+ "horizontalBar": "Horizontal bar",
+ "parallelBars": "Parallel bars",
+ "rings": "Rings",
+ "exerciseMachine": "Exercise machine",
+ "balance": "Balance",
+ "route": "Route",
+ "difficulty": "Difficulty",
+ "externalResources": "Others",
+ "group": {
+ "culture": "Culture",
+ "education": "Education",
+ "natural": "Nature",
+ "object_of_utility": "Objects of utility",
+ "health": "Health",
+ "community": "Community",
+ "sport": "Sport",
+ "communitySport": "Community sport",
+ "trip": "Trip",
+ "goods": "Goods",
+ "material": "Material recycling"
+ },
+ "type": {
+ "artwork": { "name": "Artwork", "description": "" },
+ "fountain": { "name": "Fountain", "description": "" },
+ "tourist-attraction": { "name": "Tourist attraction", "description": "" },
+ "archaeological-site": { "name": "Archaeological site", "description": "" },
+ "trail": { "name": "Educational trail", "description": "" },
+ "battery-recycling": {
+ "name": "Battery",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "oil-recycling": {
+ "name": "Oil",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "reusable-bottle-reuse": {
+ "name": "Reusable bottle",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "rubble-recycling": {
+ "name": "Building rubble",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "plastic-recycling": {
+ "name": "Plastic",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "hazardous-recycling": {
+ "name": "Hazardous waste",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Recycling Map",
+ "url": "https://recycling-map.ch/en/map/?pos/{lat}/{lng}/{zoom}",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "book-exchange": {
+ "name": "Book exchange",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Bôite À Lire",
+ "url": "https://www.boite-a-lire.com/"
+ },
+ {
+ "name": "OpenBookCase",
+ "url": "https://openbookcase.org/map"
+ },
+ {
+ "name": "Karte öffentlicher Bücherschränke",
+ "url": "https://www.lesestunden.de/karte-oeffentlicher-buecherschraenke/"
+ },
+ {
+ "name": "Little Free Library World Map",
+ "url": "https://littlefreelibrary.org/ourmap/"
+ },
+ {
+ "name": "Liste öffentlicher Bücherschränke",
+ "url": "https://de.wikipedia.org/wiki/Liste_%C3%B6ffentlicher_B%C3%BCcherschr%C3%A4nke",
+ "bounds": [35.81, -10.15, 55.25, 24.22]
+ },
+ {
+ "name": "Tauschgnom",
+ "url": "https://www.tauschgnom.de/offene-buecherschraenke",
+ "bounds": [45.54, 5.32, 57.91, 17.45]
+ },
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ },
+ {
+ "name": "Zero Waste Map",
+ "url": "https://zerowastemap.org/"
+ }
+ ]
+ },
+ "kneipp_water_cure": { "name": "Kneipp facility", "description": "" },
+ "castle": { "name": "Castle", "description": "" },
+ "mill": { "name": "Mill", "description": "" },
+ "history": { "name": "History", "description": "" },
+ "memorial": { "name": "Memorial", "description": "" },
+ "monument": { "name": "Monument", "description": "" },
+ "museum": { "name": "Museum", "description": "" },
+ "observatory": { "name": "Observatory", "description": "" },
+ "ruins": { "name": "Ruins", "description": "" },
+ "cave": { "name": "Cave", "description": "" },
+ "natural_monument": { "name": "Natural monument", "description": "" },
+ "pond": { "name": "Pond", "description": "" },
+ "rock": { "name": "Rock", "description": "" },
+ "viewpoint": { "name": "Viewpoint", "description": "" },
+ "waterfall": { "name": "Waterfall", "description": "" },
+ "spring": { "name": "Spring", "description": "" },
+ "assistance": {
+ "name": "Assistance",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Nachbarschaftshilfe",
+ "url": "https://www.nachbarschaftshilfe.ch/standorte",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ }
+ ]
+ },
+ "assistance-female": { "name": "For women", "description": "" },
+ "assistance-male": { "name": "For men", "description": "" },
+ "assistance-senior": { "name": "For elderly", "description": "" },
+ "assistance-disabled": { "name": "For disabled", "description": "" },
+ "assistance-homeless": { "name": "For underprivileged", "description": "" },
+ "assistance-migrant": { "name": "For refugees", "description": "" },
+ "assistance-children": { "name": "For children", "description": "" },
+ "assisted-repair": {
+ "name": "Assisted repair",
+ "description": "Here you can repair broken things together with professionals. You'll meet new people and usually you'll also get coffee and cake. Well-known events are repair cafés.",
+ "externalResources": [
+ {
+ "name": "Repair Café Worldwide",
+ "url": "https://repaircafe.org/en/visit/"
+ },
+ {
+ "name": "Repair Café Switzerland",
+ "url": "https://repair-cafe.ch/de/events",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Reparatur-Initiativen",
+ "url": "https://www.reparatur-initiativen.de/orte",
+ "bounds": [45.82, 5.8, 55.26, 17.31]
+ },
+ {
+ "name": "Zero Waste Map",
+ "url": "https://zerowastemap.org/"
+ },
+ {
+ "name": "iFixit",
+ "url": "https://www.ifixit.com/Guide"
+ }
+ ]
+ },
+ "barbecue": {
+ "name": "Barbecue",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "baking-oven": { "name": "Baking oven", "description": "" },
+ "bicycle-rental": {
+ "name": "Bicycle rental",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "bicycle-self-repair": {
+ "name": "Bicycle self repair",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Bikekitchen",
+ "url": "http://www.heureux-cyclage.org/les-ateliers-dans-le-monde?lang=en"
+ },
+ {
+ "name": "Fahrradselbsthilfewerkstätten in Berlin",
+ "url": "https://fahrrad.fandom.com/de/wiki/Fahrradselbsthilfewerkst%C3%A4tten_in_Berlin",
+ "bounds": [52.33826, 13.08835, 52.67551, 13.76116]
+ },
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "charging-station": {
+ "name": "Charging station",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Open Charge Map",
+ "url": "https://map.openchargemap.io/"
+ },
+ {
+ "name": "bike energy | Ladestationen für E-Bikes & E-Car",
+ "url": "https://www.google.com/maps/d/u/0/viewer?mid=1wdyB_yGO8FqEWUbD-HJTvpQ-KRY&ll={lat}%2C{lng}&z={zoom}"
+ }
+ ]
+ },
+ "piano": { "name": "Piano", "description": "" },
+ "advertising": {
+ "name": "Advertising space",
+ "description": "Here you can hang up posters to advertise your concern."
+ },
+ "community-centre": { "name": "Community centre", "description": "" },
+ "community-garden": {
+ "name": "Community garden",
+ "description": "Here is a garden which you can cultivate together with others. You can plant, water and harvest vegetables, herbs, flowers and so on and watch them grow."
+ },
+ "diaper-changing-table": {
+ "name": "Diaper-changing table",
+ "description": ""
+ },
+ "drinking-water": { "name": "Drinking water", "description": "" },
+ "defibrillator": { "name": "Defibrillator", "description": "" },
+ "food-sharing": {
+ "name": "Food sharing",
+ "description": "At this place you can bring and take food. The conditions for bring and take food are very different, you can inform yourself about it on the website of the operator or on site.",
+ "externalResources": [
+ {
+ "name": "Foodsharing",
+ "url": "https://foodsharing.de/karte",
+ "bounds": [44.57, 2.63, 55.26, 19.55]
+ },
+ {
+ "name": "RestEssBar",
+ "url": "http://restessbar.ch/de",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Madame Frigos",
+ "url": "https://www.madamefrigo.ch/en/towns/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "foodwaste.ch",
+ "url": "https://foodwaste.ch/lokale-initiativen/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Suspended Coffee",
+ "url": "https://suspendedcoffees.com/cafes/"
+ },
+ {
+ "name": "Suspended Coffee Germany",
+ "url": "https://suspendedcoffee.de/shops/karte/",
+ "bounds": [44.57, 2.63, 55.26, 19.55]
+ },
+ {
+ "name": "Café Surprise",
+ "url": "https://surprise.ngo/angebote/cafesurprise/ueber-cafe-surprise/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "mundraub",
+ "url": "https://mundraub.org/map#z={zoom}&lat={lat}&lng={lng}"
+ },
+ {
+ "name": "falling fruit",
+ "url": "http://fallingfruit.org/?z={zoom}&y={lat}&x={lng}&t=OSM&locale=en"
+ },
+ {
+ "name": "Zero Waste Map",
+ "url": "https://zerowastemap.org/"
+ }
+ ]
+ },
+ "goods-exchange": {
+ "name": "Goods exchange",
+ "description": "Here you will find a table, a shelf or a shop to bring and take items. Well-known facilities are give-away shops and giveboxes.",
+ "externalResources": [
+ {
+ "name": "nimms",
+ "url": "https://www.nimms.ch/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Gratis zu verschenken",
+ "url": "https://gratiszuverschenken.ch/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Gratis zu verschenken",
+ "url": "https://gratiszuverschenken.de/",
+ "bounds": [44.57, 2.63, 55.26, 19.55]
+ },
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ },
+ {
+ "name": "umap - Give box",
+ "url": "https://umap.openstreetmap.fr/en/map/give_box_406244#{zoom}/{lat}/{lng}"
+ },
+ {
+ "name": "radar.squat.net",
+ "url": "https://radar.squat.net/en/groups/category/free-shop-market"
+ },
+ {
+ "name": "Alles Und Umsonst",
+ "url": "https://alles-und-umsonst.de/umsonstladen",
+ "bounds": [35.4, -10.2, 55.5, 19.1]
+ },
+ {
+ "name": "Zero Waste Map",
+ "url": "https://zerowastemap.org/"
+ }
+ ]
+ },
+ "hackerspace": {
+ "name": "Hackerspace",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Verbund Offener Werkstätten",
+ "url": "https://www.offene-werkstaetten.org/werkstatt-suche",
+ "bounds": [35.99, 5.06, 55.5, 24.66]
+ },
+ {
+ "name": "hackerspaces",
+ "url": "https://wiki.hackerspaces.org/List_of_hackerspaces"
+ }
+ ]
+ },
+ "coworking": { "name": "Coworking", "description": "" },
+ "contribute": { "name": "Contribute", "description": "" },
+ "map": { "name": "Map", "description": "" },
+ "openstreetmap": { "name": "OpenStreetMap", "description": "" },
+ "internet": {
+ "name": "Internet",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "public-shower": { "name": "Public shower", "description": "" },
+ "pump": {
+ "name": "Pump",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "toilet": { "name": "Public toilet", "description": "" },
+ "basketball": { "name": "Basketball", "description": "" },
+ "bath": { "name": "Bath", "description": "" },
+ "bikepark": { "name": "Bikepark", "description": "" },
+ "skatepark": { "name": "Skatepark", "description": "" },
+ "chess": { "name": "Street chess", "description": "" },
+ "climbing": {
+ "name": "Climbing",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "the crag",
+ "url": "https://www.thecrag.com/climbing/world/maps#{lat},{lng},{zoom},,auto"
+ }
+ ]
+ },
+ "fitness": {
+ "name": "Fitness",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Street Workout",
+ "url": "https://www.street-workout.com/",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Playparc",
+ "url": "https://www.playparc.de/marken/4fcircle/",
+ "bounds": [35.13, 2.16, 62.53, 32.75]
+ }
+ ]
+ },
+ "horizontal_bar": {
+ "name": "Horizontal bar",
+ "description": ""
+ },
+ "parallel_bars": {
+ "name": "Parallel bars",
+ "description": ""
+ },
+ "rings": {
+ "name": "Rings",
+ "description": ""
+ },
+ "exercise-machine": {
+ "name": "Exercise machine",
+ "description": ""
+ },
+ "balance": {
+ "name": "Balance",
+ "description": ""
+ },
+ "fitness-trail": {
+ "name": "Fitness trail",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Zurich vitaparcours",
+ "url": "https://www.zurichvitaparcours.ch/de/Finder",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Trimm-Dich-Pfade",
+ "url": "https://www.trimm-dich-pfad.com/standorte/trimm-dich-pfad-in-meiner-naehe#{lat}/{lng}/{zoom}",
+ "bounds": [45.11, 2.16, 55.2, 24.4]
+ }
+ ]
+ },
+ "sledding": { "name": "Sledding", "description": "" },
+ "running": { "name": "Running", "description": "" },
+ "soccer": { "name": "Soccer", "description": "" },
+ "table-tennis": { "name": "Table tennis", "description": "" },
+ "table-soccer": { "name": "Table soccer", "description": "" },
+ "boules": { "name": "Boules", "description": "" },
+ "volleyball": { "name": "Volleyball", "description": "" },
+ "animal": {
+ "name": "Animal enclosure",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Zoo-Infos.org - Switzerland",
+ "url": "http://ch.zoo-infos.org/set.html?karte.php",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Zoo-Infos.de - Germany",
+ "url": "http://www.zoo-infos.de/set-en.html?karte-en.php",
+ "bounds": [47.27, 5.87, 55.1, 15.04]
+ },
+ {
+ "name": "Zoo-Infos.org - Austria",
+ "url": "http://at.zoo-infos.org/set-en.html?karte-en.php",
+ "bounds": [46.3723, 9.5307, 49.0205, 17.1608]
+ },
+ {
+ "name": "Zoo-Infos.org - France",
+ "url": "http://fr.zoo-infos.org/set.html?karte.php",
+ "bounds": [42.13, -5.02, 51.27, 8.43]
+ },
+ {
+ "name": "Arca-Net",
+ "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
+ "bounds": [-32.0, -0.3, 52.3, 68.9]
+ }
+ ]
+ },
+ "observation": { "name": "Animal observation", "description": "" },
+ "maze": { "name": "Maze", "description": "" },
+ "webcam": {
+ "name": "Webcam",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "roundshot",
+ "url": "https://www.roundshot.com/xml_1/internet/en/application/d170/f172.cfm"
+ },
+ {
+ "name": "Windy",
+ "url": "https://www.windy.com/en/-Webcams/webcams?{lat},{lng},{zoom}"
+ },
+ {
+ "name": "Skyline Webcams",
+ "url": "https://www.skylinewebcams.com/en/webcam.html"
+ },
+ {
+ "name": "Wetter.com",
+ "url": "https://www.wetter.com/hd-live-webcams/"
+ }
+ ]
+ },
+ "fireplace": { "name": "Fireplace", "description": "" },
+ "garden": {
+ "name": "Garden",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Arca-Net",
+ "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
+ "bounds": [-32.0, -0.3, 52.3, 68.9]
+ }
+ ]
+ },
+ "garden-with-name": {
+ "name": "Garden (With name)",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Arca-Net",
+ "url": "http://arca-net.info/map_categories/frame_map.asp?sprache=en",
+ "bounds": [-32.0, -0.3, 52.3, 68.9]
+ }
+ ]
+ },
+ "nature-park": { "name": "Nature park", "description": "" },
+ "park": { "name": "Park", "description": "" },
+ "park-with-name": { "name": "Park (With name)", "description": "" },
+ "picnic-site": { "name": "Picnic site", "description": "" },
+ "square": { "name": "Square", "description": "" },
+ "square-with-name": { "name": "Square (With name)", "description": "" },
+ "playground": { "name": "Playground", "description": "" },
+ "lounger": { "name": "Lounger", "description": "" },
+ "clothes": {
+ "name": "Clothes",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "clothes-give": { "name": "Clothes (Give)", "description": "" },
+ "clothes-take": { "name": "Clothes (Take)", "description": "" },
+ "clothes-repair": { "name": "Clothes (Repair)", "description": "" },
+ "mobile-phones": {
+ "name": "Phone",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Swisscom Mobile Aid",
+ "url": "https://www.swisscom.ch/de/about/unternehmen/nachhaltigkeit/mobile-aid.html",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Labdoo",
+ "url": "https://www.labdoo.org/content/dootronics-dashboard"
+ }
+ ]
+ },
+ "mobile-phones-give": { "name": "Phone (Give)", "description": "" },
+ "mobile-phones-take": { "name": "Phone (Take)", "description": "" },
+ "mobile-phones-repair": { "name": "Phone (Repair)", "description": "" },
+ "computers": {
+ "name": "Computer",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Labdoo",
+ "url": "https://www.labdoo.org/content/dootronics-dashboard"
+ }
+ ]
+ },
+ "computers-give": { "name": "Computer (Give)", "description": "" },
+ "computers-take": { "name": "Computer (Take)", "description": "" },
+ "computers-repair": { "name": "Computer (Repair)", "description": "" },
+ "toys": {
+ "name": "Toy",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "toys-give": { "name": "Toy (Give)", "description": "" },
+ "toys-take": { "name": "Toy (Take)", "description": "" },
+ "toys-rent": { "name": "Toy (Rent)", "description": "" },
+ "toys-repair": { "name": "Toy (Repair)", "description": "" },
+ "electronics": {
+ "name": "Electronic",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "electronics-give": { "name": "Electronic (Give)", "description": "" },
+ "electronics-take": { "name": "Electronic (Take)", "description": "" },
+ "electronics-repair": { "name": "Electronic (Repair)", "description": "" },
+ "furniture": {
+ "name": "Furniture",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "furniture-give": { "name": "Furniture (Give)", "description": "" },
+ "furniture-take": { "name": "Furniture (Take)", "description": "" },
+ "furniture-repair": { "name": "Furniture (Repair)", "description": "" },
+ "bicycle": {
+ "name": "Bicycle",
+ "description": "",
+ "externalResources": [
+ {
+ "name": "Velafrica",
+ "url": "http://velafrica.ch/en/Play-your-part/donate-bicycles",
+ "bounds": [45.818, 5.9559, 47.8085, 10.4923]
+ },
+ {
+ "name": "Bikekitchen",
+ "url": "http://www.heureux-cyclage.org/les-ateliers-dans-le-monde?lang=en"
+ },
+ {
+ "name": "Fahrradselbsthilfewerkstätten in Berlin",
+ "url": "https://fahrrad.fandom.com/de/wiki/Fahrradselbsthilfewerkst%C3%A4tten_in_Berlin",
+ "bounds": [52.33826, 13.08835, 52.67551, 13.76116]
+ },
+ {
+ "name": "Pumpipumpe",
+ "url": "https://map.pumpipumpe.ch/"
+ }
+ ]
+ },
+ "bicycle-give": { "name": "Bicycle (Give)", "description": "" },
+ "bicycle-rent": { "name": "Bicycle (Rent)", "description": "" },
+ "bicycle-repair": { "name": "Bicycle (Repair)", "description": "" },
+ "bicycle-pump": { "name": "Bicycle (Pump)", "description": "" },
+ "bicycle-park": { "name": "Bicycle (Park)", "description": "" },
+ "bicycle-charge": { "name": "Bicycle (Charge)", "description": "" }
+ }
+}
diff --git a/src/client/locales/es.json b/src/client/locales/es.json
new file mode 100644
index 0000000..f6bbace
--- /dev/null
+++ b/src/client/locales/es.json
@@ -0,0 +1,3 @@
+{
+ "code": "es"
+}
diff --git a/src/client/locales/fr.json b/src/client/locales/fr.json
new file mode 100644
index 0000000..bd072a7
--- /dev/null
+++ b/src/client/locales/fr.json
@@ -0,0 +1 @@
+{ "code": "fr" }
diff --git a/src/client/locales/pl.json b/src/client/locales/pl.json
new file mode 100644
index 0000000..6729122
--- /dev/null
+++ b/src/client/locales/pl.json
@@ -0,0 +1 @@
+{ "code": "pl" }
diff --git a/src/index.tsx b/src/index.tsx
index 0ddff47..bc369f6 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,6 +1,6 @@
import React from "react";
import ReactDOM from "react-dom/client";
-import { App } from "./static/App";
+import { App } from "./client/App";
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
diff --git a/src/osm-app-component/index.ts b/src/osm-app-component/index.ts
index 2a4f188..edfee37 100755
--- a/src/osm-app-component/index.ts
+++ b/src/osm-app-component/index.ts
@@ -162,12 +162,12 @@ export async function initMap(
}
});
- (getHtmlElement(".about") as HTMLLinkElement).href = combine(
- baseUrl,
- `/docs`
- );
+ document.querySelector(".about")?.addEventListener("click", () => {
+ getHtmlElement(".intro-container").style.display = "block";
+ });
- (getHtmlElement(".donate") as HTMLLinkElement).href = funding.en;
+ (getHtmlElement(".donate") as HTMLLinkElement).href =
+ t("code") === "de" ? funding.de : funding.en;
const shareButton = getHtmlElement(".share");
shareButton.addEventListener("click", (e) => {
@@ -499,6 +499,7 @@ export async function initMap(
function showInfoContainer(f: { value: string; query: string; tags: any[] }) {
document.title = `${t("type." + f.value + ".name")} - ${t("title")}`;
+ getHtmlElement(".intro-container").style.display = "none";
const infoContainer = getHtmlElement(".info-container");
infoContainer.style.display = "block";
@@ -594,10 +595,7 @@ data-taginfo-taglist-options='{"with_count": true, "lang": "${t("code")}"}'>
getHtmlElement(".info .external", infoContainer).innerText = "";
- if (
- externalResources[f.value] &&
- externalResources[f.value].length > 0
- ) {
+ if (externalResources[f.value] && externalResources[f.value].length > 0) {
const links = [];
for (const external of externalResources[f.value]) {
links.push(
@@ -614,9 +612,9 @@ data-taginfo-taglist-options='{"with_count": true, "lang": "${t("code")}"}'>
getHtmlElement(
".info .external",
infoContainer
- ).innerHTML = `${t("externalResources")}: ${links.join(
- `, `
- )}`;
+ ).innerHTML = `${t(
+ "externalResources"
+ )}: ${links.join(`, `)}`;
}
for (const a of getHtmlElements(".external-link")) {
diff --git a/src/osm-app-component/de/local.json b/src/osm-app-component/locales/de.json
old mode 100755
new mode 100644
similarity index 98%
rename from src/osm-app-component/de/local.json
rename to src/osm-app-component/locales/de.json
index ceaa1ae..75b0d93
--- a/src/osm-app-component/de/local.json
+++ b/src/osm-app-component/locales/de.json
@@ -1,11 +1,8 @@
{
- "code": "de",
-
"route": "Routen",
"share": "Teilen",
"edit": "Bearbeiten",
"documentation": "Dokumentation",
-
"floor": "({{level}}. OG)",
"groundFloor": "(EG)",
"basement": "({{level}}. UG)",
@@ -38,7 +35,10 @@
"anthill": "Ameisenhügel",
"termite_mound": "Termitenhügel"
},
- "sport": { "bowls": "Bowls", "boules": "Boule" },
+ "sport": {
+ "bowls": "Bowls",
+ "boules": "Boule"
+ },
"boules": {
"petanque": "Pétanque",
"lyonnaise": "Jeu Provençal",
diff --git a/src/osm-app-component/en/local.json b/src/osm-app-component/locales/en.json
similarity index 99%
rename from src/osm-app-component/en/local.json
rename to src/osm-app-component/locales/en.json
index e37e3fd..98ea56a 100755
--- a/src/osm-app-component/en/local.json
+++ b/src/osm-app-component/locales/en.json
@@ -1,6 +1,4 @@
{
- "code": "en",
-
"route": "Route",
"share": "Share",
"edit": "Edit",
@@ -8,7 +6,7 @@
"floor": "({{level}}F)",
"groundFloor": "(GF)",
- "basement": "(B{(level)}}F)",
+ "basement": "(B{{level}}F)",
"amenity": {
"hunting_stand": "Hunting stand",
"give_box": "GiveBox"
diff --git a/src/osm-app-component/locales/es.json b/src/osm-app-component/locales/es.json
new file mode 100644
index 0000000..1c68d1f
--- /dev/null
+++ b/src/osm-app-component/locales/es.json
@@ -0,0 +1,61 @@
+{
+ "amenity": {
+ "hunting_stand": "Puesto de caza",
+ "give_box": "Caja de regalo"
+ },
+ "edit": "Editar",
+ "documentation": "Documentación",
+ "floor": "({{level}}F)",
+ "groundFloor": "(PB)",
+ "shop": {
+ "books": "Librería"
+ },
+ "leisure": {
+ "bird_hide": "Lugar para observar aves",
+ "wildlife_hide": "Lugar para observar vida silvestre"
+ },
+ "man_made": {
+ "water_well": "Pozo",
+ "watermill": "Molino de agua",
+ "mineshaft": "Pozo de mina",
+ "beehive": "Colmena",
+ "insect_hotel": "Caja de insectos",
+ "windmill": "Molino de viento",
+ "drinking_fountain": "Fuente para beber",
+ "tower": "Torre",
+ "nesting_site": "Casita para aves"
+ },
+ "landuse": {
+ "apiary": "Colmena"
+ },
+ "natural": {
+ "termite_mound": "Termitero",
+ "anthill": "Hormiguero"
+ },
+ "sport": {
+ "bowls": "Bolos",
+ "boules": "Pelotas"
+ },
+ "boules": {
+ "petanque": "Petanca",
+ "lyonnaise": "Juego provenzal",
+ "pétanque": "Petanca",
+ "bocce": "Bochas",
+ "boule_de_fort": "Boule de fort"
+ },
+ "route": "Ruta",
+ "share": "Compartir",
+ "piste:difficulty": {
+ "easy": "Fácil",
+ "advanced": "Avanzado",
+ "freeride": "Freeride o fuera de pista",
+ "extreme": "Extremo",
+ "novice": "Principiante",
+ "intermediate": "Intermedio",
+ "expert": "Experto"
+ },
+ "basement": "(B{{level}}F)",
+ "fitness_station": {
+ "balance_beam": "Barra de equilibrio"
+ }
+}
diff --git a/src/osm-app-component/locales/fr.json b/src/osm-app-component/locales/fr.json
new file mode 100644
index 0000000..8486982
--- /dev/null
+++ b/src/osm-app-component/locales/fr.json
@@ -0,0 +1,54 @@
+{
+ "floor": "({{level}}E)",
+ "basement": "(-{{level}}E)",
+ "route": "Route",
+ "share": "Partager",
+ "edit": "Modifier",
+ "documentation": "Documentation",
+ "groundFloor": "(RDC)",
+ "man_made": {
+ "windmill": "Éolienne",
+ "tower": "Tour",
+ "water_well": "Puits",
+ "watermill": "Moulin à eau",
+ "mineshaft": "Puits de mine",
+ "drinking_fountain": "Fontaine à eau",
+ "beehive": "Ruche",
+ "insect_hotel": "Hôtel à insectes"
+ },
+ "piste:difficulty": {
+ "novice": "Novice",
+ "easy": "Facile",
+ "intermediate": "Intermédiaire",
+ "advanced": "Avancé",
+ "expert": "Expert",
+ "freeride": "Libre",
+ "extreme": "Extrême"
+ },
+ "leisure": {
+ "wildlife_hide": "Point d'observation de la nature",
+ "bird_hide": "Point d'observation des oiseaux"
+ },
+ "sport": {
+ "bowls": "Bols",
+ "boules": "Pétanque"
+ },
+ "boules": {
+ "petanque": "Pétanque",
+ "bocce": "Bocce",
+ "lyonnaise": "Jeu provençal",
+ "boule_de_fort": "Boule de fort",
+ "pétanque": "Pétanque"
+ },
+ "amenity": {
+ "hunting_stand": "Stand de chasse",
+ "give_box": "Boîte à don"
+ },
+ "natural": {
+ "anthill": "Fourmilière",
+ "termite_mound": "Termitière"
+ },
+ "landuse": {
+ "apiary": "Ruche"
+ }
+}
diff --git a/src/osm-app-component/locales/it.json b/src/osm-app-component/locales/it.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/src/osm-app-component/locales/it.json
@@ -0,0 +1 @@
+{}
diff --git a/src/osm-app-component/locales/pl.json b/src/osm-app-component/locales/pl.json
new file mode 100644
index 0000000..3fa5f1a
--- /dev/null
+++ b/src/osm-app-component/locales/pl.json
@@ -0,0 +1,3 @@
+{
+ "route": "Trasa"
+}
diff --git a/src/osm-app-component/style.scss b/src/osm-app-component/style.scss
index 0b773a6..07ec761 100755
--- a/src/osm-app-component/style.scss
+++ b/src/osm-app-component/style.scss
@@ -487,7 +487,8 @@ a.menu {
}
}
-.info-container {
+.info-container,
+.intro-container {
position: absolute;
top: 80px;
right: 0px;
@@ -511,7 +512,8 @@ a.menu {
display: none;
}
-#filters.right-collapsed ~ .info-container {
+#filters.right-collapsed ~ .info-container,
+#filters.right-collapsed ~ .intro-container {
max-width: calc(100% - 56px);
}
@@ -546,7 +548,7 @@ a.menu {
padding: 6px;
border: none;
text-align: center;
- font: 16px/14px Tahoma, Verdana, sans-serif;
+ font: 24px/14px Tahoma, Verdana, sans-serif;
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
@@ -576,6 +578,15 @@ details[open] summary ~ * {
animation: sweep 0.4s ease-in-out;
}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ td {
+ padding: 6px 13px;
+ border: 1px solid #dfe2e5;
+ }
+}
+
@keyframes sweep {
0% {
opacity: 0;
diff --git a/src/static/App.tsx b/src/static/App.tsx
deleted file mode 100755
index f1844b6..0000000
--- a/src/static/App.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (C) 2020 Markus Peloso
-//
-// This file is part of Priceless map.
-//
-// Priceless map is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// Priceless map is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with Priceless map. If not, see .
-
-import React, { useEffect } from "react";
-import { useTranslation } from "react-i18next";
-import { init } from "../client/init";
-import "./initI18next";
-
-function setMeta(name: string, value: string) {
- document
- .querySelector("meta[name='" + name + "']")
- ?.setAttribute("value", value);
-}
-
-export function App() {
- let { t } = useTranslation();
-
- useEffect(() => {
- init(t);
- });
-
- useEffect(() => {
- document.title = t("meta.title");
- setMeta("description", t("meta.description"));
- setMeta("application-name", t("meta.titleShort"));
- setMeta("apple-mobile-web-app-title", t("meta.titleShort"));
- });
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/src/static/locales/de.json b/src/static/locales/de.json
deleted file mode 100644
index bb81690..0000000
--- a/src/static/locales/de.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "meta": {
- "title": "Unbezahlbar Karte",
- "titleShort": "Unbezahlbar",
- "description": "Erlebe die Welt. Gratis."
- },
- "search": {
- "placeholder": "Einen Ort suchen"
- },
- "info": {
- "osmTags": "Dokumentation",
- "query": "Abfrage",
- "overpassTurbo": "overpass-turbo"
- },
- "menu": {
- "note": "Hinweis für Kartographen hinzufügen",
- "edit": "Karte bearbeiten",
- "share": "Ort teilen",
- "theme": "Theme ändern",
- "about": "Über diese Seite",
- "donate": "Mich unterstützen"
- }
-}
diff --git a/src/static/locales/en.json b/src/static/locales/en.json
deleted file mode 100644
index ae91bd1..0000000
--- a/src/static/locales/en.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "meta": {
- "title": "Priceless map",
- "description": "Experience the world. Free of charge.",
- "titleShort": "Priceless"
- },
- "search": {
- "placeholder": "Search a location"
- },
- "info": {
- "osmTags": "Documentation",
- "query": "Query",
- "overpassTurbo": "overpass-turbo"
- },
- "menu": {
- "note": "Add note for mappers",
- "edit": "Edit map",
- "share": "Share place",
- "theme": "Change theme",
- "about": "About this site",
- "donate": "Support me"
- }
-}