/ / node.js i18n .__ no es una función - node.js, express, internationalization

node.js i18n .__ no es una función - node.js, express, internacionalización

Estoy tratando de usar i18n dentro de mi API de prueba de node.js / express4

Instalé i18n-2, y actualicé mi 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"));

He añadido 2 archivos ./locales/en.js

{
"Hello": "Hello",
}

y ./locales/fr.js

{
"Hello": "Salut",
}

pero cuando inicio mi servidor, recibo un error en console.log(i18n.__("Hello"));

Qué estoy haciendo mal ?

Respuestas

1 para la respuesta № 1

Tu i18n es solo un constructor y necesitas instanciarlo primero. Mediante el uso expressBind estás recibiendo una instancia de i18n en cada 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);

Si quieres usar i18n fuera de las solicitudes, necesita crear manualmente una instancia con new.