What Is an ARB File? The Flutter Localization Format Explained
ARB (Application Resource Bundle) is the JSON-based translation format Flutter uses for app localization. Here is how the format works — keys, placeholders, and @ metadata — and how to edit it.
ARB stands for Application Resource Bundle. It is a JSON-based file format for storing localized strings, and it is the format Flutter's flutter_localizations and gen-l10n toolchain reads when you translate an app. One ARB file holds all the strings for a single locale — app_en.arb for English, app_es.arb for Spanish, and so on.
What an ARB file looks like
An ARB file is plain JSON. Each translation is a key/value pair, and Flutter generates a typed Dart getter for every key:
{
"@@locale": "en",
"helloWorld": "Hello, World!",
"greeting": "Hello, {name}!",
"@greeting": {
"description": "Greeting shown on the home screen",
"placeholders": {
"name": { "type": "String" }
}
}
}
Three things are happening here:
@@locale— a reserved key that declares which language this file holds.- Translation keys —
helloWorldandgreetingare the strings your app renders. @metadata —@greetingis an annotation object describing thegreetingkey. It carries adescription(context for translators and AI) andplaceholders(the typed variables in the string).
Placeholders and ICU
ARB values can contain placeholders like {name} and full ICU MessageFormat plurals and select forms:
"itemCount": "{count, plural, one {# item} other {# items}}"
The placeholders block in the @ annotation tells Flutter the type of each variable so it generates a correctly-typed Dart method. If a placeholder appears in your English source but goes missing in a translation, the generated code breaks at runtime — which is exactly the kind of error a side-by-side editor catches before it ships.
Why ARB is awkward to edit by hand
The format is simple, but managing it across many locales is not. Each language is a separate file, so confirming that every locale has every key means opening five, ten, or twenty JSON files and reading them in parallel. A missing key, a stray comma, or a placeholder typo is easy to introduce and hard to spot.
How StringLane works with ARB
StringLane is a desktop editor built for exactly this. It opens your lib/l10n/ folder, loads every app_*.arb file, and shows all locales side-by-side for each key — so gaps and mismatches are visible at a glance instead of buried in JSON. It reads and preserves your @ metadata, validates ICU and placeholders in real time, and writes changes straight back to the source files. Nothing is imported or exported.
Next steps
- Localize Your Flutter App End to End — the full ARB workflow, from setup to
flutter gen-l10n. - How to Work with ARB Metadata Annotations — what
@description,x-max-length, andx-guardeddo. - Getting Started with StringLane — install and make your first edit.