Salve a tutti mi chiamo Vanni ( nickname Ragazzetto ) e sono lo sviluppatore dell applicazione per iPhone iEcology che attualmente è in fase di revisione !
Con questo articolo volevo illustrarvi un modo piuttosto semplice per localizzare le vostra applicazione in altre lingue !
A parer mio la localizzazione di un’applicazione in più lingue acquista un valore molto importante nel caso vogliate pubblicarla in AppStore , ogni utente apprezzerà il fatto di poter usare l’applicazione nella propria lingua e quindi, considerando che il 58% degli iPhone del mondo sono nel Nordamerica ( statistica AdMob di luglio 2009 ), almeno la localizzazione in inglese la reputo praticamente indispensabile !
Nel mio caso tutto lo sviluppo, per comodità, è stato fatto in italiano per poi aggiungere una seconda lingua: l’ inglese.
Cominciamo con il localizzare i file di interfaccia grafica .xib:
clicchiamo con il tasto destro del mouse sul file _ViewController.xib e dal menù a tendina selezioniamo Get Info:

Dalla finestra info, all’interno del tab “ General “, clicchiamo sul tasto in basso a sinistra “ make File Localizable “

Controlliamo che sia spuntato il Target della nostra applicazione e torniamo quindi nel Tab General.

All’interno di questa finestra Clicchiamo sul tasto in basso a sinistra “ Add Localization “

Inseriamo il nome della nostra localizzazione e clicchimo su Add.

Ci ritroveremo quindi le nostre due localizzazioni. Chiudendo la finestra noteremo che Xcode avrà creato una copia del nostro file .xib

Adesso i 2 file sono completamente identici , toccherà a noi variare i testi al loro interno per adattarli alla lingua impostata.

In questo modo Xcode utilizzerà il file provalocalizzazione_ViewController.xib ( English) di default ogni volta che troverà impostata all’interno del nostro iPhone ( o del simulatore ) una lingua diversa dall’italiano mentre quando troverà impostata la lingua “Italiano” utilizzerà il file provalocalizzazione_ViewController.xib (Italian).
Ci tengo a sottolineare che la localizzazione è un aspetto che va eseguito nelle ultime fasi di tutto il progetto , nel nostro caso, infatti, i file per l’interfaccia grafica sono solo 2 e ogni modifica all’interfaccia effettuata da ora in avanti va eseguita su entrambi i file. Questo può risultare molto più scomodo se applicato a più file. Considerate inoltre che a causa di una semplice svista, potreste tralasciare qualche modifica in un file o in un altro, cosa che porterebbe sicuramente a qualche malfunzionamento indesiderato.
A questo punto dobbiamo localizzare ogni testo che viene visualizzato attraverso il codice , ad esempio, quello presente in un alertView.
Vediamo quindi questo piccolo esempio che, tramite queste poche righe di codice, ci permette di intercettare la lingua impostata dall’utente e di conseguenza mostrare a video l’alertView nella lingua desiderata:
-(IBAction)alert1:(id)sender{
// codice per intercettare la lingua impostata dall utente
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@"Codice lingua %@", currentLanguage);
if( [currentLanguage isEqualToString:@"it"] ) {
// codice in italiano !
UIAlertView * alertView1 = [[UIAlertView alloc] initWithTitle:@"Titolo in Italiano " message:@"Testo in Italiano" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alertView1 show];
[alertView1 release];
}
else {
// codice in altra lingua !
UIAlertView * alertView1 = [[UIAlertView alloc] initWithTitle:@"Title in English " message:@"Text in English " delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alertView1 show];
[alertView1 release];
}
Con le prime 4 righe all’interno dell’ IBAction non faremo altro che determinare la lingua impostata dall’utente, mentre con il successivo ciclo di “If else” assegneremo un’azione nel caso la lingua impostata sia l’italiano:
if( [currentLanguage isEqualToString:@"it"] ){
}
ed un altra azione negli altri casi ( ovvero una lingua diversa dall italiano )
else {
}
Nel caso decidiate di inserire localizzazioni in più lingue i cicli di if else saranno più lunghi ma avranno lo stesso concetto! (o eventualmente potrete usare altri sistemi, ad esempio uno switch)
Il risultato di questa nostra prova sarà quello mostrato in figura qui sotto:

Noterete la lingua impostata nello spazio riservato al gestore telefonico nella barra in alto a sinistra !
Per verificare il diverso funzionamento ci basterà dopo il “Build and Go” modificare le impostazioni all’interno del nostro iPhone / Simulatore:
Impostazioni > Generali > Internazionale > Lingua
Sperando di essere stato chiaro ed esauriente vi saluto
Ciao
Vanni
AGGIORNAMENTO
In riferimento al commento di dylandogg volevo sottolineare e precisare che con la stessa tecnica utilizzata per localizzare i file .xib è possibile localizzare anche solo le immagini.
Riepilogando:
Tasto destro > get info > make file localizable >add localization > lingua ( ad esempio Italian ) .
Analogamente al caso precedente adesso avremo il nostro file immagine perfettamente sdoppiato in due cartelle del nostro progetto English.lproj e Italian.lproj .
In questo caso ci basterà sovrascrivere il file che ci interessa far variare nelle diverse localizzazioni ed il gioco è fatto !










