我正在尝试通过symfony 2.0命令(由cron调用)向用户发送提醒。问题是我们的网站是多语言的(默认是法语)。
我在发送提醒的循环的每一步设置语言环境。首次正确设置区域设置。但是在后续步骤中,就好像最新的区域设置更改没有反映在模板中,并且模板被转换为第一步的区域设置。
我想知道如何修复它以便反映区域设置更改。
以下是一些代码(简化)供参考:
<?php
// This loop is inside the execute() function of a symfony service (implements ContainerAwareCommand)
// …
// Sending reminders one at a time
foreach ($reminders as $reminder)
{
$message = \Swift_Message::newInstance();
$message->setFrom(array('noreply@domain.com' => 'YourBot'));
// Change locale to that of the user
$this->getContainer()->get('session')->setLocale($reminder->getLocale());
$templating = $this->getContainer()->get('templating');
// Reminder text
$email_message = $templating->render('MyBundle:Reminder:reminder.html.twig');
$message->setSubject('Reminder')
->setTo($reminder->getEmail())
->setBody($email_message, 'text/html');
$this->getContainer()->get('mailer')->send($message);
// Update reminder status
$reminder->setEmailSent(true);
$emSymfony->persist($reminder);
}
// … subsequent code
?>
感谢您的帮助!
答案 0 :(得分:6)
尝试添加
$this->getContainer()->get('translator')->setLocale($reminder->getLocale());
因为语言环境仅在初始化时保存在翻译器中,而不是在调用trans()时保存。