#!/usr/bin/env node /** * i18n:remove-language – ta bort ett språk rent (motsatsen till add-language). * * node scripts/i18n-remove-language.mjs * ex: node scripts/i18n-remove-language.mjs el * * Tar bort: locale-mappen, profile.language.-raden i alla filer, och de tre * raderna i i18n.ts (import + SUPPORTED_LANGUAGES + resources). Endast radborttag * → minimala diffar. Kör i18n:check + typecheck efteråt för att bekräfta. */ import { rmSync, readFileSync, writeFileSync, existsSync, readdirSync, statSync } from "node:fs"; import { join } from "node:path"; const ROOT = process.cwd(); // apps/mobile const LOC = join(ROOT, "src/locales"); const I18N = join(ROOT, "src/lib/i18n.ts"); const code = process.argv[2]; if (!code || !/^[a-z]{2,3}$/.test(code)) { console.error("Användning: node scripts/i18n-remove-language.mjs (t.ex. el)"); process.exit(1); } if (code === "sv") { console.error("Kan inte ta bort sv – svenska är källspråket."); process.exit(1); } if (!existsSync(join(LOC, code))) { console.error(`src/locales/${code} finns inte – inget att ta bort.`); process.exit(1); } // 1. locale-mappen rmSync(join(LOC, code), { recursive: true, force: true }); // 2. profile.language.-raden ur alla kvarvarande locale-filer const labelNeedle = `"profile.language.${code}":`; for (const lang of readdirSync(LOC).filter((d) => statSync(join(LOC, d)).isDirectory())) { const p = join(LOC, lang, "common.json"); const lines = readFileSync(p, "utf8").split("\n"); const kept = lines.filter((l) => !l.includes(labelNeedle)); if (kept.length !== lines.length) writeFileSync(p, kept.join("\n")); } // 3. de tre raderna i i18n.ts const importNeedle = `import ${code} from "../locales/${code}/common.json";`; const supportedNeedle = `code: "${code}",`; const resourceRe = new RegExp(`^\\s+${code}: \\{ common: ${code} \\},$`); const kept = readFileSync(I18N, "utf8") .split("\n") .filter((l) => l.trim() !== importNeedle && !l.includes(supportedNeedle) && !resourceRe.test(l)); writeFileSync(I18N, kept.join("\n")); console.log(`✓ Tog bort språket "${code}" (locale-mapp, etikett i alla filer, i18n.ts-rader).`); console.log(`Kör: pnpm --filter @app/mobile i18n:check && pnpm --filter @app/mobile typecheck`);