Flutter ARB File Generator

Paste your strings as key = value lines, CSV or JSON and get a valid app_en.arb with the @@locale header, descriptions and typed placeholders that gen-l10n expects. Runs in your browser, no signup.

Your strings

app_en.arb

6 keys · 5 placeholders

{
  "@@locale": "en",
  "appTitle": "Shopping List",
  "@appTitle": {
    "description": ""
  },
  "greeting": "Hello, {name}!",
  "@greeting": {
    "description": "",
    "placeholders": {
      "name": {
        "type": "String"
      }
    }
  },
  "itemCount": "{count, plural, =0{No items} one{1 item} other{{count} items}}",
  "@itemCount": {
    "description": "",
    "placeholders": {
      "count": {
        "type": "int"
      }
    }
  },
  "totalPrice": "Total: {price}",
  "@totalPrice": {
    "description": "",
    "placeholders": {
      "price": {
        "type": "double"
      }
    }
  },
  "deleteConfirm": "Delete \"{title}\"? This cannot be undone.",
  "@deleteConfirm": {
    "description": "",
    "placeholders": {
      "title": {
        "type": "String"
      }
    }
  },
  "lastSync": "Last synced {when}",
  "@lastSync": {
    "description": "",
    "placeholders": {
      "when": {
        "type": "DateTime"
      }
    }
  }
}

Now translate it into every language

Import the generated file into FlutterLocalisation, pick your languages, and let AI fill them in one click. Placeholders and plurals stay intact, a reviewer approves per language, and the ARB files land in your Git repo.

Start free →

Input formats

key = valueOne string per line. key: value works too. Lines starting with # or // are ignored.
CSVkey,value,description with an optional header row. Quote values that contain commas.
JSONA flat object. Existing @key descriptions are kept, so you can also clean up an ARB you already have.
{name}Every placeholder gets a typed entry. The type is guessed from the name (count → int, price → double, date → DateTime, else String).
pluralAn ICU plural such as {count, plural, one{1 item} other{{count} items}} gets an int placeholder for its variable.

Frequently asked questions

What is an ARB file?

ARB (Application Resource Bundle) is the JSON format Flutter uses for translations. Each key maps to a string, and an optional @key entry holds the description and the placeholder types that gen-l10n needs to generate typed Dart code.

How do I create an ARB file from a list of strings?

Paste one line per string as key = value, or a CSV with key, value and description columns, or a plain JSON object. The generator writes the @@locale header, one @key entry per string with placeholders detected from {braces}, and camel-cases keys so gen-l10n accepts them.

How are placeholder types chosen?

From the name. count, total, index, days and similar become int; price, amount, percent become double; date, time, when become DateTime; everything else is String. The variable of an ICU plural is always int. Edit the type in the output if the guess is wrong.

Why does gen-l10n reject my key?

Keys become Dart getter names, so they must be valid identifiers: letters, digits and underscores, not starting with a digit. The generator rewrites "item count" to itemCount and warns you.

How do I translate the generated ARB into other languages?

Create one copy per language (app_de.arb, app_fr.arb) with the same keys. FlutterLocalisation imports the file you generated here and translates every language with AI in one click, keeping placeholders and plural forms intact.

Related tools and guides