@jupri-lab/react-i18n
Version:
Speak Easy. Effortless Internationalization for Your React Apps
33 lines (30 loc) • 1.27 kB
JavaScript
import i18n from '@jupri-lab/i18n-core';
import React, { createContext, useRef, useState, useCallback, useContext } from 'react';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const I18nContext = createContext(undefined);
const I18nProvider = ({ children, configs, }) => {
const i18nInstance = useRef(new i18n(configs));
const [currentLanguage, setCurrentLanguage] = useState(i18nInstance.current.getCurrentLanguage());
const getChangeLanguageHandler = useCallback((language) => {
i18nInstance.current.getChangeLanguageHandler(language);
setCurrentLanguage(i18nInstance.current.getCurrentLanguage());
}, []);
const translate = useCallback((identifier, data) => {
return i18nInstance.current.translate(identifier, data);
}, []);
const getCurrentLanguage = () => {
return currentLanguage;
};
return (React.createElement(I18nContext.Provider, { value: {
getChangeLanguageHandler,
getCurrentLanguage,
translate,
} }, children));
};
const useI18n = () => {
const ctx = useContext(I18nContext);
if (!ctx)
throw new Error("useI18n must be used within an I18nProvider");
return ctx;
};
export { I18nProvider as default, useI18n };