Flutter ARB-Dateien übersetzen
Eine .arb-Datei ist JSON mit ICU-Nachrichten und einem @key-Block mit Metadaten neben jeder Zeichenkette. KAERIS übersetzt die Nachrichten, behält die Metadaten und prüft anschließend die ICU-Syntax.
KAERIS hat diese Seite übersetzt und jede Zeile durch Rückübersetzung geprüft. Ein Muttersprachler hat sie noch nicht überprüft. Englisches Original
Wie eine ARB-Datei aufgebaut ist
Reines JSON. Jede Nachricht steht neben einem @message-Eintrag mit Beschreibung und Platzhaltertypen; @@locale benennt die Sprache. Pluralformen und Auswahlen sind ICU-Zeichenketten: {count, plural, =0{…} one{…} other{…}}.
{
"@@locale": "en",
"welcome": "Welcome back, {name}!",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": { "name": { "type": "String" } }
},
"itemCount": "{count, plural, =0{No items} one{{count} item} other{{count} items}}",
"@itemCount": {
"placeholders": { "count": { "type": "int" } }
}
}
Worauf bei ARB-Übersetzungen zu achten ist
ICU-Syntax ist Code
Eine verlorene Klammer oder ein fehlender Zweig bricht das generierte Dart. KAERIS vergleicht die ICU-Blöcke mit der Quelle und meldet einen fehlenden exakten Zweig wie
=0.Sprachen mit mehr Pluralformen
Russisch benötigt neben
oneundotherauchfewundmany; die Prüfung meldet eine fehlende Form für die Sprachen, bei denen dies zutrifft.Metadaten sind für die Vorlage, nicht für die Übersetzung
@key-Einträge (Beschreibung, Platzhaltertypen) werden in der Ausgabe beibehalten;@@localewird für die Zielsprache neu geschrieben.Platzhalter sind benannt
{name}muss seinen Namen behalten, da der Generator ihn an den Typ im@-Block bindet.
Ein realer Durchlauf: ins Deutsche übersetzt und geprüft
Ein realer Durchlauf, 27. Oktober 2026, nichts von Hand bearbeitet: kaeris translate app_en.arb --langs de mit kaeris 0.2.35, 2,7 Sekunden, Modell google/gemini-2.5-flash-lite, der Standard der kostenlosen Stufe. Unten die deutsche Datei, die es geschrieben hat, und was kaeris check dazu sagt.
{
"@@locale": "de",
"welcome": "Willkommen zurück, {name}!",
"itemCount": "{count, plural, =0{Keine Artikel} one{{count} Artikel} other{{count} Artikel}}",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": {
"name": {
"type": "String"
}
}
},
"@itemCount": {
"placeholders": {
"count": {
"type": "int"
}
}
}
}
$ kaeris check --source app_en.arb --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
Was KAERIS damit macht
Metadaten beibehalten, Locale neu geschrieben
@key-Blöcke werden durchgereicht;@@localewird für jede Zielsprache festgelegt.ICU geprüft
Verlorene Zweige, verlorene Variablen und Klammerschäden werden durch dieselbe Prüfung gefunden, die auch die Website durchführt.
Nur die neuen Schlüssel
--only-newfunktioniert für ARB: bearbeitete und neue Schlüssel werden übersetzt, der Rest wird wiederverwendet. Voreinstellungen:kaeris init --preset flutter-arb.Terminal-Prüfung
kaeris checkliest ARB-Quellen direkt, ohne Schlüssel.
In drei Schritten ausführen
CLI installieren
Führen Sie
pip install kaerisaus.Vorlage übersetzen
Führen Sie
kaeris translate lib/l10n/app_en.arb --langs de,jaaus.Ergebnis prüfen
Führen Sie
kaeris checkmit der Quelle und--pattern 'app_{lang}.arb'aus; es wird mit Code 1 beendet, wenn eine Variable oder ein ICU-Block fehlerhaft ist.
pip install kaeris
kaeris init --preset flutter-arb
kaeris translate lib/l10n/app_en.arb --langs de,ja --verify
kaeris check --source lib/l10n/app_en.arb --langs de,ja --pattern 'app_{lang}.arb'
Fragen
Werden die @metadata-Einträge beibehalten?
Ja. Beschreibungen und Platzhaltertypen bleiben neben jeder Nachricht erhalten; @@locale wird für die Zielsprache neu geschrieben.
Was, wenn die ICU-Pluralform in einer Übersetzung falsch ist?
Die Prüfung vergleicht ICU-Blöcke mit der Quelle und benennt das Problem, z. B. einen fehlenden =0-Zweig. Im realen Durchlauf oben kam die Pluralform mit allen drei Zweigen zurück und die Prüfung hatte nichts zu melden.
Ist es kostenlos?
Ja, ohne Konto: 10.000 Zeichen pro Datei und bis zu 8 Sprachen pro Lauf. Ein kostenloser API-Schlüssel erhöht das Dateilimit auf 50.000 Zeichen. Lebenslang kostet es einmalig 79 $, mit deinem eigenen OpenRouter-Schlüssel; monatliche Pläne beginnen bei 19 $. Preise
Kann ich es vom Terminal oder in CI ausführen?
Ja. pip install kaeris, dann kaeris translate lib/l10n/app_en.arb --langs de,ja. Siehe auch Flutter. Die GitHub Action führt dieselbe Übersetzung in einem Pull Request aus. CLI-Dokumentation · GitHub Action
Weiter geht's
CLI-Referenz · Check-Referenz · Im Browser übersetzen · Kostenlose Prüfung · Formate konvertieren · Pseudo-Lokalisierung
Andere Formate: JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML