2012-11-14 56 views
4

我試圖通過symfony 2.0命令(由cron調用)向用戶發送提醒。問題是我們的網站是多語言的(默認是法語)。在symfony命令中多次更改區域設置

我在發送提醒的循環的每個步驟設置區域設置。該區域設置是第一次正確設置。但在後續步驟中,就好像最新的區域設置更改沒有反映在模板中,並且模板被轉換爲第一步的區域設置。

我想知道如何修復它,以便反映區域設置更改。

下面是一些供參考的代碼(簡化):

<?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('[email protected]' => '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 
?> 

感謝您的幫助!

回答

5

嘗試添加

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

因爲區域僅在其初始化保存在翻譯,但不能跨時()被調用

+0

謝謝,這解決了這個問題! – ChMat

+1

以下在這種情況下完全沒用。 ($ session) - > setLocale($ reminder-> getLocale()); $ get-> getContainer() - > get('session') - > setLocale($ reminder-> getLocale()); – ChMat

相關問題