第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 Symfony Messenger 異步發(fā)送電子郵件時(shí)如何翻譯電子郵件?

使用 Symfony Messenger 異步發(fā)送電子郵件時(shí)如何翻譯電子郵件?

PHP
慕碼人8056858 2023-07-01 10:10:09
我將 Symfony 郵件程序配置為使用 Messenger 發(fā)送電子郵件。https://symfony.com/doc/current/mailer.html#sending-messages-async我的電子郵件有兩種語言,我依靠請(qǐng)求來檢測(cè)語言,但現(xiàn)在電子郵件未翻譯。如何將消息翻譯成請(qǐng)求中檢測(cè)到的語言?在我的控制器中:$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信使配置: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如果翻譯正確,郵件主題看起來會(huì)更好,但郵件正文不會(huì)如果我刪除該行'Symfony\Component\Mailer\Messenger\SendEmailMessage':  async在messegner配置中,翻譯工作。
查看完整描述

4 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

您遇到的問題是,Symfony Translator 組件從傳入請(qǐng)求中獲取用戶的區(qū)域設(shè)置,并且在實(shí)際發(fā)送郵件時(shí)異步發(fā)送郵件時(shí),請(qǐng)求早已完成并消失,然后消息使用者的上下文(命令行)并且沒有請(qǐng)求區(qū)域設(shè)置信息。


對(duì)此有兩種解決方案:


第一個(gè)選項(xiàng):您將已翻譯的值傳遞到模板(這就是您對(duì)電子郵件主題所做的操作)。

例如這樣的事情:


$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 %}

    <h2>{{ texts.header }}</h2>

    <p style="margin: 25px 0;">{{ texts.text1 }}</p>

{% endblock %}

這將是我的首選方法,因?yàn)樗鼓0灞M可能愚蠢并且易于在不同上下文中重用。模板本身不需要知道與其內(nèi)容的實(shí)際呈現(xiàn)無關(guān)的任何內(nèi)容。


第二個(gè)選項(xiàng):讓模板系統(tǒng)知道您想要轉(zhuǎn)換為的用戶區(qū)域設(shè)置:

$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)

            ]

);

然后,您可以在正在使用的過濾器中使用接收到的區(qū)域設(shè)置,如下所述:


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

雖然我更喜歡第一個(gè),但使用任何一個(gè)選項(xiàng)都應(yīng)該可以讓您獲得想要的結(jié)果。


查看完整回答
反對(duì) 回復(fù) 2023-07-01
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

我的解決方案也適用于url_absolute樹枝。


$message = (new TemplatedEmail())

...


$renderer = new BodyRenderer($this->twig);

$renderer->render($message);

$this->mailer->send(new RawMessage($message->toString()),Envelope::create($message));

與Environment $twig和MailerInterface $mailer


查看完整回答
反對(duì) 回復(fù) 2023-07-01
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

只要電子郵件內(nèi)容不需要翻譯,“第二個(gè)選項(xiàng):讓模板系統(tǒng)知道您想要翻譯成的用戶區(qū)域設(shè)置:”就是最佳解決方案。


如果您有包含大量文本的復(fù)雜電子郵件,更好的方法是使用多個(gè)模板,并讓應(yīng)用程序設(shè)置區(qū)域設(shè)置決定必須使用哪個(gè)電子郵件模板。


或者在模板電子郵件中。


{% if language is defined %}

    {# Language still specified #}    

{% else %}

    {% set language = 'ne' %}

{% endif %}


{% if language == "en" %}

    <h1>Ticket for - <code>{{ activity.name }}</code> by participant <code>{{ buyer.name }}</code> </h1>

{% else %}

    <h1>Kaartje voor - <code>{{ activity.name }}</code> door deelnemer <code>{{ buyer.name }}</code> </h1>

{% endif %}


查看完整回答
反對(duì) 回復(fù) 2023-07-01
?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

雖然這里所有這些答案都很有趣,但它們都不適合我,并且包含“額外”變量,例如需要傳遞到上下文中的語言環(huán)境。

就我而言,使用最新的 Symfony 這足以在電子郵件模板中設(shè)置:

{% trans_default_domain 'emails' %}

簡(jiǎn)單的調(diào)用:

{{ 'emails.whatevermessage'|trans|raw }}

奇跡般有效。


查看完整回答
反對(duì) 回復(fù) 2023-07-01
  • 4 回答
  • 0 關(guān)注
  • 228 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)