v0.248.0: i18n slice 1 release A — apps and settings in English, Hungarian byte-identical (R-556)
gates / gates (push) Successful in 20s

Ten pages converted against fixtures captured from unconverted templates (6be55a0); marker
coverage test; English page mask narrowed; English retrieval-promise stems; common keys;
title keys and infraMeta from the bundle; old wording tests read the Hungarian expansion.

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 17:36:08 +02:00
parent 6be55a0eb3
commit ff68b0b433
30 changed files with 1690 additions and 651 deletions
+7 -3
View File
@@ -3621,8 +3621,10 @@ Design: `felhom.eu/documentation/architecture/10-localisation.md`. Inventory:
**What a household sees:** nothing new. Hungarian is the default and the only language shown unless
the language is switched. English covers the **launcher**, the **backups overview** (`/backups`), the
**app page** (`/apps/<slug>`) and the shared **layout** (menu, banners, the layout's modals) — other
pages keep their Hungarian body inside an English menu.
**app page** (`/apps/<slug>`), the shared **layout**, and since v0.248.0 the **dashboard, apps list,
logs, monitoring, import, export, deploy/settings-of-an-app and the three settings pages** — other
pages keep their Hungarian body inside an English menu. Server-built messages and catalog copy stay
Hungarian (slices 2 and 5).
- **Bundles:** `internal/i18n/locales/hu.json` (authoritative, every key) and `en.json`, embedded.
Flat `key → text`; a value may carry template actions (`{{.RecoveryAbandonDate}}`) and inline
@@ -3650,7 +3652,9 @@ pages keep their Hungarian body inside an English menu.
exist, no orphans, the English gap and the formal „ön" count only shrink (ratchets), no pleading
English. The emoji, native-confirm, secret-in-markup and retrieval-promise gates read templates
**expanded** through `scripts/i18n_bundle.py`; mojibake scans the bundles.
- **Release gate:** `TestI18nParity` compares the Hungarian render of 14 fixture states with HTML
- **Coverage:** `TestI18nParityCoversEveryMarker` fails when any marker occurrence is rendered by no
parity case. Fixtures are written only when missing (`-update-i18n-golden`, `-i18n-golden-only`).
- **Release gate:** `TestI18nParity` compares the Hungarian render of every fixture state with HTML
captured from the unconverted templates (`internal/web/testdata/i18n_parity/`). Fixtures are never
regenerated to make a conversion pass.