@c-sheep/i18n-extract-cli
Version:
这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react
97 lines (96 loc) • 3.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TranslateAction = void 0;
// import tencentCloud from "tencentcloud-sdk-nodejs";
const tencentCloud = require("tencentcloud-sdk-nodejs");
class TranslateAction {
constructor(type = "tenxun", credential, region = "ap-shanghai") {
this.sleep = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, 500);
});
};
this.createSingleBar = (targetLang = "en", num = 100) => {
// const bar = this.multiBar.create(num, 0, { filename: targetLang });
// const bar = new cliProgress.SingleBar(
// {
// format: `${chalk.cyan(`${targetLang}-翻译进度:`)} [{bar}] {percentage}%`
// },
// cliProgress.Presets.shades_classic
// );
// this.signleBar[targetLang] = bar;
};
this.signleBar = {};
const tmtClient = tencentCloud.tmt.v20180321.Client;
this.client = new tmtClient({
credential,
region
});
}
async translateWithTencent(sourceTexts, targetLang = "en") {
const result = {};
const length = sourceTexts.length;
const stepTranslate = Math.ceil(length / 100);
const sourctTextStep = [];
// if (!this.signleBar[targetLang]) {
// this.createSingleBar(targetLang, stepTranslate);
// }
// const bar = this.signleBar[targetLang];
for (let i = 0; i < stepTranslate; i += 1) {
sourctTextStep.push(sourceTexts.slice(i * 100, (i + 1) * 100));
}
while (sourctTextStep.length) {
const text = sourctTextStep.pop();
if (text) {
const resultText = await this.excuteTranslateWithTencent(text, targetLang);
for (const i in text) {
result[text[i]] = resultText[i];
}
// console.log(resultText, text, "======");
// result.push(...resultText);
}
// bar.increment();
await this.sleep();
}
// bar.stop();
// setTimeout(() => {
// delete this.signleBar[targetLang];
// if (Object.values(this.signleBar).length <= 0) {
// // this.multiBar.stop();
// }
// }, 300);
return result;
}
/**
* 腾讯云翻译方法
* @param {string[]} sourceTexts 待翻译的原文列表
* @param {string} targetLang 目标语言(如 "en")
* @returns {Promise<string[]>} 翻译后的文本列表
*/
async excuteTranslateWithTencent(sourceTexts, targetLang = "en") {
const transfromMap = {
"zh-tw": "zh-TW",
en: "en"
};
targetLang = transfromMap[targetLang] || targetLang;
// 发送POST请求
const ret = new Promise((resolve, reject) => {
this.client.TextTranslateBatch({
SourceTextList: sourceTexts,
Source: "zh",
Target: targetLang,
ProjectId: 0
}, (err, resp) => {
if (err)
return reject(err);
resolve(resp === null || resp === void 0 ? void 0 : resp.TargetTextList);
});
});
// 解析响应
const data = await ret;
return data;
}
}
exports.TranslateAction = TranslateAction;