issues/523

This commit is contained in:
恍兮惚兮 2024-02-21 23:59:46 +08:00
parent f922532b44
commit 3e06c382f1
26 changed files with 131 additions and 93 deletions

View File

@ -16,7 +16,7 @@ class rangeadjust(Mainw) :
self.drag_label = QLabel(self) self.drag_label = QLabel(self)
self.drag_label.setGeometry(0, 0, 4000, 2000) self.drag_label.setGeometry(0, 0, 4000, 2000)
self._isTracking=False self._isTracking=False
self._rect=None
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool) self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
self.setAttribute(Qt.WA_TranslucentBackground) self.setAttribute(Qt.WA_TranslucentBackground)
@ -39,11 +39,7 @@ class rangeadjust(Mainw) :
self._endPos = None self._endPos = None
def moveEvent(self,e): def moveEvent(self,e):
rect = self.geometry() rect = self.geometry()
try: self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
if self.isVisible():
gobject.baseobject.textsource.rect=[(rect.left(),rect.top()),(rect.right(),rect.bottom())]
except:
pass
def enterEvent(self, QEvent) : def enterEvent(self, QEvent) :
self.drag_label.setStyleSheet("background-color:rgba(0,0,0, 0.1)") self.drag_label.setStyleSheet("background-color:rgba(0,0,0, 0.1)")
def leaveEvent(self, QEvent): def leaveEvent(self, QEvent):
@ -52,12 +48,10 @@ class rangeadjust(Mainw) :
self.label.setGeometry(0, 0, self.width(), self.height()) self.label.setGeometry(0, 0, self.width(), self.height())
rect = self.geometry() rect = self.geometry()
try: self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
if self.isVisible():
gobject.baseobject.textsource.rect=[(rect.left(),rect.top()),(rect.right(),rect.bottom())]
except:pass
super(rangeadjust, self).resizeEvent(a0) super(rangeadjust, self).resizeEvent(a0)
def getrect(self):
return self._rect
class rangeselct(QMainWindow) : class rangeselct(QMainWindow) :
def __init__(self, parent ) : def __init__(self, parent ) :

View File

@ -49,6 +49,7 @@ def getocrgrid(self) :
[(("图像一致性阈值"),8),(getspinbox(0,1,globalconfig,'ocr_diff_sim' ,double=True,step=0.01 ,dec=3),4),(self.threshold2label,4)], [(("图像一致性阈值"),8),(getspinbox(0,1,globalconfig,'ocr_diff_sim' ,double=True,step=0.01 ,dec=3),4),(self.threshold2label,4)],
[], [],
[(("多重区域模式"),12),getsimpleswitch(globalconfig ,'multiregion')],
[(("OCR范围框颜色"),12),(getcolorbutton(globalconfig,'ocrrangecolor',callback=lambda : selectcolor(self,globalconfig,'ocrrangecolor',self.ocrrangecolor_button,callback=lambda :gobject.baseobject.textsource.setstyle()),name='ocrrangecolor_button',parent=self),1)], [(("OCR范围框颜色"),12),(getcolorbutton(globalconfig,'ocrrangecolor',callback=lambda : selectcolor(self,globalconfig,'ocrrangecolor',self.ocrrangecolor_button,callback=lambda :gobject.baseobject.textsource.setstyle()),name='ocrrangecolor_button',parent=self),1)],
[(("OCR范围框宽度"),12),(getspinbox(1,100,globalconfig,'ocrrangewidth' ,callback=lambda x: gobject.baseobject.textsource.setstyle() ),4)], [(("OCR范围框宽度"),12),(getspinbox(1,100,globalconfig,'ocrrangewidth' ,callback=lambda x: gobject.baseobject.textsource.setstyle() ),4)],
[(("选取OCR范围后立即进行一次识别"),12),getsimpleswitch(globalconfig ,'ocrafterrangeselect')], [(("选取OCR范围后立即进行一次识别"),12),getsimpleswitch(globalconfig ,'ocrafterrangeselect')],

View File

