Repository: cohstats/coh3-stats
Pull request #771: Add german translation
Author: login: allgoewer
Created: 2025-05-07T11:38:55Z | Merged: 2025-05-07T12:11:32Z

Hi,

as promised, I created a german translation with the help of deepseek AI.

I did proofread the translation and made some minor changes to it, but it's mostly better than what I could do in a reasonable amount of time.

I am a native german speaker, the translation was really good out of the box.


**I have one remaining question:** What does `"RC"` in `common.json` refer to?

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Added comprehensive German language support across the application, including UI elements for menus, leaderboards, explorer features, live games, news, player statistics, ranking tiers, and the desktop app.
	- All major sections now provide German translations, enhancing accessibility for German-speaking users.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
new file mode 100644
index 000000000..0b03f1396
--- /dev/null
+++ b/public/locales/de/common.json
@@ -0,0 +1,56 @@
+{
+  "mainMenu": {
+    "leaderboards": "Bestenlisten",
+    "statistics": "Statistiken",
+    "statsMenu": {
+      "games": "Spielstatistiken",
+      "maps": "Kartenstatistiken",
+      "players": "Spielerstatistiken",
+      "leaderboards": "Bestenlistenstatistiken",
+      "achievements": "Erfolgsstatistiken"
+    },
+    "explorer": "Explorer",
+    "explMenu": {
+      "buildings": "Gebäude",
+      "units": "Einheiten",
+      "dpsCalculator": "DPS - Einheitenvergleich",
+      "unitBrowser": "Einheiten-Browser",
+      "challenges": "Herausforderungen",
+      "weapons": "Waffen"
+    },
+    "liveGames": "Laufende Spiele",
+    "desktopApp": "Desktop-App",
+    "other": "Anderes",
+    "otherMenu": {
+      "tiers": "Ranglisten-Stufen",
+      "openData": "Open Data",
+      "coh3News": "COH3 Nachrichten",
+      "playerExport": "Spieler Export API"
+    },
+    "about": "Über uns",
+    "supportUs": "Unterstütze uns"
+  },
+  "header": {
+    "playerInGames": "Spieler im Spiel"
+  },
+  "footer": {
+    "gamePatch": "Spielpatch",
+    "gamePatchInfo": "Die auf der Seite angezeigten Daten stammen aus dem Spielpatch",
+    "unofficialSite": "Dies ist eine inoffizielle Fan-Seite für Company Of Heroes 3.",
+    "visitText1": "Besuche",
+    "visitText2": "für Company of Heroes 2 Statistiken und Analysen"
+  },
+  "columns": {
+    "rank": "Rang",
+    "rc": "RÄ",
+    "elo": "ELO",
+    "alias": "Spielername",
+    "streak": "Serie",
+    "ratio": "Verhältnis",
+    "total": "Gesamt",
+    "lastGame": "Letztes Spiel",
+    "tier": "Stufe",
+    "wins": "Siege",
+    "losses": "Niederlagen"
+  }
+}
diff --git a/public/locales/de/desktopapp.json b/public/locales/de/desktopapp.json
new file mode 100644
index 000000000..3a8589225
--- /dev/null
+++ b/public/locales/de/desktopapp.json
@@ -0,0 +1,26 @@
+{
+  "meta": {
+    "title": "Desktop-App von COH3 Stats",
+    "description": "Lade die COH3 Stats Desktop-App {{version}} herunter. Keine Konfiguration erforderlich. OBS Overlay-Funktion. Detaillierte Infos zu deinen aktuellen Gegnern. Soundbenachrichtigungen bei neuen Spielen und mehr.",
+    "keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes echtzeit-infos"
+  },
+  "download": {
+    "button": "Download {{version}}",
+    "downloads": "{{count}} Downloads",
+    "releaseNotes": "Versionshinweise"
+  },
+  "features": {
+    "title": "Erhalte zusätzliche Infos zu deinen Spielen mit der Desktop-App!",
+    "list": {
+      "noSetup": "Einfache Nutzung, keine Einrichtung nötig - einfach die App starten",
+      "leaderboard": "Erkunde detaillierte Bestenlisten-Statistiken",
+      "notifications": "Erhalte optionale Soundbenachrichtigungen beim Beitritt zu einem Spiel",
+      "replays": "Automatischer Upload von Replays in die Cloud für zusätzliche Analysen",
+      "streaming": {
+        "before": "Streamer-Overlay für",
+        "and": "und",
+        "after": "und andere Streaming-Tools"
+      }
+    }
+  }
+}
diff --git a/public/locales/de/explorer.json b/public/locales/de/explorer.json
new file mode 100644
index 000000000..158a4f418
--- /dev/null
+++ b/public/locales/de/explorer.json
@@ -0,0 +1,55 @@
+{
+  "common": {
+    "units": "Einheiten",
+    "buildings": "Gebäude",
+    "battleGroups": "Kampfgruppen",
+    "near": "Nah",
+    "medium": "Mittel",
+    "far": "Fern",
+    "min": "Min",
+    "max": "Max",
+    "produces": "Produziert",
+    "hitpoints": "Trefferpunkte",
+    "upgrades": "Upgrades",
+    "costs": "Kosten",
+    "explorer": "Explorer"
+  },
+  "explorer": {
+    "title": "Company of Heroes 3 Fraktionen Explorer",
+    "subtitle": "Erkunde alle Einheiten, Gebäude und Kampfgruppen im Spiel."
+  },
+  "unitPage": {
+    "stats": "Werte",
+    "abilities": "Fähigkeiten",
+    "loadout": "Ausrüstung",
+    "veterancy": "Veteranenstatus",
+    "upkeep": "Unterhalt pro Minute",
+    "reinforce": "Verstärkung",
+    "construct": "Kann bauen",
+    "free": "Kostenlos",
+    "weaponNote": "Die effektive Genauigkeit wird durch mehrere Faktoren beeinflusst, wie die Zielgröße oder die Panzerung der angegriffenen Einheit sowie die Genauigkeit oder Durchschlagskraft der angreifenden Einheit."
+  },
+  "statsCard": {
+    "sightRange": "Sichtweite",
+    "speed": "Geschwindigkeit",
+    "acceleration": "Beschleunigung",
+    "deceleration": "Verlangsamung",
+    "maxRange": "Maximale Reichweite",
+    "targetSize": "Zielgröße",
+    "armor": "Panzerung",
+    "captureMultiplier": "Eroberungsmultiplikator",
+    "decaptureMultiplier": "Verlustmultiplikator",
+    "vehicleArmor": "Fahrzeugpanzerung"
+  },
+  "weaponCard": {
+    "accuracy": "Genauigkeit",
+    "rpm": "Schüsse pro Minute (RPM)",
+    "rangeOfFire": "Schussreichweite",
+    "penetration": "Durchschlagskraft",
+    "scatter": "Streuung",
+    "damage": "Schaden",
+    "aoeRadius": "Wirkungsbereich (AoE)-Radius",
+    "movingAccuracy": "Bewegungsgenauigkeitsmultiplikator",
+    "movingCooldown": "Bewegungsabkühlungsmultiplikator"
+  }
+}
diff --git a/public/locales/de/home.json b/public/locales/de/home.json
new file mode 100644
index 000000000..094340477
--- /dev/null
+++ b/public/locales/de/home.json
@@ -0,0 +1,48 @@
+{
+  "meta": {
+    "title": "COH3 Stats - Company of Heroes 3 Statistiken",
+    "description": "Company of Heroes 3 Statistiken. Bestenlisten, Spielerkarten, vergangene Spiele, Einheitenstatistiken, DPS-Rechner, Kampfgruppen-Explorer, Waffen-Explorer, aktuelle laufende Spiele, neueste COH3 News, aktuelle YouTube- und Twitch-Streams. Und vieles mehr."
+  },
+  "sections": {
+    "news": {
+      "title": "Neueste Nachrichten",
+      "newsLabel": "Nachrichten"
+    },
+    "tools": {
+      "dpsCalculator": {
+        "title": "DPS-Rechner",
+        "description": "Vergleiche den DPS (Damage per Second / Schaden pro Sekunde) aller Einheiten im Spiel. Passe die Ausrüstung der Einheiten mit verschiedenen Waffen an. Du kannst auch die HP (Health Points / Lebenspunkte) der Einheiten berücksichtigen."
+      },
+      "unitBrowser": {
+        "title": "Einheiten-Browser",
+        "description": "Erkunde Spieleinheiten, inklusive Werte, Waffen und Upgrades. Navigiere durch das Explorer-Menü für eine Fraktionsübersicht und mehr Details."
+      }
+    },
+    "leaderboards": {
+      "title": "1v1 Bestenlisten",
+      "viewFullLeaderboard": "Komplette Bestenliste anzeigen",
+      "factions": {
+        "american": "USF",
+        "british": "Briten",
+        "german": "Wehrmacht",
+        "dak": "DAK"
+      }
+    },
+    "reddit": {
+      "title": "Top COH3 Reddit-Beiträge",
+      "noData": "Keine Reddit-Beiträge verfügbar"
+    },
+    "youtube": {
+      "title": "Videos der letzten Woche",
+      "noData": "Keine YouTube-Videos verfügbar",
+      "views": "Aufrufe"
+    },
+    "twitch": {
+      "title": "Live Streams ansehen",
+      "noStreams": "Derzeit werden keine englischsprachigen Streams auf Twitch übertragen."
+    }
+  },
+  "leaderboardTable": {
+    "errorTitle": "Fehler beim Abrufen der Bestenlisten"
+  }
+}
diff --git a/public/locales/de/leaderboards.json b/public/locales/de/leaderboards.json
new file mode 100644
index 000000000..d053be4ef
--- /dev/null
+++ b/public/locales/de/leaderboards.json
@@ -0,0 +1,12 @@
+{
+  "title": "Bestenlisten für {{race}}",
+  "pageTitle": "Bestenlisten für {{race}} {{type}}",
+  "metaDescription": "Ranglisten für Fraktion {{race}} und Spieltyp {{type}}. Company of Heroes 3",
+  "errorTitle": "Fehler beim Abrufen der Bestenlisten",
+  "filters": {
+    "region": "Region",
+    "platform": "Plattform",
+    "faction": "Fraktion",
+    "type": "Typ"
+  }
+}
diff --git a/public/locales/de/live-games.json b/public/locales/de/live-games.json
new file mode 100644
index 000000000..18cd46d38
--- /dev/null
+++ b/public/locales/de/live-games.json
@@ -0,0 +1,75 @@
+{
+  "meta": {
+    "title": "Laufende Spiele - Company of Heroes 3",
+    "description": "Aktuelle laufende Spiele in Company of Heroes 3",
+    "keywords": [
+      "coh3 live games",
+      "coh3 echtzeit-spiele",
+      "coh3 spiele",
+      "coh3 aktuelle laufende spiele"
+    ]
+  },
+  "pageTitle": "Laufende PC-Spiele",
+  "filters": {
+    "liveGames": {
+      "label": "Laufende Spiele",
+      "options": {
+        "1v1": "1 vs 1 Automatch",
+        "2v2": "2 vs 2 Automatch",
+        "3v3": "3 vs 3 Automatch",
+        "4v4": "4 vs 4 Automatch",
+        "ai": "Automatch VS KI",
+        "custom": "Benutzerdefinierte Spiele"
+      }
+    },
+    "sortBy": {
+      "label": "Sortieren nach",
+      "options": {
+        "rank": "Rang",
+        "observers": "Zuschauer",
+        "startgametime": "Startzeit"
+      }
+    }
+  },
+  "summaryTable": {
+    "title": "Zusammenfassung laufender Spiele",
+    "tooltip": "Aktuelle Multiplayer-Spiele im Gange. Die Gesamtanzahl der Spieler ist gefiltert. Beachte, dass es wahrscheinlich viele Spieler in der Lobby / auf der Suche / beim Laden und bei anderen Aktivitäten gibt. Benutzerdefinierte Spiele sind standardmäßig nicht beobachtbar. Wahrscheinlich gibt es mehr benutzerdefinierte Spiele. Die Spiele werden alle 5 Minuten aktualisiert.",
+    "noGames": {
+      "title": "Keine laufenden Spiele erkannt",
+      "message": "COH3 Stats muss möglicherweise nach einem kürzlichen Spielpatch aktualisiert werden."
+    },
+    "modes": {
+      "1v1": "1 vs 1",
+      "2v2": "2 vs 2",
+      "3v3": "3 vs 3",
+      "4v4": "4 vs 4",
+      "vsAI": "vs KI",
+      "custom": "Benutzerdefiniert"
+    },
+    "totals": {
+      "automatch": "Gesamt im Automatch",
+      "anyGame": "Gesamt in allen Spielen"
+    },
+    "games": "Spiele"
+  },
+  "gamesTable": {
+    "columns": {
+      "mode": "Modus",
+      "axisPlayers": "Achsen-Spieler",
+      "alliesPlayers": "Alliierte Spieler",
+      "map": "Karte",
+      "observers": "Zuschauer",
+      "gameTime": "Spielzeit",
+      "server": "Server"
+    },
+    "switches": {
+      "showFlags": "Spielerflaggen anzeigen",
+      "showServer": "Spiel-Server anzeigen"
+    },
+    "errors": {
+      "title": "Fehler beim Abrufen der laufenden Spiele",
+      "summaryTitle": "Fehler beim Abrufen der Spielzusammenfassung"
+    },
+    "dataUpdated": "Daten aktualisiert am {{time}}"
+  }
+}
diff --git a/public/locales/de/news.json b/public/locales/de/news.json
new file mode 100644
index 000000000..5110c23d8
--- /dev/null
+++ b/public/locales/de/news.json
@@ -0,0 +1,13 @@
+{
+  "meta": {
+    "title": "COH3 Nachrichten",
+    "description": "Aktuelle offizielle Nachrichten für Company of Heroes 3",
+    "keywords": ["coh3 nachrichten", "coh3 updates", "coh3 änderungsnotizen", "company of heroes 3 nachrichten"]
+  },
+  "pageTitle": "Neueste Company Of Heroes 3 Nachrichten",
+  "sourceText": "Quelle: Offizielle Relic Steam Nachrichten für COH3",
+  "steamNewsLink": "Steam News",
+  "postedBy": "Gepostet von",
+  "on": "am",
+  "findGamesOn": "Alle Artikel findest du auf"
+}
diff --git a/public/locales/de/players.json b/public/locales/de/players.json
new file mode 100644
index 000000000..fc53a3712
--- /dev/null
+++ b/public/locales/de/players.json
@@ -0,0 +1,178 @@
+{
+  "meta": {
+    "keywords": {
+      "stats": "{{name}} Statistiken",
+      "matches": "{{name}} Spiele",
+      "cohStats": "coh3 {{name}} stats"
+    }
+  },
+  "card": {
+    "error": {
+      "title": "Fehler beim Laden der Spielerkarte",
+      "loadingError": "Fehler beim Laden der Spielerkarte"
+    },
+    "title": "Spielerkarte - {{name}}",
+    "titleWithView": {
+      "recentMatches": "Spielerkarte - {{name}} - Letzte Spiele",
+      "replays": "Spielerkarte - {{name}} - Replays",
+      "standingsDetails": "Spielerkarte - {{name}} - Detaillierte Statistiken",
+      "activity": "Spielerkarte - {{name}} - Aktivität",
+      "nemesis": "Spielerkarte - {{name}} - Nemesis",
+      "teamsStandings": "Spielerkarte - {{name}} - Team-Ranglisten",
+      "teamDetails": "Spielerkarte - {{name}} - Team-Details"
+    }
+  },
+  "tabs": {
+    "standings": "Spieler-Ranglisten",
+    "standingsDetails": "Detaillierte Statistiken",
+    "recentMatches": "Letzte Spiele",
+    "activity": "Aktivität",
+    "nemesis": "Nemesis",
+    "replays": "Replays",
+    "teamsStandings": "Team-Ranglisten"
+  },
+  "playerInfo": {
+    "bestElo": {
+      "allies": "Beste ALLIIERTEN ELO {{elo}} in {{mode}} als {{faction}}",
+      "axis": "Beste ACHSEN ELO {{elo}} in {{mode}} als {{faction}}"
+    },
+    "stats": {
+      "totalGames": "Gesamtanzahl Spiele {{count}}",
+      "winRate": "Gewinnrate {{rate}}%",
+      "lastMatch": "Letztes Spiel {{time}}"
+    }
+  },
+  "recentMatches": {
+    "filters": {
+      "hideCustomGames": "Benutzerdefinierte Spiele ausblenden",
+      "showAllGames": "Alle Spiele anzeigen"
+    },
+    "table": {
+      "columns": {
+        "date": "Datum",
+        "map": "Karte",
+        "duration": "Dauer",
+        "type": "Typ",
+        "players": "Spieler",
+        "actions": "Aktionen"
+      },
+      "noData": "Keine Spiele gefunden"
+    },
+    "downloadReplay": {
+      "button": "Replay herunterladen",
+      "generating": "Wird generiert...",
+      "error": "Fehler beim Generieren des Replays"
+    }
+  },
+  "standings": {
+    "summary": {
+      "charts": {
+        "factionDistribution": "Fraktionsverteilung",
+        "gameTypes": "Spieltypen",
+        "activityLastMonths": "Aktivität der letzten Monate"
+      }
+    },
+    "table": {
+      "columns": {
+        "leaderboard": "Bestenliste",
+        "rank": "Rang",
+        "rating": "Bewertung",
+        "lastMatch": "Letztes Spiel",
+        "streak": "Serie",
+        "wins": "Siege",
+        "losses": "Niederlagen",
+        "total": "Gesamt",
+        "winRate": "Gewinnrate"
+      }
+    },
+    "faction": {
+      "bestRank": "Bester Rang",
+      "bestRating": "Beste Bewertung",
+      "bestWinRate": "Beste Gewinnrate"
+    }
+  },
+  "detailedStats": {
+    "filters": {
+      "selectFaction": "Fraktion auswählen",
+      "selectGameType": "Spieltyp auswählen"
+    },
+    "charts": {
+      "playTime": "Spielzeitverteilung",
+      "mapsWinRate": "Karten-Gewinnrate",
+      "factionVsFaction": "Fraktion vs Fraktion"
+    },
+    "noData": "Keine detaillierten Statistiken verfügbar"
+  },
+  "activity": {
+    "title": "Spieleraktivität",
+    "noData": "Keine Aktivitätsdaten verfügbar",
+    "filters": {
+      "timeRange": "Zeitraum"
+    },
+    "alerts": {
+      "noData": {
+        "title": "Keine Aktivitätsdaten",
+        "message": "Es scheint, als ob wir keine Aktivitätsdaten für diesen Spieler erhalten.",
+        "reportMessage": "Wenn dieser Fehler bestehen bleibt, melde ihn bitte auf"
+      },
+      "steamOnly": {
+        "title": "Keine COH3 Stats-Daten",
+        "message": "Diese Statistiken sind nur für Steam-Spieler verfügbar.",
+        "voteMessage": "Wenn du diese Statistiken auch für Konsolen möchtest, stimme dafür / melde es auf unserem"
+      }
+    },
+    "charts": {
+      "calendarDay": {
+        "title": "Aktivität nach Kalendertag"
+      },
+      "hourOfDay": {
+        "title": "Aktivität nach Tageszeit"
+      },
+      "weekDay": {
+        "title": "Aktivität nach Wochentag"
+      }
+    }
+  },
+  "teamsStandings": {
+    "title": "Arrangierte Team-Ranglisten",
+    "noData": "Keine Team-Daten für diesen Spieler verfügbar",
+    "axisTeams": "Achse",
+    "alliesTeams": "Alliierte",
+    "mostPlayed": "Meistgespielte Teams",
+    "mostRecent": "Aktuelle Teams"
+  },
+  "nemesis": {
+    "widget": {
+      "title": "Top 10 - 1v1 Nemesis",
+      "helperText": "Der Nemesis-Zähler muss 'ausgelöst' werden, indem du denselben Spieler 2 Mal an einem Tag (UTC) spielst. Nach dem Auslösen werden alle 1v1-Spiele mit diesem Spieler gezählt. Spielernamen werden vom letzten Spiel mit diesem Spieler gespeichert. Nur Steam-Spieler werden verfolgt.",
+      "noRecords": "Keine 1v1 Nemesis aufgezeichnet"
+    },
+    "columns": {
+      "alias": "Spielername",
+      "wins": "Siege",
+      "losses": "Niederlagen",
+      "ratio": "Verhältnis",
+      "diff": "Diff",
+      "total": "Gesamt"
+    },
+    "title": "1v1 Nemesis",
+    "noNemesis": "Keine 1v1 Nemesis",
+    "wins": "Siege",
+    "losses": "Niederlagen",
+    "rules": {
+      "trigger": "Der Nemesis-Zähler muss 'ausgelöst' werden",
+      "triggerCondition": "Auslösen durch Spielen mit demselben Spieler 2 Mal an einem Tag (UTC).",
+      "aliases": "Spielernamen werden vom letzten Spiel mit diesem Spieler gespeichert",
+      "counting": "Nach dem Auslösen werden alle 1v1-Spiele mit diesem Spieler gezählt.",
+      "updateTime": "Daten werden einmal täglich um 6 Uhr UTC aktualisiert.",
+      "steamOnly": "Nur Steam-Spieler werden verfolgt."
+    },
+    "alerts": {
+      "steamOnly": {
+        "title": "Keine COH3 Stats-Daten",
+        "message": "Diese Statistiken sind nur für Steam-Spieler verfügbar.",
+        "voteMessage": "Wenn du diese Statistiken auch für Konsolen möchtest, stimme dafür / melde es auf unserem"
+      }
+    }
+  }
+}
diff --git a/public/locales/de/ranking-tiers.json b/public/locales/de/ranking-tiers.json
new file mode 100644
index 000000000..1013d1ec3
--- /dev/null
+++ b/public/locales/de/ranking-tiers.json
@@ -0,0 +1,14 @@
+{
+  "title": "Ranglisten-Stufen in Company of Heroes 3",
+  "description": "Basierend auf der ELO eines Spielers werden Spieler in bestimmte Ligen und Stufen eingeteilt.",
+  "matchRequirement": "Ein Spieler benötigt mindestens 10 Spiele pro Fraktion in einem bestimmten Spieltyp, um einen Rang zu erhalten und in einer Stufe platziert zu werden.",
+  "inactivityNote": "Hinweis: Wenn ein Spieler längere Zeit inaktiv bleibt, verliert er seinen Rang. Er kann ihn jedoch durch ein einziges Spiel zurückerhalten.",
+  "table": {
+    "columns": {
+      "tierName": "Stufen-Name",
+      "eloRating": "ELO-Wertung",
+      "rank": "Rang"
+    },
+    "topPlayers": "Top {{count}} Spieler"
+  }
+}


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (6)</summary><blockquote>

