Cakephp使用不同的用户选择语言发送电子邮件
我想发送关于网络语言的特定语言的电子邮件 例如,当用户注册时,他可以选择一种语言,例如英语-en、意大利语-it、德语-de和法语-fr 该网站是多语言的,所以我想做的是,当用户填写表单(例如联系人表单)时,在他提交表单后,会向他发送一封电子邮件 所以让我们假设他选择了意大利语作为网站的语言,但当他注册时,他选择了英语。因此,即使网站是意大利语的,电子邮件也应该用英语发送 电子邮件使用.pot文件通过cakephp的_()函数进行翻译 电子邮件模板如下: 联系美国用户Cakephp使用不同的用户选择语言发送电子邮件,cakephp,cakephp-2.5,Cakephp,Cakephp 2.5,我想发送关于网络语言的特定语言的电子邮件 例如,当用户注册时,他可以选择一种语言,例如英语-en、意大利语-it、德语-de和法语-fr 该网站是多语言的,所以我想做的是,当用户填写表单(例如联系人表单)时,在他提交表单后,会向他发送一封电子邮件 所以让我们假设他选择了意大利语作为网站的语言,但当他注册时,他选择了英语。因此,即使网站是意大利语的,电子邮件也应该用英语发送 电子邮件使用.pot文件通过cakephp的_()函数进行翻译 电子邮件模板如下: 联系美国用户 <h2 style=
<h2 style="color: #ee2424;">
<?php
echo __('SITENAME');
?>
</h2>
<?php
echo "<h2 style='text-align: left;'>";
if (isset($firstname) && isset($lastname) && isset($title)) {
echo __('Hello <span style="color: #ee2424;"> %s %s</span>.', $firstname, $lastname);
} else {
echo __('Hello');
}
echo "</h2>";
echo __('Thank you for contacting us!');
echo "<br />";
echo __('We will take a look to your <strong>reservation enquiry</strong> and we will get back to you with a booking quote');
echo "<br />";
echo "<hr />";
echo __('<p>Thanks and Regards.</p>');
?>
方法如下:
/**
* send E-mail method
*
* @return boolean
*/
public function __sendEmail($emailTo, $subject = 'Email', $template = 'default', $viewVars, $layout = 'default', $title_for_layout = 'test') {
$this->set('title_for_layout', $title_for_layout);
App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();
$Email->template($template, $layout)
->emailFormat('html')
->viewVars($viewVars)
->from(array('info@sitename.com'=>'sitename.com'))
->to($emailTo)
->subject($subject);
return $Email->send();
}
所以我想问的是,是否有一种方法或参数可以传递到电子邮件,以表明我希望用哪种语言发送电子邮件。
类似于:$language='en'代码>
我的Cakephp版本是:2.5.6
提前感谢。您可以尝试在发送电子邮件时切换配置的语言,然后在发送电子邮件后恢复站点语言:-
public function __sendEmail($emailTo, $subject = 'Email', $template = 'default', $viewVars, $layout = 'default', $title_for_layout = 'test', $lang = 'eng') {
$this->set('title_for_layout', $title_for_layout);
App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();
// Store site language
$siteLanguage = Configure::read('Config.language');
// Switch to preferred email language
Configure::write('Config.language', $lang);
// Send email
$Email->template($template, $layout)
->emailFormat('html')
->viewVars($viewVars)
->from(array('info@sitename.com'=>'sitename.com'))
->to($emailTo)
->subject($subject);
$result = $Email->send();
// Restore to site language
Configure::write('Config.language', $siteLanguage);
return $result;
}
不确定为什么要在此处设置版面的标题。除了title\u for_layout
是一个事实之外,如果在模型中定义此方法会更好;更好的办法是将电子邮件作为电子邮件调用。我修改了一点@drmonkeynija代码。
通过这种方式,我还告诉站点在会话中存储值以访问正确的区域设置:
public function __sendEmailWithLanguage($emailTo, $viewVars, $lang, $subject = 'Email', $template = 'default', $layout = 'default') {
// Store site language
$siteLanguage = Configure::read('Config.language');
if (isset($lang) && !empty($lang) && trim($lang)!='') {
// Switch to preferred email language
$this->Session->write('Config.language', $lang);
Configure::write('Config.language', $lang);
}
// Send email
App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();
$Email->template($template, $layout)
->emailFormat('html')
->viewVars($viewVars)
->from(array('info@biriola.com'=>'Biriola.com'))
->to($emailTo)
->subject($subject);
$result = $Email->send();
// Restore to site language
$this->Session->write('Config.language', $siteLanguage);
Configure::write('Config.language', $siteLanguage);
return $result;
}
这样,您甚至可以更改语言的会话值,然后将它们再次更改回previows值
希望这有帮助 您发送电子邮件时,电子邮件是否尚未翻译成正确的语言?如果您已经在使用Cake的i18n功能来翻译视图内容,那么在以用户选择的语言发送电子邮件时,它也应该这样做。我在几个网站上做了一些非常类似的事情,没有问题。@Drmonkeynija这些电子邮件正在翻译,但是这些电子邮件是用网站的语言发送的,正如我在上面解释的,电子邮件应该用用户的语言发送,而不是网站的语言(例如,您使用德语浏览网站,但您已注册并选择英语作为自己的默认语言。即使您使用德语浏览网站,电子邮件也应使用英语发送。)title_for_layout没有效果,它只是为了测试目的,无论如何,对于你的答案,我会尝试一下。电子邮件仍然是用浏览器语言(或网站的当前语言)发送的。谢谢,这正是我想要的。
public function __sendEmailWithLanguage($emailTo, $viewVars, $lang, $subject = 'Email', $template = 'default', $layout = 'default') {
// Store site language
$siteLanguage = Configure::read('Config.language');
if (isset($lang) && !empty($lang) && trim($lang)!='') {
// Switch to preferred email language
$this->Session->write('Config.language', $lang);
Configure::write('Config.language', $lang);
}
// Send email
App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();
$Email->template($template, $layout)
->emailFormat('html')
->viewVars($viewVars)
->from(array('info@biriola.com'=>'Biriola.com'))
->to($emailTo)
->subject($subject);
$result = $Email->send();
// Restore to site language
$this->Session->write('Config.language', $siteLanguage);
Configure::write('Config.language', $siteLanguage);
return $result;
}