UNPKG

@c-sheep/i18n-extract-cli

Version:

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

62 lines (61 loc) 2.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.startExportModuleExcel = void 0; const fs_extra_1 = __importDefault(require("fs-extra")); const translateMoreLanguage_1 = require("../translate/translateMoreLanguage"); const flatObjectDeep_1 = require("../shared/flatObjectDeep"); const lodash_1 = require("lodash"); const excelUtil_1 = require("../shared/excelUtil"); const getAbsolutePath_1 = require("../shared/getAbsolutePath"); function startExportModuleExcel(i18nConfig) { var _a, _b; const { localePath, excelPath } = i18nConfig; const regex = new RegExp(`([A-Za-z-]+.xlsx)`, "g"); const matchResult = (_a = excelPath.match(regex)) !== null && _a !== void 0 ? _a : []; const excelFileName = (_b = matchResult[0]) !== null && _b !== void 0 ? _b : ""; const dirs = fs_extra_1.default.readdirSync(localePath).filter((i) => !i.includes(".")); const headers = ["字典 Key", ...dirs]; const mapData = {}; const mapDataInfo = {}; const allMapData = {}; const genreKeyMap = (result) => { for (const i in result) { allMapData[i] = ""; } }; for (const language of dirs) { const result = (0, translateMoreLanguage_1.getBaseLanguageMap)(localePath, language); const flatResult = (0, flatObjectDeep_1.flatObjectDeep)(result); mapData[language] = flatResult; genreKeyMap(flatResult); } for (const i in mapData) { mapData[i] = (0, lodash_1.merge)((0, lodash_1.cloneDeep)(allMapData), mapData[i]); } for (const i in mapData) { const flatResult = mapData[i]; Object.keys(flatResult).forEach((item, index) => { mapDataInfo[item] = mapDataInfo[item] || [item]; mapDataInfo[item].push(flatResult[item]); }); } // console.log(mapDataInfo, 'Object.values(mapDataInfo)'); const excelBuffer = (0, excelUtil_1.buildExcel)(headers, Object.values(mapDataInfo), excelFileName); const excelFilePath = (0, getAbsolutePath_1.getAbsolutePath)(process.cwd(), excelPath); const absPath = excelFilePath.replace(regex, "").replace(/\/$/, ""); if (!fs_extra_1.default.existsSync(absPath)) { // fs.ensureFileSync(absPath); fs_extra_1.default.mkdirSync(absPath, { recursive: true }); } // createFlooder(absPath) fs_extra_1.default.unlink(excelFilePath, (err) => { if (err) { console.warn(`删除文件失败,请手动删除${excelFilePath}文件 在执行一次`); } fs_extra_1.default.writeFileSync(excelFilePath, excelBuffer, "utf8"); }); } exports.startExportModuleExcel = startExportModuleExcel;