The Ultimate Guide to Mobile App Localization (i18n & l10n)
How engineering teams scale their Android and iOS apps from a single language to a global audience with automated translation pipelines.
1. Internationalization (i18n) vs. Localization (l10n)
While developers often use the terms interchangeably, they represent two distinct phases of building a global product:
- Internationalization (i18n): The architectural work of engineering your app so it can adapt to different languages and regions without code modifications. This includes removing hardcoded strings, supporting variable text lengths, and using layout engines that support text directionality.
- Localization (l10n): The process of translating content, adapting dates, numbers, currency symbols, and tailoring cultural references for specific target locales.
2. Why Localize? The Economics of App Store Growth
According to mobile analytics benchmark reports, apps that localize their user interface and App Store listings achieve:
+128%
Average download increase in newly supported markets
72.4%
Of global consumers prefer buying in their native language
4.7★
Higher rating scores when native translations are provided
3. Platform Specifics: Android vs. iOS
Android: The Resource Qualifier System
Android organizes strings inside res/values/strings.xml. Additional languages reside in qualified subdirectories using ISO 639-1 language codes (e.g. res/values-es/strings.xml, res/values-ar/strings.xml).
iOS: String Catalogs & .strings
In modern iOS (Xcode 15 and 16), Apple introduced String Catalogs (.xcstrings), a centralized format that tracks localization status directly in the Xcode editor. Legacy codebases use Localizable.strings inside localized *.lproj folders.
4. Best Practices for Mobile Engineering Teams
-
Never Concatenate Strings in Code: Word orders differ radically across languages. Always use parameter tokens (
%1$sin Android,%@in Swift). -
Handle Complex Plural Rules: English only distinguishes "one" vs "other" (1 item vs 2 items). Arabic distinguishes zero, one, two, few, many, and other. Always use plural resource tags rather than ternary
count == 1 ? "item" : "items". - Test for Text Expansion: German, French, and Russian translations can be 30% to 50% longer than English. Ensure your UI labels in Jetpack Compose and SwiftUI do not clip or truncate.
- Automate Build-Time Sync: Do not commit translation files manually. Use automated CI/CD tasks to pull updated strings from AppText during build pipelines.
Manage All Your Mobile App Translations for Free
AppText gives your team unlimited keys, AI translation helpers, and native Android & iOS export pipelines at zero cost.
Get Started Free — No Credit Card Required