Eine Sprache hinzufügen
Füge einem bestehenden verbatra-Projekt eine neue Ziel-Locale hinzu: eine Zeile Konfiguration und ein translate-Lauf, während deine bestehenden Locales unangetastet bleiben.
Maschinell übersetzte Seite
Eine Sprache hinzuzufügen ist eine einzeilige Konfigurationsänderung plus ein Lauf. verbatra sieht die neue Locale als komplett fehlend und füllt sie vollständig; deine bestehenden Locales kosten nichts, weil die Lock-Datei sie weiterhin als aktuell verzeichnet.
Füge die Locale zu deiner Konfiguration hinzu
Trage sie in targetLocales in verbatra.config.ts ein:
import { defineConfig } from "@verbatra/cli";
export default defineConfig({
sourceLocale: "en",
targetLocales: ["de", "fr"], // "fr" added
format: "i18next-json",
files: {
pattern: "locales/{locale}.json",
},
provider: {
id: "gemini",
options: {
model: "gemini-2.5-flash",
maxOutputTokens: 4096,
},
},
});Zwei Regeln, beide beim Laden der Konfiguration erzwungen: Eine Ziel-Locale darf nicht die sourceLocale sein, und zwei Einträge dürfen nicht case-insensitiv kollidieren (kein de und DE in derselben Liste).
Sieh dir die anstehende Arbeit an
Bevor du einen Token ausgibst, sieh dir an, was ein Lauf tun würde. diff ist schreibgeschützt und listet die ausstehenden Keys pro Locale:
verbatra diffDie neue Locale hat noch keine Zieldatei, also behandelt verbatra sie als leer, und jeder Quell-Key erscheint als fehlend; deine bestehenden Locales listen nichts, sofern sich ihre Quellstrings nicht geändert haben. diff endet mit 1, solange Änderungen ausstehen, und mit 0, sobald keine mehr da sind. verbatra translate --dry-run liefert dieselbe Vorschau in Form einer Lauf-Zusammenfassung, ohne Provider-Aufruf und ohne Schreibvorgänge.
Übersetze
verbatra translateDer Lauf übersetzt jeden Quell-Key in die neue Locale und schreibt die Datei an dein files.pattern (hier locales/fr.json). Eine große Quelle wird in Sub-Batches von höchstens 50 Keys pro Provider-Anfrage aufgeteilt (konfigurierbar über maxBatchSize), damit eine überdimensionierte Anfrage nicht die ganze Locale versenkt.
Das ist das inkrementelle Verhalten in Aktion: Nur die neue Locale löst Provider-Aufrufe aus. Für jede bestehende Locale vergleicht verbatra die Quelle mit der Baseline dieser Locale in verbatra.lock.json, findet keine fehlenden oder geänderten Keys und sendet nichts. Danach endet verbatra check mit 0: Jede Locale, einschließlich der neuen, ist synchron.
Sprachen mit mehr Pluralkategorien
Manche Sprachen brauchen mehr CLDR-Pluralkategorien, als deine Quelle hat. Englisch hat zwei (one und other); Polnisch, Arabisch und Russisch haben mehr. Standardmäßig übersetzt verbatra die Pluralformen, die es in der Quelle findet, und erfindet die zusätzlichen nicht: Der Lauf gelingt trotzdem und gibt pro Locale einen Hinweis aus (Code PLURAL_CATEGORIES_INCOMPLETE), der die fehlenden Kategorien nennt.
Damit verbatra die fehlenden Formen stattdessen synthetisiert, setze generatePlurals: true in deiner Konfiguration:
export default defineConfig({
// ...
generatePlurals: true,
});Die Generierung wird nur für i18next-JSON-Projekte unterstützt, die ein LLM-Provider übersetzt; DeepL, die anderen Formate und unbekannte Zielsprachen fallen auf den Hinweis zurück und lassen den Lauf nie fehlschlagen. Generierte Formen werden wie jede Übersetzung auf Integrität geprüft und in der Lauf-Zusammenfassung getrennt von übersetzten Keys ausgewiesen.
Die Quell-Locale pflegen
Du pflegst immer nur die Quell-Locale von Hand. Um Strings hinzuzufügen, trage sie in die Quelldatei ein und führe translate erneut aus: verbatra füllt sie in jedes Ziel, auch in das gerade hinzugefügte.
Nächste Schritte
- Die Lock-Datei: warum erneute Läufe günstig sind und was du committen solltest.
- Konfigurationsdatei: das vollständige Konfigurationsschema, einschließlich
glossaryundtone. - Provider: Provider-Optionen und wo du einen Schlüssel bekommst.
Deine erste Übersetzung
Installiere die CLI, erzeuge mit verbatra init eine Konfiguration, setze deinen API-Schlüssel und starte deinen ersten translate-Lauf. In unter zehn Minuten von null zur übersetzten Locale-Datei.
Wie es funktioniert
Die Übersetzungs-Pipeline von Anfang bis Ende, vom Lesen der Quell-Locale bis zum Aktualisieren der Lock-Datei.