issues/554 issues/558

Update texthook.py

1

1

1
This commit is contained in:
恍兮惚兮 2024-03-06 17:19:15 +08:00
parent a9a9160d3b
commit 5a1c3b4c54
22 changed files with 325 additions and 52 deletions

View File

@ -148,8 +148,7 @@ class MAINUI() :
return ss
def textgetmethod(self,text,is_auto_run=True,embedcallback=None,onlytrans=False):
_autolock(self.solvegottextlock)
if onlytrans==False:
self.currentsignature=time.time()
if type(text)==str:
if text.startswith('<notrans>'):
self.translation_ui.displayres.emit(dict(color=globalconfig['rawtextcolor'],res=text[len('<notrans>'):],onlytrans=onlytrans))
@ -171,7 +170,8 @@ class MAINUI() :
if embedcallback:
embedcallback('')
return
if onlytrans==False:
self.currentsignature=time.time()
try:
if type(text)==list:
origin='\n'.join(text)
@ -227,11 +227,11 @@ class MAINUI() :
print_exc()
hira=[]
if globalconfig['refresh_on_get_trans']==False:
self.translation_ui.displayraw1.emit(hira,text,globalconfig['rawtextcolor'] ,onlytrans)
self.translation_ui.displayraw1.emit(dict(hira=hira,text=text,color=globalconfig['rawtextcolor'],onlytrans=onlytrans))
_showrawfunction=None
_showrawfunction_sig=0
else:
_showrawfunction=functools.partial(self.translation_ui.displayraw1.emit,hira,text,globalconfig['rawtextcolor'],onlytrans)
_showrawfunction=functools.partial(self.translation_ui.displayraw1.emit,dict(hira=hira,text=text,color=globalconfig['rawtextcolor'],onlytrans=onlytrans))
_showrawfunction_sig=time.time()
text_solved,optimization_params= self.solvebeforetrans(text)
@ -274,7 +274,6 @@ class MAINUI() :
def GetTranslationCallback(self,onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,embedcallback,iter_res_status):
if classname in self.usefultranslators:
self.usefultranslators.remove(classname)
if embedcallback is None and currentsignature!=self.currentsignature:return

View File

