diff --git a/src/app/components/calculator-list/calculator-list.component.html b/src/app/components/calculator-list/calculator-list.component.html index 755776307d46fbada6025fbdc34317706615aef4..7a948010ef1f6f2a785ecfb05d871981983d9d1a 100644 --- a/src/app/components/calculator-list/calculator-list.component.html +++ b/src/app/components/calculator-list/calculator-list.component.html @@ -6,6 +6,9 @@ (keydown.escape)="resetSearch()"> </mat-form-field> </form> + <div *ngIf="filteredItems.length === 0"> + {{ uitextSearchNoResult }} + </div> </div> <div class="container" fxLayout="row wrap" fxLayoutAlign="space-evenly stretch" (konami)="onKC()"> diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index 51c7563a5967348e00e3b814e89b63002d2e9f00..1e05c7b1ea359a78ab0aa507c32567763cc95a6a 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -70,6 +70,7 @@ export class CalculatorListComponent implements OnInit { item.calculators.push({ type: calcType, label: ServiceFactory.formulaireService.getLocalisedTitleFromCalculatorType(calcType), + description: ServiceFactory.formulaireService.getLocalisedDescriptionFromCalculatorType(calcType), buttonId: "create-calc-" + calcType }); // mark as used @@ -187,7 +188,7 @@ export class CalculatorListComponent implements OnInit { // filter items based on parent component's search field for (const i of this.filteredItems) { i.calculators = i.calculators.filter((c) => { - return (c.label.toLowerCase().includes(this.searchTerms.toLowerCase())); + return this.searchMatches(c.label) || this.searchMatches(c.description); }); } this.filteredItems = this.filteredItems.filter((i) => { @@ -196,6 +197,29 @@ export class CalculatorListComponent implements OnInit { } } + /** + * Returns true if given str matches this.searchTerms: all terms (separated + * by " ") must match, in any order + */ + private searchMatches(str: string): boolean { + let ok = false; + let terms = this.searchTerms.split(" "); + terms = terms.filter( + (item, index) => item !== "" && terms.indexOf(item) === index // deduplicate and remove "" + ); + if (terms.length > 1) { + // all terms must match + ok = terms.every((t) => { + return str.toLowerCase().includes(t.toLowerCase()); + }); + } else if (terms.length > 0) { + ok = (str.toLowerCase().includes(terms[0].toLowerCase())); + } else { + ok = true; + } + return ok; + } + /** * IMPORTANT: keep in sync with app/examples folder contents */ @@ -258,6 +282,10 @@ export class CalculatorListComponent implements OnInit { return ServiceFactory.i18nService.localizeText("INFO_EXAMPLES_SUBTITLE"); } + public get uitextSearchNoResult() { + return ServiceFactory.i18nService.localizeText("INFO_SEARCH_NO_RESULT"); + } + public onKC() { for (const i of this._items) { const img = [ "assets/images/themes/sp.jpg", "assets/images/themes/autres.jpg" ]; diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 89653c92fbae12f2e70af680c9987dd08acaf36e..d4cdb6ef29af0b04ac60d3991cf1a3ea151bde0e 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -146,6 +146,14 @@ export class FormulaireService extends Observable { return this._intlService.localizeText(`INFO_${sCalculator}_TITRE`); } + /** + * Retourne la description du type de module de calcul, dans la langue en cours + */ + public getLocalisedDescriptionFromCalculatorType(type: CalculatorType) { + const sCalculator: string = CalculatorType[type].toUpperCase(); + return this._intlService.localizeText(`INFO_${sCalculator}_DESCRIPTION`); + } + /** * Retourne le titre cour du type de module de calcul, dans la langue en cours * (pour les titres d'onglets par défaut) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index e5991f549c18967a2283d73480ab147ec033b61f..529148f6dd5fe422f2a7392c13f2bb60615bc7e0 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -82,19 +82,25 @@ "INFO_CALCULATOR_SAVE": "Save", "INFO_CALCULATOR_USED_BY": "Used by", "INFO_CALCULATOR_VALEURS": "Values", + "INFO_BIEF_DESCRIPTION": "", "INFO_BIEF_TITRE_COURT": "Reach", "INFO_BIEF_TITRE": "Up/downstream elevations of a reach", + "INFO_CLOISONS_DESCRIPTION": "", "INFO_CLOISONS_TITRE_COURT": "Cross walls", "INFO_CLOISONS_TITRE": "Fish ladder: Cross walls", "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "The following modules depend on the one you are closing:", "INFO_CLOSE_DIALOGUE_TEXT": "Warning ! Parameters and results of this module will be lost.", "INFO_CLOSE_DIALOGUE_TITRE": "Closing calculation module", "INFO_CONCENTRATIONBLOCS_TITRE": "Blocks concentration", + "INFO_CONCENTRATIONBLOCS_DESCRIPTION": "", "INFO_CONCENTRATIONBLOCS_TITRE_COURT": "Blocks conc.", + "INFO_CONDUITEDISTRIBUTRICE_DESCRIPTION": "", "INFO_CONDUITEDISTRIBUTRICE_TITRE_COURT": "Distrib.", "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Distributor pipe", + "INFO_COURBEREMOUS_DESCRIPTION": "", "INFO_COURBEREMOUS_TITRE_COURT": "Backwater", "INFO_COURBEREMOUS_TITRE": "Backwater curves", + "INFO_DEVER_DESCRIPTION": "", "INFO_DEVER_TITRE_COURT": "Free weir", "INFO_DEVER_TITRE": "Free flow weir stage-discharge laws", "INFO_DIAGRAM_SOLVEUR_FINDS": "finds", @@ -206,8 +212,10 @@ "INFO_FIELDSET_MOVE_DOWN": "Move down", "INFO_FIELDSET_MOVE_LEFT": "Move left", "INFO_FIELDSET_MOVE_RIGHT": "Move right", + "INFO_GRILLE_DESCRIPTION": "", "INFO_GRILLE_TITRE_COURT": "Grid", "INFO_GRILLE_TITRE": "Loss of charge, water grid", + "INFO_JET_DESCRIPTION": "", "INFO_JET_TITRE_COURT": "Jet", "INFO_JET_TITRE": "Jet trajectory and impact", "INFO_WALL_ADDED": "1 wall added", @@ -221,6 +229,7 @@ "INFO_JET_TITRE_TRAJECTOIRE": "Trajectory", "INFO_JET_TITRE_TRAJECTOIRE_ET_COTE_EAU": "Trajectory and water elevation", "INFO_JET_FOND": "Bottom", + "INFO_LECHAPTCALMON_DESCRIPTION": "", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", "INFO_LIB_ABSCISSE": "Abscissa (m)", @@ -375,16 +384,19 @@ "INFO_LINKED_VALUE_SECTION": "%s (%s, section)", "INFO_LOG_HIDE_DETAILS": "hide details", "INFO_LOG_SHOW_DETAILS": "show details", + "INFO_MACRORUGO_DESCRIPTION": "", "INFO_MACRORUGO_TITRE_COURT": "Rock-ramp", "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses", "INFO_MENU_DIAGRAM_TITLE": "Modules diagram", "INFO_MACRORUGOCOMPOUND_TITRE": "Compound rock-ramp fishpasses", + "INFO_MACRORUGOCOMPOUND_DESCRIPTION": "", "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "Compound RR", "INFO_MACRORUGOCOMPOUND_LINCL": "Lateral inclination (m/m): ", "INFO_ONLY_Q_MAY_VARY": "Only flow may vary", "INFO_ONLY_Z1_Q_MAY_VARY": "Only upstream elevation and flow may vary", "INFO_Z1_Z2_MUST_BE_DEFINED": "Upstream and downstream elevations must be defined", "INFO_PENTE_TITRE": "Slope", + "INFO_PENTE_DESCRIPTION": "", "INFO_PENTE_TITRE_COURT": "Slope", "INFO_MENU_EMPTY_SESSION_TITLE": "New session", "INFO_MENU_HELP_TITLE": "Help", @@ -432,23 +444,31 @@ "INFO_PAB_LOIDEBIT_VANLEVVILLEMONTE": "Regulated notch (Villemonte)", "INFO_PAB_LOIDEBIT_WEIRVILLEMONTE": "Notch (Villemonte)", "INFO_PARAMETRES_FIXES": "All parameters must be fixed", + "INFO_PAB_DESCRIPTION": "", "INFO_PAB_TITRE_COURT": "Fish ladder", "INFO_PAB_TITRE": "Fish ladder", "INFO_PAB_TITRE_PROFIL": "Fish ladder longitudinal profile", "INFO_PAB_TABLE": "Fish ladder geometry", + "INFO_PABCHUTE_DESCRIPTION": "", "INFO_PABCHUTE_TITRE_COURT": "FL: fall", "INFO_PABCHUTE_TITRE": "Fish ladder: fall", + "INFO_PABDIMENSIONS_DESCRIPTION": "", "INFO_PABDIMENSIONS_TITRE_COURT": "FL: dimensions", "INFO_PABDIMENSIONS_TITRE": "Fish ladder: dimensions", + "INFO_PABNOMBRE_DESCRIPTION": "", "INFO_PABNOMBRE_TITRE_COURT": "FL: number", "INFO_PABNOMBRE_TITRE": "Fish ladder: number of falls", + "INFO_PABPUISSANCE_DESCRIPTION": "", "INFO_PABPUISSANCE_TITRE_COURT": "FL: diss. power", "INFO_PABPUISSANCE_TITRE": "Fish ladder: dissipated power", + "INFO_PARALLELSTRUCTURE_DESCRIPTION": "", "INFO_PARALLELSTRUCTURE_TITRE_COURT": "// structures", "INFO_PARALLELSTRUCTURE_TITRE": "Parallel structures", "INFO_PAR_TITRE": "Humpback fishway: setup", + "INFO_PAR_DESCRIPTION": "", "INFO_PAR_TITRE_COURT": "HF: setup", "INFO_PARSIMULATION_TITRE": "Humpback fishway: simulation", + "INFO_PARSIMULATION_DESCRIPTION": "", "INFO_PARSIMULATION_TITRE_COURT": "HF: simulation", "INFO_PARAMFIELD_AWAITING_CALCULATION": "Awaiting calculation", "INFO_PARAMFIELD_BOUNDARY_CONDITIONS": "Boundary conditions", @@ -492,6 +512,7 @@ "INFO_QUICKNAV_INPUT": "input", "INFO_QUICKNAV_RESULTS": "results", "WARNING_PROBLEMS_ENCOUNTERED": "Problems occurred during calculation (info: %info%, warning: %warning%, error: %error%)", + "INFO_REGIMEUNIFORME_DESCRIPTION": "", "INFO_REGIMEUNIFORME_TITRE_COURT": "Uniform flow", "INFO_REGIMEUNIFORME_TITRE": "Uniform flow calculation", "INFO_REMOUS_CALCUL_FLUVIAL": "Downstream boundary condition >= Critical elevation: calculation of subcritical part from downstream", @@ -511,6 +532,8 @@ "INFO_REPORT_BUG_SUBJECT": "Issue report", "INFO_REQUIRES": "requires", "INFO_RESULTS_EXPORT_AS_SPREADSHEET": "Export as XLSX", + "INFO_SEARCH_NO_RESULT": "No result", + "INFO_SECTIONPARAMETREE_DESCRIPTION": "", "INFO_SECTIONPARAMETREE_TITRE_COURT": "Param. section", "INFO_SECTIONPARAMETREE_TITRE": "Parametric section", "INFO_SELECT_MULTIPLE_AND_OTHER": "other", @@ -533,8 +556,10 @@ "INFO_SNACKBAR_RESULTS_INVALIDATED": "Results invalidated for", "INFO_SNACKBAR_SETTINGS_SAVED": "Settings saved on this device", "INFO_SOLVEUR_TITRE": "Multimodule solver", + "INFO_SOLVEUR_DESCRIPTION": "", "INFO_SOLVEUR_TITRE_COURT": "Solver", "INFO_SPP_TITRE": "Sum and product of powers", + "INFO_SPP_DESCRIPTION": "", "INFO_SPP_TITRE_COURT": "SPP", "INFO_THEME_CREDITS": "Credit", "INFO_THEME_DEVALAISON_TITRE": "Downstream migration", @@ -570,8 +595,10 @@ "INFO_EXAMPLES_TITLE": "Examples", "INFO_EXAMPLES_SUBTITLE": "Load standard examples", "INFO_YAXB_TITRE": "Linear function", + "INFO_YAXB_DESCRIPTION": "", "INFO_YAXB_TITRE_COURT": "Linear f.", "INFO_TRIGO_TITRE": "Trigonometric function", + "INFO_TRIGO_DESCRIPTION": "", "INFO_TRIGO_TITRE_COURT": "Trigo. f.", "INFO_VERIF_OK": "Crossing criteria are met for all species", "INFO_VERIF_VARYING_OK": "Crossing criteria are met for all species and all pass modalities", @@ -579,8 +606,10 @@ "INFO_VERIFICATEUR_CUSTOM_SPECIES": "Custom species: %s", "INFO_VERIFICATEUR_SPECIES_GROUP": "Species group", "INFO_VERIFICATEUR_TITRE": "Fish pass verification", + "INFO_VERIFICATEUR_DESCRIPTION": "", "INFO_VERIFICATEUR_TITRE_COURT": "Verification", "INFO_ESPECE_TITRE": "Fish species characteristics", + "INFO_ESPECE_DESCRIPTION": "", "INFO_ESPECE_TITRE_COURT": "Species", "WARNING_WARNINGS_ABSTRACT": "%nb% warnings occurred during calculation", "ERROR_JET_SUBMERGED_NO_SOLUTION": "There is no solution", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index cae8286ea260938fc0a3f1f341727ae11438c7b6..f89b6fa41000d998f36ab8984d94d0f631949ba6 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -82,19 +82,25 @@ "INFO_CALCULATOR_SAVE": "Enregistrer", "INFO_CALCULATOR_USED_BY": "Utilisé par", "INFO_CALCULATOR_VALEURS": "Valeurs", + "INFO_BIEF_DESCRIPTION": "", "INFO_BIEF_TITRE_COURT": "Bief", "INFO_BIEF_TITRE": "Cotes amont/aval d'un bief", + "INFO_CLOISONS_DESCRIPTION": "", "INFO_CLOISONS_TITRE_COURT": "Cloisons", "INFO_CLOISONS_TITRE": "Passe à bassins : Cloisons", "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "Les modules suivants dépendent de celui que vous êtes en train de fermer :", "INFO_CLOSE_DIALOGUE_TEXT": "Attention ! Les paramètres et résultats du module de calcul seront perdus.", "INFO_CLOSE_DIALOGUE_TITRE": "Fermeture du module de calcul", "INFO_CONCENTRATIONBLOCS_TITRE": "Concentration de blocs", + "INFO_CONCENTRATIONBLOCS_DESCRIPTION": "", "INFO_CONCENTRATIONBLOCS_TITRE_COURT": "Conc. blocs", + "INFO_CONDUITEDISTRIBUTRICE_DESCRIPTION": "", "INFO_CONDUITEDISTRIBUTRICE_TITRE_COURT": "Conduite distri.", "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Conduite distributrice", + "INFO_COURBEREMOUS_DESCRIPTION": "", "INFO_COURBEREMOUS_TITRE_COURT": "Remous", "INFO_COURBEREMOUS_TITRE": "Courbes de remous", + "INFO_DEVER_DESCRIPTION": "", "INFO_DEVER_TITRE_COURT": "Déver. dénoyés", "INFO_DEVER_TITRE": "Lois de déversoirs dénoyés", "INFO_DIAGRAM_SOLVEUR_FINDS": "trouve", @@ -206,8 +212,10 @@ "INFO_FIELDSET_MOVE_DOWN": "Déplacer vers le bas", "INFO_FIELDSET_MOVE_LEFT": "Déplacer vers la gauche", "INFO_FIELDSET_MOVE_RIGHT": "Déplacer vers la droite", + "INFO_GRILLE_DESCRIPTION": "", "INFO_GRILLE_TITRE_COURT": "Grille", "INFO_GRILLE_TITRE": "Perte de charge, grille de prise d'eau", + "INFO_JET_DESCRIPTION": "", "INFO_JET_TITRE_COURT": "Jet", "INFO_JET_TITRE": "Trajectoire et impact d'un jet", "INFO_WALL_ADDED": "1 cloison ajoutée", @@ -221,6 +229,7 @@ "INFO_JET_TITRE_TRAJECTOIRE": "Trajectoire", "INFO_JET_TITRE_TRAJECTOIRE_ET_COTE_EAU": "Trajectoire et cote de l'eau", "INFO_JET_FOND": "Fond", + "INFO_LECHAPTCALMON_DESCRIPTION": "", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", "INFO_LIB_ABSCISSE": "Abscisse (m)", @@ -376,16 +385,19 @@ "INFO_LINKED_VALUE_SECTION": "%s (%s, section)", "INFO_LOG_HIDE_DETAILS": "masquer les details", "INFO_LOG_SHOW_DETAILS": "montrer les details", + "INFO_MACRORUGO_DESCRIPTION": "", "INFO_MACRORUGO_TITRE_COURT": "Macro-rugo.", "INFO_MACRORUGO_TITRE": "Passe à macro-rugosités", "INFO_MENU_DIAGRAM_TITLE": "Diagramme des modules", "INFO_MACRORUGOCOMPOUND_TITRE": "Passe à macro-rugosités complexe", + "INFO_MACRORUGOCOMPOUND_DESCRIPTION": "", "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "M-Rugo complexe", "INFO_MACRORUGOCOMPOUND_LINCL": "Dévers latéral (m/m) :", "INFO_ONLY_Q_MAY_VARY": "Seul le débit peut varier", "INFO_ONLY_Z1_Q_MAY_VARY": "Seuls la cote amont et le débit peuvent varier", "INFO_Z1_Z2_MUST_BE_DEFINED": "Les cotes amont et aval doivent être définies", "INFO_PENTE_TITRE": "Pente", + "INFO_PENTE_DESCRIPTION": "", "INFO_PENTE_TITRE_COURT": "Pente", "INFO_MENU_EMPTY_SESSION_TITLE": "Nouvelle session", "INFO_MENU_HELP_TITLE": "Aide", @@ -433,23 +445,31 @@ "INFO_PAB_LOIDEBIT_VANLEVVILLEMONTE": "Échancrure régulée (Villemonte)", "INFO_PAB_LOIDEBIT_WEIRVILLEMONTE": "Échancrure (Villemonte)", "INFO_PARAMETRES_FIXES": "Tous les paramètres doivent être fixés", + "INFO_PAB_DESCRIPTION": "", "INFO_PAB_TITRE_COURT": "PAB", "INFO_PAB_TITRE": "Passe à bassins", "INFO_PAB_TITRE_PROFIL": "Profil en long de la passe", "INFO_PAB_TABLE": "Géométrie de la passe", + "INFO_PABCHUTE_DESCRIPTION": "", "INFO_PABCHUTE_TITRE_COURT": "PAB : chute", "INFO_PABCHUTE_TITRE": "Passe à bassins : chute", + "INFO_PABDIMENSIONS_DESCRIPTION": "", "INFO_PABDIMENSIONS_TITRE_COURT": "PAB : dimensions", "INFO_PABDIMENSIONS_TITRE": "Passe à bassins : dimensions", + "INFO_PABNOMBRE_DESCRIPTION": "", "INFO_PABNOMBRE_TITRE_COURT": "PAB : nombre", "INFO_PABNOMBRE_TITRE": "Passe à bassins : nombre de chutes", + "INFO_PABPUISSANCE_DESCRIPTION": "", "INFO_PABPUISSANCE_TITRE_COURT": "PAB : puissance", "INFO_PABPUISSANCE_TITRE": "Passe à bassins : puissance dissipée", + "INFO_PARALLELSTRUCTURE_DESCRIPTION": "", "INFO_PARALLELSTRUCTURE_TITRE_COURT": "Ouvrages", "INFO_PARALLELSTRUCTURE_TITRE": "Lois d'ouvrages", "INFO_PAR_TITRE": "Passe à ralentisseurs : calage", + "INFO_PAR_DESCRIPTION": "", "INFO_PAR_TITRE_COURT": "PAR : calage", "INFO_PARSIMULATION_TITRE": "Passe à ralentisseurs : simulation", + "INFO_PARSIMULATION_DESCRIPTION": "", "INFO_PARSIMULATION_TITRE_COURT": "PAR : simulation", "INFO_PARAMFIELD_AWAITING_CALCULATION": "En attente de calcul", "INFO_PARAMFIELD_BOUNDARY_CONDITIONS": "Conditions aux limites", @@ -493,6 +513,7 @@ "INFO_QUICKNAV_INPUT": "données", "INFO_QUICKNAV_RESULTS": "résultats", "WARNING_PROBLEMS_ENCOUNTERED": "Des problèmes sont survenus durant le calcul (info : %info%, avertissement : %warning%, erreur : %error%)", + "INFO_REGIMEUNIFORME_DESCRIPTION": "", "INFO_REGIMEUNIFORME_TITRE_COURT": "R. uniforme", "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme", "INFO_REMOUS_CALCUL_FLUVIAL": "Condition limite aval >= Hauteur critique : calcul de la partie fluviale à partir de l'aval", @@ -512,6 +533,8 @@ "INFO_REPORT_BUG_SUBJECT": "Rapport d'erreur", "INFO_REQUIRES": "dépend de", "INFO_RESULTS_EXPORT_AS_SPREADSHEET": "Exporter en XLSX", + "INFO_SEARCH_NO_RESULT": "Aucun résultat", + "INFO_SECTIONPARAMETREE_DESCRIPTION": "", "INFO_SECTIONPARAMETREE_TITRE_COURT": "Sec. param.", "INFO_SECTIONPARAMETREE_TITRE": "Section paramétrée", "INFO_SELECT_MULTIPLE_AND_OTHER": "autre", @@ -534,8 +557,10 @@ "INFO_SNACKBAR_RESULTS_INVALIDATED": "Résultats invalidés pour", "INFO_SNACKBAR_SETTINGS_SAVED": "Paramètres enregistrés sur cet appareil", "INFO_SOLVEUR_TITRE": "Solveur multimodule", + "INFO_SOLVEUR_DESCRIPTION": "", "INFO_SOLVEUR_TITRE_COURT": "Solveur", "INFO_SPP_TITRE": "Somme et produit de puissances", + "INFO_SPP_DESCRIPTION": "", "INFO_SPP_TITRE_COURT": "SPP", "INFO_THEME_CREDITS": "Crédit", "INFO_THEME_DEVALAISON_TITRE": "Dévalaison", @@ -571,8 +596,10 @@ "INFO_EXAMPLES_TITLE": "Exemples", "INFO_EXAMPLES_SUBTITLE": "Charger des exemples types", "INFO_YAXB_TITRE": "Fonction affine", + "INFO_YAXB_DESCRIPTION": "", "INFO_YAXB_TITRE_COURT": "F. affine", "INFO_TRIGO_TITRE": "Fonction trigonométrique", + "INFO_TRIGO_DESCRIPTION": "", "INFO_TRIGO_TITRE_COURT": "F. trigo.", "INFO_VERIF_OK": "Les critères de franchissement sont remplis pour toutes les espèces", "INFO_VERIF_VARYING_OK": "Les critères de franchissement sont remplis pour toutes les espèces et toutes les modalités de la passe", @@ -581,8 +608,10 @@ "INFO_VERIFICATEUR_CUSTOM_SPECIES": "Espèce personnalisée : %s", "INFO_VERIFICATEUR_SPECIES_GROUP": "Groupe d'espèces", "INFO_VERIFICATEUR_TITRE": "Vérification d'une passe", + "INFO_VERIFICATEUR_DESCRIPTION": "", "INFO_VERIFICATEUR_TITRE_COURT": "Vérification", "INFO_ESPECE_TITRE": "Caractéristiques d'une espèce", + "INFO_ESPECE_DESCRIPTION": "", "INFO_ESPECE_TITRE_COURT": "Espèce", "WARNING_WARNINGS_ABSTRACT": "%nb% avertissements rencontrés lors du calcul", "ERROR_JET_SUBMERGED_NO_SOLUTION": "Il n'y a pas de solution",