UNPKG

@jupri-lab/react-i18n

Version:

Speak Easy. Effortless Internationalization for Your React Apps

33 lines (30 loc) 1.27 kB
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 };