Localization (lokalizace, l10n) — přizpůsobení obsahu mobilní aplikace jazyku, regionu a kulturním zvláštnostem cílového publika. Na rozdíl od internacionalizace (i18n), kde je kód připravován k překladu, lokalizace je samotný proces překladu řetězců, formátování dat, čísel a měn, výběru obrázků a zohlednění místních norem. V iOS jsou překlady uloženy v Localizable.strings (složky .lproj pro každý jazyk), v Androidu — v values-ru, values-de a dalších adresářích zdrojů. Více — v průvodci Androidu pro lokalizaci.
Hlavní body
Localization (zkráceně l10n — 10 písmen mezi „l" a „n") — je proces přizpůsobení aplikace konkrétnímu jazyku a regionu. Pokud je i18n architektonickým základem, pak l10n je výplní. i18n umožňuje překlad, l10n jej provádí. Lokalizace zahrnuje: překlad všech textů rozhraní, přizpůsobení formátů dat a čísel, výměnu obrázků s kulturně citlivým obsahem, korekci právních textů (zásady ochrany osobních údajů, EULA), konfiguraci platebních systémů pro region a testování na cílových zařízeních.
Obchodní návratnost — lokalizace přímo ovlivňuje konverzi. Podle údajů CSA Research (2023) 76 % uživatelů preferuje nákup v aplikacích v rodném jazyce a 40 % nikdy nenakupuje v cizím jazyce. Lokalizace do japonštiny pro maloobchodní aplikaci zvyšuje konverzi v průměru o 150 % (Google, 2022). Lokalizované aplikace získávají 2–3krát více organických instalací v regionálních App Store a Google Play díky regionálnímu ASO (klíčová slova v cílovém jazyce).
i18n vs l10n — dvě strany stejného procesu. i18n: vyčlenění řetězců do zdrojů, podpora RTL, formátování čísel. Provádí se jednou vývojáři. l10n: překlad řetězců, přizpůsobení obsahu, místní testování. Provádí se opakovaně překladateli a QA pro každou lokalizaci. V IT Sectr vyčleňujeme 20–30 % času sprintu na lokalizaci každého nového jazyka — to zahrnuje překlad, revizi, testování na zařízeních a opravy chyb.
Localizable.strings — hlavní soubor pro ukládání překladů v iOS. Každá lokalizace má svou vlastní složku .lproj: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Formát: „klíč" = „hodnota"; (s středníkem). Apple používá Base Internationalization: Storyboard a XIB se vytvářejí jednou (Base.lproj) a řetězce rozhraní se exportují do Localizable.strings pro každý jazyk. To eliminuje potřebu vytvářet kopie XIB pro každou lokalizaci.
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Nastavení";
// "profile.greeting" = "Dobrý den, %@!";
// "items.count" = "%d ks.";
// Načtení řetězce podle klíče
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Název obrazovky nastavení"
)
// Řetězec s parametrem
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// XLIFF import (Xcode → Editor → Import Localizations)
// Automaticky aktualizuje .lproj soubory po práci překladatele
Base Internationalization — přístup Apple, při kterém se rozhraní (Storyboard, XIB) vytváří jednou v Base.lproj. Při přidávání jazyka Xcode exportuje řetězce z Base do souboru XLIFF. Překladatel přeloží XLIFF. Po importu Xcode vytvoří .lproj s přeloženými řetězci. Výhoda: není třeba duplikovat XIB pro každý jazyk. Omezení: pro jazyky RTL (arabština, hebrejština) může být vyžadován samostatný XIB se zrcadlovým rozložením.
InfoPlist.strings — soubor pro lokalizaci názvu aplikace (CFBundleDisplayName), oprávnění kamery/mikrofonu (NSCameraUsageDescription) a dalších hodnot z Info.plist. Vytváří se v .lproj: ru.lproj/InfoPlist.strings. Formát: CFBundleDisplayName = „Moje aplikace"; NSCameraUsageDescription = „Aplikace potřebuje přístup k kameře pro pořizování fotografií";. Bez lokalizace InfoPlist.strings budou systémové dialogy v angličtině.
Android zdroje pro lokalizaci jsou organizovány pomocí kvalifikátorů (qualifiers) v názvech adresářů. Pro ruský jazyk — res/values-ru/, pro němčinu — res/values-de/, pro brazilskou portugalštinu — res/values-pt-rBR/. Android podporuje více než 160 lokalizací. Systém automaticky vybírá zdroje na základě jazyka zařízení (Locale.getDefault()). Pokud přesná lokalizace neexistuje — použijí se zdroje z values/ (základní lokalizace, obvykle en).
// res/values/strings.xml (základní — angličtina)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (ruština)
<string name="settings_title">Nastavení</string>
<string name="greeting">Ahoj, %s!</string>
// res/values-de/strings.xml (němčina)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — jednotný kód pro všechny jazyky
textView.text = getString(R.string.settings_title)
// Řetězec s parametrem
val greeting = getString(R.string.greeting, userName)
// Lokalizované obrázky
// res/drawable-ru/flag.png — vlajka pro ruskou verzi
// res/drawable/flag.png — výchozí vlajka
// Lokalizace rozložení (pro jazyky RTL)
// res/layout-ar/activity_main.xml — arabská verze
Lokalizace nejen řetězců — Android umožňuje lokalizovat obrázky (res/drawable-ru/), barvy (res/values-ru/colors.xml), rozměry (res/values-ru/dimens.xml), animace, nabídky a dokonce celá rozložení. Pro jazyky s různou délkou slov (němčina je o 30–40 % delší než angličtina) používejte lokalizované dimens.xml se zvýšenou šířkou tlačítek. Pro regiony s jinou symbolikou barev (bílá — smutek v Číně) — lokalizované colors.xml.
Testování — přepněte jazyk zařízení na cílový přes Nastavení → Systém → Jazyk. Zkontrolujte: všechny řetězce jsou přeloženy, data jsou správně formátována, čísla se zobrazují se správným oddělovačem, obrázky odpovídají regionu, rozložení se „neláme" při dlouhých řetězcích. Pro automatizaci použijte Espresso s LocaleTestRule (Android Testing Library) — umožňuje spouštět testy s různými lokalizacemi bez ručního přepínání jazyka.
Kulturní zvláštnosti — lokalizace se neomezuje na překlad řetězců. Symbolika barev se liší: červená — štěstí v Číně, nebezpečí v USA, smutek v Jižní Africe. Bílá — čistota v Evropě, smutek v Číně. Ikony s gesty: palec nahoru — pozitivní v USA, urážka na Blízkém východě. Obrázky lidí: v arabských zemích jsou nepřijatelné obrázky žen v plavkách. Náboženské symboly: kříž, půlměsíc, Davidova hvězda by měly být používány pouze v odpovídajícím kontextu.
Právní požadavky — každá země má své vlastní zákony o digitálních produktech. GDPR (EU) — povinný souhlas s cookies a zpracováním údajů. CCPA (Kalifornie) — právo na vymazání údajů. Zákon o osobních údajích (Rusko, 152-FZ) — ukládání údajů na serverech RF. LGPD (Brazílie) — obdoba GDPR. Platby: v Číně jsou potřeba Alipay/WeChat Pay, v Indii — UPI, v Brazílii — Boleto a PIX. Nakonfigurujte platební bránu pro region před zahájením lokalizace.
| Aspekt | USA | Čína | SAE | Německo |
|---|---|---|---|---|
| Platební systém | Apple Pay, karty | Alipay, WeChat Pay | Karty, Apple Pay | PayPal, Giropay |
| Barvy značky | Jakékoliv | Červená — štěstí | Zelená — islám | Černá/žlutá |
| Sociální sítě | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Datum | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Zákon o datech | CCPA | PIPL | PDPL | GDPR |
Příklady a obsah — přizpůsobte příklady regionu. Pro německou lokalizaci použijte metrický systém (kg, km), pro americkou — imperiální systém (lb, mi). Telefonní čísla, poštovní směrovací čísla, adresy — formátují se odlišně. Příklady měn: ¥1000 v Japonsku, $9.99 v USA, 999 ₽ v Rusku. Obrázky jídla, oblečení, interiérů by měly odpovídat regionálním standardům. V IT Sectr doporučujeme najímat místní konzultanty pro kontrolu kulturního přizpůsobení.
Nástroje lokalizace — profesionální platformy automatizují proces: Lokalise, Crowdin, POEditor, Smartling, Phrase. Integrují se s repozitářem, automaticky importují nové řetězce, sledují změny (Delta updates — překládají se pouze změněné řetězce), poskytují Translation Memory (TM — ukládání dříve přeložených frází) a Glossary (glosář pojmů). Průměrná cena profesionálního překladu: $0.08–0.15 za slovo (v závislosti na jazyce).
Proces — (1) Vývojář přidá i18n klíče do kódu, pushne do repozitáře. (2) CI/CD (GitHub Actions / GitLab CI) automaticky odešle nové klíče na platformu lokalizace. (3) Překladatelé obdrží oznámení, přeloží, uloží. (4) Přeložené soubory automaticky vytvoří PR v repozitáři. (5) QA zkontroluje lokalizaci na zařízeních. (6) Vydání. Cyklus pro jednu lokalizaci: 2–5 pracovních dnů (v závislosti na objemu). Pro 10 lokalizací: 5–15 dnů při paralelní práci překladatelů.
Machine Translation + Human Review — moderní standard. Překlad neuronovou sítí (DeepL, Google Translate, GPT-4) poskytuje kvalitu 80–90 % pro oblíbené jazykové páry. Lidský překladatel kontroluje: terminologii, kontext (slova mohou mít různé významy na různých obrazovkách), kulturní přizpůsobení. V IT Sectr používáme hybridní přístup: ML překlad + revize rodilým mluvčím. Pro kritické řetězce (právní, platební) — pouze profesionální překladatel. Úspora: až 60 % nákladů při zachování kvality.
Často kladené otázky
Internacionalizace — příprava kódu k překladu (vyčlenění řetězců, RTL, formátování). Lokalizace — samotný překlad a kulturní přizpůsobení. i18n provádí vývojář jednou, l10n — překladatel pro každý jazyk. i18n bez l10n — aplikace je připravena k překladu, ale není přeložena. l10n bez i18n — je třeba přepisovat kód pro každý jazyk.
V souborech Localizable.strings ve složkách .lproj. Pro každý jazyk: en.lproj (angličtina), ru.lproj (ruština), de.lproj (němčina). Formát: „klíč" = „hodnota";. Pro množné číslo — Localizable.stringsdict. Nastavení aplikace (CFBundleDisplayName) — v InfoPlist.strings. Xcode spravuje .lproj prostřednictvím Base Internationalization.
values-ru — adresář zdrojů Androidu pro ruský jazyk. Obsahuje strings.xml s překlady. Podobně pro další jazyky: values-de (němčina), values-fr (francouzština). Android vybírá zdroje na základě systémového jazyka. Pokud values-ru není nalezen — použije values/ (základní jazyk, obvykle angličtina).
Vždy používejte Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Rusko: 31.12.2024. USA: 12/31/2024. Japonsko: 2024/12/31. Nikdy nenastavujte pevný formát — každá země má své vlastní standardy. Pro zadávání dat používejte UIDatePicker / DatePicker.
Pro globální pokrytí stačí 10–15 jazyků: angličtina, španělština, francouzština, němčina, japonština, čínština, korejština, portugalština, ruština, italština, arabština. Pro regionální — 1–2 jazyky. Každá další lokalizace zvyšuje organické instalace o 5–15 % v příslušném regionu. App Store vyžaduje alespoň anglickou lokalizaci.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také