UNPKG

val-i18n-react

Version:
69 lines (65 loc) 1.95 kB
'use strict'; var react = require('react'); var useValueEnhancer = require('use-value-enhancer'); // src/hooks.ts var I18nContext = /* @__PURE__ */ react.createContext(null); var I18nProvider = ({ i18n, children }) => react.createElement(I18nContext.Provider, { value: i18n, children }); // src/hooks.ts var useI18n = () => { const i18n = react.useContext(I18nContext); if (!i18n) { throw new Error("I18nContext not found"); } return i18n; }; var useTranslate = () => useValueEnhancer.useVal(useI18n().t$); var useLang = () => useValueEnhancer.useVal(useI18n().lang$); var Trans = ({ message, children }) => { if (!message) return null; const slices = react.useMemo(() => { const slices2 = []; const matchArgs = /{{(\S+?)}}/gi; let slice; let pointer = 0; while (slice = matchArgs.exec(message)) { slices2.push(message.slice(pointer, slice.index), slice[1]); pointer = slice.index + slice[0].length; } slices2.push(message.slice(pointer)); return slices2; }, [message]); if (slices.length === 1) return react.createElement(react.Fragment, null, message); const slots = {}; let hasSlot = false; for (const child of Array.isArray(children) ? children : [children]) { if (react.isValidElement(child)) { const key = child.props["data-t-slot"]; if (key) { slots[key] = child; hasSlot = true; } } } const copy = slices.slice(); if (hasSlot) { for (let i = 1; i < copy.length; i += 2) { copy[i] = slots[slices[i]] || `{{${slices[i]}}}`; } } else { copy[1] = children || `{{${slices[1]}}}`; } return react.createElement(react.Fragment, null, copy); }; exports.I18nContext = I18nContext; exports.I18nProvider = I18nProvider; exports.Trans = Trans; exports.useI18n = useI18n; exports.useLang = useLang; exports.useTranslate = useTranslate; //# sourceMappingURL=out.js.map //# sourceMappingURL=main.js.map