adds routing options

This commit is contained in:
Christian Beutel
2025-03-29 12:50:59 +01:00
parent f0229b53a5
commit 60be2f65e4
15 changed files with 562 additions and 43 deletions

View File

@@ -2,6 +2,7 @@
import noUiSlider from "nouislider"; import noUiSlider from "nouislider";
import "nouislider/dist/nouislider.css"; import "nouislider/dist/nouislider.css";
import { onMount } from "svelte"; import { onMount } from "svelte";
import { type Options as SliderOptions } from "nouislider";
interface Props { interface Props {
minValue?: number; minValue?: number;
@@ -15,7 +16,8 @@
maxValue = 100, maxValue = 100,
currentValue = $bindable(maxValue / 2), currentValue = $bindable(maxValue / 2),
onset, onset,
}: Props = $props(); ...sliderOptions
}: Props & Partial<SliderOptions> = $props();
let sliderContainer: any = $state(); let sliderContainer: any = $state();
@@ -27,6 +29,7 @@
noUiSlider.create(sliderContainer, { noUiSlider.create(sliderContainer, {
start: currentValue, start: currentValue,
connect: [true, false], connect: [true, false],
...sliderOptions,
range: { range: {
min: minValue, min: minValue,
max: maxValue, max: maxValue,
@@ -39,6 +42,10 @@
onset?.(currentValue); onset?.(currentValue);
}); });
}); });
export function set(value: number) {
sliderContainer.noUiSlider.set(value)
}
</script> </script>
<div class="my-4" id="slider" bind:this={sliderContainer}></div> <div class="my-4" id="slider" bind:this={sliderContainer}></div>

View File

@@ -0,0 +1,271 @@
<script lang="ts">
import type {
RoutingOptions,
ValhallaAutoCostingOptions,
ValhallaBicycleCostingOptions,
ValhallaPedestrianCostingOptions,
} from "$lib/models/valhalla";
import { _ } from "svelte-i18n";
import Select, { type SelectItem } from "../base/select.svelte";
import Slider from "../base/slider.svelte";
import Toggle from "../base/toggle.svelte";
import { formatDistance, formatSpeed } from "$lib/util/format_util";
import { slide } from "svelte/transition";
interface Props {
options: RoutingOptions;
}
let { options = $bindable() }: Props = $props();
const modesOfTransport: SelectItem[] = [
{ text: $_("hiking"), value: "pedestrian" },
{ text: $_("cycling"), value: "bicycle" },
{ text: $_("driving"), value: "auto" },
];
const bikeTypes: SelectItem[] = [
{ text: $_("hybrid"), value: "Hybrid" },
{ text: $_("road"), value: "Road" },
{ text: $_("cross"), value: "Cross" },
{ text: $_("mountain"), value: "Mountain" },
];
if (!options.pedestrianOptions) {
options.pedestrianOptions = {
max_hiking_difficulty: 6,
walking_speed: 5.1,
use_hills: 1,
shortest: false,
};
}
if (!options.bicycleOptions) {
options.bicycleOptions = {
bicycle_type: "Hybrid",
cycling_speed: 20,
use_roads: 0.5,
use_hills: 0.5,
avoid_bad_surfaces: 0.25,
shortest: false,
};
}
if (!options.autoOptions) {
options.autoOptions = {
width: 1.6,
height: 1.9,
top_speed: 140,
fixed_speed: 0,
shortest: false,
};
}
$effect(() => {
if(!options.autoRouting) {
showSettings = false;
}
})
let showSettings = $state(true);
// svelte-ignore non_reactive_update
let cycleSpeedSlider: Slider;
function adjustSpeeddependingOnBikeType(
type: ValhallaBicycleCostingOptions["bicycle_type"],
) {
switch (type) {
case "City":
case "Hybrid":
cycleSpeedSlider?.set(18);
break;
case "Road":
cycleSpeedSlider?.set(25);
break;
case "Cross":
cycleSpeedSlider?.set(20);
break;
case "Mountain":
cycleSpeedSlider?.set(16);
break;
default:
break;
}
}
</script>
<div class="p-4 my-2 rounded-xl bg-background space-y-4">
<Toggle bind:value={options.autoRouting} label={$_("enable-auto-routing")}
></Toggle>
<div class="flex items-center gap-4">
<Select
items={modesOfTransport}
bind:value={options.modeOfTransport}
disabled={!options.autoRouting}
></Select>
<button
class="btn-icon"
type="button"
disabled={!options.autoRouting}
onclick={() => (showSettings = !showSettings)}
aria-label="Toggle routing settings"
><i class="fa fa-cogs" class:text-gray-500={!options.autoRouting}></i></button
>
</div>
{#if showSettings}
<div in:slide out:slide>
{#if options.modeOfTransport === "pedestrian" && options.pedestrianOptions}
<p class="text-sm font-medium pb-1">{$_("walking-speed")}</p>
<Slider
minValue={0.5}
maxValue={25}
bind:currentValue={options.pedestrianOptions.walking_speed}
></Slider>
<p class="text-sm text-end">
{formatSpeed(
options.pedestrianOptions.walking_speed! / 3.6,
)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("use-hills")}</p>
<Slider
minValue={0}
maxValue={1}
step={0.1}
bind:currentValue={options.pedestrianOptions!.use_hills}
></Slider>
<p class="text-sm text-end">
{options.pedestrianOptions.use_hills?.toFixed(2)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("max-hiking-difficulty")}</p>
<Slider
minValue={0}
maxValue={6}
step={1}
bind:currentValue={
options.pedestrianOptions!.max_hiking_difficulty
}
></Slider>
<p class="text-sm text-end">
{options.pedestrianOptions.max_hiking_difficulty?.toFixed(
0,
)}
</p>
<hr class="border-input-border my-3" />
<Toggle
label={$_("shortest")}
bind:value={options.pedestrianOptions.shortest}
></Toggle>
{:else if options.modeOfTransport === "bicycle" && options.bicycleOptions}
<Select
items={bikeTypes}
label={$_("bike-type")}
onchange={(v) => adjustSpeeddependingOnBikeType(v)}
bind:value={options.bicycleOptions.bicycle_type}
></Select>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium pb-1">{$_("cycling-speed")}</p>
<Slider
minValue={5}
maxValue={50}
bind:currentValue={options.bicycleOptions.cycling_speed}
bind:this={cycleSpeedSlider}
></Slider>
<p class="text-sm text-end">
{formatSpeed(options.bicycleOptions.cycling_speed! / 3.6)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("use-hills")}</p>
<Slider
minValue={0}
maxValue={1}
step={0.05}
bind:currentValue={options.bicycleOptions.use_hills}
></Slider>
<p class="text-sm text-end">
{options.bicycleOptions.use_hills?.toFixed(2)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("use-roads")}</p>
<Slider
minValue={0}
maxValue={1}
step={0.05}
bind:currentValue={options.bicycleOptions.use_roads}
></Slider>
<p class="text-sm text-end">
{options.bicycleOptions.use_roads?.toFixed(2)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("avoid-bad-surfaces")}</p>
<Slider
minValue={0}
maxValue={1}
step={0.05}
bind:currentValue={
options.bicycleOptions.avoid_bad_surfaces
}
></Slider>
<p class="text-sm text-end">
{options.bicycleOptions.avoid_bad_surfaces?.toFixed(0)}
</p>
<hr class="border-input-border my-3" />
<Toggle
label={$_("shortest")}
bind:value={options.bicycleOptions.shortest}
></Toggle>
{:else if options.modeOfTransport === "auto" && options.autoOptions}
<p class="text-sm font-medium pb-1">{$_("fixed-speed")}</p>
<Slider
minValue={0}
maxValue={252}
step={1}
bind:currentValue={options.autoOptions.fixed_speed}
></Slider>
<p class="text-sm text-end">
{formatSpeed(options.autoOptions.fixed_speed! / 3.6)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("top-speed")}</p>
<Slider
minValue={10}
maxValue={252}
step={1}
bind:currentValue={options.autoOptions.top_speed}
></Slider>
<p class="text-sm text-end">
{formatSpeed(options.autoOptions.top_speed! / 3.6)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("width")}</p>
<Slider
minValue={1}
maxValue={10}
step={0.1}
bind:currentValue={options.autoOptions.width}
></Slider>
<p class="text-sm text-end">
{options.autoOptions.width?.toFixed(1)}
</p>
<hr class="border-input-border my-3" />
<p class="text-sm font-medium">{$_("height")}</p>
<Slider
minValue={1}
maxValue={10}
step={0.1}
bind:currentValue={options.autoOptions.height}
></Slider>
<p class="text-sm text-end">
{options.autoOptions.height?.toFixed(1)}
</p>
<hr class="border-input-border my-3" />
<Toggle
label={$_("shortest")}
bind:value={options.autoOptions.shortest}
></Toggle>
{/if}
</div>
{/if}
</div>

View File

@@ -23,10 +23,12 @@
"author": "Autor", "author": "Autor",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Durchschn. Geschwindigkeit", "average-speed": "Durchschn. Geschwindigkeit",
"avoid-bad-surfaces": "",
"back": "Zurück", "back": "Zurück",
"back-to-login": "Zurück zum Login", "back-to-login": "Zurück zum Login",
"basic-info": "Basisinformation", "basic-info": "Basisinformation",
"before": "Vor", "before": "Vor",
"bike-type": "",
"by": "von", "by": "von",
"can": "kann", "can": "kann",
"cancel": "Abbrechen", "cancel": "Abbrechen",
@@ -55,8 +57,10 @@
"create-new-list": "Neue Liste erstellen", "create-new-list": "Neue Liste erstellen",
"create-waypoint": "Wegpunkt erstellen", "create-waypoint": "Wegpunkt erstellen",
"creation-date": "Erstellungsdatum", "creation-date": "Erstellungsdatum",
"cross": "",
"current-password": "Aktuelles Passwort", "current-password": "Aktuelles Passwort",
"cycling": "Radfahren", "cycling": "Radfahren",
"cycling-speed": "",
"danger-zone": "Gefahrenzone", "danger-zone": "Gefahrenzone",
"date": "Datum", "date": "Datum",
"default-category": "Standard Kategorie", "default-category": "Standard Kategorie",
@@ -95,6 +99,7 @@
"empty-activities": "{username} hat noch keine Aktivitäten", "empty-activities": "{username} hat noch keine Aktivitäten",
"empty-bio": "{username} hat noch keine Biographie hinzugefügt", "empty-bio": "{username} hat noch keine Biographie hinzugefügt",
"empty-lists": "{username} hat keine öffentlichen Listen", "empty-lists": "{username} hat keine öffentlichen Listen",
"enable-auto-routing": "Enable auto-routing",
"english": "Englisch", "english": "Englisch",
"entry": "Eintrag", "entry": "Eintrag",
"error-creating-user": "Fehler beim Erstellen des Nutzers", "error-creating-user": "Fehler beim Erstellen des Nutzers",
@@ -124,6 +129,7 @@
"filter-difficulty": "Schwierigkeit filtern", "filter-difficulty": "Schwierigkeit filtern",
"filter-tags": "Tags filtern", "filter-tags": "Tags filtern",
"finish": "Ziel", "finish": "Ziel",
"fixed-speed": "",
"focus-map-on": "Karte fokussieren auf", "focus-map-on": "Karte fokussieren auf",
"follow": "Folgen", "follow": "Folgen",
"followers": "Follower", "followers": "Follower",
@@ -135,6 +141,7 @@
"german": "Deutsch", "german": "Deutsch",
"get-position-from-exif": "Koordinaten aus EXIF Daten", "get-position-from-exif": "Koordinaten aus EXIF Daten",
"grid": "Gitter", "grid": "Gitter",
"height": "",
"help": "Hilfe", "help": "Hilfe",
"hero_section_0_text": "Entdecke spannende Routen, speichere deine Favoriten und erlebe die Schönheit der Natur. Finde dein nächstes Abenteuer!", "hero_section_0_text": "Entdecke spannende Routen, speichere deine Favoriten und erlebe die Schönheit der Natur. Finde dein nächstes Abenteuer!",
"hero_section_1_heading": "Hier gibt es noch keine Routen.", "hero_section_1_heading": "Hier gibt es noch keine Routen.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Wusstest du schon? Du kannst nicht nur deine Routen speichern. Es gibt viele Kategorien für alle deine Abenteuer.", "hero_section_2_text": "Wusstest du schon? Du kannst nicht nur deine Routen speichern. Es gibt viele Kategorien für alle deine Abenteuer.",
"hiking": "Wandern", "hiking": "Wandern",
"hungarian": "Ungarisch", "hungarian": "Ungarisch",
"hybrid": "",
"icon": "Icon", "icon": "Icon",
"imperial": "Amerikanisch", "imperial": "Amerikanisch",
"import": "Importieren", "import": "Importieren",
@@ -176,8 +184,10 @@
"make-one": "Neues erstellen!", "make-one": "Neues erstellen!",
"make-thumbnail": "Thumbnail festlegen", "make-thumbnail": "Thumbnail festlegen",
"map": "Karte", "map": "Karte",
"max-hiking-difficulty": "",
"metric": "Metrisch", "metric": "Metrisch",
"moderate": "Mittel", "moderate": "Mittel",
"mountain": "",
"must-be-at-least-n-characters-long": "Muss mindestens {n} Zeichen lang sein", "must-be-at-least-n-characters-long": "Muss mindestens {n} Zeichen lang sein",
"must-be-at-most-n-characters-long": "Darf höchstens {n} Zeichen lang sein", "must-be-at-most-n-characters-long": "Darf höchstens {n} Zeichen lang sein",
"my-account": "Mein Konto", "my-account": "Mein Konto",
@@ -244,6 +254,7 @@
"removed-trail-from": "Route entfernt aus", "removed-trail-from": "Route entfernt aus",
"required": "Pflichtfeld", "required": "Pflichtfeld",
"reset-password": "Passwort zurücksetzen", "reset-password": "Passwort zurücksetzen",
"road": "",
"route": "{n, plural, =1 {Route} other {Routen}}", "route": "{n, plural, =1 {Route} other {Routen}}",
"route-point": "Routenpunkt", "route-point": "Routenpunkt",
"save": "Speichern", "save": "Speichern",
@@ -276,6 +287,7 @@
"shared": "Geteilt", "shared": "Geteilt",
"shared-by": "Geteilt von", "shared-by": "Geteilt von",
"shared-with": "Geteilt mit", "shared-with": "Geteilt mit",
"shortest": "Shortest",
"show-in-overview": "In der Übersicht anzeigen", "show-in-overview": "In der Übersicht anzeigen",
"show-on-map": "Auf der Karte anzeigen", "show-on-map": "Auf der Karte anzeigen",
"slogan": "Speichere deine Abenteuer!", "slogan": "Speichere deine Abenteuer!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Text", "text": "Text",
"tilesets": "Tilesets", "tilesets": "Tilesets",
"top-speed": "",
"trail": "{n, plural, =1 {Route} other {Routen}}", "trail": "{n, plural, =1 {Route} other {Routen}}",
"trail-not-shared": "Route mit niemandem geteilt", "trail-not-shared": "Route mit niemandem geteilt",
"trail-saved-successfully": "Route gespeichert", "trail-saved-successfully": "Route gespeichert",
@@ -303,10 +316,14 @@
"upload-gpx": "GPX hochladen", "upload-gpx": "GPX hochladen",
"upload-new-file": "Neue Datei hochladen", "upload-new-file": "Neue Datei hochladen",
"uploaded": "hochgeladen", "uploaded": "hochgeladen",
"use-hills": "Use Hills",
"use-roads": "",
"username": "Nutzername", "username": "Nutzername",
"view": "Ansehen", "view": "Ansehen",
"walking-speed": "Walking Speed",
"waypoints": "{n, plural, =1 {Wegpunkt} other {Wegpunkte}}", "waypoints": "{n, plural, =1 {Wegpunkt} other {Wegpunkte}}",
"welcome_to": "Willkommen bei", "welcome_to": "Willkommen bei",
"width": "",
"wrong-username-or-password": "Falscher Nutzername oder falsches Passwort", "wrong-username-or-password": "Falscher Nutzername oder falsches Passwort",
"you-can": "Du kannst" "you-can": "Du kannst"
} }

