如何在命令类symfony2.1中设置语言环境

时间:2013-11-20 11:57:09

标签: symfony-2.1

我正在使用命令类发送cron邮件。如何设置发送电子邮件的区域设置?

$this->getRequest()->setLocale('de'); 

在我的情况下,每个用户都有不同的区域设置。 如何在命令类中设置语言环境?

我尝试$this->getRequest()->setLocale('de');并收到错误:

namespace IT\bBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;  
use Symfony\Component\Console\Input\InputArgument;  
use Symfony\Component\Console\Input\InputInterface;  
use Symfony\Component\Console\Input\InputOption;  
use Symfony\Component\Console\Output\OutputInterface;

class CronCommand extends ContainerAwareCommand {
    protected function configure()
    {
        $this
            ->setName('send:emails')
            ->setDescription('Envio programado de emails');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $message = \Swift_Message::newInstance()
            ->setSubject('bla bla')
            ->setFrom('x@x.com')
            ->setTo('x@gmail.com')
            ->setCharset('UTF-8')
            ->setContentType('text/html')       
            ->setBody($this->renderView('mainBundle:Email:default.html.twig'));

        $this->getContainer()->get('mailer')->send($message);
        $output->writeln('Enviado!');
    } }

2 个答案:

答案 0 :(得分:7)

我解决了这个问题,我用过:

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

在命令类中为cron邮件翻译设置语言环境。

答案 1 :(得分:1)

当你有ContainerAwareCommand时,你可以从你的配置文件中读取值并将其手动插入翻译器,如下所示:(在SF 2.8中测试)

$locale = $this->getContainer()->getParameter('locale');
$this->getContainer()->get('translator')->setLocale($locale);