我的电子邮件模板如下:
@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);
邮件以英语发送,这是我的应用程序的默认语言。 如何在不更改默认语言的情况下以德语发送带有队列的消息?
答案 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;
}
}