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,ja

Or 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

Moving from Crowdin? Read the comparison.

Push your first file

Glossa is free for one app. Sign in, push a translation file, and pull it back in every language.