All files / scripts/article-template constants.ts

100% Statements 13/13
100% Branches 0/0
100% Functions 0/0
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268                                                15x                                       15x                                       15x                                       15x                 15x                                       15x                                       15x                                       15x                               15x                                         15x             15x                                         15x                                                                 15x                                
/**
 * @module article-template/constants
 * @description Localisation lookup tables for article template rendering.
 * Contains breadcrumb, footer, tagline, locale, event calendar, and watch
 * section translations for all 14 supported languages.
 *
 * @author Hack23 AB
 * @license Apache-2.0
 */
 
import type { Language } from '../types/language.js';
import type { BreadcrumbLabels, FooterLabelSet } from '../types/content.js';
 
/** Type labels for article categories per language */
export interface TypeLabels {
  readonly prospective: string;
  readonly retrospective: string;
  readonly analysis: string;
  readonly breaking: string;
}
 
/**
 * Breadcrumb translations for all supported languages
 */
export const BREADCRUMB_TRANSLATIONS: Record<Language, BreadcrumbLabels> = {
  en: { home: 'Home', news: 'News' },
  sv: { home: 'Hem', news: 'Nyheter' },
  da: { home: 'Hjem', news: 'Nyheder' },
  no: { home: 'Hjem', news: 'Nyheter' },
  fi: { home: 'Etusivu', news: 'Uutiset' },
  de: { home: 'Startseite', news: 'Nachrichten' },
  fr: { home: 'Accueil', news: 'Actualités' },
  es: { home: 'Inicio', news: 'Noticias' },
  nl: { home: 'Home', news: 'Nieuws' },
  ar: { home: 'الرئيسية', news: 'أخبار' },
  he: { home: 'בית', news: 'חדשות' },
  ja: { home: 'ホーム', news: 'ニュース' },
  ko: { home: '홈', news: '뉴스' },
  zh: { home: '主页', news: '新闻' }
};
 
/**
 * Footer label translations for all 14 languages
 */