@ -531,6 +531,7 @@ class QUnFrameWindow(resizableframeless):
rangeselct_function(self,self.afterrange,auto,auto) rangeselct_function(self,self.afterrange,auto,auto)
def afterrange(self,rect): def afterrange(self,rect):
gobject.baseobject.textsource.newrangeadjustor()
gobject.baseobject.textsource.setrect(rect) gobject.baseobject.textsource.setrect(rect)
self.showhideocrrange() self.showhideocrrange()
if globalconfig['showrangeafterrangeselect']==False: if globalconfig['showrangeafterrangeselect']==False:

View File

@ -36,7 +36,7 @@ def imagesolve(image):
elif globalconfig['ocr_presolve_method']==3: elif globalconfig['ocr_presolve_method']==3:
image2=otsu_threshold_fast(image,-1) image2=otsu_threshold_fast(image,-1)
return image2 return image2
def imageCut(hwnd,x1,y1,x2,y2): def imageCut(hwnd,x1,y1,x2,y2,viscompare=True):
screen = QApplication.primaryScreen() screen = QApplication.primaryScreen()
for _ in range(2): for _ in range(2):
@ -48,10 +48,11 @@ def imageCut(hwnd,x1,y1,x2,y2):
if rect is None: if rect is None:
continue continue
x1,y1=windows.ScreenToClient(hwnd,x1,y1)
x2,y2=windows.ScreenToClient(hwnd,x2,y2)
rate=dynamic_rate(hwnd,rect) rate=dynamic_rate(hwnd,rect)
pix = screen.grabWindow(hwnd, (x1)/rate, (y1)/rate, (x2-x1)/rate, (y2-y1)/rate) hwndrate=windows.GetDpiForWindow(hwnd)/96
x1,y1=windows.ScreenToClient(hwnd,x1*rate*hwndrate,y1*rate*hwndrate)
x2,y2=windows.ScreenToClient(hwnd,x2*rate*hwndrate,y2*rate*hwndrate)
pix = screen.grabWindow(hwnd, int(x1/rate/rate/hwndrate), int(y1/rate/rate/hwndrate), int((x2-x1)/rate/rate/hwndrate), int((y2-y1)/rate/rate/hwndrate))
if pix.toImage().allGray(): if pix.toImage().allGray():
continue continue
break break
@ -62,7 +63,8 @@ def imageCut(hwnd,x1,y1,x2,y2):
image= pix.toImage() image= pix.toImage()
image2=imagesolve(image) image2=imagesolve(image)
gobject.baseobject.showocrimage.setimage.emit([image,image2]) if viscompare:
gobject.baseobject.showocrimage.setimage.emit([image,image2])
return image2 return image2
_nowuseocr=None _nowuseocr=None

View File

@ -34,7 +34,7 @@ def _2_f(line,args):
while i<len(line): while i<len(line):
newline+=line[i] newline+=line[i]
nextn=line[i:i+guesstimes] nextn=line[i:i+guesstimes]
print(guesstimes,nextn,len(set(nextn))) #print(guesstimes,nextn,len(set(nextn)))
if len(nextn)==guesstimes and len(set(nextn))==1: if len(nextn)==guesstimes and len(set(nextn))==1:
i+=guesstimes i+=guesstimes
else: else:

View File

@ -9,6 +9,7 @@ import ctypes
import time import time
import ctypes.wintypes import ctypes.wintypes
import time import time
from myutils.hwnd import getScreenRate
from traceback import print_exc from traceback import print_exc
from myutils.config import globalconfig,static_data,savehook_new_list,savehook_new_data,getdefaultsavehook,translatorsetting from myutils.config import globalconfig,static_data,savehook_new_list,savehook_new_data,getdefaultsavehook,translatorsetting
import threading,queue import threading,queue
@ -267,7 +268,8 @@ def minmaxmoveobservefunc(self):
elif event == windows.EVENT_SYSTEM_MOVESIZEEND: # elif event == windows.EVENT_SYSTEM_MOVESIZEEND: #
if globalconfig['movefollow']: if globalconfig['movefollow']:
if self.lastpos: if self.lastpos:
self.hookfollowsignal.emit(5,(rect[0]-self.lastpos[0],rect[1]-self.lastpos[1])) rate=getScreenRate()
self.hookfollowsignal.emit(5,(int((rect[0]-self.lastpos[0])/rate),int((rect[1]-self.lastpos[1])/rate)))
except: except:
print_exc() print_exc()

