From 09900a1cb7282c1d0ab8851c7c83b8bf70901453 Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Fri, 14 Nov 2025 01:42:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 11 - git_version.h.in | 4 - needToTranslate.txe | 0 needToTranslate.txt | 192 +++++ src/launcher/GUI/JsonEditorDialog.h | 8 +- src/launcher/GUI/loadingWidget.h | 23 +- src/launcher/GUI/loginWindow.h | 11 +- src/launcher/GUI/mainwindow.h | 6 +- src/launcher/GUI/pages/logPageWidget.h | 14 +- src/launcher/GUI/pages/settingWidget.h | 24 +- src/launcher/GUI/pages/sqlControlWidget.h | 30 +- src/launcher/GUI/pages/summaryDataPage.h | 8 +- src/launcher/GUI/uiModule/uiChart_WaveForm.h | 12 +- .../uiModule/uiModule_cameraRealTimeCapture.h | 24 +- .../GUI/uiModule/uiModule_cpkCalculate.h | 24 +- .../GUI/uiModule/uiModule_dumpToExcel.h | 42 +- .../GUI/uiModule/uiModule_historyListWidget.h | 14 +- .../GUI/uiModule/uiModule_menuListWdiget.h | 4 +- .../uiModule/uiModule_softwareDataDisplay.h | 2 +- .../uiModule/uiModule_summaryDataManager.h | 8 +- src/launcher/appConfig/auth.hpp | 12 +- translation.json | 795 +++++++++++------- 22 files changed, 811 insertions(+), 457 deletions(-) delete mode 100644 git_version.h.in delete mode 100644 needToTranslate.txe create mode 100644 needToTranslate.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index e28661f..9f0f6df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -302,15 +302,4 @@ add_compile_options("$<$:/utf-8>") string(TIMESTAMP RUN_TIME) message( " project end : " ${RUN_TIME} "TYPE:"${CMAKE_BUILD_TYPE}) -execute_process( - COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE -) -configure_file( - ${CMAKE_SOURCE_DIR}/git_version.h.in - ${CMAKE_BINARY_DIR}/git_version.h - @ONLY -) diff --git a/git_version.h.in b/git_version.h.in deleted file mode 100644 index 76a8ef3..0000000 --- a/git_version.h.in +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef GIT_VERSION_H -#define GIT_VERSION_H -#define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@" -#endif \ No newline at end of file diff --git a/needToTranslate.txe b/needToTranslate.txe deleted file mode 100644 index e69de29..0000000 diff --git a/needToTranslate.txt b/needToTranslate.txt new file mode 100644 index 0000000..d9b4a99 --- /dev/null +++ b/needToTranslate.txt @@ -0,0 +1,192 @@ +("默认标题") -> ("Default Title") +("编辑参数") -> ("Edit Parameters") +("值:") -> ("Value:") +("重试") -> ("Retry") +("重新进行初始化") -> ("Reinitialize") +("离线模式") -> ("Offline Mode") +("正在初始化...") -> ("Initializing...") +("控制台日志...") -> ("Console Log...") +("History") -> ("History") +("历史记录") -> ("History") +("Camera Label") -> ("Camera Label") +("相机标签") -> ("Camera Label") +("放大窗口") -> ("Zoom In") +("缩小窗口") -> ("Zoom Out") +("Go Back") -> ("Go Back") +("返回上一级") -> ("Go Back") +("Back to Menu") -> ("Back to Menu") +("返回目录") -> ("Back to Menu") +("Current Run Data") -> ("Current Run Data") +("长度") -> ("Length") +("待读取") -> ("Pending") +("宽度:") -> ("Width:") +("Detecting...") -> ("Detecting...") +("系统状态: %1\n") -> ("System status: %1\n") +("监控异常") -> ("Monitoring Error") +("监控错误: %1") -> ("Monitor error: %1") +("执行命令") -> ("Execute Command") +("提示") -> ("Confirm") +("确定要执行此操作吗?") -> ("Are you sure you want to execute this action?") +("班次") -> ("Shift") +("SN查询") -> ("SN Search") +("导出为CSV") -> ("Export as CSV") +("CSV文件 (*.csv)") -> ("CSV File (*.csv)") +("导出成功") -> ("Export Successful") +("数据已成功导出到:\n") -> ("Data successfully exported to:\n") +("导出失败") -> ("Export Failed") +("导出CSV文件失败,请检查路径或数据库状态。") -> ("Failed to export CSV. Please check the path or database status.") +("刷新") -> ("Refresh") +("查询") -> ("Search") +("导出") -> ("Export") +("数据库操作界面") -> ("Database Operations") +("服务已离线") -> ("Service is offline") +("权限不足") -> ("Insufficient permissions") +("您没有足够的权限执行此操作。\n\n需要权限级别: %1\n当前权限级别: %2") -> ("You do not have sufficient permissions to perform this action.\n\nRequired level: %1\nCurrent level: %2") +("日志") -> ("Log") +("控制台") -> ("Console") +("系统日志") -> ("System Log") +("打开日志文件夹") -> ("Open Log Folder") +("自动滚动") -> ("Auto Scroll") +("确定") -> ("Confirm") +("欢迎!") -> ("Welcome!") +("工程师") -> ("Engineer") +("售后") -> ("After-sales") +("调试") -> ("Debug") +("退出") -> ("Exit") +("生产数据采集") -> ("Production Data Collection") +("(规格上限)") -> ("(Spec Upper Limit)") +("(均值)") -> ("(Mean)") +("(标准差)") -> ("(Std Dev)") +("(规格下限)") -> ("(Spec Lower Limit)") +("CPK计算") -> ("CPK Calculation") +("cpk长度") -> ("CPK Length") +("cpk宽度") -> ("CPK Width") +("输入坐标") -> ("Enter Coordinates") +("请输入X坐标") -> ("Enter X coordinate") +("请输入Y坐标") -> ("Enter Y coordinate") +("X坐标:") -> ("X Coordinate:") +("Y坐标:") -> ("Y Coordinate:") +("输入错误") -> ("Input Error") +("请输入有效的坐标数值") -> ("Please enter valid coordinates") +("左上") -> ("Top-Left") +("中上") -> ("Top-Center") +("右上") -> ("Top-Right") +("中右") -> ("Right-Center") +("中心") -> ("Center") +("中左") -> ("Left-Center") +("左下") -> ("Bottom-Left") +("中下") -> ("Bottom-Center") +("右下") -> ("Bottom-Right") +("请按照数字顺序依次拍摄标定点图像") -> ("Please capture calibration point images in numeric order") +("拍摄当前点") -> ("Capture Current Point") +("上一个") -> ("Previous") +("下一个") -> ("Next") +("修改坐标") -> ("Modify Coordinates") +("重新拍摄当前点") -> ("Retake Current Point") +("全部重新拍照") -> ("Retake All Points") +("准备开始标定") -> ("Ready to start calibration") +("第 %1 个标定点已经拍摄过了") -> ("Point %1 has already been captured") +("已拍摄第 %1 个标定点") -> ("Captured point %1") +("已取消第 %1 个标定点的坐标输入") -> ("Cancelled coordinate input for point %1") +("第 %1 个标定点没有图像,无法修改坐标") -> ("Point %1 has no image, cannot modify coordinates") +("已修改第 %1 个标定点的坐标") -> ("Modified coordinates for point %1") +("重新拍摄选项") -> ("Retake Options") +("请选择操作:") -> ("Select an action:") +("重新拍摄图像") -> ("Retake Image") +("仅修改坐标") -> ("Modify Coordinates Only") +("已重新拍摄第 %1 个标定点") -> ("Retook point %1") +("确认重新拍摄") -> ("Confirm Retake") +("确定要全部重新拍摄吗?\n这将清除所有已拍摄的图像和坐标数据!") -> ("Are you sure you want to retake all points?\nThis will clear all captured images and coordinate data!") +("已重置所有标定点,请重新开始标定") -> ("All calibration points have been reset. Please start calibration again") +("九点标定完成!正在处理数据...") -> ("Nine-point calibration complete! Processing data...") +("标定计算完成!") -> ("Calibration calculations complete!") +("保存标定结果...") -> ("Saving calibration results...") +("开始时间:") -> ("Start Time:") +("结束时间:") -> ("End Time:") +("导出数据为表格") -> ("Export Data to Table") +("请选择日期") -> ("Please select a date") +("导出选项") -> ("Export Options") +("选择导出路径") -> ("Select Export Path") +("导出指定时间段数据为csv表格") -> ("Export specified time-range data to CSV") +("导出数据为CSV表格") -> ("Export data to CSV") +("搜索结果") -> ("Search Results") +("找不到数据") -> ("No data found") +("检索不到数据!") -> ("No data found!") +("CSV文件保存成功") -> ("CSV file saved successfully") +("无法创建CSV文件") -> ("Unable to create CSV file") +("没有权限或空间不足!") -> ("No permission or insufficient space!") +("成功!") -> ("Export succeeded!") +("无法打开CSV文件") -> ("Unable to open CSV file") +("文件已存在且无法被写入!") -> ("File already exists and cannot be written!") +("刷新相机") -> ("Refresh Cameras") +("开始取流") -> ("Start Grabbing") +("保存图像") -> ("Save Image") +("实时取流") -> ("Real-time Grabbing") +("提示") -> ("Notice") +("没有可保存的图像") -> ("No image available to save") +("保存失败") -> ("Save Failed") +("无法保存图像到所选位置") -> ("Unable to save image to selected location") +("停止取流") -> ("Stop Grabbing") +("当前版本: v%1 | 提交版本: %2") -> ("Current version: v%1 | Commit: %2") +("选择语言/Language/Bahasa:") -> ("Select Language / Language / Bahasa:") +("设置1920x1040") -> ("Set 1920x1040") +("九点标定") -> ("Nine-Point Calibration") +("相机实时取流(只适配软触发相机)") -> ("Camera Real-time Capture (soft-trigger only)") +("打开配置文件") -> ("Open Config File") +("小工具") -> ("Toolbox") +("运行数据") -> ("Run Data") +("OK数量") -> ("OK Count") +("NG数量") -> ("NG Count") +("总数量") -> ("Total Count") +("JSON 表格编辑器") -> ("JSON Table Editor") +("选项") -> ("Option") +("值") -> ("Value") +("保存") -> ("Save") +("取消") -> ("Cancel") +("第 %1 行数据不完整") -> ("Row %1 data is incomplete") +("第 %1 行 key 为空") -> ("Row %1 key is empty") +("第 %1 行找不到原始类型信息") -> ("Original type information not found for row %1") +("类型验证失败") -> ("Type Validation Failed") +("第 %1 行值验证失败:\n%2") -> ("Row %1 value validation failed:\n%2") +("布尔值控件类型错误") -> ("Boolean control type mismatch") +("数字控件类型错误") -> ("Number control type mismatch") +("字符串控件类型错误") -> ("String control type mismatch") +("获取值错误: %1") -> ("Get value error: %1") +("字符串") -> ("String") +("数字") -> ("Number") +("布尔") -> ("Boolean") +("数组") -> ("Array") +("对象") -> ("Object") +("空值") -> ("Null") +("未知") -> ("Unknown") +("输入字符串值(不需要引号)") -> ("Enter a string value (no quotes required)") +("输入数字值(整数或小数)") -> ("Enter a numeric value (integer or decimal)") +("输入布尔值(true 或 false)") -> ("Enter a boolean value (true or false)") +("输入JSON数组格式,如:[1,2,3] 或 [\"a\",\"b\"]") -> ("Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]") +("输入JSON对象格式,如:{\"key\":\"value\"}") -> ("Enter a JSON object, e.g., {\"key\":\"value\"}") +("空值(输入 null)") -> ("Null (enter null)") +("请输入有效的JSON值") -> ("Please enter a valid JSON value") +("输入值过大(超过10240字符)") -> ("Input value too large (exceeds 10240 characters)") +("无效的数字格式") -> ("Invalid numeric format") +("布尔值只能是 true 或 false") -> ("Boolean must be true or false") +("空值只能是 null") -> ("Null value must be null") +("期望数组格式,如:[1,2,3]") -> ("Expected array format, e.g., [1,2,3]") +("期望对象格式,如:{\"key\":\"value\"}") -> ("Expected object format, e.g., {\"key\":\"value\"}") +("未知的数据类型") -> ("Unknown data type") +("JSON解析错误: %1") -> ("JSON parse error: %1") +("转换错误: %1") -> ("Conversion error: %1") +("通用 JSON 编辑") -> ("General JSON Editor") +("确定") -> ("OK") +("请输入 JSON:") -> ("Please enter JSON:") +("警告") -> ("Warning") +("JSON 内容不能为空") -> ("JSON content cannot be empty") +("JSON 内容过大,可能导致崩溃") -> ("JSON content is too large and may cause a crash") +("解析错误") -> ("Parse Error") +("JSON 解析失败:\n%1") -> ("JSON parse failed:\n%1") +("错误") -> ("Error") +("数字控件INT类型错误") -> ("Integer number control type mismatch") +("输入数字值(整数)") -> ("Enter an integer value") +("输入数字值(小数)") -> ("Enter a decimal value") +("执行命令") -> ("Execute Command") +("提示") -> ("Confirm") +("确定要执行此操作吗?") -> ("Are you sure you want to execute this action?") diff --git a/src/launcher/GUI/JsonEditorDialog.h b/src/launcher/GUI/JsonEditorDialog.h index 2e0735e..496795a 100644 --- a/src/launcher/GUI/JsonEditorDialog.h +++ b/src/launcher/GUI/JsonEditorDialog.h @@ -453,9 +453,9 @@ private: case JsonValueType::Boolean: return TR("Enter a boolean value (true or false)"); case JsonValueType::Array: - return TR("Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]"); + return "输入JSON数组格式,如:[1, 2, 3] or [\"a\",\"b\"]"; case JsonValueType::Object: - return TR("Enter a JSON object, e.g., {\"key\":\"value\"}"); + return "输入JSON对象格式,如: {\"key\":\"value\"}"; case JsonValueType::Null: return TR("Null (enter null)"); default: @@ -524,11 +524,11 @@ private: // 验证类型是否匹配 if (expectedType == JsonValueType::Array && !result.is_array()) { - errorMsg = TR("Expected array format, e.g., [1,2,3]"); + errorMsg = "期望数组格式,如:[1,2,3]"; return false; } if (expectedType == JsonValueType::Object && !result.is_object()) { - errorMsg = TR("Expected object format, e.g., {\"key\":\"value\"}"); + errorMsg = "期望对象格式,如:{key:value}"; return false; } return true; diff --git a/src/launcher/GUI/loadingWidget.h b/src/launcher/GUI/loadingWidget.h index ace367c..77b2e3f 100644 --- a/src/launcher/GUI/loadingWidget.h +++ b/src/launcher/GUI/loadingWidget.h @@ -1,4 +1,5 @@ -#include +#include +#include #include #include #include @@ -18,8 +19,8 @@ public: QMovie* movie = nullptr; QTextEdit* initLog = nullptr; QTextEdit* consoleLog = nullptr; - fancyButtonText* retryBtn = new fancyButtonText("重试", 100, 50, "重新进行初始化"); - fancyButtonText* manualBtn = new fancyButtonText("离线模式", 180, 50, "离线模式"); + fancyButtonText* retryBtn = new fancyButtonText(TR("Retry"), 100, 50, TR("Reinitialize")); + fancyButtonText* manualBtn = new fancyButtonText(TR("Offline Mode"), 180, 50, TR("Offline Mode")); QGridLayout* glayout = new QGridLayout(this); QGridLayout* logLayout = new QGridLayout(this); loadingWidget(fSignalHub* bridgeIn){ @@ -52,11 +53,11 @@ public: "border: 0px solid red;" "border-radius: 0px;")); initLog->setReadOnly(true); - QFont font("微软雅黑", 8); + QFont font("Microsoft YaHei", 8); - initLog->setFont(font); - initLog->setTextColor(Qt::white); - initLog->append("正在初始化..."); + initLog->setFont(font); + initLog->setTextColor(Qt::white); + initLog->append(TR("Initializing...")); logLayout->addWidget(initLog, 0, 0); @@ -68,10 +69,10 @@ public: "border-radius: 0px;")); consoleLog->setReadOnly(true); consoleLog->setFixedWidth(720); - QFont font2("微软雅黑", 7); - consoleLog->setFont(font2); - consoleLog->setTextColor(Qt::white); - consoleLog->append("控制台日志..."); + QFont font2("Microsoft YaHei", 7); + consoleLog->setFont(font2); + consoleLog->setTextColor(Qt::white); + consoleLog->append(TR("Console Log...")); logLayout->addWidget(consoleLog, 1, 0,Qt::AlignCenter|Qt::AlignTop); //重试或者离线模式等按钮 diff --git a/src/launcher/GUI/loginWindow.h b/src/launcher/GUI/loginWindow.h index fb0114f..7133a7e 100644 --- a/src/launcher/GUI/loginWindow.h +++ b/src/launcher/GUI/loginWindow.h @@ -1,4 +1,5 @@ -#include +#include +#include #include #include #include @@ -31,15 +32,15 @@ public: palette.setColor(QPalette::WindowText, Qt::white); layout= new QVBoxLayout(this); - button = new fancyButtonText("确定", 100, 40, ""); + button = new fancyButtonText(TR("Confirm"), 100, 40, ""); - label=new QLabel("欢迎!"); + label=new QLabel(TR("Welcome!")); label->setAlignment(Qt::AlignHCenter); label->setFont(QFont("Microsoft YaHei", 30, QFont::Bold)); label->setPalette(palette); comboBox= new QComboBox; - comboBox->addItems({ u8"工程师",u8"售后",u8"调试" }); + comboBox->addItems({ TR("Engineer"),TR("After-sales"),TR("Debug") }); comboBox->setFont(QFont("Microsoft YaHei", 14)); comboBox->setStyleSheet("QComboBox { padding-left: 4px; padding-right: 4px; }" "QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: right; }" @@ -56,7 +57,7 @@ public: passwordEdit.setFont(QFont("Microsoft YaHei", 12, QFont::Bold)); layout->addWidget(&passwordEdit); - exitBtn = new fancyButtonText(u8"退出", 100, 40, ""); + exitBtn = new fancyButtonText(TR("Exit"), 100, 40, ""); QObject::connect(exitBtn, &QPushButton::clicked, [=]() { exit(0); }); diff --git a/src/launcher/GUI/mainwindow.h b/src/launcher/GUI/mainwindow.h index a1304c6..6a3c9ee 100644 --- a/src/launcher/GUI/mainwindow.h +++ b/src/launcher/GUI/mainwindow.h @@ -79,9 +79,9 @@ public: layout->addWidget(rightWidget); // 左侧 - QPalette palette; - palette.setColor(QPalette::WindowText, Qt::white); - QFont font("微软雅黑", 18, QFont::Bold); + QPalette palette; + palette.setColor(QPalette::WindowText, Qt::white); + QFont font("Microsoft YaHei", 18, QFont::Bold); QLabel* factoryIconLabel = new QLabel(); factoryIconLabel->setPixmap(QPixmap(":/icon/icon/logo_Dongsheng.png")); // 设置图标 diff --git a/src/launcher/GUI/pages/logPageWidget.h b/src/launcher/GUI/pages/logPageWidget.h index 6056c5c..361f233 100644 --- a/src/launcher/GUI/pages/logPageWidget.h +++ b/src/launcher/GUI/pages/logPageWidget.h @@ -55,7 +55,7 @@ public: logWidget() { QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - QFont font("微软雅黑", 24, QFont::Bold); + QFont font("Microsoft YaHei", 24, QFont::Bold); // 初始化批量处理定时器 batchUpdateTimer = new QTimer(this); @@ -73,7 +73,7 @@ public: Layout->setContentsMargins(0, 0, 0, 0); Layout->setAlignment(Qt::AlignLeft | Qt::AlignTop); - Title = new QLabel(u8"日志"); + Title = new QLabel(TR("Log")); Title->setFont(font); Title->setPalette(palette); Title->setAlignment(Qt::AlignLeft); @@ -104,8 +104,8 @@ public: stdConsoleOutput.setStyleSheet(textEditStyle); qtConsoleOutput.setStyleSheet(textEditStyle); - addLogWidget(u8"控制台", &stdConsoleOutput, logType::stdConsle); - addLogWidget(u8"系统日志", &qtConsoleOutput, logType::qtConsle); + addLogWidget(TR("Console"), &stdConsoleOutput, logType::stdConsle); + addLogWidget(TR("System Log"), &qtConsoleOutput, logType::qtConsle); btns[0]->pressed(); Layout->addWidget(widgets); @@ -118,7 +118,7 @@ public: void addLogWidget(QString btnText, QPlainTextEdit* textWidget, logType type) { QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - QFont font2("微软雅黑", 8); + QFont font2("Microsoft YaHei", 8); int index = btns.size(); gradientButton* btn = new gradientButton(160, 50, btnText, ""); @@ -144,8 +144,8 @@ public: QHBoxLayout* toolHLayout2 = new QHBoxLayout(); widgetLayout->addLayout(toolHLayout2); - QPushButton* openDirBtn = new QPushButton("打开日志文件夹"); - QPushButton* autoScrollBtn = new QPushButton("自动滚动"); + QPushButton* openDirBtn = new QPushButton(TR("Open Log Folder")); + QPushButton* autoScrollBtn = new QPushButton(TR("Auto Scroll")); autoScrollBtn->setCheckable(true); autoScrollBtn->setChecked(true); diff --git a/src/launcher/GUI/pages/settingWidget.h b/src/launcher/GUI/pages/settingWidget.h index d55b084..a3f9157 100644 --- a/src/launcher/GUI/pages/settingWidget.h +++ b/src/launcher/GUI/pages/settingWidget.h @@ -118,7 +118,7 @@ public: Title->setPalette(palette); Title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); - QLabel* versionShow = new QLabel(QString(u8"当前版本: v%1 | 提交版本: %2").arg(QString::fromStdString(softwareVersion)).arg(GIT_COMMIT_HASH)); + QLabel* versionShow = new QLabel(QString(TR("Current version: v%1")).arg(QString::fromStdString(softwareVersion))); versionShow->setFont(font2); versionShow->setPalette(palette); versionShow->setAlignment(Qt::AlignRight | Qt::AlignVCenter); @@ -133,13 +133,13 @@ public: //语言设置 { // 创建语言设置分组容器 - QGroupBox* languageGroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("Language Settings"))); + QGroupBox* languageGroupBox = new QGroupBox(TR("Language Settings")); languageGroupBox->setObjectName("languageGroupBox"); languageGroupBox->setStyleSheet(R"( QGroupBox#languageGroupBox { background: rgb(50, 55, 60); border-radius: 10px; - font-family: "微软雅黑"; + font-family: "Microsoft YaHei"; font-size: 14px; font-weight: bold; color: white; @@ -159,7 +159,7 @@ public: QHBoxLayout* languageSelectLayout = new QHBoxLayout(); languageSelectLayout->setSpacing(15); - QLabel* languageSelectLabel = new QLabel(u8"选择语言/Language/Bahasa:"); + QLabel* languageSelectLabel = new QLabel(TR("Select Language / Language / Bahasa:")); languageSelectLabel->setFont(font2); languageSelectLabel->setPalette(palette); languageSelectLabel->setMinimumWidth(200); @@ -218,7 +218,7 @@ public: //控制台 { // 创建控制台设置分组容器 - QGroupBox* consoleGroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("Window Settings"))); + QGroupBox* consoleGroupBox = new QGroupBox(TR("Window Settings")); consoleGroupBox->setObjectName("consoleGroupBox"); consoleGroupBox->setStyleSheet(R"( QGroupBox#consoleGroupBox { @@ -242,7 +242,7 @@ public: consoleMainLayout->setSpacing(10); // 添加说明文字 - QLabel* consoleDescription = new QLabel(QString::fromStdString(Translation::getInstance().translate("Control the visibility of the debug console window"))); + QLabel* consoleDescription = new QLabel(TR("Control the visibility of the debug console window")); consoleDescription->setFont(font2); consoleDescription->setPalette(palette); consoleDescription->setStyleSheet("color: rgb(180, 180, 180);"); @@ -281,7 +281,7 @@ public: } )"); - fancyButtonText* setResolutionBtn = new fancyButtonText(u8"设置1920x1040"); + fancyButtonText* setResolutionBtn = new fancyButtonText(TR("Set 1920x1040")); setResolutionBtn->setStyleSheet(R"( fancyButtonText { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, @@ -378,7 +378,7 @@ public: //小工具 { // 创建控制台设置分组容器 - QGroupBox* GroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("小工具"))); + QGroupBox* GroupBox = new QGroupBox(TR("Toolbox")); GroupBox->setObjectName("toolsGroupBox"); GroupBox->setStyleSheet(R"( QGroupBox#toolsGroupBox { @@ -401,17 +401,17 @@ public: consoleMainLayout->setContentsMargins(15, 15, 15, 15); consoleMainLayout->setSpacing(10); { - fancyButtonText* btn = new fancyButtonText(u8"九点标定"); - QObject::connect(btn, &QPushButton::clicked, &_calibration,&QWidget::show); + fancyButtonText* btn = new fancyButtonText(TR("Nine-Point Calibration")); + QObject::connect(btn, &QPushButton::clicked, &_calibration, &QWidget::show); consoleMainLayout->addWidget(btn); } { - fancyButtonText* btn = new fancyButtonText(u8"相机实时取流(只适配软触发相机)"); + fancyButtonText* btn = new fancyButtonText(TR("Camera Real-time Capture (soft-trigger only)")); QObject::connect(btn, &QPushButton::clicked, &_cameraRealTimeCapture, &QWidget::show); consoleMainLayout->addWidget(btn); } { - fancyButtonText* btn = new fancyButtonText(u8"打开配置文件"); + fancyButtonText* btn = new fancyButtonText(TR("Open Config File")); consoleMainLayout->addWidget(btn); connect(btn, &QPushButton::clicked, [=]() { QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(appConfig::getInstance().missionJsonPath))); diff --git a/src/launcher/GUI/pages/sqlControlWidget.h b/src/launcher/GUI/pages/sqlControlWidget.h index e090532..65a0b3b 100644 --- a/src/launcher/GUI/pages/sqlControlWidget.h +++ b/src/launcher/GUI/pages/sqlControlWidget.h @@ -14,8 +14,8 @@ class sqliteReader : public QWidget{ Q_OBJECT public: - sqliteReader(SQLiteDB* dbIn):db(dbIn) { - QFont font("微软雅黑", 12, QFont::Bold); + sqliteReader(SQLiteDB* dbIn):db(dbIn) { + QFont font("Microsoft YaHei", 12, QFont::Bold); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); @@ -24,7 +24,7 @@ public: layout->addLayout(vLayout); //1-1-1 - QLabel* showLabel = new QLabel(u8"班次"); + QLabel* showLabel = new QLabel(TR("Shift")); showLabel->setFont(font); showLabel->setPalette(palette); vLayout->addWidget(showLabel); @@ -43,7 +43,7 @@ public: connect(refreshBtn, &QPushButton::clicked, this, [=]() {refreshTable(); }); - QLabel* showLabel2 = new QLabel(u8"SN查询"); + QLabel* showLabel2 = new QLabel(TR("SN Search")); showLabel2->setFont(font); showLabel2->setPalette(palette); vLayout->addWidget(showLabel2); @@ -101,9 +101,9 @@ public: // 打开文件管理器,默认文件名为表名.csv QString filePath = QFileDialog::getSaveFileName( this, - u8"导出为CSV", + TR("Export as CSV"), QDir::homePath() + "/" + tableName + ".csv", - u8"CSV文件 (*.csv)" + TR("CSV File (*.csv)") ); if (filePath.isEmpty()) { @@ -118,9 +118,9 @@ public: // 提示导出结果 if (success) { - QMessageBox::information(this, u8"导出成功", u8"数据已成功导出到:\n" + filePath); + QMessageBox::information(this, TR("Export Successful"), TR("Data successfully exported to:\n") + filePath); } else { - QMessageBox::warning(this, u8"导出失败", u8"导出CSV文件失败,请检查路径或数据库状态。"); + QMessageBox::warning(this, TR("Export Failed"), TR("Failed to export CSV. Please check the path or database status.")); } } @@ -130,9 +130,9 @@ private: QComboBox* tableSelectComboBox = new QComboBox(); QVBoxLayout* layout = new QVBoxLayout(this); QTableView* tableWidget = new QTableView(); - fancyButtonText* refreshBtn = new fancyButtonText(u8"刷新", 80, 25, ""); - fancyButtonText* searchSnBtn = new fancyButtonText(u8"查询", 80, 25, ""); - fancyButtonText* dumpToCsvBtn = new fancyButtonText(u8"导出", 80, 25, ""); + fancyButtonText* refreshBtn = new fancyButtonText(TR("Refresh"), 80, 25, ""); + fancyButtonText* searchSnBtn = new fancyButtonText(TR("Search"), 80, 25, ""); + fancyButtonText* dumpToCsvBtn = new fancyButtonText(TR("Export"), 80, 25, ""); protected: void showEvent(QShowEvent* event) override { QWidget::showEvent(event); @@ -148,7 +148,7 @@ public: QStackedWidget* widgets = new QStackedWidget(); sqliteReader _sqliteReader; QTableWidget* sqlWidget = new QTableWidget(); - QLabel* disconnnectedLabel = new QLabel("服务已离线"); + QLabel* disconnnectedLabel = new QLabel(TR("Service is offline")); sqlControlWidget(appConfig* _configIN):_sqliteReader(_configIN->dataBase){ this->setObjectName("sqlControlWidget"); @@ -160,8 +160,8 @@ public: )"); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - QFont font("微软雅黑", 24, QFont::Bold); - QFont font2("微软雅黑", 108, QFont::Bold); + QFont font("Microsoft YaHei", 24, QFont::Bold); + QFont font2("Microsoft YaHei", 108, QFont::Bold); widgets->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); widgets->setMaximumSize(9999, 9999); @@ -173,7 +173,7 @@ public: Layout->setContentsMargins(0, 0, 0, 0); Layout->setAlignment(Qt::AlignLeft | Qt::AlignTop); - Title = new QLabel(u8"数据库操作界面"); + Title = new QLabel(TR("Database Operations")); Title->setFont(font); Title->setPalette(palette); Title->setAlignment(Qt::AlignLeft); diff --git a/src/launcher/GUI/pages/summaryDataPage.h b/src/launcher/GUI/pages/summaryDataPage.h index 735e459..4dc27c7 100644 --- a/src/launcher/GUI/pages/summaryDataPage.h +++ b/src/launcher/GUI/pages/summaryDataPage.h @@ -20,16 +20,16 @@ public: :m_config(config),m_json(json){ QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - QFont font("微软雅黑", 24, QFont::Bold); - QFont font2("微软雅黑", 108, QFont::Bold); + QFont font("Microsoft YaHei", 24, QFont::Bold); + QFont font2("Microsoft YaHei", 108, QFont::Bold); this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - this->setObjectName(u8"生产数据采集"); + this->setObjectName(TR("Production Data Collection")); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setAlignment(Qt::AlignLeft | Qt::AlignTop); - m_title = new QLabel(u8"生产数据采集"); + m_title = new QLabel(TR("Production Data Collection")); m_title->setFont(font); m_title->setPalette(palette); m_title->setAlignment(Qt::AlignLeft); diff --git a/src/launcher/GUI/uiModule/uiChart_WaveForm.h b/src/launcher/GUI/uiModule/uiChart_WaveForm.h index b515dab..9c0634b 100644 --- a/src/launcher/GUI/uiModule/uiChart_WaveForm.h +++ b/src/launcher/GUI/uiModule/uiChart_WaveForm.h @@ -19,12 +19,12 @@ public: m_title(new QLabel(this)), m_plot(new QCustomPlot(this)) { - QString title = QString::fromStdString(json.value("key", "默认标题")); + QString title = QString::fromStdString(json.value("key", "Default Title")); m_limitHigh = json.value("limitHigh", 100.0); m_limitLow = json.value("limitLow", 0.0); m_maxPoints = json.value("maxPoints", 50); - QFont font("微软雅黑", 24, QFont::Bold); + QFont font("Microsoft YaHei", 24, QFont::Bold); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); @@ -81,7 +81,7 @@ public: // 文本提示 m_tracerText = new QCPItemText(m_plot); m_tracerText->setColor(Qt::white); // 文字颜色 - m_tracerText->setFont(QFont("微软雅黑", 10, QFont::Bold)); + m_tracerText->setFont(QFont("Microsoft YaHei", 10, QFont::Bold)); m_tracerText->position->setType(QCPItemPosition::ptPlotCoords); m_tracerText->setBrush(QBrush(QColor(0, 0, 0, 150))); // 半透明背景 m_tracerText->setPadding(QMargins(5, 2, 5, 2)); // 留点内边距 @@ -89,7 +89,7 @@ public: // 绑定鼠标移动事件 connect(m_plot, &QCustomPlot::mouseMove, this, &WaveFormWidget::onMouseMoveInPlot); - if (title.contains("对齐度")) { + if (title.contains("对齐度")) { auto fixedTicker = QSharedPointer(new QCPAxisTickerFixed); fixedTicker->setTickStep(0.1); fixedTicker->setScaleStrategy(QCPAxisTickerFixed::ssNone); // 不自动放大 @@ -160,7 +160,7 @@ public: protected: void contextMenuEvent(QContextMenuEvent* event) override { QMenu menu(this); - menu.addAction("编辑参数", this, &WaveFormWidget::editJsonParameters); + menu.addAction(TR("Edit Parameters"), this, &WaveFormWidget::editJsonParameters); menu.exec(event->globalPos()); } @@ -204,7 +204,7 @@ private slots: m_tracer->updatePosition(); m_tracer->setVisible(true); - m_tracerText->setText(QString("%1\n值:%2") + m_tracerText->setText(QString("%1\nValue: %2") .arg(static_cast(std::round(x))) .arg(y, 0, 'f', 2)); m_tracerText->setVisible(true); diff --git a/src/launcher/GUI/uiModule/uiModule_cameraRealTimeCapture.h b/src/launcher/GUI/uiModule/uiModule_cameraRealTimeCapture.h index f4ccc15..5b7a98b 100644 --- a/src/launcher/GUI/uiModule/uiModule_cameraRealTimeCapture.h +++ b/src/launcher/GUI/uiModule/uiModule_cameraRealTimeCapture.h @@ -57,14 +57,14 @@ public: QComboBox* cameraSelectBox = new QComboBox(); vLayout2->addWidget(cameraSelectBox, 0, Qt::AlignTop); - QPushButton* refreshCameraBtn = new QPushButton("刷新相机"); + QPushButton* refreshCameraBtn = new QPushButton(TR("Refresh Cameras")); vLayout2->addWidget(refreshCameraBtn, 0, Qt::AlignTop); - QPushButton* startGrabbing = new QPushButton("开始取流"); + QPushButton* startGrabbing = new QPushButton(TR("Start Grabbing")); startGrabbing->setDisabled(true); vLayout2->addWidget(startGrabbing, 0, Qt::AlignTop); - QPushButton* saveImageBtn = new QPushButton("保存图像"); + QPushButton* saveImageBtn = new QPushButton(TR("Save Image")); saveImageBtn->setDisabled(true); vLayout2->addWidget(saveImageBtn, 0, Qt::AlignTop); @@ -82,20 +82,20 @@ public: QLabel* showNowTimeImageLabel = new QLabel; vLayout2->addWidget(showNowTimeImageLabel, 1, Qt::AlignTop); - showNowTimeImageLabel->setText("实时取流"); + showNowTimeImageLabel->setText(TR("Real-time Grabbing")); showNowTimeImageLabel->setStyleSheet(" border - radius: 10px; border: 1px solid rgb(70, 75, 80);"); showNowTimeImageLabel->setFixedSize(800, 800); _GrabbingThread = new GrabbingThread(showNowTimeImageLabel,&mutex); connect(startGrabbing, &QPushButton::clicked, [=]() { - if (_GrabbingThread->isRunning() == false) { + if (_GrabbingThread->isRunning() == false) { showNowTimeImageLabel->clear(); _GrabbingThread->setCameraName(cameraSelectBox->currentText().toStdString()); _GrabbingThread->start(); - startGrabbing->setText("停止取流"); + startGrabbing->setText(TR("Stop Grabbing")); } else { _GrabbingThread->stop(); - startGrabbing->setText("开始取流"); + startGrabbing->setText(TR("Start Grabbing")); } }); connect(this, &cameraRealTimeCapture::close, [=]() { @@ -107,17 +107,17 @@ public: connect(saveImageBtn, &QPushButton::clicked, [=]() { QMutexLocker locker(&mutex); const QPixmap* pix = showNowTimeImageLabel->pixmap(); - if (!pix || pix->isNull()) { - QMessageBox::warning(this, "提示", "没有可保存的图像"); + if (!pix || pix->isNull()) { + QMessageBox::warning(this, TR("Notice"), TR("No image available to save")); return; } QString ts = QDateTime::currentDateTime().toString("yyyyMMdd_HHmmsszzz"); QString suggested = QString("snapshot_%1.png").arg(ts); - QString filePath = QFileDialog::getSaveFileName(this, "保存图像", QDir::homePath() + "/" + suggested, + QString filePath = QFileDialog::getSaveFileName(this, TR("Save Image"), QDir::homePath() + "/" + suggested, "PNG (*.png);;JPEG (*.jpg *.jpeg);;BMP (*.bmp)"); if (filePath.isEmpty()) return; if (!pix->save(filePath)) { - QMessageBox::warning(this, "保存失败", "无法保存图像到所选位置"); + QMessageBox::warning(this, TR("Save Failed"), TR("Unable to save image to selected location")); } }); @@ -132,7 +132,7 @@ protected: } // 复位按钮文本(如果按钮仍存在) if (auto btn = this->findChild("btn_startGrabbing")) { - btn->setText("开始取流"); + btn->setText(TR("Start Grabbing")); } QWidget::closeEvent(event); } diff --git a/src/launcher/GUI/uiModule/uiModule_cpkCalculate.h b/src/launcher/GUI/uiModule/uiModule_cpkCalculate.h index d241987..bec3115 100644 --- a/src/launcher/GUI/uiModule/uiModule_cpkCalculate.h +++ b/src/launcher/GUI/uiModule/uiModule_cpkCalculate.h @@ -20,7 +20,7 @@ public: layout->setAlignment(Qt::AlignTop); title = new QLabel(Name); - QFont font("微软雅黑", 14, QFont::Bold); + QFont font("Microsoft YaHei", 14, QFont::Bold); title->setFont(font); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); @@ -33,8 +33,8 @@ public: calwidget = new QWidget(); QHBoxLayout* hLayout1 = new QHBoxLayout(calwidget); - QFont font2("微软雅黑", 26, QFont::Bold); - QFont font3("微软雅黑", 7, QFont::Bold); + QFont font2("Microsoft YaHei", 26, QFont::Bold); + QFont font3("Microsoft YaHei", 7, QFont::Bold); //MIN QLabel* minLabel = new QLabel("MIN("); @@ -47,11 +47,11 @@ public: QVBoxLayout* vLayout1 = new QVBoxLayout(); QHBoxLayout* topLayout1 = new QHBoxLayout(); - QLabel* uslLabel = new QLabel(QString::number(USL) + "(规格上限)"); + QLabel* uslLabel = new QLabel(QString::number(USL) + TR(" (Spec Upper Limit)")); uslLabel->setFont(font3); uslLabel->setPalette(palette); - QLabel* avgLabel = new QLabel("-" + QString::number(USL) + u8"(均值)"); + QLabel* avgLabel = new QLabel("-" + QString::number(USL) + TR(" (Mean)")); avgLabel->setFont(font3); avgLabel->setPalette(palette); @@ -62,7 +62,7 @@ public: line->setPalette(palette); line->setFixedHeight(5); - QLabel* deviationLabel = new QLabel(u8"(标准差)"); + QLabel* deviationLabel = new QLabel(TR("(Std Dev)")); deviationLabel->setFont(font3); deviationLabel->setPalette(palette); deviationLabel->setAlignment(Qt::AlignCenter); @@ -87,11 +87,11 @@ public: QVBoxLayout* vLayout1 = new QVBoxLayout(); QHBoxLayout* topLayout1 = new QHBoxLayout(); - QLabel* uslLabel = new QLabel(QString::number(USL) + "(均值)"); + QLabel* uslLabel = new QLabel(QString::number(USL) + TR(" (Mean)")); uslLabel->setFont(font3); uslLabel->setPalette(palette); - QLabel* avgLabel = new QLabel("-" + QString::number(USL) + u8"(规格下限)"); + QLabel* avgLabel = new QLabel("-" + QString::number(USL) + TR(" (Spec Lower Limit)")); avgLabel->setFont(font3); avgLabel->setPalette(palette); @@ -142,8 +142,8 @@ public: "}"); layout = new QVBoxLayout(this); - title = new QLabel("CPK计算"); - QFont font("微软雅黑", 16, QFont::Bold); + title = new QLabel(TR("CPK Calculation")); + QFont font("Microsoft YaHei", 16, QFont::Bold); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); @@ -158,10 +158,10 @@ public: title->setFixedHeight(40); layout->addWidget(title); - window1 = new perCpkWidget("cpk长度"); + window1 = new perCpkWidget(TR("CPK Length")); layout->addWidget(window1); - window2 = new perCpkWidget("cpk宽度"); + window2 = new perCpkWidget(TR("CPK Width")); layout->addWidget(window2); } ~cpkCalculatePanel() diff --git a/src/launcher/GUI/uiModule/uiModule_dumpToExcel.h b/src/launcher/GUI/uiModule/uiModule_dumpToExcel.h index ecb15c2..6945d16 100644 --- a/src/launcher/GUI/uiModule/uiModule_dumpToExcel.h +++ b/src/launcher/GUI/uiModule/uiModule_dumpToExcel.h @@ -43,11 +43,11 @@ private: void setupUi() { QVBoxLayout* layout = new QVBoxLayout(this); - QLabel* startLabel = new QLabel("开始时间:", this); + QLabel* startLabel = new QLabel(TR("Start Time:"), this); startTimeEdit = new QDateTimeEdit(this); startTimeEdit->setDisplayFormat("HH:mm"); - QLabel* endLabel = new QLabel("结束时间:", this); + QLabel* endLabel = new QLabel(TR("End Time:"), this); endTimeEdit = new QDateTimeEdit(this); endTimeEdit->setDisplayFormat("HH:mm"); @@ -77,7 +77,7 @@ public: TimeRangeSelectorWidget* timeSelector; dumpToExcel() { - showMainWidgetBtn = new QPushButton(u8"导出数据为表格"); + showMainWidgetBtn = new QPushButton(TR("Export Data to Table")); showMainWidgetBtn->setStyleSheet("color: white;"); mainWidget = new QWidget; QHBoxLayout* layout = new QHBoxLayout; @@ -90,7 +90,7 @@ public: dateWIdget = new QWidget(); QVBoxLayout* layoutTemp = new QVBoxLayout(); dateWIdget->setLayout(layoutTemp); - QLabel* labelTemp = new QLabel(u8"请选择日期"); + QLabel* labelTemp = new QLabel(TR("Please select a date")); labelTemp->setAlignment(Qt::AlignCenter); layoutTemp->addWidget(labelTemp); layoutTemp->addWidget(calendarW); @@ -103,11 +103,11 @@ public: QVBoxLayout* layoutTemp = new QVBoxLayout(); controlPanel->setLayout(layoutTemp); - QLabel* title = new QLabel(u8"导出选项"); + QLabel* title = new QLabel(TR("Export Options")); title->setAlignment(Qt::AlignCenter); QLabel* space = new QLabel(); - QLabel* selectFolderLabel = new QLabel(u8"选择导出路径"); + QLabel* selectFolderLabel = new QLabel(TR("Select Export Path")); QHBoxLayout* layoutTemp2 = new QHBoxLayout(); openPathSelectBtn = new QPushButton("..."); @@ -119,8 +119,8 @@ public: filePathLineEdit = new QLineEdit("D://"); layoutTemp2->addWidget(filePathLineEdit); - dumpToCsvWithDateLimitBtn = new QPushButton(u8"导出指定时间段数据为csv表格"); - dumpToCsvBtn = new QPushButton(u8"导出数据为CSV表格"); + dumpToCsvWithDateLimitBtn = new QPushButton(TR("Export specified time-range data to CSV")); + dumpToCsvBtn = new QPushButton(TR("Export data to CSV")); layoutTemp->addWidget(title); //layoutTemp->addWidget(data); @@ -173,8 +173,8 @@ public: if (res.rowDatas.size() == 0) { tV->clearAllData(); - tV->Init({u8"搜索结果"}); - std::vector strVec({ "找不到数据" }); + tV->Init({TR("Search Results")}); + std::vector strVec({ TR("No data found") }); tV->addRowDataValue(strVec); return; } @@ -246,7 +246,7 @@ public: #pragma region if (res.rowDatas.size() == 0) { - QMessageBox::critical(nullptr, "Error", u8"检索不到数据!"); + QMessageBox::critical(nullptr, "Error", TR("No data found!")); return; } #pragma endregion 没有数据的对策 @@ -285,11 +285,11 @@ public: } stream << "\n"; } - qDebug() << "CSV文件保存成功"; + qDebug() << TR("CSV file saved successfully"); } else { - qDebug() << "无法创建CSV文件"; - QMessageBox::critical(nullptr, "Error", u8"没有权限或空间不足!"); + qDebug() << TR("Unable to create CSV file"); + QMessageBox::critical(nullptr, "Error", TR("No permission or insufficient space!")); } } else { @@ -315,12 +315,12 @@ public: } system(command.c_str()); #pragma endregion 打开文件夹 - QMessageBox::information(nullptr, "Success", u8"成功!"); - qDebug() << "CSV文件保存成功"; + QMessageBox::information(nullptr, "Success", TR("Export succeeded!")); + qDebug() << TR("CSV file saved successfully"); return; } else { - qDebug() << "无法打开CSV文件"; + qDebug() << TR("Unable to open CSV file"); #pragma region std::string command = "explorer /select, \"" + fileName.toStdString() + "\""; size_t pos = 0; @@ -329,7 +329,7 @@ public: } system(command.c_str()); #pragma endregion 打开文件夹 - QMessageBox::critical(nullptr, "Error", u8"文件已存在且无法被写入!"); + QMessageBox::critical(nullptr, "Error", TR("File already exists and cannot be written!")); } } } @@ -352,7 +352,7 @@ public: stream << QString::fromStdString(data.value) << ","; stream << "\n"; } - qDebug() << "CSV文件保存成功"; + qDebug() << TR("CSV file saved successfully"); } else { qDebug() << "无法创建CSV文件"; @@ -381,7 +381,7 @@ public: return; } else { - qDebug() << "无法打开CSV文件"; + qDebug() << TR("Unable to open CSV file"); #pragma region std::string command = "explorer /select, \"" + fileName.toStdString() + "\""; size_t pos = 0; @@ -390,7 +390,7 @@ public: } system(command.c_str()); #pragma endregion 打开文件夹 - QMessageBox::critical(nullptr, "Error", u8"文件已存在且无法被写入!"); + QMessageBox::critical(nullptr, "Error", TR("File already exists and cannot be written!")); } } #pragma endregion 不需要判断时间的循环 diff --git a/src/launcher/GUI/uiModule/uiModule_historyListWidget.h b/src/launcher/GUI/uiModule/uiModule_historyListWidget.h index 946a019..18dbf2d 100644 --- a/src/launcher/GUI/uiModule/uiModule_historyListWidget.h +++ b/src/launcher/GUI/uiModule/uiModule_historyListWidget.h @@ -20,12 +20,12 @@ public: QLabel* fileNameLabel = new QLabel(this); QLabel* imgShow = new QLabel(); - historyItemWidget(QString title, QSize parentSize, historyPack historyPackIn) + historyItemWidget(QString title, QSize parentSize, historyPack historyPackIn) { - if (historyPackIn.img.isNull()) - return; - _historyPack = historyPackIn; - QFont font(u8"微软雅黑", 12, QFont::Bold); + if (historyPackIn.img.isNull()) + return; + _historyPack = historyPackIn; + QFont font("Microsoft YaHei", 12, QFont::Bold); this->setObjectName("historyItemWidget"); QVBoxLayout* vlayout = new QVBoxLayout(); resultLabel->setText(title); @@ -129,11 +129,11 @@ public: QListWidget* showDataListWidget = new QListWidget(); QVBoxLayout* layout = new QVBoxLayout(this); historyShowListSubThread _historyShowListSubThread; - historyShowListWidget() + historyShowListWidget() { QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); - QFont font(u8"微软雅黑", 16, QFont::Bold); + QFont font("Microsoft YaHei", 16, QFont::Bold); QHBoxLayout* hLayout = new QHBoxLayout(); title->setPalette(palette); diff --git a/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h b/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h index 9ed7862..3d83758 100644 --- a/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h +++ b/src/launcher/GUI/uiModule/uiModule_menuListWdiget.h @@ -16,7 +16,7 @@ public: QLabel* dirLabel = new QLabel(); toolItemWidget(QString title) { - QFont font("微软雅黑", 24, QFont::Bold); + QFont font("Microsoft YaHei", 24, QFont::Bold); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); @@ -86,7 +86,7 @@ public: QString path; for (auto p : pathList) path.append(p + "/"); - QFont font("微软雅黑", 18, QFont::Bold); + QFont font("Microsoft YaHei", 18, QFont::Bold); std::vector result = fileManager::getAllDirs(path); for (auto dirName : result) { diff --git a/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h b/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h index 52aeba2..26d7098 100644 --- a/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h +++ b/src/launcher/GUI/uiModule/uiModule_softwareDataDisplay.h @@ -12,7 +12,7 @@ class softwareDataDisplay : public QWidget { Q_OBJECT public: softwareDataDisplay(QWidget* parent = nullptr) : QWidget(parent) { - QFont font("微软雅黑", 12); + QFont font("Microsoft YaHei", 12); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); QHBoxLayout* layout = new QHBoxLayout(this); diff --git a/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h b/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h index 5312143..5448340 100644 --- a/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h +++ b/src/launcher/GUI/uiModule/uiModule_summaryDataManager.h @@ -123,10 +123,10 @@ public: FrequencyBar* _3DCtBar; summaryDataManager() { - QPalette palette; - palette.setColor(QPalette::WindowText, Qt::white); - QFont font("微软雅黑", 14, QFont::Bold); - QFont font2("微软雅黑", 20, QFont::Bold); + QPalette palette; + palette.setColor(QPalette::WindowText, Qt::white); + QFont font("Microsoft YaHei", 14, QFont::Bold); + QFont font2("Microsoft YaHei", 20, QFont::Bold); widget = new fancyWidget(TR(" Run Data")); /* fancyButtonText* resetBtn = new fancyButtonText(80,40,u8"重置", u8"重置跑料数据"); diff --git a/src/launcher/appConfig/auth.hpp b/src/launcher/appConfig/auth.hpp index ae2e32e..6d7eb07 100644 --- a/src/launcher/appConfig/auth.hpp +++ b/src/launcher/appConfig/auth.hpp @@ -316,9 +316,9 @@ namespace Auth { std::cerr << errorMessage << std::endl; // 显示权限不足的弹窗 - QMessageBox::warning(nullptr, - "权限不足", - QString("您没有足够的权限执行此操作。\n\n需要权限级别: %1\n当前权限级别: %2") + QMessageBox::warning(nullptr, + TR("Insufficient permissions"), + QString(TR("您没有足够的权限执行此操作。\n\n需要权限级别: %1\n当前权限级别: %2")) .arg(QString::fromStdString(userLevelToString(requiredLevel))) .arg(QString::fromStdString(userLevelToString(currentUserLevel)))); } @@ -333,9 +333,9 @@ namespace Auth { std::cerr << errorMessage << std::endl; // 显示权限不足的弹窗(指定父窗口) - QMessageBox::warning(parent, - QString::fromLocal8Bit("权限不足"), - QString::fromLocal8Bit("您没有足够的权限执行此操作。\n\n需要权限级别: %1\n当前权限级别: %2") + QMessageBox::warning(parent, + TR("Insufficient permissions"), + QString(TR("You do not have sufficient permissions to perform this action.\n\nRequired level: %1\nCurrent level: %2")) .arg(QString::fromStdString(userLevelToString(requiredLevel))) .arg(QString::fromStdString(userLevelToString(currentUserLevel)))); } diff --git a/translation.json b/translation.json index 73aa2f1..0877030 100644 --- a/translation.json +++ b/translation.json @@ -1,26 +1,106 @@ { - "current_language": "zh-CN", + "current_language": "us-EN", "section": [ "us-EN", "zh-CN", "ms-MY" ], "translate": { + "(Mean)": { + "ms-MY": "(Purata)", + "us-EN": "(Mean)", + "zh-CN": "(均值)" + }, + "(Spec Lower Limit)": { + "ms-MY": "(Had Bawah Spesifikasi)", + "us-EN": "(Spec Lower Limit)", + "zh-CN": "(规格下限)" + }, + "(Spec Upper Limit)": { + "ms-MY": "(Had Atas Spesifikasi)", + "us-EN": "(Spec Upper Limit)", + "zh-CN": "(规格上限)" + }, + "(Std Dev)": { + "ms-MY": "(Sisihan Piawai)", + "us-EN": "(Std Dev)", + "zh-CN": "(标准差)" + }, "AI Detection System": { "ms-MY": "Sistem Pengesanan AI", "us-EN": "AI Detection System", "zh-CN": "AI检测系统" }, + "After-sales": { + "ms-MY": "Perkhidmatan Selepas Jualan", + "us-EN": "After-sales", + "zh-CN": "售后" + }, "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": "所有密码字段都不能为空" }, + "Are you sure you want to execute this action?": { + "ms-MY": "Adakah anda pasti mahu melaksanakan tindakan ini?", + "us-EN": "Are you sure you want to execute this action?", + "zh-CN": "确定要执行此操作吗?" + }, "Auto Logout": { "ms-MY": "Auto Log Keluar", "us-EN": "Auto Logout", "zh-CN": "自动注销" }, + "Auto Scroll": { + "ms-MY": "Tatal Automatik", + "us-EN": "Auto Scroll", + "zh-CN": "自动滚动" + }, + "Back to Menu": { + "ms-MY": "Kembali ke Menu", + "us-EN": "Back to Menu", + "zh-CN": "返回目录" + }, + "Boolean control type mismatch": { + "ms-MY": "Jenis kawalan boolean tidak sepadan", + "us-EN": "Boolean control type mismatch", + "zh-CN": "布尔值控件类型错误" + }, + "Boolean must be true or false": { + "ms-MY": "Boolean mesti true atau false", + "us-EN": "Boolean must be true or false", + "zh-CN": "布尔值只能是 true 或 false" + }, + "CPK Calculation": { + "ms-MY": "Pengiraan CPK", + "us-EN": "CPK Calculation", + "zh-CN": "CPK计算" + }, + "CPK Length": { + "ms-MY": "CPK Panjang", + "us-EN": "CPK Length", + "zh-CN": "cpk长度" + }, + "CPK Width": { + "ms-MY": "CPK Lebar", + "us-EN": "CPK Width", + "zh-CN": "cpk宽度" + }, + "CSV File (*.csv)": { + "ms-MY": "Fail CSV (*.csv)", + "us-EN": "CSV File (*.csv)", + "zh-CN": "CSV文件 (*.csv)" + }, + "Camera Label": { + "ms-MY": "Label Kamera", + "us-EN": "Camera Label", + "zh-CN": "相机标签" + }, + "Cancel": { + "ms-MY": "Batal", + "us-EN": "Cancel", + "zh-CN": "取消" + }, "Change Password": { "ms-MY": "Tukar Kata Laluan", "us-EN": "Change Password", @@ -31,16 +111,36 @@ "us-EN": "Close", "zh-CN": "关闭" }, + "Confirm": { + "ms-MY": "Sahkan", + "us-EN": "Confirm", + "zh-CN": "提示" + }, "Confirm Password:": { "ms-MY": "Sahkan Kata Laluan:", "us-EN": "Confirm Password:", "zh-CN": "确认密码:" }, + "Console": { + "ms-MY": "Konsol", + "us-EN": "Console", + "zh-CN": "控制台" + }, + "Console Log...": { + "ms-MY": "Log Konsol...", + "us-EN": "Console Log...", + "zh-CN": "控制台日志..." + }, "Console Settings": { "ms-MY": "Tetapan Konsol", "us-EN": "Console Settings", "zh-CN": "控制台设置" }, + "Conversion error: %1": { + "ms-MY": "Ralat penukaran: %1", + "us-EN": "Conversion error: %1", + "zh-CN": "转换错误: %1" + }, "Create User": { "ms-MY": "Cipta Pengguna", "us-EN": "Create User", @@ -51,6 +151,11 @@ "us-EN": "Current Password:", "zh-CN": "当前密码:" }, + "Current Run Data": { + "ms-MY": "Data Larian Semasa", + "us-EN": "Current Run Data", + "zh-CN": "本次运行数据" + }, "Current User Information": { "ms-MY": "Maklumat Pengguna Semasa", "us-EN": "Current User Information", @@ -71,26 +176,136 @@ "us-EN": "Current user logged out", "zh-CN": "已注销当前用户" }, + "Current version: v%1": { + "ms-MY": "Versi semasa: v%1", + "us-EN": "Current version: v%1", + "zh-CN": "当前版本: v%1" + }, + "Data successfully exported to:\n": { + "ms-MY": "Data berjaya dieksport ke:\\n", + "us-EN": "Data successfully exported to:\n", + "zh-CN": "数据已成功导出到:\n" + }, + "Database Operations": { + "ms-MY": "Operasi Pangkalan Data", + "us-EN": "Database Operations", + "zh-CN": "数据库操作界面" + }, "Debug": { "ms-MY": "Penyelesaian Masalah", "us-EN": "Debug", "zh-CN": "故障排查" }, + "Default Title": { + "ms-MY": "Tajuk Lalai", + "us-EN": "Default Title", + "zh-CN": "默认标题" + }, + "Detecting...": { + "ms-MY": "Mengesan...", + "us-EN": "Detecting...", + "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": "是否退出程序?" }, + "Edit Parameters": { + "ms-MY": "Sunting Parameter", + "us-EN": "Edit Parameters", + "zh-CN": "编辑参数" + }, + "Engineer": { + "ms-MY": "Jurutera", + "us-EN": "Engineer", + "zh-CN": "工程师" + }, + "Enter a boolean value (true or false)": { + "ms-MY": "Masukkan nilai boolean (true atau false)", + "us-EN": "Enter a boolean value (true or false)", + "zh-CN": "输入布尔值(true 或 false)" + }, + "Enter a decimal value": { + "ms-MY": "Masukkan nilai perpuluhan", + "us-EN": "Enter a decimal value", + "zh-CN": "输入数字值(小数)" + }, + "Enter a numeric value (integer or decimal)": { + "ms-MY": "Masukkan nilai nombor (integer atau perpuluhan)", + "us-EN": "Enter a numeric value (integer or decimal)", + "zh-CN": "输入数字值(整数或小数)" + }, + "Enter a string value (no quotes required)": { + "ms-MY": "Masukkan nilai rentetan (tidak perlu tanda petik)", + "us-EN": "Enter a string value (no quotes required)", + "zh-CN": "输入字符串值(不需要引号)" + }, + "Enter an integer value": { + "ms-MY": "Masukkan nilai integer", + "us-EN": "Enter an integer value", + "zh-CN": "输入数字值(整数)" + }, "Error": { "ms-MY": "Ralat", "us-EN": "Error", "zh-CN": "错误" }, + "Execute Command": { + "ms-MY": "Jalankan Perintah", + "us-EN": "Execute Command", + "zh-CN": "执行命令" + }, + "Exit": { + "ms-MY": "Keluar", + "us-EN": "Exit", + "zh-CN": "退出" + }, "Exit Confirmation": { "ms-MY": "Pengesahan Keluar", "us-EN": "Exit Confirmation", "zh-CN": "退出确认" }, + "Export": { + "ms-MY": "Eksport", + "us-EN": "Export", + "zh-CN": "导出" + }, + "Export Failed": { + "ms-MY": "Eksport Gagal", + "us-EN": "Export Failed", + "zh-CN": "导出失败" + }, + "Export Successful": { + "ms-MY": "Eksport Berjaya", + "us-EN": "Export Successful", + "zh-CN": "导出成功" + }, + "Export as CSV": { + "ms-MY": "Eksport sebagai CSV", + "us-EN": "Export as CSV", + "zh-CN": "导出为CSV" + }, + "Failed to export CSV. Please check the path or database status.": { + "ms-MY": "Gagal mengeksport CSV. Sila semak laluan atau status pangkalan data.", + "us-EN": "Failed to export CSV. Please check the path or database status.", + "zh-CN": "导出CSV文件失败,请检查路径或数据库状态。" + }, + "General JSON Editor": { + "ms-MY": "Penyunting JSON Am", + "us-EN": "General JSON Editor", + "zh-CN": "通用 JSON 编辑" + }, + "Get value error: %1": { + "ms-MY": "Ralat mendapat nilai: %1", + "us-EN": "Get value error: %1", + "zh-CN": "获取值错误: %1" + }, + "Go Back": { + "ms-MY": "Kembali", + "us-EN": "Go Back", + "zh-CN": "返回上一级" + }, "Guest": { "ms-MY": "Tetamu", "us-EN": "Guest", @@ -101,16 +316,71 @@ "us-EN": "Hardware Information", "zh-CN": "硬件信息" }, + "History": { + "ms-MY": "Sejarah", + "us-EN": "History", + "zh-CN": "历史记录" + }, + "Initializing...": { + "ms-MY": "Memulakan...", + "us-EN": "Initializing...", + "zh-CN": "正在初始化..." + }, + "Input value too large (exceeds 10240 characters)": { + "ms-MY": "Nilai input terlalu besar (melebihi 10240 aksara)", + "us-EN": "Input value too large (exceeds 10240 characters)", + "zh-CN": "输入值过大(超过10240字符)" + }, "Insufficient permissions": { "ms-MY": "Kebenaran tidak mencukupi", "us-EN": "Insufficient permissions", "zh-CN": "权限不足" }, + "Integer number control type mismatch": { + "ms-MY": "Jenis kawalan nombor integer tidak sepadan", + "us-EN": "Integer number control type mismatch", + "zh-CN": "数字控件INT类型错误" + }, + "Invalid numeric format": { + "ms-MY": "Format nombor tidak sah", + "us-EN": "Invalid numeric format", + "zh-CN": "无效的数字格式" + }, + "JSON Table Editor": { + "ms-MY": "Editor Jadual JSON", + "us-EN": "JSON Table Editor", + "zh-CN": "JSON 表格编辑器" + }, + "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 内容过大,可能导致崩溃" + }, + "JSON parse error: %1": { + "ms-MY": "Ralat parse JSON: %1", + "us-EN": "JSON parse error: %1", + "zh-CN": "JSON解析错误: %1" + }, + "JSON parse failed:\n%1": { + "ms-MY": "Parse JSON gagal:\\n%1", + "us-EN": "JSON parse failed:\\n%1", + "zh-CN": "JSON 解析失败:\\n%1" + }, "Language Settings": { "ms-MY": "Tetapan Bahasa", "us-EN": "Language Settings", "zh-CN": "语言设置" }, + "Length": { + "ms-MY": "Panjang", + "us-EN": "Length", + "zh-CN": "长度" + }, "Log": { "ms-MY": "Analisis Log", "us-EN": "Log", @@ -141,6 +411,21 @@ "us-EN": "Logout", "zh-CN": "注销" }, + "Monitor error: %1": { + "ms-MY": "Ralat pemantauan: %1", + "us-EN": "Monitor error: %1", + "zh-CN": "监控错误: %1" + }, + "Monitoring Error": { + "ms-MY": "Ralat Pemantauan", + "us-EN": "Monitoring Error", + "zh-CN": "监控异常" + }, + "NG Count": { + "ms-MY": "Kiraan NG", + "us-EN": "NG Count", + "zh-CN": "NG数量" + }, "New Password:": { "ms-MY": "Kata Laluan Baru:", "us-EN": "New Password:", @@ -156,11 +441,61 @@ "us-EN": "New password must be at least 4 characters", "zh-CN": "新密码长度至少为4位" }, + "Null (enter null)": { + "ms-MY": "Null (masukkan null)", + "us-EN": "Null (enter null)", + "zh-CN": "空值(输入 null)" + }, + "Null value must be null": { + "ms-MY": "Nilai null mesti null", + "us-EN": "Null value must be null", + "zh-CN": "空值只能是 null" + }, + "Number control type mismatch": { + "ms-MY": "Jenis kawalan nombor tidak sepadan", + "us-EN": "Number control type mismatch", + "zh-CN": "数字控件类型错误" + }, + "OK": { + "ms-MY": "OK", + "us-EN": "OK", + "zh-CN": "确定" + }, + "OK Count": { + "ms-MY": "Kiraan OK", + "us-EN": "OK Count", + "zh-CN": "OK数量" + }, + "Offline Mode": { + "ms-MY": "Mod Luar Talian", + "us-EN": "Offline Mode", + "zh-CN": "离线模式" + }, + "Open Log Folder": { + "ms-MY": "Buka Folder Log", + "us-EN": "Open Log Folder", + "zh-CN": "打开日志文件夹" + }, + "Option": { + "ms-MY": "Pilihan", + "us-EN": "Option", + "zh-CN": "选项" + }, + "Original type information not found for row %1": { + "ms-MY": "Maklumat jenis asal tidak ditemui untuk baris %1", + "us-EN": "Original type information not found for row %1", + "zh-CN": "第 %1 行找不到原始类型信息" + }, "Param": { "ms-MY": "Tetapan Parameter", "us-EN": "Param", "zh-CN": "参数设置" }, + "Parse Error": { + "ms-MY": "Ralat Parse", + "us-EN": "Parse Error", + "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", @@ -181,6 +516,11 @@ "us-EN": "Password:", "zh-CN": "密码:" }, + "Pending": { + "ms-MY": "Tertunda", + "us-EN": "Pending", + "zh-CN": "待读取" + }, "Permission Level:": { "ms-MY": "Tahap Kebenaran:", "us-EN": "Permission Level:", @@ -201,21 +541,111 @@ "us-EN": "Please create user first", "zh-CN": "请先创建用户" }, + "Please enter JSON:": { + "ms-MY": "Sila masukkan JSON:", + "us-EN": "Please enter JSON:", + "zh-CN": "请输入 JSON:" + }, + "Please enter a valid JSON value": { + "ms-MY": "Sila masukkan nilai JSON yang sah", + "us-EN": "Please enter a valid JSON value", + "zh-CN": "请输入有效的JSON值" + }, + "Production Data Collection": { + "ms-MY": "Pengumpulan Data Pengeluaran", + "us-EN": "Production Data Collection", + "zh-CN": "生产数据采集" + }, + "Refresh": { + "ms-MY": "Segarkan", + "us-EN": "Refresh", + "zh-CN": "刷新" + }, + "Reinitialize": { + "ms-MY": "Inisialisasi Semula", + "us-EN": "Reinitialize", + "zh-CN": "重新进行初始化" + }, "Remaining: ": { "ms-MY": "Baki: ", "us-EN": "Remaining: ", "zh-CN": "剩余: " }, + "Retry": { + "ms-MY": "Cuba Semula", + "us-EN": "Retry", + "zh-CN": "重试" + }, + "Row %1 data is incomplete": { + "ms-MY": "Data baris %1 tidak lengkap", + "us-EN": "Row %1 data is incomplete", + "zh-CN": "第 %1 行数据不完整" + }, + "Row %1 key is empty": { + "ms-MY": "Kekunci baris %1 kosong", + "us-EN": "Row %1 key is empty", + "zh-CN": "第 %1 行 key 为空" + }, + "Row %1 value validation failed:\n%2": { + "ms-MY": "Pengesahan nilai baris %1 gagal:\\n%2", + "us-EN": "Row %1 value validation failed:\\n%2", + "zh-CN": "第 %1 行值验证失败:\\n%2" + }, + "Run Data": { + "ms-MY": "Data Larian", + "us-EN": "Run Data", + "zh-CN": "运行数据" + }, + "SN Search": { + "ms-MY": "Carian SN", + "us-EN": "SN Search", + "zh-CN": "SN查询" + }, + "Save": { + "ms-MY": "Simpan", + "us-EN": "Save", + "zh-CN": "保存" + }, + "Search": { + "ms-MY": "Carian", + "us-EN": "Search", + "zh-CN": "查询" + }, + "Service is offline": { + "ms-MY": "Perkhidmatan luar talian", + "us-EN": "Service is offline", + "zh-CN": "服务已离线" + }, "Setting": { "ms-MY": "Tetapan", "us-EN": "Setting", "zh-CN": "设置" }, + "Shift": { + "ms-MY": "Syif", + "us-EN": "Shift", + "zh-CN": "班次" + }, + "String control type mismatch": { + "ms-MY": "Jenis kawalan rentetan tidak sepadan", + "us-EN": "String control type mismatch", + "zh-CN": "字符串控件类型错误" + }, "Success": { "ms-MY": "Berjaya", "us-EN": "Success", "zh-CN": "成功" }, + "System Log": { + "ms-MY": "Log Sistem", + "us-EN": "System Log", + "zh-CN": "系统日志" + }, + "System status: %1\\n": { + "ms-MY": "Status sistem: %1\\\\n", + "us-EN": "System status: %1\\\\n", + "zh-CN": "系统状态: %1\\\\n" + }, "TOOLS": { "ms-MY": "Alat", "us-EN": "TOOLS", @@ -226,6 +656,21 @@ "us-EN": "Timed out", "zh-CN": "已超时" }, + "Total Count": { + "ms-MY": "Jumlah Kiraan", + "us-EN": "Total Count", + "zh-CN": "总数量" + }, + "Type Validation Failed": { + "ms-MY": "Pengesahan Jenis Gagal", + "us-EN": "Type Validation Failed", + "zh-CN": "类型验证失败" + }, + "Unknown data type": { + "ms-MY": "Jenis data tidak diketahui", + "us-EN": "Unknown data type", + "zh-CN": "未知的数据类型" + }, "User Management": { "ms-MY": "Pengurusan Pengguna", "us-EN": "User Management", @@ -251,11 +696,36 @@ "us-EN": "Username:", "zh-CN": "用户名:" }, + "Value": { + "ms-MY": "Nilai", + "us-EN": "Value", + "zh-CN": "值" + }, + "Value:": { + "ms-MY": "Nilai:", + "us-EN": "Value:", + "zh-CN": "值:" + }, "ViewImage": { "ms-MY": "Lihat Imej", "us-EN": "View Image", "zh-CN": "查看图片" }, + "Warning": { + "ms-MY": "Amaran", + "us-EN": "Warning", + "zh-CN": "警告" + }, + "Welcome!": { + "ms-MY": "Selamat Datang!", + "us-EN": "Welcome!", + "zh-CN": "欢迎!" + }, + "Width:": { + "ms-MY": "Lebar:", + "us-EN": "Width:", + "zh-CN": "宽度:" + }, "Window Settings": { "ms-MY": "Tetapan Tetingkap", "us-EN": "Window Settings", @@ -266,6 +736,16 @@ "us-EN": "You need administrator permissions to create users", "zh-CN": "您需要管理员权限才能创建用户" }, + "Zoom In": { + "ms-MY": "Zum Masuk", + "us-EN": "Zoom In", + "zh-CN": "放大窗口" + }, + "Zoom Out": { + "ms-MY": "Zum Keluar", + "us-EN": "Zoom Out", + "zh-CN": "缩小窗口" + }, "hideConsole": { "ms-MY": "Sembunyikan Konsol", "us-EN": "Hide Console", @@ -285,315 +765,10 @@ "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": "输入数字值(小数)" + "您没有足够的权限执行此操作。\n\n需要权限级别: %1\n当前权限级别: %2": { + "ms-MY": "Anda tidak mempunyai kebenaran yang mencukupi untuk melaksanakan tindakan ini.\n\nTahap diperlukan: %1\nTahap semasa: %2", + "us-EN": "You do not have sufficient permissions to perform this action.\n\nRequired level: %1\nCurrent level: %2", + "zh-CN": "您没有足够的权限执行此操作。\n\n所需等级: %1\n当前等级: %2" } } } \ No newline at end of file