export const FOOTER_LABELS: Record<Language, FooterLabelSet> = {
  en: { sourcesTitle: 'Sources and Data', dataSources: 'Data Sources', generatedBy: 'Generated by', generatedByValue: 'Automated News System using riksdag-regering-mcp', analysisTools: 'Analysis Tools', analysisToolsValue: 'AI-assisted journalism with human editorial oversight', backToNews: 'Back to News' },
  sv: { sourcesTitle: 'Källor och data', dataSources: 'Datakällor', generatedBy: 'Genererad av', generatedByValue: 'Automatiserat nyhetssystem med riksdag-regering-mcp', analysisTools: 'Analysverktyg', analysisToolsValue: 'AI-assisterad journalistik med mänsklig granskning', backToNews: 'Tillbaka till nyheter' },
  da: { sourcesTitle: 'Kilder og data', dataSources: 'Datakilder', generatedBy: 'Genereret af', generatedByValue: 'Automatiseret nyhedssystem med riksdag-regering-mcp', analysisTools: 'Analyseværktøjer', analysisToolsValue: 'AI-assisteret journalistik med redaktionel gennemgang', backToNews: 'Tilbage til nyheder' },
  no: { sourcesTitle: 'Kilder og data', dataSources: 'Datakilder', generatedBy: 'Generert av', generatedByValue: 'Automatisert nyhetssystem med riksdag-regering-mcp', analysisTools: 'Analyseverktøy', analysisToolsValue: 'AI-assistert journalistikk med redaksjonell gjennomgang', backToNews: 'Tilbake til nyheter' },
  fi: { sourcesTitle: 'Lähteet ja data', dataSources: 'Datalähteet', generatedBy: 'Luonut', generatedByValue: 'Automatisoitu uutisjärjestelmä riksdag-regering-mcp:llä', analysisTools: 'Analyysityökalut', analysisToolsValue: 'Tekoälyavusteinen journalismi toimituksellisella valvonnalla', backToNews: 'Takaisin uutisiin' },
  de: { sourcesTitle: 'Quellen und Daten', dataSources: 'Datenquellen', generatedBy: 'Erstellt von', generatedByValue: 'Automatisiertes Nachrichtensystem mit riksdag-regering-mcp', analysisTools: 'Analysewerkzeuge', analysisToolsValue: 'KI-gestützter Journalismus mit redaktioneller Aufsicht', backToNews: 'Zurück zu Nachrichten' },
  fr: { sourcesTitle: 'Sources et données', dataSources: 'Sources de données', generatedBy: 'Généré par', generatedByValue: 'Système automatisé avec riksdag-regering-mcp', analysisTools: 'Outils d\'analyse', analysisToolsValue: 'Journalisme assisté par IA avec supervision rédactionnelle', backToNews: 'Retour aux actualités' },
  es: { sourcesTitle: 'Fuentes y datos', dataSources: 'Fuentes de datos', generatedBy: 'Generado por', generatedByValue: 'Sistema automatizado con riksdag-regering-mcp', analysisTools: 'Herramientas de análisis', analysisToolsValue: 'Periodismo asistido por IA con supervisión editorial', backToNews: 'Volver a noticias' },
  nl: { sourcesTitle: 'Bronnen en data', dataSources: 'Databronnen', generatedBy: 'Gegenereerd door', generatedByValue: 'Geautomatiseerd nieuwssysteem met riksdag-regering-mcp', analysisTools: 'Analysetools', analysisToolsValue: 'AI-ondersteunde journalistiek met redactioneel toezicht', backToNews: 'Terug naar nieuws' },
  ar: { sourcesTitle: 'المصادر والبيانات', dataSources: 'مصادر البيانات', generatedBy: 'تم إنشاؤه بواسطة', generatedByValue: 'نظام أخبار آلي مع riksdag-regering-mcp', analysisTools: 'أدوات التحليل', analysisToolsValue: 'صحافة بمساعدة الذكاء الاصطناعي مع إشراف تحريري', backToNews: 'العودة إلى الأخبار' },
  he: { sourcesTitle: 'מקורות ונתונים', dataSources: 'מקורות נתונים', generatedBy: 'נוצר על ידי', generatedByValue: 'מערכת חדשות אוטומטית עם riksdag-regering-mcp', analysisTools: 'כלי ניתוח', analysisToolsValue: 'עיתונות בסיוע AI עם פיקוח עריכתי', backToNews: 'חזרה לחדשות' },
  ja: { sourcesTitle: 'ソースとデータ', dataSources: 'データソース', generatedBy: '生成者', generatedByValue: 'riksdag-regering-mcpによる自動ニュースシステム', analysisTools: '分析ツール', analysisToolsValue: 'AI支援ジャーナリズム(編集監督付き)', backToNews: 'ニュースに戻る' },
  ko: { sourcesTitle: '출처 및 데이터', dataSources: '데이터 소스', generatedBy: '생성자', generatedByValue: 'riksdag-regering-mcp 자동 뉴스 시스템', analysisTools: '분석 도구', analysisToolsValue: '편집 감독이 있는 AI 지원 저널리즘', backToNews: '뉴스로 돌아가기' },
  zh: { sourcesTitle: '来源和数据', dataSources: '数据来源', generatedBy: '生成者', generatedByValue: '使用riksdag-regering-mcp的自动新闻系统', analysisTools: '分析工具', analysisToolsValue: '人工编辑监督下的AI辅助新闻', backToNews: '返回新闻' }
};
 
/**
 * Site tagline translations for all 14 languages
 */
