bananas-commerce-admin
Version:
What's this, an admin for apes?
29 lines • 1.34 kB
JavaScript
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