From 4acb2ba8e968aee51c3b091264c52e0d69bccb62 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Mon, 20 May 2019 16:01:27 +0200
Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20syst=C3=A8me=20de=20traduct?=
 =?UTF-8?q?ion=20pour=20les=20Extraresult?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/app/calculators/cloisons/cloisons.en.json |   7 +-
 src/app/calculators/cloisons/cloisons.fr.json |   7 +-
 src/app/calculators/dever/dever.en.json       |   5 +-
 src/app/calculators/dever/dever.fr.json       |   5 +-
 .../calculators/macrorugo/macrorugo.en.json   |   8 +-
 .../calculators/macrorugo/macrorugo.fr.json   |   8 +-
 .../calculators/pab-nombre/pab-nombre.en.json |   3 +-
 .../calculators/pab-nombre/pab-nombre.fr.json |   3 +-
 src/app/calculators/pab/pab.en.json           |  10 +-
 src/app/calculators/pab/pab.fr.json           |  10 +-
 .../fixed-results.component.ts                |  12 +-
 .../pab-results-table.component.ts            |   2 +-
 .../param-link/param-link.component.ts        |  18 +-
 .../remous-results.component.ts               |  33 +++-
 src/app/results/pab-results.ts                |   8 +-
 src/app/results/plottable-pab-results.ts      |   2 +-
 src/app/results/var-results.ts                |  19 +-
 .../services/formulaire/formulaire.service.ts |  43 +++++
 .../internationalisation.service.ts           |  19 +-
 src/locale/messages.en.json                   | 163 +++++++++--------
 src/locale/messages.fr.json                   | 165 +++++++++---------
 21 files changed, 330 insertions(+), 220 deletions(-)

diff --git a/src/app/calculators/cloisons/cloisons.en.json b/src/app/calculators/cloisons/cloisons.en.json
index 2acc0c173..17da1d60e 100644
--- a/src/app/calculators/cloisons/cloisons.en.json
+++ b/src/app/calculators/cloisons/cloisons.en.json
@@ -6,9 +6,14 @@
     "PB": "Profondeur moyenne du bassin",
     "DH": "Chute",
     "S": "Surface de l'orifice",
+    "ZRAM": "Bottom elevation",
     "select_ouvrage_orifice": "Orifice",
     "select_ouvrage_seuil_rect": "Rectangular weir",
     "select_loidebit1_kivi": "Kindsvater-Carter and Villemonte",
     "select_loidebit1_fente": "Submerged slot (Larinier 1992)",
-    "select_loidebit2_orifice": "Submerged orifice"
+    "select_loidebit2_orifice": "Submerged orifice",
+	"UNIT_PV": "W/m³",
+    "UNIT_YMOY": "m",
+    "UNIT_ZRAM": "m",
+    "UNIT_ZRB": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/cloisons/cloisons.fr.json b/src/app/calculators/cloisons/cloisons.fr.json
index 9429adda9..3ae8bb7c7 100644
--- a/src/app/calculators/cloisons/cloisons.fr.json
+++ b/src/app/calculators/cloisons/cloisons.fr.json
@@ -6,9 +6,14 @@
     "PB": "Profondeur moyenne du bassin",
     "DH": "Chute",
     "S": "Surface de l'orifice",
+    "ZRAM": "Cote de radier amont de la cloison",
     "select_ouvrage_orifice": "Orifice",
     "select_ouvrage_seuil_rect": "Seuil rectangulaire",
     "select_loidebit1_kivi": "Kindsvater-Carter et Villemonte",
     "select_loidebit1_fente": "Fente noyée (Larinier 1992)",
-    "select_loidebit2_orifice": "Orifice noyé"
+    "select_loidebit2_orifice": "Orifice noyé",
+	"UNIT_PV": "W/m³",
+    "UNIT_YMOY": "m",
+    "UNIT_ZRAM": "m",
+    "UNIT_ZRB": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/dever/dever.en.json b/src/app/calculators/dever/dever.en.json
index 5cd2a626b..e7d57eeb5 100644
--- a/src/app/calculators/dever/dever.en.json
+++ b/src/app/calculators/dever/dever.en.json
@@ -9,5 +9,8 @@
     "select_loidebit3_seuiltriang": "Free flow triangular weir",
     "select_loidebit4_seuiltriangtrunc": "Free flow truncated triangular weir",
     "L": "Width of the weir",
-    "Cd": "Discharge coefficient"
+    "Cd": "Discharge coefficient",
+    "UNIT_CVQT": "m³/s",
+    "UNIT_EC": "m",
+    "UNIT_V": "m/s"
 }
\ No newline at end of file
diff --git a/src/app/calculators/dever/dever.fr.json b/src/app/calculators/dever/dever.fr.json
index 16336b0aa..49ba7c0a9 100644
--- a/src/app/calculators/dever/dever.fr.json
+++ b/src/app/calculators/dever/dever.fr.json
@@ -9,5 +9,8 @@
     "select_loidebit3_seuiltriang": "Déversoir triangulaire dénoyé",
     "select_loidebit4_seuiltriangtrunc": "Déversoir triangulaire tronqué dénoyé",
     "L": "Largeur du déversoir",
-    "Cd": "Coefficient de débit"
+    "Cd": "Coefficient de débit",
+    "UNIT_CVQT": "m³/s",
+    "UNIT_EC": "m",
+    "UNIT_V": "m/s"
 }
\ No newline at end of file
diff --git a/src/app/calculators/macrorugo/macrorugo.en.json b/src/app/calculators/macrorugo/macrorugo.en.json
index 526461dac..f65d1444d 100644
--- a/src/app/calculators/macrorugo/macrorugo.en.json
+++ b/src/app/calculators/macrorugo/macrorugo.en.json
@@ -11,5 +11,11 @@
     "C": "Block concentration",
     "PBD": "Diameter",
     "PBH": "Height",
-    "Cd0": "Shape (1 for round, 2 for square)"
+    "Cd0": "Shape (1 for round, 2 for square)",
+    "UNIT_PV": "W/m³",
+    "UNIT_Q_GUIDETECH": "m³/s",
+    "UNIT_V_GUIDETECH": "m/s",
+    "UNIT_VDEB": "m/s",
+    "UNIT_VMAX": "m/s",
+    "UNIT_ZF2": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/macrorugo/macrorugo.fr.json b/src/app/calculators/macrorugo/macrorugo.fr.json
index e2122820a..6ab912ed6 100644
--- a/src/app/calculators/macrorugo/macrorugo.fr.json
+++ b/src/app/calculators/macrorugo/macrorugo.fr.json
@@ -11,5 +11,11 @@
     "C": "Concentration de blocs",
     "PBD": "Diamètre",
     "PBH": "Hauteur",
-    "Cd0": "Forme (1 pour rond, 2 pour carré)"
+    "Cd0": "Forme (1 pour rond, 2 pour carré)",
+    "UNIT_PV": "W/m³",
+    "UNIT_Q_GUIDETECH": "m³/s",
+    "UNIT_V_GUIDETECH": "m/s",
+    "UNIT_VDEB": "m/s",
+    "UNIT_VMAX": "m/s",
+    "UNIT_ZF2": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/pab-nombre/pab-nombre.en.json b/src/app/calculators/pab-nombre/pab-nombre.en.json
index cbe229469..5e1e68141 100644
--- a/src/app/calculators/pab-nombre/pab-nombre.en.json
+++ b/src/app/calculators/pab-nombre/pab-nombre.en.json
@@ -2,5 +2,6 @@
     "fs_nombre": "Fall and number of falls",
     "DHT": "Total fall",
     "N": "Number of falls",
-    "DH": "Fall between basins"
+    "DH": "Fall between basins",
+    "UNIT_DHR": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/pab-nombre/pab-nombre.fr.json b/src/app/calculators/pab-nombre/pab-nombre.fr.json
index 491b42cc3..18a8a4bbf 100644
--- a/src/app/calculators/pab-nombre/pab-nombre.fr.json
+++ b/src/app/calculators/pab-nombre/pab-nombre.fr.json
@@ -2,5 +2,6 @@
     "fs_nombre": "Chute et nombre de chutes",
     "DHT": "Chute totale",
     "N": "Nombre de chutes",
-    "DH": "Chute entre bassins"
+    "DH": "Chute entre bassins",
+    "UNIT_DHR": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/pab/pab.en.json b/src/app/calculators/pab/pab.en.json
index f1f1cd6b4..cf3cbb4ee 100644
--- a/src/app/calculators/pab/pab.en.json
+++ b/src/app/calculators/pab/pab.en.json
@@ -7,5 +7,13 @@
     "fs_cloison_aval": "Downstream wall",
     "bassin_container": "Basins",
     "select_modele_cloisons": "Cross walls model",
-    "select_modele_cloison_aval": "Downstream wall model"
+    "select_modele_cloison_aval": "Downstream wall model",
+    "UNIT_DH": "m",
+	"UNIT_PV": "W/m³",
+    "UNIT_Q": "m³/s",
+	"UNIT_QA": "m³/s",
+	"UNIT_YMOY": "m",
+    "UNIT_Z": "m",
+	"UNIT_ZRAM": "m",
+	"UNIT_ZRB": "m"
 }
