init localize

This commit is contained in:
2026-07-01 10:56:47 -05:00
parent 275dda65e0
commit dca3a66206
18 changed files with 1008 additions and 25 deletions

140
lib/i18n/de.ts Normal file
View File

@@ -0,0 +1,140 @@
import { Dictionary } from "./types";
const de: Dictionary = {
meta: {
title: "WM 26 — Gruppen & K.o.-Baum",
description:
"Live-Gruppentabellen, Drittplatzierten-Wertung und der vollständige K.o.-Baum der FIFA WM 2026 mit Annex-C-Zuordnung und Polymarket-Wahrscheinlichkeiten.",
},
header: {
hostCountries: "USA · Kanada · Mexiko",
},
status: {
feedOffline: "Feed offline",
updated: (time: string) => `Aktualisiert ${time}`,
live: "Live",
loading: "Lade Daten…",
running: "läuft",
halftime: "Halbzeit",
finished: "Beendet",
postponed: "Verzögert",
},
nav: {
koFixtures: "K.O.-Spiele",
groups: "Gruppen",
groupFixtures: (group: string) => `Gruppenspiele ${group}`,
groupFixturesNoGroup: "Gruppenspiele",
thirdPlace: "Drittplatzierte",
bracket: "K.o.-Baum",
simulation: "Simulation",
},
error: {
feedUnreachable:
"Die Live-Feeds sind gerade nicht erreichbar. Die Seite versucht es automatisch erneut.",
unknown: "unbekannter Fehler",
},
footer: {
dashboard: "WM 2026 Dashboard",
dataSources: "Daten: football-data.org · Polymarket Gamma API · FIFA Annex C",
},
sim: {
notice:
"Simulation — alle ungespielten Spiele sind mit dem Polymarket-Favoriten vorbelegt. Die angezeigten Wahrscheinlichkeiten stammen von Polymarket.",
heading: "Simulierter K.o.-Baum",
},
koFixtures: {
noMatches: "Keine K.o.-Spiele mit bekannten Teams verfügbar.",
liveBadge: "LIVE",
nextMatch: "NÄCHSTES SPIEL",
postponedBadge: "VERZÖGERT",
match: (n: number) => `Spiel ${n}`,
},
label: {
goals: "Tore",
liveIndicator: "● LIVE",
scrollToTop: "Nach oben scrollen",
securelyQualified: "sicher qualifiziert",
},
stage: {
r16: "Achtelfinale",
qf: "Viertelfinale",
sf: "Halbfinale",
thirdPlace: "Platz 3",
final: "Finale",
},
round: {
r32: "Letzte 32",
r16: "Achtelfinale",
qf: "Viertelfinale",
sf: "Halbfinale",
final: "Finale",
thirdPlace: "Spiel um Platz 3",
},
bracket: {
provisionalTooltip: "vorläufig Gruppe/Zuordnung noch nicht fix",
match: (n: number) => `Spiel ${n}`,
penaltyShootout: "i.E.",
annexHeader: "Annex-C-Zuordnung der Drittplatzierten:",
annexResolved:
"aufgelöst — die acht Dritten sind den Gruppensiegern fest zugeteilt",
annexPending:
"noch offen — sobald die 8 besten Dritten feststehen, verbindet sich der Baum automatisch",
winner: "Sieger",
loser: "Verlierer",
winnerFromMatch: (n: number) => `Sieger aus Spiel ${n}`,
loserFromMatch: (n: number) => `Verlierer aus Spiel ${n}`,
},
legend: {
winner: "Sieger / weiter",
final: "Finale",
fixed: "fix qualifiziert",
provisional: "vorläufig (≈, nach aktueller Tabelle)",
placeholder: "Platzhalter offen",
probExplanation:
"%-Werte: Polymarket-Wahrscheinlichkeit (falls verfügbar)",
},
tooltips: {
provisionalPrefix: "aktuell",
firstOfGroup: (group: string) => `1. Gruppe ${group}`,
secondOfGroup: (group: string) => `2. Gruppe ${group}`,
thirdOfGroup: (group: string) => `3. der Gruppe ${group}`,
provisionalThird: (pool: string) => `aktuell 3. Gruppe ${pool}`,
},
slot: {
winner: (group: string) => `Sieger ${group}`,
runnerUp: (group: string) => `Zweiter ${group}`,
thirdOfGroup: (group: string) => `3. der Gruppe ${group}`,
thirdPlacePool: (pool: string) => `3. ${pool}`,
},
table: {
rank: "#",
team: "Mannschaft",
group: "Gruppe",
matches: "Sp",
won: "S",
drawn: "U",
lost: "N",
goals: "Tore",
goalDiff: "±",
points: "Pkt",
status: "Status",
},
thirds: {
explanation:
"Acht der zwölf Gruppendritten erreichen die Runde der letzten 32. Gewertet wird gruppenübergreifend nach Punkten, Tordifferenz und Toren — der Direktvergleich entfällt, weil diese Teams nie gegeneinander gespielt haben. Die Trennlinie markiert den Schnitt zwischen Platz 8 und 9.",
advances: "weiter",
eliminated: "raus",
},
fixtures: {
standingsTitle: (group: string) => `Tabelle Gruppe ${group}`,
noMatches: (group: string) =>
`Für Gruppe ${group} liegen noch keine Spiele im Feed vor.`,
},
groups: {
viewGroupGames: (group: string) => `Spiele der Gruppe ${group} ansehen`,
groupLabel: (group: string) => `Gruppe ${group}`,
viewGames: "Spiele ansehen →",
},
};
export default de;