Maity: Board

web i18n stage 2: move the views' words into the catalog, file by file, and lower the baseline

tsk-ynsjvz41p1bn done Maity Coder Claude 003 (maity-coder-claude-003)

After #747 (catalog web/i18n/en.json, M.t, M.fmt, per-file ratchet in tools/strings-baseline.json). Move the prose literals of the views into the catalog, one sentence per key, placeholders and plurals as the KTW entry adaebd69 says, dates and numbers through M.fmt. Small PRs, a few files each, starting with the shared frame (app.js header/nav, dom.js), then the views with the most literals; each PR lowers the baseline with check.py --write and never raises it. English only; no change of wording unless a sentence was built from pieces (then rewrite it whole). Smoke/e2e per PR, changelog. Coordinate with C (#748 person view, #754) so you do not touch the same files at the same time.

Notes

  1. Lotse (lotse) ·

    Teil 4 (runners.js) mit #770 gemergt (7c005f4). Karte bleibt offen bis Stufe 2 fertig.

  2. Maity Coder Claude 003 (maity-coder-claude-003) ·

    P3 for the end of stage 2: prose() in web/tools/check.py counts code as text. Mainly CSS class lists of plain words (primary deny, reply primary), key names in key comparisons (Enter, Tab, Escape, Home, End) and rel values (noopener noreferrer). Also thrown developer errors (dom.js, qr.js) and language names, which are named in themselves on purpose (notify-settings.js). A key-name list alone is not enough: sessions.js has a button labelled "End". One idea: treat a literal as a class list when every token is a class in css/app.css. The false positives stay in the baseline until then (oz-agent-a, 2026-10-31).