View File

@@ -23,10 +23,12 @@
"author": "Author", "author": "Author",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Avg. Speed", "average-speed": "Avg. Speed",
"avoid-bad-surfaces": "Avoid Bad Surfaces",
"back": "Back", "back": "Back",
"back-to-login": "Back to Login", "back-to-login": "Back to Login",
"basic-info": "Basic Info", "basic-info": "Basic Info",
"before": "Before", "before": "Before",
"bike-type": "Bike Type",
"by": "by", "by": "by",
"can": "can", "can": "can",
"cancel": "Cancel", "cancel": "Cancel",
@@ -55,8 +57,10 @@
"create-new-list": "Create new list", "create-new-list": "Create new list",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Creation date", "creation-date": "Creation date",
"cross": "Cross",
"current-password": "Current password", "current-password": "Current password",
"cycling": "Cycling", "cycling": "Cycling",
"cycling-speed": "Cycling Speed",
"danger-zone": "Danger zone", "danger-zone": "Danger zone",
"date": "Date", "date": "Date",
"default-category": "Default category", "default-category": "Default category",
@@ -95,6 +99,7 @@
"empty-activities": "{username} has no activity yet", "empty-activities": "{username} has no activity yet",
"empty-bio": "{username} has not added a bio yet", "empty-bio": "{username} has not added a bio yet",
"empty-lists": "{username} has no public lists", "empty-lists": "{username} has no public lists",
"enable-auto-routing": "",
"english": "English", "english": "English",
"entry": "Entry", "entry": "Entry",
"error-creating-user": "Error creating user", "error-creating-user": "Error creating user",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filter difficulty", "filter-difficulty": "Filter difficulty",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "Fixed Speed",
"focus-map-on": "Focus map on", "focus-map-on": "Focus map on",
"follow": "Follow", "follow": "Follow",
"followers": "Followers", "followers": "Followers",
@@ -135,6 +141,7 @@
"german": "German", "german": "German",
"get-position-from-exif": "Get coordinates from EXIF data", "get-position-from-exif": "Get coordinates from EXIF data",
"grid": "Grid", "grid": "Grid",
"height": "Height",
"help": "Help", "help": "Help",
"hero_section_0_text": "Explore exciting trails, save your favorites, and experience the beauty of nature. Find your next adventure!", "hero_section_0_text": "Explore exciting trails, save your favorites, and experience the beauty of nature. Find your next adventure!",
"hero_section_1_heading": "It seems there are no trails here yet.", "hero_section_1_heading": "It seems there are no trails here yet.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Did you know? You cannot only save you hiking trails. There are many categories for all your adventures.", "hero_section_2_text": "Did you know? You cannot only save you hiking trails. There are many categories for all your adventures.",
"hiking": "Hiking", "hiking": "Hiking",
"hungarian": "Hungarian", "hungarian": "Hungarian",
"hybrid": "Hybrid",
"icon": "Icon", "icon": "Icon",
"imperial": "Imperial", "imperial": "Imperial",
"import": "Import", "import": "Import",
@@ -176,8 +184,10 @@
"make-one": "Make one!", "make-one": "Make one!",
"make-thumbnail": "Make thumbnail", "make-thumbnail": "Make thumbnail",
"map": "Map", "map": "Map",
"max-hiking-difficulty": "Max. Hiking Difficulty",
"metric": "Metric", "metric": "Metric",
"moderate": "Moderate", "moderate": "Moderate",
"mountain": "Mountain",
"must-be-at-least-n-characters-long": "Must be at least {n} characters long", "must-be-at-least-n-characters-long": "Must be at least {n} characters long",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "My Account", "my-account": "My Account",
@@ -244,6 +254,7 @@
"removed-trail-from": "Removed trail from", "removed-trail-from": "Removed trail from",
"required": "Required", "required": "Required",
"reset-password": "Reset Password", "reset-password": "Reset Password",
"road": "Road",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Save", "save": "Save",
@@ -276,6 +287,7 @@
"shared": "Shared", "shared": "Shared",
"shared-by": "Shared by", "shared-by": "Shared by",
"shared-with": "Shared with", "shared-with": "Shared with",
"shortest": "",
"show-in-overview": "Show in overview", "show-in-overview": "Show in overview",
"show-on-map": "Show on map", "show-on-map": "Show on map",
"slogan": "Save your adventures!", "slogan": "Save your adventures!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Text", "text": "Text",
"tilesets": "Custom tilesets", "tilesets": "Custom tilesets",
"top-speed": "Top Speed",
"trail": "{n, plural, =1 {Trail} other {Trails}}", "trail": "{n, plural, =1 {Trail} other {Trails}}",
"trail-not-shared": "Not shared with anyone", "trail-not-shared": "Not shared with anyone",
"trail-saved-successfully": "Trail saved successfully", "trail-saved-successfully": "Trail saved successfully",
@@ -303,10 +316,14 @@
"upload-gpx": "Upload GPX", "upload-gpx": "Upload GPX",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "uploaded", "uploaded": "uploaded",
"use-hills": "",
"use-roads": "Use Roads",
"username": "Username", "username": "Username",
"view": "View", "view": "View",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}", "waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}",
"welcome_to": "Welcome to", "welcome_to": "Welcome to",
"width": "Width",
"wrong-username-or-password": "Wrong username or password", "wrong-username-or-password": "Wrong username or password",
"you-can": "You can" "you-can": "You can"
} }

