More Related Content Similar to Découvrez le noyau d'internationalisation du Zend Framework (20) More from Mickael Perraud (8) Découvrez le noyau d'internationalisation du Zend Framework2. 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.
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.
6. 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.
7. 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.
8. 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.
9. 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.
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 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.
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.
21. 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.
22. 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.
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 – 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.
25. 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.
26. 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.
27. 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.
28. 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.
29. 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.
30. 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.
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 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.
34. 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.
35. 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.
36. 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.
37. Pour aller plus loin – Performance
Cache… cache… cache
• Règle 1: utilisez un cache !!!
37 Working examples
© All rights reserved. Zend Technologies, Inc.
38. 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.
39. 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.
40. 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.
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.