我正在尝试通过 symfony 2.0 命令(由 cron 调用)向用户发送提醒。问题是我们的网站是多语言的(默认是法语)。
我在发送提醒的循环的每一步都设置了语言环境。第一次正确设置语言环境。但是在后续步骤中,好像最新的语言环境变化没有反射(reflect)在模板中,模板被翻译成第一步的语言环境。
我想知道如何修复它以反射(reflect)语言环境更改。
这里有一些代码(简化)供引用:
<?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
?>
感谢您的帮助!
最佳答案
尝试添加
$this->getContainer()->get('translator')->setLocale($reminder->getLocale());
因为语言环境只在翻译器初始化时保存,而不是在调用 trans() 时保存
关于php - 在 symfony 命令中多次更改语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382264/