View File

@@ -23,10 +23,12 @@
"author": "Autor", "author": "Autor",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Vel. Promedio", "average-speed": "Vel. Promedio",
"avoid-bad-surfaces": "",
"back": "Atrás", "back": "Atrás",
"back-to-login": "Atrás al acceso", "back-to-login": "Atrás al acceso",
"basic-info": "Información básica", "basic-info": "Información básica",
"before": "Antes", "before": "Antes",
"bike-type": "",
"by": "de", "by": "de",
"can": "puede", "can": "puede",
"cancel": "Borrar", "cancel": "Borrar",
@@ -55,8 +57,10 @@
"create-new-list": "Crear una nueva lista", "create-new-list": "Crear una nueva lista",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Fecha de creación", "creation-date": "Fecha de creación",
"cross": "",
"current-password": "Contraseña actual", "current-password": "Contraseña actual",
"cycling": "Ciclismo", "cycling": "Ciclismo",
"cycling-speed": "",
"danger-zone": "Zona peligrosa", "danger-zone": "Zona peligrosa",
"date": "Fecha", "date": "Fecha",
"default-category": "Categoría predefinida", "default-category": "Categoría predefinida",
@@ -95,6 +99,7 @@
"empty-activities": "{username} todavía no tiene actividad", "empty-activities": "{username} todavía no tiene actividad",
"empty-bio": "{username} no ha añadido ninguna Bio todavía", "empty-bio": "{username} no ha añadido ninguna Bio todavía",
"empty-lists": "{username} no tiene listas públicas", "empty-lists": "{username} no tiene listas públicas",
"enable-auto-routing": "",
"english": "Inglés", "english": "Inglés",
"entry": "Entrada", "entry": "Entrada",
"error-creating-user": "Error creando el usuario", "error-creating-user": "Error creando el usuario",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filtrar dificultad", "filter-difficulty": "Filtrar dificultad",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "Centrar mapa sobre", "focus-map-on": "Centrar mapa sobre",
"follow": "Seguir", "follow": "Seguir",
"followers": "Seguidores", "followers": "Seguidores",
@@ -135,6 +141,7 @@
"german": "Alemán", "german": "Alemán",
"get-position-from-exif": "Obtener las coordenadas de los datos EXIF", "get-position-from-exif": "Obtener las coordenadas de los datos EXIF",
"grid": "Cuadricula", "grid": "Cuadricula",
"height": "",
"help": "Ayuda", "help": "Ayuda",
"hero_section_0_text": "Explorar rutas emocionantes, guarda tus favoritas y disfruta de la belleza de la natura. ¡Encuentra tu próxima aventura!", "hero_section_0_text": "Explorar rutas emocionantes, guarda tus favoritas y disfruta de la belleza de la natura. ¡Encuentra tu próxima aventura!",
"hero_section_1_heading": "Parece que todavía no hay rutas.", "hero_section_1_heading": "Parece que todavía no hay rutas.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "¿Lo sabías? No solo puedes guardar tus rutas de senderismo. Hay muchas categorías para todas tus aventuras.", "hero_section_2_text": "¿Lo sabías? No solo puedes guardar tus rutas de senderismo. Hay muchas categorías para todas tus aventuras.",
"hiking": "Senderismo", "hiking": "Senderismo",
"hungarian": "Húngaro", "hungarian": "Húngaro",
"hybrid": "",
"icon": "Icono", "icon": "Icono",
"imperial": "Imperial", "imperial": "Imperial",
"import": "Importar", "import": "Importar",
@@ -176,8 +184,10 @@
"make-one": "¡Crea uno!", "make-one": "¡Crea uno!",
"make-thumbnail": "Generar miniaturas", "make-thumbnail": "Generar miniaturas",
"map": "Mapa", "map": "Mapa",
"max-hiking-difficulty": "",
"metric": "Métrica", "metric": "Métrica",
"moderate": "Medio", "moderate": "Medio",
"mountain": "",
"must-be-at-least-n-characters-long": "Tiene que tener por lo menos {n} caracteres", "must-be-at-least-n-characters-long": "Tiene que tener por lo menos {n} caracteres",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "Mi cuenta", "my-account": "Mi cuenta",
@@ -244,6 +254,7 @@
"removed-trail-from": "Ruta borrada de", "removed-trail-from": "Ruta borrada de",
"required": "Obligatorio", "required": "Obligatorio",
"reset-password": "Restablecer Contraseña", "reset-password": "Restablecer Contraseña",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Guardar", "save": "Guardar",
@@ -276,6 +287,7 @@
"shared": "Compartido", "shared": "Compartido",
"shared-by": "Compartido por", "shared-by": "Compartido por",
"shared-with": "Compartido con", "shared-with": "Compartido con",
"shortest": "",
"show-in-overview": "Mostrar en la panorámica", "show-in-overview": "Mostrar en la panorámica",
"show-on-map": "Mostrar en mapa", "show-on-map": "Mostrar en mapa",
"slogan": "¡Guarda tus aventuras!", "slogan": "¡Guarda tus aventuras!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Texto", "text": "Texto",
"tilesets": "Ficha personalizada", "tilesets": "Ficha personalizada",
"top-speed": "",
"trail": "{n, plural, one {}=1 {Ruta} other {Rutas}}", "trail": "{n, plural, one {}=1 {Ruta} other {Rutas}}",
"trail-not-shared": "No compartida con nadie", "trail-not-shared": "No compartida con nadie",
"trail-saved-successfully": "Ruta guardada con éxito", "trail-saved-successfully": "Ruta guardada con éxito",
@@ -303,10 +316,14 @@
"upload-gpx": "Cargar GPX", "upload-gpx": "Cargar GPX",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "cargado", "uploaded": "cargado",
"use-hills": "",
"use-roads": "",
"username": "Nombre de usuario", "username": "Nombre de usuario",
"view": "Ver", "view": "Ver",
"walking-speed": "",
"waypoints": "{n, plural, one {}=1 {Punto de Interés} other {Puntos de Interés}}", "waypoints": "{n, plural, one {}=1 {Punto de Interés} other {Puntos de Interés}}",
"welcome_to": "Bienvenid@ a", "welcome_to": "Bienvenid@ a",
"width": "",
"wrong-username-or-password": "Usuario o contraseña no correctas", "wrong-username-or-password": "Usuario o contraseña no correctas",
"you-can": "Puedes" "you-can": "Puedes"
} }

View File

