Traduire les fichiers ARB de Flutter
Un fichier .arb est un JSON avec des messages ICU et un bloc de métadonnées @key à côté de chaque chaîne. KAERIS traduit les messages, conserve les métadonnées et vérifie la syntaxe ICU ensuite.
KAERIS a traduit cette page et vérifié chaque ligne en la retraduisant. Un locuteur natif ne l'a pas encore revue. Original anglais
Comment un fichier ARB est construit
JSON brut. Chaque message se trouve à côté d'une entrée @message avec sa description et les types de placeholders ; @@locale nomme la langue. Les pluriels et les sélections sont des chaînes ICU : {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" } }
}
}
Ce qu'il faut surveiller dans les traductions ARB
La syntaxe ICU est du code
Une accolade perdue ou une branche supprimée casse le Dart généré. KAERIS compare les blocs ICU avec la source et signale une branche exacte supprimée telle que
=0.Langues avec plus de formes plurielles
Le russe a besoin de
fewetmanyen plus deoneetother; la vérification signale une forme manquante pour les langues où cela s'applique.Les métadonnées sont pour le modèle, pas pour la traduction
Les entrées
@key(description, types de placeholders) sont conservées dans la sortie ;@@localeest réécrit pour la langue cible.Les placeholders sont nommés
{name}doit conserver son nom, car le générateur le lie au type dans le bloc@.
Une vraie exécution : traduite en allemand et vérifiée
Une vraie exécution, le 27 octobre 2026, rien édité à la main : kaeris translate app_en.arb --langs de avec kaeris 0.2.35, 2,7 secondes, modèle google/gemini-2.5-flash-lite, le défaut du niveau gratuit. Ci-dessous, le fichier allemand qu'il a écrit et ce que kaeris check en dit.
{
"@@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
Ce que KAERIS en fait
Métadonnées conservées, locale réécrite
Les blocs
@keysont transmis ;@@localeest défini par langue cible.ICU vérifié
Les branches perdues, les variables perdues et les erreurs d'accolades sont trouvées par la même vérification que celle que le site web exécute.
Seulement les nouvelles clés
--only-newfonctionne pour ARB : les clés modifiées et nouvelles sont traduites, le reste est réutilisé. Préréglages :kaeris init --preset flutter-arb.Vérification dans le terminal
kaeris checklit directement les sources ARB, sans clé.
Exécutez-le en trois étapes
Installer le CLI
Exécutez
pip install kaeris.Traduire le modèle
Exécutez
kaeris translate lib/l10n/app_en.arb --langs de,ja.Vérifier le résultat
Exécutez
kaeris checkavec la source et--pattern 'app_{lang}.arb'; il se termine avec le code 1 en cas de variable ou de bloc ICU incorrect.
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'
Questions
Les entrées @metadata sont-elles conservées ?
Oui. Les descriptions et les types de placeholders restent à côté de chaque message ; @@locale est réécrit pour la langue cible.
Que se passe-t-il si le pluriel ICU est incorrect dans une traduction ?
La vérification compare les blocs ICU avec la source et nomme le problème, par exemple une branche =0 perdue. Dans l'exécution réelle ci-dessus, le pluriel est revenu avec les trois branches et la vérification n'a rien eu à signaler.
Est-ce gratuit ?
Oui, sans compte : 10 000 caractères par fichier et jusqu'à 8 langues par exécution. Une clé API gratuite augmente la limite de fichiers à 50 000 caractères. La licence à vie est de 79 $ une fois, sur votre propre clé OpenRouter ; les plans mensuels commencent à 19 $. Tarifs
Puis-je l'exécuter depuis le terminal ou en CI ?
Oui. pip install kaeris, puis kaeris translate lib/l10n/app_en.arb --langs de,ja. Voir aussi Flutter. Le GitHub Action exécute la même traduction dans une pull request. Docs CLI · GitHub Action
Continuer
Référence CLI · Référence Check · Traduire dans le navigateur · Vérification gratuite · Convertir les formats · Localisation fictive
Autres formats : JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML