Laravel:使用队列发送邮件会忽略语言环境

时间:2018-06-29 09:21:53

标签: email laravel-5 queue

我的电子邮件模板如下:

@component('mail::message')
# {{ $helloUser }}

@lang('welcome.message')

\App::setLocale('de);

$activeMail =  new \App\Mail\Register\Activate($user);

\Mail::to($user)->send($activeMail);

将发送包含德语文本的邮件。

但是,当我使用队列时

\App::setLocale('de);

$activeMail =  new \App\Mail\Register\Activate($user);

\Mail::to($user)->queue($activeMail);

邮件以英语发送,这是我的应用程序的默认语言。 如何在不更改默认语言的情况下以德语发送带有队列的消息?

2 个答案:

答案 0 :(得分:1)

在Laravel 5.6中。 Mailable类已经获得了locale方法来解决这个问题:

$activeMail =  new \App\Mail\Register\Activate($user);
$locale     =  $user->lang; // de 

\Mail::to($user)->locale($locale)->queue($activeMail);

对于Laravel <5.6,可以将文本保存在邮件对象中

class Activate extends Mailable
{

  public $mainText

  public function __construct()
  {
     $this->mainText = __('welcome.message');
  }
}

并将模板更改为

@component('mail::message')
# {{ $helloUser }}

{{$mainText}}

区别在于$mainText是创建邮件对象时语言的字符串,而@lang('welcome.message')是应用程序中默认语言的字符串。

答案 1 :(得分:-1)

自Laravel 5.7起,有些东西可以帮助您。看一下文档中的Localizing Mailables

use Illuminate\Contracts\Translation\HasLocalePreference;

class User extends Model implements HasLocalePreference
{
    /**
     * Get the user's preferred locale.
     *
     * @return string
     */
    public function preferredLocale()
    {
        return $this->locale;
    }
}