Translate your Flutter .arb files, without breaking the ICU syntax
Drop in your app_en.arb. KAERIS translates all 46 languages while keeping ICU {count, plural, …} and {name} placeholders exactly intact, and reads each line back so a shifted meaning never reaches your users.
ICU that still parses
{count, plural, one {# item} other {# items}} is easy for an AI to mangle. KAERIS treats the ICU structure as protected and only translates the human-readable parts, so flutter gen-l10n still compiles.
Placeholders stay put
{name}, {price} and every interpolation survive verbatim — and if one is ever dropped, read-back flags it as a fact, not a guess.
Metadata left alone
@@locale and your @key description/metadata blocks are preserved so your tooling and context stay intact.
Before → after
{ "itemCount": "{count, plural, one {1 item} other {{count} items}}", "@itemCount": { "placeholders": { "count": {} } } }
{ "itemCount": "{count, plural, one {1 Artikel} other {{count} Artikel}}", "@itemCount": { "placeholders": { "count": {} } } }
Drop your .arb file
Upload it as-is, or run pip install kaeris and translate from your terminal or CI.
Pick languages & verify
Choose from 46 languages. Leave read-back on to catch meaning drift, lost placeholders and overflow.
Ship the .arb back
Download one .arb per language, structure intact — or let the GitHub Action open a PR when new keys land.
Free, no account. Read every line back in your own language.
Drop your .arb file →See the read-back benchmark · CLI & GitHub Action