Jump to content

[RESOLU]Traduction sujet mails module ps_reminder


Recommended Posts

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 by Cirice
Résolu (see edit history)
Link to comment
Share on other sites

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

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

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

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

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

  • Cirice changed the title to [RESOLU]Traduction sujet mails module ps_reminder
à 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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...