feat(i18n): Progress-Popup + Pipeline-Stati lokalisieren

- components._getStepLabel und progress-popup-title nutzen T()
  fuer Erste Recherche laeuft / Aktualisierung laeuft / In Warteschlange
  / Wird abgebrochen.
- pipeline._formatHeader / _relativeTime / _formatCount lokalisiert:
  Status-Texte (erledigt/laeuft/Fehler), Zeitangaben (gerade eben,
  vor X Min/Std/Tagen), Aktualisierung-laeuft-Header.
- dashboard.html: data-i18n auf pipeline-empty, progress-popup-title,
  progress-check-label (4 Stueck).
- Cache-Buster fuer components.js + pipeline.js auf v=20260513d.
Dieser Commit ist enthalten in:
Claude Code
2026-05-13 21:45:18 +00:00
Ursprung b214249a34
Commit 9e3c9559d9
5 geänderte Dateien mit 114 neuen und 31 gelöschten Zeilen

Datei anzeigen

@@ -301,7 +301,7 @@
</div>
<div class="pipeline-body">
<div class="pipeline-stage" id="pipeline-stage" aria-label="Analysepipeline-Visualisierung">
<div class="pipeline-empty" id="pipeline-empty">Noch nie aktualisiert. Starte den ersten Refresh.</div>
<div class="pipeline-empty" id="pipeline-empty" data-i18n="pipeline.empty">Noch nie aktualisiert. Starte den ersten Refresh.</div>
</div>
<aside class="pipeline-sidenote" id="pipeline-sidenote" hidden>
Recherche-Lagen werden mehrfach evaluiert, um das Bild Schritt für Schritt aufzubauen.
@@ -726,9 +726,9 @@
<script src="/static/js/i18n.js?v=20260513a"></script>
<script src="/static/js/api.js?v=20260423a"></script>
<script src="/static/js/ws.js?v=20260316b"></script>
<script src="/static/js/components.js?v=20260513a"></script>
<script src="/static/js/components.js?v=20260513d"></script>
<script src="/static/js/layout.js?v=20260316b"></script>
<script src="/static/js/pipeline.js?v=20260501i"></script>
<script src="/static/js/pipeline.js?v=20260513d"></script>
<script src="/static/js/app.js?v=20260513c"></script>
<script src="/static/js/cluster-data.js?v=20260322f"></script>
<script src="/static/js/tutorial.js?v=20260316z"></script>
@@ -782,7 +782,7 @@
<div class="progress-overlay" id="progress-overlay" style="display:none;">
<div class="progress-popup" id="progress-popup">
<div class="progress-popup-header">
<span class="progress-popup-title" id="progress-popup-title">Aktualisierung läuft</span>
<span class="progress-popup-title" id="progress-popup-title" data-i18n="progress.title.refresh">Aktualisierung läuft</span>
<span class="progress-popup-timer" id="progress-popup-timer"></span>
<button class="progress-popup-minimize" id="progress-popup-minimize" style="display:none;" onclick="App.minimizeProgress()" title="Minimieren">&minus;</button>
</div>
@@ -792,22 +792,22 @@
<div class="progress-checklist" id="progress-checklist" style="display:none;">
<div class="progress-check-item" data-step="queued">
<span class="progress-check-icon"></span>
<span class="progress-check-label">In Warteschlange</span>
<span class="progress-check-label" data-i18n="progress.title.queued">In Warteschlange</span>
<span class="progress-check-detail"></span>
</div>
<div class="progress-check-item" data-step="researching">
<span class="progress-check-icon"></span>
<span class="progress-check-label">Quellen werden durchsucht</span>
<span class="progress-check-label" data-i18n="progress.check.researching">Quellen werden durchsucht</span>
<span class="progress-check-detail"></span>
</div>
<div class="progress-check-item" data-step="analyzing">
<span class="progress-check-icon"></span>
<span class="progress-check-label">Meldungen werden analysiert</span>
<span class="progress-check-label" data-i18n="progress.check.analyzing">Meldungen werden analysiert</span>
<span class="progress-check-detail"></span>
</div>
<div class="progress-check-item" data-step="factchecking">
<span class="progress-check-icon"></span>
<span class="progress-check-label">Faktencheck läuft</span>
<span class="progress-check-label" data-i18n="progress.factcheck_running">Faktencheck läuft</span>
<span class="progress-check-detail"></span>
</div>
</div>