@ -1,15 +1,15 @@
import functools,os,shutil
from PyQt5.QtGui import QFont
from PyQt5.QtGui import QFont,QStandardItem,QStandardItemModel
from PyQt5.QtCore import Qt,QSize
from traceback import print_exc
from PyQt5.QtWidgets import QFontComboBox ,QLabel,QComboBox,QPushButton,QFileDialog
from PyQt5.QtWidgets import QFontComboBox,QDialog,QLabel,QComboBox,QPushButton,QFileDialog,QVBoxLayout,QTableView,QHeaderView,QHBoxLayout,QLineEdit
from gui.settingpage_ocr import getocrgrid
from myutils.config import globalconfig ,_TR,_TRL ,savehook_new_data
from myutils.hwnd import getpidexe
from myutils.config import globalconfig ,_TR,_TRL
from gui.dialog_savedgame import dialog_savedgame
import threading,gobject,requests,datetime,zipfile
from gui.inputdialog import autoinitdialog
from gui.usefulwidget import getsimplecombobox,getspinbox,getcolorbutton,yuitsu_switch,getsimpleswitch,getQMessageBox
from gui.usefulwidget import getsimplecombobox,getspinbox,getcolorbutton,yuitsu_switch,getsimpleswitch,Singleton
from gui.codeacceptdialog import codeacceptdialog
from textsource.fridahook import fridahook
from myutils.utils import loadfridascriptslist,checkifnewgame,makehtml
@ -130,6 +130,59 @@ def getfridahookgrid(self) :
return grids
@Singleton
class safeembedcheckdialog(QDialog):
def newline(self,row):
self.model.insertRow(row,[QStandardItem(globalconfig['embedded']['safecheckregexs'][row])])
def __init__(self,parent) -> None:
super().__init__(parent,Qt.WindowCloseButtonHint)
self.setWindowTitle(_TR('正则匹配'))
formLayout = QVBoxLayout(self) # 配置layout
self.model=QStandardItemModel()
self.model.setHorizontalHeaderLabels(_TRL(['正则']))
table = QTableView(self)
table.setModel(self.model)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table=table
for row,regex in enumerate(globalconfig['embedded']['safecheckregexs']):
self.model.insertRow(row,[QStandardItem(regex)])
button=QPushButton(self)
button.setText(_TR('添加行'))
def clicked1():
globalconfig['embedded']['safecheckregexs'].insert(0,'')
self.model.insertRow(0,[QStandardItem()])
button.clicked.connect(clicked1)
button2=QPushButton(self)
button2.setText(_TR('删除选中行'))
def clicked2():
self.model.removeRow(table.currentIndex().row())
globalconfig['embedded']['safecheckregexs'].pop(table.currentIndex().row())
button2.clicked.connect(clicked2)
self.button=button
formLayout.addWidget(table)
formLayout.addWidget(button)
formLayout.addWidget(button2)
self.resize(QSize(600,400))
self.show()
def closeEvent(self,_) -> None:
self.button.setFocus()
rows=self.model.rowCount()
rowoffset=0
dedump=set()
for row in range(rows):
regex=self.model.item(row,0).text()
if regex=="" or regex in dedump:
globalconfig['embedded']['safecheckregexs'].pop(row-rowoffset)
rowoffset+=1
continue
globalconfig['embedded']['safecheckregexs'][row-rowoffset]=regex
dedump.add(regex)
def gethookembedgrid(self) :
self.gamefont_comboBox = QFontComboBox( )
def callback(x):
@ -149,7 +202,9 @@ def gethookembedgrid(self) :
[('内嵌的翻译器',5),'',(getsimplecombobox(_TRL([globalconfig['fanyi'][x]['name'] for x in globalconfig['fanyi']]),globalconfig['embedded'],'translator'),5) ],
[('将汉字转换成繁体/日式汉字',5),(getsimpleswitch( globalconfig['embedded'] ,'trans_kanji'),1) ],
[('在重叠显示的字间插入空格',5),'',(getsimplecombobox(_TRL(['不插入空格','每个字后插入空格','仅在无法编码的字后插入']),globalconfig['embedded'],'insertspace_policy',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),5) ],
[('修改游戏字体',5),(getsimpleswitch( globalconfig['embedded'] ,'changefont',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),1), (self.gamefont_comboBox,5) ],
[('修改游戏字体',5),(getsimpleswitch( globalconfig['embedded'] ,'changefont',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),1), (self.gamefont_comboBox,5)],
[],
[('内嵌安全性检查',5),getcolorbutton(globalconfig,'',callback=lambda x:safeembedcheckdialog(self),icon='fa.gear',constcolor="#FF69B4")]
#[('修改字体字符集',5),(getsimpleswitch( globalconfig['embedded'] ,'changecharset',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),1) ,(getsimplecombobox(_TRL(static_data["charsetmapshow"]),globalconfig['embedded'],'changecharset_charset',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),5)],
]

View File

