What
exitdrill report receipt.json --lang es --out informe.html renders the offline HTML report in Spanish from a reviewed gettext catalog, with English as the default and the fallback; the result-state names, dimension questions, and every fixed limitation sentence are message IDs whose Spanish text is human-reviewed and pinned byte-for-byte, and a report with any untranslated cover string renders the English string and marks the page "partially translated" rather than dropping the sentence. explain (proposed separately) would share the catalog.
Why it matters
docs/I18N.md declares N/A on the grounds that the report is operator evidence, not a public interface — but the report is precisely the artifact an operator hands to a director, a board, or a funder, and civic organisations in this portfolio's audience include Spanish-speaking ones. This proposal deliberately reopens that declaration, as the declaration itself says it should when a delivery commitment to a bilingual audience appears. The constraint is the project's usual one: the limitation texts are load-bearing claims, so they are never machine-translated silently, and the report-content tests must assert the claims in whichever language rendered. Inside the freeze: strings only, no new evidence or contract.
Scope
- Wrap the report's reader-facing strings in a lookup; extraction template committed;
--lang flag; catalog under src/exitdrill/locales/.
- The disclosure and offline/script-free gates run in both languages; a key-parity gate fails on a missing cover key.
docs/I18N.md updated to "Applies: report surface only", with reviewer and date.
Out of scope
- CLI output, JSON documents, docs, or the canary READMEs; locales beyond
es.
Done when
--lang es on the demo receipt yields a page whose every limitation sentence matches the reviewed catalog exactly, and the English page is byte-identical to today's.
- A catalog missing one non-cover key renders the English fallback plus the marker; a missing cover key fails the build.
- The Spanish page passes the same no-script, no-subresource, and no-record-value assertions.
--lang xx is a usage error listing the available locales.
Pointers
src/exitdrill/report.py, tests/test_report.py, tests/test_disclosure.py, docs/I18N.md
- Portfolio i18n direction (EN/ES) as adopted in sibling repos such as family-greenhouse
Proposed with AI assistance.
What
exitdrill report receipt.json --lang es --out informe.htmlrenders the offline HTML report in Spanish from a reviewed gettext catalog, with English as the default and the fallback; the result-state names, dimension questions, and every fixed limitation sentence are message IDs whose Spanish text is human-reviewed and pinned byte-for-byte, and a report with any untranslated cover string renders the English string and marks the page "partially translated" rather than dropping the sentence.explain(proposed separately) would share the catalog.Why it matters
docs/I18N.mddeclares N/A on the grounds that the report is operator evidence, not a public interface — but the report is precisely the artifact an operator hands to a director, a board, or a funder, and civic organisations in this portfolio's audience include Spanish-speaking ones. This proposal deliberately reopens that declaration, as the declaration itself says it should when a delivery commitment to a bilingual audience appears. The constraint is the project's usual one: the limitation texts are load-bearing claims, so they are never machine-translated silently, and the report-content tests must assert the claims in whichever language rendered. Inside the freeze: strings only, no new evidence or contract.Scope
--langflag; catalog undersrc/exitdrill/locales/.docs/I18N.mdupdated to "Applies: report surface only", with reviewer and date.Out of scope
es.Done when
--lang eson the demo receipt yields a page whose every limitation sentence matches the reviewed catalog exactly, and the English page is byte-identical to today's.--lang xxis a usage error listing the available locales.Pointers
src/exitdrill/report.py,tests/test_report.py,tests/test_disclosure.py,docs/I18N.mdProposed with AI assistance.