Internationalisation et
localisation avec
Zend Framework
Mickaël Perraud
Contributeur Zend Framework
Responsable documentation française




                                      © All rights reserved. Zend Technologies, Inc.
Mickael Perraud
       Contributeur ZF depuis 2007
       Responsable documentation française
       Travaille sur l'aide à la traduction et
       propose les versions déconnectées de la
       documentation PDF / CHM
              @mikaelkael / http://mikaelkael.fr




                  © All rights reserved. Zend Technologies, Inc.
Qu'allons-nous voir aujourd'hui ?




3                 © All rights reserved. Zend Technologies, Inc.
Plan
    • Internationalisation (I18n)
           Généralités
           Zend Framework et I18n


    • Traduction
           Qu'entendons-nous par traduction ?
           Créer et travailler avec les traductions
           Regardons en détails !
           Futures améliorations
4   Plan




                              © All rights reserved. Zend Technologies, Inc.
Internationalisation (I18N)




5                 © All rights reserved. Zend Technologies, Inc.
Généralités – I18n vs L10n

                           Tout le monde ne parle pas anglais !



    • Internationalisation vs. Localisation:
         I18n => supporte les autres régions sans changer votre code
         L10n => propose votre projet pour une région en particulier



    • Zend Framework supporte tout ceci


6   Internationalisation




                                       © All rights reserved. Zend Technologies, Inc.
Généralités – Qu'est-ce qu'une locale ?

    • Locale
         Locale, le point central pour la L10n
         Langue + Région
         Région vs Pays
         Informations additionnelles (table de caractères, encodage)




                             en_US = langue anglaise + région USA
                           fr_FR = langue française + région France


7   Internationalisation




                                       © All rights reserved. Zend Technologies, Inc.
