Import the catalog Xcode made
Drop your Localizable.xcstrings into a new iOS project. Keys, comments, every language and every review state come in as they are. Info.plist permission texts land in InfoPlist.xcstrings.
Import Localizable.xcstrings, translate every language in one click, review with your team, and get the catalog back in Xcode's own format. No Flutter required.
Free plan · no credit card · Xcode 15 or later
Drop your Localizable.xcstrings into a new iOS project. Keys, comments, every language and every review state come in as they are. Info.plist permission texts land in InfoPlist.xcstrings.
AI that knows app copy: button labels, permission prompts, error states. Placeholders such as %@ and %lld and plural forms stay intact.
Sorted keys, the same spacing, the same empty-object layout. Xcode opens the file and never rewrites it, so your Git history stays clean.
One command writes the catalog into your Xcode resources folder, or let the Git sync commit it to GitHub, GitLab or Bitbucket. Works in CI.
Translated, needs review, new, stale: the states Xcode stores are the states the dashboard shows. A reviewer can approve per language before you ship.
One project can feed a Flutter app and its native companion from the same keys: ARB files for Dart, a String Catalog for Swift, one source of truth.
The CLI also ships an MCP server, so an AI agent in your editor can add a key, translate it and open the pull request.
$ dart pub global activate flutter_localisation_cli $ fl login --token flk_live_… $ fl import Gush/Resources/Localizable.xcstrings ✓ 75 keys · 23 languages imported $ fl pull ✓ Gush/Resources/Localizable.xcstrings ✓ Gush/Resources/InfoPlist.xcstrings
flutterlocalisation.json in the repo root holds the project name and xcstrings_dir, the folder Xcode reads the catalogs from.
{name}%@, numbered %1$@ when there are several%lld%lfNS…UsageDescription, CFBundleDisplayName)InfoPlist.xcstringsYes. Since October 2026 a project can ship a Flutter app, a native iOS app, or both. Pick iOS when you create the project and the platform speaks String Catalogs end to end: import, AI translation, review, export, CLI and Git sync. No ARB files, no Dart.
Xcode String Catalogs (.xcstrings), the format Xcode 15 introduced to replace .strings and .stringsdict. The platform writes Localizable.xcstrings, plus InfoPlist.xcstrings when the project holds Info.plist keys such as NSCameraUsageDescription. Older .strings files are not read; Xcode migrates them to a catalog in one click (Edit, Convert, To String Catalog).
No. The export matches Xcode's own serialisation (sorted keys, the same spacing, the same empty-object layout), and the CLI writes the bytes exactly as served. Xcode opens the file, compiles it and leaves it untouched, so your Git history stays clean.
Positional Swift placeholders are kept: %@ for text, %lld for integers, %lf for doubles, numbered (%1$@, %2$lld) when a string has more than one. Plurals become String Catalog plural variations per CLDR category (one, few, many, other), so String(localized:) picks the right form at runtime.
ICU select (gender switches), String Catalog substitutions (several plural arguments in one string) and device variations. The import and the export refuse those with a clear message instead of guessing, so nothing silently breaks.
Yes. A project with both platforms keeps one set of keys and translations, exports them as ARB files for Flutter and as a String Catalog for Xcode, and pushes both to Git. Keys must be valid identifiers for that, since Dart needs them.
Over-the-air updates come with the flutter_localisation Flutter package. A native Swift app gets its strings from the compiled catalog, so a copy change ships with the next build. AI translation, review, Git sync, the CLI and the MCP server all work the same for both.
Start with the free plan, import one catalog, and see every language filled in before lunch.