maireg Posted May 19, 2011 Share Posted May 19, 2011 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 More sharing options...
Broceliande Posted May 19, 2011 Share Posted May 19, 2011 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_customerAvec 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 More sharing options...
Broceliande Posted May 19, 2011 Share Posted May 19, 2011 Au fait , peux tu nous dire à quel module d'envoi tu fais référence ? Link to comment Share on other sites More sharing options...
shagshag Posted May 19, 2011 Share Posted May 19, 2011 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 More sharing options...
maireg Posted May 24, 2011 Author Share Posted May 24, 2011 J'ai opté pour une autre solution, j'ai ajouté dans le fiche client un attribut langue préférée et je l'utilise pour envoyer la newsletter Link to comment Share on other sites More sharing options...
maireg Posted May 24, 2011 Author Share Posted May 24, 2011 Au fait , peux tu nous dire à quel module d'envoi tu fais référence ? Au module Newsletter - Envoi et statistiques. Qui au passage ne fonctionne pas !!!!!!!! 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