2016-02-02 3 views
2

Я пытаюсь использовать i18n в моем тестовом Node.js/сервер Express4 апиnode.js 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

Ваш 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.

+0

спасибо ... будучи новым для MEAN, я не сразу прыгаю в свет ... – erwin

Смежные вопросы