UNPKG

@c-sheep/i18n-extract-cli

Version:

这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react

85 lines (84 loc) 3.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.translateJson = void 0; const cli_progress_1 = require("cli-progress"); const translateAction_1 = require("../translate/translateAction"); const getAbsolutePath_1 = require("../shared/getAbsolutePath"); const util_1 = require("../shared/util"); const translateMoreLanguage_1 = require("../translate/translateMoreLanguage"); const file_1 = require("../shared/file"); const translateLanguageByObj = async (translate, obj, lang, bar) => { const newObj = {}; for (const i in obj) { const module = obj[i]; newObj[i] = (newObj[i] || {}); const strArr = Object.values(module); const keyArr = Object.keys(module); const result = await translate.translateWithTencent(strArr, lang); keyArr.forEach((item, index) => { newObj[i][item] = result[strArr[index]]; }); bar === null || bar === void 0 ? void 0 : bar.increment(); } // return newObj; }; /** * @description 对比别的语言已经有翻译的 不用走机翻 * @TODU有个优化点_当已经机翻的不用走了_这个后面优化 */ function getEmptyJsonData(localePath, item, baseLanguageMap) { var _a; const compareData = (0, translateMoreLanguage_1.getBaseLanguageMap)(localePath, item); const emptyData = {}; for (const i in baseLanguageMap) { // // if (!compareData[i]) { const compareModuleData = (compareData[i] || {}); const moduleData = (baseLanguageMap[i] || {}); emptyData[i] = {}; for (const j in moduleData) { if (!compareModuleData[j]) { emptyData[i][j] = ((_a = baseLanguageMap[i]) === null || _a === void 0 ? void 0 : _a[j]) || ""; } } if (!Object.keys(emptyData[i]).length) { delete emptyData[i]; } } return emptyData; } function translateJson(i18nConfig) { const { localePath, locales, secretKey, translateJsonPath, secretId, defaultKey, formatModuleName } = i18nConfig; const moduleNameRegex = formatModuleName ? new RegExp(formatModuleName) : /./; const baseLanguageMap = (0, translateMoreLanguage_1.getBaseLanguageMap)(localePath, defaultKey || "zh-cn", moduleNameRegex); const multiBar = new cli_progress_1.MultiBar({ clearOnComplete: false, hideCursor: true, format: "{filename} | {bar} | {percentage}% {eta}s" }, cli_progress_1.Presets.shades_grey); const translate = new translateAction_1.TranslateAction("tenxun", { secretKey, secretId }); let count = 0; locales.forEach(async (item) => { const langPath = (0, getAbsolutePath_1.getAbsolutePath)(translateJsonPath, item); (0, file_1.createFlooder)(langPath); const emptyData = getEmptyJsonData(localePath, item, baseLanguageMap); const bar = multiBar.create(Object.keys(emptyData).length, 0, { filename: item }); const mergeMapData = await translateLanguageByObj(translate, emptyData, item, bar); // const mergeMapData = mergeObject(compareData, languageMapData); (0, translateMoreLanguage_1.setLanguageModuleSave)(mergeMapData, langPath); (0, util_1.genreLocalExportJs)(translateJsonPath, item); bar.stop(); count++; if (count >= locales.length) { multiBar.stop(); } }); } exports.translateJson = translateJson;