Découvrez le noyau d'internationalisation du Zend Framework
-
Upload
mickael-perraud -
Category
Documents
-
view
3.548 -
download
5
description
Transcript of Découvrez le noyau d'internationalisation du Zend Framework
© All rights reserved. Zend Technologies, Inc.
Internationalisation et localisation avecZend FrameworkMickaël PerraudContributeur Zend FrameworkResponsable 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
3 © All rights reserved. Zend Technologies, Inc.
Qu'allons-nous voir aujourd'hui ?
© All rights reserved. Zend Technologies, Inc.
Plan
• Internationalisation (I18n) GénéralitésZend Framework et I18n
•TraductionQu'entendons-nous par traduction ?Créer et travailler avec les traductionsRegardons en détails !Futures améliorations
4 Plan
5 © All rights reserved. Zend Technologies, Inc.
Internationalisation (I18N)
© All rights reserved. Zend Technologies, Inc.
Généralités – I18n vs L10n
• Internationalisation vs. Localisation:I18n => supporte les autres régions sans changer votre codeL10n => propose votre projet pour une région en particulier
• Zend Framework supporte tout ceci
Tout le monde ne parle pas anglais !
6 Internationalisation
© All rights reserved. Zend Technologies, Inc.
Généralités – Qu'est-ce qu'une locale ?
• LocaleLocale, le point central pour la L10nLangue + RégionRégion vs PaysInformations additionnelles (table de caractères, encodage)
7 Internationalisation
en_US = langue anglaise + région USAfr_FR = langue française + région France
© All rights reserved. Zend Technologies, Inc.
Zend Framework et I18n – Les classes
• Zend_LocaleGestion de la locale (indépendant de PHP et de l'OS)Informations pré-traduitesContient le formatage
8 Internationalisation
Zend_Locale
Zend_Currency Zend_Date Zend_Translate
Zend Framework
ZF I18n core
© All rights reserved. Zend Technologies, Inc.
Zend Framework et I18n – Les classes
• Zend_CurrencyGestion de monnaies localisées
• Zend_DateGestion des heures et dates localisées
• Zend_TranslateGestion générique de la traduction
9 Internationalisation
10 © All rights reserved. Zend Technologies, Inc.
Traduction avec Zend Framework
© All rights reserved. Zend Technologies, Inc.
Généralités
• Comment fonctionne la traductionConcept et processus
• Fichiers sourcesCréation et gestion
• Traduisez-moi !Exemple d'utilisation
• Pour aller plus loinMise 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éesAccept-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
12
Utilisateuraccède au site
Détectionde la langue
Choix de la traduction
Affectation traduction
Traduction avec Zend Framework
© All rights reserved. Zend Technologies, Inc.
Fichiers sources – Concept des adaptateurs
• Concept des adaptateursMultiples types de source supportésFacile d'implémenter votre propre adaptateur
• Sélectionnez l'adaptateur suivant votre utilisationL'utilisation peut ensuite évoluerBasculer 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
ArrayCsvGettextIniQtTbxTmxXliffXmlTmLe vôtre…
14 Translation within Zend Framework
© All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateur Array
• PourRapide, le plus rapideLisible par l'homme
15 Translation within Zend Framework
• ContrePas d'outil d'éditionPas simple pour le client final
• UtilisationAu cours du développementPetit site à site moyen
return array( 'Original content' => 'Translated content', 'Another content' => 'Also translated');
© All rights reserved. Zend Technologies, Inc.
Fichier sources – Adaptateur CSV
“Original content”;”Translated content”“Another content”;“Also translated”
16 Translation within Zend Framework
• PourRapideLisible par l'hommeÉditable par le client
• ContrePas d'outil d'édition
• UtilisationTraduction par le clientPetit site à site moyen
© All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateurs INI
Original_content = “Translated content”Another_content = “Also translated”
17 Translation within Zend Framework
• PourRapideLisible par l'homme
• ContrePas d'outil d'éditionPas simple pour le client finalLimitation au niveau des clés
• UtilisationMixe la traduction avec la configurationPetit site à site moyen
© All rights reserved. Zend Technologies, Inc.
Fichiers sources – Adaptateur Gettext
FORMAT BINAIRES (fichiers *.mo)… *.po n'est pas Gettext
18 Translation within Zend Framework
• PourCrypté pour le clientOutils gratuitsTraduction professionnelle
• ContreFigé pour le clientPas lisible par l'homme
• UtilisationDe nombreuses sources sont disponiblesPetit site à site d'entreprise
© 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>
19 Translation within Zend Framework
• PourOutils de traduction
professionnelsSupporte les balises HTML
• ContrePas de bons outils d'édition libreDifficile pour le client finalNécessité d'utiliser un cache
• UtilisationAvec les services de traduction professionnelsSite moyen à site d'entreprise
REMARQUE : on lit parfois qu'il s'agit d'un « standard industriel », ATTENTION c'est un format lourd et verbeux
20 © All rights reserved. Zend Technologies, Inc.
Exemples concrets
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
21 Working examples
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
22 Working examples
Sélectionner votre adaptateur Une seule ligne nécessaire pour changer d'adaptateur
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© All rights reserved. Zend Technologies, Inc.
Traduisez moi – Exemple d'utilisation
23 Working examples
Où sont les traductions ? Dossier
Fichier unique
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
24 Working examples
Quelle langue ? Détection automatique (‘auto’, ‘browser’)
Déclaration manuelle (‘de_AT’, ‘en_US’)
Paramètre global de l'application (Zend_Application)
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
25 Working examples
Options possibles Scan : recherche de traduction
• LOCALE-DIRECTORY : /www/lang/fr/file.php
• LOCALE-FILE: /www/lang/file-fr.php
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Exemple d'utilisation
26 Working examples
Ça marche ! Retourne « J'ai dit bonjour »
$trans = new Zend_Translate( array('adapter' => 'array', 'content' => '/www/lang/', 'locale' => 'fr_FR', 'scan' => Zend_Translate::LOCALE_DIRECTORY ));$trans->translate('I said hello');
© 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
27 Working examples
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
© 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
28 Working examples
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
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Aide de vue
29 Working examples
Aide de vue traduction (dans vos scripts de vue) Plus simple
Plus court
$this->translate('I said hello');
$this->translate('Company Name', 'en');
© All rights reserved. Zend Technologies, Inc.
Traduisez-moi – Traductions dynamiques
30 Working examples
Ajouter des paramètres à votre traduction Avec une syntaxe de type sprintf
Plusieurs paramètres possibles
Les autres langues peuvent changer l'ordre
$this->translate("Pay %1\$s euro", $money);
$this->translate("Pay %1\$s euro until %2\$s", $money, $date);
© All rights reserved. Zend Technologies, Inc.
Autres composants – Le registre
31 Working examples
Zend_Registry Utilisable partout dans votre application
• Zend_Form
• Zend_Validate
• Zend_View
• Et d'autres...
$translate = new Zend_Translate(/*...*/);
Zend_Registry::set(‘Zend_Translate’, $translate);
© All rights reserved. Zend Technologies, Inc.
Autres composants – Application
32 Working examples
Application Reconnu partout dans votre application
Configurable
resources.translate.adapter = “array“;resources.translate.locale = “fr_FR”;resources.translate.data = “/www/lang/”;
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
33 Working examples
Singulier / Pluriel Car (un élément) / Singulier
Cars (plusieurs éléments) / Pluriel
Même méthode pour gérer le singulier ou le pluriel
$translate->plural('Car', 'Cars', 2);$translate->translate(array('Car', 'Cars', 2));
$this->translate(array('Car', 'Cars', 2));
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
34 Working examples
N'oubliez pas vos paramètres 1 Car
3 Cars
Règles des pluriels implémentées pour toutes les langues
$this->translate(array('%1\$s Car', '%1\$s Cars', $nb));
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
35 Working examples
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
$this->translate(array('Singular', 'Plural1', 'Plural2', 2));
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Traduction des pluriels
Les règles plurielles sont supportées par :
▶ Array▶ CSV▶ Gettext
Mais pas par :
▶ Ini▶ Qt▶ Tmx▶ Tbx▶ Xliff▶ XmlTm
36 Working examples
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
37 Working examples
Cache… cache… cache
• Règle 1: utilisez un cache !!!
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
38 Working examples
Cache… cache… cache
• Règle 1: utilisez un cache !!!
• Règle 2: utilisez toujours un cache !!!
© All rights reserved. Zend Technologies, Inc.
Pour allez plus loin – Performance
39 Working examples
Cache… cache… cache
• Règle 1: utilisez un cache !!!
• Règle 2: utilisez toujours un cache !!!
• Règle 3: vous devez utiliser un cache !!!
© All rights reserved. Zend Technologies, Inc.
Pour aller plus loin – Performance
40 Working examples
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
© 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
42 © All rights reserved. Zend Technologies, Inc.
MerciDes questions ?
Talks : http://joind.in/event/view/2504Slideshare : http://www.slideshare.net/mikaelkael
© All rights reserved. Zend Technologies, Inc.
Formation Zend Framework
Zend Framework : concepts avancésCe 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