@c-sheep/i18n-extract-cli
Version:
这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react
62 lines (61 loc) • 2.82 kB
JavaScript
;
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;