Метод locale
Метод locale класса Mailable позволяет задать локаль для отправляемого письма. Первым параметром передаётся строка с кодом локали, например, 'ru' или 'en'. Если локаль не указана, используется локаль по умолчанию, установленная в приложении. Метод возвращает текущий экземпляр письма, что позволяет использовать цепочки вызовов.
Синтаксис
<?php
$mailable->locale($locale);
?>
Пример
Давайте создадим класс письма и установим локаль 'ru':
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateMailMailablesEnvelope;
use IlluminateQueueSerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Welcome to our site',
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
);
}
public function attachments(): array
{
return [];
}
}
?>
Пример
Отправим письмо с установкой локали через метод locale:
<?php
namespace AppHttpControllers;
use AppMailWelcomeMail;
use IlluminateSupportFacadesMail;
class MailController extends Controller
{
public function sendWelcome()
{
$mail = new WelcomeMail();
$mail->locale('ru');
Mail::to('user@example.com')->send($mail);
echo "Mail sent successfully";
}
}
?>
Результат выполнения кода:
"Mail sent successfully"
Пример
Используем цепочку вызовов для установки локали и отправки письма:
<?php
namespace AppHttpControllers;
use AppMailWelcomeMail;
use IlluminateSupportFacadesMail;
class MailController extends Controller
{
public function sendWelcome()
{
Mail::to('user@example.com')
->send(new WelcomeMail()->locale('en'));
echo "Mail sent with English locale";
}
}
?>
Результат выполнения кода:
"Mail sent with English locale"
Пример
Отправим письмо с локалью, зависящей от предпочтений пользователя:
<?php
namespace AppHttpControllers;
use AppMailWelcomeMail;
use AppModelsUser;
use IlluminateSupportFacadesMail;
class MailController extends Controller
{
public function sendWelcome($userId)
{
$user = User::find($userId);
if ($user) {
$locale = $user->preferred_locale ?? 'en';
Mail::to($user->email)
->send(new WelcomeMail()->locale($locale));
echo "Mail sent with locale: " . $locale;
} else {
echo "User not found";
}
}
}
?>
Результат выполнения кода для пользователя с локалью 'ru':
"Mail sent with locale: ru"