[Zend Framework] Utilisation de la classe de traduction de ZF

Le Zend Framework (ZF) propose par défaut une classe de traduction très simple d’utilisation. Elle prend en compte de nombreux moyens de traduction comme les Array (PHP), CSV, Gettext, INI, TBX, TMX, Qt, XLIFF et XmlTm. Il est aussi possible de créer ses propres adaptateurs. Ici nous utiliserons Gettext car c’est le plus professionnel à mon gout. L’inconvénient est que le fichier de traduction est binaire et donc non lisible par l’homme et qu’il faut un logiciel pour générer ce fichier (il en existe des gratuits).

La classe de traduction de Zend Framework est Zend_Translate. La mise en place de la traduction se résume simplement à l’instanciation de cette classe. Ceci est fait comme ceci :

$translate = new
Zend_Translate(‘gettext’,’/languages/fr/LC_MESSAGES/lang.mo’,’fr’);

Dans cette ligne nous créons tout d’abord un nouveau objet de type Zend_Translate. Le constructeur prend trois paramètres :

  • Le premier est l’adaptateur utilisé. Ici nous utilisons gettext mais vous pouvez très bien utiliser csv, tbx, …
  • Le deuxième paramètre est le chemin vers le fichier de traduction. Avec gettext il s’agit d’un fichier binaire d’extension mo.
  • Enfin le dernier paramètre est la langue chargé. Ici le français (fr).

Si vous avez plusieurs fichier de traduction (comme c’est souvent le cas !) il faut les ajouter avec

$translate->addTranslation(‘/languages/en/LC_MESSAGES/lang.mo’,’en’);

A ce moment là vous pouvez déjà afficher vos messages. Pour cela il existe deux méthodes : La première avec la chaine d’origine, par exemple pour traduire ‘Ma chaine à traduire’ :

Print $translate->_(« Ma chaine à traduire »);

La deuxième à partir de l’id de la phrase traduite, par exemple pour la chaine traduite d’id 3 :

Print $translate->_(3);

Pour savoir dans quelle langue sera traduit notre phrase nous pouvons utiliser la méthode getLocale() qui retourne une instance de Zend_Locale ou un identifiant de localisation.

$langue = $translate->getLocale();

Pour spécifier la langue à utiliser il faut utiliser la méthode setLocale().

$translate->setLocale(« en »);

Pour améliorer les performances de l’application on peut spécifier à Zend_Translate un cache où il stockera des données pour y accéder plus rapidement. Ceci ce fait comme suit :

// Options du frontend et du backend
$frontendOptions = array(‘lifetime’
=> 7200, ‘automatic_serialization’ => true);
$backendOptions =
array(‘cache_dir’ => ‘/tmp/’ );
// Création d’un cache
$cache = Zend_Cache::factory(Core’,’File’,$frontendOption,
$backendOptions);
// Spécifier à Zend_Translate le cache
Zend_Translate::setCache($cache);

Ainsi l’exécution sera plus rapide. Nous créons tout d’abord un cache en utilisant la factory de Zend_Cache. Les paramètres sont tout d’abord le frontend (ici Core) et le backend (ici File) suivit de leurs options. Ensuite nous spécifions à la classe Zend_Translate ce cache avec la méthode setCache.

Si vous avez apprécié cet article, pensé à laissé un commentaire ou vous abonner au flux RSS feed.

One thought on “[Zend Framework] Utilisation de la classe de traduction de ZF

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *