N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
J’ai encore rencontré récemment le problème bien connus des utilisateurs de prestashop qui souhaitent changer les traductions depuis le back-office.
L’erreur d’affichage des champs de formulaire « max_input_vars » qui empeche d’afficher les traductions, et donc de les modifier depuis l’administration.
J’avais apporté une solution il y’a plusieurs années pour corriger ce problème sur un hébergement mutualisé ovh : Prestashop problème max_input_vars en hébergement mutualisé chez ovh ( Elle ne doit plus fonctionner malheureusement )
Dans le cas de ceux qui disposent d’un serveur dédié avec les accès nécessaires, la modification du php.ini corrige rapidement ce problème.
Pour mon problème j’avais uniquement quelques traductions à réaliser, l’ajout des informations de traductions directement dans les fichiers de traductions est donc une solution envisageable.
Le fonctionnement est assez simple , la clé de traduction est construite de la manière suivante
<{nomModule}nomTheme>nomFichier_md5(cleTraduction)
Cette clé de traduction est ajoutée dans la variable $_MODULE , qui contient toutes les traductions.
Par exemple la traduction du code ci-dessous , dans le fichier banwire.php
$this->displayName = $this->l('Bank wire'); |
est stocké sous la forme suivante :
$_MODULE['<{bankwire}prestashop>bankwire_05adcee99142c1a60fb38bb1330bbbc1'] = 'Virement bancaire';
Vous pouvez-voir grâce aux codes couleurs comment la clé est construite.
C’est tout pour la théorie, voici maintenant un petit script qui vous donnera la clé de traduction que vous souhaitez !
<html> <head> <title>Translation tool</title> <style> label,input {float:left;} div.row {clear:both;margin-top:10px; height:40px;} div.hint {font-style:italic;clear:left;} .results {border:1px solid; padding:10px;margin:10px;} </style> </head> <body> <?php if ( isset($_POST) && sizeof($_POST) ) : ?> <div class="results"> <?php //Sécurisation basique des entrées $datas = array(); foreach ( $_POST as $key => $value) $datas[$key] = trim(strip_tags($value)); //Création de la clé du tableau de traduction $translation = '<{'.$datas['module_name'].'}'.$datas['theme_name'].'>'.$datas['file_name'].'_'.md5($datas['translate_key']); echo '<p>La clé de traduction pour le module '.$datas['module_name'].', pour le theme '.$datas['theme_name'].' dans le fichier '.$datas['file_name'].'</p>'; echo $translation; ?> Pour insérer la traduction à votre module ajouter la ligne suivante dans le fichier de traduction souhaité <br /> <?php echo '$_MODULE['.$translation.'] = \''.addslashes($datas['translate_value'])."'"; ?> <p>Fichier de traduction global du module , ou fichier de traduction du module dans le thème souhaité </p> </div> <?php endif; ?> <form name="translate" id="translate_form" method="post"> <div class="row"> <label for="module_name">Nom du module</label> <input type="text" name="module_name" /> </div> <div class="row"> <label for="file_name">Nom du fichier</label> <input type="text" name="file_name" /> <div class="hint">Nom du fichier dans lequel est situé la traduction (sans extension )</div> </div> <div class="row"> <label for="theme_name">Nom du thème</label> <input type="text" name="theme_name" value="prestashop" /> <div class="hint">Nom du thème pour la traduction</div> </div> <div class="row"> <label for="translate_key">Clé de traduction</label> <input type="text" name="translate_key" /> <div class="hint">Nom de la clé de traduction ( qui ne doit pas contenir de caractère spéciaux)</div> </div> <div class="row"> <label for="translate_value">Valeur de traduction</label> <input type="text" name="translate_value" /> </div> <div class="row"> <input type="submit" value="Envoyer" /> </div> </form> </body> </html> |
C’est un script très basique, mais qui devrait pouvoir vous permettre de gagner du temps pour des corrections ou ajouts de traductions.
Ce script m’a sauvée pour traduire les boutons du module RGPD Officiel dans la page mon compte ! Le seul truc qui manquait, c’était les ‘ pour encadrer le contenu dans les [] et le ; à la fin. Et le nom du fichier doit être entré en minuscule. Peut-être parce que c’est un PS 1.7.6.4 ? Mille mercis !