Localization (localizzazione, l10n) — l'adattamento del contenuto dell'app mobile alla lingua, alla regione e alle caratteristiche culturali del pubblico di destinazione. A differenza dell'internazionalizzazione (i18n), dove il codice viene preparato per la traduzione, la localizzazione è il processo effettivo di traduzione delle stringhe, formattazione di date, numeri e valute, selezione di immagini e considerazione delle norme locali. Su iOS, le traduzioni sono memorizzate in Localizable.strings (cartelle .lproj per ogni lingua), su Android — in values-ru, values-de e altre directory di risorse. Scopri di più nella guida alla localizzazione Android.
Punti chiave
Localizzazione (abbreviata come l10n — 10 lettere tra “l” e “n”) è il processo di adattamento di un'applicazione a una lingua e regione specifiche. Se i18n è il fondamento architettonico, allora l10n è il contenuto. i18n rende possibile la traduzione, l10n la esegue. La localizzazione include: traduzione di tutti i testi dell'interfaccia, adattamento dei formati di data e numero, sostituzione di immagini culturalmente sensibili, modifica dei testi legali (informativa sulla privacy, EULA), configurazione dei sistemi di pagamento per la regione e test sui dispositivi target.
ROI aziendale — la localizzazione influisce direttamente sulla conversione. Secondo CSA Research (2023), il 76% degli utenti preferisce acquistare in app nella propria lingua madre e il 40% non acquista mai in una lingua straniera. La localizzazione in giapponese per un'app di vendita al dettaglio aumenta la conversione in media del 150% (Google, 2022). Le app localizzate ricevono da 2 a 3 volte più installazioni organiche negli App Store e Google Play regionali grazie all'ASO regionale (parole chiave nella lingua di destinazione).
i18n vs l10n — due facce dello stesso processo. i18n: estrarre stringhe in risorse, supporto RTL, formattazione numeri. Fatto una volta dagli sviluppatori. l10n: tradurre stringhe, adattare contenuti, test locali. Fatto ripetutamente da traduttori e QA per ogni locale. In IT Sectr, assegniamo il 20–30% del tempo dello sprint per la localizzazione di ogni nuova lingua — questo include traduzione, revisione, test sui dispositivi e correzione di bug.
Localizable.strings — il file principale per memorizzare le traduzioni su iOS. Ogni locale ha la propria cartella .lproj: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Formato: “chiave” = “valore”; (con punto e virgola). Apple utilizza Base Internationalization: Storyboard e XIB vengono creati una volta (Base.lproj) e le stringhe dell'interfaccia vengono esportate in Localizable.strings per ogni lingua. Ciò elimina la necessità di creare copie dello XIB per ogni locale.
// en.lproj/Localizable.strings
// "settings.title" = "Impostazioni";
// "profile.greeting" = "Ciao, %@!";
// "items.count" = "%d articolo(i)";
// ru.lproj/Localizable.strings
// "settings.title" = "Impostazioni";
// "profile.greeting" = "Ciao, %@!";
// "items.count" = "%d articolo(i)";
// Caricamento stringa per chiave
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Titolo schermata impostazioni"
)
// Stringa con parametro
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// Importazione XLIFF (Xcode → Editor → Import Localizations)
// Aggiorna automaticamente i file .lproj dopo il lavoro del traduttore
Base Internationalization — l'approccio di Apple in cui l'interfaccia (Storyboard, XIB) viene creata una volta in Base.lproj. Quando si aggiunge una lingua, Xcode esporta le stringhe da Base in un file XLIFF. Il traduttore traduce il XLIFF. Dopo l'importazione, Xcode crea .lproj con le stringhe tradotte. Vantaggio: non è necessario duplicare lo XIB per ogni lingua. Limitazione: per le lingue RTL (arabo, ebraico), potrebbe essere necessario uno XIB separato con layout speculare.
InfoPlist.strings — file per localizzare il nome dell'app (CFBundleDisplayName), autorizzazioni fotocamera/microfono (NSCameraUsageDescription) e altri valori da Info.plist. Creato in .lproj: ru.lproj/InfoPlist.strings. Formato: CFBundleDisplayName = “La mia app”; NSCameraUsageDescription = “L'app necessita dell'accesso alla fotocamera per scattare foto”;. Senza la localizzazione di InfoPlist.strings, i dialoghi di sistema saranno in inglese.
Risorse Android per la localizzazione sono organizzate tramite qualificatori nei nomi delle directory. Per il russo — res/values-ru/, per il tedesco — res/values-de/, per il portoghese brasiliano — res/values-pt-rBR/. Android supporta oltre 160 lingue. Il sistema seleziona automaticamente le risorse in base alla lingua del dispositivo (Locale.getDefault()). Se una lingua esatta non viene trovata, vengono utilizzate le risorse da values/ (lingua di base, di solito en).
// res/values/strings.xml (base — inglese)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (russo)
<string name="settings_title">Impostazioni</string>
<string name="greeting">Ciao, %s!</string>
// res/values-de/strings.xml (tedesco)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — codice unificato per tutte le lingue
textView.text = getString(R.string.settings_title)
// Stringa con parametro
val greeting = getString(R.string.greeting, userName)
// Immagini localizzate
// res/drawable-ru/flag.png — bandiera per la versione russa
// res/drawable/flag.png — bandiera predefinita
// Localizzazione layout (per lingue RTL)
// res/layout-ar/activity_main.xml — versione araba
Localizzazione oltre le stringhe — Android consente di localizzare immagini (res/drawable-ru/), colori (res/values-ru/colors.xml), dimensioni (res/values-ru/dimens.xml), animazioni, menu e persino layout completi. Per lingue con diversa lunghezza delle parole (il tedesco è del 30–40% più lungo dell'inglese), utilizzare dimens.xml localizzati con larghezze dei pulsanti aumentate. Per regioni con diverso simbolismo cromatico (il bianco è lutto in Cina), utilizzare colors.xml localizzati.
Test — cambiare la lingua del dispositivo nella lingua target tramite Impostazioni → Sistema → Lingua. Verificare: tutte le stringhe sono tradotte, le date sono formattate correttamente, i numeri vengono visualizzati con il separatore appropriato, le immagini corrispondono alla regione, il layout non si rompe con stringhe lunghe. Per l'automazione, utilizzare Espresso con LocaleTestRule (Android Testing Library) — consente di eseguire test con diverse lingue senza cambiare manualmente la lingua.
Caratteristiche culturali — la localizzazione non si limita alla traduzione di stringhe. Il simbolismo dei colori varia: il rosso è fortuna in Cina, pericolo negli USA, lutto in Sudafrica. Il bianco è purezza in Europa, lutto in Cina. Icone di gesti: pollice in su è positivo negli USA, un insulto in Medio Oriente. Immagini di persone: nei paesi arabi, le immagini di donne in costume da bagno sono inaccettabili. Simboli religiosi: croce, mezzaluna, stella di Davide dovrebbero essere usati solo nel contesto appropriato.
Requisiti legali — ogni paese ha le proprie leggi sui prodotti digitali. GDPR (UE) — consenso obbligatorio per cookie e trattamento dei dati. CCPA (California) — diritto alla cancellazione dei dati. Legge sui dati personali (Russia, 152-FZ) — conservazione dei dati su server russi. LGPD (Brasile) — equivalente del GDPR. Pagamenti: in Cina servono Alipay/WeChat Pay, in India — UPI, in Brasile — Boleto e PIX. Configurare il gateway di pagamento per la regione prima di avviare la localizzazione.
| Aspetto | USA | Cina | EAU | Germania |
|---|---|---|---|---|
| Sistema di pagamento | Apple Pay, Carte | Alipay, WeChat Pay | Carte, Apple Pay | PayPal, Giropay |
| Colori del marchio | Qualsiasi | Rosso — fortuna | Verde — Islam | Nero/Giallo |
| Social network | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Data | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Legge sui dati | CCPA | PIPL | PDPL | GDPR |
Esempi e contenuti — adattare gli esempi alla regione. Per la localizzazione tedesca, utilizzare il sistema metrico (kg, km), per quella americana — imperiale (lb, mi). Numeri di telefono, codici postali, indirizzi — tutto viene formattato diversamente. Esempi di valuta: ¥1000 in Giappone, $9.99 negli USA, 999 ₽ in Russia. Le immagini di cibo, abbigliamento e interni devono corrispondere agli standard regionali. In IT Sectr, raccomandiamo di assumere consulenti locali per verificare l'adattamento culturale.
Strumenti di localizzazione — piattaforme professionali automatizzano il processo: Lokalise, Crowdin, POEditor, Smartling, Phrase. Si integrano con il repository, importano automaticamente nuove stringhe, tracciano le modifiche (Delta updates — vengono tradotte solo le stringhe modificate), forniscono Memoria di Traduzione (TM — archiviazione di frasi tradotte precedentemente) e Glossario. Costo medio della traduzione professionale: $0.08–0.15 a parola (a seconda della lingua).
Processo — (1) Lo sviluppatore aggiunge chiavi i18n al codice, pusha nel repository. (2) CI/CD (GitHub Actions / GitLab CI) invia automaticamente le nuove chiavi alla piattaforma di localizzazione. (3) I traduttori ricevono una notifica, traducono e salvano. (4) I file tradotti creano automaticamente una PR nel repository. (5) QA verifica la localizzazione sui dispositivi. (6) Rilascio. Ciclo per una lingua: 2–5 giorni lavorativi (a seconda del volume). Per 10 lingue: 5–15 giorni con lavoro parallelo dei traduttori.
Traduzione automatica + revisione umana — lo standard moderno. La traduzione con rete neurale (DeepL, Google Translate, GPT-4) offre una qualità dell'80–90% per le coppie linguistiche popolari. Un traduttore umano verifica: terminologia, contesto (le parole possono avere significati diversi su schermate diverse), adattamento culturale. In IT Sectr, utilizziamo un approccio ibrido: traduzione ML + revisione da parte di un madrelingua. Per le stringhe critiche (legali, pagamento) — solo traduzione professionale. Risparmio: fino al 60% del costo mantenendo la qualità.
Domande frequenti
Internazionalizzazione — preparazione del codice per la traduzione (estrazione stringhe, RTL, formattazione). Localizzazione — la traduzione effettiva e l'adattamento culturale. i18n viene fatto dallo sviluppatore una volta, l10n — dai traduttori per ogni lingua. i18n senza l10n — l'app è pronta per la traduzione ma non tradotta. l10n senza i18n — è necessario riscrivere il codice per ogni lingua.
Nei file Localizable.strings all'interno delle cartelle .lproj. Per ogni lingua: en.lproj (inglese), ru.lproj (russo), de.lproj (tedesco). Formato: “chiave” = “valore”;. Per i plurali — Localizable.stringsdict. Impostazioni dell'app (CFBundleDisplayName) — in InfoPlist.strings. Xcode gestisce .lproj tramite Base Internationalization.
values-ru — una directory di risorse Android per la lingua russa. Contiene strings.xml con le traduzioni. Analogamente per altre lingue: values-de (tedesco), values-fr (francese). Android seleziona le risorse in base alla lingua di sistema. Se values-ru non viene trovato, utilizza values/ (lingua di base, di solito inglese).
Usare sempre l'API Locale. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Russia: 31.12.2024. USA: 12/31/2024. Giappone: 2024/12/31. Non impostare mai un formato fisso — ogni paese ha i propri standard. Per l'input di date, utilizzare UIDatePicker / DatePicker.
Per una copertura globale, 10–15 lingue sono sufficienti: inglese, spagnolo, francese, tedesco, giapponese, cinese, coreano, portoghese, russo, italiano, arabo. Per regionale — 1–2 lingue. Ogni lingua aggiuntiva aumenta le installazioni organiche del 5–15% nella regione corrispondente. L'App Store richiede almeno la localizzazione in inglese.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche