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

View File

@ -1,15 +1,15 @@
import functools,os,shutil 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 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 gui.settingpage_ocr import getocrgrid
from myutils.config import globalconfig ,_TR,_TRL ,savehook_new_data from myutils.config import globalconfig ,_TR,_TRL
from myutils.hwnd import getpidexe
from gui.dialog_savedgame import dialog_savedgame from gui.dialog_savedgame import dialog_savedgame
import threading,gobject,requests,datetime,zipfile import threading,gobject,requests,datetime,zipfile
from gui.inputdialog import autoinitdialog 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 gui.codeacceptdialog import codeacceptdialog
from textsource.fridahook import fridahook from textsource.fridahook import fridahook
from myutils.utils import loadfridascriptslist,checkifnewgame,makehtml from myutils.utils import loadfridascriptslist,checkifnewgame,makehtml
@ -130,6 +130,59 @@ def getfridahookgrid(self) :
return grids 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) : def gethookembedgrid(self) :
self.gamefont_comboBox = QFontComboBox( ) self.gamefont_comboBox = QFontComboBox( )
def callback(x): 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),'',(getsimplecombobox(_TRL([globalconfig['fanyi'][x]['name'] for x in globalconfig['fanyi']]),globalconfig['embedded'],'translator'),5) ],
[('将汉字转换成繁体/日式汉字',5),(getsimpleswitch( globalconfig['embedded'] ,'trans_kanji'),1) ], [('将汉字转换成繁体/日式汉字',5),(getsimpleswitch( globalconfig['embedded'] ,'trans_kanji'),1) ],
[('在重叠显示的字间插入空格',5),'',(getsimplecombobox(_TRL(['不插入空格','每个字后插入空格','仅在无法编码的字后插入']),globalconfig['embedded'],'insertspace_policy',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),5) ], [('在重叠显示的字间插入空格',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)], #[('修改字体字符集',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 from gui.dialog_savedgame import browserdialog
class QUnFrameWindow(resizableframeless): class QUnFrameWindow(resizableframeless):
displayres=pyqtSignal(dict) displayres=pyqtSignal(dict)
displayraw1=pyqtSignal(list, str,str,bool) displayraw1=pyqtSignal(dict)
displaystatus=pyqtSignal(str,str,bool,bool) displaystatus=pyqtSignal(str,str,bool,bool)
showhideuisignal=pyqtSignal() showhideuisignal=pyqtSignal()
hookfollowsignal=pyqtSignal(int,tuple) hookfollowsignal=pyqtSignal(int,tuple)
@ -71,12 +71,12 @@ class QUnFrameWindow(resizableframeless):
pass pass
self.move(self.pos().x()+ other[0],self.pos().y()+ other[1]) 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: try:
name=kwargs.get('name','') name=kwargs.get('name','')
color=kwargs.get('color') color=kwargs.get('color')
res=kwargs.get('res') res=kwargs.get('res')
onlyshowhist=kwargs.get('onlyshowhist') onlytrans=kwargs.get('onlytrans')
iter_context=kwargs.get('iter_context',None) iter_context=kwargs.get('iter_context',None)
if iter_context: if iter_context:
@ -87,8 +87,8 @@ class QUnFrameWindow(resizableframeless):
else: else:
gobject.baseobject.transhis.getnewtranssignal.emit(name,res) gobject.baseobject.transhis.getnewtranssignal.emit(name,res)
if onlyshowhist: if onlytrans:
return return
clear=name=='' clear=name==''
if len(res)>globalconfig['maxoriginlength']: if len(res)>globalconfig['maxoriginlength']:
_res=res[:globalconfig['maxoriginlength']]+'……' _res=res[:globalconfig['maxoriginlength']]+'……'
@ -103,15 +103,20 @@ class QUnFrameWindow(resizableframeless):
except: except:
print_exc() 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 clear=True
gobject.baseobject.transhis.getnewsentencesignal.emit(res) gobject.baseobject.transhis.getnewsentencesignal.emit(text)
if onlyshowhist: if onlytrans:
return return
if len(res)>globalconfig['maxoriginlength']: if len(text)>globalconfig['maxoriginlength']:
_res=res[:globalconfig['maxoriginlength']]+'……' _res=text[:globalconfig['maxoriginlength']]+'……'
else: else:
_res=res _res=text
if globalconfig['isshowhira'] and globalconfig['isshowrawtext']: if globalconfig['isshowhira'] and globalconfig['isshowrawtext']:
self.showline(clear=clear,text=_res,hira=hira,color=color) self.showline(clear=clear,text=_res,hira=hira,color=color)
elif globalconfig['isshowrawtext']: elif globalconfig['isshowrawtext']:
@ -119,7 +124,7 @@ class QUnFrameWindow(resizableframeless):
else: else:
self.showline(clear=clear) self.showline(clear=clear)
gobject.baseobject.edittextui.getnewsentencesignal.emit(res) gobject.baseobject.edittextui.getnewsentencesignal.emit(text)
def showstatus(self,res,color,clear,origin): def showstatus(self,res,color,clear,origin):
self.showline(clear=clear,text=res,color=color,origin=origin) self.showline(clear=clear,text=res,color=color,origin=origin)
def showline (self,**kwargs):# clear,res,color ,type_=1,origin=True): 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 re ,os
import time ,gobject import time ,gobject
from collections import OrderedDict from collections import OrderedDict
import ctypes,functools import codecs,functools
import windows,subprocess import windows,subprocess
from myutils.config import globalconfig ,savehook_new_data ,_TR,static_data from myutils.config import globalconfig ,savehook_new_data ,_TR,static_data
from textsource.textsourcebase import basetext from textsource.textsourcebase import basetext
@ -201,8 +201,19 @@ class texthook(basetext ):
def newhookinsert(self,addr,hcode): def newhookinsert(self,addr,hcode):
for _hc,_addr,_ctx1,_ctx2 in savehook_new_data[self.pname]['embedablehook']: for _hc,_addr,_ctx1,_ctx2 in savehook_new_data[self.pname]['embedablehook']:
if hcode==_hc: if hcode==_hc:
self.useembed(addr,_ctx1,_ctx2,True) self.useembed(addr,_ctx1,_ctx2,True)
def getembedtext(self,text,tp): 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: if globalconfig['autorun']==False:
self.embedcallback(text,text) self.embedcallback(text,text)
return return

