【问题标题】:Laravel: Cannot set locale in MailableLaravel:无法在 Mailable 中设置语言环境
【发布时间】:2021-03-03 14:00:33
【问题描述】:

我更新到 Laravel 5.6,我想使用 Mailable 类中的新 locale 方法。

我创建了一个可邮寄的类

php artisan make:mail Test --markdown="emails.test"

这是我的刀片文件:

@component('mail::message')
@lang('list.test')
@endcomponent

如果我发送邮件

  $test = new \App\Mail\Test();
  $test->locale('de');
  \Mail::to('myemail@test.com')->send($test);

那么邮件没有使用我来自resources/lang/de/list.php的语言环境文件

<?php 

   return [ 'test' => 'Dies ist ein Test'];

这是为什么呢?

【问题讨论】:

    标签: php laravel laravel-5 locale


    【解决方案1】:

    使用带有邮件外观的语言环境。

    $test = new \App\Mail\Test();
    \Mail::to('myemail@test.com')->locale('de')->send($test);
    

    Mail Facade 和 Mailable 是指不同的类。使用 locale() 和 Mailable 试试这个。

     $test = new \App\Mail\Test();
     $test->locale('de')->send();
    

    【讨论】:

    • 这行得通。但是语言环境不是Mailableobject 上的方法吗?
    • 刚刚测试过,它还在工作。现在使用 Laravel 8。
    【解决方案2】:

    尝试将语言环境传递给构造函数,然后在build 函数中进行设置:

    public $locale;
    
    public function __construct(string $locale = 'de')
    {
        $this->locale = $locale;
    }
    
    public function build()
    {
        return $this->locale($this->locale)
                    ->from('example@example.com')
                    ->view('emails.example');
    }
    

    【讨论】:

    • 其实这样不行。在构建器中配置 locale 无论如何都太晚了,在构造器中设置它会被 PendingMail 覆盖。我写了一个 PR 来修复它,见github.com/laravel/framework/pull/29980#issuecomment-531266560
    • @Adam 仍然正确,将语言环境添加到构建功能不起作用。而是添加您定义可邮寄的语言环境。
    • @LesleyPeters 我认为泰勒自己修复了它,但从未检查过。您使用的是哪个版本?
    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 2022-11-13
    • 1970-01-01
    • 2018-06-13
    • 2011-01-24
    • 1970-01-01
    • 2019-08-27
    • 2019-08-27
    相关资源
    最近更新 更多