UNPKG

i18n-automation

Version:
79 lines (67 loc) 2.58 kB
const fs = require('fs'); const { selectColumn } = require("../utils/md-helper"); const { createFile } = require("../utils/fileUtils"); // 仿一个Python的zip函数 const zip = (arr1, arr2) => { let zipArr = []; for (let i = 0; i < arr1.length; i++) { zipArr.push([arr1[i], arr2[i]]); } return zipArr; } // 生成资源文件内容 const convert2ColumnToResourceJsStr = (keyColumn, valColumn) => { // 得到2 * n 矩阵 const matrix = zip(keyColumn, valColumn); let resourceJsStr = 'export default { \n'; matrix.forEach((row) => { const key = row[0]; const val = row[1]; if (key.trim() != '') resourceJsStr += ` "${key}": "${val}",\n`; }) resourceJsStr += '}'; return resourceJsStr; } // 生成指定位数的随机字符串 const randomString = (number) => { let str = ""; const charArr = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz012345678"; for (i = 0; i < number; i++) { str += charArr.charAt(Math.floor(Math.random() * charArr.length)); } return str; } // 插入到资源引入文件中 const insertToResImpAndExp = (oldContent, resFileName, relativeResFilePath) => { const insertVarName = randomString(3) + '_' + resFileName; let oldImport = ''; let oldExport = ''; //只取...的部分 if (oldContent) { const result = oldContent.split('export default {\n'); oldImport = result[0]; oldExport = result[1].split('}')[0]; } // 替换路径中的 \ 为 /, replace(/\\/g,"\/") let newImport = `import ${insertVarName} from '${relativeResFilePath.replace(/\\/g,"\/")}/${resFileName}';\n`; let newExport = ` ...${insertVarName},\n`; return oldImport + newImport + 'export default {\n' + oldExport + newExport + '}'; } exports.generateResourceFileIO = (mdFilePath, keyColumnIndex, valColumnIndex, resFilePath) => { // 读取 const content = fs.readFileSync(mdFilePath, { encoding: 'utf-8' }); // 查询 const keyColumnObj = selectColumn(content, keyColumnIndex); const valColumnObj = selectColumn(content, valColumnIndex); // 转换 const resourceJsStr = convert2ColumnToResourceJsStr(keyColumnObj.columnData, valColumnObj.columnData); // 写入 fs.writeFileSync(createFile(resFilePath), resourceJsStr); } exports.generateResImpAndExpFileIO = (resImpAndExpFilePath, resFileName, relativeResFilePath) => { // 读取 const oldContent = fs.readFileSync(resImpAndExpFilePath, { encoding: 'utf-8' }); // 转换 const newContent = insertToResImpAndExp(oldContent, resFileName, relativeResFilePath); // 写入 fs.writeFileSync(resImpAndExpFilePath, newContent); }