Я настроил nodemailer для работы с email-templates, используя ejs
в качестве механизма рендеринга.
Пока он работает так, как задумано, но, как и в других разделах моего приложения, я также хотел бы использовать i18n, чтобы текст моего письма переводился так же, как и просмотры, обработанные моим приложением.
К сожалению, это не работает. Вот что я пытался сделать:
пример html.ejs:
<h1><%= __('Hi') %>, <%= user.name %>!</h1>
код узла в маршруте:
// requires at the top
var i18n = require('i18n');
// (.....)
// use template based sender to send a message
sendMailTemplate({
to: user.email,
// EmailTemplate renders html and text but no subject so we need to
// set it manually either here or in the defaults section of templateSender()
subject: i18n.__('translatable subject')
}, {
user: user,
__: i18n.__
}, function(err, info){
if(err){
console.log('Error');
console.log(err);
}else{
console.log('email sent');
req.flash('info', i18n.__('mail sent to %s', user.email));
done(err, 'done');
}
});
// other stuff...
Всего пара вещей:
- В выводе моей почты ничего не тормозит - строка просто не переводится.
- Я считаю, что простой передачи функции
i18n
__
в объекте, идущем в механизм рендеринга, должно быть достаточно, чтобы она была доступна дляejs
и работала должным образом, но я не уверен. Есть мысли по этому поводу? - У меня нет
i18n.setLocale
, поэтому якобы по умолчанию используется английский, когдаreq.
(это, кстати, язык, который я вижу в полученном письме). Может быть, это причина того, что он не переводится так, как задумано?
Любые мысли приветствуются!