A message a catalog lacks, or translates as an empty string, shows in
English and fails nothing:
- build.rs no longer requires every formats catalog to carry the same
messages, and tr_format! gets a last arm that formats the English
source, so a message no catalog has builds.
- Coverage tests (every language translates X) and tests of one
language's exact wording are gone; the language-switching, layout,
date, placeholder and user-value tests read the catalog's own value
instead of a hard-coded translation.
- i18n::tests::translation_gaps_report lists, per language, the plain
and format messages it lacks and its untranslated What's New lines.
It always passes; cargo xtask ci
runs it from the test step's binary after the tests.
- catalogs_load checks that every catalog file is a JSON object of
strings with each key once; it.json named "Dimensions" twice.
Independent AI review of the catalog catch-up (not a native speaker):
reflexive-possessive fix in the raw recheck messages, crash dialog
wording aligned with the existing startup failure message, Solo Mode
named after Edit Sections, bracket set term unified with the existing
catalog, Favorite star tooltip as a neutral state label, and smaller
wording fixes. The counts in docs/localization-cs.md now match the
catalogs (2 394 messages, 297 format templates).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the Czech catalog (2,056 UI messages, 246 format templates), the
language-menu entry, locale detection (cs, cs-CZ, cs_CZ.UTF-8) and
regression tests for switching, persistence, dates, placeholders and
glyphs. Translate a few face/model, person and HDR/PDF captions through
the existing tr() interface. Settings > Language now wraps its buttons,
since twelve language names no longer fit a narrow window.
What's New prose stays English, like most catalogs. AI-assisted, with
an independent review pass; not yet proofread by a native speaker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>