i18n: app.js erkennt Sprache und laedt EN-Datenfiles
Die Index-Hauptseite hat noch eine Reihe dynamisch gefuellter Texte (Live-Stats-Bar-Titel, Map-Legende, Default-Kategorie-Labels) und laedt summary.json fuer die Excerpts. Auf der EN-Variante hat das bisher zu sichtbarem deutschen Text gefuehrt. - SITE_LANG wird einmal aus <html lang> abgeleitet - lageTitles existiert pro Sprache - defaultLabels (primary/secondary/tertiary/mentioned) pro Sprache - Legende -> Legend in der Map-Legende - summary.json -> summary_en.json bei EN, mit Fallback auf summary.json wenn EN-Variante nicht existiert (Monitor erzeugt beide bereits) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
38
js/app.js
38
js/app.js
@@ -2,6 +2,10 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
/* ==================== LANGUAGE ==================== */
|
||||
var SITE_LANG = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
|
||||
var SUMMARY_FILE = SITE_LANG === 'en' ? 'summary_en.json' : 'summary.json';
|
||||
|
||||
/* ==================== NAVBAR ==================== */
|
||||
var navbar = document.getElementById('navbar');
|
||||
window.addEventListener('scroll', function () {
|
||||
@@ -197,11 +201,19 @@
|
||||
var lageData = {};
|
||||
var dataLoaded = false;
|
||||
|
||||
var lageTitles = {
|
||||
'iran-konflikt': 'Gro\u00dflage - Irankonflikt',
|
||||
'cyberangriffe': 'Cyberangriffe auf deutsche Infrastruktur',
|
||||
'deepfakes': 'Rechtliche Lage von Deepfakes in Deutschland'
|
||||
var lageTitlesByLang = {
|
||||
de: {
|
||||
'iran-konflikt': 'Gro\u00dflage - Irankonflikt',
|
||||
'cyberangriffe': 'Cyberangriffe auf deutsche Infrastruktur',
|
||||
'deepfakes': 'Rechtliche Lage von Deepfakes in Deutschland'
|
||||
},
|
||||
en: {
|
||||
'iran-konflikt': 'Major situation - Iran conflict',
|
||||
'cyberangriffe': 'Cyberattacks on German infrastructure',
|
||||
'deepfakes': 'Legal status of deepfakes in Germany'
|
||||
}
|
||||
};
|
||||
var lageTitles = lageTitlesByLang[SITE_LANG] || lageTitlesByLang.de;
|
||||
|
||||
/* ==================== 3D CAROUSEL ==================== */
|
||||
var cards = document.querySelectorAll('.carousel-card');
|
||||
@@ -427,7 +439,8 @@ function mdToHtml(md) {
|
||||
}
|
||||
|
||||
function loadLiveData() {
|
||||
fetch('/lagen/iran-konflikt/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/iran-konflikt/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/iran-konflikt/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var inc = data.incident || {};
|
||||
@@ -532,7 +545,12 @@ function mdToHtml(md) {
|
||||
mentioned: '#7b7b7b'
|
||||
};
|
||||
|
||||
var defaultLabels = {
|
||||
var defaultLabels = SITE_LANG === 'en' ? {
|
||||
primary: 'Primary',
|
||||
secondary: 'Reactions',
|
||||
tertiary: 'Involved',
|
||||
mentioned: 'Mentioned'
|
||||
} : {
|
||||
primary: 'Hauptgeschehen',
|
||||
secondary: 'Reaktionen',
|
||||
tertiary: 'Beteiligte',
|
||||
@@ -582,7 +600,7 @@ function mdToHtml(md) {
|
||||
legend.onAdd = function () {
|
||||
var div = L.DomUtil.create('div');
|
||||
div.style.cssText = 'background:#151D2E;padding:10px 14px;border-radius:4px;border:1px solid #1E2D45;box-shadow:0 2px 8px rgba(0,0,0,0.3);font-size:0.8rem;line-height:1.8;color:#E8ECF4;';
|
||||
var html = '<strong style="color:#C8A851;">Legende</strong><br>';
|
||||
var html = '<strong style="color:#C8A851;">' + (SITE_LANG === 'en' ? 'Legend' : 'Legende') + '</strong><br>';
|
||||
['primary', 'secondary', 'tertiary', 'mentioned'].forEach(function (cat) {
|
||||
if (usedCategories[cat]) {
|
||||
html += '<span style="color:' + categoryColors[cat] + ';">●</span> ' + categoryLabels[cat] + '<br>';
|
||||
@@ -669,7 +687,8 @@ function mdToHtml(md) {
|
||||
|
||||
/* ==================== LOAD DEEPFAKES DATA ==================== */
|
||||
function loadDeepfakesData() {
|
||||
fetch('/lagen/deepfakes/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/deepfakes/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/deepfakes/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var excerptEl = document.getElementById('excerpt-text-deepfakes');
|
||||
@@ -696,7 +715,8 @@ function mdToHtml(md) {
|
||||
|
||||
/* ==================== LOAD CYBERANGRIFFE DATA ==================== */
|
||||
function loadCyberangriffeData() {
|
||||
fetch('/lagen/cyberangriffe/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/cyberangriffe/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/cyberangriffe/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var excerptEl = document.getElementById('excerpt-text-cyberangriffe');
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren