UNPKG

@c-sheep/i18n-extract-cli

Version:

这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react

97 lines (96 loc) 3.55 kB
"use strict"; 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;