【问题标题】:Laravel: Sending Mail with Queue ignores LocaleLaravel:使用队列发送邮件忽略区域设置
【发布时间】:2018-12-08 10:52:50
【问题描述】:

我的电子邮件模板如下所示:

@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);

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

【问题讨论】:

    标签: email laravel-5 queue


    【解决方案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;
        }
    }
    

    【讨论】:

    • 语言环境实际上保存在用户中。但是如何将语言环境传递给作业?
    【解决方案2】:

    在 Laravel 5.6 中。 Mailable 类有一个 locale 方法来处理这个问题:

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

    对于 Laravel

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

    并将模板更改为

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2014-08-04
      • 1970-01-01
      • 2021-06-26
      • 2022-08-13
      • 2017-06-10
      相关资源
      最近更新 更多