La gestion des langues
Par Ekilio le mercredi, novembre 12 2008, 07:35 - Documentation - Lien permanent
Je vais revenir un peu sur le système de gestion des langues du framework. Cette gestion se fait par la classe langue, qui est implémentée dans chaque module par le constructeur.
Je vais revenir un peu sur le système de gestion des langues du framework. Cette gestion se fait par la classe langue, qui est implémentée dans chaque module par le constructeur.
Implémentation de la langue dans un module
Si vous changez le constructeur d’un module (en surchargeant la fonction __construct()), vous perdrez la configuration automatique de la langue. Pour pouvoir néanmoins utiliser la langue, vous pouvez inclure cette ligne dans votre constructeur :
$this->langueModule = new langue($this->nomModule);
Variables et méthodes de la classe langue
__construct($moduleLangue, $codeLangue)
Le constructeur de la classe langue attends un ou deux arguments. Le premier, obligatoire, indique à quel fichier de langue on se réfère. Par défaut, pour un module, c’est le nom du module qui est utilisé. Le second, facultatif, est le code de la langue (fr, en, etc…) qui va être utilisée. Si ce second argument n’est pas rempli, c’est le code défini pour le système qui va être utilisé.
Le code défini pour le système est défini comme ceci :
- Si il existe une valeur langue dans les variables de l’utilisateur, alors c’est cette valeur qui va être utilisée.
- Sinon, c’est la langue par défaut qui sera utilisée ; elle est définie par la valeur defautLangue de la configuration globale.
Le constructeur va ensuite charger un fichier situé dans le dossier langues/$codeLangue. Si le fichier $moduleLangue.mlang existe, alors ce sera ce fichier qui sera chargé, décodé et transformé pour être la liste des clefs de langues. Sinon, si le fichier $moduleLangue.php existe, c’est lui qui sera inclu pour être ce même tableau ; le fichier $moduleLangue.php doit alors être de cette forme :
<?php 'clefDeLangue' => 'Valeur de la clef de langue', ); ?>
Le tableau doit toujours se nommer $langueC. Notez également que les caractères accentués semblent mal pris en compte lors de l’enregistrement en .mlang du fichier ; il est vivement conseillé d’utiliser leur code html (é à la place de é par exemple).
Dans la version 0.2, le constructeur supprime également le fichier .php si il existe et qu’il n’y a pas de fichier .mlang; ce comportement est enlevé dans la version 0.3, mais le fichier .php est ignoré tant que le fichier .mlang existe.
__destruct()
Le destructeur de la classe sert à sauvegarder la langue dans le fichier .mlang correspondant. Notez qu’il y a un bug de php qui fait que si on demande l’ouverture ou la création d’un fichier à la fin de l’execution du script (que cette fin soit provoquée par un die() ou par la fin du fichier), cette fin ne s’executera pas dans le même répertoire que le fichier l’appelant et va donc provoquer des bugs dans toutes les ouvertures de fichiers. Pour remédier à ce bug, le framework décharge manuellement ses classes à la fin du fichier d’index (lignes 37 à 39).
Accès aux clefs de langue
Une fois la classe créée, il est possible d’en parcourir les clefs de diverses façons. Par “clef”, j’entends les différentes variables de langue qui auront été définies dans le fichier de langue, en tant que clefs du tableau associatif.
Notez que pour les exemples suivants, je considère que je suis dans un module et donc que ma classe de langue est accessible par $this->langueModule.
La façon la plus simple d’acceder à une clef de langue est de passer par l’appel de la variable ayant son nom dans la classe :
$maVariableTraduite = $this->langueModule->maVariable;
De même, si vous voulez pour une raison ou une autre (dans l’administration par exemple) modifier une clef de langue, il suffit de redéfinir sa valeur ainsi :
$this->langueModule->maVariable = 'toto';
Notez que par défaut, dans une vue, toute clef correspondant à une clef de langue du module sera automatiquement remplacée :
monModule.php
$this->nomVue = 'maVue'; $this->langueModule->maVariable = 'toto';
monModule_maVue.html
{MAVARIABLE}
Le résultat si on affiche l’action sera :
toto
Enfin, dernière possibilité à souligner, il est possible de parcourir simplement toutes les clefs de langue d’un module via une boucle foreach :
foreach($this->langueModule as $clef => $valeur) { }

