ARB
Flutter ARB files with plurals parsed for real
ARB is Flutter’s official localization format: JSON plus
metadata conventions for descriptions, placeholders and ICU plurals. locamorph
parses the ICU messages properly instead of treating them as opaque strings, keeps
each key’s description as its translator note, and respects
@@locale and the filename when detecting the language.
Round trip tested: exported ARB parses back identically, so
flutter gen-l10n gets files it accepts on the first run.
{
"@@locale": "en",
"checkoutTitle": "Order summary",
"@checkoutTitle": {
"description": "Title of the checkout screen"
},
"cartItems": "{count, plural, one {{count} item} other {{count} items}}",
"@cartItems": {
"placeholders": { "count": {} }
}
} In locamorph
How locamorph handles ARB
Plurals read, not passed through
ICU plural messages are parsed into CLDR forms with one shared, strict reader. Each form is a separate field for translators, then reassembled on export.
Descriptions become notes
The @key description written for translators imports as the
key’s note and returns to the file on export.
Language from the file itself
@@locale and app_de.arb style filenames both identify
the language, so bulk imports land in the right locales.
Ecosystem
Where ARB lives
ARB is Flutter’s and only Flutter’s: designed by Google’s
Flutter team, consumed natively by gen-l10n, and covering iOS,
Android, web and desktop builds from one file set. As Flutter grows, so does the
number of app_*.arb files in the world.
Typical flow: lib/l10n lives in the repo,
GitHub or
GitLab imports new messages on push, and
translated ARB files come back as a pull request ready for
flutter gen-l10n.
Related
Keep going
Bring your app_en.arb
Import it on the free plan and see every ICU plural and description arrive as structured, translatable content instead of a wall of braces.