UNPKG

@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
"use strict"; 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;