diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json
new file mode 100644
index 00000000..b26137e6
--- /dev/null
+++ b/frontend/src/i18n/de.json
@@ -0,0 +1,149 @@
+{
+ "about-dialog": {
+ "header": "Über FacilMap {{version}}",
+ "license-text": "{{facilmap}} is unter der {{license}} verfügbar.",
+ "license-text-facilmap": "FacilMap",
+ "license-text-license": "GNU Affero General Public License, Version 3",
+ "issues-text": "Bitte melden Sie Fehler und Verbesserungsvorschläge auf {{tracker}}.",
+ "issues-text-tracker": "GitHub",
+ "help-text": "Wenn Sie Fragen haben, schauen Sie sich die {{documentation}} an, schreiben Sie ins {{discussions}} oder fragen im {{chat}}.",
+ "help-text-documentation": "Dokumentation",
+ "help-text-discussions": "Forum",
+ "help-text-chat": "Matrix-Chat",
+ "privacy-information": "Informationen zum Datenschutz",
+ "map-data": "Kartendaten",
+ "map-data-search": "Suche",
+ "map-data-pois": "POIs",
+ "map-data-directions": "Routenberechnung",
+ "map-data-geoip": "GeoIP",
+ "map-data-geoip-description": "Dieses Produkt enthält GeoLite2-Daten von Maxmind, verfügbar unter {{maxmind}}.",
+ "attribution-osm-contributors": "OSM-Mitwirkende",
+ "programs-libraries": "Programme/Bibliotheken",
+ "icons": "Symbole"
+ },
+
+ "click-marker-tab": {
+ "look-up-error": "Fehler beim Laden der Geoinformationen"
+ },
+
+ "client-provider": {
+ "loading-map-header": "Karte wird geladen",
+ "loading-map": "Karte wird geladen…",
+ "connecting-header": "Verbindung wird hergestellt",
+ "connecting": "Verbindung mit dem Server wird hergestellt…",
+ "map-deleted-header": "Karte gelöscht",
+ "map-deleted": "Die Karte wurde gelöscht.",
+ "close-map": "Karte schließen",
+ "connection-error": "Bei der Verbindung zum Server ist ein Fehler aufgetreten",
+ "open-map-error": "Beim Öffnen der Karte ist ein Fehler aufgetreten",
+ "disconnected-header": "Verbindung unterbrochen",
+ "disconnected": "Die Verbindung zum Server ist verloren gegangen. Verbindung wird wiederhergestellt…"
+ },
+
+ "edit-filter-dialog": {
+ "title": "Filter",
+ "apply": "Anwenden",
+ "introduction": "Hier können Sie eine Filterformel festlegen, die definiert, welche Marker/Linien basierend auf ihren Attributen angezeigt/versteckt werden sollen. Die Filterformel beeinflusst nur Ihre persönliche Ansicht der Karte, sie kann jedoch als Teil einer gespeicherten Ansicht oder eines geteilten Links wiederverwendet werden.",
+ "syntax-header": "Syntax",
+ "variable": "Variable",
+ "operator": "Operator",
+ "description": "Beschreibung",
+ "example": "Beispiel",
+ "name-description": "Name des Markers oder der Linie",
+ "type-description": "Art des Objekts: {{marker}} (Marker) / {{line}} (Linie)",
+ "typeId-description": "Typ des Objekts: {{items}})",
+ "typeId-description-item": "{{typeId}} ({{typeName}})",
+ "typeId-description-separator": " / ",
+ "data-description-1": "Feldwerte (Beispiel: {{example1}} oder {{example2}}).",
+ "data-description-2": "Für Checkbox-Felder ist der Wert {{uncheckedValue}} (nicht selektiert) oder {{checkedValue}} (selektiert).",
+ "lon-lat-description": "Koordinaten des Markers",
+ "colour-description": "Farbe des Markers oder der Linie",
+ "size-description": "Größe des Markers",
+ "symbol-description": "Symbol des Markers",
+ "shape-description": "Form des Markers",
+ "ele-description": "Höhe über NN des Markers",
+ "mode-description": "Routenmethode der Linie (z.\u202fB. {{straight}} (Luftlinie) / {{car}} (Auto) / {{bicycle}} (Fahrrad) / {{pedestrian}} (zu Fuß) / {{track}} (importierter GPX-Track))",
+ "width-description": "Dicke der Linie",
+ "stroke-description": "Kontur der Linie ({{solid}} (durchgezogen) / {{dashed}} (gestrichelt) / {{dotted}} (gepunktet))",
+ "distance-description": "Länge der Linie in Kilometern",
+ "time-description": "Reisedauer der Linie in Sekunden",
+ "ascent-descent-description": "Gesamteranstieg/-abstieg der Linie",
+ "routePoints-description": "Koordinaten der Wegpunkte der Linie",
+ "number-description": "Zahl",
+ "text-description": "Zeichenkette",
+ "mathematical-description": "Mathematische Operationen ({{modulo}}: modulo, {{power}}: Potenz)",
+ "logical-description": "Logische Operationen",
+ "ternary-description": "Wenn/dann/sonst-Operator",
+ "comparison-description": "Vergleich ({{notEqual}}: ungleich) (Groß-/Kleinschreibung relevant)",
+ "list-description": "Listen-Operator ({{in}}: Wert kommt in der Liste vor, {{notIn}}: Wert kommt nicht in der Liste vor) (Groß-/Kleinschreibung relevant)",
+ "regexp-description": "Regulärer Ausdruck (Groß-/Kleinschreibung relevant)",
+ "lower-description": "Zu Kleinbuchstaben konvertieren",
+ "round-description": "Runden ({{round}}: kaufmännisch runden, {{ceil}}: aufrunden, {{floor}}: abrunden)",
+ "functions-description": "Mathematische Funktionen ({{abs}}: Betrag, {{log}}: Natürlicher Logarithmus, {{sqrt}}: Quadratwurzel)",
+ "min-max-description": "Kleinster/größter Wert"
+ },
+
+ "modal-dialog": {
+ "close": "Schließen",
+ "cancel": "Abbrechen",
+ "save": "Speichern"
+ },
+
+ "user-preferences-dialog": {
+ "title": "Benutzereinstellungen",
+ "introduction": "Diese Einstellungen werden als Cookies auf Ihrem Computer gespeichert und werden unabhängig von der geöffneten Karte angewendet.",
+ "language": "Sprache",
+ "units": "Einheiten",
+ "units-metric": "Metrisch",
+ "units-us": "US customary (Meilen und Füße)"
+ },
+
+ "toolbox-add-dropdown": {
+ "label": "Erstellen",
+ "manage-types": "Objekttypen verwalten"
+ },
+
+ "toolbox-collab-maps-dropdown": {
+ "label": "Kollaborative Karten",
+ "bookmark": "Karte „{{padName}}“ als Favoriten hinzufügen",
+ "manage-bookmarks": "Favoriten verwalten",
+ "create-map": "Neue Karte erstellen",
+ "open-map": "Existierende Karte öffnen",
+ "open-other-map": "Andere Karte öffnen",
+ "close-map": "Karte „{{padName}}“ schließen"
+ },
+
+ "toolbox-help-dropdown": {
+ "label": "Hilfe",
+ "documentation": "Benutzerhandbuch",
+ "matrix-chat": "Matrix-Chat",
+ "bugtracker": "Fehler melden",
+ "forum": "Frage stellen",
+ "about": "Über {{appName}}"
+ },
+
+ "toolbox-map-style-dropdown": {
+ "label": "Kartenstil",
+ "openstreetmap": "OpenStreetMap",
+ "google-maps": "Google Maps",
+ "google-maps-satellite": "Google Maps (Satellit)",
+ "bing-maps": "Bing Maps"
+ },
+
+ "toolbox-tools-dropdown": {
+ "label": "Werkzeuge",
+ "share": "Teilen",
+ "open-file": "Datei öffnen",
+ "export": "Exportieren",
+ "filter": "Filter",
+ "settings": "Eigenschaften",
+ "history": "Versionsgeschichte",
+ "user-preferences": "Benutzereinstellungen"
+ },
+
+ "toolbox-views-dropdown": {
+ "label": "Ansichten",
+ "save-current-view": "Ansicht speichern",
+ "manage-views": "Ansichten verwalten"
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/i18n/de.ts b/frontend/src/i18n/de.ts
deleted file mode 100644
index 582a0b57..00000000
--- a/frontend/src/i18n/de.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-const messagesDe = {
- "about-dialog": {
- "header": `Über FacilMap {{version}}`,
- "license-text": `{{facilmap}} is unter der {{license}} verfügbar.`,
- "license-text-facilmap": `FacilMap`,
- "license-text-license": `GNU Affero General Public License, Version 3`,
- "issues-text": `Bitte melden Sie Fehler und Verbesserungsvorschläge auf {{tracker}}.`,
- "issues-text-tracker": `GitHub`,
- "help-text": `Wenn Sie Fragen haben, schauen Sie sich die {{documentation}} an, schreiben Sie ins {{discussions}} oder fragen im {{chat}}.`,
- "help-text-documentation": `Dokumentation`,
- "help-text-discussions": `Forum`,
- "help-text-chat": `Matrix-Chat`,
- "privacy-information": `Informationen zum Datenschutz`,
- "map-data": `Kartendaten`,
- "map-data-search": `Suche`,
- "map-data-pois": `POIs`,
- "map-data-directions": `Routenberechnung`,
- "map-data-geoip": `GeoIP`,
- "map-data-geoip-description": `Dieses Produkt enthält GeoLite2-Daten von Maxmind, verfügbar unter {{maxmind}}.`,
- "attribution-osm-contributors": `OSM-Mitwirkende`,
- "programs-libraries": `Programme/Bibliotheken`,
- "icons": `Symbole`
- },
-
- "click-marker-tab": {
- "look-up-error": `Fehler beim Laden der Geoinformationen`
- },
-
- "client-provider": {
- "loading-map-header": `Karte wird geladen`,
- "loading-map": `Karte wird geladen…`,
- "connecting-header": `Verbindung wird hergestellt`,
- "connecting": `Verbindung mit dem Server wird hergestellt…`,
- "map-deleted-header": `Karte gelöscht`,
- "map-deleted": `Die Karte wurde gelöscht.`,
- "close-map": `Karte schließen`,
- "connection-error": `Bei der Verbindung zum Server ist ein Fehler aufgetreten`,
- "open-map-error": `Beim Öffnen der Karte ist ein Fehler aufgetreten`,
- "disconnected-header": `Verbindung unterbrochen`,
- "disconnected": `Die Verbindung zum Server ist verloren gegangen. Verbindung wird wiederhergestellt…`
- },
-
- "edit-filter-dialog": {
- "title": `Filter`,
- "apply": `Anwenden`,
- "introduction": `Hier können Sie eine Filterformel festlegen, die definiert, welche Marker/Linien basierend auf ihren Attributen angezeigt/versteckt werden sollen. Die Filterformel beeinflusst nur Ihre persönliche Ansicht der Karte, sie kann jedoch als Teil einer gespeicherten Ansicht oder eines geteilten Links wiederverwendet werden.`,
- "syntax-header": `Syntax`,
- "variable": `Variable`,
- "operator": `Operator`,
- "description": `Beschreibung`,
- "example": `Beispiel`,
- "name-description": `Name des Markers oder der Linie`,
- "type-description": `Art des Objekts: {{marker}} (Marker) / {{line}} (Linie)`,
- "typeId-description": `Typ des Objekts: {{items}})`,
- "typeId-description-item": `{{typeId}} ({{typeName}})`,
- "typeId-description-separator": ` / `,
- "data-description-1": `Feldwerte (Beispiel: {{example1}} oder {{example2}}).`,
- "data-description-2": `Für Checkbox-Felder ist der Wert {{uncheckedValue}} (nicht selektiert) oder {{checkedValue}} (selektiert).`,
- "lon-lat-description": `Koordinaten des Markers`,
- "colour-description": `Farbe des Markers oder der Linie`,
- "size-description": `Größe des Markers`,
- "symbol-description": `Symbol des Markers`,
- "shape-description": `Form des Markers`,
- "ele-description": `Höhe über NN des Markers`,
- "mode-description": `Routenmethode der Linie (z.\u202fB. {{straight}} (Luftlinie) / {{car}} (Auto) / {{bicycle}} (Fahrrad) / {{pedestrian}} (zu Fuß) / {{track}} (importierter GPX-Track))`,
- "width-description": `Dicke der Linie`,
- "stroke-description": `Kontur der Linie ({{solid}} (durchgezogen) / {{dashed}} (gestrichelt) / {{dotted}} (gepunktet))`,
- "distance-description": `Länge der Linie in Kilometern`,
- "time-description": `Reisedauer der Linie in Sekunden`,
- "ascent-descent-description": `Gesamteranstieg/-abstieg der Linie`,
- "routePoints-description": `Koordinaten der Wegpunkte der Linie`,
- "number-description": `Zahl`,
- "text-description": `Zeichenkette`,
- "mathematical-description": `Mathematische Operationen ({{modulo}}: modulo, {{power}}: Potenz)`,
- "logical-description": `Logische Operationen`,
- "ternary-description": `Wenn/dann/sonst-Operator`,
- "comparison-description": `Vergleich ({{notEqual}}: ungleich) (Groß-/Kleinschreibung relevant)`,
- "list-description": `Listen-Operator ({{in}}: Wert kommt in der Liste vor, {{notIn}}: Wert kommt nicht in der Liste vor) (Groß-/Kleinschreibung relevant)`,
- "regexp-description": `Regulärer Ausdruck (Groß-/Kleinschreibung relevant)`,
- "lower-description": `Zu Kleinbuchstaben konvertieren`,
- "round-description": `Runden ({{round}}: kaufmännisch runden, {{ceil}}: aufrunden, {{floor}}: abrunden)`,
- "functions-description": `Mathematische Funktionen ({{abs}}: Betrag, {{log}}: Natürlicher Logarithmus, {{sqrt}}: Quadratwurzel)`,
- "min-max-description": `Kleinster/größter Wert`
- },
-
- "modal-dialog": {
- "close": "Schließen",
- "cancel": "Abbrechen",
- "save": "Speichern"
- },
-
- "user-preferences-dialog": {
- "title": `Benutzereinstellungen`,
- "introduction": `Diese Einstellungen werden als Cookies auf Ihrem Computer gespeichert und werden unabhängig von der geöffneten Karte angewendet.`,
- "language": `Sprache`,
- "units": `Einheiten`,
- "units-metric": `Metrisch`,
- "units-us": `US customary (Meilen und Füße)`
- },
-
- "toolbox-add-dropdown": {
- "label": `Erstellen`,
- "manage-types": `Objekttypen verwalten`
- },
-
- "toolbox-collab-maps-dropdown": {
- "label": `Kollaborative Karten`,
- "bookmark": `Karte „{{padName}}“ als Favoriten hinzufügen`,
- "manage-bookmarks": `Favoriten verwalten`,
- "create-map": `Neue Karte erstellen`,
- "open-map": `Existierende Karte öffnen`,
- "open-other-map": `Andere Karte öffnen`,
- "close-map": `Karte „{{padName}}“ schließen`
- },
-
- "toolbox-help-dropdown": {
- "label": `Hilfe`,
- "documentation": `Benutzerhandbuch`,
- "matrix-chat": `Matrix-Chat`,
- "bugtracker": `Fehler melden`,
- "forum": `Frage stellen`,
- "about": `Über {{appName}}`
- },
-
- "toolbox-map-style-dropdown": {
- "label": `Kartenstil`,
- "openstreetmap": `OpenStreetMap`,
- "google-maps": `Google Maps`,
- "google-maps-satellite": `Google Maps (Satellit)`,
- "bing-maps": `Bing Maps`
- },
-
- "toolbox-tools-dropdown": {
- "label": `Werkzeuge`,
- "share": `Teilen`,
- "open-file": `Datei öffnen`,
- "export": `Exportieren`,
- "filter": `Filter`,
- "settings": `Eigenschaften`,
- "history": `Versionsgeschichte`,
- "user-preferences": `Benutzereinstellungen`
- },
-
- "toolbox-views-dropdown": {
- "label": `Ansichten`,
- "save-current-view": `Ansicht speichern`,
- "manage-views": `Ansichten verwalten`
- }
-};
-
-export default messagesDe;
\ No newline at end of file
diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json
new file mode 100644
index 00000000..2217cff1
--- /dev/null
+++ b/frontend/src/i18n/en.json
@@ -0,0 +1,149 @@
+{
+ "about-dialog": {
+ "header": "About FacilMap {{version}}",
+ "license-text": "{{facilmap}} is available under the {{license}}.",
+ "license-text-facilmap": "FacilMap",
+ "license-text-license": "GNU Affero General Public License, Version 3",
+ "issues-text": "If something does not work or you have a suggestion for improvement, please report on the {{tracker}}.",
+ "issues-text-tracker": "issue tracker",
+ "help-text": "If you have a question, please have a look at the {{documentation}}, raise a question in the {{discussions}} or ask in the {{chat}}.",
+ "help-text-documentation": "documentation",
+ "help-text-discussions": "discussion forum",
+ "help-text-chat": "Matrix chat",
+ "privacy-information": "Privacy information",
+ "map-data": "Map data",
+ "map-data-search": "Search",
+ "map-data-pois": "POIs",
+ "map-data-directions": "Directions",
+ "map-data-geoip": "GeoIP",
+ "map-data-geoip-description": "This product includes GeoLite2 data created by MaxMind, available from {{maxmind}}.",
+ "attribution-osm-contributors": "OSM Contributors",
+ "programs-libraries": "Programs/libraries",
+ "icons": "Icons"
+ },
+
+ "click-marker-tab": {
+ "look-up-error": "Error looking up point"
+ },
+
+ "client-provider": {
+ "loading-map-header": "Loading",
+ "loading-map": "Loading map…",
+ "connecting-header": "Connecting",
+ "connecting": "Connecting to server…",
+ "map-deleted-header": "Map deleted",
+ "map-deleted": "This map has been deleted.",
+ "close-map": "Close map",
+ "connection-error": "Error connecting to server",
+ "open-map-error": "Error opening map",
+ "disconnected-header": "Disconnected",
+ "disconnected": "The connection to the server was lost. Trying to reconnect…"
+ },
+
+ "edit-filter-dialog": {
+ "title": "Filter",
+ "apply": "Apply",
+ "introduction": "Here you can set an advanced expression to show/hide certain markers/lines based on their attributes. The filter expression only applies to your view of the map, but it can be persisted as part of a saved view or a shared link.",
+ "syntax-header": "Syntax",
+ "variable": "Variable",
+ "operator": "Operator",
+ "description": "Description",
+ "example": "Example",
+ "name-description": "Marker/Line name",
+ "type-description": "{{marker}} / {{line}}",
+ "typeId-description": "{{items}})",
+ "typeId-description-item": "{{typeId}} ({{typeName}})",
+ "typeId-description-separator": " / ",
+ "data-description-1": "Field values (example: {{example1}} or {{example2}}).",
+ "data-description-2": "For checkbox fields, the value is {{uncheckedValue}} (unchecked) or {{checkedValue}} (checked).",
+ "lon-lat-description": "Marker coordinates",
+ "colour-description": "Marker/line colour",
+ "size-description": "Marker size",
+ "symbol-description": "Marker icon",
+ "shape-description": "Marker shape",
+ "ele-description": "Marker elevation",
+ "mode-description": "Line routing mode ({{straight}} / {{car}} / {{bicycle}} / {{pedestrian}} / {{track}})",
+ "width-description": "Line width",
+ "stroke-description": "Line stroke ({{solid}} (solid) / {{dashed}} / {{dotted}})",
+ "distance-description": "Line distance in kilometers",
+ "time-description": "Line routing time in seconds",
+ "ascent-descent-description": "Total ascent/descent of line",
+ "routePoints-description": "Line point coordinates",
+ "number-description": "Numerical value",
+ "text-description": "Text value",
+ "mathematical-description": "Mathematical operations ({{modulo}}: modulo, {{power}}: power)",
+ "logical-description": "Logical operators",
+ "ternary-description": "if/then/else operator",
+ "comparison-description": "Comparison ({{notEqual}}: not equal) (case sensitive)",
+ "list-description": "List operator (case sensitive)",
+ "regexp-description": "Regular expression match (case sensitive)",
+ "lower-description": "Convert to lower case",
+ "round-description": "Round ({{ceil}}: up, {{floor}}: down)",
+ "functions-description": "Mathematical functions",
+ "min-max-description": "Smallest/highest value"
+ },
+
+ "modal-dialog": {
+ "close": "Close",
+ "cancel": "Cancel",
+ "save": "Save"
+ },
+
+ "user-preferences-dialog": {
+ "title": "User preferences",
+ "introduction": "These settings are stored on your computer as a cookie and are applied independently of the opened map.",
+ "language": "Language",
+ "units": "Units",
+ "units-metric": "Metric",
+ "units-us": "US customary (miles, feet)"
+ },
+
+ "toolbox-add-dropdown": {
+ "label": "Add",
+ "manage-types": "Manage types"
+ },
+
+ "toolbox-collab-maps-dropdown": {
+ "label": "Collaborative maps",
+ "bookmark": "Bookmark map “{{padName}}”",
+ "manage-bookmarks": "Manage bookmarks",
+ "create-map": "Create a new map",
+ "open-map": "Open an existing map",
+ "open-other-map": "Open another map",
+ "close-map": "Close map “{{padName}}”"
+ },
+
+ "toolbox-help-dropdown": {
+ "label": "Help",
+ "documentation": "Documentation",
+ "matrix-chat": "Matrix chat room",
+ "bugtracker": "Report a problem",
+ "forum": "Ask a question",
+ "about": "About {{appName}}"
+ },
+
+ "toolbox-map-style-dropdown": {
+ "label": "Map style",
+ "openstreetmap": "OpenStreetMap",
+ "google-maps": "Google Maps",
+ "google-maps-satellite": "Google Maps (Satellite)",
+ "bing-maps": "Bing Maps"
+ },
+
+ "toolbox-tools-dropdown": {
+ "label": "Tools",
+ "share": "Share",
+ "open-file": "Open file",
+ "export": "Export",
+ "filter": "Filter",
+ "settings": "Settings",
+ "history": "History",
+ "user-preferences": "User preferences"
+ },
+
+ "toolbox-views-dropdown": {
+ "label": "Views",
+ "save-current-view": "Save current view",
+ "manage-views": "Manage views"
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/i18n/en.ts b/frontend/src/i18n/en.ts
deleted file mode 100644
index 77dfe73d..00000000
--- a/frontend/src/i18n/en.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-const messagesEn = {
- "about-dialog": {
- "header": `About FacilMap {{version}}`,
- "license-text": `{{facilmap}} is available under the {{license}}.`,
- "license-text-facilmap": `FacilMap`,
- "license-text-license": `GNU Affero General Public License, Version 3`,
- "issues-text": `If something does not work or you have a suggestion for improvement, please report on the {{tracker}}.`,
- "issues-text-tracker": `issue tracker`,
- "help-text": `If you have a question, please have a look at the {{documentation}}, raise a question in the {{discussions}} or ask in the {{chat}}.`,
- "help-text-documentation": `documentation`,
- "help-text-discussions": `discussion forum`,
- "help-text-chat": `Matrix chat`,
- "privacy-information": `Privacy information`,
- "map-data": `Map data`,
- "map-data-search": `Search`,
- "map-data-pois": `POIs`,
- "map-data-directions": `Directions`,
- "map-data-geoip": `GeoIP`,
- "map-data-geoip-description": `This product includes GeoLite2 data created by MaxMind, available from {{maxmind}}.`,
- "attribution-osm-contributors": `OSM Contributors`,
- "programs-libraries": `Programs/libraries`,
- "icons": `Icons`
- },
-
- "click-marker-tab": {
- "look-up-error": `Error looking up point`
- },
-
- "client-provider": {
- "loading-map-header": `Loading`,
- "loading-map": `Loading map…`,
- "connecting-header": `Connecting`,
- "connecting": `Connecting to server…`,
- "map-deleted-header": `Map deleted`,
- "map-deleted": `This map has been deleted.`,
- "close-map": `Close map`,
- "connection-error": `Error connecting to server`,
- "open-map-error": `Error opening map`,
- "disconnected-header": `Disconnected`,
- "disconnected": `The connection to the server was lost. Trying to reconnect…`
- },
-
- "edit-filter-dialog": {
- "title": `Filter`,
- "apply": `Apply`,
- "introduction": `Here you can set an advanced expression to show/hide certain markers/lines based on their attributes. The filter expression only applies to your view of the map, but it can be persisted as part of a saved view or a shared link.`,
- "syntax-header": `Syntax`,
- "variable": `Variable`,
- "operator": `Operator`,
- "description": `Description`,
- "example": `Example`,
- "name-description": `Marker/Line name`,
- "type-description": `{{marker}} / {{line}}`,
- "typeId-description": `{{items}})`,
- "typeId-description-item": `{{typeId}} ({{typeName}})`,
- "typeId-description-separator": ` / `,
- "data-description-1": `Field values (example: {{example1}} or {{example2}}).`,
- "data-description-2": `For checkbox fields, the value is {{uncheckedValue}} (unchecked) or {{checkedValue}} (checked).`,
- "lon-lat-description": `Marker coordinates`,
- "colour-description": `Marker/line colour`,
- "size-description": `Marker size`,
- "symbol-description": `Marker icon`,
- "shape-description": `Marker shape`,
- "ele-description": `Marker elevation`,
- "mode-description": `Line routing mode ({{straight}} / {{car}} / {{bicycle}} / {{pedestrian}} / {{track}})`,
- "width-description": `Line width`,
- "stroke-description": `Line stroke ({{solid}} (solid) / {{dashed}} / {{dotted}})`,
- "distance-description": `Line distance in kilometers`,
- "time-description": `Line routing time in seconds`,
- "ascent-descent-description": `Total ascent/descent of line`,
- "routePoints-description": `Line point coordinates`,
- "number-description": `Numerical value`,
- "text-description": `Text value`,
- "mathematical-description": `Mathematical operations ({{modulo}}: modulo, {{power}}: power)`,
- "logical-description": `Logical operators`,
- "ternary-description": `if/then/else operator`,
- "comparison-description": `Comparison ({{notEqual}}: not equal) (case sensitive)`,
- "list-description": `List operator (case sensitive)`,
- "regexp-description": `Regular expression match (case sensitive)`,
- "lower-description": `Convert to lower case`,
- "round-description": `Round ({{ceil}}: up, {{floor}}: down)`,
- "functions-description": `Mathematical functions`,
- "min-max-description": `Smallest/highest value`
- },
-
- "modal-dialog": {
- "close": "Close",
- "cancel": "Cancel",
- "save": "Save"
- },
-
- "user-preferences-dialog": {
- "title": `User preferences`,
- "introduction": `These settings are stored on your computer as a cookie and are applied independently of the opened map.`,
- "language": `Language`,
- "units": `Units`,
- "units-metric": `Metric`,
- "units-us": `US customary (miles, feet)`
- },
-
- "toolbox-add-dropdown": {
- "label": `Add`,
- "manage-types": `Manage types`
- },
-
- "toolbox-collab-maps-dropdown": {
- "label": `Collaborative maps`,
- "bookmark": `Bookmark map “{{padName}}”`,
- "manage-bookmarks": `Manage bookmarks`,
- "create-map": `Create a new map`,
- "open-map": `Open an existing map`,
- "open-other-map": `Open another map`,
- "close-map": `Close map “{{padName}}”`
- },
-
- "toolbox-help-dropdown": {
- "label": `Help`,
- "documentation": `Documentation`,
- "matrix-chat": `Matrix chat room`,
- "bugtracker": `Report a problem`,
- "forum": `Ask a question`,
- "about": `About {{appName}}`
- },
-
- "toolbox-map-style-dropdown": {
- "label": `Map style`,
- "openstreetmap": `OpenStreetMap`,
- "google-maps": `Google Maps`,
- "google-maps-satellite": `Google Maps (Satellite)`,
- "bing-maps": `Bing Maps`
- },
-
- "toolbox-tools-dropdown": {
- "label": `Tools`,
- "share": `Share`,
- "open-file": `Open file`,
- "export": `Export`,
- "filter": `Filter`,
- "settings": `Settings`,
- "history": `History`,
- "user-preferences": `User preferences`
- },
-
- "toolbox-views-dropdown": {
- "label": `Views`,
- "save-current-view": `Save current view`,
- "manage-views": `Manage views`
- }
-};
-
-export default messagesEn;
\ No newline at end of file
diff --git a/frontend/src/lib/utils/i18n.ts b/frontend/src/lib/utils/i18n.ts
index 540b7320..bb3953a0 100644
--- a/frontend/src/lib/utils/i18n.ts
+++ b/frontend/src/lib/utils/i18n.ts
@@ -1,8 +1,8 @@
///
import { type i18n } from "i18next";
import { defineComponent, ref } from "vue";
-import messagesEn from "../../i18n/en";
-import messagesDe from "../../i18n/de";
+import messagesEn from "../../i18n/en.json";
+import messagesDe from "../../i18n/de.json";
import { decodeQueryString, getRawI18n, onI18nReady, setCurrentUnitsGetter } from "facilmap-utils";
import { cookies } from "./cookies";
import { unitsValidator } from "facilmap-types";
@@ -15,13 +15,13 @@ onI18nReady((i18n) => {
});
if (import.meta.hot) {
- import.meta.hot.accept("../../i18n/en", (m) => {
+ import.meta.hot.accept("../../i18n/en.json", (m) => {
onI18nReady((i18n) => {
i18n.addResourceBundle("en", namespace, m!.default);
});
});
- import.meta.hot.accept("../../i18n/de", (m) => {
+ import.meta.hot.accept("../../i18n/de.json", (m) => {
onI18nReady((i18n) => {
i18n.addResourceBundle("de", namespace, m!.default);
});
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index a1b4f18e..8dca6117 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -18,5 +18,5 @@
{ "path": "../utils/tsconfig.json" },
{ "path": "../tsconfig.json" }
],
- "include": ["src/**/*"]
+ "include": ["src/**/*", "src/**/*.json"]
}
\ No newline at end of file
diff --git a/server/src/i18n.ts b/server/src/i18n.ts
index 159d13ab..101ee03f 100644
--- a/server/src/i18n.ts
+++ b/server/src/i18n.ts
@@ -1,6 +1,6 @@
import { defaultI18nGetter, getRawI18n, onI18nReady, setLanguageDetector, setI18nGetter, isCustomLanguageDetector, isCustomI18nGetter, LANG_QUERY, LANG_COOKIE, setCurrentUnitsGetter } from "facilmap-utils";
-import messagesEn from "./i18n/en";
-import messagesDe from "./i18n/de";
+import messagesEn from "./i18n/en.json";
+import messagesDe from "./i18n/de.json";
import type { i18n } from "i18next";
import type { Domain } from "domain";
import { Router } from "express";
diff --git a/server/src/i18n/de.json b/server/src/i18n/de.json
new file mode 100644
index 00000000..772951a9
--- /dev/null
+++ b/server/src/i18n/de.json
@@ -0,0 +1,54 @@
+{
+ "pad-not-found-error": "Karte {{padId}} konnte nicht gefunden werden.",
+ "pad-read-not-found-error": "Karte mit der Lese-ID {{padId}} konnte nicht gefunden werden.",
+
+ "database": {
+ "type-not-found-error": "Typ {{typeId}} existiert nicht.",
+ "object-not-found-in-pad-error": "Objekt {{id}} vom Typ „{{type}}“ konnte auf der Karte {{padId}} nicht gefunden werden.",
+ "old-pad-data-not-available-error": "Alte Karteneinstellungen nicht verfügbar.",
+ "unknown-type-error": "Unbekannter Typ „{{type}}“.",
+ "route-points-not-an-array-error": "routePoints ist kein Array",
+ "route-points-less-than-two-points-error": "Eine Linie kann nicht weniger als zwei Routenpunkte haben.",
+ "cannot-use-type-for-line-error": "Typ der Art „{{type}}“ kann nicht für Linien benutzt werden.",
+ "cannot-use-type-for-marker-error": "Typ der Art „{{type}}“ kann nicht für Marker benutzt werden.",
+ "unique-pad-ids-error": "Lese-ID, Schreib-ID und Admin-ID müssen unterschiedlich sein.",
+ "unique-pad-ids-read-write-error": "Lese-ID und Schreib-ID müssen unterschiedlich sein.",
+ "unique-pad-ids-read-admin-error": "Lese-ID und Admin-ID müssen unterschiedlich sein.",
+ "unique-pad-ids-write-admin-error": "Schreib-ID und Admin-ID müssen unterschiedlich sein.",
+ "pad-id-taken-error": "ID „{{id}}“ ist bereits vergeben.",
+ "pad-disappeared-error": "Karte wurde während des Abspeicherns gelöscht."
+ },
+
+ "routing": {
+ "ors-token-warning": "Warnung: Kein ORS-Token konfiguriert. Bitten Sie den Administrator, die Umgebungsvariable ORS_TOKEN zu setzen.",
+ "too-much-distance-error": "Die Distanz zwischen den Routenpunkten ist zu groß. Versuchen Sie, einige Zwischenpunkte hinzuzufügen.",
+ "invalid-response-error": "Ungültige Antwort vom Routenserver.",
+ "mapbox-token-warning": "Kein Mapbox-Token konfiguriert. Bitten Sie den Administrator, die Umgebungsvariable MAPBOX_TOKEN zu setzen.",
+ "mapbox-error": "Route konnte nicht berechnet werden ({{code}})."
+ },
+
+ "socket": {
+ "only-in-admin-error": "Nur im Admin-Modus verfügbar.",
+ "only-in-write-error": "Nur im Schreib-Modus verfügbar.",
+ "pad-id-set-error": "Karten-ID bereits gesetzt.",
+ "pad-not-exist-error": "Diese Karte existiert nicht.",
+ "pad-already-loaded-error": "Karte bereits geladen.",
+ "no-map-open-error": "Keine Karte geöffnet.",
+ "unknown-format-error": "Unbekanntes Format",
+ "route-not-available-error": "Route nicht verfügbar.",
+ "route-name": "FacilMap-Route",
+ "already-listening-to-history-error": "Änderungsgeschichte bereits abonniert.",
+ "not-listening-to-history-error": "Änderungsgeschichte nicht abonniert.",
+ "admin-revert-error": "Diese Änderung kann nur im Admin-Modus rückgängig gemacht werden."
+ },
+
+ "search": {
+ "url-request-error": "Laden von „{{url}}“ fehlgeschlagen (Status: {{status}}).",
+ "url-response-error": "Ungültige Antwort vom Server.",
+ "url-unknown-format-error": "Unbekanntes Dateiformat."
+ },
+
+ "webserver": {
+ "map-not-found-error": "Karte mit der ID {{padId}} konnte nicht gefunden werden."
+ }
+}
\ No newline at end of file
diff --git a/server/src/i18n/de.ts b/server/src/i18n/de.ts
deleted file mode 100644
index b04fd0ec..00000000
--- a/server/src/i18n/de.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-const messagesDe = {
- "pad-not-found-error": `Karte {{padId}} konnte nicht gefunden werden.`,
- "pad-read-not-found-error": `Karte mit der Lese-ID {{padId}} konnte nicht gefunden werden.`,
-
- "database": {
- "type-not-found-error": `Typ {{typeId}} existiert nicht.`,
- "object-not-found-in-pad-error": `Objekt {{id}} vom Typ „{{type}}“ konnte auf der Karte {{padId}} nicht gefunden werden.`,
- "old-pad-data-not-available-error": `Alte Karteneinstellungen nicht verfügbar.`,
- "unknown-type-error": `Unbekannter Typ „{{type}}“.`,
- "route-points-not-an-array-error": `routePoints ist kein Array`,
- "route-points-less-than-two-points-error": `Eine Linie kann nicht weniger als zwei Routenpunkte haben.`,
- "cannot-use-type-for-line-error": `Typ der Art „{{type}}“ kann nicht für Linien benutzt werden.`,
- "cannot-use-type-for-marker-error": `Typ der Art „{{type}}“ kann nicht für Marker benutzt werden.`,
- "unique-pad-ids-error": `Lese-ID, Schreib-ID und Admin-ID müssen unterschiedlich sein.`,
- "unique-pad-ids-read-write-error": `Lese-ID und Schreib-ID müssen unterschiedlich sein.`,
- "unique-pad-ids-read-admin-error": `Lese-ID und Admin-ID müssen unterschiedlich sein.`,
- "unique-pad-ids-write-admin-error": `Schreib-ID und Admin-ID müssen unterschiedlich sein.`,
- "pad-id-taken-error": `ID „{{id}}“ ist bereits vergeben.`,
- "pad-disappeared-error": `Karte wurde während des Abspeicherns gelöscht.`
- },
-
- "routing": {
- "ors-token-warning": `Warnung: Kein ORS-Token konfiguriert. Bitten Sie den Administrator, die Umgebungsvariable ORS_TOKEN zu setzen.`,
- "too-much-distance-error": `Die Distanz zwischen den Routenpunkten ist zu groß. Versuchen Sie, einige Zwischenpunkte hinzuzufügen.`,
- "invalid-response-error": `Ungültige Antwort vom Routenserver.`,
- "mapbox-token-warning": `Kein Mapbox-Token konfiguriert. Bitten Sie den Administrator, die Umgebungsvariable MAPBOX_TOKEN zu setzen.`,
- "mapbox-error": `Route konnte nicht berechnet werden ({{code}}).`
- },
-
- "socket": {
- "only-in-admin-error": `Nur im Admin-Modus verfügbar.`,
- "only-in-write-error": `Nur im Schreib-Modus verfügbar.`,
- "pad-id-set-error": `Karten-ID bereits gesetzt.`,
- "pad-not-exist-error": `Diese Karte existiert nicht.`,
- "pad-already-loaded-error": `Karte bereits geladen.`,
- "no-map-open-error": `Keine Karte geöffnet.`,
- "unknown-format-error": `Unbekanntes Format`,
- "route-not-available-error": `Route nicht verfügbar.`,
- "route-name": `FacilMap-Route`,
- "already-listening-to-history-error": `Änderungsgeschichte bereits abonniert.`,
- "not-listening-to-history-error": `Änderungsgeschichte nicht abonniert.`,
- "admin-revert-error": `Diese Änderung kann nur im Admin-Modus rückgängig gemacht werden.`
- },
-
- "search": {
- "url-request-error": `Laden von „{{url}}“ fehlgeschlagen (Status: {{status}}).`,
- "url-response-error": `Ungültige Antwort vom Server.`,
- "url-unknown-format-error": `Unbekanntes Dateiformat.`
- },
-
- "webserver": {
- "map-not-found-error": `Karte mit der ID {{padId}} konnte nicht gefunden werden.`
- }
-};
-
-export default messagesDe;
diff --git a/server/src/i18n/en.json b/server/src/i18n/en.json
new file mode 100644
index 00000000..ddf06b4c
--- /dev/null
+++ b/server/src/i18n/en.json
@@ -0,0 +1,54 @@
+{
+ "pad-not-found-error": "Map {{padId}} could not be found.",
+ "pad-read-not-found-error": "Map with read-only ID {{padId}} could not be found.",
+
+ "database": {
+ "type-not-found-error": "Type {{typeId}} does not exist.",
+ "object-not-found-in-pad-error": "{{type}} {{id}} of map {{padId}} could not be found.",
+ "old-pad-data-not-available-error": "Old map data not available.",
+ "unknown-type-error": "Unknown type \"{{type}}\".",
+ "route-points-not-an-array-error": "routePoints is not an array",
+ "route-points-less-than-two-points-error": "A line cannot have less than two route points.",
+ "cannot-use-type-for-line-error": "Cannot use {{type}} type for line.",
+ "cannot-use-type-for-marker-error": "Cannot use {{type}} type for marker.",
+ "unique-pad-ids-error": "Read-only, read-write and admin ID have to be different from each other.",
+ "unique-pad-ids-read-write-error": "Read-only and read-write ID cannot be the same.",
+ "unique-pad-ids-read-admin-error": "Read-only and admin ID cannot be the same.",
+ "unique-pad-ids-write-admin-error": "Read-write and admin ID cannot be the same.",
+ "pad-id-taken-error": "ID '{{id}}' is already taken.",
+ "pad-disappeared-error": "Map has disappeared after updating."
+ },
+
+ "routing": {
+ "ors-token-warning": "Warning: No ORS token configured. Please ask the administrator to set ORS_TOKEN in the environment or in config.env.",
+ "too-much-distance-error": "Too much distance between route points. Consider adding some via points.",
+ "invalid-response-error": "Invalid response from routing server.",
+ "mapbox-token-warning": "No Mapbox token configured. Please ask the administrator to set MAPBOX_TOKEN in the environment or in config.env.",
+ "mapbox-error": "Route could not be calculated ({{code}})."
+ },
+
+ "socket": {
+ "only-in-admin-error": "Only available in admin mode.",
+ "only-in-write-error": "Only available in write mode.",
+ "pad-id-set-error": "Map ID already set",
+ "pad-not-exist-error": "This map does not exist",
+ "pad-already-loaded-error": "Map already loaded.",
+ "no-map-open-error": "No map opened.",
+ "unknown-format-error": "Unknown format",
+ "route-not-available-error": "Route not available.",
+ "route-name": "FacilMap route",
+ "already-listening-to-history-error": "Already listening to history.",
+ "not-listening-to-history-error": "Not listening to history.",
+ "admin-revert-error": "This kind of change can only be reverted in admin mode."
+ },
+
+ "search": {
+ "url-request-error": "Request to \"{{url}}\" failed with status {{status}}.",
+ "url-response-error": "Invalid response from server.",
+ "url-unknown-format-error": "Unknown file format."
+ },
+
+ "webserver": {
+ "map-not-found-error": "Map with ID {{padId}} could not be found."
+ }
+}
\ No newline at end of file
diff --git a/server/src/i18n/en.ts b/server/src/i18n/en.ts
deleted file mode 100644
index 7b194441..00000000
--- a/server/src/i18n/en.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-const messagesEn = {
- "pad-not-found-error": `Map {{padId}} could not be found.`,
- "pad-read-not-found-error": `Map with read-only ID {{padId}} could not be found.`,
-
- "database": {
- "type-not-found-error": `Type {{typeId}} does not exist.`,
- "object-not-found-in-pad-error": `{{type}} {{id}} of map {{padId}} could not be found.`,
- "old-pad-data-not-available-error": `Old map data not available.`,
- "unknown-type-error": `Unknown type "{{type}}".`,
- "route-points-not-an-array-error": `routePoints is not an array`,
- "route-points-less-than-two-points-error": `A line cannot have less than two route points.`,
- "cannot-use-type-for-line-error": `Cannot use {{type}} type for line.`,
- "cannot-use-type-for-marker-error": `Cannot use {{type}} type for marker.`,
- "unique-pad-ids-error": `Read-only, read-write and admin ID have to be different from each other.`,
- "unique-pad-ids-read-write-error": `Read-only and read-write ID cannot be the same.`,
- "unique-pad-ids-read-admin-error": `Read-only and admin ID cannot be the same.`,
- "unique-pad-ids-write-admin-error": `Read-write and admin ID cannot be the same.`,
- "pad-id-taken-error": `ID '{{id}}' is already taken.`,
- "pad-disappeared-error": `Map has disappeared after updating.`
- },
-
- "routing": {
- "ors-token-warning": `Warning: No ORS token configured. Please ask the administrator to set ORS_TOKEN in the environment or in config.env.`,
- "too-much-distance-error": `Too much distance between route points. Consider adding some via points.`,
- "invalid-response-error": `Invalid response from routing server.`,
- "mapbox-token-warning": `No Mapbox token configured. Please ask the administrator to set MAPBOX_TOKEN in the environment or in config.env.`,
- "mapbox-error": `Route could not be calculated ({{code}}).`
- },
-
- "socket": {
- "only-in-admin-error": `Only available in admin mode.`,
- "only-in-write-error": `Only available in write mode.`,
- "pad-id-set-error": `Map ID already set`,
- "pad-not-exist-error": `This map does not exist`,
- "pad-already-loaded-error": `Map already loaded.`,
- "no-map-open-error": `No map opened.`,
- "unknown-format-error": `Unknown format`,
- "route-not-available-error": `Route not available.`,
- "route-name": `FacilMap route`,
- "already-listening-to-history-error": `Already listening to history.`,
- "not-listening-to-history-error": `Not listening to history.`,
- "admin-revert-error": `This kind of change can only be reverted in admin mode.`
- },
-
- "search": {
- "url-request-error": `Request to "{{url}}" failed with status {{status}}.`,
- "url-response-error": `Invalid response from server.`,
- "url-unknown-format-error": `Unknown file format.`
- },
-
- "webserver": {
- "map-not-found-error": `Map with ID {{padId}} could not be found.`
- }
-};
-
-export default messagesEn;
diff --git a/server/tsconfig.json b/server/tsconfig.json
index ac8b52c5..3278a0dc 100644
--- a/server/tsconfig.json
+++ b/server/tsconfig.json
@@ -14,6 +14,7 @@
],
"include": [
"src/**/*",
+ "src/**/*.json",
"vite.config.ts",
"server.ts"
]
diff --git a/tsconfig.base.json b/tsconfig.base.json
index cb536557..fb4dda98 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -6,6 +6,7 @@
"strict": true,
"moduleResolution": "bundler",
"skipLibCheck": true,
- "verbatimModuleSyntax": true
+ "verbatimModuleSyntax": true,
+ "resolveJsonModule": true
}
}
\ No newline at end of file
diff --git a/utils/src/i18n.ts b/utils/src/i18n.ts
index 23d610e8..b294390a 100644
--- a/utils/src/i18n.ts
+++ b/utils/src/i18n.ts
@@ -1,8 +1,8 @@
///
import type { i18n } from "i18next";
import { getRawI18n, onI18nReady } from "./i18n-utils";
-import messagesDe from "./i18n/de";
-import messagesEn from "./i18n/en";
+import messagesDe from "./i18n/de.json";
+import messagesEn from "./i18n/en.json";
const namespace = "facilmap-utils";
@@ -12,13 +12,13 @@ onI18nReady((i18n) => {
});
if (import.meta.hot) {
- import.meta.hot.accept("./i18n/en", (m) => {
+ import.meta.hot.accept("./i18n/en.json", (m) => {
onI18nReady((i18n) => {
i18n.addResourceBundle("en", namespace, m!.default);
});
});
- import.meta.hot.accept("./i18n/de", (m) => {
+ import.meta.hot.accept("./i18n/de.json", (m) => {
onI18nReady((i18n) => {
i18n.addResourceBundle("de", namespace, m!.default);
});
diff --git a/utils/src/i18n/de.json b/utils/src/i18n/de.json
new file mode 100644
index 00000000..027ab48b
--- /dev/null
+++ b/utils/src/i18n/de.json
@@ -0,0 +1,53 @@
+{
+ "elevation": {
+ "http-error": "Unerwarteter Fehler beim Laden der Höhe über NN (Status {{status}})."
+ },
+
+ "format": {
+ "time": "{{hours}}:{{minutes}}",
+ "route-time": "{{time}} {{mode}}",
+ "distance-km": "{{distance}}\u202fkm",
+ "distance-mi": "{{distance}}\u202fmi",
+ "elevation-m": "{{elevation}}\u202fm",
+ "elevation-ft": "{{elevation}}\u202fft"
+ },
+
+ "objects": {
+ "untitled-marker": "Unbenannter Marker",
+ "untitled-lined": "Unbenannte Linie"
+ },
+
+ "pads": {
+ "unnamed-map": "Unbenannte Karte",
+ "page-title": "{{padName}} – {{appName}}",
+ "fallback-page-description": "Eine vielseitige Karte auf OpenStreetMap-Basis, auf der Marker und Linien mit Live-Kollaboration gesetzt werden können."
+ },
+
+ "routing": {
+ "route-mode-hgv": "mit dem LKW",
+ "route-mode-car": "mit dem Auto",
+ "route-mode-road-bike": "mit dem Rennrad",
+ "route-mode-mountain-bike": "mit dem Mountain Bike",
+ "route-mode-electric-bike": "mit dem E-Bike",
+ "route-mode-bicycle": "mit dem Fahrrad",
+ "route-mode-wheelchair": "mit dem Rollstuhl",
+ "route-mode-foot": "zu Fuß",
+ "route-time": "{{time}}\u202Fh {{mode}}"
+ },
+
+ "search": {
+ "http-error": "Unerwarteter Fehler bei der Suche (Status {{status}}).",
+ "from": "von",
+ "to": "nach",
+ "via": "über",
+ "hgv": "mit dem LKW",
+ "car": "mit dem Auto",
+ "road-bike": "mit dem Rennrad",
+ "mountain-bike": "mit dem Mountain Bike",
+ "electric-bike": "mit dem E-Bike|mit dem Pedelec",
+ "bicycle": "mit dem Rad|mit dem Fahrrad",
+ "wheelchair": "mit dem Rollstuhl",
+ "foot": "zu Fuß",
+ "straight": "Luftlinie"
+ }
+}
\ No newline at end of file
diff --git a/utils/src/i18n/de.ts b/utils/src/i18n/de.ts
deleted file mode 100644
index 1f37fe07..00000000
--- a/utils/src/i18n/de.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-const messagesDe = {
- "elevation": {
- "http-error": `Unerwarteter Fehler beim Laden der Höhe über NN (Status {{status}}).`
- },
-
- "format": {
- "time": `{{hours}}:{{minutes}}`,
- "route-time": `{{time}} {{mode}}`,
- "distance-km": `{{distance}}\u202fkm`,
- "distance-mi": `{{distance}}\u202fmi`,
- "elevation-m": `{{elevation}}\u202fm`,
- "elevation-ft": `{{elevation}}\u202fft`
- },
-
- "objects": {
- "untitled-marker": `Unbenannter Marker`,
- "untitled-lined": `Unbenannte Linie`
- },
-
- "pads": {
- "unnamed-map": `Unbenannte Karte`,
- "page-title": `{{padName}} – {{appName}}`,
- "fallback-page-description": `Eine vielseitige Karte auf OpenStreetMap-Basis, auf der Marker und Linien mit Live-Kollaboration gesetzt werden können.`
- },
-
- "routing": {
- "route-mode-hgv": `mit dem LKW`,
- "route-mode-car": `mit dem Auto`,
- "route-mode-road-bike": `mit dem Rennrad`,
- "route-mode-mountain-bike": `mit dem Mountain Bike`,
- "route-mode-electric-bike": `mit dem E-Bike`,
- "route-mode-bicycle": `mit dem Fahrrad`,
- "route-mode-wheelchair": `mit dem Rollstuhl`,
- "route-mode-foot": `zu Fuß`,
- "route-time": `{{time}}\u202Fh {{mode}}`
- },
-
- "search": {
- "http-error": `Unerwarteter Fehler bei der Suche (Status {{status}}).`,
- "from": `von`,
- "to": `nach`,
- "via": `über`,
- "hgv": `mit dem LKW`,
- "car": `mit dem Auto`,
- "road-bike": `mit dem Rennrad`,
- "mountain-bike": `mit dem Mountain Bike`,
- "electric-bike": `mit dem E-Bike|mit dem Pedelec`,
- "bicycle": `mit dem Rad|mit dem Fahrrad`,
- "wheelchair": `mit dem Rollstuhl`,
- "foot": `zu Fuß`,
- "straight": `Luftlinie`
- }
-};
-
-export default messagesDe;
diff --git a/utils/src/i18n/en.json b/utils/src/i18n/en.json
new file mode 100644
index 00000000..8bbfdedb
--- /dev/null
+++ b/utils/src/i18n/en.json
@@ -0,0 +1,52 @@
+{
+ "elevation": {
+ "http-error": "Looking up elevations failed with status {{status}}."
+ },
+
+ "format": {
+ "time": "{{hours}}:{{minutes}}\u202Fh",
+ "route-time": "{{time}} {{mode}}",
+ "distance-km": "{{distance}}\u202fkm",
+ "distance-mi": "{{distance}}\u202fmi",
+ "elevation-m": "{{elevation}}\u202fm",
+ "elevation-ft": "{{elevation}}\u202fft"
+ },
+
+ "objects": {
+ "untitled-marker": "Untitled marker",
+ "untitled-line": "Untitled line"
+ },
+
+ "pads": {
+ "unnamed-map": "Unnamed map",
+ "page-title": "{{padName}} – {{appName}}",
+ "fallback-page-description": "A fully-featured OpenStreetMap-based map where markers and lines can be added with live collaboration."
+ },
+
+ "routing": {
+ "route-mode-hgv": "by HGV",
+ "route-mode-car": "by car",
+ "route-mode-road-bike": "by road bike",
+ "route-mode-mountain-bike": "by mountain bike",
+ "route-mode-electric-bike": "by electric bike",
+ "route-mode-bicycle": "by bicycle",
+ "route-mode-wheelchair": "by wheelchair",
+ "route-mode-foot": "on foot"
+ },
+
+ "search": {
+ "http-error": "Search failed with status {{status}}.",
+ "from": "from",
+ "to": "to",
+ "via": "via",
+ "hgv": "by HGV",
+ "car": "by car",
+ "road-bike": "by road bike",
+ "mountain-bike": "by mountain bike",
+ "electric-bike": "by electric bike",
+ "bicycle": "by bicycle|by bike",
+ "wheelchair": "by wheelchair",
+ "foot": "on foot|by walk|by walking|walking",
+ "straight": "straight|by helicopter"
+ }
+}
\ No newline at end of file
diff --git a/utils/src/i18n/en.ts b/utils/src/i18n/en.ts
deleted file mode 100644
index e887ca76..00000000
--- a/utils/src/i18n/en.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-const messagesEn = {
- "elevation": {
- "http-error": `Looking up elevations failed with status {{status}}.`
- },
-
- "format": {
- "time": `{{hours}}:{{minutes}}\u202Fh`,
- "route-time": `{{time}} {{mode}}`,
- "distance-km": `{{distance}}\u202fkm`,
- "distance-mi": `{{distance}}\u202fmi`,
- "elevation-m": `{{elevation}}\u202fm`,
- "elevation-ft": `{{elevation}}\u202fft`
- },
-
- "objects": {
- "untitled-marker": `Untitled marker`,
- "untitled-line": `Untitled line`
- },
-
- "pads": {
- "unnamed-map": `Unnamed map`,
- "page-title": `{{padName}} – {{appName}}`,
- "fallback-page-description": `A fully-featured OpenStreetMap-based map where markers and lines can be added with live collaboration.`
- },
-
- "routing": {
- "route-mode-hgv": `by HGV`,
- "route-mode-car": `by car`,
- "route-mode-road-bike": `by road bike`,
- "route-mode-mountain-bike": `by mountain bike`,
- "route-mode-electric-bike": `by electric bike`,
- "route-mode-bicycle": `by bicycle`,
- "route-mode-wheelchair": `by wheelchair`,
- "route-mode-foot": `on foot`
- },
-
- "search": {
- "http-error": `Search failed with status {{status}}.`,
- "from": `from`,
- "to": `to`,
- "via": `via`,
- "hgv": `by HGV`,
- "car": `by car`,
- "road-bike": `by road bike`,
- "mountain-bike": `by mountain bike`,
- "electric-bike": `by electric bike`,
- "bicycle": `by bicycle|by bike`,
- "wheelchair": `by wheelchair`,
- "foot": `on foot|by walk|by walking|walking`,
- "straight": `straight|by helicopter`
- }
-};
-
-export default messagesEn;
diff --git a/utils/tsconfig.json b/utils/tsconfig.json
index 1dcd74a7..175e9a0f 100644
--- a/utils/tsconfig.json
+++ b/utils/tsconfig.json
@@ -11,5 +11,5 @@
{ "path": "./tsconfig.node.json" },
{ "path": "../types/tsconfig.json" }
],
- "include": ["src/**/*"]
+ "include": ["src/**/*", "src/**/*.json"]
}
\ No newline at end of file