UNPKG

cnd-i18n-loader

Version:

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

85 lines (80 loc) 2.92 kB
require('@colors/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); // if(processFile !== 'src/modules/DataSource/views/DataSourceList/DialogOfAdd.vue'){ // return false; // } console.log(`➤ ${processFile.yellow}`.blue); let content = fs.readFileSync(file, 'utf8'); // // 获取模板部分 let [, templateContent = ''] = content.match(/<template[^>]*>((.|\n|\r)*)<\/template>/im) || []; FileProcess.generateTemplate(messages, templateContent); //获取script部分 let [, scriptContent = ''] = content.match(/<script[^>]*>((.|\n|\r)*)<\/script>/im) || []; FileProcess.generateScript(messages, scriptContent); 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'); FileProcess.generateScript(messages, content); 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); };