Files
antd-admin/scripts/translate.js
T

103 lines
2.5 KiB
JavaScript
Raw 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.
/**
* 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) {
res = await youdao({
q: key,
})
} 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.')
})()