@winstrike/next-i18next-koa
Version:
The easiest way to translate your NextJs apps. With Koa support only. Forked from 'next-i18next'.
154 lines (121 loc) • 4.49 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _koaI18nextMiddlewareFixed = _interopRequireDefault(require("koa-i18next-middleware-fixed"));
var _url = require("url");
var _pathMatch = _interopRequireDefault(require("path-match"));
var _utils = require("../utils");
var _defaultConfig = require("../config/default-config");
var route = (0, _pathMatch.default)();
function _default(nexti18next) {
var config = nexti18next.config,
i18n = nexti18next.i18n;
var allLanguages = config.allLanguages,
ignoreRoutes = config.ignoreRoutes,
localeSubpaths = config.localeSubpaths;
var ignoreRegex = new RegExp("^/(?!".concat(ignoreRoutes.map(function (x) {
return x.replace('/', '');
}).join('|'), ").*$"));
var ignoreRoute = route(ignoreRegex);
var isI18nRoute = function isI18nRoute(url) {
return ignoreRoute(url);
};
var localeSubpathRoute = route("/:lng(".concat(allLanguages.join('|'), ")/*"));
var middleware = []; // If not using server side language detection,
// we need to manually set the language for
// each request
if (!config.serverLanguageDetection) {
middleware.push(
/*#__PURE__*/
function () {
var _ref2 = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(_ref, next) {
var req;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
req = _ref.request;
if (isI18nRoute(req.url)) {
req.lng = config.defaultLanguage;
}
_context.next = 4;
return next();
case 4:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x, _x2) {
return _ref2.apply(this, arguments);
};
}());
}
middleware.push(_koaI18nextMiddlewareFixed.default.getHandler(i18n, {
ignoreRoutes: ignoreRoutes,
locals: 'req'
}));
if (localeSubpaths !== _defaultConfig.localeSubpathOptions.NONE) {
middleware.push(
/*#__PURE__*/
function () {
var _ref4 = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(_ref3, next) {
var req, res, _parse, pathname, params, lng;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
req = _ref3.request, res = _ref3.response;
if (!isI18nRoute(req.url)) {
_context2.next = 9;
break;
}
_parse = (0, _url.parse)(req.url), pathname = _parse.pathname;
if (!allLanguages.some(function (lng) {
return pathname === "/".concat(lng);
})) {
_context2.next = 6;
break;
}
(0, _utils.forceTrailingSlash)(req, res, pathname.slice(1));
return _context2.abrupt("return");
case 6:
(0, _utils.lngPathDetector)(req, res);
params = localeSubpathRoute(req.url);
if (params !== false) {
lng = params.lng;
req.query = (0, _objectSpread2.default)({}, req.query, {
lng: lng
});
req.url = req.url.replace("/".concat(lng), '');
}
case 9:
_context2.next = 11;
return next();
case 11:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function (_x3, _x4) {
return _ref4.apply(this, arguments);
};
}());
}
return middleware;
}
module.exports = exports.default;
module.exports.default = exports.default;