EmDash übersetzen

Auf dieser Seite

Die Admin-Oberfläche von EmDash ist mit Lingui für die Nachrichtenextraktion und Lunaria für die Verfolgung des Übersetzungsfortschritts übersetzbar. Alle Übersetzungen befinden sich in PO (gettext)-Dateien — eine pro Sprache.

Übersetzungsstatus

Sehen Sie sich das Übersetzungs-Dashboard an, um den aktuellen Fortschritt über alle Sprachen hinweg zu sehen.

Wer kann übersetzen

Jede Übersetzung muss von einem Muttersprachler oder fließenden Sprecher betreut werden. KI-generierte Übersetzungen werden akzeptiert, aber nur wenn ein fließender Sprecher jeden String überprüft und ihn im laufenden Admin-Panel vorschaut, bevor er eingereicht wird. Unbeaufsichtigte maschinelle Ausgaben werden nicht akzeptiert. Siehe KI-unterstützte Übersetzungen und Ihre Übersetzungen testen weiter unten.

Einen String unübersetzt zu lassen ist besser als ihn falsch zu übersetzen. Eine falsche Übersetzung führt Benutzer in die Irre; die englische Rückfalloption bereitet ihnen nur Unannehmlichkeiten.

Dateistruktur

Übersetzungskataloge befinden sich in packages/admin/src/locales/:

packages/admin/src/locales/
├── en/
│   └── messages.po    # English (source)
├── de/
│   └── messages.po    # German
└── ...

Jede .po-Datei enthält msgid/msgstr-Paare. Die msgid ist der englische Quelltext; die msgstr ist Ihre Übersetzung. Leere msgstr bedeutet “noch nicht übersetzt” — Lingui greift zur Laufzeit auf Englisch zurück.

Strings übersetzen

  1. Überprüfen Sie das Übersetzungs-Dashboard, um zu sehen, was bearbeitet werden muss. Überprüfen Sie offene PRs, um doppelte Arbeit zu vermeiden.

  2. Forken Sie das Repository und erstellen Sie einen Branch:

    git checkout -b i18n/de
  3. Öffnen Sie die PO-Datei Ihrer Sprache (z.B. packages/admin/src/locales/de/messages.po).

  4. Füllen Sie Übersetzungen aus. Jeder Eintrag sieht so aus:

    #: packages/admin/src/components/LoginPage.tsx:304
    msgid "Sign in with Passkey"
    msgstr ""

    Füllen Sie die msgstr aus:

    #: packages/admin/src/components/LoginPage.tsx:304
    msgid "Sign in with Passkey"
    msgstr "Mit Passkey anmelden"
  5. Testen Sie Ihre Übersetzungen (siehe unten).

  6. Öffnen Sie einen PR mit Ziel main. Titelformat: i18n(de): add/update German translations.

Was zu übersetzen ist

  • Der msgstr-Wert für jeden Eintrag.

Was NICHT zu übersetzen ist

  • msgid-Werte — diese sind Lookup-Keys.
  • Interpolationsplatzhalter wie {error}, {email}, {label} — behalten Sie sie genau so bei.
  • XML-artige Tags wie <0>, </0> — diese umschließen interaktive Elemente (Links, Buttons). Behalten Sie die Tags bei und übersetzen Sie den Text dazwischen.
  • Kommentare, die mit #: beginnen — diese sind Quellenreferenzen, die von Lingui hinzugefügt wurden.

Interpolation und Tags

Einige Strings enthalten Platzhalter und Tags:

msgid "Authentication error: {error}"
msgstr "Authentifizierungsfehler: {error}"

msgid "Don't have an account? <0>Sign up</0>"
msgstr "Noch kein Konto? <0>Registrieren</0>"

msgid "If an account exists for <0>{email}</0>, we've sent a sign-in link."
msgstr "Falls ein Konto für <0>{email}</0> existiert, haben wir einen Anmeldelink gesendet."

Platzhalter ({error}, {email}) werden zur Laufzeit durch dynamische Werte ersetzt. Tags (<0>...</0>) umschließen React-Komponenten. Beide müssen in Ihrer Übersetzung genau so erscheinen wie in der Quelle — gleiche Namen, gleiche Verschachtelung.

Ihre Übersetzungen testen

  1. Kompilieren und starten Sie die Demo:

    pnpm run locale:compile
    pnpm build
    pnpm --filter emdash-demo dev
  2. Wechseln Sie die Sprache auf der Admin-Einstellungsseite und überprüfen Sie, ob Ihre Übersetzungen im Kontext korrekt aussehen.

