Jump to content

Comment gérer la traduction d'un template utilisé pour l'envoi de mails (par exemple)


Recommended Posts

Je cherche en vain, mais j'ai un système d'envoi de mail en plusieurs langues (<=> newsletter), je peux saisir le contenu de la news dans chaque langue mais je n'arrive pas à forcer la traduction du template ...

J'ai fouillé dans le code et apparement on utilise tjs la langue qui est dans le cookie, comment forcer la prise en compte d'une autre langue pour la traduction de mon tpl ?

Pour le moment j'appelle simplement :

$this->display(__FILE__, 'templates/'.basename($tpl, '.tpl').'/'. $tpl);



Merci d'avance

Link to comment
Share on other sites

Je cherche en vain, mais j'ai un système d'envoi de mail en plusieurs langues (<=> newsletter), je peux saisir le contenu de la news dans chaque langue mais je n'arrive pas à forcer la traduction du template ...

J'ai fouillé dans le code et apparement on utilise tjs la langue qui est dans le cookie, comment forcer la prise en compte d'une autre langue pour la traduction de mon tpl ?

Pour le moment j'appelle simplement :

$this->display(__FILE__, 'templates/'.basename($tpl, '.tpl').'/'. $tpl);



Merci d'avance



C'est trop flou pour donner une réponse plus précise , mais la solution se trouve nécessairement avant l'appel du tpl , lors du chargement des variables.

Il faut avant que chaque envoi de mail , tu puisses connaitre l'id client , ici je présume que tu l'as dans $id_customer

Avec l'objet obtenu tu charges les pays associés au client :
$countrylist = Customer::getCurrentCountry($id_customer);

$country=new Country($countrylist[0]); //on ne traite que le premier en supposant que c'est le pays par défaut (on peut pas faire autrement de toute façon)




du pays l' iso code

$iso = lowercase($country->iso_code); // les codes isos pays sont en maj , ceux des langues en minuscule



enfin , du code iso , tu récupères la langue :

$id_lang = Language::getIdByIso($iso_code);




Voilà tu n'as plus qu'à utiliser $id_lang à la place de $cookie->id_lang


C'est pas testé ! ... donc je peux avoir oublié un truc mais à un poil près c'est l'idée

Link to comment
Share on other sites

Salut,

Si ça peut aider, voici comment je fais pour envoyer un mail dans la langue du client :

D'abord je cherche la langue de son dernier panier utilisé. Comme la langue du client n'est définie que dans son cookie, j'ai trouvé que cette astuce.
S'il n'a pas de panier tant pis, on utilise la langue actuelle (mais si on écrit à un client il a surement un panier).

// find customer language
$cart = Db::getInstance()->getRow('
   SELECT c.id_lang
   FROM `'._DB_PREFIX_.'cart` c
   WHERE c.`id_customer` = '.intval($customer->id).'
   ORDER BY c.id_cart DESC');
   $id_lang = $cart?$cart['id_lang']:$cookie->id_lang;



Il y a aussi le problème du sujet de l'email à traduire. pour ça j'ai ma méthode maison :

/**
* idem than Module::l but with $id_lang
**/
public function l2($string, $id_lang, $specific = false)
{
   global $_MODULE;
   $_MODULES = false;
   $file = _PS_MODULE_DIR_.$this->name.'/'.Language::getIsoById($id_lang).'.php';
   if (file_exists($file) AND include_once($file))
       $_MODULES = $_MODULE;

   if (!is_array($_MODULES))
       return (str_replace('"', '"', $string));

   $source = Tools::strtolower($specific ? $specific : get_class($this));
   $string2 = str_replace('\'', '\\\'', $string);
   $currentKey = '<{'.$this->name.'}'._THEME_NAME_.'>'.$source.'_'.md5($string2);
   $defaultKey = '<{'.$this->name.'}prestashop>'.$source.'_'.md5($string2);

   if (key_exists($currentKey, $_MODULES))
       $ret = stripslashes($_MODULES[$currentKey]);
   elseif (key_exists($defaultKey, $_MODULES))
       $ret = stripslashes($_MODULES[$defaultKey]);
   else
       $ret = $string;
   return str_replace('"', '"', $ret);
}



Ensuite on envoie l'e-mail :

$result = Mail::Send($id_lang, 'voucherreminder', $this->l2('Your voucher will expire', $id_lang), $vars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, $this->mailPath);



Bon codage.

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...