前言
毕业的第8年,写前端的第7年。今年浏览掘金的频率感觉超过了前些年的总和,看得多了就发现这方天地里生活着很多有趣的灵魂。而我却为了这
首次成功发布文章,奖励矿石 10000
在掘金第一次写作文。
聊点工作的
在我得颈椎病前我就意识到,解放双手的工作脚本是必须的。前端多多少少都会点nodejs,不写一点白瞎这前端必备的nodejs环境了。
Who is Json
sequenceDiagram
participant Mimosa
Note right of Mimosa : 产品
participant Julian
Note left of Julian : 开发
Mimosa->>Julian: Hi Julian, The English translation here is not correct.?
Julian-->>Mimosa: 嗯,我不晓得是不是 correct,但是有道翻译就是这么translation的
Mimosa->>Julian:Can you send me these translated texts? I'm here to find a client to translate.
Julian-->>Mimosa: 好的,我现在发给你!
Julian-->>Mimosa: Hi Mimosa, json发你了
Mimosa->>Julian: Json?Who is Json?
Mimosa->>Julian: Ok, I got it. But I cannot open it.Can u send me an excel?
Julian-->>Mimosa: 嗯,确实excel方便些。我把他转一下。
忘了具体从什么时候开始,我喜欢在自己的项目里加一个script目录。它总能在一些特定的时刻帮我解决一些问题。
他可以是`.js`、`.mjs`、`.py`、`.sh` 任何你可能会用得到的。
先来分析一下关系
I18n
通常来讲你不论你是 react 还是 vue,你大概都会有这样一个类似目录。
.
└── I18n
├── index.js
└── lang
├── en
│ ├── index.js
│ └── *.json
└── zh
├── index.js
└── *.json
I18n/lang/en/index.js 与 I18n/lang/zh/index.js 导出了一个 json 集合所以我们不需要直接操作 json 文件,而是对 js 导出的 Object 进行 Read操作。
table
再经过一点 White 操作后,我们希望生成的表格长起来像这样
| key | zh | en |
|---|---|---|
| test | 测试 | test |
要想写出这样的表格,我们需要借助node-xlsx。
xlsx.build() 接收这样一个结构的参数:
{
name: '',
data: [
['key', 'zh', 'en'],
['test', '测试', 'test']
]
}
jsonToSheet
function jsonToSheet (zh, en) {
let data = []
function loop(zh, en, key) {
Object.keys(zh).forEach(
i => {
switch (typeof zh[i]) {
case 'object':
loop(zh[i], en[i], `${key||''}${i}.`)
break;
case 'string':
data.push([`${key||''}${i}`, zh[i], en[i]])
break;
default:
break;
}
}
)
}
loop(zh, en)
return Object.keys(zhCN).map(i => {
return {
name: i,
data: [['key', 'zh-CN', 'en-US']].concat(data.filter(j => j[0].split('.')[0] === i))
}
})
}
有了这一步基本上我们需要的结构就有了,而下一步仅仅只需调用 xlsx.build() 后一个写文件的操作。
const buffer = xlsx.build(sheets);
fs.writeFile(path.resolve(`./jsonToSheets.xlsx`), buffer, (err) => {
if (err) throw err;
});