Comprensione della localizzazione e dell'internazionalizzazione

L’internazionalizzazione (i18n) è il processo di progettazione della tua app in modo che possa essere adattato a diverse lingue e regioni senza cambiamenti di ingegneria. La localizzazione (l10n) è la traduzione e l’adattamento culturale effettivo del contenuto dell’app e dell’interfaccia utente per una specifica locale.

Apple fornisce strumenti completi in Xcode, Foundation e UIKit per supportare la localizzazione. L'obiettivo è quello di rendere la tua app si sente nativo in ogni lingua, nel rispetto della direzione di lettura, dei formati di data, della formattazione dei numeri e delle convenzioni culturali. Questo articolo passa attraverso i passaggi pratici per implementare un supporto multi-lingua robusto, dalla configurazione del progetto alle tecniche avanzate.

Attivare la localizzazione nel tuo progetto Xcode

Apri le impostazioni del progetto, seleziona il tuo progetto nel Project Navigator e sotto la scheda Info, trova la sezione Localizations. Clicca sul pulsante “+” per aggiungere le lingue. Per ogni lingua, Xcode crea automaticamente i file delle risorse (storyboard, XIB, strings files) che puoi modificare separatamente.

Internazionalizzazione di base

Nella scheda Info del tuo progetto, controlla “Use Base Internationalization”. Questo memorizza il layout originale dell’interfaccia utente in una localizzazione di base (solitamente inglese) e ogni lingua aggiuntiva sovrascrive solo le stringhe, non il layout. Questo riduce la duplicazione e garantisce la coerenza del layout. Se lo deseleziona, devi duplicare l’intero storyboard per ogni lingua, che è in errore.

Aggiungere Localizzazioni ai file esistenti

Per gli storyboard esistenti o XIB, selezionare il file nell'ispettore file, quindi sotto Localizzazione, controllare le lingue che si desidera localizzare. Xcode genera file .strings specifici per la lingua per gli storyboard. Per le interfacce basate su codice, si conta su e file .strings separati.

Creazione e gestione di file di stringhe localizzabili

Il modo principale per tradurre il testo dal codice è attraverso i file . Creare uno andando a File > Nuovo file > Strings File (sotto risorse). Nome . Quindi nell'ispettore file, localizzarlo: fare clic su Localize, quindi selezionare la lingua di base. Dopo di che, per ogni lingua aggiuntiva, un nuovo file appare in un sottocartellastro.

Il formato è chiave = coppie di valore:

Per la localizzazione tedesca:

Usa sempre le chiavi descrittive, non la stringa inglese stessa, per evitare cambiamenti accidentali che si rompe le ricerche. Se si utilizza la stringa inglese come chiave, rinominarla poi diventa problematica.

Organizzare le stringhe con i commenti

Aggiungi commenti per spiegare il contesto per i traduttori. Non sono compilati nell'app. Esempio:


Utilizzo di NSLocalizedString in codice

