Per disporre del più ampio bacino di utenti possibile, e quindi per amplificare i profitti, tutti gli sviluppatori iPhone, iPad e Mac OS dovrebbero porsi il problema di localizzare in più lingue le proprie applicazioni. Gli utenti, infatti, difficilmente comprano e usano un’applicazione la cui interfaccia utente è scritta in una lingua che non comprendono.
La procedura standard per internazionalizzare un’applicazione si basa sul tool a linea di comando “genstrings” che analizza i file sorgente alla ricerca della macro “NSLocalizedString” e genera i file “Localizable.strings” che conterranno tutte le stringhe da tradurre. Questa procedura semplifica la creazione dei file per le traduzioni, ma ha alcune pesanti limitazioni; vediamo quali, e soprattutto analizziamo un’utility chiamata Localizable Strings Merge che ci farà letteralmente risparmiare ore di lavoro.

I limiti di genstrings
Genstrings è un tool a linea di comando: se per molti sviluppatori questo non rappresenta certo un problema, è sicuramente meno intuitivo e gradevole di un’applicazione dotata di un’interfaccia grafica semplice e elegante.
Ma il vero problema di genstrings è il fatto che non è in grado di fare il merge delle stringhe. Vediamo meglio che cosa significa e cosa implica.
Per internazionalizzare e localizzare un’applicazione iOS o Mac OS X normalmente si segue questo processo:

Il processo di traduzione spesso richiede diversi giorni, per questo tipicamente si procede in parallelo con la conclusione dello sviluppo e i relativi test. Come possiamo immaginare, durante questa fase è abbastanza comune che vengano raffinate alcune stringhe o che ne vengano aggiunte altre. Al termine diventa dunque necessaria un’operazione di merge dei termini tradotti e di quelli introdotti nel frattempo, un’operazione che anche nei casi più semplici, essendo da fare completamente a mano, diventa estremamente laboriosa e soggetta ad errori difficili da individuare.
Il problema del merge è particolarmente evidente nel caso di grandi team di sviluppo che si affidano ad altre società o a gruppi esterni per le traduzioni, ma accade anche in scenari molto più semplici, addirittura quando a far lo sviluppo e le traduzioni è sempre la stessa persona. Pensiamo ad esempio al caso in cui abbiamo già in vendita la versione 1.0 di un’applicazione, completa di traduzioni. Quando lavoriamo alla versione 2.0 non vogliamo doverla rifare da zero, ma giustamente ci vogliamo occupare solo delle differenze.
In questi frangenti entra in gioco Localizable Strings Merge, in vendita su Mac App Store a 2,99 € (3,99 $), un prezzo davvero contenuto considerato il tempo (e dunque i costi) che ci fa di risparmiare.
Introduzione a Localizable Strings Merge
Localizable Strings Merge sostanzialmente esegue la generazione dei file “Localizable.strings” a partire dai file sorgente (in pratica come “genstrings”, ma attraverso un’interfaccia grafica semplice ed elegante) e soprattutto il merge dei file tradotti o parzialmente tradotti.
L’interfaccia grafica è suddivisa in due sezioni: la parte sinistra è dedicata ai file sorgente dai quali “estrarre” le stringhe da tradurre, mentre la parte destra è il contenitore per i file eventualmente già tradotti che devono essere aggiornati con le informazioni che provengono dalla parte sinistra.

Possiamo stare tranquilli: lo stile chiaro e essenziale ci guiderà nel processo con scelte che eliminano ogni ambiguità. Ma vediamolo nei dettagli.
Creazione dei file Localizable.strings
Per generare i file “Localizable.strings” da inviare ai traduttori è sufficiente trascinare nella parte sinistra, tramite “drag & drop”, tutti i file sorgente. In alternativa si può trascinare direttamente la cartella che contiene il progetto: in tal caso verranno filtrati in automatico tutti e soli i file sorgente (su cui eventualmente si possono operare dei raffinamenti, eliminando i file non necessari).

A questo punto il pulsante “Genera Stringhe” diventa attivo (prima era disabilitato). Cliccandoci sopra verrà avviata l’elaborazione, al termine della quale ci verrà chiesto dove salvare il file “Localizable.strings” generato da zero e contenente tutte le stringhe da tradurre. Una copia di questo file dovrà essere poi inviata a ciascun traduttore.
Merge dei file tradotti
Quando i traduttori ci avranno inviato i file completi di traduzioni o se nel frattempo abbiamo modificato qualcosa, dovremo eseguire l’operazione di “merge” che unirà le stringhe già tradotte con tutte quelle eventualmente aggiunte nel frattempo.
Per eseguire il merge dovremo trascinare nella parte sinistra, sempre tramite “drag & drop”, tutti i file sorgente, esattamente come abbiamo fatto al punto precedente.
A questo punto, però, al posto di cliccare sul pulsante “Genera Stringhe”, trascineremo nella parte di destra, (via “drag & drop”), i file “Localizable.strings”, uno per ogni lingua, ricevuti dai traduttori. Il pulsante sotto cambierà quindi nome in “Merge Stringhe”:

Un semplice click e i file “Localizable.strings” verranno automaticamente aggiornati unendo le stringhe aggiunte nel frattempo ed eliminando quelle tradotte, ma eventualmente non più presenti nei file sorgente. Il nostro consiglio è di lasciare sempre selezionata l’opzione “Crea copia di backup prima del merge”, in tal modo, prima di sovrascrivere un file Localizable.strings, ne viene creata una copia di sicurezza con lo stesso nome a cui viene aggiunta l’estensione .backup.
A questo punto, se andiamo ad aprire con il nostro editor di testo preferito i nuovi file “Localizable.strings” vedremo al loro interno le nuove stringhe marcate con il tag NEW:

Se una stringa per qualche motivo è stata rimossa dai sorgenti viene automaticamente eliminata anche dai file tradotti. Questo è molto utile perchè garantisce che tutte le stringhe presenti nei file “Localizable.strings” siano usate nell’applicazione.
Conclusione
Localizable Strings Merge non solo ci semplifica e velocizza le operazioni di unione delle traduzioni, ma ci garantisce che non manchi niente, che i file di localizzazione siano ben formattati e in ordine e, cosa più importante, ci permette di risparmiare tempo e costi preziosi.










5 Responses to “T#091 – Localizzare le proprie applicazioni iOS e Mac OS X con Localizable Strings Merge”
7 Aprile 2011
Andrea96tra quanto il prossimo appuntemento del corso compkleto di C#6????
7 Aprile 2011
The RiderOttimo articolo!!
8 Aprile 2011
gianlucasaronima usando questa utility, nell’applicazione bisogna comunque creare delle
NSString *stringa = NSLocalizedString(@”STRINGA”, @””);
??
e poi io per esempio ho “it” e “en” con varie label non dichiarate nel codice quando ho aggiunto la seconda lingua si sono creati due .xib e ho modificato queste label da IB è giusto? se ora volessi aggiungere “fr” si creerebbe un altro xib che dovrò modificare da IB?
Grazie
11 Aprile 2011
francescoho provato ad acquistare, ma mi dà questo errore
“Impossibile installare Localizable Strings Merge su questo computer, perché è richiesto un processore Intel a 64 bit.”
13 Aprile 2011
Valerio@Francesco: proprio ieri è uscita la nuova versione 1.5 che supporta anche i processori a 32-bit. Se provi a riscaricarla ora dovrebbe funzionare anche sul tuo computer.