View File

@ -38,102 +38,112 @@ class ocrtext(basetext):
def __init__(self) : def __init__(self) :
self.screen = QApplication.primaryScreen() self.screen = QApplication.primaryScreen()
self.savelastimg=None self.savelastimg=[]
self.savelastrecimg=None self.savelastrecimg=[]
self.savelasttext=None self.savelasttext=[]
self.lastocrtime=0 self.lastocrtime=[]
self.rect=None self.range_ui = []
self.range_ui = rangeadjust(gobject.baseobject.translation_ui)
self.timestamp=time.time() self.timestamp=time.time()
super(ocrtext,self ).__init__('0','ocr') super(ocrtext,self ).__init__('0','ocr')
def resetrect(self): def newrangeadjustor(self):
self.rect=None if len(self.range_ui)==0 or globalconfig['multiregion']:
self.range_ui.hide() self.range_ui.append(rangeadjust(gobject.baseobject.translation_ui))
self.savelastimg.append(None)
self.savelastrecimg.append(None)
self.lastocrtime.append(0)
self.savelasttext.append(None)
def moveui(self,x,y): def moveui(self,x,y):
_r=self.range_ui for _r in self.range_ui:
_r.move(_r.pos().x()+ x,_r.pos().y()+ y) _r.move(_r.pos().x()+ x,_r.pos().y()+ y)
def setrect(self,rect): def setrect(self,rect):
(x1,y1),(x2,y2)=rect (x1,y1),(x2,y2)=rect
self.rect=[(x1,y1),(x2,y2)] self.range_ui[-1].setGeometry(x1-globalconfig['ocrrangewidth'],y1-globalconfig['ocrrangewidth'],x2-x1+2*globalconfig['ocrrangewidth'],y2-y1+2*globalconfig['ocrrangewidth'])
self.range_ui.setGeometry(x1-globalconfig['ocrrangewidth'],y1-globalconfig['ocrrangewidth'],x2-x1+2*globalconfig['ocrrangewidth'],y2-y1+2*globalconfig['ocrrangewidth']) self.range_ui[-1].show()
self.range_ui.show()
def setstyle(self): def setstyle(self):
self.range_ui.setstyle() [_.setstyle() for _ in self.range_ui]
def showhiderangeui(self,b): def showhiderangeui(self,b):
self.range_ui.setVisible(b) [_.setVisible(b) for _ in self.range_ui]
def gettextthread(self ): def gettextthread(self ):
if all([_.getrect() is None for _ in self.range_ui]):
if self.rect is None: time.sleep(1)
time.sleep(1) return None
return None time.sleep(0.1)
__text=[]
time.sleep(0.1) for i,range_ui in enumerate(self.range_ui):
rect=range_ui.getrect()
#img=ImageGrab.grab((self.rect[0][0],self.rect[0][1],self.rect[1][0],self.rect[1][1])) #img=ImageGrab.grab((self.rect[0][0],self.rect[0][1],self.rect[1][0],self.rect[1][1]))
#imgr = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) #imgr = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
if self.rect is None: if rect is None:
return None continue
imgr=imageCut(self.hwnd,self.rect[0][0],self.rect[0][1],self.rect[1][0],self.rect[1][1]) imgr=imageCut(self.hwnd,rect[0][0],rect[0][1],rect[1][0],rect[1][1],i==0)
ok=True ok=True
if globalconfig['ocr_auto_method'] in [0,2]: if globalconfig['ocr_auto_method'] in [0,2]:
imgr1=qimge2np(imgr) imgr1=qimge2np(imgr)
h,w,c=imgr1.shape h,w,c=imgr1.shape
if self.savelastimg is not None and (imgr1.shape==self.savelastimg.shape) : if self.savelastimg[i] is not None and (imgr1.shape==self.savelastimg[i].shape) :
image_score=compareImage(imgr1 ,self.savelastimg ) image_score=compareImage(imgr1 ,self.savelastimg[i] )
else: else:
image_score=0 image_score=0
gobject.baseobject.settin_ui.threshold1label.setText(str(image_score)) if i==0:
self.savelastimg=imgr1 gobject.baseobject.settin_ui.threshold1label.setText(str(image_score))
self.savelastimg[i]=imgr1
if image_score>globalconfig['ocr_stable_sim'] : if image_score>globalconfig['ocr_stable_sim'] :
if self.savelastrecimg is not None and (imgr1.shape==self.savelastrecimg.shape ) : if self.savelastrecimg[i] is not None and (imgr1.shape==self.savelastrecimg[i].shape ) :
image_score2=compareImage(imgr1 ,self.savelastrecimg ) image_score2=compareImage(imgr1 ,self.savelastrecimg[i] )
else: else:
image_score2=0 image_score2=0
gobject.baseobject.settin_ui.threshold2label.setText(str(image_score2)) if i==0:
gobject.baseobject.settin_ui.threshold2label.setText(str(image_score2))
if image_score2>globalconfig['ocr_diff_sim']: if image_score2>globalconfig['ocr_diff_sim']:
ok=False ok=False
else: else:
self.savelastrecimg=imgr1 self.savelastrecimg[i]=imgr1
else: else:
ok=False ok=False
if globalconfig['ocr_auto_method'] in [1,2]: if globalconfig['ocr_auto_method'] in [1,2]:
if time.time()-self.lastocrtime>globalconfig['ocr_interval']: if time.time()-self.lastocrtime[i]>globalconfig['ocr_interval']:
ok=True ok=True
else: else:
ok=False ok=False
if ok==False: if ok==False:
return None continue
text=self.ocrtest(imgr) text=self.ocrtest(imgr)
self.lastocrtime=time.time() self.lastocrtime[i]=time.time()
if self.savelasttext is not None: if self.savelasttext[i] is not None:
sim=getEqualRate(self.savelasttext,text) sim=getEqualRate(self.savelasttext[i],text)
#print('text',sim) #print('text',sim)
if sim>0.9: if sim>0.9:
return None continue
self.savelasttext=text self.savelasttext[i]=text
return (text) __text.append(text)
return '\n'.join(__text)
def gettextonce(self): def gettextonce(self):
__text=[]
if self.rect is None: for i,range_ui in enumerate(self.range_ui):
return rect=range_ui.getrect()
if self.rect[0][0]>self.rect[1][0] or self.rect[0][1]>self.rect[1][1]: if rect is None:
return continue
img=imageCut(self.hwnd,self.rect[0][0],self.rect[0][1],self.rect[1][0],self.rect[1][1]) if rect[0][0]>rect[1][0] or rect[0][1]>rect[1][1]:
return
img=imageCut(self.hwnd,rect[0][0],rect[0][1],rect[1][0],rect[1][1])
text=self.ocrtest(img) text=self.ocrtest(img)
imgr1=qimge2np(img) imgr1=qimge2np(img)
self.savelastimg=imgr1 self.savelastimg[i]=imgr1
self.savelastrecimg=imgr1 self.savelastrecimg[i]=imgr1
self.lastocrtime=time.time() self.lastocrtime[i]=time.time()
self.savelasttext=text self.savelasttext[i]=text
return text __text.append(text)
return '\n'.join(__text)
def ocrtest(self,img): def ocrtest(self,img):
fname='./cache/ocr/{}.png'.format(self.timestamp) fname='./cache/ocr/{}.png'.format(self.timestamp)
@ -147,5 +157,4 @@ class ocrtext(basetext):
def end(self): def end(self):
super().end() super().end()
ocr_end() ocr_end()
[_.close() for _ in self.range_ui]
self.range_ui.close()

