A middleware for parsing language/locale url parameters in Express, Fastify or Restify (or derivatives).
This middleware looks for a language tag in the query string (by default in lang=XX
or language=XX
), and tries to parse out locale and language, according to BCP 47.
Parsed values will be available for any following routes in res.locals.lang
and res.locals.locale
respectively.
npm install langparser
const langParser = require("langparser")
server.use(langParser())
server.get("/my/route", (req, res, next) => {
console.log(req.locals.lang)
// Visiting /my/route?lang=sv-AX will print 'sv'
// Visiting /my/route?lang=i-klingon will print 'tlh'
console.log(req.locals.locale)
// Visiting /my/route?lang=sv-AX will print 'sv-AX'
// Visiting /my/route?lang=i-klingon will print 'tlh'
})
The following options are available:
server.use(langParser({
defaultLang: "en-GB", // Fallback language/locale if none found
params: ["sprache", "lingua"] // URL param(s) to look for
}))
By default we will look for the url parameters lang
and language
.
If you want this middleware to work with post requests in Restify, you need to call the bodyParser middleware before this one.
For Restify 5.0 and newer:
server.use(restify.plugins.bodyParser())
server.use(langParser())
If you use Fastify, you need the @fastify/Express
plugin:
import express from "@fastify/express"
await fastify.register(express)
fastify.use(langParser())
In the Fastify routes, parsed paramerters will be available under req.raw.locals
-
3.1.0
- Look in both
req.query
andreq.params
, asquery
is used by e.g. Fastify.
- Look in both
-
3.0.0
- Parse locale data moved from
res
toreq
- Document Express and Fastify usage
- Parse locale data moved from
-
2.0.1
- Specify engine requirement to NodeJS >= 12.20.0, as we are now ESM only
- rename .eslintrc.js > .eslintrc.cjs
-
2.0.0
- Convert to ESM
-
1.1.1
- Dependency upgrades
-
1.1.0
- Add Restify 8 to peerDependencies, and require NodeJS >= 8
-
1.0.1
- Documentation fixes
-
1.0.0
- First version