CONTEXT + README: v0.259.0, and the two probe traps that cost the most
gates / gates (push) Successful in 25s
gates / gates (push) Successful in 25s
The composed-sentence-into-page-data class is now five instances and has its own warning block in the README's i18n section, with the two things that make a live probe lie: the felhom_lang cookie is ignored behind auth (so an English probe of /backups returns Hungarian and reads as unfixed), and an apostrophe in an English value is escaped so no assertion on the rendered page ever matches. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
+25
-4
@@ -46,7 +46,7 @@ backups, monitoring and notifications. All Proxmox/disk operations are delegated
|
||||
- [App-to-App Integrations](#15-app-to-app-integrations)
|
||||
- [Network File Sharing — SMB](#16-network-file-sharing--smb-megosztás-v01440-r-7-slice-1)
|
||||
- [Async-job feedback](#17-async-job-feedback-v0147x-feedback-slice-1)
|
||||
- [Dashboard language (i18n)](#18-dashboard-language-i18n-v02470v02500)
|
||||
- [Dashboard language (i18n)](#18-dashboard-language-i18n-v02470v02590)
|
||||
- [Repository Layout](#repository-layout)
|
||||
- [Configuration](#configuration)
|
||||
- [REST API](#rest-api)
|
||||
@@ -3614,7 +3614,7 @@ without reaching `Images()`.
|
||||
|
||||
---
|
||||
|
||||
### 18. Dashboard language (i18n) (v0.247.0–v0.257.0)
|
||||
### 18. Dashboard language (i18n) (v0.247.0–v0.259.0)
|
||||
|
||||
Design: `felhom.eu/documentation/architecture/10-localisation.md`. Inventory:
|
||||
`felhom.eu/documentation/audits/I18N-INVENTORY-2026-09-17.md`.
|
||||
@@ -3626,8 +3626,29 @@ debug). Since **v0.252.0** the sentences the program BUILDS follow the language
|
||||
data, the JSON the page's script reads, the alert banners, the country names, and the four page titles
|
||||
built around an app name. Since **v0.253.0** every error message carries its key too. Since **v0.254.0** the notes a background
|
||||
run SAVES follow the language as well, and the switch is a **globe** — on the dashboard and on the
|
||||
sign-in, claim and recovery pages. Still Hungarian: catalog copy (slice 5) and **everything the hub
|
||||
reads** (see below).
|
||||
sign-in, claim and recovery pages. Since **v0.257.0** the app catalog's own copy follows it, and since
|
||||
**v0.258.0/v0.259.0** so do the last Go-composed sentences: the update and lifecycle badges, the
|
||||
data-folder promise, the channel banners, **the claim page's nine answers (R-596)** and **the Backup
|
||||
page's protection warnings and tier names (R-598)**. Still Hungarian: the one R-570 producer, the 18
|
||||
formal „ön" forms (counted and ratcheted, R-516), **everything the operator reads** (by design), and
|
||||
the apps' own UIs (not ours).
|
||||
|
||||
> **THE ONE FAILURE MODE THIS SECTION EXISTS TO WARN ABOUT: a composed sentence handed to a renderer
|
||||
> as page DATA.** Five instances — R-566, R-573, R-590, R-596, R-598. The template renders
|
||||
> `{{.Error}}` correctly in both languages; only the VALUE is Hungarian. **No structural check sees
|
||||
> it:** not the parity fixtures (they render the field faithfully whatever it holds), not
|
||||
> `TestI18nEnglishPages` (it reads templates, not structs), not `i18n_missing_gate` (there is no key
|
||||
> to be missing), not `i18n_go_parity` (it proves the Hungarian is unchanged, not which language
|
||||
> reached the page). **Only a live English page or a handler-level render test finds one** — and the
|
||||
> render test must assert the Hungarian sentence is **GONE**, not merely that the English is present.
|
||||
>
|
||||
> **Probing it live: the `felhom_lang` cookie works ONLY on anonymous pages** (sign-in, claim,
|
||||
> recovery, bind). `langFor` step 2 means a request carrying a session reads the household's saved
|
||||
> setting and deliberately ignores the cookie — so `/backups` with `felhom_lang=en` returns
|
||||
> **Hungarian**, which reads exactly like an unfixed defect. Use `?lang=` behind auth (R-602).
|
||||
>
|
||||
> **And an English value containing an apostrophe never matches on the page** — `html/template`
|
||||
> escapes `'` to `'`, and the assertion fails saying the sentence never arrived (R-603).
|
||||
|
||||
- **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
|
||||
|
||||
Reference in New Issue
Block a user