UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

55 lines (54 loc) 1.63 kB
"use client"; import React, { useContext } from 'react'; import { formatMessage } from "./useTranslation.js"; import SharedContext from "./Context.js"; import renderWithFormatting from "./renderWithFormatting.js"; const TranslationImpl = ({ id, children, ...params }) => { const { translation } = useContext(SharedContext); const result = formatMessage(id || children, params, translation); if (typeof result !== 'string') { return React.createElement(React.Fragment, null, String(id)); } return React.createElement(React.Fragment, null, renderWithFormatting(result)); }; const Translation = TranslationImpl; Translation.withTypes = function withTypes() { return function TypedTranslation(props) { return React.createElement(TranslationImpl, props); }; }; export default Translation; function isPlainObject(value) { if (value === null || typeof value !== 'object') { return false; } if (Array.isArray(value)) { return false; } return Object.getPrototypeOf(value) === Object.prototype; } export function mergeTranslations(...translations) { return translations.reduce((acc, cur) => { Object.keys(cur).forEach(key => { const accValue = acc[key]; const curValue = cur[key]; if (Array.isArray(accValue) && Array.isArray(curValue)) { acc[key] = [...accValue, ...curValue]; return; } if (isPlainObject(accValue) && isPlainObject(curValue)) { acc[key] = mergeTranslations(accValue, curValue); return; } acc[key] = curValue; }); return acc; }, {}); } //# sourceMappingURL=Translation.js.map