首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >翻译排队的邮件(本地化)

翻译排队的邮件(本地化)
EN

Stack Overflow用户
提问于 2015-03-06 06:34:59
回答 6查看 4.7K关注 0票数 8

我正在寻找一个工作的解决方案,以翻译队列电子邮件laravel-5。遗憾的是,所有电子邮件都使用默认区域设置(在app.locale下定义)。

让我们假设,我们有两封电子邮件在流水线中,一封发送给英文en用户,另一封发送给日语jp用户。

我应该将哪些数据传递给Mail facade以转换 (localize) 队列电子邮件

代码语言:javascript
复制
  // User model
  $user = User:find(1)->first();

  Mailer::queue($email, 'Party at Batman\'s cave (Batcave)', 'emails.party-invitation', [

    ...

    'locale' => $user->getLocale(), // value: "jp", but does not work
    'lang' => $user->getLocale(), // value: "jp", but does not work
    'language' => $user->getLocale(), // value: "jp", but does not work
  ]);
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-12-09 21:34:06

我一直在努力以一种更有效的方式完成这项工作。目前我把它设置成这样。希望这对将来解决这个问题的人有所帮助:

代码语言:javascript
复制
// Fetch the locale of the receiver.
$user = Auth::user();
$locale = $user->locale;
Mail::queue('emails.welcome.template', ['user' => $user, 'locale' => $locale], function($mail) use ($user, $locale) {
     $mail->to($user->email);
     $mail->subject(
          trans(
               'mails.subject_welcome',
               [], null, $locale
          )
     );
});

并在您的模板中使用以下内容:

代码语言:javascript
复制
{{ trans('mails.welcome', ['name' => ucfirst($user['first_name'])], null, $locale) }}

注意::不要忘记重新启动队列

票数 9
EN

Stack Overflow用户

发布于 2017-10-17 19:25:16

如果您的电子邮件继承了内置的Illuminate\Mail\Mailable类,您可以构建自己的Mailable类来处理翻译。

创建您自己的从Illuminate\Mail\SendQueuedMailable继承的SendQueuedMailable类。类构造函数将从配置中获取当前的app.location,并将其保存在一个属性中(因为laravel队列将其序列化)。在queue worker中,它将从config中取回属性,并将设置设置为当前环境。

代码语言:javascript
复制
<?php

namespace App\Mail;

use Illuminate\Contracts\Mail\Mailer as MailerContract;
use Illuminate\Contracts\Mail\Mailable as MailableContract;
use Illuminate\Mail\SendQueuedMailable as IlluminateSendQueuedMailable;

class SendQueuedMailable extends IlluminateSendQueuedMailable
{
    protected $locale;

    public function __construct(MailableContract $mailable)
    {
        parent::__construct($mailable);

        $this->locale = config('app.locale');
    }

    public function handle(MailerContract $mailer)
    {
        config(['app.locale' => $this->locale]);
        app('translator')->setLocale($this->locale);

        parent::handle($mailer);
    }
}

然后,创建您自己的从Illuminate\Mail\Mailable继承的Mail

代码语言:javascript
复制
<?php

namespace App\Mail;

use Illuminate\Contracts\Queue\Factory as Queue;
use Illuminate\Mail\Mailable as IlluminateMailable;

class Mailable extends IlluminateMailable
{
    public function queue(Queue $queue)
    {
        $connection = property_exists($this, 'connection') ? $this->connection : null;

        $queueName = property_exists($this, 'queue') ? $this->queue : null;

        return $queue->connection($connection)->pushOn(
            $queueName ?: null, new SendQueuedMailable($this)
        );
    }
}

而且,瞧,所有从App\Mailable类继承的排队邮件都将自动处理当前的语言环境。

票数 3
EN

Stack Overflow用户

发布于 2018-06-22 16:33:03

在Laravel 5.6中,语言环境函数添加到Mailable:$infoMail->语言环境(‘jp’);Mail::queue($infoMail);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28889148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档