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

标签 php symfony command-line locale

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

相关文章:

php - Twig 访问数组键空间在哪里(PHP 允许数组键上有空间)

javascript - 如何通过 webpack 使用 videoJS 和 videoJS 播放列表以及 videoJS 播放列表 ui

command-line - TFS手册Mstest发布结果?

bash - 如何删除部分文件名并以编程方式添加扩展名?

java - 创建表单来更改永久变量

forms - Sonata 管理员不保存多对多字段

php - 验证上传的文件类型

command-line - 来自命令行的蓝牙

php - 用 JavaScript 编写的 Cookie 在 PHP 中仅显示为整数

php - 从帐户自动提取所有YouTube视频