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 № 1Tu 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
.