Pseudo-Sprache

EmDash liefert eine Pseudo-Sprache, die alle umschlossenen Strings in akzentuierte Lookalikes verwandelt — "Dashboard" wird zu "Ðàšĥƀöàřð", und so weiter. Jeder String, der in normalem Englisch erscheint, während die Pseudo-Sprache aktiv ist, fehlt entweder ein t\…“-Wrapper oder kommt von außerhalb des Katalogs.

Um sie zu aktivieren, fügen Sie Folgendes zu Ihrer .env-Datei im Demo-Verzeichnis hinzu:

EMDASH_PSEUDO_LOCALE=1

Starten Sie dann den Dev-Server neu. Die Pseudo-Sprache erscheint als Pseudo im Sprachauswähler auf der Login-Seite und in den Einstellungen. Wechseln Sie dorthin, um unumschlossene Strings auf einen Blick zu erkennen.

Eine neue Sprache hinzufügen

Wenn Ihre Sprache noch keine PO-Datei hat:

  1. Fügen Sie die Sprache zu packages/admin/src/locales/locales.ts hinzu:

    export const LOCALES: LocaleDefinition[] = [
      { code: "en", label: "English", enabled: true },
      { code: "de", label: "Deutsch", enabled: true },
      // ...
      { code: "ja", label: "日本語", enabled: false },  // add yours
    ];

    Dies ist die einzige Quelle der Wahrheit — lingui.config.ts, lunaria.config.ts und die Admin-Laufzeit leiten alle ihre Sprachlisten aus dieser Datei ab. Setzen Sie enabled: false, es sei denn, Ihre Übersetzungen haben 100% Abdeckung — ein Maintainer aktiviert es, sobald die Übersetzung eine ausreichende Abdeckung erreicht.

  2. Führen Sie die Extraktion aus, um die leere PO-Datei zu generieren:

    pnpm run locale:extract

    Dies erstellt packages/admin/src/locales/{your-locale}/messages.po mit allen Strings bereit zur Übersetzung.

  3. Übersetzen und testen Sie gemäß den oben genannten Schritten.

Übersetzungsstandards

Genauigkeit

Übersetzungen sollten den englischen Quelltext auf Muttersprachlerniveau treu wiedergeben. Fügen Sie nichts hinzu, entfernen Sie nichts und interpretieren Sie die Bedeutung nicht neu. Wenn ein Quellstring mehrdeutig ist, überprüfen Sie den #:-Kommentar für den Speicherort der Quelldatei — lesen Sie den Komponentencode, um den Kontext zu verstehen.

Konsistenz

Verwenden Sie konsistente Terminologie innerhalb Ihrer Sprache. Wenn Sie “collection” als “Sammlung” an einer Stelle übersetzen, wechseln Sie nicht zu “Kollektion” an anderer Stelle. Wenn Ihre Sprache bereits Übersetzungen hat, lesen Sie die vorhandene PO-Datei durch, bevor Sie beginnen, um die etablierte Terminologie zu übernehmen.

Ton

Die Admin-Oberfläche verwendet einen direkten, professionellen Ton. Passen Sie das in Ihrer Sprache an — vermeiden Sie übermäßig formelle oder übermäßig lockere Formulierungen.

KI-unterstützte Übersetzungen

Sie können Übersetzungen mit KI-Tools generieren, einschließlich eines vollständigen ersten Durchgangs, aber ein fließender Sprecher muss das Ergebnis überwachen:

  • Ein fließender Sprecher muss jeden String überprüfen. KI-Tools machen subtile Fehler, die nur ein fließender Sprecher erkennt — falsches Register, unnatürliche Formulierung, falsche technische Begriffe.
  • Ein fließender Sprecher muss die Übersetzungen in der laufenden Admin-Oberfläche vorschauen. KI-Tools haben kein Bewusstsein für Layout-Einschränkungen oder UI-Kontext.
  • Geben Sie die KI-Nutzung in Ihrer PR-Beschreibung an.
  • PRs mit unbeaufsichtigten maschinellen Übersetzungen werden geschlossen.

Teilübersetzungen

Teilübersetzungen sind willkommen. Sie müssen nicht jeden String in einem PR übersetzen — jeder Fortschritt hilft. Unübersetzte Strings greifen zur Laufzeit auf Englisch zurück.