@@ -23,10 +23,12 @@
"author": "Auteur", "author": "Auteur",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Vitesse Moy.", "average-speed": "Vitesse Moy.",
"avoid-bad-surfaces": "",
"back": "Retour", "back": "Retour",
"back-to-login": "Retour à la page de connexion", "back-to-login": "Retour à la page de connexion",
"basic-info": "Informations de base", "basic-info": "Informations de base",
"before": "Avant le", "before": "Avant le",
"bike-type": "",
"by": "par", "by": "par",
"can": "peut", "can": "peut",
"cancel": "Annuler", "cancel": "Annuler",
@@ -55,8 +57,10 @@
"create-new-list": "Créer une nouvelle liste", "create-new-list": "Créer une nouvelle liste",
"create-waypoint": "Créer un point de passage", "create-waypoint": "Créer un point de passage",
"creation-date": "Date de création", "creation-date": "Date de création",
"cross": "",
"current-password": "Mot de passe actuel", "current-password": "Mot de passe actuel",
"cycling": "Vélo", "cycling": "Vélo",
"cycling-speed": "",
"danger-zone": "Zone de danger", "danger-zone": "Zone de danger",
"date": "Date", "date": "Date",
"default-category": "Catégorie par défaut", "default-category": "Catégorie par défaut",
@@ -95,6 +99,7 @@
"empty-activities": "{username} n'a encore aucune activité", "empty-activities": "{username} n'a encore aucune activité",
"empty-bio": "{username} n'a pas encore de description", "empty-bio": "{username} n'a pas encore de description",
"empty-lists": "{username} n'a pas de liste publique", "empty-lists": "{username} n'a pas de liste publique",
"enable-auto-routing": "",
"english": "Anglais", "english": "Anglais",
"entry": "Entrée", "entry": "Entrée",
"error-creating-user": "Erreur durant la création de l'utilisateur", "error-creating-user": "Erreur durant la création de l'utilisateur",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filtrer par difficulté", "filter-difficulty": "Filtrer par difficulté",
"filter-tags": "Filtrer par étiquettes", "filter-tags": "Filtrer par étiquettes",
"finish": "Arrivée", "finish": "Arrivée",
"fixed-speed": "",
"focus-map-on": "Centrer la carte sur", "focus-map-on": "Centrer la carte sur",
"follow": "Suivre", "follow": "Suivre",
"followers": "Abonné(e)s", "followers": "Abonné(e)s",
@@ -135,6 +141,7 @@
"german": "Allemand", "german": "Allemand",
"get-position-from-exif": "Obtenir les coordonnées à partir des données EXIF", "get-position-from-exif": "Obtenir les coordonnées à partir des données EXIF",
"grid": "Grille", "grid": "Grille",
"height": "",
"help": "Aide", "help": "Aide",
"hero_section_0_text": "Explorez des itinéraires passionnants, sauvegardez vos favoris et découvrez la beauté de la nature. Trouvez votre prochaine aventure !", "hero_section_0_text": "Explorez des itinéraires passionnants, sauvegardez vos favoris et découvrez la beauté de la nature. Trouvez votre prochaine aventure !",
"hero_section_1_heading": "Il semble qu'il n'y ait pas encore d'itinéraire ici.", "hero_section_1_heading": "Il semble qu'il n'y ait pas encore d'itinéraire ici.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Saviez-vous que vous pouvez sauvegarder plus que vos randonnées ? De nombreuses catégories sont disponibles pour toutes vos aventures.", "hero_section_2_text": "Saviez-vous que vous pouvez sauvegarder plus que vos randonnées ? De nombreuses catégories sont disponibles pour toutes vos aventures.",
"hiking": "Randonnée", "hiking": "Randonnée",
"hungarian": "Hongrois", "hungarian": "Hongrois",
"hybrid": "",
"icon": "Icône", "icon": "Icône",
"imperial": "Impérial", "imperial": "Impérial",
"import": "Importer", "import": "Importer",
@@ -176,8 +184,10 @@
"make-one": "Faites-en un !", "make-one": "Faites-en un !",
"make-thumbnail": "Créer une miniature", "make-thumbnail": "Créer une miniature",
"map": "Carte", "map": "Carte",
"max-hiking-difficulty": "",
"metric": "Métrique", "metric": "Métrique",
"moderate": "Moyenne", "moderate": "Moyenne",
"mountain": "",
"must-be-at-least-n-characters-long": "Doit être composé d'au moins {n} caractères", "must-be-at-least-n-characters-long": "Doit être composé d'au moins {n} caractères",
"must-be-at-most-n-characters-long": "Doit être au maximum de {n} caractères", "must-be-at-most-n-characters-long": "Doit être au maximum de {n} caractères",
"my-account": "Mon profil", "my-account": "Mon profil",
@@ -244,6 +254,7 @@
"removed-trail-from": "Enlever l'itinéraire de", "removed-trail-from": "Enlever l'itinéraire de",
"required": "Requis", "required": "Requis",
"reset-password": "Réinitialiser le mot de passe", "reset-password": "Réinitialiser le mot de passe",
"road": "",
"route": "{n, plural, =1 {Itinéraire} other {Itinéraires}}", "route": "{n, plural, =1 {Itinéraire} other {Itinéraires}}",
"route-point": "Étape", "route-point": "Étape",
"save": "Sauvegarder", "save": "Sauvegarder",
@@ -276,6 +287,7 @@
"shared": "Partagé", "shared": "Partagé",
"shared-by": "Partagé par", "shared-by": "Partagé par",
"shared-with": "Partagé avec", "shared-with": "Partagé avec",
"shortest": "",
"show-in-overview": "Voir dans l'aperçu", "show-in-overview": "Voir dans l'aperçu",
"show-on-map": "Voir sur la carte", "show-on-map": "Voir sur la carte",
"slogan": "Sauvegarder vos aventures !", "slogan": "Sauvegarder vos aventures !",
@@ -293,6 +305,7 @@
"tags": "Étiquettes", "tags": "Étiquettes",
"text": "Texte", "text": "Texte",
"tilesets": "Tuiles personnalisés", "tilesets": "Tuiles personnalisés",
"top-speed": "",
"trail": "{n, plural, =1 {Itinéraire} other {Itinéraires}}", "trail": "{n, plural, =1 {Itinéraire} other {Itinéraires}}",
"trail-not-shared": "L'itinéraire n'a pas été partagé", "trail-not-shared": "L'itinéraire n'a pas été partagé",
"trail-saved-successfully": "Itinéraire enregistrée", "trail-saved-successfully": "Itinéraire enregistrée",
@@ -303,10 +316,14 @@
"upload-gpx": "Envoyer un GPX", "upload-gpx": "Envoyer un GPX",
"upload-new-file": "Importer un fichier", "upload-new-file": "Importer un fichier",
"uploaded": "importé", "uploaded": "importé",
"use-hills": "",
"use-roads": "",
"username": "Nom d'utilisateur", "username": "Nom d'utilisateur",
"view": "Afficher", "view": "Afficher",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Point de passage} other {Points de passage}}", "waypoints": "{n, plural, =1 {Point de passage} other {Points de passage}}",
"welcome_to": "Bienvenue sur", "welcome_to": "Bienvenue sur",
"width": "",
"wrong-username-or-password": "Nom d'utilisateur ou mot de passe incorrect", "wrong-username-or-password": "Nom d'utilisateur ou mot de passe incorrect",
"you-can": "Vous pouvez" "you-can": "Vous pouvez"
} }

View File

@@ -23,10 +23,12 @@
"author": "Author", "author": "Author",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Avg. Speed", "average-speed": "Avg. Speed",
"avoid-bad-surfaces": "",
"back": "Back", "back": "Back",
"back-to-login": "Back to Login", "back-to-login": "Back to Login",
"basic-info": "Alap információk", "basic-info": "Alap információk",
"before": "Before", "before": "Before",
"bike-type": "",
"by": "by", "by": "by",
"can": "can", "can": "can",
"cancel": "Mégsem", "cancel": "Mégsem",
@@ -55,8 +57,10 @@
"create-new-list": "Új lista létrehozása", "create-new-list": "Új lista létrehozása",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "létrehozás dátuma", "creation-date": "létrehozás dátuma",
"cross": "",
"current-password": "Current password", "current-password": "Current password",
"cycling": "Cycling", "cycling": "Cycling",
"cycling-speed": "",
"danger-zone": "Veszélyes zóna", "danger-zone": "Veszélyes zóna",
"date": "Dátum", "date": "Dátum",
"default-category": "Default category", "default-category": "Default category",
@@ -95,6 +99,7 @@
"empty-activities": "{username} has no activity yet", "empty-activities": "{username} has no activity yet",
"empty-bio": "{username} has not added a bio yet", "empty-bio": "{username} has not added a bio yet",
"empty-lists": "{username} has no public lists", "empty-lists": "{username} has no public lists",
"enable-auto-routing": "",
"english": "Angol", "english": "Angol",
"entry": "Bejegyzés", "entry": "Bejegyzés",
"error-creating-user": "Hiba felhasználó hozzáadása közben", "error-creating-user": "Hiba felhasználó hozzáadása közben",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filter difficulty", "filter-difficulty": "Filter difficulty",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "Focus map on", "focus-map-on": "Focus map on",
"follow": "Follow", "follow": "Follow",
"followers": "Followers", "followers": "Followers",
@@ -135,6 +141,7 @@
"german": "Német", "german": "Német",
"get-position-from-exif": "Get coordinates from EXIF data", "get-position-from-exif": "Get coordinates from EXIF data",
"grid": "Grid", "grid": "Grid",
"height": "",
"help": "Help", "help": "Help",
"hero_section_0_text": "Fedezze fel az izgalmas útvonalakat, mentse el kedvenceit, és tapasztalja meg a természet szépségét. Találja meg a következő kalandját!", "hero_section_0_text": "Fedezze fel az izgalmas útvonalakat, mentse el kedvenceit, és tapasztalja meg a természet szépségét. Találja meg a következő kalandját!",
"hero_section_1_heading": "Úgy tűnik, itt még nincsenek ösvények.", "hero_section_1_heading": "Úgy tűnik, itt még nincsenek ösvények.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Tudta? Nem csak a túraútvonalakat mentheti el. Számos kategória létezik minden kalandodhoz.", "hero_section_2_text": "Tudta? Nem csak a túraútvonalakat mentheti el. Számos kategória létezik minden kalandodhoz.",
"hiking": "Hiking", "hiking": "Hiking",
"hungarian": "Magyar", "hungarian": "Magyar",
"hybrid": "",
"icon": "Ikon", "icon": "Ikon",
"imperial": "Angolszász", "imperial": "Angolszász",
"import": "Import", "import": "Import",
@@ -176,8 +184,10 @@
"make-one": "Készítsen egyet!", "make-one": "Készítsen egyet!",
"make-thumbnail": "Készítsen miniatűrképet", "make-thumbnail": "Készítsen miniatűrképet",
"map": "Térkép", "map": "Térkép",
"max-hiking-difficulty": "",
"metric": "Metrikus", "metric": "Metrikus",
"moderate": "Mérsékelt", "moderate": "Mérsékelt",
"mountain": "",
"must-be-at-least-n-characters-long": "Legalább {n} karakter hosszúnak kell lennie", "must-be-at-least-n-characters-long": "Legalább {n} karakter hosszúnak kell lennie",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "My Account", "my-account": "My Account",
@@ -244,6 +254,7 @@
"removed-trail-from": "Eltávolított nyomvonal a", "removed-trail-from": "Eltávolított nyomvonal a",
"required": "Kötelező", "required": "Kötelező",
"reset-password": "Reset Password", "reset-password": "Reset Password",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Mentés", "save": "Mentés",
@@ -276,6 +287,7 @@
"shared": "Shared", "shared": "Shared",
"shared-by": "Shared by", "shared-by": "Shared by",
"shared-with": "Shared with", "shared-with": "Shared with",
"shortest": "",
"show-in-overview": "Áttekintés", "show-in-overview": "Áttekintés",
"show-on-map": "Mutatás térképen", "show-on-map": "Mutatás térképen",
"slogan": "Mentse el a kalandjait!", "slogan": "Mentse el a kalandjait!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Szöveg", "text": "Szöveg",
"tilesets": "Custom tilesets", "tilesets": "Custom tilesets",
"top-speed": "",
"trail": "{n, plural, =1 {Útvonal} other {Útvonalak}}", "trail": "{n, plural, =1 {Útvonal} other {Útvonalak}}",
"trail-not-shared": "Not shared with anyone", "trail-not-shared": "Not shared with anyone",
"trail-saved-successfully": "Trail saved successfully", "trail-saved-successfully": "Trail saved successfully",
@@ -303,10 +316,14 @@
"upload-gpx": "GPX feltöltése", "upload-gpx": "GPX feltöltése",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "uploaded", "uploaded": "uploaded",
"use-hills": "",
"use-roads": "",
"username": "Felhasználónév", "username": "Felhasználónév",
"view": "View", "view": "View",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}", "waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}",
"welcome_to": "Üdvözöljük a", "welcome_to": "Üdvözöljük a",
"width": "",
"wrong-username-or-password": "Helytelen felhasználónév vagy jelszó", "wrong-username-or-password": "Helytelen felhasználónév vagy jelszó",
"you-can": "You can" "you-can": "You can"
} }

View File

