Laravel: отправка почты с помощью очереди игнорирует локаль - PullRequest
0 голосов
/ 29 июня 2018

Шаблон моей электронной почты выглядит так:

@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 голосов
/ 29 июня 2018

В Ларавеле 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 можно сохранить текст в почтовом объекте </p>

class Activate extends Mailable
{

  public $mainText

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

и измените шаблон на

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

{{$mainText}}

Разница в том, что $mainText - это строка из языка, когда создавался почтовый объект, а @lang('welcome.message') - это строка языка по умолчанию из вашего приложения.

0 голосов
/ 29 июня 2018

Начиная с Laravel 5.7, есть кое-что, что может помочь вам в этом. Взгляните на Локализация почтовых сообщений в документации.

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;
    }
}
...