Localization (lokalisatie, l10n) — het aanpassen van de inhoud van een mobiele app aan de taal, regio en culturele kenmerken van de doelgroep. In tegenstelling tot internationalisatie (i18n), waarbij de code wordt voorbereid voor vertaling, is lokalisatie het daadwerkelijke proces van het vertalen van strings, het formatteren van data, getallen en valuta, het selecteren van afbeeldingen en het rekening houden met lokale normen. Op iOS worden vertalingen opgeslagen in Localizable.strings (.lproj-mappen voor elke taal), op Android in values-ru, values-de en andere brondirectories. Meer — in de Android-lokalisatiehandleiding.
Belangrijkste punten
Localization (afgekort l10n — 10 letters tussen „l" en „n") — is het proces van het aanpassen van een app aan een specifieke taal en regio. Als i18n de architectonische basis is, dan is l10n de vulling. i18n maakt vertaling mogelijk, l10n voert deze uit. Lokalisatie omvat: het vertalen van alle interfaceteksten, het aanpassen van datum- en getalformaten, het vervangen van afbeeldingen met cultureel gevoelige inhoud, het corrigeren van juridische teksten (privacybeleid, EULA), het configureren van betalingssystemen voor de regio en het testen op doelapparaten.
Bedrijfsrendement — lokalisatie beïnvloedt direct de conversie. Volgens CSA Research (2023) geeft 76% van de gebruikers de voorkeur aan kopen in apps in hun moedertaal, en 40% koopt nooit in een vreemde taal. Lokalisatie naar het Japans voor een retail-app verhoogt de conversie gemiddeld met 150% (Google, 2022). Gelokaliseerde apps krijgen 2–3 keer meer organische installaties in regionale App Store en Google Play dankzij regionale ASO (zoekwoorden in de doeltaal).
i18n vs l10n — twee kanten van hetzelfde proces. i18n: strings exporteren naar bronnen, RTL-ondersteuning, getalformattering. Eenmalig door ontwikkelaars gedaan. l10n: strings vertalen, inhoud aanpassen, lokaal testen. Meerdere keren door vertalers en QA voor elke lokalisatie gedaan. Bij IT Sectr besteden we 20–30% van de sprinttijd aan lokalisatie voor elke nieuwe taal — dit omvat vertaling, review, testen op apparaten en het oplossen van fouten.
Localizable.strings — het belangrijkste bestand voor het opslaan van vertalingen in iOS. Elke lokalisatie heeft zijn eigen .lproj-map: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Formaat: „sleutel" = „waarde"; (met puntkomma). Apple gebruikt Base Internationalization: Storyboard en XIB worden eenmalig gemaakt (Base.lproj), en interfacestrings worden voor elke taal naar Localizable.strings geëxporteerd. Dit elimineert de noodzaak om XIB-kopieën voor elke lokalisatie te maken.
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Instellingen";
// "profile.greeting" = "Hallo, %@!";
// "items.count" = "%d st.";
// String laden op sleutel
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Titel van instellingenscherm"
)
// String met parameter
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// XLIFF-import (Xcode → Editor → Import Localizations)
// Werkt .lproj-bestanden automatisch bij na het werk van de vertaler
Base Internationalization — Apple's benadering waarbij de interface (Storyboard, XIB) één keer in Base.lproj wordt gemaakt. Bij het toevoegen van een taal exporteert Xcode strings van Base naar een XLIFF-bestand. De vertaler vertaalt de XLIFF. Na import maakt Xcode .lproj met vertaalde strings. Voordeel: geen XIB-duplicatie voor elke taal. Beperking: voor RTL-talen (Arabisch, Hebreeuws) kan een aparte XIB met gespiegelde layout nodig zijn.
InfoPlist.strings — bestand voor het lokaliseren van de app-naam (CFBundleDisplayName), camera/microfoonrechten (NSCameraUsageDescription) en andere waarden uit Info.plist. Gemaakt in .lproj: ru.lproj/InfoPlist.strings. Formaat: CFBundleDisplayName = „Mijn app"; NSCameraUsageDescription = „De app heeft toegang tot de camera nodig om foto's te maken";. Zonder lokalisatie van InfoPlist.strings zijn systeemdialogen in het Engels.
Android-bronnen voor lokalisatie worden georganiseerd via kwalificaties (qualifiers) in mapnamen. Voor de Russische taal — res/values-ru/, voor Duits — res/values-de/, voor Braziliaans Portugees — res/values-pt-rBR/. Android ondersteunt meer dan 160 lokalisaties. Het systeem selecteert automatisch bronnen op basis van de taal van het apparaat (Locale.getDefault()). Als exacte lokalisatie ontbreekt — worden bronnen uit values/ (basislokalisatie, meestal en) gebruikt.
// res/values/strings.xml (basis — Engels)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (Russisch)
<string name="settings_title">Instellingen</string>
<string name="greeting">Hallo, %s!</string>
// res/values-de/strings.xml (Duits)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — uniforme code voor alle talen
textView.text = getString(R.string.settings_title)
// String met parameter
val greeting = getString(R.string.greeting, userName)
// Gelokaliseerde afbeeldingen
// res/drawable-ru/flag.png — vlag voor Russische versie
// res/drawable/flag.png — standaardvlag
// Lokalisatie van layouts (voor RTL-talen)
// res/layout-ar/activity_main.xml — Arabische versie
Lokalisatie van niet alleen strings — Android maakt lokalisatie van afbeeldingen (res/drawable-ru/), kleuren (res/values-ru/colors.xml), afmetingen (res/values-ru/dimens.xml), animaties, menu's en zelfs hele layouts mogelijk. Voor talen met verschillende woordlengtes (Duits is 30–40% langer dan Engels) gebruik gelokaliseerde dimens.xml met grotere knopbreedtes. Voor regio's met andere kleursymboliek (wit — rouw in China) — gelokaliseerde colors.xml.
Testen — schakel de apparaattaal naar de doeltaal via Instellingen → Systeem → Taal. Controleer: alle strings zijn vertaald, data worden correct geformatteerd, getallen worden met de juiste scheidingstekens weergegeven, afbeeldingen komen overeen met de regio, de layout „breekt" niet bij lange strings. Gebruik voor automatisering Espresso met LocaleTestRule (Android Testing Library) — hiermee kunnen tests met verschillende lokalisaties worden uitgevoerd zonder handmatig van taal te wisselen.
Culturele kenmerken — lokalisatie beperkt zich niet tot het vertalen van strings. Kleursymboliek verschilt: rood — geluk in China, gevaar in de VS, rouw in Zuid-Afrika. Wit — zuiverheid in Europa, rouw in China. Pictogrammen met gebaren: duim omhoog — positief in de VS, belediging in het Midden-Oosten. Afbeeldingen van mensen: in Arabische landen zijn afbeeldingen van vrouwen in badkleding onaanvaardbaar. Religieuze symbolen: kruis, halve maan, davidster mogen alleen in de juiste context worden gebruikt.
Wettelijke vereisten — elk land heeft zijn eigen wetten voor digitale producten. GDPR (EU) — verplichte toestemming voor cookies en gegevensverwerking. CCPA (Californië) — recht op gegevensverwijdering. Wet op persoonsgegevens (Rusland, 152-FZ) — opslag van gegevens op servers in de RF. LGPD (Brazilië) — analoog aan GDPR. Betalingen: in China zijn Alipay/WeChat Pay nodig, in India — UPI, in Brazilië — Boleto en PIX. Configureer de betalingsgateway voor de regio voordat u met lokalisatie begint.
| Aspect | VS | China | VAE | Duitsland |
|---|---|---|---|---|
| Betalingssysteem | Apple Pay, kaarten | Alipay, WeChat Pay | Kaarten, Apple Pay | PayPal, Giropay |
| Merkkleuren | Alle | Rood — geluk | Groen — islam | Zwart/geel |
| Sociale media | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Datum | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Gegevenswet | CCPA | PIPL | PDPL | GDPR |
Voorbeelden en inhoud — pas voorbeelden aan de regio aan. Gebruik voor Duitse lokalisatie het metrische stelsel (kg, km), voor Amerikaanse — het imperiale stelsel (lb, mi). Telefoonnummers, postcodes, adressen — worden anders geformatteerd. Valutavoorbeelden: ¥1000 in Japan, $9.99 in de VS, 999 ₽ in Rusland. Afbeeldingen van eten, kleding, interieurs moeten voldoen aan regionale standaarden. Bij IT Sectr raden we aan lokale consultants in te huren voor het controleren van de culturele aanpassing.
Lokalisatietools — professionele platforms automatiseren het proces: Lokalise, Crowdin, POEditor, Smartling, Phrase. Ze integreren met de repository, importeren automatisch nieuwe strings, volgen wijzigingen (Delta updates — alleen gewijzigde strings worden vertaald), bieden Translation Memory (TM — opslag van eerder vertaalde zinnen) en Glossary (terminologiewoordenlijst). Gemiddelde kosten van professionele vertaling: $0.08–0.15 per woord (afhankelijk van de taal).
Proces — (1) De ontwikkelaar voegt i18n-sleutels toe aan de code, pusht naar de repository. (2) CI/CD (GitHub Actions / GitLab CI) stuurt automatisch nieuwe sleutels naar het lokalisatieplatform. (3) Vertalers krijgen een melding, vertalen, slaan op. (4) Vertaalde bestanden maken automatisch een PR aan in de repository. (5) QA controleert de lokalisatie op apparaten. (6) Release. Cyclus voor één lokalisatie: 2–5 werkdagen (afhankelijk van de omvang). Voor 10 lokalisaties: 5–15 dagen bij parallelle inzet van vertalers.
Machine Translation + Human Review — de moderne standaard. Neurale netwerkvertaling (DeepL, Google Translate, GPT-4) levert 80–90% kwaliteit voor populaire taalparen. Een menselijke vertaler controleert: terminologie, context (woorden kunnen verschillende betekenissen hebben op verschillende schermen), culturele aanpassing. Bij IT Sectr gebruiken we een hybride aanpak: ML-vertaling + review door een moedertaalspreker. Voor kritieke strings (juridisch, betalingen) — alleen een professionele vertaler. Besparing: tot 60% van de kosten met behoud van kwaliteit.
Veelgestelde vragen
Internationalisatie — het voorbereiden van code voor vertaling (strings exporteren, RTL, formattering). Lokalisatie — de vertaling en culturele aanpassing zelf. i18n wordt één keer door de ontwikkelaar gedaan, l10n — door de vertaler voor elke taal. i18n zonder l10n — de app is klaar voor vertaling maar niet vertaald. l10n zonder i18n — de code moet voor elke taal worden herschreven.
In Localizable.strings-bestanden in .lproj-mappen. Voor elke taal: en.lproj (Engels), ru.lproj (Russisch), de.lproj (Duits). Formaat: „sleutel" = „waarde";. Voor meervoud — Localizable.stringsdict. App-instellingen (CFBundleDisplayName) — in InfoPlist.strings. Xcode beheert .lproj via Base Internationalization.
values-ru — de Android-bronnendirectory voor de Russische taal. Bevat strings.xml met vertalingen. Hetzelfde voor andere talen: values-de (Duits), values-fr (Frans). Android selecteert bronnen op basis van de systeemtaal. Als values-ru niet wordt gevonden — gebruikt het values/ (basistaal, meestal Engels).
Gebruik altijd Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Rusland: 31.12.2024. VS: 12/31/2024. Japan: 2024/12/31. Stel nooit een vast formaat in — elk land heeft zijn eigen standaarden. Gebruik voor het invoeren van datums UIDatePicker / DatePicker.
Voor wereldwijde dekking zijn 10–15 talen voldoende: Engels, Spaans, Frans, Duits, Japans, Chinees, Koreaans, Portugees, Russisch, Italiaans, Arabisch. Voor regionale — 1–2 talen. Elke extra lokalisatie verhoogt het aantal organische installaties met 5–15% in de betreffende regio. App Store vereist ten minste Engelse lokalisatie.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook