Come internazionalizzare un’applicazione OS X/iOS
Per disporre del più ampio bacino di utenti possibile, e quindi per amplificare i profitti, tutti noi sviluppatori ci dobbiamo porre il problema di localizzare in più lingue le nostre applicazioni iOS o OS X. Gli utenti infatti non comprano e non usano un’applicazione la cui interfaccia utente è scritta in una lingua che non comprendono.
In questo articolo vedremo come predisporre al meglio un'applicazione per tradurla in più lingue.
Passo 1: Inserire ogni stringa hard-coded nella macro NSLocalizedString
Come prima cosa, dobbiamo individuare tutte le stringhe hard-coded e “marcarle” in modo opportuno. Per farlo, dobbiamo trasformare ogni istruzione di questo tipo:
NSString *string = @"This is a sample string";
in questo modo:
NSString *string = NSLocalizedString( @"This is a sample string", @"A comment for the translator");
NSLocalizedString
è una macro che fa parte del Foundation Framework. Essa accetta due parametri: il primo è la stringa che deve essere tradotta, scritta nella lingua neutrale (tipicamente inglese). Il secondo è un commento, ovvero un “contesto” che aiuterà il traduttore a capire dove la stringa è utilizzata. Quest'ultimo parametro è opzionale, pertanto nulla vieta di lasciarlo semplicemente a nil
, ma è buona norma valorizzarlo sempre.
Quanto detto deve essere ovviamente fatto per tutte le stringhe che possono essere visualizzate dall'utente.
Passo 2: Creare un file Localizable.strings
per ogni linguaggio
Localizable.strings
è il nome predefinito che viene usato per il file di risorse che contiene le stringhe localizzate in una particolare lingua.
Per creare un file Localizable.strings
in Xcode occorre:
- Cliccare su File > New > File...
- Selezionare “Resource” a sinistra
- Selezionare “Strings File” a destra
- Assegnare al file il nome “
Localizable.strings
” - Selezionare il file nel Project Navigator di Xcode
- Cambiare l'encoding del testo a “Unicode (UTF-16)” nel pannello Utilities
- Premere sul bottone “Make localized...” nel pannello Utilities
- Selezionare “English” nella nuova finestra
- Cliccare sul “+” nella sezione Localization e selezionare i linguaggi che vogliamo supportare
A questo punto Xcode ha creato per noi un file vuoto per ciascun linguaggio che abbiamo aggiunto:

Passo 3: Estrarre le stringhe da tradurre
Per estrarre le stringhe da tradurre possiamo usare il tool da linea di comando chiamato genstrings
. Purtroppo però è piuttosto scomodo e, soprattutto, non è in grado di fare il “merge” delle stringhe. Per ovviare a questo problema abbiamo creato una fantastica applicazione che semplifica notevolmente il processo di estrazione delle stringhe. Si chiama Localizable Strings Merge ed è disponibile nel Mac App Store.
Per estrarre le stringhe da tradurre occorre:
- Trascinare tutti i file sorgente (o direttamente la cartella che contiene il progetto) nella parte di sinistra di Localizable Strings Merge:
- Trascinare tutti i file
Localizable.strings
files (o direttamente la cartella che contiene il progetto) nella parte di destra di Localizable Strings Merge:
- Premere sul bottone “Merge Stringhe”.
A questo punto abbiamo generato e opportunamente riempito i file Localizable.string
. Non ci resta che inserire le traduzioni.
Passo 4: Tradurre le stringhe
Ora dobbiamo tradurre ciascun file Localizable.string
nel linguaggio a cui si riferisce.
Supponiamo di aprire quello relativo all'italiano. Troveremo molte linee fatte così:
/* A comment for the translator */ "This is a sample string" = "This is a sample string";
Come possiamo vedere, in alto c'è il commento che abbiamo inserito come secondo parametro nella macro NSLocalizedString
. In basso invece troviamo delle coppie chiave/valore inserite all'interno di doppi apici seguite da un punto e virgola. La chiave deve essere lasciata invariata, mentre il valore deve essere tradotto:
/* A comment for the translator */ "This is a sample string" = "Questa è una stringa di esempio";
Fatto! Ora abbiamo un'applicazione multilingua!