import React from 'react';
import { defaultTranslate, useTranslation } from '@digigov/ui/i18n';
const isObject = (value) => {
return !!(value && typeof value === 'object' && !Array.isArray(value));
};
const resultTranslate = (translation, children) => {
if (typeof DOMParser !== 'undefined') {
const parser = new DOMParser();
const childrenCloned = [...children];
const doc1 = parser.parseFromString(
`
${translation
.replace(/<([0-9])>/g, '')
.replace(/<\/([0-9])>/g, '')}
`,
'application/xml'
);
return recursiveReplace(childrenCloned, doc1.children[0].childNodes);
}
};
const recursiveReplace = (original: any, translation: any) => {
if (!Array.isArray(original)) {
original = [original];
}
original.forEach((element, i) => {
if (typeof element === 'string' || typeof element === 'number') {
const text: any = [];
const regex = /{([^}]+)}/;
if (regex.test(translation[i].textContent)) {
const textArray = translation[i].textContent.split(' ');
if (textArray.length === 1) {
return false;
} else {
textArray.forEach((txt) => {
if (!regex.test(txt)) {
text.push(txt);
} else {
text.push(original[i]);
}
});
return (original[i] = text.join(' '));
}
} else {
return (original[i] = translation[i].textContent);
}
}
if (isObject(element)) {
original[i] = React.cloneElement(original[i], {
...original[i].props,
key: i,
children: recursiveReplace(
original[i].props.children,
translation[i].childNodes
),
});
}
});
return original;
};
export interface I18nTextProps {
children?: React.ReactNode;
i18nKey?: string;
}
export const I18nText = ({ i18nKey, children }) => {
const translation = defaultTranslate(i18nKey);
const result = resultTranslate(translation, children);
const { Trans } = useTranslation();
if (Trans) {
return {children};
}
return <>{result}>;
};
export default I18nText;