@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
55 lines (54 loc) • 1.76 kB
JavaScript
"use client";
import { useMemo, useContext } from 'react';
import SharedContext from "../../../shared/Context.js";
import sharedUseTranslation from "../../../shared/useTranslation.js";
import { extendDeep, isObject } from "../../../shared/component-helper.js";
import { LOCALE } from "../../../shared/defaults.js";
import formsLocales from "../constants/locales/index.js";
let baseCache = null;
export default function useTranslation(messagesOrArgs) {
const {
locale,
translation: globalTranslation
} = useContext(SharedContext);
const {
messages,
fallbackLocale
} = useMemo(() => {
const arg = messagesOrArgs;
if (isObject(messagesOrArgs) && ('messages' in messagesOrArgs || 'fallbackLocale' in messagesOrArgs)) {
return {
messages: arg?.messages,
fallbackLocale: arg?.fallbackLocale
};
}
return {
messages: messagesOrArgs,
fallbackLocale: LOCALE
};
}, [messagesOrArgs]);
let translationLocale = locale;
if (locale.startsWith('en-') && !Object.keys(formsLocales).some(l => l === locale)) {
translationLocale = 'en-GB';
}
const base = useMemo(() => {
const localeKey = translationLocale || LOCALE;
if (baseCache && baseCache.globalTranslation === globalTranslation && baseCache.locale === localeKey) {
return baseCache.result;
}
const result = extendDeep({}, formsLocales[localeKey] || formsLocales[LOCALE], globalTranslation);
baseCache = {
globalTranslation,
locale: localeKey,
result
};
return result;
}, [globalTranslation, translationLocale]);
return sharedUseTranslation({
messages,
fallbackLocale,
base,
warnLabel: 'Form.useTranslation'
});
}
//# sourceMappingURL=useTranslation.js.map