mirror of
https://github.com/zuiidea/antd-admin.git
synced 2024-04-21 12:32:14 +00:00
115 lines
2.9 KiB
JavaScript
115 lines
2.9 KiB
JavaScript
/**
|
||
* Youdao Translate, My private account is for testing purposes only.
|
||
* Please go to the official account to apply for an account. Thank you for your cooperation.
|
||
* APP ID:055c2d71f9a05214
|
||
* Secret key:ZcpuQxQW3NkQeKVkqrXIKQYXH57g2KuN
|
||
*/
|
||
|
||
/* eslint-disable */
|
||
const md5 = require('md5')
|
||
const qs = require('qs')
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
const axios = require('axios')
|
||
const jsonFormat = require('json-format')
|
||
const { i18n } = require('../src/utils/config')
|
||
const { languages, defaultLanguage } = i18n
|
||
|
||
const locales = {}
|
||
|
||
languages.forEach(item => {
|
||
locales[item.key] = require(`../src/locales/${item.key}/messages.json`)
|
||
})
|
||
|
||
const youdao = ({ q, from, to }) =>
|
||
new Promise((resolve, reject) => {
|
||
{
|
||
const appid = '055c2d71f9a05214'
|
||
const appse = 'ZcpuQxQW3NkQeKVkqrXIKQYXH57g2KuN'
|
||
const salt = Date.now()
|
||
|
||
const sign = md5(appid + q + salt + appse)
|
||
const query = qs.stringify({
|
||
q,
|
||
from,
|
||
to,
|
||
appKey: appid,
|
||
salt,
|
||
sign,
|
||
})
|
||
|
||
axios.get(`http://openapi.youdao.com/api?${query}`).then(({ data }) => {
|
||
if (data.query && data.translation[0]) {
|
||
resolve(data.translation[0])
|
||
} else {
|
||
resolve(q)
|
||
}
|
||
})
|
||
}
|
||
})
|
||
|
||
const transform = async ({ from, to, locales, outputPath }) => {
|
||
for (const key in locales[from]) {
|
||
if (locales[to][key]) {
|
||
console.log(`add to skip: ${key}`)
|
||
} else {
|
||
let res = key
|
||
let way = 'youdao'
|
||
if (key.indexOf('/') !== 0) {
|
||
const reg = '{([^{}]*)}'
|
||
const tasks = key
|
||
.match(new RegExp(`${reg}|((?<=(${reg}|^)).*?(?=(${reg}|$)))`, 'g'))
|
||
.map(item => {
|
||
if (new RegExp(reg).test(item)) {
|
||
return Promise.resolve(item)
|
||
}
|
||
return youdao({
|
||
q: item,
|
||
from,
|
||
to,
|
||
})
|
||
})
|
||
|
||
res = (await Promise.all(tasks)).join('')
|
||
} else {
|
||
res = `/${to + key}`
|
||
way = 'link'
|
||
}
|
||
if (res !== key) {
|
||
locales[to][key] = res
|
||
console.log(`${way}: ${from} -> ${to}: ${key} -> ${res}`)
|
||
} else {
|
||
console.log(`same: ${from} -> ${to}: ${key}`)
|
||
}
|
||
}
|
||
}
|
||
await fs.writeFileSync(
|
||
path.resolve(__dirname, outputPath),
|
||
jsonFormat(locales[to], {
|
||
type: 'space',
|
||
size: 2,
|
||
})
|
||
)
|
||
}
|
||
;(async () => {
|
||
const tasks = languages
|
||
.map(item => ({
|
||
from: defaultLanguage,
|
||
to: item.key,
|
||
}))
|
||
.filter(item => item.from !== item.to)
|
||
|
||
for (const item of tasks) {
|
||
console.log(`start: ${item.from} -> ${item.to}`)
|
||
await transform({
|
||
from: item.from,
|
||
to: item.to,
|
||
locales,
|
||
outputPath: `../src/locales/${item.to}/messages.json`,
|
||
})
|
||
console.log(`completed: ${item.from} -> ${item.to}`)
|
||
}
|
||
|
||
console.log('All translations have been completed.')
|
||
})()
|