@@ -23,10 +23,12 @@
"author": "Autore", "author": "Autore",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Vel. Media", "average-speed": "Vel. Media",
"avoid-bad-surfaces": "",
"back": "Indietro", "back": "Indietro",
"back-to-login": "Indietro al Login", "back-to-login": "Indietro al Login",
"basic-info": "Informazioni di base", "basic-info": "Informazioni di base",
"before": "Prima", "before": "Prima",
"bike-type": "",
"by": "di", "by": "di",
"can": "può", "can": "può",
"cancel": "Annulla", "cancel": "Annulla",
@@ -55,8 +57,10 @@
"create-new-list": "Crea nuova lista", "create-new-list": "Crea nuova lista",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Data di creazione", "creation-date": "Data di creazione",
"cross": "",
"current-password": "Password attuale", "current-password": "Password attuale",
"cycling": "Ciclismo", "cycling": "Ciclismo",
"cycling-speed": "",
"danger-zone": "Zona di pericolo", "danger-zone": "Zona di pericolo",
"date": "Data", "date": "Data",
"default-category": "Categoria predefinita", "default-category": "Categoria predefinita",
@@ -95,6 +99,7 @@
"empty-activities": "{username} non ha ancora attività", "empty-activities": "{username} non ha ancora attività",
"empty-bio": "{username} non ha ancora aggiunto una biografia", "empty-bio": "{username} non ha ancora aggiunto una biografia",
"empty-lists": "{username} non ha liste pubbliche", "empty-lists": "{username} non ha liste pubbliche",
"enable-auto-routing": "",
"english": "Inglese", "english": "Inglese",
"entry": "Voce", "entry": "Voce",
"error-creating-user": "Errore nella creazione dell'utente", "error-creating-user": "Errore nella creazione dell'utente",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filtrare difficoltà", "filter-difficulty": "Filtrare difficoltà",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "Focus sulla mappa", "focus-map-on": "Focus sulla mappa",
"follow": "Seguire", "follow": "Seguire",
"followers": "Seguaci", "followers": "Seguaci",
@@ -135,6 +141,7 @@
"german": "Tedesco", "german": "Tedesco",
"get-position-from-exif": "Ottieni posizione da dati EXIF", "get-position-from-exif": "Ottieni posizione da dati EXIF",
"grid": "Griglia", "grid": "Griglia",
"height": "",
"help": "Aiuto", "help": "Aiuto",
"hero_section_0_text": "Scopri percorsi emozionanti, salva i tuoi preferiti e vivi la bellezza della natura. Trova la tua prossima avventura!", "hero_section_0_text": "Scopri percorsi emozionanti, salva i tuoi preferiti e vivi la bellezza della natura. Trova la tua prossima avventura!",
"hero_section_1_heading": "Non sembra esserci ancora un percorso qui.", "hero_section_1_heading": "Non sembra esserci ancora un percorso qui.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Lo sapevi? Non puoi salvare solo i tuoi percorsi. Ci sono molte categorie per tutte le tue avventure.", "hero_section_2_text": "Lo sapevi? Non puoi salvare solo i tuoi percorsi. Ci sono molte categorie per tutte le tue avventure.",
"hiking": "Escursionismo", "hiking": "Escursionismo",
"hungarian": "Ungherese", "hungarian": "Ungherese",
"hybrid": "",
"icon": "Icona", "icon": "Icona",
"imperial": "Imperiale", "imperial": "Imperiale",
"import": "Importa", "import": "Importa",
@@ -176,8 +184,10 @@
"make-one": "Creane uno!", "make-one": "Creane uno!",
"make-thumbnail": "Imposta miniatura", "make-thumbnail": "Imposta miniatura",
"map": "Mappa", "map": "Mappa",
"max-hiking-difficulty": "",
"metric": "Metrico", "metric": "Metrico",
"moderate": "Moderato", "moderate": "Moderato",
"mountain": "",
"must-be-at-least-n-characters-long": "Deve essere lungo almeno {n} caratteri", "must-be-at-least-n-characters-long": "Deve essere lungo almeno {n} caratteri",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "Il mio account", "my-account": "Il mio account",
@@ -244,6 +254,7 @@
"removed-trail-from": "Percorso rimosso da", "removed-trail-from": "Percorso rimosso da",
"required": "Obbligatorio", "required": "Obbligatorio",
"reset-password": "Ripristinare Password", "reset-password": "Ripristinare Password",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Salva", "save": "Salva",
@@ -276,6 +287,7 @@
"shared": "Condiviso", "shared": "Condiviso",
"shared-by": "Condiviso da", "shared-by": "Condiviso da",
"shared-with": "Condiviso con", "shared-with": "Condiviso con",
"shortest": "",
"show-in-overview": "Mostra nella panoramica", "show-in-overview": "Mostra nella panoramica",
"show-on-map": "Mostra sulla mappa", "show-on-map": "Mostra sulla mappa",
"slogan": "Salva le tue avventure!", "slogan": "Salva le tue avventure!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Testo", "text": "Testo",
"tilesets": "Riquadri personalizzati", "tilesets": "Riquadri personalizzati",
"top-speed": "",
"trail": "{n, plural, =1 {Percorso} other {Percorsi}}", "trail": "{n, plural, =1 {Percorso} other {Percorsi}}",
"trail-not-shared": "Percorso non condiviso con nessuno", "trail-not-shared": "Percorso non condiviso con nessuno",
"trail-saved-successfully": "Percorso salvato con successo", "trail-saved-successfully": "Percorso salvato con successo",
@@ -303,10 +316,14 @@
"upload-gpx": "Carica file GPX", "upload-gpx": "Carica file GPX",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "caricato", "uploaded": "caricato",
"use-hills": "",
"use-roads": "",
"username": "Nome utente", "username": "Nome utente",
"view": "Visualizza", "view": "Visualizza",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Punto di passaggio} other {Punti di passaggio}}", "waypoints": "{n, plural, =1 {Punto di passaggio} other {Punti di passaggio}}",
"welcome_to": "Benvenuti a", "welcome_to": "Benvenuti a",
"width": "",
"wrong-username-or-password": "Nome utente o password errati", "wrong-username-or-password": "Nome utente o password errati",
"you-can": "Puoi" "you-can": "Puoi"
} }

View File

@@ -23,10 +23,12 @@
"author": "Author", "author": "Author",
"avatar": "Profielfoto", "avatar": "Profielfoto",
"average-speed": "Avg. Speed", "average-speed": "Avg. Speed",
"avoid-bad-surfaces": "",
"back": "Back", "back": "Back",
"back-to-login": "Terug naar login", "back-to-login": "Terug naar login",
"basic-info": "Algemene informatie", "basic-info": "Algemene informatie",
"before": "Before", "before": "Before",
"bike-type": "",
"by": "by", "by": "by",
"can": "can", "can": "can",
"cancel": "Annuleren", "cancel": "Annuleren",
@@ -55,8 +57,10 @@
"create-new-list": "Nieuwe lijst", "create-new-list": "Nieuwe lijst",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Aanmaakdatum", "creation-date": "Aanmaakdatum",
"cross": "",
"current-password": "Huidig wachtwoord", "current-password": "Huidig wachtwoord",
"cycling": "Fietsen", "cycling": "Fietsen",
"cycling-speed": "",
"danger-zone": "Gevarenzone", "danger-zone": "Gevarenzone",
"date": "Datum", "date": "Datum",
"default-category": "Standaardcategorie", "default-category": "Standaardcategorie",
@@ -95,6 +99,7 @@
"empty-activities": "{username} has no activity yet", "empty-activities": "{username} has no activity yet",
"empty-bio": "{username} has not added a bio yet", "empty-bio": "{username} has not added a bio yet",
"empty-lists": "{username} has no public lists", "empty-lists": "{username} has no public lists",
"enable-auto-routing": "",
"english": "Engels", "english": "Engels",
"entry": "Item", "entry": "Item",
"error-creating-user": "Het account kan niet worden aangemaakt", "error-creating-user": "Het account kan niet worden aangemaakt",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filter difficulty", "filter-difficulty": "Filter difficulty",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "Focus map on", "focus-map-on": "Focus map on",
"follow": "Follow", "follow": "Follow",
"followers": "Followers", "followers": "Followers",
@@ -135,6 +141,7 @@
"german": "Duits", "german": "Duits",
"get-position-from-exif": "Get coordinates from EXIF data", "get-position-from-exif": "Get coordinates from EXIF data",
"grid": "Rooster", "grid": "Rooster",
"height": "",
"help": "Help", "help": "Help",
"hero_section_0_text": "Verken uitdagende wandelroutes, bewaar je favoriete en ervaar de pracht van de natuur. Op naar het volgende avontuur!", "hero_section_0_text": "Verken uitdagende wandelroutes, bewaar je favoriete en ervaar de pracht van de natuur. Op naar het volgende avontuur!",
"hero_section_1_heading": "Je hebt nog geen wandelroutes.", "hero_section_1_heading": "Je hebt nog geen wandelroutes.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Wist je dat…? Je kunt niet alleen wandelroutes opslaan: er zijn ook categorieën voor andere avonturen.", "hero_section_2_text": "Wist je dat…? Je kunt niet alleen wandelroutes opslaan: er zijn ook categorieën voor andere avonturen.",
"hiking": "Hiking", "hiking": "Hiking",
"hungarian": "Hongaars", "hungarian": "Hongaars",
"hybrid": "",
"icon": "Pictogram", "icon": "Pictogram",
"imperial": "Imperiaal", "imperial": "Imperiaal",
"import": "Import", "import": "Import",
@@ -176,8 +184,10 @@
"make-one": "Maak er een aan!", "make-one": "Maak er een aan!",
"make-thumbnail": "Miniatuur maken", "make-thumbnail": "Miniatuur maken",
"map": "Kaart", "map": "Kaart",
"max-hiking-difficulty": "",
"metric": "Metrisch", "metric": "Metrisch",
"moderate": "Gemiddeld", "moderate": "Gemiddeld",
"mountain": "",
"must-be-at-least-n-characters-long": "Minimaal {n} tekens", "must-be-at-least-n-characters-long": "Minimaal {n} tekens",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "My Account", "my-account": "My Account",
@@ -244,6 +254,7 @@
"removed-trail-from": "De wandelroute is verwijderd van", "removed-trail-from": "De wandelroute is verwijderd van",
"required": "Verplicht", "required": "Verplicht",
"reset-password": "Reset Password", "reset-password": "Reset Password",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Bewaren", "save": "Bewaren",
@@ -276,6 +287,7 @@
"shared": "Shared", "shared": "Shared",
"shared-by": "Shared by", "shared-by": "Shared by",
"shared-with": "Shared with", "shared-with": "Shared with",
"shortest": "",
"show-in-overview": "Tonen op overzicht", "show-in-overview": "Tonen op overzicht",
"show-on-map": "Tonen op kaart", "show-on-map": "Tonen op kaart",
"slogan": "Bewaar je avonturen!", "slogan": "Bewaar je avonturen!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Tekst", "text": "Tekst",
"tilesets": "Custom tilesets", "tilesets": "Custom tilesets",
"top-speed": "",
"trail": "{n, plural, =1 {Wandelroute} other {Wandelroutes}}", "trail": "{n, plural, =1 {Wandelroute} other {Wandelroutes}}",
"trail-not-shared": "Not shared with anyone", "trail-not-shared": "Not shared with anyone",
"trail-saved-successfully": "Trail saved successfully", "trail-saved-successfully": "Trail saved successfully",
@@ -303,10 +316,14 @@
"upload-gpx": "GPX-bestand uploaden", "upload-gpx": "GPX-bestand uploaden",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "uploaded", "uploaded": "uploaded",
"use-hills": "",
"use-roads": "",
"username": "Gebruikersnaam", "username": "Gebruikersnaam",
"view": "View", "view": "View",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}", "waypoints": "{n, plural, =1 {Waypoint} other {Waypoints}}",
"welcome_to": "Welkom bij", "welcome_to": "Welkom bij",
"width": "",
"wrong-username-or-password": "Onjuiste gebruikersnaam of wachtwoord", "wrong-username-or-password": "Onjuiste gebruikersnaam of wachtwoord",
"you-can": "You can" "you-can": "You can"
} }

