88 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.2 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, '../src') | ||
|  |     console.log('源文件目录:', srcPath) | ||
|  | 
 | ||
|  |     // 只处理 views 和 components 目录
 | ||
|  |     const patterns = [ | ||
|  |       'views/**/*.vue', | ||
|  |       'views/**/*.js', | ||
|  |       'views/**/*.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) | ||
|  | 
 | ||
|  |       const 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() |