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);