Former-commit-id: f4ace04ac9567b7511942cedac8f33e9ba3bc41d
This commit is contained in:
Physton
2023-05-23 19:14:46 +08:00
parent 68df4ed85f
commit be322600be
5 changed files with 36 additions and 187 deletions

View File

@@ -1 +1 @@
cd290a38a1fbce5aa1968dcd93c3c051ca6198be
9cd2c2827af5b13f08fe67f1e5c4f1164657513c

View File

@@ -1 +1 @@
b01ff04c1150df9be62ee948ac679cb5456a9ff6
2acb847c20eecd335740e64b04ce76bf61af4170

View File

@@ -1 +1 @@
74e1d159538160092c7fb98c6d7a80ffbbc48fbe
c24056c17de3801966d85d02805effab16d6485b

View File

@@ -229,6 +229,39 @@ Github: Physton/sd-webui-prompt-all-in-one`,
this.loading = false
})
},
translate(text, from_lang, to_lang, translateApi = null, translateApiConfig = null) {
return new Promise(async (resolve, reject) => {
translateApi = translateApi || this.translateApi
translateApiConfig = translateApiConfig || this.translateApiConfig || {}
if (translateApi === 'openai') {
text = JSON.stringify({text})
}
this.gradioAPI.translate(text, from_lang, to_lang, translateApi, translateApiConfig).then(res => {
if (res.success) {
if (translateApi === 'openai') {
let translated_text = res.translated_text
// 找到第一个[,截取到最后一个]然后再转成json
const start = translated_text.indexOf('{')
const end = translated_text.lastIndexOf('}')
translated_text = translated_text.substring(start, end + 1)
try {
translated_text = JSON.parse(translated_text).text
res.translated_text = translated_text
} catch (e) {
reject(e)
return
}
}
resolve(res)
} else {
reject(res)
}
}).catch(error => {
reject(error)
})
})
},
onSaveClick() {
this.isOpen = false
let configs = {}

View File

@@ -51,190 +51,6 @@ export default {
getLang(key) {
return common.getLang(key, this.languageCode, this.languages)
},
_translateRes(success, message, text, translated_text, from_lang, to_lang, api, apiConfig) {
return {
success,
message,
text,
translated_text,
from_lang,
to_lang,
api,
api_config: apiConfig
}
},
translate(text, from_lang, to_lang, translateApi = null, translateApiConfig = null, manual = true) {
return new Promise(async (resolve, reject) => {
translateApi = translateApi || this.translateApi
translateApiConfig = translateApiConfig || this.translateApiConfig || {}
if (!common.canTranslate(text)) {
resolve(this._translateRes(true, '', text, text, from_lang, to_lang, translateApi, translateApiConfig))
return
}
if (this.tagCompleteFile)
{
let translateText = await this.translateByCSV(text, from_lang, to_lang, this.tagCompleteFile)
if (translateText) {
resolve(this._translateRes(true, '', text, translateText, from_lang, to_lang, translateApi, translateApiConfig))
return
}
}
if (!manual && this.tagCompleteFile && this.onlyCsvOnAuto) {
// 如果是自动翻译、启用了tagcomplete翻译增强、启用了自动翻译时只使用csv就不再用网络翻译
resolve(this._translateRes(true, '', text, '', from_lang, to_lang, translateApi, translateApiConfig))
return
}
if (translateApi === 'openai') {
text = JSON.stringify({text})
}
this.gradioAPI.translate(text, from_lang, to_lang, translateApi, translateApiConfig).then(res => {
if (res.success) {
if (translateApi === 'openai') {
let translated_text = res.translated_text
// 找到第一个[,截取到最后一个]然后再转成json
const start = translated_text.indexOf('{')
const end = translated_text.lastIndexOf('}')
translated_text = translated_text.substring(start, end + 1)
try {
translated_text = JSON.parse(translated_text).text
res.translated_text = translated_text
} catch (e) {
reject(e)
return
}
} else {
// 移除末尾的.,因为有些翻译会加上.
res.translated_text = res.translated_text.replace(/\.+$/, '')
res.translated_text = res.translated_text.trim()
}
resolve(res)
} else {
reject(res)
}
}).catch(error => {
reject(error)
})
})
},
async translateMulti(texts, from_lang, to_lang, callback, complete = null, translateApi = null, translateApiConfig = null, manual = true) {
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)) {
// 如果需要翻译
if (this.tagCompleteFile)
{
let translateText = await this.translateByCSV(text, from_lang, to_lang, this.tagCompleteFile)
if (translateText) {
// 如果从CSV中翻译成功了
callback(this._translateRes(true, '', text, translateText, from_lang, to_lang, translateApi, translateApiConfig), index)
continue
}
}
if (!manual && this.tagCompleteFile && this.onlyCsvOnAuto) {
// 如果是自动翻译、启用了tagcomplete翻译增强、启用了自动翻译时只使用csv就不再用网络翻译
callback(this._translateRes(true, '', text, '', from_lang, to_lang, translateApi, translateApiConfig), index)
continue
}
// 如果从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
}
let errors = (message) => {
for (const item of needTranslateTexts) {
callback(this._translateRes(false, message, item.text, '', from_lang, to_lang, translateApi, translateApiConfig), item.index)
}
}
this.gradioAPI.translate(JSON.stringify(needTranslateTexts), from_lang, to_lang, translateApi, translateApiConfig).then(res => {
if (res.success) {
console.log(res.translated_text)
let translated_text = res.translated_text
const start = translated_text.indexOf('[')
const end = translated_text.lastIndexOf(']')
translated_text = translated_text.substring(start, end + 1)
try {
translated_text = JSON.parse(translated_text)
for (const index in translated_text) {
const item = translated_text[index]
callback(this._translateRes(true, '', needTranslateTexts[index].text, item.text, from_lang, to_lang, translateApi, translateApiConfig), item.index)
}
} catch (e) {
errors(e.message)
}
} else {
errors(res.message)
}
if (complete) complete()
}).catch(error => {
errors(error.message)
if (complete) complete()
})
} else if (translateApiConfig.concurrent && translateApiConfig.concurrent >= texts.length) {
// 如果并发数大于等于需要翻译的文本数,并发翻译
let completeCount = texts.length
const completeFunc = () => {
completeCount--
if (completeCount === 0) {
if (complete) complete()
}
}
for (const index in texts) {
const text = texts[index]
if (this.cancelMultiTranslate) {
// 如果取消了翻译,跳过
callback(this._translateRes(true, '', text, '', from_lang, to_lang, translateApi, translateApiConfig), index)
completeFunc()
continue
}
this.translate(text, from_lang, to_lang, translateApi, translateApiConfig, manual).then(res => {
callback(res, index)
completeFunc()
}).catch(error => {
callback(this._translateRes(false, error.message, text, '', from_lang, to_lang, translateApi, translateApiConfig), index)
completeFunc()
})
}
} else {
// 一个个翻译
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, manual))
callback(res, index)
} catch (error) {
callback(this._translateRes(false, error.message, text, '', from_lang, to_lang, translateApi, translateApiConfig), index)
}
}
if (complete) complete()
}
},
getCSV(tagCompleteFile = null, reload = false) {
window.tagCompleteFileCache = window.tagCompleteFileCache || {}
return new Promise((resolve, reject) => {