Réussir à traduire un module Prestashop 1.7 quand le système de traduction ne fonctionne pas
La traduction s’est très largement complexifiée depuis le version 1.7 de Prestashop, à priori ce doit être du à l’utilisation de Symfony, ça n’a pas changé que ça d’ailleurs mais c’est un autre sujet.
Dans certains cas, donc, la traduction des modules (mais pas que), peut poser des soucis, que ce soit en passant par le module directement ou bien en utilisant le menu de traductions, vous saisissez la chaine traduite, le moteur, ne vous dit rien de spécial, votre chaine est bien visible sur l’admin mais arrivé sur la boutique, rien à faire. Vous cherchez sur google et par chance vous tombez sur le même cas que vous, et c’est tant mieux, mais, parce qu’il y a un mais, si vous êtes dans le même cas que moi, c’est à dire, un site en quatre langues dont une seule est traduisible (à part l’Anglais bien sûr), là c’est le drame, parce que la plupart des solutions ne fonctionnent que si aucune langue ne peut être traduite, mais dans ce cas précis, je n’ai rien trouvé.
Deuxième phase, on met les mains dans le cambouis, donc dans ce cas, on isole le module fautif, le fichier fautif, la chaine fautive et on cherche dans le module la chaine traduite (dans la seule langue fonctionnelle), ce qui nous donne un truc du genre :
$_MODULE[‘<{moduletoto}prestashop>fichiertpl_13348442cc6a27032d2b4aa28b75a5d3’] = ‘Chaine traduite’;
Dans ce cas, le fichier de traduction se trouve dans le répertoire translations du répertoire du module, dans le fichier fr-FR par exemple. On copie donc cette ligne qui doit être manquante dans le fichier de-DE par exemple, ensuite on retourne dans les traductions côté admin, on met le texte dans la langue cible, on enregistre, et la chaine devient traduite sur la boutique.
Maintenant le bonus, imaginons que vous n’ayez trouvé aucune solution sur google et que vous n’ayez aucune traduction dans aucune langue, il va donc falloir ajouter cette même chaine dans le fichier de traduction qui se trouve dans le répertoire translations du répertoire du module, afin que cette dernière soit traduisible. Jusque là pas de souci, mais comment construire cette chaine ?
La solution est technique mais pas compliquée, voici le découpage de la chaine avec en gras les partie contextuelles :
$_MODULE[‘<{moduletoto}prestashop>fichiertpl_13348442cc6a27032d2b4aa28b75a5d3‘] = ‘Chaine traduite‘;
Avec dans l’ordre :
- Le nom du module
- Le nom du fichier
- la clé MD5 représentant la chaine à traduire
- La chaine traduite
Le nom du module est facilement identifiable, c’est le nom du répertoire du module.
le nom du fichier idem, c’est le nom du fichier cible, sans son extension.
La chaine traduite, rien de plus simple.
Le point le plus compliqué est la clé, effectivement ça parait difficile comme ça mais en fait c’est plus simple qu’il n’y parait, il suffit de se rendre sur le site md5.fr, de copier la chaine à traduire et de la coller dans la zone Texte à hasher, puis de cliquer sur convertir en MD5, vous récupèrerez alors au même endroit une chaine du genre 5ee84ea8b0300ffddd4638def590307b (hashage MD5 de la chaine Texte à traduire), à partir de là vous avez toutes les données pour recomposer votre ligne de traduction.
Voilà, une régression au niveau des traductions (à mon sens en tout cas), qui fait perdre pas mal de temps mais le principal est qu’il y ait une solution, si technique ou complexe soit elle.