i18n vs L10n Explained
Internationalization (i18n) is designing your app to support multiple languages and regions without code changes. Localization (L10n) is adapting your app for specific locales with translated strings, local formats, and cultural adjustments. Think of i18n as the foundation and L10n as the content. Proper i18n from day one saves massive refactoring costs later.
String Externalization
Never hardcode user-facing strings in code. iOS uses Localizable.strings files with NSLocalizedString macro, Android uses strings.xml with getString method. Use meaningful keys (not English text as keys), provide context comments for translators, avoid concatenating strings (breaks grammar in some languages), and use string formatting for dynamic values. Organize strings by feature or screen for maintainability.
Apps available in 10+ languages see 128% more downloads on average compared to English-only apps.
Pluralization and Gender
English has simple pluralization (1 item, 2 items), but many languages have complex rules. Use plural resources: iOS Stringsdict files support plural rules, Android plurals.xml handles quantity strings. Some languages have different forms for zero, one, two, few, many, and other. Gender-specific strings require separate translations in gendered languages like French or Spanish.
Date and Number Formatting
Never format dates or numbers manually. Use platform formatters: DateFormatter and NumberFormatter on iOS, DateFormat and NumberFormat on Android. These automatically handle locale-specific formats: date order (MM/DD/YYYY vs DD/MM/YYYY), decimal separators (period vs comma), thousands separators, currency symbols and position, and 12 vs 24-hour time.
RTL Layout Support
Right-to-left languages (Arabic, Hebrew, Persian) require mirrored layouts. Use leading/trailing instead of left/right constraints, test with RTL pseudolocale during development, mirror directional icons and images, and keep logos and product images unmirrored. iOS automatically mirrors most UI elements, Android requires android:supportsRtl="true" and careful layout design.
Cultural Considerations
Beyond language, consider cultural differences: color meanings vary (white for weddings in West, funerals in East), icons and gestures have different connotations, imagery should represent diverse users, legal requirements differ by country, and payment methods vary by region. Research target markets thoroughly and involve native speakers in design decisions.
Testing Multiple Locales
Test with pseudolocalization to catch i18n bugs early (elongated strings, special characters, RTL). Use real device testing in target locales, verify text doesn't truncate or overflow, check that layouts adapt to different text lengths, test with actual translators or native speakers, and automate locale switching in UI tests.