UNPKG

magic-i18n

Version:

magic-i18n 一键式实现项目的国际化 语言包 处理的过程

110 lines (102 loc) 3.39 kB
require("colors"); const path = require("path"); const fs = require("fs"); const Utils = require("../lib/utils"); const FileProcess = require("./fileProcess"); let [messages, rootPath, i18nPath, i18nFile] = []; /** * 读取原有的国际化信息放到messages中 */ const readMessages = () => { let i18nFilePath = path.join(i18nPath, i18nFile); if (fs.existsSync(i18nFilePath)) { messages = require(i18nFilePath); } else { messages = {}; } }; /** * 将国际化信息放到国际化资源文件中 */ const writeMessages = () => { if (!fs.existsSync(i18nPath)) { Utils.mkdirs(i18nPath); } let i18nFilePath = path.join(i18nPath, i18nFile); // try { // 同时对已有的其他国际化文件进行更新 // fs.readdirSync(i18nPath).forEach(file => { // file = path.join(i18nPath, file); // if (file !== i18nFilePath) { // let oldMessages = require(file); // fs.writeFileSync(file, `module.exports = ${JSON.stringify(Object.assign({}, messages, oldMessages), null, '\t')};`, 'utf8'); // } // }); // } catch (e) { // } fs.writeFileSync( i18nFilePath, `module.exports = ${JSON.stringify(messages, null, "\t")};`, "utf8" ); }; const generateVueFile = (file) => { let processFile = path.relative(process.cwd(), file); console.log(`➤ ${processFile.yellow}`.blue); let content = fs.readFileSync(file, "utf8"); let result = content; // // 获取模板部分 let [, templateContent = ""] = content.match(/<template[^>]*>([\s\S]*)<\/template>/im) || []; templateContent = FileProcess.generateTemplate(messages, templateContent); result = result.replace( /<template[^>]*>([\s\S]*)<\/template>/gim, (_, preTag, content, $3, afterTag) => { return `${preTag}${templateContent}${afterTag}`; } ); // console.log("执行结果", templateContent); //获取script部分 let [, scriptContent = ""] = content.match(/<script[^>]*>([\s\S]*)<\/script>/im) || []; scriptContent = FileProcess.generateScript(messages, scriptContent); result = result.replace( /<script[^>]*>([\s\S]*)<\/script>/gim, (_, preTag, content, $3, afterTag) => { return `${preTag}${scriptContent}${afterTag}`; } ); // console.log('执行结果',result) // fs.writeFileSync(file, result, 'utf-8'); console.log(`✔ ${processFile.yellow}`.green); }; const generateJsFile = (file) => { let processFile = path.relative(process.cwd(), file); // if(processFile !== 'src/modules/DataModel/services/model.js'){ // return false; // } console.log(`➤ ${processFile.yellow}`.blue); let content = fs.readFileSync(file, "utf8"); let result = content; result = FileProcess.generateScript(messages, content); // fs.writeFileSync(file, result, 'utf-8'); console.log(`✔ ${processFile.yellow}`.green); }; module.exports = function (src, { filepath, filename }) { rootPath = path.join(process.cwd(), src); i18nFile = `${filename}.js`; i18nPath = path.join(process.cwd(), filepath); readMessages(); Utils.getAllFiles(rootPath).forEach((file) => { if (file.indexOf(i18nPath) < 0) { path.extname(file) === ".vue" ? generateVueFile(file) : generateJsFile(file); } }); writeMessages(); console.log( "✔ 中文资源文件文件都已生成完毕".green, path.join(i18nPath, i18nFile).blue ); };