\ No newline at end of file
diff --git a/src/app/calculators/pab/pab.fr.json b/src/app/calculators/pab/pab.fr.json
index 501c23cde..a372cb4e2 100644
--- a/src/app/calculators/pab/pab.fr.json
+++ b/src/app/calculators/pab/pab.fr.json
@@ -7,5 +7,13 @@
     "fs_cloison_aval": "Cloison aval",
     "bassin_container": "Bassins",
     "select_modele_cloisons": "Modèle de cloisons",
-    "select_modele_cloison_aval": "Modèle de la cloison aval"
+    "select_modele_cloison_aval": "Modèle de la cloison aval",
+    "UNIT_DH": "m",
+	"UNIT_PV": "W/m³",
+    "UNIT_Q": "m³/s",
+	"UNIT_QA": "m³/s",
+	"UNIT_YMOY": "m",
+    "UNIT_Z": "m",
+	"UNIT_ZRAM": "m",
+	"UNIT_ZRB": "m"
 }
\ No newline at end of file
diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts
index a6909ac0b..1b52d9c66 100644
--- a/src/app/components/fixedvar-results/fixed-results.component.ts
+++ b/src/app/components/fixedvar-results/fixed-results.component.ts
@@ -7,6 +7,7 @@ import { I18nService } from "../../services/internationalisation/internationalis
 import { ApplicationSetupService } from "../../services/app-setup/app-setup.service";
 import * as XLSX from "xlsx";
 import { Structure } from "jalhyd";
