UNPKG

@u-wave/react-translate

Version:

Small translations for React apps with @u-wave/translate.

87 lines (83 loc) 2.69 kB
import React from 'react'; import PropTypes from 'prop-types'; import { jsx } from 'react/jsx-runtime'; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } var _excluded = ["i18nKey"]; var TranslateContext = /*#__PURE__*/React.createContext(); var Provider = TranslateContext.Provider, Consumer = TranslateContext.Consumer; function TranslateProvider(_ref) { var translator = _ref.translator, children = _ref.children; return /*#__PURE__*/jsx(Provider, { value: translator, children: children }); } /* istanbul ignore next */ if (process.env.NODE_ENV !== 'production') { TranslateProvider.propTypes = { translator: PropTypes.shape({ t: PropTypes.func.isRequired, parts: PropTypes.func.isRequired }).isRequired, children: PropTypes.node.isRequired }; } var translate = function translate() { return function (Component) { return function (props) { return /*#__PURE__*/jsx(Consumer, { children: function children(translator) { return /*#__PURE__*/jsx(Component, _extends({}, props, { // eslint-disable-line react/jsx-props-no-spreading t: translator.t })); } }); }; }; }; var useTranslator = function useTranslator() { return React.useContext(TranslateContext); }; function Interpolate(_ref2) { var i18nKey = _ref2.i18nKey, props = _objectWithoutPropertiesLoose(_ref2, _excluded); return /*#__PURE__*/jsx(Consumer, { children: function children(translator) { return ( /*#__PURE__*/ // Manually use createElement so we're not passing an array as children to React. // Passing the array would require us to add keys to each interpolated element // but we know that the shape will stay the same so it's safe to spread it and act // as if they were all written as separate children by the user. React.createElement.apply(React, [React.Fragment, {}].concat(translator.parts(i18nKey, props))) ); } }); } /* istanbul ignore next */ if (process.env.NODE_ENV !== 'production') { Interpolate.propTypes = { i18nKey: PropTypes.string.isRequired }; } export { Interpolate, TranslateProvider, translate, useTranslator };