View File

@ -76,7 +76,11 @@ class basetrans(commonbase):
self.multiapikeycurrentidx=-1 self.multiapikeycurrentidx=-1
self.queue=Queue() self.queue=Queue()
self.sqlqueue=None 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.lastrequesttime=0
self.requestid=0 self.requestid=0
@ -96,18 +100,14 @@ class basetrans(commonbase):
self.sqlqueue=Queue() self.sqlqueue=Queue()
Thread(target= self._sqlitethread).start() Thread(target= self._sqlitethread).start()
Thread(target=self._fythread).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): def notifyqueuforend(self):
if self.sqlqueue: if self.sqlqueue:
self.sqlqueue.put(None) self.sqlqueue.put(None)
self.queue.put(None) self.queue.put(None)
def _private_init(self): def _private_init(self):
self.initok=False
self.inittranslator() self.inittranslator()
self.initok=True
def _sqlitethread(self): def _sqlitethread(self):
while self.using: while self.using:
task=self.sqlqueue.get() task=self.sqlqueue.get()
@ -252,11 +252,15 @@ class basetrans(commonbase):
checktutukufunction=lambda:( (embedcallback is not None) or self.queue.empty()) and self.using checktutukufunction=lambda:( (embedcallback is not None) or self.queue.empty()) and self.using
if checktutukufunction(): if checktutukufunction():
def reinitandtrans(): def reinitandtrans():
if self.needreinit: if self.needreinit or self.initok==False:
self.needreinit=False self.needreinit=False
self.renewsesion() 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) return self.maybecachetranslate(contentraw,contentsolved,hira,is_auto_run)
res=timeoutfunction(reinitandtrans,checktutukufunction=checktutukufunction ) res=timeoutfunction(reinitandtrans,checktutukufunction=checktutukufunction )
collectiterres=[] collectiterres=[]
def __callback(_,is_iter_res): def __callback(_,is_iter_res):

View File

@ -17,6 +17,10 @@
"direct_filterrepeat":false, "direct_filterrepeat":false,
"allow_set_text_name":false, "allow_set_text_name":false,
"embedded": { "embedded": {
"safecheckregexs": [
"(.*?)\\{(.*?)\\}(.*?)",
"(.*?)\\[(.*?)\\](.*?)"
],
"translator": 0, "translator": 0,
"as_fast_as_posible": true, "as_fast_as_posible": true,
"timeout_translate": 2, "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", "命令行启动": "Command line startup",
"文本相似度阈值": "Text similarity threshold", "文本相似度阈值": "Text similarity threshold",
"正则": "Regular", "正则": "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", "命令行启动": "Se inicia la línea de órdenes",
"文本相似度阈值": "Umbral de similitud de texto", "文本相似度阈值": "Umbral de similitud de texto",
"正则": "Regular", "正则": "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", "命令行启动": "Démarrage de la ligne de commande",
"文本相似度阈值": "Seuil de similarité du texte", "文本相似度阈值": "Seuil de similarité du texte",
"正则": "Régulière", "正则": "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", "命令行启动": "Avvio della riga di comando",
"文本相似度阈值": "Soglia di somiglianza del testo", "文本相似度阈值": "Soglia di somiglianza del testo",
"正则": "regolare", "正则": "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ń", "命令行启动": "Uruchamianie wiersza poleceń",
"文本相似度阈值": "Próg podobieństwa tekstu", "文本相似度阈值": "Próg podobieństwa tekstu",
"正则": "regularne", "正则": "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", "命令行启动": "Komut satırı başlatma",
"文本相似度阈值": "Metin benzerliği eşiği", "文本相似度阈值": "Metin benzerliği eşiği",
"正则": "normal", "正则": "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", "命令行启动": "Chạy dòng lệnh",
"文本相似度阈值": "Ngưỡng tương tự văn bản", "文本相似度阈值": "Ngưỡng tương tự văn bản",
"正则": "Chính quy", "正则": "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 import sys,time
sys.path.append('./LunaTranslator') sys.path.append('./LunaTranslator')
from translator.baidu import TS from translator.baidu_ai import TS
class TS1(TS): class TS1(TS):
@property @property