Symfony2 Thread translation by email. The difference between the commands and the controller

Today I ran into a symfony translation problem.

Sent by SwiftMailer, emails are created in a personal service.

case 1: the sendWelcomeEmailMessage function is called in the controller, just when a new user is registered, the transcript "registration.email.welcome.subject" translates well

case 2: function sendReflationEmailMessage is called in the symfony2 command, but here the key 'registration.email.welcome.subject' (the same key for the test) is not translated ...

Does anyone have an idea?

/**
 * @param UserInterface $user
 */
public function sendWelcomeEmailMessage(UserInterface $user)
{
    $params = $this->parameters['registration']['welcome'];
    $rendered = $this->templating->render(
        $params['template'], [
            'user' => $user
        ]
    );

    $subject = $this->translator->trans('registration.email.welcome.subject');

    $this->sendEmailMessage($rendered, $subject, $params['from_email'], $user->getEmail());
}

/**
 * @param UserInterface $user
 */
public function sendReflationEmailMessage(UserInterface $user)
{
    $params = $this->parameters['registration']['reflation'];
    $rendered = $this->templating->render(
        $params['template'], [
            'user' => $user
        ]
    );

    $subject = $this->translator->trans('registration.email.welcome.subject'); // Same trans key, only for test

    $this->sendEmailMessage($rendered, $subject, $params['from_email'], $user->getEmail());
}
+4
source share
2 answers

config.yml, . :

/**
 * @param UserInterface $user
 */
public function sendReflationEmailMessage(UserInterface $user)
{
    $params = $this->parameters['registration']['reflation'];
    $rendered = $this->templating->render(
        $params['template'], [
            'user' => $user
        ]
    );

    $this->translator->setLocale("en_EN");
    $subject = $this->translator->trans('registration.email.welcome.subject'); // Same trans key, only for test

    $this->sendEmailMessage($rendered, $subject, $params['from_email'], $user->getEmail());
}
+3

ContainerAwareness:

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

class MyCommand extends ContainerAwareCommand
{
    public function sendReflationEmailMessage(UserInterface $user)
    {
        $params = $this->parameters['registration']['reflation'];
        $rendered = $this->templating->render(
            $params['template'], [
                'user' => $user
            ]
        );

        $subject = $this->getContainer()->get('translator')->trans('registration.email.welcome.subject');

        $this->sendEmailMessage($rendered, $subject, $params['from_email'], $user->getEmail());
    }
}

config.yml.

< > , , . . - :

$this->twig->getExtension('translator')->trans('registration.email.welcome.subject', array(), 'translation_domain');
0

Source: https://habr.com/ru/post/1568859/


All Articles