<details>
<summary>public/locales/de/news.json (1)</summary><blockquote>

`7-7`: **Inconsistent capitalization in `pageTitle`.**  
“Company Of Heroes 3” should preserve the original game title casing, i.e. “Company of Heroes 3”. Please update:  
```diff
- "pageTitle": "Neueste Company Of Heroes 3 Nachrichten",
+ "pageTitle": "Neueste Company of Heroes 3 Nachrichten",
```

</blockquote></details>
<details>
<summary>public/locales/de/ranking-tiers.json (1)</summary><blockquote>

`8-11`: **Optional compound noun refinement.**  
The value for `"tierName"` could be written as “Stufenname” without a hyphen for more natural German:  
```diff
- "tierName": "Stufen-Name",
+ "tierName": "Stufenname",
```

</blockquote></details>
<details>
<summary>public/locales/de/home.json (1)</summary><blockquote>

`3-5`: **Meta description: avoid duplicate adjectives and inconsistent “News” term.**  
Consider removing “aktuelle” before “laufende Spiele” and replace “neueste COH3 News” with “neueste COH3 Nachrichten”:  
```diff
- "description": "Company of Heroes 3 Statistiken. Bestenlisten, Spielerkarten, vergangene Spiele, Einheitenstatistiken, DPS-Rechner, Kampfgruppen-Explorer, Waffen-Explorer, aktuelle laufende Spiele, neueste COH3 News, aktuelle YouTube- und Twitch-Streams. Und vieles mehr."
+ "description": "Company of Heroes 3 Statistiken. Bestenlisten, Spielerkarten, vergangene Spiele, Einheitenstatistiken, DPS-Rechner, Kampfgruppen-Explorer, Waffen-Explorer, laufende Spiele, neueste COH3 Nachrichten, aktuelle YouTube- und Twitch-Streams. Und vieles mehr."
```

