v0.247.0: i18n spike — the dashboard can speak English, Hungarian byte-identical
gates / gates (push) Successful in 19s

Message bundles (internal/i18n) expanded into templates before parsing, one
template set per language. Launcher, /backups, /apps/<slug> and the layout
converted; household language setting, POST /settings/language, ?lang= override,
report field. Parity test against fixtures captured from unconverted templates;
copy gates read templates expanded; new i18n_missing_gate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-17 14:50:57 +02:00
parent 89dd3e94b1
commit 612c417024
49 changed files with 11734 additions and 248 deletions
@@ -134,6 +134,11 @@ body {
font-size: .8rem;
}
.version { color: var(--text-3); }
/* i18n (v0.247.0): the language switch. Language names are shown in their own language, never translated. */
.lang-switch { display: inline-flex; gap: 2px; margin: 0; }
.lang-switch-btn { background: none; border: 1px solid var(--line); border-radius: var(--radius); color: var(--text-3); font: inherit; font-size: .75rem; padding: 0 .35rem; cursor: pointer; }
.lang-switch-btn:hover { color: var(--blue-bright); }
.lang-switch-btn.active { color: var(--text-1); border-color: var(--blue); }
.logout-link { color: var(--text-3); text-decoration: none; transition: color 0.2s ease; }
.logout-link:hover { color: var(--blue-bright); }
/* Mobile chrome (v0.166.0) — hidden by default so desktop (>768px) stays pixel-identical; the