89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | const fs = require("fs"); | ||
|  | const path = require("path"); | ||
|  | const { glob } = require("glob"); | ||
|  | 
 | ||
|  | // 读取中文语言包
 | ||
|  | const zhCN = require("../i8n.js"); | ||
|  | 
 | ||
|  | // 递归获取所有需要处理的文件
 | ||
|  | async function getAllFiles(dir, patterns) { | ||
|  |   console.log("搜索目录:", dir); | ||
|  |   console.log("搜索模式:", patterns); | ||
|  |   const files = await glob(patterns, { | ||
|  |     cwd: dir, | ||
|  |     ignore: ["node_modules/**", "dist/**", "**/i18n/**", "**/languages/**"], | ||
|  |   }); | ||
|  |   console.log("找到的文件数量:", files.length); | ||
|  |   return files; | ||
|  | } | ||
|  | 
 | ||
|  | // 获取嵌套对象的值
 | ||
|  | function getNestedValue(obj, path) { | ||
|  |   return path.split(".").reduce((current, key) => current && current[key], obj); | ||
|  | } | ||
|  | 
 | ||
|  | // 替换文件内容
 | ||
|  | function replaceContent(content) { | ||
|  |   // 替换模板中的 $t('key')
 | ||
|  |   content = content.replace( | ||
|  |     /(?<!this\.|that\.)\$t\(['"]([^'"]+)['"]\)/g, | ||
|  |     (match, key) => { | ||
|  |       const value = getNestedValue(zhCN, key); | ||
|  |       return value ? `'${value}'` : match; | ||
|  |     } | ||
|  |   ); | ||
|  | 
 | ||
|  |   // 替换 JavaScript 中的 this.$t('key')
 | ||
|  |   content = content.replace(/this\.\$t\(['"]([^'"]+)['"]\)/g, (match, key) => { | ||
|  |     const value = getNestedValue(zhCN, key); | ||
|  |     return value ? `'${value}'` : match; | ||
|  |   }); | ||
|  | 
 | ||
|  |   return content; | ||
|  | } | ||
|  | 
 | ||
|  | // 主函数
 | ||
|  | async function main() { | ||
|  |   try { | ||
|  |     const srcPath = path.resolve(__dirname, "../"); | ||
|  |     console.log(srcPath); | ||
|  |     console.log("源文件目录:", srcPath); | ||
|  | 
 | ||
|  |     // 只处理 views 和 components 目录
 | ||
|  |     const patterns = [ | ||
|  |       "pages/**/*.vue", | ||
|  |       "pages/**/*.js", | ||
|  |       "pages/**/*.ts", | ||
|  |       "components/**/*.vue", | ||
|  |       "components/**/*.js", | ||
|  |       "components/**/*.ts", | ||
|  |     ]; | ||
|  | 
 | ||
|  |     const files = await getAllFiles(srcPath, patterns); | ||
|  | 
 | ||
|  |     if (files.length === 0) { | ||
|  |       console.log("警告:没有找到匹配的文件!"); | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     for (const file of files) { | ||
|  |       const filePath = path.resolve(srcPath, file); | ||
|  |       console.log("处理文件:", filePath); | ||
|  | 
 | ||
|  |       let content = fs.readFileSync(filePath, "utf8"); | ||
|  |       const newContent = replaceContent(content); | ||
|  | 
 | ||
|  |       if (newContent !== content) { | ||
|  |         fs.writeFileSync(filePath, newContent, "utf8"); | ||
|  |         console.log(`已处理文件: ${file}`); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     console.log("所有文件处理完成!"); | ||
|  |   } catch (error) { | ||
|  |     console.error("处理过程中出错:", error); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | main(); |