UNPKG

solid-intlayer

Version:

Easily internationalize i18n your Solid applications with type-safe multilingual content management.

66 lines (65 loc) 1.85 kB
import s from "@intlayer/config/built"; import { localeResolver as v } from "@intlayer/core"; import { createContext as y, createComponent as n, useContext as w, createSignal as I, createEffect as c } from "solid-js"; import { IntlayerEditorProvider as A } from "../editor/IntlayerEditorProvider.mjs"; import { localeCookie as d, setLocaleCookie as b } from "./useLocaleCookie.mjs"; const f = y({ locale: () => d ?? s?.internationalization?.defaultLocale, setLocale: () => null, disableEditor: !1 }), p = () => w(f), x = (t) => { const { internationalization: u } = s ?? {}, { defaultLocale: L, locales: a } = u ?? {}, m = t.locale ?? d ?? t.defaultLocale ?? L, [o, l] = I(m); c(() => { if (typeof window < "u") { const e = (r) => { if (r.data?.type === "INTLAYER_LOCALE_CHANGE") { const i = r.data.locale; a?.includes(i) && l(i); } }; return window.addEventListener("message", e), () => window.removeEventListener("message", e); } }), c(() => { const e = o(); typeof window < "u" && window.postMessage({ type: "INTLAYER_LOCALE_CHANGE", locale: e }, "*"); }); const C = (e) => { if (o().toString() !== e.toString()) { if (!a?.map(String).includes(e)) { console.error(`Locale ${e} is not available`); return; } l(e), b(e); } }, g = t.setLocale ?? C, E = () => v(t.locale ?? o()); return n(f.Provider, { get value() { return { locale: E, setLocale: g, disableEditor: t.disableEditor }; }, get children() { return t.children; } }); }, R = (t) => n(A, { get children() { return n(x, t); } }); export { f as IntlayerClientContext, R as IntlayerProvider, x as IntlayerProviderContent, p as useIntlayerContext };