export const SITE_TAGLINE: Record<Language, string> = {
  en: 'Latest news and analysis from Sweden\'s Riksdag. The Economist-style political journalism covering parliament, government, and agencies with systematic transparency.',
  sv: 'Senaste nyheter och analyser från Sveriges riksdag. Politisk journalistik i The Economist-stil som bevakar riksdagen, regeringen och myndigheter med systematisk transparens.',
  da: 'Seneste nyheder og analyser fra Sveriges Riksdag. Politisk journalistik i The Economist-stil, der dækker parlament, regering og myndigheder med systematisk gennemsigtighed.',
  no: 'Siste nyheter og analyser fra Sveriges riksdag. Politisk journalistikk i The Economist-stil som dekker parlament, regjering og myndigheter med systematisk åpenhet.',
  fi: 'Uusimmat uutiset ja analyysit Ruotsin valtiopäiviltä. The Economist -tyylinen poliittinen journalismi, joka kattaa eduskunnan, hallituksen ja viranomaiset järjestelmällisellä läpinäkyvyydellä.',
  de: 'Aktuelle Nachrichten und Analysen aus dem schwedischen Riksdag. Politischer Journalismus im Economist-Stil über Parlament, Regierung und Behörden mit systematischer Transparenz.',
  fr: 'Dernières nouvelles et analyses du Riksdag suédois. Journalisme politique de style The Economist couvrant le parlement, le gouvernement et les agences avec une transparence systématique.',
  es: 'Últimas noticias y análisis del Riksdag sueco. Periodismo político al estilo The Economist que cubre el parlamento, el gobierno y las agencias con transparencia sistemática.',
  nl: 'Laatste nieuws en analyses van de Zweedse Riksdag. Politieke journalistiek in Economist-stijl over parlement, regering en instanties met systematische transparantie.',
  ar: 'أحدث الأخبار والتحليلات من البرلمان السويدي. صحافة سياسية بأسلوب ذا إيكونوميست تغطي البرلمان والحكومة والوكالات بشفافية منهجية.',
  he: 'חדשות ניתוחים אחרונים מהריקסדאג השוודי. עיתונות פוליטית בסגנון האקונומיסט המכסה פרלמנט, ממשלה וסוכנויות עם שקיפות שיטתית.',
  ja: 'スウェーデン議会リクスダーグの最新ニュースと分析。議会、政府、機関を体系的な透明性で報道するエコノミスト・スタイルの政治ジャーナリズム。',
  ko: '스웨덴 의회 릭스다그의 최신 뉴스와 분석. 체계적인 투명성으로 의회, 정부, 기관을 다루는 이코노미스트 스타일의 정치 저널리즘.',
  zh: '来自瑞典议会的最新新闻和分析。以经济学人风格的政治新闻,以系统性透明度报道议会、政府和机构。'
};
 
/**
 * OG locale map for all 14 languages
 */
export const OG_LOCALE_MAP: Record<Language, string> = {
  en: 'en_US', sv: 'sv_SE', da: 'da_DK', no: 'nb_NO', fi: 'fi_FI',
  de: 'de_DE', fr: 'fr_FR', es: 'es_ES', nl: 'nl_NL', ar: 'ar_SA',
  he: 'he_IL', ja: 'ja_JP', ko: 'ko_KR', zh: 'zh_CN'
};
 
/**
 * Article category type labels for all 14 languages
 */
export const TYPE_LABELS: Record<Language, TypeLabels> = {
  en: { prospective: 'The Week Ahead', retrospective: 'Weekly Review', analysis: 'Analysis', breaking: 'Breaking News' },
  sv: { prospective: 'Veckan som kommer', retrospective: 'Veckans återblick', analysis: 'Analys', breaking: 'Senaste nytt' },
  da: { prospective: 'Ugen fremover', retrospective: 'Ugens tilbageblik', analysis: 'Analyse', breaking: 'Seneste nyt' },
  no: { prospective: 'Uka som kommer', retrospective: 'Ukens tilbakeblikk', analysis: 'Analyse', breaking: 'Siste nytt' },
  fi: { prospective: 'Tuleva viikko', retrospective: 'Viikon katsaus', analysis: 'Analyysi', breaking: 'Viimeisimmät' },
  de: { prospective: 'Woche voraus', retrospective: 'Wochenrückblick', analysis: 'Analyse', breaking: 'Eilmeldung' },
  fr: { prospective: 'Semaine à venir', retrospective: 'Revue de la semaine', analysis: 'Analyse', breaking: 'Dernière heure' },
  es: { prospective: 'Semana próxima', retrospective: 'Revisión semanal', analysis: 'Análisis', breaking: 'Última hora' },
  nl: { prospective: 'Week vooruit', retrospective: 'Weekoverzicht', analysis: 'Analyse', breaking: 'Laatste nieuws' },
  ar: { prospective: 'الأسبوع القادم', retrospective: 'مراجعة الأسبوع', analysis: 'تحليل', breaking: 'أخبار عاجلة' },
  he: { prospective: 'השבוע הקרוב', retrospective: 'סיכום שבועי', analysis: 'ניתוח', breaking: 'חדשות אחרונות' },
  ja: { prospective: '来週の展望', retrospective: '週間レビュー', analysis: '分析', breaking: '速報' },
  ko: { prospective: '다음 주 전망', retrospective: '주간 리뷰', analysis: '분석', breaking: '속보' },
  zh: { prospective: '下周展望', retrospective: '每周回顾', analysis: '分析', breaking: '突发新闻' }
};
 
