43
© All rights reserved. Zend Technologies, Inc. Internationalisation et localisation avec Zend Framework Mickaël Perraud Contributeur Zend Framework Responsable documentation française

Découvrez le noyau d'internationalisation du Zend Framework

Embed Size (px)

DESCRIPTION

Le Zend Framework est fourni avec un noyau d’internationalisation (I18N) complet.Avec ce premier Webinar à propos du noyau I18N, vous découvrirez les bases de l’internationalisation. Ce Webinar traitera des détails de traduction, décrira les différences entre les « adapters » disponibles et vous expliquera comment mettre en place les traductions.Vous découvrirez comment utiliser des traductions au sein d’une vue ou d’un contrôleur et comment travailler avec les pluriels.

Citation preview

Page 1: 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

Page 2: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 3: Découvrez le noyau d'internationalisation du Zend Framework

3 © All rights reserved. Zend Technologies, Inc.

Qu'allons-nous voir aujourd'hui ?

Page 4: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 5: Découvrez le noyau d'internationalisation du Zend Framework

5 © All rights reserved. Zend Technologies, Inc.

Internationalisation (I18N)

Page 6: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 7: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 8: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 9: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 10: Découvrez le noyau d'internationalisation du Zend Framework

10 © All rights reserved. Zend Technologies, Inc.

Traduction avec Zend Framework

Page 11: Découvrez le noyau d'internationalisation du 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

Page 12: Découvrez le noyau d'internationalisation du 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

Page 13: Découvrez le noyau d'internationalisation du 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

Page 14: Découvrez le noyau d'internationalisation du Zend Framework

© All rights reserved. Zend Technologies, Inc.

Fichiers sources – Adaptateurs

ArrayCsvGettextIniQtTbxTmxXliffXmlTmLe vôtre…

14 Translation within Zend Framework

Page 15: Découvrez le noyau d'internationalisation du 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');

Page 16: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 17: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 18: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 19: Découvrez le noyau d'internationalisation du 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>

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

Page 20: Découvrez le noyau d'internationalisation du Zend Framework

20 © All rights reserved. Zend Technologies, Inc.

Exemples concrets

Page 21: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 22: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 23: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 24: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 25: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 26: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 27: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 28: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 29: Découvrez le noyau d'internationalisation du Zend Framework

© 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');

Page 30: Découvrez le noyau d'internationalisation du Zend Framework

© 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);

Page 31: Découvrez le noyau d'internationalisation du Zend Framework

© 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);

Page 32: Découvrez le noyau d'internationalisation du Zend Framework

© 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/”;

Page 33: Découvrez le noyau d'internationalisation du Zend Framework

© 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));

Page 34: Découvrez le noyau d'internationalisation du Zend Framework

© 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));

Page 35: Découvrez le noyau d'internationalisation du Zend Framework

© 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));

Page 36: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 37: Découvrez le noyau d'internationalisation du Zend Framework

© All rights reserved. Zend Technologies, Inc.

Pour aller plus loin – Performance

37 Working examples

Cache… cache… cache

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

Page 38: Découvrez le noyau d'internationalisation du Zend Framework

© 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 !!!

Page 39: Découvrez le noyau d'internationalisation du Zend Framework

© 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 !!!

Page 40: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 41: Découvrez le noyau d'internationalisation du Zend Framework

© 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

Page 42: Découvrez le noyau d'internationalisation du Zend Framework

42 © All rights reserved. Zend Technologies, Inc.

MerciDes questions ?

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

Page 43: Découvrez le noyau d'internationalisation du Zend Framework

© 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