Pliciweb Solutions, étant une société spécialisée dans le développement informatique, il n’y a rien de plus frustrant pour ces développeurs en Php que de passer un temps non négligeable sur un petit bout de code, une petite fonctionnalité qui nous bloque la validation d’une fonctionnalité.

Tout développeur informatique pourra vous citer un exemple ou il a réussi  à coder une portion complexe de programme informatique en 2 fois de temps qu’initialement prévu mais il a reperdu toute cette avance sur un petit détail qui empêchait le bon fonctionnement du programme informatique. En informatique, tout est question de détail et chaque caractère à son importance. Notre catégorie Prestashop en regorge plein.

Telle est la mésaventure rencontrée par un de nos salarié travaillant sur un site Internet de vente en ligne propulsé par Prestashop.

En effet, après avoir codé un module, plutôt rapidement, et il se mit à vouloir le traduire. Malheureusement tous les champs des templates du modules ne ressortaient pas lors de l’utilisation de l’outil de traduction de Prestashop.

Dans l’interface d’administration, il sélectionnait le menu de traduction, en prenant bien soin  de fermer et d’ouvrir toutes les traductions pour prendre soin de voir toutes les traductions disponibles. Mais les traductions restaient invisibles.

Après un bon mal de tête, nous avons réussi à identifier l’origine du problème. Il s’agit d’un tout petit caractère. A vous de le deviner

× Bloc qui ne fonctionne pas

{l s="Subscribe" mod="plici_footer"}

Bloc qui fonctionne

{l s="Subscribe" mod='plici_footer'}

Vous  l’avez vu ?

Effectivement, il s’agit du délimiter de chaîne de caractères dans le paramètre « mod ». Afin de faire fonctionner correctement l’outil de traduction, le délimiteur de chaîne de caractères doit obligatoirement être le caractère ‘ et non pas le caractère « .

Bien que de nombreux langages de programmation, comme ceux utilisés par Prestashop et nos équipes (Html, Javascript, Smarty, Twig, Php, ..) acceptent les 2 caractères comme identificateur de chaînes de caractères, Prestashop dans son outil de traduction n’autorise que le caractère ‘.

Cela est clairement mentionné dans sa documentation : https://devdocs.prestashop.com/1.7/modules/creation/module-translation/classic-system/

Si on analyse le fichier qui identifie les textes à traduire, on aperçoit dans la méthode userParseFile, l’expression régulière utilisée pour détecter les chaînes de caractère :

$regex = '/\{l\s*s=([\'\"])' . _PS_TRANS_PATTERN_ . '\1.*\s+mod=\'' . $module_name . '\'.*\}/U';

La détection du nom du module se fait donc uniquement avec le délimiteur  ‘.

Pour la  correction rien de plus facile, une recherche dans le répertoire du module avec le motif mod= »plici_footer », suivi d’un remplacé. Et hop, nous avons pu retrouver toutes nos traductions.