i18next / I18next Express Middleware
Licence: mit
[deprecated] can be replaced with i18next-http-middleware
Stars: ✭ 195
Programming Languages
javascript
184084 projects - #8 most used programming language
Projects that are alternatives of or similar to I18next Express Middleware
Jquery I18next
i18next plugin for jquery usage
Stars: ✭ 143 (-26.67%)
Mutual labels: translation, i18n, internationalization
Transloco
🚀 😍 The internationalization (i18n) library for Angular
Stars: ✭ 1,185 (+507.69%)
Mutual labels: translation, i18n, internationalization
Django Rosetta
Rosetta is a Django application that eases the translation process of your Django projects
Stars: ✭ 806 (+313.33%)
Mutual labels: translation, i18n, internationalization
React I18next
Internationalization for react done right. Using the i18next i18n ecosystem.
Stars: ✭ 6,942 (+3460%)
Mutual labels: translation, i18n, internationalization
Formatjs
The monorepo home to all of the FormatJS related libraries, most notably react-intl.
Stars: ✭ 12,869 (+6499.49%)
Mutual labels: translation, i18n, internationalization
Frenchkiss.js
The blazing fast lightweight internationalization (i18n) module for javascript
Stars: ✭ 776 (+297.95%)
Mutual labels: translation, i18n, internationalization
React Intl Hooks
React hooks for internationalization without the hassle ⚛️🌍
Stars: ✭ 64 (-67.18%)
Mutual labels: translation, i18n, internationalization
Easy localization
Easy and Fast internationalizing your Flutter Apps
Stars: ✭ 407 (+108.72%)
Mutual labels: translation, i18n, internationalization
Traduora
Ever® Traduora - Open-Source Translation Management Platform
Stars: ✭ 1,580 (+710.26%)
Mutual labels: translation, internationalization, i18n
Pseudo Localization
Dynamic pseudo-localization in the browser and nodejs
Stars: ✭ 109 (-44.1%)
Mutual labels: translation, i18n, internationalization
I18next
i18next: learn once - translate everywhere
Stars: ✭ 5,971 (+2962.05%)
Mutual labels: translation, i18n, internationalization
React Translated
A dead simple way to add complex translations (i18n) in a React (DOM/Native) project 🌎🌍🌏
Stars: ✭ 176 (-9.74%)
Mutual labels: translation, i18n, internationalization
Fluent.js
JavaScript implementation of Project Fluent
Stars: ✭ 622 (+218.97%)
Mutual labels: translation, i18n, internationalization
Dom I18n
Provides a very basic HTML multilingual support using JavaScript
Stars: ✭ 125 (-35.9%)
Mutual labels: translation, i18n, internationalization
Gettext
PHP library to collect and manipulate gettext (.po, .mo, .php, .json, etc)
Stars: ✭ 578 (+196.41%)
Mutual labels: translation, i18n, internationalization
Translatedjs
Internationalization and localization for JavaScript and Node.js
Stars: ✭ 17 (-91.28%)
Mutual labels: translation, i18n, internationalization
Spree i18n
I18n translation files for Spree Commerce.
Stars: ✭ 338 (+73.33%)
Mutual labels: translation, i18n, internationalization
React Localize Redux
Dead simple localization for your React components
Stars: ✭ 384 (+96.92%)
Mutual labels: translation, i18n, internationalization
Eslint Plugin I18n Json
Fully extendable eslint plugin for JSON i18n translation files.
Stars: ✭ 101 (-48.21%)
Mutual labels: translation, i18n, internationalization
Phabricator zh hans
Phabricator zh-Hans Translation & Tools.
Stars: ✭ 113 (-42.05%)
Mutual labels: translation, i18n, internationalization
DEPRECATED
Can be replaced with: i18next-http-middleware
Introduction
This is a middleware to use i18next in express.js.
Getting started
Source can be loaded via npm.
# npm package
$ npm install i18next-express-middleware
wire up i18next to request object
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");
add routes
// 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));
add localized routes
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);
});
language detection
Detects user language from current request. Comes with support for:
- path
- cookie
- header
- querystring
- session
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.
Detector Options
{
// 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);
Adding own detection functionality
interface
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
}
};
adding 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
});
Gold Sponsors
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].