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