</blockquote></details>
<details>
<summary>public/locales/de/desktopapp.json (1)</summary><blockquote>

`2-4`: **Suggest unifying `meta.title` ordering.**  
Use “COH3 Stats Desktop-App” to match the naming in other German meta titles:  
```diff
- "title": "Desktop-App von COH3 Stats",
+ "title": "COH3 Stats Desktop-App",
```

</blockquote></details>
<details>
<summary>public/locales/de/explorer.json (2)</summary><blockquote>

`17-20`: **Consider German compound noun for “Fraktionen Explorer”.**  
The current title reads “Company of Heroes 3 Fraktionen Explorer”. In German it’s idiomatic to form compounds (e.g. “Fraktionen-Explorer”) or rephrase as “Explorer für Company of Heroes 3-Fraktionen”. Please verify preferred style.

---

`21-31`: **Verify consistency of “Werte” vs. “Statistiken” for `stats`.**  
The unit page label uses “Werte” for “stats”. Elsewhere (e.g. main menus) “Statistiken” is used. Consider unifying terminology for clarity.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3d9e2647fa94bf2eb2d297c4db78e8ab2ae5af47 and f9c78424e054dbc289d1a9f675f80d149dba2302.

</details>

<details>
<summary>📒 Files selected for processing (9)</summary>

