delphinpro
@delphinpro
frontend developer

Какие практики используются для локализации писем в Laravel?

Имеется мультиязычный сайт. Пользователь может выбрать язык, пользователю могут отправляться письма. Письма необходимо отравлять на языке, выбранном пользователем.

Как это вижу я:
Создаю шаблоны письма для каждого языка

views/emails
  en/
    welcome.blade.php
  ru/
    welcome.blade.php
  ar/
    welcome.blade.php


Для удобства навелосипедил небольшой трейт

trait TranslatableMail
{
  protected function localizedView($name, $locale = null): string
  {
    $localizedView = 'emails.'.($locale ?? $this->user->language).'.'.$name;
    return View::exists($localizedView) ? $localizedView : 'mails.en.'.$name;
  }
}


И подмешиваю в свои Mailable классы

class WelcomeMail extends Mailable implements ShouldQueue
{
  use Queueable, SerializesModels;
  use TranslatableMail;
  public function build(): WelcomeMail {
    return $this->from(config('mail.from.address'), config('mail.from.name'))
      ->subject(__('mail.subject.welcome', [], $this->user->language))
      ->view($this->localizedView('welcome'));
  }
}


В принципе, всё работает, но может есть какие-то общепринятые практики?
  • Вопрос задан
  • 457 просмотров
Пригласить эксперта
Ответы на вопрос 2
@kandrash
Кратко о себе
Или вы что-то переусложнили или я не понял чего вы хотите добиться.

Вот тут описано как при отправке задать язык - https://laravel.com/docs/8.x/mail#localizing-mailables.

А сам перевод можно хранить как обычно.
views/emails/welcome.blade.php

lang/
  ru/
    mails.php
  ar/
    mails.php

Не вижу смысла в дублировании вьюшек.
Ответ написан
@jazzus
Бест практику можно найти в самом Ларавел https://github.com/laravel/framework/blob/b1257c4e...

Переводы для множества языков с блоками большого текста можно размещать в коротких ключах языковых php файлов. Пример здесь https://laravel.com/docs/8.x/localization#using-sh...

Автор, как читающий документацию (хочется верить не вертикально) должен все это знать. И не надо рассказывать бред про неведомые "реальные проекты". Эти инструменты созданы для реальных проектов, а не для виртуальных. Велосипеды на реальных проектах пишут от незнания фреймворка и неумения им пользоваться, а не потому что там есть такая потребность. Именно такие письма пишу я, Ларавел и вижу в различных пакетах и проектах. Еще ни разу 1000 вьюх для 10 писем я не видел, но представляю какой геморой это поддерживать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы