Seleziona una pagina

Zend Framework tra i molti oggetti messi a disposizione offre anche uno strumento per l’internazionalizzazione delle nostre applicazioni.

Zend_Translate, questo il nome dell’oggetto in questione, si poggia su diversi adattatori che permettono di usare diverse strutture di memorizzazione dati. Di seguito un riepilogo degli adapter disponibili e delle peculiarità principali.

Adattatore Descrizione Uso
Array Usa array php Piccole pagine; uso semplice; solo per programmatori
Csv Usa file separati da punteggiatura (*.csv/*.txt) Semplice formato dei files; veloce; possibili problemi con caratteri unicode
Gettext Uso di file binari gettexe (*.mo) GNU standard per linux; thread-safe; necessita di strumenti per le traduzioni (ad esempio po-edit)
Ini Uso di semplici files ini (*.ini) Semplice formato dei files; veloce; possibili problemi con caratteri unicode
Tbx Uso di files termbase exchange (*.tbx/*.xml) Standard industriale per stringhe di termini nelle applicazioni; formato XML
Tmx Uso di files tmx (*.tmx/*.xml) Standard industriale per traduzione di applicazioni; formato XML; leggibile dall’uomo
Qt Uso di files linguistici qt (*.ts) Framewor per applicazioni indipendenti dalla piattaforma; formato XML; leggibile dall’uomo
Xliff Uso di files xliff (*.xliff/*.xml) Un semplice formato tipo TMX; formato XML; leggibile dall’uomo
XmlTm Uso di files xmltm (*.xml) Standard industriale per memoria di traduzione di documenti XML; formato XML; leggibile dall’uomo
Altri *.sql Altri adattatori potrebbero essere implementati in futuro

 

Nel mio caso ho scelto di usare gettext come adattatore perchè ho già più volte avuto a che fare con questo sistema per le traduzioni in ambito web

Ora vediamo come usare Zend_Translate in una applicazione realizzata con il framework Zend. Per prima cosa vediamo dove sistemare i files con le traduzioni. Supponendo di avere una struttura di cartelle di questo tipo:
+---application
+---data
| +---languages
| +---controllers
| | +---account
| | | it.mo
| | | it.po
| | | en.mo
| | | en.po
| | |
| | ---index
| | it.mo
| | it.po
| | en.mo
| | en.po
| |
| ---default
| it.mo
| it.po
| en.mo
| en.po
+---library
+---public

ho suddiviso le traduzioni in categorie. La prima, generica e legata a traduzioni comuni a tutta l’applicazione i cui files sono nella cartella:
/data/languages/default
le altre sono specifiche al singolo controller e sono nella cartella:
/data/languages/controllers/[nome-controller]
A livello di bootstrap instanzio l’oggetto Zend_Translate e lo memorizzo nel registro con il nome Zend_Translate in modo che sia poi disponibile in automatico anche negli script di view come view helper.


Ho anche fatto in modo che tutti i controller estendano un controller custom in modo da poter centralizzare alcune operazioni come il caricamento delle traduzioni specifiche del controller e rendere disponibile a tutti i controller l’oggetto Zend_Translate come membro interno.


A questo punto è possibile effettuare traduzioni sia a livello del singolo controller che nei template: