Как сделать интернационализацию писем в Yii2?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
MarkL
Сообщения: 31
Зарегистрирован: 2017.07.05, 20:37

Как сделать интернационализацию писем в Yii2?

Сообщение MarkL » 2020.01.12, 15:25

Ситуация: определенной выборке пользователей по CRON-задаче идёт рассылка писем(например, напоминание об окончании подписки).
То есть, отправка идёт нет под identity с настройками конкретного пользователя, а по определенной выборки задачей в консоли.

Задача: необходимо присылать письмо на том языке, который указан у пользователя в настройках. Сейчас для переводов на самом сайте используется стандартная "Интернационализация"(https://www.yiiframework.com/doc/guide/ ... orial-i18n).

Вопрос: Каким образом это можно грамотно реализовать?

Пока две идеи:
1. Создать отдельные письма для разных языков и вложить в папку в зависимости от языка.
Пример:
ru-RU/accountManagement/beforeEndSubscription/reminder-html
en-US/accountManagement/beforeEndSubscription/reminder-html
2. Использовать стандартную интернационализацию и подменять "на лету" значение конфигурации "language", но есть сомнение сработает ли это.


MarkL
Сообщения: 31
Зарегистрирован: 2017.07.05, 20:37

Re: Как сделать интернационализацию писем в Yii2?

Сообщение MarkL » 2020.01.12, 18:01

yiiliveext писал(а):
2020.01.12, 16:27
Почти так, смотрите https://www.yiiframework.com/doc/guide/ ... ranslation
Хорошо. Выходит что "тела" писем имеют функционал, как и у view для рендеринга в браузере, так?

Остаётся проблема "разных языков". При исполнении CRON-задачи
Допустим, есть список пользователей, и у каждого выбран определенный язык:
Петр => 'ru-RU',
Mike => 'en-US',
Миша => 'ru-RU',


И необходимо дать понять фреймворку, что для Петра и Миши нужен русский, а для Майка английский в рамках операции.
Как вариант, можно ли это решить переопределяя конфигурацию language?
Т.е.:

Код: Выделить всё

foreach ($this->users->getNotActive() as $user) {
	Yii::$app->language = $user->language;
	$this->sendEmail($user, Yii::t('accountingManagement', 'Нужна помощь?'), 'notActive/help');
}

yiiliveext
Сообщения: 867
Зарегистрирован: 2019.08.13, 01:49

Re: Как сделать интернационализацию писем в Yii2?

Сообщение yiiliveext » 2020.01.12, 18:21

Примерно так, только корректней сохранять текущий язык.

Код: Выделить всё

$currentLanguage = Yii::$app->language;
foreach ($this->users->getNotActive() as $user) {
	Yii::$app->language = $user->language;
	$this->sendEmail($user, Yii::t('accountingManagement', 'Нужна помощь?'), 'notActive/help');
}
Yii::$app->language = $currentLanguage;
В вашем контексте это может и не понадобиться, но лучше делать так.
Ну и для задач лучше использовать очередь.

Ответить