const fs = require("fs");
const path = require("path");
const ROOT = path.join(__dirname, "../src");
const SKIP = /copy\.vue$|weatherInfo copy/i;
const TEXT_IN_TAG = />([^<>{}\n]+) {
const trimmed = text.trim();
if (!trimmed || !hasChinese(trimmed) || alreadyWrapped(trimmed)) return full;
if (/^[\s\d.,:;+\-/%]+$/.test(trimmed)) return full;
changed = true;
return `>{{ $t('${escapeStr(trimmed)}') }}<`;
});
out = out.replace(ATTR_RE, (full, attr, val) => {
changed = true;
return `:${attr}="$t('${escapeStr(val)}')"`;
});
return { out, changed };
}
function processVueFile(content) {
const open = content.indexOf("");
const close = content.lastIndexOf("");
if (open === -1 || close === -1 || close <= open) {
return { content, changed: false };
}
const before = content.slice(0, open + "".length);
const templateBody = content.slice(open + "".length, close);
const after = content.slice(close);
const { out, changed } = wrapTemplate(templateBody);
if (!changed) return { content, changed: false };
return { content: before + out + after, changed: true };
}
let total = 0;
for (const file of walk(ROOT)) {
const original = fs.readFileSync(file, "utf8");
const { content, changed } = processVueFile(original);
if (!changed) continue;
if (content.length < original.length * 0.7) {
console.warn("SKIP (suspicious shrink):", path.relative(ROOT, file));
continue;
}
fs.writeFileSync(file, content);
total++;
console.log("Updated:", path.relative(ROOT, file));
}
console.log("Done. Updated", total, "files");