使用i18n模块使用app.render渲染玉石模板而不是res.render

时间:2015-02-11 13:40:19

标签: node.js express internationalization cron pug

环境

Node.js,Express,i18n Module,Jade

目的

渲染一个国际化的玉石模板,用于发送电子邮件,并给出一个"区域设置"属性如" es_ES"。

描述

我有一个邮件对象发送邮件,该邮件的语言基于user.locale属性,因此给出了一个' es_ES'值我希望以给定的语言发送玉石渲染模板。

对于i18n,我在快速初始化时做到了这一点:

app.use(i18n.init);
app.use(function(req, res, next){
    i18n.setLocale(req.getLocale());
    next();
});

所以当我使用res.render时,我只是在jade模板上做下一件事:

#{__('key')}

这很好用,但我有一个没有req的cron,只是用户对象属性中的语言环境,当我尝试渲染上面的jade模板但更改了res.render for app .render:

/*** Module Dependencies ***/
var mandrill = require('mandrill-api/mandrill');
var mandrill_client = new mandrill.Mandrill(g.wizco.mandrill_api_key);

/**
 *  MAILER API
 */

var mailer = {


    send_activation_mail: function(user, cb){
        var self = this;
        app.render('mails/account_confirmation_email', {var1: 'Holaaaaaaa'}, function(err, html){
            if(err) { console.log(err); return err }
            self.send_mail(html, 'Activación de cuenta', user.email, user.displayName, cb);
        }); 
    }

.....

}

渲染玉石模板时出现下一个错误:

  

undefined不是函数

含义__(' ...'),这是i18n模块的i18n快捷方式。

1 个答案:

答案 0 :(得分:1)

我只需要i18​​n模块并将语言环境设置为用户的一个:

/*** Module Dependencies ***/
var mandrill = require('mandrill-api/mandrill');
var mandrill_client = new mandrill.Mandrill(g.wizco.mandrill_api_key);
var i18n = require('i18n');

/**
 *  MAILER API
 */

var mailer = {


    send_activation_mail: function(user, cb){
        //app.render('mails/account_confirmation_email')
        var self = this;
        i18n.setLocale(user.locale);
        app.render('mails/account_confirmation_email', {layout: false, var1: 'Holaaaaaaa', __: i18n.__}, function(err, html){
            if(err) { console.log(err); return err }
            self.send_mail(html, 'Activación de cuenta', user.email, user.displayName, cb);
        });
    }

.....