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.

lib/l10n/app_en.arb
{
  "@@locale": "en",
  "checkoutTitle": "Order summary",
  "@checkoutTitle": {
    "description": "Title of the checkout screen"
  },
  "cartItems": "{count, plural, one {{count} item} other {{count} items}}",
  "@cartItems": {
    "placeholders": { "count": {} }
  }
}
A message, its description metadata and an ICU plural with a placeholder.
.arb Import yes Export yes Plurals native ICU Notes from descriptions Keys flat

In locamorph

How locamorph handles ARB

icu

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.

metadata

Descriptions become notes

The @key description written for translators imports as the key’s note and returns to the file on export.

locale

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.

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.