5

我正在尝试通过 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
?>

谢谢你的帮助!

4

1 回答 1

6

尝试添加

$this->getContainer()->get('translator')->setLocale($reminder->getLocale());

因为语言环境仅在其初始化时保存在翻译器中,而不是在调用 trans() 时

于 2012-11-14T16:03:21.853 回答