UNPKG

next-i18next

Version:

The easiest way to translate your NextJs apps.

134 lines (103 loc) 4.69 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); require("core-js/modules/es.object.assign"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _link = _interopRequireDefault(require("next/link")); var _reactI18next = require("react-i18next"); var _utils = require("../utils"); /* This `Link` component is a wrap of the standard NextJs `Link` component, with some simple lang redirect logic in place. If you haven't already, read this issue comment: https://github.com/zeit/next.js/issues/2833#issuecomment-414919347 This component automatically provides this functionality: <Link href="/product?slug=something" as="/products/something"> Wherein `slug` is actually our i18n lang, and it gets pulled automatically. Very important: if you import `Link` from NextJs directly, and not this file, your lang subpath routing will break. */ var removeWithTranslationProps = function removeWithTranslationProps(props) { var strippedProps = Object.assign({}, props); delete strippedProps.defaultNS; delete strippedProps.i18n; delete strippedProps.i18nOptions; delete strippedProps.lng; delete strippedProps.reportNS; delete strippedProps.t; delete strippedProps.tReady; delete strippedProps.forwardedRef; return strippedProps; }; var Link = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(Link, _React$Component); function Link() { (0, _classCallCheck2["default"])(this, Link); return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(Link).apply(this, arguments)); } (0, _createClass2["default"])(Link, [{ key: "render", value: function render() { var _this$props = this.props, as = _this$props.as, children = _this$props.children, href = _this$props.href, i18n = _this$props.i18n, nextI18NextInternals = _this$props.nextI18NextInternals, props = (0, _objectWithoutProperties2["default"])(_this$props, ["as", "children", "href", "i18n", "nextI18NextInternals"]); var config = nextI18NextInternals.config; var language = i18n.language; if ((0, _utils.subpathIsRequired)(config, language)) { var _lngPathCorrector = (0, _utils.lngPathCorrector)(config, { as: as, href: href }, language), correctedAs = _lngPathCorrector.as, correctedHref = _lngPathCorrector.href; return _react["default"].createElement(_link["default"], (0, _extends2["default"])({ href: correctedHref, as: correctedAs }, removeWithTranslationProps(props)), children); } return _react["default"].createElement(_link["default"], (0, _extends2["default"])({ href: href, as: as }, removeWithTranslationProps(props)), children); } }]); return Link; }(_react["default"].Component); /* Usage of `withTranslation` here is just to force `Link` to rerender on language change */ (0, _defineProperty2["default"])(Link, "propTypes", { as: _propTypes["default"].string, children: _propTypes["default"].node.isRequired, href: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]).isRequired, nextI18NextInternals: _propTypes["default"].shape({ config: _propTypes["default"].shape({ defaultLanguage: _propTypes["default"].string.isRequired, localeSubpaths: _propTypes["default"].object.isRequired }).isRequired }).isRequired }); (0, _defineProperty2["default"])(Link, "defaultProps", { as: undefined }); var _default = (0, _reactI18next.withTranslation)()(Link); exports["default"] = _default;