+import { FormulaireService } from "../../services/formulaire/formulaire.service";
 
 @Component({
     selector: "fixed-results",
@@ -25,7 +26,8 @@ export class FixedResultsComponent {
 
     constructor(
         private intlService: I18nService,
-        private appSetupService: ApplicationSetupService
+        private appSetupService: ApplicationSetupService,
+        private formService: FormulaireService
     ) { }
 
     public set results(r: FixedResults) {
@@ -108,8 +110,14 @@ export class FixedResultsComponent {
             for (const k in extraResults) {
                 if (extraResults.hasOwnProperty(k)) {
                     const er: number = extraResults[k];
+                    // calculator type for translation
+                    const sn = this._fixedResults.result.sourceNub;
+                    let ct = sn.calcType;
+                    if (sn.parent) {
+                        ct = sn.parent.calcType;
+                    }
                     data.push({
-                        label: this.intlService.getExtraResLabel(k),
+                        label: this.formService.expandVariableNameAndUnit(ct, k),
                         value: this.intlService.formatResult(k, er),
                         isCalcResult: true // for CSS
                     });
diff --git a/src/app/components/pab-results/pab-results-table.component.ts b/src/app/components/pab-results/pab-results-table.component.ts
index b9064fcdc..2d66c877f 100644
--- a/src/app/components/pab-results/pab-results-table.component.ts
+++ b/src/app/components/pab-results/pab-results-table.component.ts
@@ -112,7 +112,7 @@ export class PabResultsTableComponent {
             if (pr.cloisonAvalResults.vCalc) {
                 const caZRAM = pr.cloisonAvalResults.getExtraResult("ZRAM");
                 this._dataSet.push([
-                    this.intlService.localizeText("INFO_EXTRARES_LIB_AVAL"), // n° cloison
+                    this.intlService.localizeText("INFO_LIB_AVAL"), // n° cloison
                     pr.Z2.toFixed(nDigits), // Z
                     (caZRAM !== undefined) ? caZRAM.toFixed(nDigits) : "", // ZRAM
                     (pr.cloisonAvalResults.vCalc - pr.Z2).toFixed(nDigits), // DH
diff --git a/src/app/components/param-link/param-link.component.ts b/src/app/components/param-link/param-link.component.ts
index 0e9d17272..fd3a6b4cd 100644
--- a/src/app/components/param-link/param-link.component.ts
+++ b/src/app/components/param-link/param-link.component.ts
@@ -153,19 +153,13 @@ export class ParamLinkComponent implements OnChanges, Observer, OnDestroy {
         let s = i.symbol; // nom associé au paramètre/à la valeur
         const c = i.meta["formTitle"]; // nom du module de calcul
 
-        // expand variable name from symbol
-        let langCache = this.formService.languageCache; // language cache…
-        if (langCache && langCache[i.nub.calcType]) {
-            langCache = langCache[i.nub.calcType]; // …for target Nub type
-        }
-        if (langCache && langCache[this.intlService.currentLanguage]) {
-            langCache = langCache[this.intlService.currentLanguage]; // … for current language
-        }
-        if (langCache && langCache[ i.symbol] !== undefined) {
-            s = this.intlService.localizeText(i.symbol, langCache);
-        } else {
-            s = this.intlService.localizeText("INFO_LIB_" + i.symbol.toLocaleUpperCase());
+        // calculator type for translation
+        let ct = i.nub.calcType;
+        if (i.nub.parent) {
+            ct = i.nub.parent.calcType;
         }
+        // expand variable name from symbol
+        s = this.formService.expandVariableName(ct, s);
 
         // value(s) preview
         let preview: string;
diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts
index a59ea0c96..8192b2397 100644
--- a/src/app/components/remous-results/remous-results.component.ts
+++ b/src/app/components/remous-results/remous-results.component.ts
@@ -9,6 +9,7 @@ import { CalculatorResults } from "../../results/calculator-results";
 import { VarResultsComponent } from "../fixedvar-results/var-results.component";
 import { ApplicationSetupService } from "../../services/app-setup/app-setup.service";
 import { ServiceFactory } from "../../services/service-factory";
+import { FormulaireService } from "../../services/formulaire/formulaire.service";
 
 /**
  * données pour une ligne dans le graphe
@@ -243,15 +244,28 @@ export class RemousResultsComponent implements DoCheck {
 
     constructor(
         private intlService: I18nService,
-        private appSetup: ApplicationSetupService
+        private appSetup: ApplicationSetupService,
+        private formService: FormulaireService
     ) { }
 
     private get uitextLigneFluviale() {
-        return this.intlService.getExtraResLabel("FLU");
+        // calculator type for translation
+        const sn = this._remousResults.result.sourceNub;
+        let ct = sn.calcType;
+        if (sn.parent) {
+            ct = sn.parent.calcType;
+        }
+        return this.formService.expandVariableNameAndUnit(ct, "FLU");
     }
 
     private get uitextLigneTorrentielle() {
-        return this.intlService.getExtraResLabel("TOR");
+        // calculator type for translation
+        const sn = this._remousResults.result.sourceNub;
+        let ct = sn.calcType;
+        if (sn.parent) {
+            ct = sn.parent.calcType;
+        }
+        return this.formService.expandVariableNameAndUnit(ct, "TOR");
     }
 
     private get uitextAbscisse() {
@@ -279,8 +293,17 @@ export class RemousResultsComponent implements DoCheck {
     }
 
     private get extraParamLabel(): string {
-        return this._remousResults === undefined ? undefined :
-            this.intlService.getExtraResLabel(this._remousResults.extraParamSymbol);
+        if (! this._remousResults) {
+            return undefined;
+        } else {
+            // calculator type for translation
+            const sn = this._remousResults.result.sourceNub;
+            let ct = sn.calcType;
+            if (sn.parent) {
+                ct = sn.parent.calcType;
+            }
+            return this.formService.expandVariableNameAndUnit(ct, this._remousResults.extraParamSymbol);
+        }
     }
 
     private headers(): string[] {
diff --git a/src/app/results/pab-results.ts b/src/app/results/pab-results.ts
index 435220e7f..d87b882b3 100644
--- a/src/app/results/pab-results.ts
+++ b/src/app/results/pab-results.ts
@@ -55,7 +55,13 @@ export class PabResults extends CalculatedParamResults {
     /** translated headers texts */
     public get headers() {
         return this._columns.map((h) => {
-            return ServiceFactory.instance.i18nService.localizeText("INFO_EXTRARES_LIB_" + h);
+            // calculator type for translation
+            const sn = this.result.sourceNub;
+            let ct = sn.calcType;
+            if (sn.parent) {
+                ct = sn.parent.calcType;
+            }
+            return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct , h);
         });
     }
 
diff --git a/src/app/results/plottable-pab-results.ts b/src/app/results/plottable-pab-results.ts
index 00df147c2..c8cdd2964 100644
--- a/src/app/results/plottable-pab-results.ts
+++ b/src/app/results/plottable-pab-results.ts
@@ -61,7 +61,7 @@ export class PlottablePabResults implements PlottableData {
                 for (let i = 0; i < l; i++) {
                     data.push("" + (i + 1));
                 }
-                data.push(ServiceFactory.instance.i18nService.localizeText("INFO_EXTRARES_LIB_AVAL"));
+                data.push(ServiceFactory.instance.i18nService.localizeText("INFO_LIB_AVAL"));
                 break;
 
             case "DH":
diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts
index 3a0356668..891f7c008 100644
--- a/src/app/results/var-results.ts
+++ b/src/app/results/var-results.ts
@@ -94,7 +94,13 @@ export class VarResults extends CalculatedParamResults implements PlottableData
             return this.variableParamHeader;
         } else {
             // 3. Result element ?
-            return ServiceFactory.instance.i18nService.getExtraResLabel(symbol);
+            // calculator type for translation
+            const sn = this.result.sourceNub;
+            let ct = sn.calcType;
+            if (sn.parent) {
+                ct = sn.parent.calcType;
+            }
+            return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol);
         }
     }
 
@@ -178,11 +184,18 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         this.chartX = this.chartX || this.variatedParameter.symbol;
         this.chartY = defaultY;
 
+        // calculator type for translation
+        const sn = this.result.sourceNub;
+        let ct = sn.calcType;
+        if (sn.parent) {
+            ct = sn.parent.calcType;
+        }
         // entêtes des résultats supplémentaires
-        const intlService = ServiceFactory.instance.i18nService;
         this._extraResultHeaders = [];
         for (const k of this.extraResultKeys) {
-            this._extraResultHeaders.push(intlService.getExtraResLabel(k));
+            this._extraResultHeaders.push(
+                ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, k)
+            );
         }
 
         // when variable parameter changes, ensure the X / Y current values are still available
diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts
index 7aad1ab1c..a93424c56 100644
--- a/src/app/services/formulaire/formulaire.service.ts
+++ b/src/app/services/formulaire/formulaire.service.ts
@@ -154,6 +154,49 @@ export class FormulaireService extends Observable {
         return this._intlService.localizeText(`INFO_${sCalculator}_TITRE_COURT`);
     }
 
+    /**
+     * Returns variable name from symbol
+     * @param calcType
+     * @param symbol
+     */
+    public expandVariableName(calcType: CalculatorType, symbol: string): string {
+        let s = "";
+        let langCache = this.languageCache; // language cache…
+        if (langCache && langCache[calcType]) {
+            langCache = langCache[calcType]; // …for target Nub type
+        }
+        if (langCache && langCache[this.intlService.currentLanguage]) {
+            langCache = langCache[this.intlService.currentLanguage]; // … for current language
+        }
+        if (langCache && langCache[symbol] !== undefined) {
+            s = this.intlService.localizeText(symbol, langCache);
+        } else {
+            s = this.intlService.localizeText("INFO_LIB_" + symbol.toLocaleUpperCase());
+        }
+        return s;
+    }
+
+    /**
+     * Returns variable name and unit from symbol
+     * @param calcType
+     * @param symbol
+     */
+    public expandVariableNameAndUnit(calcType: CalculatorType, symbol: string): string {
+        let s = this.expandVariableName(calcType, symbol);
+        let langCache = this.languageCache; // language cache…
+        if (langCache && langCache[calcType]) {
+            langCache = langCache[calcType]; // …for target Nub type
+        }
+        if (langCache && langCache[this.intlService.currentLanguage]) {
+            langCache = langCache[this.intlService.currentLanguage]; // … for current language
+        }
+        const unitKey = "UNIT_" + symbol.toLocaleUpperCase();
+        if (langCache && langCache[unitKey] !== undefined) {
+            s = s + " (" + this.intlService.localizeText(unitKey, langCache) + ")";
+        }
+        return s;
+    }
+
     /**
      * Checks if the given calculator name (tab title) is already used by any existing
      * form; if so, adds a number after it
diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts
index fe7c6dc3e..73e54b551 100644
--- a/src/app/services/internationalisation/internationalisation.service.ts
+++ b/src/app/services/internationalisation/internationalisation.service.ts
@@ -1,6 +1,6 @@
 import { Injectable, isDevMode } from "@angular/core";
 
-import { Message, MessageCode, Observable, Observer } from "jalhyd";
+import { Message, MessageCode, Observable, Observer, CalculatorType } from "jalhyd";
 
 import { StringMap } from "../../stringmap";
 import { ApplicationSetupService } from "../app-setup/app-setup.service";
@@ -185,23 +185,6 @@ export class I18nService extends Observable implements Observer {
         return re.exec(lbl);
     }
 
-    /**
-     * Traduit un libellé qui peut être un code
-     */
-    public getExtraResLabel(s: string) {
-        const key = "INFO_EXTRARES_LIB_";
-        const match = this.parseLabel(s);
-        if (match) {
-            // Code du type "Ouvrage[n].XXX"
-            // Les libellés correspondants sont INFO OUVRAGE et INFO_EXTRARES_LIB_OUVRAGE_XXX
-            return this.localizeText(`INFO_${match[1].toUpperCase()}`) + " n°" + (+match[2] + 1) + ": " +
-                this.localizeText(`${key}${match[1].toUpperCase()}_${match[3].toUpperCase()}`);
-        } else {
-            // Autres codes INFO_EXTRARES_LIB_XXX
-            return this.localizeText(`${key}${s.toUpperCase()}`);
-        }
-    }
-
     /**
      * Met en forme un extraResult en fonction du libellé qui l'accompagne
      * Les extraResult avec le terme "ENUM_" sont traduit avec le message INFO_EXTRARES_ENUM_[Nom de la variable après ENUM_]
diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json
index ddccf44b3..2b6aa4f81 100644
--- a/src/locale/messages.en.json
+++ b/src/locale/messages.en.json
@@ -1,9 +1,9 @@
 {
     "ERROR_DICHO_CONVERGE": "Dichotomy could not converge",
     "ERROR_DICHO_FUNCTION_VARIATION": "unable to determinate function direction of variation",
+    "ERROR_DICHO_INIT_DOMAIN": "Dichotomy: target %targetSymbol%=%targetValue% does not exist for variable %variableSymbol% valued in interval %variableInterval%",
     "ERROR_DICHO_INITVALUE_HIGH": "Dichotomy: initial value %variableSymbol%=%variableInitValue% is too high (target is %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
     "ERROR_DICHO_INITVALUE_LOW": "Dichotomy: initial value %variableSymbol%=%variableInitValue% is too low (target is %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
-    "ERROR_DICHO_INIT_DOMAIN": "Dichotomy: target %targetSymbol%=%targetValue% does not exist for variable %variableSymbol% valued in interval %variableInterval%",
     "ERROR_DICHO_INVALID_STEP_GROWTH": "Dichotomy (initial interval search): invalid null step growth",
     "ERROR_DICHO_NULL_STEP": "Dichotomy (initial interval search): invalid null step",
     "ERROR_ELEVATION_ZI_LOWER_THAN_Z2": "Upstream elevation is lower than downstream elevation",
@@ -15,9 +15,9 @@
     "ERROR_MINMAXSTEP_MIN": "Value is not in [%s,%s[",
     "ERROR_MINMAXSTEP_STEP": "Value is not in %s",
     "ERROR_NEWTON_DERIVEE_NULLE": "Null function derivative in Newton computation",
-    "ERROR_PARAM_NULL": "Parameter value must not be NULL",
     "ERROR_PARAM_MUST_BE_A_NUMBER": "Please type a numeric value",
     "ERROR_PARAM_MUST_BE_POSITIVE": "Please type a positive numeric value",
+    "ERROR_PARAM_NULL": "Parameter value must not be NULL",
     "ERROR_PARAMDEF_CALC_UNDEFINED": "calculability of '%symbol%' parameter is undefined",
     "ERROR_PARAMDEF_LINKED_VALUE_UNDEFINED": "value of '%symbol%' linked parameter is undefined",
     "ERROR_PARAMDEF_VALUE_FIXED": "value of '%symbol%' parameter cannot be changed",
@@ -39,34 +39,34 @@
     "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HTOR": "Non convergence of the calculation of the corresponding height (Newton's method) for the calculation of the supercritical depth",
     "ERROR_SECTION_PENTE_NEG_NULLE_HNORMALE_INF": "The slope is negative or zero, the normal depth is infinite",
     "ERROR_STRUCTURE_Q_TROP_ELEVE": "The flow passing through the other devices is too high: the requested parameter is not calculable.",
-    "INFO_CALCULATOR_CALCULER": "Compute",
     "INFO_CALCULATOR_CALC_NAME": "Calculator name",
+    "INFO_CALCULATOR_CALCULER": "Compute",
     "INFO_CALCULATOR_PARAMFIXES": "Fixed parameters",
     "INFO_CALCULATOR_RESULTS_GENERATE_PAB": "Generate a fish ladder",
     "INFO_CALCULATOR_RESULTS_TITLE": "Results",
     "INFO_CALCULATOR_VALEURS": "Values",
-    "INFO_CLOISONS_TITRE": "Fish ladder: Cross walls",
     "INFO_CLOISONS_TITRE_COURT": "Cross walls",
+    "INFO_CLOISONS_TITRE": "Fish ladder: Cross walls",
     "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "The following modules depend on the one you are closing:",
     "INFO_CLOSE_DIALOGUE_TEXT": "Warning ! Parameters and results of this module will be lost.",
     "INFO_CLOSE_DIALOGUE_TITRE": "Closing calculation module",
-    "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Distributor pipe",
     "INFO_CONDUITEDISTRIBUTRICE_TITRE_COURT": "Distrib.",
-    "INFO_COURBEREMOUS_TITRE": "Backwater curves",
+    "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Distributor pipe",
     "INFO_COURBEREMOUS_TITRE_COURT": "Backwater",
-    "INFO_DEVER_TITRE": "Free flow weir stage-discharge laws",
+    "INFO_COURBEREMOUS_TITRE": "Backwater curves",
     "INFO_DEVER_TITRE_COURT": "Free weir",
+    "INFO_DEVER_TITRE": "Free flow weir stage-discharge laws",
     "INFO_DIALOG_COMPUTED_VALUE_TITLE": "Edit initial value",
     "INFO_DIALOG_EMPTY_CURRENT_SESSION": "Empty current session",
     "INFO_DIALOG_FIX_MISSING_DEPENDENCIES": "Fix missing dependencies",
     "INFO_DIALOG_LOAD_SESSION_FILENAME": "Choose a file",
     "INFO_DIALOG_LOAD_SESSION_TITLE": "Load calculator modules",
-    "INFO_DIALOG_SAVE_SESSION_FILENAME": "File name",
-    "INFO_DIALOG_SAVE_SESSION_TITLE": "Save calculator modules",
+    "INFO_DIALOG_PAB_NB": "Number of falls",
     "INFO_DIALOG_PAB_Q": "Flow (m³/s)",
     "INFO_DIALOG_PAB_Z1": "Upstream elevation (m)",
     "INFO_DIALOG_PAB_Z2": "Downstream elevation (m)",
-    "INFO_DIALOG_PAB_NB": "Number of falls",
+    "INFO_DIALOG_SAVE_SESSION_FILENAME": "File name",
+    "INFO_DIALOG_SAVE_SESSION_TITLE": "Save calculator modules",
     "INFO_EMPTY_SESSION_DIALOGUE_TEXT": "Warning ! All open calculators will be lost. Continue ?",
     "INFO_EMPTY_SESSION_DIALOGUE_TITRE": "New session",
     "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_0": "Emergent",
@@ -86,85 +86,82 @@
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_1": "Partially submerged",
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_2": "Submerged",
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_3": "Zero flow",
-    "INFO_EXTRARES_LIB_AVAL": "Downstream",
-    "INFO_EXTRARES_LIB_B": "Surface width (m)",
-    "INFO_EXTRARES_LIB_CLOISON": "Cross wall n°",
-    "INFO_EXTRARES_LIB_CV": "Cv: Velocity coefficient",
-    "INFO_EXTRARES_LIB_CVQT": "CV.QT: Corrected discharge (m³/s)",
-    "INFO_EXTRARES_LIB_DH": "Fall (m)",
-    "INFO_EXTRARES_LIB_DHR": "DHR : Residual fall (m)",
-    "INFO_EXTRARES_LIB_EC": "EC: Kinetic energy (m)",
-    "INFO_EXTRARES_LIB_ENUM_MACRORUGOFLOWTYPE": "Flow type",
-    "INFO_EXTRARES_LIB_FLU": "Subcritical water line",
-    "INFO_EXTRARES_LIB_FR": "Froude number",
-    "INFO_EXTRARES_LIB_HS": "Specific head (m)",
-    "INFO_EXTRARES_LIB_HSC": "Critical head (m)",
-    "INFO_EXTRARES_LIB_I-J": "Linear variation of specific head (m/m)",
-    "INFO_EXTRARES_LIB_IMP": "Impulse (N)",
-    "INFO_EXTRARES_LIB_J": "Head loss (m)",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q": "Discharge (m³/s)",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q_MODE": "Mode",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q_REGIME": "Regime",
-    "INFO_EXTRARES_LIB_P": "Wetted perimeter (m)",
-    "INFO_EXTRARES_LIB_PV": "Volumic dissipated power (W/m³)",
-    "INFO_EXTRARES_LIB_QA": "Attraction flow (m³/s)",
-    "INFO_EXTRARES_LIB_Q": "Flow (m³/s)",
-    "INFO_EXTRARES_LIB_Q_GUIDETECH": "Technical guide flow (m³/s)",
-    "INFO_EXTRARES_LIB_R": "Hydraulic radius (m)",
-    "INFO_EXTRARES_LIB_S": "Wetted area (m²)",
-    "INFO_EXTRARES_LIB_TAU0": "Tractive force (Pa)",
-    "INFO_EXTRARES_LIB_TOR": "Supercritical water line",
-    "INFO_EXTRARES_LIB_V": "Average speed (m/s)",
-    "INFO_EXTRARES_LIB_VDEB": "Conveyance speed (m/s)",
-    "INFO_EXTRARES_LIB_VMAX": "Maximal speed (m/s)",
-    "INFO_EXTRARES_LIB_V_GUIDETECH": "Technical guide speed (m/s)",
-    "INFO_EXTRARES_LIB_YC": "Critical depth (m)",
-    "INFO_EXTRARES_LIB_YCO": "Conjugate depth (m)",
-    "INFO_EXTRARES_LIB_YF": "Subcritical depth (m)",
-    "INFO_EXTRARES_LIB_YMOY": "Average depth (m)",
-    "INFO_EXTRARES_LIB_YN": "Normal depth (m)",
-    "INFO_EXTRARES_LIB_YT": "Supercritical depth (m)",
-    "INFO_EXTRARES_LIB_Z": "Water level (m)",
-    "INFO_EXTRARES_LIB_ZRAM": "Bottom elevation (m)",
-    "INFO_EXTRARES_LIB_ZRB": "Downstream basin bottom elevation (m)",
-    "INFO_EXTRARES_LIB_ZF2": "Downstream bottom elevation (m)",
-    "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon",
     "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.",
+    "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon",
     "INFO_LIB_ALPHA": "Alpha coefficient",
     "INFO_LIB_ALPHA2": "Half-angle at the apex",
+    "INFO_LIB_AVAL": "Downstream",
+    "INFO_LIB_B": "Surface width",
     "INFO_LIB_BETA": "Beta coefficient",
     "INFO_LIB_BT": "Half opening of the triangle",
     "INFO_LIB_CD": "Discharge coefficient",
+    "INFO_LIB_CLOISON": "Cross wall n°",
+    "INFO_LIB_CV": "Cv: Velocity coefficient",
+    "INFO_LIB_CVQT": "CV.QT: Corrected discharge",
+    "INFO_LIB_DH": "Fall",
+    "INFO_LIB_DHR": "DHR : Residual fall",
+    "INFO_LIB_EC": "EC: Kinetic energy",
+    "INFO_LIB_ENUM_MACRORUGOFLOWTYPE": "Flow type",
+    "INFO_LIB_FLU": "Subcritical water line",
+    "INFO_LIB_FR": "Froude number",
     "INFO_LIB_FS_OUVRAGE": "Device",
     "INFO_LIB_FS_PARAM_CALC": "Calculation parameters",
     "INFO_LIB_FS_PARAM_HYDRO": "Hydraulic parameters",
+    "INFO_LIB_HS": "Specific head",
+    "INFO_LIB_HSC": "Critical head",
+    "INFO_LIB_I-J": "Linear variation of specific head",
+    "INFO_LIB_IMP": "Impulse",
+    "INFO_LIB_J": "Head loss",
     "INFO_LIB_L": "Weir width",
+    "INFO_LIB_OUVRAGE_Q_MODE": "Mode",
+    "INFO_LIB_OUVRAGE_Q_REGIME": "Regime",
+    "INFO_LIB_OUVRAGE_Q": "Discharge",
+    "INFO_LIB_P": "Wetted perimeter",
     "INFO_LIB_PR": "Display accuracy",
+    "INFO_LIB_PV": "Volumic dissipated power",
+    "INFO_LIB_Q_GUIDETECH": "Technical guide flow",
     "INFO_LIB_Q": "Discharge",
-    "INFO_LIB_SELECT_LOIDEBIT1": "Stage-discharge law",
     "INFO_LIB_QA": "Attraction flow",
+    "INFO_LIB_R": "Hydraulic radius",
+    "INFO_LIB_S": "Orifice area",
     "INFO_LIB_SELECT_LOIDEBIT": "Stage-discharge law",
     "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter and Villemonte",
+    "INFO_LIB_SELECT_LOIDEBIT1": "Stage-discharge law",
     "INFO_LIB_SELECT_LOIDEBIT2": "Stage-discharge law",
     "INFO_LIB_SELECT_LOIDEBIT3": "Stage-discharge law",
     "INFO_LIB_SELECT_LOIDEBIT4": "Stage-discharge law",
-    "INFO_LIB_SELECT_OUVRAGE": "Device",
     "INFO_LIB_SELECT_OUVRAGE_SEUIL_RECT": "Rectangular weir",
+    "INFO_LIB_SELECT_OUVRAGE": "Device",
     "INFO_LIB_STRUCT_CONTAINER": "Devices",
+    "INFO_LIB_TAU0": "Tractive force",
+    "INFO_LIB_TOR": "Supercritical water line",
+    "INFO_LIB_V_GUIDETECH": "Technical guide speed",
+    "INFO_LIB_V": "Average speed",
+    "INFO_LIB_VDEB": "Conveyance speed",
+    "INFO_LIB_VMAX": "Maximal speed",
+    "INFO_LIB_YC": "Critical depth",
+    "INFO_LIB_YCO": "Conjugate depth",
+    "INFO_LIB_YF": "Subcritical depth",
+    "INFO_LIB_YMOY": "Average depth",
+    "INFO_LIB_YN": "Normal depth",
+    "INFO_LIB_YT": "Supercritical depth",
+    "INFO_LIB_Z": "Water level",
     "INFO_LIB_Z1": "Upstream water level",
     "INFO_LIB_Z2": "Downstream water level",
     "INFO_LIB_ZDV": "Crest weir elevation or gate base",
+    "INFO_LIB_ZF2": "Downstream bottom elevation",
     "INFO_LIB_ZRAM": "Upstream apron elevation",
+    "INFO_LIB_ZRB": "Downstream basin bottom elevation",
     "INFO_LIB_ZT": "Triangle top elevation",
-    "INFO_LINKED_VALUE_DEVICE": "%s (%s, device %s)",
     "INFO_LINKED_VALUE_DEVICE_RESULT": "%s (%s, device %s)",
-    "INFO_LINKED_VALUE_EXTRA_RESULT": "%s (%s)",
+    "INFO_LINKED_VALUE_DEVICE": "%s (%s, device %s)",
     "INFO_LINKED_VALUE_EXTRA_RESULT_OF": "%s (%s)",
+    "INFO_LINKED_VALUE_EXTRA_RESULT": "%s (%s)",
     "INFO_LINKED_VALUE_RESULT": "%s (%s)",
-    "INFO_LINKED_VALUE_SECTION": "%s (%s, section)",
     "INFO_LINKED_VALUE_SECTION_RESULT": "%s (%s, section)",
-    "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses",
+    "INFO_LINKED_VALUE_SECTION": "%s (%s, section)",
     "INFO_MACRORUGO_TITRE_COURT": "Rock-ramp",
+    "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses",
     "INFO_MENU_EMPTY_SESSION_TITLE": "New session",
     "INFO_MENU_HELP_TITLE": "Help",
     "INFO_MENU_LOAD_SESSION_TITLE": "Load session",
@@ -174,46 +171,45 @@
     "INFO_MENU_SAVE_SESSION_TITLE": "Save session",
     "INFO_MENU_SAVE_SETTINGS": "Save settings",
     "INFO_MENU_SELECT_CALC": "Select calculator module",
-    "INFO_OPTION_ALL": "All",
     "INFO_OPTION_ALL_F": "All",
+    "INFO_OPTION_ALL": "All",
     "INFO_OPTION_CANCEL": "Cancel",
     "INFO_OPTION_CLOSE": "Close",
+    "INFO_OPTION_GENERATE": "Generate",
     "INFO_OPTION_LOAD": "Load",
     "INFO_OPTION_NO": "No",
-    "INFO_OPTION_NONE": "None",
     "INFO_OPTION_NONE_F": "None",
+    "INFO_OPTION_NONE": "None",
     "INFO_OPTION_SAVE": "Save",
     "INFO_OPTION_START_NEW": "Start new session",
     "INFO_OPTION_VALIDATE": "Validate",
     "INFO_OPTION_YES": "Yes",
-    "INFO_OPTION_GENERATE": "Generate",
     "INFO_OUVRAGE": "Structure",
-    "INFO_PAB_TITRE": "Fish ladder",
     "INFO_PAB_TITRE_COURT": "Fish ladder",
-    "INFO_PABCHUTE_TITRE": "Fish ladder: fall",
+    "INFO_PAB_TITRE": "Fish ladder",
     "INFO_PABCHUTE_TITRE_COURT": "FL: fall",
-    "INFO_PABDIMENSIONS_TITRE": "Fish ladder: dimensions",
+    "INFO_PABCHUTE_TITRE": "Fish ladder: fall",
     "INFO_PABDIMENSIONS_TITRE_COURT": "FL: dimensions",
-    "INFO_PABNOMBRE_TITRE": "Fish ladder : number of falls",
+    "INFO_PABDIMENSIONS_TITRE": "Fish ladder: dimensions",
     "INFO_PABNOMBRE_TITRE_COURT": "FL : number",
-    "INFO_PABPUISSANCE_TITRE": "Fish ladder: dissipated power",
+    "INFO_PABNOMBRE_TITRE": "Fish ladder : number of falls",
     "INFO_PABPUISSANCE_TITRE_COURT": "FL: diss. power",
-    "INFO_PARALLELSTRUCTURE_TITRE": "Parallel structures",
+    "INFO_PABPUISSANCE_TITRE": "Fish ladder: dissipated power",
     "INFO_PARALLELSTRUCTURE_TITRE_COURT": "// structures",
+    "INFO_PARALLELSTRUCTURE_TITRE": "Parallel structures",
     "INFO_PARAMFIELD_AWAITING_CALCULATION": "Awaiting calculation",
     "INFO_PARAMFIELD_CALCULATED": "Calculated",
     "INFO_PARAMFIELD_CALCULATION_FAILED": "Calculation failed",
     "INFO_PARAMFIELD_GRAPH_SELECT_X_AXIS": "Variable for X axis",
     "INFO_PARAMFIELD_GRAPH_SELECT_Y_AXIS": "Variable for Y axis",
-    "INFO_PARAMFIELD_GRAPH_TYPE": "Graph type",
     "INFO_PARAMFIELD_GRAPH_TYPE_HISTOGRAM": "Histogram",
-    "INFO_PARAMFIELD_IN_CALCULATION": "In calculation",
+    "INFO_PARAMFIELD_GRAPH_TYPE": "Graph type",
     "INFO_PARAMFIELD_IN_CALCULATION_INITIAL_VALUE": "initial value",
+    "INFO_PARAMFIELD_IN_CALCULATION": "In calculation",
     "INFO_PARAMFIELD_PARAMCALCULER": "Calculate",
     "INFO_PARAMFIELD_PARAMFIXE": "Fixed",
-    "INFO_PARAMFIELD_PARAMLIE": "Link",
     "INFO_PARAMFIELD_PARAMLIE_LABEL": "Linked parameter",
-    "INFO_PARAMFIELD_PARAMVARIER": "Vary",
+    "INFO_PARAMFIELD_PARAMLIE": "Link",
     "INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER": "Import file",
     "INFO_PARAMFIELD_PARAMVARIER_MINMAXSTEP": "min: %s, max: %s, step: %s",
     "INFO_PARAMFIELD_PARAMVARIER_MODE": "Mode",
@@ -221,24 +217,18 @@
     "INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_POINT": ". (dot)",
     "INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_VIRGULE": ", (comma)",
     "INFO_PARAMFIELD_PARAMVARIER_TITLE": "Multiple values",
-    "INFO_PARAMFIELD_PARAMVARIER_VALUES": "Values:",
-    "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT": "Values list",
     "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT_ERROR": "Incorrect format; accepted separator: %s",
+    "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT": "Values list",
+    "INFO_PARAMFIELD_PARAMVARIER_VALUES": "Values:",
+    "INFO_PARAMFIELD_PARAMVARIER": "Vary",
     "INFO_PARAMFIELD_PASVARIATION": "With a variation step of",
     "INFO_PARAMFIELD_VALEURMAXI": "To maximum value",
     "INFO_PARAMFIELD_VALEURMINI": "From minimum value",
     "INFO_PARAMFIELD_VARIATED": "Variated",
     "INFO_PARAMMODE_LIST": "Values list",
     "INFO_PARAMMODE_MINMAX": "Min/max",
-    "INFO_REGIMEUNIFORME_TITRE": "Uniform flow calculation",
     "INFO_REGIMEUNIFORME_TITRE_COURT": "Uniform flow",
-    "INFO_REMOUSRESULTS_ABSCISSE": "Abscissa (m)",
-    "INFO_REMOUSRESULTS_BERGE": "Embankment",
-    "INFO_REMOUSRESULTS_FOND": "Bottom",
-    "INFO_REMOUSRESULTS_TIRANT": "Draft (m)",
-    "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Critical water level",
-    "INFO_REMOUSRESULTS_TIRANTNORMAL": "Normal water level",
-    "INFO_REMOUSRESULTS_TITREJOURNAL": "Calculation log",
+    "INFO_REGIMEUNIFORME_TITRE": "Uniform flow calculation",
     "INFO_REMOUS_CALCUL_FLUVIAL": "Downstream boundary condition >= Critical elevation: calculation of subcritical part from downstream",
     "INFO_REMOUS_CALCUL_TORRENTIEL": "Uptream boundary condition <= Critical elevation: calculation of supercritical part from upstream",
     "INFO_REMOUS_H_CRITIQUE": "Width at embankment level = %Yc% m",
@@ -246,11 +236,18 @@
     "INFO_REMOUS_LARGEUR_BERGE": "Width at embankment level = %B% m",
     "INFO_REMOUS_RESSAUT_DEHORS": "Hydraulic jump detected %sens% abscissa %x% m",
     "INFO_REMOUS_RESSAUT_HYDRO": "Hydraulic jump detected between abscissa %xmin% and %xmax% m",
+    "INFO_REMOUSRESULTS_ABSCISSE": "Abscissa (m)",
+    "INFO_REMOUSRESULTS_BERGE": "Embankment",
+    "INFO_REMOUSRESULTS_FOND": "Bottom",
+    "INFO_REMOUSRESULTS_TIRANT": "Draft (m)",
+    "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Critical water level",
+    "INFO_REMOUSRESULTS_TIRANTNORMAL": "Normal water level",
+    "INFO_REMOUSRESULTS_TITREJOURNAL": "Calculation log",
     "INFO_REPORT_BUG_BODY": "This is an issue report.\n\nPlease describe quickly the issue you encoutered, and the steps you followed:\n\n\n\n\n--- Current session state - do not modify text below ---\n------------------------------------------------------------------------\n\n",
     "INFO_REPORT_BUG_SUBJECT": "Issue report",
     "INFO_REQUIRES": "requires",
-    "INFO_SECTIONPARAMETREE_TITRE": "Parametric section",
     "INFO_SECTIONPARAMETREE_TITRE_COURT": "Param. section",
+    "INFO_SECTIONPARAMETREE_TITRE": "Parametric section",
     "INFO_SETUP_LANGUAGE": "Language",
     "INFO_SETUP_NEWTON_MAX_ITER": "Newton iteration limit",
     "INFO_SETUP_PRECISION_AFFICHAGE": "Display accuracy",
diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json
index 6549da552..ba8010d4d 100644
--- a/src/locale/messages.fr.json
+++ b/src/locale/messages.fr.json
@@ -1,9 +1,9 @@
 {
     "ERROR_DICHO_CONVERGE": "La dichotomie n'a pas pu converger",
     "ERROR_DICHO_FUNCTION_VARIATION": "Dichotomie&nbsp;: impossible de determiner le sens de  variation de la fonction",
+    "ERROR_DICHO_INIT_DOMAIN": "Dichotomie&nbsp;: la valeur cible %targetSymbol%=%targetValue% n'existe pas pour la variable %variableSymbol% prise dans l'intervalle %variableInterval%",
     "ERROR_DICHO_INITVALUE_HIGH": "Dichotomie&nbsp;: la valeur initiale %variableSymbol%=%variableInitValue% est trop grande (la valeur cible est %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
     "ERROR_DICHO_INITVALUE_LOW": "Dichotomie&nbsp;: la valeur initiale %variableSymbol%=%variableInitValue% est trop petite (la valeur cible est %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
-    "ERROR_DICHO_INIT_DOMAIN": "Dichotomie&nbsp;: la valeur cible %targetSymbol%=%targetValue% n'existe pas pour la variable %variableSymbol% prise dans l'intervalle %variableInterval%",
     "ERROR_DICHO_INVALID_STEP_GROWTH": "Dichotomie&nbsp;: l'augmentation du pas pour la recherche de l'intervalle de départ est incorrecte (=0)",
     "ERROR_DICHO_NULL_STEP": "Dichotomie&nbsp;: le pas pour la recherche de l'intervalle de départ ne devrait pas être nul",
     "ERROR_ELEVATION_ZI_LOWER_THAN_Z2": "La cote amont est plus basse que la cote aval",
@@ -15,9 +15,9 @@
     "ERROR_MINMAXSTEP_MIN": "La valeur n'est pas dans [%s,%s[",
     "ERROR_MINMAXSTEP_STEP": "La valeur n'est pas dans %s",
     "ERROR_NEWTON_DERIVEE_NULLE": "Dérivée nulle dans un calcul par la méthode de Newton",
-    "ERROR_PARAM_NULL": "La valeur du paramètre ne peut pas être NULL",
     "ERROR_PARAM_MUST_BE_A_NUMBER": "Veuillez entrer une valeur numérique",
     "ERROR_PARAM_MUST_BE_POSITIVE": "Veuillez entrer une valeur numérique positive",
+    "ERROR_PARAM_NULL": "La valeur du paramètre ne peut pas être NULL",
     "ERROR_PARAMDEF_CALC_UNDEFINED": "La calculabilité du paramètre %symbol% n'est pas définie",
     "ERROR_PARAMDEF_LINKED_VALUE_UNDEFINED": "La valeur du paramètre lié %symbol% n'est pas définie",
     "ERROR_PARAMDEF_VALUE_FIXED": "La valeur du paramètre %symbol% ne peut pas être changée",
@@ -39,35 +39,35 @@
     "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HTOR": "Non convergence du calcul de la hauteur correspondante (Méthode de Newton) pour le calcul de la hauteur torrentielle",
     "ERROR_SECTION_PENTE_NEG_NULLE_HNORMALE_INF": "La pente est négative ou nulle, la hauteur normale est infinie",
     "ERROR_STRUCTURE_Q_TROP_ELEVE": "Le débit passant par les autres ouvrages est trop élevé: le paramètre demandé n'est pas calculable.",
-    "INFO_CALCULATOR_CALCULER": "Calculer",
     "INFO_CALCULATOR_CALC_NAME": "Nom du module de calcul",
+    "INFO_CALCULATOR_CALCULER": "Calculer",
     "INFO_CALCULATOR_PARAMFIXES": "Paramètres fixés",
     "INFO_CALCULATOR_RESULTS_GENERATE_PAB": "Générer une passe à bassins",
     "INFO_CALCULATOR_RESULTS_TITLE": "Résultats",
     "INFO_CALCULATOR_VALEURS": "Valeurs",
-    "INFO_CLOISONS_TITRE": "Passe à bassins&nbsp;: Cloisons",
     "INFO_CLOISONS_TITRE_COURT": "Cloisons",
+    "INFO_CLOISONS_TITRE": "Passe à bassins&nbsp;: Cloisons",
     "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "Les modules suivants dépendent de celui que vous êtes en train de fermer :",
     "INFO_CLOSE_DIALOGUE_TEXT": "Attention&nbsp;! Les paramètres et résultats du module de calcul seront perdus.",
     "INFO_CLOSE_DIALOGUE_TITRE": "Fermeture du module de calcul",
-    "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Conduite distributrice",
     "INFO_CONDUITEDISTRIBUTRICE_TITRE_COURT": "Conduite distri.",
-    "INFO_COURBEREMOUS_TITRE": "Courbes de remous",
+    "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Conduite distributrice",
     "INFO_COURBEREMOUS_TITRE_COURT": "Remous",
-    "INFO_DEVER_TITRE": "Lois de déversoirs dénoyés",
+    "INFO_COURBEREMOUS_TITRE": "Courbes de remous",
     "INFO_DEVER_TITRE_COURT": "Déver. dénoyés",
+    "INFO_DEVER_TITRE": "Lois de déversoirs dénoyés",
     "INFO_DIALOG_COMPUTED_VALUE_TITLE": "Modifier la valeur initiale",
     "INFO_DIALOG_EMPTY_CURRENT_SESSION": "Vider la session courante",
     "INFO_DIALOG_FIX_MISSING_DEPENDENCIES": "Résoudre les dépendances",
     "INFO_DIALOG_LOAD_SESSION_FILENAME": "Choisir un fichier",
     "INFO_DIALOG_LOAD_SESSION_TITLE": "Charger des modules de calcul",
-    "INFO_DIALOG_SAVE_SESSION_FILENAME": "Nom de fichier",
-    "INFO_DIALOG_SAVE_SESSION_TITLE": "Enregistrer les modules de calcul",
-    "INFO_EMPTY_SESSION_DIALOGUE_TEXT": "Attention&nbsp;! Tous les modules de calcul ouverts seront perdus.",
+    "INFO_DIALOG_PAB_NB": "Nombre de chutes",
     "INFO_DIALOG_PAB_Q": "Débit (m³/s)",
     "INFO_DIALOG_PAB_Z1": "Cote amont (m)",
     "INFO_DIALOG_PAB_Z2": "Cote aval (m)",
-    "INFO_DIALOG_PAB_NB": "Nombre de chutes",
+    "INFO_DIALOG_SAVE_SESSION_FILENAME": "Nom de fichier",
+    "INFO_DIALOG_SAVE_SESSION_TITLE": "Enregistrer les modules de calcul",
+    "INFO_EMPTY_SESSION_DIALOGUE_TEXT": "Attention&nbsp;! Tous les modules de calcul ouverts seront perdus.",
     "INFO_EMPTY_SESSION_DIALOGUE_TITRE": "Démarrer une nouvelle session",
     "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_0": "Émergent",
     "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_1": "Quasi-émergent",
@@ -86,85 +86,82 @@
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_1": "Partiellement noyé",
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_2": "Noyé",
     "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_3": "Débit nul",
-    "INFO_EXTRARES_LIB_AVAL": "Aval",
-    "INFO_EXTRARES_LIB_B": "Largeur au miroir (m)",
-    "INFO_EXTRARES_LIB_CLOISON": "Cloison n°",
-    "INFO_EXTRARES_LIB_CV": "Cv: Coefficient de vitesse d'approche",
-    "INFO_EXTRARES_LIB_CVQT": "CV.QT: Débit corrigé (m³/s)",
-    "INFO_EXTRARES_LIB_DH": "Chute (m)",
-    "INFO_EXTRARES_LIB_DHR": "DHR: Chute résiduelle (m)",
-    "INFO_EXTRARES_LIB_EC": "EC: Énergie cinétique (m)",
-    "INFO_EXTRARES_LIB_ENUM_MACRORUGOFLOWTYPE": "Type d'écoulement",
-    "INFO_EXTRARES_LIB_FLU": "Ligne d'eau fluviale",
-    "INFO_EXTRARES_LIB_FR": "Froude",
-    "INFO_EXTRARES_LIB_HS": "Charge spécifique (m)",
-    "INFO_EXTRARES_LIB_HSC": "Charge critique (m)",
-    "INFO_EXTRARES_LIB_I-J": "Variation linéaire de l'énergie spécifique (m/m)",
-    "INFO_EXTRARES_LIB_IMP": "Impulsion (N)",
-    "INFO_EXTRARES_LIB_J": "Perte de charge (m)",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q": "Débit (m³/s)",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWMODE": "Type d'écoulement",
-    "INFO_EXTRARES_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWREGIME": "Régime",
-    "INFO_EXTRARES_LIB_P": "Périmètre mouillé (m)",
-    "INFO_EXTRARES_LIB_PV": "Puissance volumique dissipée (W/m³)",
-    "INFO_EXTRARES_LIB_Q": "Débit (m³/s)",
-    "INFO_EXTRARES_LIB_Q_GUIDETECH": "Débit Guide technique (m³/s)",
-    "INFO_EXTRARES_LIB_QA": "Débit d'attrait (m³/s)",
-    "INFO_EXTRARES_LIB_R": "Rayon hydraulique (m)",
-    "INFO_EXTRARES_LIB_S": "Surface mouillée (m²)",
-    "INFO_EXTRARES_LIB_TAU0": "Force tractrice (Pa)",
-    "INFO_EXTRARES_LIB_TOR": "Ligne d'eau torrentielle",
-    "INFO_EXTRARES_LIB_V": "Vitesse moyenne (m/s)",
-    "INFO_EXTRARES_LIB_VDEB": "Vitesse débitante (m/s)",
-    "INFO_EXTRARES_LIB_VMAX": "Vitesse maximale (m/s)",
-    "INFO_EXTRARES_LIB_V_GUIDETECH": "Vitesse Guide technique (m/s)",
-    "INFO_EXTRARES_LIB_YC": "Tirant d'eau critique (m)",
-    "INFO_EXTRARES_LIB_YCO": "Tirant d'eau conjugué (m)",
-    "INFO_EXTRARES_LIB_YF": "Tirant d'eau fluvial (m)",
-    "INFO_EXTRARES_LIB_YMOY": "Tirant d'eau moyen (m)",
-    "INFO_EXTRARES_LIB_YN": "Tirant d'eau normal (m)",
-    "INFO_EXTRARES_LIB_YT": "Tirant d'eau torrentiel (m)",
-    "INFO_EXTRARES_LIB_Z": "Niveau d'eau (m)",
-    "INFO_EXTRARES_LIB_ZRAM": "Cote de radier amont de la cloison (m)",
-    "INFO_EXTRARES_LIB_ZRB": "Cote de radier du bassin aval (m)",
-    "INFO_EXTRARES_LIB_ZF2": "Cote de fond aval (m)",
-    "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon",
     "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.",
+    "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon",
     "INFO_LIB_ALPHA": "Coefficient alpha",
     "INFO_LIB_ALPHA2": "Demi-angle au sommet",
+    "INFO_LIB_AVAL": "Aval",
+    "INFO_LIB_B": "Largeur au miroir",
     "INFO_LIB_BETA": "Coefficient béta",
     "INFO_LIB_BT": "Demi-ouverture du triangle",
     "INFO_LIB_CD": "Coefficient de débit",
+    "INFO_LIB_CLOISON": "Cloison n°",
+    "INFO_LIB_CV": "Cv: Coefficient de vitesse d'approche",
+    "INFO_LIB_CVQT": "CV.QT: Débit corrigé",
+    "INFO_LIB_DH": "Chute",
+    "INFO_LIB_DHR": "DHR: Chute résiduelle",
+    "INFO_LIB_EC": "EC: Énergie cinétique",
+    "INFO_LIB_ENUM_MACRORUGOFLOWTYPE": "Type d'écoulement",
+    "INFO_LIB_FLU": "Ligne d'eau fluviale",
+    "INFO_LIB_FR": "Froude",
     "INFO_LIB_FS_OUVRAGE": "Ouvrage",
     "INFO_LIB_FS_PARAM_CALC": "Paramètres de calcul",
     "INFO_LIB_FS_PARAM_HYDRO": "Paramètres hydrauliques",
+    "INFO_LIB_HS": "Charge spécifique",
+    "INFO_LIB_HSC": "Charge critique",
+    "INFO_LIB_I-J": "Variation linéaire de l'énergie spécifique",
+    "INFO_LIB_IMP": "Impulsion",
+    "INFO_LIB_J": "Perte de charge",
     "INFO_LIB_L": "Largeur du déversoir",
+    "INFO_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWMODE": "Type d'écoulement",
+    "INFO_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWREGIME": "Régime",
+    "INFO_LIB_OUVRAGE_Q": "Débit",
+    "INFO_LIB_P": "Périmètre mouillé",
     "INFO_LIB_PR": "Précision de calcul",
+    "INFO_LIB_PV": "Puissance volumique dissipée",
+    "INFO_LIB_Q_GUIDETECH": "Débit Guide technique",
     "INFO_LIB_Q": "Débit",
-    "INFO_LIB_SELECT_LOIDEBIT1": "Loi de débit",
     "INFO_LIB_QA": "Débit d'attrait",
+    "INFO_LIB_R": "Rayon hydraulique",
+    "INFO_LIB_S": "Surface de l'orifice",
     "INFO_LIB_SELECT_LOIDEBIT": "Loi de débit",
     "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter et Villemonte",
+    "INFO_LIB_SELECT_LOIDEBIT1": "Loi de débit",
     "INFO_LIB_SELECT_LOIDEBIT2": "Loi de débit",
     "INFO_LIB_SELECT_LOIDEBIT3": "Loi de débit",
     "INFO_LIB_SELECT_LOIDEBIT4": "Loi de débit",
-    "INFO_LIB_SELECT_OUVRAGE": "Ouvrage",
     "INFO_LIB_SELECT_OUVRAGE_SEUIL_RECT": "Seuil rectangulaire",
+    "INFO_LIB_SELECT_OUVRAGE": "Ouvrage",
     "INFO_LIB_STRUCT_CONTAINER": "Ouvrages",
+    "INFO_LIB_TAU0": "Force tractrice",
+    "INFO_LIB_TOR": "Ligne d'eau torrentielle",
+    "INFO_LIB_V_GUIDETECH": "Vitesse Guide technique",
+    "INFO_LIB_V": "Vitesse moyenne",
+    "INFO_LIB_VDEB": "Vitesse débitante",
+    "INFO_LIB_VMAX": "Vitesse maximale",
+    "INFO_LIB_YC": "Tirant d'eau critique",
+    "INFO_LIB_YCO": "Tirant d'eau conjugué",
+    "INFO_LIB_YF": "Tirant d'eau fluvial",
+    "INFO_LIB_YMOY": "Tirant d'eau moyen",
+    "INFO_LIB_YN": "Tirant d'eau normal",
+    "INFO_LIB_YT": "Tirant d'eau torrentiel",
+    "INFO_LIB_Z": "Niveau d'eau",
     "INFO_LIB_Z1": "Cote de l'eau amont",
     "INFO_LIB_Z2": "Cote de l'eau aval",
     "INFO_LIB_ZDV": "Cote de la crête du déversoir ou du radier de la vanne",
+    "INFO_LIB_ZF2": "Cote de fond aval",
     "INFO_LIB_ZRAM": "Cote du radier amont",
+    "INFO_LIB_ZRB": "Cote de radier du bassin aval",
     "INFO_LIB_ZT": "Cote haute du triangle",
-    "INFO_LINKED_VALUE_DEVICE": "%s (%s, ouvrage %s)",
     "INFO_LINKED_VALUE_DEVICE_RESULT": "%s (%s, ouvrage %s)",
-    "INFO_LINKED_VALUE_EXTRA_RESULT": "%s (%s)",
+    "INFO_LINKED_VALUE_DEVICE": "%s (%s, ouvrage %s)",
     "INFO_LINKED_VALUE_EXTRA_RESULT_OF": "%s (%s)",
+    "INFO_LINKED_VALUE_EXTRA_RESULT": "%s (%s)",
     "INFO_LINKED_VALUE_RESULT": "%s (%s)",
-    "INFO_LINKED_VALUE_SECTION": "%s (%s, section)",
     "INFO_LINKED_VALUE_SECTION_RESULT": "%s (%s, section)",
-    "INFO_MACRORUGO_TITRE": "Passe à macro-rugosités",
+    "INFO_LINKED_VALUE_SECTION": "%s (%s, section)",
     "INFO_MACRORUGO_TITRE_COURT": "Macro-rugo.",
+    "INFO_MACRORUGO_TITRE": "Passe à macro-rugosités",
     "INFO_MENU_EMPTY_SESSION_TITLE": "Nouvelle session",
     "INFO_MENU_HELP_TITLE": "Aide",
     "INFO_MENU_LOAD_SESSION_TITLE": "Charger une session",
@@ -174,46 +171,45 @@
     "INFO_MENU_SAVE_SESSION_TITLE": "Enregistrer la session",
     "INFO_MENU_SAVE_SETTINGS": "Enregistrer les paramètres",
     "INFO_MENU_SELECT_CALC": "Choisir un module de calcul",
-    "INFO_OPTION_ALL": "Tous",
     "INFO_OPTION_ALL_F": "Toutes",
+    "INFO_OPTION_ALL": "Tous",
     "INFO_OPTION_CANCEL": "Annuler",
     "INFO_OPTION_CLOSE": "Fermer",
+    "INFO_OPTION_GENERATE": "Générer",
     "INFO_OPTION_LOAD": "Charger",
     "INFO_OPTION_NO": "Non",
-    "INFO_OPTION_NONE": "Aucun",
     "INFO_OPTION_NONE_F": "Aucune",
+    "INFO_OPTION_NONE": "Aucun",
     "INFO_OPTION_SAVE": "Enregistrer",
     "INFO_OPTION_START_NEW": "Démarrer une nouvelle session",
     "INFO_OPTION_VALIDATE": "Valider",
     "INFO_OPTION_YES": "Oui",
-    "INFO_OPTION_GENERATE": "Générer",
     "INFO_OUVRAGE": "Ouvrage",
-    "INFO_PABCHUTE_TITRE": "Passe à bassins&nbsp;: chute",
-    "INFO_PAB_TITRE": "Passe à bassins",
     "INFO_PAB_TITRE_COURT": "PAB",
+    "INFO_PAB_TITRE": "Passe à bassins",
     "INFO_PABCHUTE_TITRE_COURT": "PAB&nbsp;: chute",
-    "INFO_PABDIMENSIONS_TITRE": "Passe à bassins&nbsp;: dimensions",
+    "INFO_PABCHUTE_TITRE": "Passe à bassins&nbsp;: chute",
     "INFO_PABDIMENSIONS_TITRE_COURT": "PAB&nbsp;: dimensions",
-    "INFO_PABNOMBRE_TITRE": "Passe à bassins&nbsp;: nombre de chutes",
+    "INFO_PABDIMENSIONS_TITRE": "Passe à bassins&nbsp;: dimensions",
     "INFO_PABNOMBRE_TITRE_COURT": "PAB&nbsp;: nombre",
-    "INFO_PABPUISSANCE_TITRE": "Passe à bassins&nbsp;: puissance dissipée",
+    "INFO_PABNOMBRE_TITRE": "Passe à bassins&nbsp;: nombre de chutes",
     "INFO_PABPUISSANCE_TITRE_COURT": "PAB&nbsp;: puissance",
-    "INFO_PARALLELSTRUCTURE_TITRE": "Lois d'ouvrages",
+    "INFO_PABPUISSANCE_TITRE": "Passe à bassins&nbsp;: puissance dissipée",
     "INFO_PARALLELSTRUCTURE_TITRE_COURT": "Ouvrages",
+    "INFO_PARALLELSTRUCTURE_TITRE": "Lois d'ouvrages",
     "INFO_PARAMFIELD_AWAITING_CALCULATION": "En attente de calcul",
     "INFO_PARAMFIELD_CALCULATED": "Calculé",
     "INFO_PARAMFIELD_CALCULATION_FAILED": "Échec du calcul",
     "INFO_PARAMFIELD_GRAPH_SELECT_X_AXIS": "Variable en abscisse",
     "INFO_PARAMFIELD_GRAPH_SELECT_Y_AXIS": "Variable en ordonnée",
-    "INFO_PARAMFIELD_GRAPH_TYPE": "Type de graphe",
     "INFO_PARAMFIELD_GRAPH_TYPE_HISTOGRAM": "Histogramme",
-    "INFO_PARAMFIELD_IN_CALCULATION": "En calcul",
+    "INFO_PARAMFIELD_GRAPH_TYPE": "Type de graphe",
     "INFO_PARAMFIELD_IN_CALCULATION_INITIAL_VALUE": "valeur initiale",
+    "INFO_PARAMFIELD_IN_CALCULATION": "En calcul",
     "INFO_PARAMFIELD_PARAMCALCULER": "calculer",
     "INFO_PARAMFIELD_PARAMFIXE": "fixé",
-    "INFO_PARAMFIELD_PARAMLIE": "lié",
     "INFO_PARAMFIELD_PARAMLIE_LABEL": "Paramètre lié",
-    "INFO_PARAMFIELD_PARAMVARIER": "varier",
+    "INFO_PARAMFIELD_PARAMLIE": "lié",
     "INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER": "Importer un fichier",
     "INFO_PARAMFIELD_PARAMVARIER_MINMAXSTEP": "min : %s, max : %s, pas : %s",
     "INFO_PARAMFIELD_PARAMVARIER_MODE": "Mode",
@@ -221,24 +217,18 @@
     "INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_POINT": ". (point)",
     "INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_VIRGULE": ", (virgule)",
     "INFO_PARAMFIELD_PARAMVARIER_TITLE": "Valeurs multiples",
-    "INFO_PARAMFIELD_PARAMVARIER_VALUES": "Valeurs :",
-    "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT": "Liste de valeurs",
     "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT_ERROR": "Format incorrect; séparateurs acceptés: %s",
+    "INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT": "Liste de valeurs",
+    "INFO_PARAMFIELD_PARAMVARIER_VALUES": "Valeurs :",
+    "INFO_PARAMFIELD_PARAMVARIER": "varier",
     "INFO_PARAMFIELD_PASVARIATION": "Avec un pas de",
     "INFO_PARAMFIELD_VALEURMAXI": "À la valeur maximum",
     "INFO_PARAMFIELD_VALEURMINI": "De la valeur minimum",
     "INFO_PARAMFIELD_VARIATED": "Varié",
     "INFO_PARAMMODE_LIST": "Liste de valeurs",
     "INFO_PARAMMODE_MINMAX": "Min/max",
-    "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme",
     "INFO_REGIMEUNIFORME_TITRE_COURT": "R. uniforme",
-    "INFO_REMOUSRESULTS_ABSCISSE": "Abscisse (m)",
-    "INFO_REMOUSRESULTS_BERGE": "Berge",
-    "INFO_REMOUSRESULTS_FOND": "Fond",
-    "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau (m)",
-    "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Tirant d'eau critique",
-    "INFO_REMOUSRESULTS_TIRANTNORMAL": "Tirant d'eau normal",
-    "INFO_REMOUSRESULTS_TITREJOURNAL": "Journal de calcul",
+    "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme",
     "INFO_REMOUS_CALCUL_FLUVIAL": "Condition limite aval >= Hauteur critique&nbsp;: calcul de la partie fluviale à partir de l'aval",
     "INFO_REMOUS_CALCUL_TORRENTIEL": "Condition limite amont <= Hauteur critique&nbsp;: calcul de la partie torrentielle à partir de l'amont",
     "INFO_REMOUS_H_CRITIQUE": "Tirant d'eau critique = %Yc% m",
@@ -246,11 +236,18 @@
     "INFO_REMOUS_LARGEUR_BERGE": "Largeur au niveau des berges = %B% m",
     "INFO_REMOUS_RESSAUT_DEHORS": "Ressaut hydraulique détecté à l'%sens% de l'abscisse %x% m",
     "INFO_REMOUS_RESSAUT_HYDRO": "Ressaut hydraulique détecté entre les abscisses %xmin% et %xmax% m",
+    "INFO_REMOUSRESULTS_ABSCISSE": "Abscisse (m)",
+    "INFO_REMOUSRESULTS_BERGE": "Berge",
+    "INFO_REMOUSRESULTS_FOND": "Fond",
+    "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau (m)",
+    "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Tirant d'eau critique",
+    "INFO_REMOUSRESULTS_TIRANTNORMAL": "Tirant d'eau normal",
+    "INFO_REMOUSRESULTS_TITREJOURNAL": "Journal de calcul",
     "INFO_REPORT_BUG_BODY": "Ceci est un rapport d'erreur.\n\nMerci de décrire rapidement ci-dessous le problème rencontré, et les étapes qui vous y ont mené :\n\n\n\n\n--- État de la session en cours - ne pas modifier le texte ci-dessous ---\n--------------------------------------------------------------------------------------------\n\n",
     "INFO_REPORT_BUG_SUBJECT": "Rapport d'erreur",
     "INFO_REQUIRES": "dépend de",
-    "INFO_SECTIONPARAMETREE_TITRE": "Section paramétrée",
     "INFO_SECTIONPARAMETREE_TITRE_COURT": "Sec. param.",
+    "INFO_SECTIONPARAMETREE_TITRE": "Section paramétrée",
     "INFO_SETUP_LANGUAGE": "Langue",
     "INFO_SETUP_NEWTON_MAX_ITER": "Newton : nombre d'itérations maximum",
     "INFO_SETUP_PRECISION_AFFICHAGE": "Précision d'affichage",
-- 
GitLab