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

时间:2012-11-14 15:52:05

标签: php symfony command-line locale

我正在尝试通过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 个答案:

答案 0 :(得分:6)

尝试添加

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

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