Skip to main content
AI agent network visualization

Translate Flutter ARB Files in Seconds

Metadata intact. Placeholders preserved. Plural forms correct per CLDR. Your ARB files translated without breaking flutter gen-l10n.

ARB Translation Breaks Flutter Builds

ARB files look like JSON but aren't. They carry @-prefixed metadata entries, placeholder definitions with type annotations, and ICU plural forms that must follow CLDR rules exactly. Generic translation tools corrupt all of it — and flutter gen-l10n fails silently or throws cryptic errors.

@-prefixed metadata entries get translated or deleted, breaking placeholder definitions and descriptions

Placeholder names inside curly braces get translated, renamed, or stripped — causing runtime crashes

ICU plural forms need exact CLDR categories per language, but generic tools either skip them or generate invalid structures

The @@locale header gets corrupted or mismatched, causing flutter gen-l10n to assign translations to the wrong language

Source (English)
lib/l10n/app_en.arb
{
  "@@locale": "en",
  "appTitle": "My Flutter App",
  "@appTitle": {
    "description": "The title of the application"
  },
  "greeting": "Hello, {name}!",
  "@greeting": {
    "description": "A greeting with the user's name",
    "placeholders": {
      "name": {
        "type": "String",
        "example": "John"
      }
    }
  },
  "itemCount": "{count, plural, =0{No items} =1{1 item} other{{count} items}}",
  "@itemCount": {
    "description": "Number of items in the cart",
    "placeholders": {
      "count": {
        "type": "int"
      }
    }
  },
  "lastLogin": "Last login: {date}",
  "@lastLogin": {
    "placeholders": {
      "date": {
        "type": "DateTime",
        "format": "yMMMd"
      }
    }
  }
}
Translated (Japanese)
lib/l10n/app_ja.arb
{
  "@@locale": "de",
  "appTitle": "Meine Flutter-App",
  "@appTitle": {
    "description": "The title of the application"
  },
  "greeting": "Hallo, {name}!",
  "@greeting": {
    "description": "A greeting with the user's name",
    "placeholders": {
      "name": {
        "type": "String",
        "example": "John"
      }
    }
  },
  "itemCount": "{count, plural, =0{Keine Artikel} =1{1 Artikel} other{{count} Artikel}}",
  "@itemCount": {
    "description": "Number of items in the cart",
    "placeholders": {
      "count": {
        "type": "int"
      }
    }
  },
  "lastLogin": "Letzte Anmeldung: {date}",
  "@lastLogin": {
    "placeholders": {
      "date": {
        "type": "DateTime",
        "format": "yMMMd"
      }
    }
  }
}

What i18n Agent Preserves

@ Metadata Entries

All @-prefixed metadata — descriptions, placeholders, and type annotations — are preserved exactly as defined

Placeholder Safety

Named placeholders like {userName}, {count}, and {price} are detected and left untouched across all translations

CLDR Plural Forms

ICU plural categories (zero, one, two, few, many, other) are generated correctly for each target language per CLDR rules

JSON Structure

Key ordering, nesting, and ARB-specific formatting match your source file for clean diffs

Works With Your Flutter Stack

flutter gen-l10n (official)
Easy Localization
GetX Internationalization

How It Works

How i18n Agent works: Install, Translate, Done
1
2
3
terminal
$translate_filesrc/messages/en.json
 --target["de", "ja", "es"]
Done.3 languages, 142 keys translated.

No manual copy-paste. No string extraction. Just translated files.

Try i18n Agent Now

Drop your translation file here

JSON, YAML, PO, XML, CSV, Markdown, Properties

or click to browse

Target languages

No signup requiredInstant estimate

Frequently Asked Questions

Developer?

Install the MCP server and translate your first file in 2 minutes.

Install MCP Server

Enterprise team?

Still stuck on a TMS contract? Let's talk about migrating.