studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
62 lines (61 loc) • 2.01 kB
JavaScript
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
};