Zend Framework et I18n – Les classes
                                                                                      Zend Framework
                           ZF I18n core

                                            Zend_Locale



                            Zend_Currency    Zend_Date                   Zend_Translate




    • Zend_Locale
         Gestion de la locale (indépendant de PHP et de l'OS)
         Informations pré-traduites
         Contient le formatage


8   Internationalisation




                                             © All rights reserved. Zend Technologies, Inc.
Zend Framework et I18n – Les classes
    • Zend_Currency
         Gestion de monnaies localisées



    • Zend_Date
         Gestion des heures et dates localisées



    • Zend_Translate
         Gestion générique de la traduction




9   Internationalisation




                              © All rights reserved. Zend Technologies, Inc.
Traduction avec Zend Framework




10               © All rights reserved. Zend Technologies, Inc.
Généralités
     • Comment fonctionne la traduction
         Concept et processus

     • Fichiers sources
         Création et gestion

     • Traduisez-moi !
         Exemple d'utilisation

     • Pour aller plus loin
         Mise en cache, performance




11   Traduction avec Zend Framework




                                      © All rights reserved. Zend Technologies, Inc.
Comment fonctionne la traduction
     • Toutes les langues sont différentes
         Il faut fournir à votre utilisateur un site dans une langue qu'il comprend
         La plupart des navigateurs envoie leurs langues préférées
                           Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,fr-be;q=0.6,fr-fr;q=0.4,fr-fr;q=0.3,en-us;q=0.2,en;q=0.1

         La traduction n'est qu'une partie d'un site multilingue




             Utilisateur                    Détection                        Choix de la                  Affectation
           accède au site                  de la langue                      traduction                    traduction




12   Traduction avec Zend Framework




                                                         © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Concept des adaptateurs
     • Concept des adaptateurs
         Multiples types de source supportés
         Facile d'implémenter votre propre adaptateur


     • Sélectionnez l'adaptateur suivant votre utilisation
         L'utilisation peut ensuite évoluer
         Basculer vers un autre adaptateur se fait alors en 1 seule
             ligne




13   Translation within Zend Framework




                                         © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateurs
         Array
         Csv
         Gettext
         Ini
         Qt
         Tbx
         Tmx
         Xliff
         XmlTm
         Le vôtre…

14   Translation within Zend Framework




                                         © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateur Array
                      return array(
                          'Original content' => 'Translated content',
                          'Another content' => 'Also translated'
                      );



     • Pour                                         • Contre
         Rapide, le plus rapide                          Pas d'outil d'édition
         Lisible par l'homme                             Pas simple pour le client final


     • Utilisation
          Au cours du développement
          Petit site à site moyen

15   Translation within Zend Framework




                                         © All rights reserved. Zend Technologies, Inc.
Fichier sources – Adaptateur CSV

                    “Original content”;”Translated content”
                    “Another content”;“Also translated”




     • Pour                                         • Contre
         Rapide                                          Pas d'outil d'édition
         Lisible par l'homme
         Éditable par le client
     • Utilisation
          Traduction par le client
          Petit site à site moyen

16   Translation within Zend Framework




                                         © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateurs INI

                    Original_content = “Translated content”
                    Another_content = “Also translated”




     • Pour                                         • Contre
         Rapide                                          Pas d'outil d'édition
         Lisible par l'homme                             Pas simple pour le client final
                                                          Limitation au niveau des clés
     • Utilisation
          Mixe la traduction avec la configuration
          Petit site à site moyen

17   Translation within Zend Framework




                                         © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateur Gettext

                     FORMAT BINAIRES (fichiers *.mo)… *.po n'est pas Gettext




     • Pour                                                • Contre
         Crypté pour le client                                  Figé pour le client
         Outils gratuits                                        Pas lisible par l'homme
         Traduction professionnelle
     • Utilisation
          De nombreuses sources sont disponibles
          Petit site à site d'entreprise

18   Translation within Zend Framework




                                              © All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateur TMX
                    ** XML HEADERS **
                    <tu tuid='Message 1'>
                       <tuv xml:lang="en"><seg>Message 1 (en)</seg></tuv>
                       <tuv xml:lang="fr"><seg>Message 1 (fr)</seg></tuv>
                    </tu>



     • Pour                                                   • Contre
         Outils de traduction                                      Pas de bons outils d'édition libre
             professionnels                                         Difficile pour le client final
         Supporte les balises HTML                                 Nécessité d'utiliser un cache
     • Utilisation
          Avec les services de traduction professionnels
          Site moyen à site d'entreprise
                                         REMARQUE : on lit parfois qu'il s'agit d'un « standard
19   Translation within Zend Framework
                                         industriel », ATTENTION c'est un format lourd et verbeux

                                                   © All rights reserved. Zend Technologies, Inc.
Exemples concrets




20               © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');




21   Working examples




                                       © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');


            Sélectionner votre adaptateur
                Une seule ligne nécessaire pour changer d'adaptateur




22   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Traduisez moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');


          Où sont les traductions ?
                Dossier
                Fichier unique




23   Working examples




                                       © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');


          Quelle langue ?
                Détection automatique (‘auto’, ‘browser’)
                Déclaration manuelle (‘de_AT’, ‘en_US’)
                Paramètre global de l'application (Zend_Application)




24   Working examples




                                         © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');


          Options possibles
                Scan : recherche de traduction
                        • LOCALE-DIRECTORY :               /www/lang/fr/file.php
                        • LOCALE-FILE:                     /www/lang/file-fr.php




25   Working examples




                                               © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                    $trans = new Zend_Translate(
                        array('adapter' => 'array',
                              'content' => '/www/lang/',
                              'locale' => 'fr_FR',
                              'scan' => Zend_Translate::LOCALE_DIRECTORY
                        )
                    );
                    $trans->translate('I said hello');


          Ça marche !
                Retourne « J'ai dit bonjour »




26   Working examples




                                         © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                   /language

                   /language/en_GB
                   /language/en_GB/file1.xxx

                   /language/fr_BE
                   /language/fr_BE/file1.xxx




          Zend_Translate::LOCALE_DIRECTORY :
                Locale à l'intérieur d'un dossier
                Partiellement possible sous la forme :
                        • /language/App1-en_US/xxx
                        • /language/Something_en_GB_different/xxx




27   Working examples




                                               © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
                   /language

                   /language/dir/
                   /language/dir/file1-en_GB.xxx

                   /language/dir2
                   /language/dir2/file2-fr_BE.xxx




          Zend_Translate::LOCALE_FILE:
                Locale à l'intérieur d'un fichier
                Partiellement possible sous la forme :
                        • file1.en.tmx
                        • file_en-GB.php
                        • file_fr-something.mo



28   Working examples




                                                    © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Aide de vue
                        $this->translate('I said hello');
                        $this->translate('Company Name', 'en');




          Aide de vue traduction (dans vos scripts de vue)
                Plus simple
                Plus court




29   Working examples




                                           © All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Traductions dynamiques
              $this->translate("Pay %1$s euro", $money);
              $this->translate("Pay %1$s euro until %2$s", $money, $date);




          Ajouter des paramètres à votre traduction
                Avec une syntaxe de type sprintf
                Plusieurs paramètres possibles
                Les autres langues peuvent changer l'ordre




30   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Autres composants – Le registre
                    $translate = new Zend_Translate(/*...*/);

                    Zend_Registry::set(‘Zend_Translate’, $translate);




          Zend_Registry
                Utilisable partout dans votre application
                        • Zend_Form
                        • Zend_Validate
                        • Zend_View
                        • Et d'autres...


31   Working examples




                                           © All rights reserved. Zend Technologies, Inc.
Autres composants – Application

                    resources.translate.adapter = “array“;
                    resources.translate.locale = “fr_FR”;
                    resources.translate.data    = “/www/lang/”;




          Application
                Reconnu partout dans votre application
                Configurable




32   Working examples




                                           © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
                    $translate->plural('Car', 'Cars', 2);
                    $translate->translate(array('Car', 'Cars', 2));

                    $this->translate(array('Car', 'Cars', 2));




          Singulier / Pluriel
                Car (un élément) / Singulier
                Cars (plusieurs éléments) / Pluriel
                Même méthode pour gérer le singulier ou le pluriel




33   Working examples




                                          © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels

                 $this->translate(array('%1$s Car', '%1$s Cars', $nb));




          N'oubliez pas vos paramètres
                1 Car
                3 Cars
                Règles des pluriels implémentées pour toutes les langues




34   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels

                $this->translate(array('Singular', 'Plural1', 'Plural2', 2));




          Préparé pour le futur de PHP (PHP 6 ?)
                Plusieurs langues permettent de définir plus d'1 pluriel
                Vous permet d'écrire votre code source dans la langue
                   considérée




35   Working examples




                                          © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
     Les règles plurielles sont supportées par :                          Mais pas par :

              ▶    Array                                                            ▶   Ini
              ▶    CSV                                                              ▶   Qt
              ▶    Gettext                                                          ▶   Tmx
                                                                                    ▶   Tbx
                                                                                    ▶
                                                                                        Xliff
                                                                                    ▶   XmlTm




36   Working examples




                                   © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
         Cache… cache… cache


         • Règle 1: utilisez un cache !!!




37   Working examples




                                    © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
         Cache… cache… cache


         • Règle 1: utilisez un cache !!!
         • Règle 2: utilisez toujours un cache !!!




38   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Pour allez plus loin – Performance
         Cache… cache… cache


         • Règle 1: utilisez un cache !!!
         • Règle 2: utilisez toujours un cache !!!
         • Règle 3: vous devez utiliser un cache !!!




39   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
         Caching… caching… caching


         • Règle 1: utilisez un cache !!!
         • Règle 2: utilisez toujours un cache !!!
         • Règle 3: vous devez utiliser un cache !!!


         Tous les adaptateurs ont la MÊME VITESSE
         • Seule la lecture initiale est différente




40   Working examples




                                        © All rights reserved. Zend Technologies, Inc.
Résumé
     La traduction avec Zend_Translate est

         Simple à utiliser
         Facile à mettre en oeuvre
         Intégrée à plusieurs autres composants de Zend Framework


     Pour plus d'informations

         Lisez le manuel : http://framework.zend.com/manual/ ou
          http://doczf.mikaelkael.fr
         Reportez-vous au blog de l'auteur de quasiment toute la partie I18N et L10N
          de ZF : http://www.thomasweidner.com




41   Working examples




                                      © All rights reserved. Zend Technologies, Inc.
Merci
        Des questions ?


           Talks : http://joind.in/event/view/2504
           Slideshare : http://www.slideshare.net/mikaelkael

42                       © All rights reserved. Zend Technologies, Inc.
Formation Zend Framework
                     Zend Framework : concepts avancés
      Ce cours est conçu pour apprendre aux développeurs PHP qui travaillent déjà avec le Zend Framework
    comment appliquer les bonnes pratiques lorsqu’ils construisent et configurent leurs applications que ce soit
                          pour la scalabilité, l’interactivité ou les hautes performances.
      http://www.zend.com/en/services/training/course-catalog/zend-framework-advanced

Sujets abordés
•    Présentation et approfondissement des concepts de base (incluant le design pattern MVC, Zend_Db,
Zend_Form, les plug-ins)

•       Développement et test (incluant Zend_Application, Zend_Tool, Zend_Test)

•       Rich Internet Applications (incluant Zend_Dojo, Zend_Soap_Server)

•    Les systèmes interactifs (incluant Zend_Mail, Zend_Feed, l'internationalisation, Zend_Pdf,
Zend_Search_Lucene)

•   Systèmes gérant la scalabilité, la fléxibilité et les hautes performances (incluant Zend_Cache, les
modules MVC, Zend_Navigation, Zend_Queue)

Prochains cours :
        Du 4 au 6 avril
        Du 20 au 22 juin
                                          © All rights reserved. Zend Technologies, Inc.

Découvrez le noyau d'internationalisation du Zend Framework

  • 1.
    Internationalisation et localisation avec ZendFramework Mickaël Perraud Contributeur Zend Framework Responsable documentation française © All rights reserved. Zend Technologies, Inc.
  • 2.
    Mickael Perraud Contributeur ZF depuis 2007 Responsable documentation française Travaille sur l'aide à la traduction et propose les versions déconnectées de la documentation PDF / CHM @mikaelkael / http://mikaelkael.fr © All rights reserved. Zend Technologies, Inc.
  • 3.
    Qu'allons-nous voir aujourd'hui? 3 © All rights reserved. Zend Technologies, Inc.
  • 4.
    Plan • Internationalisation (I18n) Généralités Zend Framework et I18n • Traduction Qu'entendons-nous par traduction ? Créer et travailler avec les traductions Regardons en détails ! Futures améliorations 4 Plan © All rights reserved. Zend Technologies, Inc.
  • 5.
    Internationalisation (I18N) 5 © All rights reserved. Zend Technologies, Inc.
  • 6.
    Généralités – I18nvs L10n Tout le monde ne parle pas anglais ! • Internationalisation vs. Localisation:  I18n => supporte les autres régions sans changer votre code  L10n => propose votre projet pour une région en particulier • Zend Framework supporte tout ceci 6 Internationalisation © All rights reserved. Zend Technologies, Inc.
  • 7.
    Généralités – Qu'est-cequ'une locale ? • Locale  Locale, le point central pour la L10n  Langue + Région  Région vs Pays  Informations additionnelles (table de caractères, encodage) en_US = langue anglaise + région USA fr_FR = langue française + région France 7 Internationalisation © All rights reserved. Zend Technologies, Inc.
  • 8.
    Zend Framework etI18n – Les classes Zend Framework ZF I18n core Zend_Locale Zend_Currency Zend_Date Zend_Translate • Zend_Locale  Gestion de la locale (indépendant de PHP et de l'OS)  Informations pré-traduites  Contient le formatage 8 Internationalisation © All rights reserved. Zend Technologies, Inc.
  • 9.
    Zend Framework etI18n – Les classes • Zend_Currency  Gestion de monnaies localisées • Zend_Date  Gestion des heures et dates localisées • Zend_Translate  Gestion générique de la traduction 9 Internationalisation © All rights reserved. Zend Technologies, Inc.
  • 10.
    Traduction avec ZendFramework 10 © All rights reserved. Zend Technologies, Inc.
  • 11.
    Généralités • Comment fonctionne la traduction  Concept et processus • Fichiers sources  Création et gestion • Traduisez-moi !  Exemple d'utilisation • Pour aller plus loin  Mise en cache, performance 11 Traduction avec Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 12.
    Comment fonctionne latraduction • Toutes les langues sont différentes  Il faut fournir à votre utilisateur un site dans une langue qu'il comprend  La plupart des navigateurs envoie leurs langues préférées Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,fr-be;q=0.6,fr-fr;q=0.4,fr-fr;q=0.3,en-us;q=0.2,en;q=0.1  La traduction n'est qu'une partie d'un site multilingue Utilisateur Détection Choix de la Affectation accède au site de la langue traduction traduction 12 Traduction avec Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 13.
    Fichiers sources –Concept des adaptateurs • Concept des adaptateurs  Multiples types de source supportés  Facile d'implémenter votre propre adaptateur • Sélectionnez l'adaptateur suivant votre utilisation  L'utilisation peut ensuite évoluer  Basculer vers un autre adaptateur se fait alors en 1 seule ligne 13 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 14.
    Fichiers sources –Adaptateurs  Array  Csv  Gettext  Ini  Qt  Tbx  Tmx  Xliff  XmlTm  Le vôtre… 14 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 15.
    Fichiers sources –Adaptateur Array return array( 'Original content' => 'Translated content', 'Another content' => 'Also translated' ); • Pour • Contre  Rapide, le plus rapide  Pas d'outil d'édition  Lisible par l'homme  Pas simple pour le client final • Utilisation  Au cours du développement  Petit site à site moyen 15 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 16.
    Fichier sources –Adaptateur CSV “Original content”;”Translated content” “Another content”;“Also translated” • Pour • Contre  Rapide  Pas d'outil d'édition  Lisible par l'homme  Éditable par le client • Utilisation  Traduction par le client  Petit site à site moyen 16 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 17.
    Fichiers sources –Adaptateurs INI Original_content = “Translated content” Another_content = “Also translated” • Pour • Contre  Rapide  Pas d'outil d'édition  Lisible par l'homme  Pas simple pour le client final  Limitation au niveau des clés • Utilisation  Mixe la traduction avec la configuration  Petit site à site moyen 17 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 18.
    Fichiers sources –Adaptateur Gettext FORMAT BINAIRES (fichiers *.mo)… *.po n'est pas Gettext • Pour • Contre  Crypté pour le client  Figé pour le client  Outils gratuits  Pas lisible par l'homme  Traduction professionnelle • Utilisation  De nombreuses sources sont disponibles  Petit site à site d'entreprise 18 Translation within Zend Framework © All rights reserved. Zend Technologies, Inc.
  • 19.
    Fichiers sources –Adaptateur TMX ** XML HEADERS ** <tu tuid='Message 1'> <tuv xml:lang="en"><seg>Message 1 (en)</seg></tuv> <tuv xml:lang="fr"><seg>Message 1 (fr)</seg></tuv> </tu> • Pour • Contre  Outils de traduction  Pas de bons outils d'édition libre professionnels  Difficile pour le client final  Supporte les balises HTML  Nécessité d'utiliser un cache • Utilisation  Avec les services de traduction professionnels  Site moyen à site d'entreprise REMARQUE : on lit parfois qu'il s'agit d'un « standard 19 Translation within Zend Framework industriel », ATTENTION c'est un format lourd et verbeux © All rights reserved. Zend Technologies, Inc.
  • 20.
    Exemples concrets 20 © All rights reserved. Zend Technologies, Inc.
  • 21.
    Traduisez-moi – Exempled'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); 21 Working examples © All rights reserved. Zend Technologies, Inc.
  • 22.
    Traduisez-moi – Exempled'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); Sélectionner votre adaptateur  Une seule ligne nécessaire pour changer d'adaptateur 22 Working examples © All rights reserved. Zend Technologies, Inc.
  • 23.
    Traduisez moi –Exemple d'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); Où sont les traductions ?  Dossier  Fichier unique 23 Working examples © All rights reserved. Zend Technologies, Inc.
  • 24.
    Traduisez-moi – Exempled'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); Quelle langue ?  Détection automatique (‘auto’, ‘browser’)  Déclaration manuelle (‘de_AT’, ‘en_US’)  Paramètre global de l'application (Zend_Application) 24 Working examples © All rights reserved. Zend Technologies, Inc.
  • 25.
    Traduisez-moi – Exempled'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); Options possibles  Scan : recherche de traduction • LOCALE-DIRECTORY : /www/lang/fr/file.php • LOCALE-FILE: /www/lang/file-fr.php 25 Working examples © All rights reserved. Zend Technologies, Inc.
  • 26.
    Traduisez-moi – Exempled'utilisation $trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ) ); $trans->translate('I said hello'); Ça marche !  Retourne « J'ai dit bonjour » 26 Working examples © All rights reserved. Zend Technologies, Inc.
  • 27.
    Traduisez-moi – Exempled'utilisation /language /language/en_GB /language/en_GB/file1.xxx /language/fr_BE /language/fr_BE/file1.xxx Zend_Translate::LOCALE_DIRECTORY :  Locale à l'intérieur d'un dossier  Partiellement possible sous la forme : • /language/App1-en_US/xxx • /language/Something_en_GB_different/xxx 27 Working examples © All rights reserved. Zend Technologies, Inc.
  • 28.
    Traduisez-moi – Exempled'utilisation /language /language/dir/ /language/dir/file1-en_GB.xxx /language/dir2 /language/dir2/file2-fr_BE.xxx Zend_Translate::LOCALE_FILE:  Locale à l'intérieur d'un fichier  Partiellement possible sous la forme : • file1.en.tmx • file_en-GB.php • file_fr-something.mo 28 Working examples © All rights reserved. Zend Technologies, Inc.
  • 29.
    Traduisez-moi – Aidede vue $this->translate('I said hello'); $this->translate('Company Name', 'en'); Aide de vue traduction (dans vos scripts de vue)  Plus simple  Plus court 29 Working examples © All rights reserved. Zend Technologies, Inc.
  • 30.
    Traduisez-moi – Traductionsdynamiques $this->translate("Pay %1$s euro", $money); $this->translate("Pay %1$s euro until %2$s", $money, $date); Ajouter des paramètres à votre traduction  Avec une syntaxe de type sprintf  Plusieurs paramètres possibles  Les autres langues peuvent changer l'ordre 30 Working examples © All rights reserved. Zend Technologies, Inc.
  • 31.
    Autres composants –Le registre $translate = new Zend_Translate(/*...*/); Zend_Registry::set(‘Zend_Translate’, $translate); Zend_Registry  Utilisable partout dans votre application • Zend_Form • Zend_Validate • Zend_View • Et d'autres... 31 Working examples © All rights reserved. Zend Technologies, Inc.
  • 32.
    Autres composants –Application resources.translate.adapter = “array“; resources.translate.locale = “fr_FR”; resources.translate.data = “/www/lang/”; Application  Reconnu partout dans votre application  Configurable 32 Working examples © All rights reserved. Zend Technologies, Inc.
  • 33.
    Pour aller plusloin – Traduction des pluriels $translate->plural('Car', 'Cars', 2); $translate->translate(array('Car', 'Cars', 2)); $this->translate(array('Car', 'Cars', 2)); Singulier / Pluriel  Car (un élément) / Singulier  Cars (plusieurs éléments) / Pluriel  Même méthode pour gérer le singulier ou le pluriel 33 Working examples © All rights reserved. Zend Technologies, Inc.
  • 34.
    Pour aller plusloin – Traduction des pluriels $this->translate(array('%1$s Car', '%1$s Cars', $nb)); N'oubliez pas vos paramètres  1 Car  3 Cars  Règles des pluriels implémentées pour toutes les langues 34 Working examples © All rights reserved. Zend Technologies, Inc.
  • 35.
    Pour aller plusloin – Traduction des pluriels $this->translate(array('Singular', 'Plural1', 'Plural2', 2)); Préparé pour le futur de PHP (PHP 6 ?)  Plusieurs langues permettent de définir plus d'1 pluriel  Vous permet d'écrire votre code source dans la langue considérée 35 Working examples © All rights reserved. Zend Technologies, Inc.
  • 36.
    Pour aller plusloin – Traduction des pluriels Les règles plurielles sont supportées par : Mais pas par : ▶ Array ▶ Ini ▶ CSV ▶ Qt ▶ Gettext ▶ Tmx ▶ Tbx ▶ Xliff ▶ XmlTm 36 Working examples © All rights reserved. Zend Technologies, Inc.
  • 37.
    Pour aller plusloin – Performance Cache… cache… cache • Règle 1: utilisez un cache !!! 37 Working examples © All rights reserved. Zend Technologies, Inc.
  • 38.
    Pour aller plusloin – Performance Cache… cache… cache • Règle 1: utilisez un cache !!! • Règle 2: utilisez toujours un cache !!! 38 Working examples © All rights reserved. Zend Technologies, Inc.
  • 39.
    Pour allez plusloin – Performance Cache… cache… cache • Règle 1: utilisez un cache !!! • Règle 2: utilisez toujours un cache !!! • Règle 3: vous devez utiliser un cache !!! 39 Working examples © All rights reserved. Zend Technologies, Inc.
  • 40.
    Pour aller plusloin – Performance Caching… caching… caching • Règle 1: utilisez un cache !!! • Règle 2: utilisez toujours un cache !!! • Règle 3: vous devez utiliser un cache !!! Tous les adaptateurs ont la MÊME VITESSE • Seule la lecture initiale est différente 40 Working examples © All rights reserved. Zend Technologies, Inc.
  • 41.
    Résumé La traduction avec Zend_Translate est  Simple à utiliser  Facile à mettre en oeuvre  Intégrée à plusieurs autres composants de Zend Framework Pour plus d'informations  Lisez le manuel : http://framework.zend.com/manual/ ou http://doczf.mikaelkael.fr  Reportez-vous au blog de l'auteur de quasiment toute la partie I18N et L10N de ZF : http://www.thomasweidner.com 41 Working examples © All rights reserved. Zend Technologies, Inc.
  • 42.
    Merci Des questions ? Talks : http://joind.in/event/view/2504 Slideshare : http://www.slideshare.net/mikaelkael 42 © All rights reserved. Zend Technologies, Inc.
  • 43.
    Formation Zend Framework Zend Framework : concepts avancés Ce cours est conçu pour apprendre aux développeurs PHP qui travaillent déjà avec le Zend Framework comment appliquer les bonnes pratiques lorsqu’ils construisent et configurent leurs applications que ce soit pour la scalabilité, l’interactivité ou les hautes performances. http://www.zend.com/en/services/training/course-catalog/zend-framework-advanced Sujets abordés • Présentation et approfondissement des concepts de base (incluant le design pattern MVC, Zend_Db, Zend_Form, les plug-ins) • Développement et test (incluant Zend_Application, Zend_Tool, Zend_Test) • Rich Internet Applications (incluant Zend_Dojo, Zend_Soap_Server) • Les systèmes interactifs (incluant Zend_Mail, Zend_Feed, l'internationalisation, Zend_Pdf, Zend_Search_Lucene) • Systèmes gérant la scalabilité, la fléxibilité et les hautes performances (incluant Zend_Cache, les modules MVC, Zend_Navigation, Zend_Queue) Prochains cours :  Du 4 au 6 avril  Du 20 au 22 juin © All rights reserved. Zend Technologies, Inc.