mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 06:11:45 +00:00
a876fb2634
* feat(auth): passkey (WebAuthn) login — server endpoints, schema + admin toggle Add @simplewebauthn/server registration and primary (discoverable) login ceremonies under /api/auth/passkey, a webauthn_credentials + single-use webauthn_challenges schema (migration), the instance-wide passkey_login toggle (default off) enforced before auth by a guard, and require_mfa satisfaction via a verified passkey. RP ID/origin come only from server config (webauthn_rp_id/origins -> APP_URL), never request headers. * feat(auth): passkey enrolment, login button + admin settings UI PasskeysSection in account settings (add/rename/remove with a current-password step-up), a 'Sign in with a passkey' button on the login page, the admin enable + RP-ID/origins controls, and a per-user admin reset action. * i18n(auth): passkey strings across all locales Add login/settings/admin passkey keys to en and all 19 translated locales.
102 lines
5.3 KiB
TypeScript
102 lines
5.3 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const login: TranslationStrings = {
|
|
'login.error': 'Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.',
|
|
'login.tagline': 'Deine Reisen.\nDein Plan.',
|
|
'login.description':
|
|
'Plane Reisen gemeinsam mit interaktiven Karten, Budgets und Echtzeit-Sync.',
|
|
'login.features.maps': 'Interaktive Karten',
|
|
'login.features.mapsDesc': 'Google Places, Routen & Clustering',
|
|
'login.features.realtime': 'Echtzeit-Sync',
|
|
'login.features.realtimeDesc': 'Gemeinsam planen via WebSocket',
|
|
'login.features.budget': 'Budget-Tracking',
|
|
'login.features.budgetDesc': 'Kategorien, Diagramme & Pro-Kopf',
|
|
'login.features.collab': 'Zusammenarbeit',
|
|
'login.features.collabDesc': 'Multi-User mit geteilten Reisen',
|
|
'login.features.packing': 'Packlisten',
|
|
'login.features.packingDesc': 'Kategorien & Fortschritt',
|
|
'login.features.bookings': 'Buchungen',
|
|
'login.features.bookingsDesc': 'Flüge, Hotels, Restaurants & mehr',
|
|
'login.features.files': 'Dokumente',
|
|
'login.features.filesDesc': 'Dateien hochladen & verwalten',
|
|
'login.features.routes': 'Routenoptimierung',
|
|
'login.features.routesDesc': 'Auto-Optimierung & Google Maps Export',
|
|
'login.selfHosted': 'Self-hosted · Open Source · Deine Daten bleiben bei dir',
|
|
'login.title': 'Anmelden',
|
|
'login.subtitle': 'Willkommen zurück',
|
|
'login.signingIn': 'Anmelden…',
|
|
'login.signIn': 'Anmelden',
|
|
'login.createAdmin': 'Admin-Konto erstellen',
|
|
'login.createAdminHint': 'Erstelle das erste Admin-Konto für TREK.',
|
|
'login.setNewPassword': 'Neues Passwort festlegen',
|
|
'login.setNewPasswordHint':
|
|
'Sie müssen Ihr Passwort ändern, bevor Sie fortfahren können.',
|
|
'login.createAccount': 'Konto erstellen',
|
|
'login.createAccountHint': 'Neues Konto registrieren.',
|
|
'login.creating': 'Erstelle…',
|
|
'login.noAccount': 'Noch kein Konto?',
|
|
'login.hasAccount': 'Bereits ein Konto?',
|
|
'login.register': 'Registrieren',
|
|
'login.emailPlaceholder': 'deine@email.de',
|
|
'login.username': 'Benutzername',
|
|
'login.oidc.registrationDisabled':
|
|
'Registrierung ist deaktiviert. Kontaktiere den Administrator.',
|
|
'login.oidc.noEmail': 'Keine E-Mail vom Provider erhalten.',
|
|
'login.oidc.tokenFailed': 'Authentifizierung fehlgeschlagen.',
|
|
'login.oidc.invalidState': 'Ungültige Sitzung. Bitte erneut versuchen.',
|
|
'login.demoFailed': 'Demo-Login fehlgeschlagen',
|
|
'login.oidcSignIn': 'Anmelden mit {name}',
|
|
'login.oidcOnly':
|
|
'Passwort-Authentifizierung ist deaktiviert. Bitte melde dich über deinen SSO-Anbieter an.',
|
|
'login.oidcLoggedOut':
|
|
'Du wurdest abgemeldet. Melde dich erneut über deinen SSO-Anbieter an.',
|
|
'login.demoHint': 'Demo ausprobieren — ohne Registrierung',
|
|
'login.mfaTitle': 'Zwei-Faktor-Authentifizierung',
|
|
'login.mfaSubtitle':
|
|
'Gib den 6-stelligen Code aus deiner Authenticator-App ein.',
|
|
'login.mfaCodeLabel': 'Bestätigungscode',
|
|
'login.mfaCodeRequired': 'Bitte den Code aus der Authenticator-App eingeben.',
|
|
'login.mfaHint':
|
|
'Google Authenticator, Authy oder eine andere TOTP-App öffnen.',
|
|
'login.mfaBack': '← Zurück zur Anmeldung',
|
|
'login.mfaVerify': 'Bestätigen',
|
|
'login.invalidInviteLink': 'Ungültiger oder abgelaufener Einladungslink',
|
|
'login.oidcFailed': 'OIDC-Anmeldung fehlgeschlagen',
|
|
'login.usernameRequired': 'Benutzername ist erforderlich',
|
|
'login.passwordMinLength': 'Das Passwort muss mindestens 8 Zeichen lang sein',
|
|
'login.forgotPassword': 'Passwort vergessen?',
|
|
'login.forgotPasswordTitle': 'Passwort zurücksetzen',
|
|
'login.forgotPasswordBody':
|
|
'Gib die E-Mail-Adresse deines Kontos ein. Falls ein Konto existiert, schicken wir dir einen Reset-Link.',
|
|
'login.forgotPasswordSubmit': 'Reset-Link senden',
|
|
'login.forgotPasswordSentTitle': 'Prüfe deine E-Mails',
|
|
'login.forgotPasswordSentBody':
|
|
'Falls ein Konto mit dieser Adresse existiert, ist ein Reset-Link unterwegs. Er läuft in 60 Minuten ab.',
|
|
'login.forgotPasswordSmtpHintOff':
|
|
'Hinweis: Der Administrator hat SMTP nicht konfiguriert. Der Reset-Link wird statt per E-Mail in die Server-Konsole geschrieben.',
|
|
'login.backToLogin': 'Zurück zur Anmeldung',
|
|
'login.newPassword': 'Neues Passwort',
|
|
'login.confirmPassword': 'Neues Passwort bestätigen',
|
|
'login.passwordsDontMatch': 'Passwörter stimmen nicht überein',
|
|
'login.mfaCode': '2FA-Code',
|
|
'login.resetPasswordTitle': 'Neues Passwort festlegen',
|
|
'login.resetPasswordBody':
|
|
'Wähle ein starkes Passwort, das du hier noch nicht verwendet hast. Mindestens 8 Zeichen.',
|
|
'login.resetPasswordMfaBody':
|
|
'Gib deinen 2FA-Code oder einen Backup-Code ein, um den Reset abzuschließen.',
|
|
'login.resetPasswordSubmit': 'Passwort zurücksetzen',
|
|
'login.resetPasswordVerify': 'Prüfen & zurücksetzen',
|
|
'login.resetPasswordSuccessTitle': 'Passwort aktualisiert',
|
|
'login.resetPasswordSuccessBody':
|
|
'Du kannst dich jetzt mit deinem neuen Passwort anmelden.',
|
|
'login.resetPasswordInvalidLink': 'Ungültiger Reset-Link',
|
|
'login.resetPasswordInvalidLinkBody':
|
|
'Dieser Link fehlt oder ist beschädigt. Fordere einen neuen an, um fortzufahren.',
|
|
'login.resetPasswordFailed':
|
|
'Zurücksetzen fehlgeschlagen. Der Link ist möglicherweise abgelaufen.',
|
|
'login.passkey.signIn': 'Mit Passkey anmelden',
|
|
'login.passkey.failed':
|
|
'Anmeldung mit Passkey fehlgeschlagen. Bitte erneut versuchen.',
|
|
};
|
|
export default login;
|