const fs = require('fs'); const path = require('path'); // 配置 const projectDir = './pages'; // 你的 UniApp 项目路径 const langFilePath = './output3.json'; // 本地语言文件路径 const ignoredFiles = ['node_modules', 'locale']; // 忽略的文件夹或文件 // 加载语言文件 let langData = {}; if (fs.existsSync(langFilePath)) { const langFileContent = fs.readFileSync(langFilePath, 'utf-8'); langData = JSON.parse(langFileContent); } // 正则表达式:匹配汉字 const chineseRegex = /[\u4e00-\u9fa5\u3000-\u303f\uff01-\uff5e\u201c-\u201d\u3008-\u3011]+/g; // 处理单个文件 function processFile(filePath) { let content = fs.readFileSync(filePath, 'utf-8'); const matches = content.match(chineseRegex); if (matches) { matches.forEach((text) => { // 如果语言文件中不存在该汉字,则生成一个唯一的 key // if (!langData[text]) { // const key = `text_${Object.keys(langData).length + 1}`; // langData[text] = key; // } // 替换为 $t('key') 形式 const key = langData[text]; const replacement = `$t('${key}')`; content = content.replace(new RegExp(text, 'g'), replacement); }); // 写回文件 fs.writeFileSync(filePath, content, 'utf-8'); } } // 遍历目录 function traverseDirectory(dir) { const files = fs.readdirSync(dir); files.forEach((file) => { const fullPath = path.join(dir, file); const stats = fs.statSync(fullPath); if (stats.isDirectory()) { // 忽略指定的文件夹 if (!ignoredFiles.includes(file)) { traverseDirectory(fullPath); } } else if (stats.isFile()) { // 只处理 .vue 和 .js 文件 if (/\.(vue|js)$/.test(file)) { processFile(fullPath); } } }); } // 主函数 function main() { console.log('开始转换汉字为国际化格式...'); // 遍历项目目录 traverseDirectory(projectDir); // 更新语言文件 fs.writeFileSync(langFilePath, JSON.stringify(langData, null, 2), 'utf-8'); console.log(`语言文件已更新:${langFilePath}`); console.log('转换完成!'); } main();