Era un po’ che volevo segnalarlo, visto che WP Bannerize sta per raggiungere quota 10.000 Download! Ma il tempo – ultimamente – è davvero tiranno!

Era un po’ che volevo segnalarlo, visto che WP Bannerize sta per raggiungere quota 10.000 Download! Ma il tempo – ultimamente – è davvero tiranno!

Dopo aver illustrato come localizzare le nostre stringhe in Xcode, vediamo adesso quanto risulta semplice – applicando la medesima tecnica – localizzare immagini e viste/interfacce realizzate con Interface Builder.
Il processo, come accennato, è il medesimo; se abbiamo un’immagine già inserita nelle nostre risorse, o ne inseriamo una nuova, e vogliamo “localizzarla” – cioè gestire due o più immagini in base alle lingue supportate – basterà cliccare con il tasto destro sull’immagine (Adium.png in questo esempio) e selezionare Get Info:

Clicchiamo Make File Localizable in basso a sinistra.

Clicchiamo su Add Localization e inseriamo Italian:

In modo da ottenere:

La nostra immagine viene spostata (fisicamente, una delle rare volte in cui quello che accade nell’alberatura Xcode si riflette sul filesystem) sotto le cartelle virtuali English.lproj e Italian.lproj esattamente come accadeva con il testo:

A questo punto ognuna delle cartelle English.lproj e Italian.lproj contiene una stessa versione dell’immagine. Questa immagine è manipolabile all’interno di Interface Builder, dove ne vedremo – per default – la versione inglese.
Arrivati a questo punto, basta sovrascrivere uno (o entrambi i file Adium.png) per ottenere una localizzazione delle immagini “lampo”.
Anche le interfacce costruite con Interface Builder possono essere localizzate nella loro interezza, quando lo si ritiene necessario. Il procedimento è identico a quello svolto con le risorse grafiche: aggiungiamo un ViewController (ad esempio infoViewController) con interfaccia XIB, lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano:

Cliccando su English o su Italian si aprirà Interface Builder! Questa volta, sul filesystem, noteremo che sono state create due cartelle (English.lproj e Italian.lproj) all’interno della classica cartella Classes. Entrambe avranno il loro file infoViewController.xib. La comodità, in questo, risolta evidente nel codice; quando andremo ad istanziare il nostro controller si avrà un codice “pulito” di questo tipo:
1 2 | InfoViewController *info = [InfoViewController alloc]; [self.view addSubview:info.view]; |
Come vedete non c’è traccia di nessuna dichiarazione relativa alla localizzazione, totalmente gestita da sistema. Le due interfacce, ovviamente, possono essere completamente differenti, in quanto risultano a tutti gli effetti come due file XIB separati.
In Xcode è possibile “spezzare” un stringa su più righe inserendo a alla fine un backslash “\”. Questa caratteristica può risultare utilissima quando, ad esempio, vogliamo inserire del testo HTML in un controllo UIWebView:
Proprio pochi giorni fa avevo scritto un Post sulle traduzioni automatiche, affrontando la questione dei siti e/o blog multilingua dal mio punto di vista di sviluppatore. Ho ricevuto, infatti, alcuni commenti interessanti che sottolineano i limiti delle tecnologie attuali. In effetti i sistemi che permettono di tradurre “al volo” le nostre pagine Web, come Google Translate, non producono assolutamente un risultato paragonabile a quello umano, a chi – insomma – di mestiere svolge la professione di traduttore. Inoltre non esiste una specializzazione di questi sistemi pubblici: tradurre un testo scientifico in inglese e diverso da tradurre un romanzo in inglese o un manuale informatico e via dicendo. Questo, con una traduzione “umana” sappiamo che non accade e i traduttori professionisto sono proprio specializzati in ben determinati ambiti.
Tuttavia, come ho risposto (in privato essendo la mail corposa) a Leonardo, ci sono casi in cui un traduttore automatico, soprattutto con l’avvento dei Blog, permette di abbattere tempi e costi consentendo, nei limiti dei sistemi di traduzione automatica attuali, quantomeno di comprendere nella propria lingua ciò che è scritto sul Web.
Proprio in questi giorni Google Translate ha aggiornato il suo sistema di traduzione online, aggiugendo il supporto per molte, se non tutte, le lingue del pianeta: dal cinese, al greco al giapponese e molte altre. Anche l’interfaccia si è rinnovata proponedo dei menu a tendina per rendere più semplice la scelta della lingua sorgente e quella di “traduzione”.
Come sviluppatore di applicazioni stand-alone, e soprattutto come sviluppatore web, mi è capitato spesso di affrontare il problema della localizzazione e del supporto di più “lingue”. La maggioranza delle applicazioni Desktop hanno un grosso vantaggio rispetto ad un sito web e in particolare un blog. Esistono oggi moltissime applicazioni, anche gratuite e/o open-source, che supportano tranquillamente svariate lingue, comprese quelle completamente indecifrabili, come il cinese, il cirillico, etc… Tutto ciò dimostra la presenza di strumenti software, già pronti, in grado di offrire un’ambiente specializzato nella gestione dei differenti linguaggi. Gli stessi sistemi operativi, infatti, da Windows a MacOS, arrivano sulle nostre scrivanie forniti con un buon supporto di localizzazione, che non si riduce alla mera sostituizione dei “caratteri”, ma opera anche sulla direzione della scrittura (vedi arabo o cinese – da destra a sinistra o verticale). I sistemi operativi sono in grado di fornire quel minimo di strato Kernel su cui poi si appoggiano i vari tool presenti nel mercato.
La situazione degli applicativi Desktop e ben diversa dal Web, come vedremo più avanti. Le applicazioni che installiamo sul nostro computer, infatti, godono di una serie di privilegi assenti in uno scenario “aperto” come lo è Internet:
Ultimi Commenti
Giovambattista Fazioli: @ale: Come indicato @Kevin vedi sul repo di GitHub: https://github.com/gfazioli/Ch roma-Key
Giovambattista Fazioli: @Kevin: See https://github.com/gfazioli/Ch roma-Key
Kevin: Very nice example – would like to see the .fla too!
Ludovica: Ciao! Ti spiego il mio dubbio. Quando scrivo un post non inserisco immagini nell’articolo (se così...
Marco: ciao @Giovambattista Fazioli, grazie per tutte le delucidazioni di questa ottima guida. Avrei un quesito da...