View File

@@ -23,10 +23,12 @@
"author": "Autor", "author": "Autor",
"avatar": "Awatar", "avatar": "Awatar",
"average-speed": "Śr. prędkość", "average-speed": "Śr. prędkość",
"avoid-bad-surfaces": "",
"back": "Wstecz", "back": "Wstecz",
"back-to-login": "Powrót do logowania", "back-to-login": "Powrót do logowania",
"basic-info": "Podstawowe informacje", "basic-info": "Podstawowe informacje",
"before": "Przed", "before": "Przed",
"bike-type": "",
"by": "przez", "by": "przez",
"can": "może", "can": "może",
"cancel": "Anuluj", "cancel": "Anuluj",
@@ -55,8 +57,10 @@
"create-new-list": "Stwórz nową listę", "create-new-list": "Stwórz nową listę",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Data dodania", "creation-date": "Data dodania",
"cross": "",
"current-password": "Obecne hasło", "current-password": "Obecne hasło",
"cycling": "Rower", "cycling": "Rower",
"cycling-speed": "",
"danger-zone": "Strefa niebezpieczna", "danger-zone": "Strefa niebezpieczna",
"date": "Data", "date": "Data",
"default-category": "Domyślna kategoria", "default-category": "Domyślna kategoria",
@@ -95,6 +99,7 @@
"empty-activities": "{username} nie ma jeszcze aktywności", "empty-activities": "{username} nie ma jeszcze aktywności",
"empty-bio": "{username} jeszcze nie dodał biogramu", "empty-bio": "{username} jeszcze nie dodał biogramu",
"empty-lists": "{username} nie ma publicznych list", "empty-lists": "{username} nie ma publicznych list",
"enable-auto-routing": "",
"english": "Angielski", "english": "Angielski",
"entry": "Pozycja", "entry": "Pozycja",
"error-creating-user": "Błąd tworzenia użytkownika", "error-creating-user": "Błąd tworzenia użytkownika",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filtruj poziom trudności", "filter-difficulty": "Filtruj poziom trudności",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Zakończ", "finish": "Zakończ",
"fixed-speed": "",
"focus-map-on": "Skoncentruj mapę na", "focus-map-on": "Skoncentruj mapę na",
"follow": "Obserwuj", "follow": "Obserwuj",
"followers": "Obserwujący", "followers": "Obserwujący",
@@ -135,6 +141,7 @@
"german": "Niemiecki", "german": "Niemiecki",
"get-position-from-exif": "Odczytaj współrzędne z danych EXIF", "get-position-from-exif": "Odczytaj współrzędne z danych EXIF",
"grid": "Siatka", "grid": "Siatka",
"height": "",
"help": "Pomoc", "help": "Pomoc",
"hero_section_0_text": "Eksploruj ekscytujące szlaki, zapisz swoje ulubione, doświadcz piękna naturalnego świata. Znajdź swoją następną przygodę!", "hero_section_0_text": "Eksploruj ekscytujące szlaki, zapisz swoje ulubione, doświadcz piękna naturalnego świata. Znajdź swoją następną przygodę!",
"hero_section_1_heading": "Wygląda na to, że nie ma tutaj szlaków.", "hero_section_1_heading": "Wygląda na to, że nie ma tutaj szlaków.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Czy wiesz że, możesz zapisywać nie tylko piesze wycieczki ale także inne kategorie wypraw?", "hero_section_2_text": "Czy wiesz że, możesz zapisywać nie tylko piesze wycieczki ale także inne kategorie wypraw?",
"hiking": "Wędrówka", "hiking": "Wędrówka",
"hungarian": "Język węgierski", "hungarian": "Język węgierski",
"hybrid": "",
"icon": "Ikona", "icon": "Ikona",
"imperial": "Anglosaskie", "imperial": "Anglosaskie",
"import": "Importuj", "import": "Importuj",
@@ -176,8 +184,10 @@
"make-one": "Stwórz ją!", "make-one": "Stwórz ją!",
"make-thumbnail": "Zrób miniaturkę", "make-thumbnail": "Zrób miniaturkę",
"map": "Mapa", "map": "Mapa",
"max-hiking-difficulty": "",
"metric": "Metryczne", "metric": "Metryczne",
"moderate": "Średni", "moderate": "Średni",
"mountain": "",
"must-be-at-least-n-characters-long": "Długość musi wynosić przynajmniej {n} znaków", "must-be-at-least-n-characters-long": "Długość musi wynosić przynajmniej {n} znaków",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "Moje konto", "my-account": "Moje konto",
@@ -244,6 +254,7 @@
"removed-trail-from": "Usunięto szlak z", "removed-trail-from": "Usunięto szlak z",
"required": "Wymagane", "required": "Wymagane",
"reset-password": "Resetuj hasło", "reset-password": "Resetuj hasło",
"road": "",
"route": "{n, plural,=1 {Trasa} other {Trasy}}", "route": "{n, plural,=1 {Trasa} other {Trasy}}",
"route-point": "Punkt trasy", "route-point": "Punkt trasy",
"save": "Zapisz", "save": "Zapisz",
@@ -276,6 +287,7 @@
"shared": "Udostępniono", "shared": "Udostępniono",
"shared-by": "Udostępniony przez", "shared-by": "Udostępniony przez",
"shared-with": "Udostępniony dla", "shared-with": "Udostępniony dla",
"shortest": "",
"show-in-overview": "Pokaż w przeglądzie", "show-in-overview": "Pokaż w przeglądzie",
"show-on-map": "Pokaż na mapie", "show-on-map": "Pokaż na mapie",
"slogan": "Zapisz swoją wyprawę!", "slogan": "Zapisz swoją wyprawę!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Tekst", "text": "Tekst",
"tilesets": "Niestandardowe zestawy płytek", "tilesets": "Niestandardowe zestawy płytek",
"top-speed": "",
"trail": "{n, plural, one {Szlak} few {Szlaki} many {Szlaków}=1 {Szlak} other {Szlaki}}", "trail": "{n, plural, one {Szlak} few {Szlaki} many {Szlaków}=1 {Szlak} other {Szlaki}}",
"trail-not-shared": "Szlak nie udostępniony", "trail-not-shared": "Szlak nie udostępniony",
"trail-saved-successfully": "Szlak pomyślnie zapisany", "trail-saved-successfully": "Szlak pomyślnie zapisany",
@@ -303,10 +316,14 @@
"upload-gpx": "Importuj GPX", "upload-gpx": "Importuj GPX",
"upload-new-file": "Prześlij nowy plik", "upload-new-file": "Prześlij nowy plik",
"uploaded": "wgrany", "uploaded": "wgrany",
"use-hills": "",
"use-roads": "",
"username": "Nazwa Użytkownika", "username": "Nazwa Użytkownika",
"view": "Widok", "view": "Widok",
"walking-speed": "",
"waypoints": "{n, plural, one {Punkt} few {Punkty} many {Punktów}=1 {Punkt} other {Punktów}}", "waypoints": "{n, plural, one {Punkt} few {Punkty} many {Punktów}=1 {Punkt} other {Punktów}}",
"welcome_to": "Witaj w", "welcome_to": "Witaj w",
"width": "",
"wrong-username-or-password": "Zła nazwa użytkownika lub hasło", "wrong-username-or-password": "Zła nazwa użytkownika lub hasło",
"you-can": "Możesz" "you-can": "Możesz"
} }

View File

