使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

您所在的位置:网站首页 transport翻译 使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

2023-07-09 19:21| 来源: 网络整理| 查看: 265

您遇到的问题是,Symfony Translator 组件从传入请求中获取用户的区域设置,并且在实际发送邮件时异步发送邮件时,请求早已完成并消失,然后消息使用者的上下文(命令行)并且没有请求区域设置信息。

对此有两种解决方案:

第一个选项:您将已翻译的值传递到模板(这就是您对电子邮件主题所做的操作)。

例如这样的事情:

$mailer->send(

        $user->email,

        $this->translator->trans('mails.recover.subject'),

        'email/client/password-recovery.html.twig',

            [

                'user' => $user,

                'hash' => $hash,

                'target' => $target,

                'labels' => [

                  'header' => $this->translator

                                   ->trans('mails.recover.subject', [ 'name' => $user->getName()]),

                  'text1'  => $this->translator

                                    ->trans('mails.recover.text1', ['url', => $defaulUrl])

            ]

);

然后在模板中直接使用这些值:

{% extends 'email/base.html.twig' %}

{% block content %}

    {{ texts.header }}

   

{{ texts.text1 }}

{% endblock %}

这将是我的首选方法,因为它使模板尽可能愚蠢并且易于在不同上下文中重用。模板本身不需要知道与其内容的实际呈现无关的任何内容。

第二个选项:让模板系统知道您想要转换为的用户区域设置:

$mailer->send(

        $user->email,

        $this->translator->trans('mails.recover.subject'),

        'email/client/password-recovery.html.twig',

            [

                'user'   => $user,

                'hash'   => $hash,

                'target' => $target,

                'requestLocale' =>  $locale

                // get the locale from the request

                // (https://symfony.com/doc/current/translation/locale.html)

            ]

);

然后,您可以在正在使用的过滤器中使用接收到的区域设置,如下所述:

{{ 'mails.recover.header' | trans({'%name%': user.name}, 'app', requestLocale) }}

虽然我更喜欢第一个,但使用任何一个选项都应该可以让您获得想要的结果。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3