Forcing the Twig Locale

后端 未结 4 2050
一向
一向 2021-02-03 21:31

I would like to use the Twig template system to template my e-mails. The locale of the e-mail should be based on a user setting, not from the session or request locale. How can

4条回答
  •  我在风中等你
    2021-02-03 21:42

    Get a hold of the Translator component and change its locale before rendering the template. This solution does not require passing an extra value to the parameters' array of the render() method and painfully refactoring all your Twig files.

    public function indexAction($name)
    {
        $translator = $this->get('translator');
    
        // Save the current session locale
        // before overwriting it. Suppose its 'en_US'
        $sessionLocale = $translator->getLocale();
    
        $translator->setLocale('nl_NL');
    
        $message = \Swift_Message::newInstance()
            ->setSubject('Hello Email')
            ->setFrom('send@example.com')
            ->setTo('recipient@example.com')
            ->setBody(
                $this->renderView(
                    'HelloBundle:Hello:email.txt.twig',
                    array('name' => $name)
                )
            )
        ;
    
        $this->get('mailer')->send($message);
    
        // Otherwise subsequent templates would also
        // be rendered in Dutch instead of English
        $translator->setLocale($sessionLocale);
    
        return $this->render(...);
    }
    

    A common approach to user mailing is storing the user's locale in the User entity and passing it directly to the translator, such as in this code snippet:

    $translator->setLocale($recipientUser->getLocale());
    

提交回复
热议问题