mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-04 05:41:34 +00:00
The complete French dictionary contributed in #371 (1026 keys, zero empty values, zero placeholder mismatches) lands as the second lazy locale on the fr.ts + one static entry. The contributor's snapshot predated this week's keys, so the 121 additions (device inbox #29, backdrop guard #39, junction limits #331, lazy-editor toasts #353/#354, furniture #159) are translated in this commit and flagged in the issue for the author's review; 21 stale pre-#62 keys are dropped; key order follows en.json. The HA integration translations file ships as contributed (full parity). Wiring: loadFrench + __HOUSEPLAN_FR_RETRY_ASSET__ with the same 1/1 replacement guarantee as German; locale roles and localeRoots generalise to (de|fr); the stale-entry fallback panel (#353) gains its French branch — the r1 reviewer caught that this second hardcoded language list would have silently degraded French to English on a cached entry. French profiles (fr, fr-FR, fr-CA, fr-BE, fr-CH) select automatically. Proofs: the registry-driven parity suite covers fr by construction (1128/1128 keys); French analogues of both German-personal tests (product glossary + non-translation scan with a reviewed equal-to-English allow-list of 22 legitimate homographs); smoke_french_locale — fr-CA profile commits French from the real bundle, one lazy chunk per page, initial graph free of fr; smoke_entry_stale gains the French run; a registry mutant drops the fr entry and is killed by the smoke. Initial view: +0.5 KB (registry entry + fallback branch); the 23 KB dictionary is lazy. Issue: #371 User-Visible: yes
Synthetic demo home
A fully fictional house (plans, devices, states) used for README screenshots, the demo GIF and headless smoke tests — so no real home data ever appears in public materials.
srv/demo.html— self-contained host page:<ha-icon>/<ha-card>stubs and a fakehass(registries, states,callWS,callService, floors).srv/assets/— generated plan SVGs andicons.js(node demo/gen_icons.mjs, needs the repo's devDependencies). The card bundle is copied fromdist/:npm run bundle:sync(копия стенда не коммитится, #255).serve.mjs— playwright launcher (route interception, no web server).smoke_*.mjs— feature smoke tests; run with a Chromium installed viaPLAYWRIGHT_BROWSERS_PATH=<dir> npx playwright install chromium-headless-shell.
Note for sandboxed sessions: /tmp does not survive; this directory is the
persistent home of the harness (docs/DEVELOPMENT.md has the LD_LIBRARY_PATH recipe).