Your app is ready for its next market. The product team has approved the translated copy, marketing has prepared the launch, and customer support has updated its scripts. Then testing reveals that a checkout button is hardcoded in English, dates appear in the wrong order, currencies use unfamiliar separators, and a longer translation pushes the primary action off-screen. The launch isn’t blocked by translation quality alone. It’s blocked by decisions made in the codebase months earlier.
Quella situazione è il punto di partenza pratico per internazionalizzazione dell'app. Internationalization, usually shortened to i18n, prepares the product so languages, regions, writing systems, and cultural conventions can be added without rewriting business logic. Localization then adapts the prepared product for a particular market.
The commercial case is visible in the app economy. A 2026 snapshot of 730,024 iOS App Store apps found that the median app supports exactly una linguauna lingua 68.6% imbarcare in un solo linguaggio. Le app che guadagnano una stima di $10,000 o più al mese supportano una media di cinque lingue, e 50.7% di quella fascia di ricavi più alta imbarca in cinque o più lingue. Quei dati non dimostrano che la localizzazione da sola crea ricavi, ma mostrano che il supporto multilingue è molto più comune tra le app con ambizioni commerciali più ampie.
Questa guida passa dal modello mentale ai modelli di ingegneria, alle differenze di piattaforma, all'automazione del flusso di lavoro, ai test e alla migrazione. Si applica a prodotti mobili nativi, applicazioni web, Capacitor app ibride e software desktop Electron. La privacy e la conformità regionale appartengono anche al piano di lancio, quindi i team che lavorano attraverso i requisiti regolatori possono associare questa guida a un elenco di controllo di conformità GDPR.
Table of Contents
- Introduzione all'Internazionalizzazione delle App e Perché è Importante Ora
- Cosa Significa Veramente la Internazionalizzazione delle App
- Modelli fondamentali per ogni app internazionalizzata
- Considerazioni specifiche per piattaforma per Mobile Web Capacitor e Electron
- Biblioteche di strumenti e flussi di traduzione che scalano
- Test, QA, prestazioni e sicurezza per applicazioni globali
- Mettilo tutto insieme con Code Esempi e Checklist di migrazione
Introduzione all'internazionalizzazione delle applicazioni e perché è importante ora
Un team spesso scopre l'internazionalizzazione solo pochi giorni prima di un lancio di mercato. Il prodotto chiede un selettore di lingua, il design adatta diverse schermate e l'ingegneria trova il testo visibile distribuito tra componenti, regole di validazione, notifiche, etichette di analisi e file di configurazione nativi. Le date e i numeri creano lo stesso problema. Una data memorizzata come testo di visualizzazione non può essere riformattata in modo sicuro, mentre un prezzo assemblato da stringhe separate potrebbe avere un ordine diverso in un altro locale.
Quella scoperta tardiva crea tre scelte costose: rinviare il lancio, accettare difetti visibili o modificare code che non era mai stato progettato per variare per locale. Trattare l'i18n come una capacità architettonica cambia il workflow. L'espansione di mercato diventa un'operazione controllata che coinvolge risorse, presentazione, test e configurazione di rilascio al posto di una riscrittura.
Regola pratica: Costruisci l'applicazione in modo che un nuovo locale cambi le risorse e la presentazione, non le regole di business.
La traduzione è solo una parte della prontezza globale. A una traduzione corretta, il layout può comunque essere rotto se non può accogliere la sua lunghezza. Una valuta correttamente tradotta può comunque ingannare gli utenti quando il valore sottostante è memorizzato come testo formattato. Un selettore di lingua può produrre anche comportamenti inconsistenti quando il layer web e il layer nativo rilevano differenti località.
La scoperta tardiva dell'i18n aumenta il costo operativo. Gli ingegneri devono tracciare le stringhe attraverso componenti vecchi, i traduttori ricevono un contesto incompleto, i revisori testano cambiamenti affrettati e le squadre di rilascio coordinano le correzioni attraverso più pacchetti di piattaforma. Per Capacitor e le squadre di Electron, un flusso di aggiornamento in tempo reale può ridurre questo ciclo consegnando risorse di localizzazione approvate e correzioni di presentazione senza dover attendere un nuovo esame della store, dove la piattaforma e la politica di rilascio lo consentono. L'importante spostamento è trattare le modifiche di localizzazione come artefatti di rilascio gestiti, non come un'ultima consegna di traduzione.
La strada in avanti è lineare:
- Preparare la base: Separate risorse visive dagli elementi logici e modelli dei valori sensibili alla località.
- Trattare il comportamento di lingua: Sostenere le regole di pluralità, l'espansione del testo, la direzione di scrittura, la formattazione e i cambiamenti di lingua accessibili.
- Adattare ogni piattaforma: Tenere conto di iOS, Android, browser, Capacitor WebView e packaging di Electron.
- Tenere i rilasci in movimento: Connettere estrazione, traduzione, revisione, testing e distribuzione in modo che le nuove stringhe non attendano una fase progettuale tardiva.
- Verificare l'interfaccia: Testo lungo, layout a destra, combinazioni di locale, comportamento di fallback, prestazioni e sicurezza degli aggiornamenti.
App internationalization is a release-engineering discipline. It keeps later product changes localizable, lets teams correct language issues through the appropriate delivery path, and includes regional privacy work such as a Che cosa significa realmente l'internazionalizzazione dell'applicazione?.
Inizia con un analogia di casa.
Inizia con un analogia di casa. La internacionalizzazione è l'installazione di cavi e tubi flessibili prima che qualcuno decori le stanze. Localizzazione è decorare e arredare quella casa per una regione specifica. La traduzione è cambiare la lingua sui marchi, le istruzioni e i cartelli.
The order matters. If the wiring is embedded inside walls that were designed for one appliance, adding a new appliance becomes expensive. In software, hardcoded strings, fixed-width controls, concatenated sentences, and locale-specific business logic create the same kind of constraint.
L'internazionalizzazione, o i18n,
Internazionalizzazione, o i18n, is the design and development work that allows an app to support different languages and regions without changing its core behavior. It includes resource loading, locale selection, formatting, text direction, font support, and flexible layouts.
Localizzazione, o l10n, adatta l'applicazione preparata a una specifica località. Ciò può includere copia di interfaccia tradotta, formati specifici della regione, terminologia locale, immagini adatte alla cultura e impostazioni specifiche del mercato.
Traduzione converte il contenuto da una lingua all'altra. Si occupa principalmente del significato e della formulazione, anche se un buon flusso di lavoro di traduzione richiede anche contesto, screenshot, limiti di caratteri e informazioni su dove appare ogni stringa.

