@lingui/cli
Version:
Lingui CLI to extract messages, compile catalogs, and manage translation workflows
34 lines (33 loc) • 1.7 kB
JavaScript
import { resolveTemplatePath } from "./resolveTemplatePath.js";
import { styleText } from "node:util";
import { resolveCatalogPath } from "./resolveCatalogPath.js";
import { mergeCatalog } from "../api/catalog/mergeCatalog.js";
import { printStats } from "../api/stats.js";
import { cleanObsolete, order } from "../api/catalog.js";
function cleanAndSort(catalog, clean, orderBy) {
if (clean) {
catalog = cleanObsolete(catalog);
}
return order(orderBy, catalog);
}
export async function writeCatalogs(params) {
const { entryPoint, outputPattern, linguiConfig, locales, overwrite, format, clean, messages, } = params;
const stat = {};
for (const locale of locales) {
const catalogOutput = resolveCatalogPath(outputPattern, entryPoint, linguiConfig.rootDir, locale, format.getCatalogExtension());
const catalog = mergeCatalog(await format.read(catalogOutput, locale), messages, locale === linguiConfig.sourceLocale, { overwrite });
await format.write(catalogOutput, cleanAndSort(catalog, clean, linguiConfig.orderBy), locale);
stat[locale] = catalog;
}
return {
statMessage: printStats(linguiConfig, stat).toString(),
};
}
export async function writeTemplate(params) {
const { entryPoint, outputPattern, linguiConfig, format, clean, messages } = params;
const catalogOutput = resolveTemplatePath(entryPoint, outputPattern, linguiConfig.rootDir, format.getTemplateExtension());
await format.write(catalogOutput, cleanAndSort(messages, clean, linguiConfig.orderBy), undefined);
return {
statMessage: `${styleText("bold", String(Object.keys(messages).length))} message(s) extracted`,
};
}