Cacher des langues en Front durant la traduction de votre boutique PrestaShop 1.7

PrestaShop 1.7 ne permet plus de traduire les produits si on a désactivé une langue.

Dernièrement nous sommes plusieurs utilisateurs de la version 1.7 de Prestashop à nous être rendu compte qu'il n'était plus possible de traduire une fiche produit dans le backoffice si on désactivait une langue.

Bien entendu, cela fut remonté par des utilisateurs du forum officiel de PrestaShop que je vous invite à consulter lorsque vous avez une question concernant l'utilisation de ce CMS de commerce en ligne.

Pour les plus vieux, ce comportement est totalement nouveau, les versions précédentes de PrestaShop, comme la très bonne 1.6, nous avait habitué à désactiver simplement une langue pour qu'elle ne soit plus disponible dans le sélecteur de langue de la partie Frontoffice tout en nous laissant le loisir de continuer à traduire nos produits pour toute nouvelle langue dans le backoffice.

Le contexte

Avec sa version 1.7, PrestaShop a décidé de s'appuyer sur un framework robuste et reconnu en utilisant Symfony.

Le choix fut fait d'intégrer petit à petit ce nouveau framework au sein de l'architecture vieillissante du code qui évoluait au fil des ans en accumulant certains écueils.

Dernièrement, la section liée au traitement des fiches produits fut donc intégrée à ce nouveau framework.

Cette nouvelle structure a mis en évidence cette régression entre les anciennes versions et la nouvelle ce qui a mis dans l'embarras plusieurs utilisateurs.

L'analyse de solutions possibles

Je me suis donc lancé dans l'analyse du code de cette nouvelle page en m'appuyant sur les remontées faites à partir du Github de Prestashop.

Voyant que la solution de ce problème ne serait pas traitée rapidement et que de toute manière cela ne serait pas rétroactif sur les versions déjà publiées de PrestaShop 1.7, j'ai épluché le code pour découvrir où se cache le loup.

Il apparait que Prestashop a repris le fonctionnement de l'ancienne fonction permettant de lister les langues, en omettant au passage que cette fonction ne retourne nativement que les langues qui sont actives sur la boutique.

Ainsi, il est logique, que lorsqu'on désactive une langue celle-ci ne soit plus active non plus sur la modification des fiches produits.

J'ai donc, dans un premier temps, essayé de lister tous les fichiers concernant cette fiche produit pour corriger l'appel de cette fonction afin de retourner tous les langues installées, dont celles désactivées.

Choses que j'ai réussi à faire.

Sauf que j'ai dû louper quelques fichiers, car lors de mon test, que j'effectue bien entendu sur la dernière version de PrestaShop disponible à ce jour, la 1.7.8.2, en mode multi boutique pour être certain du cas le plus extrême de traitement des données, je me suis retrouvé, suite à l'enregistrement de mes modifications avec un beau message d'erreur.

Cela veut simplement dire qu'il faut retrouver toute la chaine de traitement des données lors de leur enregistrement afin d'être certain que le traitement est bien effectué sur toutes les langues installées et non seulement les langues actives.

Ce travail demande beaucoup de temps et j'avoue ne pas en avoir assez pour tout faire.

J'ai donc pris la décision simplifier la chose et de créer un nouveau module pour contourner cette limitation.

La solution : le module

Je me suis donc lancé à reprendre le sélecteur de langue natif de PrestaShop pour modifier deux ou trois lignes de code afin de ne plus avoir ce problème, mais cela ne se présenta pas aussi simplement car il fallait bien proposer à un endroit le moyen de désactiver les langues pour ne pas les afficher tout en les conservant actives dans le backoffice.

J'ai donc décidé de transformer cela en un nouveau module qui vient en remplacement du module de sélection de langue par défaut.

Ce nouveau module, lors de son installation désinstallera automatiquement le module par défaut, et vous donne la possibilité de désactiver l'affichage des langues que vous souhaitez sur le frontoffice et ainsi empêcher vos clients de visiter le site dans une version dégradée puisque vous devez encore faire toutes les traductions.

Le résultat n'est pas extraordinaire visuellement puisqu'on reste sur le même design que le module original, mais on obtient exactement ce que l'on voulait pour corriger ce défaut.

Téléchargement du module

Prestatoolbox : https://www.prestatoolbox.fr/international-localisation/453-desactivez-les-langues-en-frontoffce-mais-pas-en-backoffice.html

Addons : https://addons.prestashop.com/fr/international-localisation/86918-bloc-de-choix-de-langue-personnalise.html

Forum

PrestaShop : https://www.prestashop.com/forums/topic/1062148-module-cacher-langues-en-frontoffice-pour-continuer-les-traductions-en-backoffice/