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