feat(mail): client-language emails + multilingual email templates - #26
Conversation
|
Thank you — this is a valuable feature and the root-cause write-up (the withLocale timing) is exactly right. One blocker before we can merge, caught by the suite:
A small fix keeps it safe, e.g. |
|
Fixed — thanks for catching the NULL path.
The admin path was already safe: Rebased on |
|
Merged — thank you, this is a clean, well-thought-out change. I reviewed it end to end and ran the full suite against a fresh test database with the migration applied:
The One deployment note on our side (not a code issue): for existing installs the migration assumes the unique index is named |
Podsumowanie
Dodaje pełną lokalizację e-maili klienta wg języka profilu oraz wielojęzyczne szablony e-mail z automatyczną propagacją.
1. E-maile renderują się w języku klienta
Problem:
Mailablerenderuje widok Blade wwithLocale($mailable->locale)zanim odpali się eventMessageSending, więc wcześniejsze ustawienie locale z listenera działało za późno — body renderowało się w domyślnym (angielskim) locale, a__('email.*')ignorował język klienta.Rozwiązanie: trait
App\Mail\Concerns\LocalizesToRecipientustawia$mailable->localezClient->languagew konstruktorze każdego maila (przed wysyłką). Stosowany w 23 mailable'ach. Obsługuje: model z relacjąclient(), samClient, oraz email (lookupClient::where('email')dla resetu hasła/zmiany loginu).Temat nadal lokalizuje się z szablonu (istniejący
ApplyEmailTemplateprzezforMailable(..., $locale)z fallbackiem do EN).2. Pole „Język" dla klienta
clients/create+clients/edit— selectlanguagez aktywnych języków (Language::getActiveLanguages()).account/profile— selectlanguage.ClientController/AccountControllerwalidują i zapisująlanguage.3. Wielojęzyczne szablony e-mail
2026_09_03_000001_email_templates_multilingual:email_templates.name→ unikalność(name, language),EmailTemplateObserver— nowy szablon EN propaguje się do pozostałych języków.LanguageObserver— nowy język dostaje kopie wszystkich szablonów EN.email-templates— selektor języka u góry.Pliki
37 plików, +612/−31. Kluczowe:
app/Mail/Concerns/LocalizesToRecipient.php, 23 maile,app/Observers/*,EmailTemplateService, migracja, widoki client/admin.