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();
							 |