UNPKG

kdesign-i18n

Version:

kd is from company of klx, it provide quickly genarator company inner business front structure

95 lines (92 loc) 3.72 kB
#!/usr/bin/env node const xlsx = require('node-xlsx') const fs = require('fs') const https = require('https') const { resolve } = require('path') const arg = process.argv.slice(2) if (arg.length < 2) { throw new Error('参数必须传递文件地址和导出地址') } const data = xlsx.parse(resolve(process.cwd(), arg[0])) class Data { get translate () { return new Translate } transfer (data = [], translate = false) { let resMap = new Map() return new Promise((resolve, reject) => { data.forEach(sheet => { let keyIndex, codeIndex, zhIndex sheet.data.forEach(async (row, index) => { // 获取表头 if (index === 0) { row.forEach((col, index) => { let reg = /\:(.+)/, key = (col.match(reg) || [])[1] if (key) { if (/zh/i.test(key)) zhIndex = index resMap.set(key, { index, data: {} }) } if (col === 'key') { if (typeof keyIndex === 'number') { codeIndex = index return } keyIndex = index } }) return } if (index === sheet.data.length - 1) { resolve(resMap) } if (!row.length) return for (let iterator of resMap) { let [key, data] = iterator, val = /zh/i.test(key) || !translate ? row[data.index] : await this.translate.transfer(row[zhIndex], key.match(/([^_]+)/)[1]).source Object.assign(data.data[row[keyIndex]] || (data.data[row[keyIndex]] = {}), { [row[codeIndex]]: val }) } }) }) }) } } class Write { write2local (path = __dirname, filename = '1.js', data) { fs.writeFileSync(`${path}/${filename}`, data) } } class Translate { transfer (text, target, source = 'zh-cn') { return new Promise((resolve, reject) => { console.log(`开始转换${text}`) https.get(`https://translate.googleapis.com/translate_a/single?client=gtx&sl=${source}&tl=${target}&dt=t&q=${encodeURIComponent(text)}`, (res) => { let data = '' res.on('data', (chunk) => { data += chunk }) res.on('end', chunk => { try { let json = JSON.parse(data.toString()), [[[target, source]]] = json resolve({ target, source }) } catch (err) { reject(err) } }) }) }) } } (new Data()).transfer(data).then(res => { let write = new Write() for (let iterator of res) { let [key, data] = iterator, str = `\/\* eslint-disable\*\/\n export default ${JSON.stringify(data.data, '', 2)}`.replace(/\"(require\([^"]+)\"/g, '$1') write.write2local(resolve(process.cwd(), arg[1]), `${key}.js`, str) } })