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>
71 lines
2.2 KiB
JSON
71 lines
2.2 KiB
JSON
{
|
|
"login": {
|
|
"title": "Sign in",
|
|
"usernameOrEmail": "Username or e-mail",
|
|
"password": "Password",
|
|
"submit": "Sign in",
|
|
"forgot": "Forgot your password?",
|
|
"noAccount": "No account yet?",
|
|
"signupLink": "Register now",
|
|
"resendHint": "Didn't get the confirmation mail?",
|
|
"resendLink": "Send it again"
|
|
},
|
|
"signup": {
|
|
"title": "Create your account",
|
|
"username": "Username",
|
|
"usernameHint": "Letters, digits, hyphens — this is your address inside Dorfteich.",
|
|
"email": "E-mail address",
|
|
"displayName": "Display name",
|
|
"password": "Password",
|
|
"passwordHint": "At least 10 characters. A short sentence works well.",
|
|
"submit": "Register",
|
|
"haveAccount": "Already registered?",
|
|
"loginLink": "Sign in",
|
|
"closed": "Registration is currently closed on this instance.",
|
|
"success": {
|
|
"title": "Check your inbox",
|
|
"body": "We sent a confirmation link to {{email}}. It is valid for 24 hours.",
|
|
"resend": "Send the mail again"
|
|
}
|
|
},
|
|
"verify": {
|
|
"title": "Confirming your e-mail address …",
|
|
"success": {
|
|
"title": "E-mail address confirmed",
|
|
"body": "Your account is active — you can sign in now.",
|
|
"login": "Go to sign-in"
|
|
},
|
|
"error": {
|
|
"title": "This link did not work",
|
|
"resendPrompt": "Enter your e-mail address and we will send a fresh link:",
|
|
"resend": "Send new link"
|
|
},
|
|
"resent": "If the address belongs to an unconfirmed account, a new mail is on its way."
|
|
},
|
|
"forgot": {
|
|
"title": "Reset password",
|
|
"body": "Enter your e-mail address. If an account exists, you will receive a reset link (valid for one hour).",
|
|
"email": "E-mail address",
|
|
"submit": "Send reset link",
|
|
"sent": "Done — check your inbox.",
|
|
"backToLogin": "Back to sign-in"
|
|
},
|
|
"reset": {
|
|
"title": "Set a new password",
|
|
"password": "New password",
|
|
"submit": "Save password",
|
|
"success": {
|
|
"title": "Password saved",
|
|
"body": "All previous sessions were signed out. Sign in with your new password.",
|
|
"login": "Go to sign-in"
|
|
}
|
|
},
|
|
"menu": {
|
|
"settings": "Settings",
|
|
"admin": "Administration",
|
|
"logout": "Sign out",
|
|
"login": "Sign in",
|
|
"signup": "Register"
|
|
}
|
|
}
|