diff --git a/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py b/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py index 4f388f91..a15fe20e 100644 --- a/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py +++ b/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py @@ -1,4 +1,4 @@ -import functools, time +import functools, time, qtawesome from PyQt5.QtWidgets import ( QPushButton, QDialog, @@ -32,7 +32,16 @@ from PyQt5.QtWidgets import ( QAction, QTabBar, ) -from PyQt5.QtGui import QIntValidator, QResizeEvent, QPixmap, QPainter +from PyQt5.QtGui import ( + QCloseEvent, + QIntValidator, + QPaintEvent, + QResizeEvent, + QPixmap, + QPainter, + QPen, + QColor, +) from PyQt5.QtCore import Qt from gui.usefulwidget import ( getsimplecombobox, @@ -117,11 +126,11 @@ class ItemWidget(QWidget): # margin = ( # self.itemw - self.imgw # ) // 2 # globalconfig['dialog_savegame_layout']['margin'] - margin=globalconfig["dialog_savegame_layout"]["margin"] - textH=globalconfig["dialog_savegame_layout"]["textH"] - self.imgw = self.itemw-2*margin - self.imgh = self.itemh-textH-2*margin - # + margin = globalconfig["dialog_savegame_layout"]["margin"] + textH = globalconfig["dialog_savegame_layout"]["textH"] + self.imgw = self.itemw - 2 * margin + self.imgh = self.itemh - textH - 2 * margin + # self.setFixedSize(QSize(self.itemw, self.itemh)) self.setFocusPolicy(Qt.StrongFocus) self.maskshowfileexists = QLabel(self) @@ -129,11 +138,11 @@ class ItemWidget(QWidget): layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self._img = IMGWidget(self.imgw, self.imgh, pixmap) - _w=QWidget() - _w.setStyleSheet('background-color: rgba(255,255,255, 0);') - wrap=QVBoxLayout() + _w = QWidget() + _w.setStyleSheet("background-color: rgba(255,255,255, 0);") + wrap = QVBoxLayout() _w.setLayout(wrap) - _w.setFixedHeight(self.imgh+2*margin) + _w.setFixedHeight(self.imgh + 2 * margin) wrap.setContentsMargins(margin, margin, margin, margin) wrap.addWidget(self._img) layout.addWidget(_w) @@ -186,13 +195,14 @@ class IMGWidget(QLabel): pixmap = QPixmap(self.size()) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) - painter.setRenderHint(QPainter.SmoothPixmapTransform) + painter.setRenderHint(QPainter.SmoothPixmapTransform) painter.setRenderHint(QPainter.Antialiasing) painter.drawPixmap(self.getrect(), self.pix) painter.end() - + self.setPixmap(pixmap) self.setFixedSize(pixmap.size()) + def getrect(self): size = self.adaptsize(self.pix.size()) rect = QRect() @@ -525,6 +535,14 @@ class browserdialog(QDialog): self.browser.navigate(link) +def getvndbrealtags(vndbtags_naive): + vndbtags = [] + for tagid in vndbtags_naive: + if tagid in globalconfig["vndbcache"]["tagid2name"]: + vndbtags.append(globalconfig["vndbcache"]["tagid2name"][tagid]) + return vndbtags + + @Singleton class dialog_setting_game(QDialog): def selectexe(self): @@ -611,7 +629,7 @@ class dialog_setting_game(QDialog): vndbid.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) vndbid.textEdited.connect(functools.partial(vidchangedtask, exepath)) - + statiswids = [ QLabel(_TR("统计信息")), getcolorbutton( @@ -630,6 +648,13 @@ class dialog_setting_game(QDialog): icon="fa.book", constcolor="#FF69B4", ), + getcolorbutton( + "", + "", + lambda: vidchangedtask(exepath, savehook_new_data[exepath]["vid"]), + icon="fa.refresh", + constcolor="#FF69B4", + ), ] formLayout.addLayout(getboxlayout(statiswids)) editpath = QLineEdit(exepath) @@ -725,10 +750,65 @@ class dialog_setting_game(QDialog): methodtab.addTab(self.gethooktab(exepath), "HOOK") methodtab.addTab(self.getpretranstab(exepath), _TR("预翻译")) methodtab.addTab(self.getttssetting(exepath), _TR("语音")) + methodtab.addTab(self.getlabelsetting(exepath), _TR("标签")) formLayout.addWidget(methodtab) self.show() + def getlabelsetting(self, exepath): + _w = QWidget() + formLayout = QVBoxLayout() + # formLayout.setAlignment(Qt.AlignTop) + _w.setLayout(formLayout) + formLayout.setContentsMargins(0, 0, 0, 0) + self.labelflow = ScrollFlow() + + def newitem(text, removeable): + qw = tagitem(text, removeable) + + def __(_qw, t): + _qw.remove() + i = savehook_new_data[exepath]["usertags"].index(t) + self.labelflow.removeidx(i) + savehook_new_data[exepath]["usertags"].remove(t) + + if removeable: + qw.removesignal.connect(functools.partial(__, qw)) + + def _lbclick(t): + self.parent().tagswidget.addTag(t) + + qw.labelclicked.connect(_lbclick) + self.labelflow.addwidget(qw) + + for tag in savehook_new_data[exepath]["usertags"]: + newitem(tag, True) + for tag in getvndbrealtags(savehook_new_data[exepath]["vndbtags"]): + newitem(tag, False) + formLayout.addWidget(self.labelflow) + _dict = {"new": 0} + + formLayout.addWidget(self.labelflow) + button = QPushButton(_TR("添加")) + + def _add(_): + tag = globalconfig["labelset"][_dict["new"]] + if tag not in savehook_new_data[exepath]["usertags"]: + savehook_new_data[exepath]["usertags"].append(tag) + newitem(tag, True) + + button.clicked.connect(_add) + + formLayout.addLayout( + getboxlayout( + [ + getsimplecombobox(globalconfig["labelset"], _dict, "new"), + button, + ] + ) + ) + return _w + def getttssetting(self, exepath): _w = QWidget() formLayout = QVBoxLayout() @@ -922,8 +1002,8 @@ class dialog_syssetting(QDialog): ("itemh", "高度"), # ("imgw", "图片宽度"), # ("imgh", "图片高度"), - ('margin','边距'), - ('textH','文字区高度') + ("margin", "边距"), + ("textH", "文字区高度"), ]: formLayout.addRow( (_TR(name)), @@ -1013,6 +1093,7 @@ class dialog_statistic(QDialog): threading.Thread(target=self.refresh).start() +@threader def startgame(game): try: if os.path.exists(game): @@ -1096,6 +1177,199 @@ def startgame(game): print_exc() +@Singleton_close +class labelsetedit(QDialog): + def __init__(self, p) -> None: + super().__init__(p) + try: + self.setWindowTitle(_TR("标签集")) + model = QStandardItemModel() + model.setHorizontalHeaderLabels( + _TRL( + [ + "删除", + "标签", + ] + ) + ) + self.hcmodel = model + + table = QTableView() + table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) + table.horizontalHeader().setStretchLastSection(True) + # table.setEditTriggers(QAbstractItemView.NoEditTriggers); + table.setSelectionBehavior(QAbstractItemView.SelectRows) + table.setSelectionMode((QAbstractItemView.SingleSelection)) + table.setWordWrap(False) + table.setModel(model) + self.hctable = table + + for row, k in enumerate(globalconfig["labelset"]): # 2 + self.newline(row, k) + formLayout = QVBoxLayout() + formLayout.addWidget(self.hctable) + button = QPushButton(_TR("添加行")) + button.clicked.connect(lambda _: self.newline(0, "")) + formLayout.addWidget(button) + self.setLayout(formLayout) + self.show() + except: + print_exc() + + def clicked2(self): + try: + globalconfig["labelset"].pop(self.hctable.currentIndex().row()) + self.hcmodel.removeRow(self.hctable.currentIndex().row()) + except: + pass + + def closeEvent(self, a0: QCloseEvent) -> None: + rows = self.hcmodel.rowCount() + rowoffset = 0 + dedump = set() + globalconfig["labelset"].clear() + for row in range(rows): + k = self.hcmodel.item(row, 1).text() + if k == "" or k in dedump: + rowoffset += 1 + continue + globalconfig["labelset"].append(k) + dedump.add(k) + + def newline(self, row, k): + self.hcmodel.insertRow(row, [QStandardItem(), QStandardItem(k)]) + self.hctable.setIndexWidget( + self.hcmodel.index(row, 0), + getcolorbutton( + "", "", self.clicked2, icon="fa.times", constcolor="#FF69B4" + ), + ) + + +class ClickableLabel(QLabel): + def __init__(self, parent=None): + super().__init__(parent) + self.setClickable(True) + + def setClickable(self, clickable): + self._clickable = clickable + + def mousePressEvent(self, event): + if self._clickable and event.button() == Qt.LeftButton: + self.clicked.emit() + + clicked = pyqtSignal() + + +class tagitem(QWidget): + + removesignal = pyqtSignal(str) + labelclicked = pyqtSignal(str) + + def remove(self): + self.hide() + _lay = self.layout() + _ws = [] + for i in range(_lay.count()): + witem = _lay.itemAt(i) + _ws.append(witem.widget()) + for w in _ws: + _lay.removeWidget(w) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + border_color = Qt.black + border_width = 1 + pen = QPen(border_color) + pen.setWidth(border_width) + painter.setPen(pen) + painter.drawRect(self.rect()) + + def __init__(self, tag, removeable=True) -> None: + super().__init__() + tagLayout = QHBoxLayout() + tagLayout.setContentsMargins(0, 0, 0, 0) + + self.setLayout(tagLayout) + + lb = ClickableLabel(tag) + lb.clicked.connect(lambda: self.labelclicked.emit(tag)) + tagLayout.addWidget(lb) + if removeable: + button = getcolorbutton( + None, + None, + lambda: self.removesignal.emit(tag), # self.removeTag(tag), + qicon=qtawesome.icon( + "fa.times", + color="#FF69B4", + ), + sizefixed=True, + ) + tagLayout.addWidget(button) + + +class TagWidget(QWidget): + tagschanged = pyqtSignal(tuple) + + def __init__(self, parent=None): + super().__init__(parent) + self.tags = [] + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(QLabel(_TR("标签"))) + self.setLayout(layout) + + self.lineEdit = QLineEdit() + self.lineEdit.returnPressed.connect(lambda: self.addTag(self.lineEdit.text())) + layout.addWidget(self.lineEdit) + self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) + + self.tag2widget = {} + layout.addWidget( + getcolorbutton( + "", + "", + lambda _: labelsetedit(parent), + icon="fa.gear", + constcolor="#FF69B4", + ), + ) + + def addTag(self, tag): + try: + + if not tag: + return + if tag in self.tag2widget: + return + self.tags.append(tag) + qw = tagitem(tag) + qw.removesignal.connect(self.removeTag) + + layout = self.layout() + # layout.insertLayout(layout.count() - 1, tagLayout) + layout.insertWidget(layout.count() - 2, qw) + self.tag2widget[tag] = qw + self.lineEdit.clear() + self.lineEdit.setFocus() + self.tagschanged.emit(tuple(self.tag2widget.keys())) + except: + print_exc() + + def removeTag(self, tag): + _w = self.tag2widget[tag] + _w.remove() + + self.layout().removeWidget(_w) + self.tag2widget.pop(tag) + self.lineEdit.setFocus() + self.tagschanged.emit(tuple(self.tag2widget.keys())) + + @Singleton_close class dialog_savedgame_new(saveposwindow): def startgame(self, game): @@ -1143,6 +1417,35 @@ class dialog_savedgame_new(saveposwindow): if len(savehook_new_list): self.flow.l._item_list[0].widget().setFocus() + def tagschanged(self, tags): + checkexists = _TR("存在") in tags + if checkexists: + _ = list(tags) + _.remove(_TR("存在")) + tags = tuple(_) + self.formLayout.removeWidget(self.flow) + self.idxsave.clear() + self.flow = ScrollFlow() + self.formLayout.insertWidget(self.formLayout.count() - 1, self.flow) + for k in savehook_new_list: + if checkexists and os.path.exists(k) == False: + continue + + # print(vndbtags) + notshow = False + for tag in tags: + if ( + tag not in getvndbrealtags(savehook_new_data[k]["vndbtags"]) + and tag not in savehook_new_data[k]["usertags"] + ): + notshow = True + break + if notshow: + continue + self.newline(k) + self.idxsave.append(k) + QApplication.processEvents() + def __init__(self, parent) -> None: super().__init__( parent, @@ -1153,11 +1456,14 @@ class dialog_savedgame_new(saveposwindow): self.setWindowTitle(_TR("已保存游戏")) if globalconfig["showintab_sub"]: showintab(int(self.winId()), True) - formLayout = QVBoxLayout() # + formLayout = QVBoxLayout() + self.tagswidget = TagWidget(self) + self.tagswidget.tagschanged.connect(self.tagschanged) + formLayout.addWidget(self.tagswidget) self.flow = ScrollFlow() formLayout.addWidget(self.flow) - + self.formLayout = formLayout buttonlayout = QHBoxLayout() self.buttonlayout = buttonlayout self.savebutton = [] @@ -1178,14 +1484,10 @@ class dialog_savedgame_new(saveposwindow): self.itemfocuschanged(False, None) self.show() self.idxsave = [] - for i, k in enumerate(savehook_new_list): - if globalconfig["hide_not_exists"] and os.path.exists(k) == False: - continue - self.newline(k) - self.idxsave.append(k) - if i == 0: - self.top1focus() - QApplication.processEvents() + if globalconfig["hide_not_exists"]: + self.tagswidget.addTag(_TR("存在")) + else: + self.tagschanged(tuple()) def showsettingdialog(self): idx = self.idxsave.index(self.currentfocuspath) diff --git a/LunaTranslator/LunaTranslator/gui/settingpage_cishu.py b/LunaTranslator/LunaTranslator/gui/settingpage_cishu.py index 26d453e6..7b20f26b 100644 --- a/LunaTranslator/LunaTranslator/gui/settingpage_cishu.py +++ b/LunaTranslator/LunaTranslator/gui/settingpage_cishu.py @@ -141,6 +141,10 @@ def setTabcishu_l(self): ("点击单词复制", 5), (getsimpleswitch(globalconfig, "usecopyword"), 1), ], + [ + ("使用原型查询", 5), + (getsimpleswitch(globalconfig, "usewordorigin"), 1), + ], [], [("辞书", 10)], ] diff --git a/LunaTranslator/LunaTranslator/gui/textbrowser.py b/LunaTranslator/LunaTranslator/gui/textbrowser.py index 29e7f68b..2a4ce1f9 100644 --- a/LunaTranslator/LunaTranslator/gui/textbrowser.py +++ b/LunaTranslator/LunaTranslator/gui/textbrowser.py @@ -490,7 +490,7 @@ class Textbrowser: ) if callback: self.searchmasklabels_clicked[labeli].callback = ( - functools.partial(callback, (word["orig"])) + functools.partial(callback, (word)) ) self.searchmasklabels_clicked[labeli + 1].setGeometry( @@ -503,9 +503,7 @@ class Textbrowser: if callback: self.searchmasklabels_clicked[ labeli + 1 - ].callback = functools.partial( - callback, (word["orig"]) - ) + ].callback = functools.partial(callback, (word)) if globalconfig["show_fenci"]: self.searchmasklabels[labeli].setGeometry(*pos1) @@ -540,7 +538,7 @@ class Textbrowser: self.searchmasklabels_clicked[labeli].show() if callback: self.searchmasklabels_clicked[labeli].callback = ( - functools.partial(callback, (word["orig"])) + functools.partial(callback, word) ) if globalconfig["show_fenci"]: self.searchmasklabels[labeli].setGeometry(*pos1) diff --git a/LunaTranslator/LunaTranslator/gui/translatorUI.py b/LunaTranslator/LunaTranslator/gui/translatorUI.py index b3956cd9..253bbb9d 100644 --- a/LunaTranslator/LunaTranslator/gui/translatorUI.py +++ b/LunaTranslator/LunaTranslator/gui/translatorUI.py @@ -273,6 +273,11 @@ class QUnFrameWindow(resizableframeless): ) and hira: def callback(word): + if globalconfig["usewordorigin"] == False: + word = word["orig"] + else: + word = word.get("origorig", word["orig"]) + if globalconfig["usecopyword"]: winsharedutils.clipboard_set(word) if globalconfig["usesearchword"]: diff --git a/LunaTranslator/LunaTranslator/gui/usefulwidget.py b/LunaTranslator/LunaTranslator/gui/usefulwidget.py index 8e1fff8b..2240509a 100644 --- a/LunaTranslator/LunaTranslator/gui/usefulwidget.py +++ b/LunaTranslator/LunaTranslator/gui/usefulwidget.py @@ -6,6 +6,7 @@ from PyQt5.QtWidgets import ( QMessageBox, QDialog, QLabel, + QSizePolicy, QHBoxLayout, ) from PyQt5.QtGui import QCursor, QCloseEvent, QColor, QTextCursor @@ -435,12 +436,16 @@ def getcolorbutton( enable=True, transparent=True, qicon=None, + sizefixed=False, ): if qicon is None: qicon = qtawesome.icon(icon, color=constcolor if constcolor else d[key]) - b = QPushButton(qicon, "") + b = QPushButton() + b.setIcon(qicon) b.setEnabled(enable) b.setIconSize(QSize(20, 20)) + if sizefixed: + b.setFixedSize(QSize(20, 20)) if transparent: b.setStyleSheet( """background-color: rgba(255, 255, 255, 0); @@ -449,6 +454,7 @@ def getcolorbutton( font: 100 10pt;""" ) b.clicked.connect(callback) + b.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) if name: setattr(parent, name, b) return b @@ -474,7 +480,7 @@ def getsimpleswitch( b = MySwitch(sign=d[key], enable=enable) b.clicked.connect(functools.partial(callbackwrap, d, key, callback)) - + b.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) if pair: if pair not in dir(parent): setattr(parent, pair, {}) diff --git a/LunaTranslator/LunaTranslator/hiraparse/mecab.py b/LunaTranslator/LunaTranslator/hiraparse/mecab.py index b19d4d02..8ab1c07e 100644 --- a/LunaTranslator/LunaTranslator/hiraparse/mecab.py +++ b/LunaTranslator/LunaTranslator/hiraparse/mecab.py @@ -20,6 +20,9 @@ class hira: for node, fields in self.kks.parse( text, codec ): # self.kks.parseToNodeList(text): + kana = "" + pos1 = "" + origorig = None if len(fields): pos1 = fields[0] if len(fields) > 29: @@ -28,26 +31,30 @@ class hira: kana = fields[20] elif 29 > len(fields) >= 26: kana = fields[17] + origorig = fields[7] elif len(fields) > 9: kana = fields[9] # 无kana,用lform代替 elif len(fields) == 9: kana = fields[8] # 7/8均可,issues/514 else: kana = "" - else: - kana = "" - pos1 = "" + if len(fields) >= 8: + origorig = fields[7] # unsafe l = 0 if text[start] == "\n": start += 1 while str(node) not in text[start : start + l]: l += 1 orig = text[start : start + l] + if origorig is None: + origorig = orig start += l hira = kana # .translate(self.h2k) if hira == "*": hira = "" # print(node.feature) - result.append({"orig": orig, "hira": hira, "cixing": pos1}) + result.append( + {"orig": orig, "hira": hira, "cixing": pos1, "origorig": origorig} + ) return result diff --git a/LunaTranslator/LunaTranslator/myutils/config.py b/LunaTranslator/LunaTranslator/myutils/config.py index b535ab77..a7d49e43 100644 --- a/LunaTranslator/LunaTranslator/myutils/config.py +++ b/LunaTranslator/LunaTranslator/myutils/config.py @@ -86,6 +86,8 @@ def getdefaultsavehook(gamepath, title=None): "gamejsonfile": "", "gamesqlitefile": "", "gamexmlfile": "", + "vndbtags": [], + "usertags": [], } if gamepath == "0": default["title"] = "No Game" diff --git a/LunaTranslator/LunaTranslator/myutils/utils.py b/LunaTranslator/LunaTranslator/myutils/utils.py index ba934fa8..2d67fc4f 100644 --- a/LunaTranslator/LunaTranslator/myutils/utils.py +++ b/LunaTranslator/LunaTranslator/myutils/utils.py @@ -125,9 +125,10 @@ def everymethodsthread(): vid = data.get("vid", None) title = data.get("title", None) namemap = data.get("namemap", None) - + vndbtags = data.get("vndbtags", None) if not vid: continue + print(data) savehook_new_data[gamepath]["vid"] = int(vid[1:]) if saveimg and (not savehook_new_data[gamepath]["isimagepathusersetted"]): savehook_new_data[gamepath]["imagepath"] = saveimg @@ -137,7 +138,9 @@ def everymethodsthread(): savehook_new_data[gamepath]["infopath"] = saveinfo if namemap: savehook_new_data[gamepath]["namemap"] = namemap - print(namemap) + if vndbtags: + savehook_new_data[gamepath]["vndbtags"] = vndbtags + succ = True break if succ == False: diff --git a/LunaTranslator/LunaTranslator/myutils/vndb.py b/LunaTranslator/LunaTranslator/myutils/vndb.py index f8aecad6..ba75d0f6 100644 --- a/LunaTranslator/LunaTranslator/myutils/vndb.py +++ b/LunaTranslator/LunaTranslator/myutils/vndb.py @@ -2,6 +2,7 @@ import time, requests, re, os, hashlib from myutils.proxy import getproxy from myutils.config import globalconfig from threading import Thread +from traceback import print_exc def b64string(a): @@ -82,6 +83,7 @@ def safegetvndbjson(url, json, getter): try: return getter(_.json()) except: + # print_exc() print(_.text) return None except: @@ -155,23 +157,74 @@ def getcharnamemapbyid(vid): return namemap +def gettagnamebytagid(gid): + + return safegetvndbjson( + "https://api.vndb.org/kana/tag", + { + "filters": [ + "id", + "=", + gid, + ], + "fields": "name", + }, + lambda js: js["results"][0]["name"], + ) + + +def getvntagsbyid(vid): + + res = safegetvndbjson( + "https://api.vndb.org/kana/vn", + { + "filters": [ + "id", + "=", + vid, + ], + "fields": "tags.rating", + }, + lambda js: js["results"][0]["tags"], + ) + if not res: + return + tags = [] + try: + for r in res: + tag = r["id"] + if tag not in globalconfig["vndbcache"]["tagid2name"]: + name = gettagnamebytagid(tag) + if name: + globalconfig["vndbcache"]["tagid2name"][tag] = name + + tags.append(r["id"]) + except: + pass + return tags + + def searchforidimage(titleorid): print(titleorid) if os.path.exists("./cache/vndb") == False: os.mkdir("./cache/vndb") if isinstance(titleorid, str): vid = getvidbytitle(titleorid) + if not vid: + return {} elif isinstance(titleorid, int): vid = "v{}".format(titleorid) img = getimgbyid(vid) title = gettitlebyid(vid) namemap = getcharnamemapbyid(vid) + vndbtags = getvntagsbyid(vid) return { "namemap": namemap, "title": title, "vid": vid, "infopath": vndbdowloadinfo(vid), "imagepath": vndbdownloadimg(img), + "vndbtags": vndbtags, } diff --git a/LunaTranslator/files/defaultconfig/config.json b/LunaTranslator/files/defaultconfig/config.json index 8d767e38..fe272ca8 100644 --- a/LunaTranslator/files/defaultconfig/config.json +++ b/LunaTranslator/files/defaultconfig/config.json @@ -688,6 +688,7 @@ "lighttheme":0, "usesearchword": false, "usecopyword":false, + "usewordorigin":false, "ttscommon": { "rate": 1.0, "volume": 100.0, @@ -1230,5 +1231,9 @@ "captureOffsetRight":0, "captureOffsetBottom":0, "multiDisplayMode":false - } + }, + "vndbcache":{ + "tagid2name":{} + }, + "labelset":[] } diff --git a/LunaTranslator/files/defaultconfig/static_data.json b/LunaTranslator/files/defaultconfig/static_data.json index b03c3f21..0e75dee6 100644 --- a/LunaTranslator/files/defaultconfig/static_data.json +++ b/LunaTranslator/files/defaultconfig/static_data.json @@ -1,5 +1,5 @@ { - "version":"v2.43.0", + "version":"v2.45.0", "themes":{ "dark":[ {"file":"dark1.qss","name":"PyQtDarkTheme"}, diff --git a/LunaTranslator/files/lang/ar.json b/LunaTranslator/files/lang/ar.json index aa3a341b..d3e687cc 100644 --- a/LunaTranslator/files/lang/ar.json +++ b/LunaTranslator/files/lang/ar.json @@ -752,5 +752,10 @@ "拉伸": "امتدت", "居中": "مركز", "边距": "هوامش", - "文字区高度": "ارتفاع منطقة النص" + "文字区高度": "ارتفاع منطقة النص", + "标签": "علامة", + "存在": "موجود", + "标签集": "تسمية مجموعة", + "添加": "إضافة .", + "使用原型查询": "باستخدام نموذج الاستعلام" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/cht.json b/LunaTranslator/files/lang/cht.json index 046e2115..bed6185c 100644 --- a/LunaTranslator/files/lang/cht.json +++ b/LunaTranslator/files/lang/cht.json @@ -752,5 +752,10 @@ "拉伸": "拉伸", "居中": "居中", "边距": "邊距", - "文字区高度": "文字區高度" + "文字区高度": "文字區高度", + "标签": "標籤", + "存在": "存在", + "标签集": "標籤集", + "添加": "添加", + "使用原型查询": "使用原型査詢" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/en.json b/LunaTranslator/files/lang/en.json index caa8b198..5bb58c48 100644 --- a/LunaTranslator/files/lang/en.json +++ b/LunaTranslator/files/lang/en.json @@ -752,5 +752,10 @@ "拉伸": "stretching", "居中": "Centered", "边距": "Margins", - "文字区高度": "Text area height" + "文字区高度": "Text area height", + "标签": "label", + "存在": "existence", + "标签集": "Label set", + "添加": "Add", + "使用原型查询": "Using prototype queries" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/es.json b/LunaTranslator/files/lang/es.json index 57dc04fc..9166e76b 100644 --- a/LunaTranslator/files/lang/es.json +++ b/LunaTranslator/files/lang/es.json @@ -752,5 +752,10 @@ "拉伸": "Estiramiento", "居中": "En el Centro", "边距": "Margen", - "文字区高度": "Altura del área de texto" + "文字区高度": "Altura del área de texto", + "标签": "Etiquetas", + "存在": "Existencia", + "标签集": "Conjunto de etiquetas", + "添加": "Añadir", + "使用原型查询": "Consulta con prototipo" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/fr.json b/LunaTranslator/files/lang/fr.json index c46c1ff6..b69ab30e 100644 --- a/LunaTranslator/files/lang/fr.json +++ b/LunaTranslator/files/lang/fr.json @@ -752,5 +752,10 @@ "拉伸": "Stretch", "居中": "Centré", "边距": "Les marges", - "文字区高度": "Hauteur de la zone de texte" + "文字区高度": "Hauteur de la zone de texte", + "标签": "Étiquettes", + "存在": "Présence", + "标签集": "Ensemble d'étiquettes", + "添加": "Ajouter", + "使用原型查询": "Utiliser une requête prototype" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/it.json b/LunaTranslator/files/lang/it.json index 2e2cec4a..cdf14de4 100644 --- a/LunaTranslator/files/lang/it.json +++ b/LunaTranslator/files/lang/it.json @@ -752,5 +752,10 @@ "拉伸": "stretching", "居中": "Centrato", "边距": "Margini", - "文字区高度": "Altezza area testo" + "文字区高度": "Altezza area testo", + "标签": "etichetta", + "存在": "esistenza", + "标签集": "Set di etichette", + "添加": "Aggiungi", + "使用原型查询": "Utilizzo di query prototipali" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ja.json b/LunaTranslator/files/lang/ja.json index 579eb903..f47aae84 100644 --- a/LunaTranslator/files/lang/ja.json +++ b/LunaTranslator/files/lang/ja.json @@ -752,5 +752,10 @@ "拉伸": "押し出し", "居中": "中央揃え", "边距": "マージン", - "文字区高度": "テキスト領域の高さ" + "文字区高度": "テキスト領域の高さ", + "标签": "タブ", + "存在": "存在する", + "标签集": "ラベルセット", + "添加": "追加", + "使用原型查询": "プロトタイプクエリーの使用" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ko.json b/LunaTranslator/files/lang/ko.json index 37802442..a08f8cd1 100644 --- a/LunaTranslator/files/lang/ko.json +++ b/LunaTranslator/files/lang/ko.json @@ -752,5 +752,10 @@ "拉伸": "스트레치", "居中": "가운데", "边距": "여백", - "文字区高度": "문자 영역 높이" + "文字区高度": "문자 영역 높이", + "标签": "레이블", + "存在": "존재", + "标签集": "태그 세트", + "添加": "추가", + "使用原型查询": "원형 조회 사용" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/pl.json b/LunaTranslator/files/lang/pl.json index 35f75c16..798b0a10 100644 --- a/LunaTranslator/files/lang/pl.json +++ b/LunaTranslator/files/lang/pl.json @@ -752,5 +752,10 @@ "拉伸": "rozciąganie", "居中": "Wyśrodkowane", "边距": "Marginesy", - "文字区高度": "Wysokość obszaru tekstu" + "文字区高度": "Wysokość obszaru tekstu", + "标签": "etykieta", + "存在": "istnienie", + "标签集": "Zestaw etykiet", + "添加": "Dodaj", + "使用原型查询": "Korzystanie z prototypowych zapytań" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ru.json b/LunaTranslator/files/lang/ru.json index b741236b..b80a5d2f 100644 --- a/LunaTranslator/files/lang/ru.json +++ b/LunaTranslator/files/lang/ru.json @@ -752,5 +752,10 @@ "拉伸": "Растяжка", "居中": "В центре", "边距": "Границы", - "文字区高度": "Высота зоны" + "文字区高度": "Высота зоны", + "标签": "Метки", + "存在": "Наличие", + "标签集": "Набор меток", + "添加": "Добавить", + "使用原型查询": "Использовать запрос прототипа" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/th.json b/LunaTranslator/files/lang/th.json index 1382b42d..e67f42fd 100644 --- a/LunaTranslator/files/lang/th.json +++ b/LunaTranslator/files/lang/th.json @@ -752,5 +752,10 @@ "拉伸": "ยืดออก", "居中": "ศูนย์กลาง", "边距": "ขอบ", - "文字区高度": "ความสูงของโซนคำ" + "文字区高度": "ความสูงของโซนคำ", + "标签": "ป้ายกำกับ", + "存在": "การปรากฏตัว", + "标签集": "ชุดแท็ก", + "添加": "เพิ่ม", + "使用原型查询": "การใช้แบบสอบถามต้นแบบ" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/tr.json b/LunaTranslator/files/lang/tr.json index a59e5d67..ea16ae50 100644 --- a/LunaTranslator/files/lang/tr.json +++ b/LunaTranslator/files/lang/tr.json @@ -752,5 +752,10 @@ "拉伸": "stretching", "居中": "Centered", "边距": "Margins", - "文字区高度": "Metin alanının yüksekliği" + "文字区高度": "Metin alanının yüksekliği", + "标签": "etiket", + "存在": "varlığı", + "标签集": "Etiket seti", + "添加": "Ekle", + "使用原型查询": "Prototip sorguları kullanılıyor" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/uk.json b/LunaTranslator/files/lang/uk.json index 060a33b9..f48cb577 100644 --- a/LunaTranslator/files/lang/uk.json +++ b/LunaTranslator/files/lang/uk.json @@ -752,5 +752,10 @@ "拉伸": "розтягування", "居中": "З центром", "边距": "Марги", - "文字区高度": "Висота області тексту" + "文字区高度": "Висота області тексту", + "标签": "мітка", + "存在": "існування", + "标签集": "Встановлення мітки", + "添加": "Додати", + "使用原型查询": "Використання запитів прототипу" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/vi.json b/LunaTranslator/files/lang/vi.json index 9334542a..80829fa2 100644 --- a/LunaTranslator/files/lang/vi.json +++ b/LunaTranslator/files/lang/vi.json @@ -752,5 +752,10 @@ "拉伸": "căng", "居中": "Ở giữa", "边距": "Viền", - "文字区高度": "Chiều cao vùng văn bản" + "文字区高度": "Chiều cao vùng văn bản", + "标签": "Trang chủ", + "存在": "Hiện diện", + "标签集": "Bộ thẻ", + "添加": "Thêm", + "使用原型查询": "Truy vấn với Prototype" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/zh.json b/LunaTranslator/files/lang/zh.json index 6cdd81ab..e07f3024 100644 --- a/LunaTranslator/files/lang/zh.json +++ b/LunaTranslator/files/lang/zh.json @@ -752,5 +752,10 @@ "拉伸": "", "居中": "", "边距": "", - "文字区高度": "" + "文字区高度": "", + "标签": "", + "存在": "", + "标签集": "", + "添加": "", + "使用原型查询": "" } \ No newline at end of file