6.Le langage PHP

6.22.Localization (l10n) et Traduction

6.22.2.Avec Zend Framework

6.22.2.5.Avec un fichier TMX

Si le dictionnaire est stocké dans un fichier au format TMX[c'est quoi?]:
  • Vous aurez un fichier contenant l'ensemble (ou un sous-ensemble) des traductions
  • Chaque bloc du fichier contient la traduction d'une phrase pour l'ensemble des langues
Voici l'exemple que nous utiliserons:
<?xml version="1.0" ?>
<tmx version="1.4">
    <header creationtool="eclipse"
            creationtoolversion="3.4" 
            segtype="sentence" 
            o-tmf="n/a"
            adminlang="fr-FR"
            scrlang="fr-FR"
            datatype="plaintext">
    </header>
    <body>
        <tu tuid="nom">
            <tuv xml:lang="en">
                <seg>First name</seg>
            </tuv>
            <tuv xml:lang="fr">
                <seg>Nom</seg>
            </tuv>
        </tu>
        <tu tuid="prenom">
            <tuv xml:lang="en">
                <seg>Last name</seg>
            </tuv>
            <tuv xml:lang="fr">
                <seg>Prenom</seg>
            </tuv>
        </tu>
        <tu tuid="adresse">
            <tuv xml:lang="en">
                <seg>Address</seg>
            </tuv>
            <tuv xml:lang="fr">
                <seg>Adresse</seg>
            </tuv>
        </tu>
    </body>
</tmx>
Dans ce cas, l'objet Zend_Translate doit être instancié en passant en paramètre le format tmx, le chemin du fichier et la langue par défaut à utiliser pour les traductions (dans cet exemple, 'en').
warning Si vous précisez un chemin relatif sachez que le chemin est relatif au script appelé (et non pas relatif au script qui fait l'instanciation si celui-ci est inclus dans un autre script).
Voici donc un premier exemple, tout simple, où nous ne demandons que des traductions dans la langue par défaut
<?php
require_once("include_path_inc.php"); // Ajout du chemin vers Zend Framework
require_once("Zend/Translate.php");

$dico = new Zend_Translate('tmx', dirname(__FILE__).'/dico.tmx', 'en');

echo $dico->_('nom')."<br />\n";
echo $dico->_('prenom')."<br />\n";
echo $dico->_('adresse')."<br />\n";

?>
Ce qui donne
First name
Last name
Address
Pour une page d'accueil, par exemple, il peut être nécessaire d'avoir accès à plusieurs traductions dans ce cas, il faut préciser quelle traduction utiliser (nous avons cette fois 'fr' par défaut):
<?php
require_once("include_path_inc.php"); // Ajout du chemin vers Zend Framework
require_once("Zend/Translate.php");

$dico = new Zend_Translate('tmx', dirname(__FILE__).'/dico.tmx', 'fr');

echo "en francais<br />\n";
echo $dico->_('nom')."<br />\n";
echo $dico->_('prenom')."<br />\n";
echo $dico->_('adresse')."<br />\n";

echo "en anglais<br />\n";
echo $dico->_('nom', 'en')."<br />\n";
echo $dico->_('prenom', 'en')."<br />\n";
echo $dico->_('adresse', 'en')."<br />\n";
?>
Ce qui donne
en francais
Nom
Prenom
Adresse
en anglais
First name
Last name
Address