哈巴狗在模板文件中使用i18n

时间:2018-03-31 20:15:02

标签: node.js express internationalization pug

我注册了i18n并将pug设置为视图引擎甚至添加了帮助函数一切正常,但是当我调用pugs compileFile时,我找不到函数i18n'__'的错误。

static initI18n(app) {
    i18n.configure({
      defaultLocale: 'en',
      directory: path.resolve('server/tools/locals'),
      locales: ['en', 'gr'],
      objectNotation: false,
      updateFiles: false
    });
    app.use(i18n.init);
}

  static initViewEngine(app) {
    app.set('view engine', 'pug');
    app.set('views', path.resolve('./'));
    app.use(function(req, res, next) {
      res.locals.__ = res.__ = function() {
        return i18n.__.apply(req, arguments);
      };    
      next();
    });
  }



var compiledHTML = pug.compileFile(template)({name: user.name});
在pug文件中我是这样称呼的

doctype html
html
  body()
    #{__('hello')}

1 个答案:

答案 0 :(得分:1)

__注册时,应在resreq上设置模板本地i18n功能i18n.init。这意味着initViewEngine中的中间件无关紧要。

此外,使用模板显式调用pug.compileFile会破坏具有 express 中间件的目的。

要以这种方式编译模板,您需要将__的实现作为模板上下文传递。

const compiledHTML = pug.compileFile(template)({__: i18n.__});