Un confine di implementazione utile è il risorsa locale. Invece di collocare Payment failed direttamente in un componente, il componente richiede una chiave semantica come payment.errorLo stesso separa si applica oltre le stringhe. Memorizza i valori monetari come valori, non come stringhe con simboli attaccati. Memorizza le date come date, non come date già formattate. Passa informazioni sulla località ai formattatori invece di inserire separatori o nomi di mese nei dati di business __CAPGO_KEEP_0__.
The same separation applies beyond strings. Store monetary values as values, not as strings with symbols attached. Store timestamps as timestamps, not as already-formatted dates. Pass locale information to formatters instead of embedding separators or month names in business code.
Perché la fondazione riduce il rischio
Quando le risorse e le regole di formattazione sono fuori dal codice di business, aggiungere una lingua non richiede modifiche alle calcolazioni di acquisto, ai flussi di autenticazione o ai modelli di dati. Gli ingegneri possono aggiornare un bundle di risorse, i traduttori possono lavorare in un sistema di gestione delle traduzioni e i QA possono testare l'interfaccia risultante senza destabilizzare il comportamento non correlato.
Quella separazione migliora anche la proprietà. I designer possono definire componenti sicuri per l'espansione, i traduttori possono revisionare il contesto, i responsabili dei prodotti possono decidere quali mercati supportare e gli ingegneri possono applicare le regole per le chiavi mancanti e di fallback. Ogni disciplina ha un posto chiaro nel workflow.
Un team che trascura l'i18n spesso tratta ogni nuovo locale come un'eccezione speciale. Un team che progetta per essa tratta la locale come input. Quel singolo spostamento rende il supporto globale più facile da ragionare.
Modelli Fondamentali per ogni App Internazionalizzata
La buona i18n diventa concreta attraverso un piccolo insieme di modelli ripetibili. Applicali ai livelli di componente, dati e rilascio piuttosto che aggiungere un commutatore di lingua sopra un codice di base locale.

