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, } /**