The web app grows its account surface: login (with next-redirect, unverified-hint + resend), signup (react-hook-form + shared Zod schemas, field-level api errors, closed-registration state fed by the new public GET /auth/registration), e-mail verification, forgot/reset password; a settings page with profile (locale applies immediately), password change, and active-session management; a Site-Admin page for instance name, default locale, and registration mode. AuthProvider holds /auth/me, applies the profile locale, and backs route guards (RequireAuth/RequireAnonymous/RequireSiteAdmin); the top bar gains a user menu. All strings ship in the new auth/settings namespaces (de+ en); the exception filter now preserves handler-specific error codes. Verified live: signup → Mailpit → verify → login → profile through the Vite proxy. Closes #16 Closes #17 Closes #18 Closes #19 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
39 lines
1.1 KiB
JSON
39 lines
1.1 KiB
JSON
{
|
|
"title": "Einstellungen",
|
|
"profile": {
|
|
"title": "Profil",
|
|
"displayName": "Anzeigename",
|
|
"locale": "Sprache",
|
|
"locales": { "de": "Deutsch", "en": "English" },
|
|
"save": "Speichern",
|
|
"saved": "Gespeichert."
|
|
},
|
|
"password": {
|
|
"title": "Passwort ändern",
|
|
"current": "Aktuelles Passwort",
|
|
"new": "Neues Passwort",
|
|
"submit": "Passwort ändern",
|
|
"changed": "Passwort geändert. Andere Geräte wurden abgemeldet."
|
|
},
|
|
"sessions": {
|
|
"title": "Aktive Sitzungen",
|
|
"current": "Diese Sitzung",
|
|
"created": "Angemeldet",
|
|
"lastSeen": "Zuletzt aktiv",
|
|
"device": "Gerät",
|
|
"revoke": "Abmelden",
|
|
"revokeAll": "Alle anderen Sitzungen abmelden",
|
|
"empty": "Keine weiteren aktiven Sitzungen."
|
|
},
|
|
"admin": {
|
|
"title": "Administration",
|
|
"instanceName": "Name der Instanz",
|
|
"defaultLocale": "Standardsprache",
|
|
"registrationMode": "Selbst-Registrierung",
|
|
"registrationOpen": "Offen — alle können sich registrieren",
|
|
"registrationClosed": "Geschlossen — keine neuen Registrierungen",
|
|
"save": "Speichern",
|
|
"saved": "Gespeichert."
|
|
}
|
|
}
|