La macro legge la stringa dal file appropriato [[] basato sulla lingua del dispositivo dell'utente.

La maggior parte delle chiamate usano solo la chiave e commenta:

Se non si trova alcuna traduzione, la chiave stessa viene restituita (o il parametro del valore se fornito).

Formato di manipolazione Strings con parametri

Per il contenuto dinamico, utilizzare i specificatori di formato come [, , []. Esempio:

In codice:

Questo permette ai traduttori di riordinare le parole in modo appropriato (ad esempio, in giapponese la struttura della frase può posizionare il numero dopo il sostantivo). Ancora meglio, usare con un argomento di formato:

Utilizzo di .stringsdict per le regole di Plural

Ad esempio, l'inglese ha singolare/plurale, ma l'arabo ha sei forme e il polacco ha tre. Apple fornisce file per gestire la pluralizzazione e altri testi variabili. Creare un file chiamato nelle stesse cartelle di localizzazione di []. Il suo formato è un elenco con una chiave per formato. Esempio:

Quindi in codice utilizzare la stessa chiave: []. iOS seleziona automaticamente il modulo plurale corretto in base alle regole del locale.

Localizzazione di Storyboard e XIB

Quando si localizza uno storyboard, ogni etichetta, pulsante e campo di testo ottiene una controparte nel file stringhe specifiche della lingua. È possibile modificare queste stringhe direttamente, o utilizzare Interface Builder per visualizzare in anteprima e modificare i layout per lingua. Tuttavia, per UI più dinamico, si può preferire impostare il testo in modo programmatico utilizzando e quindi gestire il layout con Auto Layout.

Anteprima Localizzazioni in Xcode

In Xcode, è possibile visualizzare in anteprima uno storyboard in diverse lingue senza costruire: aprire lo storyboard, quindi nel menu Editor, selezionare Anteprima. Aggiungi un dispositivo di anteprima, quindi modificare la lingua utilizzando il menu a discesa in basso.

Regolazione del layout per l'espansione del testo

Il testo tedesco è spesso il 30% più lungo dell'inglese. Usa il layout automatico con vincoli che possono crescere le etichette verticalmente o orizzontalmente. Imposta il numero di linee di etichetta a 0. Evitare vincoli di larghezza fissa. Utilizzare le priorità di resistenza di contenuto e di compressione in modo appropriato. Per i pulsanti, considerare l'utilizzo o permettendo la larghezza dinamica.

Gestione delle lingue a destra a sinistra (RTL)

iOS supporta RTL attraverso la proprietà [ sulle viste e la ribalta automatica del sistema di immagini e layout in base alla direzione del layout dell'interfaccia utente (dal linguaggio del dispositivo).

Impostazione per RTL

Per i layout programmatici, utilizzare e . Se avete disegno personalizzato o trasforma, rispettare la direzione del layout dell'interfaccia utente da o controllare .

Immagini e RTL

In Asset Catalog, è possibile impostare le immagini come “Mirror” per RTL. In alternativa, fornire set di immagini separati per ogni direzione. Per immagini di modello, iOS può mirrorare automaticamente se si imposta sull'immagine.

Allineamento del testo

Per le etichette e le viste di testo, utilizzare [] che si allinea automaticamente a sinistra per LTR e a destra per RTL.

Localizzazione Date, Numeri e Valute

Gli utenti finali si aspettano date e numeri formattati secondo la loro localizzazione. Usa [ e con la localizzazione dell'utente. Imposta (che è il default) e usa stili predefiniti come , , o modelli personalizzati.

Per i numeri, utilizzare con stile [] o [].

Utilizzo di Locale con Formato Strings

Per le stringhe di interfaccia utente, utilizzare ] che rispetta la localizzazione. Per la parsing interna, utilizzare con un locale fisso come .

Test di localizzazione

Simulare lingue diverse sul simulatore modificando le impostazioni del linguaggio di applicazione e della regione dello schema. Vai al prodotto > Schema > Modifica Schema, quindi sotto Opzioni di esecuzione, scegliere un linguaggio di applicazione diverso (ad esempio, tedesco) e Regione (ad esempio, Germania).

Utilizzo del Simulatore di lingua Switcher

Puoi anche cambiare la lingua del Simulatore: Impostazioni > General > Lingua e Regione. Tuttavia, il metodo di schema è più veloce per testare una singola lingua.

Testare RTL

Controllare che tutte le viste invertano correttamente. Prestare attenzione a visualizzazioni personalizzate, vista a scorrimento e web. Utilizzare gli strumenti di debug per ispezionare il layout.

Test con Pseudolocalizzazione

Xcode offre pseudolocalizzazione per simulare lunghe stringhe o RTL senza traduzioni reali. Nelle Opzioni dello schema, abilitare “Double-Length Pseudolanguage” o “Right to Left Pseudolanguage”. Questo aiuta a catturare problemi di tronca e allineamento presto.

Localizzazione di contenuti dinamici e UI Server-Driven

Se la tua app scarica contenuti da un server, non puoi fare affidamento solo su []. Devi inviare la preferenza locale dell'utente al server e farlo tornare contenuto tradotto. Usa l'intestazione o un parametro personalizzato. Sul lato iOS, puoi ottenere le lingue preferite da ] o ].

Per l'interfaccia utente basata su server, è possibile mappare i tasti di stringa del server alle traduzioni locali utilizzando un modello simile [[] ma con una tabella o un bundle diversi.

Migliori Pratiche per Localizzazione Mantenibile

  • Keep chiavi descrittive e coerenti[[] – Utilizzare dot-notation come per i tasti namespace.
  • Utilizza una singola fonte di verità[[] – Evitare di duplicare le traduzioni attraverso i file.
  • Esportazione automatica/importazione[[] – Xcode può esportare tutte le localizzazione come file XLIFF per i traduttori, quindi importare i file tradotti indietro.
  • Versione controllare le stringhe[] – Tenere [ e file in Git.
  • Non includere mai testo localizzabile in codice[[] – Usare sempre o per la separazione.
  • Interpolazione stringa di contatto con attenzione[[] – I traduttori devono capire cosa rappresenta ogni segnaposto.

Lavorare con SwiftUI Localization

SwiftUI semplifica la localizzazione. Per impostazione predefinita, ] guarda la stringa in [] utilizzando il tasto “Ciao”. Se non esiste alcuna chiave, utilizza la stringa stessa letterale. È possibile esplicitare le chiavi con e fornire traduzioni.

Per le stringhe formattate, utilizzare – SwiftUI utilizza automaticamente il se si dispone della chiave “Hai elementi %d” in un file . Tuttavia, per abbinare la chiave con precisione, potrebbe essere necessario definire il formato completo.

non funziona direttamente.

Oppure usare SwiftUI ] con interpolazione: ma questo richiede che la chiave sia esattamente “items count %d” nel file strings. L’approccio più sicuro è quello di continuare a usare con all’interno di una proprietà calcolata.

Localizzazione di immagini in SwiftUI

Usa e fornisci la localizzazione del catalogo degli asset per ogni lingua. Oppure usa [ con le etichette di accessibilità localizzate tramite .

Pitfalls comune e come evitare di loro

  • Traduzioni di errore[[] – Usa ] con un parametro ] per fornire un fallback inglese.
  • Il layout codificato con Hard[[] – Evitare larghezze fisse.
  • Ignorando regole plurali[ – Usa sempre .stringsdict per stringhe pluralizzabili.
  • Forgetting locale per data/numero di parsing[ – Quando si analizza l'ingresso dell'utente, utilizzare un locale fisso come en US POSIX per lo storage interno.
  • Non testare su dispositivi reali[[] – Il commutatore di lingua simulatore è affidabile ma il test di dispositivo espone comportamenti specifici della regione come il calendario, la zona di tempo e la tastiera.
  • Overlooking accessty[[] – VoiceOver parla stringhe localizzate. Assicurare che le etichette di accessibilità siano localizzate e usate in modo appropriato.

Risorse esterne per una comprensione più profonda

  • Guida di internazionalizzazione e localizzazione di Apple[[[] – Documentazione ufficiale che copre tutto dai file di stringhe al supporto destro a sinistra Apple Internationalization]
  • L'articolo NSLocalizedString di NSHipster[ – Punte pratiche e caratteristiche API meno conosciute NSHipster su NSLocalizedString]
  • L’internazionalizzazione di Objc.io[ – Immersione profonda in .stringsdict e pluralizzazione. Objc.io Internazionalizzazione

Conclusioni

L'implementazione di supporto multilingua in iOS è più che traduzione: coinvolge una pianificazione attenta di stringhe, layout, formati e convenzioni culturali. Sfruttando gli strumenti di localizzazione incorporati di Apple -Base Internationalization, , , e Auto Layout - è possibile creare un'applicazione che si sente a casa in qualsiasi lingua.