diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 31770463..b65878ca 100644 Binary files a/Bin/Config/Lang/cn/nmNum_cn.qm and b/Bin/Config/Lang/cn/nmNum_cn.qm differ diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index ce42c261..eb95a329 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -3427,6 +3427,10 @@ No valid error was returned; keep the last accepted result and reduce the step.< Time 时间 + + Flow + 流量 + Pressure 压力 @@ -3604,6 +3608,22 @@ Solve time: %2 ms Sensitivity loglog plot 敏感性分析双对数图 + + Forecast - %1 + 预测 - %1 + + + Production rate + 产量 + + + Bottomhole pressure + 井底压力 + + + Cumulative production + 累计产量 + nmSubWndPostprocessing @@ -4441,6 +4461,38 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We Max Delta T 最大时间间隔 + + Initial pressure + 初始压力 + + + Abandonment rate + 废弃产量 + + + Maximum rate + 最大产量 + + + Forecast duration + 预测时长 + + + Producing pressure + 生产压力 + + + Producing pressure (start) + 起始生产压力 + + + Producing pressure (end) + 终止生产压力 + + + Pressure change period + 压力变化时长 + nmWxAutomaticFitting @@ -6626,6 +6678,10 @@ Please check your input coordinates. Generate the model to enable sensitivity analysis. 生成模型后可进行敏感性分析。 + + Generate the model to enable forecast. + 生成模型后可使用预测功能。 + nmWxParaProperty @@ -8354,6 +8410,42 @@ Average pressure in contour: %2 MPa Regenerate the model before running sensitivity. 请重新生成模型后再进行敏感性分析。 + + Forecast input is unavailable. + 预测输入数据不可用。 + + + Generate the current model before forecasting. + 请先生成当前模型,再进行预测。 + + + Rate forecast currently supports single-phase models only. + 产量预测目前仅支持单相模型。 + + + Rate forecast currently requires one rate-controlled well. + 产量预测目前要求模型中仅有一口井,且该井采用产量控制。 + + + Enter a positive initial pressure and a complete rate schedule. + 请输入大于零的初始压力和完整的分段产量制度。 + + + Each duration must be positive and each production rate non-negative. + 每段持续时间必须大于零,产量不得小于零。 + + + The solver returned incomplete forecast pressure data. + 求解器返回的预测压力数据不完整。 + + + Invalid forecast pressure or time. Check the rate schedule and model. + 预测压力或时间无效,请检查分段产量制度和模型。 + + + The solver did not reach the end of the forecast schedule. + 求解器未计算到预测制度的结束时刻。 + nmParameterField @@ -8639,4 +8731,91 @@ Average pressure in contour: %2 MPa 取消 + + nmWxForecast + + Forecast + 预测 + + + Forecast options + 预测选项 + + + Constant pressure + 恒定压力 + + + Declining pressure (ramp) + 压力递减(线性) + + + Multiple pressures + 多段压力 + + + Multiple rates + 多段产量 + + + Use past history + 使用历史数据 + + + Surface pressures + 井口压力 + + + Parameters + 参数 + + + Load data + 加载数据 + + + Generate + 生成 + + + Cancel + 取消 + + + Duration + 持续时间 + + + Pressure + 压力 + + + Rate + 产量 + + + Generate the current model before forecasting. + 请先生成当前模型,再进行预测。 + + + Rate forecast currently supports single-well, single-phase models only. + 产量预测目前仅支持单井单相模型。 + + + Enter a positive initial pressure. + 请输入大于零的初始压力。 + + + Row %1: enter a positive duration and a non-negative production rate (0 for shut-in). + 第 %1 行:持续时间必须大于零,产量不得小于零(0 表示关井)。 + + + Enter at least one duration and production rate. + 请至少输入一段持续时间和产量。 + + + The model changed. Generate the forecast again. + 模型已发生变化,请重新生成预测。 + + diff --git a/Src/nmNum/nmData/nmTranslationManager.cpp b/Src/nmNum/nmData/nmTranslationManager.cpp index 84437965..da6d1fba 100644 --- a/Src/nmNum/nmData/nmTranslationManager.cpp +++ b/Src/nmNum/nmData/nmTranslationManager.cpp @@ -4,6 +4,15 @@ QMap nmTranslationManager::m_mapEnToZh; void nmTranslationManager::initTranslations() { m_mapEnToZh = QMap(); + // 预测参数组件沿用名称映射,保留数据中的英文名称与单位代码。 + m_mapEnToZh.insert("Initial pressure", tr("Initial pressure")); + m_mapEnToZh.insert("Abandonment rate", tr("Abandonment rate")); + m_mapEnToZh.insert("Maximum rate", tr("Maximum rate")); + m_mapEnToZh.insert("Forecast duration", tr("Forecast duration")); + m_mapEnToZh.insert("Producing pressure", tr("Producing pressure")); + m_mapEnToZh.insert("Producing pressure (start)", tr("Producing pressure (start)")); + m_mapEnToZh.insert("Producing pressure (end)", tr("Producing pressure (end)")); + m_mapEnToZh.insert("Pressure change period", tr("Pressure change period")); // 油藏 m_mapEnToZh.insert("Initial Pressure",tr("Initial Pressure")); //m_mapEnToZh.insert("Reservoir type",tr("Reservoir type")); diff --git a/Src/nmNum/nmSubWxs/nmWxForecast.cpp b/Src/nmNum/nmSubWxs/nmWxForecast.cpp index 66c8155c..455b602c 100644 --- a/Src/nmNum/nmSubWxs/nmWxForecast.cpp +++ b/Src/nmNum/nmSubWxs/nmWxForecast.cpp @@ -33,7 +33,7 @@ nmWxForecast::nmWxForecast(QWidget *parent, nmDataAnalyzeManager* manager) , m_extStackedWidget(nullptr) , m_extEmpty(nullptr) { - setWindowTitle("Forecast"); + setWindowTitle(tr("Forecast")); setFixedSize(520, 560); setAttribute(Qt::WA_DeleteOnClose); @@ -108,13 +108,13 @@ void nmWxForecast::setupUI() m_mainLayout = new QVBoxLayout(this); // ========== Forecast options ========== - m_forecastOptionsGroup = new QGroupBox("Forecast options", this); + m_forecastOptionsGroup = new QGroupBox(tr("Forecast options"), this); m_forecastOptionsLayout = new QVBoxLayout(m_forecastOptionsGroup); - m_constantPressureRadio = new QRadioButton("Constant pressure", this); - m_decliningPressureRadio = new QRadioButton("Declining pressure (ramp)", this); - m_multiplePressuresRadio = new QRadioButton("Multiple pressures", this); - m_multipleRatesRadio = new QRadioButton("Multiple rates", this); + m_constantPressureRadio = new QRadioButton(tr("Constant pressure"), this); + m_decliningPressureRadio = new QRadioButton(tr("Declining pressure (ramp)"), this); + m_multiplePressuresRadio = new QRadioButton(tr("Multiple pressures"), this); + m_multipleRatesRadio = new QRadioButton(tr("Multiple rates"), this); // 求解器目前仅接通产量控制;压力控制保留入口但不允许生成。 m_constantPressureRadio->setEnabled(false); m_decliningPressureRadio->setEnabled(false); @@ -126,8 +126,8 @@ void nmWxForecast::setupUI() m_forecastButtonGroup->addButton(m_multiplePressuresRadio, 2); m_forecastButtonGroup->addButton(m_multipleRatesRadio, 3); - m_usePastHistoryCheck = new QCheckBox("Use past history", this); - m_surfacePressuresCheck = new QCheckBox("Surface pressures", this); + m_usePastHistoryCheck = new QCheckBox(tr("Use past history"), this); + m_surfacePressuresCheck = new QCheckBox(tr("Surface pressures"), this); m_usePastHistoryCheck->setEnabled(false); m_surfacePressuresCheck->setEnabled(false); @@ -143,7 +143,7 @@ void nmWxForecast::setupUI() m_forecastOptionsLayout->addLayout(checkBoxLayout); // ========== Parameters ========== - m_parametersGroup = new QGroupBox("Parameters", this); + m_parametersGroup = new QGroupBox(tr("Parameters"), this); QVBoxLayout *parametersOuterLayout = new QVBoxLayout(m_parametersGroup); parametersOuterLayout->setContentsMargins(6, 6, 6, 6); @@ -247,9 +247,9 @@ void nmWxForecast::setupUI() // ========== Buttons ========== m_buttonLayout = new QHBoxLayout(); - m_loadDataButton = new QPushButton("Load data", this); - m_generateButton = new QPushButton("Generate", this); - m_cancelButton = new QPushButton("Cancel", this); + m_loadDataButton = new QPushButton(tr("Load data"), this); + m_generateButton = new QPushButton(tr("Generate"), this); + m_cancelButton = new QPushButton(tr("Cancel"), this); m_loadDataButton->setEnabled(false); m_buttonLayout->addWidget(m_loadDataButton); @@ -333,7 +333,7 @@ QWidget* nmWxForecast::buildExtMultiPressurePage() // 创建表格 m_pressureTableWidget = new QTableWidget(0, 2); - m_pressureTableWidget->setHorizontalHeaderLabels(QStringList() << "Duration" << "Pressure"); + m_pressureTableWidget->setHorizontalHeaderLabels(QStringList() << tr("Duration") << tr("Pressure")); m_pressureTableWidget->verticalHeader()->setVisible(false); m_pressureTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); @@ -401,7 +401,7 @@ QWidget* nmWxForecast::buildExtMultiRatePage() // 创建表格 m_rateTableWidget = new QTableWidget(0, 2); // 根据截图设置表头 - m_rateTableWidget->setHorizontalHeaderLabels(QStringList() << "Duration" << "Rate"); + m_rateTableWidget->setHorizontalHeaderLabels(QStringList() << tr("Duration") << tr("Rate")); m_rateTableWidget->verticalHeader()->setVisible(false); m_rateTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);