View File

@ -350,6 +350,14 @@ def SetWindowLong(hwnd,nIndex,value):
return _SetWindowLongW(hwnd,nIndex,value) return _SetWindowLongW(hwnd,nIndex,value)
def GetDC(hwnd): def GetDC(hwnd):
return _GetDC(hwnd) return _GetDC(hwnd)
def GetDpiForWindow(hwnd):
try:
_GetDpiForWindow=_user32.GetDpiForWindow
_GetDpiForWindow.argtypes=HWND,
_GetDpiForWindow.restype=UINT
return _GetDpiForWindow(hwnd)
except:
return 96
def GetCursorPos(): def GetCursorPos():
_p=POINT() _p=POINT()
_GetCursorPos(pointer(_p)) _GetCursorPos(pointer(_p))
@ -733,8 +741,8 @@ _ScreenToClient=_user32.ScreenToClient
_ScreenToClient.argtypes=c_void_p,POINTER(POINT) _ScreenToClient.argtypes=c_void_p,POINTER(POINT)
def ScreenToClient(hwnd,x,y): def ScreenToClient(hwnd,x,y):
P=POINT() P=POINT()
P.x=x P.x=int(x)
P.y=y P.y=int(y)
_ScreenToClient(hwnd,pointer(P)) _ScreenToClient(hwnd,pointer(P))
return (P.x,P.y) return (P.x,P.y)

