mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 12:26:26 +00:00
chore: minor improvements
This commit is contained in:
@ -29,9 +29,9 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="iccIgnoreRadioButton">
|
<widget class="QRadioButton" name="iccUseQtRadioButton">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>icc.ignore</string>
|
<string>icc.useQt</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -38,10 +38,10 @@ class Ui_OcrQueue(object):
|
|||||||
self.groupBox.setObjectName(u"groupBox")
|
self.groupBox.setObjectName(u"groupBox")
|
||||||
self.verticalLayout = QVBoxLayout(self.groupBox)
|
self.verticalLayout = QVBoxLayout(self.groupBox)
|
||||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||||
self.iccIgnoreRadioButton = QRadioButton(self.groupBox)
|
self.iccUseQtRadioButton = QRadioButton(self.groupBox)
|
||||||
self.iccIgnoreRadioButton.setObjectName(u"iccIgnoreRadioButton")
|
self.iccUseQtRadioButton.setObjectName(u"iccUseQtRadioButton")
|
||||||
|
|
||||||
self.verticalLayout.addWidget(self.iccIgnoreRadioButton)
|
self.verticalLayout.addWidget(self.iccUseQtRadioButton)
|
||||||
|
|
||||||
self.iccUsePILRadioButton = QRadioButton(self.groupBox)
|
self.iccUsePILRadioButton = QRadioButton(self.groupBox)
|
||||||
self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton")
|
self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton")
|
||||||
@ -155,7 +155,7 @@ class Ui_OcrQueue(object):
|
|||||||
def retranslateUi(self, OcrQueue):
|
def retranslateUi(self, OcrQueue):
|
||||||
self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"queue.title", None))
|
self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"queue.title", None))
|
||||||
self.groupBox.setTitle(QCoreApplication.translate("OcrQueue", u"iccOptionsGroupBox", None))
|
self.groupBox.setTitle(QCoreApplication.translate("OcrQueue", u"iccOptionsGroupBox", None))
|
||||||
self.iccIgnoreRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.ignore", None))
|
self.iccUseQtRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.useQt", None))
|
||||||
self.iccUsePILRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.usePIL", None))
|
self.iccUsePILRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.usePIL", None))
|
||||||
self.iccTryFixRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.tryFix", None))
|
self.iccTryFixRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.tryFix", None))
|
||||||
self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"queue.addImageButton", None))
|
self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"queue.addImageButton", None))
|
||||||
|
@ -7,7 +7,6 @@ from arcaea_offline.database import Database
|
|||||||
from arcaea_offline.models import Chart, Score
|
from arcaea_offline.models import Chart, Score
|
||||||
from arcaea_offline_ocr.b30.shared import B30OcrResultItem
|
from arcaea_offline_ocr.b30.shared import B30OcrResultItem
|
||||||
from arcaea_offline_ocr.device.common import DeviceOcrResult
|
from arcaea_offline_ocr.device.common import DeviceOcrResult
|
||||||
from arcaea_offline_ocr.utils import convert_to_srgb
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from PIL.ImageQt import ImageQt
|
from PIL.ImageQt import ImageQt
|
||||||
from PySide6.QtCore import (
|
from PySide6.QtCore import (
|
||||||
@ -25,6 +24,7 @@ from PySide6.QtCore import (
|
|||||||
)
|
)
|
||||||
from PySide6.QtGui import QImage, QPixmap
|
from PySide6.QtGui import QImage, QPixmap
|
||||||
|
|
||||||
|
from ui.extends.ocr import convert_to_srgb
|
||||||
from ui.extends.shared.delegates.chartDelegate import ChartDelegate
|
from ui.extends.shared.delegates.chartDelegate import ChartDelegate
|
||||||
from ui.extends.shared.delegates.imageDelegate import ImageDelegate
|
from ui.extends.shared.delegates.imageDelegate import ImageDelegate
|
||||||
from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate
|
from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate
|
||||||
@ -46,7 +46,7 @@ class OcrRunnable(QRunnable):
|
|||||||
|
|
||||||
|
|
||||||
class IccOption(IntEnum):
|
class IccOption(IntEnum):
|
||||||
Ignore = 0
|
UseQt = 0
|
||||||
UsePIL = 1
|
UsePIL = 1
|
||||||
TryFix = 2
|
TryFix = 2
|
||||||
|
|
||||||
|
@ -1,28 +1,27 @@
|
|||||||
|
import io
|
||||||
|
|
||||||
|
from PIL import Image, ImageCms
|
||||||
|
|
||||||
from .build_phash import build_image_phash_database
|
from .build_phash import build_image_phash_database
|
||||||
|
|
||||||
try:
|
|
||||||
import json
|
|
||||||
|
|
||||||
from arcaea_offline_ocr.device.v1.definition import DeviceV1
|
def convert_to_srgb(pil_img: Image.Image):
|
||||||
from arcaea_offline_ocr.device.v2.definition import DeviceV2
|
"""
|
||||||
|
Convert PIL image to sRGB color space (if possible)
|
||||||
|
and save the converted file.
|
||||||
|
|
||||||
def load_devices_json(filepath: str) -> list[DeviceV1]:
|
https://stackoverflow.com/a/65667797/16484891
|
||||||
with open(filepath, "r", encoding="utf-8") as f:
|
|
||||||
file_content = f.read()
|
|
||||||
if len(file_content) == 0:
|
|
||||||
return []
|
|
||||||
content = json.loads(file_content)
|
|
||||||
assert isinstance(content, list)
|
|
||||||
devices = []
|
|
||||||
for item in content:
|
|
||||||
version = item["version"]
|
|
||||||
if version == 1:
|
|
||||||
devices.append(DeviceV1(**item))
|
|
||||||
elif version == 2:
|
|
||||||
devices.append(DeviceV2(**item))
|
|
||||||
return devices
|
|
||||||
|
|
||||||
except Exception:
|
CC BY-SA 4.0
|
||||||
|
"""
|
||||||
|
icc = pil_img.info.get("icc_profile", "")
|
||||||
|
icc_conv = ""
|
||||||
|
|
||||||
def load_devices_json(*args, **kwargs):
|
if icc:
|
||||||
pass
|
io_handle = io.BytesIO(icc) # virtual file
|
||||||
|
src_profile = ImageCms.ImageCmsProfile(io_handle)
|
||||||
|
dst_profile = ImageCms.createProfile("sRGB")
|
||||||
|
img_conv = ImageCms.profileToProfile(pil_img, src_profile, dst_profile)
|
||||||
|
icc_conv = img_conv.info.get("icc_profile", "")
|
||||||
|
|
||||||
|
return img_conv if icc != icc_conv else pil_img
|
||||||
|
@ -43,7 +43,7 @@ class OcrQueue(Ui_OcrQueue, QWidget):
|
|||||||
|
|
||||||
self.iccOptionButtonGroup = QButtonGroup(self)
|
self.iccOptionButtonGroup = QButtonGroup(self)
|
||||||
self.iccOptionButtonGroup.buttonToggled.connect(self.updateIccOption)
|
self.iccOptionButtonGroup.buttonToggled.connect(self.updateIccOption)
|
||||||
self.iccOptionButtonGroup.addButton(self.iccIgnoreRadioButton, 0)
|
self.iccOptionButtonGroup.addButton(self.iccUseQtRadioButton, 0)
|
||||||
self.iccOptionButtonGroup.addButton(self.iccUsePILRadioButton, 1)
|
self.iccOptionButtonGroup.addButton(self.iccUsePILRadioButton, 1)
|
||||||
self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
|
self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
|
||||||
self.updateIccOption()
|
self.updateIccOption()
|
||||||
|
@ -225,8 +225,8 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
|
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
|
||||||
<source>icc.ignore</source>
|
<source>icc.useQt</source>
|
||||||
<translation>Ignore</translation>
|
<translation>Use Qt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/components/ocrQueue.ui" line="41"/>
|
<location filename="../../designer/components/ocrQueue.ui" line="41"/>
|
||||||
@ -477,12 +477,9 @@ validation</translation>
|
|||||||
<location filename="../../implements/settings/settingsAndreal.py" line="82"/>
|
<location filename="../../implements/settings/settingsAndreal.py" line="82"/>
|
||||||
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
|
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
|
||||||
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
|
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="190"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="104"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="193"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="107"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="196"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="110"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
|
|
||||||
<source>resetButton</source>
|
<source>resetButton</source>
|
||||||
<translation>Reset</translation>
|
<translation>Reset</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -517,37 +514,22 @@ validation</translation>
|
|||||||
<translation>Database URL</translation>
|
<translation>Database URL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="187"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="101"/>
|
||||||
<source>ocr.title</source>
|
<source>ocr.title</source>
|
||||||
<translation>OCR</translation>
|
<translation>OCR</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="189"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="103"/>
|
||||||
<source>ocr.devicesJson.label</source>
|
|
||||||
<translation>Default devices.json</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="192"/>
|
|
||||||
<source>ocr.deviceUuid.label</source>
|
|
||||||
<translation>Default device</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="195"/>
|
|
||||||
<source>ocr.knnModelFile.label</source>
|
<source>ocr.knnModelFile.label</source>
|
||||||
<translation>Default KNearest model</translation>
|
<translation>Default KNearest model</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="198"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="106"/>
|
||||||
<source>ocr.b30KnnModelFile.label</source>
|
<source>ocr.b30KnnModelFile.label</source>
|
||||||
<translation>Default B30 KNearest model</translation>
|
<translation>Default B30 KNearest model</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="201"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="109"/>
|
||||||
<source>ocr.siftDatabaseFile.label</source>
|
|
||||||
<translation>Default SIFT database file</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
|
|
||||||
<source>ocr.phashDatabaseFile.label</source>
|
<source>ocr.phashDatabaseFile.label</source>
|
||||||
<translation>Default image PHash database</translation>
|
<translation>Default image PHash database</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -1201,17 +1183,17 @@ validation</translation>
|
|||||||
<translation>Calculate to Step</translation>
|
<translation>Calculate to Step</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="386"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="367"/>
|
||||||
<source>calculate.toStep.playResultLabel</source>
|
<source>calculate.toStep.playResultLabel</source>
|
||||||
<translation>Play result</translation>
|
<translation>Play result</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="419"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="393"/>
|
||||||
<source>calculate.toStep.calculatePlayResultFromScoreButton</source>
|
<source>calculate.toStep.calculatePlayResultFromScoreButton</source>
|
||||||
<translation>Calculate from Score</translation>
|
<translation>Calculate from Score</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="399"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="406"/>
|
||||||
<source>calculate.toStep.resultLabel</source>
|
<source>calculate.toStep.resultLabel</source>
|
||||||
<translation>Result</translation>
|
<translation>Result</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -1221,17 +1203,17 @@ validation</translation>
|
|||||||
<translation>Detailed log output</translation>
|
<translation>Detailed log output</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="448"/>
|
||||||
<source>calculate.fromStep</source>
|
<source>calculate.fromStep</source>
|
||||||
<translation>Calculate from Step</translation>
|
<translation>Calculate from Step</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="438"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="457"/>
|
||||||
<source>calculate.fromStep.targetStepLabel</source>
|
<source>calculate.fromStep.targetStepLabel</source>
|
||||||
<translation>Target step value</translation>
|
<translation>Target step value</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="461"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="480"/>
|
||||||
<source>calculate.fromStep.resultLabel</source>
|
<source>calculate.fromStep.resultLabel</source>
|
||||||
<translation>Result (play rating)</translation>
|
<translation>Result (play rating)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -225,13 +225,13 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
|
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
|
||||||
<source>icc.ignore</source>
|
<source>icc.useQt</source>
|
||||||
<translation>忽略</translation>
|
<translation>使用 Qt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/components/ocrQueue.ui" line="41"/>
|
<location filename="../../designer/components/ocrQueue.ui" line="41"/>
|
||||||
<source>icc.usePIL</source>
|
<source>icc.usePIL</source>
|
||||||
<translation>使用 PIL 读取</translation>
|
<translation>使用 PIL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/components/ocrQueue.ui" line="51"/>
|
<location filename="../../designer/components/ocrQueue.ui" line="51"/>
|
||||||
@ -476,12 +476,9 @@
|
|||||||
<location filename="../../implements/settings/settingsAndreal.py" line="82"/>
|
<location filename="../../implements/settings/settingsAndreal.py" line="82"/>
|
||||||
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
|
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
|
||||||
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
|
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="190"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="104"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="193"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="107"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="196"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="110"/>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
|
|
||||||
<source>resetButton</source>
|
<source>resetButton</source>
|
||||||
<translation>重置</translation>
|
<translation>重置</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -516,37 +513,22 @@
|
|||||||
<translation>数据库 URL</translation>
|
<translation>数据库 URL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="187"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="101"/>
|
||||||
<source>ocr.title</source>
|
<source>ocr.title</source>
|
||||||
<translation>OCR</translation>
|
<translation>OCR</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="189"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="103"/>
|
||||||
<source>ocr.devicesJson.label</source>
|
|
||||||
<translation>默认设备定义文件</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="192"/>
|
|
||||||
<source>ocr.deviceUuid.label</source>
|
|
||||||
<translation>默认设备</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="195"/>
|
|
||||||
<source>ocr.knnModelFile.label</source>
|
<source>ocr.knnModelFile.label</source>
|
||||||
<translation>默认 KNearest 模型</translation>
|
<translation>默认 KNearest 模型</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="198"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="106"/>
|
||||||
<source>ocr.b30KnnModelFile.label</source>
|
<source>ocr.b30KnnModelFile.label</source>
|
||||||
<translation>默认 B30 KNearest 模型</translation>
|
<translation>默认 B30 KNearest 模型</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="201"/>
|
<location filename="../../implements/settings/settingsOcr.py" line="109"/>
|
||||||
<source>ocr.siftDatabaseFile.label</source>
|
|
||||||
<translation>默认 SIFT 特征值数据库</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
|
|
||||||
<source>ocr.phashDatabaseFile.label</source>
|
<source>ocr.phashDatabaseFile.label</source>
|
||||||
<translation>默认图像 PHash 数据库</translation>
|
<translation>默认图像 PHash 数据库</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -1200,17 +1182,17 @@
|
|||||||
<translation>正算</translation>
|
<translation>正算</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="386"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="367"/>
|
||||||
<source>calculate.toStep.playResultLabel</source>
|
<source>calculate.toStep.playResultLabel</source>
|
||||||
<translation>单曲 PTT</translation>
|
<translation>单曲 PTT</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="419"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="393"/>
|
||||||
<source>calculate.toStep.calculatePlayResultFromScoreButton</source>
|
<source>calculate.toStep.calculatePlayResultFromScoreButton</source>
|
||||||
<translation>从分数计算</translation>
|
<translation>从分数计算</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="399"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="406"/>
|
||||||
<source>calculate.toStep.resultLabel</source>
|
<source>calculate.toStep.resultLabel</source>
|
||||||
<translation>结果</translation>
|
<translation>结果</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -1220,17 +1202,17 @@
|
|||||||
<translation>详细日志输出</translation>
|
<translation>详细日志输出</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="448"/>
|
||||||
<source>calculate.fromStep</source>
|
<source>calculate.fromStep</source>
|
||||||
<translation>逆算</translation>
|
<translation>逆算</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="438"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="457"/>
|
||||||
<source>calculate.fromStep.targetStepLabel</source>
|
<source>calculate.fromStep.targetStepLabel</source>
|
||||||
<translation>目标 STEP 值</translation>
|
<translation>目标 STEP 值</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="461"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="480"/>
|
||||||
<source>calculate.fromStep.resultLabel</source>
|
<source>calculate.fromStep.resultLabel</source>
|
||||||
<translation>结果(单曲 PTT)</translation>
|
<translation>结果(单曲 PTT)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
Reference in New Issue
Block a user