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
+2
View File
@@ -314,6 +314,7 @@ func (s *Server) launcherApps() []LauncherApp {
// "Indítópult megosztása" share state (v0.165.0) for the modal.
func (s *Server) launcherHandler(w http.ResponseWriter, r *http.Request) {
data := s.baseData("launcher", "Indítópult")
data["TitleKey"] = "page.title.launcher" // i18n: the Hungarian title above is what hu renders
s.addRecoveryBanner(data, r) // R-241: the reminder bar, per visit
data["Apps"] = s.launcherApps()
@@ -934,6 +935,7 @@ func offboxWarningDisplay(lastWarning string, toggledCount int) string {
// the status stat cards.
func (s *Server) backupsHandler(w http.ResponseWriter, r *http.Request) {
data := s.backupsCommonData("backups", "Biztonsági mentés", r)
data["TitleKey"] = "page.title.backups" // i18n: the Hungarian title above is what hu renders
// System info for storage overview bars
data["SystemInfo"] = system.GetInfo(s.primaryHDDPath(), s.cpuCollector)