@gravity-ui/uikit
Version:
Gravity UI base styling and components
49 lines (48 loc) • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addComponentKeysets = addComponentKeysets;
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const useLang_1 = require("../components/theme/useLang.js");
const i18n_1 = require("./i18n.js");
/**
* Add component's keysets data
* @param data - keysets data by languages
* @param componentName - name of the component
* @returns function to get keys' translations for current language
* @example
* ```
* import {addComponentKeysets} from '@gravity-ui/uikit/i18n';
* import en from './en.json';
* import ru from './ru.json';
*
* const t = addComponentKeysets({en, ru}, 'Alert');
*
* console.log(t('label_close')); // 'Close'
* ```
*/
function addComponentKeysets(data, componentName) {
Object.entries(data).forEach(([lang, keys]) => i18n_1.i18n.registerKeyset(lang, componentName, keys));
const translateFunction = i18n_1.i18n.keyset(componentName);
const useTranslation = () => {
const langConfig = (0, useLang_1.useLang)();
const { lang = 'en', fallbackLang = 'en' } = i18n_1.i18n;
const t = React.useCallback((...params) => {
i18n_1.i18n.setLang(langConfig.lang);
i18n_1.i18n.setFallbackLang(langConfig.fallbackLang);
const result = translateFunction(...params);
i18n_1.i18n.setLang(lang);
i18n_1.i18n.setFallbackLang(fallbackLang);
return result;
}, [fallbackLang, lang, langConfig.fallbackLang, langConfig.lang]);
return { t };
};
Object.assign(translateFunction, {
useTranslation,
Translation: ({ children }) => {
return children(useTranslation());
},
});
return translateFunction;
}
//# sourceMappingURL=addComponentKeysets.js.map