import type { Dict } from './en';

// Deutsch — neutral-informeller Sport-Ton, Schlüssel 1:1 wie en.ts.
export const de: Dict = {
  nav: {
    live: "Live",
    groups: "Gruppen",
    bracket: "Turnierbaum",
    predict: "Prognose",
    vsMarket: "vs. Markt",
    model: "Modell",
    story: "Story",
    teams: "Teams",
    data: "Daten",
    compare: "Vergleich",
    more: "Mehr",
  },
  common: {
    liveNow: "Live",
    offline: "Offline",
    connecting: "Verbinde…",
    connected: "Verbunden",
    liveVia: "Live · {source}",
    offlineShowingSchedule: "Offline — Spielplan wird angezeigt",
    offlineBanner: "Offline — letzte Daten von {time}. Verbinde neu…",
    switchToLightMode: "Zum hellen Modus wechseln",
    switchToDarkMode: "Zum dunklen Modus wechseln",
    draw: "Unentschieden",
    fullTime: "Abpfiff",
    fullTimeShort: "Ende",
    inMinutes: "in {n} min",
    todayAt: "heute {time}",
    group: "Gruppe {group}",
    matchNumberShort: "Sp. {num}",
    vs: "vs.",
    mostLikelyScore: "Wahrscheinlichstes Ergebnis",
    teamWinPct: "{team} gewinnt {pct}",
    drawPct: "Unentschieden {pct}",
    never: "nie",
    justNow: "gerade eben",
    minAgo: "vor {n} Min.",
    hoursAgo: "vor {n} Std.",
    back: "Zurück",
    noData: "Keine Daten",
    pensShort: "{n}E",
  },
  stage: {
    group: "Gruppenphase",
    r32: "Sechzehntelfinale",
    r16: "Achtelfinale",
    qf: "Viertelfinale",
    sf: "Halbfinale",
    third: "Spiel um Platz 3",
    final: "Finale",
  },
  status: {
    scheduled: "Angesetzt",
    live: "Live",
    finished: "Beendet",
  },
  live: {
    minute: "{n}'",
    title: "Live",
    loadingSubtitle: "Turnier wird geladen…",
    subtitle: "{season} · 48 Teams · 104 Spiele",
    liveNowHeading: "Jetzt live",
    todayHeading: "Spiele heute",
    nextUp: "Als Nächstes",
    nextUpDay: "Als Nächstes · {day}",
    comingUp: "Demnächst",
    myTeam: "Mein Team",
    latestResults: "Letzte Ergebnisse",
    digestTitle: "Der Tag in Kürze",
    digestYesterday: "Gestern",
    digestMovers: "Bewegung bei den Titelchancen",
    empty: "Der Spielplan ist geladen. Sobald das Turnier läuft, tauchen die Spiele hier auf.",
  },
  match: {
    modelPrefix: "Modell:",
    loadError: "Dieses Spiel konnte nicht geladen werden.",
    backToLive: "Zurück zu Live",
    liveWinProbability: "Live-Siegwahrscheinlichkeit",
    inPlayHelp: "Aktualisiert sich mit Spielstand und Spielminute. Die noch zu erwartenden Tore werden aus der Vor-Anstoß-Prognose beider Teams geschätzt.",
    statsTitle: "Spielstatistik",
    stats: {
      possessionPct: "Ballbesitz",
      totalShots: "Schüsse",
      shotsOnTarget: "Aufs Tor",
      wonCorners: "Ecken",
      foulsCommitted: "Fouls",
      saves: "Paraden",
    },
    timeline: "Spielverlauf",
    momentum: "So schwankte die Siegwahrscheinlichkeit",
    oddsMovement: "Marktbewegung vs. Modell",
    oddsMovementNote: "Durchgezogene Linien: die Buchmacherquoten ohne Marge, im Verlauf bis zum Anstoß. Gestrichelt: die Wahrscheinlichkeiten unseres Modells. Der Markt ist nur Vergleichsmaßstab — das Modell sieht ihn nie.",
    preMatchModel: "Modell vor Anstoß",
    modelExpectation: "Modell-Prognose",
    expectedGoalsLine: "Erwartete Tore (xG): {home} – {away} · Modell-Wahrscheinlichkeiten, keine Wettempfehlung",
    recentForm: "Aktuelle Form",
    headToHead: "Direkter Vergleich",
    h2h: {
      teamWins: "Siege {team}",
      drawsTotal: "Unentschieden · {games} Spiele insgesamt",
      recentMeetings: "Letzte Duelle",
    },
    lineups: "Aufstellungen",
    keyPlayers: "Schlüsselspieler (beste Torschützen aller Zeiten)",
  },
  compare: {
    title: "Vergleich",
    subtitle: "Zwei der 48 im direkten Duell: die Modell-Einschätzung und die komplette Geschichte.",
    modelMatchup: "Modell-Duell (neutraler Boden)",
    neutralNote: "Hypothetisch, auf neutralem Boden — die aktuelle Modell-Sicht auf beide Teams.",
    samePick: "Wähle zwei verschiedene Teams.",
    neverMet: "Diese beiden trafen in 150 Jahren Länderspielgeschichte nie aufeinander.",
    goals: "Tore: {a} – {b}",
  },
  search: {
    title: "Suche",
    placeholder: "Team oder Spiel…",
    hint: "Mindestens zwei Buchstaben tippen — Teams und Spiele.",
    noResults: "Nichts gefunden.",
  },
  notFound: {
    message: "Ball im Aus — diese Seite gibt es nicht.",
    backToLive: "Zurück zu Live",
  },
  footer: {
    worldCup: "WM 2026",
    allData: "Alle Daten",
    howModelWorks: "So funktioniert das Modell",
    disclaimer: "Modell-Quoten — keine Wettempfehlung",
  },
  glossary: {
    rps: {
      term: "RPS",
      definition: "Ranked Probability Score — misst, wie weit die Prognose-Wahrscheinlichkeiten vom tatsächlichen Ergebnis entfernt lagen. Heimsieg, Unentschieden und Auswärtssieg zählen als geordnete Ausgänge: Wer nur um einen Schritt danebenliegt, wird weniger bestraft. 0 ist perfekt; je niedriger, desto besser.",
    },
    brier: {
      term: "Brier",
      definition: "Der mittlere quadratische Fehler der Prognose-Wahrscheinlichkeiten über die drei Ausgänge (Heimsieg, Unentschieden, Auswärtssieg). 0 ist perfekt; je niedriger, desto besser.",
    },
    ece: {
      term: "ECE",
      definition: "Expected Calibration Error — die durchschnittliche Lücke zwischen vorhergesagter Wahrscheinlichkeit und tatsächlicher Häufigkeit. Beispiel: Was mit 70 % vorhergesagt wird, sollte auch in rund 70 % der Fälle eintreten. Unter 0,05 ist hervorragend.",
    },
    elo: {
      term: "Elo",
      definition: "Eine Stärkewertung, die nach jedem Spiel aktualisiert wird. Schlägst du ein stärkeres Team, gibt es mehr Punkte. Ein Abstand von 100 Punkten bedeutet etwa 64 % erwartetes Ergebnis für das stärkere Team.",
    },
    xg: {
      term: "xG",
      definition: "Erwartete Tore (xG) — für jeden Schuss die Wahrscheinlichkeit, dass daraus ein Tor wird, geschätzt aus tausenden ähnlichen Schüssen. Die xG-Summe misst die Qualität der Chancen, nicht das Glück.",
    },
    deVig: {
      term: "De-Vig",
      definition: "Buchmacherquoten enthalten eine Gewinnmarge, deshalb ergeben die impliziten Wahrscheinlichkeiten zusammen mehr als 100 %. De-Viggen entfernt diese Marge und skaliert auf genau 100 % — die ehrliche Einschätzung des Buchmachers.",
    },
    ensemble: {
      term: "Ensemble",
      definition: "Eine Mischung aus zwei unabhängigen Tormodellen: eines auf Elo-Basis, eines auf Basis von Angriff und Abwehr jedes Teams. Das Mischverhältnis wurde auf Validierungsdaten abgestimmt — dort schlug die Kombination beide Einzelmodelle.",
    },
  },
  groups: {
    title: "Gruppen",
    subtitle: "Alle 12 Gruppen. Die Top 2 jeder Gruppe kommen weiter, dazu die 8 besten Gruppendritten.",
    allTeams: "Alle 48 Teams",
    legendTop2: "Top 2 — kommen weiter",
    legendThird: "Platz 3 — im Rennen um die besten Dritten",
    scenarios: "Szenarien für die letzte Runde",
    scThrough: "Top 2 sicher",
    scWin: "Top 2 mit einem Sieg",
    scAlive: "Noch möglich ({n}/{total} Ausgänge)",
    scOut: "Top 2 nicht mehr erreichbar",
    scNote: "Die Szenarien zählen Sieg/Unentschieden/Niederlage der verbleibenden Gruppenspiele; knappe Fälle können trotzdem an der Tordifferenz hängen. Platz 3 läuft über den gruppenübergreifenden Vergleich der besten Dritten.",
    thirdsRace: "Rennen der besten Dritten",
    thirdsRaceNote: "Alle Gruppendritten, sortiert nach Punkten, Tordifferenz und Toren — die besten 8 erreichen das Sechzehntelfinale. Spiele · TD · Punkte.",
    tableHeaderPldPts: "Sp. · Pkt.",
    colTeam: "Team",
    colPlayed: "Sp",
    colGoalDiff: "TD",
    colPoints: "Pkt",
  },
  bracket: {
    title: "Turnierbaum",
    subtitle: "Die K.-o.-Runden — vom Sechzehntelfinale bis zum Finale.",
    thirdPlacePlayoff: "Spiel um Platz 3",
    advanceTooltip: "Modell: Chance jedes Teams aufs Weiterkommen",
    whatIf: "Was wäre wenn?",
    whatIfHint: "Tipp auf ein Team, um es durch den Turnierbaum zu schicken. Echte Ergebnisse bleiben fest. Die Prozente sind die Modell-Sicht auf jede Paarung.",
    reset: "Auswahl zurücksetzen",
    champion: "Dein Weltmeister: {team}",
    pathChance: "Modell-Chance für genau diesen Lauf: {pct}",
  },
  teams: {
    title: "Teams",
    subtitle: "Alle 48 Teams, sortiert nach den Titelchancen des Modells. Tipp auf ein Team für sein Profil.",
    advanceShort: "Weiterkommen {pct}",
    goldenBoot: "Torjägerliste",
    goldenBootNote: "Tore in diesem Turnier, aus dem Live-Eventfeed. Eigentore und Elfmeterschießen zählen nicht.",
  },
  outcome: {
    home: "Heimsieg",
    draw: "Unentschieden",
    away: "Auswärtssieg",
  },
  predict: {
    title: "Prognose",
    loadingSubtitle: "Simulation läuft…",
    subtitle: "Elo + Dixon-Coles, {iterations} Mal simuliert (Monte Carlo) · Ratings vom {date}",
    methodologyLink: "So funktioniert's & so genau ist es",
    trophy: {
      title: "Wer holt den Pokal?",
    },
    titleRace: {
      title: "Titelrennen im Zeitverlauf",
      empty: "Diese Grafik füllt sich, sobald Ergebnisse reinkommen. Nach jedem beendeten Spiel werden die Teams neu bewertet und die Simulation läuft erneut.",
    },
    fullOddsHeading: "Alle Chancen — Gruppe, K.o.-Runde & Titel",
    nextMatchesHeading: "Spiel-Prognosen",
    filters: {
      next3Days: "Nächste 3 Tage",
      allUpcoming: "Alle anstehenden",
      allStages: "Alle",
      groupStage: "Gruppenphase",
      knockout: "K.-o.-Runde",
    },
    oddsTable: {
      team: "Team",
      winGroup: "Gruppensieg",
      qualify: "Weiter",
      reachR16: "AF",
      reachQF: "VF",
      reachSF: "HF",
      reachFinal: "Finale",
      champion: "Titel",
    },
  },
  scoreboard: {
    title: "Modell vs. Markt",
    subtitle: "Vor jedem Spiel frieren wir unsere Prognose ein — daneben die Buchmacherquoten (ohne Marge). Nach Abpfiff werden beide bewertet: Die niedrigere Zahl lag näher am Ergebnis.",
    headToHead: {
      title: "Direkter Vergleich",
      modelLabel: "unser Modell · RPS",
      marketLabel: "Buchmacher · RPS",
      closerTimes: "{n}× näher dran",
      matchesScored: {
        one: "{n} Spiel gewertet",
        other: "{n} Spiele gewertet",
      },
      tie: "Gleichstand",
      modelAhead: "Modell vorn",
      marketAhead: "Markt vorn",
      empty: "Der direkte Vergleich startet mit dem ersten Abpfiff. Jede Prognose wird vor dem Anstoß eingefroren und nach Spielende gewertet.",
    },
    rules: {
      text: "Faire Regeln: Beide Prognosen werden vor dem Anstoß eingefroren. Die Buchmachermarge wird entfernt ({devig}). Gewertet wird mit dem {rps}. Verspätete Snapshots zählen nicht. Den Markt über wenige Spiele zu schlagen, ist meist Zufall — schau auf den Abstand, nicht auf die Führung.",
      rpsTerm: "Ranked Probability Score",
    },
    row: {
      modelLabel: "Modell",
      lateNote: "Snapshot zu spät — zählt nicht in die Gesamtwertung",
      noMarketLine: "vor dem Anstoß keine Buchmacherquoten erfasst",
      result: "Ergebnis: {outcome}",
      modelRps: "Modell-RPS {rps}",
      marketRps: "Markt-RPS {rps}",
      modelCloser: "Modell näher dran",
      marketCloser: "Markt näher dran",
    },
    emptyRows: "Noch keine eingefrorenen Prognosen — der erste Snapshot entsteht {minutes} Minuten vor Anstoß.",
    upsets: {
      title: "Größte Überraschungen",
      chance: "{pct} wahrscheinlich",
    },
  },
  methodology: {
    title: "Methodik",
    subtitle: "Wie das Modell funktioniert — und ehrlich gemessen, wie gut es wirklich ist.",
    stepLabel: "SCHRITT {n}",
    steps: {
      elo: {
        title: "Elo-Ratings",
        body: "Jede Nation bekommt ein Stärke-Rating (Elo), aufgebaut aus 150 Jahren Länderspiel-Ergebnissen — rund 49.000 Spielen. Das Rating wird nach jedem Spiel aktualisiert, wichtige Spiele zählen mehr. Ein zweites, schneller reagierendes Rating verfolgt die aktuelle Form (neue Ergebnisse wirken dreimal so stark) — beide werden gemischt.",
      },
      goalModels: {
        title: "Zwei Tor-Modelle",
        body: "Die erwarteten Tore pro Spiel schätzen wir auf zwei Wegen: aus den Elo-Ratings und aus einem eigenen Angriff/Abwehr-Modell (Dixon-Coles, gefittet auf den letzten 15 Jahren, neuere Spiele zählen mehr). Das Angriff/Abwehr-Modell trägt den größeren Teil der Mischung und wird im Turnier jede Nacht neu gefittet — aktuelle Form zählt mehr als ferne Vergangenheit.",
      },
      scorelines: {
        title: "Spielstände (Dixon-Coles)",
        body: "Ein Spielstand-Modell macht aus den Tor-Schätzungen eine Wahrscheinlichkeit für jedes mögliche Ergebnis — und daraus Sieg, Unentschieden und Niederlage. Es nutzt eine bivariate Poisson-Verteilung mit der Dixon-Coles-Korrektur für torarme Spiele.",
      },
      monteCarlo: {
        title: "Monte Carlo",
        body: "Wir simulieren das komplette 48-Team-Turnier 20.000-mal — jedes noch ausstehende Spiel wird dabei durchgespielt. So entstehen für jedes Team die Chancen auf den Titel und jede Runde, aktualisiert nach jedem Ergebnis.",
      },
    },
    backtest: {
      heading: "Wie gut ist es? (Backtest auf ungesehenen Spielen)",
      intro: "Wir testen das Modell an Spielen, die es nie gesehen hat. Die Parameter wurden an Spielen vor {trainEnd} gefittet. Die Misch-Einstellungen wurden auf {valFrom}–{valTo} abgestimmt. Die Zahlen unten stammen aus {tested} unberührten Spielen ({testFrom}–{testTo}) — jedes nur mit Daten vorhergesagt, die vor Anstoß verfügbar waren (Walk-Forward).",
      validationFallback: "einen Validierungszeitraum",
      stats: {
        outcomeAccuracy: "Trefferquote (Ergebnis)",
        rps: "Ranked Probability Score",
        worldCupAccuracy: "WM-Trefferquote ({n})",
      },
      metricsLine: "Metriken: {rps} · {brier} · {ece} — das eingesetzte Modell ist ein {ensemble}.",
      rpsChartHeading: "Ranked Probability Score (RPS) — niedriger ist besser. Unser Modell gegen einfachere Vergleichsmodelle.",
      thisModel: "Dieses Modell",
      baseRates: "Basisraten",
      coinFlip: "Münzwurf",
      bestBadge: "beste",
    },
    calibration: {
      heading: "Ist es kalibriert?",
      xAxis: "vorhergesagte Wahrscheinlichkeit",
      yAxis: "tatsächlich eingetreten",
      pointTooltip: "vorhergesagt {predicted}% → eingetreten {observed}% ({count})",
      caption: "Die Punkte liegen nah an der Diagonale. Das heißt, das Modell ist ehrlich: Sagt es 30%, tritt das Ergebnis in rund 30% der Fälle ein. Der Kalibrierungsfehler (ECE) liegt bei {ece} — niedriger ist besser, unter 0,05 ist hervorragend.",
    },
    diary: {
      title: "Modell-Tagebuch",
      note: "Jedes beendete Spiel bewertet die Teams neu und startet die Simulation erneut. Dieses Log zeigt jede Aktualisierung und die größte Verschiebung der Titelchancen.",
    },
    limits: {
      heading: "Ehrliche Grenzen",
      notAdvice: "Das sind Modell-Wahrscheinlichkeiten, keine Wettempfehlung. Das Modell nutzt keine Buchmacherquoten, also behaupten wir nicht, den Markt zu schlagen. Scharfe Wettmärkte sind nach wie vor die besten Prognosen, die es gibt.",
      sparseData: "Detaildaten im Länderspiel-Fußball (erwartete Tore, Spiel-Events) sind dünn gesät. Manche Teams bekommen deshalb reichere Taktik-Analysen als andere. Die Abdeckung wird besser, je mehr Live-Daten im Turnier dazukommen.",
      variance: "Fußball ist launisch. Ein 60%-Favorit verliert trotzdem oft. Kalibriert heißt: Unsere 60% treffen wirklich in rund 60% der Fälle ein — nicht, dass der Favorit immer gewinnt.",
      openData: "Alles ist transparent und lässt sich aus öffentlichen Daten nachbauen. Genau diese Offenheit ist der Punkt.",
    },
  },
  data: {
    title: "Die Daten",
    subtitle: "Alles, womit diese Seite arbeitet — mit Größe, Quelle und Zeitstempel. Keine Blackbox.",
    lake: {
      heading: "Event-Daten-Lake",
      openDataBadge: "Open Data von {provider}",
      parsed: "Event-Daten verarbeitet",
      events: "Aktionen auf dem Platz",
      matches: "Spiele",
      players: "Spieler",
      summary: "Jeder Pass, Schuss und Zweikampf aus {seasons} Wettbewerbs-Saisons — darunter acht Weltmeisterschaften. Daraus bauen wir die Stil-Fingerabdrücke der Teams ({covered} von {total} Nationen abgedeckt) und die Spielstand-Analyse auf der Methodik-Seite.",
    },
    archive: {
      heading: "Historisches Archiv",
      internationalResults: "Länderspiel-Ergebnisse (1872 → heute)",
      h2hPairings: "Direkte Vergleiche vorberechnet",
      ratingsThrough: "Ratings aktuell bis",
      squadValues: "Kader-Marktwerte ({provider})",
      fingerprints: "Stil-Fingerabdrücke der Teams (Event-Daten)",
      teamsCount: {
        one: "{n} Team",
        other: "{n} Teams",
      },
    },
    live: {
      heading: "Live-Erfassung (dieses Turnier)",
      oddsLines: "Buchmacherquoten erfasst",
      oddsFixtures: "Spiele mit Marktquoten",
      frozenForecasts: "Prognosen vor Anstoß eingefroren",
      enrichedMatches: "Spiele angereichert (Form, Direkter Vergleich, Aufstellungen)",
      cachedResponses: "API-Antworten im Cache",
      ingestRuns: "Daten-Importläufe protokolliert",
    },
    sources: {
      heading: "Quellen-Status",
      healthy: "läuft",
      paused: "pausiert (zu viele Fehler)",
      recentFailures: {
        one: "{n} Fehlversuch zuletzt",
        other: "{n} Fehlversuche zuletzt",
      },
      lastOk: "zuletzt OK {time}",
      empty: "Noch keine Live-Quellen abgefragt.",
      footer: {
        label: "Quellen:",
        roleFixtures: "Spielplan",
        roleLiveScores: "Live-Ergebnisse, Form, Aufstellungen, Buchmacherquoten",
        roleFallback: "Ausweichquelle",
        roleResultsArchive: "Ergebnisarchiv",
        roleOpenData: "Open Data",
        roleSquadValues: "Kader-Marktwerte",
        note: "Alle Daten holen wir serverseitig, mit Cache und Rate-Limit. Blockt eine Quelle oder fällt sie aus, siehst du etwas ältere Daten — nie eine kaputte Seite.",
      },
    },
  },
  story: {
    title: "Story",
    subtitle: "Ein Rückblick in Daten.",
    loadingSubtitle: "Die Daten-Story wird geladen …",
    datasetMissing: "Der Story-Datensatz ist nicht verfügbar. Führe {command} aus, um ihn zu erzeugen.",
    heroTitle: "Das größte Finale aller Zeiten — in Daten",
    intro: "Argentinien und Frankreich erzielten in 120 Minuten zusammen sechs Tore — zwei von Messi, eins von Di María und ein Hattrick von Mbappé — ehe es ins Elfmeterschießen ging. Hier zeigen die Event-Daten, wie es dazu kam.",
    byTheNumbers: "Die Zahlen zum Spiel",
    stats: {
      expectedGoals: "Erwartete Tore (xG)",
      shots: "Schüsse",
      passes: "Pässe",
      passAccuracy: "Passquote %",
    },
    shotMapTitle: "Jeder Schuss, skaliert nach xG",
    shotMapCaption: "Argentinien ({xg} xG) hatte die größeren Chancen. Frankreichs Comeback kam durch eine Serie hochkarätiger Schüsse, als Mbappé heiß lief. Jeder Punkt ist ein Schuss — je größer, desto besser die Chance. Gefüllte Punkte sind Tore.",
    xgRaceTitle: "Das xG-Rennen",
    xgRaceCaption: "80 Minuten lang baute Argentinien einen klaren Vorsprung bei den erwarteten Toren auf. Dann traf Frankreich zweimal in 97 Sekunden, und ihre Linie schoss steil nach oben. Steile Stufen bedeuten große Chancen.",
    passNetworkTitle: "Passstruktur (Startelf)",
    passNetworkCaption: "Jeder Kreis ist ein Spieler an seiner durchschnittlichen Passposition. Linien zeigen die angekommenen Pässe zwischen zwei Spielern, gezählt bis zur ersten Auswechslung. Je größer der Kreis, desto mehr hatte der Spieler den Ball.",
  },
  team: {
    unknown: "Unbekanntes Team.",
    allTeams: "Alle Teams",
    follow: "Diesem Team folgen",
    unfollow: "Diesem Team nicht mehr folgen",
    notifyOn: "Tor-Benachrichtigungen für dieses Team",
    notifyOff: "Benachrichtigungen ausschalten",
    notifyDenied: "Benachrichtigungen sind in den Browser-Einstellungen blockiert.",
    eloBadge: "Elo {rating}",
    titleOddsBadge: "Titel {pct}",
    advanceOddsBadge: "Weiterkommen {pct}",
    groupStanding: "Platz in der Gruppe",
    standingLine: "#{rank} · {points} Pkt. · {won}-{drawn}-{lost} · TD {gd}",
    fixtures: "Spielplan",
    eloHistory: "Elo-Wertung im Zeitverlauf",
    allTimeTopScorers: "Beste Torschützen aller Zeiten",
    groupShort: "Gr. {group}",
    awayIndicator: "bei",
    resultShort: {
      win: "S",
      draw: "U",
      loss: "N",
    },
    stageShort: {
      r32: "1/16",
      r16: "AF",
      qf: "VF",
      sf: "HF",
      third: "Pl. 3",
      final: "F",
    },
  },
};
