diff --git a/.gitignore b/.gitignore
index c8694b3ebb4918507fa82b2426552e0f6d301667..b6ac6349452cf1b6098a100248fd3a3e0197f277 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,10 @@
 # See http://help.github.com/ignore-files/ for more about ignoring files.
 
 # compiled output
-/dist
-/build
 /tmp
-/out-tsc
-/src/main.js*
-/src/app/*.js*
+/src/main.js
+/src/app/**/*.js
+/src/app/**/*.js.map
 
 # dependencies
 /node_modules
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 776f649682d8bd8f770ad5e6b31d3635d7e3e00e..01ed3c11e5f745422c442e0717f2572f9bcdc1cd 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,14 +1,22 @@
-import { Component } from '@angular/core';
+import { Component, ChangeDetectorRef, ApplicationRef, AfterViewChecked } from '@angular/core';
 
 import { ParamService } from './services/param/param.service';
 import { HttpService } from './services/http/http.service';
-import { InternationalisationService } from './services/internationalisation/internationalisation.service';
+import { InternationalisationService, Language, LanguageCode } from './services/internationalisation/internationalisation.service';
 
 @Component({
   selector: 'nghyd-app',
   template: `
+
+  <select [(ngModel)]=_currentLanguage (change)=onSelectLang($event)>
+    <option *ngFor="let l of intlService.languages" [value]=l.code>{{l.label}}</option>
+  </select>
+
   <cond-distri></cond-distri>
   <!--
+  <select name="Language" (change)=selectLang($event)>
+    <option *ngFor="let l of intlService.languages" [value]=l.code>{{l.label}}</option>
+  </select>
   <h1>{{title}}</h1>
   <param-input symbol="Q"></param-input>
   <param-input symbol="Q"></param-input>
@@ -18,14 +26,37 @@ import { InternationalisationService } from './services/internationalisation/int
   providers: [ParamService, InternationalisationService, HttpService]
 })
 export class AppComponent {
-  constructor(private intlService: InternationalisationService) { }
+  private _currentLanguage: LanguageCode;
+
+  constructor(private intlService: InternationalisationService, private appRef: ApplicationRef) { }
 
   private initLocale() {
     let docLocale: string = document['locale'] as string;
     this.intlService.setLocale(docLocale);
+    this._currentLanguage = this.intlService.currentLanguage.code;
   }
 
   ngOnInit() {
     this.initLocale();
   }
+
+  private onSelectLang(evt: any) {
+    let v = evt.target.value;
+    let lc = LanguageCode[v];
+    this.intlService.setLocale(lc);
+
+    this._currentLanguage = this.intlService.currentLanguage.code;
+
+    let tag = this.intlService.currentLanguage.tag;
+    document['locale'] = tag;
+
+    // location.reload(true);
+    // this.cdRef.markForCheck();
+    // this.cdRef.detectChanges();
+    this.appRef.tick();
+  }
+
+  ngAfterViewChecked() {
+    this.intlService.acknowledgeLocaleChanged();
+  }
 }
diff --git a/src/app/calculators/cond_distri/conddistri.component.js b/src/app/calculators/cond_distri/conddistri.component.js
deleted file mode 100644
index 4db6ed09a682163dc5f5323e6b6a58eb357914ef..0000000000000000000000000000000000000000
--- a/src/app/calculators/cond_distri/conddistri.component.js
+++ /dev/null
@@ -1,95 +0,0 @@
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var param_service_1 = require("../../services/param/param.service");
-var http_service_1 = require("../../services/http/http.service");
-var internationalisation_service_1 = require("../../services/internationalisation/internationalisation.service");
-var field_set_component_1 = require("../../components/field-set/field-set.component");
-var CondDistriComponent = (function () {
-    function CondDistriComponent(paramService, httpService, intlService) {
-        this.paramService = paramService;
-        this.httpService = httpService;
-        this.intlService = intlService;
-        this._title = "Conduite distributrice";
-        this._localisation = {};
-        this._config = {};
-        this._fieldSets = [];
-    }
-    CondDistriComponent.prototype.loadLocalisation = function () {
-        var ths = this;
-        var processData = function (s) {
-            // fermeture nécessaire pour capturer la valeur de this (undefined sinon)
-            ths._localisation = JSON.parse(s);
-            ths.paramService.updateLocalisation(ths._localisation);
-        };
-        var f = "app/calculators/cond_distri/cond_distri." + this.intlService.languageCode + ".json";
-        this.httpService.httpGetRequest(undefined, undefined, undefined, f, processData);
-    };
-    CondDistriComponent.prototype.logObject = function (obj) {
-        console.log(JSON.stringify(obj));
-    };
-    CondDistriComponent.prototype.parseConfig = function () {
-        this._fieldSets = [];
-        for (var conf_index in this._config) {
-            //this.logObject(this._fieldSets);
-            var conf = this._config[conf_index];
-            //console.log(conf);
-            var conf_id = conf["id"];
-            if (conf_id.startsWith("fs_")) {
-                var fieldSet = new field_set_component_1.FieldSet();
-                fieldSet.title = this._localisation[conf_id];
-                var fields = conf["fields"];
-                for (var field_index in fields) {
-                    var field = fields[field_index];
-                    // console.log(field);
-                    if (field["type"] === "input") {
-                        var input_id = field["id"];
-                        // console.log(input_id);
-                        var param = this.paramService.getParameter(input_id);
-                        if (param != undefined) {
-                            //this.logObject(param);
-                            fieldSet.params.push(param);
-                        }
-                    }
-                }
-                if (fieldSet.params.length > 0) {
-                    // this.logObject(fieldSet);
-                    this._fieldSets.push(fieldSet);
-                }
-            }
-        }
-    };
-    CondDistriComponent.prototype.loadConfig = function () {
-        var ths = this;
-        var processData = function (s) {
-            // fermeture nécessaire pour capturer la valeur de this (undefined sinon)
-            ths._config = JSON.parse(s);
-            ths.parseConfig();
-        };
-        var f = "app/calculators/cond_distri/cond_distri.config.json";
-        this.httpService.httpGetRequest(undefined, undefined, undefined, f, processData);
-    };
-    CondDistriComponent.prototype.ngOnInit = function () {
-        this.loadLocalisation();
-        this.loadConfig();
-    };
-    return CondDistriComponent;
-}());
-CondDistriComponent = __decorate([
-    core_1.Component({
-        selector: 'cond-distri',
-        template: "\n  <h1>{{_title}}</h1>\n  <field-set *ngFor=\"let fs of _fieldSets\" [fieldSet]=fs></field-set>\n  <!--\n  <field-set *ngFor=\"let fs of _fieldSets\" title=\"fs.title\" fields=\"fs.paramList\"></field-set>\n  <field-set title=\"titre de field set\" fields=\"Q,D\"></field-set>\n  <param-input symbol=\"Q\"></param-input>\n  <param-input symbol=\"Q\"></param-input>\n  <param-input symbol=\"Ks\"></param-input>\n  <field-set title=\"aaaa\"></field-set>\n  -->\n  "
-    }),
-    __metadata("design:paramtypes", [param_service_1.ParamService, http_service_1.HttpService, internationalisation_service_1.InternationalisationService])
-], CondDistriComponent);
-exports.CondDistriComponent = CondDistriComponent;
-//# sourceMappingURL=conddistri.component.js.map
\ No newline at end of file
diff --git a/src/app/calculators/cond_distri/conddistri.component.js.map b/src/app/calculators/cond_distri/conddistri.component.js.map
deleted file mode 100644
index 6c31c4ec8f7663f4d9653b2943c3b82b07deefbe..0000000000000000000000000000000000000000
--- a/src/app/calculators/cond_distri/conddistri.component.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"conddistri.component.js","sourceRoot":"","sources":["conddistri.component.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/app/calculators/cond_distri/conddistri.component.ts b/src/app/calculators/cond_distri/conddistri.component.ts
index c5cf553ed1d91e7d7a627f48f5e2179772f04812..ef114c4fbbc028d03d92572aa5a4120dad285b84 100644
--- a/src/app/calculators/cond_distri/conddistri.component.ts
+++ b/src/app/calculators/cond_distri/conddistri.component.ts
@@ -1,4 +1,7 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, DoCheck } from '@angular/core';
+import { Response } from '@angular/http';
+import { Observable } from "rxjs/Observable";
+import 'rxjs/add/operator/toPromise';
 
 import { ParamService } from '../../services/param/param.service';
 import { HttpService } from '../../services/http/http.service';
@@ -8,21 +11,19 @@ import { FieldSet } from '../../components/field-set/field-set.component';
 @Component({
     selector: 'cond-distri',
     template: `
-  <h1>{{_title}}</h1>
+  <h1 i18n="@@titre_cond_distri">Conduite distributrice</h1>
   <field-set *ngFor="let fs of _fieldSets" [fieldSet]=fs></field-set>
   <!--
+  <h1>{{_title}}</h1>
   <field-set *ngFor="let fs of _fieldSets" title="fs.title" fields="fs.paramList"></field-set>
   <field-set title="titre de field set" fields="Q,D"></field-set>
   <param-input symbol="Q"></param-input>
   <param-input symbol="Q"></param-input>
   <param-input symbol="Ks"></param-input>
-  <field-set title="aaaa"></field-set>
   -->
   `
 })
-export class CondDistriComponent implements OnInit {
-    private _title = "Conduite distributrice";
-
+export class CondDistriComponent implements OnInit, DoCheck {
     private _localisation = {};
     private _config = {};
     private _fieldSets: FieldSet[] = [];
@@ -30,7 +31,18 @@ export class CondDistriComponent implements OnInit {
     constructor(private paramService: ParamService, private httpService: HttpService, private intlService: InternationalisationService) {
     }
 
-    private loadLocalisation() {
+    // private loadLocalisation() {
+    //     let ths = this;
+    //     let processData = function (s: string) {
+    //         // fermeture nécessaire pour capturer la valeur de this (undefined sinon)
+    //         ths._localisation = JSON.parse(s);
+    //         ths.paramService.updateLocalisation(ths._localisation);
+    //     }
+
+    //     let f: string = "app/calculators/cond_distri/cond_distri." + this.intlService.languageCode + ".json"
+    //     this.httpService.httpGetRequest(undefined, undefined, undefined, f, processData);
+    // }
+    private loadLocalisation(): Promise<string> {
         let ths = this;
         let processData = function (s: string) {
             // fermeture nécessaire pour capturer la valeur de this (undefined sinon)
@@ -38,9 +50,15 @@ export class CondDistriComponent implements OnInit {
             ths.paramService.updateLocalisation(ths._localisation);
         }
 
+        let f: string = "app/calculators/cond_distri/cond_distri." + this.intlService.currentLanguage.tag + ".json"
+        let resp: Observable<Response> = this.httpService.httpGetRequestResponse(undefined, undefined, undefined, f);
 
-        let f: string = "app/calculators/cond_distri/cond_distri." + this.intlService.languageCode + ".json"
-        this.httpService.httpGetRequest(undefined, undefined, undefined, f, processData);
+        let prom = resp.map(res => res.text()).toPromise();
+        prom.then((res) => {
+            processData(res);
+        })
+
+        return prom;
     }
 
     private logObject(obj: {}) {
@@ -51,31 +69,25 @@ export class CondDistriComponent implements OnInit {
         this._fieldSets = [];
 
         for (let conf_index in this._config) {
-            //this.logObject(this._fieldSets);
 
             let conf = this._config[conf_index];
-            //console.log(conf);
             let conf_id: string = conf["id"];
             if (conf_id.startsWith("fs_")) {
-                let fieldSet: FieldSet = new FieldSet();
-                fieldSet.title = this._localisation[conf_id];
+                let fieldSet: FieldSet = new FieldSet(conf_id);
 
                 let fields = conf["fields"];
                 for (let field_index in fields) {
                     let field = fields[field_index];
-                    // console.log(field);
                     if (field["type"] === "input") {
                         let input_id = field["id"];
-                        // console.log(input_id);
                         let param = this.paramService.getParameter(input_id);
                         if (param != undefined) {
-                            //this.logObject(param);
+                            param.unit = field["unit"];
                             fieldSet.params.push(param);
                         }
                     }
                 }
                 if (fieldSet.params.length > 0) {
-                    // this.logObject(fieldSet);
                     this._fieldSets.push(fieldSet);
                 }
             }
@@ -97,5 +109,35 @@ export class CondDistriComponent implements OnInit {
     ngOnInit() {
         this.loadLocalisation();
         this.loadConfig();
+        this.updateLanguage();
+    }
+
+    private getFieldSet(id: string) {
+        for (let fs of this._fieldSets) {
+            if (fs._id == id)
+                return fs;
+        }
+        return undefined;
+    }
+
+    private updateLanguage() {
+        for (let conf_index in this._config) {
+            let conf = this._config[conf_index];
+            let conf_id: string = conf["id"];
+
+            if (conf_id.startsWith("fs_")) {
+                let fieldSet: FieldSet = this.getFieldSet(conf_id);
+                fieldSet.title = this._localisation[conf_id];
+            }
+        }
+    }
+
+    ngDoCheck() {
+        if (this.intlService.localeChanged) {
+            const promise = this.loadLocalisation()
+                .then(() => {
+                    this.updateLanguage();
+                });
+        }
     }
 }
diff --git a/src/app/components/field-set/field-set.component.js b/src/app/components/field-set/field-set.component.js
deleted file mode 100644
index 7de090967104a32b6cb1a738919b4cdfd3e77f31..0000000000000000000000000000000000000000
--- a/src/app/components/field-set/field-set.component.js
+++ /dev/null
@@ -1,55 +0,0 @@
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var ngparam_1 = require("../../services/ngparam");
-var FieldSet = (function () {
-    function FieldSet() {
-        this.params = [];
-    }
-    FieldSet.prototype.addParameter = function (prm) {
-        this.params.push(new ngparam_1.NgParameter(prm));
-    };
-    return FieldSet;
-}());
-exports.FieldSet = FieldSet;
-var FieldSetComponent = (function () {
-    function FieldSetComponent() {
-    }
-    Object.defineProperty(FieldSetComponent.prototype, "fieldSet", {
-        set: function (fs) {
-            this._fieldSet = fs;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FieldSetComponent;
-}());
-__decorate([
-    core_1.Input(),
-    __metadata("design:type", FieldSet),
-    __metadata("design:paramtypes", [FieldSet])
-], FieldSetComponent.prototype, "fieldSet", null);
-FieldSetComponent = __decorate([
-    core_1.Component({
-        selector: "field-set",
-        templateUrl: "./field-set.html",
-        styles: [".field_set_title {\
-        font-weight: bold;\
-        margin: 0.3em 0 0.2em;\
-        padding: 0.3em;\
-        background-color: #eeeeee;\
-        }"]
-    }),
-    __metadata("design:paramtypes", [])
-], FieldSetComponent);
-exports.FieldSetComponent = FieldSetComponent;
-//# sourceMappingURL=field-set.component.js.map
\ No newline at end of file
diff --git a/src/app/components/field-set/field-set.component.js.map b/src/app/components/field-set/field-set.component.js.map
deleted file mode 100644
index 4dc6e9d41780ab0bac26a67b279eef95ea9b6393..0000000000000000000000000000000000000000
--- a/src/app/components/field-set/field-set.component.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"field-set.component.js","sourceRoot":"","sources":["field-set.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAiD;AAIjD,kDAAqD;AAErD;IAII;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,+BAAY,GAAnB,UAAoB,GAAoB;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,qBAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACL,eAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4BAAQ;AAuBrB,IAAa,iBAAiB;IAW1B;IACA,CAAC;IALD,sBAAY,uCAAQ;aAApB,UAAqB,EAAY;YAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;;;OAAA;IAIL,wBAAC;AAAD,CAAC,AAbD,IAaC;AANG;IADC,YAAK,EAAE;8BACiB,QAAQ;qCAAR,QAAQ;iDAEhC;AATQ,iBAAiB;IAV7B,gBAAS,CAAC;QACP,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,CAAC;;;;;UAKH,CAAC;KACV,CAAC;;GACW,iBAAiB,CAa7B;AAbY,8CAAiB"}
\ No newline at end of file
diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts
index a51264ac76a9ab996adf40670f9ecaf4b31ddd97..72187ede6eab80289167779427d811050f0ed64c 100644
--- a/src/app/components/field-set/field-set.component.ts
+++ b/src/app/components/field-set/field-set.component.ts
@@ -5,11 +5,17 @@ import { ParamDefinition } from 'jalhyd';
 import { NgParameter } from '../../services/ngparam';
 
 export class FieldSet {
+    _id: string;
     title: string;
     params: NgParameter[];
 
-    constructor() {
+    constructor(id: string) {
         this.params = [];
+        this._id = id;
+    }
+
+    get id() {
+        return this._id;
     }
 
     public addParameter(prm: ParamDefinition) {
diff --git a/src/app/components/param-field-line/param-field-line.component.js b/src/app/components/param-field-line/param-field-line.component.js
deleted file mode 100644
index 519eaf1e8b45efd94d6bda37db648b3300b25041..0000000000000000000000000000000000000000
--- a/src/app/components/param-field-line/param-field-line.component.js
+++ /dev/null
@@ -1,50 +0,0 @@
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var param_service_1 = require("../../services/param/param.service");
-var ParamFieldLineComponent = (function () {
-    function ParamFieldLineComponent(paramService) {
-        this.paramService = paramService;
-    }
-    Object.defineProperty(ParamFieldLineComponent.prototype, "symbol", {
-        /**
-         * Parameter symbol string
-         */
-        get: function () {
-            return this._param.symbol;
-        },
-        /**
-         * Parameter symbol (Q, Ks, B, ...) input attribute
-         */
-        set: function (s) {
-            this._param = this.paramService.getParameter(s);
-            this._label = this._param.label;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return ParamFieldLineComponent;
-}());
-__decorate([
-    core_1.Input(),
-    __metadata("design:type", String),
-    __metadata("design:paramtypes", [String])
-], ParamFieldLineComponent.prototype, "symbol", null);
-ParamFieldLineComponent = __decorate([
-    core_1.Component({
-        selector: "param-field-line",
-        templateUrl: "./param-field-line.html"
-    }),
-    __metadata("design:paramtypes", [param_service_1.ParamService])
-], ParamFieldLineComponent);
-exports.ParamFieldLineComponent = ParamFieldLineComponent;
-//# sourceMappingURL=param-field-line.component.js.map
\ No newline at end of file
diff --git a/src/app/components/param-field-line/param-field-line.component.js.map b/src/app/components/param-field-line/param-field-line.component.js.map
deleted file mode 100644
index 6f5f61c09bff8ffb2787dcffcf5fe2f0e0cf8b77..0000000000000000000000000000000000000000
--- a/src/app/components/param-field-line/param-field-line.component.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"param-field-line.component.js","sourceRoot":"","sources":["param-field-line.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAyD;AAEzD,oEAAkE;AAOlE,IAAa,uBAAuB;IAwBhC,iCAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAC9C,CAAC;IAbD,sBAAY,2CAAM;QAKlB;;WAEG;aACH;YACI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;QAdD;;WAEG;aAEH,UAAmB,CAAS;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,CAAC;;;OAAA;IAWL,8BAAC;AAAD,CAAC,AA1BD,IA0BC;AAdG;IADC,YAAK,EAAE;;;qDAIP;AAfQ,uBAAuB;IAJnC,gBAAS,CAAC;QACP,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,yBAAyB;KACzC,CAAC;qCAyBoC,4BAAY;GAxBrC,uBAAuB,CA0BnC;AA1BY,0DAAuB"}
\ No newline at end of file
diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts
index 2f3c362b4ca1ecec17f86a1838e97e0460a1b5a6..8584b6db94fd8a426bf9a4dd58833ccfd946b304 100644
--- a/src/app/components/param-field-line/param-field-line.component.ts
+++ b/src/app/components/param-field-line/param-field-line.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input, OnInit } from '@angular/core';
+import { Component, Input, DoCheck } from '@angular/core';
 
 import { ParamService } from '../../services/param/param.service';
 import { NgParameter } from '../../services/ngparam';
@@ -7,21 +7,35 @@ import { NgParameter } from '../../services/ngparam';
     selector: "param-field-line",
     templateUrl: "./param-field-line.html"
 })
-export class ParamFieldLineComponent {
+export class ParamFieldLineComponent implements DoCheck {
     private _param: NgParameter;
 
+    constructor(private paramService: ParamService) {
+    }
+
     /**
      * associated (localised) label
      */
     private _label: string;
 
+    /**
+     * associated unit
+     */
+    get _unit(): string {
+        return this._param.unit;
+    }
+
+    private updateLanguage() {
+        this._label = this._param.label;
+    }
+
     /**
      * Parameter symbol (Q, Ks, B, ...) input attribute
      */
     @Input()
     private set symbol(s: string) {
         this._param = this.paramService.getParameter(s);
-        this._label = this._param.label;
+        this.updateLanguage();
     }
 
     /**
@@ -31,6 +45,7 @@ export class ParamFieldLineComponent {
         return this._param.symbol;
     }
 
-    constructor(private paramService: ParamService) {
+    public ngDoCheck() {
+        this.updateLanguage();
     }
 }
diff --git a/src/app/components/param-field-line/param-field-line.html b/src/app/components/param-field-line/param-field-line.html
index 2a91b84da0a8ef0c5799e54f3c1202ec58ee2616..b898acad30185f2c2a72ce1eee2320be109807ca 100644
--- a/src/app/components/param-field-line/param-field-line.html
+++ b/src/app/components/param-field-line/param-field-line.html
@@ -1,5 +1,5 @@
 <tr id="tr_FT_rLargeurFond">
-    <td align="right">{{_label}}</td>
+    <td align="right">{{_label}} ({{_unit}})</td>
 
     <td>
         <!--
diff --git a/src/app/components/param-input/param-input.component.js b/src/app/components/param-input/param-input.component.js
deleted file mode 100644
index da6c4e74c84fc1902f88915bb2363b1e916a2a4e..0000000000000000000000000000000000000000
--- a/src/app/components/param-input/param-input.component.js
+++ /dev/null
@@ -1,198 +0,0 @@
-// cf. https://blog.thoughtram.io/angular/2016/07/27/custom-form-controls-in-angular-2.html
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var forms_1 = require("@angular/forms");
-var jalhyd_1 = require("jalhyd");
-var param_service_1 = require("../../services/param/param.service");
-var internationalisation_service_1 = require("../../services/internationalisation/internationalisation.service");
-var ParamInputComponent = ParamInputComponent_1 = (function () {
-    function ParamInputComponent(paramService, changeDetector, intlService) {
-        this.paramService = paramService;
-        this.changeDetector = changeDetector;
-        this.intlService = intlService;
-        /**
-         * flag d'affichage du titre
-         */
-        this.displayTitle = false;
-        // ControlValueAccessor interface
-        this.propagateChange = function (_) { };
-        this._id = ParamInputComponent_1._idGen++;
-        if (ParamInputComponent_1._startTime == undefined)
-            ParamInputComponent_1._startTime = new Date().getTime();
-        this._uiValue = new jalhyd_1.NumericalString();
-    }
-    ParamInputComponent.prototype.hasError = function () {
-        var res = (this._message != undefined);
-        if (res)
-            this.log("hasError : true " + this._message);
-        else
-            this.log("hasError : false");
-        return res;
-    };
-    ParamInputComponent.prototype.getSfromUI = function () {
-        return this._fromUI ? " fromUI " : " fromMODEL";
-    };
-    ParamInputComponent.prototype.getSParam = function () {
-        return " " + this._paramDef.symbol + "=" + this._paramDef.toString();
-    };
-    ParamInputComponent.prototype.getSUIvalue = function (v) {
-        if (v === void 0) { v = undefined; }
-        if (v == undefined)
-            return "  uiValue=" + this._uiValue.toString() + "";
-        return "  uiValue=" + v.toString() + "";
-    };
-    ParamInputComponent.prototype.ngOnInit = function () {
-        // retrieve parameter from symbol
-        this._paramDef = this.paramService.getParameter(this._paramSymbol);
-    };
-    // private getValue() {
-    //     if (this._paramDef.isDefined)
-    //         return this._paramDef.v;
-    //     return "";
-    //     // return this._uiValue.value;
-    // }
-    /**
-     * fonction appelée lorsque l'utilisateur fait une saisie
-     * @param event valeur du contrôle
-     */
-    ParamInputComponent.prototype.setValue = function (event) {
-        this._fromUI = true;
-        this._uiValue.value = event;
-        this.log(this._uiValue.toString());
-        return this.validateUIValue();
-    };
-    /**
-     * fonction appelée lors d'un rafraîchissement de l'UI
-     */
-    ParamInputComponent.prototype.ngDoCheck = function () {
-        this.log("ngDoCheck start : " + this.getSParam() + this.getSUIvalue() + this.getSfromUI());
-        if (this._fromUI)
-            this.updateMessage(this._uiValue);
-        else {
-            if (this._paramDef.isDefined) {
-                this.updateMessage(new jalhyd_1.NumericalString(this._paramDef.v));
-                this._uiValue.value = String(this._paramDef.v);
-            }
-            else
-                this.updateMessage(this._uiValue);
-        }
-        this.log("ngDoCheck end : " + this.getSParam() + this.getSUIvalue());
-        this._fromUI = false;
-    };
-    ParamInputComponent.prototype.updateMessage = function (v) {
-        this.log("updateMessage start :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
-        if (v.isNumerical) {
-            this._message = undefined;
-            try {
-                this._paramDef.checkValue(v.numericalValue);
-            }
-            catch (e) {
-                if (e instanceof jalhyd_1.ErrorMessage)
-                    this._message = this.intlService.localizeErrorMessage(e);
-                else
-                    this._message = "invalid value";
-            }
-        }
-        else {
-            switch (this.intlService.lang) {
-                case internationalisation_service_1.Language.FRENCH:
-                    this._message = "Veuillez entrer une valeur numérique";
-                    break;
-                default:
-                    this._message = "Please enter a numerical value";
-            }
-        }
-        this.log("updateMessage end :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
-    };
-    ParamInputComponent.prototype.validateUIValue = function () {
-        this.log("");
-        this.log("validateValue start : val '" + this._uiValue.toString() + "'" + this.getSParam() + this.getSfromUI());
-        var ok = this._uiValue.isNumerical;
-        if (ok) {
-            try {
-                if (!this._paramDef.isDefined || this._paramDef.v != this._uiValue.numericalValue) {
-                    this._paramDef.v = this._uiValue.numericalValue;
-                    this.changeDetector.detectChanges(); // provoque une détection des changements dans les contrôles
-                }
-            }
-            catch (e) {
-                ok = false;
-            }
-        }
-        if (!ok) {
-            this.log("validateValue end : " + this.getSParam());
-            var err = {
-                rangeError: {
-                    // given: val,
-                    given: this._uiValue.toString(),
-                    max: 4,
-                    min: 0
-                }
-            };
-            return err;
-        }
-        this.log("validateValue end : " + this.getSParam());
-        return null;
-    };
-    ParamInputComponent.prototype.log = function (m) {
-        // let t: number = new Date().getTime() - ParamInputComponent._startTime;
-        //   console.log("ParamInputComponent(" + this._id + ") " + t + " : " + m);
-    };
-    /*
-    //From ControlValueAccessor interface
-    writeValue(value: any) {
-        if (value !== this.innerValue) {
-            this.innerValue = value;
-        }
-    }
-    */
-    ParamInputComponent.prototype.writeValue = function (value) {
-        this.log("writeValue " + value);
-    };
-    ParamInputComponent.prototype.registerOnChange = function (fn) {
-        this.propagateChange = fn;
-    };
-    ParamInputComponent.prototype.registerOnTouched = function () { };
-    return ParamInputComponent;
-}());
-ParamInputComponent._idGen = 0; // A VIRER
-__decorate([
-    core_1.Input('symbol'),
-    __metadata("design:type", String)
-], ParamInputComponent.prototype, "_paramSymbol", void 0);
-ParamInputComponent = ParamInputComponent_1 = __decorate([
-    core_1.Component({
-        selector: 'param-input[symbol]',
-        /* OK
-        <input placeholder="{{_paramDef.symbol}}" [ngModel]="_paramDef.v" (ngModelChange)="setValue($event)"/>
-        <p *ngIf="_message">{{_message}}</p>
-        */
-        templateUrl: "./param-input.component.html",
-        providers: [
-            {
-                provide: forms_1.NG_VALUE_ACCESSOR,
-                useExisting: core_1.forwardRef(function () { return ParamInputComponent_1; }),
-                multi: true
-            },
-            {
-                provide: forms_1.NG_VALIDATORS,
-                useExisting: core_1.forwardRef(function () { return ParamInputComponent_1; }),
-                multi: true
-            }
-        ]
-    }),
-    __metadata("design:paramtypes", [param_service_1.ParamService, core_1.ChangeDetectorRef, internationalisation_service_1.InternationalisationService])
-], ParamInputComponent);
-exports.ParamInputComponent = ParamInputComponent;
-var ParamInputComponent_1;
-//# sourceMappingURL=param-input.component.js.map
\ No newline at end of file
diff --git a/src/app/components/param-input/param-input.component.js.map b/src/app/components/param-input/param-input.component.js.map
deleted file mode 100644
index 085cf3bd9db25966062aab650223ffacc161e929..0000000000000000000000000000000000000000
--- a/src/app/components/param-input/param-input.component.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"param-input.component.js","sourceRoot":"","sources":["param-input.component.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/app/components/param-input/param-input.component.ts b/src/app/components/param-input/param-input.component.ts
index e87dd7e08e1e0e170c840e960e7b7ca2e720fac5..d6359b1df977aa202451577ba7de94711a3a2bf2 100644
--- a/src/app/components/param-input/param-input.component.ts
+++ b/src/app/components/param-input/param-input.component.ts
@@ -6,7 +6,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormControl } f
 import { ParamDefinition, NumericalString, ErrorMessage } from 'jalhyd';
 
 import { ParamService } from '../../services/param/param.service';
-import { InternationalisationService, Language } from '../../services/internationalisation/internationalisation.service';
+import { InternationalisationService, LanguageCode } from '../../services/internationalisation/internationalisation.service';
 import { NgParameter } from '../../services/ngparam';
 
 @Component({
@@ -74,10 +74,10 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
 
     hasError(): boolean {
         let res = (this._message != undefined);
-        if (res)
-            this.log("hasError : true " + this._message);
-        else
-            this.log("hasError : false");
+        // if (res)
+        //     this.log("hasError : true " + this._message);
+        // else
+        //     this.log("hasError : false");
         return res;
     }
 
@@ -116,7 +116,7 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
     private setValue(event: any) {
         this._fromUI = true;
         this._uiValue.value = event;
-        this.log(this._uiValue.toString());
+        // this.log(this._uiValue.toString());
         return this.validateUIValue();
     }
 
@@ -124,7 +124,7 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
      * fonction appelée lors d'un rafraîchissement de l'UI
      */
     ngDoCheck(): void {
-        this.log("ngDoCheck start : " + this.getSParam() + this.getSUIvalue() + this.getSfromUI());
+        // this.log("ngDoCheck start : " + this.getSParam() + this.getSUIvalue() + this.getSfromUI());
 
         if (this._fromUI)
             this.updateMessage(this._uiValue);
@@ -137,13 +137,13 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
                 this.updateMessage(this._uiValue);
         }
 
-        this.log("ngDoCheck end : " + this.getSParam() + this.getSUIvalue());
+        // this.log("ngDoCheck end : " + this.getSParam() + this.getSUIvalue());
 
         this._fromUI = false;
     }
 
     private updateMessage(v: NumericalString) {
-        this.log("updateMessage start :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
+        // this.log("updateMessage start :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
 
         if (v.isNumerical) {
             this._message = undefined;
@@ -159,8 +159,8 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
             }
         }
         else {
-            switch (this.intlService.lang) {
-                case Language.FRENCH:
+            switch (this.intlService.currentLanguage.code) {
+                case LanguageCode.FRENCH:
                     this._message = "Veuillez entrer une valeur numérique";
                     break;
 
@@ -169,12 +169,12 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
             }
         }
 
-        this.log("updateMessage end :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
+        // this.log("updateMessage end :" + this.getSParam() + this.getSfromUI() + this.getSUIvalue(v) + "  message=" + this._message);
     }
 
     private validateUIValue() {
-        this.log("");
-        this.log("validateValue start : val '" + this._uiValue.toString() + "'" + this.getSParam() + this.getSfromUI());
+        // this.log("");
+        // this.log("validateValue start : val '" + this._uiValue.toString() + "'" + this.getSParam() + this.getSfromUI());
 
         let ok: boolean = this._uiValue.isNumerical;
         if (ok) {
@@ -190,7 +190,7 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
         }
 
         if (!ok) {
-            this.log("validateValue end : " + this.getSParam());
+            // this.log("validateValue end : " + this.getSParam());
 
             let err = {
                 rangeError: {
@@ -203,13 +203,13 @@ export class ParamInputComponent implements ControlValueAccessor, OnInit, DoChec
             return err;
         }
 
-        this.log("validateValue end : " + this.getSParam());
+        // this.log("validateValue end : " + this.getSParam());
         return null;
     }
 
     private log(m: string) {
-        // let t: number = new Date().getTime() - ParamInputComponent._startTime;
-        //   console.log("ParamInputComponent(" + this._id + ") " + t + " : " + m);
+        let t: number = new Date().getTime() - ParamInputComponent._startTime;
+        console.log("ParamInputComponent(" + this._id + ") " + t + " : " + m);
     }
 
     // ControlValueAccessor interface
diff --git a/src/app/i18n-providers.ts b/src/app/i18n-providers.ts
index 76ee311c5c8e870ada38fad12a9bb8517caf13b5..6a4dfa8fb40c3017dfd7e2d92cfb1b87452f8ced 100644
--- a/src/app/i18n-providers.ts
+++ b/src/app/i18n-providers.ts
@@ -4,13 +4,14 @@ import { CompilerConfig } from '@angular/compiler';
 export function getTranslationProviders(): Promise<Object[]> {
 
     // Get the locale id from the global
+    // const locale = localStorage.getItem('localeId');
     const locale = document['locale'] as string;
 
     // return no providers if fail to get translation file for locale
     const noProviders: Object[] = [];
 
     // No locale or French: no translation providers
-    if (!locale || locale === 'fr-FR') {
+    if (!locale || locale === 'fr-FR' || locale === 'fr') {
         return Promise.resolve(noProviders);
     }
 
diff --git a/src/app/services/http/http.service.js b/src/app/services/http/http.service.js
deleted file mode 100644
index a16539cfafea09516ef69e191da6e8a176aa1745..0000000000000000000000000000000000000000
--- a/src/app/services/http/http.service.js
+++ /dev/null
@@ -1,49 +0,0 @@
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var http_1 = require("@angular/http");
-var HttpService = (function () {
-    function HttpService(http) {
-        this.http = http;
-    }
-    HttpService.prototype.concat = function (s1, s2) {
-        if (s1 == undefined)
-            return s2;
-        if (s2 == undefined)
-            return s1;
-        return s1 + s2;
-    };
-    HttpService.prototype.httpGetRequest = function (protocol, host, port, path, processDataCallback) {
-        var url;
-        if (protocol != undefined)
-            url = protocol + "://" + host;
-        else if (host != undefined)
-            url = host;
-        if (port != undefined)
-            url = this.concat(url, ":" + String(port));
-        var p = path === "/" ? "" : path;
-        url = this.concat(url, "/" + p);
-        //console.log(url);
-        var enc = encodeURI(url);
-        var opts = new http_1.RequestOptions();
-        this.http.get(enc, opts)
-            .map(function (res) { return res.text(); })
-            .subscribe(function (data) { return processDataCallback(data); });
-    };
-    return HttpService;
-}());
-HttpService = __decorate([
-    core_1.Injectable(),
-    __metadata("design:paramtypes", [http_1.Http])
-], HttpService);
-exports.HttpService = HttpService;
-//# sourceMappingURL=http.service.js.map
\ No newline at end of file
diff --git a/src/app/services/http/http.service.js.map b/src/app/services/http/http.service.js.map
deleted file mode 100644
index cc04e15fd964ed0ee5e4910a5378b8f59cf25f2b..0000000000000000000000000000000000000000
--- a/src/app/services/http/http.service.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"http.service.js","sourceRoot":"","sources":["http.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA2C;AAC3C,sCAAkF;AAGlF,IAAa,WAAW;IACpB,qBAAoB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAI,CAAC;IAE3B,4BAAM,GAAd,UAAe,EAAU,EAAE,EAAU;QACjC,EAAE,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC;YAChB,MAAM,CAAC,EAAE,CAAC;QAEd,EAAE,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC;YAChB,MAAM,CAAC,EAAE,CAAC;QAEd,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,CAAC;IAEM,oCAAc,GAArB,UAAsB,QAAgB,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,mBAAwC;QACtH,IAAI,GAAW,CAAC;QAChB,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;YACtB,GAAG,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC;QAEf,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;YAClB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAEhC,mBAAmB;QACnB,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,IAAI,GAAG,IAAI,qBAAc,EAAE,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;aACnB,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,EAAE,EAAV,CAAU,CAAC;aACtB,SAAS,CACV,UAAA,IAAI,IAAI,OAAA,mBAAmB,CAAC,IAAI,CAAC,EAAzB,CAAyB,CAGpC,CAAC;IACN,CAAC;IACL,kBAAC;AAAD,CAAC,AAvCD,IAuCC;AAvCY,WAAW;IADvB,iBAAU,EAAE;qCAEiB,WAAI;GADrB,WAAW,CAuCvB;AAvCY,kCAAW"}
\ No newline at end of file
diff --git a/src/app/services/http/http.service.ts b/src/app/services/http/http.service.ts
index f90a5b6ff149e774c3ed1784bbea15997ff409de..ecc167c565738ea0dbc5e9b2806682babcd7ec30 100644
--- a/src/app/services/http/http.service.ts
+++ b/src/app/services/http/http.service.ts
@@ -1,5 +1,7 @@
 import { Injectable } from '@angular/core';
-import { Http, RequestOptions, RequestOptionsArgs, Headers } from '@angular/http';
+import { Http, RequestOptions, RequestOptionsArgs, Headers, Response } from '@angular/http';
+import { Observable } from "rxjs/Observable";
+
 
 @Injectable()
 export class HttpService {
@@ -16,6 +18,17 @@ export class HttpService {
     }
 
     public httpGetRequest(protocol: string, host: string, port: number, path: string, processDataCallback: (s: string) => void) {
+        let resp: Observable<Response> = this.httpGetRequestResponse(protocol, host, port, path);
+
+        resp.map(res => res.text())
+            .subscribe(
+            data => processDataCallback(data),
+            //            err => this.logError(err),
+            //            () => console.log('Random Quote Complete')
+        );
+    }
+
+    public httpGetRequestResponse(protocol: string, host: string, port: number, path: string): Observable<Response> {
         let url: string;
         if (protocol != undefined)
             url = protocol + "://" + host;
@@ -28,17 +41,11 @@ export class HttpService {
         let p = path === "/" ? "" : path;
         url = this.concat(url, "/" + p);
 
-        //console.log(url);
         let enc = encodeURI(url);
 
         let opts = new RequestOptions();
 
-        this.http.get(enc, opts)
-            .map(res => res.text())
-            .subscribe(
-            data => processDataCallback(data),
-            //            err => this.logError(err),
-            //            () => console.log('Random Quote Complete')
-        );
+        let res: Observable<Response> = this.http.get(enc, opts);
+        return res;
     }
 }
diff --git a/src/app/services/internationalisation/internationalisation.service.js b/src/app/services/internationalisation/internationalisation.service.js
deleted file mode 100644
index 53774e8aea551b8fb9fb095ea88117cea44905b7..0000000000000000000000000000000000000000
--- a/src/app/services/internationalisation/internationalisation.service.js
+++ /dev/null
@@ -1,119 +0,0 @@
-"use strict";
-var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-};
-var __metadata = (this && this.__metadata) || function (k, v) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var core_1 = require("@angular/core");
-var jalhyd_1 = require("jalhyd");
-var http_service_1 = require("../http/http.service");
-/*
-  language tag : fr-FR
-  primary subcode : fr
-  optional subcode : FR
- */
-var Language;
-(function (Language) {
-    Language[Language["FRENCH"] = 0] = "FRENCH";
-    Language[Language["ENGLISH"] = 1] = "ENGLISH";
-})(Language = exports.Language || (exports.Language = {}));
-var InternationalisationService = (function () {
-    function InternationalisationService(httpService) {
-        this.httpService = httpService;
-    }
-    Object.defineProperty(InternationalisationService.prototype, "lang", {
-        get: function () {
-            return this._lang;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    // public set lang(l: Language) {
-    //     this._lang = l;
-    //     this._sLang = Language[l];
-    // }
-    InternationalisationService.prototype.setLocale = function (tag) {
-        var l = tag.substr(0, 2).toLowerCase();
-        if (l === "en")
-            this._lang = Language.ENGLISH;
-        else if (l === "fr")
-            this._lang = Language.FRENCH;
-        else {
-            var e = new jalhyd_1.ErrorMessage(jalhyd_1.ErrorCode.ERROR_LANG_UNSUPPORTED);
-            e.extraVar["locale"] = tag;
-            throw e;
-        }
-        // this.loadErrorMessages();
-        this.httpGetErrorMessages();
-    };
-    Object.defineProperty(InternationalisationService.prototype, "languageCode", {
-        get: function () {
-            switch (this._lang) {
-                case Language.ENGLISH:
-                    return "en";
-                case Language.FRENCH:
-                    return "fr";
-                default:
-                    throw new jalhyd_1.ErrorMessage(jalhyd_1.ErrorCode.ERROR_LANG_UNSUPPORTED);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    // private loadErrorMessages() {
-    //     let l;
-    //     switch (this.lang) {
-    //         case Language.FRENCH:
-    //             l = "fr";
-    //             break;
-    //         default:
-    //             l = "en";
-    //     }
-    //     let s: string = fs.readFileSync("src/error_messages." + l + ".json", "utf8");
-    //     this._errorMessages = JSON.parse(s);
-    // }
-    InternationalisationService.prototype.httpGetErrorMessages = function () {
-        var is = this;
-        var processData = function (s) {
-            // fermeture nécessaire pour capturer la valeur de this (undefined sinon)
-            is._errorMessages = JSON.parse(s);
-        };
-        var l;
-        switch (this.lang) {
-            case Language.FRENCH:
-                l = "fr";
-                break;
-            default:
-                l = "en";
-        }
-        var f = "error_messages." + l + ".json";
-        this.httpService.httpGetRequest(undefined, undefined, undefined, "locale/" + f, processData);
-    };
-    InternationalisationService.prototype.getErrorMessageFromCode = function (c) {
-        var sCode = jalhyd_1.ErrorCode[c];
-        return this._errorMessages[jalhyd_1.ErrorCode[c]];
-    };
-    InternationalisationService.prototype.replaceAll = function (str, find, replace) {
-        return str.replace(new RegExp(find, 'g'), replace);
-    };
-    InternationalisationService.prototype.localizeErrorMessage = function (r) {
-        var sCode = jalhyd_1.ErrorCode[r.code];
-        var m = this.getErrorMessageFromCode(r.code);
-        for (var k in r.extraVar) {
-            m = this.replaceAll(m, "%" + k + "%", r.extraVar[k]);
-        }
-        return m;
-    };
-    return InternationalisationService;
-}());
-InternationalisationService = __decorate([
-    core_1.Injectable(),
-    __metadata("design:paramtypes", [http_service_1.HttpService])
-], InternationalisationService);
-exports.InternationalisationService = InternationalisationService;
-//# sourceMappingURL=internationalisation.service.js.map
\ No newline at end of file
diff --git a/src/app/services/internationalisation/internationalisation.service.js.map b/src/app/services/internationalisation/internationalisation.service.js.map
deleted file mode 100644
index e56486869a39d796a88130b4e88fc849b91220c8..0000000000000000000000000000000000000000
--- a/src/app/services/internationalisation/internationalisation.service.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"internationalisation.service.js","sourceRoot":"","sources":["internationalisation.service.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts
index c7a403b236907b309ede739a2f715aeb1bcfff99..7cfef31390f96f29170152fdc8382c0381c4890a 100644
--- a/src/app/services/internationalisation/internationalisation.service.ts
+++ b/src/app/services/internationalisation/internationalisation.service.ts
@@ -9,56 +9,98 @@ import { HttpService } from "../http/http.service";
   primary subcode : fr
   optional subcode : FR
  */
-export enum Language {
+export enum LanguageCode {
     FRENCH,
 
     ENGLISH,
 }
 
+
+export class Language {
+    private _code: LanguageCode;
+    private _tag: string;
+    private _label: string;
+
+    constructor(c: LanguageCode, t: string, l: string) {
+        this._code = c;
+        this._tag = t;
+        this._label = l;
+    }
+
+    get code(): LanguageCode {
+        return this._code;
+    }
+
+    get tag(): string {
+        return this._tag;
+    }
+
+    get label(): string {
+        return this._label;
+    }
+}
+
 @Injectable()
 export class InternationalisationService {
-    private _lang: Language;
+    private _currLang: Language;
     private _sLang: string;
     private _errorMessages: { [key: string]: string };
 
-    public constructor(private httpService: HttpService) { }
+    private _languages: Language[];
+
+    /**
+     * indique que la langue a été changée
+     */
+    private _localeChanged: boolean = false;
 
-    public get lang() {
-        return this._lang;
+    public constructor(private httpService: HttpService) {
+        this._languages = [];
+        this._languages.push(new Language(LanguageCode.FRENCH, "fr", "Français"));
+        this._languages.push(new Language(LanguageCode.ENGLISH, "en", "English"));
     }
 
-    // public set lang(l: Language) {
-    //     this._lang = l;
-    //     this._sLang = Language[l];
-    // }
+    public get languages() {
+        return this._languages;
+    }
 
-    public setLocale(tag: string) {
-        let l: string = tag.substr(0, 2).toLowerCase();
-        if (l === "en")
-            this._lang = Language.ENGLISH;
-        else if (l === "fr")
-            this._lang = Language.FRENCH;
-        else {
-            let e = new ErrorMessage(ErrorCode.ERROR_LANG_UNSUPPORTED);
-            e.extraVar["locale"] = tag;
-            throw e;
-        }
+    public get currentLanguage() {
+        return this._currLang;
+    }
 
-        // this.loadErrorMessages();
-        this.httpGetErrorMessages();
+    private getLanguageFromCode(lc: LanguageCode) {
+        for (let l of this._languages) {
+            if (l.code == lc)
+                return l;
+        }
+        throw new ErrorMessage(ErrorCode.ERROR_LANG_UNSUPPORTED);
     }
 
-    get languageCode() {
-        switch (this._lang) {
-            case Language.ENGLISH:
-                return "en";
+    private getLanguageFromTag(tag: string) {
+        for (let l of this._languages) {
+            if (l.tag === tag)
+                return l;
+        }
+        let e = new ErrorMessage(ErrorCode.ERROR_LANG_UNSUPPORTED);
+        e.extraVar["locale"] = tag;
+        throw e;
+    }
 
-            case Language.FRENCH:
-                return "fr";
+    public setLocale(lng: string | LanguageCode) {
+        if (this._currLang != undefined)
+            var oldLang: LanguageCode = this._currLang.code;
 
-            default:
-                throw new ErrorMessage(ErrorCode.ERROR_LANG_UNSUPPORTED);
+        if (typeof lng === "string") {
+            let t: string = lng.substr(0, 2).toLowerCase();
+            this._currLang = this.getLanguageFromTag(t);
+        }
+        else {
+            this._currLang = this.getLanguageFromCode(lng);
         }
+        this._localeChanged = this._currLang.code != oldLang;
+
+
+        // this.loadErrorMessages();
+        this.httpGetErrorMessages();
     }
 
     // private loadErrorMessages() {
@@ -85,8 +127,8 @@ export class InternationalisationService {
         }
 
         let l;
-        switch (this.lang) {
-            case Language.FRENCH:
+        switch (this._currLang.code) {
+            case LanguageCode.FRENCH:
                 l = "fr";
                 break;
 
@@ -118,263 +160,11 @@ export class InternationalisationService {
         return m;
     }
 
-    /*
-    public localizeErrorMessage(r: ErrorMessage): string {
-        let m: string;
-        let sCode: string = ErrorCode[r.code];
-
-        switch (this.lang) {
-            case Language.ENGLISH:
-                switch (r.code) {
-                    case ErrorCode.ERROR_DICHO_INIT_DOMAIN:
-                        m = "Dichotomy : target " + r.extraVar["targetSymbol"];
-                        m += "=" + r.extraVar["targetValue"];
-                        m += " does not exist for variable " + r.extraVar["variableSymbol"];
-                        m += " valued in interval " + r.extraVar["variableInterval"];
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_INITVALUE_HIGH:
-                    case ErrorCode.ERROR_DICHO_INITVALUE_LOW:
-                        m = "Dichotomy : initial value " + r.extraVar["variableSymbol"];
-                        m += "=" + r.extraVar["variableInitValue"];
-                        if (r.code == ErrorCode.ERROR_DICHO_INITVALUE_HIGH)
-                            m += " is too high";
-                        else if (r.code == ErrorCode.ERROR_DICHO_INITVALUE_LOW)
-                            m += " is too low";
-
-                        m += " (target is " + r.extraVar["targetSymbol"];
-                        m += "=" + r.extraVar["targetValue"];
-                        m += ", " + r.extraVar["targetSymbol"];
-                        m += "(" + r.extraVar["variableSymbol"];
-                        m += "=" + r.extraVar["variableInitValue"]
-                        m += ")=" + r.extraVar["initTarget"] + ")";
-                        break;
-
-
-                    case ErrorCode.ERROR_DICHO_NULL_STEP:
-                        m = "Dichotomy (initial interval search) : invalid null step";
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_INVALID_STEP_GROWTH:
-                        m = "Dichotomy (initial interval search) : invalid null step growth";
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_FUNCTION_VARIATION:
-                        m = "unable to determinate function direction of variation";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDOMAIN_INTERVAL_BOUNDS:
-                        m = "invalid ";
-                        m += String(r.extraVar["minValue"]);
-                        m += "/";
-                        m += String(r.extraVar["maxValue"]);
-                        m += " min/max boundaries for 'interval' parameter definition domain";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_CALC_UNDEFINED:
-                        m = "calculability of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter is undefined";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_UNDEFINED:
-                        m = "value of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter is undefined";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_FIXED:
-                        m = "value of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter cannot be changed";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_POS:
-                        m = "value ";
-                        m += String(r.extraVar["value"]);
-                        m += " of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter is invalid ";
-                        m += " (cannot be <=0)";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_POSNULL:
-                        m = "value ";
-                        m += String(r.extraVar["value"]);
-                        m += " of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter is invalid ";
-                        m += " (cannot be <0)";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_NULL:
-                        m = "value of '";
-                        m += r.extraVar["symbol"];
-                        m += "' parameter cannot be 0";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_INTERVAL:
-                        m = "parameter '";
-                        m += r.extraVar["symbol"];
-                        m += "' : value ";
-                        m += r.extraVar["value"];
-                        m += " is out of [";
-                        m += r.extraVar["minValue"];
-                        m += ", ";
-                        m += r.extraVar["maxValue"];
-                        m += "] interval";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDOMAIN_INVALID:
-                        m = "parameter '";
-                        m += r.extraVar["symbol"];
-                        m += "' : non supported '";
-                        m += r.extraVar["domain"];
-                        m += "' definition domain";
-                        break;
-
-                    case ErrorCode.ERROR_INTERVAL_UNDEF:
-                        m = "Interval : invalid 'undefined' value";
-                        break;
-
-                    case ErrorCode.ERROR_INTERVAL_OUTSIDE:
-                        m = "Interval : value ";
-                        m += r.extraVar["value"];
-                        m += " is outside of ";
-                        m += r.extraVar["interval"];
-                        break;
-
-                    default:
-                        throw "unprocessed ResultCode value " + sCode + " for language " + this._sLang;
-                }
-                break;
-
-            case Language.FRENCH:
-                switch (r.code) {
-                    case ErrorCode.ERROR_DICHO_INIT_DOMAIN:
-                        m = "Dichotomie : la valeur cible " + r.extraVar["targetSymbol"];
-                        m += "=" + r.extraVar["targetValue"];
-                        m += " n'existe pas pour la variable " + r.extraVar["variableSymbol"] + " prise dans l'intervalle " + r.extraVar["variableInterval"];
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_INITVALUE_HIGH:
-                    case ErrorCode.ERROR_DICHO_INITVALUE_LOW:
-                        m = "Dichotomie : la valeur initiale " + r.extraVar["variableSymbol"];
-                        m += "=" + r.extraVar["variableInitValue"];
-                        if (r.code == ErrorCode.ERROR_DICHO_INITVALUE_HIGH)
-                            m += " est trop grande";
-                        else if (r.code == ErrorCode.ERROR_DICHO_INITVALUE_LOW)
-                            m += " est trop petite";
-
-                        m += " (la valeur cible est " + r.extraVar["targetSymbol"];
-                        m += "=" + r.extraVar["targetValue"];
-                        m += ", " + r.extraVar["targetSymbol"];
-                        m += "(" + r.extraVar["variableSymbol"];
-                        m += "=" + r.extraVar["variableInitValue"]
-                        m += ")=" + r.extraVar["initTarget"] + ")";
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_NULL_STEP:
-                        m = "Dichotomie : le pas pour la recherche de l'intervalle de départ ne devrait pas être nul";
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_INVALID_STEP_GROWTH:
-                        m = "Dichotomie : l'augmentation du pas pour la recherche de l'intervalle de départ est incorrecte (=0)";
-                        break;
-
-                    case ErrorCode.ERROR_DICHO_FUNCTION_VARIATION:
-                        m = "Dichotomie : impossible de determiner le sens de  variation de la fonction";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDOMAIN_INTERVAL_BOUNDS:
-                        m = "Les bornes (";
-                        m += String(r.extraVar["minValue"]);
-                        m += "/";
-                        m += String(r.extraVar["maxValue"]);
-                        m += ") de l'intervalle sont incorrectes";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_CALC_UNDEFINED:
-                        m = "La calculabilité du paramètre ";
-                        m += r.extraVar["symbol"];
-                        m += " n'est pas définie";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_UNDEFINED:
-                        m = "La valeur du paramètre ";
-                        m += r.extraVar["symbol"];
-                        m += " n'est pas définie";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_FIXED:
-                        m = "La valeur du paramètre ";
-                        m += r.extraVar["symbol"];
-                        m += " ne peut pas être changée";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_POS:
-                        m = "La valeur ";
-                        m += String(r.extraVar["value"]);
-                        m += " du paramètre '";
-                        m += r.extraVar["symbol"];
-                        m += "' est incorrecte (<=0)";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_POSNULL:
-                        m = "La valeur ";
-                        m += String(r.extraVar["value"]);
-                        m += " du paramètre '";
-                        m += r.extraVar["symbol"];
-                        m += "' est incorrecte (<0)";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_NULL:
-                        m = "La valeur du paramètre '";
-                        m += r.extraVar["symbol"];
-                        m += "' ne peut pas être nulle";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDEF_VALUE_INTERVAL:
-                        m = "Paramètre '";
-                        m += r.extraVar["symbol"];
-                        m += "' : la valeur ";
-                        m += r.extraVar["value"];
-                        m += " est en dehors de l'intervalle [";
-                        m += r.extraVar["minValue"];
-                        m += ", ";
-                        m += r.extraVar["maxValue"];
-                        m += "]";
-                        break;
-
-                    case ErrorCode.ERROR_PARAMDOMAIN_INVALID:
-                        m = "Paramètre '";
-                        m += r.extraVar["symbol"];
-                        m += "' : le domaine de définition '";
-                        m += r.extraVar["domain"];
-                        m += "' est incorrect";
-                        break;
-
-                    case ErrorCode.ERROR_INTERVAL_UNDEF:
-                        m = "Interval : valeur 'undefined' incorrecte";
-                        break;
-
-                    case ErrorCode.ERROR_INTERVAL_OUTSIDE:
-                        m = "Interval : la valeur ";
-                        m += r.extraVar["value"];
-                        m += " est hors de l'intervalle ";
-                        m += r.extraVar["interval"];
-                        break;
-
-                    default:
-                        throw "unprocessed ResultCode value " + sCode + " for language " + this._sLang;
-                }
-                break;
-
-            default:
-                throw "unprocessed Language value " + this._sLang;
-        }
+    get localeChanged() {
+        return this._localeChanged;
+    }
 
-        return m;
+    public acknowledgeLocaleChanged() {
+        this._localeChanged = false;
     }
-    */
 }
diff --git a/src/app/services/ngparam.js b/src/app/services/ngparam.js
deleted file mode 100644
index a82355c0ba35fb8b755e4b419c8d4475fdcff45f..0000000000000000000000000000000000000000
--- a/src/app/services/ngparam.js
+++ /dev/null
@@ -1,37 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var NgParameter = (function () {
-    function NgParameter(_paramDef) {
-        this._paramDef = _paramDef;
-    }
-    Object.defineProperty(NgParameter.prototype, "symbol", {
-        get: function () {
-            return this._paramDef.symbol;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(NgParameter.prototype, "v", {
-        get: function () {
-            return this._paramDef.v;
-        },
-        set: function (val) {
-            this._paramDef.v = val;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(NgParameter.prototype, "isDefined", {
-        get: function () {
-            return this._paramDef.isDefined;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    NgParameter.prototype.checkValue = function (val) {
-        this._paramDef.checkValue(val);
-    };
-    return NgParameter;
-}());
-exports.NgParameter = NgParameter;
-//# sourceMappingURL=ngparam.js.map
\ No newline at end of file
diff --git a/src/app/services/ngparam.js.map b/src/app/services/ngparam.js.map
deleted file mode 100644
index 3247d9c03fbdb0ade47a8bbf709606c59509804d..0000000000000000000000000000000000000000
--- a/src/app/services/ngparam.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ngparam.js","sourceRoot":"","sources":["ngparam.ts"],"names":[],"mappings":";;AAEA;IAGI,qBAAoB,SAA0B;QAA1B,cAAS,GAAT,SAAS,CAAiB;IAC9C,CAAC;IAED,sBAAI,+BAAM;aAAV;YACI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACjC,CAAC;;;OAAA;IAED,sBAAI,0BAAC;aAAL;YACI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5B,CAAC;aAED,UAAM,GAAW;YACb,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3B,CAAC;;;OAJA;IAMD,sBAAI,kCAAS;aAAb;YACI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACpC,CAAC;;;OAAA;IAEM,gCAAU,GAAjB,UAAkB,GAAW;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACL,kBAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,kCAAW"}
\ No newline at end of file
diff --git a/src/app/services/ngparam.ts b/src/app/services/ngparam.ts
index abe2224666c8dff1d3122c53fd352e4ccab54398..752d7801b811d04c2703de729ab8a6767d46c0d5 100644
--- a/src/app/services/ngparam.ts
+++ b/src/app/services/ngparam.ts
@@ -1,6 +1,10 @@
 import { ParamDefinition } from 'jalhyd';
 
+/**
+ * class englobante de ParamDefinition (champs supplémentaires pour l'affichage, ...)
+ */
 export class NgParameter {
+    public unit: string;
     public label: string;
 
     constructor(private _paramDef: ParamDefinition) {
diff --git a/src/app/services/param/param.service.js b/src/app/services/param/param.service.js
deleted file mode 100644
index d15c94d58193687cd75f8e54618c3fc2c8cfc279..0000000000000000000000000000000000000000
--- a/src/app/services/param/param.service.js
+++ /dev/null
@@ -1,52 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var jalhyd_1 = require("jalhyd");
-var ngparam_1 = require("../ngparam");
-var ParamService = (function () {
-    function ParamService() {
-        // this._params = [new ParamDefinition('Q', ParamDomainValue.POS_NULL),
-        // new ParamDefinition('Ks', ParamDomainValue.POS)];
-        // for (let p of this._params)
-        //     p.calculability = ParamCalculability.DICHO;
-        this._params = [];
-        // précision de calcul
-        var pr = new jalhyd_1.ParamDefinition('Pr', jalhyd_1.ParamDomainValue.POS, 0.001);
-        this._params.push(new ngparam_1.NgParameter(pr));
-        this.addParameters("cond_distri");
-    }
-    ParamService.prototype.hasParameter = function (symbol) {
-        for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
-            var p = _a[_i];
-            if (p.symbol === symbol)
-                return true;
-        }
-        return false;
-    };
-    ParamService.prototype.addParameters = function (computeNodeName) {
-        var cdp = jalhyd_1.ComputeNodeParameters.getInstance().getComputeNodeParameters(computeNodeName);
-        // console.log(cdp);
-        for (var pi in cdp) {
-            var p = cdp[pi];
-            if (!this.hasParameter(p.symbol))
-                this._params.push(p);
-        }
-    };
-    ParamService.prototype.getParameter = function (s) {
-        for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
-            var p = _a[_i];
-            if (p.symbol == s)
-                return p;
-        }
-        return undefined;
-    };
-    ParamService.prototype.updateLocalisation = function (loc) {
-        for (var ki in loc) {
-            var p = this.getParameter(ki);
-            if (p != undefined)
-                p.label = loc[ki];
-        }
-    };
-    return ParamService;
-}());
-exports.ParamService = ParamService;
-//# sourceMappingURL=param.service.js.map
\ No newline at end of file
diff --git a/src/app/services/param/param.service.js.map b/src/app/services/param/param.service.js.map
deleted file mode 100644
index f121bd692c00aa7108496535edcc601b2ec8c024..0000000000000000000000000000000000000000
--- a/src/app/services/param/param.service.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"param.service.js","sourceRoot":"","sources":["param.service.ts"],"names":[],"mappings":";;AAAA,iCAAuH;AAEvH,sCAAyC;AAEzC;IAII;QACI,uEAAuE;QACvE,oDAAoD;QACpD,8BAA8B;QAC9B,kDAAkD;QAElD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAElB,sBAAsB;QACtB,IAAI,EAAE,GAAG,IAAI,wBAAe,CAAC,IAAI,EAAE,yBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,qBAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAEO,mCAAY,GAApB,UAAqB,MAAc;QAC/B,GAAG,CAAC,CAAU,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY;YAArB,IAAI,CAAC,SAAA;YACN,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC;SACnB;QACD,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;IAEO,oCAAa,GAArB,UAAsB,eAAuB;QACzC,IAAI,GAAG,GAAoB,8BAAqB,CAAC,WAAW,EAAE,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;QACzG,oBAAoB;QACpB,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,mCAAY,GAAZ,UAAa,CAAS;QAClB,GAAG,CAAC,CAAU,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY;YAArB,IAAI,CAAC,SAAA;YACN,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACd,MAAM,CAAC,CAAC,CAAC;SAChB;QAED,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;IAED,yCAAkB,GAAlB,UAAmB,GAA8B;QAC7C,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC9B,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACf,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IACL,mBAAC;AAAD,CAAC,AArDD,IAqDC;AArDY,oCAAY"}
\ No newline at end of file
diff --git a/src/index.html b/src/index.html
index 2387cacddfe8c3821e15a815639d592f43591274..5d72e6c8244a7cd40d44f4b726a829af36dedfff 100644
--- a/src/index.html
+++ b/src/index.html
@@ -17,7 +17,7 @@
   <script src="systemjs.config.js"></script>
   <script>
     // Get the locale id somehow
-    // document.locale = 'fr-FR';
+    // document.locale = 'fr';
     document.locale = 'en';
 
     // Map to the text plugin
diff --git a/src/locale/messages.en.xlf b/src/locale/messages.en.xlf
index 9c90b3e3516e03ea34495b398ed4efe687141406..ad17db1b5745332f3a346054976b401d626a3f81 100644
--- a/src/locale/messages.en.xlf
+++ b/src/locale/messages.en.xlf
@@ -5,6 +5,9 @@
       <trans-unit id="titre_saisie_param" datatype="html">
         <target>Parameter input</target>
       </trans-unit>
+      <trans-unit id="titre_cond_distri" datatype="html">
+        <target>Distributor pipe</target>
+      </trans-unit>
     </body>
   </file>
 </xliff>