This commit is contained in:
恍兮惚兮 2024-07-12 23:41:49 +08:00
parent 9690792dfb
commit 30eacd6602
32 changed files with 602 additions and 358 deletions

View File

@ -40,7 +40,7 @@ if __name__ == "__main__":
)
font = QFont()
font.setStyleStrategy(QFont.StyleStrategy.PreferAntialias)
font.setHintingPreference(QFont.HintingPreference.PreferFullHinting)
font.setHintingPreference(QFont.HintingPreference.PreferNoHinting)
QApplication.setFont(font)
app = QApplication(sys.argv)

View File

@ -26,6 +26,8 @@ from myutils.utils import (
find_or_create_uid,
str2rgba,
gamdidchangedtask,
checkpostlangmatch,
loadpostsettingwindowmethod_private,
titlechangedtask,
idtypecheck,
selectdebugfile,
@ -593,8 +595,9 @@ def maybehavebutton(self, gameuid, post):
self,
savehook_new_data[gameuid]["save_text_process_info"][
"postprocessconfig"
][post]["args"],
][post]["args"]["替换内容"],
postprocessconfig[post]["name"],
["原文内容", "替换为"],
)
else:
items = autoinitdialog_items(
@ -675,38 +678,86 @@ class dialog_setting_game_internal(QWidget):
]
),
)
functs = [
("启动", self.starttab),
("HOOK", self.gethooktab),
("语言", self.getlangtab),
("文本处理", self.gettextproc),
("标签", self.getlabelsetting),
("元数据", self.metadataorigin),
("统计", self.getstatistic),
("语音", self.getttssetting),
("预翻译", self.getpretranstab),
("Anki", self.maketabforanki),
("游戏设置", functools.partial(self.___tabf3, self.makegamesettings)),
("游戏数据", functools.partial(self.___tabf3, self.makegamedata)),
]
methodtab, do = makesubtab_lazy(
_TRL([_[0] for _ in functs]),
[functools.partial(self.doaddtab, _[1], gameuid) for _ in functs],
delay=True,
)
self.methodtab = methodtab
vbox.addLayout(formLayout)
vbox.addWidget(methodtab)
do()
def ___tabf(self, function, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
function(formLayout, gameuid)
return _w
def ___tabf2(self, function, gameuid):
_w = QWidget()
formLayout = QVBoxLayout()
_w.setLayout(formLayout)
function(formLayout, gameuid)
return _w
def ___tabf3(self, function, gameuid):
_w = QWidget()
formLayout = QVBoxLayout()
formLayout.setContentsMargins(0, 0, 0, 0)
_w.setLayout(formLayout)
function(formLayout, gameuid)
return _w
def makegamedata(self, vbox: QVBoxLayout, gameuid):
functs = [
("元数据", functools.partial(self.___tabf, self.metadataorigin)),
("统计", functools.partial(self.___tabf2, self.getstatistic)),
("标签", functools.partial(self.___tabf2, self.getlabelsetting)),
]
methodtab, do = makesubtab_lazy(
_TRL([_[0] for _ in functs]),
[functools.partial(self.doaddtab, _[1], gameuid) for _ in functs],
delay=True,
)
vbox.addWidget(methodtab)
do()
def makegamesettings(self, vbox: QVBoxLayout, gameuid):
functs = [
("启动", functools.partial(self.___tabf, self.starttab)),
("HOOK", functools.partial(self.___tabf, self.gethooktab)),
("语言", functools.partial(self.___tabf, self.getlangtab)),
("文本处理", functools.partial(self.___tabf, self.gettextproc)),
("翻译优化", functools.partial(self.___tabf, self.gettransoptimi)),
("语音", functools.partial(self.___tabf, self.getttssetting)),
("预翻译", functools.partial(self.___tabf, self.getpretranstab)),
("Anki", functools.partial(self.___tabf, self.maketabforanki)),
]
methodtab, do = makesubtab_lazy(
_TRL([_[0] for _ in functs]),
[functools.partial(self.doaddtab, _[1], gameuid) for _ in functs],
delay=True,
)
self.methodtab = methodtab
vbox.addWidget(methodtab)
do()
def openrefmainpage(self, key, idname, gameuid):
try:
os.startfile(targetmod[key].refmainpage(savehook_new_data[gameuid][idname]))
except:
print_exc()
def metadataorigin(self, gameuid):
formLayout = QFormLayout()
_w = QWidget()
_w.setLayout(formLayout)
def metadataorigin(self, formLayout: QFormLayout, gameuid):
formLayout.addRow(
_TR("首选的"),
getsimplecombobox(
@ -762,16 +813,12 @@ class dialog_setting_game_internal(QWidget):
key,
getboxlayout(_vbox_internal),
)
return _w
def doaddtab(self, wfunct, exe, layout):
w = wfunct(exe)
layout.addWidget(w)
def starttab(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
def starttab(self, formLayout: QFormLayout, gameuid):
b = windows.GetBinaryType(uid2gamepath[gameuid])
@ -811,14 +858,8 @@ class dialog_setting_game_internal(QWidget):
"onloadautochangemode2",
),
)
return _w
def getstatistic(self, gameuid):
_w = QWidget()
formLayout = QVBoxLayout()
_w.setLayout(formLayout)
formLayout.setContentsMargins(0, 0, 0, 0)
def getstatistic(self, formLayout: QVBoxLayout, gameuid):
chart = chartwidget()
chart.xtext = lambda x: (
"0" if x == 0 else str(datetime.fromtimestamp(x)).split(" ")[0]
@ -843,7 +884,6 @@ class dialog_setting_game_internal(QWidget):
t.timeout.connect(self.refresh)
t.timeout.emit()
t.start()
return _w
def split_range_into_days(self, times):
everyday = {}
@ -911,11 +951,7 @@ class dialog_setting_game_internal(QWidget):
string = "0"
return string
def getlabelsetting(self, gameuid):
_w = QWidget()
formLayout = QVBoxLayout()
_w.setLayout(formLayout)
formLayout.setContentsMargins(0, 0, 0, 0)
def getlabelsetting(self, formLayout: QVBoxLayout, gameuid):
self.labelflow = ScrollFlow()
def newitem(text, removeable, first=False, _type=tagitem.TYPE_RAND):
@ -978,28 +1014,40 @@ class dialog_setting_game_internal(QWidget):
]
)
)
return _w
def getttssetting(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
def createfollowdefault(
self, dic: dict, key: str, formLayout: QFormLayout, callback=None
) -> QFormLayout:
__extraw = QWidget()
def __function(__extraw: QWidget, callback, _):
__extraw.setEnabled(not _)
if callback:
try:
callback()
except:
print_exc()
formLayout.addRow(
_TR("跟随默认"),
getsimpleswitch(
savehook_new_data[gameuid],
"tts_follow_default",
callback=lambda _: __extraw.setEnabled(not _),
dic,
key,
callback=functools.partial(__function, __extraw, callback),
),
)
__extraw.setEnabled(not savehook_new_data[gameuid]["tts_follow_default"])
__extraw.setEnabled(not dic[key])
formLayout.addRow(__extraw)
formLayout2 = QFormLayout()
formLayout2.setContentsMargins(0, 0, 0, 0)
__extraw.setLayout(formLayout2)
return formLayout2
def getttssetting(self, formLayout: QFormLayout, gameuid):
formLayout2 = self.createfollowdefault(
savehook_new_data[gameuid], "tts_follow_default", formLayout
)
formLayout2.addRow(
_TR("语音跳过"),
@ -1042,25 +1090,8 @@ class dialog_setting_game_internal(QWidget):
),
)
return _w
def maketabforanki(self, formLayout: QFormLayout, gameuid):
def maketabforanki(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
__extraw = QWidget()
formLayout.addRow(
_TR("跟随默认"),
getsimpleswitch(
savehook_new_data[gameuid],
"follow_default_ankisettings",
callback=lambda _: __extraw.setEnabled(not _),
),
)
__extraw.setEnabled(
not savehook_new_data[gameuid]["follow_default_ankisettings"]
)
savehook_new_data[gameuid]["anki_DeckName"] = savehook_new_data[gameuid].get(
"anki_DeckName", globalconfig["ankiconnect"]["DeckName"]
)
@ -1089,10 +1120,9 @@ class dialog_setting_game_internal(QWidget):
globalconfig["ankiconnect"]["simulate_key"]["2"]["keystring"],
)
formLayout.addRow(__extraw)
formLayout2 = QFormLayout()
formLayout2.setContentsMargins(0, 0, 0, 0)
__extraw.setLayout(formLayout2)
formLayout2 = self.createfollowdefault(
savehook_new_data[gameuid], "follow_default_ankisettings", formLayout
)
formLayout2.addRow(
_TR("DeckName"),
getlineedit(
@ -1130,12 +1160,8 @@ class dialog_setting_game_internal(QWidget):
makewidget=True,
),
)
return _w
def getpretranstab(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
def getpretranstab(self, formLayout: QFormLayout, gameuid):
def selectimg(gameuid, key, res):
savehook_new_data[gameuid][key] = res
@ -1169,30 +1195,44 @@ class dialog_setting_game_internal(QWidget):
True,
),
)
return _w
def gettextproc(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
__extra = QWidget()
def gettransoptimi(self, formLayout: QFormLayout, gameuid):
def __function(_):
__extra.setEnabled(not _)
formLayout.addRow(
_TR("跟随默认"),
getsimpleswitch(
savehook_new_data[gameuid],
"textproc_follow_default",
callback=__function,
),
vbox = self.createfollowdefault(
savehook_new_data[gameuid], "transoptimi_followdefault", formLayout
)
for item in static_data["transoptimi"]:
name = item["name"]
visname = item["visname"]
if checkpostlangmatch(name):
setting = loadpostsettingwindowmethod_private(name)
if not setting:
continue
def __(_f, _1, gameuid):
return _f(_1, gameuid)
vbox.addRow(
visname,
getboxlayout(
[
getIconButton(
callback=functools.partial(__, setting, self, gameuid),
icon="fa.gear",
),
QLabel(),
],
makewidget=True,
margin0=True,
),
)
def gettextproc(self, formLayout: QFormLayout, gameuid):
vbox = self.createfollowdefault(
savehook_new_data[gameuid], "textproc_follow_default", formLayout
)
__extra.setEnabled(not savehook_new_data[gameuid]["textproc_follow_default"])
vbox = QVBoxLayout()
vbox.setContentsMargins(0, 0, 0, 0)
__extra.setLayout(vbox)
formLayout.addRow(__extra)
model = QStandardItemModel()
model.setHorizontalHeaderLabels(_TRL(["预处理方法", "使用", "设置"]))
@ -1227,7 +1267,6 @@ class dialog_setting_game_internal(QWidget):
)
vbox.addWidget(buttons)
vbox.addWidget(buttons)
return _w
def __privatetextproc_showmenu(self, p):
r = self.__textprocinternaltable.currentIndex().row()
@ -1359,21 +1398,8 @@ class dialog_setting_game_internal(QWidget):
],
)
def getlangtab(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
__extraw = QWidget()
def getlangtab(self, formLayout: QFormLayout, gameuid):
formLayout.addRow(
_TR("跟随默认"),
getsimpleswitch(
savehook_new_data[gameuid],
"lang_follow_default",
callback=lambda _: __extraw.setEnabled(not _),
),
)
__extraw.setEnabled(not savehook_new_data[gameuid]["lang_follow_default"])
savehook_new_data[gameuid]["private_tgtlang"] = savehook_new_data[gameuid].get(
"private_tgtlang", globalconfig["tgtlang3"]
)
@ -1381,10 +1407,9 @@ class dialog_setting_game_internal(QWidget):
"private_srclang", globalconfig["srclang3"]
)
formLayout.addRow(__extraw)
formLayout2 = QFormLayout()
formLayout2.setContentsMargins(0, 0, 0, 0)
__extraw.setLayout(formLayout2)
formLayout2 = self.createfollowdefault(
savehook_new_data[gameuid], "lang_follow_default", formLayout
)
formLayout2.addRow(
_TR("源语言"),
getsimplecombobox(
@ -1401,12 +1426,9 @@ class dialog_setting_game_internal(QWidget):
"private_tgtlang",
),
)
return _w
def gethooktab(self, gameuid):
_w = QWidget()
formLayout = QFormLayout()
_w.setLayout(formLayout)
def gethooktab(self, formLayout: QFormLayout, gameuid):
formLayout.addRow(
_TR("特殊码"),
listediterline(
@ -1420,26 +1442,6 @@ class dialog_setting_game_internal(QWidget):
_TR("插入特殊码延迟(ms)"),
getspinbox(0, 1000000, savehook_new_data[gameuid], "inserthooktimeout"),
)
__extraw = QWidget()
def __function(_):
__extraw.setEnabled(not _)
try:
gobject.baseobject.textsource.setsettings()
except:
pass
formLayout.addRow(
_TR("跟随默认"),
getsimpleswitch(
savehook_new_data[gameuid],
"hooksetting_follow_default",
callback=__function,
),
)
__extraw.setEnabled(
not savehook_new_data[gameuid]["hooksetting_follow_default"]
)
for k in [
"codepage_index",
@ -1453,10 +1455,13 @@ class dialog_setting_game_internal(QWidget):
]:
if k not in savehook_new_data[gameuid]["hooksetting_private"]:
savehook_new_data[gameuid]["hooksetting_private"][k] = globalconfig[k]
formLayout.addRow(__extraw)
formLayout2 = QFormLayout()
formLayout2.setContentsMargins(0, 0, 0, 0)
__extraw.setLayout(formLayout2)
formLayout2 = self.createfollowdefault(
savehook_new_data[gameuid],
"hooksetting_follow_default",
formLayout,
lambda: gobject.baseobject.textsource.setsettings(),
)
formLayout2.addRow(
_TR("代码页"),
getsimplecombobox(
@ -1526,13 +1531,11 @@ class dialog_setting_game_internal(QWidget):
),
)
return _w
@Singleton_close
class dialog_setting_game(QDialog):
def __init__(self, parent, gameuid, setindexhook=False) -> None:
def __init__(self, parent, gameuid, setindexhook=0) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
global _global_dialog_setting_game
_global_dialog_setting_game = self
@ -1541,8 +1544,7 @@ class dialog_setting_game(QDialog):
self.setWindowIcon(getExeIcon(uid2gamepath[gameuid], cache=True))
_ = dialog_setting_game_internal(self, gameuid)
if setindexhook:
_.methodtab.setCurrentIndex(1)
_.methodtab.setCurrentIndex(setindexhook)
_.setMinimumSize(QSize(600, 500))
l = QHBoxLayout(self)
self.setLayout(l)

View File

@ -617,35 +617,33 @@ class postconfigdialog_(QDialog):
def apply(self):
rows = self.model.rowCount()
newdict = {}
self.configdict.clear()
for row in range(rows):
if self.model.item(row, 0).text() == "":
continue
newdict[(self.model.item(row, 0).text())] = self.model.item(row, 1).text()
self.configdict[self.key] = newdict
self.configdict[(self.model.item(row, 0).text())] = self.model.item(
row, 1
).text()
def __init__(self, parent, configdict, title) -> None:
def __init__(self, parent, configdict, title, headers) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
print(title)
self.setWindowTitle(_TR(title))
# self.setWindowModality(Qt.ApplicationModal)
self.closeevent = False
formLayout = QVBoxLayout(self) # 配置layout
key = list(configdict.keys())[0]
model = QStandardItemModel(len(configdict[key]), 1, self)
model = QStandardItemModel(len(configdict), 1, self)
row = 0
for key1 in configdict[key]: # 2
for key1 in configdict: # 2
item = QStandardItem(key1)
model.setItem(row, 0, item)
item = QStandardItem(configdict[key][key1])
item = QStandardItem(configdict[key1])
model.setItem(row, 1, item)
row += 1
model.setHorizontalHeaderLabels(_TRL(["原文内容", "替换为"]))
model.setHorizontalHeaderLabels(_TRL(headers))
table = QTableView(self)
table.setModel(model)
table.setWordWrap(False)
@ -674,7 +672,6 @@ class postconfigdialog_(QDialog):
button.btn3clicked.connect(self.apply)
self.button = button
self.model = model
self.key = key
self.configdict = configdict
self.closeevent = True
search = QHBoxLayout()
@ -706,5 +703,5 @@ class postconfigdialog_(QDialog):
self.show()
def postconfigdialog(parent, configdict, title):
postconfigdialog_(parent, configdict, title)
def postconfigdialog(parent, configdict, title, header):
postconfigdialog_(parent, configdict, title, header)

View File

@ -677,11 +677,14 @@ class hookselect(closeashidewindow):
winsharedutils.clipboard_set(copyhook)
def opensolvetext(self):
gobject.baseobject.settin_ui.opensolvetextsig.emit()
try:
dialog_setting_game(self, gobject.baseobject.textsource.gameuid, 3)
except:
print_exc()
def opengamesetting(self):
try:
dialog_setting_game(self, gobject.baseobject.textsource.gameuid, True)
dialog_setting_game(self, gobject.baseobject.textsource.gameuid, 1)
except:
print_exc()

View File

@ -67,14 +67,12 @@ class Setting(closeashidewindow):
voicelistsignal = pyqtSignal(list, int)
versiontextsignal = pyqtSignal(str)
progresssignal = pyqtSignal(str, int)
opensolvetextsig = pyqtSignal()
showandsolvesig = pyqtSignal(str)
def __init__(self, parent):
super(Setting, self).__init__(parent, globalconfig["setting_geo_2"])
self.setWindowIcon(qtawesome.icon("fa.gear"))
self.opensolvetextsig.connect(self.opensolvetextfun)
self.showandsolvesig.connect(functools.partial(delaysetcomparetext, self))
self.voicelistsignal.connect(functools.partial(showvoicelist, self))
self.versiontextsignal.connect(
@ -142,7 +140,3 @@ class Setting(closeashidewindow):
self.tab_widget.splitter.setStretchFactor(0, 0)
self.tab_widget.splitter.setStretchFactor(1, 1)
self.tab_widget.splitter.setSizes([width, self.tab_widget.width() - width])
def opensolvetextfun(self):
self.show()
self.tab_widget.setCurrentIndex(3)

View File

@ -137,8 +137,9 @@ def getocrgrid(self):
callback=functools.partial(
postconfigdialog,
self,
ocrerrorfix["args"],
ocrerrorfix["args"]["替换内容"],
"易错内容修正",
["原文内容", "替换为"],
),
icon="fa.gear",
),

View File

@ -13,7 +13,7 @@ from myutils.config import (
_TRL,
)
from gui.codeacceptdialog import codeacceptdialog
from gui.usefulwidget import (
from gui.usefulwidget import (
D_getIconButton,
getIconButton,
D_getsimpleswitch,
@ -42,9 +42,9 @@ def getcomparelayout(self):
layout = QHBoxLayout()
fromtext = QPlainTextEdit()
totext = QPlainTextEdit()
solvebutton = getIconButton(
solvebutton = getIconButton(
callback=lambda: totext.setPlainText(POSTSOLVE(fromtext.toPlainText())),
icon="fa.chevron-right",
icon="fa.chevron-right",
)
layout.addWidget(fromtext)
@ -97,16 +97,16 @@ def setTab7_lazy(self, basel):
for i, post in enumerate(sortlist):
if post == "_11":
config = D_getIconButton(
config = D_getIconButton(
callback=lambda: selectdebugfile("./userconfig/mypost.py"),
icon="fa.gear",
icon="fa.gear",
)
else:
if post not in postprocessconfig:
continue
if post == "_remove_chaos":
config = D_getIconButton(
icon="fa.gear",
config = D_getIconButton(
icon="fa.gear",
callback=lambda: codeacceptdialog(self),
)
elif "args" in postprocessconfig[post]:
@ -114,8 +114,9 @@ def setTab7_lazy(self, basel):
callback = functools.partial(
postconfigdialog,
self,
postprocessconfig[post]["args"],
postprocessconfig[post]["args"]['替换内容'],
postprocessconfig[post]["name"],
["原文内容", "替换为"]
)
else:
items = autoinitdialog_items(postprocessconfig[post])
@ -126,20 +127,20 @@ def setTab7_lazy(self, basel):
600,
items,
)
config = D_getIconButton(
config = D_getIconButton(
callback=callback,
icon="fa.gear",
icon="fa.gear",
)
else:
config = ""
button_up = D_getIconButton(
button_up = D_getIconButton(
callback=functools.partial(changerank, post, True),
icon="fa.arrow-up",
icon="fa.arrow-up",
)
button_down = D_getIconButton(
button_down = D_getIconButton(
callback=functools.partial(changerank, post, False),
icon="fa.arrow-down",
icon="fa.arrow-down",
)
l = [
@ -165,9 +166,9 @@ def setTab7_lazy(self, basel):
if setting:
grids2[-1].append(
D_getIconButton(
D_getIconButton(
callback=functools.partial(__, setting, self),
icon="fa.gear",
icon="fa.gear",
)
)
grids2 += [[("", 12)]]

View File

@ -135,6 +135,7 @@ def getdefaultsavehook(title=None):
"tts_repair": False,
"tts_repair_regex": [{"regex": True, "key": "(.*?)「", "value": ""}],
"tts_skip": False,
"transoptimi_followdefault": True,
"tts_skip_regex": [],
# "hooktypeasname": {},
"use_saved_text_process": False,
@ -152,6 +153,7 @@ def getdefaultsavehook(title=None):
"istitlesetted": False,
"currentvisimage": None,
"currentmainimage": "",
"noundictconfig": [],
# 元数据
"namemap": {}, # 人名翻译映射vndb独占用于优化翻译
#

View File

@ -1,7 +1,7 @@
import windows
import os, time
import codecs, hashlib, shutil
import socket, gobject, uuid, subprocess
import socket, gobject, uuid, subprocess, functools
import ctypes, importlib
import ctypes.wintypes
from qtsymbols import *
@ -533,7 +533,7 @@ def checkpostusing(name):
return use and checkpostlangmatch(name)
def loadpostsettingwindowmethod(name):
def loadpostsettingwindowmethod_1(xx, name):
checkpath = "./LunaTranslator/transoptimi/" + name + ".py"
if os.path.exists(checkpath) == False:
return None
@ -541,11 +541,20 @@ def loadpostsettingwindowmethod(name):
try:
Process = importlib.import_module(mm).Process
return tryprint(Process.get_setting_window)
if xx:
return tryprint(Process.get_setting_window)
else:
return tryprint(Process.get_setting_window_gameprivate)
except:
return None
loadpostsettingwindowmethod = functools.partial(loadpostsettingwindowmethod_1, True)
loadpostsettingwindowmethod_private = functools.partial(
loadpostsettingwindowmethod_1, False
)
class unsupportkey(Exception):
pass

View File

@ -1,12 +1,7 @@
from myutils.config import noundictconfig
from myutils.config import noundictconfig, savehook_new_data, _TR, _TRL
import gobject, re, functools
from qtsymbols import *
from traceback import print_exc
from myutils.config import (
noundictconfig,
_TR,
_TRL,
)
import gobject
from gui.usefulwidget import getQMessageBox, threebuttons
from myutils.wrapper import Singleton_close
@ -50,21 +45,20 @@ class noundictconfigdialog(QDialog):
def apply(self):
rows = self.model.rowCount()
newdict = {}
self.configdict.clear()
for row in range(rows):
if self.model.item(row, 1).text() == "":
continue
if self.model.item(row, 1).text() not in newdict:
newdict[self.model.item(row, 1).text()] = [
if self.model.item(row, 1).text() not in self.configdict:
self.configdict[self.model.item(row, 1).text()] = [
self.model.item(row, 0).text(),
self.model.item(row, 2).text(),
]
else:
newdict[self.model.item(row, 1).text()] += [
self.configdict[self.model.item(row, 1).text()] += [
self.model.item(row, 0).text(),
self.model.item(row, 2).text(),
]
self.configdict["dict"] = newdict
def __init__(
self, parent, configdict, title, label=["游戏ID MD5", "原文", "翻译"], _=None
@ -76,18 +70,18 @@ class noundictconfigdialog(QDialog):
formLayout = QVBoxLayout(self) # 配置layout
model = QStandardItemModel(len(list(configdict["dict"].keys())), 1, self)
model = QStandardItemModel(len(configdict), 1, self)
row = 0
for key in configdict["dict"]: # 2
if type(configdict["dict"][key]) == str:
configdict["dict"][key] = ["0", configdict["dict"][key]]
for key in configdict: # 2
if type(configdict[key]) == str:
configdict[key] = ["0", configdict[key]]
for i in range(len(configdict["dict"][key]) // 2):
item = QStandardItem(configdict["dict"][key][i * 2])
for i in range(len(configdict[key]) // 2):
item = QStandardItem(configdict[key][i * 2])
model.setItem(row, 0, item)
item = QStandardItem(key)
model.setItem(row, 1, item)
item = QStandardItem(configdict["dict"][key][1 + i * 2])
item = QStandardItem(configdict[key][1 + i * 2])
model.setItem(row, 2, item)
row += 1
model.setHorizontalHeaderLabels(_TRL(label))
@ -132,9 +126,7 @@ class noundictconfigdialog(QDialog):
button.btn4clicked.connect(functools.partial(self.moverank, table, 1))
button.btn5clicked.connect(self.apply)
button2 = threebuttons(
texts=["设置所有词条为全局词条", "以当前md5复制选中行"]
)
button2 = threebuttons(texts=["设置所有词条为全局词条", "以当前md5复制选中行"])
def clicked5():
rows = model.rowCount()
@ -217,42 +209,235 @@ class noundictconfigdialog(QDialog):
)
@Singleton_close
class noundictconfigdialog_private(QDialog):
def closeEvent(self, a0: QCloseEvent) -> None:
self.button.setFocus()
self.apply()
def showmenu(self, table: QTableView, pos):
r = table.currentIndex().row()
if r < 0:
return
menu = QMenu(table)
up = QAction(_TR("上移"))
down = QAction(_TR("下移"))
menu.addAction(up)
menu.addAction(down)
action = menu.exec(table.cursor().pos())
if action == up:
self.moverank(table, -1)
elif action == down:
self.moverank(table, 1)
def moverank(self, table: QTableView, dy):
curr = table.currentIndex()
target = (curr.row() + dy) % table.model().rowCount()
texts = [
table.model().item(curr.row(), i).text()
for i in range(table.model().columnCount())
]
table.model().removeRow(curr.row())
table.model().insertRow(target, [QStandardItem(text) for text in texts])
table.setCurrentIndex(table.model().index(target, curr.column()))
def apply(self):
rows = self.model.rowCount()
self.configdict.clear()
_dedump = set()
for row in range(rows):
k, v = self.model.item(row, 0).text(), self.model.item(row, 1).text()
if k == "":
continue
if k in _dedump:
continue
self.configdict.append([k, v])
_dedump.add(k)
def __init__(
self, parent, configdict, title, label=["原文", "翻译"], _=None
) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
self.setWindowTitle(_TR(title))
# self.setWindowModality(Qt.ApplicationModal)
formLayout = QVBoxLayout(self) # 配置layout
model = QStandardItemModel(len(configdict), 1, self)
row = 0
for key in configdict: # 2
item = QStandardItem(key[0])
model.setItem(row, 0, item)
item = QStandardItem(key[1])
model.setItem(row, 1, item)
row += 1
model.setHorizontalHeaderLabels(_TRL(label))
table = QTableView(self)
table.setModel(model)
table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
table.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
table.customContextMenuRequested.connect(
functools.partial(self.showmenu, table)
)
button = threebuttons(texts=["添加行", "删除行", "上移", "下移", "立即应用"])
self.table = table
def clicked1():
model.insertRow(0, [QStandardItem(), QStandardItem()])
button.btn1clicked.connect(clicked1)
def clicked2():
skip = []
for index in self.table.selectedIndexes():
if index.row() in skip:
continue
skip.append(index.row())
skip = reversed(sorted(skip))
for row in skip:
model.removeRow(row)
button.btn2clicked.connect(clicked2)
button.btn3clicked.connect(functools.partial(self.moverank, table, -1))
button.btn4clicked.connect(functools.partial(self.moverank, table, 1))
button.btn5clicked.connect(self.apply)
search = QHBoxLayout()
searchcontent = QLineEdit()
search.addWidget(searchcontent)
button4 = QPushButton()
button4.setText(_TR("搜索"))
def clicked4():
text = searchcontent.text()
rows = model.rowCount()
cols = model.columnCount()
for row in range(rows):
ishide = True
for c in range(cols):
if text in model.item(row, c).text():
ishide = False
break
table.setRowHidden(row, ishide)
button4.clicked.connect(clicked4)
search.addWidget(button4)
formLayout.addWidget(table)
formLayout.addLayout(search)
formLayout.addWidget(button)
self.button = button
self.model = model
self.configdict = configdict
self.resize(QSize(600, 400))
self.show()
def copysetmd5(self):
if len(self.table.selectedIndexes()) == 0:
return
row = self.table.selectedIndexes()[0].row()
skip = []
for index in self.table.selectedIndexes():
if index.row() in skip:
continue
skip.append(index.row())
self.model.insertRow(
row,
[
QStandardItem(self.model.item(index.row(), 1).text()),
QStandardItem(self.model.item(index.row(), 2).text()),
],
)
class Process:
@staticmethod
def get_setting_window_gameprivate(parent_window, gameuid):
return (
noundictconfigdialog_private(
parent_window,
savehook_new_data[gameuid]["noundictconfig"],
"专有名词翻译设置",
),
)
@staticmethod
def get_setting_window(parent_window):
return (
noundictconfigdialog(
parent_window, noundictconfig, "专有名词翻译设置(游戏ID 0表示全局)"
parent_window,
noundictconfig["dict"],
"专有名词翻译设置_游戏ID 0表示全局",
),
)
def process_before(self, content):
___idx = 1
mp1 = {}
for key in noundictconfig["dict"]:
v = None
if type(noundictconfig["dict"][key]) == str:
v = noundictconfig["dict"][mp1[key]]
else:
for i in range(len(noundictconfig["dict"][key]) // 2):
if noundictconfig["dict"][key][i * 2] in [
"0",
gobject.baseobject.currentmd5,
]:
v = noundictconfig["dict"][key][i * 2 + 1]
break
def usewhich(self) -> dict:
for _ in (0,):
try:
if not gobject.baseobject.textsource:
break
gameuid = gobject.baseobject.textsource.gameuid
if savehook_new_data[gameuid]["transoptimi_followdefault"]:
break
return 0, savehook_new_data[gameuid]["noundictconfig"]
if v is not None and key in content:
if ___idx == 1:
xx = "ZX{}Z".format(chr(ord("B") + gobject.baseobject.zhanweifu))
elif ___idx == 2:
xx = "{{{}}}".format(gobject.baseobject.zhanweifu)
elif ___idx == 3:
xx = v
content = content.replace(key, xx)
except:
print_exc()
break
return 1, noundictconfig["dict"]
def process_before(self, content):
def __createfake():
___idx = 1
if ___idx == 1:
xx = "ZX{}Z".format(chr(ord("B") + gobject.baseobject.zhanweifu))
elif ___idx == 2:
xx = "{{{}}}".format(gobject.baseobject.zhanweifu)
elif ___idx == 3:
xx = v
gobject.baseobject.zhanweifu += 1
return xx
mp1 = {}
_type, dic = self.usewhich()
if _type == 1:
for key in dic:
v = None
if type(dic[key]) == str:
v = dic[mp1[key]]
else:
for i in range(len(dic[key]) // 2):
if dic[key][i * 2] in [
"0",
gobject.baseobject.currentmd5,
]:
v = dic[key][i * 2 + 1]
break
if v is not None and key in content:
xx = __createfake()
content = content.replace(key, xx)
mp1[xx] = v
return content, mp1
elif _type == 0:
for k, v in dic:
xx = __createfake()
content = content.replace(k, xx)
mp1[xx] = v
gobject.baseobject.zhanweifu += 1
return content, mp1
return content, mp1
def process_after(self, res, mp1):
for key in mp1:

View File

@ -1,13 +1,51 @@
from myutils.config import savehook_new_data
from myutils.config import savehook_new_data, globalconfig
import gobject
from traceback import print_exc
from gui.inputdialog import postconfigdialog_
class Process:
@staticmethod
def get_setting_window(parent_window):
return (
postconfigdialog_(
parent_window,
globalconfig["global_namemap"],
"指定人名翻译",
["人名", "翻译"],
),
)
@staticmethod
def get_setting_window_gameprivate(parent_window, gameuid):
return (
postconfigdialog_(
parent_window,
savehook_new_data[gameuid]["namemap"],
"指定人名翻译",
["人名", "翻译"],
),
)
def usewhich(self) -> dict:
for _ in (0,):
try:
if not gobject.baseobject.textsource:
break
gameuid = gobject.baseobject.textsource.gameuid
if savehook_new_data[gameuid]["transoptimi_followdefault"]:
break
return savehook_new_data[gameuid]["namemap"]
except:
print_exc()
break
return globalconfig["global_namemap"]
def process_before(self, s):
gameuid = gobject.baseobject.textsource.gameuid
namemap = savehook_new_data[gameuid]["namemap"]
namemap = self.usewhich()
bettermap = {}
for k, v in namemap.items():
for sp in ["", " "]:

View File

@ -506,6 +506,7 @@
1200,
600
],
"global_namemap":{},
"settingfontsize": 12,
"filter_chaos_code": false,
"accept_encoding": [

View File

@ -1705,26 +1705,25 @@
"Magpie_External"
],
"transoptimi": [
{
"name": "vndbnamemap",
"visname": "指定人名翻译"
},
{
"name": "noundict",
"visname": "使用专有名词翻译"
"visname": "专有名词翻译"
},
{
"name": "transerrorfix",
"visname": "使用翻译结果修正"
"visname": "翻译结果修正"
},
{
"name": "gongxiangcishu",
"visname": "使用VNR共享辞书"
},
{
"name": "vndbnamemap",
"visname": "使用VNDB数据替换人名",
"languageuse": "en"
"visname": "VNR共享辞书"
},
{
"name": "myprocess",
"visname": "使用自定义优化"
"visname": "自定义优化"
},
{
"name": "arabic_reshaper",

View File

@ -70,7 +70,6 @@
"中文": "الصينية .",
"注册网址2": "رابط التسجيل",
"绘制光标": "رسم المؤشر",
"专有名词翻译设置(游戏ID 0表示全局)": "اسم ترجمة إعدادات ( لعبة رقم 0 يمثل العالم )",
"記号": "علامة",
"问题反馈": "مشكلة التغذية المرتدة",
"系统未安装": "النظام غير مثبت",
@ -236,7 +235,6 @@
"ついなちゃん": "ぼゃゃん",
"项目网站": "موقع المشروع",
"本地OCR": "التعرف الضوئي على الحروف المحلية",
"使用专有名词翻译": "استخدام الأسماء الصحيحة في الترجمة",
"说明": "إيضاحات",
"简体中文(CP936,GBK)": "الصينية المبسطة ( cp936 GBK )",
"资源下载": "تحميل الموارد",
@ -414,7 +412,6 @@
"搜索结果数上限": "نتائج البحث عن الحد الأعلى",
"指示詞": "إشارة عشوائية",
"导出的第一翻译源": "أول مصدر الترجمة",
"使用VNR共享辞书": "vnr قاموس مشترك",
"使用最快翻译而非指定翻译器": "استخدام أسرع مترجم بدلا من تحديد مترجم",
"搜索": "بحث .",
"不透明度": "التعتيم",
@ -436,7 +433,6 @@
"过滤HTML标签": "تصفية العلامات أتش تي أم أل",
"调整游戏窗口按钮": "ضبط زر نافذة اللعبة",
"语音设置": "إعدادات الصوت",
"使用翻译结果修正": "تصحيح نتائج الترجمة",
"警告": "حذر",
"拉丁(CP1252)": "اللاتينية ( CP1252 )",
"当前MD5": "MD5 الحالي",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "إظهار / إخفاء التاريخ",
"全屏/恢复游戏窗口": "كامل الشاشة / استعادة نافذة اللعبة",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "لا تحميل نموذج التعرف الضوئي على الحروف في هذه اللغة ، يرجى [ إعدادات أخرى ] - > [ تحميل الموارد ] - > [ التعرف الضوئي على الحروف حزمة اللغة ] تحميل نموذج استخراج الملفات / التعرف الضوئي على الحروف الطريق بعد استخدام",
"使用VNDB数据替换人名": "استبدال اسم الشخص مع بيانات فندب",
"文本输出": "النص الناتج",
"自动输出提取的文本": "التلقائي استخراج النص الناتج",
"缩放": "تحجيم",
@ -653,7 +648,6 @@
"左移": "تحول اليسار",
"右移": "حق التحول",
"启动游戏不修改顺序": "بدء اللعبة دون تعديل النظام",
"使用自定义优化": "استخدام التخصيص الأمثل",
"游戏管理": "إدارة الألعاب",
"显示标题": "عرض العنوان",
"收藏": "جمع",
@ -815,5 +809,12 @@
"延申": "تمديد",
"进入时才显示": "عرض فقط عند الدخول",
"语音跳过": "صوت تخطي",
"条件": "شرط ."
"条件": "شرط .",
"指定人名翻译": "تعيين اسم المترجم",
"专有名词翻译": "ترجمة الأسماء الصحيحة",
"VNR共享辞书": "vnr قاموس مشترك",
"自定义优化": "عرف التحسين",
"人名": "اسم الشخص",
"游戏ID 0表示全局": "معرف اللعبة 0",
"游戏数据": "بيانات اللعبة"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "簡單取代內容(若取代為空則直接過濾)",
"使用正则表达式替换": "使用正則表達式取代",
"自定义python处理": "自訂 Python 處理",
"使用专有名词翻译": "使用專有名詞翻譯",
"使用翻译结果修正": "使用翻譯結果修正",
"使用VNR共享辞书": "使用 VNR 共享辭書",
"辞书设置": "辭書設定",
"小学馆辞书": "小學館辭書",
"快捷键设置": "快速鍵設定",
@ -148,7 +145,6 @@
"sqlite文件": "SQLite 檔案",
"替换为": "取代為",
"去除重复字符(若为1则自动分析去重)": "去除重複字元(若為 1 則自動分析去除重複)",
"专有名词翻译设置(游戏ID 0表示全局)": "專有名詞翻譯設定(遊戲 ID 0 表示全域)",
"密钥": "金鑰",
"記号": "記號",
"选择文件": "選擇檔案",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "顯示 / 隱藏歷史翻譯",
"全屏/恢复游戏窗口": "全螢幕 / 復原遊戲視窗",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "未下載該語言的 OCR 模型,請在[其他設定]->[資源下載]->[OCR語言包]下載模型解壓到 files/ocr 路徑後使用",
"使用VNDB数据替换人名": "使用 VNDB 資料取代人名",
"文本输出": "文字輸出",
"自动输出提取的文本": "自動輸出提取的文字",
"缩放": "縮放",
@ -653,7 +648,6 @@
"左移": "左移",
"右移": "右移",
"启动游戏不修改顺序": "啟動遊戲不修改順序",
"使用自定义优化": "使用自訂優化",
"游戏管理": "遊戲管理",
"显示标题": "顯示標題",
"收藏": "收藏",
@ -815,5 +809,12 @@
"延申": "延申",
"进入时才显示": "進入時才顯示",
"语音跳过": "語音跳過",
"条件": "條件"
"条件": "條件",
"指定人名翻译": "指定人名翻譯",
"专有名词翻译": "專有名詞翻譯",
"VNR共享辞书": "VNR共亯辭書",
"自定义优化": "自定義優化",
"人名": "人名",
"游戏ID 0表示全局": "遊戲ID 0表示全域",
"游戏数据": "遊戲數據"
}

View File

@ -19,9 +19,7 @@
"居中显示": "Center Display",
"百度api": "Baidu API",
"预翻译": "Pre-translation",
"专有名词翻译设置(游戏ID 0表示全局)": "Proper Noun Translation Settings (Game ID 0 means global)",
"密钥": "Secret Key",
"使用VNR共享辞书": "Use VNR Shared Dictionary",
"显示复制原文按钮": "Show Copy Original Button",
"快捷键设置": "Hotkey Settings",
"设置": "Settings",
@ -114,10 +112,8 @@
"打开保存的游戏": "Open Saved Game",
"离线翻译": "Offline Translation",
"添加行": "Add Row",
"使用翻译结果修正": "Use Translation Result Correction",
"彩云": "Caiyun",
"游戏ID MD5": "Game ID MD5",
"使用专有名词翻译": "Manual Translation for Proper Nouns Correction",
"灵格斯": "Lingoes",
"备注": "Note",
"路径": "Path",
@ -631,7 +627,6 @@
"显示/隐藏历史翻译": "Show/Hide Translation History",
"全屏/恢复游戏窗口": "Full Screen/Restore Game Window",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "The OCR model for this language is not installed. Go to [Other Settings] -> [Resource Download] -> [OCR Language Pack], then download and extract the model to files/ocr.",
"使用VNDB数据替换人名": "Replace Names Using Data From VNDB",
"文本输出": "Text Output",
"自动输出提取的文本": "Automatically Output Extracted Text",
"缩放": "Scale",
@ -652,7 +647,6 @@
"左移": "Move Left",
"右移": "Move Right",
"启动游戏不修改顺序": "Start Game Without Changing Order",
"使用自定义优化": "Use Custom Optimization",
"游戏管理": "Game Management",
"显示标题": "Show Title",
"收藏": "Favourites",
@ -815,5 +809,12 @@
"延申": "Extension",
"进入时才显示": "Displayed only upon entry",
"语音跳过": "Voice skipping",
"条件": "condition"
"条件": "condition",
"指定人名翻译": "Designated Name Translation",
"专有名词翻译": "Translation of proprietary terms",
"VNR共享辞书": "VNR Shared Lexicon",
"自定义优化": "Custom optimization",
"人名": "name",
"游戏ID 0表示全局": "Game ID 0 represents global",
"游戏数据": "Game data"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Contenido de reemplazo simple (si se reemplaza por vacío, se filtra directamente)",
"使用正则表达式替换": "Reemplazar con expresiones regulares",
"自定义python处理": "Procesamiento personalizado de Python",
"使用专有名词翻译": "Traducción con términos propios",
"使用翻译结果修正": "Corrección con resultados de traducción",
"使用VNR共享辞书": "Uso de vnr para compartir diccionarios",
"辞书设置": "Configuración del diccionario",
"小学馆辞书": "Diccionario de la escuela primaria",
"快捷键设置": "Configuración de atajos",
@ -148,7 +145,6 @@
"sqlite文件": "Archivo qlite",
"替换为": "Sustituir por",
"去除重复字符(若为1则自动分析去重)": "Eliminar caracteres duplicados (si es 1, se analiza automáticamente para eliminar el peso)",
"专有名词翻译设置(游戏ID 0表示全局)": "Configuración de traducción de términos propios (el ID del juego 0 significa global)",
"密钥": "Clave",
"記号": "Marca",
"选择文件": "Seleccionar archivo",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Mostrar / ocultar la traducción histórica",
"全屏/恢复游戏窗口": "Pantalla completa / restaurar la ventana del juego",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "El modelo OCR del idioma no se ha descargado, por favor use después de descargar el modelo a la ruta files / OCR [configuración adicional] - > descarga de recursos] - > paquete de lenguaje ocr]",
"使用VNDB数据替换人名": "Reemplazar nombres con datos vndb",
"文本输出": "Salida de texto",
"自动输出提取的文本": "Salida automática del Texto extraído",
"缩放": "Zoom",
@ -653,7 +648,6 @@
"左移": "Desplazamiento a la izquierda",
"右移": "A la derecha",
"启动游戏不修改顺序": "Iniciar el juego sin modificar el orden",
"使用自定义优化": "Usar optimizaciones personalizadas",
"游戏管理": "Gestión de juegos",
"显示标题": "Mostrar título",
"收藏": "Colección",
@ -815,5 +809,12 @@
"延申": "Extensión",
"进入时才显示": "Se muestra al entrar",
"语音跳过": "Salto de voz",
"条件": "Condiciones"
"条件": "Condiciones",
"指定人名翻译": "Traducción de nombre designado",
"专有名词翻译": "Traducción de términos propios",
"VNR共享辞书": "Diccionario compartido vnr",
"自定义优化": "Optimización personalizada",
"人名": "Nombre",
"游戏ID 0表示全局": "El ID del juego 0 Indica global",
"游戏数据": "Datos del juego"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Remplacement simple du contenu (filtre Direct si le remplacement est vide)",
"使用正则表达式替换": "Remplacer par une expression régulière",
"自定义python处理": "Personnalisation du traitement Python",
"使用专有名词翻译": "Traduction avec des noms propres",
"使用翻译结果修正": "Utiliser les résultats de la traduction pour corriger",
"使用VNR共享辞书": "Partager un dictionnaire avec VNR",
"辞书设置": "Configuration du dictionnaire",
"小学馆辞书": "Dictionnaire de l'école primaire",
"快捷键设置": "Paramètres des raccourcis clavier",
@ -148,7 +145,6 @@
"sqlite文件": "Fichiers SQLite",
"替换为": "Remplacer par:",
"去除重复字符(若为1则自动分析去重)": "Supprimer les caractères dupliqués (analyser automatiquement si 1)",
"专有名词翻译设置(游戏ID 0表示全局)": "Paramètres de traduction de noms propres (id de jeu 0 pour global)",
"密钥": "Clé secrète",
"記号": "Marque",
"选择文件": "Sélectionner un fichier",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Afficher / masquer les traductions historiques",
"全屏/恢复游戏窗口": "Plein écran / restaurer la fenêtre de jeu",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Le modèle OCR pour cette langue n'a pas été téléchargé, utilisez - le après [autres paramètres] - > [ressources télécharger] - > [OCR Language Pack] télécharger le modèle Décompresser le chemin files / ocr",
"使用VNDB数据替换人名": "Remplacement des noms de personnes par des données vndb",
"文本输出": "Sortie de texte",
"自动输出提取的文本": "Sortie automatique du texte extrait",
"缩放": "Zoom",
@ -653,7 +648,6 @@
"左移": "Déplacement à gauche",
"右移": "Déplacement à droite",
"启动游戏不修改顺序": "Lancer le jeu sans modifier l'ordre",
"使用自定义优化": "Utiliser l'optimisation personnalisée",
"游戏管理": "Gestion des jeux",
"显示标题": "Afficher le titre",
"收藏": "Collections",
@ -815,5 +809,12 @@
"延申": "Yanshin",
"进入时才显示": "Ne s'affiche qu'à l'entrée",
"语音跳过": "Voix skip",
"条件": "Conditions"
"条件": "Conditions",
"指定人名翻译": "Nom de la personne désignée traduction",
"专有名词翻译": "Traduction de noms propres",
"VNR共享辞书": "VNR partager discours",
"自定义优化": "Optimisation personnalisée",
"人名": "Nom de la personne",
"游戏ID 0表示全局": "Game ID 0 pour global",
"游戏数据": "Données du jeu"
}

View File

@ -112,9 +112,6 @@
"简单替换内容(若替换为空则直接过滤)": "Basta sostituire il contenuto (se la sostituzione è vuota, filtrarlo direttamente)",
"使用正则表达式替换": "Sostituisci con espressioni regolari",
"自定义python处理": "Elaborazione Python personalizzata",
"使用专有名词翻译": "Traduci con sostantivo proprio",
"使用翻译结果修正": "Correzione utilizzando i risultati della traduzione",
"使用VNR共享辞书": "Utilizzo di VNR per condividere dizionari",
"辞书设置": "Impostazioni del dizionario",
"小学馆辞书": "Dizionario della biblioteca della scuola elementare",
"快捷键设置": "Impostazioni dei tasti di scelta rapida",
@ -142,7 +139,6 @@
"sqlite文件": "File Sqlite",
"替换为": "Sostituisci con",
"去除重复字符(若为1则自动分析去重)": "Rimuovere i caratteri duplicati (se è 1, analizzare e rimuovere automaticamente i duplicati)",
"专有名词翻译设置(游戏ID 0表示全局)": "Impostazioni di traduzione del sostantivo appropriato (ID gioco 0 significa globale)",
"密钥": "chiave segreta",
"記号": "Simbolo",
"选择文件": "Seleziona file",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Mostra/nasconde traduzioni storiche",
"全屏/恢复游戏窗口": "Finestra di gioco a schermo intero/ripristino",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Il modello OCR per questa lingua non è stato scaricato. Si prega di decomprimere il modello nel percorso file/ocr in [Altre impostazioni] ->[Scaricare risorse] ->[OCR Language Pack] e utilizzarlo",
"使用VNDB数据替换人名": "Sostituisci i nomi delle persone con dati VNDB",
"文本输出": "Output testo",
"自动输出提取的文本": "Estrai automaticamente il testo estratto",
"缩放": "zoom",
@ -653,7 +648,6 @@
"左移": "Spostamento sinistro",
"右移": "Spostamento destro",
"启动游戏不修改顺序": "Inizia il gioco senza cambiare l'ordine",
"使用自定义优化": "Usa ottimizzazione personalizzata",
"游戏管理": "Gestione giochi",
"显示标题": "mostra intestazione",
"收藏": "raccolta",
@ -815,5 +809,12 @@
"延申": "Estensione",
"进入时才显示": "Visualizzato solo all'entrata",
"语音跳过": "Salto vocale",
"条件": "condizione"
"条件": "condizione",
"指定人名翻译": "Traduzione del nome designato",
"专有名词翻译": "Traduzione di termini proprietari",
"VNR共享辞书": "Lexicon condiviso VNR",
"自定义优化": "Ottimizzazione personalizzata",
"人名": "nome",
"游戏ID 0表示全局": "L'ID del gioco 0 rappresenta globale",
"游戏数据": "Dati di gioco"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "単純置換(空に置換する場合は直接フィルタ)",
"使用正则表达式替换": "正規表現で置換",
"自定义python处理": "カスタムpython処理",
"使用专有名词翻译": "固有名詞翻訳の使用",
"使用翻译结果修正": "翻訳結果修正の使用",
"使用VNR共享辞书": "VNRを使用した辞書の共有",
"辞书设置": "辞書の設定",
"小学馆辞书": "小学館の辞書",
"快捷键设置": "ショートカット設定",
@ -148,7 +145,6 @@
"sqlite文件": "sqliteファイル",
"替换为": "置換後",
"去除重复字符(若为1则自动分析去重)": "重複した文字を除去する1の場合は自動解析で重複除外",
"专有名词翻译设置(游戏ID 0表示全局)": "固有名詞翻訳設定ゲームID 0はグローバルを表す",
"密钥": "キー",
"記号": "記号",
"选择文件": "ファイルを選択",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "履歴翻訳の表示/非表示",
"全屏/恢复游戏窗口": "フルスクリーン/リカバリゲームウィンドウ",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "この言語のOCRモデルはダウンロードされていません。[その他の設定]->[リソースダウンロード]->[OCR言語パック]ダウンロードモデルをfiles/ocrパスに解凍した後に使用してください",
"使用VNDB数据替换人名": "VNDBデータを使用した人名の置換",
"文本输出": "テキスト出力",
"自动输出提取的文本": "抽出されたテキストを自動的に出力",
"缩放": "ズーム",
@ -653,7 +648,6 @@
"左移": "左へ移動",
"右移": "右へ移動",
"启动游戏不修改顺序": "ゲームを起動しても順序は変更されません",
"使用自定义优化": "カスタム最適化の使用",
"游戏管理": "ゲーム管理",
"显示标题": "タイトルを表示",
"收藏": "コレクション",
@ -815,5 +809,12 @@
"延申": "に言及",
"进入时才显示": "入力時に表示",
"语音跳过": "音声スキップ",
"条件": "条件#ジョウケン#"
"条件": "条件#ジョウケン#",
"指定人名翻译": "指定人名翻訳",
"专有名词翻译": "固有名詞の翻訳",
"VNR共享辞书": "VNR共有辞書",
"自定义优化": "カスタム最適化",
"人名": "人名",
"游戏ID 0表示全局": "ゲームID 0はグローバルを表す",
"游戏数据": "ゲームデータ"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "단순 바꿀 내용 (비어 있으면 직접 필터링)",
"使用正则表达式替换": "정규 표현식으로 바꾸기",
"自定义python处理": "사용자 정의 python 처리",
"使用专有名词翻译": "고유 명사를 사용하여 번역하다.",
"使用翻译结果修正": "번역 결과를 사용하여 수정",
"使用VNR共享辞书": "VNR을 사용하여 사서 공유",
"辞书设置": "사서 설정",
"小学馆辞书": "소학관 사서",
"快捷键设置": "단축키 설정",
@ -148,7 +145,6 @@
"sqlite文件": "sqlite 파일",
"替换为": "다음으로 대체",
"去除重复字符(若为1则自动分析去重)": "중복 문자 제거 (1인 경우 자동으로 분석 중복 제거)",
"专有名词翻译设置(游戏ID 0表示全局)": "고유 명사 번역 설정(게임 ID 0은 전역을 나타냄)",
"密钥": "키",
"記号": "기호",
"选择文件": "파일 선택",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "히스토리 번역 표시 / 숨기기",
"全屏/恢复游戏窗口": "전체 화면 / 게임 창 복원",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "이 언어의 OCR 모델을 다운로드하지 않았습니다. [기타 설정] -> [에셋 다운로드] -> [OCR 언어 팩] 모델을 다운로드하여 files/ocr 경로로 압축을 푼 후 사용하십시오.",
"使用VNDB数据替换人名": "VNDB 데이터로 사람 이름 바꾸기",
"文本输出": "텍스트 출력",
"自动输出提取的文本": "추출된 텍스트 자동 내보내기",
"缩放": "줌",
@ -653,7 +648,6 @@
"左移": "왼쪽 이동",
"右移": "오른쪽 이동",
"启动游戏不修改顺序": "게임을 시작하면 순서를 수정하지 않습니다.",
"使用自定义优化": "사용자 정의 최적화 사용",
"游戏管理": "게임 관리",
"显示标题": "제목 표시",
"收藏": "모음집",
@ -815,5 +809,12 @@
"延申": "연장",
"进入时才显示": "들어갈 때만 표시",
"语音跳过": "음성 건너뛰기",
"条件": "조건"
"条件": "조건",
"指定人名翻译": "사용자 이름 번역 지정",
"专有名词翻译": "고유명사 번역",
"VNR共享辞书": "VNR 공유 사서",
"自定义优化": "사용자 정의 최적화",
"人名": "인명",
"游戏ID 0表示全局": "게임 ID 0은 전역을 나타냅니다.",
"游戏数据": "게임 데이터"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Wystarczy wymienić zawartość (jeśli wymiana jest pusta, filtruj ją bezpośrednio)",
"使用正则表达式替换": "Zastąp wyrażeniami regularnymi",
"自定义python处理": "Niestandardowe przetwarzanie Pythona",
"使用专有名词翻译": "Przetłumacz rzeczownikiem właściwym",
"使用翻译结果修正": "Korekta przy użyciu wyników tłumaczenia",
"使用VNR共享辞书": "Używanie VNR do udostępniania słowników",
"辞书设置": "Ustawienia słownika",
"小学馆辞书": "Słownik biblioteki szkół podstawowych",
"快捷键设置": "Ustawienia skrótu",
@ -148,7 +145,6 @@
"sqlite文件": "Plik Sqlite",
"替换为": "Zastąp na",
"去除重复字符(若为1则自动分析去重)": "Usuń duplikaty znaków (jeśli jest to 1, automatycznie analizuj i usuń duplikaty)",
"专有名词翻译设置(游戏ID 0表示全局)": "Ustawienia tłumaczenia rzeczownika właściwego (ID gry 0 oznacza globalny)",
"密钥": "tajny klucz",
"記号": "Symbol",
"选择文件": "Wybierz plik",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Pokaż/ukryj tłumaczenia historyczne",
"全屏/恢复游戏窗口": "Pełny ekran/przywróć okno gry",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Model OCR dla tego języka nie został pobrany. Proszę rozpakować model do ścieżki plików/ocr w [Inne ustawienia] ->[Pobieranie zasobów] ->[OCR Language Pack] i użyć go",
"使用VNDB数据替换人名": "Zastąp nazwiska osób na dane VNDB",
"文本输出": "Wyjście tekstowe",
"自动输出提取的文本": "Automatycznie wyświetlać wyodrębniony tekst",
"缩放": "powiększenie",
@ -653,7 +648,6 @@
"左移": "Przesunięcie w lewo",
"右移": "Prawa zmiana",
"启动游戏不修改顺序": "Rozpocznij grę bez zmiany kolejności",
"使用自定义优化": "Użyj niestandardowej optymalizacji",
"游戏管理": "Zarządzanie grą",
"显示标题": "pokaż nagłówek",
"收藏": "kolekcja",
@ -815,5 +809,12 @@
"延申": "Rozszerzenie",
"进入时才显示": "Wyświetlane tylko przy wejściu",
"语音跳过": "Przeskakiwanie głosu",
"条件": "stan"
"条件": "stan",
"指定人名翻译": "Tłumaczenie oznaczonej nazwy",
"专有名词翻译": "Tłumaczenie terminów własności",
"VNR共享辞书": "Wspólny leksykon VNR",
"自定义优化": "Optymalizacja niestandardowa",
"人名": "nazwa",
"游戏ID 0表示全局": "Identyfikator gry 0 reprezentuje globalny",
"游戏数据": "Dane gry"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Заменить содержимое (Если замена пустая, то фильтруйте напрямую)",
"使用正则表达式替换": "Заменить регулярными выражениями",
"自定义python处理": "Пользовательская обработка на python",
"使用专有名词翻译": "Перевод имени собственного",
"使用翻译结果修正": "Коррекцию результата перевода",
"使用VNR共享辞书": "Словать VNR",
"辞书设置": "Настройка словаря",
"小学馆辞书": "Словарь Xiaoxueguan",
"快捷键设置": "Настройка Комбинации клавиш",
@ -148,7 +145,6 @@
"sqlite文件": "Файл sqlite",
"替换为": "Заменить на:",
"去除重复字符(若为1则自动分析去重)": "Удалить повторяющиеся символы (1 - автоматически)",
"专有名词翻译设置(游戏ID 0表示全局)": "Настройка перевода имен собственных (идентификатор игры 0 означает глобальный)",
"密钥": "Ключ",
"記号": "знак",
"选择文件": "Выбор файла",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Показать / скрыть исторический перевод",
"全屏/恢复游戏窗口": "Полноэкранное / Восстановление игрового окна",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Модель OCR для этого языка не загружена, используйте ее после того, как [другие настройки] - > [загрузка ресурсов] - > [языковой пакет OCR] загрузит модель на путь files / ocr",
"使用VNDB数据替换人名": "Использование данных VNDB для замены имен",
"文本输出": "Вывод текста",
"自动输出提取的文本": "Автоматический вывод извлеченного текста",
"缩放": "Масштаб",
@ -653,7 +648,6 @@
"左移": "Переместить налево",
"右移": "Направо.",
"启动游戏不修改顺序": "Запустить игру без изменения порядка",
"使用自定义优化": "Использовать пользовательскую оптимизацию",
"游戏管理": "Управление играми",
"显示标题": "Показать заголовок",
"收藏": "Коллекция",
@ -815,5 +809,12 @@
"延申": "Яньшэнь",
"进入时才显示": "Показать при входе",
"语音跳过": "Голос скачать",
"条件": "Условия"
"条件": "Условия",
"指定人名翻译": "Имя назначенного переводчика",
"专有名词翻译": "Перевод терминов",
"VNR共享辞书": "VNR Обмен словарями",
"自定义优化": "Настройка оптимизации",
"人名": "Имя человека",
"游戏ID 0表示全局": "Идентификатор игры 0 означает глобальный",
"游戏数据": "Игровые данные"
}

View File

@ -141,7 +141,6 @@
"繁简转换": "การแปลงที่ง่ายดาย",
"设置": "การตั้งค่า",
"接受的编码": "การเข้ารหัสที่ยอมรับ",
"专有名词翻译设置(游戏ID 0表示全局)": "การตั้งค่าการแปลคำนามที่เป็นกรรมสิทธิ์ (เกม ID 0 หมายถึงทั่วโลก)",
"自定义搜索": "ปรับแต่งการค้นหา",
"補助記号": "เครื่องหมายเงินอุดหนุน",
"小学馆辞书": "หนังสือลาออกจากโรงเรียนประถมศึกษา",
@ -281,7 +280,6 @@
"过滤纯英文": "กรองภาษาอังกฤษ",
"预处理方法": "วิธีการปรับสภาพ",
"ギャラ子": "ギ สกุลเงิน",
"使用翻译结果修正": "แก้ไขโดยใช้ผลการแปล",
"使用代理的项目": "โครงการที่ใช้ตัวแทน",
"分词器": "ตัวแบ่งคำ",
"西班牙语": "สเปน",
@ -323,7 +321,6 @@
"选择文本": "เลือกข้อความ",
"json文件": "ไฟล์ json",
"剪贴板": "คลิปบอร์ด",
"使用VNR共享辞书": "แบ่งปันสำนวนกับ VNR",
"系统未安装": "ระบบยังไม่ได้ติดตั้ง",
"在重叠显示的字间插入空格": "แทรกช่องว่างระหว่างคำที่แสดงทับซ้อนกัน",
"显示/隐藏翻译窗口": "แสดง/ซ่อนหน้าต่างการแปล",
@ -333,7 +330,6 @@
"保存路径": "บันทึกพาธ",
"编辑": "บรรณาธิการ",
"ついなちゃん": "ついなちゃん",
"使用专有名词翻译": "ใช้การแปลคำนามที่เป็นกรรมสิทธิ์",
"选择": "เลือก",
"最邻近": "ใกล้เคียงที่สุด",
"显示分词结果": "แสดงผลการแบ่งคำ",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "แสดง/ซ่อนการแปลประวัติ",
"全屏/恢复游戏窗口": "เต็มหน้าจอ/กู้คืนหน้าต่างเกม",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "ไม่มีการดาวน์โหลดรุ่น OCR สำหรับภาษาโปรดใช้หลังจาก [การตั้งค่าอื่น ๆ] -> [ดาวน์โหลดทรัพยากร] -> [ชุดภาษา OCR] ดาวน์โหลดแบบจำลองเปิดเส้นทางไฟล์ / OCR",
"使用VNDB数据替换人名": "แทนที่ชื่อบุคคลด้วยข้อมูล VNDB",
"文本输出": "ข้อความออก",
"自动输出提取的文本": "ส่งออกข้อความที่สกัดโดยอัตโนมัติ",
"缩放": "ซูม",
@ -653,7 +648,6 @@
"左移": "เลื่อนซ้าย",
"右移": "ย้ายขวา",
"启动游戏不修改顺序": "เริ่มเกมโดยไม่มีการปรับเปลี่ยนลำดับ",
"使用自定义优化": "ใช้การปรับแต่งให้เหมาะสม",
"游戏管理": "การจัดการเกม",
"显示标题": "แสดงหัวเรื่อง",
"收藏": "คอลเลกชัน",
@ -815,5 +809,12 @@
"延申": "ยันชิน",
"进入时才显示": "แสดงเฉพาะเมื่อเข้า",
"语音跳过": "ข้ามเสียง",
"条件": "เงื่อนไข"
"条件": "เงื่อนไข",
"指定人名翻译": "ระบุการแปลชื่อบุคคล",
"专有名词翻译": "การแปลคำนามที่เป็นกรรมสิทธิ์",
"VNR共享辞书": "VNR สำนวนที่ใช้ร่วมกัน",
"自定义优化": "การปรับแต่งให้เหมาะสม",
"人名": "ชื่อบุคคล",
"游戏ID 0表示全局": "รหัสเกม 0 หมายถึงทั่วโลก",
"游戏数据": "ข้อมูลเกม"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Basit değiştirme içeriği (değiştirme boş ise direkt filtrelecek)",
"使用正则表达式替换": "Düzenli ifade ile değiştir",
"自定义python处理": "Özel Python işleme",
"使用专有名词翻译": "Doğru isim çevirimi kullan",
"使用翻译结果修正": "Tercüme sonuçlarını düzeltmek için kullan",
"使用VNR共享辞书": "Sözlükleri paylaşmak için VNR kullanın",
"辞书设置": "Sözlük ayarları",
"小学馆辞书": "İlkokul sözlüğü",
"快捷键设置": "Kısayol tuş ayarları",
@ -148,7 +145,6 @@
"sqlite文件": "Sqlite dosyası",
"替换为": "Bununla değiştir",
"去除重复字符(若为1则自动分析去重)": "Çiftli karakterleri sil (1 ise otomatik analiz edilecek ve silecek)",
"专有名词翻译设置(游戏ID 0表示全局)": "Özel isim tercüme ayarları (oyun kimliği 0 küresel gösteriyor)",
"密钥": "gizli anahtar",
"記号": "Simbol",
"选择文件": "Dosya Seç",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Tarihi çevirimleri göster/gizle",
"全屏/恢复游戏窗口": "Full screen/restore game window",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Bu dilin OCR modeli indirilmedi. Lütfen modelini [Diğer Ayarlar] ->[Kaynak İndirme] ->[OCR Dil Paketi] içindeki dosyalara/ikiyüzlü yola bağlayın ve kullanın",
"使用VNDB数据替换人名": "İnsan isimlerini VNDB veriyle değiştir",
"文本输出": "Metin çıkış",
"自动输出提取的文本": "Automatically output extracted text",
"缩放": "zoom",
@ -653,7 +648,6 @@
"左移": "Sol vardiyası",
"右移": "Sağ değişiklik",
"启动游戏不修改顺序": "Düzeni değiştirmeden oyunu başlat",
"使用自定义优化": "Özel optimizasyon kullan",
"游戏管理": "Oyun Yönetimi",
"显示标题": "başlığı göster",
"收藏": "koleksiyon",
@ -815,5 +809,12 @@
"延申": "Uzantı",
"进入时才显示": "Sadece giriş üzerinde gösterilir",
"语音跳过": "Ses atlama",
"条件": "durum"
"条件": "durum",
"指定人名翻译": "Tasarlanmış İsim Çevirmesi",
"专有名词翻译": "Özel terimlerin çevirimi",
"VNR共享辞书": "VNR Paylaşılmış Lexicon",
"自定义优化": "Özel optimizasyon",
"人名": "isim",
"游戏ID 0表示全局": "Oyun ID 0 küresel olarak temsil ediyor",
"游戏数据": "Oyun verileri"
}

View File

@ -112,9 +112,6 @@
"简单替换内容(若替换为空则直接过滤)": "Просто замініть вміст (якщо заміна порожня, фільтруйте його безпосередньо)",
"使用正则表达式替换": "Замінити формальними виразами",
"自定义python处理": "Custom Python processing",
"使用专有名词翻译": "Переклад з правильною назвою",
"使用翻译结果修正": "Виправка за допомогою результатів перекладу",
"使用VNR共享辞书": "Використання VNR для поділу словників",
"辞书设置": "Параметри словника",
"小学馆辞书": "Словник бібліотеки основних школ",
"快捷键设置": "Параметри клавіш скорочення",
@ -142,7 +139,6 @@
"sqlite文件": "Файл Sqlite",
"替换为": "Замінити за",
"去除重复字符(若为1则自动分析去重)": "Вилучити дублікати символи (якщо це 1, автоматично аналізувати і вилучити дублікати)",
"专有名词翻译设置(游戏ID 0表示全局)": "Параметри перекладу належної назви (ІД гри 0 означає глобальну)",
"密钥": "секретний ключ",
"記号": "Символ",
"选择文件": "Виберіть файл",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Показувати/сховати історичні переклади",
"全屏/恢复游戏窗口": "Повний екран / відновити вікно гри",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Модель OCR для цієї мови не було звантажено. Будь ласка, відкрийте модель до шляху до файлів/ocr у [Інші параметри] ->[Звантаження ресурсів] ->[Пакет мови OCR] і скористайтеся ним",
"使用VNDB数据替换人名": "Замінити назви людей даними VNDB",
"文本输出": "Вивід тексту",
"自动输出提取的文本": "Автоматично виводити вилучений текст",
"缩放": "масштаб",
@ -653,7 +648,6 @@
"左移": "Ліва зміна",
"右移": "Права зміна",
"启动游戏不修改顺序": "Почати гру без зміни порядку",
"使用自定义优化": "Використовувати нетипову оптимізацію",
"游戏管理": "Керування грами",
"显示标题": "показувати заголовок",
"收藏": "збірка",
@ -815,5 +809,12 @@
"延申": "Розширення",
"进入时才显示": "Показано лише після запису",
"语音跳过": "Пропускання голосу",
"条件": "умови"
"条件": "умови",
"指定人名翻译": "Переклад визначеної назви",
"专有名词翻译": "Переклад приєднаних термінів",
"VNR共享辞书": "Спільна ліксикона VNR",
"自定义优化": "Нетипова оптимізація",
"人名": "назва",
"游戏ID 0表示全局": "ІД гри 0 означає глобальну",
"游戏数据": "Дані гри"
}

View File

@ -118,9 +118,6 @@
"简单替换内容(若替换为空则直接过滤)": "Nội dung thay thế đơn giản (lọc trực tiếp nếu thay thế bằng trống)",
"使用正则表达式替换": "Sử dụng Regular Expression",
"自定义python处理": "Xử lý Python tùy chỉnh",
"使用专有名词翻译": "Bản dịch của proprietary nouns",
"使用翻译结果修正": "Chỉnh sửa với kết quả dịch",
"使用VNR共享辞书": "Chia sẻ từ điển với VNR",
"辞书设置": "Thiết lập từ điển",
"小学馆辞书": "Thư từ trường tiểu học",
"快捷键设置": "Thiết lập phím tắt",
@ -148,7 +145,6 @@
"sqlite文件": "Tập tin sqlite",
"替换为": "Thay thế bằng",
"去除重复字符(若为1则自动分析去重)": "Loại bỏ các ký tự trùng lặp (nếu là 1 thì tự động phân tích trọng lượng)",
"专有名词翻译设置(游戏ID 0表示全局)": "Cài đặt dịch danh từ độc quyền (ID trò chơi 0 cho toàn cầu)",
"密钥": "Chìa khóa",
"記号": "Đánh dấu",
"选择文件": "Chọn tập tin",
@ -632,7 +628,6 @@
"显示/隐藏历史翻译": "Hiện/ẩn bản dịch lịch sử",
"全屏/恢复游戏窗口": "Toàn màn hình/Khôi phục cửa sổ trò chơi",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "Mô hình OCR cho ngôn ngữ này chưa được tải xuống, vui lòng sử dụng sau khi [Cài đặt bổ sung] ->[Tải xuống tài nguyên] ->[Gói ngôn ngữ OCR] mô hình tải xuống đã được giải nén vào đường dẫn files/ocr",
"使用VNDB数据替换人名": "Thay tên người bằng dữ liệu VNDB",
"文本输出": "Xuất văn bản",
"自动输出提取的文本": "Tự động xuất văn bản đã trích xuất",
"缩放": "Phóng to",
@ -653,7 +648,6 @@
"左移": "Dịch trái",
"右移": "Dịch phải",
"启动游戏不修改顺序": "Bắt đầu trò chơi Không thay đổi thứ tự",
"使用自定义优化": "Sử dụng Custom Optimization",
"游戏管理": "Quản lý trò chơi",
"显示标题": "Hiện tiêu đề",
"收藏": "Bộ sưu tập",
@ -815,5 +809,12 @@
"延申": "Dương Thân",
"进入时才显示": "Hiển thị khi vào",
"语音跳过": "Bỏ qua giọng nói",
"条件": "Điều kiện"
"条件": "Điều kiện",
"指定人名翻译": "Name",
"专有名词翻译": "Bản dịch của proprietary noun",
"VNR共享辞书": "VNR chia sẻ thư từ",
"自定义优化": "Tối ưu hóa tùy chỉnh",
"人名": "Tên người",
"游戏ID 0表示全局": "Game ID 0 có nghĩa là toàn cầu",
"游戏数据": "Dữ liệu trò chơi"
}

View File

@ -143,7 +143,6 @@
"设置": "",
"接受的编码": "",
"手动翻译": "",
"专有名词翻译设置(游戏ID 0表示全局)": "",
"補助記号": "",
"小学馆辞书": "",
"项目地址": "",
@ -282,7 +281,6 @@
"过滤纯英文": "",
"预处理方法": "",
"ギャラ子": "",
"使用翻译结果修正": "",
"使用代理的项目": "",
"分词器": "",
"西班牙语": "",
@ -323,7 +321,6 @@
"选择文本": "",
"json文件": "",
"剪贴板": "",
"使用VNR共享辞书": "",
"系统未安装": "",
"在重叠显示的字间插入空格": "",
"显示/隐藏翻译窗口": "",
@ -333,7 +330,6 @@
"保存路径": "",
"编辑": "",
"ついなちゃん": "",
"使用专有名词翻译": "",
"选择": "",
"最邻近": "",
"显示分词结果": "",
@ -639,7 +635,6 @@
"显示/隐藏历史翻译": "",
"全屏/恢复游戏窗口": "",
"未下载该语言的OCR模型,请在[其他设置]->[资源下载]->[OCR语言包]下载模型解压到files/ocr路径后使用": "",
"使用VNDB数据替换人名": "",
"文本输出": "",
"自动输出提取的文本": "",
"缩放": "",
@ -660,7 +655,6 @@
"左移": "",
"右移": "",
"启动游戏不修改顺序": "",
"使用自定义优化": "",
"游戏管理": "",
"显示标题": "",
"收藏": "",
@ -815,5 +809,12 @@
"延申": "",
"进入时才显示": "",
"语音跳过": "",
"条件": ""
"条件": "",
"指定人名翻译": "",
"专有名词翻译": "",
"VNR共享辞书": "",
"自定义优化": "",
"人名": "",
"游戏ID 0表示全局": "",
"游戏数据": ""
}

View File

@ -9,8 +9,7 @@
> **一款galgame翻译器**
### <a href="https://lunatranslator.xyz/#/zh/" target="_blank">使用说明</a> <a href="https://space.bilibili.com/592120404/video" target="_blank">视频教程</a> [交流群912525396](https://lunatranslator.xyz/Resource/QQGroup)
### <a href="https://docs.lunatranslator.xyz/#/zh/" target="_blank">使用说明</a> <a href="https://space.bilibili.com/592120404/video" target="_blank">视频教程</a> [交流群912525396](https://lunatranslator.xyz/Resource/QQGroup)
## 功能支持

View File

@ -12,7 +12,6 @@
### <a href="https://docs.lunatranslator.xyz/#/en/" target="_blank">Documentation</a>
Welcome friends who want to help us improve the documentation! [Documentation Repo](https://lunatranslator.xyz/Github/LunaTranslator)
## Features

View File

@ -14,7 +14,6 @@
### <a href="https://docs.lunatranslator.xyz/#/ru/" target="_blank">Инструкция по настройке программы (Полностью на русском языке)</a>
Welcome friends who find it helpful to improve the documentation together.[Documentation Repo](https://lunatranslator.xyz/Github/LunaTranslator)
## Основные функции:

View File

@ -28,8 +28,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/version)
include(generate_product_version)
set(VERSION_MAJOR 5)
set(VERSION_MINOR 10)
set(VERSION_PATCH 1)
set(VERSION_MINOR 11)
set(VERSION_PATCH 0)
add_library(pch pch.cpp)
target_precompile_headers(pch PUBLIC pch.h)