Cirice Posted July 24, 2023 Share Posted July 24, 2023 (edited) Bonjour, j'utilise le module de relance clients pour les paniers abandonnés et ai constaté que les objets des mails étaient en anglais. Le souci est que je ne trouve nulle part dans l'outil de traduction un moyen de les traduire. Même dans la partie traduction des sujets de message. J'ai été voir dans le code du module et dans le fichier php il y a Mail::Send( (int)$email['id_lang'], 'followup_1', Mail::l( 'Your cart and your discount', (int)$email['id_lang'] ), $template_vars, $email['email'], $email['firstname'] . ' ' . $email['lastname'], null, null, null, null, dirname(__FILE__).'/mails/' ); C'est sur un PS 1.7.6.4. Faut-il changer quelque chose pour que la traduction soit possible depuis le BO ? Je souhaite traduire 'Your mail and your discount'. Merci d'avance Edited July 24, 2023 by Cirice Résolu (see edit history) Link to comment Share on other sites More sharing options...
wepresta Posted July 24, 2023 Share Posted July 24, 2023 Bonjour, vous voulez dire "Your cart and your discount" ? Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 bonjour, oui, pardon, il était tard 😉 Link to comment Share on other sites More sharing options...
wepresta Posted July 24, 2023 Share Posted July 24, 2023 Je pense que la traduction s'effectue ici Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 Merci pour la réponse mais, comme dit dans mon premier message, je n'y ai rien trouvé pour traduire le sujet du mail. J'ai bien été dans Traduction des mails > Sujet + Français. Mais il n'y a pas de ligne correspondante. Et dans Coeur de message, dans les mails du module, il n'y a bien sûr rien pour le sujet ... Link to comment Share on other sites More sharing options...
wepresta Posted July 24, 2023 Share Posted July 24, 2023 14 minutes ago, Cirice said: Merci pour la réponse mais, comme dit dans mon premier message, je n'y ai rien trouvé pour traduire le sujet du mail. J'ai bien été dans Traduction des mails > Sujet + Français. Mais il n'y a pas de ligne correspondante. Et dans Coeur de message, dans les mails du module, il n'y a bien sûr rien pour le sujet ... Pouvez me dire quel est le fichier ou il y a ce code svp ? Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 merci de vous pencher sur mon souci :- il s'agit de ps_reminder.php ligne 238 Link to comment Share on other sites More sharing options...
Eolia Posted July 24, 2023 Share Posted July 24, 2023 (edited) il faut que ce code soit sur une seule ligne: Mail::l('Your cart and your discount', (int)$email['id_lang']), Autrement la regex ne le trouve pas. Edited July 24, 2023 by Eolia (see edit history) 1 Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 Merci Eolia. J'ai mis sur une ligne mais cela ne fonctionne pas plus même après vidage de cache et suppression des dossiers dans var/cache. Toujours pas de ligne correspondante dans les traductions de sujets d'e-mails. Link to comment Share on other sites More sharing options...
Eolia Posted July 24, 2023 Share Posted July 24, 2023 Alors ils ont dû changer quelque chose dans les 1.7... Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 De fait, ce n'était pas dans "Sujets" mais cela a bien été ajouté dans les traductions de corps de messages. un tout grand merci Eolia !! Par contre, n'ayant jamais touché au fichier php de ce module, je suppose que c'est une erreur de Prestashop ? Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 il y a 1 minute, Eolia a dit : Alors ils ont dû changer quelque chose dans les 1.7... nos messages se sont croisés 🙂 effectivement cela doit être une erreur de codage de PS 1.7.6.4 vu que le fichire est d'origine. Merci encore ! Link to comment Share on other sites More sharing options...
Eolia Posted July 24, 2023 Share Posted July 24, 2023 à l’instant, Cirice a dit : De fait, ce n'était pas dans "Sujets" mais cela a bien été ajouté dans les traductions de corps de messages. un tout grand merci Eolia !! Par contre, n'ayant jamais touché au fichier php de ce module, je suppose que c'est une erreur de Prestashop ? Oui, la faute à celui qui a ré-écrit le code à la mode PSR-2 sans penser aux conséquences. La recherche des sujets des emails dans le code est assez particulière. protected function getSubjectMail($dir, $file, $subject_mail) { $dir = rtrim($dir, '/'); // If is file and is not in ignore_folder if(is_file($dir.'/'.$file) && !in_array($file, self::$ignore_folder) && preg_match('/\.php$/', $file) ) { $content = file_get_contents($dir.'/'.$file); $content = str_replace("\n", ' ', $content); // Subject must match with a template, // therefore we first grep the Mail::Send() function then the Mail::l() inside. if(preg_match_all('/Mail::Send([^;]*);/si', $content, $tab)) { for ($i = 0; isset($tab[1][$i]); $i++) { $tab2 = explode(',', $tab[1][$i]); if(is_array($tab2) && isset($tab2[1])) { $template = trim(str_replace('\'', '', $tab2[1])); foreach($tab2 as $tab3) { if(preg_match('/Mail::l\(\''._PS_TRANS_PATTERN_.'\'\)/Us', $tab3.')', $matches)) { if(!isset($subject_mail[$template])) { $subject_mail[$template] = array(); } if(!in_array($matches[1], $subject_mail[$template])) { $subject_mail[$template][] = $matches[1]; } } } } } } } // Or if is folder, we scan folder for check if found in folder and subfolder elseif(!in_array($file, self::$ignore_folder) && is_dir($dir.'/'.$file)) { foreach(scandir($dir.'/'.$file) as $temp) { if($temp[0] != '.') { $subject_mail = $this->getSubjectMail($dir.'/'.$file, $temp, $subject_mail); } } } return $subject_mail; } Link to comment Share on other sites More sharing options...
wepresta Posted July 24, 2023 Share Posted July 24, 2023 1 hour ago, Eolia said: Oui, la faute à celui qui a ré-écrit le code à la mode PSR-2 sans penser aux conséquences. La recherche des sujets des emails dans le code est assez particulière. protected function getSubjectMail($dir, $file, $subject_mail) { $dir = rtrim($dir, '/'); // If is file and is not in ignore_folder if(is_file($dir.'/'.$file) && !in_array($file, self::$ignore_folder) && preg_match('/\.php$/', $file) ) { $content = file_get_contents($dir.'/'.$file); $content = str_replace("\n", ' ', $content); // Subject must match with a template, // therefore we first grep the Mail::Send() function then the Mail::l() inside. if(preg_match_all('/Mail::Send([^;]*);/si', $content, $tab)) { for ($i = 0; isset($tab[1][$i]); $i++) { $tab2 = explode(',', $tab[1][$i]); if(is_array($tab2) && isset($tab2[1])) { $template = trim(str_replace('\'', '', $tab2[1])); foreach($tab2 as $tab3) { if(preg_match('/Mail::l\(\''._PS_TRANS_PATTERN_.'\'\)/Us', $tab3.')', $matches)) { if(!isset($subject_mail[$template])) { $subject_mail[$template] = array(); } if(!in_array($matches[1], $subject_mail[$template])) { $subject_mail[$template][] = $matches[1]; } } } } } } } // Or if is folder, we scan folder for check if found in folder and subfolder elseif(!in_array($file, self::$ignore_folder) && is_dir($dir.'/'.$file)) { foreach(scandir($dir.'/'.$file) as $temp) { if($temp[0] != '.') { $subject_mail = $this->getSubjectMail($dir.'/'.$file, $temp, $subject_mail); } } } return $subject_mail; } J'ai les yeux qui font mal en regardant cette fonction Link to comment Share on other sites More sharing options...
Cirice Posted July 24, 2023 Author Share Posted July 24, 2023 le sujet est mis en résolu mais j'aimerais comprendre ce qui cloche dans cette fonction (pour mon info personnelle) merci Link to comment Share on other sites More sharing options...
Eolia Posted July 24, 2023 Share Posted July 24, 2023 il y a 53 minutes, wepresta a dit : J'ai les yeux qui font mal en regardant cette fonction Ben c'est juste une regex qui cherche tout ce qui commence par Mail::Send(... dans le code et qui en extrait l'élément à traduire s'il existe. Link to comment Share on other sites More sharing options...
wepresta Posted July 24, 2023 Share Posted July 24, 2023 43 minutes ago, Eolia said: Ben c'est juste une regex qui cherche tout ce qui commence par Mail::Send(... dans le code et qui en extrait l'élément à traduire s'il existe. Pour le saut de ligne, suffirai de changer ca $content = preg_replace('/\s+/', ' ', $content); par ca non ? $content = str_replace("\n", ' ', $content); Link to comment Share on other sites More sharing options...
Eolia Posted July 24, 2023 Share Posted July 24, 2023 Je vous laisse péter le code comme vous l'entendez Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now