* `public/locales/de/common.json` (1 hunks)
* `public/locales/de/desktopapp.json` (1 hunks)
* `public/locales/de/explorer.json` (1 hunks)
* `public/locales/de/home.json` (1 hunks)
* `public/locales/de/leaderboards.json` (1 hunks)
* `public/locales/de/live-games.json` (1 hunks)
* `public/locales/de/news.json` (1 hunks)
* `public/locales/de/players.json` (1 hunks)
* `public/locales/de/ranking-tiers.json` (1 hunks)

</details>

<details>
<summary>🔇 Additional comments (27)</summary><blockquote>

<details>
<summary>public/locales/de/leaderboards.json (2)</summary>

`2-5`: **Translations with placeholders look correct.**  
The localization strings for `title`, `pageTitle`, `metaDescription`, and `errorTitle` correctly use `{{race}}` and `{{type}}` placeholders and provide clear German translations.

---

`6-11`: **Filter labels are accurate.**  
The translations for `region`, `platform`, `faction`, and `type` are consistent and match the English keys.

</details>
<details>
<summary>public/locales/de/news.json (1)</summary>

`3-6`: **Meta and keyword translations are accurate.**  
The German `title`, `description`, and `keywords` array cover SEO terms appropriately.

</details>
<details>
<summary>public/locales/de/ranking-tiers.json (1)</summary>

