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
-
Überprüfen Sie das Übersetzungs-Dashboard, um zu sehen, was bearbeitet werden muss. Überprüfen Sie offene PRs, um doppelte Arbeit zu vermeiden.
-
Forken Sie das Repository 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 Ü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 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
-
Kompilieren und starten Sie die Demo:
pnpm run locale:compile pnpm build pnpm --filter emdash-demo dev -
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:
-
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: "ja", label: "日本語", enabled: false }, // add yours ];Dies ist die einzige Quelle der Wahrheit —
lingui.config.ts,lunaria.config.tsund die Admin-Laufzeit leiten alle ihre Sprachlisten aus dieser Datei ab. Setzen Sieenabled: false, es sei denn, Ihre Übersetzungen haben 100% Abdeckung — ein Maintainer aktiviert es, sobald die Übersetzung eine ausreichende Abdeckung erreicht. -
Führen Sie die Extraktion aus, um die leere PO-Datei zu generieren:
pnpm run locale:extractDies erstellt
packages/admin/src/locales/{your-locale}/messages.pomit allen Strings bereit zur Übersetzung. -
Ü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.