Localization (lokalisering, l10n) — anpassning av innehållet i en mobilapp till målgruppens språk, region och kulturella särdrag. Till skillnad från internationalisering (i18n), där koden förbereds för översättning, är lokalisering själva processen att översätta strängar, formatera datum, siffror och valutor, välja bilder och ta hänsyn till lokala normer. På iOS lagras översättningar i Localizable.strings (.lproj-mappar för varje språk), på Android — i values-ru, values-de och andra resurskataloger. Mer — i Android-guiden för lokalisering.
Huvudpunkter
Localization (förkortat l10n — 10 bokstäver mellan "l" och "n") — är processen att anpassa en app till ett specifikt språk och region. Om i18n är den arkitektoniska grunden, så är l10n innehållet. i18n möjliggör översättning, l10n utför den. Lokalisering omfattar: översättning av alla gränssnittstexter, anpassning av datum- och nummerformat, byte av bilder med kulturellt känsligt innehåll, korrigering av juridiska texter (integritetspolicy, EULA), konfigurering av betalningssystem för regionen och testning på målenheter.
Affärsavkastning — lokalisering påverkar direkt konverteringen. Enligt CSA Research (2023) föredrar 76 % av användarna att köpa i appar på sitt modersmål och 40 % köper aldrig på ett främmande språk. Lokalisering till japanska för en detaljhandelsapp ökar konverteringen med i genomsnitt 150 % (Google, 2022). lokaliserade appar får 2–3 gånger fler organiska installationer i regionala App Store och Google Play tack vare regional ASO (sökord på målspråket).
i18n vs l10n — två sidor av samma process. i18n: extrahera strängar till resurser, RTL-stöd, nummerformatering. Görs en gång av utvecklare. l10n: översätta strängar, anpassa innehåll, lokal testning. Görs flera gånger av översättare och QA för varje lokalisering. På IT Sectr avsätter vi 20–30 % av sprinttiden för lokalisering av varje nytt språk — detta omfattar översättning, granskning, testning på enheter och felkorrigering.
Localizable.strings — huvudfilen för lagring av översättningar i iOS. Varje lokalisering har sin egen .lproj-mapp: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Format: "nyckel" = "värde"; (med semikolon). Apple använder Base Internationalization: Storyboard och XIB skapas en gång (Base.lproj) och gränssnittssträngar exporteras till Localizable.strings för varje språk. Detta eliminerar behovet av att skapa XIB-kopior för varje lokalisering.
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Inställningar";
// "profile.greeting" = "Hej, %@!";
// "items.count" = "%d st.";
// Ladda sträng med nyckel
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Titel på inställningsskärm"
)
// Sträng med parameter
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// XLIFF-import (Xcode → Editor → Import Localizations)
// Uppdaterar automatiskt .lproj-filer efter översättarens arbete
Base Internationalization — Apples metod där gränssnittet (Storyboard, XIB) skapas en gång i Base.lproj. När ett språk läggs till exporterar Xcode strängar från Base till en XLIFF-fil. Översättaren översätter XLIFF. Efter import skapar Xcode .lproj med översatta strängar. Fördel: ingen duplicering av XIB för varje språk. Begränsning: för RTL-språk (arabiska, hebreiska) kan en separat XIB med spegelvänd layout krävas.
InfoPlist.strings — fil för lokalisering av appnamn (CFBundleDisplayName), kamera/mikrofonbehörigheter (NSCameraUsageDescription) och andra värden från Info.plist. Skapas i .lproj: ru.lproj/InfoPlist.strings. Format: CFBundleDisplayName = "Min app"; NSCameraUsageDescription = "Appen behöver åtkomst till kameran för att ta foton";. Utan lokalisering av InfoPlist.strings kommer systemdialoger att vara på engelska.
Android-resurser för lokalisering organiseras via kvalificerare (qualifiers) i katalognamn. För ryska språket — res/values-ru/, för tyska — res/values-de/, för brasiliansk portugisiska — res/values-pt-rBR/. Android stöder över 160 lokaliseringar. Systemet väljer automatiskt resurser baserat på enhetens språk (Locale.getDefault()). Om exakt lokalisering saknas — används resurser från values/ (grundlokalisering, vanligtvis en).
// res/values/strings.xml (grund — engelska)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (ryska)
<string name="settings_title">Inställningar</string>
<string name="greeting">Hej, %s!</string>
// res/values-de/strings.xml (tyska)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — enhetlig kod för alla språk
textView.text = getString(R.string.settings_title)
// Sträng med parameter
val greeting = getString(R.string.greeting, userName)
// Lokaliserade bilder
// res/drawable-ru/flag.png — flagga för rysk version
// res/drawable/flag.png — standardflagga
// Lokalisering av layouter (för RTL-språk)
// res/layout-ar/activity_main.xml — arabisk version
Lokalisering inte bara av strängar — Android tillåter lokalisering av bilder (res/drawable-ru/), färger (res/values-ru/colors.xml), storlekar (res/values-ru/dimens.xml), animationer, menyer och till och med hela layouter. För språk med olika ordlängder (tyska är 30–40 % längre än engelska) använd lokaliserade dimens.xml med ökad knappbredd. För regioner med annan färgsymbolik (vitt — sorg i Kina) — lokaliserade colors.xml.
Testning — växla enhetens språk till målspråket via Inställningar → System → Språk. Kontrollera: alla strängar är översatta, datum formateras korrekt, siffror visas med korrekt avskiljare, bilder motsvarar regionen, layouten "går inte sönder" med långa strängar. För automatisering, använd Espresso med LocaleTestRule (Android Testing Library) — det möjliggör körning av tester med olika lokaliseringar utan manuell språkväxling.
Kulturella särdrag — lokalisering begränsas inte till översättning av strängar. Färgsymbolik skiljer sig: rött — tur i Kina, fara i USA, sorg i Sydafrika. Vitt — renhet i Europa, sorg i Kina. Ikoner med gester: tummen upp — positivt i USA, förolämpning i Mellanöstern. Bilder på människor: i arabiska länder är bilder på kvinnor i badkläder oacceptabla. Religiösa symboler: kors, halvmåne, davidsstjärna bör endast användas i lämpligt sammanhang.
Juridiska krav — varje land har sina egna lagar om digitala produkter. GDPR (EU) — obligatoriskt samtycke för cookies och databehandling. CCPA (Kalifornien) — rätt att radera data. Lag om personuppgifter (Ryssland, 152-FZ) — lagring av data på servrar i Ryska federationen. LGPD (Brasilien) — motsvarighet till GDPR. Betalningar: i Kina behövs Alipay/WeChat Pay, i Indien — UPI, i Brasilien — Boleto och PIX. Konfigurera betalningsgateway för regionen innan du påbörjar lokalisering.
| Aspekt | USA | Kina | UAE | Tyskland |
|---|---|---|---|---|
| Betalningssystem | Apple Pay, kort | Alipay, WeChat Pay | Kort, Apple Pay | PayPal, Giropay |
| Märkesfärger | Vilka som helst | Rött — tur | Grönt — islam | Svart/gult |
| Sociala medier | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Datum | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Datalag | CCPA | PIPL | PDPL | GDPR |
Exempel och innehåll — anpassa exemplen till regionen. För tysk lokalisering, använd metriska systemet (kg, km), för amerikansk — imperialsystemet (lb, mi). Telefonnummer, postnummer, adresser — formateras olika. Valutaexempel: ¥1000 i Japan, $9.99 i USA, 999 ₽ i Ryssland. Bilder på mat, kläder, interiörer bör överensstämma med regionala standarder. På IT Sectr rekommenderar vi att anlita lokala konsulter för att kontrollera kulturell anpassning.
Lokaliseringsverktyg — professionella plattformar automatiserar processen: Lokalise, Crowdin, POEditor, Smartling, Phrase. De integreras med arkivet, importerar automatiskt nya strängar, spårar ändringar (Delta updates — endast ändrade strängar översätts), tillhandahåller Translation Memory (TM — lagring av tidigare översatta fraser) och Glossary (ordlista). Genomsnittlig kostnad för professionell översättning: $0.08–0.15 per ord (beroende på språk).
Process — (1) Utvecklaren lägger till i18n-nycklar i koden, pushar till arkivet. (2) CI/CD (GitHub Actions / GitLab CI) skickar automatiskt nya nycklar till lokaliseringsplattformen. (3) Översättarna får meddelande, översätter, sparar. (4) Översatta filer skapar automatiskt PR i arkivet. (5) QA kontrollerar lokaliseringen på enheter. (6) Release. Cykel för en lokalisering: 2–5 arbetsdagar (beroende på volym). För 10 lokaliseringar: 5–15 dagar med parallellt arbete av översättare.
Machine Translation + Human Review — modern standard. Neural nätverksöversättning (DeepL, Google Translate, GPT-4) ger 80–90 % kvalitet för populära språkpar. En mänsklig översättare kontrollerar: terminologi, kontext (ord kan ha olika betydelser på olika skärmar), kulturell anpassning. På IT Sectr använder vi en hybridansats: ML-översättning + granskning av modersmålstalare. För kritiska strängar (juridiska, betalningar) — endast professionell översättare. Besparing: upp till 60 % av kostnaderna med bibehållen kvalitet.
Vanliga frågor
Internationalisering — förberedelse av kod för översättning (extrahera strängar, RTL, formatering). Lokalisering — själva översättningen och kulturell anpassning. i18n görs av utvecklaren en gång, l10n — av översättaren för varje språk. i18n utan l10n — appen är redo för översättning men inte översatt. l10n utan i18n — koden måste skrivas om för varje språk.
I Localizable.strings-filer i .lproj-mappar. För varje språk: en.lproj (engelska), ru.lproj (ryska), de.lproj (tyska). Format: "nyckel" = "värde";. För plural — Localizable.stringsdict. Appinställningar (CFBundleDisplayName) — i InfoPlist.strings. Xcode hanterar .lproj via Base Internationalization.
values-ru — Android-resurskatalogen för ryska språket. Innehåller strings.xml med översättningar. Likadant för andra språk: values-de (tyska), values-fr (franska). Android väljer resurser baserat på systemspråket. Om values-ru inte hittas — används values/ (grundspråk, vanligtvis engelska).
Använd alltid Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Ryssland: 2024-12-31. USA: 2024-12-31. Japan: 2024/12/31. Ställ aldrig in ett fast format — varje land har sina egna standarder. Använd UIDatePicker / DatePicker för datumintagning.
För global täckning räcker 10–15 språk: engelska, spanska, franska, tyska, japanska, kinesiska, koreanska, portugisiska, ryska, italienska, arabiska. För regional — 1–2 språk. Varje ytterligare lokalisering ökar organiska installationer med 5–15 % i motsvarande region. App Store kräver minst engelsk lokalisering.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också