UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

62 lines (61 loc) 2.01 kB
import { defaultLang, serverUiTranslations } from "./config.js"; const uiTranslations = serverUiTranslations; function useTranslations(lang, component) { return function t(key) { const v = uiTranslations[lang]?.translations?.[component]?.[key]; if (typeof v === "string") return v; const fb = uiTranslations[defaultLang]?.translations?.[component]?.[key]; return typeof fb === "string" ? fb : String(key); }; } const showDefaultLang = false; function useTranslatedPath(lang) { return function translatePath(path, l = lang) { return !showDefaultLang && l === defaultLang ? path : `/${l}${path}`; }; } function getLangFromUrl(url) { const [, lang] = url.pathname.split("/"); if (lang && lang in uiTranslations) return lang; return defaultLang; } function getCurrentURLPath(Astro) { if (Astro.url.pathname.includes("/_server-islands")) { const path2 = new URL(Astro.request.headers.get("referer") || ""); const currentLang2 = getLangFromUrl(path2); return currentLang2 === defaultLang && showDefaultLang ? ( /* v8 ignore start */ path2.pathname ) : ( /* v8 ignore stop */ path2.pathname.replace(`/${currentLang2}/`, "/") ); } const path = Astro.url; const currentLang = getLangFromUrl(path); return currentLang === defaultLang && showDefaultLang ? path.pathname : path.pathname.replace(`/${currentLang}/`, "/"); } function switchLanguage(Astro) { return function switcher(languageKey) { const translatePath = useTranslatedPath(languageKey); return translatePath(getCurrentURLPath(Astro)); }; } const staticPaths = () => { const paths = []; if (!showDefaultLang) paths.push({ params: { locale: void 0 } }); for (const lang in uiTranslations) { if (lang === defaultLang && !showDefaultLang) continue; paths.push({ params: { locale: lang } }); } return paths; }; export { defaultLang, getCurrentURLPath, getLangFromUrl, staticPaths, switchLanguage, useTranslatedPath, useTranslations };