UNPKG

i18next-http-middleware

Version:

i18next-http-middleware is a middleware to be used with Node.js web frameworks like express or Fastify and also for Deno.

55 lines (54 loc) 1.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab', '419']; var _default = exports.default = { name: 'header', lookup: function lookup(req, res, options) { var found; if (typeof req !== 'undefined') { var headers = options.getHeaders(req); if (!headers) return found; var locales = []; var acceptLanguage = options.lookupHeader ? headers[options.lookupHeader] : headers['accept-language']; if (acceptLanguage) { var lookupRegex = /(([a-z]{2,3})-?([A-Z]{2})?)\s*;?\s*(q=([0-9.]+))?/gi; if (acceptLanguage.indexOf('-') > 0) { var foundSpecialCase = specialCases.find(function (s) { return acceptLanguage.toLowerCase().indexOf("-".concat(s)) > 0; }); if (foundSpecialCase) lookupRegex = /(([a-z]{2,3})-?([A-Z0-9]{2,4})?)\s*;?\s*(q=([0-9.]+))?/gi; } var lngs = []; var i; var m; var rgx = options.lookupHeaderRegex || lookupRegex; do { m = rgx.exec(acceptLanguage); if (m) { var lng = m[1]; var weight = m[5] || '1'; var q = Number(weight); if (lng && !isNaN(q)) { lngs.push({ lng: lng, q: q }); } } } while (m); lngs.sort(function (a, b) { return b.q - a.q; }); for (i = 0; i < lngs.length; i++) { locales.push(lngs[i].lng); } if (locales.length) found = locales; } } return found; } }; module.exports = exports.default;