Come localizzare la tua app iOS: guida all'internazionalizzazione con SwiftUI
Prepara la tua app in Xcode, traduci i file .xcstrings con l'IA, quindi carica gli screenshot in modo che PTC (Private Translation Cloud) possa revisionare l'app iOS renderizzata in ogni lingua. Questa guida illustra l'intero flusso di lavoro utilizzando SwiftUI e gli String Catalog di Xcode 15+, il percorso moderno consigliato da Apple. Per una panoramica del servizio cross-platform che copre sia iOS che Android, vedi come tradurre app iOS e Android con l'IA.
Parte 1: Come funziona la localizzazione iOS
La localizzazione iOS è il processo di adattamento dei testi, della formattazione e degli asset della tua app per supportare più lingue e regioni. Con gli String Catalog introdotti in Xcode 15, il flusso di lavoro è drasticamente più semplice rispetto al vecchio approccio basato su .strings / .stringsdict.
Internazionalizzazione vs. localizzazione
Si tratta di due fasi distinte che devono avvenire in questo ordine:
- Internazionalizzazione (i18n) è il lavoro tecnico di base. Strutturi il codice in modo che testi, immagini e formattazione possano variare in base alla lingua senza modifiche al codice. Si fa una volta sola, idealmente prima del primo rilascio.
- Localizzazione (l10n) è il lavoro continuo che segue. Scrivere traduzioni, adattare i layout e fornire asset specifici per ogni nuova lingua.
L'errore più comune è trattare la localizzazione come un'attività post-lancio, per poi scoprire che la base di codice non è pronta. Tornare indietro per correggere stringhe hardcoded, layout a direzione fissa e formattatori non sensibili alla lingua locale su un'app esistente richiede molto più tempo rispetto a sviluppare pensando alla localizzazione fin dall'inizio.
Come Xcode 15+ usa Localizable.xcstrings come unica fonte di verità
Il modello di localizzazione di Apple in Xcode 15+ si concentra su un singolo file per target: Localizable.xcstrings. Questo file è uno String Catalog in formato JSON che contiene la tua lingua di origine e ogni traduzione, incluse le varianti plurali, le varianti specifiche per dispositivo e le sostituzioni.
Xcode estrae automaticamente le stringhe localizzabili dal tuo codice SwiftUI (qualsiasi Text("..."), Label("...", systemImage:), Button("...") e ogni interpolazione di stringhe che utilizzi LocalizedStringKey). L'esecuzione della build della tua app popola Localizable.xcstrings con ogni stringa di origine estratta.
Apple supporta diversi formati: .strings (chiave-valore legacy), .stringsdict (plurali legacy) e .xcstrings (moderno). I nuovi progetti dovrebbero iniziare con .xcstrings. I progetti esistenti basati su .strings possono migrare tramite File > New > File > String Catalog e l'opzione di importazione di Xcode. La documentazione ufficiale sulla localizzazione di Apple copre tutti i dettagli di base.
Parte 2: Configura il tuo progetto Xcode per la localizzazione
Passaggio 1: Abilita la localizzazione. Apri il tuo progetto in Xcode e seleziona il file di progetto nel Navigator. Sotto la scheda Info, scorri fino a Localizations. L'inglese è già presente come lingua di base. Clicca su + per aggiungere ogni lingua di destinazione (spagnolo, francese, arabo, ecc.).
Passaggio 2: Crea uno String Catalog. Fai clic con il tasto destro sul tuo progetto e seleziona New File from Template. Cerca String Catalog e aggiungilo. Mantieni il nome predefinito Localizable.xcstrings. Avvia la build del progetto una volta con Cmd+B. Xcode scansiona il tuo codice, trova ogni stringa localizzabile e popola automaticamente il catalogo.
Passaggio 3: Contrassegna le stringhe per la localizzazione. In SwiftUI, qualsiasi stringa letterale passata a Text(_:), Label, etichette di azione di Button, titoli di navigazione, ecc. è automaticamente una LocalizedStringKey:
import SwiftUI
struct WelcomeView: View {
let userName: String
let unreadCount: Int
var body: some View {
VStack {
Text("Welcome, \(userName)!")
Text("You have \(unreadCount) unread messages")
Button("Get Started") {
// action
}
}
}
}
Esistono due scenari in cui Xcode non può estrarre le stringhe automaticamente. Entrambi falliscono silenziosamente:
Suggerimento 1: Evita di passare variabili a Text. Quando passi una variabile a una vista Text invece di una stringa letterale, SwiftUI la tratta come una stringa semplice e salta completamente la ricerca nel catalogo:
// NOT localized - SwiftUI treats the variable as a plain String
let title = "welcome_title"
Text(title)
// Localized correctly
Text(LocalizedStringKey(title))
Suggerimento 2: Usa String(localized:) fuori dalle viste. Per le stringhe che devi localizzare in un view model, in una funzione di supporto o ovunque al di fuori di una vista SwiftUI, usa String(localized:) invece di una stringa semplice:
let errorMessage = String(localized: "error_generic")
Passaggio 4: Aggiungi varianti plurali e per dispositivo. Le stringhe spesso necessitano di forme diverse a seconda del contesto.
Per la pluralizzazione, inizia con la stringa nella tua vista SwiftUI:
Text("\(bookCount) books on your shelf")
Apri lo String Catalog, fai clic con il tasto destro sulla chiave e scegli Vary by Plural. Xcode genera automaticamente le categorie plurali e le precompila con la stringa di origine. Per l'inglese vedrai One e Other. Correggi il campo One in "%lld book on your shelf". Contrassegna entrambi come revisionati.
Quando in seguito invierai il catalogo a PTC, la struttura plurale viaggerà con il file. Per l'arabo, PTC genera traduzioni per tutte e sei le categorie plurali (zero, one, two, few, many, other) perché la grammatica araba le richiede tutte e sei. Lo spagnolo ne richiede due, come l'inglese.
Per le varianti di dispositivo (ad esempio, “Tocca per continuare” su iPhone vs. “Fai clic per continuare” su Mac), fai clic con il tasto destro sulla chiave e scegli Vary by Device. Aggiungi i dispositivi che vuoi personalizzare e inserisci la stringa appropriata per ciascuno. iOS caricherà la versione corrispondente al dispositivo in uso al runtime.
Parte 3: Traduci i tuoi .xcstrings con PTC
Per piccoli progetti potresti aprire ogni colonna della lingua nel catalogo e digitare le traduzioni direttamente. Man mano che la tua app cresce, questo diventa ingestibile tra centinaia di chiavi e decine di lingue. PTC gestisce il caricamento, la traduzione e la sincronizzazione.
Passaggio 1: Esporta il tuo String Catalog da Xcode. Vai su Product > Export Localizations. Xcode pacchettizza il tuo String Catalog in un file .xcloc per ogni lingua di destinazione. Per PTC, ti serve solo il file .xcstrings all'interno del pacchetto .xcloc. Fai clic con il tasto destro sull'.xcloc esportato nel Finder e seleziona Mostra contenuto pacchetto per trovare Localizable.xcstrings.
Se vedi una notifica “Unable to build project for localization string extraction”, il tuo progetto utilizza API solo iOS che Xcode non può compilare con il suo SDK macOS interno durante l'estrazione delle stringhe. Soluzione: seleziona il target del progetto sotto TARGETS, vai su Build Settings, cerca “Use Compiler to Extract Swift Strings” e impostalo su No. Quindi esporta di nuovo.
Passaggio 2: Registrati a PTC. La prova gratuita copre 20.000 parole in 2 lingue, il che è sufficiente per localizzare la maggior parte delle app. Dopo la prova, PTC funziona con il modello Pay-As-You-Go. Nessun abbonamento, le prime 500 parole ogni mese sono gratuite.
Passaggio 3: Configura il tuo progetto e traduci. Trascina Localizable.xcstrings in PTC. Lascia il nome del file di output come Localizable.xcstrings. Xcode si aspetta esattamente quel nome quando risolve le stringhe localizzate. Seleziona le tue lingue di destinazione.
PTC genera automaticamente una descrizione della tua app dal file caricato. Revisionala e modificala se necessario. Se hai file di traduzione esistenti, caricali in modo che PTC possa adattarsi al tuo stile. Altrimenti traduci da zero. Aggiungi i termini del glossario. PTC aggiunge automaticamente il nome della tua app. Aggiungi qualsiasi terminologia specifica del brand che debba essere tradotta in un modo particolare o non tradotta affatto. Clicca su Start Translation.
Passaggio 4: Revisiona e scarica. Una volta completata la traduzione, la scheda Translations mostra ogni stringa di origine accanto alla sua traduzione. Chiunque tu aggiunga al progetto può modificare le traduzioni direttamente. Se qualcosa non ti convince, segnala un problema con una traduzione specifica e richiedi una ritraduzione gratuita con l'IA. PTC impara dai feedback e li applica alle stringhe future nello stesso progetto.
Se una stringa tradotta supera il limite di lunghezza, viene evidenziata. Hai tre opzioni: accettare la traduzione più lunga se la tua UI può ospitarla, richiedere una ritraduzione che rispetti il limite attuale o regolare il limite in Settings > Translation lengths.
Parte 4: Integra i file .xcstrings tradotti nel tuo progetto Xcode
Hai tre opzioni.
Opzione 1: Scarica manualmente i file da PTC. Vai alla scheda Resource Files e scarica lo ZIP. Contiene un singolo Localizable.xcstrings con le tue stringhe di origine in inglese e tutte le traduzioni. Chiudi Xcode, sostituisci il file Localizable.xcstrings esistente nella cartella del tuo progetto con quello di PTC, quindi riavvia Xcode. Le tue traduzioni appariranno nello String Catalog con un segno di spunta accanto a ogni lingua completamente tradotta.
Opzione 2: Integra con Git. Se il tuo progetto risiede su GitHub, GitLab o Bitbucket, collega direttamente PTC. L'integrazione Git è una funzionalità Pro. Attiva il Pay-As-You-Go per accedervi. Nel tuo pannello di controllo PTC, vai su Settings > Merge Requests e clicca su Add Git Integration. Fornisci l'URL della tua repository, concedi l'accesso a PTC e scegli il tuo branch e i file di origine. PTC invierà una merge request con le traduzioni.
Opzione 3: Usa l'API. L'API di PTC ti offre il pieno controllo su quando e come le traduzioni vengono inserite nella tua pipeline di build. Con il Pay-As-You-Go attivato, vai su Settings > Manage API tokens, clicca su Add access token, quindi consulta il riferimento API di PTC per gli endpoint.
Un selettore di lingua in-app (alcune app ne hanno bisogno) può sovrascrivere la lingua di sistema per ogni vista tramite l'ambiente SwiftUI:
import SwiftUI
@MainActor
class LocaleManager: ObservableObject {
@Published var currentLocale: Locale = .current
func setLocale(_ identifier: String) {
currentLocale = Locale(identifier: identifier)
UserDefaults.standard.set([identifier], forKey: "AppleLanguages")
}
}
struct LanguageSettingsView: View {
@EnvironmentObject var localeManager: LocaleManager
var body: some View {
List {
Button("English") { localeManager.setLocale("en") }
Button("Español") { localeManager.setLocale("es") }
Button("Français") { localeManager.setLocale("fr") }
}
.environment(\.locale, localeManager.currentLocale)
}
}
La modifica di AppleLanguages al runtime richiede il riavvio dell'app per alcune stringhe di sistema. La sovrascrittura dell'ambiente SwiftUI ha effetto immediato per le viste all'interno di tale ambito.
Parte 5: Testa la tua app iOS localizzata
Test con l'impostazione della lingua dello schema. Il modo più rapido per testare una lingua specifica è tramite lo schema di Xcode. Vai su Product > Scheme > Edit Scheme, clicca sulla scheda Options, cambia App Language e App Region con la lingua desiderata e avvia con Cmd+R. Funziona bene per la maggior parte delle lingue. Dovresti vedere lo stesso layout e design dell'inglese con tutto il testo tradotto.
Test dell'arabo e di altre lingue RTL. L'impostazione della lingua dello schema può essere inaffidabile nel simulatore per le lingue RTL. Usa le impostazioni della lingua del simulatore stesso:
- Avvia l'app con Cmd+R per aprire il simulatore.
- Premi Cmd+Home per andare alla schermata principale.
- Apri Settings > General > Language & Region.
- Tocca Add Language, seleziona l'arabo e impostalo come lingua principale.
- Il simulatore si riavvia. Apri la tua app dalla schermata principale.
Verifica che il testo appaia in arabo e che il layout sia specchiato correttamente, con il titolo di navigazione e il contenuto allineati a destra. Per un test di anteprima rapido, Edit Scheme > Options > Application Language > Right-to-Left Pseudolanguage è un controllo più veloce. Per testare l'espansione del testo, usa Double-Length Pseudolanguage per vedere come i layout gestiscono stringhe più lunghe del 30-40% prima di impegnarti con una lingua di destinazione.
Best practice per la localizzazione iOS
- Controlla la tua UI per diverse lunghezze di testo. Il tedesco è circa il 30% più lungo dell'inglese. Il francese e lo spagnolo circa il 20%. Usa il sistema di layout flessibile di SwiftUI, lascia che le etichette crescano e vadano a capo naturalmente, evita vincoli di larghezza fissa sugli elementi di testo e testa in diverse lingue durante lo sviluppo.
- Non saltare le varianti di pluralizzazione. Il russo ha cinque categorie plurali, l'arabo ne ha sei, il giapponese nessuna. Gli String Catalog gestiscono tutto questo quando aggiungi la lingua. Assicurati che tutti i campi generati siano compilati prima della pubblicazione.
- Localizza immagini e asset. Le immagini con testo o elementi visivi culturalmente specifici necessitano di varianti localizzate. In
Assets.xcassets, seleziona l'immagine e nell'Attributes Inspector clicca su Localize. Scegli le lingue per cui vuoi le varianti e sostituisci ciascuna con la versione appropriata. iOS caricherà l'immagine corretta in base alla lingua dell'utente. - Mantieni completa la tua lingua di base. La tua lingua di base (solitamente l'inglese) è il fallback per qualsiasi traduzione mancante. Una lingua di base incompleta può causare fallback imprevisti anche in lingue altrimenti completamente tradotte. Xcode segnala le stringhe di base mancanti o obsolete durante la build.
- Localizza la tua scheda sull'App Store. Un'app localizzata con una scheda solo in inglese perde utenti nella fase di scoperta. In App Store Connect puoi localizzare il nome dell'app, il sottotitolo, la descrizione e le parole chiave per territorio. Le parole chiave sono particolarmente preziose: Apple indicizza le parole chiave di più lingue per territorio, moltiplicando di fatto il tuo budget di caratteri oltre i 100 standard. Usa la funzione Incolla per tradurre di PTC per i contenuti dell'App Store.
- Usa formattatori sensibili alla lingua. Usa
Date.FormatStyle,Decimal.FormatStylee formattatori sensibili allaLocale. Non inserire mai nel codice"$"o"MM/DD/YYYY". - Usa
%lldper i conteggi di interi eString(localized: "You have ^[\(count) message](inflect: true)")dove si applica l'accordo grammaticale automatico di Apple.
Revisione visiva della traduzione della tua app iOS: pubblica senza QA manuale per lingua
Dopo che PTC ha tradotto i tuoi file .xcstrings, devi comunque verificare l'app in esecuzione in ogni lingua. Tradizionalmente, questo richiede diversi giorni di QA manuale per ogni rilascio. Un'etichetta tradotta potrebbe causare un overflow in una barra di navigazione in tedesco. “Send” potrebbe essere tradotto come sostantivo in francese quando il pulsante richiedeva un verbo. Una stringa inglese hardcoded al di fuori di Text(_:) risulterà palesemente non tradotta nell'app iOS in esecuzione.
L'AI Visual QA di PTC sostituisce questo passaggio. Per le app iOS native (il flusso dell'estensione del browser non si applica), usa il caricamento degli screenshot. Cattura le schermate critiche dell'app in esecuzione in ogni lingua di destinazione (accesso, scheda principale, impostazioni, casi limite) e caricale su PTC. L'IA visiva di PTC ispeziona ogni schermata e:
- Corregge i problemi nei file
.xcstringsquando PTC ha il controllo su di essi. Ritraduce una parte del discorso errata, sceglie un sinonimo più breve che si adatti a una barra di navigazione, rigenera una forma plurale con il corretto accordo grammaticale. - Genera un prompt per Cursor / Claude Code quando il problema risiede nel tuo codice Swift. Una
LocalizedStringKeymancante, unaStringhardcoded fuori dal sistema di localizzazione, una frase costruita per concatenazione invece che per sostituzione.
Il risultato: un'app iOS verificata per ogni rilascio. Non un file .xcstrings tradotto con la QA manuale ancora da fare.
Traduci la tua scheda sull'App Store, le note di rilascio e le notifiche push
La descrizione dell'App Store, le note di rilascio sulle novità e il testo delle notifiche push risiedono al di fuori di Localizable.xcstrings. La funzione Incolla per tradurre di PTC gestisce questi testi nello stesso progetto. Incolla il testo di origine nel pannello di controllo PTC, scegli le lingue di destinazione e ottieni traduzioni che utilizzano lo stesso glossario e la stessa voce del brand delle stringhe in-app. Apple indicizza le parole chiave di più lingue per territorio, quindi le schede localizzate sono particolarmente preziose per la scoperta.
Traduci i contenuti utente in-app con l'API di PTC
Chat in-app, post social e recensioni degli utenti devono essere tradotti man mano che i contenuti arrivano. L' API REST di PTC traduce questi contenuti su richiesta con autenticazione tramite Bearer token, utilizzando lo stesso glossario e la stessa voce del brand delle traduzioni dei tuoi file .xcstrings.
Risolvere problemi di localizzazione iOS
La causa più comune è che il file di localizzazione non è incluso nel target dell'app. Clicca su Localizable.xcstrings nel Navigator, apri il File Inspector e verifica che il target della tua app sia selezionato sotto Target Membership. Conferma inoltre che la lingua sia elencata nella sezione Localizations del tuo progetto sotto la scheda Info. Se entrambi sembrano corretti, pulisci la cartella di build con Shift+Cmd+K e ricompila.
Formati dei file di localizzazione iOS: .xcstrings, .strings, .stringsdict, .xliff
.xcstrings (String Catalog) è l'attuale standard predefinito da Xcode 15. Un singolo file basato su JSON che consolida tutte le stringhe, le regole plurali e le varianti specifiche per dispositivo. .strings è il formato legacy chiave-valore, ancora valido in basi di codice più vecchie, abbinato a .stringsdict per i plurali. .xliff e .xcloc sono formati di esportazione per la consegna ai traduttori. Non sono formati di archiviazione.
Localizza il nome della tua app con InfoPlist.strings
Crea un file InfoPlist.strings e localizzalo per ogni lingua supportata. In ogni versione linguistica, aggiungi CFBundleDisplayName = "Il nome tradotto della tua app";. Seleziona il file nel Navigator, apri il File Inspector e clicca su Localize per aggiungere le varianti linguistiche. iOS visualizzerà il nome dell'app corretto in base alla lingua del dispositivo.
Cambiare la lingua dell'app iOS senza riavviare
iOS non fornisce un'API nativa per questo. L'approccio standard consiste nell'impostare AppleLanguages in UserDefaults e chiedere all'utente di riavviare:
UserDefaults.standard.set(["es"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
La modifica ha effetto al successivo avvio dell'app. Se hai bisogno di cambiare lingua durante la sessione senza riavvio, devi gestire la localizzazione manualmente caricando il bundle appropriato per la lingua selezionata.
Perché iOS ripiega sull'inglese per le lingue non supportate
iOS utilizza la tua lingua di base come fallback quando una traduzione non è disponibile. Questo è il comportamento previsto. Per ridurre al minimo i fallback, assicurati che il tuo String Catalog non mostri stringhe mancanti o obsolete prima di ogni rilascio.
Quanto è accurata la localizzazione con IA per un'intera app iOS
PTC utilizza l'IA per tradurre i file .xcstrings, .strings e .stringsdict in pochi minuti, preservando automaticamente le regole plurali e i segnaposto. La maggior parte delle stringhe tradotte va online senza modifiche. Per risultati ottimali, fornisci informazioni sulla tua app a PTC durante la configurazione, in modo che le traduzioni riflettano il tono e la terminologia corretti.
In quali lingue localizzare per prime la tua app iOS
Spagnolo, francese, tedesco, giapponese e cinese semplificato sono punti di partenza comuni oltre all'inglese. Se la tua app ha già utenti in una regione specifica, dai priorità alla loro lingua. Per ridurre i costi di adattamento, inizia con lingue geograficamente o culturalmente vicine al tuo mercato di base.
Localizza la tua app iOS
Inizia con la prova gratuita di 30 giorni di PTC: 20.000 parole offerte da noi, senza carta di credito. Carica il tuo file Localizable.xcstrings, traducilo in pochi minuti, quindi carica gli screenshot e lascia che PTC verifichi l'app renderizzata.
Correlati:
- Traduci app iOS e Android con l'IA – panoramica del servizio cross-platform.
- Come localizzare la tua app Android – la guida equivalente per Android Studio.
- Riferimento API di PTC – endpoint REST per l'integrazione CI.