Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
i18next-express-middleware
Advanced tools
This is a middleware to use i18next in express.js.
Source can be loaded via npm.
# npm package
$ npm install i18next-express-middleware
var i18next = require("i18next");
var middleware = require("i18next-express-middleware");
var express = require("express");
i18next.use(middleware.LanguageDetector).init({
preload: ["en", "de", "it"],
...otherOptions
});
var app = express();
app.use(
middleware.handle(i18next, {
ignoreRoutes: ["/foo"], // or function(req, res, options, i18next) { /* return true to ignore */ }
removeLngFromUrl: false
})
);
// in your request handler
app.get("myRoute", function(req, res) {
var lng = req.language; // 'de-CH'
var lngs = req.languages; // ['de-CH', 'de', 'en']
req.i18n.changeLanguage("en"); // will not load that!!! assert it was preloaded
var exists = req.i18n.exists("myKey");
var translation = req.t("myKey");
});
// in your views, eg. in pug (ex. jade)
div = t("myKey");
// missing keys; make sure the body is parsed (i.e. with [body-parser](https://github.com/expressjs/body-parser#bodyparserjsonoptions))
app.post("/locales/add/:lng/:ns", middleware.missingKeyHandler(i18next));
// multiload backend route
app.get("/locales/resources.json", middleware.getResourcesHandler(i18next));
You can add your routes directly to the express app
var express = require("express"),
app = express(),
i18next = require("i18next"),
FilesystemBackend = require("i18next-node-fs-backend"),
i18nextMiddleware = require("i18next-express-middleware"),
port = 3000;
i18next
.use(i18nextMiddleware.LanguageDetector)
.use(FilesystemBackend)
.init({ preload: ["en", "de", "it"], ...otherOptions }, function() {
i18nextMiddleware.addRoute(
i18next,
"/:lng/key-to-translate",
["en", "de", "it"],
app,
"get",
function(req, res) {
//endpoint function
}
);
});
app.use(i18nextMiddleware.handle(i18next));
app.listen(port, function() {
console.log("Server listening on port", port);
});
or to an express router
var express = require("express"),
app = express(),
i18next = require("i18next"),
FilesystemBackend = require("i18next-node-fs-backend"),
i18nextMiddleware = require("i18next-express-middleware"),
router = require("express").Router(),
port = 3000;
i18next
.use(i18nextMiddleware.LanguageDetector)
.use(FilesystemBackend)
.init({ preload: ["en", "de", "it"], ...otherOptions }, function() {
i18nextMiddleware.addRoute(
i18next,
"/:lng/key-to-translate",
["en", "de", "it"],
router,
"get",
function(req, res) {
//endpoint function
}
);
app.use("/", router);
});
app.use(i18nextMiddleware.handle(i18next));
app.listen(port, function() {
console.log("Server listening on port", port);
});
Detects user language from current request. Comes with support for:
Wiring up:
var i18next = require("i18next");
var middleware = require("i18next-express-middleware");
i18next.use(middleware.LanguageDetector).init(i18nextOptions);
As with all modules you can either pass the constructor function (class) to the i18next.use or a concrete instance.
{
// order and from where user language should be detected
order: [/*'path', 'session', */ 'querystring', 'cookie', 'header'],
// keys or params to lookup language from
lookupQuerystring: 'lng',
lookupCookie: 'i18next',
lookupHeader: 'accept-language',
lookupSession: 'lng',
lookupPath: 'lng',
lookupFromPathIndex: 0,
// cache user language
caches: false, // ['cookie']
// optional expire and domain for set cookie
cookieExpirationDate: new Date(),
cookieDomain: 'myDomain',
cookieSecure: true // if need secure cookie
}
Options can be passed in:
preferred - by setting options.detection in i18next.init:
var i18next = require("i18next");
var middleware = require("i18next-express-middleware");
i18next.use(middleware.LanguageDetector).init({
detection: options
});
on construction:
var middleware = require("i18next-express-middleware");
var lngDetector = new middleware.LanguageDetector(null, options);
via calling init:
var middleware = require("i18next-express-middleware");
var lngDetector = new middleware.LanguageDetector();
lngDetector.init(options);
module.exports = {
name: 'myDetectorsName',
lookup: function(req, res, options) {
// options -> are passed in options
return 'en';
},
cacheUserLanguage: function(req, res, lng, options) {
// options -> are passed in options
// lng -> current language, will be called after init and on changeLanguage
// store it
}
};
var i18next = require("i18next");
var middleware = require("i18next-express-middleware");
var lngDetector = new middleware.LanguageDetector();
lngDetector.addDetector(myDetector);
i18next.use(lngDetector).init({
detection: options
});
1.9.1
FAQs
express middleware for i18next
The npm package i18next-express-middleware receives a total of 3,532 weekly downloads. As such, i18next-express-middleware popularity was classified as popular.
We found that i18next-express-middleware demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.