@@ -23,10 +23,12 @@
"author": "Author", "author": "Author",
"avatar": "Avatar", "avatar": "Avatar",
"average-speed": "Vel. média", "average-speed": "Vel. média",
"avoid-bad-surfaces": "",
"back": "Back", "back": "Back",
"back-to-login": "Back to Login", "back-to-login": "Back to Login",
"basic-info": "Informações básicas", "basic-info": "Informações básicas",
"before": "Antes", "before": "Antes",
"bike-type": "",
"by": "by", "by": "by",
"can": "pode", "can": "pode",
"cancel": "Cancelar", "cancel": "Cancelar",
@@ -55,8 +57,10 @@
"create-new-list": "Criar nova lista", "create-new-list": "Criar nova lista",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "Data de criação", "creation-date": "Data de criação",
"cross": "",
"current-password": "Senha atual", "current-password": "Senha atual",
"cycling": "Ciclismo", "cycling": "Ciclismo",
"cycling-speed": "",
"danger-zone": "Zona de perigo", "danger-zone": "Zona de perigo",
"date": "Data", "date": "Data",
"default-category": "Categoria inicial", "default-category": "Categoria inicial",
@@ -95,6 +99,7 @@
"empty-activities": "{username} has no activity yet", "empty-activities": "{username} has no activity yet",
"empty-bio": "{username} has not added a bio yet", "empty-bio": "{username} has not added a bio yet",
"empty-lists": "{username} has no public lists", "empty-lists": "{username} has no public lists",
"enable-auto-routing": "",
"english": "Inglês", "english": "Inglês",
"entry": "Entrada", "entry": "Entrada",
"error-creating-user": "Erro ao criar utilizador", "error-creating-user": "Erro ao criar utilizador",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filter difficulty", "filter-difficulty": "Filter difficulty",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "Centrar mapa em", "focus-map-on": "Centrar mapa em",
"follow": "Follow", "follow": "Follow",
"followers": "Followers", "followers": "Followers",
@@ -135,6 +141,7 @@
"german": "Alemão", "german": "Alemão",
"get-position-from-exif": "Obter coordenadas dos dados EXIF", "get-position-from-exif": "Obter coordenadas dos dados EXIF",
"grid": "Grelha", "grid": "Grelha",
"height": "",
"help": "Ajuda", "help": "Ajuda",
"hero_section_0_text": "Explore trilhas emocionantes, salve seus favoritos e experimente a beleza da natureza. Encontre sua próxima aventura!", "hero_section_0_text": "Explore trilhas emocionantes, salve seus favoritos e experimente a beleza da natureza. Encontre sua próxima aventura!",
"hero_section_1_heading": "Parece que ainda não há trilhas aqui.", "hero_section_1_heading": "Parece que ainda não há trilhas aqui.",
@@ -143,6 +150,7 @@
"hero_section_2_text": "Sabias? Você não pode apenas salvá-lo trilhas de caminhada. Há muitas categorias para todas as suas aventuras.", "hero_section_2_text": "Sabias? Você não pode apenas salvá-lo trilhas de caminhada. Há muitas categorias para todas as suas aventuras.",
"hiking": "Montanhismo", "hiking": "Montanhismo",
"hungarian": "Húngaro", "hungarian": "Húngaro",
"hybrid": "",
"icon": "Ícone", "icon": "Ícone",
"imperial": "Imperial", "imperial": "Imperial",
"import": "Importar", "import": "Importar",
@@ -176,8 +184,10 @@
"make-one": "Faz um!", "make-one": "Faz um!",
"make-thumbnail": "Faça miniatura", "make-thumbnail": "Faça miniatura",
"map": "Mapa", "map": "Mapa",
"max-hiking-difficulty": "",
"metric": "Métrica", "metric": "Métrica",
"moderate": "Moderado", "moderate": "Moderado",
"mountain": "",
"must-be-at-least-n-characters-long": "Deve ter pelo menos {n} caracteres", "must-be-at-least-n-characters-long": "Deve ter pelo menos {n} caracteres",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "A minha conta", "my-account": "A minha conta",
@@ -244,6 +254,7 @@
"removed-trail-from": "Trilha removida de", "removed-trail-from": "Trilha removida de",
"required": "Obrigatório", "required": "Obrigatório",
"reset-password": "Reset Password", "reset-password": "Reset Password",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "Guardar", "save": "Guardar",
@@ -276,6 +287,7 @@
"shared": "Shared", "shared": "Shared",
"shared-by": "Partilhado por", "shared-by": "Partilhado por",
"shared-with": "Partilhado com", "shared-with": "Partilhado com",
"shortest": "",
"show-in-overview": "Mostrar na vista geral", "show-in-overview": "Mostrar na vista geral",
"show-on-map": "Mostrar no mapa", "show-on-map": "Mostrar no mapa",
"slogan": "Guarde as suas aventuras!", "slogan": "Guarde as suas aventuras!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "Texto", "text": "Texto",
"tilesets": "Camada de renderização personalizada", "tilesets": "Camada de renderização personalizada",
"top-speed": "",
"trail": "{n, plural, =1 {Percurso} other {Percursos}}", "trail": "{n, plural, =1 {Percurso} other {Percursos}}",
"trail-not-shared": "Não partilhado com ninguém", "trail-not-shared": "Não partilhado com ninguém",
"trail-saved-successfully": "Percurso gravado com sucesso", "trail-saved-successfully": "Percurso gravado com sucesso",
@@ -303,10 +316,14 @@
"upload-gpx": "Carregar GPX", "upload-gpx": "Carregar GPX",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "carregado", "uploaded": "carregado",
"use-hills": "",
"use-roads": "",
"username": "Nome de utilizador", "username": "Nome de utilizador",
"view": "Ver", "view": "Ver",
"walking-speed": "",
"waypoints": "{n, plural, =1 {Ponto de passagem} other {Pontos de passagem}}", "waypoints": "{n, plural, =1 {Ponto de passagem} other {Pontos de passagem}}",
"welcome_to": "Bem-vindo ao", "welcome_to": "Bem-vindo ao",
"width": "",
"wrong-username-or-password": "Nome de utilizador ou palavra-passe errados", "wrong-username-or-password": "Nome de utilizador ou palavra-passe errados",
"you-can": "Podes" "you-can": "Podes"
} }

View File

@@ -23,10 +23,12 @@
"author": "作者", "author": "作者",
"avatar": "头像", "avatar": "头像",
"average-speed": "平均速度", "average-speed": "平均速度",
"avoid-bad-surfaces": "",
"back": "返回", "back": "返回",
"back-to-login": "Back to Login", "back-to-login": "Back to Login",
"basic-info": "基本信息", "basic-info": "基本信息",
"before": "之前", "before": "之前",
"bike-type": "",
"by": "by", "by": "by",
"can": "可以", "can": "可以",
"cancel": "取消", "cancel": "取消",
@@ -55,8 +57,10 @@
"create-new-list": "创建新列表", "create-new-list": "创建新列表",
"create-waypoint": "Create waypoint", "create-waypoint": "Create waypoint",
"creation-date": "创建日期", "creation-date": "创建日期",
"cross": "",
"current-password": "当前密码", "current-password": "当前密码",
"cycling": "骑行", "cycling": "骑行",
"cycling-speed": "",
"danger-zone": "危险区域", "danger-zone": "危险区域",
"date": "日期", "date": "日期",
"default-category": "默认分类", "default-category": "默认分类",
@@ -95,6 +99,7 @@
"empty-activities": "{username} has no activity yet", "empty-activities": "{username} has no activity yet",
"empty-bio": "{username} has not added a bio yet", "empty-bio": "{username} has not added a bio yet",
"empty-lists": "{username} has no public lists", "empty-lists": "{username} has no public lists",
"enable-auto-routing": "",
"english": "英语", "english": "英语",
"entry": "日程", "entry": "日程",
"error-creating-user": "创建用户错误", "error-creating-user": "创建用户错误",
@@ -124,6 +129,7 @@
"filter-difficulty": "Filter difficulty", "filter-difficulty": "Filter difficulty",
"filter-tags": "Filter tags", "filter-tags": "Filter tags",
"finish": "Finish", "finish": "Finish",
"fixed-speed": "",
"focus-map-on": "地图聚焦于", "focus-map-on": "地图聚焦于",
"follow": "Follow", "follow": "Follow",
"followers": "Followers", "followers": "Followers",
@@ -135,6 +141,7 @@
"german": "德语", "german": "德语",
"get-position-from-exif": "从EXIF数据获取坐标", "get-position-from-exif": "从EXIF数据获取坐标",
"grid": "网格", "grid": "网格",
"height": "",
"help": "帮助", "help": "帮助",
"hero_section_0_text": "探索激动人心的探险,收藏最爱行程,体验美丽地大自然。找到你的下一次冒险!", "hero_section_0_text": "探索激动人心的探险,收藏最爱行程,体验美丽地大自然。找到你的下一次冒险!",
"hero_section_1_heading": "这儿似乎还没有行程。", "hero_section_1_heading": "这儿似乎还没有行程。",
@@ -143,6 +150,7 @@
"hero_section_2_text": "你知道吗?这里不仅仅可以收藏你的登山路线,还能为您的所有冒险放到相应的类别里面。", "hero_section_2_text": "你知道吗?这里不仅仅可以收藏你的登山路线,还能为您的所有冒险放到相应的类别里面。",
"hiking": "徒步", "hiking": "徒步",
"hungarian": "匈牙利语", "hungarian": "匈牙利语",
"hybrid": "",
"icon": "图标", "icon": "图标",
"imperial": "英制", "imperial": "英制",
"import": "导入", "import": "导入",
@@ -176,8 +184,10 @@
"make-one": "立刻注册!", "make-one": "立刻注册!",
"make-thumbnail": "生成缩略图", "make-thumbnail": "生成缩略图",
"map": "地图", "map": "地图",
"max-hiking-difficulty": "",
"metric": "公制", "metric": "公制",
"moderate": "中等", "moderate": "中等",
"mountain": "",
"must-be-at-least-n-characters-long": "长度至少 {n} 字符", "must-be-at-least-n-characters-long": "长度至少 {n} 字符",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long", "must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "我的账户", "my-account": "我的账户",
@@ -244,6 +254,7 @@
"removed-trail-from": "路线已删除自", "removed-trail-from": "路线已删除自",
"required": "必填", "required": "必填",
"reset-password": "重置密码", "reset-password": "重置密码",
"road": "",
"route": "{n, plural, =1 {Route} other {Routes}}", "route": "{n, plural, =1 {Route} other {Routes}}",
"route-point": "Route Point", "route-point": "Route Point",
"save": "保存", "save": "保存",
@@ -276,6 +287,7 @@
"shared": "Shared", "shared": "Shared",
"shared-by": "分享自", "shared-by": "分享自",
"shared-with": "分享给", "shared-with": "分享给",
"shortest": "",
"show-in-overview": "详情中展示", "show-in-overview": "详情中展示",
"show-on-map": "地图中展示", "show-on-map": "地图中展示",
"slogan": "保存你的冒险!", "slogan": "保存你的冒险!",
@@ -293,6 +305,7 @@
"tags": "Tags", "tags": "Tags",
"text": "文本", "text": "文本",
"tilesets": "自定义地图图层", "tilesets": "自定义地图图层",
"top-speed": "",
"trail": "{n, plural, =1 {路线} other {路线}}", "trail": "{n, plural, =1 {路线} other {路线}}",
"trail-not-shared": "未与任何人分享", "trail-not-shared": "未与任何人分享",
"trail-saved-successfully": "路线保存成功", "trail-saved-successfully": "路线保存成功",
@@ -303,10 +316,14 @@
"upload-gpx": "上传 GPX", "upload-gpx": "上传 GPX",
"upload-new-file": "Upload new file", "upload-new-file": "Upload new file",
"uploaded": "已上传", "uploaded": "已上传",
"use-hills": "",
"use-roads": "",
"username": "用户名", "username": "用户名",
"view": "查看", "view": "查看",
"walking-speed": "",
"waypoints": "{n, plural, =1 {路点} other {路点}}", "waypoints": "{n, plural, =1 {路点} other {路点}}",
"welcome_to": "欢迎", "welcome_to": "欢迎",
"width": "",
"wrong-username-or-password": "用户名或密码无效", "wrong-username-or-password": "用户名或密码无效",
"you-can": "你可以" "you-can": "你可以"
} }

View File

