Ceci va être utile pour toutes les chaînes de caractères qui composent les parties "statiques" de notre application. Pour les contenus stockés dans la base de données, il y a un "comportement" (
Behavior
) fourni par Cake qui va en fait déplacer les champs de nos modèles qui doivent être traduits vers une table spécialement créée à cet effet. De la même façon que précédemment, lorsqu'on demandera un contenu, il ira rechercher la traduction correspondante à la langue en cours dans la table qui contient les traductions.Fonctions gettext()
Nous y voilà. Voici à quoi ressemble un champ de formulaire, avec son label :
Maintenant, ajoutons la petite fonction qui va faire en sorte que la magie opère...
Et voilà ! La fonction
__();
prend deux paramètres. Le premier est la fameuse clé à chercher dans les fichiers de traductions. Le second est à false
par défaut, ce qui a pour effet d'envoyer le résultat vers la sortie écran, de faire un echo
en somme... Donc, si vous avez besoin d'afficher directement un texte traduit, écrivez simplement __('mon texte')
. Sinon, mettez le deuxième paramètre à true
pour retourner le résultat plutôt que de l'imprimer !Les traductions se trouvent dans des fichiers default.po. Pour le français par exemple, le fichier se trouvera dans le dossier
app/locale/fre/LC_MESSAGES/
. Le code langue à 3 lettres suit la norme ISO639-2. Pour une liste des codes, c'est par ici :Liste des codes ISO639-2
Si Cake ne trouve pas le fichier correspondant à la langue en cours, il affiche simplement le texte de la clé. Ce qui est très utile ! En effet, vous pouvez simplement utiliser les chaînes en français dans les fonctions gettext. C'est donc celles-ci qui s'afficheront par défaut. Vous n'aurez plus qu'à les traduire dans les autres langues.
Les fichiers *.po ont une structure particulière qui est la suivante :
msgid="Clé de la chaîne à traduire"
msgstr="Chaîne traduite"
Il vous faudra ce couple pour chaque chaîne, dans un fichier texte. Attention, le fichier devra utiliser l'encodage UTF-8 ! Pour plus de facilité, il existe un logiciel nommé PoEdit. Je vous le recommande chaudement...
Dispo ici : PoEdit
Bien entendu, CakePHP dispose d'un outil permettant d'extraire en une fois toutes les chaînes à traduire de votre application. Rien de plus simple ! Tapez dans une console
cake i18n extract
. Cela va créer un catalogue default.pot que vous pourrez ensuite ouvrir avec PoEdit, et créer enfin les fichiers *.po dont vous avez besoin.Plus tard dans ce tutoriel, je vous expliquerai comment je génère les fichiers *.po et comment j'en gère les traductions directement depuis une interface d'administration.
Si vous travaille avec des fichiers .po et vous aves besoin de les traduire, mon suggestion est d'evaluer un outil de traduction comme https://poeditor.com
RépondreSupprimer