我在项目中使用节点电子邮件模板,在某些用户事件中向用户发送自动电子邮件。
按照github页面中提到的示例,我可以使用nodemailer发送邮件程序但我的问题是如何在这些电子邮件中支持多种语言。
一个可能的解决方案是拥有一个单独的html和style.css目录,但这样会有太多的目录,这不是一个很好的编程方法。
任何人都可以建议任何更好的方法来实现这一点吗?是否有一些现有工具?
https://github.com/angular-translate/angular-translate
P.S。:我已成功使用角度UI处理翻译 角度平移。我怎么能在快递邮件模板中做同样的事情 后端?
由于
答案 0 :(得分:0)
虽然这个答案使用了一些非常具体的技术,但它可能会让你走上正轨:
设定:
i18n
,jade
var jade = require('jade');
var i18n = require('i18n');
// [optional] cache read and compiled jade file
var templates = {}
function renderMailWithI18n (templatePath, lang) {
// use cached and compiled template or load and compile from file
templates[templatePath] = templates[templatePath] ||
jade.compileFile(path.join(__dirname, templatePath + '.jade'), { pretty: true});
// render template and pass i18n translate function
return templates[templatePath]({
__: function (translationId) {
return i18n.__({
phrase: translationId, locale: lang
});
}
})
}
var nodemailer = require('nodemailer');
var mailTransporter = nodemailer.createTransport(...);
mailTransporter.sendMail({
from: ...,
to: ...,
subject: i18n.__({ phrase: 'myMail.subject', locale: req.locale }),
renderMailWithI18n('myMail_text', req.locale).replace('<div>', '').replace('</div>', ''),
renderMailWithI18n('myMail_html', req.locale)
})
myMail_text.jade
div.
#{__('myMail.greeting')}
#{__('myMail.body')}
...
myMail_html.jade
span #{__('myMail.greeting')}
br
span #{__('myMail.body')}
...
translation_en.json(类似于angular-translate)
{
"myMail": {
"subject": "English Subject",
"greeting": "English Greeting",
"body": English Body"
}
}
另外,请不要忘记配置i18n
以使用正确的翻译文件。