把项目中的中英文翻译导出为excel中英文对照表格
把项目中利用i18n做的多语言翻译,导出到一个excel表格中
import zh from './zh.js'; // 中文翻译文件
import en from './en.js'; // 英文翻译文件
import XLSX from "xlsx";
// 递归收集所有键值对(保留所有键名,不合并嵌套键)
function collectAllKeyValues(obj, path = [], result = []) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const currentPath = [...path, key];
const value = obj[key];
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
// 递归处理嵌套对象
collectAllKeyValues(value, currentPath, result);
} else {
// 添加键值对(保留完整路径但不合并)
result.push({
key: key,
value: value === null ? 'null' : String(value),
originalPath: [...currentPath]
});
}
}
}
return result;
}
// 收集中文和英文的所有键值对
const zhKeyValues = collectAllKeyValues(zh);
const enKeyValues = collectAllKeyValues(en);
// 合并中英文翻译
const mergedData = [];
for (const zhItem of zhKeyValues) {
// 找到对应的英文翻译
const enItem = enKeyValues.find(
en => en.originalPath.join('.') === zhItem.originalPath.join('.')
);
// 构造最终的数据行
mergedData.push([
// zhItem.originalPath.join('.'), // 路径
zhItem.originalPath[0], // 路径
zhItem.key, // 键值
enItem ? enItem.value : '', // 英文
zhItem.value // 中文
]);
}
// 准备 Excel 数据
const excelData = [
['路径', '键值', '英文', '中文'], // 表头
...mergedData // 数据行
];
// 创建工作簿和工作表
const wb = XLSX.utils.book_new();
const ws = XLSX.utils.aoa_to_sheet(excelData);
// 调整列宽
ws['!cols'] = [
{ wch: 30 }, // 路径列
{ wch: 20 }, // 键值列
{ wch: 50 }, // 英文列
{ wch: 50 } // 中文列
];
// 添加工作表并写入文件
XLSX.utils.book_append_sheet(wb, ws, '翻译数据');
XLSX.writeFile(wb, 'translations.xlsx');
console.log('Excel文件已生成: translations.xlsx');

浙公网安备 33010602011771号