/**
 * Event calendar section titles for all 14 languages
 */
export const EVENT_CALENDAR_TITLES: Record<Language, string> = {
  en: 'Event Calendar',
  sv: 'Veckans händelser',
  da: 'Ugens begivenheder',
  no: 'Ukens hendelser',
  fi: 'Viikon tapahtumat',
  de: 'Veranstaltungskalender',
  fr: 'Calendrier des événements',
  es: 'Calendario de eventos',
  nl: 'Evenementenkalender',
  ar: 'تقويم الأحداث',
  he: 'לוח אירועים',
  ja: 'イベントカレンダー',
  ko: '일정 캘린더',
  zh: '活动日历'
};
 
/**
 * Watch section titles for all 14 languages
 */
export const WATCH_SECTION_TITLES: Record<Language, string> = {
  en: 'What to Watch This Week',
  sv: 'Vad man ska följa denna vecka',
  da: 'Hvad man skal følge denne uge',
  no: 'Hva man bør følge denne uken',
  fi: 'Mitä seurata tällä viikolla',
  de: 'Worauf diese Woche zu achten ist',
  fr: 'À suivre cette semaine',
  es: 'Qué observar esta semana',
  nl: 'Wat te volgen deze week',
  ar: 'ما يجب متابعته هذا الأسبوع',
  he: 'מה לעקוב אחריו השבוע',
  ja: '今週の注目ポイント',
  ko: '이번 주 주목할 사항',
  zh: '本周关注要点'
};
 
/**
 * Locale map for Intl date formatting across all 14 languages
 */
export const LOCALE_MAP: Record<string, string> = {
  en: 'en-GB', sv: 'sv-SE', da: 'da-DK', no: 'no-NO', fi: 'fi-FI',
  de: 'de-DE', fr: 'fr-FR', es: 'es-ES', nl: 'nl-NL', ar: 'ar-SA',
  he: 'he-IL', ja: 'ja-JP', ko: 'ko-KR', zh: 'zh-CN'
};
 
/** Language display data for the article language switcher */
export interface LangDisplay {
  readonly flag: string;
  readonly name: string;
}
 
/**
 * Language display names with flag emojis for all 14 languages.
 * Used by the article language switcher nav.
 */
export const LANG_DISPLAY: Record<Language, LangDisplay> = {
  en: { flag: '🇬🇧', name: 'English' },
  sv: { flag: '🇸🇪', name: 'Svenska' },
  da: { flag: '🇩🇰', name: 'Dansk' },
  no: { flag: '🇳🇴', name: 'Norsk' },
  fi: { flag: '🇫🇮', name: 'Suomi' },
  de: { flag: '🇩🇪', name: 'Deutsch' },
  fr: { flag: '🇫🇷', name: 'Français' },
  es: { flag: '🇪🇸', name: 'Español' },
  nl: { flag: '🇳🇱', name: 'Nederlands' },
  ar: { flag: '🇸🇦', name: 'العربية' },
  he: { flag: '🇮🇱', name: 'עברית' },
  ja: { flag: '🇯🇵', name: '日本語' },
  ko: { flag: '🇰🇷', name: '한국어' },
  zh: { flag: '🇨🇳', name: '中文' }
};
 
/**
 * All 14 supported language codes in display order.
 * Single source of truth — derived from LANG_DISPLAY keys.
 */
