diff --git a/needToTranslate.txe b/needToTranslate.txe new file mode 100644 index 0000000..e69de29 diff --git a/src/launcher/GUI/JsonEditorDialog.h b/src/launcher/GUI/JsonEditorDialog.h index e2a6121..2e0735e 100644 --- a/src/launcher/GUI/JsonEditorDialog.h +++ b/src/launcher/GUI/JsonEditorDialog.h @@ -1,5 +1,5 @@ #pragma once - +#include #include #include #include @@ -40,7 +40,7 @@ class JsonParamTableEditor : public QDialog { public: explicit JsonParamTableEditor(QWidget* parent = nullptr) : QDialog(parent) { - this->setWindowTitle("JSON 表格编辑器"); + this->setWindowTitle(TR("JSON Table Editor")); this->resize(700, 450); setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);// 去掉边框 //setAttribute(Qt::WA_TranslucentBackground); // 背景透明 @@ -76,7 +76,7 @@ public: m_tableView->setFocusPolicy(Qt::NoFocus); //设置表头 - m_tableModel->setHorizontalHeaderLabels({ "选项", "值" }); + m_tableModel->setHorizontalHeaderLabels({ TR("Option"), TR("Value") }); //设置表格属性 m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); @@ -85,8 +85,8 @@ public: m_tableView->setColumnWidth(1, 200);// 选项列宽度 - fancyButtonText* okBtn = new fancyButtonText("保存", 70, 22, ""); - fancyButtonText* cancelBtn = new fancyButtonText("取消", 70, 22, ""); + fancyButtonText* okBtn = new fancyButtonText(TR("Save"), 70, 22, ""); + fancyButtonText* cancelBtn = new fancyButtonText(TR("Cancel"), 70, 22, ""); connect(okBtn, &QPushButton::clicked, this, &JsonParamTableEditor::onAccept); connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); @@ -222,20 +222,20 @@ private slots: for (int row = 0; row < m_tableModel->rowCount(); ++row) { QStandardItem* keyItem = m_tableModel->item(row, 0); if (!keyItem) { - QMessageBox::warning(this, "错误", QString("第 %1 行数据不完整").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 data is incomplete")).arg(row + 1)); return; } QString key = keyItem->text().trimmed(); if (key.isEmpty()) { - QMessageBox::warning(this, "错误", QString("第 %1 行 key 为空").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 key is empty")).arg(row + 1)); return; } //获取原始类型 std::string keyStd = key.toStdString(); if (m_originalTypes.find(keyStd) == m_originalTypes.end()) { - QMessageBox::warning(this, "错误", QString("第 %1 行找不到原始类型信息").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Original type information not found for row %1")).arg(row + 1)); return; } @@ -245,7 +245,7 @@ private slots: nlohmann::json convertedValue; QString errorMsg; if (!getValueFromEditor(keyStd, expectedType, convertedValue, errorMsg)) { - QMessageBox::critical(this, "类型验证失败",QString("第 %1 行值验证失败:\n%2").arg(row + 1).arg(errorMsg)); + QMessageBox::critical(this, TR("Type Validation Failed"), QString(TR("Row %1 value validation failed:\n%2")).arg(row + 1).arg(errorMsg)); return; } result[keyStd] = convertedValue; @@ -318,7 +318,7 @@ private: updateModelData(key, value ? "true" : "false"); return true; } - errorMsg = "布尔值控件类型错误"; + errorMsg = TR("Boolean control type mismatch"); return false; } case JsonValueType::Number: { @@ -336,7 +336,7 @@ private: } return true; } - errorMsg = "数字控件类型错误"; + errorMsg = TR("Number control type mismatch"); return false; } case JsonValueType::String: { @@ -347,7 +347,7 @@ private: updateModelData(key, value); return true; } - errorMsg = "字符串控件类型错误"; + errorMsg = TR("String control type mismatch"); return false; } default: @@ -361,7 +361,7 @@ private: } } catch (const std::exception& e) { - errorMsg = QString("获取值错误: %1").arg(e.what()); + errorMsg = QString(TR("Get value error: %1")).arg(e.what()); return false; } } @@ -447,19 +447,19 @@ private: QString generateTypeHint(JsonValueType type) { switch (type) { case JsonValueType::String: - return "输入字符串值(不需要引号)"; + return TR("Enter a string value (no quotes required)"); case JsonValueType::Number: - return "输入数字值(整数或小数)"; + return TR("Enter a numeric value (integer or decimal)"); case JsonValueType::Boolean: - return "输入布尔值(true 或 false)"; + return TR("Enter a boolean value (true or false)"); case JsonValueType::Array: - return "输入JSON数组格式,如:[1,2,3] 或 [\"a\",\"b\"]"; + return TR("Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]"); case JsonValueType::Object: - return "输入JSON对象格式,如:{\"key\":\"value\"}"; + return TR("Enter a JSON object, e.g., {\"key\":\"value\"}"); case JsonValueType::Null: - return "空值(输入 null)"; + return TR("Null (enter null)"); default: - return "请输入有效的JSON值"; + return TR("Please enter a valid JSON value"); } } @@ -470,7 +470,7 @@ private: // 长度检查 if (trimmedInput.size() > 10240) { - errorMsg = "输入值过大(超过10240字符)"; + errorMsg = TR("Input value too large (exceeds 10240 characters)"); return false; } @@ -494,7 +494,7 @@ private: result = doubleVal; return true; } - errorMsg = "无效的数字格式"; + errorMsg = TR("Invalid numeric format"); return false; } @@ -506,7 +506,7 @@ private: result = false; return true; } - errorMsg = "布尔值只能是 true 或 false"; + errorMsg = TR("Boolean must be true or false"); return false; case JsonValueType::Null: @@ -514,7 +514,7 @@ private: result = nullptr; return true; } - errorMsg = "空值只能是 null"; + errorMsg = TR("Null value must be null"); return false; case JsonValueType::Array: @@ -524,27 +524,27 @@ private: // 验证类型是否匹配 if (expectedType == JsonValueType::Array && !result.is_array()) { - errorMsg = "期望数组格式,如:[1,2,3]"; + errorMsg = TR("Expected array format, e.g., [1,2,3]"); return false; } if (expectedType == JsonValueType::Object && !result.is_object()) { - errorMsg = "期望对象格式,如:{\"key\":\"value\"}"; + errorMsg = TR("Expected object format, e.g., {\"key\":\"value\"}"); return false; } return true; } default: - errorMsg = "未知的数据类型"; + errorMsg = TR("Unknown data type"); return false; } } catch (const nlohmann::json::parse_error& e) { - errorMsg = QString("JSON解析错误: %1").arg(e.what()); + errorMsg = QString(TR("JSON parse error: %1")).arg(e.what()); return false; } catch (const std::exception& e) { - errorMsg = QString("转换错误: %1").arg(e.what()); + errorMsg = QString(TR("Conversion error: %1")).arg(e.what()); return false; } } @@ -556,17 +556,17 @@ class JsonEditorGeneral : public QDialog { public: explicit JsonEditorGeneral(QWidget* parent = nullptr) : QDialog(parent) { - setWindowTitle("通用 JSON 编辑"); + setWindowTitle(TR("General JSON Editor")); m_textEdit = new QPlainTextEdit(this); - QPushButton* okBtn = new QPushButton("确定", this); - QPushButton* cancelBtn = new QPushButton("取消", this); + QPushButton* okBtn = new QPushButton(TR("OK"), this); + QPushButton* cancelBtn = new QPushButton(TR("Cancel"), this); connect(okBtn, &QPushButton::clicked, this, &JsonEditorGeneral::onAccept); connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); QVBoxLayout* mainLayout = new QVBoxLayout(this); - mainLayout->addWidget(new QLabel("请输入 JSON:")); + mainLayout->addWidget(new QLabel(TR("Please enter JSON:"))); mainLayout->addWidget(m_textEdit); QHBoxLayout* btnLayout = new QHBoxLayout(); @@ -589,12 +589,12 @@ private slots: QString text = m_textEdit->toPlainText().trimmed(); if (text.isEmpty()) { - QMessageBox::warning(this, "警告", "JSON 内容不能为空"); + QMessageBox::warning(this, TR("Warning"), TR("JSON content cannot be empty")); return; } if (text.size() > 102400) { - QMessageBox::warning(this, "警告", "JSON 内容过大,可能导致崩溃"); + QMessageBox::warning(this, TR("Warning"), TR("JSON content is too large and may cause a crash")); return; } @@ -604,7 +604,7 @@ private slots: accept(); } catch (const std::exception& e) { - QMessageBox::critical(this, "解析错误", QString("JSON 解析失败:\n%1").arg(e.what())); + QMessageBox::critical(this, TR("Parse Error"), QString(TR("JSON parse failed:\n%1")).arg(e.what())); } } diff --git a/src/launcher/GUI/mainwindow.cpp b/src/launcher/GUI/mainwindow.cpp index 248b5ab..1824ea6 100644 --- a/src/launcher/GUI/mainwindow.cpp +++ b/src/launcher/GUI/mainwindow.cpp @@ -54,7 +54,6 @@ MainWindow::MainWindow(appConfig* configIn, fSignalHub*bridgeIn, nlohmann::order QObject::connect(_loadingWidget.manualBtn, &QPushButton::clicked, this, &MainWindow::switchToManulMode); - _displayWidget->historyImgs->hide(); #if skipLogin == 1 login(true); diff --git a/src/launcher/GUI/mainwindow.h b/src/launcher/GUI/mainwindow.h index 6762246..a1304c6 100644 --- a/src/launcher/GUI/mainwindow.h +++ b/src/launcher/GUI/mainwindow.h @@ -417,9 +417,6 @@ public slots: _loadingWidget.initLog->append(strIn); } } - void addDetHistoryData(bool isOK, historyPack _historyPack){ - _displayWidget->historyImgs->addData(isOK, _historyPack); - } void addCtData(int index, int value){ switch (index) { diff --git a/src/launcher/GUI/pages/displayPageWidget.h b/src/launcher/GUI/pages/displayPageWidget.h index 3968221..33a7bf0 100644 --- a/src/launcher/GUI/pages/displayPageWidget.h +++ b/src/launcher/GUI/pages/displayPageWidget.h @@ -183,7 +183,6 @@ public: ImageWidgetManager _ImageWidgetManager; summaryDataManager* _summaryDataManager; dsStatsWidget* _dsStatsWidget; - historyShowListWidget* historyImgs = new historyShowListWidget(); dayNightShiftHistogramWidget* _dayNightShiftHistogramWidget; userSwitch* _userSwitch; softwareDataDisplay* _softwareDataDisplay; @@ -223,16 +222,10 @@ public: //Layout->setColumnStretch(2, 1); leftItemInit(config); rightItemInit1(); - rightItemInit2(); - connectFunc(); //historyImgs->addData(true, "D:/CCD/yuantu/2024-06-04/23H/TEST/1 (1).bmp", QPixmap("D:/CCD/yuantu/2024-06-04/23H/TEST/1 (1).bmp")); } void rightItemInit1(){ - QVBoxLayout* hLayout = new QVBoxLayout(rightWidget1); - hLayout->addWidget(historyImgs); - } - void rightItemInit2(){ QVBoxLayout* hLayout = new QVBoxLayout(rightWidget2); { @@ -290,34 +283,6 @@ public: QWidget* titleWidget = new QWidget(this); QFont font3("微软雅黑", 10, QFont::Bold); -#pragma region 打开配置文件按钮 - { - /*QVBoxLayout* btnLayout = new QVBoxLayout(); - QPushButton* btn = new QPushButton(this); - btn->setIcon(QIcon(":/TongYongUiIcon/TongYongUiIcon/9.paramSetting.png")); - btn->setFixedSize(QSize(50, 50)); - btn->setIconSize(QSize(25, 25)); - btn->setStyleSheet(R"( - QPushButton { - background-color: transparent; - border: none; - } - QPushButton:hover { - background-color: black; - border-radius: 5px; - } - )"); - QLabel* text = new QLabel(config->_translation->translate("SettingJson")); - text->setFont(font3); - text->setPalette(palette); - btnLayout->addWidget(btn); - btnLayout->addWidget(text); - titleLayout->addLayout(btnLayout); - connect(btn, &QPushButton::clicked, [=]() { - QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(config->settingJsonPath))); - });*/ - } -#pragma endregion #pragma region 结果图查看按钮 { _toolBarWidget->createToolButton(QIcon(":/TongYongUiIcon/TongYongUiIcon/23.1.imageView.png"), @@ -401,11 +366,6 @@ public: //leftWidget->setMaximumWidth(width / 1.2); //rightWidget->setMaximumWidth(width / 2); } - void connectFunc(){ - QObject::connect(historyImgs, &historyShowListWidget::itemClickSignal, - this, &displayWidget::historyClick); - - } public slots: diff --git a/src/launcher/GUI/pages/settingWidget.h b/src/launcher/GUI/pages/settingWidget.h index 7688985..d55b084 100644 --- a/src/launcher/GUI/pages/settingWidget.h +++ b/src/launcher/GUI/pages/settingWidget.h @@ -406,7 +406,7 @@ public: consoleMainLayout->addWidget(btn); } { - fancyButtonText* btn = new fancyButtonText(u8"相机实时取流"); + fancyButtonText* btn = new fancyButtonText(u8"相机实时取流(只适配软触发相机)"); QObject::connect(btn, &QPushButton::clicked, &_cameraRealTimeCapture, &QWidget::show); consoleMainLayout->addWidget(btn); } diff --git a/src/launcher/GUI/paramEditorDialog.h b/src/launcher/GUI/paramEditorDialog.h index 7092a95..9e45640 100644 --- a/src/launcher/GUI/paramEditorDialog.h +++ b/src/launcher/GUI/paramEditorDialog.h @@ -31,7 +31,7 @@ class paramTableEditor : public QDialog { public: explicit paramTableEditor(QWidget* parent = nullptr) : QDialog(parent) { - this->setWindowTitle("JSON 表格编辑器"); + this->setWindowTitle(TR("JSON Table Editor")); this->resize(700, 450); setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);// 去掉边框 //setAttribute(Qt::WA_TranslucentBackground); // 背景透明 @@ -67,7 +67,7 @@ public: m_tableView->setFocusPolicy(Qt::NoFocus); //设置表头 - m_tableModel->setHorizontalHeaderLabels({ "选项", "值" }); + m_tableModel->setHorizontalHeaderLabels({ TR("Option"), TR("Value") }); //设置表格属性 m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); @@ -76,8 +76,8 @@ public: m_tableView->setColumnWidth(1, 200);// 选项列宽度 - fancyButtonText* okBtn = new fancyButtonText("保存", 70, 22, ""); - fancyButtonText* cancelBtn = new fancyButtonText("取消", 70, 22, ""); + fancyButtonText* okBtn = new fancyButtonText(TR("Save"), 70, 22, ""); + fancyButtonText* cancelBtn = new fancyButtonText(TR("Cancel"), 70, 22, ""); connect(okBtn, &QPushButton::clicked, this, ¶mTableEditor::onAccept); connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); @@ -196,19 +196,19 @@ private slots: for (int row = 0; row < m_tableModel->rowCount(); ++row) { QStandardItem* keyItem = m_tableModel->item(row, 0); if (!keyItem) { - QMessageBox::warning(this, "错误", QString("第 %1 行数据不完整").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 data is incomplete")).arg(row + 1)); return; } QString key = keyItem->text().trimmed(); if (key.isEmpty()) { - QMessageBox::warning(this, "错误", QString("第 %1 行 key 为空").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 key is empty")).arg(row + 1)); return; } //获取原始类型 if (m_originalTypes.find(key) == m_originalTypes.end()) { - QMessageBox::warning(this, "错误", QString("第 %1 行找不到原始类型信息").arg(row + 1)); + QMessageBox::warning(this, TR("Error"), QString(TR("Original type information not found for row %1")).arg(row + 1)); return; } @@ -218,7 +218,7 @@ private slots: QVariant convertedValue; QString errorMsg; if (!getValueFromEditor(key, expectedType, convertedValue, errorMsg)) { - QMessageBox::critical(this, "类型验证失败",QString("第 %1 行值验证失败:\n%2").arg(row + 1).arg(errorMsg)); + QMessageBox::critical(this, TR("Type Validation Failed"),QString(TR("Row %1 value validation failed:\n%2")).arg(row + 1).arg(errorMsg)); return; } //esult[keyStd] = convertedValue; @@ -291,7 +291,7 @@ private: updateModelData(key, value ? "true" : "false"); return true; } - errorMsg = "布尔值控件类型错误"; + errorMsg = TR("Boolean control type mismatch"); return false; } case QVariant::Type::Int: { @@ -302,7 +302,7 @@ private: updateModelData(key, QString::number(value)); return true; } - errorMsg = "数字控件INT类型错误"; + errorMsg = TR("Integer number control type mismatch"); return false; } case QVariant::Type::Double: { @@ -313,7 +313,7 @@ private: updateModelData(key, QString::number(value)); return true; } - errorMsg = "数字控件INT类型错误"; + errorMsg = TR("Number control type mismatch"); return false; } case QVariant::Type::String: { @@ -324,7 +324,7 @@ private: updateModelData(key, value); return true; } - errorMsg = "字符串控件类型错误"; + errorMsg = TR("String control type mismatch"); return false; } //default: @@ -338,7 +338,7 @@ private: //} } catch (const std::exception& e) { - errorMsg = QString("获取值错误: %1").arg(e.what()); + errorMsg = QString(TR("Get value error: %1")).arg(e.what()); return false; } return false; @@ -379,15 +379,15 @@ private: QString generateTypeHint(QVariant::Type type) { switch (type) { case QVariant::Type::String: - return "输入字符串值(不需要引号)"; + return TR("Enter a string value (no quotes required)"); case QVariant::Type::Int: - return "输入数字值(整数)"; + return TR("Enter an integer value"); case QVariant::Type::Double: - return "输入数字值(小数)"; + return TR("Enter a decimal value"); case QVariant::Type::Bool: - return "输入布尔值(true 或 false)"; + return TR("Enter a boolean value (true or false)"); default: - return "请输入有效的JSON值"; + return TR("Please enter a valid JSON value"); } } diff --git a/src/launcher/GUI/uiModule/uiModule_OnceDataDisplay.h b/src/launcher/GUI/uiModule/uiModule_OnceDataDisplay.h deleted file mode 100644 index 40f96c4..0000000 --- a/src/launcher/GUI/uiModule/uiModule_OnceDataDisplay.h +++ /dev/null @@ -1,71 +0,0 @@ -#include -#include -#include -class OnceDataDisplay :public QWidget -{ -public: - QVBoxLayout* layout; - QLabel* title; - QLabel* widthValueLabel; - QLabel* heightValueLabel; - QWidget* dataPanel; - OnceDataDisplay() - { - this->setObjectName("OnceDataDisplay"); - this->setStyleSheet("QWidget#OnceDataDisplay {" - " border: 2px solid white;" - " border-radius: 10px;" - "}"); - layout = new QVBoxLayout(); - layout->setAlignment(Qt::AlignTop); - this->setLayout(layout); - - title = new QLabel(u8"本次运行数据"); - QFont font("微软雅黑", 16, QFont::Bold); - QPalette palette; - palette.setColor(QPalette::WindowText, Qt::white); - - title->setFont(font); - title->setPalette(palette); - title->setAlignment(Qt::AlignCenter); - title->setObjectName("titleLabel"); - title->setStyleSheet("QLabel#titleLabel {" - " border: 4px solid white;" - " border-radius: 12px;" - "}"); - - dataPanel = new QWidget; - dataPanel->setObjectName("dataPanel"); - dataPanel->setStyleSheet("QWidget#dataPanel {" - " border: 2px solid white;" - " border-radius: 3px;" - "}"); - QVBoxLayout* dataPanelVboxLayout = new QVBoxLayout(); - dataPanel->setLayout(dataPanelVboxLayout); - QFont font2("微软雅黑", 8, QFont::Bold); - - QHBoxLayout* widthVLayout = new QHBoxLayout(); - QLabel* widthTextLabel = new QLabel(u8"长度"); - widthValueLabel = new QLabel(u8"待读取"); - widthVLayout->addWidget(widthTextLabel); - widthVLayout->addWidget(widthValueLabel); - widthTextLabel->setPalette(palette); - widthValueLabel->setPalette(palette); - - QHBoxLayout* heightVLayout = new QHBoxLayout(); - QLabel* heightTextLabel = new QLabel(u8"宽度:"); - heightValueLabel = new QLabel(u8"待读取"); - heightVLayout->addWidget(heightTextLabel); - heightVLayout->addWidget(heightValueLabel); - heightTextLabel->setPalette(palette); - heightValueLabel->setPalette(palette); - - dataPanelVboxLayout->addLayout(widthVLayout); - dataPanelVboxLayout->addLayout(heightVLayout); - - layout->addWidget(title); - layout->addWidget(dataPanel); - } -}; - -#pragma once \ No newline at end of file diff --git a/src/launcher/GUI/uiModule/uiModule_historyListWidget.h b/src/launcher/GUI/uiModule/uiModule_historyListWidget.h index f285bb9..946a019 100644 --- a/src/launcher/GUI/uiModule/uiModule_historyListWidget.h +++ b/src/launcher/GUI/uiModule/uiModule_historyListWidget.h @@ -125,7 +125,7 @@ class historyShowListWidget : public QWidget { Q_OBJECT public: - QLabel* title = new QLabel(u8"历史记录"); + QLabel* title = new QLabel(TR("History")); QListWidget* showDataListWidget = new QListWidget(); QVBoxLayout* layout = new QVBoxLayout(this); historyShowListSubThread _historyShowListSubThread; diff --git a/src/launcher/GUI/uiModule/uiModule_imageView.h b/src/launcher/GUI/uiModule/uiModule_imageView.h index 632c358..f2f6698 100644 --- a/src/launcher/GUI/uiModule/uiModule_imageView.h +++ b/src/launcher/GUI/uiModule/uiModule_imageView.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include #include @@ -412,12 +413,12 @@ public: )" ); zoombtn->setIcon(QPixmap(":icon/icon/fullscreen.png")); - zoombtn->setToolTip("放大窗口"); + zoombtn->setToolTip(TR("Zoom In")); hLayout->addWidget(zoombtn); connect(zoombtn, &QPushButton::clicked, this, &ImageWidget::toggleZoom); - label = new QLabel(u8"相机标签"); + label = new QLabel(TR("Camera Label")); label->setAlignment(Qt::AlignLeft); label->setFont(font); label->setPalette(palette); @@ -608,7 +609,7 @@ public slots: // 更新按钮状态 isZoomed = true; zoombtn->setIcon(QIcon(":/icon/icon/fullscreen-exit.png")); - zoombtn->setToolTip("缩小窗口"); + zoombtn->setToolTip(TR("Zoom Out")); // 强制更新布局 parentGridLayout->update(); @@ -629,7 +630,7 @@ public slots: //更新按钮状态 isZoomed = false; zoombtn->setIcon(QIcon(":/icon/icon/fullscreen.png")); - zoombtn->setToolTip("放大窗口"); + zoombtn->setToolTip(TR("Zoom In")); //强制更新布局 parentGridLayout->update(); diff --git a/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h b/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h index 9ba0443..9ed7862 100644 --- a/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h +++ b/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h @@ -20,10 +20,10 @@ public: QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - returnBtn = new fancyButton(40,40, QIcon(":/icon/icon/rollback.png"),"返回上一级"); + returnBtn = new fancyButton(40,40, QIcon(":/icon/icon/rollback.png"),TR("Go Back")); layout->addWidget(returnBtn); - - homeBtn = new fancyButton(40, 40, QIcon(":/icon/icon/home2.png"), "返回目录"); + + homeBtn = new fancyButton(40, 40, QIcon(":/icon/icon/home2.png"), TR("Back to Menu")); layout->addWidget(homeBtn); dirLabel->setText(title); diff --git a/src/launcher/GUI/uiModule/uiModule_runCommand.h b/src/launcher/GUI/uiModule/uiModule_runCommand.h index af54e15..9cede67 100644 --- a/src/launcher/GUI/uiModule/uiModule_runCommand.h +++ b/src/launcher/GUI/uiModule/uiModule_runCommand.h @@ -61,7 +61,7 @@ class runCommandWidget : public QDialog { public: explicit runCommandWidget(QWidget* parent = nullptr) : QDialog(parent) { - this->setWindowTitle("执行命令"); + this->setWindowTitle(TR("Execute Command")); this->setObjectName("runCommandWidget"); this->setStyleSheet(QString("QDialog#runCommandWidget {background-color: rgb(%1);border: 2px solid #000000;border-radius: 6px;}").arg(sColor_Blue)); @@ -99,10 +99,10 @@ public slots: connect(funcBtn, &fancyButtonText::clicked, this, [this, uuid]() { QMessageBox::StandardButton reply; reply = QMessageBox::question( - this, // 父窗口 - "提示", // 标题 - "确定要执行此操作吗?", // 内容 - QMessageBox::Yes | QMessageBox::No // 按钮 + this, // parent + TR("Confirm"), // title + TR("Are you sure you want to execute this action?"), // content + QMessageBox::Yes | QMessageBox::No // buttons ); if (reply == QMessageBox::Yes) { emit excuteCommandPreset(uuid); diff --git a/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h b/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h index aff8368..52aeba2 100644 --- a/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h +++ b/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h @@ -56,7 +56,7 @@ public: runStateIconLabel->setPixmap(scaledPixmap); runStateIconLabel->setFixedSize(25, 25); - runStateText = new QLabel("正在检测..."); + runStateText = new QLabel(TR("Detecting...")); runStateText->setFont(font); runStateText->setPalette(palette); @@ -105,15 +105,15 @@ private slots: runStateText->setStyleSheet(QString("QLabel { %1 }").arg(colorStyle)); // 设置工具提示显示详细信息 - QString tooltip = QString("系统状态: %1\n"); + QString tooltip = QString(TR("System status: %1\n")); runStateText->setToolTip(tooltip); } void onMonitorError(const QString& error) { - runStateText->setText("监控异常"); - runStateText->setStyleSheet("QLabel { color: #999; }"); - runStateText->setToolTip(QString("监控错误: %1").arg(error)); + runStateText->setText(TR("Monitoring Error")); + runStateText->setStyleSheet("QLabel { color: #999; }"); + runStateText->setToolTip(QString(TR("Monitor error: %1")).arg(error)); } public slots: void onTriggerSateChanged(int loopCounterPerMin, int maxInterval) { diff --git a/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h b/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h index ac0423b..5312143 100644 --- a/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h +++ b/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h @@ -33,7 +33,7 @@ public: vlayout1->setContentsMargins(0, 0, 0, 0); { QHBoxLayout* tempLayout = new QHBoxLayout(); - QLabel* tempLabel = new QLabel(dataName + u8"OK数量:"); + QLabel* tempLabel = new QLabel(dataName + TR(" OK Count:")); tempLabel->setFont(font); tempLabel->setPalette(palette); @@ -46,7 +46,7 @@ public: } { QHBoxLayout* tempLayout = new QHBoxLayout(); - QLabel* tempLabel = new QLabel(dataName + u8"NG数量:"); + QLabel* tempLabel = new QLabel(dataName + TR(" NG Count:")); tempLabel->setFont(font); tempLabel->setPalette(palette); @@ -59,7 +59,7 @@ public: } { QHBoxLayout* tempLayout = new QHBoxLayout(); - QLabel* tempLabel = new QLabel(dataName + u8"总数量:"); + QLabel* tempLabel = new QLabel(dataName + TR(" Total Count:")); tempLabel->setFont(font); tempLabel->setPalette(palette); @@ -127,7 +127,7 @@ public: palette.setColor(QPalette::WindowText, Qt::white); QFont font("微软雅黑", 14, QFont::Bold); QFont font2("微软雅黑", 20, QFont::Bold); - widget = new fancyWidget(u8" 运行数据"); + widget = new fancyWidget(TR(" Run Data")); /* fancyButtonText* resetBtn = new fancyButtonText(80,40,u8"重置", u8"重置跑料数据"); QObject::connect(resetBtn, &QPushButton::clicked, this, &summaryDataManager::resetAllValue); diff --git a/translation.json b/translation.json new file mode 100644 index 0000000..73aa2f1 --- /dev/null +++ b/translation.json @@ -0,0 +1,599 @@ +{ + "current_language": "zh-CN", + "section": [ + "us-EN", + "zh-CN", + "ms-MY" + ], + "translate": { + "AI Detection System": { + "ms-MY": "Sistem Pengesanan AI", + "us-EN": "AI Detection System", + "zh-CN": "AI检测系统" + }, + "All password fields cannot be empty": { + "ms-MY": "Semua medan kata laluan tidak boleh kosong", + "us-EN": "All password fields cannot be empty", + "zh-CN": "所有密码字段都不能为空" + }, + "Auto Logout": { + "ms-MY": "Auto Log Keluar", + "us-EN": "Auto Logout", + "zh-CN": "自动注销" + }, + "Change Password": { + "ms-MY": "Tukar Kata Laluan", + "us-EN": "Change Password", + "zh-CN": "修改密码" + }, + "Close": { + "ms-MY": "Tutup", + "us-EN": "Close", + "zh-CN": "关闭" + }, + "Confirm Password:": { + "ms-MY": "Sahkan Kata Laluan:", + "us-EN": "Confirm Password:", + "zh-CN": "确认密码:" + }, + "Console Settings": { + "ms-MY": "Tetapan Konsol", + "us-EN": "Console Settings", + "zh-CN": "控制台设置" + }, + "Create User": { + "ms-MY": "Cipta Pengguna", + "us-EN": "Create User", + "zh-CN": "创建用户" + }, + "Current Password:": { + "ms-MY": "Kata Laluan Semasa:", + "us-EN": "Current Password:", + "zh-CN": "当前密码:" + }, + "Current User Information": { + "ms-MY": "Maklumat Pengguna Semasa", + "us-EN": "Current User Information", + "zh-CN": "当前用户信息" + }, + "Current User: ": { + "ms-MY": "Pengguna Semasa: ", + "us-EN": "Current User: ", + "zh-CN": "当前用户: " + }, + "Current User: Not logged in": { + "ms-MY": "Pengguna Semasa: Tidak log masuk", + "us-EN": "Current User: Not logged in", + "zh-CN": "当前用户: 未登录" + }, + "Current user logged out": { + "ms-MY": "Pengguna semasa telah log keluar", + "us-EN": "Current user logged out", + "zh-CN": "已注销当前用户" + }, + "Debug": { + "ms-MY": "Penyelesaian Masalah", + "us-EN": "Debug", + "zh-CN": "故障排查" + }, + "Do you want to exit the application?": { + "ms-MY": "Adakah anda mahu keluar daripada aplikasi?", + "us-EN": "Do you want to exit the application?", + "zh-CN": "是否退出程序?" + }, + "Error": { + "ms-MY": "Ralat", + "us-EN": "Error", + "zh-CN": "错误" + }, + "Exit Confirmation": { + "ms-MY": "Pengesahan Keluar", + "us-EN": "Exit Confirmation", + "zh-CN": "退出确认" + }, + "Guest": { + "ms-MY": "Tetamu", + "us-EN": "Guest", + "zh-CN": "访客" + }, + "Hardware Information": { + "ms-MY": "Maklumat Perkakasan", + "us-EN": "Hardware Information", + "zh-CN": "硬件信息" + }, + "Insufficient permissions": { + "ms-MY": "Kebenaran tidak mencukupi", + "us-EN": "Insufficient permissions", + "zh-CN": "权限不足" + }, + "Language Settings": { + "ms-MY": "Tetapan Bahasa", + "us-EN": "Language Settings", + "zh-CN": "语言设置" + }, + "Log": { + "ms-MY": "Analisis Log", + "us-EN": "Log", + "zh-CN": "日志分析" + }, + "Login": { + "ms-MY": "Log Masuk", + "us-EN": "Login", + "zh-CN": "登录" + }, + "Login failed, please check username and password": { + "ms-MY": "Log masuk gagal, sila periksa nama pengguna dan kata laluan", + "us-EN": "Login failed, please check username and password", + "zh-CN": "登录失败,请检查用户名和密码" + }, + "Login successful! System will auto logout in 3 minutes": { + "ms-MY": "Log masuk berjaya! Sistem akan auto log keluar dalam 3 minit", + "us-EN": "Login successful! System will auto logout in 3 minutes", + "zh-CN": "登录成功!系统将在3分钟后自动注销" + }, + "Login/Logout": { + "ms-MY": "Log Masuk/Log Keluar", + "us-EN": "Login/Logout", + "zh-CN": "登录/注销" + }, + "Logout": { + "ms-MY": "Log Keluar", + "us-EN": "Logout", + "zh-CN": "注销" + }, + "New Password:": { + "ms-MY": "Kata Laluan Baru:", + "us-EN": "New Password:", + "zh-CN": "新密码:" + }, + "New password and confirm password do not match": { + "ms-MY": "Kata laluan baru dan pengesahan kata laluan tidak sepadan", + "us-EN": "New password and confirm password do not match", + "zh-CN": "新密码和确认密码不匹配" + }, + "New password must be at least 4 characters": { + "ms-MY": "Kata laluan baru mestilah sekurang-kurangnya 4 aksara", + "us-EN": "New password must be at least 4 characters", + "zh-CN": "新密码长度至少为4位" + }, + "Param": { + "ms-MY": "Tetapan Parameter", + "us-EN": "Param", + "zh-CN": "参数设置" + }, + "Password change failed, please check current password": { + "ms-MY": "Penukaran kata laluan gagal, sila periksa kata laluan semasa", + "us-EN": "Password change failed, please check current password", + "zh-CN": "密码修改失败,请检查当前密码" + }, + "Password changed successfully!": { + "ms-MY": "Kata laluan berjaya ditukar!", + "us-EN": "Password changed successfully!", + "zh-CN": "密码修改成功!" + }, + "Password must be at least 4 characters": { + "ms-MY": "Kata laluan mestilah sekurang-kurangnya 4 aksara", + "us-EN": "Password must be at least 4 characters", + "zh-CN": "密码长度至少为4位" + }, + "Password:": { + "ms-MY": "Kata Laluan:", + "us-EN": "Password:", + "zh-CN": "密码:" + }, + "Permission Level:": { + "ms-MY": "Tahap Kebenaran:", + "us-EN": "Permission Level:", + "zh-CN": "权限等级:" + }, + "Permission Level: ": { + "ms-MY": "Tahap Kebenaran: ", + "us-EN": "Permission Level: ", + "zh-CN": "权限等级: " + }, + "Permission Level: Guest": { + "ms-MY": "Tahap Kebenaran: Tetamu", + "us-EN": "Permission Level: Guest", + "zh-CN": "权限等级: 访客" + }, + "Please create user first": { + "ms-MY": "Sila cipta pengguna dahulu", + "us-EN": "Please create user first", + "zh-CN": "请先创建用户" + }, + "Remaining: ": { + "ms-MY": "Baki: ", + "us-EN": "Remaining: ", + "zh-CN": "剩余: " + }, + "Setting": { + "ms-MY": "Tetapan", + "us-EN": "Setting", + "zh-CN": "设置" + }, + "Success": { + "ms-MY": "Berjaya", + "us-EN": "Success", + "zh-CN": "成功" + }, + "TOOLS": { + "ms-MY": "Alat", + "us-EN": "TOOLS", + "zh-CN": "工
具" + }, + "Timed out": { + "ms-MY": "Masa tamat", + "us-EN": "Timed out", + "zh-CN": "已超时" + }, + "User Management": { + "ms-MY": "Pengurusan Pengguna", + "us-EN": "User Management", + "zh-CN": "用户管理" + }, + "User created successfully!": { + "ms-MY": "Pengguna berjaya dicipta!", + "us-EN": "User created successfully!", + "zh-CN": "用户创建成功!" + }, + "User creation failed, username may already exist": { + "ms-MY": "Penciptaan pengguna gagal, nama pengguna mungkin sudah wujud", + "us-EN": "User creation failed, username may already exist", + "zh-CN": "用户创建失败,用户名可能已存在" + }, + "Username and password cannot be empty": { + "ms-MY": "Nama pengguna dan kata laluan tidak boleh kosong", + "us-EN": "Username and password cannot be empty", + "zh-CN": "用户名和密码不能为空" + }, + "Username:": { + "ms-MY": "Nama Pengguna:", + "us-EN": "Username:", + "zh-CN": "用户名:" + }, + "ViewImage": { + "ms-MY": "Lihat Imej", + "us-EN": "View Image", + "zh-CN": "查看图片" + }, + "Window Settings": { + "ms-MY": "Tetapan Tetingkap", + "us-EN": "Window Settings", + "zh-CN": "窗口设置" + }, + "You need administrator permissions to create users": { + "ms-MY": "Anda memerlukan kebenaran pentadbir untuk mencipta pengguna", + "us-EN": "You need administrator permissions to create users", + "zh-CN": "您需要管理员权限才能创建用户" + }, + "hideConsole": { + "ms-MY": "Sembunyikan Konsol", + "us-EN": "Hide Console", + "zh-CN": "隐藏控制台" + }, + "refresh": { + "ms-MY": "Segarkan", + "us-EN": "Refresh", + "zh-CN": "刷新" + }, + "showConsole": { + "ms-MY": "Tunjukkan Konsol", + "us-EN": "Show Console", + "zh-CN": "显示控制台" + }, + "will change after restart": { + "ms-MY": "Akan berubah selepas restart", + "zh-CN": "重启后将会更改" + }, + "History": { + "ms-MY": "History", + "us-EN": "History", + "zh-CN": "历史记录" + }, + "Camera Label": { + "ms-MY": "Camera Label", + "us-EN": "Camera Label", + "zh-CN": "相机标签" + }, + "Zoom In": { + "ms-MY": "Zoom In", + "us-EN": "Zoom In", + "zh-CN": "放大窗口" + }, + "Zoom Out": { + "ms-MY": "Zoom Out", + "us-EN": "Zoom Out", + "zh-CN": "缩小窗口" + }, + "Go Back": { + "ms-MY": "Go Back", + "us-EN": "Go Back", + "zh-CN": "返回上一级" + }, + "Back to Menu": { + "ms-MY": "Back to Menu", + "us-EN": "Back to Menu", + "zh-CN": "返回目录" + }, + "Current Run Data": { + "ms-MY": "Current Run Data", + "us-EN": "Current Run Data", + "zh-CN": "本次运行数据" + }, + "Length": { + "ms-MY": "Length", + "us-EN": "Length", + "zh-CN": "长度" + }, + "Pending": { + "ms-MY": "Pending", + "us-EN": "Pending", + "zh-CN": "待读取" + }, + "Width:": { + "ms-MY": "Width:", + "us-EN": "Width:", + "zh-CN": "宽度:" + }, + "Detecting...": { + "ms-MY": "Detecting...", + "us-EN": "Detecting...", + "zh-CN": "正在检测..." + }, + "System status: %1\n": { + "ms-MY": "System status: %1\\n", + "us-EN": "System status: %1\\n", + "zh-CN": "系统状态: %1\\n" + }, + "Monitoring Error": { + "ms-MY": "Monitoring Error", + "us-EN": "Monitoring Error", + "zh-CN": "监控异常" + }, + "Monitor error: %1": { + "ms-MY": "Monitor error: %1", + "us-EN": "Monitor error: %1", + "zh-CN": "监控错误: %1" + }, + "Execute Command": { + "ms-MY": "Execute Command", + "us-EN": "Execute Command", + "zh-CN": "执行命令" + }, + "Confirm": { + "ms-MY": "Confirm", + "us-EN": "Confirm", + "zh-CN": "提示" + }, + "Are you sure you want to execute this action?": { + "ms-MY": "Are you sure you want to execute this action?", + "us-EN": "Are you sure you want to execute this action?", + "zh-CN": "确定要执行此操作吗?" + }, + "Run Data": { + "ms-MY": "Run Data", + "us-EN": "Run Data", + "zh-CN": "运行数据" + }, + "OK Count": { + "ms-MY": "OK Count", + "us-EN": "OK Count", + "zh-CN": "OK数量" + }, + "NG Count": { + "ms-MY": "NG Count", + "us-EN": "NG Count", + "zh-CN": "NG数量" + }, + "Total Count": { + "ms-MY": "Total Count", + "us-EN": "Total Count", + "zh-CN": "总数量" + }, + "JSON Table Editor": { + "ms-MY": "JSON Table Editor", + "us-EN": "JSON Table Editor", + "zh-CN": "JSON 表格编辑器" + }, + "Option": { + "ms-MY": "Option", + "us-EN": "Option", + "zh-CN": "选项" + }, + "Value": { + "ms-MY": "Value", + "us-EN": "Value", + "zh-CN": "值" + }, + "Save": { + "ms-MY": "Save", + "us-EN": "Save", + "zh-CN": "保存" + }, + "Cancel": { + "ms-MY": "Cancel", + "us-EN": "Cancel", + "zh-CN": "取消" + }, + "Row %1 data is incomplete": { + "ms-MY": "Row %1 data is incomplete", + "us-EN": "Row %1 data is incomplete", + "zh-CN": "第 %1 行数据不完整" + }, + "Row %1 key is empty": { + "ms-MY": "Row %1 key is empty", + "us-EN": "Row %1 key is empty", + "zh-CN": "第 %1 行 key 为空" + }, + "Original type information not found for row %1": { + "ms-MY": "Original type information not found for row %1", + "us-EN": "Original type information not found for row %1", + "zh-CN": "第 %1 行找不到原始类型信息" + }, + "Type Validation Failed": { + "ms-MY": "Type Validation Failed", + "us-EN": "Type Validation Failed", + "zh-CN": "类型验证失败" + }, + "Row %1 value validation failed:\n%2": { + "ms-MY": "Row %1 value validation failed:\\n%2", + "us-EN": "Row %1 value validation failed:\\n%2", + "zh-CN": "第 %1 行值验证失败:\\n%2" + }, + "Boolean control type mismatch": { + "ms-MY": "Boolean control type mismatch", + "us-EN": "Boolean control type mismatch", + "zh-CN": "布尔值控件类型错误" + }, + "Number control type mismatch": { + "ms-MY": "Number control type mismatch", + "us-EN": "Number control type mismatch", + "zh-CN": "数字控件类型错误" + }, + "String control type mismatch": { + "ms-MY": "String control type mismatch", + "us-EN": "String control type mismatch", + "zh-CN": "字符串控件类型错误" + }, + "Get value error: %1": { + "ms-MY": "Get value error: %1", + "us-EN": "Get value error: %1", + "zh-CN": "获取值错误: %1" + }, + "Enter a string value (no quotes required)": { + "ms-MY": "Enter a string value (no quotes required)", + "us-EN": "Enter a string value (no quotes required)", + "zh-CN": "输入字符串值(不需要引号)" + }, + "Enter a numeric value (integer or decimal)": { + "ms-MY": "Enter a numeric value (integer or decimal)", + "us-EN": "Enter a numeric value (integer or decimal)", + "zh-CN": "输入数字值(整数或小数)" + }, + "Enter a boolean value (true or false)": { + "ms-MY": "Enter a boolean value (true or false)", + "us-EN": "Enter a boolean value (true or false)", + "zh-CN": "输入布尔值(true 或 false)" + }, + "Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]": { + "ms-MY": "Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]", + "us-EN": "Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]", + "zh-CN": "输入JSON数组格式,如:[1,2,3] 或 [\"a\",\"b\"]" + }, + "Enter a JSON object, e.g., {\"key\":\"value\"}": { + "ms-MY": "Enter a JSON object, e.g., {\\\"key\\\":\\\"value\\\"}", + "us-EN": "Enter a JSON object, e.g., {\\\"key\\\":\\\"value\\\"}", + "zh-CN": "输入JSON对象格式,如:{\\\"key\\\":\\\"value\\\"}" + }, + "Null (enter null)": { + "ms-MY": "Null (enter null)", + "us-EN": "Null (enter null)", + "zh-CN": "空值(输入 null)" + }, + "Please enter a valid JSON value": { + "ms-MY": "Please enter a valid JSON value", + "us-EN": "Please enter a valid JSON value", + "zh-CN": "请输入有效的JSON值" + }, + "Input value too large (exceeds 10240 characters)": { + "ms-MY": "Input value too large (exceeds 10240 characters)", + "us-EN": "Input value too large (exceeds 10240 characters)", + "zh-CN": "输入值过大(超过10240字符)" + }, + "Invalid numeric format": { + "ms-MY": "Invalid numeric format", + "us-EN": "Invalid numeric format", + "zh-CN": "无效的数字格式" + }, + "Boolean must be true or false": { + "ms-MY": "Boolean must be true or false", + "us-EN": "Boolean must be true or false", + "zh-CN": "布尔值只能是 true 或 false" + }, + "Null value must be null": { + "ms-MY": "Null value must be null", + "us-EN": "Null value must be null", + "zh-CN": "空值只能是 null" + }, + "Expected array format, e.g., [1,2,3]": { + "ms-MY": "Expected array format, e.g., [1,2,3]", + "us-EN": "Expected array format, e.g., [1,2,3]", + "zh-CN": "期望数组格式,如:[1,2,3]" + }, + "Expected object format, e.g., {\"key\":\"value\"}": { + "ms-MY": "Expected object format, e.g., {\\\"key\\\":\\\"value\\\"}", + "us-EN": "Expected object format, e.g., {\\\"key\\\":\\\"value\\\"}", + "zh-CN": "期望对象格式,如:{\\\"key\\\":\\\"value\\\"}" + }, + "Unknown data type": { + "ms-MY": "Jenis data tidak diketahui", + "us-EN": "Unknown data type", + "zh-CN": "未知的数据类型" + }, + "JSON parse error: %1": { + "ms-MY": "Ralat parse JSON: %1", + "us-EN": "JSON parse error: %1", + "zh-CN": "JSON解析错误: %1" + }, + "Conversion error: %1": { + "ms-MY": "Ralat penukaran: %1", + "us-EN": "Conversion error: %1", + "zh-CN": "转换错误: %1" + }, + "General JSON Editor": { + "ms-MY": "Penyunting JSON Am", + "us-EN": "General JSON Editor", + "zh-CN": "通用 JSON 编辑" + }, + "OK": { + "ms-MY": "OK", + "us-EN": "OK", + "zh-CN": "确定" + }, + "Please enter JSON:": { + "ms-MY": "Sila masukkan JSON:", + "us-EN": "Please enter JSON:", + "zh-CN": "请输入 JSON:" + }, + "Warning": { + "ms-MY": "Amaran", + "us-EN": "Warning", + "zh-CN": "警告" + }, + "JSON content cannot be empty": { + "ms-MY": "Kandungan JSON tidak boleh kosong", + "us-EN": "JSON content cannot be empty", + "zh-CN": "JSON 内容不能为空" + }, + "JSON content is too large and may cause a crash": { + "ms-MY": "Kandungan JSON terlalu besar dan mungkin menyebabkan kerosakan", + "us-EN": "JSON content is too large and may cause a crash", + "zh-CN": "JSON 内容过大,可能导致崩溃" + }, + "Parse Error": { + "ms-MY": "Ralat Parse", + "us-EN": "Parse Error", + "zh-CN": "解析错误" + }, + "JSON parse failed:\n%1": { + "ms-MY": "Parse JSON gagal:\\n%1", + "us-EN": "JSON parse failed:\\n%1", + "zh-CN": "JSON 解析失败:\\n%1" + }, + "Integer number control type mismatch": { + "ms-MY": "Jenis kawalan nombor integer tidak sepadan", + "us-EN": "Integer number control type mismatch", + "zh-CN": "数字控件INT类型错误" + }, + "Enter an integer value": { + "ms-MY": "Masukkan nilai integer", + "us-EN": "Enter an integer value", + "zh-CN": "输入数字值(整数)" + }, + "Enter a decimal value": { + "ms-MY": "Masukkan nilai perpuluhan", + "us-EN": "Enter a decimal value", + "zh-CN": "输入数字值(小数)" + } + } +} \ No newline at end of file