35 lines
1.5 KiB
Python
Executable File
35 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Build src/web/i18n/pl.json from scripts/i18n/pl_messages.py and report
|
|
UI strings that have no Polish translation."""
|
|
import json, re, sys
|
|
from pathlib import Path
|
|
|
|
root = Path(__file__).resolve().parents[2]
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
import pl_messages as pl # noqa: E402
|
|
|
|
src = "".join((root / "src/web/js" / f).read_text() for f in ("00-core.js", "10-pages.js"))
|
|
keys = set(m.group(1).replace("\\'", "'") for m in re.finditer(r"\bte?\(\s*'((?:[^'\\]|\\.)*)'", src))
|
|
for m in re.finditer(r"\['\w+', '([^']+)', '(Management|Services|Account|Mailbox)'", src):
|
|
keys.update(m.groups())
|
|
for m in re.finditer(r"(?:STATUS_LABELS|STATUS_HINTS|INTERVAL_LABELS) = \{([^}]*)\}", src):
|
|
keys.update(re.findall(r":\s*'([^']+)'", m.group(1)))
|
|
for m in re.finditer(r"(?:showToast\(|message: )'((?:[^'\\]|\\.)*)'", src):
|
|
keys.add(m.group(1))
|
|
|
|
messages = {**pl.SERVER, **pl.UI}
|
|
missing = sorted(k for k in keys if k not in messages)
|
|
catalog = {
|
|
"language": "pl",
|
|
"messages": dict(sorted(messages.items())),
|
|
"patterns": [{"match": m, "replace": r} for m, r in pl.PATTERNS],
|
|
}
|
|
(root / "src/web/i18n/pl.json").write_text(json.dumps(catalog, ensure_ascii=False, indent=1) + "\n")
|
|
(root / "src/web/i18n/en.json").write_text(json.dumps({"language": "en", "messages": {}, "patterns": []}, indent=1) + "\n")
|
|
print(f"pl.json: {len(messages)} messages, {len(pl.PATTERNS)} patterns")
|
|
if missing:
|
|
print("MISSING translations:")
|
|
for k in missing:
|
|
print(" ", k)
|
|
sys.exit(1)
|