diff --git a/lagen/iran-konflikt/lagebild.js b/lagen/iran-konflikt/lagebild.js index 70e71bb..67621ff 100644 --- a/lagen/iran-konflikt/lagebild.js +++ b/lagen/iran-konflikt/lagebild.js @@ -14,6 +14,78 @@ var Lagebild = { timelineGroups: null, /* ===== Inline SVG Icons ===== */ + /* ===== LANGUAGE SUPPORT ===== */ + lang: { + de: { + hero: "LAGEBILD", heroResearch: "RECHERCHE", + tabBriefing: "Lagebild", tabBriefingResearch: "Recherche", + tabMap: "Karte", tabFactchecks: "Faktenchecks", tabSources: "Quellen", + statArticles: "Artikel", statSources: "Quellen", statFactchecks: "Faktenchecks", + dataSource: "Daten bereitgestellt durch AegisSight Monitor", + timelineCurrent: "Aktuell", timelineArticles: "Artikel", timelineFcs: "Faktenchecks", + srcArticlesFrom: "{count} Artikel aus {sources} Quellen", + srcArticle: "Artikel", srcClose: "Schlie\u00dfen", + mapNoData: "Keine Standortdaten verf\u00fcgbar", mapLegend: "Legende", mapArticles: "Artikel", + fcTotal: "Gesamt", fcConfirmed: "Best\u00e4tigt", fcOpen: "Offen", fcContradicted: "Widerlegt", + fcEvidence: "Evidenz:", fcProgression: "Verlauf:", fcSources: "unabh\u00e4ngige Quellen", + fcNone: "Keine Faktenchecks verf\u00fcgbar.", + fcCleaned: "{count} von {total} Faktenchecks verf\u00fcgbar (\u00e4ltere wurden bereinigt)", + ctaText: "AegisSight Monitor f\u00fcr Ihre Organisation", ctaButton: "Kontakt aufnehmen \u2192", + errorLoad: "Das Lagebild konnte nicht geladen werden. Bitte versuchen Sie es sp\u00e4ter erneut.", + snapshotHint: "", + standPrefix: "Stand: ", standSuffix: " Uhr", + stConfirmed: "Best\u00e4tigt", stUnconfirmed: "Unbest\u00e4tigt", stContradicted: "Widerlegt", + stDeveloping: "Unklar", stEstablished: "Gesichert", stDisputed: "Umstritten", + stFalse: "Falsch", stUnverified: "Nicht verifiziert", + sourceRef: "Quelle", + lastUpdate: "Letzte Aktualisierung: ", + minAgo: "vor {n} Min", hrsAgo: "vor {n} Std", + }, + en: { + hero: "SITUATION REPORT", heroResearch: "RESEARCH BRIEFING", + tabBriefing: "Briefing", tabBriefingResearch: "Research", + tabMap: "Map", tabFactchecks: "Fact Checks", tabSources: "Sources", + statArticles: "Articles", statSources: "Sources", statFactchecks: "Fact Checks", + dataSource: "Data provided by AegisSight Monitor", + timelineCurrent: "Current", timelineArticles: "Articles", timelineFcs: "Fact Checks", + srcArticlesFrom: "{count} articles from {sources} sources", + srcArticle: "Articles", srcClose: "Close", + mapNoData: "No location data available", mapLegend: "Legend", mapArticles: "Articles", + fcTotal: "Total", fcConfirmed: "Confirmed", fcOpen: "Open", fcContradicted: "Contradicted", + fcEvidence: "Evidence:", fcProgression: "History:", fcSources: "independent sources", + fcNone: "No fact checks available.", + fcCleaned: "{count} of {total} fact checks available (older ones were cleaned up)", + ctaText: "AegisSight Monitor for your organization", ctaButton: "Contact us \u2192", + errorLoad: "The briefing could not be loaded. Please try again later.", + snapshotHint: "Historical data available in German only", + standPrefix: "As of: ", standSuffix: "", + stConfirmed: "Confirmed", stUnconfirmed: "Unconfirmed", stContradicted: "Contradicted", + stDeveloping: "Developing", stEstablished: "Established", stDisputed: "Disputed", + stFalse: "False", stUnverified: "Unverified", + sourceRef: "Source", + lastUpdate: "Last update: ", + minAgo: "{n} min ago", hrsAgo: "{n} hrs ago", + } + }, + + curLang: function() { + return (typeof getCurrentLanguage === 'function') ? getCurrentLanguage() : 'de'; + }, + + t: function(key) { + var cl = this.curLang(); + return (this.lang[cl] && this.lang[cl][key]) || this.lang.de[key] || key; + }, + + getLocale: function() { + return this.curLang() === 'en' ? 'en-GB' : 'de-DE'; + }, + + getHeadline: function(article) { + if (this.curLang() === 'en') return article.headline || article.headline_de || ''; + return article.headline_de || article.headline || ''; + }, + icons: { clock: '', fileText: '', @@ -29,7 +101,10 @@ var Lagebild = { this.initScrollProgress(); this.initParticles(); try { - var resp = await fetch('data/current.json?t=' + Date.now()); + var savedLang = (typeof getCurrentLanguage === 'function') ? getCurrentLanguage() : 'de'; + var jsonFile = savedLang === 'en' ? 'data/current_en.json' : 'data/current.json'; + var resp = await fetch(jsonFile + '?t=' + Date.now()); + if (!resp.ok && savedLang === 'en') { resp = await fetch('data/current.json?t=' + Date.now()); } if (!resp.ok) throw new Error('HTTP ' + resp.status); this.data = await resp.json(); this.currentView = { @@ -147,11 +222,11 @@ var Lagebild = { var d = this.data; var genDate = new Date(this.toUTC(d.generated_at)); var diffMin = Math.max(1, Math.round((Date.now() - genDate.getTime()) / 60000)); - var diffText = diffMin < 60 ? ('vor ' + diffMin + ' Min') : ('vor ' + Math.round(diffMin / 60) + ' Std'); + var diffText = diffMin < 60 ? this.t('minAgo').replace('{n}', diffMin) : this.t('hrsAgo').replace('{n}', Math.round(diffMin / 60)); container.innerHTML = '
Keine Faktenchecks verfügbar.
'; + document.getElementById('factchecks-content').innerHTML = '' + this.t('fcNone') + '
'; return; } @@ -844,18 +910,18 @@ var Lagebild = { // Stat cards (clickable filters) var h = 'Das Lagebild konnte nicht geladen werden. Bitte versuchen Sie es sp\u00e4ter erneut.
' + this.t('errorLoad') + '