@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
55 lines (54 loc) • 1.63 kB
JavaScript
"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