UNPKG

@voerkai18n/cli

Version:

命令行工具,用来初始化/提取/编译/自动翻译等工具链

78 lines (59 loc) 2.29 kB
/** * * 编译文本信息 * */ const { t } = require("../../i18n"); const path = require("node:path"); const { writeFile } = require("flex-tools/fs/nodefs"); const { getDir } = require("@voerkai18n/utils"); const { readJsonFile } = require("flex-tools/fs/readJsonFile"); /** * 编译语言信息文件 * * @param {import("@voerkai18n/utils").VoerkaI18nProjectContext} ctx */ async function compileMessagesFile(language,allMessages,formatters){ const { typescript, moduleType,langDir } = this const messagesDir = getDir(path.join(langDir,"messages")) const langFile = path.join(messagesDir, `${language.name}.${typescript ? "ts" : moduleType === "cjs" ? "js" : "mjs"}`) const compiledMessages = {} for(let [ text,translated ] of Object.entries(allMessages)){ const id = translated.$id if(!id){ throw new Error(t("翻译文本没有id: {}",text)) } if(language.name in translated){ compiledMessages[id] = translated[language.name] }else{ compiledMessages[id] = text } } if(formatters && language.name in formatters){ compiledMessages.$config = formatters[language.name] } const jsonContent = `${typescript || moduleType==='esm' ? 'export default ' : 'module.exports =' } ${JSON.stringify(compiledMessages,null,4)}` await writeFile(langFile,jsonContent,{ encoding: "utf-8" }) } /** * 编译语言信息 * @param {*} ctx */ async function compileMessages(allMessages){ const { tasks, langDir, langRelDir, languages,typescript, moduleType } = this tasks.addGroup(t("编译语言信息:")) const langExtName = typescript ? "ts" : moduleType === "cjs" ? "js" : "mjs" const formatters = await readJsonFile(path.join(langDir,"formatters.json")) for(let language of languages){ try{ tasks.add([t("编译: {}"),`${langRelDir}/messages/${language.name}.${langExtName}`]) await compileMessagesFile.call(this, language, allMessages,formatters) tasks.complete() }catch(e){ tasks.error(e) } } } module.exports = { compileMessages }