@ -29,7 +29,7 @@ from gui.usefulwidget import resizableframeless
from gui.dialog_savedgame import browserdialog
class QUnFrameWindow(resizableframeless):
displayres=pyqtSignal(dict)
displayraw1=pyqtSignal(list, str,str,bool)
displayraw1=pyqtSignal(dict)
displaystatus=pyqtSignal(str,str,bool,bool)
showhideuisignal=pyqtSignal()
hookfollowsignal=pyqtSignal(int,tuple)
@ -71,12 +71,12 @@ class QUnFrameWindow(resizableframeless):
pass
self.move(self.pos().x()+ other[0],self.pos().y()+ other[1])
def showres(self,kwargs):#name,color,res,onlyshowhist,iter_context):
def showres(self,kwargs):#name,color,res,onlytrans,iter_context):
try:
name=kwargs.get('name','')
color=kwargs.get('color')
res=kwargs.get('res')
onlyshowhist=kwargs.get('onlyshowhist')
onlytrans=kwargs.get('onlytrans')
iter_context=kwargs.get('iter_context',None)
if iter_context:
@ -87,8 +87,8 @@ class QUnFrameWindow(resizableframeless):
else:
gobject.baseobject.transhis.getnewtranssignal.emit(name,res)
if onlyshowhist:
return
if onlytrans:
return
clear=name==''
if len(res)>globalconfig['maxoriginlength']:
_res=res[:globalconfig['maxoriginlength']]+'……'
@ -103,15 +103,20 @@ class QUnFrameWindow(resizableframeless):
except:
print_exc()
def showraw(self,hira,res,color ,onlyshowhist):
def showraw(self,kwargs):#hira,res,color,onlytrans):
hira=kwargs.get('hira')
text=kwargs.get('text')
color=kwargs.get('color')
onlytrans=kwargs.get('onlytrans')
clear=True
gobject.baseobject.transhis.getnewsentencesignal.emit(res)
if onlyshowhist:
gobject.baseobject.transhis.getnewsentencesignal.emit(text)
if onlytrans:
return
if len(res)>globalconfig['maxoriginlength']:
_res=res[:globalconfig['maxoriginlength']]+'……'
if len(text)>globalconfig['maxoriginlength']:
_res=text[:globalconfig['maxoriginlength']]+'……'
else:
_res=res
_res=text
if globalconfig['isshowhira'] and globalconfig['isshowrawtext']:
self.showline(clear=clear,text=_res,hira=hira,color=color)
elif globalconfig['isshowrawtext']:
@ -119,7 +124,7 @@ class QUnFrameWindow(resizableframeless):
else:
self.showline(clear=clear)
gobject.baseobject.edittextui.getnewsentencesignal.emit(res)
gobject.baseobject.edittextui.getnewsentencesignal.emit(text)
def showstatus(self,res,color,clear,origin):
self.showline(clear=clear,text=res,color=color,origin=origin)
def showline (self,**kwargs):# clear,res,color ,type_=1,origin=True):

View File

@ -3,7 +3,7 @@ from queue import Queue
import re ,os
import time ,gobject
from collections import OrderedDict
import ctypes,functools
import codecs,functools
import windows,subprocess
from myutils.config import globalconfig ,savehook_new_data ,_TR,static_data
from textsource.textsourcebase import basetext
@ -201,8 +201,19 @@ class texthook(basetext ):
def newhookinsert(self,addr,hcode):
for _hc,_addr,_ctx1,_ctx2 in savehook_new_data[self.pname]['embedablehook']:
if hcode==_hc:
self.useembed(addr,_ctx1,_ctx2,True)
def getembedtext(self,text,tp):
self.useembed(addr,_ctx1,_ctx2,True)
def safeembedcheck(self,text):
try:
for regex in (globalconfig['embedded']['safecheckregexs']):
if re.match(codecs.escape_decode(bytes(regex,"utf-8"))[0].decode("utf-8"),text):
return False
return True
except:
return False
def getembedtext(self,text,tp):
if self.safeembedcheck(text)==False:
self.embedcallback(text,text)
return
if globalconfig['autorun']==False:
self.embedcallback(text,text)
return

View File

