Die Lingo.dev CLI verwendet Bucket-Typen, um unterschiedliche Dateiformate zu parsen und zu übersetzen. Jeder Bucket-Typ ist ein eigener Parser für ein bestimmtes Format. Konfiguriere einen oder mehrere Buckets in deiner i18n.json, um festzulegen, welche Dateien die CLI übersetzen soll.
Bucket-Typen#
| Bucket-Typ | Format | Ausgabemodus | [locale] erforderlich |
|---|---|---|---|
json | JSON-Dateien | Separate Dateien pro Sprache | Ja |
json5 | JSON5-Dateien | Separate Dateien pro Sprache | Ja |
jsonc | JSONC-Dateien (mit Kommentaren) | Separate Dateien pro Sprache | Ja |
json-dictionary | JSON-Wörterbuch (flache Schlüssel-Wert-Paare) | Separate Dateien pro Sprache | Ja |
yaml | YAML-Dateien | Separate Dateien pro Sprache | Ja |
yaml-root-key | YAML mit Sprache-Root-Keys | Ändert die Quelldatei | Nein |
markdown | Markdown-Dateien | Separate Dateien pro Sprache | Ja |
mdx | MDX-Dateien | Separate Dateien pro Sprache | Ja |
markdoc | Markdoc-Dateien | Separate Dateien pro Sprache | Ja |
html | HTML-Dateien | Separate Dateien pro Sprache | Ja |
mjml | MJML-E-Mail-Vorlagen | Separate Dateien pro Sprache | Ja |
android | Android XML-Ressourcen | Separate Dateien pro Sprache | Ja |
xcode-strings | Xcode-.strings-Dateien | Separate Dateien pro Sprache | Ja |
xcode-stringsdict | Xcode-.stringsdict-Dateien | Separate Dateien pro Sprache | Ja |
xcode-xcstrings | Xcode-.xcstrings-Kataloge | Ändert die Quelldatei | Nein |
flutter | Flutter ARB-Dateien | Separate Dateien pro Sprache | Ja |
po | GNU gettext PO-Dateien | Separate Dateien pro Sprache | Ja |
properties | Java-.properties-Dateien | Separate Dateien pro Sprache | Ja |
csv | CSV-Dateien | Ändert die Quelldatei | Nein |
csv-per-locale | CSV-Dateien (eine pro Sprache) | Separate Dateien pro Sprache | Ja |
xml | Allgemeine XML-Dateien | Separate Dateien pro Sprache | Ja |
xliff | XLIFF-Dateien | Separate Dateien pro Sprache | Ja |
srt | SRT-Untertiteldateien | Separate Dateien pro Sprache | Ja |
vtt | VTT-Untertiteldateien | Separate Dateien pro Sprache | Ja |
php | PHP-Lokalisierungs-Arrays | Separate Dateien pro Sprache | Ja |
typescript | TypeScript-Dateien | Separate Dateien pro Sprache | Ja |
vue-json | Vue-i18n-JSON-Blöcke | Separate Dateien pro Sprache | Ja |
txt | Textdateien | Separate Dateien pro Sprache | Ja |
Ausgabemodi#
Buckets arbeiten in einem von zwei Ausgabemodi:
Separate Dateien pro Sprache – die CLI erstellt für jede Zielsprache eine eigene Datei. Include-Muster müssen den Platzhalter [locale] enthalten:
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}So entstehen locales/en.json, locales/es.json, locales/fr.json usw.
Ändert die Quelldatei – die CLI schreibt Übersetzungen zurück in dieselbe Datei, die auch den Quellinhalt enthält. Der Platzhalter [locale] wird dabei nicht verwendet:
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}CSV-Dateien speichern in der Regel alle Sprachen als Spalten in einer einzigen Datei. Xcode-.xcstrings-Kataloge und YAML mit Root-Keys funktionieren ähnlich.
Konfigurationsbeispiele#
Web-App mit JSON#
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Dokumentationswebsite mit Markdown#
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}Mobile App (iOS + Android)#
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}Monorepo mit mehreren Formaten#
{
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"flutter": {
"include": ["apps/mobile/lib/l10n/app_[locale].arb"]
}
}
}Bucket-spezifische Funktionen#
Einige Buckets unterstützen zusätzliche Funktionen, die über Include-/Exclude-Muster hinausgehen:
| Funktion | Unterstützte Buckets | Beschreibung |
|---|---|---|
| Key Locking | Schlüssel-Wert-Formate (JSON, YAML usw.) | Quellwerte ohne Übersetzung übernehmen |
| Key Ignoring | Schlüssel-Wert-Formate | Schlüssel vollständig aus Zieldateien ausschließen |
| Key Preserving | Schlüssel-Wert-Formate | Einmal initialisieren und anschließend vor Updates schützen |
| Translator Notes | JSONC, XCStrings | Über Kommentare Kontext liefern, um die Übersetzungsqualität zu verbessern |
Regeln für Include-Muster#
- Muster sind relativ zum Speicherort der Datei
i18n.json - Verwende
[locale]als Platzhalter für Sprachcodes (erforderlich für Buckets mit „separaten Dateien“) - Ein Sternchen (
*) steht für jeden Dateinamen:locales/[locale]/*.json - Rekursive Muster (
**) erfassen Dateien in beliebiger Tiefe:src/**/[locale].json,config/locales/**/[locale].yml. Wenn ein Muster**verwendet, werdennode_modules,.git,dist,build,.nextund.turbostandardmäßig ausgeschlossen — ergänze bei Bedarf eigeneexclude-Einträge (erfordert CLI 0.135.0+) - Dateiendungen haben keinen Einfluss auf das Parsing – der Bucket-Typ bestimmt den Parser
