feat(i18n): manifest translation extract/merge tool + en catalog

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
BenStullsBets
2026-06-29 18:49:52 -07:00
parent 1977e679ee
commit dcdc3d62f7
4 changed files with 1339 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
import copy
import pytest
from tools.i18n.translate_manifest import extract_en_catalog, merge_catalog
MANIFEST = {
"clips": [
{"id": "cosmos", "strings": {"en": {
"detected.star": ["star", "young star"],
"measure.distance": "≈7,500 ly",
}}},
]
}
def test_extract_pulls_every_en_string():
cat = extract_en_catalog(MANIFEST)
assert cat == {"cosmos": {"detected.star": ["star", "young star"], "measure.distance": "≈7,500 ly"}}
def test_merge_writes_lang_and_leaves_en():
m = copy.deepcopy(MANIFEST)
cat = {"cosmos": {"detected.star": ["estrella", "estrella joven"], "measure.distance": "≈7.500 al"}}
merge_catalog(m, "es", cat)
s = m["clips"][0]["strings"]
assert s["en"]["measure.distance"] == "≈7,500 ly" # en untouched
assert s["es"]["detected.star"] == ["estrella", "estrella joven"]
def test_merge_is_idempotent():
m = copy.deepcopy(MANIFEST)
cat = {"cosmos": {"detected.star": ["estrella", "estrella joven"], "measure.distance": "≈7.500 al"}}
merge_catalog(m, "es", cat)
once = copy.deepcopy(m)
merge_catalog(m, "es", cat)
assert m == once
def test_merge_rejects_tier_length_mismatch():
m = copy.deepcopy(MANIFEST)
bad = {"cosmos": {"detected.star": ["estrella"], "measure.distance": "≈7.500 al"}} # 1 tier vs en's 2
with pytest.raises(ValueError):
merge_catalog(m, "es", bad)
def test_merge_rejects_type_mismatch():
m = copy.deepcopy(MANIFEST)
bad = {"cosmos": {"detected.star": "estrella", "measure.distance": "≈7.500 al"}} # str vs en's list
with pytest.raises(ValueError):
merge_catalog(m, "es", bad)