{ZF2] Zend translation : plusieurs fichiers de traductions
Par défaut, Zend Framework 2 (ZF2 pour les intimes) nous empêche d’utiliser plusieurs fichiers de traduction. Je ne sais pas trop pourquoi, je n’ai pas poussé mes recherches très loin, mais voici une solution simple et efficaces pour gérer plusieurs fichiers de traductions (et ainsi être mieux organisé). Cette astuce n’est valable que pour les fichiers de traduction de Array en PHP.
Sur mon site j’ai l’architecture suivante pour mes fichiers de traductions :
/data
———– /language
———————— / fr_FR
—————————————-/ message.php
—————————————-/ Zend_Validate.php
—————————————-/ Zend_captcah.php
———————— / en_GB
—————————————-/ message.php
—————————————-/ Zend_Validate.php
—————————————-/ Zend_captcah.php
Voici ce que nous aurions aimer faire dans notre module.config.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
'translator' => array( 'locale' => 'fr_FR', 'translation_file_patterns' => array( array( 'type' => 'phpArray', 'base_dir' => 'data/language', 'pattern' => '%s/message.php', ), array( 'type' => 'phpArray', 'base_dir' => 'data/language', 'pattern' => '%s/Zend_Validate.php', ), array( 'type' => 'phpArray', 'base_dir' => 'data/language', 'pattern' => '%s/Zend_Captcha.php', ), ),//fin translation_file_patterns ), |
Mais seul le 1er fichier est pris en compte. Nos autres fichier sont alors inutiles. Une solution serait de réunir toutes les traductions en un seul fichier. Mais niveau organisation et maintenance, c’est vraiment laborieux…
La solution est de créer un fichier qui va fusionner vos fichiers de traduction. J’ai créé le fichier data/language/fr_FR/all_trad.php
1 2 3 4 5 6 7 8 |
<?php $message = include(__DIR__.'/message.php'); $validate = include(__DIR__.'/Zend_Validate.php'); $captcha = include(__DIR__.'/Zend_Captcha.php'); $tab_final = array_merge($message, $validate); return $tab_final; |
Le fichier est plutôt simple, on récupère tous nos tableaux de traductions php et ensuite nous les fusionnons à l’aide de array_merge. Pour finir on retourne le tableau fusionné. L’utilisation de __DIR__ nous permet de récupérer le répertoire courant et ainsi de ne pas préciser la langue courante.
Notre code présent dans module.config.php devient alors :
1 2 3 4 5 6 7 8 9 10 |
'translator' => array( 'locale' => 'fr_FR', 'translation_file_patterns' => array( array( 'type' => 'phpArray', 'base_dir' => 'data/language', 'pattern' => '%s/all_trad.php', ) ),//fin translation_file_patterns ), |
Hé voilà ça fonctionne ! Vous n’avez plus qu’à copier ce fichier pour toutes vos langues, vous pourrez alors bien organiser vos fichiers.