Pxxo intègre nativement un mécanisme permettant de facilement proposer des widgets en plusieurs langues.
Pour permettre une traduction des libellés produits par un widget on utilise la méthode nommée “_”. Pour des libellés contenus dans la classe PHP du widget, on utilisera classiquement cette méthode en la préfixant par $this, exemple :
$v = $this->_('hello world');
Dans tous les fichiers de ressources (html, javascript, etc…) on utilisera la même méthode au travers du pointeur vers la classe PHP du widget :
echo $Self->_('hello world');
Par défaut, on définit l'ensemble des traductions possibles d'un widget dans des fichiers PHP du nom de la langue (éventuellement le pays) qu'ils définissent, exemples :
fr_FR.php en_US.php Ces fichiers doivent se trouver dans un répertoire nommé i18n placé dans le répertoire des thèmes du widget.
Important : Les fichiers de traduction fonctionnent avec les thèmes, on peut donc redéfinir zéro, un, ou plusieurs fichiers de traduction en fonction du thème choisi.
Le format utilisé est celui du Zend Framework. Les tableaux PHP sont très pratiques et c'est d'ailleurs ce format que l'on rencontre le plus couramment dans le widget pxxo. Voici un exemple d'un fichier fr_FR.php :
$this->TranslateData['Hello World'] = 'Bonjour le monde';
Le format supporté par printf peut être utilisé. Voici un exemple :
$this->TranslateData['There is %d fish in the river'] = 'Il y a %d poissons dans la rivière';
On peut ensuite passer les paramètres attendus lors de la traduction :
$Self->_('There is %d fish in the river', 3);
La langue courante choisie pour un widget est disponible dans la variable de classe nommée $Lang.
Il est possible de surcharger les traduction d'un widget via le tableau de paramètres depuis la version 5.3 de Pxxo. Voici un exemple : <cpde php>$params['TranslateData']['You nick is %s'] = 'Votre nickname (pseudonyme) est %s';</code>