The Lingo.dev CLI translates native mobile resource files - Xcode .strings, Android XML, Flutter ARB, and React Native JSON - through a configured localization engine. Each platform has a dedicated bucket type that understands the file format, preserves structure, and handles plurals natively.
Platform Overview#
| Platform | Native format | CLI bucket | Typical file path |
|---|---|---|---|
| iOS (Xcode) | .strings | xcode-strings | [locale].lproj/Localizable.strings |
| iOS (Xcode) | .stringsdict | xcode-stringsdict | [locale].lproj/Localizable.stringsdict |
| iOS (Xcode) | .xcstrings | xcode-xcstrings | Localizable.xcstrings |
| Android | strings.xml | android | app/src/main/res/values-[locale]/strings.xml |
| Flutter | .arb | flutter | lib/l10n/app_[locale].arb |
| React Native | .json | json | src/locales/[locale].json |
Prerequisites#
Every CLI run sends content through a localization engine - the configuration that determines which LLM model, glossary, brand voice, and instructions apply. Create one in the Lingo.dev dashboard and generate an API key.
Configure Your Platform#
Xcode supports three localization formats. Use the one that matches your project setup.
String Catalogs (.xcstrings) - the modern Xcode format introduced in Xcode 15. A single JSON file contains all locales, and Xcode updates it automatically when you add new strings. The CLI mutates this file in place - no [locale] placeholder needed.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-xcstrings": {
"include": ["MyApp/Localizable.xcstrings"]
}
}
}Legacy .strings files - one file per locale in [locale].lproj/ directories. If your project also uses .stringsdict for plurals, add both buckets.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-strings": {
"include": ["MyApp/[locale].lproj/Localizable.strings"]
},
"xcode-stringsdict": {
"include": ["MyApp/[locale].lproj/Localizable.stringsdict"]
}
}
}See Apple's localization documentation for setting up Xcode's i18n infrastructure.
Running Translations#
Translate all resource files in one command:
npx lingo.dev@latest runThe CLI reads your source locale files, computes what changed since the last run using the lockfile, translates only the delta, and writes results to target locale files.
Target a specific platform when your project contains multiple resource types:
npx lingo.dev@latest run --bucket android
npx lingo.dev@latest run --bucket xcode-xcstringsPlurals and Platform Conventions#
Each mobile platform handles plural forms differently - iOS uses .stringsdict or String Catalog rules, Android uses <plurals> XML elements, and Flutter uses ICU MessageFormat in ARB files. The CLI preserves each platform's native plural structure during translation and generates the correct plural categories for each target locale.
Translator notes
Mobile strings are often short and context-dependent. Use translator notes in Xcode .xcstrings files to give the localization engine context about where a string appears - "button label in checkout flow" translates differently than "navigation menu item."
