Localization (localizare, l10n) — adaptarea conținutului aplicației mobile la limba, regiunea și particularitățile culturale ale publicului țintă. Spre deosebire de internaționalizare (i18n), unde codul este pregătit pentru traducere, localizarea este procesul propriu-zis de traducere a șirurilor, formatare a datelor, numerelor și valutelor, selectare a imaginilor și luare în considerare a normelor locale. Pe iOS, traducerile sunt stocate în Localizable.strings (foldere .lproj pentru fiecare limbă), pe Android — în values-ru, values-de și alte directoare de resurse. Mai multe — în ghidul Android de localizare.
Principalele
Localization (prescurtat l10n — 10 litere între „l" și „n") — este procesul de adaptare a aplicației la o limbă și o regiune specifică. Dacă i18n este fundația arhitecturală, atunci l10n este conținutul. i18n face posibilă traducerea, l10n o execută. Localizarea include: traducerea tuturor textelor interfeței, adaptarea formatelor de dată și numere, înlocuirea imaginilor cu conținut sensibil cultural, corectarea textelor juridice (politica de confidențialitate, EULA), configurarea sistemelor de plată pentru regiune și testarea pe dispozitivele țintă.
Rentabilitatea afacerii — localizarea influențează direct conversia. Potrivit CSA Research (2023), 76% dintre utilizatori preferă să cumpere în aplicații în limba lor maternă, iar 40% nu cumpără niciodată într-o limbă străină. Localizarea în japoneză pentru o aplicație de retail crește conversia în medie cu 150% (Google, 2022). Aplicațiile localizate primesc de 2–3 ori mai multe instalări organice în App Store și Google Play regionale datorită ASO regional (cuvinte cheie în limba țintă).
i18n vs l10n — două fețe ale aceluiași proces. i18n: extragerea șirurilor în resurse, suport RTL, formatarea numerelor. Se face o dată de către dezvoltatori. l10n: traducerea șirurilor, adaptarea conținutului, testarea locală. Se face de multiple ori de către traducători și QA pentru fiecare localizare. În IT Sectr alocăm 20–30% din timpul sprintului pentru localizarea fiecărei limbi noi — aceasta include traducerea, revizuirea, testarea pe dispozitive și remedierea erorilor.
Localizable.strings — fișierul principal pentru stocarea traducerilor în iOS. Fiecare localizare are propriul folder .lproj: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Format: „cheie" = „valoare"; (cu punct și virgulă). Apple utilizează Base Internationalization: Storyboard și XIB sunt create o singură dată (Base.lproj), iar șirurile interfeței sunt exportate în Localizable.strings pentru fiecare limbă. Aceasta elimină necesitatea creării de copii XIB pentru fiecare localizare.
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Setări";
// "profile.greeting" = "Bună ziua, %@!";
// "items.count" = "%d buc.";
// Încărcarea șirului după cheie
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Titlul ecranului de setări"
)
// Șir cu parametru
let name = "Ana"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// Import XLIFF (Xcode → Editor → Import Localizations)
// Actualizează automat fișierele .lproj după munca traducătorului
Base Internationalization — abordarea Apple în care interfața (Storyboard, XIB) este creată o dată în Base.lproj. La adăugarea unei limbi, Xcode exportă șirurile din Base într-un fișier XLIFF. Traducătorul traduce XLIFF. După import, Xcode creează .lproj cu șirurile traduse. Avantaj: nu este nevoie să duplicați XIB pentru fiecare limbă. Limitare: pentru limbile RTL (arabă, ebraică) poate fi necesar un XIB separat cu aspect oglindit.
InfoPlist.strings — fișier pentru localizarea numelui aplicației (CFBundleDisplayName), permisiunilor camerei/microfonului (NSCameraUsageDescription) și altor valori din Info.plist. Creat în .lproj: ru.lproj/InfoPlist.strings. Format: CFBundleDisplayName = „Aplicația mea"; NSCameraUsageDescription = „Aplicația are nevoie de acces la cameră pentru a face fotografii";. Fără localizarea InfoPlist.strings, dialogurile de sistem vor fi în engleză.
Resursele Android pentru localizare sunt organizate prin calificatori (qualifiers) în numele directoarelor. Pentru limba rusă — res/values-ru/, pentru germană — res/values-de/, pentru portugheza braziliană — res/values-pt-rBR/. Android suportă peste 160 de localizări. Sistemul selectează automat resursele pe baza limbii dispozitivului (Locale.getDefault()). Dacă localizarea exactă nu există — se utilizează resursele din values/ (localizarea de bază, de obicei en).
// res/values/strings.xml (de bază — engleză)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (rusă)
<string name="settings_title">Setări</string>
<string name="greeting">Bună, %s!</string>
// res/values-de/strings.xml (germană)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — cod unic pentru toate limbile
textView.text = getString(R.string.settings_title)
// Șir cu parametru
val greeting = getString(R.string.greeting, userName)
// Imagini localizate
// res/drawable-ru/flag.png — steag pentru versiunea rusă
// res/drawable/flag.png — steag implicit
// Localizarea layout-urilor (pentru limbi RTL)
// res/layout-ar/activity_main.xml — versiunea arabă
Localizarea nu doar a șirurilor — Android permite localizarea imaginilor (res/drawable-ru/), culorilor (res/values-ru/colors.xml), dimensiunilor (res/values-ru/dimens.xml), animațiilor, meniurilor și chiar a layout-urilor întregi. Pentru limbi cu lungimi diferite ale cuvintelor (germana este cu 30–40% mai lungă decât engleza) utilizați dimens.xml localizate cu lățimea butoanelor mărită. Pentru regiuni cu altă simbolistică a culorilor (alb — doliu în China) — colors.xml localizate.
Testarea — comutați limba dispozitivului la cea țintă prin Setări → Sistem → Limbă. Verificați: toate șirurile sunt traduse, datele sunt formatate corect, numerele sunt afișate cu separatorul corect, imaginile corespund regiunii, layout-ul nu se „strică" la șiruri lungi. Pentru automatizare, utilizați Espresso cu LocaleTestRule (Android Testing Library) — permite rularea testelor cu diferite localizări fără comutarea manuală a limbii.
Particularități culturale — localizarea nu se limitează la traducerea șirurilor. Simbolistica culorilor diferă: roșu — noroc în China, pericol în SUA, doliu în Africa de Sud. Alb — puritate în Europa, doliu în China. Pictograme cu gesturi: degetul mare în sus — pozitiv în SUA, insultă în Orientul Mijlociu. Imagini cu oameni: în țările arabe sunt inacceptabile imaginile femeilor în costume de baie. Simboluri religioase: crucea, semiluna, steaua lui David trebuie utilizate doar în contextul corespunzător.
Cerințe legale — fiecare țară are propriile legi privind produsele digitale. GDPR (UE) — consimțământ obligatoriu pentru cookies și prelucrarea datelor. CCPA (California) — dreptul de a șterge datele. Legea privind datele personale (Rusia, 152-FZ) — stocarea datelor pe serverele Federației Ruse. LGPD (Brazilia) — analog GDPR. Plăți: în China sunt necesare Alipay/WeChat Pay, în India — UPI, în Brazilia — Boleto și PIX. Configurați gateway-ul de plată pentru regiune înainte de lansarea localizării.
| Aspect | SUA | China | EAU | Germania |
|---|---|---|---|---|
| Sistem de plată | Apple Pay, carduri | Alipay, WeChat Pay | Carduri, Apple Pay | PayPal, Giropay |
| Culori de brand | Oricare | Roșu — noroc | Verde — islam | Negru/galben |
| Rețele sociale | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Data | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Legea datelor | CCPA | PIPL | PDPL | GDPR |
Exemple și conținut — adaptați exemplele la regiune. Pentru localizarea germană utilizați sistemul metric (kg, km), pentru cea americană — sistemul imperial (lb, mi). Numerele de telefon, codurile poștale, adresele — se formatează diferit. Exemple monetare: ¥1000 în Japonia, $9.99 în SUA, 999 ₽ în Rusia. Imaginile cu mâncare, îmbrăcăminte, interioare trebuie să corespundă standardelor regionale. În IT Sectr recomandăm angajarea de consultanți locali pentru verificarea adaptării culturale.
Instrumente de localizare — platformele profesionale automatizează procesul: Lokalise, Crowdin, POEditor, Smartling, Phrase. Acestea se integrează cu depozitul, importă automat șiruri noi, urmăresc modificările (Delta updates — se traduc doar șirurile modificate), oferă Translation Memory (TM — păstrarea frazelor traduse anterior) și Glossary (glosar de termeni). Costul mediu al traducerii profesionale: $0.08–0.15 per cuvânt (în funcție de limbă).
Procesul — (1) Dezvoltatorul adaugă chei i18n în cod, trimite în depozit. (2) CI/CD (GitHub Actions / GitLab CI) trimite automat cheile noi către platforma de localizare. (3) Traducătorii primesc notificare, traduc, salvează. (4) Fișierele traduse creează automat PR în depozit. (5) QA verifică localizarea pe dispozitive. (6) Lansare. Ciclul pentru o localizare: 2–5 zile lucrătoare (în funcție de volum). Pentru 10 localizări: 5–15 zile cu munca paralelă a traducătorilor.
Machine Translation + Human Review — standardul modern. Traducerea prin rețele neuronale (DeepL, Google Translate, GPT-4) oferă o calitate de 80–90% pentru perechile de limbi populare. Traducătorul uman verifică: terminologia, contextul (cuvintele pot avea semnificații diferite pe ecrane diferite), adaptarea culturală. În IT Sectr utilizăm o abordare hibridă: traducere ML + revizuire de către un vorbitor nativ. Pentru șirurile critice (juridice, plăți) — doar traducător profesionist. Economie: până la 60% din costuri cu păstrarea calității.
Întrebări frecvente
Internaționalizarea — pregătirea codului pentru traducere (extragerea șirurilor, RTL, formatare). Localizarea — traducerea propriu-zisă și adaptarea culturală. i18n este făcută de dezvoltator o dată, l10n — de traducător pentru fiecare limbă. i18n fără l10n — aplicația este gata de tradus, dar nu este tradusă. l10n fără i18n — trebuie rescris codul pentru fiecare limbă.
În fișierele Localizable.strings din interiorul folderelor .lproj. Pentru fiecare limbă: en.lproj (engleză), ru.lproj (rusă), de.lproj (germană). Format: „cheie" = „valoare";. Pentru plural — Localizable.stringsdict. Setările aplicației (CFBundleDisplayName) — în InfoPlist.strings. Xcode gestionează .lproj prin Base Internationalization.
values-ru — directorul de resurse Android pentru limba rusă. Conține strings.xml cu traduceri. La fel pentru alte limbi: values-de (germană), values-fr (franceză). Android selectează resursele pe baza limbii sistemului. Dacă values-ru nu este găsit — utilizează values/ (limba de bază, de obicei engleza).
Utilizați întotdeauna Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Rusia: 31.12.2024. SUA: 12/31/2024. Japonia: 2024/12/31. Nu setați niciodată un format fix — fiecare țară are propriile standarde. Pentru introducerea datelor, utilizați UIDatePicker / DatePicker.
Pentru acoperire globală sunt suficiente 10–15 limbi: engleză, spaniolă, franceză, germană, japoneză, chineză, coreeană, portugheză, rusă, italiană, arabă. Pentru regională — 1–2 limbi. Fiecare localizare suplimentară crește instalările organice cu 5–15% în regiunea respectivă. App Store necesită cel puțin localizarea în engleză.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și