exporter: translate module skip/warning reasons into russian

This commit is contained in:
Andrew Pimenov 2026-08-09 11:11:08 +03:00
parent 1821674376
commit 2e84c434c0
2 changed files with 44 additions and 2 deletions

View file

@ -114,6 +114,20 @@ def _t(lang: str, en: str, ru: str) -> str:
return en if lang == "en" else ru return en if lang == "en" else ru
_WARNING_RU = {
"no ASN was resolved for this target": "для этой цели не удалось определить ASN",
"no egress IP to check": "нет внешнего IP для проверки",
"ABUSEIPDB_API_KEY not set — abuse score skipped": "ABUSEIPDB_API_KEY не задан — оценка abuse пропущена",
"speedtest skipped: --quick": "speedtest пропущен: --quick",
"speedtest skipped in target mode": "speedtest пропущен в режиме цели",
"no throughput measured": "пропускная способность не измерена",
}
def _warning(lang: str, text: str) -> str:
return text if lang == "en" else _WARNING_RU.get(text, text)
def sparkline(values: list[float | None]) -> str: def sparkline(values: list[float | None]) -> str:
numbers = [v for v in values if v is not None] numbers = [v for v in values if v is not None]
if not numbers: if not numbers:
@ -260,7 +274,7 @@ def unavailable(report: dict[str, Any], section: str, lang: str = "en") -> str |
return None return None
detail = "; ".join(f"{e.get('source')}: {e.get('message')}" for e in module.get("errors") or []) detail = "; ".join(f"{e.get('source')}: {e.get('message')}" for e in module.get("errors") or [])
if not detail: if not detail:
detail = "; ".join(module.get("warnings") or []) detail = "; ".join(_warning(lang, w) for w in module.get("warnings") or [])
if not detail: if not detail:
detail = _t(lang, "no data was collected for this section", "для этого раздела не собраны данные") detail = _t(lang, "no data was collected for this section", "для этого раздела не собраны данные")
status_word = _module_status_word(module.get("status", "skipped"), lang) status_word = _module_status_word(module.get("status", "skipped"), lang)
@ -641,7 +655,7 @@ def _diagnostics(report: dict, lang: str = "en") -> list[str]:
lang, lang,
) )
if warnings: if warnings:
lines += [""] + [f"- {w}" for w in warnings] lines += [""] + [f"- {_warning(lang, w)}" for w in warnings]
return lines + [""] return lines + [""]

View file

@ -589,6 +589,34 @@ def test_unavailable_surfaces_the_skip_reason_from_warnings():
assert "speedtest skipped in target mode" in note assert "speedtest skipped in target mode" in note
def test_unavailable_translates_the_skip_reason_into_russian():
report = build_report(
meta(),
{"speed": ModuleResult(name="speed", status="skipped", warnings=["speedtest skipped: --quick"])},
[],
{},
)
note = unavailable(report, "speed", lang="ru")
assert note is not None
assert "speedtest skipped: --quick" not in note
assert "speedtest пропущен: --quick" in note
def test_diagnostics_translates_module_warnings_into_russian():
from netcheck.exporter import _diagnostics
report = build_report(
meta(),
{"reputation": ModuleResult(name="reputation", status="partial", warnings=["ABUSEIPDB_API_KEY not set — abuse score skipped"])},
[],
{},
)
lines = _diagnostics(report, lang="ru")
text = "\n".join(lines)
assert "ABUSEIPDB_API_KEY not set — abuse score skipped" not in text
assert "ABUSEIPDB_API_KEY не задан" in text
def test_an_all_modules_failed_run_still_renders_every_section(): def test_an_all_modules_failed_run_still_renders_every_section():
text = render_markdown(dead_report()) text = render_markdown(dead_report())
headings = [line for line in text.splitlines() if line.startswith("## ")] headings = [line for line in text.splitlines() if line.startswith("## ")]