Flutter ARB localization with AI
Flutter Application Resource Bundles with ICU messages and @key metadata.
.arbformat: arbone file per locale
What it is
ARB is Flutter's localization format (gen-l10n, intl). JSON with one file per locale, ICU MessageFormat strings, and @key entries describing each message.
Example
lib/l10n/app_en.arb
{ "@@locale": "en", "inboxCount": "{count, plural, =0{No messages} one{1 message} other{{count} messages}}", "@inboxCount": { "description": "Inbox header", "placeholders": { "count": { "type": "int" } } }}How Glossa handles it
- Plurals
- ICU plural and select messages are kept as ICU and translated as a whole message; the ICU argument structure is checked after translation.
- Comments and context
- The @key description becomes context; placeholder metadata is preserved.
- Placeholders
- ICU arguments ({count}, {name}) are protected and checked.
- Round trip
- @@locale is set per target file, so flutter gen-l10n picks the outputs up directly.
Translate it from the command line
Push the source-language file; strings are deduplicated against the rest of your workspace and queued for translation. Pull writes lib/l10n/app_en.arb back in the same format.
npx @meterapp/glossa loginnpx @meterapp/glossa push lib/l10n/app_en.arb --project appnpx @meterapp/glossa pull --project app --locale es,de,jaOr ask an agent over MCP: “Push lib/l10n/app_en.arb to Glossa and pull Spanish.” It calls push_file and pull_file. See the CLI and MCP guides.
Other formats
Xcode String CatalogJSON (key/value, i18next)YAML (Rails i18n)Apple .stringsApple .stringsdictAndroid strings.xmlGettext PO/POTXLIFF 1.2 / 2.0Java .properties.NET RESXCSV / TSV (multi-locale)
Moving from Crowdin? Read the comparison.