EmDash übersetzen

Auf dieser Seite

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

Übersetzungsstatus

Den aktuellen Fortschritt aller Locales sehen Sie im Übersetzungs-Dashboard.

Wer übersetzen kann

Übersetzungen müssen von Muttersprachlern oder fließend Sprechenden stammen. Wir akzeptieren keine maschinell generierten Übersetzungen. Wenn Sie KI-Tools zur Unterstützung verwenden, müssen Sie jeden String manuell überprüfen und das Ergebnis im Kontext testen (siehe Übersetzungen testen weiter unten).

Wir haben lieber keine Übersetzung für einen String als eine falsche. Eine falsche Übersetzung ist schlimmer als die Anzeige des englischen Fallbacks — sie führt Benutzer aktiv in die Irre.

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. Eine leere msgstr bedeutet „noch nicht übersetzt” — Lingui fällt zur Laufzeit auf Englisch zurück.

Strings übersetzen

  1. Prüfen Sie das Übersetzungs-Dashboard, um zu sehen, was bearbeitet werden muss. Prü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 Locale (z. B. packages/admin/src/locales/de/messages.po).

  4. Tragen Sie die Übersetzungen ein. 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. Erstellen Sie einen PR mit Ziel main. Titelformat: i18n(de): add/update German translations.

Was übersetzt werden soll

  • Der msgstr-Wert jedes Eintrags.

Was NICHT übersetzt werden soll

  • msgid-Werte — das sind Suchschlüssel.
  • Interpolationsplatzhalter wie {error}, {email}, {label} — lassen Sie diese unverändert.
  • XML-ähnliche 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 — das sind von Lingui hinzugefügte Quellreferenzen.

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 exakt wie im Quelltext erscheinen — gleiche Namen, gleiche Verschachtelung.

Übersetzungen testen

  1. Kompilieren und starten Sie die Demo:

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

Pseudo-Locale

EmDash enthält eine Pseudo-Locale, die alle umschlossenen Strings in akzentuierte Lookalikes umwandelt — "Dashboard" wird zu "Ðàšĥƀöàřð", und so weiter. Jeder String, der bei aktiver Pseudo-Locale in normalem Englisch erscheint, hat entweder keinen t..“-Wrapper oder stammt 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 Entwicklungsserver neu. Die Pseudo-Locale erscheint als Pseudo in der Sprachauswahl auf der Anmeldeseite und in den Einstellungen. Wechseln Sie dorthin, um nicht umschlossene Strings auf einen Blick zu erkennen.

Eine neue Sprache hinzufügen

Wenn Ihre Sprache noch keine PO-Datei hat:

  1. Fügen Sie die Locale 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 Administrations-Runtime leiten ihre Locale-Listen alle aus dieser Datei ab. Setzen Sie enabled: false, es sei denn, Ihre Übersetzungen haben eine Abdeckung von 100 % — wir aktivieren sie, 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 übersetzungsbereiten Strings.

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

Übersetzungsstandards

Genauigkeit

Übersetzungen sollen den englischen Quelltext auf muttersprachlichem Niveau originalgetreu wiedergeben. Fügen Sie keine Bedeutung hinzu, entfernen Sie keine und interpretieren Sie keine um. Wenn ein Quellstring mehrdeutig ist, prüfen Sie den #:-Kommentar für den Speicherort der Quelldatei — lesen Sie den Komponentencode, um den Kontext zu verstehen.

Konsistenz

Verwenden Sie innerhalb Ihrer Locale eine einheitliche Terminologie. Wenn Sie „collection” an einer Stelle als „Sammlung” übersetzen, wechseln Sie anderswo nicht zu „Kollektion”. Wenn Ihre Sprache bereits Übersetzungen hat, lesen Sie die vorhandene PO-Datei durch, bevor Sie beginnen, um die etablierte Terminologie beizubehalten.

Tonfall

Die Administrationsoberfläche verwendet einen direkten, professionellen Ton. Passen Sie sich dem in Ihrer Sprache an — vermeiden Sie übermäßig formelle oder übermäßig lockere Formulierungen.

KI-gestützte Übersetzungen

Sie dürfen KI-Tools verwenden, um Übersetzungsentwürfe zu erstellen, aber:

  • Sie müssen jeden String selbst überprüfen. KI-Tools machen subtile Fehler, die nur ein fließend Sprechender bemerkt — falsches Register, unnatürliche Formulierungen, falsche Fachbegriffe.
  • Sie müssen das Ergebnis in der laufenden Administrationsoberfläche testen. KI-Tools kennen keine Layout-Beschränkungen oder UI-Kontext.
  • Geben Sie die KI-Nutzung in Ihrer PR-Beschreibung an.
  • PRs mit offensichtlich ungeprüften maschinellen Übersetzungen werden geschlossen.

Teilübersetzungen

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