{"id":19493308,"url":"https://github.com/i18next/i18next-express-middleware","last_synced_at":"2025-05-16T10:07:49.118Z","repository":{"id":1978756,"uuid":"45452700","full_name":"i18next/i18next-express-middleware","owner":"i18next","description":"[deprecated] can be replaced with i18next-http-middleware","archived":false,"fork":false,"pushed_at":"2022-02-12T09:30:13.000Z","size":172,"stargazers_count":205,"open_issues_count":8,"forks_count":52,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-10T05:46:34.394Z","etag":null,"topics":["express-middleware","i18n","i18next","internationalization","translation"],"latest_commit_sha":null,"homepage":"https://github.com/i18next/i18next-http-middleware","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/i18next.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-03T08:38:01.000Z","updated_at":"2025-02-13T00:28:30.000Z","dependencies_parsed_at":"2022-08-06T11:16:29.309Z","dependency_job_id":null,"html_url":"https://github.com/i18next/i18next-express-middleware","commit_stats":null,"previous_names":[],"tags_count":53,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i18next%2Fi18next-express-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i18next%2Fi18next-express-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i18next%2Fi18next-express-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i18next%2Fi18next-express-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i18next","download_url":"https://codeload.github.com/i18next/i18next-express-middleware/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254509476,"owners_count":22082891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express-middleware","i18n","i18next","internationalization","translation"],"created_at":"2024-11-10T21:25:15.385Z","updated_at":"2025-05-16T10:07:44.103Z","avatar_url":"https://github.com/i18next.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DEPRECATED\n\nCan be replaced with: [i18next-http-middleware](https://github.com/i18next/i18next-http-middleware)\n\n---\n\n# Introduction\n\nThis is a middleware to use i18next in express.js.\n\n# Getting started\n\nSource can be loaded via [npm](https://www.npmjs.com/package/i18next-express-middleware).\n\n```\n# npm package\n$ npm install i18next-express-middleware\n```\n\n## wire up i18next to request object\n\n```js\nvar i18next = require(\"i18next\");\nvar middleware = require(\"i18next-express-middleware\");\nvar express = require(\"express\");\n\ni18next.use(middleware.LanguageDetector).init({\n  preload: [\"en\", \"de\", \"it\"],\n  ...otherOptions\n});\n\nvar app = express();\napp.use(\n  middleware.handle(i18next, {\n    ignoreRoutes: [\"/foo\"], // or function(req, res, options, i18next) { /* return true to ignore */ }\n    removeLngFromUrl: false\n  })\n);\n\n// in your request handler\napp.get(\"myRoute\", function(req, res) {\n  var lng = req.language; // 'de-CH'\n  var lngs = req.languages; // ['de-CH', 'de', 'en']\n  req.i18n.changeLanguage(\"en\"); // will not load that!!! assert it was preloaded\n\n  var exists = req.i18n.exists(\"myKey\");\n  var translation = req.t(\"myKey\");\n});\n\n// in your views, eg. in pug (ex. jade)\ndiv = t(\"myKey\");\n```\n\n## add routes\n\n```js\n// missing keys; make sure the body is parsed (i.e. with [body-parser](https://github.com/expressjs/body-parser#bodyparserjsonoptions))\napp.post(\"/locales/add/:lng/:ns\", middleware.missingKeyHandler(i18next));\n\n// multiload backend route\napp.get(\"/locales/resources.json\", middleware.getResourcesHandler(i18next));\n```\n\n## add localized routes\n\nYou can add your routes directly to the express app\n\n```js\nvar express = require(\"express\"),\n  app = express(),\n  i18next = require(\"i18next\"),\n  FilesystemBackend = require(\"i18next-node-fs-backend\"),\n  i18nextMiddleware = require(\"i18next-express-middleware\"),\n  port = 3000;\n\ni18next\n  .use(i18nextMiddleware.LanguageDetector)\n  .use(FilesystemBackend)\n  .init({ preload: [\"en\", \"de\", \"it\"], ...otherOptions }, function() {\n    i18nextMiddleware.addRoute(\n      i18next,\n      \"/:lng/key-to-translate\",\n      [\"en\", \"de\", \"it\"],\n      app,\n      \"get\",\n      function(req, res) {\n        //endpoint function\n      }\n    );\n  });\napp.use(i18nextMiddleware.handle(i18next));\napp.listen(port, function() {\n  console.log(\"Server listening on port\", port);\n});\n```\n\nor to an express router\n\n```js\nvar express = require(\"express\"),\n  app = express(),\n  i18next = require(\"i18next\"),\n  FilesystemBackend = require(\"i18next-node-fs-backend\"),\n  i18nextMiddleware = require(\"i18next-express-middleware\"),\n  router = require(\"express\").Router(),\n  port = 3000;\n\ni18next\n  .use(i18nextMiddleware.LanguageDetector)\n  .use(FilesystemBackend)\n  .init({ preload: [\"en\", \"de\", \"it\"], ...otherOptions }, function() {\n    i18nextMiddleware.addRoute(\n      i18next,\n      \"/:lng/key-to-translate\",\n      [\"en\", \"de\", \"it\"],\n      router,\n      \"get\",\n      function(req, res) {\n        //endpoint function\n      }\n    );\n    app.use(\"/\", router);\n  });\napp.use(i18nextMiddleware.handle(i18next));\napp.listen(port, function() {\n  console.log(\"Server listening on port\", port);\n});\n```\n\n## language detection\n\nDetects user language from current request. Comes with support for:\n\n- path\n- cookie\n- header\n- querystring\n- session\n\nWiring up:\n\n```js\nvar i18next = require(\"i18next\");\nvar middleware = require(\"i18next-express-middleware\");\n\ni18next.use(middleware.LanguageDetector).init(i18nextOptions);\n```\n\nAs with all modules you can either pass the constructor function (class) to the i18next.use or a concrete instance.\n\n## Detector Options\n\n```js\n{\n  // order and from where user language should be detected\n  order: [/*'path', 'session', */ 'querystring', 'cookie', 'header'],\n\n  // keys or params to lookup language from\n  lookupQuerystring: 'lng',\n  lookupCookie: 'i18next',\n  lookupHeader: 'accept-language',\n  lookupSession: 'lng',\n  lookupPath: 'lng',\n  lookupFromPathIndex: 0,\n\n  // cache user language\n  caches: false, // ['cookie']\n\n  // optional expire and domain for set cookie\n  cookieExpirationDate: new Date(),\n  cookieDomain: 'myDomain',\n  cookieSecure: true // if need secure cookie\n}\n```\n\nOptions can be passed in:\n\n**preferred** - by setting options.detection in i18next.init:\n\n```js\nvar i18next = require(\"i18next\");\nvar middleware = require(\"i18next-express-middleware\");\n\ni18next.use(middleware.LanguageDetector).init({\n  detection: options\n});\n```\n\non construction:\n\n```js\nvar middleware = require(\"i18next-express-middleware\");\nvar lngDetector = new middleware.LanguageDetector(null, options);\n```\n\nvia calling init:\n\n```js\nvar middleware = require(\"i18next-express-middleware\");\n\nvar lngDetector = new middleware.LanguageDetector();\nlngDetector.init(options);\n```\n\n## Adding own detection functionality\n\n### interface\n\n```js\nmodule.exports = {\n  name: 'myDetectorsName',\n\n  lookup: function(req, res, options) {\n    // options -\u003e are passed in options\n    return 'en';\n  },\n\n  cacheUserLanguage: function(req, res, lng, options) {\n    // options -\u003e are passed in options\n    // lng -\u003e current language, will be called after init and on changeLanguage\n\n    // store it\n  }\n};\n```\n\n### adding it\n\n```js\nvar i18next = require(\"i18next\");\nvar middleware = require(\"i18next-express-middleware\");\n\nvar lngDetector = new middleware.LanguageDetector();\nlngDetector.addDetector(myDetector);\n\ni18next.use(lngDetector).init({\n  detection: options\n});\n```\n\n---\n\n\u003ch3 align=\"center\"\u003eGold Sponsors\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://locize.com/\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/i18next/i18next/master/assets/locize_sponsor_240.gif\" width=\"240px\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi18next%2Fi18next-express-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi18next%2Fi18next-express-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi18next%2Fi18next-express-middleware/lists"}