Ecco qui il secondo tutorial promesso! In questo articolo spiegherò come potete fare per rendere le vostre applicazioni iPhone localizzate, ovvero adattate alla lingua di chi le usa (sempre che siate bravi traduttori si intende, mica come me XD).
Cominciamo subito col creare un’applicazione view based.
Il comando NSLocalizedString non fa altro che cercare in delle tabelle “chiave-valore” che altro non sono che dei file di testo con estensione .strings. Più precisamente questa istruzione cercherà la chiave solamente nelle tabelle chiamate “Localizable.string” ovvero nella tabella di default per ogni lingua.
Visto che queste tabelle non sono presenti nelle Risorse della nostra applicazione andiamo a crearle. Facciamo click secondario (è brutto dire tasto destro con un mac) sul gruppo Resources e scegliamo Add -> New File…
Nella finestra che apparirà scegliamo dal gruppo Resource di MacOS X “Strings File”.

Quando vi verrà chiesto come salvarlo chiamatelo “Localizable.strings”. Create poi nello stesso modo un secondo file che chiameremo invece “Uppercase.strings”.
Fatte queste operazioni possiamo cominciare ad aggiungere una coppia “chiave-valore” in ognuno di questi due file. Per esempio mettendo
"HELLO WORLD" = "Hello world";
nel primo e
"HELLO WORLD" = "HELLO WORLD";
nel secondo.
Ora dobbiamo però localizzare in un’altra lingua (per esempio in italiano) queste due tabelle. Per far questo facciamo clic secondario sul file “Localizable.strings” e questa volta selezioniamo Get Info.
Ci apparirà una nuova finestra e nella tab General possiamo vedere che il file non è attualmente localizzato in nessuna lingua, ma possiamo renderlo localizzabile premendo il relativo bottone in basso a sinistra.

Premendolo noteremo che il contenuto della tab General verrà modificato ed ora questo file è localizzato solamente in lingua inglese. Per aggiungere l’italiano premiamo Add Localization e nel campo di testo che apparirà immettiamo la parola “Italian”.

Fatto questo possiamo chiudere la finestra delle Info.
Eseguiamo la stessa operazione anche per l’altro file Uppercase.string.
Se avete prestato attenzione, avrete forse notato che i due file .strings sono leggermente cambiati, ora infatti è presente in “Group & Files” un triangolino esattamente come i gruppi e le cartelle. Se lo espandete noterete le due lingue in cui è localizzato il file: English e Italian.
Localizziamo in italiano i due file Italian come segue, mettendo
"HELLO WORLD" = "Ciao mondo";
nel primo e
"HELLO WORLD" = "CIAO MONDO";
nel secondo.
Bene. Abbiamo appena creato le nostre quattro tabelle (2×2 lingue). Ora non ci resta che vedere come richiamare i valori associati alla chiave nel nostro codice.
Apriamo il file NomeProgettoViewController.m e modifichiamo la loadVied come segue:
- (void)loadView {
[super loadView];
UILabel *localizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 30)] autorelease];
localizedLabel.text = NSLocalizedString(@"HELLO WORLD", @"");
[self.view addSubview:localizedLabel];
localizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 80, 300, 30)] autorelease];
localizedLabel.text = NSLocalizedString(@"DevApp", @"");
[self.view addSubview:localizedLabel];
localizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 150, 300, 30)] autorelease];
localizedLabel.text = NSLocalizedStringFromTable(@"HELLO WORLD", @"Uppercase", @"");
[self.view addSubview:localizedLabel];
}
In ognuno dei tre blocchi del codice sopra riportato creiamo una label che visualizzeremo sullo schermo del terminale. Ora quello che importa a noi è la seconda rigadi ogni blocco: esatto la NSLocalizedString!
Spieghiamo bene i risultati che ci aspettiamo da ognuna:
- La prima NSLocalizedString visualizzail valore associato alla chiave “HELLO WORLD” presente nella tabella Localizable.strings. Visualizzerà quindi “Ciao mondo” se la lingua del device è settata su italiano, “Hello World” altrimenti.
- In questo caso cerchiamo una chiave che non è presente nella tabella di default. In questi casi non viene generato nessun errore, semplicemente il sistema adotta la seguente convenzione: chiave = valore. Visualizzeremo quindi all’interno della chiave la parola “DevApp”.
- Come ultima abbiamo invece una particolare tipo di NSLocalizedString che ci permette di prelevare i valori da tabelle diverse da quelle di default. In questo caso dalla tabella Uppercase. Visualizzeremo quindi “CIAO MONDO” se la lingua del device è settata su italiano, “HELLO WORLD” altrimenti.
Con questo credo di aver terminato la preview sulla NSLocalizedString. In ogni caso, se avete dei problemi, potete scaricare l’archivio con il codice dalla repository su Google Code.
6 Responses to “T#069 – Localizzare applicazioni iPhone tramite NSLocalizedString”
1 Settembre 2010
Tweets that mention Localizzare applicazioni iPhone tramite NSLocalizedString | devAPP -- Topsy.com[…] This post was mentioned on Twitter by Rynox and iPadWorld.it, devAPP. devAPP said: Localizzare applicazioni iPhone tramite NSLocalizedString http://bit.ly/dpn7BL […]
6 Settembre 2010
fabiosoftciao!
vorrei fare una richiesta…se è possibile…
vorrei sapere come manipolare le immagini…del tipo da una UIImage modificare i pixel…il contrastro…luminosità… o semplicemente modificare pixel per pixel.
Grazie
21 Gennaio 2011
CarloHo seguito il Tutorial ed è perfetto. Vorrei però sapere come mettere sotto svn il gruppo Localizable.strings.
Grazie
27 Gennaio 2011
Luca Di FrancoSe hai la svn configurata come la mia quando hai un file che non è sul repository questo ti viene segnalato con un “?”. Per aggiungerlo al repository ti basta un semplice tasto destro sul file e scegliere “Add to repository”
2 Febbraio 2011
PaoloE’ possibile far cambiare la lingua del applicazione tramite le Localizable.strings selezionandola all’intetrno della stessa in una view impostazioni ad esempio? altri metodi… Grazie per l’aiuto
16 Novembre 2012
DavideNel caso io usi nella mia app delle stringhe (testo per textView e titolo dei bottoni) da localizzare che sono prelevate da un file data.plist, come posso fare?