@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
62 lines (61 loc) • 1.69 kB
JavaScript
"use client";
import React, { useContext } from 'react';
import { formatMessage } from "./useTranslation.js";
import SharedContext from "./Context.js";
import renderWithFormatting from "./renderWithFormatting.js";
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
const TranslationImpl = ({
id,
children,
...params
}) => {
const {
translation
} = useContext(SharedContext);
const result = formatMessage(id || children, params, translation);
if (typeof result !== 'string') {
return _jsx(_Fragment, {
children: String(id)
});
}
return _jsx(_Fragment, {
children: renderWithFormatting(result)
});
};
const Translation = TranslationImpl;
Translation.withTypes = function withTypes() {
return function TypedTranslation(props) {
return _jsx(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