使用Notepad++或脚本查找重复的翻译键行
嘿,我来帮你搞定这个重复翻译键的检测问题!我整理了几个实用的方案,你可以根据自己的习惯选一个:
方案1:用 Notepad++ 正则快速定位重复键
如果你习惯用Notepad++处理文本,这个方法最直接:
- 打开你的翻译文件,按下
Ctrl+F调出查找面板,切换到正则表达式模式,记得勾选「匹配换行符」(在查找面板的左下角)。 - 输入这个正则表达式:
^(\w+):.*\R(?=.*^\1:)- 简单解释:
^(\w+):精准匹配行首的翻译键(\w包含下划线,刚好符合你键的规则),并把键捕获下来;.*\R匹配该行剩下的内容和换行;后面的(?=.*^\1:)是正向预查,用来确认这个键在后面的行里还出现过。
- 简单解释:
- 点击「查找全部」,所有存在重复的键的第一行会被高亮出来。如果你想给重复项做标记,也可以切换到替换面板,把匹配内容替换成
[重复键] $0,这样一眼就能看到哪些行有问题。- 额外小技巧:如果你的文件行数很多,先按字典序排序(编辑→行操作→按字典序排序),重复的键会自动挨在一起,然后用正则
^(\w+):.*\R\1:就能快速找到相邻的重复行,更直观!
- 额外小技巧:如果你的文件行数很多,先按字典序排序(编辑→行操作→按字典序排序),重复的键会自动挨在一起,然后用正则
方案2:Batch 脚本自动统计重复键
如果你喜欢用Windows批处理,这个脚本可以帮你自动统计每个键的出现次数,直接输出重复项:
@echo off setlocal enabledelayedexpansion set "file=your_translation_file.txt" REM 把这里换成你的翻译文件路径 set "tempfile=temp_counts.txt" REM 提取所有键并计数 for /f "tokens=1 delims=:" %%a in (%file%) do ( set /a count[%%a]+=1 ) REM 输出重复的键 echo 检测到的重复翻译键: for /f "tokens=2 delims==" %%a in ('set count[') do ( if %%a gtr 1 ( set "key=%%a" set "key=!key:count[=!" set "key=!key:]=!" echo !key! 一共出现了 %%a 次 ) ) del %tempfile% 2>nul endlocal
使用方法:把脚本存成check_duplicates.bat,替换掉文件路径,双击运行就能看到结果啦。
方案3:Node.js 脚本精准定位重复行号
如果你的翻译文件很大,或者想知道重复键具体在哪些行,Node.js脚本会更灵活:
const fs = require('fs'); const path = require('path'); const filePath = './your_translation_file.txt'; // 替换成你的文件路径 const keyCounts = new Map(); const duplicateKeys = new Map(); // 逐行读取并处理 fs.readFileSync(filePath, 'utf8').split('\n').forEach((line, index) => { line = line.trim(); if (!line) return; // 跳过空行 const colonIndex = line.indexOf(':'); if (colonIndex === -1) return; // 跳过格式不对的行 const key = line.slice(0, colonIndex).trim(); if (!key) return; if (keyCounts.has(key)) { // 记录重复的行号(行号从1开始) const existingLines = duplicateKeys.get(key) || [keyCounts.get(key)]; existingLines.push(index + 1); duplicateKeys.set(key, existingLines); } else { keyCounts.set(key, index + 1); } }); // 输出结果 console.log('=== 重复翻译键检测结果 ==='); if (duplicateKeys.size === 0) { console.log('✅ 没有找到任何重复的翻译键!'); } else { duplicateKeys.forEach((lineNumbers, key) => { console.log(`⚠️ 键 "${key}" 在以下行重复出现:${lineNumbers.join(', ')}`); }); }
使用方法:把脚本存成check_duplicates.js,修改文件路径,然后在命令行里运行node check_duplicates.js,就能看到每个重复键的具体行号,直接定位修改超方便!
内容的提问来源于stack exchange,提问作者Relentless
相关产品推荐
相关产品推荐

