import type { AstroGlobal } from "astro"; import * as utils from "@utils/url"; import { FALLBACK_LANGUAGE } from "@root/config"; import languages from "./languages"; export function getLanguageKeys(): Array { return Object.keys(languages); } function transformExports(modules: Record) { const translations: Record = {}; for (const [path, module] of Object.entries(modules)) { const [, lang] = path.split("/"); translations[lang] = module.default; } return translations; } const translations = transformExports(import.meta.glob("./*/ui.ts", { eager: true })); export function useTranslation(Astro: Readonly): (key: UIDictionaryKeys) => string | undefined { const lang = utils.getLanguageFromURL(Astro.url.pathname); return function translate(key: UIDictionaryKeys): string | undefined { const string: string | undefined = translations[lang]?.[key] || translations[FALLBACK_LANGUAGE][key]; if (string === undefined) console.error(`Cannot find any string for translation key "${key}" on "${Astro.url.pathname}" page.`); return string; }; }