Modify the batch translation button to stop translation when clicked during translation

Former-commit-id: afe10c8f6349a3908fb13044308355cb59d94749
This commit is contained in:
Physton
2023-05-21 15:55:42 +08:00
parent a420bc7b7b
commit 46dd3c162e
4 changed files with 17 additions and 4 deletions

View File

@@ -1 +1 @@
8d4bdf477e0e63a5f8d4a645b80e62ea5c68469d
9c068d1d470911810bea124edae4ce5372f70370

View File

@@ -1 +1 @@
181e07ea47752d8bf7605092d912ac75f8b7376e
29cf5f5b8e25714298cade003f51f052e1d6ef7f

View File

@@ -1 +1 @@
d53222c7c31e9cabc1996fe36cc5389f0c6729c0
1616fc1a1d3c8fcd5501496d8989546f8dde0083

View File

@@ -29,6 +29,7 @@ export default {
},
data() {
return {
cancelMultiTranslate: false,
}
},
computed: {
@@ -106,27 +107,34 @@ export default {
})
},
async translateMulti(texts, from_lang, to_lang, callback, complete = null, translateApi = null, translateApiConfig = null) {
this.cancelMultiTranslate = false
translateApi = translateApi || this.translateApi
translateApiConfig = translateApiConfig || this.translateApiConfig || {}
if (translateApi === 'openai') {
// 使用openai翻译先把所有需要翻译的文本改为JSON数组格式然后一次性请求完成后在解析数组
let needTranslateTexts = []
for (const index in texts) {
const text = texts[index]
if (common.canTranslate(text)) {
// 如果需要翻译
let translateText = this.translateByCSV(text, from_lang, to_lang)
if (translateText) {
// 如果从CSV中翻译成功了
callback(this._translateRes(true, '', text, translateText, from_lang, to_lang, translateApi, translateApiConfig), index)
} else {
// 如果从CSV中没有翻译成功就放到需要翻译的数组中
needTranslateTexts.push({
"text": text,
"index": index
})
}
} else {
// 如果不需要翻译,直接返回
callback(this._translateRes(true, '', text, text, from_lang, to_lang, translateApi, translateApiConfig), index)
}
}
if (needTranslateTexts.length === 0) {
// 如果没有需要翻译的文本,直接返回
if (complete) complete()
return
}
@@ -160,6 +168,7 @@ export default {
if (complete) complete()
})
} else if (translateApiConfig.concurrent && translateApiConfig.concurrent >= texts.length) {
// 如果并发数大于等于需要翻译的文本数,并发翻译
let completeCount = texts.length
const completeFunc = () => {
completeCount--
@@ -167,7 +176,6 @@ export default {
if (complete) complete()
}
}
// 如果并发数大于等于需要翻译的文本数,并发翻译
for (const index in texts) {
const text = texts[index]
this.translate(text, from_lang, to_lang, translateApi, translateApiConfig).then(res => {
@@ -182,6 +190,11 @@ export default {
// 一个个翻译
for (const index in texts) {
const text = texts[index]
if (this.cancelMultiTranslate) {
// 如果取消了翻译,跳过
callback(this._translateRes(true, '', text, '', from_lang, to_lang, translateApi, translateApiConfig), index)
continue
}
try {
let res = (await this.translate(text, from_lang, to_lang, translateApi, translateApiConfig))
callback(res, index)