使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件? |
您所在的位置:网站首页 › transport翻译 › 使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件? |
您遇到的问题是,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 |