Docs / Konzepte
Maschinell übersetzte Seite
Sprachen und Locales
Welche Sprachen verbatra übersetzen kann, wie Locale-Codes bei jedem Provider ankommen und wie Plurale und Rechts-nach-links-Text behandelt werden.
verbatra hat keine eigene Sprachliste: Es akzeptiert jeden gültigen BCP-47-Locale-Code, du kannst also die Sprachen nutzen, die dein Provider unterstützt, und in einem reinen Handarbeits-Projekt alle. verbatra schreibt jeden Code so, wie der Provider ihn erwartet, misst jede Übersetzung an den Pluralregeln ihrer Sprache und warnt dich vor einem Lauf, wenn ein Provider eine Locale nicht bedienen kann.
Locale-Codes
Jede Locale in deiner Konfiguration muss ein gültiger BCP-47-Tag sein, etwa fr, pt-BR,
sr-Latn oder es-419; für Dateien namens pt_ schreibst du pt-BR und setzt
files.localeStyle auf posix. Die vollständigen Regeln stehen unter
Locale-Codes.
Der Code aus deiner Konfiguration ist der, den verbatra überall speichert: Dateipfade,
die Lock-Datei und der Cache. Eine Provider-eigene
Schreibweise gibt es nur innerhalb eines Requests. Schreibst du einen Code um, den du schon
übersetzt, etwa pt_ zu pt-BR, bleibt seine Geschichte erhalten; siehe
Ein umgeschriebener Locale-Code.
Abdeckung je Provider
Wie gut eine Sprache übersetzt wird, ist Sache des Providers; jede Zeile verlinkt die eigene Liste des Anbieters.
| Provider | Sprachen | Gesendeter Code | Glossar | Tonfall |
|---|---|---|---|---|
anthropic | Keine feste Liste. Claude multilingual support | Wie geschrieben, plus englische Namen für Sprache, Schrift und Region | Begriffe der Locale im Prompt | Im Prompt |
openai | Keine feste Liste. Using the OpenAI API in different languages | Wie geschrieben, plus Namen | Begriffe der Locale im Prompt | Im Prompt |
gemini | Gemini language support | Wie geschrieben, plus Namen | Begriffe der Locale im Prompt | Im Prompt |
opencode | Was das gewählte Zen-Modell abdeckt | Wie geschrieben, plus Namen | Begriffe der Locale im Prompt | Im Prompt |
openai-compatible | Was das Modell abdeckt, das du betreibst | Wie geschrieben, plus Namen | Begriffe der Locale im Prompt | Im Prompt |
deepl | DeepL supported languages | Auf DeepLs Codes normalisiert | Nur ein vorab angelegtes DeepL-Glossar per glossaryId, für 32 Sprachen | DeepL-Formality für einige Sprachen, nicht mit einem Free-Key |
google-translate | Cloud Translation language support (für die Basic-Stufe v2, die verbatra nutzt, gilt die NMT-Liste) | Für Chinesisch und Norwegisch normalisiert, sonst wie geschrieben | Keins | Keiner |
libretranslate | Die auf deinem Server installierten Modelle; die Upstream-Liste zeigt, was sich installieren lässt | Nur die Sprache, außer pt-BR, zh-Hans und zh-Hant | Keins | Keiner |
none | Entfällt: Es wird kein Provider aufgerufen | Es wird nichts gesendet | Entfällt | Entfällt |
Was das in der Praxis heißt:
- LLM-Provider haben keine geschlossene Liste. Sie versuchen jede Sprache, die du nennst, und die Qualität lässt nach, wo Trainingsdaten dünn sind, eine Zielsprache mit wenig Ressourcen verdient also ein menschliches Review. Review-Flags zeigen auf die verdächtigsten Ergebnisse.
- DeepL und Google Cloud Translation haben eine geschlossene Liste, die vor einem Lauf geprüft wird.
- LibreTranslate bedient die Modelle, die dein Server installiert hat.
- Einen
toneoder ein Glossar, das ein Provider nicht umsetzen kann, meldet verbatra als Hinweis; siehe Tonfall und Glossar über die Provider hinweg.
Wie jeder Provider den Code bekommt
DeepL und Google Cloud Translation bekommen manche Codes in ihrer eigenen Schreibweise, und DeepL
lehnt ein reines en- oder pt-Ziel vor jedem Request ab. LLM-Provider bekommen den Code plus die
englischen Namen von Sprache,
Schrift und Region. localeMap in den options des Providers überschreibt den Code pro Locale; die
vollständige Zuordnung steht unter
An den Provider gesendete Locale-Codes.
Unterstützung vor einem Lauf prüfen
Bevor etwas ausgegeben wird, beurteilt verbatra jede konfigurierte Locale anhand des Providers, und
verbatra doctor --locales gibt die Urteile aus:
- supported: Der Code, den verbatra sendet, steht in der Tabelle des Providers, oder der Provider ist ein LLM.
- unverified: Nur die Basissprache steht in der Liste, der Code kommt aus einem expliziten
localeMap-Eintrag, oder der Provider ist ein LibreTranslate-Server, dessen Modelle nur aus seiner Live-Liste bekannt sind. Sie wird übersetzt, mit der WarnungLOCALE_.UNVERIFIED_ BY_ PROVIDER - unsupported: Weder der Code noch seine Basissprache steht in der Liste.
translate,watchund ein Retranslate eines einzelnen Keys lehnen den ganzen Lauf mitLOCALE_ab.UNSUPPORTED_ BY_ PROVIDER
Lass die Locale mit --locales weg, oder, wenn der Provider die Sprache später hinzugefügt hat,
ordne sie in localeMap zu: Einem expliziten Eintrag wird vertraut. Die mitgelieferten Tabellen sind
Kopien der Listen der Anbieter (DeepL mit 125 Codes und Google mit 198, beide vom 2026-09-28);
verbatra doctor --live prüft die aktuelle Liste.
Für einen LLM-Provider wird nichts abgelehnt. Ein Ziel außerhalb der Sprachen, die LLMs
bekanntermaßen gut übersetzen, bekommt die Warnung LOCALE_ als Anstoß, seine
Ausgabe zu reviewen. Die Liste vergleicht die Basissprache, pt-BR zählt also als
Portugiesisch: Arabisch (ar), Chinesisch (zh), Niederländisch (nl), Englisch (en),
Französisch (fr), Deutsch (de), Hindi (hi), Indonesisch (id), Italienisch (it), Japanisch
(ja), Koreanisch (ko), Polnisch (pl), Portugiesisch (pt), Russisch (ru), Spanisch (es),
Schwedisch (sv), Türkisch (tr), Ukrainisch (uk) und Vietnamesisch (vi).
Schriften und regionale Varianten
Ein Schrift- oder Regions-Subtag ändert, was der Provider gefragt wird, nicht, wie verbatra etwas speichert:
| Deine Locale | DeepL | Google Cloud Translation | LibreTranslate | LLM-Provider |
|---|---|---|---|---|
pt-BR / pt-PT | PT-BR / PT-PT | pt-BR / pt-PT | pt-BR / pt | Portuguese (Brazil) / Portuguese (Portugal) |
es-419, es-MX | ES-419 | es-419, es-MX | es | Spanish (Latin America), Spanish (Mexico) |
zh-Hans / zh-Hant | ZH-HANS / ZH-HANT | zh-CN / zh-TW | zh-Hans / zh-Hant | Chinese (Simplified) / Chinese (Traditional) |
sr-Latn / sr-Cyrl | SR für beide | sr-Latn / sr-Cyrl | sr für beide | Serbian (Latin) / Serbian (Cyrillic) |
DeepL und LibreTranslate behalten eine Schrift nur für Chinesisch, sr-Latn und sr-Cyrl bekommen
also die Schrift, die die Engine für Serbisch schreibt; ein LLM-Provider, dem die Schrift mit Namen
genannt wird, ist die verlässliche Wahl. Das Flag LENGTH_ gewichtet Zeichen nach
Schrift, kompakter chinesischer, japanischer oder koreanischer Text gilt also nicht als zu kurz, und
ein Glossarbegriff in einer Schrift ohne Leerzeichen zwischen Wörtern wird als Enthaltensein
abgeglichen.
Plurale
verbatra liest die Pluralkategorien einer Sprache, Ordinalzahlen eingeschlossen, aus den CLDR-Regeln
in den ICU-Daten von Node.js: Englisch hat zwei Kardinalkategorien, Russisch und Polnisch vier,
Arabisch und Walisisch sechs, Japanisch nur other. Für eine Locale ohne Regeln in Node.js nimmt
der Hinweis des Laufs one und other an, Integritäts-Gate, check und doctor verlangen nur
other; die Prüfung plural-rules von verbatra doctor nennt so eine Locale.
Wie ein Plural korrekt bleibt, hängt vom Format ab:
- i18next kennzeichnet jede Form mit einem CLDR-Suffix (
items_,one items_). Fehlt der Quelle eine Kategorie, die das Ziel braucht, meldet der Lauffew PLURAL_; mitCATEGORIES_ INCOMPLETE generatePlurals: trueund einem LLM-Provider schreibt verbatra die fehlenden Formen. Siehe Eine Sprache hinzufügen. - next-intl und ARB halten einen ganzen ICU-Plural in einem Wert, und ein Wert, dessen Zweige nicht zur Zielsprache passen, wird abgelehnt; siehe Plural-Zweige je Zielsprache.
- Apple, Android und gettext reichen genau die Formen durch, die jede Locale hat, und eine
fehlende Form musst du von Hand ergänzen. gettext behält seinen
Plural-Forms-Header wie geschrieben.
Plural-Warnungen
verbatra check und verbatra doctor warnen vor jedem Plural,
dem eine Kategorie fehlt, die seine Sprache verwendet, in jedem oben genannten Format außer gettext,
dessen Formen seinem eigenen Header folgen; Plurale in anderen Formaten werden nicht geprüft. DeepL,
Google Cloud Translation und LibreTranslate übersetzen die vorhandenen Formen, erzeugen aber nie
neue.
Sprachen, die von rechts nach links laufen
Arabisch, Hebräisch, Persisch, Urdu und andere Sprachen, die von rechts nach links laufen, brauchen keine Sonderbehandlung: Ein Wert wird gelesen, gesendet, geprüft und so zurückgeschrieben, wie er ist, ohne hinzugefügte, entfernte oder umgeordnete Richtungszeichen. Was das für dich heißt:
- Setz die Richtung in deiner App, nicht in den Strings, mit dem Attribut
dir, CSS oder der Layoutrichtung deiner Plattform. Die Inline-Markup-Prüfung lehnt eine Übersetzung ab, die eindir-Attribut hinzufügt, das die Quelle nicht hat. - Richtungsmarken sind Text und dürfen wegfallen; prüf Übersetzungen, die eine brauchen.
Offene Einbettungen, Überschreibungen oder Isolierungen (schließt die Quelle ihre) und neue
Überschreibungen lösen
BIDI_aus.CONTROLS_ CHANGED - Eine geänderte Platzhalter-Reihenfolge löst nur
INTEGRITY_aus, weil eine andere Reihenfolge in einer anderen Sprache oft richtig ist.REORDERED - Studio zeigt Werte von rechts nach links für jede Locale, deren Schrift so läuft, nach der
Richtung des Browsers oder der wahrscheinlichen Schrift der Locale (
ku-Arabvon rechts nach links,kuvon links nach rechts). Nur die Anzeige ändert sich. verbatra pseudo --mode bidizeigt deine Quelle von rechts nach links in einerar-XB-Pseudolocale und deckt Annahmen über Links-nach-rechts-Layout auf, bevor es eine Übersetzung gibt. Gespiegelte Bilder und Icons prüfst du selbst.
Ressourcenarme Sprachen und lokale Modelle
Für eine Sprache, die dein gehosteter Provider schlecht abdeckt:
- Ein lokales Modell über
openai-compatiblebetreiben. Es muss ein auf Anweisungen trainiertes Chat-Modell sein, das ein JSON-Objekt zurückgibt; siehe Ein lokales Modell wählen. - Ein spezialisiertes Übersetzungsmodell außerhalb von verbatra nutzen und das Ergebnis über den
Roundtrip mit der Arbeitsmappe zurückholen, der dieselben
Integritätsprüfungen ausführt. Keines davon passt an
openai-compatible, denn es sind keine Chat-Modelle: MADLAD-400 (Apache-2.0, über 400 Sprachen), TranslateGemma (55 Sprachen, Gemma-Nutzungsbedingungen) und NLLB-200 (etwa 200 Sprachen, aber CC-BY-NC-4.0, also nicht für ein kommerzielles Produkt). Prüf die Lizenz jedes Modells selbst. - Einen Menschen übersetzen lassen. Der Arbeitsablauf ohne maschinelle Übersetzung funktioniert für jede Sprache.