在Symfony命令中多次更改语言环境

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
?>

感谢您的帮助!
1个回答

6
尝试添加
$this->getContainer()->get('translator')->setLocale($reminder->getLocale());

因为本地化仅在翻译器初始化时保存,而不是在调用trans()时保存。


1
在这种情况下以下代码是完全无用的。 $this->getContainer()->get('session')->setLocale($reminder->getLocale()); - ChMat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接