2026-02-20 22:08:04 +01:00

5.1 KiB

name description argument-hint allowed-tools user-invocable
translation-review Überprüft Django .po Übersetzungsdateien auf Qualität, Kontext-Passgenauigkeit, Konsistenz und fehlende Übersetzungen. Verbessert Übersetzungen direkt. Für Translation-QA und Review. [locale] [--dry-run] Glob, Grep, Read, Edit, Write true

Django Translation Review

Überprüft und verbessert Django .po Übersetzungsdateien im league-planner Projekt. Stellt sicher, dass Übersetzungen kontextgerecht, konsistent und vollständig sind.

Argumente

  • locale (optional): Bestimmte Sprache prüfen, z.B. de, fr, ko. Ohne Angabe → alle Locales.
  • --dry-run (optional): Nur Bericht erstellen, keine Änderungen vornehmen.

Workflow

Phase 1: Discovery

  1. Finde alle .po Files mit Glob: **/locale/*/LC_MESSAGES/django.po
  2. Filtere nach dem angegebenen Locale (falls angegeben)
  3. Überspringe locale/common/ (das ist ein Referenz-File, kein echtes Locale)
  4. Lies die .po Files und erstelle eine Übersicht: Locale, Anzahl Einträge, leere msgstr, fuzzy-Einträge

Phase 2: Kontext-Analyse

Um kontextgerechte Übersetzungen sicherzustellen, lies diese Kontext-Quellen:

  1. scheduler/choices.py — Enthält Sport-spezifische Choice-Tuples mit gettext_lazy. Hier ist der Fachkontext (Sport/Liga-Planung) am klarsten.
  2. Source-Referenzen in .po — Jeder msgid hat #: Kommentare die zeigen, wo der String verwendet wird. Nutze diese um den Kontext zu verstehen:
    • Strings aus templates/ → UI-Labels, Buttons, Überschriften
    • Strings aus models.py → Feld-Labels, verbose_names
    • Strings aus choices.py → Dropdown-/Select-Optionen
    • Strings aus views.py → Nachrichten, Fehlermeldungen
    • Strings aus helpers.py → Solver-/System-Meldungen

Phase 3: Qualitätsprüfung

Prüfe jede Übersetzung auf diese Kriterien:

Kritisch

  • Leere Übersetzungen: msgstr "" wo eine Übersetzung erwartet wird
  • Fuzzy-Markierungen: #, fuzzy Einträge die manuell bestätigt werden müssen
  • Falsche Platzhalter: %(name)s, {0}, %d müssen exakt übereinstimmen

Kontext

  • Sport-Fachbegriffe: Im Kontext von Liga-Planung die richtigen Begriffe verwenden:
    • "Match" → "Spiel" (nicht "Übereinstimmung")
    • "Day" (als Spieltag) → "Spieltag" (nicht "Tag")
    • "Round" → "Runde" oder "Spieltag" je nach Kontext
    • "Home/Away" → "Heim/Auswärts"
    • "Fixture" → "Begegnung" oder "Ansetzung"
    • "Draw" → "Auslosung" (nicht "Zeichnung")
    • "Group" (im Turnier) → "Gruppe"
    • "Seed" → "Setzliste"/"gesetzt" (nicht "Samen")
    • "Clash" → "Überschneidung" oder "Konflikt"
    • "Scenario" → "Szenario"
    • "Constraint" → "Nebenbedingung" oder "Einschränkung"
    • "Wish" → "Wunsch" (Planungswunsch)
    • "Run" (Solver-Run) → "Lauf" oder "Durchlauf"
    • "Slot" → "Zeitfenster" oder "Slot"

Konsistenz

  • Gleiche Begriffe gleich übersetzen: Wenn "Scenario" einmal "Szenario" ist, muss es überall "Szenario" sein
  • Stil-Konsistenz: Formell/Informell einheitlich (Du vs. Sie). league-planner verwendet Du-Form
  • Groß-/Kleinschreibung: Deutsche Substantive groß, UI-Labels konsistent

Stil

  • Natürliche Sprache: Übersetzungen sollen sich natürlich anfühlen, nicht wie maschinelle Übersetzung
  • Kürze: UI-Labels kurz halten, keine unnötigen Wörter
  • Aktive Sprache: "Szenario wurde erstellt" statt "Es wurde ein Szenario erstellt"

Phase 4: Änderungen anwenden

Wenn NICHT --dry-run:

  1. Für jede gefundene Verbesserung, nutze das Edit-Tool um den msgstr zu aktualisieren
  2. Entferne #, fuzzy Markierungen wenn die Übersetzung korrekt bestätigt wurde
  3. Fülle leere msgstr aus, sofern der Kontext eine sichere Übersetzung erlaubt
  4. WICHTIG: Ändere NIEMALS msgid — nur msgstr darf geändert werden
  5. WICHTIG: Erhalte alle #: Source-Referenz-Kommentare unverändert
  6. WICHTIG: Erhalte Python-Format-Strings exakt (%(name)s, {0}, %d etc.)

Phase 5: Zusammenfassung

Gib am Ende eine strukturierte Zusammenfassung:

## Translation Review — [Locale]

### Statistik
- Geprüfte Einträge: X
- Verbesserungen: Y
- Fehlende Übersetzungen (gefüllt): Z
- Fuzzy aufgelöst: W
- Unverändert: V

### Änderungen
| # | msgid | Alt | Neu | Grund |
|---|-------|-----|-----|-------|
| 1 | "..." | "..." | "..." | Kontext/Konsistenz/Stil |

### Offene Punkte
- [Einträge die manuelle Prüfung brauchen]

Wichtige Regeln

  • Konservativ sein: Im Zweifel lieber nicht ändern als eine falsche Übersetzung einführen
  • Kontext prüfen: Immer die #: Source-Referenzen lesen bevor eine Übersetzung geändert wird
  • Format-Strings erhalten: %(count)d Spiele nicht %(anzahl)d Spiele
  • Plural-Forms beachten: msgid_plural / msgstr[0] / msgstr[1] korrekt handhaben
  • Kein Overengineering: Wenn eine Übersetzung gut genug ist, nicht ändern nur um sie "schöner" zu machen
  • Locale en: Englische .po Files haben typischerweise leere msgstr — das ist korrekt, da msgid bereits Englisch ist. Diese NICHT ausfüllen.
  • Locale common: Ist ein Referenz-File, nicht bearbeiten