| 
									
										
										
										
											2025-04-01 22:14:57 +08:00
										 |  |  | 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')
 | 
					
						
							| 
									
										
										
										
											2025-05-28 11:04:25 +08:00
										 |  |  |   // content = content.replace(
 | 
					
						
							|  |  |  |   //   /(?<!this\.|that\.)\$t\(['"]([^'"]+)['"]\)/g,
 | 
					
						
							|  |  |  |   //   (match, key) => {
 | 
					
						
							|  |  |  |   //     const value = getNestedValue(zhCN, key)
 | 
					
						
							|  |  |  |   //     return value ? `'${value}'` : match
 | 
					
						
							|  |  |  |   //   }
 | 
					
						
							|  |  |  |   // )
 | 
					
						
							| 
									
										
										
										
											2025-04-01 22:14:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // 替换 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() |