mirror of
https://github.com/Physton/sd-webui-prompt-all-in-one.git
synced 2026-04-30 03:01:31 +00:00
submit
Former-commit-id: f4ace04ac9567b7511942cedac8f33e9ba3bc41d
This commit is contained in:
@@ -1 +1 @@
|
||||
cd290a38a1fbce5aa1968dcd93c3c051ca6198be
|
||||
9cd2c2827af5b13f08fe67f1e5c4f1164657513c
|
||||
@@ -1 +1 @@
|
||||
b01ff04c1150df9be62ee948ac679cb5456a9ff6
|
||||
2acb847c20eecd335740e64b04ce76bf61af4170
|
||||
@@ -1 +1 @@
|
||||
74e1d159538160092c7fb98c6d7a80ffbbc48fbe
|
||||
c24056c17de3801966d85d02805effab16d6485b
|
||||
@@ -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 = {}
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user