11
11
12
12
namespace Symfony \Component \Mailer \EventListener ;
13
13
14
+ use Symfony \Bridge \Twig \Mime \TemplatedEmail ;
14
15
use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
15
16
use Symfony \Component \Mailer \Event \MessageEvent ;
16
17
use Symfony \Component \Mailer \Exception \InvalidArgumentException ;
19
20
use Symfony \Component \Mime \Header \Headers ;
20
21
use Symfony \Component \Mime \Header \MailboxListHeader ;
21
22
use Symfony \Component \Mime \Message ;
23
+ use Symfony \Contracts \Translation \TranslatorInterface ;
22
24
23
25
/**
24
- * Manipulates the headers and the body of a Message.
26
+ * Manipulates the headers, subject and the body of a Message.
25
27
*
26
28
* @author Fabien Potencier <[email protected] >
27
29
*/
@@ -45,6 +47,7 @@ public function __construct(
45
47
private ?Headers $ headers = null ,
46
48
private ?BodyRendererInterface $ renderer = null ,
47
49
array $ headerRules = self ::DEFAULT_RULES ,
50
+ private ?TranslatorInterface $ translator = null ,
48
51
) {
49
52
foreach ($ headerRules as $ headerName => $ rule ) {
50
53
$ this ->addHeaderRule ($ headerName , $ rule );
@@ -68,6 +71,7 @@ public function onMessage(MessageEvent $event): void
68
71
}
69
72
70
73
$ this ->setHeaders ($ message );
74
+ $ this ->translateSubject ($ message );
71
75
$ this ->renderMessage ($ message );
72
76
}
73
77
@@ -115,6 +119,15 @@ private function setHeaders(Message $message): void
115
119
}
116
120
}
117
121
122
+ private function translateSubject (Message $ message ): void
123
+ {
124
+ if (!$ message instanceof TemplatedEmail || !$ this ->translator || !$ message ->getTranslatableSubject ()) {
125
+ return ;
126
+ }
127
+
128
+ $ message ->subject ($ message ->getTranslatableSubject ()->trans ($ this ->translator , $ message ->getLocale ()));
129
+ }
130
+
118
131
private function renderMessage (Message $ message ): void
119
132
{
120
133
if (!$ this ->renderer ) {
0 commit comments