`2-5`: **Overall translation is clear.**  
The `title`, `description`, `matchRequirement`, and `inactivityNote` accurately convey the original meaning.

</details>
<details>
<summary>public/locales/de/home.json (1)</summary>

`21-24`: **Approve section labels.**  
The section titles for Reddit, YouTube, and Twitch are correctly translated and consistent with other locale files.

</details>
<details>
<summary>public/locales/de/explorer.json (3)</summary>

`1-16`: **Translations for the `common` section look correct.**  
All key–value pairs are accurately localized into German and the JSON structure is valid.

---

`32-43`: **Translations for `statsCard` keys are accurate.**  
All technical terms (Sichtweite, Beschleunigung, etc.) are correctly localized and match expected gameplay attributes.

---

`44-54`: **Translations for `weaponCard` keys are accurate.**  
Detailed terms like “Bewegungsgenauigkeitsmultiplikator” are properly constructed and match the English source.

</details>
<details>
<summary>public/locales/de/live-games.json (5)</summary>

`1-11`: **Metadata section is correctly localized.**  
Title, description, and keyword array entries are accurate German translations and the JSON syntax is valid.

---

`12-13`: **`pageTitle` translation is correct.**  
“Laufende PC-Spiele” clearly conveys the intended English label.

---

`14-33`: **Filter labels and options are well translated.**  
All filter names (“Laufende Spiele”, “Sortieren nach”) and options (1 vs 1 Automatch, VS KI, etc.) are accurate.

