如何在node.js中使用多语言邮件模板?

时间:2015-06-26 20:27:47

标签: javascript angularjs node.js nodemailer email-templates

我在项目中使用节点电子邮件模板,在某些用户事件中向用户发送自动电子邮件。

  

https://github.com/niftylettuce/node-email-templates

     

https://github.com/andris9/Nodemailer

按照github页面中提到的示例,我可以使用nodemailer发送邮件程序但我的问题是如何在这些电子邮件中支持多种语言。

一个可能的解决方案是拥有一个单独的html和style.css目录,但这样会有太多的目录,这不是一个很好的编程方法。

任何人都可以建议任何更好的方法来实现这一点吗?是否有一些现有工具?

https://github.com/angular-translate/angular-translate

  

P.S。:我已成功使用角度UI处理翻译   角度平移。我怎么能在快递邮件模板中做同样的事情   后端?

由于

1 个答案:

答案 0 :(得分:0)

虽然这个答案使用了一些非常具体的技术,但它可能会让你走上正轨:

设定: i18njade

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以使用正确的翻译文件。