Die Admin-UI von EmDash ist mit Lingui für die Nachrichtenextraktion und Lunaria für die Verfolgung des Übersetzungsfortschritts übersetzbar. Alle Übersetzungen befinden sich in PO-Dateien (gettext) — eine pro Sprache.
Übersetzungsstatus
Sehen Sie das Übersetzungs-Dashboard für den aktuellen Fortschritt über alle Sprachen.
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 im laufenden Admin-Panel eine Vorschau anzeigt, bevor er einreicht. Unbeaufsichtigte maschinelle Ausgabe wird nicht akzeptiert. Siehe KI-gestützte Übersetzungen und Übersetzungen testen unten.
Einen String unübersetzt zu lassen ist besser als ihn falsch zu übersetzen. Eine falsche Übersetzung führt Benutzer in die Irre; der englische Fallback ist nur eine Unannehmlichkeit.
Dateistruktur
Übersetzungskataloge befinden sich in packages/admin/src/locales/:
packages/admin/src/locales/
├── en/
│ └── messages.po # Englisch (Quelle)
├── de/
│ └── messages.po # Deutsch
└── ...
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
-
Prüfen Sie das Übersetzungs-Dashboard, um zu sehen, was bearbeitet werden muss. Prüfen Sie offene PRs, um doppelte Arbeit zu vermeiden.
-
Forken Sie das Repo und erstellen Sie einen Branch:
git checkout -b i18n/de -
Öffnen Sie die PO-Datei Ihrer Sprache (z.B.
packages/admin/src/locales/de/messages.po). -
Füllen Sie die Übersetzungen aus. Jeder Eintrag sieht so aus:
#: packages/admin/src/components/LoginPage.tsx:304 msgid "Sign in with Passkey" msgstr ""Füllen Sie die
msgstraus:#: packages/admin/src/components/LoginPage.tsx:304 msgid "Sign in with Passkey" msgstr "Mit Passkey anmelden" -
Testen Sie Ihre Übersetzungen (siehe unten).
-
Öffnen Sie einen PR mit Ziel
main. Titelformat:i18n(de): add/update German translations.
Was übersetzt werden soll
- Der
msgstr-Wert für jeden Eintrag.
Was NICHT übersetzt werden soll
msgid-Werte — diese sind Nachschlage-Schlüssel.- Interpolationsplatzhalter wie
{error},{email},{label}— behalten Sie diese genau bei. - XML-artige Tags wie
<0>,</0>— diese umschließen interaktive Elemente (Links, Buttons). Behalten Sie die Tags 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. Beides muss in Ihrer Übersetzung genau so erscheinen wie in der Quelle — gleiche Namen, gleiche Verschachtelung.
Übersetzungen testen
-
Kompilieren und Demo ausführen:
pnpm run locale:compile pnpm build pnpm --filter emdash-demo dev -
Sprache wechseln auf der Admin-Einstellungsseite und überprüfen Sie, ob Ihre Übersetzungen im Kontext korrekt aussehen.
Pseudo-Sprache
EmDash liefert eine Pseudo-Sprache mit, die alle umschlossenen Strings in akzentuierte Lookalikes verfälscht — "Dashboard" wird zu "Ðàšĥƀöàřð" und so weiter. Jeder String, der in normalem Englisch erscheint, während die Pseudo-Sprache aktiv ist, hat entweder keinen 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 in der Sprachauswahl auf der Login-Seite 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:
-
Fügen Sie die Sprache zu
packages/admin/src/locales/locales.tshinzu:export const LOCALES: LocaleDefinition[] = [ { code: "en", label: "English", enabled: true }, { code: "de", label: "Deutsch", enabled: true }, // ... { code: "vi", label: "Tiếng Việt", enabled: false }, // Ihre hinzufügen ];Dies ist die einzige Wahrheitsquelle —
lingui.config.ts,lunaria.config.tsund die Admin-Laufzeit leiten ihre Sprachlisten alle aus dieser Datei ab. Setzen Sieenabled: false, während die Übersetzung in Arbeit ist. Ein Maintainer aktiviert die Sprache, sobald sie eine ausreichende Abdeckung für die Verwendung in der Admin-UI hat. -
Führen Sie die Extraktion aus, um die leere PO-Datei zu generieren:
pnpm run locale:extractDies erstellt
packages/admin/src/locales/{ihre-sprache}/messages.pomit allen zur Übersetzung bereiten Strings. -
Übersetzen und testen Sie gemäß den obigen Schritten.
Übersetzungsstandards
Genauigkeit
Übersetzungen sollten den englischen Quelltext auf Muttersprachlerniveau treu wiedergeben. Fügen Sie keine Bedeutung hinzu, entfernen oder interpretieren Sie sie nicht um. Wenn ein Quellstring mehrdeutig ist, prüfen Sie den #: Kommentar für den Dateiverweis — lesen Sie den Komponentencode, um den Kontext zu verstehen.
Konsistenz
Verwenden Sie konsistente Terminologie innerhalb Ihrer Sprache. Wenn Sie “collection” an einer Stelle als “Sammlung” übersetzen, wechseln Sie nicht an anderer Stelle zu “Kollektion”. Wenn Ihre Sprache bereits Übersetzungen hat, lesen Sie die bestehende PO-Datei durch, bevor Sie beginnen, um die etablierte Terminologie zu übernehmen.
Ton
Die Admin-UI verwendet einen direkten, professionellen Ton. Passen Sie das in Ihrer Sprache an — vermeiden Sie zu formelle oder zu lockere Formulierungen.
KI-gestü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 betreuen:
- 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 Formulierungen, falsche Fachbegriffe.
- Ein fließender Sprecher muss die Übersetzungen in der laufenden Admin-UI in der Vorschau ansehen. 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.
Teilweise Übersetzungen
Teilweise Ü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.