@lifi/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
66 lines • 3.07 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createInstance } from 'i18next';
import { useMemo } from 'react';
import { I18nextProvider } from 'react-i18next';
import * as supportedLanguages from '../../i18n/index.js';
import { useSettings } from '../../stores/settings/useSettings.js';
import { compactNumberFormatter } from '../../utils/compactNumberFormatter.js';
import { currencyExtendedFormatter } from '../../utils/currencyExtendedFormatter.js';
import { deepMerge } from '../../utils/deepMerge.js';
import { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js';
import { percentFormatter } from '../../utils/percentFormatter.js';
import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js';
export const I18nProvider = ({ children, }) => {
const { languageResources, languages } = useWidgetConfig();
const { language } = useSettings(['language']);
const i18n = useMemo(() => {
const languagesConfigSets = getConfigItemSets(languages, (languages) => new Set(languages));
let resources = Object.keys(supportedLanguages)
.filter((lng) => isItemAllowedForSets(lng, languagesConfigSets))
.reduce((resources, lng) => {
resources[lng] = {
translation: languageResources?.[lng]
? deepMerge(
// biome-ignore lint/performance/noDynamicNamespaceImportAccess: TODO: make it dynamic
supportedLanguages[lng], languageResources[lng])
: // biome-ignore lint/performance/noDynamicNamespaceImportAccess: TODO: make it dynamic
supportedLanguages[lng],
};
return resources;
}, {});
if (languageResources) {
resources = Object.keys(languageResources).reduce((resources, lng) => {
if (!resources[lng]) {
resources[lng] = {
translation: languageResources[lng],
};
}
return resources;
}, resources);
}
const i18n = createInstance({
lng: languages?.default || language,
fallbackLng: resources.en
? 'en'
: languages?.default ||
languages?.allow?.[0] ||
Object.keys(resources)?.[0],
lowerCaseLng: true,
interpolation: {
escapeValue: false,
},
resources,
detection: {
caches: [],
},
returnEmptyString: false,
});
i18n.init();
i18n.services.formatter?.addCached('numberExt', compactNumberFormatter);
i18n.services.formatter?.addCached('currencyExt', currencyExtendedFormatter);
i18n.services.formatter?.addCached('percent', percentFormatter);
return i18n;
}, [language, languageResources, languages]);
return _jsx(I18nextProvider, { i18n: i18n, children: children });
};
//# sourceMappingURL=I18nProvider.js.map