---

`34-54`: **Summary table translations are coherent.**  
The tooltip, no-games message, modes, totals, and table title map correctly to German.

---

`55-74`: **Games table section is correctly localized.**  
Column headers, switches, errors, and timestamp format align with the English source.

</details>
<details>
<summary>public/locales/de/common.json (4)</summary>

`2-32`: **Main menu translations are consistent and complete.**  
Nested `statsMenu`, `explMenu`, and `otherMenu` entries all appear to be localized correctly.

---

`33-35`: **Header translation is correct.**  
“Spieler im Spiel” matches the intended UI context.

---

`36-42`: **Footer translations are accurate.**  
All disclaimers, patch info, and links are properly localized.

---

`43-55`: **Clarify the abbreviation “RC” in column headers.**  
The key `"rc": "RC"` retains the English abbreviation. Please confirm what “RC” stands for (e.g., “Rank Change”, “Resource Count”, etc.) so the German label can be adjusted or annotated if needed.

</details>
<details>
<summary>public/locales/de/players.json (10)</summary>

`1-8`: **Meta keywords are correctly parameterized.**  
Placeholders like `{{name}}` are used consistently and the German text reads naturally.

---

`9-23`: **Player card titles and error messages are properly localized.**  
Dynamic titles with `{{name}}` align with expected patterns and error strings are clear.

---

`25-33`: **Tab labels are accurately translated.**  
All tabs (Standings, Recent Matches, Nemesis, etc.) are localized correctly.

---

`34-44`: **Player info section is well translated.**  
Entries for best ELO, win rate, and last match use correct grammar and placeholders.

---

`45-65`: **Recent matches section translations are coherent.**  
Filters, table columns, and replay download states are accurately localized.

---

`67-92`: **Standings section translations are complete.**  
Chart labels, table columns, and faction entries are correctly localized.

---

`94-105`: **Detailed stats translations are clear.**  
Filter labels and chart titles reflect the English source accurately.

---

`106-135`: **Activity section translations are accurate.**  
Alerts, chart titles, and filter names read naturally in German.

---

`136-143`: **Teams standings translations are correct.**  
Axis/Allies labels and titles match the original context.

---

`144-178`: **Nemesis section is correctly localized.**  
Widget helper text, rules, alerts, and column headers use proper German.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T11:41:08Z
user: login: allgoewer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T11:44:02Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T11:44:44Z

Review comments:
diff_hunk: @@ -0,0 +1,26 @@
+{
+  "meta": {
+    "title": "Desktop-App von COH3 Stats",
+    "description": "Lade die COH3 Stats Desktop-App {{version}} herunter. Keine Konfiguration erforderlich. OBS Overlay-Funktion. Detaillierte Infos zu deinen aktuellen Gegnern. Soundbenachrichtigungen bei neuen Spielen und mehr.",
+    "keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes echtzeit-infos"
+  },
path: public/locales/de/desktopapp.json
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Keyword field type mismatch.**  
In other locale files, `keywords` is an array, but here it’s a single string. This may break metadata handling. Please convert to an array:  
```diff
- "keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes echtzeit-infos"
+ "keywords": ["coh3", "coh3 stats", "coh3 desktop app", "coh3 OBS overlay", "company of heroes echtzeit-infos"]
```  



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    "title": "Desktop-App von COH3 Stats",
    "description": "Lade die COH3 Stats Desktop-App {{version}} herunter. Keine Konfiguration erforderlich. OBS Overlay-Funktion. Detaillierte Infos zu deinen aktuellen Gegnern. Soundbenachrichtigungen bei neuen Spielen und mehr.",
    "keywords": ["coh3", "coh3 stats", "coh3 desktop app", "coh3 OBS overlay", "company of heroes echtzeit-infos"]
  },
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-07T11:41:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,26 @@
+{
+  "meta": {
+    "title": "Desktop-App von COH3 Stats",
+    "description": "Lade die COH3 Stats Desktop-App {{version}} herunter. Keine Konfiguration erforderlich. OBS Overlay-Funktion. Detaillierte Infos zu deinen aktuellen Gegnern. Soundbenachrichtigungen bei neuen Spielen und mehr.",
+    "keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes echtzeit-infos"
+  },
path: public/locales/de/desktopapp.json
user: login: allgoewer
body: This is also a single string in the english locale
created_at: 2025-05-07T11:44:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,26 @@
+{
+  "meta": {
+    "title": "Desktop-App von COH3 Stats",
+    "description": "Lade die COH3 Stats Desktop-App {{version}} herunter. Keine Konfiguration erforderlich. OBS Overlay-Funktion. Detaillierte Infos zu deinen aktuellen Gegnern. Soundbenachrichtigungen bei neuen Spielen und mehr.",
+    "keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes echtzeit-infos"
+  },
path: public/locales/de/desktopapp.json
user: login: coderabbitai[bot]
body: <details>
<summary>🧩 Analysis chain</summary>

🏁 Script executed:
```
#!/bin/bash
# Look for the English locale file for the desktop app
cat public/locales/en/desktopapp.json
```

Length of output: 1117

---



</details>

@allgoewer You're absolutely right. I just checked the English locale file and confirmed that `keywords` is indeed a single string there as well:

```json
"keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes realtime info"
```

I apologize for the incorrect suggestion. Your implementation is consistent with the existing pattern in the codebase, so no changes are needed.

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: allgoewer
PR: cohstats/coh3-stats#771
File: public/locales/de/desktopapp.json:3-6
Timestamp: 2025-05-07T11:44:43.291Z
Learning: In the COH3 Stats project, the `keywords` field in locale JSON files is stored as a single comma-separated string, not as an array.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>




<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer><details>
<summary>🧩 Analysis chain</summary>

🏁 Script executed:
```
#!/bin/bash
# Look for the English locale file for the desktop app
cat public/locales/en/desktopapp.json
```

Length of output: 1117

---



</details>

@allgoewer You're absolutely right. I just checked the English locale file and confirmed that `keywords` is indeed a single string there as well:

```json
"keywords": "coh3, coh3 stats, coh3 desktop app, coh3 OBS overlay, company of heroes realtime info"
```

I apologize for the incorrect suggestion. Your implementation is consistent with the existing pattern in the codebase, so no changes are needed.

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: allgoewer
PR: cohstats/coh3-stats#771
File: public/locales/de/desktopapp.json:3-6
Timestamp: 2025-05-07T11:44:43.291Z
Learning: In the COH3 Stats project, the `keywords` field in locale JSON files is stored as a single comma-separated string, not as an array.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>

</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-07T11:44:44Z
author_association: CONTRIBUTOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-07T11:39:03Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

A comprehensive set of German localization JSON files has been added for various features of a Company of Heroes 3 statistics website and related applications. These files provide German translations for UI elements, metadata, filters, table columns, error messages, and feature descriptions across the home page, leaderboards, explorer, live games, news, players, ranking tiers, and the desktop app.

## Changes

| Files                                | Change Summary                                                                                           |
|------------------------------------|---------------------------------------------------------------------------------------------------------|
| public/locales/de/common.json       | Added German translations for general UI menus, headers, footers, and table columns.                    |
| public/locales/de/desktopapp.json   | Added German localization for desktop app metadata, download section, and feature descriptions.          |
| public/locales/de/explorer.json     | Added German translations for explorer feature UI, including units, buildings, stats, and attributes.    |
| public/locales/de/home.json         | Added German translations for home page metadata, news, tools, leaderboards, and media sections.         |
| public/locales/de/leaderboards.json | Added German localization for leaderboard UI elements, filters, and error messages.                      |
| public/locales/de/live-games.json   | Added German translations for live games UI, filters, tables, and error messages.                        |
| public/locales/de/news.json         | Added German localization for news page metadata, titles, sources, and article navigation.               |
| public/locales/de/players.json      | Added German translations for player statistics, cards, tabs, matches, standings, activity, and nemesis. |
| public/locales/de/ranking-tiers.json| Added German localization for ranking tiers, descriptions, columns, and player count templates.          |

## Suggested labels

`localization`

## Suggested reviewers

- petrvecera

## Poem

> 🐰  
> Ein Häschen hoppelt, froh und heiter,  
> Jetzt spricht das Spiel auf Deutsch viel weiter!  
> Mit Übersetzungen, fein und klar,  
> Wird COH3 für alle wunderbar.  
> Die Menüs sind bunt, die Daten echt,  
> So macht Statistik Freude – ganz gerecht!  
> Prost auf Lokalisierung, hopp, hopp, hurra!  
>

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between f9c78424e054dbc289d1a9f675f80d149dba2302 and faf0a58992d573e1180f98150622818320b763d3.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `public/locales/de/common.json` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* public/locales/de/common.json

</details>

</details>
<!-- internal state start -->


<!-- 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= -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=cohstats/coh3-stats&utm_content=771):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: petrvecera
created_at: 2025-05-07T11:44:59Z
body: >I have one remaining question: What does "RC" in common.json refer to?
<img width="812" alt="image" src="https://github.com/user-attachments/assets/3691bf70-94c8-4003-9018-3fc9eea0222e" />

It means - Rank Change
author_association: MEMBER
user: login: allgoewer
created_at: 2025-05-07T11:51:42Z
body: BTW @petrvecera , if you want I could do a short writeup on my workflow, maybe you could link that for others. I'm sure it'll help reducing the barrier for getting more translations in.
author_association: CONTRIBUTOR
user: login: petrvecera
created_at: 2025-05-07T12:11:25Z
body: > BTW @petrvecera , if you want I could do a short writeup on my workflow, maybe you could link that for others. I'm sure it'll help reducing the barrier for getting more translations in.

Sure thing! You can add it to the README or if it's more of it, we can add README.md file to to locales https://github.com/cohstats/coh3-stats/tree/master/public/locales 🙏 

I will merge this so we can check it deployed. 
author_association: MEMBER
user: login: petrvecera
created_at: 2025-05-07T12:19:38Z
body: @allgoewer it's live on dev :)  https://dev.coh3stats.com/ 🎉  let me know if it looks ok, feel free to create new PR if something is off . Thank you very much for the contribution
author_association: MEMBER
user: login: allgoewer
created_at: 2025-05-07T12:30:58Z
body: looks pretty good I'd say. Just noticed that there are big parts of the page which do not currently support localization. If you ever get to expanding that or if someone finds an issue with the current translation, you can always @ me.

I'll see if I can do the AI writeup sometime this week, I'll open a PR when it's ready.
author_association: CONTRIBUTOR