@ -76,7 +76,11 @@ class basetrans(commonbase):
self.multiapikeycurrentidx=-1
self.queue=Queue()
self.sqlqueue=None
self._safe_private_init()
try:
self._private_init()
except Exception as e:
gobject.baseobject.textgetmethod('<msg_error_not_refresh>'+globalconfig['fanyi'][self.typename]['name']+' inittranslator failed : '+str(stringfyerror(e)))
print_exc()
self.lastrequesttime=0
self.requestid=0
@ -96,18 +100,14 @@ class basetrans(commonbase):
self.sqlqueue=Queue()
Thread(target= self._sqlitethread).start()
Thread(target=self._fythread).start()
def _safe_private_init(self):
try:
self._private_init()
except Exception as e:
gobject.baseobject.textgetmethod('<msg_error_not_refresh>'+globalconfig['fanyi'][self.typename]['name']+' inittranslator failed : '+str(stringfyerror(e)))
print_exc()
def notifyqueuforend(self):
if self.sqlqueue:
self.sqlqueue.put(None)
self.queue.put(None)
def _private_init(self):
self.initok=False
self.inittranslator()
self.initok=True
def _sqlitethread(self):
while self.using:
task=self.sqlqueue.get()
@ -252,11 +252,15 @@ class basetrans(commonbase):
checktutukufunction=lambda:( (embedcallback is not None) or self.queue.empty()) and self.using
if checktutukufunction():
def reinitandtrans():
if self.needreinit:
if self.needreinit or self.initok==False:
self.needreinit=False
self.renewsesion()
self._private_init()
try:
self._private_init()
except Exception as e:
raise Exception('inittranslator failed : '+str(stringfyerror(e)))
return self.maybecachetranslate(contentraw,contentsolved,hira,is_auto_run)
res=timeoutfunction(reinitandtrans,checktutukufunction=checktutukufunction )
collectiterres=[]
def __callback(_,is_iter_res):

View File

