Administration des traductions
Point final de la partie traductions, l’interface d’administration.
Cette partie nécessite deux choses :
- La gestion des différentes langues
- La gestion des fichiers où se trouvent les traductions
Gestion des différentes langues
Cette partie est assez simple puisque toutes les traductions sont enregistrées dans un fichier [iso].json, pour le Français, ça donne fr.json.
Un menu de sélection de la langue à traduire est affichée en haut de l’interface et l’ensemble des chaines à traduire est donc multiplié par le nombre de langues actives dont l’administration sera ajoutée par la suite (lorsque le besoin s’en fera sentir).
Le tableau renvoyé au serveur lors de la soumission des traductions, sera donc un tableau à X dimensions dont la clé sera l’iso de la langue. Pour le moment, et étant donné que je gère l’Anglais, le Français et l’Allemand, le tableau sera architecturé comme suis :
Array (
'en' => Array ( ... ),
'fr' => Array ( ... ),
'de' => Array ( ... ),
);
Gestion des emplacements
Là, la tâche est un peu plus complexe, au démarrage j’étais parti sur un tableau de la structure avec un fichier spécifique qui générait le fichier json, mais j’avais deux problèmes, ça me faisait 2 fichiers à gérer et donc des bugs potentiels sans compter la redondance des données, et surtout lorsqu’une chaine était présente à plusieurs endroits différents, le fichier structuré fonctionnait, mais le json ayant la même clé pour ces différentes chaines, il n’était pas possible d’avoir des traductions différentes pour chacune d’entre elles.
Pour remédier à ce problème, j’ai donc changé mon fusil d’épaule et ai ajouté aux clés l’arborescence du fichier concerné, ce qui donne un fichier de ce type :
{
"app||Helpers||Dummies.php||Actions":"Actions",
"app||Helpers||Dummies.php||Administrator":"Administrateur",
"app||Helpers||Dummies.php||all":"tous",
...
J’ai bien entendu modifié le séparateur des répertoires par || qui ne devrait à priori pas se trouver dans une chaine, ce séparateur étant un paramètre d’environnement, il sera possible de le modifier pour parer à toute éventualité.
A partir de ce moment, l’ensemble des chaines traduisibles, sont autonomes, la génération du menu se fait simplement en utilisant les différentes partie de la clé, l’architecture de l’interface a été modifiée en conséquence et le nouveau fonctionnement est validé.
A ça j’ai ajouté un repère visuel, les chaines sans traduction ont un liseré rouge pour être plus visibles, ce qui nous donne l’interface suivante :
Lorsqu’on clique sur un menu, toutes les traductions en dépendant sont affichées, plus on descend dans le menu plus la sélection est précise, notez le menu de choix de la langue au dessus des chaines à traduire.