21 Responses to “T#034 – Come localizzare le nostre applicazioni iPhone [aggiornato]”
15 Aprile 2010
NormAppsUtilissima, grazie!
15 Aprile 2010
iCGdevSecondo me si fa molto prima con NSLocalizedString
15 Aprile 2010
RagazzettoPuò essere , io nel mio caso ho scelto di seguire questa linea !
X NormApps
prego 🙂
15 Aprile 2010
Giovambattista FazioliVedere anche:
http://www.appleside.it/develop/tecniche-per-localizzare-applicazioni-apple-iphone/
http://www.appleside.it/develop/localizzare-le-applicazioni-apple-iphone-in-modo-rapido/
http://www.undolog.com/2010/02/23/come-localizzare-immagini-e-viste-di-interface-builder/
15 Aprile 2010
alexiacoCiao, volevo segnalare a tutti gli sviluppatori che se cercano qualcuno in grado di localizzare la loro app e di aiutarli nel marketing in Francese, Spagnolo e Tedesco mi possono contattare 🙂 Ho tradotto e localizzato diversi siti e applicazioni anche grandi (wikio, jesigne, waze , photocollage) e posso anche seguire l’assistenza (mail etc). se il progetto mi piace lo posso anche fare gratis altrimenti possiamo metterci d’accordo in un altro modo. mandate un dm su twitter se siete interessati 😉 Alex
15 Aprile 2010
dylandoggciao, innanzitutto complimenti era il tutorial che cercavo!! ho un problema però.. nel mio caso devo localizzare solo dei file .xib nei quali cambio l’immagine a seconda della lingua. localizzo il file come da guida ma cambiando lingua nel simulatore rimane sempre l’italiano. dove sbaglio?
15 Aprile 2010
dylandoggInserisci qui il tuo commento
15 Aprile 2010
RagazzettoBravo dylandogg !
16 Aprile 2010
1° Articolo ! « Ragazzetto-project[…] che oggi è stato pubblicato il mio primo articolo di sviluppo iPhone […]
16 Aprile 2010
RagazzettoX dylandogg
spero ti possa far piacere e ti possa essere utile questo ultimo aggiornamento !
17 Aprile 2010
RagazzettoGrazie Alex per l’ info
la mia app è stata approvata oggi ed è localizzata in inglese e italiano , magari per i prossimi aggiornamenti mi potrebbe interessare una collaborazione !
17 Aprile 2010
gigiCiao ragazzi, complimenti per l’articolo.
Ho una domanda.. Supponete che debba utilizzare dei campioni audio in varie lingue..Mi sembra di capire che All’interno della applicazione dovrei mettere tutti i campioni e poi determinare in base alla lingua dell’utente quale campione presentare .. Il mio problema e’ che ogni set di campioni mi occupa circa 5 megabyte per ogni lingua.. Per cui se metto 10 lingue sono gia’ 50 mega .. Un utente italiano o inglese dovrebbe scaricarsi comunque 50 mega invece di 5
C’e’ un rimedio?
Grazie.
18 Aprile 2010
RagazzettoCiao Gigi
uno dei problemi della localizzazione e il fatto di dover duplicare in svariate copie lo stesso file per “accontentare” più lingue possibile e da un lato fa piacere al cliente , dall’ altro incrementa vertiginosamente la pesantezza dell’ app !
Non conosco l’ importanza dell’ audio nella tua App ma pensa comunque che grandi case come Gameloft, che produce giochi quasi sempre localizzati in varie lingue , ovviano il problema lasciando i file audio in inglese e localizzano i sottotitoli e i messaggi a video ( ad esempio Avatar ), nel loro caso funziona , nel tuo no so !
In più mi era venuta in mente un idea ma non so se è realizzabile : potresti fare l’ App con audio in inglese ( che comunque è la lingua + diffusa ) e poi proporre sotto forma di download aggiuntivo ( tipo in App Purchase ) le altre lingue, in questo modo ogni utente potrebbe avere la propria lingua senza avere un file di 50 mega del quale 45 sono buttati via !
Sicuramente la realizzazione sarà + complessa ( specialmente nella gestione dell’ In App Purchase ) ma potrebbe essere una soluzione .
Spero di averti dato qualche idea !
1 Maggio 2010
gigiGrazie ragazzetto per la risposta.. La mia domanda e’ non si possono fare direttamente piu’ versioni della stessa applicazione in lingua diversa senza localizzazione intendo e pubblicare come stand alone?
Ho visto alcune soluzioni tipo questa..
12 Luglio 2010
crisquando provo a modificare i vari testi a seconda della lingua nei file *.xib (english) e *xib(Italian) questi rimangono invariati come nella versione senza localizzazione (SDK 4,0):
Ho seguito tutto passo passo e riprovato più volte ma il problema rimane, come posso fare.
23 Luglio 2010
fastanche a me rimane così, però ho provato a creare un nuovo progetto e funziona….come mai??
27 Ottobre 2010
GianlucaAnche io ho lo stesso problema…
12 Gennaio 2011
Riccardo Pietrucciè corretto utilizzare NSLocalizedString, secondo me non si tratta di “gusti”
26 Ottobre 2012
DavideServizio di traduzione di app per iPhone e iPad:
http://www.translated.net/it/tradurre-applicazioni-iphone
qui trovi info utili per decidere in quale lingue tradurre e quale processo seguire per tenere le tue apps aggiornate in tutte le lingue.
Puoi anche ottenere il preventivo gratuito per la traduzione dei testi in una o più lingue. Il processo è molto semplice: si invia il file di localizzazione in formato .strings, dopo la traduzione il file viene restituito tradotto pronto per essere embeddato nell’App.
8 Aprile 2014
Walterciao a tutti , la localizzazione del file xib funziona perfettamente
ho la necessità di localizzare un file plist , ho eseguito anche in questo caso tutte le operazioni ma non funziona dove sbaglio?
8 Aprile 2014
Walterrisolto
occorre utilizzare
pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName
invece di
pathForResource:(NSString *)name ofType:(NSString *)extension
scusate il disturbo
ciao