dimanche 3 mars 2013

Internationalisation

À l’heure de la mondialisation, l’internationalisation s’impose comme un enjeu essentiel. Elle implique la gestion de nombreux détails susceptibles de devenir de vrais casse-tête : jeux de caractères, changement de langue, gestion des monnaies, synchronisation des horloges, etc. Prévenir plutôt que guérir, voilà pourquoi il est essentiel de penser en amont votre internationalisation.

Exercice 1

1) Créez le fichier /www/htdocs/sitezend_avance/application/config/traduction.tmx qui contiendra les traductions suivantes au format tmx :

Bonjour : Bonjour (fr), Buenos dias (es), Hello (en)
Exemple de traduction : Traduction example (en)

2) Dans la méthode indexAction() du contrôleur index, affichez le texte Bonjour traduit en anglais.


Correction de l'exercice 1

$ nano /www/htdocs/sitezend_avance/application/config/traduction.tmx
<?xml version="1.0" ?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
    <header creationtoolversion="1.0.0"
    datatype="winres"
    segtype="sentence"
    adminlang="fr-fr"
    srclang="fr-fr"
    o-tmf="abc"
    creationtool="XYZTool" />
    <body>
        <tu tuid='Bonjour'>
            <tuv xml:lang="fr">Bonjour
            <tuv xml:lang="es">Buenos dias
            <tuv xml:lang="en">Hello
        </tu>
        <tu tuid='Exemple de traduction'>
            <tuv xml:lang="en">Traduction example
        </tu>
    </body>
</tmx>

On déclare notre fichier de traduction dans notre bootstrap en créant la fonction _initTrad() :

$ nano /www/htdocs/sitezend_avance/application/Bootstrap.php
protected function _initTrad () {
 
    // Déclaration de l’objet translate
    $translate = new Zend_Translate('tmx', APPLICATION_PATH.'/config/traduction.tmx', 'fr');
    // Enregistrement explicite de la langue courante
    $translate->setLocale('fr');

    Zend_Registry::set('trad', $translate);
  
}

Retournons dans notre contrôleur index :

$ nano /www/htdocs/sitezend_avance/application/controllers/IndexController.php

Dans la méthode init() on récupère l'objet trad créé dans le bootstrap :

public function init() {

    $this->translate = Zend_Registry::get('trad');

}

Et dans notre méthode indexAction() on affiche la traduction

public function indexAction() {

    echo $this->translate->_('Bonjour');

}

On affiche notre site et on devrait obtenir le résultat suivant :

Il est vrai que cet exemple n'est pas le plus parlant, revenons à notre bootstrap pour la méthode _initTrad() que nous avons créé au dessus.

Et on change :

$translate->setLocale('fr');

pour :

$translate->setLocale('en');

Et on recharge notre page :

Notre chaîne est correctement traduite en anglais.

Aucun commentaire:

Enregistrer un commentaire