diff --git a/messages/de.json b/messages/de.json index ed4533d..aa838c7 100644 --- a/messages/de.json +++ b/messages/de.json @@ -5,5 +5,122 @@ "school": "Schule", "work": "Arbeit", "no-location": "Kein {name} Speicherort gespeichert." + }, + "location": { + "unlock": "Standort entsperren", + "lock": "Standort sperren", + "code": "Standortcode", + "start": "Standort teilen", + "join": "Remote-Standort beitreten" + }, + "vehicles": { + "selector": { + "title": "Fahrzeugauswahl", + "description": "Wählen Sie Ihr Fahrzeug aus, um die Route individuell auf Sie abzustimmen.", + "add": "Fahrzeug hinzufügen" + }, + "types": { + "car": "Auto", + "moped": "Moped" + }, + "add": { + "name": "Fahrzeugname", + "legal-speed": "Legale Geschwindigkeit", + "actual-speed": "Tatsächliche Geschwindigkeit", + "fuel": "Kraftstoffart", + "preferred-fuel": "Bevorzugter Kraftstoff", + "diesel": "Diesel", + "petrol": "Benzin", + "electric": "Elektrisch", + "errors": { + "enter-name": "Bitte geben Sie einen Fahrzeugnamen ein.", + "enter-speeds": "Bitte geben Sie gültige Geschwindigkeiten ein.", + "select-fuel": "Bitte wählen Sie eine gültige Kraftstoffart und den bevorzugten Kraftstoff aus." + } + }, + "default": "Standardfahrzeug" + }, + "save": "Speichern", + "cancel": "Abbrechen", + "loading": "Laden...", + "more": "Mehr", + "error": "Fehler", + "sidebar": { + "about": { + "header": "Über", + "powered-by": "Angetrieben von", + "contributors": "Mitwirkende" + }, + "developer": { + "header": "Entwicklereinstellungen" + }, + "offline-maps": { + "header": "Offline-Karten", + "not-available": "Keine Offline-Karten verfügbar.", + "only-mobile": "Offline-Karten sind nur auf Mobilgeräten verfügbar.", + "downloaded": "{name} wurde heruntergeladen" + }, + "language": { + "header": "Sprache" + }, + "map-style": { + "header": "Kartenstil" + }, + "settings": { + "header": "Einstellungen", + "general": "Allgemein", + "map": "Karte" + }, + "info": { + "dropped": "Pin", + "route": "Route", + "email": "E-Mail", + "website": "Webseite", + "call": "Anrufen", + "set-as": "Speichern als {name}", + "payment-methods": "Zahlungsarten", + "fuel-types": "Kraftstoffarten", + "prices": "Kraftstoffpreise", + "no-prices": "Keine Kraftstoffpreise verfügbar.", + "error-loading-prices": "Fehler beim Laden der Kraftstoffpreise", + "internet-access": "Internetzugang", + "fee": "Gebühr", + "opening-hours": "Öffnungszeiten", + "open": "Offen", + "closed": "Geschlossen", + "restaurant": "Restaurant", + "reviews": "Bewertungen", + "no-reviews": "Keine Bewertungen.", + "write-review": "Eigene Bewertung schreiben" + }, + "mapai": { + "ask-question": "Stellen Sie eine Frage zu diesem Ort ..." + }, + "in-route": { + "left": "links", + "end-trip": "Route beenden", + "share-code": "Code teilen", + "stop-sharing": "Standortfreigabe beenden", + "share-location": "Routenstatus und Standort teilen" + }, + "route": { + "header": "Route", + "driving-with": "Fahren mit", + "help": "Sie können aktuell für Ihren aktuellen Standort und home, school oder work für gespeicherte Standorte verwenden.", + "calculate": "Berechnen" + }, + "search": { + "header": "Suchergebnisse für" + }, + "trip": { + "header": "Routendetails", + "start": "Start", + "save": "Speichern", + "send": "Senden" + }, + "user": { + "header": "Benutzer", + "login": "Login" + } } } \ No newline at end of file diff --git a/messages/en.json b/messages/en.json index 0afdd31..80969e2 100644 --- a/messages/en.json +++ b/messages/en.json @@ -1,9 +1,126 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", + "save": "Save", + "cancel": "Cancel", + "loading": "Loading...", + "more": "More", + "error": "Error", "saved": { "home": "Home", "school": "School", "work": "Work", "no-location": "No {name} location saved." + }, + "location": { + "unlock": "Unlock Location", + "lock": "Lock Location", + "code": "Advertise code", + "start": "Advertise Location", + "join": "Join Remote Location" + }, + "vehicles": { + "default": "Default Vehicle", + "selector": { + "title": "Vehicle Selector", + "description": "Select your vehicle to customize routing just for you.", + "add": "Add Vehicle" + }, + "types": { + "car": "Car", + "moped": "Moped" + }, + "add": { + "name": "Vehicle Name", + "legal-speed": "Legal Speed", + "actual-speed": "Actual Speed", + "fuel": "Fuel Type", + "preferred-fuel": "Preferred Fuel", + "diesel": "Diesel", + "petrol": "Petrol", + "electric": "Electric", + "errors": { + "enter-name": "Please enter a vehicle name.", + "enter-speeds": "Please enter valid speeds.", + "select-fuel": "Please select a valid fuel type and preferred fuel." + } + } + }, + "sidebar": { + "about": { + "header": "About", + "powered-by": "Powered by", + "contributors": "contributors" + }, + "developer": { + "header": "Developer Settings" + }, + "offline-maps": { + "header": "Offline Maps", + "not-available": "No offline maps available.", + "only-mobile": "Offline maps are only available on mobile.", + "downloaded": "Downloaded {name}" + }, + "language": { + "header": "Language" + }, + "map-style": { + "header": "Map Style" + }, + "settings": { + "header": "Settings", + "general": "General", + "map": "Map" + }, + "info": { + "dropped": "Dropped Pin", + "route": "Route", + "email": "Email", + "website": "Website", + "call": "Call", + "set-as": "Set as {name}", + "payment-methods": "Payment Methods", + "fuel-types": "Fuel Types", + "prices": "Fuel Prices", + "no-prices": "No fuel prices available.", + "error-loading-prices": "Error loading fuel prices", + "internet-access": "Internet Access", + "fee": "Fee", + "opening-hours": "Opening Hours", + "open": "Open", + "closed": "Closed", + "restaurant": "Restaurant", + "reviews": "Reviews", + "no-reviews": "No reviews.", + "write-review": "Write a review" + }, + "mapai": { + "ask-question": "Ask a question about this place..." + }, + "in-route": { + "left": "left", + "end-trip": "End Trip", + "share-code": "Share Code", + "stop-sharing": "Stop Sharing Location", + "share-location": "Share Trip Status & Location" + }, + "route": { + "header": "Route", + "driving-with": "Driving with", + "help": "You can use current for your current location, home, school or work for saved locations.", + "calculate": "Calculate" + }, + "search": { + "header": "Search Results for" + }, + "trip": { + "header": "Trip Details", + "start": "Start Navigation", + "save": "Save", + "send": "Send" + }, + "user": { + "header": "User", + "login": "Login" + } } } \ No newline at end of file diff --git a/src/lib/components/lnv/AddVehicleDrawer.svelte b/src/lib/components/lnv/AddVehicleDrawer.svelte index 8258caa..7263785 100644 --- a/src/lib/components/lnv/AddVehicleDrawer.svelte +++ b/src/lib/components/lnv/AddVehicleDrawer.svelte @@ -21,6 +21,7 @@ import * as Select from "../ui/select"; import Input from "../ui/input/input.svelte"; import EvConnectorSelect from "./EVConnectorSelect.svelte"; + import { m } from "$lang/messages"; let open = $state(false); @@ -62,7 +63,7 @@ - Add Vehicle + {m["vehicles.selector.add"]()}
@@ -71,75 +72,75 @@ {@const Icon = getVehicleIcon(vehicle.type)} {vehicle.type === "car" - ? "Car" + ? m["vehicles.types.car"]() : vehicle.type === "motor_scooter" - ? "Moped" + ? m["vehicles.types.moped"]() : "?"} - Car + {m["vehicles.types.car"]()} - Moped + {m["vehicles.types.moped"]()}
- Legal Speed + {m["vehicles.add.legal-speed"]()} / - Actual Speed + {m["vehicles.add.actual-speed"]()}
- Fuel Type + {m["vehicles.add.fuel"]()} / - Preferred Fuel + {m["vehicles.add.preferred-fuel"]()}
{vehicle.fuelType === "diesel" - ? "Diesel" + ? m["vehicles.add.diesel"]() : vehicle.fuelType === "petrol" - ? "Petrol" - : "Electric"} + ? m["vehicles.add.petrol"]() + : m["vehicles.add.electric"]()} - Diesel - Petrol - Electric + {m["vehicles.add.diesel"]()} + {m["vehicles.add.petrol"]()} + {m["vehicles.add.electric"]()} @@ -165,15 +166,15 @@ onclick={() => { open = false; if (vehicle.name.trim() === "") { - alert("Please enter a vehicle name."); + alert(m["vehicles.add.errors.enter-name"]()); return; } if (vehicle.legalMaxSpeed <= 0 || vehicle.actualMaxSpeed <= 0) { - alert("Please enter valid speeds."); + alert(m["vehicles.add.errors.enter-speeds"]()); return; } if (!isValidFuel(vehicle)) { - alert("Please select a valid fuel type and preferred fuel."); + alert(m["vehicles.add.errors.select-fuel"]()); return; } setVehicles([...vehicles, vehicle]); @@ -182,7 +183,7 @@ }} > - Save + {m.save()} diff --git a/src/lib/components/lnv/Sidebar.svelte b/src/lib/components/lnv/Sidebar.svelte index 14f4956..90ca433 100644 --- a/src/lib/components/lnv/Sidebar.svelte +++ b/src/lib/components/lnv/Sidebar.svelte @@ -31,6 +31,7 @@ import AboutSidebar from "./sidebar/settings/AboutSidebar.svelte"; import OfflineMapsSidebar from "./sidebar/settings/OfflineMapsSidebar.svelte"; import DeveloperSidebar from "./sidebar/settings/DeveloperSidebar.svelte"; + import { m } from "$lang/messages"; // eslint-disable-next-line @typescript-eslint/no-explicit-any const views: Record> = { @@ -188,10 +189,10 @@ location.toggleLock(); }} > - {location.locked ? "Unlock Location" : "Lock Location"} + {location.locked ? m["location.unlock"]() : m["location.unlock"]()} {#if location.code} - Advertise code: {location.code} + {m["location.code"]()}: {location.code} {/if}
diff --git a/src/lib/components/lnv/VehicleSelector.svelte b/src/lib/components/lnv/VehicleSelector.svelte index 7643b0e..b171875 100644 --- a/src/lib/components/lnv/VehicleSelector.svelte +++ b/src/lib/components/lnv/VehicleSelector.svelte @@ -16,6 +16,7 @@ type VehicleType, } from "$lib/vehicles/vehicles.svelte"; import AddVehicleDrawer from "./AddVehicleDrawer.svelte"; + import { m } from "$lang/messages"; let open = $state(false); @@ -48,9 +49,9 @@ - Vehicle Selector + {m["vehicles.selector.title"]()} Select your vehicle to customize routing just for you.{m["vehicles.selector.description"]()}
@@ -72,7 +73,7 @@
diff --git a/src/lib/components/lnv/info/FuelStation.svelte b/src/lib/components/lnv/info/FuelStation.svelte index 4c8df3d..e081dde 100644 --- a/src/lib/components/lnv/info/FuelStation.svelte +++ b/src/lib/components/lnv/info/FuelStation.svelte @@ -1,4 +1,5 @@ -

Fuel Types

+

{m["sidebar.info.fuel-types"]()}

    {#each Object.entries(tags).filter( ([key]) => key.startsWith("fuel:"), ) as [key, tag] (key)} @@ -19,9 +20,9 @@
-

Prices

+

{m["sidebar.info.prices"]()}

{#await getStations(lat, lng)} -

Loading fuel prices...

+

{m.loading()}

{:then stations} {#if stations.stations.length > 0} {@const station = stations.stations[0]} @@ -35,9 +36,9 @@

E5: {station.e5}

{/if} {:else} -

No fuel prices available.

+

{m["sidebar.info.no-prices"]()}

{/if} {:catch err} -

Error loading fuel prices: {err.message}

+

{m["sidebar.info.error-loading-prices"]()}: {err.message}

{/await}
diff --git a/src/lib/components/lnv/info/InternetAccess.svelte b/src/lib/components/lnv/info/InternetAccess.svelte index 01076fa..401aecd 100644 --- a/src/lib/components/lnv/info/InternetAccess.svelte +++ b/src/lib/components/lnv/info/InternetAccess.svelte @@ -1,4 +1,5 @@ {#if tag != "no"} -

Internet Access

+

{m["sidebar.info.internet-access"]()}

{#each splitter as value, _index (value)} {value} {/each} {#if tags["internet_access:fee"] && tags["internet_access:fee"] != "no"} - Fee: {tags["internet_access:fee"]} + {m["sidebar.info.fee"]()}: {tags["internet_access:fee"]} {/if} {#if tags["internet_access:ssid"]} {tags["internet_access:ssid"]} diff --git a/src/lib/components/lnv/info/MapAI.svelte b/src/lib/components/lnv/info/MapAI.svelte index d9cd03d..88d071e 100644 --- a/src/lib/components/lnv/info/MapAI.svelte +++ b/src/lib/components/lnv/info/MapAI.svelte @@ -1,4 +1,5 @@

- Opening Hours + {m["sidebar.info.opening-hours"]()} {#if oh.getState()} - Open + {m["sidebar.info.open"]()} {:else} - Closed + {m["sidebar.info.closed"]()} {/if}

diff --git a/src/lib/components/lnv/info/RestaurantInfo.svelte b/src/lib/components/lnv/info/RestaurantInfo.svelte index c34d9e5..20f68b8 100644 --- a/src/lib/components/lnv/info/RestaurantInfo.svelte +++ b/src/lib/components/lnv/info/RestaurantInfo.svelte @@ -1,4 +1,5 @@ {#if matchingTags.length > 0} -

Restaurant

+

{m["sidebar.info.restaurant"]()}

    {#each matchingTags as tag, _index (tag)} {#if tag != "no"} diff --git a/src/lib/components/lnv/info/Reviews.svelte b/src/lib/components/lnv/info/Reviews.svelte index 9d3c2f1..909aeb6 100644 --- a/src/lib/components/lnv/info/Reviews.svelte +++ b/src/lib/components/lnv/info/Reviews.svelte @@ -1,4 +1,5 @@ -

    Reviews

    +

    {m["sidebar.info.reviews"]()}

    {#await getReviews({ lat, lon: lng }) then reviews} {#if reviews.length > 0}
      @@ -25,7 +26,7 @@ {/each}
    {:else} -

    No reviews available.

    +

    {m["sidebar.info.no-reviews"]()}

    {/if} {m["sidebar.info.write-review"]()}
    {:catch error} -

    Error loading reviews: {error.message}

    +

    {m.error()}: {error.message}

    {/await} diff --git a/src/lib/components/lnv/sidebar/InRouteSidebar.svelte b/src/lib/components/lnv/sidebar/InRouteSidebar.svelte index fe4fc9a..c30f159 100644 --- a/src/lib/components/lnv/sidebar/InRouteSidebar.svelte +++ b/src/lib/components/lnv/sidebar/InRouteSidebar.svelte @@ -1,4 +1,5 @@ -{fullDistanceText} left +{fullDistanceText} {m["sidebar.in-route.left"]()} {m["sidebar.in-route.end-trip"]()}
    {#if location.code} - Share Code: {location.code} + {m["sidebar.in-route.share-code"]()}: {location.code} {:else} {/if}
    diff --git a/src/lib/components/lnv/sidebar/InfoSidebar.svelte b/src/lib/components/lnv/sidebar/InfoSidebar.svelte index 30c1de9..b2f14a8 100644 --- a/src/lib/components/lnv/sidebar/InfoSidebar.svelte +++ b/src/lib/components/lnv/sidebar/InfoSidebar.svelte @@ -26,6 +26,7 @@ import { getDeveloperToggle } from "./settings/developer.svelte"; import InternetAccess from "../info/InternetAccess.svelte"; import RestaurantInfo from "../info/RestaurantInfo.svelte"; + import { m } from "$lang/messages"; // let { feature }: { feature: Feature } = $props(); @@ -88,9 +89,9 @@ pin.liftPin(); }} > - Dropped Pin + {m["sidebar.info.dropped"]()} -

    Loading...

    +

    {m.loading()}

    {:then res} {#if res.elements.length === 0} - Dropped Pin + {m["sidebar.info.dropped"]()} © OpenStreetMap
    {JSON.stringify(res, null, 2)}
    @@ -132,7 +133,7 @@ }} > - Route + {m["sidebar.info.route"]()} {#if tags.email || tags["contact:email"]} {/if} {#if tags.website || tags["contact:website"]} @@ -151,7 +152,7 @@ target="_blank" > - Website + {m["sidebar.info.website"]()} {/if} {#if tags.phone || tags["contact:phone"]} @@ -161,14 +162,14 @@ target="_blank" > - Call + {m["sidebar.info.call"]()} {/if} @@ -185,7 +186,7 @@ }} > - Set as Home + {m["sidebar.info.set-as"]({ name: m["saved.home"]() })} {#if dev.current}
{m["sidebar.route.calculate"]()} {#if routes} diff --git a/src/lib/components/lnv/sidebar/SearchSidebar.svelte b/src/lib/components/lnv/sidebar/SearchSidebar.svelte index 4a386a3..909f87c 100644 --- a/src/lib/components/lnv/sidebar/SearchSidebar.svelte +++ b/src/lib/components/lnv/sidebar/SearchSidebar.svelte @@ -6,6 +6,7 @@ import type { Feature } from "$lib/services/Search"; import SidebarHeader from "./SidebarHeader.svelte"; import { searchbar } from "../view.svelte"; + import { m } from "$lang/messages"; let { results, @@ -21,7 +22,7 @@ searchbar.text = ""; }} > - Search Results for "{query}" + {m["sidebar.search.header"]()} "{query}"
- Trip Details + {m["sidebar.trip.header"]()}
@@ -40,15 +41,15 @@ }} > - Start Navigation + {m["sidebar.trip.start"]()}
diff --git a/src/lib/components/lnv/sidebar/UserSidebar.svelte b/src/lib/components/lnv/sidebar/UserSidebar.svelte index 491741f..2d4039a 100644 --- a/src/lib/components/lnv/sidebar/UserSidebar.svelte +++ b/src/lib/components/lnv/sidebar/UserSidebar.svelte @@ -4,6 +4,7 @@ import Button from "$lib/components/ui/button/button.svelte"; import { getAuthURL, getOIDCUser } from "$lib/services/oidc"; import * as Avatar from "$lib/components/ui/avatar"; + import { m } from "$lang/messages"; interface OIDCUser { sub: string; @@ -26,7 +27,7 @@ {#if !user} - User + {m["sidebar.user.header"]()} {m["sidebar.user.login"]()} {:else} diff --git a/src/lib/components/lnv/sidebar/settings/AboutSidebar.svelte b/src/lib/components/lnv/sidebar/settings/AboutSidebar.svelte index e2f8d98..75922ed 100644 --- a/src/lib/components/lnv/sidebar/settings/AboutSidebar.svelte +++ b/src/lib/components/lnv/sidebar/settings/AboutSidebar.svelte @@ -1,4 +1,5 @@ -About +{m["sidebar.about.header"]()} @@ -21,9 +22,9 @@ > TrafficCue -Powered by: +{m["sidebar.about.powered-by"]()}:
    -
  • © OpenStreetMap contributors
  • +
  • © OpenStreetMap {m["sidebar.about.contributors"]()}
  • Natural Earth
  • MapLibre
  • OpenMapTiles
  • diff --git a/src/lib/components/lnv/sidebar/settings/DeveloperSidebar.svelte b/src/lib/components/lnv/sidebar/settings/DeveloperSidebar.svelte index 23608b3..3ff4a48 100644 --- a/src/lib/components/lnv/sidebar/settings/DeveloperSidebar.svelte +++ b/src/lib/components/lnv/sidebar/settings/DeveloperSidebar.svelte @@ -6,11 +6,12 @@ import { downloadPMTiles } from "$lib/services/OfflineTiles"; import { getDeveloperToggle } from "./developer.svelte"; import { view } from "../../view.svelte"; + import { m } from "$lang/messages"; const dev = getDeveloperToggle(); -Developer Settings +{m["sidebar.developer.header"]()}
    diff --git a/src/lib/components/lnv/sidebar/settings/OfflineMapsSidebar.svelte b/src/lib/components/lnv/sidebar/settings/OfflineMapsSidebar.svelte index e2595d0..a9407cd 100644 --- a/src/lib/components/lnv/sidebar/settings/OfflineMapsSidebar.svelte +++ b/src/lib/components/lnv/sidebar/settings/OfflineMapsSidebar.svelte @@ -3,22 +3,23 @@ import { DownloadCloudIcon } from "@lucide/svelte"; import SettingsButton from "./SettingsButton.svelte"; import SidebarHeader from "../SidebarHeader.svelte"; + import { m } from "$lang/messages"; let progresses: Record = $state({}); -Offline Maps +{m["sidebar.offline-maps.header"]()} {#await getRemoteList()} -

    Loading...

    +

    {m.loading()}

    {:then list}
    {#if list.length === 0} -

    No offline maps available.

    +

    {m["sidebar.offline-maps.not-available"]()}

    {/if} {#if !window.__TAURI__} -

    Offline maps are only available on mobile.

    +

    {m["sidebar.offline-maps.only-mobile"]()}

    {/if} {#each list as item, _index (item.file)} @@ -35,7 +36,7 @@ progresses[item.file] = (progress / total) * 100; }, ); - alert(`Downloaded ${item.name}`); + alert(m["sidebar.offline-maps.downloaded"]({ name: item.name })); location.reload(); }} /> diff --git a/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte b/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte index 5cef2b2..8b9d79e 100644 --- a/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte +++ b/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte @@ -9,34 +9,35 @@ import SidebarHeader from "../SidebarHeader.svelte"; import SettingsButton from "./SettingsButton.svelte"; import { getDeveloperToggle } from "./developer.svelte"; + import { m } from "$lang/messages"; const dev = getDeveloperToggle(); -Settings +{m["sidebar.settings.header"]()}
    -

    General

    - +

    {m["sidebar.settings.general"]()}

    +
    -

    Map

    - - +

    {m["sidebar.settings.map"]()}

    + +
    -

    About

    +

    {m["sidebar.about.header"]()}

    {#if dev.current == "true"} {/if} - +
    diff --git a/src/lib/vehicles/vehicles.svelte.ts b/src/lib/vehicles/vehicles.svelte.ts index 513d92c..21ab6a0 100644 --- a/src/lib/vehicles/vehicles.svelte.ts +++ b/src/lib/vehicles/vehicles.svelte.ts @@ -1,3 +1,5 @@ +import { m } from "$lang/messages"; + /* Valhalla costing: auto, prioritizes motorways = car, (truck), motorcycle @@ -57,7 +59,7 @@ export interface Vehicle { } export const DefaultVehicle: Vehicle = { - name: "Default Vehicle", + name: m["vehicles.default"](), legalMaxSpeed: 45, actualMaxSpeed: 45, type: "motor_scooter",