@@ -1,5 +1,87 @@
import * as M from "maplibre-gl"; import * as M from "maplibre-gl";
interface ValhallaCostingOptions {
shortest?: boolean
}
export interface ValhallaPedestrianCostingOptions extends ValhallaCostingOptions {
use_ferry?: number
use_living_streets?: number
use_tracks?: number
service_penalty?: number
service_factor?: number
use_hills?: number
walking_speed?: number
walkway_factor?: number
sidewalk_factor?: number
alley_factor?: number
driveway_factor?: number
step_penalty?: number
max_hiking_difficulty?: number
use_lit?: number
transit_start_end_max_distance?: number
transit_transfer_max_distance?: number
}
export interface ValhallaBicycleCostingOptions extends ValhallaCostingOptions {
maneuver_penalty?: number
country_crossing_penalty?: number
country_crossing_cost?: number
use_ferry?: number
use_living_streets?: number
service_penalty?: number
service_factor?: number
bicycle_type?: "Road" | "Hybrid" | "City" | "Cross" | "Mountain"
cycling_speed?: number
use_roads?: number
use_hills?: number
avoid_bad_surfaces?: number
gate_penalty?: number
gate_cost?: number
}
export interface ValhallaAutoCostingOptions extends ValhallaCostingOptions {
maneuver_penalty?: number
country_crossing_penalty?: number
country_crossing_cost?: number
width?: number
height?: number
use_highways?: number
use_tolls?: number
use_ferry?: number
ferry_cost?: number
use_living_streets?: number
use_tracks?: number
private_access_penalty?: number
ignore_closures?: boolean
ignore_restrictions?: boolean
ignore_access?: boolean
closure_factor?: number
service_penalty?: number
service_factor?: number
exclude_unpaved?: number
exclude_cash_only_tolls?: boolean
top_speed?: number
fixed_speed?: number
toll_booth_penalty?: number
toll_booth_cost?: number
gate_penalty?: number
gate_cost?: number
include_hov2?: boolean
include_hov3?: boolean
include_hot?: boolean
disable_hierarchy_pruning?: boolean
}
export interface RoutingOptions {
autoRouting: boolean
modeOfTransport: "pedestrian" | "bicycle" | "auto"
pedestrianOptions?: ValhallaPedestrianCostingOptions
bicycleOptions?: ValhallaBicycleCostingOptions
autoOptions?: ValhallaAutoCostingOptions
}
interface ValhallaRouteResponse { interface ValhallaRouteResponse {
trip: { trip: {
legs: { legs: {

View File

@@ -2,7 +2,7 @@ import GPX from "$lib/models/gpx/gpx";
import type Track from "$lib/models/gpx/track"; import type Track from "$lib/models/gpx/track";
import TrackSegment from "$lib/models/gpx/track-segment"; import TrackSegment from "$lib/models/gpx/track-segment";
import Waypoint from "$lib/models/gpx/waypoint"; import Waypoint from "$lib/models/gpx/waypoint";
import { type ValhallaAnchor, type ValhallaHeightResponse, type ValhallaRouteResponse } from "$lib/models/valhalla"; import { type RoutingOptions, type ValhallaAnchor, type ValhallaHeightResponse, type ValhallaRouteResponse } from "$lib/models/valhalla";
import { APIError } from "$lib/util/api_util"; import { APIError } from "$lib/util/api_util";
import { decodePolyline, encodePolyline } from "$lib/util/polyline_util"; import { decodePolyline, encodePolyline } from "$lib/util/polyline_util";
@@ -20,19 +20,21 @@ export function setRoute(newRoute: GPX) {
route = newRoute route = newRoute
} }
export async function calculateRouteBetween(startLat: number, startLon: number, endLat: number, endLon: number, costing: string = "pedestrian", autoRoute: boolean = true) { export async function calculateRouteBetween(startLat: number, startLon: number, endLat: number, endLon: number, options: RoutingOptions) {
let shape; let shape;
if (autoRoute) { if (options.autoRouting) {
let costingBody; let costingBody;
switch (costing) { switch (options.modeOfTransport) {
case "bicycle": case "bicycle":
costingBody = { "costing": "bicycle", "costing_options": { "bicycle": { "bicycle_type": "Hybrid", "use_roads": 0.5, "use_hills": 0.5, "avoid_bad_surfaces": 0.5, "use_ferry": 0 } } } costingBody = { "costing": options.modeOfTransport, "costing_options": { [options.modeOfTransport]: options.autoOptions } }
break; break;
case "auto": case "auto":
costingBody = { "costing": "auto", "costing_options": { "auto": { "use_ferry": 0 } } } costingBody = { "costing": options.modeOfTransport, "costing_options": { [options.modeOfTransport]: options.bicycleOptions } }
default: break;
costingBody = { "costing": costing, "costing_options": { costing: { "max_hiking_difficulty": 6, "use_ferry": 0 } } }
case "pedestrian":
costingBody = { "costing": options.modeOfTransport, "costing_options": { [options.modeOfTransport]: options.pedestrianOptions } }
break; break;
} }
const requestBody = { const requestBody = {

View File

@@ -20,7 +20,7 @@
import type { List } from "$lib/models/list"; import type { List } from "$lib/models/list";
import { SummitLog } from "$lib/models/summit_log"; import { SummitLog } from "$lib/models/summit_log";
import { Trail } from "$lib/models/trail"; import { Trail } from "$lib/models/trail";
import type { ValhallaAnchor } from "$lib/models/valhalla"; import type { RoutingOptions, ValhallaAnchor } from "$lib/models/valhalla";
import { Waypoint } from "$lib/models/waypoint"; import { Waypoint } from "$lib/models/waypoint";
import { categories } from "$lib/stores/category_store"; import { categories } from "$lib/stores/category_store";
import { import {
@@ -56,14 +56,21 @@
import { page } from "$app/state"; import { page } from "$app/state";
import emptyStateTrailDark from "$lib/assets/svgs/empty_states/empty_state_trail_dark.svg"; import emptyStateTrailDark from "$lib/assets/svgs/empty_states/empty_state_trail_dark.svg";
import emptyStateTrailLight from "$lib/assets/svgs/empty_states/empty_state_trail_light.svg"; import emptyStateTrailLight from "$lib/assets/svgs/empty_states/empty_state_trail_light.svg";
import Combobox, {
type ComboboxItem,
} from "$lib/components/base/combobox.svelte";
import type { DropdownItem } from "$lib/components/base/dropdown.svelte"; import type { DropdownItem } from "$lib/components/base/dropdown.svelte";
import Search, { import Search, {
type SearchItem, type SearchItem,
} from "$lib/components/base/search.svelte"; } from "$lib/components/base/search.svelte";
import RoutingOptionsPopup from "$lib/components/trail/routing_options_popup.svelte";
import { TagCreateSchema } from "$lib/models/api/tag_schema.js";
import { Tag } from "$lib/models/tag.js";
import { import {
searchLocationReverse, searchLocationReverse,
searchLocations, searchLocations,
} from "$lib/stores/search_store.js"; } from "$lib/stores/search_store.js";
import { tags_index } from "$lib/stores/tag_store.js";
import { theme } from "$lib/stores/theme_store.js"; import { theme } from "$lib/stores/theme_store.js";
import { getIconForLocation } from "$lib/util/icon_util.js"; import { getIconForLocation } from "$lib/util/icon_util.js";
import { import {
@@ -79,13 +86,6 @@
import { backInOut } from "svelte/easing"; import { backInOut } from "svelte/easing";
import { scale } from "svelte/transition"; import { scale } from "svelte/transition";
import { z } from "zod"; import { z } from "zod";
import Combobox, {
type ComboboxItem,
} from "$lib/components/base/combobox.svelte";
import { TagCreateSchema } from "$lib/models/api/tag_schema.js";
import { SvelteSet } from "svelte/reactivity";
import { Tag } from "$lib/models/tag.js";
import { tags_index } from "$lib/stores/tag_store.js";
let { data } = $props(); let { data } = $props();
@@ -129,14 +129,10 @@
.optional(), .optional(),
}); });
const modesOfTransport = [ let routingOptions: RoutingOptions = $state({
{ text: $_("hiking"), value: "pedestrian" }, autoRouting: true,
{ text: $_("cycling"), value: "bicycle" }, modeOfTransport: "pedestrian",
{ text: $_("driving"), value: "auto" }, })
];
let selectedModeOfTransport = $state(modesOfTransport[0].value);
let autoRouting = $state(true);
let savedAtLeastOnce = $state(false); let savedAtLeastOnce = $state(false);
@@ -590,8 +586,7 @@
previousAnchor.lon, previousAnchor.lon,
lat, lat,
lon, lon,
selectedModeOfTransport, routingOptions
autoRouting,
); );
insertIntoRoute(routeWaypoints); insertIntoRoute(routeWaypoints);
updateTrailWithRouteData(); updateTrailWithRouteData();
@@ -735,8 +730,7 @@
anchor.lon, anchor.lon,
nextAnchor.lat, nextAnchor.lat,
nextAnchor.lon, nextAnchor.lon,
selectedModeOfTransport, routingOptions
autoRouting,
); );
} }
if (anchorIndex > 0) { if (anchorIndex > 0) {
@@ -746,8 +740,7 @@
previousAnchor.lon, previousAnchor.lon,
anchor.lat, anchor.lat,
anchor.lon, anchor.lon,
selectedModeOfTransport, routingOptions
autoRouting,
); );
} }
@@ -809,16 +802,14 @@
previousAnchor.lon, previousAnchor.lon,
anchor.lat, anchor.lat,
anchor.lon, anchor.lon,
selectedModeOfTransport, routingOptions
autoRouting,
); );
const nextRouteSegment = await calculateRouteBetween( const nextRouteSegment = await calculateRouteBetween(
anchor.lat, anchor.lat,
anchor.lon, anchor.lon,
nextAnchor.lat, nextAnchor.lat,
nextAnchor.lon, nextAnchor.lon,
selectedModeOfTransport, routingOptions
autoRouting,
); );
editRoute(data.segment, previousRouteSegment); editRoute(data.segment, previousRouteSegment);
@@ -1183,17 +1174,13 @@
<div class="relative"> <div class="relative">
{#if drawingActive} {#if drawingActive}
<div <div
class="absolute top-0 left-16 z-50 p-4 my-2 rounded-xl bg-background space-y-4"
in:scale={{ easing: backInOut }} in:scale={{ easing: backInOut }}
out:scale={{ easing: backInOut }} out:scale={{ easing: backInOut }}
class="absolute top-0 left-16 z-50"
> >
<Toggle bind:value={autoRouting} label="Enable auto-routing" <RoutingOptionsPopup
></Toggle> bind:options={routingOptions}
<Select ></RoutingOptionsPopup>
items={modesOfTransport}
bind:value={selectedModeOfTransport}
disabled={!autoRouting}
></Select>
</div> </div>
{/if} {/if}
<div id="trail-map"> <div id="trail-map">