Multilingua app: localizzazione

Multilingua app: localizzazione

Localizzare un'app significa molto più che tradurre stringhe: serve gestire plurali, formati di data, RTL, immagini e UX culturali. Una buona localizzazione raddoppia il mercato accessibile, una pessima rovina la fiducia degli utenti.

i18n vs l10n

L'internationalization (i18n) e la preparazione tecnica del codice: estrazione delle stringhe, formattazione di date e numeri secondo locale, supporto RTL. La localization (l10n) e l'adattamento culturale: traduzione, immagini, esempi, dialetti.

File di traduzione

iOS usa file .strings (o .stringsdict per plurali) e da Xcode 13+ il sistema Localizable.xcstrings centralizzato. Android usa strings.xml per locale (values-it/strings.xml). Flutter usa .arb. React Native usa libreria come i18next con file JSON.

Plurali e contesto

Le regole di pluralizzazione variano per lingua (1 messaggio, 2 messaggi, ma in russo cambia ulteriormente). Usa stringsdict iOS, plurals Android. Includi sempre note al traduttore per disambiguare omografi e fornire contesto della UI.

Pseudo-localization

Tecnica utile per individuare stringhe hardcoded: sostituisci ogni stringa con varianti accentate (es. "Login" diventa "Lôgìñ"). Se durante il test vedi "Login" puro, e una stringa non localizzata. Xcode supporta pseudo-localization nativamente come scheme. Su Android usa Pseudolocale tool nel build.

Localized assets

Non solo testi: anche immagini, video, suoni possono essere localizzati. Cartelle .lproj iOS, res/drawable-it Android. Utile per immagini con testo embedded, esempi culturalmente specifici, valute o numeri di telefono in screenshot.

Right-to-Left (RTL)

Arabo, ebraico, persiano richiedono mirroring completo dell'interfaccia. iOS gestisce automaticamente con UISemanticContentAttribute. Android con android:supportsRtl="true" e attributi start/end al posto di left/right. Test su simulatore con language switch. Cura particolare a icone direzionali (frecce indietro), che vanno mirror.

Glossari e translation memory

Mantieni un glossario con termini specifici del prodotto e relative traduzioni. Translation Memory (TM) accumula traduzioni passate per riutilizzo. Servizi come Lokalise e Crowdin gestiscono entrambi nativamente. Riducono costi e migliorano coerenza tra release.

Numeri, date e valute

Mai concatenare numeri o date in stringhe manualmente. Usa NumberFormatter/DateFormatter (iOS), NumberFormat/SimpleDateFormat (Android) con locale corretto. Currency formatting include simbolo, separatori, decimali per ogni locale. Esempio: 1.234,56 EUR in italiano, $1,234.56 in inglese US.

Hindi, cinese e altri script

Script non latini richiedono font con copertura adeguata. Il sistema fornisce font default ma alcuni glifi possono apparire come quadrati. Testa con stringhe reali: Hindi (Devanagari), Mandarin (CJK), arabo. Layout deve gestire altezze righe diverse (Hindi ha caratteri con accenti alti, CJK ha caratteri quadrati più larghi).

Procedura passo-passo

  1. Estrai tutte le stringhe hardcoded dal codice.
  2. Imposta una struttura di chiavi gerarchica (login.title, login.button.submit).
  3. Implementa plurali con stringsdict/plurals.
  4. Aggiungi commenti al traduttore (//Translators: contesto).
  5. Configura supporto RTL (mirroring di icone direzionali).
  6. Usa servizi come Lokalise, Crowdin o Phrase per il workflow traduzione.
  7. Testa ogni lingua sul dispositivo, non solo nei file.

Continuous localization

Workflow moderno: developer push stringhe a Lokalise/Crowdin via API, traduttori lavorano in continuo, build CI pull latest traduzioni automaticamente. Niente più "freeze stringhe due settimane prima del rilascio". Permette release più frequenti, traduzioni più aggiornate. Investment in CI/CD localization paga rapidamente per app multi-mercato.

Quality assurance localizzazione

Native speaker review obbligatoria per ogni lingua prima del release. AI translation (DeepL, Google) come prima draft, ma sempre human review per nuance, cultura, brand voice. UI test in ogni lingua: testo che eccede in tedesco/russo (parole lunghe), testo troppo corto in cinese che lascia spazi vuoti. Layout adattivo testa con stringhe estreme.

Plurali e gender

Sistema di plurali varia drammaticamente: italiano (singular/plural), polacco (5 forme), arabo (6 forme). Usa stringsdict iOS e plurals Android per gestione corretta. Per gender, alcune lingue richiedono differenziazione (italiano: amico/amica). Strutture come ICU MessageFormat unificano sintassi cross-platform.

Errori comuni e come risolverli

  • Stringhe hardcoded: ogni testo deve essere estratto.
  • Plurali codificati a mano: usa il sistema nativo.
  • Date e numeri formattati a mano: usa DateFormatter/Intl.
  • Mancanza di RTL: layout si rompe per arabo/ebraico.
  • Glossari assenti: traduzioni incoerenti tra release.

Domande frequenti

D: Posso aggiungere lingue dopo il rilascio?
R: Si, ma pianifica fin dall'inizio i18n; aggiungere lingue su codice non internazionalizzato e costoso.

D: Devo localizzare anche meta App Store?
R: Si, per ogni lingua supportata. Aumenta i download organici.

D: Posso usare AI per tradurre?
R: Si come prima bozza, ma rivedi sempre con traduttore umano per nuance e cultura.

D: Quanto costa localizzare in 10 lingue?
R: 0.08-0.15 EUR/word per traduzione professionale. App standard con 5000 parole: 400-750 EUR per lingua.

Mercati priority

Pianifica localizzazione strategicamente: inizia con mercati di alto valore (inglese, tedesco, francese), poi expand. Misura conversion per lingua prima di investire in nuove. Localizzazione non e linear: alcuni mercati richiedono cultural adaptation oltre alla traduzione (esempi, immagini, casi d'uso).

Tool moderni come Lokalise, Crowdin, Phrase, OneSky offrono workflow professionale di traduzione. Free tier per piccoli progetti, piani enterprise per scale grandi. Integrano con CI/CD, gestiscono memoria di traduzione, supportano translator collaboration. Investment in tooling paga in qualità traduzioni e velocità di delivery.

Hai bisogno di aiuto?

Se vuoi sviluppare la tua app con G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?