import type { AstroIntegration } from "astro"; import { mkdir, access, constants, copyFile, rename } from 'node:fs/promises' const locales = ["de"]; export default function configureI18n(): AstroIntegration { return { name: "astro-i18n-renamer", hooks: { "astro:build:done": async ({pages, dir, logger, routes}) => { for (let page of pages) { let [locale, ...rest] = page.pathname.split("/"); if (locales.includes(locale)) { let path = rest.join("/"); let oldPath = `${dir.pathname}${page.pathname}` let newPath = `${dir.pathname}${path}` try { await access(cutPrefix(newPath), constants.R_OK | constants.W_OK) } catch (e) { await mkdir(cutPrefix(newPath), {recursive: true}); } await copyFile(`${cutPrefix(oldPath)}index.html`, `${cutPrefix(newPath)}index.html.${locale}`) logger.info(`Copied ${oldPath}index.html to ${newPath}index.html.${locale}`) } else { let oldPath = cutPrefix(`${dir.pathname}${page.pathname}`) await rename(`${oldPath}index.html`, `${oldPath}index.html.en`) } } } } } } function cutPrefix(path: string): string { return process.platform === "win32" ? path.substring(1) : path }