Un buon processo di internazionalizzazione va preventivato nella fase iniziale del ciclo di vita del software. A tal proposito, decideremo da subito quale sarà la lingua nativa del nostro programma, quindi, entreremo nella home sviluppatori, scheda Principale e assegneremo alla nostra applicazione la lingua nativa desiderata. Nel nostro caso sceglieremo Italiano.
Contraddicendo quanto detto sopra, in questo articolo, per fini didattici, tenteremo di rendere internazionalizzato il software già scritto nel capitolo precedente. Ovvero cercheremo gli output della nostra applicazione che sono nella nostra lingua nativa (italiano) e li internazionalizzeremo. Per motivi che a breve saranno chiari, lo script più semplice da cui iniziare il processo di internazionalizzazione è scegliRegalo.php. Cercheremo quindi di individuare tra le varie parti dello script quelle che necessitano una differente rappresentazione per le varie lingue. Siamo fortunati in quanto nello script c'è quasi solo codice e le uniche frasi scritte in linguaggio umano, più precisamente in italiano, sono:
- "Regalo del giorno" - il nome dell'applicazione
- "Ora scegli che regalo desideri inviare:" - una breve spiegazione su cosa fare
- "Avanti" - l'etichetta del bottone del form
Le tre righe di codice che hanno generato le tre frasi precedenti sono:
// ...
echo "<h2><fb:application-name linked='false'/></h2>";
echo "<h4>Ora scegli che regalo desideri inviare:</h4>";
// ...
echo "<input type='submit' value='Avanti' />";
// ...
A questo punto quello che dobbiamo fare è comunicare a Facebook che queste frasi devono essere internazionalizzate. Per internazionalizzare un testo semplice, non dobbiamo fare altro che racchiuderlo all'interno di un tag adatto allo scopo. Tale tag si chiama <fb:intl>
. Riscriveremo dunque la seconda riga:
// Frase non-internazionalizzata
echo "<h4>Ora scegli che regalo desideri inviare:</h4><br />";
// Frase correttamente internazionalizzata
echo "<h4><fb:intl desc="Messaggio di istruzioni in scegliRegalo.php">Ora scegli che regalo desideri inviare:</fb:intl></h4><br />";
Sebbene l'operazione è molto semplice si possono già dare dei consigli interessanti. Il primo è quello di lasciare la formattazione al di fuori del tag <fb:intl>
. I traduttori non devono poter gestire la formattazione, quindi i tag <h4>
e <br />
non saranno inclusi nel tag di internazionalizzazione. Il secondo riguarda la punteggiatura, che, invece, va inserita all'interno del tag <fb:intl>
. Sebbene può sembrare stupido, anche la punteggiatura va internazionalizzata, si pensi al punto interrogativo capovolto degli spagnoli.
Terzo e ultimo consiglio: utilizzare sempre l'attributo desc per meglio contestualizzare le frasi. Quando ci troveremo ad avere centinaia di frasi è importante sapere dove appare quella frase e in che contesto è usata. Salviamo le modifiche ed eseguiamo lo script. Quando una stringa racchiusa all'interno del tag <fb:intl>
viene eseguita per la prima volta essa è importata in Facebook e sarà quindi possibile localizzarla con pochissimo sforzo in una delle varie lingue disponibili.
Colleghiamoci alla home sviluppatori e apriamo la scheda riguardante l'applicazione a cui stiamo lavorando, da qui apriamo il link Traduzioni dove sarà possibile visualizzare tutte le lingue in cui possiamo localizzarla.
Accanto ad ogni lingua c'è una checkbox, spuntandola ogni utente che ha installato sia l'applicazione Traduzioni, sia la nostra applicazione può collaborare al processo di localizzazione. Se tale campo non viene spuntato l'unico ad occuparsi delle traduzioni è colui che ha registrato l'applicazione su Facebook, ovvero l'amministratore. Tramite il link Gestisci costui può nominare nuovi traduttori.
Supponiamo ora di voler tradurre la nostra applicazione in inglese, cliccheremo su English (UK) per visualizzare tutte le frasi che possiamo localizzare.
Accanto ad ogni lingua c'è una checkbox, spuntandola ogni utente che ha installato sia l'applicazione Traduzioni, sia la nostra applicazione può collaborare al processo di localizzazione. Se tale campo non viene spuntato l'unico ad occuparsi delle traduzioni è colui che ha registrato l'applicazione su Facebook, ovvero l'amministratore. Tramite il link Gestisci costui può nominare nuovi traduttori.
Come mostrato in figura, è possibile visualizzare tutte le frasi internazionalizzate pronte per la localizzazione. Tutto quello che dovremo fare sarà cliccare la colonna centrale Lingua in corrispondenza della frase italiana da tradurre e inserire il corrispettivo testo inglese (nell'immagine siamo pronti per inserire la traduzione inglese della prima frase).
Per quanto detto sino ad ora, ci aspetteremo di trovare in bacheca soltanto la frase Ora scegli che regalo desideri inviare: e invece compare anche la frase Regalo del giorno. Questo accade perché, insieme alle frasi che abbiamo internazionalizzato col tag <fb:intl>
, altri elementi come il nome dell'applicazione, la sua descrizione, le informazioni sugli sviluppatori e altro ancora verrà internazionalizzato automaticamente.
Grazie all'internazionalizzazione automatica di questi elementi, quindi, possiamo lasciare il tag <fb:application-name>
così com'è, il suo contenuto sarà comunque nella bacheca traduzioni e da lì potremo effettuarne direttamente la localizzazione.
Ora l'unica cosa non ancora localizzata è la parola Avanti, presente sul bottone di conferma. Questo testo è scritto come contenuto dell'attributo value, ragion per cui non possiamo tradurlo racchiudendolo semplicemente all'interno del tag <fb:intl>
, in quanto non verrebbe eseguito. Faremo quindi in modo di riscrivere la parola "Avanti" come se non fosse un valore di un attributo ma il corpo di un tag. Per far questo utilizzeremo i tag <fb:tag>
ed <fb:tag-attribute>
:
// TAG input con testo non internazionalizzabile
echo "<input type='submit' value='Avanti' />";
// TAG input con testo internazionalizzabile
echo "<fb:tag name='input'>";
echo "<fb:tag-attribute name='type'>submit</fb:tag-attribute>";
echo "<fb:tag-attribute name='value'>";
echo "<fb:intl>Avanti</fb:intl>";
echo "</fb:tag-attribute>";
echo "</fb:tag>";
Sebbene possa sembrare macchinoso, questo è uno di quei casi in cui, un esempio vale più di tante parole. Adesso la parola "Avanti" non è più contenuta in un attributo e quindi può essere internazionalizzata correttamente utilizzando il tag <fb:intl>. Rieseguiremo lo script e nel giro di qualche minuto la parola comparirà in bacheca traduzioni pronta per essere localizzata.
Nella prossima lezione saranno introdotti i token per dare maggiore flessibilità alle nostre traduzioni.