@ -17,6 +17,10 @@
"direct_filterrepeat":false,
"allow_set_text_name":false,
"embedded": {
"safecheckregexs": [
"(.*?)\\{(.*?)\\}(.*?)",
"(.*?)\\[(.*?)\\](.*?)"
],
"translator": 0,
"as_fast_as_posible": true,
"timeout_translate": 2,

View File

@ -715,5 +715,18 @@
"命令行启动": "بدء تشغيل سطر الأوامر",
"文本相似度阈值": "نص التشابه العتبة",
"正则": "الكنسي",
"流式输出": "تدفق الانتاج"
"流式输出": "تدفق الانتاج",
"内嵌安全性检查": "جزءا لا يتجزأ من فحص السلامة",
"正则匹配": "مطابقة العادية",
"TGW懒人包": "TGW الكسول حقيبة",
"TGW懒人包1": "TGW الكسول حزمة 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "واجهة المعهد عنوان http://127.0.0.1:5000/ و",
"利用上文信息翻译": "استخدام المعلومات الواردة أعلاه في الترجمة",
"附带上下文个数(必须打开利用上文翻译)": "مع عدد من السياقات ( يجب فتح باستخدام الترجمة أعلاه )",
"prompt(系统人设)": "Prompt ( النظام )",
"prompt(文本起始)": "Prompt ( بداية النص )",
"prompt(不懂可以不写)": "prompt ( لا يمكن أن نفهم لا تكتب )",
"stop(自定义停止符,多个用逗号隔开)": "توقف ( عادة توقف ، مفصولة بفواصل متعددة )",
"tokens(单次生成上限)": "الرموز ( واحد توليد الحد الأعلى )",
"template(需要按照模型模板选择)": "template ( تحتاج إلى اختيار وفقا لنموذج القالب )"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "命令列啟動",
"文本相似度阈值": "文字相似度閾值",
"正则": "正則",
"流式输出": "流式輸出"
"流式输出": "流式輸出",
"内嵌安全性检查": "內嵌安全性檢查",
"正则匹配": "正則匹配",
"TGW懒人包": "TGW懶人包",
"TGW懒人包1": "TGW懶人包1",
"API接口地址(默认为http://127.0.0.1:5000/)": "API介面地址默認為 http://127.0.0.1:5000/ ",
"利用上文信息翻译": "利用上文資訊翻譯",
"附带上下文个数(必须打开利用上文翻译)": "附帶上下文個數(必須打開利用上文翻譯)",
"prompt(系统人设)": "prompt系統人設",
"prompt(文本起始)": "prompt文字起始",
"prompt(不懂可以不写)": "prompt不懂可以不寫",
"stop(自定义停止符,多个用逗号隔开)": "stop自定義停止符多個用逗號隔開",
"tokens(单次生成上限)": "tokens單次生成上限",
"template(需要按照模型模板选择)": "template需要按照模型範本選擇"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Command line startup",
"文本相似度阈值": "Text similarity threshold",
"正则": "Regular",
"流式输出": "Streaming output"
"流式输出": "Streaming output",
"内嵌安全性检查": "Embedded security check",
"正则匹配": "Regular matching",
"TGW懒人包": "TGW Lazy Bag",
"TGW懒人包1": "TGW Lazy Bag 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "API interface address (default to http://127.0.0.1:5000/ ",
"利用上文信息翻译": "Translate using the information from the previous text",
"附带上下文个数(必须打开利用上文翻译)": "Number of accompanying contexts (must be opened and translated using the previous text)",
"prompt(系统人设)": "Prompt (system persona)",
"prompt(文本起始)": "Prompt (start of text)",
"prompt(不懂可以不写)": "Prompt (can be omitted if not understood)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (custom stop character, multiple separated by commas)",
"tokens(单次生成上限)": "Tokens (upper limit of single generation)",
"template(需要按照模型模板选择)": "Template (needs to be selected according to the model template)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Se inicia la línea de órdenes",
"文本相似度阈值": "Umbral de similitud de texto",
"正则": "Regular",
"流式输出": "Salida de flujo"
"流式输出": "Salida de flujo",
"内嵌安全性检查": "Inspección de Seguridad incorporada",
"正则匹配": "Coincidencia regular",
"TGW懒人包": "Bolsa perezosa tgw",
"TGW懒人包1": "Paquete perezoso tgw 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Dirección de la interfaz API (por defecto http://127.0.0.1:5000/ (...)",
"利用上文信息翻译": "Traducción utilizando la información anterior",
"附带上下文个数(必须打开利用上文翻译)": "Número de contextos adjuntos (debe abrirse para usar la traducción anterior)",
"prompt(系统人设)": "Prompt (configuración humana del sistema)",
"prompt(文本起始)": "Prompt (inicio del texto)",
"prompt(不懂可以不写)": "Prompt (no se puede escribir si no se entiende)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (stop personalizado, varios separados por comas)",
"tokens(单次生成上限)": "Tokens (límite superior de generación única)",
"template(需要按照模型模板选择)": "Plantilla (se debe seleccionar de acuerdo con la plantilla del modelo)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Démarrage de la ligne de commande",
"文本相似度阈值": "Seuil de similarité du texte",
"正则": "Régulière",
"流式输出": "Sortie de flux"
"流式输出": "Sortie de flux",
"内嵌安全性检查": "Inspection de sécurité intégrée",
"正则匹配": "Match régulier",
"TGW懒人包": "Tgw sac pour paresseux",
"TGW懒人包1": "Tgw sac paresseux 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Adresse de l'interface API (par défaut http://127.0.0.1:5000/ ) et",
"利用上文信息翻译": "Traduire avec les informations ci - dessus",
"附带上下文个数(必须打开利用上文翻译)": "Livré avec le nombre de contextes (doit être ouvert pour tirer parti de la traduction ci - dessus)",
"prompt(系统人设)": "Prompt (configuration du système)",
"prompt(文本起始)": "Prompt (début du texte)",
"prompt(不懂可以不写)": "Prompt (ne sait pas écrire)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (STOP personnalisé, plusieurs séparés par des virgules)",
"tokens(单次生成上限)": "Tokens (limite supérieure de génération unique)",
"template(需要按照模型模板选择)": "Template (doit être choisi selon le modèle de modèle)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Avvio della riga di comando",
"文本相似度阈值": "Soglia di somiglianza del testo",
"正则": "regolare",
"流式输出": "Uscita in streaming"
"流式输出": "Uscita in streaming",
"内嵌安全性检查": "Controllo di sicurezza integrato",
"正则匹配": "Corrispondenza regolare",
"TGW懒人包": "TGW Lazy Bag",
"TGW懒人包1": "TGW Lazy Bag 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Indirizzo interfaccia API (default to http://127.0.0.1:5000/ ",
"利用上文信息翻译": "Traduci usando le informazioni del testo precedente",
"附带上下文个数(必须打开利用上文翻译)": "Numero di contesti di accompagnamento (devono essere aperti e tradotti utilizzando il testo precedente)",
"prompt(系统人设)": "Prompt (persona di sistema)",
"prompt(文本起始)": "Richiesta (inizio del testo)",
"prompt(不懂可以不写)": "Prompt (può essere omesso se non compreso)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (carattere di arresto personalizzato, multipli separati da virgole)",
"tokens(单次生成上限)": "Token (limite superiore di singola generazione)",
"template(需要按照模型模板选择)": "Modello (deve essere selezionato in base al modello)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "コマンドライン起動",
"文本相似度阈值": "テキスト類似度しきい値",
"正则": "正則",
"流式输出": "ストリーム出力"
"流式输出": "ストリーム出力",
"内嵌安全性检查": "インラインセキュリティチェック",
"正则匹配": "正規一致",
"TGW懒人包": "TGW怠け者バッグ",
"TGW懒人包1": "TGW怠け者バッグ1",
"API接口地址(默认为http://127.0.0.1:5000/)": "APIインタフェースアドレスデフォルトはhttp://127.0.0.1:5000/)",
"利用上文信息翻译": "上記の情報翻訳を利用する",
"附带上下文个数(必须打开利用上文翻译)": "付帯コンテキスト数(上記の翻訳を使用するにはオンにする必要があります)",
"prompt(系统人设)": "promptシステムキャラクタセット",
"prompt(文本起始)": "promptテキスト開始",
"prompt(不懂可以不写)": "prompt分からなくても書かなくてもいい",
"stop(自定义停止符,多个用逗号隔开)": "stopコンマで区切られたカスタム停止子",
"tokens(单次生成上限)": "tokens単回生成上限",
"template(需要按照模型模板选择)": "templateモデルテンプレートに従って選択する必要がある"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "명령줄 시작",
"文本相似度阈值": "텍스트 유사도 임계값",
"正则": "정규",
"流式输出": "스트리밍 출력"
"流式输出": "스트리밍 출력",
"内嵌安全性检查": "내장 보안 검사",
"正则匹配": "정규 일치",
"TGW懒人包": "TGW 게으름뱅이 가방",
"TGW懒人包1": "TGW 게으름뱅이 가방 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "API 인터페이스 주소(기본값)http://127.0.0.1:5000/)",
"利用上文信息翻译": "위의 정보를 이용하여 번역하다.",
"附带上下文个数(必须打开利用上文翻译)": "첨부된 컨텍스트 개수 (위의 번역을 사용하려면 열어야 함)",
"prompt(系统人设)": "prompt(시스템 설정)",
"prompt(文本起始)": "prompt(텍스트 시작)",
"prompt(不懂可以不写)": "prompt(모르면 쓰지 않아도 됨)",
"stop(自定义停止符,多个用逗号隔开)": "stop (사용자 정의 정지자, 쉼표로 구분된 여러 개)",
"tokens(单次生成上限)": "tokens(단일 생성 상한)",
"template(需要按照模型模板选择)": "template(모델 템플릿별로 선택 필요)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Uruchamianie wiersza poleceń",
"文本相似度阈值": "Próg podobieństwa tekstu",
"正则": "regularne",
"流式输出": "Wyjście strumieniowe"
"流式输出": "Wyjście strumieniowe",
"内嵌安全性检查": "Wbudowana kontrola bezpieczeństwa",
"正则匹配": "Regularne dopasowanie",
"TGW懒人包": "TGW Lazy Bag",
"TGW懒人包1": "TGW Lazy Bag 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Adres interfejsu API (domyślnie http://127.0.0.1:5000/ ",
"利用上文信息翻译": "Przetłumacz za pomocą informacji z poprzedniego tekstu",
"附带上下文个数(必须打开利用上文翻译)": "Liczba kontekstów towarzyszących (należy otworzyć i przetłumaczyć za pomocą poprzedniego tekstu)",
"prompt(系统人设)": "Zapytanie (osoba systemowa)",
"prompt(文本起始)": "Pytanie (początek tekstu)",
"prompt(不懂可以不写)": "Zapytanie (może być pominięte, jeśli nie jest zrozumiane)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (niestandardowy znak stop, wielokrotnie oddzielony przecinkami)",
"tokens(单次生成上限)": "Tokeny (górna granica pojedynczej generacji)",
"template(需要按照模型模板选择)": "Szablon (należy wybrać według szablonu modelu)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Запуск командной строки",
"文本相似度阈值": "Порог сходства текста",
"正则": "Регулярно",
"流式输出": "Поточный вывод"
"流式输出": "Поточный вывод",
"内嵌安全性检查": "Проверка встроенной безопасности",
"正则匹配": "Регулярное согласование",
"TGW懒人包": "ТГВ сумка лентяй",
"TGW懒人包1": "TGW Ленивый мешок 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Адрес интерфейса API (по умолчанию http://127.0.0.1:5000/ )",
"利用上文信息翻译": "Перевод с использованием вышеуказанной информации",
"附带上下文个数(必须打开利用上文翻译)": "Количество дополнительных контекстных единиц (необходимо открыть с использованием перевода выше)",
"prompt(系统人设)": "prompt (Системный человек)",
"prompt(文本起始)": "prompt (Начало текста)",
"prompt(不懂可以不写)": "PROMPT (Не умеешь писать)",
"stop(自定义停止符,多个用逗号隔开)": "Стоп (настраиваемый стоп - символ, несколько разделены запятыми)",
"tokens(单次生成上限)": "Токены (верхний предел однократной генерации)",
"template(需要按照模型模板选择)": "Template (необходимо выбрать по шаблону модели)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "เริ่มบรรทัดคำสั่ง",
"文本相似度阈值": "เกณฑ์ความคล้ายคลึงกันของข้อความ",
"正则": "กฎทั่วไป",
"流式输出": "สตรีมเอาท์พุท"
"流式输出": "สตรีมเอาท์พุท",
"内嵌安全性检查": "การตรวจสอบความปลอดภัยแบบอินไลน์",
"正则匹配": "จับคู่ปกติ",
"TGW懒人包": "กระเป๋า TGW Lazy",
"TGW懒人包1": "แพ็คเกจ TGW Lazy 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "ที่อยู่อินเทอร์เฟซ API (ค่าเริ่มต้นคือ http://127.0.0.1:5000/ )",
"利用上文信息翻译": "ใช้การแปลข้อมูลข้างต้น",
"附带上下文个数(必须打开利用上文翻译)": "มาพร้อมกับจำนวนรายการบริบท (ต้องเปิดเพื่อใช้ประโยชน์จากการแปลข้างต้น)",
"prompt(系统人设)": "prompt (ระบบมนุษย์)",
"prompt(文本起始)": "prompt (เริ่มต้นข้อความ)",
"prompt(不懂可以不写)": "prompt (ไม่เข้าใจสามารถเขียน)",
"stop(自定义停止符,多个用逗号隔开)": "หยุด (ตัวหยุดแบบกำหนดเองหลายตัวคั่นด้วยเครื่องหมายจุลภาค)",
"tokens(单次生成上限)": "โทเคนส์ (ขีดจำกัดการสร้างเพียงครั้งเดียว)",
"template(需要按照模型模板选择)": "เทมเพลต (ต้องเลือกตามแม่แบบรุ่น)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Komut satırı başlatma",
"文本相似度阈值": "Metin benzerliği eşiği",
"正则": "normal",
"流式输出": "Aktarma çıkışı"
"流式输出": "Aktarma çıkışı",
"内嵌安全性检查": "İçeri giriş güvenlik kontrolü",
"正则匹配": "Normal eşleşme",
"TGW懒人包": "TGW Lazy Bag",
"TGW懒人包1": "TGW Lazy Bag 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "API arayüz adresi (öntanımlı olarak) http://127.0.0.1:5000/ - Evet.",
"利用上文信息翻译": "Önceki metinden bilgi kullanarak çevirin",
"附带上下文个数(必须打开利用上文翻译)": "İlerleyen anlaşmalar sayısı (önceki metin kullanarak açılıp çevirilmeli olmalı)",
"prompt(系统人设)": "Soru (sistem kişisi)",
"prompt(文本起始)": "Soru (metin başlaması)",
"prompt(不懂可以不写)": "Soru (anlamazsa terk edilebilir)",
"stop(自定义停止符,多个用逗号隔开)": "Dur (özel durma karakteri, komuta ile birçok ayrı)",
"tokens(单次生成上限)": "Tokenler (tek nesilin üst sınırı)",
"template(需要按照模型模板选择)": "Şablon (model şablona göre seçilmeli)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Запуск командного рядка",
"文本相似度阈值": "Праг подібності до тексту",
"正则": "звичайний",
"流式输出": "Вивід потоку"
"流式输出": "Вивід потоку",
"内嵌安全性检查": "Вбудована перевірка безпеки",
"正则匹配": "Регулярне збігання",
"TGW懒人包": "TGW Lazy Bag",
"TGW懒人包1": "TGW Lazy Bag 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Адреса інтерфейсу API (типова для http://127.0.0.1:5000/ 65289;",
"利用上文信息翻译": "Переклад за допомогою інформації з попереднього тексту",
"附带上下文个数(必须打开利用上文翻译)": "Кількість приєднаних контекстів (слід відкрити і перекладати за допомогою попереднього тексту)",
"prompt(系统人设)": "Запит (системна особистість)",
"prompt(文本起始)": "Запитати (початок тексту)",
"prompt(不懂可以不写)": "Запитати (можна пропустити, якщо не розуміється)",
"stop(自定义停止符,多个用逗号隔开)": "Зупинити (нетиповий символ зупинки, декілька відокремлених комами)",
"tokens(单次生成上限)": "Токени (верхня межа одного покоління)",
"template(需要按照模型模板选择)": "Шаблон (потрібно вибрати за допомогою шаблону моделі)"
}

View File

@ -715,5 +715,18 @@
"命令行启动": "Chạy dòng lệnh",
"文本相似度阈值": "Ngưỡng tương tự văn bản",
"正则": "Chính quy",
"流式输出": "Đầu ra dòng"
"流式输出": "Đầu ra dòng",
"内嵌安全性检查": "Kiểm tra an ninh nội tuyến",
"正则匹配": "Khớp chính quy",
"TGW懒人包": "Túi xách lười TGW",
"TGW懒人包1": "Túi xách lười TGW 1",
"API接口地址(默认为http://127.0.0.1:5000/)": "Địa chỉ giao diện API (mặc định là http://127.0.0.1:5000/ )",
"利用上文信息翻译": "Sử dụng thông tin trên để dịch",
"附带上下文个数(必须打开利用上文翻译)": "Kèm theo số ngữ cảnh (phải được mở để sử dụng bản dịch ở trên)",
"prompt(系统人设)": "Prompt (hệ thống)",
"prompt(文本起始)": "Prompt (văn bản bắt đầu)",
"prompt(不懂可以不写)": "Prompt (không hiểu có thể viết)",
"stop(自定义停止符,多个用逗号隔开)": "Stop (dừng tùy chỉnh, nhiều ngăn cách bằng dấu phẩy)",
"tokens(单次生成上限)": "Tokens (Giới hạn phát sinh một lần)",
"template(需要按照模型模板选择)": "REFERENCES [Tên bảng tham chiếu] ("
}

View File

@ -715,5 +715,18 @@
"命令行启动": "",
"文本相似度阈值": "",
"正则": "",
"流式输出": ""
"流式输出": "",
"内嵌安全性检查": "",
"正则匹配": "",
"TGW懒人包": "",
"TGW懒人包1": "",
"API接口地址(默认为http://127.0.0.1:5000/)": "",
"利用上文信息翻译": "",
"附带上下文个数(必须打开利用上文翻译)": "",
"prompt(系统人设)": "",
"prompt(文本起始)": "",
"prompt(不懂可以不写)": "",
"stop(自定义停止符,多个用逗号隔开)": "",
"tokens(单次生成上限)": "",
"template(需要按照模型模板选择)": ""
}

View File

@ -1,6 +1,6 @@
import sys,time
sys.path.append('./LunaTranslator')
from translator.baidu import TS
from translator.baidu_ai import TS
class TS1(TS):
@property