Multilingue : quelques astuces

En complément du sujet sur la mise en place d’un site multilingue, voici quelques astuces supplémentaires :

  • Gestion du pluriel avec n() ;
  • Gestion de variables dans une chaîne avec printf() ;
  • Traduire le coeur de CakePHP.

1. Gestion du pluriel avec n()

Nous avons vu la fonction () qui permet à CakePHP de créer des fichiers de traduction automatiquement. La fonction n() permet de gérer sans contrainte le pluriel d’un mot ou d’une expression. La fonction __n() prend 4 paramètres :
  • La chaîne de caractères au singulier ;
  • La chaîne de caractères au pluriel ;
  • Le nombre qui va déterminer s’il faut utiliser le singulier ou le pluriel ;
  • Un booléen facultatif : false (par défaut) affiche la chaîne résultante, true la renvoie seulement.

L’exemple suivant affichera bien « Résultat » si count($data) est inférieur ou égal à 1, « Résultats » sinon.

<?php __n('Résultat', 'Résultats', count($data)); ?>

Attention, pour que la gestion des pluriels à la française soit bien prise en compte dans PoEdit, nous ouvrons le fichier .po correspondant au français, qui normalement se trouve dans locale/fre/LC_MESSAGES/default.po, et ouvrons le menu Catalogue > Configuration. Dans le premier onglet, « Info Projet », nous trouvons une case « Formes Plurielles » vide, que nous remplissons avec la formule suivante :

nplurals=2; plural=n>1;

Nous pouvons enregistrer et redémarrer PoEdit avant de réouvrir le fichier default.po : cette fois, lorsque nous cliquons sur un mot ou une expression pouvant être mis au pluriel (c’est à dire une chaîne appelée avec la fonction __n()), nous avons accès à deux onglets pour la traduction, « Forme 0″ et « Forme 1″, respectivement le singulier et le pluriel de l’expression à traduire.

2. Gestion de variables dans une chaîne avec printf()

Il nous est souvent arrivé de devoir insérer la valeur d’une variable dans une chaîne pouvant être traduite. Nous utilisons alors la fonction PHP printf() :

<?php printf(__('Les produits de la catégorie %s :', true), $data['Categorie']['nom']) ?>

Si la chaîne doit être renvoyée et pas affichée, nous utilisons sptrinf() :

<?php $this->pageTitle = sprintf(__('Les produits de la catégorie %s :', true), $data['Categorie']['nom']) ?>

3. Traduire le coeur de CakePHP

Cette astuce permet en particulier de pouvoir afficher les mois de l’année en français quand nous appelons les méthodes du FormHelper qui concernent des dates. Il suffit de lancer la console en appelant le script « i18n » et de choisir l’option [E], puis de changer le path proposé pour pointer vers le coeur de CakePHP. Nous choisissons enfin d’enregistrer le fichier de traductions dans le dossier locale de notre application, et voilà.

Pierre-Emmanuel Fringant

Articles connexes

Commentaires

encore une pépite que la fonction __n() décortiquée ! je l’ai intégré à PunCake et c’est franchement impeccable ! merci ,)

Super, j’ai pu facilement traduire les dates en français, c’est très simple et ça marche bien !

Participez

Pour insérer une portion de code, utilisez <pre lang="php">...</pre>