mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-14 19:27:05 -04:00
The Japanese data point in #821 (zitann2020) offered to write its rows against whatever mechanism this PR lands, so both languages share one catalog instead of inventing two. This makes adding a language a data change and reserves `ja`: - `Catalog` holds a language's effect rows and its category labels, and `catalog()` resolves a language code to one; adding a language is two tables and one arm, with no change to the lookups or to any panel. - `JAPANESE_EFFECTS` and `JAPANESE_CATEGORIES` are declared, keyed by the same effect ids and by the registry's English category names, and `ja` resolves to them. Both are empty, so a Japanese interface draws exactly what it drew before — the slot changes no behaviour on its own. - `a_pending_language_only_uses_known_ids` guards the pending tables (Japanese and Traditional Chinese) as rows arrive: an id Simplified Chinese does not know, a different English name for one of them, an empty translation or a repeated id fails. `languages_without_rows_draw_the_registry_name` asserts each pending language has an arm in `catalog()` (a table with no arm would leave a translator's rows dead) and is still row-less, so the day one gets rows the test says where its coverage moved. - `only_the_brand_names_stay_in_english` now documents that it pins *Simplified Chinese's* five brand names and is deliberately not shared: AE's Japanese interface keeps the whole `CC`, `VR` and `OCIO` sets in English while its Chinese one translates them, so repeating the English name is a language's choice and not an unfinished row. The row check reflects that (a repeated English name is accepted, an empty one is not). docs/localization-parity.md records the two empty tables and that each language decides for itself which names stay in English. Refs #821