6.Le langage PHP

6.22.Localization (l10n) et Traduction

6.22.1.Introduction

Si vous souhaitez proposer des scripts PHP, s'adaptant à la langue de l'opérateur vous devrez trouver un moyen d'afficher les traductions à la place des phrases qui vous viennent naturellement dans la langue de votre choix. Vous devrez également vous arranger pour afficher les dates, nombres, etc. dans le format habituel de l'utilisateur du script. Ce que l'on désigne sous le terme anglais de localization[c'est quoi?] (l10n).

6.22.2.Avec Zend Framework

6.22.2.1.Introduction

Zend Framework propose une ensemble de classes[c'est quoi?] permettant de retrouver une traduction dans un dictionnaire via une clé. Nous vous invitons donc à installer[comment?] Zend Framework.
rem
  • Pour utiliser cet aspect une simple copie des fichiers suffit (la configuration de mod_rewrite n'est pas nécessaire).

6.22.2.2.La classe Zend_Translate

La classe Zend_Translate présente un constructeur avec 2 paramètres obligatoires et 2 paramètres optionnels dont voici les rôles:
  • 1 - Type d'adapteur à utiliser. Autrement dit précise le format de la source contenant le dictionnaire des traductions.
  • 2 - Nom de la source contenant le dictionnaire de traductions.
  • 3 - La "locale" (i.e. la langue) par défaut.
  • 4 - Des paramètres additionnels.
Comme l'interface de cette classe le suggère, le framework Zend est capable de s'adapter à différents formats de dictionnaires. Ceci vous permet de choisir aujourd'hui le format qui vous convient le mieux tout en vous offrant la possibilité de changer plus tard en n'ayant que très peu de code à modifier pour prendre en compte ce changement.
Les traductions peuvent notamment être stockées:
  • sous forme d'un tableau dans un script PHP
  • sous forme d'un fichier CSV (habituellement délimité par des virgules ou point-virgules)
  • au format gettext
  • au format XML suivant la norme TMX[c'est quoi?]
Une fois l'objet Zend_Translate instanciée, il suffit de faire appel à la méthode _ (oui, un simple underscore) avec en paramètre la clé permettant de retrouver la traduction dans le dico et éventuellement un second paramètre précisant la langue de la traduction (si on ne veut pas de celle par défaut).
La structure de nos scripts de démonstration sera donc la suivante:
<?php
require_once("include_path_inc.php"); // Ajout du chemin vers Zend Framework
require_once("Zend/Translate.php");

$dico = new Zend_Translate('a definir', 'a definir', 'a definir');

echo $dico->_('nom')."<br />\n";
echo $dico->_('prenom')."<br />\n";
echo $dico->_('adresse')."<br />\n";
?>
avec un fichier include_path_inc.php à adapter à votre environnement (selon l'endroit où la bibliothèque Zend a été copiée).
<?php
// Private
// TAKE CARE: May conflict with libs used by PHP Facile (as a website)
set_include_path(get_include_path().PATH_SEPARATOR.
                 dirname($_SERVER['DOCUMENT_ROOT']).'/../tef_demo_libs/ZendFramework-1.11.1-minimal/library'.PATH_SEPARATOR.
                 '/home/libs/ZendFramework/library'
                 );
                 ?>