Back to all articles

App Localization and Internationalization: Complete Guide

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

  1. English: 1.5B users, highest revenue
  2. Chinese (Simplified): 900M users, growing market
  3. Spanish: 600M users, Latin America growth
  4. Arabic: 420M users, high engagement
  5. Portuguese: 260M users, Brazilian market
  6. French: 280M users, Europe + Africa
  7. German: 135M users, high revenue
  8. 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.

Need a Support URL for Your App?

Generate a compliant, professional support page in under a minute. Our easy-to-use generator creates everything you need for App Store and Google Play submissions.