boban
b2cb94bb32
feat(auth): accept a 2FA backup code at the login challenge
...
The challenge now falls back to consuming a one-time recovery code when the TOTP
check fails. Relaxed the code input (was numeric, maxlength 6) so a backup code
is typable, and added a hint. Bilingual.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 16:50:36 +02:00
boban
5691051ad8
feat(i18n): bilingual foundation (DE/EN) + localize auth/dashboard/servers/fleet/account
...
Adds user-selectable German (default) + English, per new rule R16.
Foundation:
- config locale=de + fallback=de; User.locale column (+migration); SetLocale middleware
(user → session → default; SUPPORTED=[de,en]); public /locale/{code} route; DE/EN
switcher (x-lang-switch) in topbar + auth layout; <html lang> dynamic.
- Translation structure: lang/{de,en}/<group>.php (one group per feature + shared common),
identical keys across both languages, :placeholder interpolation. Documented as R16 in
rules.md + CLAUDE.md (R9 reconciled).
- Removed the "Warum Caddy" rationale block from the System page (per feedback).
Localized this pass (views + Livewire components, keys de↔en at parity):
- common, auth, dashboard, servers, services, files, audit, settings, system, versions.
- #[Title] attributes → dynamic title() (attributes can't call __()).
Remaining (next commit): modals components + a few modal views, shell (command palette,
nav-item, server-item, toaster), and backend service messages (app/Services/*, OsProfile).
App is fully functional in German throughout; English covers the groups above.
Boot-verified: /login HTTP 200 in DE + EN, titles + <html lang> localized, locale switch works.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 22:36:16 +02:00