// scripts/generate-locales.js const fs = require("fs"); const path = require("path"); const localesDir = path.join(__dirname, "../public/locales"); const outputFile = path.join(__dirname, "../src/i18n/generatedLocales.ts"); // Discover locale folders const rawLocales = fs .readdirSync(localesDir) .filter((name) => fs.statSync(path.join(localesDir, name)).isDirectory()); // Normalise folder names (e.g., en_GB → en-GB) const locales = rawLocales.map((l) => l.replace("_", "-")); // Sort by locale code locales.sort((a, b) => a.localeCompare(b)); // Base locales (no hyphen) const baseLocales = locales.filter((l) => !l.includes("-")); // Only region-specific locales (those with a hyphen) const availableLocales = locales.filter((l) => l.includes("-")); // Fallback map: region -> base (and default to en) const fallbackLng = locales.reduce((acc, locale) => { if (locale.includes("-")) { const base = locale.split("-")[0]; if (baseLocales.includes(base)) { acc[locale] = base === "en" ? ["en"] : [base, "en"]; } else { acc[locale] = ["en"]; } } return acc; }, {}); // Generate TS file const ts = ` // AUTO-GENERATED FILE — DO NOT EDIT MANUALLY export const availableLocales = ${JSON.stringify(availableLocales, null, 2)} as const; export const baseLocales = ${JSON.stringify(baseLocales, null, 2)} as const; export const fallbackLng = ${JSON.stringify(fallbackLng, null, 2)} as const; export type Locale = typeof availableLocales[number]; `; fs.writeFileSync(outputFile, ts); console.log("Generated generatedLocales.ts");