feat: guide d'utilisation - couverture complete, telechargement MD/PDF, section Architecture Mermaid, guide desktop elargi (#105, BUG-067)
CI / lint (push) Successful in 1m40s
CI / security (push) Successful in 1m6s
CI / test (push) Failing after 1m52s
CI / build (push) Skipped
CI / e2e (push) Skipped

This commit is contained in:
2026-09-18 13:06:30 -04:00
parent 82f6b4a791
commit fb2d83e9e3
25 changed files with 2216 additions and 45 deletions
+44
View File
@@ -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")