diff --git a/package.json b/package.json
index ecb083b1970487ceb181f5e1712d2c99a9a99993..7c7ceba9fa9fde2a7ac748a33514dd9802cb8740 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
   "dependencies": {},
   "devDependencies": {
     "@types/jasmine": "^2.5.47",
+    "@types/node": "^6.0.46",
     "jasmine": "^2.6.0",
     "jasmine-core": "^2.5.2",
     "jasmine-node": "^1.14.5",
@@ -21,8 +22,7 @@
     "karma-typescript-preprocessor": "^0.3.0",
     "requirejs": "^2.3.2",
     "tslint": "^3.15.1",
-    "typescript": "^2.0.3",
-    "typings": "^2.1.1"
+    "typescript": "^2.0.3"
   },
   "scripts": {
     "build": "./node_modules/typescript/bin/tsc --p src/tsconfig.app.json",
diff --git a/spec/tsconfig.spec.json b/spec/tsconfig.spec.json
index 3c8b0e620de9b8aeaa4767036ab8239a504b8f08..715af20a687265836a0d9fd23b17a82202e0292a 100644
--- a/spec/tsconfig.spec.json
+++ b/spec/tsconfig.spec.json
@@ -2,11 +2,10 @@
   "extends": "../tsconfig.json",
   "compilerOptions": {
     "outDir": "../build",
-    "types": []
-    // "types": [
+    "types": [
     //   "jasmine",
-    //   "node"
-    // ]
+      "node" // pour pouvoir utiliser node dans le code
+ ]
   },
   // "files": [
   //   "test.ts"
diff --git a/src/dichotomie.ts b/src/dichotomie.ts
index fe2b49c8538c2df5bc8b345ffe635d3afa72f725..7ab30e0672d4cb39ed347d65d106d18a711179fc 100644
--- a/src/dichotomie.ts
+++ b/src/dichotomie.ts
@@ -424,8 +424,8 @@ export class Dichotomie extends Debug {
             res = new ErrorMessage(ErrorCode.ERROR_DICHO_INIT_DOMAIN);
             res.extraVar["targetSymbol"] = aps; // symbole de la variable calculée par la fonction
             res.extraVar["targetValue"] = rTarget; // valeur cible pour la fonction
-            res.extraVar["variableInterval"] = intMax.toString(); // valeur de la fonction pour la valeur initiale de la variable
-            res.extraVar["variableSymbol"] = this.paramX.symbol; // symbole de la variable de la fonction
+            res.extraVar["variableInterval"] = intMax.toString(); // intervalle de valeurs pour la variable d'entrée de la fonction
+            res.extraVar["variableSymbol"] = this.paramX.symbol; // symbole de la variable d'entrée de la fonction
         }
         else {
             if (intSearch.step < 0)
diff --git a/src/error_messages.en.json b/src/error_messages.en.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa3bdda4afcdd46a8dc761578e9200a6b18aea39
--- /dev/null
+++ b/src/error_messages.en.json
@@ -0,0 +1,20 @@
+{
+    "ERROR_DICHO_INIT_DOMAIN": "Dichotomy : target %targetSymbol%=%targetValue% does not exist for variable %variableSymbol% valued in interval %variableInterval%",
+    "ERROR_DICHO_INITVALUE_LOW": "Dichotomy : initial value %variableSymbol%=%variableInitValue% is too low (target is %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
+    "ERROR_DICHO_INITVALUE_HIGH": "Dichotomy : initial value %variableSymbol%=%variableInitValue% is too high (target is %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
+    "ERROR_DICHO_NULL_STEP": "Dichotomy (initial interval search) : invalid null step",
+    "ERROR_DICHO_INVALID_STEP_GROWTH": "Dichotomy (initial interval search) : invalid null step growth",
+    "ERROR_DICHO_FUNCTION_VARIATION": "unable to determinate function direction of variation",
+    "ERROR_PARAMDOMAIN_INTERVAL_BOUNDS": "invalid %minValue%/%maxValue% min/max boundaries for 'interval' parameter definition domain",
+    "ERROR_PARAMDEF_CALC_UNDEFINED": "calculability of '%symbol%' parameter is undefined",
+    "ERROR_PARAMDEF_VALUE_UNDEFINED": "value of '%symbol%' parameter is undefined",
+    "ERROR_PARAMDEF_VALUE_FIXED": "value of '%symbol%' parameter cannot be changed",
+    "ERROR_PARAMDEF_VALUE_POS": "value %value% of '%symbol%' parameter is invalid (cannot be <=0)",
+    "ERROR_PARAMDEF_VALUE_POSNULL": "value %value% of '%symbol%' parameter is invalid (cannot be <0)",
+    "ERROR_PARAMDEF_VALUE_NULL": "value of '%symbol%' parameter cannot be 0",
+    "ERROR_PARAMDEF_VALUE_INTERVAL": "parameter '%symbol%' : value %value% is out of [%minValue%, %maxValue%] interval",
+    "ERROR_PARAMDOMAIN_INVALID": "parameter '%symbol%' : non supported '%domain%' definition domain",
+    "ERROR_INTERVAL_UNDEF": "Interval : invalid 'undefined' value",
+    "ERROR_INTERVAL_OUTSIDE": "Interval : value %value% is outside of %interval",
+    "ERROR_LANG_UNSUPPORTED": "internationalisation : unsupported '%locale%' locale"
+}
\ No newline at end of file
diff --git a/src/error_messages.fr.json b/src/error_messages.fr.json
new file mode 100644
index 0000000000000000000000000000000000000000..406d9f4371fbe96dbc22f77b21d3c6d3ea350252
--- /dev/null
+++ b/src/error_messages.fr.json
@@ -0,0 +1,20 @@
+{
+    "ERROR_DICHO_INIT_DOMAIN": "Dichotomie : la valeur cible %targetSymbol%=%targetValue% n'existe pas pour la variable %variableSymbol% prise dans l'intervalle %variableInterval%",
+    "ERROR_DICHO_INITVALUE_LOW": "Dichotomie : la valeur initiale %variableSymbol%=%variableInitValue% est trop petite (la valeur cible est %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
+    "ERROR_DICHO_INITVALUE_HIGH": "Dichotomie : la valeur initiale %variableSymbol%=%variableInitValue% est trop grande (la valeur cible est %targetSymbol%=%targetValue%, %targetSymbol%(%variableSymbol%=%variableInitValue%)=%initTarget%)",
+    "ERROR_DICHO_NULL_STEP": "Dichotomie : le pas pour la recherche de l'intervalle de départ ne devrait pas être nul",
+    "ERROR_DICHO_INVALID_STEP_GROWTH": "Dichotomie : l'augmentation du pas pour la recherche de l'intervalle de départ est incorrecte (=0)",
+    "ERROR_DICHO_FUNCTION_VARIATION": "Dichotomie : impossible de determiner le sens de  variation de la fonction",
+    "ERROR_PARAMDOMAIN_INTERVAL_BOUNDS": "Les bornes (%minValue%/%maxValue%) de l'intervalle sont incorrectes",
+    "ERROR_PARAMDEF_CALC_UNDEFINED": "La calculabilité du paramètre %symbol% n'est pas définie",
+    "ERROR_PARAMDEF_VALUE_UNDEFINED": "La valeur du paramètre %symbol% n'est pas définie",
+    "ERROR_PARAMDEF_VALUE_FIXED": "La valeur du paramètre %symbol% ne peut pas être changée",
+    "ERROR_PARAMDEF_VALUE_POS": "La valeur %value% du paramètre '%symbol%' est incorrecte (<=0)",
+    "ERROR_PARAMDEF_VALUE_POSNULL": "La valeur %value% du paramètre '%symbol%' est incorrecte (<0)",
+    "ERROR_PARAMDEF_VALUE_NULL": "La valeur du paramètre '%symbol%' ne peut pas être nulle",
+    "ERROR_PARAMDEF_VALUE_INTERVAL": "Paramètre '%symbol%' : la valeur %value% est en dehors de l'intervalle [%minValue%, %maxValue%]",
+    "ERROR_PARAMDOMAIN_INVALID": "Paramètre '%symbol%' : le domaine de définition '%domain%' est incorrect",
+    "ERROR_INTERVAL_UNDEF": "Interval : valeur 'undefined' incorrecte",
+    "ERROR_INTERVAL_OUTSIDE": "Interval : la valeur %value% est hors de l'intervalle %interval",
+    "ERROR_LANG_UNSUPPORTED": "internationalisation : locale '%locale%' non prise en charge"
+}
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
index 787b5dbd98581f29b26d73ac9a5929a273f5f355..36acf01cb7ca0d9ea986cc65e20ae3e71f022b7a 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,3 +7,5 @@ export * from './lechaptcalmon';
 export * from './regime_uniforme';
 export * from './util/definedvalue';
 export * from './util/numericalstring';
+export * from './util/error';
+export * from './internationalisation';
diff --git a/src/internationalisation.ts b/src/internationalisation.ts
index 9b646a9a1e30496d15f6576d5e7d2cb3185b1a2a..cb8f93320d4776fac2f36ad39cfb4059858b7198 100644
--- a/src/internationalisation.ts
+++ b/src/internationalisation.ts
@@ -1,7 +1,8 @@
-// import { Result, ResultCode } from "./base";
 import { Result } from "./base";
 import { ErrorMessage, ErrorCode } from "./util/error";
 
+import * as fs from 'fs';
+
 export enum Language {
     FRENCH,
 
@@ -12,6 +13,7 @@ export class Internationalisation {
     private _lang: Language;
     private _sLang: string;
     private static _instance: Internationalisation;
+    private _errorMessages: { [key: string]: string };
 
     private constructor() { }
 
@@ -30,6 +32,57 @@ export class Internationalisation {
         this._sLang = Language[l];
     }
 
+    public setLocale(loc: string) {
+        let l: string = loc.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"] = loc;
+            throw e;
+        }
+
+        this.loadErrorMessages();
+    }
+
+    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);
+    }
+
+    private getErrorMessageFromCode(c: ErrorCode): string {
+        let sCode: string = ErrorCode[c];
+        return this._errorMessages[ErrorCode[c]];
+    }
+
+    private replaceAll(str: string, find: string, replace: string) {
+        return str.replace(new RegExp(find, 'g'), replace);
+    }
+
+    public localizeErrorMessage(r: ErrorMessage): string {
+        let sCode: string = ErrorCode[r.code];
+        let m: string = this.getErrorMessageFromCode(r.code);
+
+        for (let k in r.extraVar) {
+            m = this.replaceAll(m, "%" + k + "%", r.extraVar[k]);
+        }
+
+        return m;
+    }
+
+    /*
     public localizeErrorMessage(r: ErrorMessage): string {
         let m: string;
         let sCode: string = ErrorCode[r.code];
@@ -287,4 +340,5 @@ export class Internationalisation {
 
         return m;
     }
+    */
 }
diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json
index 0b14a88d3907d3af534b1d6f78d70652d3e17ae9..8d4696423d9944cb99c348fb094a5b7d5bbadec1 100644
--- a/src/tsconfig.app.json
+++ b/src/tsconfig.app.json
@@ -1,7 +1,9 @@
 {
   "extends": "../tsconfig.json",
   "compilerOptions": {
-    "types": [],
+    "types": [
+      "node" // pour pouvoir utiliser node dans le code
+    ],
     "removeComments": false,
     "declaration": true // génère le fichier .d.ts à partir de index.ts
   },
diff --git a/src/util/error.ts b/src/util/error.ts
index a2c31ca752566a0f61745b03cf39a5aa84f69c03..35983cab862be626edc2b5a4ccd37d1e75a253e8 100644
--- a/src/util/error.ts
+++ b/src/util/error.ts
@@ -92,6 +92,11 @@ export enum ErrorCode {
      * la valeur passée à une méthode de la classe Interval est hors de l'intervalle défini
      */
     ERROR_INTERVAL_OUTSIDE = -301,
+
+    /**
+     * internationalisation : langue non prise en charge
+     */
+    ERROR_LANG_UNSUPPORTED = -400,
 }
 
 /**