Estrai le stringhe in risorse
Questa trasformazione è il primo passo pratico:
Prima:
showToast("Your profile was saved");
Dopo:
showToast(t("profile.saved"));
File di risorse:
{
"profile": {
"saved": "Your profile was saved"
}
}
Usa chiavi che descrivano il significato, non la frase inglese. profile.saved rimane utile se cambia la scrittura inglese, mentre una chiave basata sulla frase originale può diventare fuorviante. Includere il contesto di traduzione dove la stessa parola potrebbe significare cose diverse, come se 'Presente' è un'azione del pulsante o uno stato.
Un'app internazionalizzata esternalizza ogni stringa faccia all'utente, insieme alle date, ai numeri, alle monete e ai simboli, nei risorse o formattatori di locale. Ciò blueprint ingegneristico per la mobilità i18n spiega perché quella separazione consente ai team di aggiungere lingue senza modificare la logica commerciale.
Usare formati di messaggio per la grammatica
Questo è pericoloso:
`${count} items`
Un modello hardcoded assume che ogni locale utilizzi lo stesso comportamento di pluralità e ordine delle parole. CLDR fornisce il layer di dati di localizzazione comune per date, orari, fusi orari, numeri, monete e categorie di pluralità. Come spiega la guida alle migliori pratiche di localizzazione sul CLDR, le regole di pluralità differiscono per locale, quindi le app necessitano di una selezione locale-aware al posto di un modello fissato.
Un messaggio di stile ICU potrebbe avere questo aspetto:
{count, plural,
=0 {No items}
one {# item}
other {# items}
}
Il formattatore sceglie la branca corretta. Tieni il messaggio completo insieme affinché i traduttori possano riordinare il numero e il sostantivo quando la grammatica lo richiede.
Formatta i valori con API locale-aware
Non assembla una data manualmente:
`${day}/${month}/${year}`
Usa un formattatore:
new Intl.DateTimeFormat(locale, {
dateStyle: "medium"
}).format(date)
Lo stesso principio si applica ai numeri e alle monete:
new Intl.NumberFormat(locale, {
style: "currency",
currency: currencyCode
}).format(amount)
IntlLe librerie basate su ICU e CLDR gestiscono convenzioni che variano di regione. Mantengono anche la logica di visualizzazione vicina alla layer di presentazione, dove si trova.
Progettare per la direzione e l'espansione
Il testo non si espande in modo predittivo tra le lingue. I pulsanti hanno bisogno di ampiezze flessibili, le schede hanno bisogno di altezze adattabili e le etichette non dovrebbero dipendere da una sola riga. Utilizzare i sistemi di layout che consentono al contenuto di crescere e testare i controlli con pseudo-traduzioni lunghe prima che i traduttori inizino la revisione finale.
Supporto a scrittura da destra a sinistra richiede più di un semplice cambio dell'allineamento del testo. Icone, ordine della navigazione, spaziatura, animazioni e gesti direzionali potrebbero richiedere una riflessione. Utilizza proprietà logiche come margin-inline-start al posto di regole esclusive per il lato sinistro dove il sistema lo supporta. Le immagini, i font e il testo incorporato richiedono anche una revisione. Un font che rende bene una scrittura può non coprire un'altra, e un'immagine che contiene parole inglesi può richiedere un'asset localizzato piuttosto che un sovrapposto tradotto.
Per orientamento specifico per l'interfaccia, i team che utilizzano Capacitor possono anche consultare questi pratiche di UI e UX cross-platform.
Considerazioni specifiche per la piattaforma per Mobile Web Capacitor e Electron
Le regole di base rimangono coerenti, ma ogni runtime fornisce segnali e vincoli di packaging diversi per la localizzazione. Un'app nativa può leggere le preferenze del dispositivo attraverso le API del sistema. Un browser espone le preferenze linguistiche attraverso le impostazioni del browser e le API di JavaScript. Un'app ibrida ha sia una WebView che una shell nativa, il che significa che gli squadre devono decidere dove risiede la verità sulla localizzazione.
| Piattaforma | Rilevamento della Località | Approccio di Formattazione | Chiave di Nota |
|---|---|---|---|
| iOS | Impostazioni di lingua del dispositivo o dell'app, con comportamento app-specifico dove supportato | Formatatori di Foundation e JavaScript Intl per contenuti web |
Schermate native e schermate di WebView possono divergere se utilizzano uno stato di località separato |
| Android | Impostazioni di lingua del dispositivo e dell'applicazione, a seconda dell'implementazione | API di locale Android e JavaScript Intl in contenuto web |
Le risorse qualificate e le risorse WebView richiedono una strategia di fallback deliberata |
| Web | Preferenze linguistiche del browser, scelta dell'utente, impostazioni URL e account | JavaScript Intl, librerie supportate da ICU e gestione locale del server |
Le decisioni di locale del server e del client devono concordare per evitare una rappresentazione inconsistente |
| Capacitor | Preferenza nativa più stato WebView | Formattatori nativi, JavaScript Intl, e bundle di risorse condivise |
Un aggiornamento JavaScript in tempo reale può modificare il contenuto localizzato senza modificare le risorse native. |
| Elettrone | Impostazione di sistema, preferenza dell'app o impostazione dell'account | JavaScript Intl, logica del lato Node, e risorse dei renderer |
I assetti localizzati devono essere inclusi e caricati correttamente nei build di produzione. |
Applicazioni mobili native
iOS and Android each provide native localization systems, but many teams also render substantial UI through JavaScript. Decide whether native and web layers share locale codes, translation keys, and fallback rules. Keep locale selection explicit so a user-selected language does not get replaced by the device preference during the next launch.
Il metadata dello store merita un'attenzione separata. Un'app localizzata può ancora perdere la visibilità se titolo, sottotitolo e descrizione rimangono nella stessa lingua. 2023 analisi di app statunitensi leader che entrano nel mercato estero trovato che 60% localizzato il loro titolo iOS, quasi 90% abbiano localizzato la loro descrizione del prodotto, e 6 su 10 abbiano localizzato il loro sottotitolo. Su Android, 70% abbiano localizzato il titolo e 89% abbiano localizzato la descrizione. Queste sono decisioni di front-end del negozio, non decisioni di UI in esecuzione, quindi assegnatele alla checklist di lancio piuttosto che assumere che il pacchetto di ingegneria le gestisca.
applicazioni web
Le applicazioni web hanno bisogno di una relazione stabile tra URL, rendering del server, preferenza del browser e preferenza dell'account. Se il server rende l'inglese mentre il browser cambia immediatamente in tedesco, gli utenti potrebbero vedere un flash o una disallineazione di idratazione. Scegliete un ordine di priorità, persistete la selezione dell'utente e rendete la locale di fallback deterministica.
Caricate in modo rilassato i pacchetti di locale quando l'applicazione ha contenuto tradotto sostanziale. Mantenete l'esperienza di default veloce, ma assicuratevi che un percorso offline o fallito possa rendere un fallback sicuro.
Capacitor e Electron
Capacitor apps often share a web codebase across iOS, Android, and the browser. That makes shared resources efficient, but native plugins may still expose platform-specific locale behavior. The WebView should receive a normalized locale from one authoritative source, rather than independently guessing from browser and device settings. Teams evaluating those boundaries can review how Capacitor handles platform differences.
Elettron aggiunge una preoccupazione di packaging. Il renderer può caricare i file di locale in modo diverso in fase di sviluppo e in un'applicazione pacchettizzata, quindi i build di produzione devono verificare che le risorse siano presenti, accessibili e aggiornate insieme. Se i bundle JavaScript possono ricevere aggiornamenti in tempo reale, definisci se i file di locale fanno parte dello stesso bundle firmato e come un aggiornamento fallito si annulla.
Librerie di strumentazione e flussi di traduzione che scalano
Una libreria di traduzione non crea da sola un flusso di localizzazione. Un team può utilizzare i18next, FormatJS o native Intl API e ancora perdere una release se la proprietà chiave, il contesto, la revisione, la consegna e il rollback sono incerti. Tratta ogni nuova stringa come un artefatto software che passa attraverso gli stessi controlli di code.
Un flusso scalabile segue una catena chiara:
- Un sviluppatore aggiunge una chiave semantica con contesto, screenshot, variabili e limiti di caratteri dove contano.
- L'automazione estrae o valuta la chiave e la invia a un sistema di gestione delle traduzioni.
- I traduttori e i revisori utilizzano la stessa fonte mentre il build controlla i placeholder e i locali richiesti.
- La CI recupera le risorse approvate e li pacchetta con l'applicazione o li invia attraverso un canale di aggiornamento approvato.
- Verifiche QA per le località modifiche al posto di ripetere ogni revisione linguistica dall'inizio.
- Gestione dei rilasci gestisce l'esposizionepartendo dagli utenti interni, beta o mirati prima di un lancio più ampio.

Perché il flusso di lavoro è importante
Il punto di blocco è spesso aspettare il contenuto approvato, non scrivere il code. A 2026 developer survey on i18n workflows ha trovato che 64% dei rispondenti hanno identificato l'efficienza del workflow di traduzione come il loro principale ostacolo 78% ha detto che aspettare le traduzioni ritarda i rilasci, e 52% manca una verifica sistematica della traduzione oltre al controllo manuale. 41% ha adottato sistemi di over-the-air e 28% prevede di farlo nel 2026. Questi ritrovamenti collegano la localizzazione con la consegna del rilascio piuttosto che trattarla come un ciclo di contenuti separato.
CI dovrebbe catturare le fallite prevedibili prima della confezione:
- Chiavi mancanti: Fallire o avvertire quando una chiave di origine non ha un fallback.
- Drift dei placeholder: Verificare che le variabili come
{count}esistano in ogni messaggio tradotto. - Chiavi orfane: Segnalare le risorse che non appaiono più nell'applicazione.
- Sintassi non valida: Rifiuta JSON danneggiato, messaggi ICU o file di risorse.
- Copertura delle località: Rapporta quali località supportate sono state modificate e quali ancora richiedono una revisione.
Per patterni di integrazione CI, vedere il developer experience tools overview.
Live updates as release engineering
For Capacitor and Electron teams, a localization fix can travel inside a signed JavaScript, CSS, copy, configuration, and asset bundle. A live-update platform such as Capgo Il testing di internazionalizzazione dovrebbe esporre le assunzioni prima che gli utenti lo facciano. Una sola schermata tradotta non è sufficiente perché le fallite spesso dipendono da una combinazione particolare di località, lunghezza dei dati, dimensione dello schermo, direzione di scrittura e piattaforma.
Live updates do not replace store releases. Native strings, permissions, platform APIs, and changes that exceed the installed native runtime still require the appropriate distribution path. They provide a faster lane for compatible localization changes, where a small content fix can otherwise wait for the next application release.
Test e valutazione di prestazioni e sicurezza per applicazioni globali
Internationalization testing should expose assumptions before users do. A single translated screenshot isn’t enough because failures often depend on a particular combination of locale, data length, screen size, writing direction, and platform.

Inizia con contenuti ostili
La pseudolocalizzazione sostituisce le stringhe normali con testo di prova che è deliberatamente più lungo, accentedo o circondato da marker. Aiuta a rivelare stringhe hardcoded, etichette tagliate, schede di altezza fissata e controlli che funzionano solo in inglese. Testa sia gli stati vuoti che quelli popolati perché i messaggi pluriali e gli errori di validazione spesso seguono percorsi di layout diversi.
Il testing RTL richiede una navigazione completa. Controlla l'allineamento del testo, i pulsanti di ritorno, gli iconi, le tabelle, le gestione di swipe, i campi dei form e il contenuto a direzione mista come una frase araba contenente un prodotto code. Non rifletti automaticamente ogni icona. Gli iconi direzionali potrebbero richiedere la riflessione, mentre i marchi di fabbrica e alcune icone di oggetti dovrebbero rimanere invariati.
Automatizza la matrice delle lingue
Costruisci una matrice di test intorno alle combinazioni di lingua e regione supportate, non ai nomi delle lingue soli. Una lingua può avere convenzioni diverse nelle regioni, soprattutto per le date, i numeri, le monete, i calendari e le zone orarie.
- Controlli funzionali: Conferma la selezione della locuzione, persistenza, fallback, rami plurali e messaggi di errore.
- Controlli visivi: Cattura le schermate chiave con stringhe lunghe, RTL abilitato e larghezze strette.
- Controlli linguistici: Dai ai revisori contesto, screenshot, variabili e l'azione intesa.
- Verifiche di regressione: Testare l'installazione dell'aggiornamento, i download interrotti, l'avvio offline e il comportamento di rollback.
La prestazione richiede disciplina a causa delle risorse locali che crescono. Scomponi i grandi pacchetti per locale o feature quando è appropriato, carica in modo lazy le lingue non essenziali e memorizza le risorse validate. Evita di far dipendere la prima schermata da una richiesta di traduzione lenta a meno che l'applicazione non abbia un fallback affidabile.
La sicurezza appartiene alla stessa revisione. Tratta gli identificatori di locale e il contenuto tradotto fornito dall'utente come input, valuta la struttura delle risorse, proteggi le credenziali di gestione della traduzione e verifica l'integrità dei pacchetti remotamente consegnati. Un flusso di aggiornamento live dovrebbe utilizzare artefatti firmati, canali controllati, controlli di compatibilità di versione, fallimenti osservabili e un percorso di rollback testato. Le squadre che progettano controlli di distribuzione possono anche recensire questo guide per la distribuzione in più regioni.
Mettere tutto insieme con Code Esempi e Checklist di migrazione
A checkout screen shows why migration order matters. Start with the code users touch most, then replace each assumption with a locale-aware boundary. Hardcoded labels, dates, currencies, plural messages, and fixed-width layouts should become separate migration tasks, with a fallback locale preventing missing resources from leaving blank controls.
Esempio: sostituisci la concatenazione di moneta in un componente esistente.
Prima:
price.textContent = currencySymbol + amount;
Dopo:
price.textContent = new Intl.NumberFormat(locale, {
style: "currency",
currency: currencyCode
}).format(amount);
Conserva amount come valore numerico raw. Il formattatore decide la posizione dei simboli, i separatori, le convenzioni decimali e altri dettagli regionali. Ciò evita di disseminare le regole di localizzazione attraverso la logica di checkout.
Elenco di controllo di migrazione pratica:
- Inventario: Trova stringhe visibili dall'utente, valori formattati, immagini che contengono testo e assunzioni di localizzazione.
- Esternalizzare: Spostare la copia nei file di risorse con chiavi semantiche e contesto di traduttore.
- Normalizzare lo stato di localizzazione: Definire la detezione, l'override dell'utente, la persistenza e il comportamento di fallback.
- Sostituire la formattazione manuale: Usa formattori di data locale-aware per piattaforma o JavaScript.
- Hardening dei layout: Testare l'espansione, la troncatura, il testo bidirezionale, i font e la riflessione RTL.
- Automate validazione: Controlla chiavi mancanti, sintassi delle risorse e località cambiate nel CI.
- Rilascia in modo sicuro: Invia modifiche di localizzazione compatibili attraverso il processo di store o un canale di aggiornamento live controllato, utilizzando la firma, l'esposizione in fasi, la monitoraggio e il rollback.
Scegli un flusso di alta affluenza, come l'onboarding o il checkout, per la prima passata. Una volta che il confine delle risorse e il pipeline di validazione funzionano, applica le stesse convenzioni sull'applicazione piuttosto che tentare una riscrittura non controllata.
Per i team di CapacitorJS e Electron, Capgo supporta pacchetti di aggiornamento live firmati per le modifiche JavaScript, CSS, copia, configurazione e asset compatibili. I canali, la consegna differenziale, l'osservabilità e la protezione del rollback possono connettere una correzione di localizzazione a un flusso di CI/CD esistente, riducendo la dipendenza da una revisione del store per ogni correzione compatibile. Valuta quel percorso di rilascio contro i controlli di distribuzione prima di estenderlo ad altre località.