# -*- coding: utf-8 -*- """Injecte les clés guide105.* de scripts/guide_content.py dans les locales. Insertion TEXTUELLE avant la dernière accolade (préserve le formatage exact des fichiers existants). Idempotent : remplace un bloc guide105.* déjà présent. Écriture LF (comme les blobs git). """ import json import re import sys from pathlib import Path ROOT = Path("C:/dev/git/python/ObsiGate") sys.path.insert(0, str(ROOT / "scripts")) from guide_content import CONTENT # noqa: E402 KEY_RE = re.compile(r'^\s*"guide105\.[a-z0-9_]+"\s*:', re.M) def merge(locale_file: Path, idx: int) -> None: raw = locale_file.read_text(encoding="utf-8") # retire un éventuel ancien bloc (idempotence) raw = "".join(l for l in raw.splitlines(keepends=True) if not KEY_RE.match(l)) data = json.loads(raw) entries = [' "guide105.%s": %s' % (k, json.dumps(v[idx], ensure_ascii=False)) for k, v in CONTENT.items()] block = ",\n".join(entries) + "\n" i = raw.rstrip().rfind("}") head = raw[:i].rstrip() # dernière clé existante (sans virgule finale) new = head + ",\n" + block + "}\n" parsed = json.loads(new) # doit rester valide assert len(parsed) == len(data) + len(CONTENT) locale_file.write_bytes(new.encode("utf-8")) print(locale_file.name, "->", len(parsed), "keys (+%d guide105)" % len(CONTENT)) merge(ROOT / "frontend/locales/fr.json", 0) merge(ROOT / "frontend/locales/en.json", 1) en = json.loads((ROOT / "frontend/locales/en.json").read_bytes().decode("utf-8")) fr = json.loads((ROOT / "frontend/locales/fr.json").read_bytes().decode("utf-8")) assert set(en) == set(fr), sorted(set(en) ^ set(fr))[:5] print("parity OK:", len(en), "keys")