@dragonaxe/i18n
Version:
A tool for i18n content.
54 lines (53 loc) • 1.71 kB
JavaScript
import React, { createContext, useContext, useState, useEffect } from "react";
import { a as PrismicClientFactory, P as PrismicMultilangualCdnService } from "./factory-DcbjsuBB.js";
const i18nContext = createContext({
localeId: "",
locales: [],
setLocaleId: (localeId) => {
},
getCdnService: () => {
throw new Error("Cdn Service not defined.");
}
});
const useI18nContext = () => {
return useContext(i18nContext);
};
const I18nContextProvider = (props) => {
const fact = new PrismicClientFactory();
const client = fact.getClient(props.repoName, props.publicToken);
const cdnServiceService = new PrismicMultilangualCdnService(client);
const getStoredLocale = () => {
if (globalThis.localStorage) {
const storedLocale = localStorage.getItem(props.localstorageLocalKey);
if (storedLocale) {
return storedLocale;
}
}
return props.fallbackLocale;
};
const [currentLocale, setCurrentLocale] = useState(getStoredLocale());
const [locales, setLocales] = useState([]);
const [cdnService] = useState(cdnServiceService);
const handleChangeLocale = (localeId) => {
if (globalThis.localStorage) {
localStorage.setItem(props.localstorageLocalKey, localeId);
}
setCurrentLocale(localeId);
};
const contextProps = {
localeId: currentLocale,
locales,
setLocaleId: handleChangeLocale,
getCdnService: () => cdnService
};
useEffect(() => {
cdnService.getLocales().then((localesResult) => {
setLocales(localesResult);
});
}, []);
return /* @__PURE__ */ React.createElement(i18nContext.Provider, { value: contextProps }, props.children);
};
export {
I18nContextProvider,
useI18nContext
};