fix(i18n): формальный русский перевод + t() во всех шаблонах

- i18n.py: формальный русский (сканирования, панель управления, и т.д.)
- Все шаблоны: замена хардкод-строк на t(key, request.state.lang)
- dashboard_stats_fragment: добавлен request в контекст
This commit is contained in:
Marker689
2026-05-10 07:52:58 +03:00
parent f108464828
commit d11be24c5f
10 changed files with 129 additions and 126 deletions

View File

@@ -1,10 +1,10 @@
{% extends "base.html" %}
{% block title %}{{ pkg_name }} v{{ pkg_version }} — GuardDog Nexus{% endblock %}
{% block title %}{{ t('title_package_detail', request.state.lang, pkg_name, pkg_version) }}{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="/">Home</a>
<a href="/">{{ t('breadcrumb_home', request.state.lang) }}</a>
<span class="separator">/</span>
<a href="/packages">Packages</a>
<a href="/packages">{{ t('breadcrumb_packages', request.state.lang) }}</a>
<span class="separator">/</span>
<span>{{ pkg_name }} v{{ pkg_version }}</span>
</div>
@@ -13,10 +13,10 @@
<h1>{{ pkg_name }} <small>v{{ pkg_version }}</small></h1>
<article class="scan-info-block">
<h2>Scans ({{ scans|length }})</h2>
<h2>{{ t('heading_scans_count', request.state.lang, scans|length) }}</h2>
<table class="compact">
<thead>
<tr><th>ID</th><th>Repo</th><th>Status</th><th>Findings</th><th>Time</th></tr>
<tr><th>{{ t('col_id', request.state.lang) }}</th><th>{{ t('col_repo', request.state.lang) }}</th><th>{{ t('col_status', request.state.lang) }}</th><th>{{ t('col_findings', request.state.lang) }}</th><th>{{ t('col_time', request.state.lang) }}</th></tr>
</thead>
<tbody>
{% for s in scans %}
@@ -34,7 +34,7 @@
</table>
</article>
<h2 style="margin-bottom: 0.75rem;">Findings ({{ findings|length }})</h2>
<h2 style="margin-bottom: 0.75rem;">{{ t('heading_findings_count', request.state.lang, findings|length) }}</h2>
{% if findings %}
<div id="findings-container">
@@ -49,7 +49,7 @@
<p>{{ f.data.message }}</p>
{% if f.data.code %}
<div class="code-toolbar">
<button class="copy-btn" onclick="copyCode(this, 'code-{{ f.id }}')">Copy</button>
<button class="copy-btn" onclick="copyCode(this, 'code-{{ f.id }}')">{{ t('btn_copy', request.state.lang) }}</button>
</div>
<pre><code id="code-{{ f.id }}">{{ f.data.code }}</code></pre>
{% endif %}
@@ -64,7 +64,7 @@
</div>
<p class="llm-summary">{{ f.report.summary }}</p>
<p class="llm-analysis">{{ f.report.analysis }}</p>
<p class="llm-disclaimer">⚠ AI-generated analysis — may contain inaccuracies.</p>
<p class="llm-disclaimer">{{ t('llm_disclaimer', request.state.lang) }}</p>
</div>
{% else %}
<div class="llm-actions" id="llm-{{ f.id }}">
@@ -76,7 +76,7 @@
<span id="llm-spinner-{{ f.id }}" class="htmx-indicator" style="display:none;">
<span class="spinner"></span>
</span>
Analyze with LLM
{{ t('btn_analyze_llm', request.state.lang) }}
</button>
</div>
{% endif %}
@@ -85,6 +85,6 @@
{% endfor %}
</div>
{% else %}
<p class="empty-state">No findings — package looks clean.</p>
<p class="empty-state">{{ t('empty_no_findings', request.state.lang) }}</p>
{% endif %}
{% endblock %}