Files
2026-09-03 16:21:01 +08:00

39 lines
1.3 KiB
JavaScript

import { readFileSync } from "node:fs";
const settings = JSON.parse(
readFileSync(new URL("../project.inlang/settings.json", import.meta.url)),
);
const baseMessages = readMessages(settings.baseLocale);
const baseKeys = Object.keys(baseMessages).filter((key) => key !== "$schema");
for (const locale of settings.locales) {
const messages = readMessages(locale);
const keys = Object.keys(messages).filter((key) => key !== "$schema");
const missing = baseKeys.filter((key) => !(key in messages));
const extra = keys.filter((key) => !(key in baseMessages));
const blank = keys.filter(
(key) => typeof messages[key] !== "string" || messages[key].trim() === "",
);
if (missing.length || extra.length || blank.length) {
throw new Error(
[
`${locale} catalog does not match ${settings.baseLocale}.`,
missing.length ? `Missing: ${missing.join(", ")}` : "",
extra.length ? `Extra: ${extra.join(", ")}` : "",
blank.length ? `Blank: ${blank.join(", ")}` : "",
]
.filter(Boolean)
.join("\n"),
);
}
}
function readMessages(locale) {
return JSON.parse(
readFileSync(new URL(`../messages/${locale}.json`, import.meta.url)),
);
}
console.log(`Validated ${settings.locales.length} localization catalogs.`);