Localizing your app can increase downloads by 128% and revenue by 26% per region. Yet only 40% of apps are properly localized. This comprehensive guide shows you how to do it right.
Localization vs Internationalization
Internationalization (i18n)
Preparing your app's codebase to support multiple languages:
- Separating text from code
- Supporting different date/time formats
- Handling various number formats
- Right-to-left (RTL) language support
- Unicode character support
Localization (l10n)
Adapting your app for specific markets:
- Translating text and content
- Cultural adaptation of visuals
- Local payment methods
- Regional legal compliance
- Local customer support
Priority Markets
Top Languages by Market Size
- English: 1.5B users, highest revenue
- Chinese (Simplified): 900M users, growing market
- Spanish: 600M users, Latin America growth
- Arabic: 420M users, high engagement
- Portuguese: 260M users, Brazilian market
- French: 280M users, Europe + Africa
- German: 135M users, high revenue
- Japanese: 125M users, premium market
Market Selection Strategy
- Analyze app store download data
- Research competitor localization
- Consider regulatory requirements
- Evaluate translation costs vs ROI
- Start with 3-5 priority markets
Technical Implementation
iOS Localization Setup
// 1. Create Localizable.strings file
/* en */
"welcome_message" = "Welcome to our app!";
"login_button" = "Log In";
/* es */
"welcome_message" = "¡Bienvenido a nuestra aplicación!";
"login_button" = "Iniciar sesión";
// 2. Use in code
let welcomeText = NSLocalizedString("welcome_message", comment: "")
// 3. With string interpolation
String(format: NSLocalizedString("items_count", comment: ""), count)
Android Localization Setup
// Create values-es/strings.xml
¡Bienvenido a nuestra aplicación!
Iniciar sesión
// Use in code
val welcome = getString(R.string.welcome_message)
// Use in XML
React Native Localization
// Using react-i18next
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
i18n.use(initReactI18next).init({
resources: {
en: { translation: require('./locales/en.json') },
es: { translation: require('./locales/es.json') }
},
lng: 'en',
fallbackLng: 'en'
});
// In components
import { useTranslation } from 'react-i18next';
const { t } = useTranslation();
{t('welcome_message')}
Translation Best Practices
Preparing Content for Translation
- Provide context: Include screenshots and usage notes
- Character limits: Specify max length for UI strings
- Variables: Document placeholder meanings
- Glossary: Maintain brand term consistency
- Tone guide: Specify formal vs casual voice
Translation Methods
1. Professional Translation Services
- Highest quality
- Native speakers
- Cultural expertise
- Cost: $0.10-0.25 per word
- Services: Smartling, Transifex, Lokalise
2. Machine Translation + Review
- Fast and affordable
- Requires human review
- Good for non-critical content
- Tools: Google Translate API, DeepL
3. Community Translation
- Cost-effective
- Engaged user base
- Variable quality
- Platforms: Crowdin, POEditor
Quality Assurance
- Native speaker review mandatory
- In-context linguistic testing
- UI/UX verification
- Functional testing in target language
- Cultural appropriateness check
Cultural Adaptation
Visual Content
Consider localizing:
- Colors: Different meanings across cultures
- Images: Use culturally relevant imagery
- Icons: Ensure universal understanding
- Gestures: Avoid offensive hand signs
- Symbols: Religious and cultural sensitivity
Date and Time Formats
// iOS
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "es_ES")
dateFormatter.dateStyle = .medium
// Output: 15 ene 2025
// Android
SimpleDateFormat("dd MMM yyyy", Locale("es", "ES"))
// Output: 15 ene 2025
Number and Currency Formatting
// iOS
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "de_DE")
formatter.string(from: 1234.56) // "1.234,56 €"
// Android
NumberFormat.getCurrencyInstance(Locale("de", "DE"))
.format(1234.56) // "1.234,56 €"
Right-to-Left (RTL) Support
Languages Requiring RTL
- Arabic
- Hebrew
- Persian (Farsi)
- Urdu
iOS RTL Implementation
// Enable natural text alignment
label.textAlignment = .natural
// Use leading/trailing instead of left/right
constraints.append(view.leadingAnchor.constraint(equalTo: superview.leadingAnchor))
// Mirror images when needed
if UIView.userInterfaceLayoutDirection(for: view.semanticContentAttribute) == .rightToLeft {
imageView.image = imageView.image?.withHorizontallyFlippedOrientation()
}
Android RTL Implementation
// In AndroidManifest.xml
// Use start/end instead of left/right
// In code
if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL) {
// RTL-specific logic
}
App Store Localization
Metadata to Localize
- App name: May differ by market
- Subtitle/short description
- Full description
- Keywords: Research local search terms
- Screenshots: With localized text
- App preview videos
- What's New notes
Screenshot Localization
Options:
- Full redesign: Native screenshots in each language
- Overlay text: Use tools like AppLaunchpad
- Template-based: Automated with Fastlane Frameit
ASO Keywords by Language
- Research local search behavior
- Don't directly translate keywords
- Use local keyword tools
- Test and optimize per market
- Monitor competitor keywords
Content Management
Localization Management Platforms
Lokalise:
- Developer-friendly
- Git integration
- Translation memory
- Screenshot context
- Price: From $120/month
Phrase:
- Comprehensive workflow tools
- API and CLI
- Quality checks
- Price: From $29/month
Crowdin:
- Community features
- Affordable pricing
- Good for open source
- Price: Free for open source, from $40/month
Version Control
// Directory structure
/locales
/en
strings.json
app-store.txt
/es
strings.json
app-store.txt
/de
strings.json
app-store.txt
// Track changes in git
// Review translations in PRs
// Automated sync with localization platform
Testing Localized Apps
Linguistic Testing
- All text displays correctly
- No truncated strings
- Proper character encoding
- Correct plural forms
- Date/time formats appropriate
Functional Testing
- App works in all supported languages
- Language switching functions properly
- RTL layouts display correctly
- Keyboards and input methods work
- Local payment methods function
Pseudo-localization
Test text expansion before translation:
// Original: "Login"
// Pseudo: "[Ļöĝîñ__]"
// Catches issues:
- Text truncation
- Hard-coded strings
- Layout problems
- Missing translations
Regional Compliance
GDPR (Europe)
- Privacy policy in local language
- Cookie consent
- Data deletion rights
- Local data storage options
CCPA (California)
- "Do Not Sell" disclosure
- Privacy rights notice
- Data access requests
China-specific Requirements
- ICP license for hosting
- Local data storage
- Censorship compliance
- Alternative to Google services
- Simplified Chinese (not Traditional)
Ongoing Maintenance
Continuous Localization
Workflow:
1. Developer adds new feature with English strings
2. Strings exported to localization platform
3. Translators notified automatically
4. Translations reviewed and approved
5. Translations synced back to codebase
6. QA tests in all languages
7. Deploy with complete translations
Update Management
- New features require new translations
- Bug fixes may affect text
- Marketing campaigns need localization
- Seasonal content updates
- App store updates
Localization ROI
Expected Results
- Downloads: 128% increase in localized markets
- Revenue: 26% increase per region
- Reviews: More positive in local language
- Engagement: Higher retention in native language
- Support: Fewer tickets from clearer communication
Cost Analysis
Example for 10,000 words:
Professional translation: $1,000-2,500
Screenshots (5 per language): $200-500
Testing: $500-1,000
Management platform: $50-200/month
Total first language: ~$2,000-4,500
ROI timeline: Typically 3-6 months
Common Mistakes
Technical Errors
- ❌ Hard-coding strings in UI
- ❌ Using string concatenation
- ❌ Not handling text expansion
- ❌ Forgetting plural forms
- ❌ Mixing code and text
Translation Errors
- ❌ Direct translation without context
- ❌ Ignoring cultural nuances
- ❌ Inconsistent terminology
- ❌ Machine translation without review
- ❌ Literal brand name translation
Conclusion
Proper localization opens global markets and significantly increases app success. Start with high-priority languages, invest in quality translation, and maintain continuous localization workflows for best results.
Localizing your app? Don't forget to create localized support pages! Our generator supports multiple languages and creates compliant support URLs for all major markets.