UNPKG

bananas-commerce-admin

Version:

What's this, an admin for apes?

29 lines 1.34 kB
import React, { createContext, useCallback, useContext, useEffect } from "react"; import { useSessionStorage } from "../hooks/useStorage"; import { useApi } from "./ApiContext"; export function interpolateString(string, params) { return Array.isArray(params) ? params.reduce((s, value) => s?.replace(/%[sd]|\{\}/, value), string) : Object.entries(params).reduce((s, [key, value]) => s?.replace(new RegExp(`%\\(${key}\\)[sd]|\\{${key}\\}`, "g"), value), string); } const I18nContext = createContext(undefined); export const useI18n = () => useContext(I18nContext); export const I18nContextProvider = ({ children }) => { const api = useApi(); const [i18n, setI18n] = useSessionStorage("i18n", undefined); useEffect(() => { if (api && i18n == null) { api.operations["bananas.i18n:list"].call().then(async (response) => { const i18n = (await response.json()).catalog; setI18n(i18n); }); } }, [api, i18n]); const t = useCallback((key, params) => { const value = i18n?.[key] ?? key; return params ? interpolateString(value, params) : value; }, [i18n]); return React.createElement(I18nContext.Provider, { value: { i18n, t } }, children); }; export default I18nContext; //# sourceMappingURL=I18nContext.js.map