export const ALL_LANG_CODES: readonly Language[] = Object.keys(LANG_DISPLAY) as Language[];
 
/**
 * Localized aria-label for the language switcher nav element.
 * Used on the `<nav>` wrapping article language links so screen readers
 * announce the landmark in the page's own language.
 */
export const LANG_SWITCHER_ARIA_LABELS: Record<Language, string> = {
  en: 'Language versions',
  sv: 'Språkversioner',
  da: 'Sprogversioner',
  no: 'Språkversjoner',
  fi: 'Kieliversiot',
  de: 'Sprachversionen',
  fr: 'Versions linguistiques',
  es: 'Versiones de idioma',
  nl: 'Taalversies',
  ar: 'إصدارات اللغة',
  he: 'גרסאות שפה',
  ja: '言語バージョン',
  ko: '언어 버전',
  zh: '语言版本'
};
 
/**
 * Localized aria-label text for language grid links in the footer.
 * Matches the pattern used in index.html (e.g. "Switch to English", "Byt till Svenska").
 */
export const LANG_ARIA_LABELS: Record<Language, string> = {
  en: 'Switch to English',
  sv: 'Byt till Svenska',
  da: 'Skift til Dansk',
  no: 'Bytt til Norsk',
  fi: 'Vaihda Suomeksi',
  de: 'Wechseln zu Deutsch',
  fr: 'Passer au Français',
  es: 'Cambiar a Español',
  nl: 'Schakel naar Nederlands',
  ar: 'التبديل إلى العربية',
  he: 'עבור לעברית',
  ja: '日本語に切り替え',
  ko: '한국어로 전환',
  zh: '切换到中文'
};
 
/**
 * Site footer section heading translations for all 14 languages
 */
