node.js i18n .__不是一个函数

我正在尝试在我的testingnode.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'));

我究竟做错了什么 ?

你的i18n只是一个构造函数,你需要先实例化它。 通过使用expressBind你得到每个req i18n的实例。

 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 ,你需要手动创build一个new的实例。