Лучшие практики по переводу электронной почты в Symfony SwiftMailer - PullRequest
0 голосов
/ 09 октября 2018

Кто-нибудь знает, как лучше всего перевести электронную почту, отправленную SwiftMailer в Symfony?С веточкой или без нее.

Я могу предложить несколько вариантов, но все они неполные.

Первое, что я могу придумать, это создать несколько файлов веток.Точно так же, как User.register.html.twig (по умолчанию), User.register.nl_be.html.twig (голландский в Бельгии, в зависимости от вашего текущего URL) и User.register.nl.html.twig (все голландские).

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

Второй Я подумал об использовании переводчика Symfony, просто используя «метки» в одном шаблоне.Например:

<h1>{{ 'user.email.register.title'|trans }}</h1>
<div>{{ 'user.email.register.body'|trans }}</div>

Ошибка в первом подходе была «исправлена», но в ней есть еще один недостаток.Теперь нам нужно управлять HTML в файле перевода (yml, po, php, ini и т. Д.).

Мы не можем просто переводить строки или заполнители, потому что шаблоны электронной почты различаются в зависимости от домена или языка, на котором вы находитесь. Например, верхний или нижний колонтитулы совершенно разные.Иногда маркетинг хочет добавить некоторую другую информацию в электронное письмо только для определенного домена или языка.И полное управление этим должно быть как можно более простым!

Кто-нибудь знает, как управлять переводимой электронной почтой, включая изменения в заголовке / нижнем колонтитуле / и т.д.на основе языка / домена или другого параметра?

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете DI TranslatorInterface в вашем действии

/**
* @param TranslatorInterface $translator
*/
public function switch(Request $request, TranslatorInterface $translator){
custom Stuff
}

Затем вы можете проверить, является ли пользователь английским, немецким или кем-либо еще.

    $lang = $user->getLang();

    if ($lang == 1) {
        $translator->setLocale('en');
    }

Это переведет все ваши {{'mail.test' | trans}} Правильно.Это работает очень хорошо, и вам нужно будет поддерживать только один файл html.twig.

...