Mehrsprachigkeit: eigene i18n-CSV-Dateien richtig pflegen
Mehrsprachigkeit: eigene i18n-CSV-Dateien richtig pflegen
~5 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026
Jede sichtbare Zeichenkette in diesem Modul - der Kontomenüpunkt aus Kapitel 52, die Fehlermeldung des Redeem-Controllers aus Kapitel 50, das Label eines System/Config-Feldes aus Kapitel 7 - läuft durch Magentos eigenes Übersetzungssystem, sobald sie in __() eingepackt ist. Die Übersetzung selbst lebt nicht im Code, sondern in einfachen CSV-Dateien im Modul: i18n/de_DE.csv und i18n/en_US.csv.
Jede übersetzte Zeichenkette immer mit __()
Der Quelltext eines Phrase-Aufrufs bleibt Konvention nach immer englisch - genau wie Magento-Core es macht, und passend zu diesem Projekt, in dem Code-Kommentare grundsätzlich auf Englisch stehen (siehe CLAUDE.md). Die deutsche Fassung entsteht ausschließlich über die CSV-Datei, nie über eine zweite __()-Zeile im Code.
// Placeholder statt String-Konkatenation - sonst passt der CSV-Key nie exakt:
throw new LocalizedException(
__('You need %1 more points to redeem this reward.', $missingPoints)
);
// Falsch - der Quellstring ändert sich mit jedem $missingPoints-Wert,
// eine CSV-Übersetzung kann so niemals matchen:
throw new LocalizedException(
__('You need ' . $missingPoints . ' more points to redeem this reward.')
);Das CSV-Format
Zwei Spalten, ohne Kopfzeile: Quellstring, Übersetzung. UTF-8 ohne Byte-Order-Mark, Kommas und Anführungszeichen innerhalb eines Werts wie im Standard-CSV mit doppelten Anführungszeichen maskiert.
"My Points","Meine Punkte"
"Redeem Reward","Prämie einlösen"
"You need %1 more points to redeem this reward.","Du brauchst noch %1 Punkte, um diese Prämie einzulösen."
"Reward redemption is temporarily disabled.","Die Einlösung von Prämien ist vorübergehend deaktiviert."Achtung: Der Quellstring in der CSV-Datei muss zeichengenau mit dem ersten Argument des __()-Aufrufs übereinstimmen - Groß-/Kleinschreibung, Satzzeichen, sogar ein abschließender Punkt zählen mit. Weicht auch nur ein Zeichen ab, greift die Übersetzung nicht, und Magento fällt stillschweigend auf den englischen Quellstring zurück - ohne Fehler, ohne Log-Eintrag.
Phrasen automatisch einsammeln
bin/magento i18n:collect-phrases durchsucht den Quellcode nach __()-Aufrufen und schreibt neu gefundene Phrasen in die Ziel-CSV, mit Quelle und Übersetzung zunächst identisch - bereits vorhandene, schon übersetzte Zeilen bleiben dabei unangetastet, solange sich der Quellstring nicht geändert hat.
bin/magento i18n:collect-phrases app/code/Mironsoft/Loyalty \
-o app/code/Mironsoft/Loyalty/i18n/de_DE.csvTipp: Nach jedem Lauf von i18n:collect-phrases stehen frisch gefundene Zeilen mit identischer Quelle und "Übersetzung" in der CSV - eine kurze Diff-Prüfung vor dem Commit zeigt zuverlässig, welche Zeilen noch echte deutsche Übersetzungen brauchen.
Nach jeder Änderung: Cache leeren
Übersetzungen laufen über den translate-Cache-Typ. Eine geänderte CSV-Zeile wirkt sich außerhalb des developer-Modus erst nach bin/cache-clean translate aus.
Kapitel 90 vertieft die Frage, wie sich diese eine CSV-Datei pro Locale auf zwei ganz unterschiedliche Bereiche verteilt: Storefront und Admin-Oberfläche.