View File

@ -96,6 +96,7 @@
500, 500,
500 500
], ],
"multiregion":false,
"textboxreadonly":true, "textboxreadonly":true,
"ocr_stable_sim": 0, "ocr_stable_sim": 0,
"ocr_diff_sim": 0.95, "ocr_diff_sim": 0.95,

View File

@ -1,5 +1,5 @@
{ {
"version":"v2.36.5", "version":"v2.37.0",
"language_list_show":["简体中文","日本語","English","Русский язык","Español","한국어","Français","繁體中文","Tiếng Việt","Türkçe","Polski","Українська Мова","Italiano","اللغة العربية","ภาษาไทย"] , "language_list_show":["简体中文","日本語","English","Русский язык","Español","한국어","Français","繁體中文","Tiếng Việt","Türkçe","Polski","Українська Мова","Italiano","اللغة العربية","ภาษาไทย"] ,
"language_list_translator":["简体中文","日文","英文","俄语","西班牙语","韩语","法语","繁体中文","越南语","土耳其语","波兰语","乌克兰语","意大利语","阿拉伯语","泰语"], "language_list_translator":["简体中文","日文","英文","俄语","西班牙语","韩语","法语","繁体中文","越南语","土耳其语","波兰语","乌克兰语","意大利语","阿拉伯语","泰语"],
"language_list_translator_inner":["zh", "ja", "en","ru","es","ko","fr","cht","vi","tr","pl","uk","it","ar","th"], "language_list_translator_inner":["zh", "ja", "en","ru","es","ko","fr","cht","vi","tr","pl","uk","it","ar","th"],

View File

@ -559,6 +559,7 @@
"TGW": { "TGW": {
"args": { "args": {
"TGW懒人包": "https://www.bilibili.com/video/BV1Te411U7me", "TGW懒人包": "https://www.bilibili.com/video/BV1Te411U7me",
"TGW懒人包1": "https://pan.baidu.com/s/1fe7iiHIAtoXW80Twsrv8Nw?pwd=pato",
"Github仓库": "https://github.com/oobabooga/text-generation-webui", "Github仓库": "https://github.com/oobabooga/text-generation-webui",
"API接口地址(默认为http://127.0.0.1:5000/)": "http://127.0.0.1:5000/", "API接口地址(默认为http://127.0.0.1:5000/)": "http://127.0.0.1:5000/",
"API超时(秒)": 30, "API超时(秒)": 30,
@ -586,6 +587,10 @@
"type":"label", "type":"label",
"islink": true "islink": true
}, },
"TGW懒人包1":{
"type":"label",
"islink": true
},
"Github仓库":{ "Github仓库":{
"type":"label", "type":"label",
"islink": true "islink": true

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "هوك looslessscaling العملية بحيث لا تخرج من التكبير", "Hook LosslessScaling进程使其不会退出缩放": "هوك looslessscaling العملية بحيث لا تخرج من التكبير",
"正在使用日语模型作为代替,可能效果不佳": "استخدام النموذج الياباني بدلا من ذلك ، قد لا تعمل بشكل جيد", "正在使用日语模型作为代替,可能效果不佳": "استخدام النموذج الياباني بدلا من ذلك ، قد لا تعمل بشكل جيد",
"保持非重复字符": "الحفاظ على الطابع غير المتكرر", "保持非重复字符": "الحفاظ على الطابع غير المتكرر",
"选择文本窗口中文本框只读": "حدد مربع النص للقراءة فقط في نافذة النص" "选择文本窗口中文本框只读": "حدد مربع النص للقراءة فقط في نافذة النص",
"多重区域模式": "وضع منطقة متعددة"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling行程使其不會退出縮放", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling行程使其不會退出縮放",
"正在使用日语模型作为代替,可能效果不佳": "正在使用日語模型作為代替,可能效果不佳", "正在使用日语模型作为代替,可能效果不佳": "正在使用日語模型作為代替,可能效果不佳",
"保持非重复字符": "保持非重複字元", "保持非重复字符": "保持非重複字元",
"选择文本窗口中文本框只读": "選擇文字視窗中文字方塊只讀" "选择文本窗口中文本框只读": "選擇文字視窗中文字方塊只讀",
"多重区域模式": "多重區域模式"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling process prevents it from exiting scaling", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling process prevents it from exiting scaling",
"正在使用日语模型作为代替,可能效果不佳": "Using Japanese models as a substitute may not be effective", "正在使用日语模型作为代替,可能效果不佳": "Using Japanese models as a substitute may not be effective",
"保持非重复字符": "Keep non repeating characters", "保持非重复字符": "Keep non repeating characters",
"选择文本窗口中文本框只读": "Select read-only text boxes in the text window" "选择文本窗口中文本框只读": "Select read-only text boxes in the text window",
"多重区域模式": "Multi region mode"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "El proceso Hook losslessscaling hace que no salga del zoom", "Hook LosslessScaling进程使其不会退出缩放": "El proceso Hook losslessscaling hace que no salga del zoom",
"正在使用日语模型作为代替,可能效果不佳": "Se está utilizando el modelo japonés como sustituto y puede que no funcione bien", "正在使用日语模型作为代替,可能效果不佳": "Se está utilizando el modelo japonés como sustituto y puede que no funcione bien",
"保持非重复字符": "Mantener caracteres no repetitivos", "保持非重复字符": "Mantener caracteres no repetitivos",
"选择文本窗口中文本框只读": "Seleccione la ventana de texto en la que el cuadro de texto es de solo lectura" "选择文本窗口中文本框只读": "Seleccione la ventana de texto en la que el cuadro de texto es de solo lectura",
"多重区域模式": "Modelo multiregional"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook losslesscaling processus pour ne pas quitter le zoom", "Hook LosslessScaling进程使其不会退出缩放": "Hook losslesscaling processus pour ne pas quitter le zoom",
"正在使用日语模型作为代替,可能效果不佳": "Le modèle japonais est utilisé à la place, peut ne pas fonctionner aussi bien", "正在使用日语模型作为代替,可能效果不佳": "Le modèle japonais est utilisé à la place, peut ne pas fonctionner aussi bien",
"保持非重复字符": "Garder les caractères non répétitifs", "保持非重复字符": "Garder les caractères non répétitifs",
"选择文本窗口中文本框只读": "Sélectionner une zone de texte en lecture seule dans la fenêtre de texte" "选择文本窗口中文本框只读": "Sélectionner une zone de texte en lecture seule dans la fenêtre de texte",
"多重区域模式": "Mode Multi - zones"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling processo impedisce di uscire dalla scalabilità", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling processo impedisce di uscire dalla scalabilità",
"正在使用日语模型作为代替,可能效果不佳": "Utilizzare modelli giapponesi come sostituto potrebbe non essere efficace", "正在使用日语模型作为代替,可能效果不佳": "Utilizzare modelli giapponesi come sostituto potrebbe non essere efficace",
"保持非重复字符": "Mantieni caratteri non ripetuti", "保持非重复字符": "Mantieni caratteri non ripetuti",
"选择文本窗口中文本框只读": "Selezionare le caselle di testo di sola lettura nella finestra di testo" "选择文本窗口中文本框只读": "Selezionare le caselle di testo di sola lettura nella finestra di testo",
"多重区域模式": "Modalità multi regione"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScalingプロセスはスケーリングを終了しないようにする", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScalingプロセスはスケーリングを終了しないようにする",
"正在使用日语模型作为代替,可能效果不佳": "代替として日本語モデルを使用していますが、効果が低いかもしれません", "正在使用日语模型作为代替,可能效果不佳": "代替として日本語モデルを使用していますが、効果が低いかもしれません",
"保持非重复字符": "非反復文字の維持", "保持非重复字符": "非反復文字の維持",
"选择文本窗口中文本框只读": "テキストウィンドウのテキストボックス読み取り専用を選択" "选择文本窗口中文本框只读": "テキストウィンドウのテキストボックス読み取り専用を選択",
"多重区域模式": "複数領域モード"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling 프로세스로 인해 줌이 종료되지 않습니다.", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling 프로세스로 인해 줌이 종료되지 않습니다.",
"正在使用日语模型作为代替,可能效果不佳": "일본어 모델을 대체하는 중입니다. 효과가 없을 수 있습니다", "正在使用日语模型作为代替,可能效果不佳": "일본어 모델을 대체하는 중입니다. 효과가 없을 수 있습니다",
"保持非重复字符": "비반복 문자 유지", "保持非重复字符": "비반복 문자 유지",
"选择文本窗口中文本框只读": "텍스트 선택 창의 텍스트 상자 읽기 전용" "选择文本窗口中文本框只读": "텍스트 선택 창의 텍스트 상자 읽기 전용",
"多重区域模式": "다중 영역 모드"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Proces Hook Losslessless Scaling zapobiega zakończeniu skalowania", "Hook LosslessScaling进程使其不会退出缩放": "Proces Hook Losslessless Scaling zapobiega zakończeniu skalowania",
"正在使用日语模型作为代替,可能效果不佳": "Używanie japońskich modeli jako substytutów może nie być skuteczne", "正在使用日语模型作为代替,可能效果不佳": "Używanie japońskich modeli jako substytutów może nie być skuteczne",
"保持非重复字符": "Zachowaj niepowtarzające się znaki", "保持非重复字符": "Zachowaj niepowtarzające się znaki",
"选择文本窗口中文本框只读": "Zaznaczanie pola tekstowe tylko do odczytu w oknie tekstowym" "选择文本窗口中文本框只读": "Zaznaczanie pola tekstowe tylko do odczytu w oknie tekstowym",
"多重区域模式": "Tryb wielu regionów"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Процесс Hook LosslessScaling не выводит из масштабирования", "Hook LosslessScaling进程使其不会退出缩放": "Процесс Hook LosslessScaling не выводит из масштабирования",
"正在使用日语模型作为代替,可能效果不佳": "В качестве замены используется японская модель, которая может быть неэффективной", "正在使用日语模型作为代替,可能效果不佳": "В качестве замены используется японская модель, которая может быть неэффективной",
"保持非重复字符": "Сохранить символ без повторения", "保持非重复字符": "Сохранить символ без повторения",
"选择文本窗口中文本框只读": "Выберите текстовое окно только для чтения" "选择文本窗口中文本框只读": "Выберите текстовое окно только для чтения",
"多重区域模式": "Многорегиональная модель"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling กระบวนการทำให้มันไม่ออกจากซูม", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling กระบวนการทำให้มันไม่ออกจากซูม",
"正在使用日语模型作为代替,可能效果不佳": "ใช้แบบจำลองภาษาญี่ปุ่นแทนอาจไม่ได้ผล", "正在使用日语模型作为代替,可能效果不佳": "ใช้แบบจำลองภาษาญี่ปุ่นแทนอาจไม่ได้ผล",
"保持非重复字符": "เก็บอักขระที่ไม่ซ้ำกัน", "保持非重复字符": "เก็บอักขระที่ไม่ซ้ำกัน",
"选择文本窗口中文本框只读": "เลือกกล่องข้อความในหน้าต่างข้อความ อ่านอย่างเดียว" "选择文本窗口中文本框只读": "เลือกกล่องข้อความในหน้าต่างข้อความ อ่านอย่างเดียว",
"多重区域模式": "โหมดหลายโซน"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling süreç ölçeklenmesini engelledi", "Hook LosslessScaling进程使其不会退出缩放": "Hook LosslessScaling süreç ölçeklenmesini engelledi",
"正在使用日语模型作为代替,可能效果不佳": "Japon modellerini yerine koymak etkili olmayabilir.", "正在使用日语模型作为代替,可能效果不佳": "Japon modellerini yerine koymak etkili olmayabilir.",
"保持非重复字符": "Tekrarlamayan karakterleri tut", "保持非重复字符": "Tekrarlamayan karakterleri tut",
"选择文本窗口中文本框只读": "Metin penceresindeki sadece okuyulmuş metin kutularını seçin" "选择文本窗口中文本框只读": "Metin penceresindeki sadece okuyulmuş metin kutularını seçin",
"多重区域模式": "Çok bölge modu"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Процес безвтратного розміруScaling забороняє їй вийти з розміру", "Hook LosslessScaling进程使其不会退出缩放": "Процес безвтратного розміруScaling забороняє їй вийти з розміру",
"正在使用日语模型作为代替,可能效果不佳": "Використання японських моделей як заміни може бути неефективним", "正在使用日语模型作为代替,可能效果不佳": "Використання японських моделей як заміни може бути неефективним",
"保持非重复字符": "Зберегти символи, які не повторюються", "保持非重复字符": "Зберегти символи, які не повторюються",
"选择文本窗口中文本框只读": "Виберіть текстові поля для лише читання у текстовому вікні" "选择文本窗口中文本框只读": "Виберіть текстові поля для лише читання у текстовому вікні",
"多重区域模式": "Режим декількох регіонів"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "Quá trình Hook LosslessScaling làm cho nó không thoát khỏi zoom", "Hook LosslessScaling进程使其不会退出缩放": "Quá trình Hook LosslessScaling làm cho nó không thoát khỏi zoom",
"正在使用日语模型作为代替,可能效果不佳": "Các mô hình tiếng Nhật đang được sử dụng thay thế và có thể không hiệu quả", "正在使用日语模型作为代替,可能效果不佳": "Các mô hình tiếng Nhật đang được sử dụng thay thế và có thể không hiệu quả",
"保持非重复字符": "Giữ các ký tự không trùng lặp", "保持非重复字符": "Giữ các ký tự không trùng lặp",
"选择文本窗口中文本框只读": "Chọn hộp văn bản chỉ đọc trong cửa sổ văn bản" "选择文本窗口中文本框只读": "Chọn hộp văn bản chỉ đọc trong cửa sổ văn bản",
"多重区域模式": "Chế độ đa vùng"
} }

View File

@ -707,5 +707,6 @@
"Hook LosslessScaling进程使其不会退出缩放": "", "Hook LosslessScaling进程使其不会退出缩放": "",
"正在使用日语模型作为代替,可能效果不佳": "", "正在使用日语模型作为代替,可能效果不佳": "",
"保持非重复字符": "", "保持非重复字符": "",
"选择文本窗口中文本框只读": "" "选择文本窗口中文本框只读": "",
"多重区域模式": ""
} }