New · Native iOS apps via Xcode String Catalogs

Ship your Flutter or iOS app
in every language.

The localization platform for Flutter and native iOS teams — AI translation, ARB files and Xcode String Catalogs, live updates without an App Store release, and a CLI that even Claude can drive.

Free plan · no credit card · MIT-licensed package · Flutter, iOS or both

🇪🇸 Spanish ✓
🇯🇵 Japanese ✓
🇩🇪 German ✓
app.flutterlocalisation.com

Trusted by Flutter and iOS teams shipping to the world

2
stacks: Flutter & native iOS
40+
languages, AI-translated
0s
to ship a copy fix live
MIT
licensed, offline core
Everything you need

One platform for the whole
localization lifecycle

From the first key to a live update on your users' devices — translation, code, and shipping in one place.

AI-powered translation

Translate every string into any language in one click. Context-aware — it understands UI and technical terms.

AI

Type-safe code generation

Turn ARB files into strongly-typed Dart. Autocomplete every key, catch typos at compile time.

Package

Native iOS String Catalogs

Import Localizable.xcstrings, translate with AI, export in Xcode's own format. A project can be Flutter, iOS or both.

iOS

Live over-the-air updates

Fix a typo or ship a new locale without an App Store release. Updates land at runtime in seconds.

Live

One-command CLI

Pull, regenerate type-safe classes, and sync — all from a single terminal command in your CI or IDE.

CLI

Claude CLI & MCP server

Add keys, translate, and open PRs straight from Claude. An MCP server drives your whole workflow.

MCP

Git integration

Two-way sync with GitHub, GitLab & Bitbucket. Your .arb and .xcstrings files stay in version control, auto-committed.

Git

Team collaboration

Invite developers, translators, and reviewers with role-based permissions. Everyone works together.

Teams

Flavors & variants

Ship white-label or multi-environment apps. Each flavor gets its own set of translations.

Flavors

ICU plurals & placeholders

Structured editing for plurals, select/gender, and typed placeholders — no hand-writing ICU syntax.

ICU
AI Translation

Translate your whole app in one click

Our AI understands app context — button labels, error messages, technical terms — and produces natural, on-brand translations you can review and refine.

  • Context-aware — knows the difference between "Home" the screen and "Home" the address.
  • Preserves placeholders and ICU plural forms automatically.
  • Translation memory keeps terminology consistent across releases.
Start translating with AI
AI · translate all
🇬🇧
Source
Your order is on its way
🇪🇸Tu pedido está en camino
🇯🇵ご注文はまもなく届きます
🇩🇪Ihre Bestellung ist unterwegs
Visual Editor

Edit translations visually, never in JSON

See every language side by side, edit inline with instant save, and spot missing translations at a glance — no more wrestling with .arb syntax or merge conflicts.

  • Side-by-side language comparison with inline editing.
  • Missing-translation warnings so nothing ships half-localized.
  • Structured ICU editing for plurals, gender, and placeholders.
