Zend_Translate

Penso che qualsiasi programmatore che punta in alto, nel corso dello sviluppo di un proprio sito o applicativo si sia posto il problema di un’interfaccia multilingue e le soluzioni nel settore non sono certo poche.
Anche per questo problema lo ZF offre una classe ad-hoc per i nostri siti che, insieme alla classe Date, Locale e Measure, compone un kit per l’internazionalizzazione a 360°: stiamo parlando della classe Zend_Translate.Anche questo componente offre una grande potenzialità e un’estrema facilità nell’utilizzo.

Il funzionamento è simile a quello di altre classi adibite allo stesso scopo: si crea un file per ogni lingua contenente le traduzioni con delle parole chiave, e a seconda della richiesta dell’utente si visualizzano le scritte adatte. Un primo fattore di superiorità si ha nella vasta scelta di tipi di file da cui attingere le informazioni.
Infatti è possibile usare file in formato:

  • PHP, sotto forma di Array
     return array(
    'messaggio1' => 'Buongiorno',
    'messaggio2' => 'Buonasera',
    'messaggio3' => 'Buonanotte');
  • CSV (.csv o .txt)
    messaggio1,"Buongiorno"
     messaggio2, "Buonasera"
     messaggio3, "Buonanotte"
  • TMX (qualcosa simile all’xml. Lo reputo il peggiore)
    <?xml version="1.0" ?>
    <!DOCTYPE tmx SYSTEM "tmx14.dtd">
    <tmx version="1.4">
     <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
     adminlang="it-IT" srclang="en-US" o-tmf="abc"
     creationtool="XYZTool" >
     </header>
     <body>
     <tu tuid='messaggio1'>
     <tuv xml:lang="it"><seg>Buongiorno</seg></tuv>
     <tuv xml:lang="en"><seg>Good Morning</seg></tuv>
     </tu>
     <tu tuid='messaggio2'>
     <tuv xml:lang="it"><seg>Buonasera</seg></tuv>
     <tuv xml:lang="en"><seg>Good Evening</seg></tuv>
     </tu>
     </body>
    </tmx>
  • Gettext (.mo) – il formato standard per le traduzioni in ambiente linux. Necessita di particolari editor
  • Ini – il più semplice e comodo
    ;Commento
    messaggio1="Buongiorno"
    messaggio2="Buonasera"
    messaggio3="Buonanotte"

Vista questa panoramica sui formati in cui è possibile salvare le vostre traduzioni, vediamo l’utilizzo della classe  e per farlo faremo riferimento a due file in formato Ini: it-IT.ini e en-US.ini.

Inizializziamo la nostra classe e passiamo al costruttore un array contenente le opzioni quali l’adapter, ovvero il tipo di formato che intendiamo utilizzare, il content, il file contenente le nostre traduzioni, e il locale in cui specifichiamo quale lingua stiamo passando.

<?php
require 'Zend/Translate.php';

$t = new Zend_Translate (
array(
'adapter' => 'Ini', //oppure 'Csv' || 'Array' || 'Gettext'
'content' => 'Lang/it-IT.ini',
'locale'  => 'it'
)
);

Per stampare la stringa tradotta basterà richiamare il metodo _() :

echo $t->_('messaggio1');

Potrebbe tornar utile il dover includere contemporaneamente due lingue. Anche per questa evenienza ZF ci assiste:

$t->addTranslation(
 array(
 'content' => 'Lang/en-US.ini',
 'locale' => 'en'
 )
);

E una volta dichiarata la seconda lingua, abbiamo un paio di modi per usarla: una impostando quella di default attraverso il metodo setLocale(), l’altra aggiungendo un secondo parametro al metodo _()

$t->setLocale("it");
echo $t->_("messaggio1"); //stampa 'Buongiorno'
$t->setLocale("en");
echo $t->("messaggio1"); //stampa 'Good Morning';

echo $t->_("messaggio1", "it"); //stampa 'Buongiorno'

Un metodo che può tornarci utile nei nostri programmi è isAvailable() che ci consente di determinare se è stata caricata o meno una determinata lingua.

if($t->isAvailable('fr'))
echo $t->_("messaggio1","fr");
else
echo $t->_("messaggio1", "it");

Simile a quello precedente, il metodo isTranslated ci dice se una certa stringa è tradotta o no. L’utilizzo è tale e quale a quello precedente:

if($t->isTranslated("messaggio1")) {
//...
}

E questa è la classe Zend_Translate, tralasciando qualche metodo più complesso e meno utilizzato. Per qualsiasi cosa vi rimando manuale inglese.



Ti è piaciuto l'articolo? Vota Ok oppure No. Grazie Mille!

Post Correlati:

Resta aggiornato abbonandoti al feed RSS 2.0. Puoi lasciare un commento oppure inviare un trackback dal tuo sito.

1 Commento »

 
  • Ricardo scrive:

    Senz’altro utile se si ha a disposizione il linguaggio del sito già tradotto nelle varie lingue, io non avevo questa possibilità e quindi ho fatto una via di mezzo tra questo sistema e l’autotraduzione di google, con discreti risultati direi.

 

Lascia un Commento

XHTML: È possibile utilizzare questi marcatori: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>