【发布时间】:2020-10-15 01:08:51
【问题描述】:
我将 Symfony 邮件程序配置为使用信使发送电子邮件。
https://symfony.com/doc/current/mailer.html#sending-messages-async
我有两种语言的电子邮件,我依靠请求来检测语言,但现在电子邮件没有翻译。
如何将消息翻译成请求中检测到的语言?
在我的控制器中:
$mailer->send(
$user->email,
$this->translator->trans('mails.recover.subject'),
'email/client/password-recovery.html.twig',
compact('user', 'hash', 'target')
);
模板:
{% extends 'email/base.html.twig' %}
{% block content %}
<h2>{{ 'mails.recover.header' | trans({'%name%': user.name}) }}</h2>
<p style="margin: 25px 0;">
{{ 'mails.recover.text1' | trans({'%url%': url('default')}) | raw }}
</p>
// More code
Messenger 配置:
framework:
messenger:
# Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
# failure_transport: failed
transports:
# https://symfony.com/doc/current/messenger.html#transport-configuration
async: '%env(MESSENGER_TRANSPORT_DSN)%'
# failed: 'doctrine://default?queue_name=failed'
# sync: 'sync://'
routing:
# Route your messages to the transports
# 'App\Message\YourMessage': async
'Symfony\Component\Mailer\Messenger\SendEmailMessage': async
如果翻译正确,邮件的主题看起来更好,但邮件的正文却没有
如果我删除该行
'Symfony\Component\Mailer\Messenger\SendEmailMessage': async
在 messegner 配置中,翻译工作。
【问题讨论】:
-
似乎消息是首先生成的,异步部分只通过 SMTP 发送已经“渲染”的内容,所以它应该像直接发送邮件一样工作。你怎么翻译?你在使用翻译组件吗?
-
是的,我的模板如下所示:{{ 'mails.base.about.header'|trans }}
-
您能显示更多代码吗?特别是 php 中的部分是你发送的消息
-
@Jakumi 我已经更新了问题。
-
我有点迷茫,通常 MailerInterface::send() 最多接收 2 个参数(RawMessage 和 Envelope)。显然你使用了一些帮助类或其他东西。而且我假设帮助程序类生成一个 TemplatedEmail 或其他东西,并且异步服务使用“新鲜”树枝来实际呈现电子邮件正文,因此只有默认语言。尝试使用
$this->renderView(template, context)(控制器默认功能)渲染主体
标签: php symfony symfony-mailer