export const SITE_FOOTER_LABELS: Record<Language, {
  readonly about: string;
  readonly aboutText: string;
  readonly quickLinks: string;
  readonly builtBy: string;
  readonly builtByText: string;
  readonly languages: string;
  readonly dashboard: string;
  readonly location: string;
  readonly statMPs: string;
  readonly statRiskRules: string;
  readonly statLanguages: string;
  readonly statHistoricalData: string;
}> = {
  en: { about: 'About Riksdagsmonitor', aboutText: 'Live intelligence platform for Swedish Parliament monitoring using CIA OSINT capabilities.', quickLinks: 'Quick Links', builtBy: 'Built by Hack23 AB', builtByText: 'Swedish cybersecurity consultancy specializing in political transparency and open-source intelligence.', languages: 'Languages', dashboard: 'Dashboard', location: 'Gothenburg, Sweden', statMPs: '<strong>349 MPs</strong> tracked', statRiskRules: '<strong>45 risk rules</strong> active', statLanguages: '<strong>14 languages</strong> supported', statHistoricalData: '<strong>50+ years</strong> historical data' },
  sv: { about: 'Om Riksdagsmonitor', aboutText: 'Plattform för övervakning av Sveriges riksdag med CIA OSINT-kapacitet.', quickLinks: 'Snabblänkar', builtBy: 'Byggd av Hack23 AB', builtByText: 'Svenskt cybersäkerhetsföretag specialiserat på politisk transparens och öppen källkodsintelligens.', languages: 'Språk', dashboard: 'Instrumentpanel', location: 'Göteborg, Sverige', statMPs: '<strong>349 ledamöter</strong> övervakade', statRiskRules: '<strong>45 riskregler</strong> aktiva', statLanguages: '<strong>14 språk</strong> stöds', statHistoricalData: '<strong>50+ år</strong> historisk data' },
  da: { about: 'Om Riksdagsmonitor', aboutText: 'Platform til overvågning af det svenske parlament med CIA OSINT-kapacitet.', quickLinks: 'Hurtige links', builtBy: 'Bygget af Hack23 AB', builtByText: 'Svensk cybersikkerhedskonsulentfirma specialiseret i politisk gennemsigtighed.', languages: 'Sprog', dashboard: 'Dashboard', location: 'Göteborg, Sverige', statMPs: '<strong>349 medlemmer</strong> overvåget', statRiskRules: '<strong>45 risikoregler</strong> aktive', statLanguages: '<strong>14 sprog</strong> understøttet', statHistoricalData: '<strong>50+ år</strong> historiske data' },
  no: { about: 'Om Riksdagsmonitor', aboutText: 'Plattform for overvåking av det svenske parlamentet med CIA OSINT-kapasitet.', quickLinks: 'Hurtiglenker', builtBy: 'Bygget av Hack23 AB', builtByText: 'Svensk cybersikkerhetskonsulentfirma spesialisert på politisk åpenhet.', languages: 'Språk', dashboard: 'Dashbord', location: 'Göteborg, Sverige', statMPs: '<strong>349 representanter</strong> fulgt', statRiskRules: '<strong>45 risikoregler</strong> aktive', statLanguages: '<strong>14 språk</strong> støttes', statHistoricalData: '<strong>50+ år</strong> med historiske data' },
  fi: { about: 'Tietoa Riksdagsmonitorista', aboutText: 'Ruotsin valtiopäivien seurantaalusta CIA OSINT -kyvyillä.', quickLinks: 'Pikalinkit', builtBy: 'Tekijä: Hack23 AB', builtByText: 'Ruotsalainen kyberturvallisuuskonsultointi erikoistunut poliittiseen läpinäkyvyyteen.', languages: 'Kielet', dashboard: 'Koontinäyttö', location: 'Göteborg, Ruotsi', statMPs: '<strong>349 kansanedustajaa</strong> seurannassa', statRiskRules: '<strong>45 riskisääntöä</strong> aktiivisena', statLanguages: '<strong>14 kieltä</strong> tuettuna', statHistoricalData: '<strong>Yli 50 vuotta</strong> historiallista dataa' },
  de: { about: 'Über Riksdagsmonitor', aboutText: 'Plattform zur Überwachung des schwedischen Parlaments mit CIA OSINT-Fähigkeiten.', quickLinks: 'Schnelllinks', builtBy: 'Erstellt von Hack23 AB', builtByText: 'Schwedische Cybersicherheitsberatung für politische Transparenz.', languages: 'Sprachen', dashboard: 'Dashboard', location: 'Göteborg, Schweden', statMPs: '<strong>349 Abgeordnete</strong> überwacht', statRiskRules: '<strong>45 Risikoregeln</strong> aktiv', statLanguages: '<strong>14 Sprachen</strong> unterstützt', statHistoricalData: '<strong>50+ Jahre</strong> historische Daten' },
  fr: { about: 'À propos de Riksdagsmonitor', aboutText: 'Plateforme de surveillance du Parlement suédois avec capacités CIA OSINT.', quickLinks: 'Liens rapides', builtBy: 'Créé par Hack23 AB', builtByText: 'Conseil suédois en cybersécurité spécialisé dans la transparence politique.', languages: 'Langues', dashboard: 'Tableau de bord', location: 'Göteborg, Suède', statMPs: '<strong>349 députés</strong> suivis', statRiskRules: '<strong>45 règles de risque</strong> actives', statLanguages: '<strong>14 langues</strong> prises en charge', statHistoricalData: '<strong>50+ ans</strong> de données historiques' },
  es: { about: 'Acerca de Riksdagsmonitor', aboutText: 'Plataforma de monitoreo del Parlamento sueco con capacidades CIA OSINT.', quickLinks: 'Enlaces rápidos', builtBy: 'Creado por Hack23 AB', builtByText: 'Consultoría sueca de ciberseguridad especializada en transparencia política.', languages: 'Idiomas', dashboard: 'Panel', location: 'Gotemburgo, Suecia', statMPs: '<strong>349 diputados</strong> rastreados', statRiskRules: '<strong>45 reglas de riesgo</strong> activas', statLanguages: '<strong>14 idiomas</strong> admitidos', statHistoricalData: '<strong>Más de 50 años</strong> de datos históricos' },
  nl: { about: 'Over Riksdagsmonitor', aboutText: 'Platform voor monitoring van het Zweedse parlement met CIA OSINT-capaciteiten.', quickLinks: 'Snelkoppelingen', builtBy: 'Gebouwd door Hack23 AB', builtByText: 'Zweeds cybersecurity-adviesbureau gespecialiseerd in politieke transparantie.', languages: 'Talen', dashboard: 'Dashboard', location: 'Göteborg, Zweden', statMPs: '<strong>349 parlementariërs</strong> gevolgd', statRiskRules: '<strong>45 risicoregels</strong> actief', statLanguages: '<strong>14 talen</strong> ondersteund', statHistoricalData: '<strong>50+ jaar</strong> historische data' },
  ar: { about: 'حول Riksdagsmonitor', aboutText: 'منصة لمراقبة البرلمان السويدي باستخدام قدرات CIA OSINT.', quickLinks: 'روابط سريعة', builtBy: 'بواسطة Hack23 AB', builtByText: 'شركة استشارات أمن سيبراني سويدية متخصصة في الشفافية السياسية.', languages: 'اللغات', dashboard: 'لوحة التحكم', location: 'غوتنبرغ، السويد', statMPs: 'تتبّع <strong>349 نائباً</strong>', statRiskRules: '<strong>45 قاعدة مخاطر</strong> نشطة', statLanguages: 'دعم <strong>14 لغة</strong>', statHistoricalData: 'بيانات تاريخية لأكثر من <strong>50 عاماً</strong>' },
  he: { about: 'אודות Riksdagsmonitor', aboutText: 'פלטפורמה לניטור הפרלמנט השוודי עם יכולות CIA OSINT.', quickLinks: 'קישורים מהירים', builtBy: 'נבנה על ידי Hack23 AB', builtByText: 'חברת ייעוץ אבטחת סייבר שוודית המתמחה בשקיפות פוליטית.', languages: 'שפות', dashboard: 'לוח מחוונים', location: 'גטבורג, שוודיה', statMPs: '<strong>349 חברי פרלמנט</strong> במעקב', statRiskRules: '<strong>45 כללי סיכון</strong> פעילים', statLanguages: '<strong>14 שפות</strong> נתמכות', statHistoricalData: '<strong>50+ שנים</strong> של נתונים היסטוריים' },
  ja: { about: 'Riksdagsmonitorについて', aboutText: 'CIA OSINT機能によるスウェーデン議会監視プラットフォーム。', quickLinks: 'クイックリンク', builtBy: 'Hack23 AB 製', builtByText: '政治的透明性を専門とするスウェーデンのサイバーセキュリティコンサルタント。', languages: '言語', dashboard: 'ダッシュボード', location: 'ヨーテボリ(スウェーデン)', statMPs: '<strong>349名の議員</strong>を追跡', statRiskRules: '<strong>45のリスクルール</strong>を運用', statLanguages: '<strong>14言語</strong>をサポート', statHistoricalData: '<strong>50年以上</strong>の履歴データ' },
  ko: { about: 'Riksdagsmonitor 소개', aboutText: 'CIA OSINT 기능을 활용한 스웨덴 의회 모니터링 플랫폼.', quickLinks: '빠른 링크', builtBy: 'Hack23 AB 제작', builtByText: '정치적 투명성을 전문으로 하는 스웨덴 사이버 보안 컨설팅.', languages: '언어', dashboard: '대시보드', location: '스웨덴 예테보리', statMPs: '<strong>349명 의원</strong> 추적', statRiskRules: '<strong>45개 위험 규칙</strong> 운영', statLanguages: '<strong>14개 언어</strong> 지원', statHistoricalData: '<strong>50년+</strong> 역사 데이터' },
  zh: { about: '关于Riksdagsmonitor', aboutText: '利用CIA OSINT能力监测瑞典议会的平台。', quickLinks: '快速链接', builtBy: 'Hack23 AB 构建', builtByText: '专注于政治透明度的瑞典网络安全咨询公司。', languages: '语言', dashboard: '仪表板', location: '瑞典哥德堡', statMPs: '已追踪 <strong>349 名议员</strong>', statRiskRules: '已启用 <strong>45 条风险规则</strong>', statLanguages: '支持 <strong>14 种语言</strong>', statHistoricalData: '覆盖 <strong>50+ 年</strong>历史数据' }
};