i18n: EN-Lagen-Seiten + zweisprachiges Kontaktformular (Phase 3+4)

Phase 3 - Englische Lagebild-Seiten:
- /en/situations/iran-conflict/, /en/situations/cyber-attacks/,
  /en/situations/deepfakes/ erstellt (Mirror der DE-Lagen mit
  englischer UI)
- lagebild.js: curLang() liest jetzt direkt <html lang>; neuer
  dataBase()-Helper, damit EN-Seiten die JSON-Daten aus dem
  DE-Pfad nachladen koennen (window.LAGEBILD_DATA_BASE pro Seite)
- 4 zuvor hardcodierte DE-Strings (emptyDevelopments, emptySummary,
  Quelle-Tooltip, Schliessen-Aria) ueber t() und das vorhandene
  lang.de/lang.en-Dictionary uebersetzt
- DE-Lagen-Seiten: hreflang-Tags wieder aktiv, Toggle zeigt nun
  korrekt auf das EN-Pendant statt /en/
- en/index.html Karussell-Buttons zeigen auf EN-Lagen
- Sitemap mit hreflang-Alternativen fuer alle Lagen ergaenzt

Phase 4 - Kontaktformular zweisprachig (Frontend):
- js/app.js submitContact() liest <html lang>, sendet lang im POST
  und zeigt Sende-/Fehler-Texte in der jeweiligen Sprache
- Backend (contact-form.py) wird separat ausgerollt, ist aber
  abwaertskompatibel: bei fehlendem lang-Param defaultet es auf de

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
2026-05-06 23:28:05 +02:00
Ursprung 8c8130509a
Commit 645fb33898
10 geänderte Dateien mit 691 neuen und 26 gelöschten Zeilen

Datei anzeigen

@@ -350,7 +350,7 @@
<div class="demo-excerpt" id="demo-excerpt">
<div class="excerpt-text" id="excerpt-text">Situation report loading...</div>
</div>
<a href="/lagen/iran-konflikt/" class="btn btn-primary btn-block">Open full situation report</a>
<a href="/en/situations/iran-conflict/" class="btn btn-primary btn-block">Open full situation report</a>
</div>
<!-- Cyberattacks -->
<div class="carousel-card card-live" data-index="1" data-lage="cyberangriffe">
@@ -360,7 +360,7 @@
<div class="demo-excerpt" id="demo-excerpt-cyberangriffe">
<div class="excerpt-text" id="excerpt-text-cyberangriffe">Situation report loading...</div>
</div>
<a href="/lagen/cyberangriffe/" class="btn btn-primary btn-block">Open full situation report</a>
<a href="/en/situations/cyber-attacks/" class="btn btn-primary btn-block">Open full situation report</a>
</div>
<!-- Deepfakes Research -->
<div class="carousel-card card-live" data-index="2" data-lage="deepfakes">
@@ -370,7 +370,7 @@
<div class="demo-excerpt" id="demo-excerpt-deepfakes">
<div class="excerpt-text" id="excerpt-text-deepfakes">Research loading...</div>
</div>
<a href="/lagen/deepfakes/" class="btn btn-primary btn-block">Open full research</a>
<a href="/en/situations/deepfakes/" class="btn btn-primary btn-block">Open full research</a>
</div>
</div>
<div class="carousel-nav">