Mobile — Localization (i18n / l10n)
Apple String Catalogs, Android plurals, ICU MessageFormat, Crowdin, Tolgee, Languine.
Mobile localization is mostly per-platform: each store has its own metadata locales, and each platform has its own string format. Cross-platform stacks (RN, Flutter, KMP) ship their own i18n libraries. For web i18n see i18n.
iOS
- ★ String Catalogs (
.xcstrings, Xcode 15+) — Apple's modern format; replaces.stringsand.stringsdict. Plurals, gender, varied formats, automatic extraction. The default for new projects. .strings/.stringsdict— older format; still works.- NSLocalizedString — runtime API; Xcode auto-extracts on build.
- String Catalog Editor — built into Xcode.
Android
- ★
strings.xml+ plurals.xml — XML resources per locale. - ICU MessageFormat — Android supports ICU plurals/select via
<plurals>and formatted strings. - Compose
stringResource(R.string.X)— runtime resolver. - Per-app language preferences (Android 13+) — let users pick a language inside your app.
Cross-platform
React Native
- ★ i18next + react-i18next — most popular.
- react-intl (FormatJS) — ICU-style.
- Lingui (
@lingui/core+@lingui/react) — modern type-safe. - react-native-localize — read user/device locale settings.
Flutter
- ★ intl package + ARB files — official.
- easy_localization — simpler runtime API.
- slang — type-safe code-gen.
KMP / Compose Multiplatform
- moko-resources — multiplatform string/font/image resources.
- compose-multiplatform-resources — official, replacing moko in many projects.
- lyricist — Compose-friendly i18n.
Translation management systems (TMS)
- ★ Crowdin — popular for mobile; integrates with App Store Connect / Play Console; free tier for OSS.
- Lokalise — paid; clean API + developer DX.
- POEditor — generous free tier; simple UI.
- Phrase (formerly PhraseApp) — paid; enterprise.
- Transifex — paid.
- ★ Tolgee — open-source, self-hostable; free hosted tier; in-context editor browser extension. Apache 2.0.
- Lokalize (mobile-flavored Phrase product).
- Languine — newer; AI-assisted; see i18n.
- Weblate — open-source; popular for FOSS projects.
Workflow patterns
- Source → TMS → translators → PR: Crowdin / Tolgee / Lokalise auto-PR translated files back into your repo.
- AI pre-translation + human review: Crowdin and Lokalise both offer this; cuts translator time.
- Continuous localization: TMS picks up new strings on every push, translators see them within minutes.
Store metadata localization
- App Store Connect supports ~40 locales; Google Play Console similar; treat metadata as strings managed in your TMS.
- fastlane deliver / supply can push localized metadata.
RTL / bi-directional
- iOS: SwiftUI handles RTL automatically; test Arabic/Hebrew layouts.
- Android:
android:supportsRtl="true"in manifest; Compose handles automatically. - Always snapshot-test RTL — see Mobile — Snapshot Testing.
Pluralization / formatted numbers
- ICU MessageFormat is the right shape for plurals.
String Cataloguses Apple-flavored plurals.- Android
plurals.xmluses CLDR plural categories. - Don't concatenate strings — let the platform format dates / numbers / currency.
Pick this if…
- iOS-only: String Catalogs natively; pair with Crowdin or Tolgee for translators.
- Android-only: strings.xml + plurals; same TMS for translators.
- RN: i18next or Lingui + Crowdin.
- Flutter: intl + ARB + Crowdin or slang for type safety.
- KMP shared resources: compose-multiplatform-resources or moko-resources.
- OSS / self-host TMS: Tolgee or Weblate.