Translations · chat-bot
Key🇬🇧 English🇪🇸 Spanish
clear_chat_historyClear chat historyBorrar historial
type_a_messageType a message…Escribe un mensaje…
chat_greetingHi, how can I help?Hola, ¿cómo puedo ayudar?
items_count{count, plural, one{1 item} other{# items}}Missing
Git Integration

Your .arb and .xcstrings files stay where they belong

Connect GitHub, GitLab, or Bitbucket for full two-way sync. Edit in the dashboard and we commit back automatically; commit in your repo and the dashboard picks it up. No copy-paste, no merge conflicts.

Connect your repository
Push a translation
github.com/your-org/chat-bot
Auto-commit .arb / .xcstrings
chore(l10n): update 5 keys
Pull & generate
flutter_localisation arbs prod
New · Native iOS

Swift apps too, straight from the String Catalog

A project can be Flutter, iOS or both. Import the Localizable.xcstrings Xcode made, translate every language with AI, and get the catalog back in Xcode's own format, so a build never rewrites it.

  • Placeholders kept: %@, %lld, numbered when there are several.
  • Plurals become String Catalog variations per CLDR category.
  • Info.plist keys land in InfoPlist.xcstrings; Git sync and fl pull work the same.
How iOS support works
Gush/Resources/Localizable.xcstrings
{
  "sourceLanguage" : "en",
  "strings" : {
    "items_count" : {
      "localizations" : {
        "de" : { "variations" : { "plural" : {
          "one" : { "stringUnit" : { "value" : "%lld Element" } },
          "other" : { "stringUnit" : { "value" : "%lld Elemente" } }
        } } },
        "ja" : { "stringUnit" : { "state" : "translated", "value" : "%lld 件" } }
      }
    }
  }
}
For Developers

Your translations, as type-safe
as the rest of your code.

The flutter_localisation package turns ARB files into strongly-typed Dart, ships fixes over the air, and runs from one CLI command.

app_en.arb → type-safe Dartflutter_localisation v2.5.0
app_en.arb
{
  "itemCount": "{count, plural,
    =0{No items} =1{1 item}
    other{{count} items}}",
  "@itemCount": {
    "placeholders": {
      "count": { "type": "int" }
    }
  }
}
generates →
in your widget
// autocompleted · int-checked
Text(context.tr.itemCount(3));
// → "3 items"

Text(context.tr.greeting('Ada'));
// → "Hello, Ada!"

// rename a key? the compiler
// flags every call site.
✕AppLocalizations.of(context)!.itemCount
✓context.tr.itemCount(3)

No .of(context)! boilerplate. No stringly-typed keys.

Live / Over-the-air

Fix a typo in production. Live in seconds.

Push changes at runtime — no rebuild, no App Store review.

The old way
rebuild → submit → review · 1–3 days
With FlutterLocalisation
edit → publish → live · ~seconds
Live Cached locally, with automatic fallback to your bundled ARB if offline.
One-command CLI

Sync, generate & ship — in one line.

zsh — your-app
$ flutter_localisation arbs production
✓Pulled latest translations from Git
✓Regenerated type-safe Dart classes
✓Invalidated analyzer cache & ran flutter pub get
Done in 4.2s — 214 keys · 12 locales
6platformsone codebase
0App Store reviewsto ship a copy fix
MITlicensedfree, offline core
Runs oniOSAndroidWebmacOSWindowsLinux
MCP · Works with Claude

Localize your app from your AI agent.

The flutter_localisation_cli ships an MCP server, so Claude can add keys, translate them, and open a PR — without you leaving your editor.

  • Natural-language commands — "add a retry button label and translate it".
  • Full workflow access — read, edit, translate, and sync your ARB files.
  • One-line setup in any MCP-compatible client.
YouAdd a checkout.retry key ("Try again") and translate it into all 12 locales.
Claude✓ added key  ✓ translated 12 locales  ✓ opened PR #482
~/.claude — one-line setup
$ dart pub global activate flutter_localisation_cli
$ claude mcp add flutter-localisation \
  --env FL_API_TOKEN=flk_live_… -- fl_mcp
✓MCP server connected · 13 tools available
Team Collaboration

Everyone in the loop, with the right access

Invite developers, translators, and reviewers with role-based permissions. Bring in external translators without handing over your whole project.

Invite your team
AD
Ada Dev
Developer
Full access
MG
María García
Translator · 🇪🇸 🇵🇹
Edit ES, PT
KT
Kenji Tanaka
Reviewer · 🇯🇵
Review only
Invite a translator
Flavors & Variants

One project, many builds

Ship white-label apps or dev / staging / production variants from a single project. Each flavor keeps its own translations and pushes to its own target.

  • Per-flavor overrides with a shared base.
  • Generate a typed class per flavor from one command.
Flavors
D
default
com.yourco.app
46 langs
P
premium
com.yourco.app.pro
40 langs
W
whitelabel
com.client.retail
12 langs
Analytics

Know you're 100% before you ship

Track translation coverage per language, watch progress in real time, and catch gaps before a release — not after a 1-star review.

See your coverage dashboard
Translation coverage▲ 12% this week
🇬🇧English
100%
🇪🇸Spanish
100%
🇩🇪German
86%
🇯🇵Japanese
72%
🇧🇷Portuguese
54%
Why switch

FlutterLocalisation vs. the manual way

What you doFlutterLocalisationHand-rolled workflow
Translate a new localeOne-click AI, review laterCopy each string into Google Translate
Access keys in codeType-safe context.tr.keyStringly-typed, typo-prone lookups
Ship a copy fixLive in seconds, over-the-airNew build → App Store review → days
Keep .arb in GitAuto-commit two-way syncManual copy & commit each time
Work with translatorsRole-based, in-appEmail spreadsheets back and forth
Localize a native iOS appSame project, String Catalog in and outAnother tool, another spreadsheet
Automate from ClaudeMCP server, built in— Not possible
Pricing

Start free. Scale when you grow.

Every paid plan includes AI translation, Git sync, live updates, and the full CLI.

Free
€0/mo
Free forever
For indie devs getting started.
Start free
  • 2 projects · 3 members
  • 500 translation keys
  • All free online tools
Most popular
Starter
€29/mo
or €249/yr, save 28%
For small teams shipping multilingual apps.
Get started
  • 6 projects · 8 members
  • 15,000 translation keys
  • Live updates + Git + AI
Growth
€89/mo
or €749/yr, save 30%
For scaling products and larger teams.
Get started
  • 20 projects · 25 members
  • 75,000 translation keys
  • Everything in Starter
Business
€249/mo
or €1,990/yr, save 33%
For organizations with many apps.
Get started
  • Unlimited projects · 100 members
  • 300,000 translation keys
  • Priority support

Prices in EUR, excluding VAT · start free, no credit card · pay by card, or by invoice with 30-day terms for companies.

Enterprise or custom plan: SSO, a signed DPA, invoice billing or more than 100 members? Contact us or write to support@flutterlocalisation.com.

Get Flutter and iOS localization tips

Weekly insights on i18n best practices, ARB and String Catalog tips, and Flutter updates. Join 1,000+ developers.

No spam, unsubscribe anytime. We respect your privacy.

FAQ

Questions, answered

What is FlutterLocalisation, exactly?

Two things that work together: an MIT-licensed Flutter package that generates type-safe localization from your ARB files (and can fetch live updates), plus a web platform for AI translation, team collaboration, Git sync, and analytics. Use the package free and offline, or add the platform for the full workflow.

Do I have to change how my Flutter app loads translations?

No. It builds on Flutter's standard ARB + intl approach. You get a typed context.tr accessor, and optionally live updates — all backed by your existing .arb files.

How do live over-the-air updates work?

The package fetches the latest translations at runtime, caches them locally, and falls back to your bundled ARB if the device is offline. So you can fix a typo or add a locale and it reaches users in seconds — no new app build, no store review.

Which Git providers are supported?

GitHub, GitLab, Bitbucket Cloud and self-hosted Bitbucket Server, with full two-way sync. Edit in the dashboard and we commit the updated .arb files back to your repo; commit a change in the repo and the dashboard imports it within seconds through a webhook.

Does it work for native iOS (Swift) apps?

Yes. A project can be Flutter, iOS or both. For iOS the format is the Xcode String Catalog (.xcstrings): import the one Xcode made, translate with AI, review, and pull the catalog back in Xcode's own format with the CLI or the Git sync. Info.plist keys go to InfoPlist.xcstrings. ICU select, substitutions and device variations are refused rather than guessed. See the iOS page.

What can Claude do through the MCP server?

The flutter_localisation_cli ships an MCP server, so Claude can read your keys, add new ones, translate them, and sync — all from natural-language prompts in any MCP-compatible client.

Is there really a free plan?

Yes — the package is free and MIT-licensed forever, and the platform's free plan covers small projects with no credit card required. Upgrade only when your team grows.

Ship your app in every language.

Join Flutter and iOS teams translating with AI, shipping live updates, and automating localization from the CLI and from Claude.

MIT licensed · works offline · no credit card