initial commit (#883)

Co-authored-by: Christian Beutel <>
This commit is contained in:
Flomp
2026-03-10 21:49:10 +01:00
committed by GitHub
parent 0623287206
commit 83a64775d0
15 changed files with 115 additions and 8 deletions

View File

@@ -17,11 +17,16 @@
"added-trails-to": "Přidány trasy do",
"after": "Po",
"all-activities": "Všechny aktivity",
"allow-auto-geolocate": "",
"alphabetical": "Abecedně",
"already-account": "Už máte svůj účet?",
"altitude": "Nadmořská výška",
"amenity": "",
"ammenity": "Vybavení",
"api-documentation": "API dokumentace",
"api-tokens": "",
"api-tokens-hint": "",
"apply-user-settings": "",
"attraction": "Zajímavost",
"author": "Autor",
"avatar": "Avatar",
@@ -34,6 +39,7 @@
"basic-info": "Základní informace",
"basque": "Baskičtina",
"before": "Před",
"behavior": "",
"bicycle-parking": "Parkoviště pro kola",
"bicycle-rental": "Půjčovna jízdních kol",
"bicycle-shop": "Prodejna jízdních kol",
@@ -123,6 +129,7 @@
"elevation-gain": "Stoupání",
"elevation-loss": "Klesání",
"email": "E-mail",
"email-not-unique": "",
"email-updated": "E-mail byl aktualizován",
"email-verified": "E-mail byl ověřen",
"empty-activities": "{username} zatím nemá žádnou aktivitu",
@@ -133,11 +140,14 @@
"enable-auto-routing": "Zapnout automatické trasování",
"english": "Angličtina",
"entry": "Vstup",
"error-copying-trail": "",
"error-creating-user": "Chyba při vytváření uživatele",
"error-deleting-token": "",
"error-disabling-strava-integration": "Chyba při deaktivaci integrace strava",
"error-during-login": "Během přihlášení došlo k chybě",
"error-during-password-reset": "Nelze odeslat e-mail pro obnovu hesla",
"error-exporting-trail": "Chyba při exportování trasy",
"error-generating-token": "",
"error-liking-trail": "Chyba při lajkování trasy",
"error-logging-in-to-komoot": "Chyba při přihlášení do Komootu",
"error-posting-comment": "Chyba při vkládání komentáře",
@@ -150,6 +160,8 @@
"error-updating-strava-integration": "Chyba při aktualizaci Komoot integrace",
"est-duration": "Odhadovaná doba trvání",
"everyone-with-the-link": "Každý, kdo má odkaz",
"expiration": "",
"expires": "",
"explore": "Objevování",
"explore-some-trails": "Objevte trasy",
"export": "Exportovat",
@@ -178,6 +190,7 @@
"from-url": "Z URL adresy",
"garage": "Garáž",
"gas-station": "Benzínka",
"generate-new-token": "",
"german": "Němčina",
"get-position-from-exif": "Získat souřadnice z EXIF údajů",
"get-started": "Začněte",
@@ -207,12 +220,17 @@
"integration-description-strava": "Synchronizuje vaše trasy a aktivity z aplikace Strava s Wandererem v pravidelných intervalech.",
"integration-disabled": "integrace zakázána",
"integration-enabled": "integrace povolena",
"integration-privacy-hint-original": "",
"integration-privacy-hint-user": "",
"integrations": "Integrace",
"invalid-date": "Neplatné datum",
"invalid-username": "Neplatné uživatelské jméno",
"italian": "Italština",
"joined": "Připojeno",
"keep-original": "",
"keep-private": "",
"language": "Jazyk",
"last-used": "",
"latitude": "Zeměpisná šířka",
"layer": "{n, plural, =1 {Vrstva} few {Vrstvy} other {Vrstev}}",
"license": "Licence",
@@ -221,6 +239,7 @@
"likes": "Líbí se",
"limited": "Omezené",
"link-copied": "Odkaz zkopírován!",
"linked-lists": "",
"list": "{n, plural, =1 {Seznam} few {Seznamy} other {Seznamů}}",
"list-not-shared": "Není s nikým sdíleno",
"list-public-warning": "Všechny trasy v tomto seznamu budou veřejné.",
@@ -256,13 +275,16 @@
"n-years-ago": "před {n} lety",
"name": "Název",
"near": "Poblíž",
"never": "",
"new-list": "Nový seznam",
"new-password": "Nové heslo",
"new-password-error": "Chyba při nastavení nového hesla",
"new-password-success": "Nové heslo bylo nastaveno",
"new-password-text": "Nastavit nové heslo",
"new-token-generated": "",
"new-trail": "Nová trasa",
"no-account": "Ještě nemáte účet?",
"no-api-tokens": "",
"no-comments-so-far": "Zatím žádné komentáře",
"no-data": "Žádná data",
"no-description-for-now": "Zatím bez popisu",
@@ -274,6 +296,7 @@
"no-results": "Nebyly nalezeny žádné výsledky",
"no-routes-added": "Nebyly přidány žádné trasy",
"no-waypoints-yet": "Zatím žádné body trasy",
"norwegian": "",
"not-a-valid-email-address": "Neplatná e-mailová adresa",
"not-a-valid-url": "Neplatná URL adresa",
"not-completed": "Nedokončeno",
@@ -344,10 +367,13 @@
"save-your-trail-first": "Nejprve uložte svou trasu",
"search-cities": "Vyhledat města",
"search-for-trails-places": "Vyhledat trasy, seznamy, místa",
"search-list": "",
"search-places": "Vyhledat místa",
"search-trails": "Vyhledat trasy",
"select-list": "Vybrat seznam",
"selected": "vybráno",
"set-private": "",
"set-public": "",
"settings": "Nastavení",
"settings-notification-comment-mention": "Někdo vás zmínil v komentáři",
"settings-notification-list-create": "Uživatel, kterého sledujete, vytvořil/a seznam",
@@ -403,6 +429,8 @@
"top-speed": "Nejvyšší rychlost",
"tourism": "Turismus",
"trail": "{n, plural, =1 {Trasa} few {Trasy} other {Tras}}",
"trail-copied-successfully": "",
"trail-not-in-list": "",
"trail-not-shared": "Není sdíleno s nikým",
"trail-saved-successfully": "Trasa úspěšně uložena",
"trails-for-you": "Trasy pro vás",
@@ -417,8 +445,10 @@
"use-hills": "Použít kopce",
"use-roads": "Použít silnice",
"username": "Uživatelské jméno",
"username-not-unique": "",
"view": "Zobrazit",
"viewpoint": "Vyhlídka",
"visibilty": "",
"visibilty-status": "Stav viditelnosti",
"walking-speed": "Rychlost chůze",
"water": "Voda",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Höhenunterschied (aufw.)",
"elevation-loss": "Höhenunterschied (abw.)",
"email": "Email",
"email-not-unique": "Diese Email-Adresse wird bereits verwendet",
"email-updated": "E-Mail aktualisiert",
"email-verified": "Email verifiziert",
"empty-activities": "{username} hat noch keine Aktivitäten",
@@ -444,8 +445,10 @@
"use-hills": "Hügel einbeziehen",
"use-roads": "Nutze Straßen",
"username": "Nutzername",
"username-not-unique": "Dieser Nutzername ist bereits vergeben. Bitte versuche es mit einem anderen.",
"view": "Ansehen",
"viewpoint": "Aussichtspunkt",
"visibilty": "",
"visibilty-status": "Sichtbarkeit",
"walking-speed": "Laufgeschwindigkeit",
"water": "Wasser",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Elevation Gain",
"elevation-loss": "Elevation Loss",
"email": "Email",
"email-not-unique": "This email address is already in use.",
"email-updated": "Email updated",
"email-verified": "Email verified",
"empty-activities": "{username} has no activity yet",
@@ -444,6 +445,7 @@
"use-hills": "Use hills",
"use-roads": "Use Roads",
"username": "Username",
"username-not-unique": "This username is already taken. Please try another.",
"view": "View",
"viewpoint": "Viewpoint",
"visibilty": "Visibility",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Ascenso",
"elevation-loss": "Descenso",
"email": "Correo electrónico",
"email-not-unique": "",
"email-updated": "Correo electrónico actualizado",
"email-verified": "Correo verificado",
"empty-activities": "{username} aún no tiene actividad",
@@ -444,6 +445,7 @@
"use-hills": "Usar cuestas",
"use-roads": "Utilizar carreteras",
"username": "Nombre de usuario",
"username-not-unique": "",
"view": "Ver",
"viewpoint": "Mirador",
"visibilty": "Visibilidad",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Irabazitako altitudea",
"elevation-loss": "Galdutako altitudea",
"email": "Eposta",
"email-not-unique": "",
"email-updated": "Eposta eguneratuta",
"email-verified": "Eposta egiaztatuta",
"empty-activities": "{username} erabiltzaileak ez du ekintzarik oraindik",
@@ -444,8 +445,10 @@
"use-hills": "Erabili aldapak",
"use-roads": "Erabili errepideak",
"username": "Erabiltzaile-izena",
"username-not-unique": "",
"view": "Ikusi",
"viewpoint": "Ikuspegia",
"visibilty": "",
"visibilty-status": "Ikuspen-egoera",
"walking-speed": "Ibiltze abiadura",
"water": "Ura",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Dénivelé positif",
"elevation-loss": "Dénivelé négatif",
"email": "Email",
"email-not-unique": "",
"email-updated": "Adresse mail mise à jour",
"email-verified": "Email vérifié",
"empty-activities": "{username} n'a encore aucune activité",
@@ -444,6 +445,7 @@
"use-hills": "Utiliser les collines",
"use-roads": "Utiliser les routes",
"username": "Nom d'utilisateur",
"username-not-unique": "",
"view": "Afficher",
"viewpoint": "Point de vue",
"visibilty": "Visibilité",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Magasságnövekedés",
"elevation-loss": "Elevation Loss",
"email": "Email",
"email-not-unique": "",
"email-updated": "Email updated",
"email-verified": "Email verified",
"empty-activities": "{username} has no activity yet",
@@ -444,8 +445,10 @@
"use-hills": "Use hills",
"use-roads": "Use Roads",
"username": "Felhasználónév",
"username-not-unique": "",
"view": "View",
"viewpoint": "Viewpoint",
"visibilty": "",
"visibilty-status": "Visibility status",
"walking-speed": "Walking speed",
"water": "Water",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Guadagno di quota",
"elevation-loss": "Perdita di quota",
"email": "Email",
"email-not-unique": "",
"email-updated": "Indirizzo email aggiornato",
"email-verified": "Email verified",
"empty-activities": "{username} non ha ancora attività",
@@ -444,8 +445,10 @@
"use-hills": "Use hills",
"use-roads": "Use Roads",
"username": "Nome utente",
"username-not-unique": "",
"view": "Visualizza",
"viewpoint": "Viewpoint",
"visibilty": "",
"visibilty-status": "Visibility status",
"walking-speed": "Walking speed",
"water": "Water",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Hoogteverschil",
"elevation-loss": "Hoogteverlies",
"email": "E-mail",
"email-not-unique": "",
"email-updated": "Email bijgewerkt",
"email-verified": "Email geverifieerd",
"empty-activities": "{username} heeft nog geen activiteit",
@@ -444,6 +445,7 @@
"use-hills": "Gebruik heuvels",
"use-roads": "Gebruik wegen",
"username": "Gebruikersnaam",
"username-not-unique": "",
"view": "Weergave",
"viewpoint": "Uitzichtpunt",
"visibilty": "Zichtbaarheid",

View File

@@ -17,11 +17,16 @@
"added-trails-to": "La til stier i",
"after": "Etter",
"all-activities": "Alle aktiviteter",
"allow-auto-geolocate": "",
"alphabetical": "Alfabetisk",
"already-account": "Har du allerede en konto?",
"altitude": "Høyde",
"amenity": "",
"ammenity": "Fasilitet",
"api-documentation": "API-dokumentasjon",
"api-tokens": "",
"api-tokens-hint": "",
"apply-user-settings": "",
"attraction": "Attraksjon",
"author": "Forfatter",
"avatar": "Avatar",
@@ -34,6 +39,7 @@
"basic-info": "Grunnleggende info",
"basque": "Baskisk",
"before": "Før",
"behavior": "",
"bicycle-parking": "Sykkelparkering",
"bicycle-rental": "Sykkel-utleie",
"bicycle-shop": "Sykkelbutikk",
@@ -123,6 +129,7 @@
"elevation-gain": "Høydemeter opp",
"elevation-loss": "Høydemeter ned",
"email": "E-post",
"email-not-unique": "",
"email-updated": "E-post oppdatert",
"email-verified": "E-post verifisert",
"empty-activities": "{username} har ingen aktivitet ennå",
@@ -133,11 +140,14 @@
"enable-auto-routing": "Aktiver automatisk ruting",
"english": "Engelsk",
"entry": "Oppføring",
"error-copying-trail": "",
"error-creating-user": "Feil ved oppretting av bruker",
"error-deleting-token": "",
"error-disabling-strava-integration": "Feil ved deaktivering av Strava-integrasjon",
"error-during-login": "Feil under innlogging",
"error-during-password-reset": "Kunne ikke sende e-post for tilbakestilling av passord",
"error-exporting-trail": "Feil ved eksport av sti",
"error-generating-token": "",
"error-liking-trail": "Feil ved likerklikk på sti",
"error-logging-in-to-komoot": "Feil ved innlogging til Komoot",
"error-posting-comment": "Feil ved posting av kommentar",
@@ -150,6 +160,8 @@
"error-updating-strava-integration": "Feil ved oppdatering av Komoot-integrasjon",
"est-duration": "Est. varighet",
"everyone-with-the-link": "Alle med lenken",
"expiration": "",
"expires": "",
"explore": "Utforsk",
"explore-some-trails": "Utforsk noen stier",
"export": "Eksporter",
@@ -178,6 +190,7 @@
"from-url": "Fra URL",
"garage": "Garasje",
"gas-station": "Bensinstasjon",
"generate-new-token": "",
"german": "Tysk",
"get-position-from-exif": "Hent koordinater fra EXIF-data",
"get-started": "Kom i gang",
@@ -207,12 +220,17 @@
"integration-description-strava": "Synkroniserer dine Strava-ruter og aktiviteter med Wanderer med jevne mellomrom.",
"integration-disabled": "integrasjon deaktivert",
"integration-enabled": "integrasjon aktivert",
"integration-privacy-hint-original": "",
"integration-privacy-hint-user": "",
"integrations": "Integrasjoner",
"invalid-date": "Ugyldig dato",
"invalid-username": "Ugyldig brukernavn",
"italian": "Italiensk",
"joined": "Ble medlem",
"keep-original": "",
"keep-private": "",
"language": "Språk",
"last-used": "",
"latitude": "Breddegrad",
"layer": "{n, plural, =1 {Lag} other {Lag}}",
"license": "Lisens",
@@ -221,6 +239,7 @@
"likes": "Likerklikk",
"limited": "Begrenset",
"link-copied": "Lenke kopiert!",
"linked-lists": "",
"list": "{n, plural, =1 {Liste} other {Lister}}",
"list-not-shared": "Ikke delt med noen",
"list-public-warning": "Alle stier i denne listen vil bli offentlige.",
@@ -256,13 +275,16 @@
"n-years-ago": "{n} år siden",
"name": "Navn",
"near": "Nær",
"never": "",
"new-list": "Ny liste",
"new-password": "Nytt passord",
"new-password-error": "Feil ved setting av nytt passord",
"new-password-success": "Det nye passordet er satt",
"new-password-text": "Sett et nytt passord",
"new-token-generated": "",
"new-trail": "Ny sti",
"no-account": "Har du ikke en konto?",
"no-api-tokens": "",
"no-comments-so-far": "Ingen kommentarer ennå",
"no-data": "Ingen data",
"no-description-for-now": "Ingen beskrivelse ennå",
@@ -274,6 +296,7 @@
"no-results": "Ingen resultater funnet",
"no-routes-added": "Ingen ruter lagt til",
"no-waypoints-yet": "Ingen veipunkter ennå",
"norwegian": "",
"not-a-valid-email-address": "Ikke en gyldig e-postadresse",
"not-a-valid-url": "Ikke en gyldig URL",
"not-completed": "Ikke fullført",
@@ -344,10 +367,13 @@
"save-your-trail-first": "Lagre stien din først",
"search-cities": "Søk etter byer",
"search-for-trails-places": "Søk etter stier, lister, steder",
"search-list": "",
"search-places": "Søk etter steder",
"search-trails": "Søk etter stier",
"select-list": "Velg liste",
"selected": "valgt",
"set-private": "",
"set-public": "",
"settings": "Innstillinger",
"settings-notification-comment-mention": "Noen nevnte deg i en kommentar",
"settings-notification-list-create": "En bruker du følger har opprettet en liste",
@@ -403,6 +429,8 @@
"top-speed": "Toppfart",
"tourism": "Turisme",
"trail": "{n, plural, =1 {Sti} other {Stier}}",
"trail-copied-successfully": "",
"trail-not-in-list": "",
"trail-not-shared": "Ikke delt med noen",
"trail-saved-successfully": "Sti lagret",
"trails-for-you": "Stier for deg",
@@ -417,8 +445,10 @@
"use-hills": "Bruk bakker",
"use-roads": "Bruk veier",
"username": "Brukernavn",
"username-not-unique": "",
"view": "Vis",
"viewpoint": "Utsiktspunkt",
"visibilty": "",
"visibilty-status": "Synlighetsstatus",
"walking-speed": "Gåhastighet",
"water": "Vann",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Przyrost wysokości",
"elevation-loss": "Strata wysokości",
"email": "E-mail",
"email-not-unique": "",
"email-updated": "Email zaktualizowany",
"email-verified": "Adres e-mail został zweryfikowany",
"empty-activities": "{username} nie ma jeszcze aktywności",
@@ -444,8 +445,10 @@
"use-hills": "Use hills",
"use-roads": "Użyj dróg",
"username": "Nazwa Użytkownika",
"username-not-unique": "",
"view": "Widok",
"viewpoint": "Viewpoint",
"visibilty": "",
"visibilty-status": "Status widoczności",
"walking-speed": "Walking speed",
"water": "Water",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Ganho de elevação",
"elevation-loss": "Perda de elevação",
"email": "Correio eletrónico",
"email-not-unique": "",
"email-updated": "Email updated",
"email-verified": "Email verified",
"empty-activities": "{username} has no activity yet",
@@ -444,8 +445,10 @@
"use-hills": "Use hills",
"use-roads": "Use Roads",
"username": "Nome de utilizador",
"username-not-unique": "",
"view": "Ver",
"viewpoint": "Viewpoint",
"visibilty": "",
"visibilty-status": "Visibility status",
"walking-speed": "Walking speed",
"water": "Water",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "Набор высоты",
"elevation-loss": "Сброс высоты",
"email": "Эл. почта",
"email-not-unique": "",
"email-updated": "Email обновлён",
"email-verified": "Email подтверждён",
"empty-activities": "у {username} ещё нет активностей",
@@ -444,8 +445,10 @@
"use-hills": "Use hills",
"use-roads": "Использование дорог",
"username": "Никнейм",
"username-not-unique": "",
"view": "Просмотр",
"viewpoint": "Viewpoint",
"visibilty": "",
"visibilty-status": "Статус видимости",
"walking-speed": "Пешая скорость",
"water": "Вода",

View File

@@ -129,6 +129,7 @@
"elevation-gain": "上升海拔",
"elevation-loss": "下降海拔",
"email": "电子邮箱",
"email-not-unique": "",
"email-updated": "邮箱已更改",
"email-verified": "邮箱已经验证",
"empty-activities": "{username}还没有活动",
@@ -444,8 +445,10 @@
"use-hills": "使用山地",
"use-roads": "使用道路",
"username": "用户名",
"username-not-unique": "",
"view": "查看",
"viewpoint": "视角",
"visibilty": "",
"visibilty-status": "可见状态",
"walking-speed": "步行速度",
"water": "水",

View File

@@ -1,20 +1,22 @@
<script lang="ts">
import { goto, invalidateAll } from "$app/navigation";
import { invalidateAll } from "$app/navigation";
import { page } from "$app/state";
import Button from "$lib/components/base/button.svelte";
import TextField from "$lib/components/base/text_field.svelte";
import LogoTextTwoLineDark from "$lib/components/logo/logo_text_two_line_dark.svelte";
import LogoTextTwoLineLight from "$lib/components/logo/logo_text_two_line_light.svelte";
import { Language, type Settings } from "$lib/models/settings";
import { Language } from "$lib/models/settings";
import type { User } from "$lib/models/user";
import { settings_update } from "$lib/stores/settings_store";
import { theme } from "$lib/stores/theme_store";
import { show_toast } from "$lib/stores/toast_store.svelte";
import { login, users_create } from "$lib/stores/user_store";
import { APIError } from "$lib/util/api_util";
import { validator } from "@felte/validator-zod";
import { createForm } from "felte";
import { ClientResponseError } from "pocketbase";
import { _ } from "svelte-i18n";
import { INVALID, z } from "zod";
import { z } from "zod";
let loading: boolean = $state(false);
const { form, errors } = createForm<User>({
@@ -60,11 +62,24 @@
try {
await users_create(newUser);
} catch (e) {
if (
e instanceof APIError &&
e.detail?.data?.email?.code === "validation_not_unique"
) {
$errors.email = [$_("email-not-unique")];
} else if (
e instanceof APIError &&
e.detail?.data?.username?.code === "validation_not_unique"
) {
$errors.username = [$_("username-not-unique")];
} else {
show_toast({
icon: "close",
type: "error",
text: $_("error-creating-user"),
});
}
return;
} finally {
loading = false;