feat: guide d'utilisation - couverture complete, telechargement MD/PDF, section Architecture Mermaid, guide desktop elargi (#105, BUG-067)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# -*- 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")
|
||||
Reference in New Issue
Block a user