Files
koodo-reader/scripts/extract-untranslated.js

66 lines
1.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
// -*- coding: utf-8 -*-
/**
* 提取每个语言文件中value和en.json中同一个键的value相同的词条
* 并将结果输出到 untranslated/ 目录下的对应文件中。
*/
const fs = require("fs");
const path = require("path");
function loadJson(filepath) {
const content = fs.readFileSync(filepath, "utf-8");
return JSON.parse(content);
}
function saveJson(filepath, data) {
const content = JSON.stringify(data, null, 2);
fs.writeFileSync(filepath, content, "utf-8");
}
function extractUntranslated() {
const localesDir = "../src/assets/locales";
const outputDir = "../untranslated";
// 创建输出目录
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// 加载 en.json 作为参考
const enFilepath = path.join(localesDir, "en.json");
const enData = loadJson(enFilepath);
// 获取所有符合条件的语言文件
const langFiles = fs
.readdirSync(localesDir)
.filter(
(f) => f.endsWith(".json") && f !== "en.json" && !f.startsWith("index")
)
.sort();
console.info(`${"文件".padEnd(15)} ${"未翻译条目数".padStart(10)}`);
console.info("-".repeat(30));
for (const langFile of langFiles) {
const filepath = path.join(localesDir, langFile);
const data = loadJson(filepath);
// 提取value与en.json中同一键的value相同的条目
const untranslated = Object.fromEntries(
Object.entries(data).filter(([k, v]) => enData[k] === v)
);
const outPath = path.join(outputDir, langFile);
saveJson(outPath, untranslated);
const count = Object.keys(untranslated).length;
console.info(
`${langFile.padEnd(15)} ${String(count).padStart(10)} 条 -> ${outPath}`
);
}
console.info(`提取完成!结果已保存到 ${outputDir}/ 目录。`);
}
extractUntranslated();