node.js i18n .__不是函数

时间:2016-02-02 13:56:16

标签: node.js express internationalization

我想在我的测试node.js / express4服务器api

中使用i18n

我安装了i18n-2, 并更新了我的server.js

var express     = require('express');
var app         = express();
var i18n        = require('i18n-2');

i18n.expressBind(app, {
  // setup some locales - other locales default to en silently
  locales: ['en', 'fr'],
  // set the default locale
  defaultLocale: 'fr',
  // set the cookie name
  cookieName: 'locale'
});

// set up the middleware
app.use(function(req, res, next) {
  req.i18n.setLocaleFromQuery();
  req.i18n.setLocaleFromCookie();
  next();
});

console.log(i18n.__('Hello'));

我添加了2个文件./locales/en.js

{
 "Hello": "Hello",
}

和./locales/fr.js

{
 "Hello": "Salut",
}

但是当我启动服务器时,我在console.log(i18n.__('Hello'));

上收到错误消息

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的i18n只是一个构造函数,您需要先将其实例化。 使用expressBind,您会在每个i18n中获得req的实例。

var express     = require('express');
var app         = express();
var i18n        = require('i18n-2');

i18n.expressBind(app, {
  // setup some locales - other locales default to en silently
  locales: ['en', 'fr'],
  // set the default locale
  defaultLocale: 'fr',
  // set the cookie name
  cookieName: 'locale'
});

// set up the middleware
app.use(function(req, res, next) {
  req.i18n.setLocaleFromQuery();
  req.i18n.setLocaleFromCookie();
  console.log(req.i18n.__("Hello"));
  next();
});

app.listen(3000);

如果您想在请求之外使用i18n,则需要使用new手动创建实例。