From ec38e267f2816e634ccad8a951987e724628481e Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Wed, 9 Mar 2022 14:49:21 +0100
Subject: [PATCH 1/6] =?UTF-8?q?Lecture=20du=20postHeader=20de=20la=20m?=
 =?UTF-8?q?=C3=AAme=20fa=C3=A7on=20qu'est=20lu=20le=20post=20header?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- pour pouvoir lire par exemple les unités ou les valeurs min et max des valeurs
---
 Documentation_fichier_Yaml.md                 | 12 +++
 .../InvalidDatasetContentException.java       | 13 ++-
 .../fr/inra/oresing/model/Configuration.java  | 10 ++
 .../fr/inra/oresing/rest/OreSiService.java    | 96 ++++++-------------
 .../inra/oresing/rest/OreSiResourcesTest.java |  2 +
 src/test/resources/data/acbb/acbb.yaml        | 55 +++++++++++
 .../resources/data/duplication/typezone.csv   |  6 +-
 .../data/duplication/typezoneduplique.csv     | 10 +-
 .../resources/data/duplication/zone_etude.csv |  6 +-
 .../zone_etude_dupliqu\303\251.csv"           |  8 +-
 .../duplication/zone_etude_missing_parent.csv |  8 +-
 ...eres-fou_4_swc_j_01-01-1999_31-01-1999.csv |  4 +-
 ui2/src/locales/en.json                       |  1 +
 ui2/src/locales/fr.json                       |  1 +
 ui2/src/services/ErrorsService.js             |  1 +
 15 files changed, 144 insertions(+), 89 deletions(-)

diff --git a/Documentation_fichier_Yaml.md b/Documentation_fichier_Yaml.md
index 62f46a8a9..48a9a0149 100644
--- a/Documentation_fichier_Yaml.md
+++ b/Documentation_fichier_Yaml.md
@@ -587,6 +587,18 @@ ici le contenu de la première ligne deuxième colonne est lié au varaible/comp
       firstRowLine: 2
 ```
 
+Si l'on veut faire référence à des lignes entre la ligne d'en-tête et la première ligne de données, on peut faire référence à la colonne par le nom de :l'en-tête de colonne plutôt que par le numméro de la colonne. En ce cas onn utilise le champs _headerName_.
+
+```yaml
+        - rowNumber: 11
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: max_value
+          exportHeader: "H2O_max"
+
+```
+
 *columns* est la partie dans laquelle nous décrirons toutes les colonnes et leurs types de données que nous attendons 
 dans chaque colonne du fichier CSV (pour l'exemple utilisé ici c'est pour les données du fichier nomDonnées.csv):
 
diff --git a/src/main/java/fr/inra/oresing/checker/InvalidDatasetContentException.java b/src/main/java/fr/inra/oresing/checker/InvalidDatasetContentException.java
index a730d3876..1d1871ef3 100644
--- a/src/main/java/fr/inra/oresing/checker/InvalidDatasetContentException.java
+++ b/src/main/java/fr/inra/oresing/checker/InvalidDatasetContentException.java
@@ -66,19 +66,28 @@ public class InvalidDatasetContentException extends OreSiTechnicalException {
     }
 
     public static void checkHeader(ImmutableSet<String> expectedColumns, ImmutableMultiset<String> actualColumns, int headerLine) {
+        if (actualColumns.contains("")) {
+            throw forEmptyHeader(headerLine);
+        }
         ImmutableSet<String> duplicatedHeaders = actualColumns.entrySet().stream()
                 .filter(column -> column.getCount() > 1)
                 .map(Multiset.Entry::getElement)
                 .collect(ImmutableSet.toImmutableSet());
         if (!duplicatedHeaders.isEmpty()) {
-            throw InvalidDatasetContentException.forDuplicatedHeaders(headerLine, duplicatedHeaders);
+            throw forDuplicatedHeaders(headerLine, duplicatedHeaders);
         }
         ImmutableSet<String> actualColumnsAsSet = actualColumns.elementSet();
         if (!expectedColumns.equals(actualColumnsAsSet)) {
-            throw InvalidDatasetContentException.forInvalidHeaders(expectedColumns, actualColumnsAsSet, headerLine);
+            throw forInvalidHeaders(expectedColumns, actualColumnsAsSet, headerLine);
         }
     }
 
+    private static InvalidDatasetContentException forEmptyHeader(int headerLine) {
+        return newInvalidDatasetContentException(headerLine, "emptyHeader", ImmutableMap.of(
+                "headerLine", headerLine
+        ));
+    }
+
     public static void checkErrorsIsEmpty(List<CsvRowValidationCheckResult> errors) {
         if (!errors.isEmpty()) {
             throw new InvalidDatasetContentException(errors);
diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java
index 083e7ea74..e19b87939 100644
--- a/src/main/java/fr/inra/oresing/model/Configuration.java
+++ b/src/main/java/fr/inra/oresing/model/Configuration.java
@@ -1,6 +1,7 @@
 package fr.inra.oresing.model;
 
 import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.MoreCollectors;
 import fr.inra.oresing.checker.*;
@@ -172,10 +173,19 @@ public class Configuration {
     public static class HeaderConstantDescription {
         int rowNumber;
         int columnNumber;
+        String headerName;
         VariableComponentKey boundTo;
         String exportHeader;
+
+        public int getColumnNumber(ImmutableList<String> headerRows ) {
+            if(headerName!=null && headerRows.contains(headerName)){
+                return headerRows.indexOf(headerName)+1;
+            }
+            return columnNumber;
+        }
     }
 
+
     @Getter
     @Setter
     @ToString
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java
index 4b74d5f77..02aa70d5d 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiService.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java
@@ -3,60 +3,16 @@ package fr.inra.oresing.rest;
 import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMultiset;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Maps;
-import com.google.common.collect.MoreCollectors;
-import com.google.common.collect.Ordering;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
+import com.google.common.collect.*;
 import com.google.common.primitives.Ints;
 import fr.inra.oresing.OreSiTechnicalException;
-import fr.inra.oresing.checker.CheckerFactory;
-import fr.inra.oresing.checker.DateLineChecker;
-import fr.inra.oresing.checker.FloatChecker;
-import fr.inra.oresing.checker.IntegerChecker;
-import fr.inra.oresing.checker.InvalidDatasetContentException;
-import fr.inra.oresing.checker.LineChecker;
-import fr.inra.oresing.checker.ReferenceLineChecker;
-import fr.inra.oresing.checker.ReferenceLineCheckerConfiguration;
+import fr.inra.oresing.checker.*;
 import fr.inra.oresing.groovy.CommonExpression;
 import fr.inra.oresing.groovy.Expression;
 import fr.inra.oresing.groovy.GroovyContextHelper;
 import fr.inra.oresing.groovy.StringGroovyExpression;
-import fr.inra.oresing.model.Application;
-import fr.inra.oresing.model.Authorization;
-import fr.inra.oresing.model.BinaryFile;
-import fr.inra.oresing.model.BinaryFileDataset;
-import fr.inra.oresing.model.Configuration;
-import fr.inra.oresing.model.Data;
-import fr.inra.oresing.model.Datum;
-import fr.inra.oresing.model.LocalDateTimeRange;
-import fr.inra.oresing.model.ReferenceColumn;
-import fr.inra.oresing.model.ReferenceColumnSingleValue;
-import fr.inra.oresing.model.ReferenceColumnValue;
-import fr.inra.oresing.model.ReferenceDatum;
-import fr.inra.oresing.model.ReferenceValue;
-import fr.inra.oresing.model.VariableComponentKey;
-import fr.inra.oresing.persistence.AuthenticationService;
-import fr.inra.oresing.persistence.BinaryFileInfos;
-import fr.inra.oresing.persistence.DataRepository;
-import fr.inra.oresing.persistence.DataRow;
-import fr.inra.oresing.persistence.Ltree;
-import fr.inra.oresing.persistence.OreSiRepository;
-import fr.inra.oresing.persistence.ReferenceValueRepository;
-import fr.inra.oresing.persistence.SqlPolicy;
-import fr.inra.oresing.persistence.SqlSchema;
-import fr.inra.oresing.persistence.SqlSchemaForApplication;
-import fr.inra.oresing.persistence.SqlService;
+import fr.inra.oresing.model.*;
+import fr.inra.oresing.persistence.*;
 import fr.inra.oresing.persistence.roles.OreSiRightOnApplicationRole;
 import fr.inra.oresing.persistence.roles.OreSiUserRole;
 import fr.inra.oresing.rest.validationcheckresults.DateValidationCheckResult;
@@ -92,19 +48,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -501,7 +445,7 @@ public class OreSiService {
             readPreHeader(formatDescription, constantValues, linesIterator);
 
             ImmutableList<String> columns = readHeaderRow(linesIterator);
-            readPostHeader(formatDescription, linesIterator);
+            readPostHeader(formatDescription, columns, constantValues, linesIterator);
 
             Stream<Data> dataStream = Streams.stream(csvParser)
                     .map(buildCsvRecordToLineAsMapFn(columns))
@@ -1013,9 +957,29 @@ public class OreSiService {
      * @param formatDescription
      * @param linesIterator
      */
-    private void readPostHeader(Configuration.FormatDescription formatDescription, Iterator<CSVRecord> linesIterator) {
-        int lineToSkipAfterHeader = formatDescription.getFirstRowLine() - formatDescription.getHeaderLine() - 1;
-        Iterators.advance(linesIterator, lineToSkipAfterHeader);
+    private void readPostHeader(Configuration.FormatDescription formatDescription,  ImmutableList<String> headerRow, Datum constantValues, Iterator<CSVRecord> linesIterator) {
+        ImmutableSetMultimap<Integer, Configuration.HeaderConstantDescription> perRowNumberConstants =
+                        formatDescription.getConstants().stream()
+                                .collect(ImmutableSetMultimap.toImmutableSetMultimap(
+                                        Configuration.HeaderConstantDescription::getRowNumber,
+                                        Function.identity()
+                                        )
+                                );
+
+
+        for (int lineNumber = formatDescription.getHeaderLine()+1; lineNumber < formatDescription.getFirstRowLine(); lineNumber++) {
+            CSVRecord row = linesIterator.next();
+            ImmutableSet<Configuration.HeaderConstantDescription> constantDescriptions = perRowNumberConstants.get(lineNumber);
+            constantDescriptions
+                    .stream()
+                    .forEach(constant -> {
+                int columnNumber = constant.getColumnNumber(headerRow);
+                String value = row.get(columnNumber - 1);
+                VariableComponentKey boundTo = constant.getBoundTo();
+                constantValues.put(boundTo, value);
+            });
+        }
+       // Iterators.advance(linesIterator, lineToSkipAfterHeader);
     }
 
     private ImmutableMap<VariableComponentKey, Expression<String>> getDefaultValueExpressions(Configuration.DataTypeDescription dataTypeDescription, Map<String, String> requiredAuthorizations) {
@@ -1332,4 +1296,4 @@ public class OreSiService {
         int lineNumber;
         List<Map.Entry<String, String>> columns;
     }
-}
+}
\ No newline at end of file
diff --git a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
index 05466322b..5b88098ae 100644
--- a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
+++ b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
@@ -739,6 +739,8 @@ public class OreSiResourcesTest {
                             .cookie(authCookie)
                             .accept(MediaType.APPLICATION_JSON))
                     .andExpect(status().isOk())
+                    .andExpect(jsonPath("$.rows[0].values.CO2.min_value", IsEqual.equalTo("300")))
+                    .andExpect(jsonPath("$.rows[0].values.CO2.max_value", IsEqual.equalTo("700")))
 //                    .andExpect(content().json(expectedJson))
                     .andReturn().getResponse().getContentAsString();
 
diff --git a/src/test/resources/data/acbb/acbb.yaml b/src/test/resources/data/acbb/acbb.yaml
index 6ac07a6c7..be952dfe9 100644
--- a/src/test/resources/data/acbb/acbb.yaml
+++ b/src/test/resources/data/acbb/acbb.yaml
@@ -123,6 +123,26 @@ compositeReferences:
         parentKeyColumn: "site"
 dataTypes:
   flux_tours:
+    validations:
+      check_CO2_value:
+        description: check value in range
+        checker:
+          name: GroovyExpression
+          params:
+            groovy:
+              expression: >
+                String stringValue = datum.CO2.value;
+                if(stringValue.equals("") || stringValue.equals("-9999")){
+                    return true;
+                }
+                    Float value = stringValue.equals("")?null:Float.parseFloat(stringValue);
+                Float minValue = datum.CO2.min_value.equals("")?null:Float.parseFloat(datum.CO2.min_value);
+                Float maxValue = datum.CO2.max_value.equals("")?null:Float.parseFloat(datum.CO2.max_value);
+                Boolean isValid = true;
+                isValid = minValue==null  || minValue<value;
+                isValid = isValid && (maxValue!=null || value<=maxValue);
+                return isValid
+
     data:
       site:
         components:
@@ -163,6 +183,12 @@ dataTypes:
               name: Reference
               params:
                 refType: unites
+          min_value:
+            checker:
+              name: Float
+          max_value:
+            checker:
+              name: Float
       H2O:
         components:
           value:
@@ -176,6 +202,12 @@ dataTypes:
               name: Reference
               params:
                 refType: unites
+          min_value:
+            checker:
+              name: Float
+          max_value:
+            checker:
+              name: Float
       ZL:
         components:
           value:
@@ -306,6 +338,29 @@ dataTypes:
             variable: parcelle
             component: name
           exportHeader: "Parcelle"
+        - rowNumber: 10
+          columnNumber: 3
+          boundTo:
+            variable: CO2
+            component: min_value
+          exportHeader: "CO2_min"
+        - rowNumber: 11
+          columnNumber: 3
+          boundTo:
+            variable: CO2
+            component: max_value
+        - rowNumber: 10
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: min_value
+          exportHeader: "H2O_min"
+        - rowNumber: 11
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: max_value
+          exportHeader: "H2O_max"
       headerLine: 8
       firstRowLine: 12
       columns:
diff --git a/src/test/resources/data/duplication/typezone.csv b/src/test/resources/data/duplication/typezone.csv
index 7372a66a4..d67c88579 100644
--- a/src/test/resources/data/duplication/typezone.csv
+++ b/src/test/resources/data/duplication/typezone.csv
@@ -1,3 +1,3 @@
-nom;
-zone1;
-zone2;
\ No newline at end of file
+nom
+zone1
+zone2
\ No newline at end of file
diff --git a/src/test/resources/data/duplication/typezoneduplique.csv b/src/test/resources/data/duplication/typezoneduplique.csv
index a9be259d5..511030a7b 100644
--- a/src/test/resources/data/duplication/typezoneduplique.csv
+++ b/src/test/resources/data/duplication/typezoneduplique.csv
@@ -1,5 +1,5 @@
-nom;
-zone10;
-zone20;
-zone20;
-zone30;
\ No newline at end of file
+nom
+zone10
+zone20
+zone20
+zone30
\ No newline at end of file
diff --git a/src/test/resources/data/duplication/zone_etude.csv b/src/test/resources/data/duplication/zone_etude.csv
index 10a42bca8..5386e8c93 100644
--- a/src/test/resources/data/duplication/zone_etude.csv
+++ b/src/test/resources/data/duplication/zone_etude.csv
@@ -1,3 +1,3 @@
-nom;parent;
-site1;;
-site2;site1;
\ No newline at end of file
+nom;parent
+site1;
+site2;site1
\ No newline at end of file
diff --git "a/src/test/resources/data/duplication/zone_etude_dupliqu\303\251.csv" "b/src/test/resources/data/duplication/zone_etude_dupliqu\303\251.csv"
index cc4f7bf7b..b9b9c9da4 100644
--- "a/src/test/resources/data/duplication/zone_etude_dupliqu\303\251.csv"
+++ "b/src/test/resources/data/duplication/zone_etude_dupliqu\303\251.csv"
@@ -1,4 +1,4 @@
-nom;parent;
-site1;;
-site2;site1;
-site1;;
\ No newline at end of file
+nom;parent
+site1;
+site2;site1
+site1;
\ No newline at end of file
diff --git a/src/test/resources/data/duplication/zone_etude_missing_parent.csv b/src/test/resources/data/duplication/zone_etude_missing_parent.csv
index b0bdde17e..e0e28fc50 100644
--- a/src/test/resources/data/duplication/zone_etude_missing_parent.csv
+++ b/src/test/resources/data/duplication/zone_etude_missing_parent.csv
@@ -1,4 +1,4 @@
-nom;parent;
-site1;;
-site1;site3;
-site2;site1;
\ No newline at end of file
+nom;parent
+site1;
+site1;site3
+site2;site1
\ No newline at end of file
diff --git a/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv b/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
index bcd1bf33d..a7f6bf367 100644
--- a/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
+++ b/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
@@ -9,7 +9,7 @@ numero de repetition max : ;6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Date;SWC_1_10;SWC_2_10;SWC_3_10;SWC_4_10;SWC_1_30;SWC_2_30;SWC_3_30;SWC_4_30;SWC_1_55;SWC_2_55;SWC_3_55;SWC_4_55;SWC_1_80;SWC_2_80;SWC_3_80;SWC_4_80;SWC_5_80;SWC_6_80;SWC_1_120;SWC_2_120;SWC_3_120;SWC_4_120;SWC_5_120;SWC_6_120;SWC_1_160;SWC_2_160;SWC_3_160;SWC_4_160;SWC_1_200;SWC_2_200;SWC_3_200;SWC_4_200;SWC_1_250;SWC_2_250;SWC_3_250
 min :  ;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- max : ;1000;2000;3000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+max : ;1000;2000;3000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 01/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
 02/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
 03/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
@@ -40,4 +40,4 @@ min :  ;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 28/01/1999;42;34;38;47;32;37;-9999;39;45;40;44;40;46;45;38;42;39;40;47;47;38;49;44;38;41;46;45;40;41;46;41;51;50;47;-9999
 29/01/1999;42;34;37;47;31;38;-9999;39;45;40;44;40;47;45;38;42;39;40;48;48;37;43;45;38;42;46;45;40;42;46;41;52;50;47;-9999
 30/01/1999;41;34;37;47;31;38;-9999;39;44;40;44;40;47;45;38;41;39;40;48;47;35;42;45;38;41;44;45;40;41;45;41;52;49;46;-9999
-31/01/1999;41;33;37;47;31;37;-9999;39;44;39;44;40;46;45;38;41;39;40;48;47;35;42;43;38;41;44;45;40;41;45;41;53;49;45;-9999
+31/01/1999;41;33;37;47;31;37;-9999;39;44;39;44;40;46;45;38;41;39;40;48;47;35;42;43;38;41;44;45;40;41;45;41;53;49;45;-9999
\ No newline at end of file
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index 408436409..cc7ee38a6 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -142,6 +142,7 @@
         "headerColumnPatternNotMatching":"Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
         "unexpectedTokenCount":"Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
         "invalidHeaders":"Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
+        "emptyHeader": "The file contains a column with an empty header",
         "duplicatedHeaders":"These headers are duplicated : <code>{duplicatedHeaders}</code>",
         "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
         "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>." ,
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 48ea91b1b..8967d3273 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -142,6 +142,7 @@
         "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
         "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
         "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
+        "emptyHeader": "Le fichier contient un en-tête de colonne vide",
         "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
         "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
         "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
diff --git a/ui2/src/services/ErrorsService.js b/ui2/src/services/ErrorsService.js
index 7928e9828..2952265eb 100644
--- a/ui2/src/services/ErrorsService.js
+++ b/ui2/src/services/ErrorsService.js
@@ -29,6 +29,7 @@ const ERRORS = {
   headerColumnPatternNotMatching :(params) => i18n.t("errors.headerColumnPatternNotMatching", params),
   unexpectedTokenCount : (params) => i18n.t("errors.unexpectedTokenCount", params),
   invalidHeaders : (params) => i18n.t("errors.invalidHeaders", params),
+  emptyHeader : (params) => i18n.t("errors.emptyHeader", params),
   duplicatedHeaders : (params) => i18n.t("errors.duplicatedHeaders", params),
   patternNotMatched : (params) => i18n.t("errors.patternNotMatched", params),
   invalidDate : (params) => i18n.t("errors.invalidDate", params),
-- 
GitLab


From 938c2591a6a38ad2b2512eae02caeb6c3c8dacba Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Tue, 15 Mar 2022 11:44:52 +0100
Subject: [PATCH 2/6] Correction d'un yaml en erreur et ajout de tests sur la
 section

---
 .../rest/ApplicationConfigurationService.java |  41 +-
 .../rest/ConfigurationParsingResult.java      |  57 +-
 .../ApplicationConfigurationServiceTest.java  |   2 +-
 src/test/resources/data/acbb/acbb.yaml        |   1 +
 .../resources/data/validation/fake-app.yaml   |   4 +-
 ui2/src/locales/en.json                       | 509 +++++++++---------
 ui2/src/locales/fr.json                       | 507 ++++++++---------
 7 files changed, 608 insertions(+), 513 deletions(-)

diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
index 98b3a1a15..5fe245960 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
@@ -202,7 +202,7 @@ public class ApplicationConfigurationService {
             verifyDatatypeDataGroupsContainsExistingVariables(builder, dataTypeDescription, variables, variableOccurrencesInDataGroups);
 
             verifyDatatypeBindingToExistingVariableComponent(builder, variables, variableOccurrencesInDataGroups);
-            verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, variables);
+            verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, dataType, variables);
         }
         configuration.setRequiredAuthorizationsAttributes(List.copyOf(requiredAuthorizationsAttributesBuilder.build()));
 
@@ -267,8 +267,11 @@ public class ApplicationConfigurationService {
         }
     }
 
-    private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Configuration.DataTypeDescription dataTypeDescription, Set<String> variables) {
-        for (Configuration.ColumnBindingDescription columnBindingDescription : dataTypeDescription.getFormat().getColumns()) {
+    private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Configuration.DataTypeDescription dataTypeDescription, String dataType, Set<String> variables) {
+
+        final Configuration.FormatDescription format = dataTypeDescription.getFormat();
+        verifyFormatDescriptionIsValid(builder, format, dataType);
+        for (Configuration.ColumnBindingDescription columnBindingDescription : format.getColumns()) {
             VariableComponentKey boundTo = columnBindingDescription.getBoundTo();
             String variable = boundTo.getVariable();
             if (variables.contains(variable)) {
@@ -285,6 +288,38 @@ public class ApplicationConfigurationService {
         }
     }
 
+    private void verifyFormatDescriptionIsValid(ConfigurationParsingResult.Builder builder, Configuration.FormatDescription format, String dataType) {
+        format.getConstants()
+                .forEach(headerConstantDescription -> {
+                    final int columnNumber = headerConstantDescription.getColumnNumber();
+                    final String headerName = headerConstantDescription.getHeaderName();
+                    final int rowNumber = headerConstantDescription.getRowNumber();
+                    final int headerLine = format.getHeaderLine();
+                    if(rowNumber== headerLine){
+                        builder.recordCsvSameHeaderLineAndFirstRowLineForConstantDescription(dataType);
+                    }
+                    final int firstRowLine = format.getFirstRowLine();
+                    if(rowNumber>= firstRowLine){
+                        builder.recordCsvTooBigRowLineForConstantDescription(dataType);
+                    }
+                    if(rowNumber<1){
+                        builder.recordCsvTooLittleRowLineForConstantDescription(dataType);
+                    }
+                    if(rowNumber< headerLine && rowNumber<1){
+                        builder.recordCsvMissingRowLineForConstantDescription(dataType);
+                    }else if (rowNumber >headerLine && columnNumber<1  && headerName == null) {
+                        builder.recordCsvMissingColumnNumberOrHeaderNameForConstantDescription(dataType);
+                    } else {
+                        final VariableComponentKey boundTo = headerConstantDescription.getBoundTo();
+                        if(boundTo ==null){
+                            builder.recordCsvMissingBoundToForConstantDescription(dataType);
+                        }else if (headerConstantDescription.getExportHeader() == null) {
+                            builder.recordCsvMissingExportHeaderNameForConstantDescription(dataType);
+                        }
+                    }
+                });
+    }
+
     private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Set<String> variables, Multiset<String> variableOccurrencesInDataGroups) {
         variables.forEach(variable -> {
             int count = variableOccurrencesInDataGroups.count(variable);
diff --git a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
index 8d5cf59e9..cd8d43fc2 100644
--- a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
+++ b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
@@ -9,7 +9,10 @@ import fr.inra.oresing.rest.validationcheckresults.DefaultValidationCheckResult;
 import lombok.Value;
 
 import javax.annotation.Nullable;
-import java.util.*;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
 @Value
 public class ConfigurationParsingResult {
@@ -19,6 +22,10 @@ public class ConfigurationParsingResult {
     @Nullable
     Configuration result;
 
+    public static Builder builder() {
+        return new Builder();
+    }
+
     public boolean isValid() {
         return getValidationCheckResults().stream().allMatch(ValidationCheckResult::isSuccess);
     }
@@ -28,14 +35,10 @@ public class ConfigurationParsingResult {
         return result;
     }
 
-    public static Builder builder() {
-        return new Builder();
-    }
-    
     public static class Builder {
 
         private final List<ValidationCheckResult> validationCheckResults = new LinkedList<>();
-        
+
         public Builder recordError(String message) {
             return recordError(message, ImmutableMap.of());
         }
@@ -370,5 +373,47 @@ public class ConfigurationParsingResult {
                     "reference", reference)
             );
         }
+
+        public Builder recordCsvSameHeaderLineAndFirstRowLineForConstantDescription(String dataType) {
+            return recordError("sameHeaderLineAndFirstRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvTooBigRowLineForConstantDescription(String dataType) {
+            return recordError("tooBigRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvTooLittleRowLineForConstantDescription(String dataType) {
+            return recordError("tooLittleRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingRowLineForConstantDescription(String dataType) {
+            return recordError("missingRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingColumnNumberOrHeaderNameForConstantDescription(String dataType) {
+            return recordError("missingColumnNumberOrHeaderNameForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingBoundToForConstantDescription(String dataType) {
+            return recordError("missingBoundToForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingExportHeaderNameForConstantDescription(String dataType) {
+            return recordError("missinExportHeaderNameForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
     }
 }
\ No newline at end of file
diff --git a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
index f339d17e5..e6380d50b 100644
--- a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
+++ b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
@@ -352,7 +352,7 @@ public class ApplicationConfigurationServiceTest {
 
     @Test
     public void testInvalidFormat() {
-        ConfigurationParsingResult configurationParsingResult = parseYaml("firstRowLine: 2", "firstRowLine: pas_un_chiffre");
+        ConfigurationParsingResult configurationParsingResult = parseYaml("firstRowLine: 3", "firstRowLine: pas_un_chiffre");
         Assert.assertFalse(configurationParsingResult.isValid());
         ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults());
         log.debug(onlyError.getMessage());
diff --git a/src/test/resources/data/acbb/acbb.yaml b/src/test/resources/data/acbb/acbb.yaml
index be952dfe9..914b6522c 100644
--- a/src/test/resources/data/acbb/acbb.yaml
+++ b/src/test/resources/data/acbb/acbb.yaml
@@ -349,6 +349,7 @@ dataTypes:
           boundTo:
             variable: CO2
             component: max_value
+          exportHeader: "CO2_max"
         - rowNumber: 10
           headerName: H2O
           boundTo:
diff --git a/src/test/resources/data/validation/fake-app.yaml b/src/test/resources/data/validation/fake-app.yaml
index 208988dd0..1e3b8a3a7 100644
--- a/src/test/resources/data/validation/fake-app.yaml
+++ b/src/test/resources/data/validation/fake-app.yaml
@@ -152,8 +152,8 @@ dataTypes:
             variable: localization
             component: site
           exportHeader: "Site"
-      headerLine: 1
-      firstRowLine: 2
+      headerLine: 2
+      firstRowLine: 3
       columns:
         - header: "typeSite"
           boundTo:
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index cc7ee38a6..e20b39785 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -1,252 +1,259 @@
 {
-    "titles":{
-        "login-page":"Welcome to SI-ORE",
-        "applications-page":"My applications",
-        "references-page":"{applicationName} references",
-        "references-data":"{refName} data",
-        "application-creation":"Application creation",
-        "data-types-page":"{applicationName} data types",
-        "data-types-repository": "Management of data sets {applicationName}",
-        "data-type-authorizations":"{dataType} authorizations",
-        "data-type-new-authorization":"New authorization for {dataType}"
-    },
-    "login":{
-        "signin":"Sign in",
-        "signup":"Sign up",
-        "login":"Login",
-        "login-placeholder":"Ex: michel",
-        "pwd":"Password",
-        "pwd-placeholder":"Ex: xxxx",
-        "pwd-forgotten":"Forgotten password ? ",
-        "register":"Register",
-        "confirm-pwd":"Confirmer le mot de passe",
-        "aria-btn-login": "Validate login form button",
-        "aria-btn-signup": "Create an account button"
-    },
-    "validation":{
-        "obligatoire":"Mandatory",
-        "facultatif":"Optional",
-        "invalid-required":"Please fill the field",
-        "invalid-application-name":"The name must only includes lowercase letters.",
-        "invalid-application-name-length":"The name's length should be between 4 and 20 characters.",
-        "invalid-confirmed":"Fields don't match."
-    },
-    "alert":{
-        "cancel":"Cancel",
-        "server-error":"A server error occured",
-        "server-error-appli-exist": "This application's name exist",
-        "user-unknown":"Unknown user",
-        "application-creation-success":"The app has been created!",
-        "application-validate-success":"The YAML file is valid!",
-        "application-edit-success": "The YAML file is update !",
-        "warning":"Warning !",
-        "reference-deletion-msg":"You're about to delete the reference : {label}. Are you sure ?",
-        "delete":"Delete",
-        "reference-csv-upload-error":"An error occured while uploading the csv file",
-        "reference-updated":"Reference updated",
-        "data-updated":"Data type updated",
-        "registered-user":"User registered",
-        "revoke-authorization":"Authorization revoked",
-        "create-authorization":"Authorization created",
-        "dataTypeFiltreEmpty" : "No data matching your criteria"
-    },
-    "message":{
-        "app-config-error":"Error in yaml file",
-        "close":"Close message",
-        "data-type-config-error":"Error in csv file"
-    },
-    "menu":{
-        "logout":"Log out",
-        "applications":"Applications",
-        "references":"References",
-        "french":"Français",
-        "english":"English",
-        "language":"Language",
-        "aria-sub-menu": "Access path",
-        "aria-nav-bar": "Main menu",
-        "aria-pagination": "Pagination",
-        "aria-curent-page": "Curent page",
-        "aria-next-page": "Next page",
-        "aria-previous-page": "Previous page"
-    },
-    "applications":{
-        "chose-config":"Chose a configuration",
-        "create":"Create application",
-        "comment": "Comment : ",
-        "no-comment": "No comment",
-        "test":"Test",
-        "name":"Application name",
-        "name-placeholder":"Ex : olac",
-        "creation-date":"Creation date",
-        "actions":"Actions",
-        "references":"References",
-        "dataset":"Data types",
-        "trier":"Sort by",
-        "trierA_z":"Name A - z",
-        "trierZ_a":"Name Z - a",
-        "trierRecent":"Recent date",
-        "filter":"Filter by",
-        "change": "Edit app",
-        "version" : "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
-    },
-    "errors":{
-        "emptyFile":"File is empty",
-        "missingReferenceForChecker":"For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
-        "missingReferenceForCheckerInReference":"For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
-        "unknownReferenceForChecker":"For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-        "unknownReferenceForCheckerInReference":"For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-        "unsupportedVersion":"YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
-        "undeclaredDataGroupForVariable":"Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
-        "variableInMultipleDataGroup":"Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
-        "unknownVariablesInDataGroup":"Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
-        "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>" ,
-        "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
-        "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
-        "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
-        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
-        "missingTimeScopeVariableComponentKey":"Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
-        "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
-        "timeScopeVariableComponentKeyMissingVariable":"Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
-        "timeScopeVariableComponentKeyUnknownVariable":"<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
-        "timeVariableComponentKeyMissingComponent":"Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
-        "timeVariableComponentKeyUnknownComponent":"<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
-        "timeScopeVariableComponentWrongChecker":"The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
-        "timeScopeVariableComponentPatternUnknown":"The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
-        "missingAuthorizationForDatatype":"The authorization section must be present in the description of the <code> {datatype} </code> data type",
-        "missingAuthorizationScopeVariableComponentKey":"You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
-        "authorizationScopeVariableComponentKeyMissingVariable":"You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
-        "authorizationScopeVariableComponentKeyUnknownVariable":"<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
-        "authorizationVariableComponentKeyMissingComponent":"You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
-        "authorizationVariableComponentKeyUnknownComponent":"<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
-        "authorizationScopeVariableComponentWrongChecker":"The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
-        "authorizationScopeVariableComponentReftypeUnknown":"The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
-        "authorizationScopeVariableComponentReftypeNull":"No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
-        "unrecognizedProperty ":" Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
-        "unrecognizedProperty":"Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
-        "invalidFormat":"Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
-        "missingRequiredExpression":"For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
-        "illegalGroovyExpression":"For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-        "unknownCheckerName":"For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
-        "unknownCheckerNameForVariableComponentCheckerInReference":"In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
-        "csvBoundToUnknownVariable":"In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
-        "unknownCheckerNameForVariableComponent":"In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
-        "missingColumnReferenceForCheckerInReference":"In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
-        "missingParamColumnReferenceForCheckerInReference":"In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
-        "csvBoundToUnknownVariableComponent":"In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
-        "invalidKeyColumns":"In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
-        "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
-        "invalidInternationalizedColumns":"In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-        "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-        "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
-        "unexpectedHeaderColumn":"Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
-        "headerColumnPatternNotMatching":"Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
-        "unexpectedTokenCount":"Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
-        "invalidHeaders":"Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
-        "emptyHeader": "The file contains a column with an empty header",
-        "duplicatedHeaders":"These headers are duplicated : <code>{duplicatedHeaders}</code>",
-        "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-        "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>." ,
-        "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-        "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>." ,
-        "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-        "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-        "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-        "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-        "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
-        "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
-        "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
-        "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
-        "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
-        "timerangeoutofinterval":"The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
-        "badauthorizationscopeforrepository":"Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
-        "overlappingpublishedversion":"There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
-        "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
-        "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
-        "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}"
-    },
-    "referencesManagement":{
-        "actions":"Actions",
-        "consult":"Consult",
-        "download":"Download",
-        "delete":"Delete",
-        "references":"References",
-        "data":"Data"
-    },
-    "dataTypesManagement": {
-        "data-types": "Data types",
-        "consult-authorization": "Consult authorizations",
-        "réinitialiser": "Reset",
-        "all": "all",
-        "filtre": "filter",
-        "tri": "sort",
-        "ASC": "ASC",
-        "DESC": "DESC",
-        "validate": "Validate",
-        "filtered": "Filters used",
-        "sorted": "The sorts used",
-        "title-modal-numeric": "Choice of value range",
-        "title-modal-date": "Choice of date range",
-        "manage-datasets": "Manage datasets"
-    },
-    "dataTypesRepository":  {
-        "card-title-upload-file": "Drop a version on this dataset",
-        "start-date": "Start date",
-        "end-date": "End date",
-        "comment": "Comment",
-        "choose-file": "Choose a file",
-        "placeholder-datepicker": "Type or select a date...",
-        "placeholder-select": "Select...",
-        "submit": "Submit",
-        "list-file-data": "List of datasets on this repository",
-        "list-file-data-period": "List of versions for the period",
-        "table-file-data-id": "ID",
-        "table-file-data-size": "Size",
-        "table-file-data-create": "Create",
-        "table-file-data-create-by": "Create by :",
-        "table-file-data-publish": "Publish",
-        "table-file-data-publish-by": "Publish by :",
-        "table-file-data-publication": "Publication",
-        "table-file-data-delete": "Delete",
-        "table-file-data-period": "Period"
-    },
-    "dataTypeAuthorizations": {
-        "add-auhtorization": "Add an authorization",
-        "sub-menu-data-type-authorizations": "{dataType} authorizations",
-        "sub-menu-new-authorization": "new authorization",
-        "users": "Users",
-        "name": "Name",
-        "roles": "Roles",
-        "users-placeholder": "Chose users to authorize",
-        "data-groups": "Data groups",
-        "data-groups-placeholder": "Chose data groups to authorize",
-        "authorization-scopes": "Authorization scopes",
-        "period": "Authorization period",
-        "from-date": "From date : ",
-        "to-date": "To date : ",
-        "from-date-to-date": "From date to date : ",
-        "always": "Always",
-        "to": "to",
-        "from": "from",
-        "create": "Create authorization",
-        "user": "User",
-        "data-group": "Data group",
-        "data-type": "Data type",
-        "actions": "Actions",
-        "revoke": "Revoke"
-    },
-    "ponctuation": {
-        "semicolon" : ";",
-        "comma" : ",",
-        "period": ".",
-        "colon" : ":",
-        "hyphen" : "-",
-        "plus" : "+",
-        "less" :"<",
-        "greater" : ">",
-        "arrow-right": "->",
-        "arrow-left": "<-",
-        "slash": "/",
-        "regEx": ".*",
-        "star": "*"
-    }
-}
+  "titles": {
+    "login-page": "Welcome to SI-ORE",
+    "applications-page": "My applications",
+    "references-page": "{applicationName} references",
+    "references-data": "{refName} data",
+    "application-creation": "Application creation",
+    "data-types-page": "{applicationName} data types",
+    "data-types-repository": "Management of data sets {applicationName}",
+    "data-type-authorizations": "{dataType} authorizations",
+    "data-type-new-authorization": "New authorization for {dataType}"
+  },
+  "login": {
+    "signin": "Sign in",
+    "signup": "Sign up",
+    "login": "Login",
+    "login-placeholder": "Ex: michel",
+    "pwd": "Password",
+    "pwd-placeholder": "Ex: xxxx",
+    "pwd-forgotten": "Forgotten password ? ",
+    "register": "Register",
+    "confirm-pwd": "Confirmer le mot de passe",
+    "aria-btn-login": "Validate login form button",
+    "aria-btn-signup": "Create an account button"
+  },
+  "validation": {
+    "obligatoire": "Mandatory",
+    "facultatif": "Optional",
+    "invalid-required": "Please fill the field",
+    "invalid-application-name": "The name must only includes lowercase letters.",
+    "invalid-application-name-length": "The name's length should be between 4 and 20 characters.",
+    "invalid-confirmed": "Fields don't match."
+  },
+  "alert": {
+    "cancel": "Cancel",
+    "server-error": "A server error occured",
+    "server-error-appli-exist": "This application's name exist",
+    "user-unknown": "Unknown user",
+    "application-creation-success": "The app has been created!",
+    "application-validate-success": "The YAML file is valid!",
+    "application-edit-success": "The YAML file is update !",
+    "warning": "Warning !",
+    "reference-deletion-msg": "You're about to delete the reference : {label}. Are you sure ?",
+    "delete": "Delete",
+    "reference-csv-upload-error": "An error occured while uploading the csv file",
+    "reference-updated": "Reference updated",
+    "data-updated": "Data type updated",
+    "registered-user": "User registered",
+    "revoke-authorization": "Authorization revoked",
+    "create-authorization": "Authorization created",
+    "dataTypeFiltreEmpty": "No data matching your criteria"
+  },
+  "message": {
+    "app-config-error": "Error in yaml file",
+    "close": "Close message",
+    "data-type-config-error": "Error in csv file"
+  },
+  "menu": {
+    "logout": "Log out",
+    "applications": "Applications",
+    "references": "References",
+    "french": "Français",
+    "english": "English",
+    "language": "Language",
+    "aria-sub-menu": "Access path",
+    "aria-nav-bar": "Main menu",
+    "aria-pagination": "Pagination",
+    "aria-curent-page": "Curent page",
+    "aria-next-page": "Next page",
+    "aria-previous-page": "Previous page"
+  },
+  "applications": {
+    "chose-config": "Chose a configuration",
+    "create": "Create application",
+    "comment": "Comment : ",
+    "no-comment": "No comment",
+    "test": "Test",
+    "name": "Application name",
+    "name-placeholder": "Ex : olac",
+    "creation-date": "Creation date",
+    "actions": "Actions",
+    "references": "References",
+    "dataset": "Data types",
+    "trier": "Sort by",
+    "trierA_z": "Name A - z",
+    "trierZ_a": "Name Z - a",
+    "trierRecent": "Recent date",
+    "filter": "Filter by",
+    "change": "Edit app",
+    "version": "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
+  },
+  "errors": {
+    "emptyFile": "File is empty",
+    "missingReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
+    "missingReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
+    "unknownReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+    "unknownReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+    "unsupportedVersion": "YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
+    "undeclaredDataGroupForVariable": "Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
+    "variableInMultipleDataGroup": "Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
+    "unknownVariablesInDataGroup": "Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
+    "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>",
+    "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
+    "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
+    "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
+    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
+    "missingTimeScopeVariableComponentKey": "Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
+    "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
+    "timeScopeVariableComponentKeyMissingVariable": "Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
+    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
+    "timeVariableComponentKeyMissingComponent": "Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
+    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
+    "timeScopeVariableComponentWrongChecker": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
+    "timeScopeVariableComponentPatternUnknown": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
+    "missingAuthorizationForDatatype": "The authorization section must be present in the description of the <code> {datatype} </code> data type",
+    "missingAuthorizationScopeVariableComponentKey": "You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
+    "authorizationScopeVariableComponentKeyMissingVariable": "You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
+    "authorizationScopeVariableComponentKeyUnknownVariable": "<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
+    "authorizationVariableComponentKeyMissingComponent": "You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
+    "authorizationVariableComponentKeyUnknownComponent": "<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
+    "authorizationScopeVariableComponentWrongChecker": "The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
+    "authorizationScopeVariableComponentReftypeUnknown": "The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
+    "authorizationScopeVariableComponentReftypeNull": "No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
+    "unrecognizedProperty ": " Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
+    "unrecognizedProperty": "Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
+    "invalidFormat": "Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
+    "missingRequiredExpression": "For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
+    "illegalGroovyExpression": "For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+    "unknownCheckerName": "For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
+    "unknownCheckerNameForVariableComponentCheckerInReference": "In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
+    "csvBoundToUnknownVariable": "In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
+    "unknownCheckerNameForVariableComponent": "In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
+    "missingColumnReferenceForCheckerInReference": "In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
+    "missingParamColumnReferenceForCheckerInReference": "In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
+    "csvBoundToUnknownVariableComponent": "In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
+    "invalidKeyColumns": "In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
+    "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
+    "invalidInternationalizedColumns": "In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+    "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+    "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
+    "unexpectedHeaderColumn": "Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
+    "headerColumnPatternNotMatching": "Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
+    "unexpectedTokenCount": "Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
+    "invalidHeaders": "Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
+    "emptyHeader": "The file contains a column with an empty header",
+    "duplicatedHeaders": "These headers are duplicated : <code>{duplicatedHeaders}</code>",
+    "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+    "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+    "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+    "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+    "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+    "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+    "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+    "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+    "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
+    "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
+    "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
+    "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
+    "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
+    "timerangeoutofinterval": "The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
+    "badauthorizationscopeforrepository": "Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
+    "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
+    "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
+    "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
+    "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
+    "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
+    "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
+    "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
+    "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
+    "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
+  },
+  "referencesManagement": {
+    "actions": "Actions",
+    "consult": "Consult",
+    "download": "Download",
+    "delete": "Delete",
+    "references": "References",
+    "data": "Data"
+  },
+  "dataTypesManagement": {
+    "data-types": "Data types",
+    "consult-authorization": "Consult authorizations",
+    "réinitialiser": "Reset",
+    "all": "all",
+    "filtre": "filter",
+    "tri": "sort",
+    "ASC": "ASC",
+    "DESC": "DESC",
+    "validate": "Validate",
+    "filtered": "Filters used",
+    "sorted": "The sorts used",
+    "title-modal-numeric": "Choice of value range",
+    "title-modal-date": "Choice of date range",
+    "manage-datasets": "Manage datasets"
+  },
+  "dataTypesRepository": {
+    "card-title-upload-file": "Drop a version on this dataset",
+    "start-date": "Start date",
+    "end-date": "End date",
+    "comment": "Comment",
+    "choose-file": "Choose a file",
+    "placeholder-datepicker": "Type or select a date...",
+    "placeholder-select": "Select...",
+    "submit": "Submit",
+    "list-file-data": "List of datasets on this repository",
+    "list-file-data-period": "List of versions for the period",
+    "table-file-data-id": "ID",
+    "table-file-data-size": "Size",
+    "table-file-data-create": "Create",
+    "table-file-data-create-by": "Create by :",
+    "table-file-data-publish": "Publish",
+    "table-file-data-publish-by": "Publish by :",
+    "table-file-data-publication": "Publication",
+    "table-file-data-delete": "Delete",
+    "table-file-data-period": "Period"
+  },
+  "dataTypeAuthorizations": {
+    "add-auhtorization": "Add an authorization",
+    "sub-menu-data-type-authorizations": "{dataType} authorizations",
+    "sub-menu-new-authorization": "new authorization",
+    "users": "Users",
+    "name": "Name",
+    "roles": "Roles",
+    "users-placeholder": "Chose users to authorize",
+    "data-groups": "Data groups",
+    "data-groups-placeholder": "Chose data groups to authorize",
+    "authorization-scopes": "Authorization scopes",
+    "period": "Authorization period",
+    "from-date": "From date : ",
+    "to-date": "To date : ",
+    "from-date-to-date": "From date to date : ",
+    "always": "Always",
+    "to": "to",
+    "from": "from",
+    "create": "Create authorization",
+    "user": "User",
+    "data-group": "Data group",
+    "data-type": "Data type",
+    "actions": "Actions",
+    "revoke": "Revoke"
+  },
+  "ponctuation": {
+    "semicolon": ";",
+    "comma": ",",
+    "period": ".",
+    "colon": ":",
+    "hyphen": "-",
+    "plus": "+",
+    "less": "<",
+    "greater": ">",
+    "arrow-right": "->",
+    "arrow-left": "<-",
+    "slash": "/",
+    "regEx": ".*",
+    "star": "*"
+  }
+}
\ No newline at end of file
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 8967d3273..1d9759a41 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -1,251 +1,258 @@
 {
-    "titles": {
-        "login-page": "Bienvenue sur SI-ORE",
-        "applications-page": "Mes applications",
-        "references-page": "Référentiels de {applicationName}",
-        "references-data": "Données de {refName}",
-        "application-creation": "Créer une application",
-        "data-types-page": "Type de données de {applicationName}",
-        "data-types-repository": "Gestion des jeux de données de {applicationName}",
-        "data-type-authorizations": "Autorisations de {dataType}",
-        "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
-    },
-    "login": {
-        "signin": "Se connecter",
-        "signup": "Créer un compte",
-        "login": "Identifiant",
-        "login-placeholder": "Ex: michel",
-        "pwd": "Mot de passe",
-        "pwd-placeholder": "Ex: xxxx",
-        "pwd-forgotten": "Mot de passe oublié ?",
-        "register": "Créer un compte",
-        "confirm-pwd": "Confirmer le mot de passe",
-        "aria-btn-login": "Bouton valider le formulaire de connexion",
-        "aria-btn-signup": "Bouton création d'un compte"
-    },
-    "validation": {
-        "obligatoire": "Obligatoire",
-        "facultatif": "Facultatif",
-        "invalid-required": "Merci de remplir le champ",
-        "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
-        "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
-        "invalid-confirmed": "Les deux champs ne correspondent pas."
-    },
-    "alert": {
-        "cancel": "Annuler",
-        "server-error": "Une erreur serveur est survenue",
-        "server-error-appli-exist": "Ce nom d'application existe déjà",
-        "user-unknown": "Identifiants inconnus",
-        "application-creation-success": "L'application a été créée !",
-        "application-validate-success": "Le fichier YAML est valide !",
-        "application-edit-success": "Le fichier YAML est mis à jours !",
-        "warning": "Attention !",
-        "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
-        "delete": "Supprimer",
-        "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
-        "reference-updated": "Référentiel mis à jour",
-        "data-updated": "Type de donnée mis à jour",
-        "registered-user": "Compte utilisateur créé",
-        "revoke-authorization": "Autorisation révoquée",
-        "create-authorization": "Autorisation créée",
-        "dataTypeFiltreEmpty" : "Pas de données correspondant à vos critères"
-    },
-    "message": {
-        "app-config-error": "Erreur dans le fichier yaml",
-        "close": "Fermer le message",
-        "data-type-config-error": "Erreur dans le fichier csv"
-    },
-    "menu": {
-        "logout": "Se déconnecter",
-        "applications": "Applications",
-        "references": "Référentiels",
-        "french": "Français",
-        "english": "English",
-        "language": "Langue",
-        "aria-sub-menu": "Chemin d'acces",
-        "aria-nav-bar": "Menu principal",
-        "aria-pagination": "Pagination",
-        "aria-curent-page": "Page actuelle",
-        "aria-next-page": "Page suivante",
-        "aria-previous-page": "Page précédente"
-    },
-    "applications": {
-        "chose-config": "Choisir une configuration",
-        "create": "Créer l'application",
-        "comment": "Commentaire : ",
-        "no-comment": "Pas de commentaire",
-        "test": "Tester",
-        "name": "Nom de l'application",
-        "name-placeholder": "Ex : olac",
-        "creation-date": "Date de création",
-        "actions": "Actions",
-        "references": "Référentiels",
-        "dataset": "Données",
-	    "trier": "Trier",
-	    "trierA_z": "Nom A - z",
-	    "trierZ_a": "Nom Z - a",
-	    "trierRecent": "Date récente",
-	    "filter": "Filtrer",
-        "change": "Modifier l'application",
-        "version" : "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
-    },
-    "errors": {
-        "emptyFile": "Le fichier est vide",
-        "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-        "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-        "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-        "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-        "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
-        "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
-        "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
-        "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
-        "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
-        "missingReferenceInCompositereference": "Tous les composants de la  reference composite <code>{compositeReference}</code> doivent déclarer une référence",
-        "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée  pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
-        "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la  référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
-        "missingParentColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
-        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
-        "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-        "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
-        "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-        "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
-        "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-        "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-        "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
-        "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-        "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
-        "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
-        "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-        "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
-        "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-        "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-        "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
-        "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
-        "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
-        "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
-        "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
-        "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
-        "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-        "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
-        "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
-        "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
-        "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>  de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
-        "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation  <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
-        "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
-        "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
-        "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
-        "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
-        "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
-        "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
-        "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
-        "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
-        "emptyHeader": "Le fichier contient un en-tête de colonne vide",
-        "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
-        "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-        "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-        "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-        "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-        "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-        "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-        "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-        "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-        "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-        "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>  la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-        "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
-        "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
-        "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
-        "timerangeoutofinterval": "La date  <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
-        "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
-        "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
-        "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-        "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-        "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le  parent n'existe pas. Valeurs acceptées {knownReferences}"
-    },
-    "referencesManagement": {
-        "actions": "Actions",
-        "consult": "Consulter",
-        "download": "Télécharger",
-        "delete": "Supprimer",
-        "references": "Référentiels",
-        "data": "Données"
-    },
-    "dataTypesManagement": {
-        "data-types": "Type de données",
-        "consult-authorization": "Consulter les autorisations",
-        "réinitialiser": "Réinitialiser",
-        "all": "tous",
-        "filtre": "filtre",
-        "tri": "tri",
-        "ASC": "ASC",
-        "DESC": "DESC",
-        "validate": "Valider",
-        "filtered": "Les filtres utilisés",
-        "sorted": "Les tris utilisés",
-        "title-modal-numeric": "Choix de l'interval de valeur",
-        "title-modal-date": "Choix de l'interval de date",
-        "manage-datasets": "Gérer les jeux de données"
-    },
-    "dataTypesRepository":  {
-        "card-title-upload-file": "Déposer une version sur ce jeux de données",
-        "start-date": "Date de début",
-        "end-date": "Date de fin",
-        "comment": "Commentaire",
-        "choose-file": "Choisir un fichier",
-        "placeholder-datepicker": "Taper ou sélectionner une date...",
-        "placeholder-select": "Sélectionner...",
-        "submit": "Envoyer",
-        "list-file-data": "Liste des jeux de données sur ce dépôt",
-        "list-file-data-period": "Liste des versions pour la période",
-        "table-file-data-id": "ID",
-        "table-file-data-size": "Taille",
-        "table-file-data-create": "Création",
-        "table-file-data-create-by": "Créer par :",
-        "table-file-data-publish": "Publier",
-        "table-file-data-publish-by": "Publier par :",
-        "table-file-data-publication": "Publication",
-        "table-file-data-delete": "Supprimer",
-        "table-file-data-period": "Période"
-    },
-    "dataTypeAuthorizations": {
-        "add-auhtorization": "Ajouter une autorisation",
-        "sub-menu-data-type-authorizations": "autorisations de {dataType}",
-        "sub-menu-new-authorization": "nouvelle autorisation",
-        "users": "Utilisateurs",
-        "name": "Nom",
-        "roles": "Roles",
-        "users-placeholder": "Choisir les utilisateurs à autoriser",
-        "data-groups": "Groupes de données",
-        "data-groups-placeholder": "Choisir les données à autoriser",
-        "authorization-scopes": "Périmètres d'autorisation",
-        "period": "Période d'autorisation",
-        "from-date": "À partir du",
-        "to-date": "Jusqu'au",
-        "from-date-to-date": "De date à date",
-        "always": "Toujours",
-        "to": "à",
-        "from": "de",
-        "create": "Créer l'autorisation",
-        "user": "Utilisateur",
-        "data-group": "Groupe de données",
-        "data-type": "Type de donnée",
-        "actions": "Actions",
-        "revoke": "Révoquer"
-    },
-    "ponctuation": {
-        "semicolon" : ";",
-        "comma" : ",",
-        "period": ".",
-        "colon" : ":",
-        "hyphen" : "-",
-        "plus" : "+",
-        "less" :"<",
-        "greater" : ">",
-        "arrow-right": "->",
-        "arrow-left": "<-",
-        "slash": "/",
-        "regEx": ".*"
-    }
-}
+  "titles": {
+    "login-page": "Bienvenue sur SI-ORE",
+    "applications-page": "Mes applications",
+    "references-page": "Référentiels de {applicationName}",
+    "references-data": "Données de {refName}",
+    "application-creation": "Créer une application",
+    "data-types-page": "Type de données de {applicationName}",
+    "data-types-repository": "Gestion des jeux de données de {applicationName}",
+    "data-type-authorizations": "Autorisations de {dataType}",
+    "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
+  },
+  "login": {
+    "signin": "Se connecter",
+    "signup": "Créer un compte",
+    "login": "Identifiant",
+    "login-placeholder": "Ex: michel",
+    "pwd": "Mot de passe",
+    "pwd-placeholder": "Ex: xxxx",
+    "pwd-forgotten": "Mot de passe oublié ?",
+    "register": "Créer un compte",
+    "confirm-pwd": "Confirmer le mot de passe",
+    "aria-btn-login": "Bouton valider le formulaire de connexion",
+    "aria-btn-signup": "Bouton création d'un compte"
+  },
+  "validation": {
+    "obligatoire": "Obligatoire",
+    "facultatif": "Facultatif",
+    "invalid-required": "Merci de remplir le champ",
+    "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
+    "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
+    "invalid-confirmed": "Les deux champs ne correspondent pas."
+  },
+  "alert": {
+    "cancel": "Annuler",
+    "server-error": "Une erreur serveur est survenue",
+    "server-error-appli-exist": "Ce nom d'application existe déjà",
+    "user-unknown": "Identifiants inconnus",
+    "application-creation-success": "L'application a été créée !",
+    "application-validate-success": "Le fichier YAML est valide !",
+    "application-edit-success": "Le fichier YAML est mis à jours !",
+    "warning": "Attention !",
+    "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
+    "delete": "Supprimer",
+    "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
+    "reference-updated": "Référentiel mis à jour",
+    "data-updated": "Type de donnée mis à jour",
+    "registered-user": "Compte utilisateur créé",
+    "revoke-authorization": "Autorisation révoquée",
+    "create-authorization": "Autorisation créée",
+    "dataTypeFiltreEmpty": "Pas de données correspondant à vos critères"
+  },
+  "message": {
+    "app-config-error": "Erreur dans le fichier yaml",
+    "close": "Fermer le message",
+    "data-type-config-error": "Erreur dans le fichier csv"
+  },
+  "menu": {
+    "logout": "Se déconnecter",
+    "applications": "Applications",
+    "references": "Référentiels",
+    "french": "Français",
+    "english": "English",
+    "language": "Langue",
+    "aria-sub-menu": "Chemin d'acces",
+    "aria-nav-bar": "Menu principal",
+    "aria-pagination": "Pagination",
+    "aria-curent-page": "Page actuelle",
+    "aria-next-page": "Page suivante",
+    "aria-previous-page": "Page précédente"
+  },
+  "applications": {
+    "chose-config": "Choisir une configuration",
+    "create": "Créer l'application",
+    "comment": "Commentaire : ",
+    "no-comment": "Pas de commentaire",
+    "test": "Tester",
+    "name": "Nom de l'application",
+    "name-placeholder": "Ex : olac",
+    "creation-date": "Date de création",
+    "actions": "Actions",
+    "references": "Référentiels",
+    "dataset": "Données",
+    "trier": "Trier",
+    "trierA_z": "Nom A - z",
+    "trierZ_a": "Nom Z - a",
+    "trierRecent": "Date récente",
+    "filter": "Filtrer",
+    "change": "Modifier l'application",
+    "version": "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
+  },
+  "errors": {
+    "emptyFile": "Le fichier est vide",
+    "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+    "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+    "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+    "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+    "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
+    "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
+    "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
+    "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
+    "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
+    "missingReferenceInCompositereference": "Tous les composants de la  reference composite <code>{compositeReference}</code> doivent déclarer une référence",
+    "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée  pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
+    "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la  référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
+    "missingParentColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
+    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
+    "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+    "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
+    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+    "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
+    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+    "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+    "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
+    "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+    "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
+    "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
+    "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+    "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
+    "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+    "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+    "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
+    "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
+    "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
+    "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
+    "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
+    "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
+    "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+    "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
+    "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
+    "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
+    "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>  de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
+    "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation  <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
+    "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
+    "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
+    "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
+    "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
+    "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
+    "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
+    "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
+    "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
+    "emptyHeader": "Le fichier contient un en-tête de colonne vide",
+    "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
+    "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+    "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+    "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+    "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+    "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+    "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+    "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+    "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+    "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+    "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>  la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+    "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
+    "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
+    "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
+    "timerangeoutofinterval": "La date  <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
+    "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
+    "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
+    "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+    "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+    "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le  parent n'existe pas. Valeurs acceptées {knownReferences}",
+    "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur  à celui de la ligne de données.",
+    "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
+    "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
+    "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
+    "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
+  },
+  "referencesManagement": {
+    "actions": "Actions",
+    "consult": "Consulter",
+    "download": "Télécharger",
+    "delete": "Supprimer",
+    "references": "Référentiels",
+    "data": "Données"
+  },
+  "dataTypesManagement": {
+    "data-types": "Type de données",
+    "consult-authorization": "Consulter les autorisations",
+    "réinitialiser": "Réinitialiser",
+    "all": "tous",
+    "filtre": "filtre",
+    "tri": "tri",
+    "ASC": "ASC",
+    "DESC": "DESC",
+    "validate": "Valider",
+    "filtered": "Les filtres utilisés",
+    "sorted": "Les tris utilisés",
+    "title-modal-numeric": "Choix de l'interval de valeur",
+    "title-modal-date": "Choix de l'interval de date",
+    "manage-datasets": "Gérer les jeux de données"
+  },
+  "dataTypesRepository": {
+    "card-title-upload-file": "Déposer une version sur ce jeux de données",
+    "start-date": "Date de début",
+    "end-date": "Date de fin",
+    "comment": "Commentaire",
+    "choose-file": "Choisir un fichier",
+    "placeholder-datepicker": "Taper ou sélectionner une date...",
+    "placeholder-select": "Sélectionner...",
+    "submit": "Envoyer",
+    "list-file-data": "Liste des jeux de données sur ce dépôt",
+    "list-file-data-period": "Liste des versions pour la période",
+    "table-file-data-id": "ID",
+    "table-file-data-size": "Taille",
+    "table-file-data-create": "Création",
+    "table-file-data-create-by": "Créer par :",
+    "table-file-data-publish": "Publier",
+    "table-file-data-publish-by": "Publier par :",
+    "table-file-data-publication": "Publication",
+    "table-file-data-delete": "Supprimer",
+    "table-file-data-period": "Période"
+  },
+  "dataTypeAuthorizations": {
+    "add-auhtorization": "Ajouter une autorisation",
+    "sub-menu-data-type-authorizations": "autorisations de {dataType}",
+    "sub-menu-new-authorization": "nouvelle autorisation",
+    "users": "Utilisateurs",
+    "name": "Nom",
+    "roles": "Roles",
+    "users-placeholder": "Choisir les utilisateurs à autoriser",
+    "data-groups": "Groupes de données",
+    "data-groups-placeholder": "Choisir les données à autoriser",
+    "authorization-scopes": "Périmètres d'autorisation",
+    "period": "Période d'autorisation",
+    "from-date": "À partir du",
+    "to-date": "Jusqu'au",
+    "from-date-to-date": "De date à date",
+    "always": "Toujours",
+    "to": "à",
+    "from": "de",
+    "create": "Créer l'autorisation",
+    "user": "Utilisateur",
+    "data-group": "Groupe de données",
+    "data-type": "Type de donnée",
+    "actions": "Actions",
+    "revoke": "Révoquer"
+  },
+  "ponctuation": {
+    "semicolon": ";",
+    "comma": ",",
+    "period": ".",
+    "colon": ":",
+    "hyphen": "-",
+    "plus": "+",
+    "less": "<",
+    "greater": ">",
+    "arrow-right": "->",
+    "arrow-left": "<-",
+    "slash": "/",
+    "regEx": ".*"
+  }
+}
\ No newline at end of file
-- 
GitLab


From e97d393b11d6179eff97ba08446c3638cf462cf6 Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Thu, 17 Mar 2022 16:45:20 +0100
Subject: [PATCH 3/6] =?UTF-8?q?=C3=89vite=20de=20change=20l'indentation=20?=
 =?UTF-8?q?des=20bundle=20i18n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui2/src/locales/en.json | 514 ++++++++++++++++++++--------------------
 ui2/src/locales/fr.json | 512 +++++++++++++++++++--------------------
 2 files changed, 513 insertions(+), 513 deletions(-)

diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index e20b39785..32530817b 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -1,259 +1,259 @@
 {
-  "titles": {
-    "login-page": "Welcome to SI-ORE",
-    "applications-page": "My applications",
-    "references-page": "{applicationName} references",
-    "references-data": "{refName} data",
-    "application-creation": "Application creation",
-    "data-types-page": "{applicationName} data types",
-    "data-types-repository": "Management of data sets {applicationName}",
-    "data-type-authorizations": "{dataType} authorizations",
-    "data-type-new-authorization": "New authorization for {dataType}"
-  },
-  "login": {
-    "signin": "Sign in",
-    "signup": "Sign up",
-    "login": "Login",
-    "login-placeholder": "Ex: michel",
-    "pwd": "Password",
-    "pwd-placeholder": "Ex: xxxx",
-    "pwd-forgotten": "Forgotten password ? ",
-    "register": "Register",
-    "confirm-pwd": "Confirmer le mot de passe",
-    "aria-btn-login": "Validate login form button",
-    "aria-btn-signup": "Create an account button"
-  },
-  "validation": {
-    "obligatoire": "Mandatory",
-    "facultatif": "Optional",
-    "invalid-required": "Please fill the field",
-    "invalid-application-name": "The name must only includes lowercase letters.",
-    "invalid-application-name-length": "The name's length should be between 4 and 20 characters.",
-    "invalid-confirmed": "Fields don't match."
-  },
-  "alert": {
-    "cancel": "Cancel",
-    "server-error": "A server error occured",
-    "server-error-appli-exist": "This application's name exist",
-    "user-unknown": "Unknown user",
-    "application-creation-success": "The app has been created!",
-    "application-validate-success": "The YAML file is valid!",
-    "application-edit-success": "The YAML file is update !",
-    "warning": "Warning !",
-    "reference-deletion-msg": "You're about to delete the reference : {label}. Are you sure ?",
-    "delete": "Delete",
-    "reference-csv-upload-error": "An error occured while uploading the csv file",
-    "reference-updated": "Reference updated",
-    "data-updated": "Data type updated",
-    "registered-user": "User registered",
-    "revoke-authorization": "Authorization revoked",
-    "create-authorization": "Authorization created",
-    "dataTypeFiltreEmpty": "No data matching your criteria"
-  },
-  "message": {
-    "app-config-error": "Error in yaml file",
-    "close": "Close message",
-    "data-type-config-error": "Error in csv file"
-  },
-  "menu": {
-    "logout": "Log out",
-    "applications": "Applications",
-    "references": "References",
-    "french": "Français",
-    "english": "English",
-    "language": "Language",
-    "aria-sub-menu": "Access path",
-    "aria-nav-bar": "Main menu",
-    "aria-pagination": "Pagination",
-    "aria-curent-page": "Curent page",
-    "aria-next-page": "Next page",
-    "aria-previous-page": "Previous page"
-  },
-  "applications": {
-    "chose-config": "Chose a configuration",
-    "create": "Create application",
-    "comment": "Comment : ",
-    "no-comment": "No comment",
-    "test": "Test",
-    "name": "Application name",
-    "name-placeholder": "Ex : olac",
-    "creation-date": "Creation date",
-    "actions": "Actions",
-    "references": "References",
-    "dataset": "Data types",
-    "trier": "Sort by",
-    "trierA_z": "Name A - z",
-    "trierZ_a": "Name Z - a",
-    "trierRecent": "Recent date",
-    "filter": "Filter by",
-    "change": "Edit app",
-    "version": "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
-  },
-  "errors": {
-    "emptyFile": "File is empty",
-    "missingReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
-    "missingReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
-    "unknownReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-    "unknownReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-    "unsupportedVersion": "YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
-    "undeclaredDataGroupForVariable": "Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
-    "variableInMultipleDataGroup": "Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
-    "unknownVariablesInDataGroup": "Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
-    "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>",
-    "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
-    "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
-    "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
-    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
-    "missingTimeScopeVariableComponentKey": "Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
-    "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
-    "timeScopeVariableComponentKeyMissingVariable": "Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
-    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
-    "timeVariableComponentKeyMissingComponent": "Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
-    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
-    "timeScopeVariableComponentWrongChecker": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
-    "timeScopeVariableComponentPatternUnknown": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
-    "missingAuthorizationForDatatype": "The authorization section must be present in the description of the <code> {datatype} </code> data type",
-    "missingAuthorizationScopeVariableComponentKey": "You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
-    "authorizationScopeVariableComponentKeyMissingVariable": "You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
-    "authorizationScopeVariableComponentKeyUnknownVariable": "<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
-    "authorizationVariableComponentKeyMissingComponent": "You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
-    "authorizationVariableComponentKeyUnknownComponent": "<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
-    "authorizationScopeVariableComponentWrongChecker": "The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
-    "authorizationScopeVariableComponentReftypeUnknown": "The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
-    "authorizationScopeVariableComponentReftypeNull": "No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
-    "unrecognizedProperty ": " Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
-    "unrecognizedProperty": "Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
-    "invalidFormat": "Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
-    "missingRequiredExpression": "For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
-    "illegalGroovyExpression": "For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-    "unknownCheckerName": "For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
-    "unknownCheckerNameForVariableComponentCheckerInReference": "In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
-    "csvBoundToUnknownVariable": "In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
-    "unknownCheckerNameForVariableComponent": "In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
-    "missingColumnReferenceForCheckerInReference": "In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
-    "missingParamColumnReferenceForCheckerInReference": "In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
-    "csvBoundToUnknownVariableComponent": "In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
-    "invalidKeyColumns": "In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
-    "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
-    "invalidInternationalizedColumns": "In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-    "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-    "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
-    "unexpectedHeaderColumn": "Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
-    "headerColumnPatternNotMatching": "Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
-    "unexpectedTokenCount": "Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
-    "invalidHeaders": "Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
-    "emptyHeader": "The file contains a column with an empty header",
-    "duplicatedHeaders": "These headers are duplicated : <code>{duplicatedHeaders}</code>",
-    "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-    "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
-    "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-    "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
-    "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-    "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-    "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-    "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-    "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
-    "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
-    "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
-    "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
-    "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
-    "timerangeoutofinterval": "The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
-    "badauthorizationscopeforrepository": "Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
-    "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
-    "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
-    "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
-    "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
-    "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
-    "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
-    "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
-    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
-    "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
-    "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
-    "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
-  },
-  "referencesManagement": {
-    "actions": "Actions",
-    "consult": "Consult",
-    "download": "Download",
-    "delete": "Delete",
-    "references": "References",
-    "data": "Data"
-  },
-  "dataTypesManagement": {
-    "data-types": "Data types",
-    "consult-authorization": "Consult authorizations",
-    "réinitialiser": "Reset",
-    "all": "all",
-    "filtre": "filter",
-    "tri": "sort",
-    "ASC": "ASC",
-    "DESC": "DESC",
-    "validate": "Validate",
-    "filtered": "Filters used",
-    "sorted": "The sorts used",
-    "title-modal-numeric": "Choice of value range",
-    "title-modal-date": "Choice of date range",
-    "manage-datasets": "Manage datasets"
-  },
-  "dataTypesRepository": {
-    "card-title-upload-file": "Drop a version on this dataset",
-    "start-date": "Start date",
-    "end-date": "End date",
-    "comment": "Comment",
-    "choose-file": "Choose a file",
-    "placeholder-datepicker": "Type or select a date...",
-    "placeholder-select": "Select...",
-    "submit": "Submit",
-    "list-file-data": "List of datasets on this repository",
-    "list-file-data-period": "List of versions for the period",
-    "table-file-data-id": "ID",
-    "table-file-data-size": "Size",
-    "table-file-data-create": "Create",
-    "table-file-data-create-by": "Create by :",
-    "table-file-data-publish": "Publish",
-    "table-file-data-publish-by": "Publish by :",
-    "table-file-data-publication": "Publication",
-    "table-file-data-delete": "Delete",
-    "table-file-data-period": "Period"
-  },
-  "dataTypeAuthorizations": {
-    "add-auhtorization": "Add an authorization",
-    "sub-menu-data-type-authorizations": "{dataType} authorizations",
-    "sub-menu-new-authorization": "new authorization",
-    "users": "Users",
-    "name": "Name",
-    "roles": "Roles",
-    "users-placeholder": "Chose users to authorize",
-    "data-groups": "Data groups",
-    "data-groups-placeholder": "Chose data groups to authorize",
-    "authorization-scopes": "Authorization scopes",
-    "period": "Authorization period",
-    "from-date": "From date : ",
-    "to-date": "To date : ",
-    "from-date-to-date": "From date to date : ",
-    "always": "Always",
-    "to": "to",
-    "from": "from",
-    "create": "Create authorization",
-    "user": "User",
-    "data-group": "Data group",
-    "data-type": "Data type",
-    "actions": "Actions",
-    "revoke": "Revoke"
-  },
-  "ponctuation": {
-    "semicolon": ";",
-    "comma": ",",
-    "period": ".",
-    "colon": ":",
-    "hyphen": "-",
-    "plus": "+",
-    "less": "<",
-    "greater": ">",
-    "arrow-right": "->",
-    "arrow-left": "<-",
-    "slash": "/",
-    "regEx": ".*",
-    "star": "*"
-  }
+    "titles": {
+        "login-page": "Welcome to SI-ORE",
+        "applications-page": "My applications",
+        "references-page": "{applicationName} references",
+        "references-data": "{refName} data",
+        "application-creation": "Application creation",
+        "data-types-page": "{applicationName} data types",
+        "data-types-repository": "Management of data sets {applicationName}",
+        "data-type-authorizations": "{dataType} authorizations",
+        "data-type-new-authorization": "New authorization for {dataType}"
+    },
+    "login": {
+        "signin": "Sign in",
+        "signup": "Sign up",
+        "login": "Login",
+        "login-placeholder": "Ex: michel",
+        "pwd": "Password",
+        "pwd-placeholder": "Ex: xxxx",
+        "pwd-forgotten": "Forgotten password ? ",
+        "register": "Register",
+        "confirm-pwd": "Confirmer le mot de passe",
+        "aria-btn-login": "Validate login form button",
+        "aria-btn-signup": "Create an account button"
+    },
+    "validation": {
+        "obligatoire": "Mandatory",
+        "facultatif": "Optional",
+        "invalid-required": "Please fill the field",
+        "invalid-application-name": "The name must only includes lowercase letters.",
+        "invalid-application-name-length": "The name's length should be between 4 and 20 characters.",
+        "invalid-confirmed": "Fields don't match."
+    },
+    "alert": {
+        "cancel": "Cancel",
+        "server-error": "A server error occured",
+        "server-error-appli-exist": "This application's name exist",
+        "user-unknown": "Unknown user",
+        "application-creation-success": "The app has been created!",
+        "application-validate-success": "The YAML file is valid!",
+        "application-edit-success": "The YAML file is update !",
+        "warning": "Warning !",
+        "reference-deletion-msg": "You're about to delete the reference : {label}. Are you sure ?",
+        "delete": "Delete",
+        "reference-csv-upload-error": "An error occured while uploading the csv file",
+        "reference-updated": "Reference updated",
+        "data-updated": "Data type updated",
+        "registered-user": "User registered",
+        "revoke-authorization": "Authorization revoked",
+        "create-authorization": "Authorization created",
+        "dataTypeFiltreEmpty": "No data matching your criteria"
+    },
+    "message": {
+        "app-config-error": "Error in yaml file",
+        "close": "Close message",
+        "data-type-config-error": "Error in csv file"
+    },
+    "menu": {
+        "logout": "Log out",
+        "applications": "Applications",
+        "references": "References",
+        "french": "Français",
+        "english": "English",
+        "language": "Language",
+        "aria-sub-menu": "Access path",
+        "aria-nav-bar": "Main menu",
+        "aria-pagination": "Pagination",
+        "aria-curent-page": "Curent page",
+        "aria-next-page": "Next page",
+        "aria-previous-page": "Previous page"
+    },
+    "applications": {
+        "chose-config": "Chose a configuration",
+        "create": "Create application",
+        "comment": "Comment : ",
+        "no-comment": "No comment",
+        "test": "Test",
+        "name": "Application name",
+        "name-placeholder": "Ex : olac",
+        "creation-date": "Creation date",
+        "actions": "Actions",
+        "references": "References",
+        "dataset": "Data types",
+        "trier": "Sort by",
+        "trierA_z": "Name A - z",
+        "trierZ_a": "Name Z - a",
+        "trierRecent": "Recent date",
+        "filter": "Filter by",
+        "change": "Edit app",
+        "version": "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
+    },
+    "errors": {
+        "emptyFile": "File is empty",
+        "missingReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
+        "missingReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
+        "unknownReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+        "unknownReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+        "unsupportedVersion": "YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
+        "undeclaredDataGroupForVariable": "Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
+        "variableInMultipleDataGroup": "Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
+        "unknownVariablesInDataGroup": "Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
+        "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>",
+        "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
+        "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
+        "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
+        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
+        "missingTimeScopeVariableComponentKey": "Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
+        "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
+        "timeScopeVariableComponentKeyMissingVariable": "Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
+        "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
+        "timeVariableComponentKeyMissingComponent": "Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
+        "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
+        "timeScopeVariableComponentWrongChecker": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
+        "timeScopeVariableComponentPatternUnknown": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
+        "missingAuthorizationForDatatype": "The authorization section must be present in the description of the <code> {datatype} </code> data type",
+        "missingAuthorizationScopeVariableComponentKey": "You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
+        "authorizationScopeVariableComponentKeyMissingVariable": "You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
+        "authorizationScopeVariableComponentKeyUnknownVariable": "<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
+        "authorizationVariableComponentKeyMissingComponent": "You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
+        "authorizationVariableComponentKeyUnknownComponent": "<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
+        "authorizationScopeVariableComponentWrongChecker": "The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
+        "authorizationScopeVariableComponentReftypeUnknown": "The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
+        "authorizationScopeVariableComponentReftypeNull": "No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
+        "unrecognizedProperty ": " Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
+        "unrecognizedProperty": "Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
+        "invalidFormat": "Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
+        "missingRequiredExpression": "For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
+        "illegalGroovyExpression": "For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+        "unknownCheckerName": "For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
+        "unknownCheckerNameForVariableComponentCheckerInReference": "In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
+        "csvBoundToUnknownVariable": "In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
+        "unknownCheckerNameForVariableComponent": "In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
+        "missingColumnReferenceForCheckerInReference": "In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
+        "missingParamColumnReferenceForCheckerInReference": "In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
+        "csvBoundToUnknownVariableComponent": "In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
+        "invalidKeyColumns": "In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
+        "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
+        "invalidInternationalizedColumns": "In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+        "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+        "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
+        "unexpectedHeaderColumn": "Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
+        "headerColumnPatternNotMatching": "Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
+        "unexpectedTokenCount": "Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
+        "invalidHeaders": "Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
+        "emptyHeader": "The file contains a column with an empty header",
+        "duplicatedHeaders": "These headers are duplicated : <code>{duplicatedHeaders}</code>",
+        "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+        "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+        "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+        "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+        "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+        "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+        "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+        "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+        "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
+        "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
+        "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
+        "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
+        "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
+        "timerangeoutofinterval": "The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
+        "badauthorizationscopeforrepository": "Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
+        "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
+        "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
+        "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
+        "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
+        "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
+        "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
+        "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
+        "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
+        "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
+        "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
+        "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
+    },
+    "referencesManagement": {
+        "actions": "Actions",
+        "consult": "Consult",
+        "download": "Download",
+        "delete": "Delete",
+        "references": "References",
+        "data": "Data"
+    },
+    "dataTypesManagement": {
+        "data-types": "Data types",
+        "consult-authorization": "Consult authorizations",
+        "réinitialiser": "Reset",
+        "all": "all",
+        "filtre": "filter",
+        "tri": "sort",
+        "ASC": "ASC",
+        "DESC": "DESC",
+        "validate": "Validate",
+        "filtered": "Filters used",
+        "sorted": "The sorts used",
+        "title-modal-numeric": "Choice of value range",
+        "title-modal-date": "Choice of date range",
+        "manage-datasets": "Manage datasets"
+    },
+    "dataTypesRepository": {
+        "card-title-upload-file": "Drop a version on this dataset",
+        "start-date": "Start date",
+        "end-date": "End date",
+        "comment": "Comment",
+        "choose-file": "Choose a file",
+        "placeholder-datepicker": "Type or select a date...",
+        "placeholder-select": "Select...",
+        "submit": "Submit",
+        "list-file-data": "List of datasets on this repository",
+        "list-file-data-period": "List of versions for the period",
+        "table-file-data-id": "ID",
+        "table-file-data-size": "Size",
+        "table-file-data-create": "Create",
+        "table-file-data-create-by": "Create by :",
+        "table-file-data-publish": "Publish",
+        "table-file-data-publish-by": "Publish by :",
+        "table-file-data-publication": "Publication",
+        "table-file-data-delete": "Delete",
+        "table-file-data-period": "Period"
+    },
+    "dataTypeAuthorizations": {
+        "add-auhtorization": "Add an authorization",
+        "sub-menu-data-type-authorizations": "{dataType} authorizations",
+        "sub-menu-new-authorization": "new authorization",
+        "users": "Users",
+        "name": "Name",
+        "roles": "Roles",
+        "users-placeholder": "Chose users to authorize",
+        "data-groups": "Data groups",
+        "data-groups-placeholder": "Chose data groups to authorize",
+        "authorization-scopes": "Authorization scopes",
+        "period": "Authorization period",
+        "from-date": "From date : ",
+        "to-date": "To date : ",
+        "from-date-to-date": "From date to date : ",
+        "always": "Always",
+        "to": "to",
+        "from": "from",
+        "create": "Create authorization",
+        "user": "User",
+        "data-group": "Data group",
+        "data-type": "Data type",
+        "actions": "Actions",
+        "revoke": "Revoke"
+    },
+    "ponctuation": {
+        "semicolon": ";",
+        "comma": ",",
+        "period": ".",
+        "colon": ":",
+        "hyphen": "-",
+        "plus": "+",
+        "less": "<",
+        "greater": ">",
+        "arrow-right": "->",
+        "arrow-left": "<-",
+        "slash": "/",
+        "regEx": ".*",
+        "star": "*"
+    }
 }
\ No newline at end of file
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 1d9759a41..8b47ec2cc 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -1,258 +1,258 @@
 {
-  "titles": {
-    "login-page": "Bienvenue sur SI-ORE",
-    "applications-page": "Mes applications",
-    "references-page": "Référentiels de {applicationName}",
-    "references-data": "Données de {refName}",
-    "application-creation": "Créer une application",
-    "data-types-page": "Type de données de {applicationName}",
-    "data-types-repository": "Gestion des jeux de données de {applicationName}",
-    "data-type-authorizations": "Autorisations de {dataType}",
-    "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
-  },
-  "login": {
-    "signin": "Se connecter",
-    "signup": "Créer un compte",
-    "login": "Identifiant",
-    "login-placeholder": "Ex: michel",
-    "pwd": "Mot de passe",
-    "pwd-placeholder": "Ex: xxxx",
-    "pwd-forgotten": "Mot de passe oublié ?",
-    "register": "Créer un compte",
-    "confirm-pwd": "Confirmer le mot de passe",
-    "aria-btn-login": "Bouton valider le formulaire de connexion",
-    "aria-btn-signup": "Bouton création d'un compte"
-  },
-  "validation": {
-    "obligatoire": "Obligatoire",
-    "facultatif": "Facultatif",
-    "invalid-required": "Merci de remplir le champ",
-    "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
-    "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
-    "invalid-confirmed": "Les deux champs ne correspondent pas."
-  },
-  "alert": {
-    "cancel": "Annuler",
-    "server-error": "Une erreur serveur est survenue",
-    "server-error-appli-exist": "Ce nom d'application existe déjà",
-    "user-unknown": "Identifiants inconnus",
-    "application-creation-success": "L'application a été créée !",
-    "application-validate-success": "Le fichier YAML est valide !",
-    "application-edit-success": "Le fichier YAML est mis à jours !",
-    "warning": "Attention !",
-    "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
-    "delete": "Supprimer",
-    "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
-    "reference-updated": "Référentiel mis à jour",
-    "data-updated": "Type de donnée mis à jour",
-    "registered-user": "Compte utilisateur créé",
-    "revoke-authorization": "Autorisation révoquée",
-    "create-authorization": "Autorisation créée",
-    "dataTypeFiltreEmpty": "Pas de données correspondant à vos critères"
-  },
-  "message": {
-    "app-config-error": "Erreur dans le fichier yaml",
-    "close": "Fermer le message",
-    "data-type-config-error": "Erreur dans le fichier csv"
-  },
-  "menu": {
-    "logout": "Se déconnecter",
-    "applications": "Applications",
-    "references": "Référentiels",
-    "french": "Français",
-    "english": "English",
-    "language": "Langue",
-    "aria-sub-menu": "Chemin d'acces",
-    "aria-nav-bar": "Menu principal",
-    "aria-pagination": "Pagination",
-    "aria-curent-page": "Page actuelle",
-    "aria-next-page": "Page suivante",
-    "aria-previous-page": "Page précédente"
-  },
-  "applications": {
-    "chose-config": "Choisir une configuration",
-    "create": "Créer l'application",
-    "comment": "Commentaire : ",
-    "no-comment": "Pas de commentaire",
-    "test": "Tester",
-    "name": "Nom de l'application",
-    "name-placeholder": "Ex : olac",
-    "creation-date": "Date de création",
-    "actions": "Actions",
-    "references": "Référentiels",
-    "dataset": "Données",
-    "trier": "Trier",
-    "trierA_z": "Nom A - z",
-    "trierZ_a": "Nom Z - a",
-    "trierRecent": "Date récente",
-    "filter": "Filtrer",
-    "change": "Modifier l'application",
-    "version": "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
-  },
-  "errors": {
-    "emptyFile": "Le fichier est vide",
-    "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-    "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-    "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-    "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-    "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
-    "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
-    "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
-    "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
-    "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
-    "missingReferenceInCompositereference": "Tous les composants de la  reference composite <code>{compositeReference}</code> doivent déclarer une référence",
-    "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée  pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
-    "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la  référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
-    "missingParentColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
-    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la  référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
-    "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-    "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
-    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-    "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
-    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-    "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-    "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
-    "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-    "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
-    "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
-    "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-    "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
-    "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-    "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-    "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
-    "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
-    "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
-    "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
-    "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
-    "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
-    "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-    "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
-    "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
-    "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
-    "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>  de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
-    "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation  <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
-    "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
-    "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
-    "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-    "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
-    "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-    "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-    "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
-    "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
-    "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
-    "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
-    "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
-    "emptyHeader": "Le fichier contient un en-tête de colonne vide",
-    "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
-    "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-    "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-    "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-    "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-    "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-    "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-    "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-    "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-    "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-    "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>  la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-    "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
-    "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
-    "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
-    "timerangeoutofinterval": "La date  <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
-    "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
-    "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
-    "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-    "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-    "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le  parent n'existe pas. Valeurs acceptées {knownReferences}",
-    "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur  à celui de la ligne de données.",
-    "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
-    "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
-    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
-    "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
-    "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
-    "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
-  },
-  "referencesManagement": {
-    "actions": "Actions",
-    "consult": "Consulter",
-    "download": "Télécharger",
-    "delete": "Supprimer",
-    "references": "Référentiels",
-    "data": "Données"
-  },
-  "dataTypesManagement": {
-    "data-types": "Type de données",
-    "consult-authorization": "Consulter les autorisations",
-    "réinitialiser": "Réinitialiser",
-    "all": "tous",
-    "filtre": "filtre",
-    "tri": "tri",
-    "ASC": "ASC",
-    "DESC": "DESC",
-    "validate": "Valider",
-    "filtered": "Les filtres utilisés",
-    "sorted": "Les tris utilisés",
-    "title-modal-numeric": "Choix de l'interval de valeur",
-    "title-modal-date": "Choix de l'interval de date",
-    "manage-datasets": "Gérer les jeux de données"
-  },
-  "dataTypesRepository": {
-    "card-title-upload-file": "Déposer une version sur ce jeux de données",
-    "start-date": "Date de début",
-    "end-date": "Date de fin",
-    "comment": "Commentaire",
-    "choose-file": "Choisir un fichier",
-    "placeholder-datepicker": "Taper ou sélectionner une date...",
-    "placeholder-select": "Sélectionner...",
-    "submit": "Envoyer",
-    "list-file-data": "Liste des jeux de données sur ce dépôt",
-    "list-file-data-period": "Liste des versions pour la période",
-    "table-file-data-id": "ID",
-    "table-file-data-size": "Taille",
-    "table-file-data-create": "Création",
-    "table-file-data-create-by": "Créer par :",
-    "table-file-data-publish": "Publier",
-    "table-file-data-publish-by": "Publier par :",
-    "table-file-data-publication": "Publication",
-    "table-file-data-delete": "Supprimer",
-    "table-file-data-period": "Période"
-  },
-  "dataTypeAuthorizations": {
-    "add-auhtorization": "Ajouter une autorisation",
-    "sub-menu-data-type-authorizations": "autorisations de {dataType}",
-    "sub-menu-new-authorization": "nouvelle autorisation",
-    "users": "Utilisateurs",
-    "name": "Nom",
-    "roles": "Roles",
-    "users-placeholder": "Choisir les utilisateurs à autoriser",
-    "data-groups": "Groupes de données",
-    "data-groups-placeholder": "Choisir les données à autoriser",
-    "authorization-scopes": "Périmètres d'autorisation",
-    "period": "Période d'autorisation",
-    "from-date": "À partir du",
-    "to-date": "Jusqu'au",
-    "from-date-to-date": "De date à date",
-    "always": "Toujours",
-    "to": "à",
-    "from": "de",
-    "create": "Créer l'autorisation",
-    "user": "Utilisateur",
-    "data-group": "Groupe de données",
-    "data-type": "Type de donnée",
-    "actions": "Actions",
-    "revoke": "Révoquer"
-  },
-  "ponctuation": {
-    "semicolon": ";",
-    "comma": ",",
-    "period": ".",
-    "colon": ":",
-    "hyphen": "-",
-    "plus": "+",
-    "less": "<",
-    "greater": ">",
-    "arrow-right": "->",
-    "arrow-left": "<-",
-    "slash": "/",
-    "regEx": ".*"
-  }
+    "titles": {
+        "login-page": "Bienvenue sur SI-ORE",
+        "applications-page": "Mes applications",
+        "references-page": "Référentiels de {applicationName}",
+        "references-data": "Données de {refName}",
+        "application-creation": "Créer une application",
+        "data-types-page": "Type de données de {applicationName}",
+        "data-types-repository": "Gestion des jeux de données de {applicationName}",
+        "data-type-authorizations": "Autorisations de {dataType}",
+        "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
+    },
+    "login": {
+        "signin": "Se connecter",
+        "signup": "Créer un compte",
+        "login": "Identifiant",
+        "login-placeholder": "Ex: michel",
+        "pwd": "Mot de passe",
+        "pwd-placeholder": "Ex: xxxx",
+        "pwd-forgotten": "Mot de passe oublié ?",
+        "register": "Créer un compte",
+        "confirm-pwd": "Confirmer le mot de passe",
+        "aria-btn-login": "Bouton valider le formulaire de connexion",
+        "aria-btn-signup": "Bouton création d'un compte"
+    },
+    "validation": {
+        "obligatoire": "Obligatoire",
+        "facultatif": "Facultatif",
+        "invalid-required": "Merci de remplir le champ",
+        "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
+        "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
+        "invalid-confirmed": "Les deux champs ne correspondent pas."
+    },
+    "alert": {
+        "cancel": "Annuler",
+        "server-error": "Une erreur serveur est survenue",
+        "server-error-appli-exist": "Ce nom d'application existe déjà",
+        "user-unknown": "Identifiants inconnus",
+        "application-creation-success": "L'application a été créée !",
+        "application-validate-success": "Le fichier YAML est valide !",
+        "application-edit-success": "Le fichier YAML est mis à jours !",
+        "warning": "Attention !",
+        "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
+        "delete": "Supprimer",
+        "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
+        "reference-updated": "Référentiel mis à jour",
+        "data-updated": "Type de donnée mis à jour",
+        "registered-user": "Compte utilisateur créé",
+        "revoke-authorization": "Autorisation révoquée",
+        "create-authorization": "Autorisation créée",
+        "dataTypeFiltreEmpty": "Pas de données correspondant à vos critères"
+    },
+    "message": {
+        "app-config-error": "Erreur dans le fichier yaml",
+        "close": "Fermer le message",
+        "data-type-config-error": "Erreur dans le fichier csv"
+    },
+    "menu": {
+        "logout": "Se déconnecter",
+        "applications": "Applications",
+        "references": "Référentiels",
+        "french": "Français",
+        "english": "English",
+        "language": "Langue",
+        "aria-sub-menu": "Chemin d'acces",
+        "aria-nav-bar": "Menu principal",
+        "aria-pagination": "Pagination",
+        "aria-curent-page": "Page actuelle",
+        "aria-next-page": "Page suivante",
+        "aria-previous-page": "Page précédente"
+    },
+    "applications": {
+        "chose-config": "Choisir une configuration",
+        "create": "Créer l'application",
+        "comment": "Commentaire : ",
+        "no-comment": "Pas de commentaire",
+        "test": "Tester",
+        "name": "Nom de l'application",
+        "name-placeholder": "Ex : olac",
+        "creation-date": "Date de création",
+        "actions": "Actions",
+        "references": "Référentiels",
+        "dataset": "Données",
+        "trier": "Trier",
+        "trierA_z": "Nom A - z",
+        "trierZ_a": "Nom Z - a",
+        "trierRecent": "Date récente",
+        "filter": "Filtrer",
+        "change": "Modifier l'application",
+        "version": "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
+    },
+    "errors": {
+        "emptyFile": "Le fichier est vide",
+        "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+        "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+        "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+        "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+        "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
+        "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
+        "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
+        "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
+        "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
+        "missingReferenceInCompositereference": "Tous les composants de la    reference composite <code>{compositeReference}</code> doivent déclarer une référence",
+        "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée    pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
+        "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la    référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
+        "missingParentColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
+        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
+        "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+        "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
+        "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+        "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
+        "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+        "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+        "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
+        "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+        "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
+        "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
+        "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+        "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
+        "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+        "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+        "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
+        "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
+        "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
+        "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
+        "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
+        "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
+        "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+        "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
+        "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
+        "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
+        "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>    de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
+        "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation    <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
+        "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
+        "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
+        "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+        "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
+        "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+        "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+        "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
+        "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
+        "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
+        "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
+        "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
+        "emptyHeader": "Le fichier contient un en-tête de colonne vide",
+        "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
+        "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+        "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+        "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+        "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+        "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+        "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+        "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+        "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+        "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+        "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>    la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+        "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
+        "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
+        "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
+        "timerangeoutofinterval": "La date    <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
+        "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
+        "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
+        "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+        "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+        "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le    parent n'existe pas. Valeurs acceptées {knownReferences}",
+        "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur    à celui de la ligne de données.",
+        "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
+        "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
+        "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
+        "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
+        "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
+        "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
+    },
+    "referencesManagement": {
+        "actions": "Actions",
+        "consult": "Consulter",
+        "download": "Télécharger",
+        "delete": "Supprimer",
+        "references": "Référentiels",
+        "data": "Données"
+    },
+    "dataTypesManagement": {
+        "data-types": "Type de données",
+        "consult-authorization": "Consulter les autorisations",
+        "réinitialiser": "Réinitialiser",
+        "all": "tous",
+        "filtre": "filtre",
+        "tri": "tri",
+        "ASC": "ASC",
+        "DESC": "DESC",
+        "validate": "Valider",
+        "filtered": "Les filtres utilisés",
+        "sorted": "Les tris utilisés",
+        "title-modal-numeric": "Choix de l'interval de valeur",
+        "title-modal-date": "Choix de l'interval de date",
+        "manage-datasets": "Gérer les jeux de données"
+    },
+    "dataTypesRepository": {
+        "card-title-upload-file": "Déposer une version sur ce jeux de données",
+        "start-date": "Date de début",
+        "end-date": "Date de fin",
+        "comment": "Commentaire",
+        "choose-file": "Choisir un fichier",
+        "placeholder-datepicker": "Taper ou sélectionner une date...",
+        "placeholder-select": "Sélectionner...",
+        "submit": "Envoyer",
+        "list-file-data": "Liste des jeux de données sur ce dépôt",
+        "list-file-data-period": "Liste des versions pour la période",
+        "table-file-data-id": "ID",
+        "table-file-data-size": "Taille",
+        "table-file-data-create": "Création",
+        "table-file-data-create-by": "Créer par :",
+        "table-file-data-publish": "Publier",
+        "table-file-data-publish-by": "Publier par :",
+        "table-file-data-publication": "Publication",
+        "table-file-data-delete": "Supprimer",
+        "table-file-data-period": "Période"
+    },
+    "dataTypeAuthorizations": {
+        "add-auhtorization": "Ajouter une autorisation",
+        "sub-menu-data-type-authorizations": "autorisations de {dataType}",
+        "sub-menu-new-authorization": "nouvelle autorisation",
+        "users": "Utilisateurs",
+        "name": "Nom",
+        "roles": "Roles",
+        "users-placeholder": "Choisir les utilisateurs à autoriser",
+        "data-groups": "Groupes de données",
+        "data-groups-placeholder": "Choisir les données à autoriser",
+        "authorization-scopes": "Périmètres d'autorisation",
+        "period": "Période d'autorisation",
+        "from-date": "À partir du",
+        "to-date": "Jusqu'au",
+        "from-date-to-date": "De date à date",
+        "always": "Toujours",
+        "to": "à",
+        "from": "de",
+        "create": "Créer l'autorisation",
+        "user": "Utilisateur",
+        "data-group": "Groupe de données",
+        "data-type": "Type de donnée",
+        "actions": "Actions",
+        "revoke": "Révoquer"
+    },
+    "ponctuation": {
+        "semicolon": ";",
+        "comma": ",",
+        "period": ".",
+        "colon": ":",
+        "hyphen": "-",
+        "plus": "+",
+        "less": "<",
+        "greater": ">",
+        "arrow-right": "->",
+        "arrow-left": "<-",
+        "slash": "/",
+        "regEx": ".*"
+    }
 }
\ No newline at end of file
-- 
GitLab


From fe14d4f889b851f40fb854f7e1cd66202dbc505e Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Thu, 17 Mar 2022 17:06:56 +0100
Subject: [PATCH 4/6] =?UTF-8?q?Indentation=20des=20bundle=20i18n=20pour=20?=
 =?UTF-8?q?=C3=A9viter=20les=20conflits?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui2/src/locales/en.json | 514 ++++++++++++++++++++--------------------
 ui2/src/locales/fr.json | 512 +++++++++++++++++++--------------------
 2 files changed, 513 insertions(+), 513 deletions(-)

diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index e6d557d20..42b6402a2 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -1,259 +1,259 @@
 {
-    "titles": {
-        "login-page": "Welcome to SI-ORE",
-        "applications-page": "My applications",
-        "references-page": "{applicationName} references",
-        "references-data": "{refName} data",
-        "application-creation": "Application creation",
-        "data-types-page": "{applicationName} data types",
-        "data-types-repository": "Management of data sets {applicationName}",
-        "data-type-authorizations": "{dataType} authorizations",
-        "data-type-new-authorization": "New authorization for {dataType}"
-    },
-    "login": {
-        "signin": "Sign in",
-        "signup": "Sign up",
-        "login": "Login",
-        "login-placeholder": "Ex: michel",
-        "pwd": "Password",
-        "pwd-placeholder": "Ex: xxxx",
-        "pwd-forgotten": "Forgotten password ? ",
-        "register": "Register",
-        "confirm-pwd": "Confirmer le mot de passe",
-        "aria-btn-login": "Validate login form button",
-        "aria-btn-signup": "Create an account button"
-    },
-    "validation": {
-        "obligatoire": "Mandatory",
-        "facultatif": "Optional",
-        "invalid-required": "Please fill the field",
-        "invalid-application-name": "The name must only includes lowercase letters.",
-        "invalid-application-name-length": "The name's length should be between 4 and 20 characters.",
-        "invalid-confirmed": "Fields don't match."
-    },
-    "alert": {
-        "cancel": "Cancel",
-        "server-error": "A server error occured",
-        "server-error-appli-exist": "This application's name exist",
-        "user-unknown": "Unknown user",
-        "application-creation-success": "The app has been created!",
-        "application-validate-success": "The YAML file is valid!",
-        "application-edit-success": "The YAML file is update !",
-        "warning": "Warning !",
-        "reference-deletion-msg": "You're about to delete the reference : {label}. Are you sure ?",
-        "delete": "Delete",
-        "reference-csv-upload-error": "An error occured while uploading the csv file",
-        "reference-updated": "Reference updated",
-        "data-updated": "Data type updated",
-        "registered-user": "User registered",
-        "revoke-authorization": "Authorization revoked",
-        "create-authorization": "Authorization created",
-        "dataTypeFiltreEmpty": "No data matching your criteria"
-    },
-    "message": {
-        "app-config-error": "Error in yaml file",
-        "close": "Close message",
-        "data-type-config-error": "Error in csv file"
-    },
-    "menu": {
-        "logout": "Log out",
-        "applications": "Applications",
-        "references": "References",
-        "french": "Français",
-        "english": "English",
-        "language": "Language",
-        "aria-sub-menu": "Access path",
-        "aria-nav-bar": "Main menu",
-        "aria-pagination": "Pagination",
-        "aria-curent-page": "Curent page",
-        "aria-next-page": "Next page",
-        "aria-previous-page": "Previous page"
-    },
-    "applications": {
-        "chose-config": "Chose a configuration",
-        "create": "Create application",
-        "comment": "Comment : ",
-        "no-comment": "No comment",
-        "test": "Test",
-        "name": "Application name",
-        "name-placeholder": "Ex : olac",
-        "creation-date": "Creation date",
-        "actions": "Actions",
-        "references": "References",
-        "dataset": "Data types",
-        "trier": "Sort by",
-        "trierA_z": "Name A - z",
-        "trierZ_a": "Name Z - a",
-        "trierRecent": "Recent date",
-        "filter": "Filter by",
-        "change": "Edit app",
-        "version": "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
-    },
-    "errors": {
-        "emptyFile": "File is empty",
-        "missingReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
-        "missingReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
-        "unknownReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-        "unknownReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
-        "unsupportedVersion": "YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
-        "undeclaredDataGroupForVariable": "Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
-        "variableInMultipleDataGroup": "Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
-        "unknownVariablesInDataGroup": "Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
-        "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>",
-        "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
-        "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
-        "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
-        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
-        "missingTimeScopeVariableComponentKey": "Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
-        "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
-        "timeScopeVariableComponentKeyMissingVariable": "Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
-        "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
-        "timeVariableComponentKeyMissingComponent": "Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
-        "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
-        "timeScopeVariableComponentWrongChecker": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
-        "timeScopeVariableComponentPatternUnknown": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
-        "missingAuthorizationForDatatype": "The authorization section must be present in the description of the <code> {datatype} </code> data type",
-        "missingAuthorizationScopeVariableComponentKey": "You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
-        "authorizationScopeVariableComponentKeyMissingVariable": "You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
-        "authorizationScopeVariableComponentKeyUnknownVariable": "<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
-        "authorizationVariableComponentKeyMissingComponent": "You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
-        "authorizationVariableComponentKeyUnknownComponent": "<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
-        "authorizationScopeVariableComponentWrongChecker": "The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
-        "authorizationScopeVariableComponentReftypeUnknown": "The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
-        "authorizationScopeVariableComponentReftypeNull": "No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
-        "unrecognizedProperty ": " Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
-        "unrecognizedProperty": "Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
-        "invalidFormat": "Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
-        "missingRequiredExpression": "For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
-        "illegalGroovyExpression": "For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-        "unknownCheckerName": "For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
-        "unknownCheckerNameForVariableComponentCheckerInReference": "In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
-        "csvBoundToUnknownVariable": "In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
-        "unknownCheckerNameForVariableComponent": "In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
-        "missingColumnReferenceForCheckerInReference": "In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
-        "missingParamColumnReferenceForCheckerInReference": "In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
-        "csvBoundToUnknownVariableComponent": "In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
-        "invalidKeyColumns": "In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
-        "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
-        "invalidInternationalizedColumns": "In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-        "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
-        "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
-        "unexpectedHeaderColumn": "Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
-        "headerColumnPatternNotMatching": "Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
-        "unexpectedTokenCount": "Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
-        "invalidHeaders": "Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
-        "emptyHeader": "The file contains a column with an empty header",
-        "duplicatedHeaders": "These headers are duplicated : <code>{duplicatedHeaders}</code>",
-        "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-        "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
-        "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
-        "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
-        "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-        "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
-        "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-        "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
-        "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
-        "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
-        "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
-        "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
-        "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
-        "timerangeoutofinterval": "The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
-        "badauthorizationscopeforrepository": "Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
-        "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
-        "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
-        "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
-        "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
-        "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
-        "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
-        "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
-        "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
-        "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
-        "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
-        "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
-    },
-    "referencesManagement": {
-        "actions": "Actions",
-        "consult": "Consult",
-        "download": "Download",
-        "delete": "Delete",
-        "references": "References",
-        "data": "Data"
-    },
-    "dataTypesManagement": {
-        "data-types": "Data types",
-        "consult-authorization": "Consult authorizations",
-        "réinitialiser": "Reset",
-        "all": "all",
-        "filtre": "filter",
-        "tri": "sort",
-        "ASC": "ASC",
-        "DESC": "DESC",
-        "validate": "Validate",
-        "filtered": "Filters used",
-        "sorted": "The sorts used",
-        "title-modal-numeric": "Choice of value range",
-        "title-modal-date": "Choice of date range",
-        "manage-datasets": "Manage datasets"
-    },
-    "dataTypesRepository": {
-        "card-title-upload-file": "Drop a version on this dataset",
-        "start-date": "Start date",
-        "end-date": "End date",
-        "comment": "Comment",
-        "choose-file": "Choose a file",
-        "placeholder-datepicker": "Type or select a date...",
-        "placeholder-select": "Select...",
-        "submit": "Submit",
-        "list-file-data": "List of datasets on this repository",
-        "list-file-data-period": "List of versions for the period",
-        "table-file-data-id": "ID",
-        "table-file-data-size": "Size",
-        "table-file-data-create": "Create",
-        "table-file-data-create-by": "Create by :",
-        "table-file-data-publish": "Publish",
-        "table-file-data-publish-by": "Publish by :",
-        "table-file-data-publication": "Publication",
-        "table-file-data-delete": "Delete",
-        "table-file-data-period": "Period"
-    },
-    "dataTypeAuthorizations": {
-        "add-auhtorization": "Add an authorization",
-        "sub-menu-data-type-authorizations": "{dataType} authorizations",
-        "sub-menu-new-authorization": "new authorization",
-        "users": "Users",
-        "name": "Name",
-        "roles": "Roles",
-        "users-placeholder": "Chose users to authorize",
-        "data-groups": "Data groups",
-        "data-groups-placeholder": "Chose data groups to authorize",
-        "authorization-scopes": "Authorization scopes",
-        "period": "Authorization period",
-        "from-date": "From date : ",
-        "to-date": "To date : ",
-        "from-date-to-date": "From date to date : ",
-        "always": "Always",
-        "to": "to",
-        "from": "from",
-        "create": "Create authorization",
-        "user": "User",
-        "data-group": "Data group",
-        "data-type": "Data type",
-        "actions": "Actions",
-        "revoke": "Revoke"
-    },
-    "ponctuation": {
-        "semicolon": ";",
-        "comma": ",",
-        "period": ".",
-        "colon": ":",
-        "hyphen": "-",
-        "plus": "+",
-        "less": "<",
-        "greater": ">",
-        "arrow-right": "->",
-        "arrow-left": "<-",
-        "slash": "/",
-        "regEx": ".*",
-        "star": "*"
-    }
+  "titles": {
+    "login-page": "Welcome to SI-ORE",
+    "applications-page": "My applications",
+    "references-page": "{applicationName} references",
+    "references-data": "{refName} data",
+    "application-creation": "Application creation",
+    "data-types-page": "{applicationName} data types",
+    "data-types-repository": "Management of data sets {applicationName}",
+    "data-type-authorizations": "{dataType} authorizations",
+    "data-type-new-authorization": "New authorization for {dataType}"
+  },
+  "login": {
+    "signin": "Sign in",
+    "signup": "Sign up",
+    "login": "Login",
+    "login-placeholder": "Ex: michel",
+    "pwd": "Password",
+    "pwd-placeholder": "Ex: xxxx",
+    "pwd-forgotten": "Forgotten password ? ",
+    "register": "Register",
+    "confirm-pwd": "Confirmer le mot de passe",
+    "aria-btn-login": "Validate login form button",
+    "aria-btn-signup": "Create an account button"
+  },
+  "validation": {
+    "obligatoire": "Mandatory",
+    "facultatif": "Optional",
+    "invalid-required": "Please fill the field",
+    "invalid-application-name": "The name must only includes lowercase letters.",
+    "invalid-application-name-length": "The name's length should be between 4 and 20 characters.",
+    "invalid-confirmed": "Fields don't match."
+  },
+  "alert": {
+    "cancel": "Cancel",
+    "server-error": "A server error occured",
+    "server-error-appli-exist": "This application's name exist",
+    "user-unknown": "Unknown user",
+    "application-creation-success": "The app has been created!",
+    "application-validate-success": "The YAML file is valid!",
+    "application-edit-success": "The YAML file is update !",
+    "warning": "Warning !",
+    "reference-deletion-msg": "You're about to delete the reference : {label}. Are you sure ?",
+    "delete": "Delete",
+    "reference-csv-upload-error": "An error occured while uploading the csv file",
+    "reference-updated": "Reference updated",
+    "data-updated": "Data type updated",
+    "registered-user": "User registered",
+    "revoke-authorization": "Authorization revoked",
+    "create-authorization": "Authorization created",
+    "dataTypeFiltreEmpty": "No data matching your criteria"
+  },
+  "message": {
+    "app-config-error": "Error in yaml file",
+    "close": "Close message",
+    "data-type-config-error": "Error in csv file"
+  },
+  "menu": {
+    "logout": "Log out",
+    "applications": "Applications",
+    "references": "References",
+    "french": "Français",
+    "english": "English",
+    "language": "Language",
+    "aria-sub-menu": "Access path",
+    "aria-nav-bar": "Main menu",
+    "aria-pagination": "Pagination",
+    "aria-curent-page": "Curent page",
+    "aria-next-page": "Next page",
+    "aria-previous-page": "Previous page"
+  },
+  "applications": {
+    "chose-config": "Chose a configuration",
+    "create": "Create application",
+    "comment": "Comment : ",
+    "no-comment": "No comment",
+    "test": "Test",
+    "name": "Application name",
+    "name-placeholder": "Ex : olac",
+    "creation-date": "Creation date",
+    "actions": "Actions",
+    "references": "References",
+    "dataset": "Data types",
+    "trier": "Sort by",
+    "trierA_z": "Name A - z",
+    "trierZ_a": "Name Z - a",
+    "trierRecent": "Recent date",
+    "filter": "Filter by",
+    "change": "Edit app",
+    "version": "The current version of the application <b class=\"has-text-primary\">{applicationName}</b> is <b class=\"has-text-primary\">{version}.</b>"
+  },
+  "errors": {
+    "emptyFile": "File is empty",
+    "missingReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, you need to one of those references : <code>{references}</code>",
+    "missingReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, you need to one of those references : <code>{references}</code>",
+    "unknownReferenceForChecker": "For data type <code>{dataType}</code>, datum <code>{datum}</code>, component <code>{component}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+    "unknownReferenceForCheckerInReference": "For reference <code>{reference}</code> and validation <code>{validationKey}</code>, the reference <code>{refType}</code> is not in the accepted references which are: <code>{references}</code>",
+    "unsupportedVersion": "YAML files with version <code>{actualVersion}</code> aren't currently managed, expected version : <code>{expectedVersion}</code>",
+    "undeclaredDataGroupForVariable": "Variable <code>{variable}</code> doesn't belong to any data group, it needs to be in one",
+    "variableInMultipleDataGroup": "Variable <code>{variable}</code> is declared in several data groups, it needs to be only in one",
+    "unknownVariablesInDataGroup": "Data group <code>{dataGroup}</code> has undeclared data : <code>{unknownVariables}</code>. <br>Known data : <code>{variables}</code>",
+    "unknownReferenceInCompositereference": "The composite reference <code> {compositeReference} </code> contains references that are not declared <code> {unknownReferences} </code>. Known references <code> {references} </code>",
+    "requiredReferenceInCompositeReferenceForParentKeyColumn": "No reference has been declared for the <i>parentKeyColumn</i> <code> {parentKeyColumn} </code> in the composite reference <code> {compositeReference} </code>.",
+    "requiredParentKeyColumnInCompositeReferenceForReference": "In the composite reference <code> {compositeReference} </code> the reference <code> {reference} </code> refers to <code> {referenceTo} </code> but does not declare a < i> parentKeyColumn </i>. ",
+    "missingParentColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentKeyColumn </i> <code> {parentKeyColumn} </code> does not exist in the reference <code> {reference } </code>. ",
+    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "In the composite reference <code> {compositeReference} </code> the <i> parentRecursiveKey </i> <code> {parentRecursiveKey} </code> does not exist in the reference <code> {reference } </code>. ",
+    "missingTimeScopeVariableComponentKey": "Mandatory indication of the variable (and its component) used for the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>",
+    "missingReferenceInCompositereference": "All components of the composite reference <code> {compositeReference} </code> must declare a reference.",
+    "timeScopeVariableComponentKeyMissingVariable": "Mandatory indication of the variable in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{variables}</code>",
+    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> doesn't be along to any of known variables : <code>{knownVariables}</code>",
+    "timeVariableComponentKeyMissingComponent": "Mandatory indication of the component of : <code>{variable}</code> in which we collect the time period for which we need to attach the data for rights management of data type : <code>{dataType}</code>. <br>Accepted values : <code>{knownComponents}</code>",
+    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> doesn't belong to any of known variables : <code>{variable}</code>. <br>Known components : <code>{knownComponents}</code>",
+    "timeScopeVariableComponentWrongChecker": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because it's not declared as : <code>{expectedChecker}</code>",
+    "timeScopeVariableComponentPatternUnknown": "The component <code>{component}</code> of variable <code>{variable}</code> can't be used for carrying time information because the date format : <code>{pattern}</code> isn't managed. <br>Accepted formats : <code>{knownPatterns}</code>",
+    "missingAuthorizationForDatatype": "The authorization section must be present in the description of the <code> {datatype} </code> data type",
+    "missingAuthorizationScopeVariableComponentKey": "You must indicate at least one group of variables (and their components) in which (s) we collect the spatial information to be attached to the data for the rights management dataset <code> {dataType } </code> ",
+    "authorizationScopeVariableComponentKeyMissingVariable": "You must indicate the variable in which to collect the spatial information to which to attach the data for the management of the rights dataset <code> {dataType} </code> for the authorization <code> {authorizationName} </code>. Possible values ​​<code> {variables} </code> ",
+    "authorizationScopeVariableComponentKeyUnknownVariable": "<code> {variable} </code> is not one of the known columns <code> {knownVariables} </code>",
+    "authorizationVariableComponentKeyMissingComponent": "You must indicate the component of the variable <code> {variable} </code> in which we collect the spatial information to which to attach the data for the management of rights dataset <code> {dataType} < / code> for authorization <code> {authorizationName} </code>. Possible values ​​<code> {knownComponents} </code> ",
+    "authorizationVariableComponentKeyUnknownComponent": "<code> {component} </code> is not one of the known components for the variable <code> {variable} </code>. Known components: <code> {knownComponents} </code>",
+    "authorizationScopeVariableComponentWrongChecker": "The <code> {component} </code> component of the <code> {variable} </code> variable cannot be used as carrying time information because it is not declared data like <code> {expectedChecker} </code> ",
+    "authorizationScopeVariableComponentReftypeUnknown": "The <code> {refType} </code> reference of the <code> {component} </code> component of the <code> {variable} </code> variable has not been declared. accepted: <code> {knownPatterns} </code> ",
+    "authorizationScopeVariableComponentReftypeNull": "No reference has been defined for the <code> {component} </code> component of the variable <code> {variable} </code>. Accepted references: <code> {knownPatterns} </ code> ",
+    "unrecognizedProperty ": " Error at line <code> {lineNumber} </code> (column <code> {columnNumber} </code>): <code> {unknownPropertyName} </code>, c ' is not a recognized property. Recognized properties are <code> {knownProperties} </code> ",
+    "unrecognizedProperty": "Error in line <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, is not a known property. <br>Known properties : <code>{knownProperties}</code>",
+    "invalidFormat": "Error in line : <code>{lineNumber}</code> (column : <code>{columnNumber}</code>) : <code>{value}</code> doesn't have the right format. <br>Expected format : <code>{targetTypeName}</code>",
+    "missingRequiredExpression": "For the validation rule <code>{lineValidationRuleKey}</code>, you have to write the expression to evaluate in order to verify that the data are following the rules.",
+    "illegalGroovyExpression": "For the validation rule : {lineValidationRuleKey}</code>, the expression : <code>{expression}</code> is not correct. Expression compilation error at line : <code>{compilationError.lineNumber}</code> (column : <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+    "unknownCheckerName": "For the validation rule : <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' is declared but is not a known checker",
+    "unknownCheckerNameForVariableComponentCheckerInReference": "In the reference validation <code> {reference} </code> and the validation rule <code> {validationRuleDescriptionEntryKey} </code>, '<code> {name} </code>' is declared but not a known check: possible values ​​<code> {variableComponentCheckers} </code>. ",
+    "csvBoundToUnknownVariable": "In the CSV format, header <code>{header}</code> is bound to unknown variable <code>{variable}</code>. Known variables: <code>{variables}</code>",
+    "unknownCheckerNameForVariableComponent": "In the description of the data type {datatype} the component <code> {component} </code> of the variable <code> {variable} </code> the value checker <code> {checkerName} </code> is declared but it is not a known control <br /> Known checkers are <code>{variableComponentCheckers}</code>",
+    "missingColumnReferenceForCheckerInReference": "In the reference description {reference} and the validation <code> {validationRuleDescriptionEntryKey} </code> the value checker <code> {checkerName} </code> declares unknown columns <code> {missingColumns } </code>: possible values ​​<code> {knownColumns} </code> ",
+    "missingParamColumnReferenceForCheckerInReference": "In the description of the <code> {reference} </code>, the validation rule <code> {validationRuleDescriptionEntryKey} </code> does not specify on which columns the rule should be executed by declaring a <code> columns </code> parameter ",
+    "csvBoundToUnknownVariableComponent": "In the CSV format, header <code>{header}</code> is bound to <code>{variable}</code> but it has no <code>{component}</code> component. Known components: <code>{components}</code>",
+    "invalidKeyColumns": "In the description of reference <code>{reference}</code>, colomns <code>{unknownUsedAsKeyElementColumns}</code> are declared as components of the key but there are no such columns. Known columns are <code>{knownColumns}</code>",
+    "missingKeyColumnsForReference": "In the description of reference <code>{reference}</code>, you must declare the components (at least one) of the key",
+    "invalidInternationalizedColumns": "In the repository description <code> {reference} </code>, the columns <code> {unknownUsedAsInternationalizedColumns} </code> are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+    "invalidInternationalizedColumnsForDataType": "In the <code> {reference} </code> repository overload of the <code> {dataType} </code> data type description, the <code> {unknownUsedAsInternationalizedColumns} </code> columns are declared as part of internationalizable columns when they do not exist. Known columns: <code> {knownColumns} </code> ",
+    "unknownReferenceInDatatypeReferenceDisplay": "In the repository display overload of the <code> {dataType} </code> datatype description, the <code> {reference} </code> repository is unknown. Known repositories known : <code> {references} </code> ",
+    "unexpectedHeaderColumn": "Unexpected column header. Expected : <code>{expectedHeaderColumn}</code> <br />Actual : <code>{actualHeaderColumn}</code>",
+    "headerColumnPatternNotMatching": "Column header pattern not matching. Pattern to match : <code>{expectedHeaderColumnPattern}</code><br/>Actual header : <code>{actualHeaderColumn}</code>",
+    "unexpectedTokenCount": "Unexpected token count. Expected : <code>{expectedTokenCount}</code><br/>Actual header : <code>{actualHeader}</code> has <code>{actualTokenCount}</code> tokens",
+    "invalidHeaders": "Invalid headers. Expected columns : <code>{expectedColumns}</code><br/>Actual columns : <code>{actualColumns}</code><br/>Missing columns : <code>{missingColumns}</code><br/>Unknown columns : <code>{unknownColumns}</code>",
+    "emptyHeader": "The file contains a column with an empty header",
+    "duplicatedHeaders": "These headers are duplicated : <code>{duplicatedHeaders}</code>",
+    "patternNotMatched": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+    "patternNotMatchedWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+    "invalidDate": "For the identified component: <code> {target} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>. ",
+    "invalidDateWithColumn": "For column: <code> {column} </code> the date <code> {value} </code> does not respect the expected format: <code> {pattern} </code>.",
+    "invalidInteger": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+    "invalidIntegerWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be an integer.",
+    "invalidFloat": "For the identified component: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+    "invalidFloatWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> must be a decimal number.",
+    "invalidReference": "For the identified component: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Expected values ​​<code> {referenceValues} </code>. ",
+    "invalidReferenceWithColumn": "For column: <code> {target} </code> the value <code> {value} </code> does not exist in the reference <code> {refType} </code>. Values expected <code> {referenceValues} </code>. ",
+    "checkerExpressionReturnedFalse": "The following constraint is not respected: <code> {expression} </code>",
+    "requiredValue": "For the identified component: <code> {target} </code> the value cannot be zero.",
+    "requiredValueWithColumn": "For column: <code> {target} </code> the value cannot be zero.",
+    "timerangeoutofinterval": "The date <code> {value} </code> is incompatible with the date range of the deposit. It must be between <code> {from} </code> and <code> {to} </code>. ",
+    "badauthorizationscopeforrepository": "Authorization <code> {authorization} </code>) must be <code> {expectedValue} / code> and not <code> {givenValue} </code>",
+    "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
+    "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
+    "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
+    "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
+    "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
+    "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
+    "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
+    "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
+    "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
+  },
+  "referencesManagement": {
+    "actions": "Actions",
+    "consult": "Consult",
+    "download": "Download",
+    "delete": "Delete",
+    "references": "References",
+    "data": "Data"
+  },
+  "dataTypesManagement": {
+    "data-types": "Data types",
+    "consult-authorization": "Consult authorizations",
+    "réinitialiser": "Reset",
+    "all": "all",
+    "filtre": "filter",
+    "tri": "sort",
+    "ASC": "ASC",
+    "DESC": "DESC",
+    "validate": "Validate",
+    "filtered": "Filters used",
+    "sorted": "The sorts used",
+    "title-modal-numeric": "Choice of value range",
+    "title-modal-date": "Choice of date range",
+    "manage-datasets": "Manage datasets"
+  },
+  "dataTypesRepository": {
+    "card-title-upload-file": "Drop a version on this dataset",
+    "start-date": "Start date",
+    "end-date": "End date",
+    "comment": "Comment",
+    "choose-file": "Choose a file",
+    "placeholder-datepicker": "Type or select a date...",
+    "placeholder-select": "Select...",
+    "submit": "Submit",
+    "list-file-data": "List of datasets on this repository",
+    "list-file-data-period": "List of versions for the period",
+    "table-file-data-id": "ID",
+    "table-file-data-size": "Size",
+    "table-file-data-create": "Create",
+    "table-file-data-create-by": "Create by :",
+    "table-file-data-publish": "Publish",
+    "table-file-data-publish-by": "Publish by :",
+    "table-file-data-publication": "Publication",
+    "table-file-data-delete": "Delete",
+    "table-file-data-period": "Period"
+  },
+  "dataTypeAuthorizations": {
+    "add-auhtorization": "Add an authorization",
+    "sub-menu-data-type-authorizations": "{dataType} authorizations",
+    "sub-menu-new-authorization": "new authorization",
+    "users": "Users",
+    "name": "Name",
+    "roles": "Roles",
+    "users-placeholder": "Chose users to authorize",
+    "data-groups": "Data groups",
+    "data-groups-placeholder": "Chose data groups to authorize",
+    "authorization-scopes": "Authorization scopes",
+    "period": "Authorization period",
+    "from-date": "From date : ",
+    "to-date": "To date : ",
+    "from-date-to-date": "From date to date : ",
+    "always": "Always",
+    "to": "to",
+    "from": "from",
+    "create": "Create authorization",
+    "user": "User",
+    "data-group": "Data group",
+    "data-type": "Data type",
+    "actions": "Actions",
+    "revoke": "Revoke"
+  },
+  "ponctuation": {
+    "semicolon": ";",
+    "comma": ",",
+    "period": ".",
+    "colon": ":",
+    "hyphen": "-",
+    "plus": "+",
+    "less": "<",
+    "greater": ">",
+    "arrow-right": "->",
+    "arrow-left": "<-",
+    "slash": "/",
+    "regEx": ".*",
+    "star": "*"
+  }
 }
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 8b47ec2cc..f83fa5191 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -1,258 +1,258 @@
 {
-    "titles": {
-        "login-page": "Bienvenue sur SI-ORE",
-        "applications-page": "Mes applications",
-        "references-page": "Référentiels de {applicationName}",
-        "references-data": "Données de {refName}",
-        "application-creation": "Créer une application",
-        "data-types-page": "Type de données de {applicationName}",
-        "data-types-repository": "Gestion des jeux de données de {applicationName}",
-        "data-type-authorizations": "Autorisations de {dataType}",
-        "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
-    },
-    "login": {
-        "signin": "Se connecter",
-        "signup": "Créer un compte",
-        "login": "Identifiant",
-        "login-placeholder": "Ex: michel",
-        "pwd": "Mot de passe",
-        "pwd-placeholder": "Ex: xxxx",
-        "pwd-forgotten": "Mot de passe oublié ?",
-        "register": "Créer un compte",
-        "confirm-pwd": "Confirmer le mot de passe",
-        "aria-btn-login": "Bouton valider le formulaire de connexion",
-        "aria-btn-signup": "Bouton création d'un compte"
-    },
-    "validation": {
-        "obligatoire": "Obligatoire",
-        "facultatif": "Facultatif",
-        "invalid-required": "Merci de remplir le champ",
-        "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
-        "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
-        "invalid-confirmed": "Les deux champs ne correspondent pas."
-    },
-    "alert": {
-        "cancel": "Annuler",
-        "server-error": "Une erreur serveur est survenue",
-        "server-error-appli-exist": "Ce nom d'application existe déjà",
-        "user-unknown": "Identifiants inconnus",
-        "application-creation-success": "L'application a été créée !",
-        "application-validate-success": "Le fichier YAML est valide !",
-        "application-edit-success": "Le fichier YAML est mis à jours !",
-        "warning": "Attention !",
-        "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
-        "delete": "Supprimer",
-        "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
-        "reference-updated": "Référentiel mis à jour",
-        "data-updated": "Type de donnée mis à jour",
-        "registered-user": "Compte utilisateur créé",
-        "revoke-authorization": "Autorisation révoquée",
-        "create-authorization": "Autorisation créée",
-        "dataTypeFiltreEmpty": "Pas de données correspondant à vos critères"
-    },
-    "message": {
-        "app-config-error": "Erreur dans le fichier yaml",
-        "close": "Fermer le message",
-        "data-type-config-error": "Erreur dans le fichier csv"
-    },
-    "menu": {
-        "logout": "Se déconnecter",
-        "applications": "Applications",
-        "references": "Référentiels",
-        "french": "Français",
-        "english": "English",
-        "language": "Langue",
-        "aria-sub-menu": "Chemin d'acces",
-        "aria-nav-bar": "Menu principal",
-        "aria-pagination": "Pagination",
-        "aria-curent-page": "Page actuelle",
-        "aria-next-page": "Page suivante",
-        "aria-previous-page": "Page précédente"
-    },
-    "applications": {
-        "chose-config": "Choisir une configuration",
-        "create": "Créer l'application",
-        "comment": "Commentaire : ",
-        "no-comment": "Pas de commentaire",
-        "test": "Tester",
-        "name": "Nom de l'application",
-        "name-placeholder": "Ex : olac",
-        "creation-date": "Date de création",
-        "actions": "Actions",
-        "references": "Référentiels",
-        "dataset": "Données",
-        "trier": "Trier",
-        "trierA_z": "Nom A - z",
-        "trierZ_a": "Nom Z - a",
-        "trierRecent": "Date récente",
-        "filter": "Filtrer",
-        "change": "Modifier l'application",
-        "version": "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
-    },
-    "errors": {
-        "emptyFile": "Le fichier est vide",
-        "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-        "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
-        "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-        "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
-        "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
-        "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
-        "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
-        "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
-        "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
-        "missingReferenceInCompositereference": "Tous les composants de la    reference composite <code>{compositeReference}</code> doivent déclarer une référence",
-        "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée    pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
-        "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la    référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
-        "missingParentColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
-        "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
-        "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-        "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
-        "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-        "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
-        "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-        "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-        "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
-        "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
-        "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
-        "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
-        "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
-        "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
-        "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
-        "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
-        "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
-        "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
-        "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
-        "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
-        "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
-        "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
-        "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
-        "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
-        "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
-        "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
-        "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>    de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
-        "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation    <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
-        "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
-        "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
-        "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
-        "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
-        "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
-        "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
-        "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
-        "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
-        "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
-        "emptyHeader": "Le fichier contient un en-tête de colonne vide",
-        "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
-        "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-        "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
-        "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-        "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
-        "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-        "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
-        "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-        "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
-        "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-        "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>    la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
-        "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
-        "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
-        "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
-        "timerangeoutofinterval": "La date    <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
-        "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
-        "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
-        "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-        "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-        "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le    parent n'existe pas. Valeurs acceptées {knownReferences}",
-        "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur    à celui de la ligne de données.",
-        "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
-        "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
-        "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
-        "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
-        "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
-        "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
-    },
-    "referencesManagement": {
-        "actions": "Actions",
-        "consult": "Consulter",
-        "download": "Télécharger",
-        "delete": "Supprimer",
-        "references": "Référentiels",
-        "data": "Données"
-    },
-    "dataTypesManagement": {
-        "data-types": "Type de données",
-        "consult-authorization": "Consulter les autorisations",
-        "réinitialiser": "Réinitialiser",
-        "all": "tous",
-        "filtre": "filtre",
-        "tri": "tri",
-        "ASC": "ASC",
-        "DESC": "DESC",
-        "validate": "Valider",
-        "filtered": "Les filtres utilisés",
-        "sorted": "Les tris utilisés",
-        "title-modal-numeric": "Choix de l'interval de valeur",
-        "title-modal-date": "Choix de l'interval de date",
-        "manage-datasets": "Gérer les jeux de données"
-    },
-    "dataTypesRepository": {
-        "card-title-upload-file": "Déposer une version sur ce jeux de données",
-        "start-date": "Date de début",
-        "end-date": "Date de fin",
-        "comment": "Commentaire",
-        "choose-file": "Choisir un fichier",
-        "placeholder-datepicker": "Taper ou sélectionner une date...",
-        "placeholder-select": "Sélectionner...",
-        "submit": "Envoyer",
-        "list-file-data": "Liste des jeux de données sur ce dépôt",
-        "list-file-data-period": "Liste des versions pour la période",
-        "table-file-data-id": "ID",
-        "table-file-data-size": "Taille",
-        "table-file-data-create": "Création",
-        "table-file-data-create-by": "Créer par :",
-        "table-file-data-publish": "Publier",
-        "table-file-data-publish-by": "Publier par :",
-        "table-file-data-publication": "Publication",
-        "table-file-data-delete": "Supprimer",
-        "table-file-data-period": "Période"
-    },
-    "dataTypeAuthorizations": {
-        "add-auhtorization": "Ajouter une autorisation",
-        "sub-menu-data-type-authorizations": "autorisations de {dataType}",
-        "sub-menu-new-authorization": "nouvelle autorisation",
-        "users": "Utilisateurs",
-        "name": "Nom",
-        "roles": "Roles",
-        "users-placeholder": "Choisir les utilisateurs à autoriser",
-        "data-groups": "Groupes de données",
-        "data-groups-placeholder": "Choisir les données à autoriser",
-        "authorization-scopes": "Périmètres d'autorisation",
-        "period": "Période d'autorisation",
-        "from-date": "À partir du",
-        "to-date": "Jusqu'au",
-        "from-date-to-date": "De date à date",
-        "always": "Toujours",
-        "to": "à",
-        "from": "de",
-        "create": "Créer l'autorisation",
-        "user": "Utilisateur",
-        "data-group": "Groupe de données",
-        "data-type": "Type de donnée",
-        "actions": "Actions",
-        "revoke": "Révoquer"
-    },
-    "ponctuation": {
-        "semicolon": ";",
-        "comma": ",",
-        "period": ".",
-        "colon": ":",
-        "hyphen": "-",
-        "plus": "+",
-        "less": "<",
-        "greater": ">",
-        "arrow-right": "->",
-        "arrow-left": "<-",
-        "slash": "/",
-        "regEx": ".*"
-    }
+  "titles": {
+    "login-page": "Bienvenue sur SI-ORE",
+    "applications-page": "Mes applications",
+    "references-page": "Référentiels de {applicationName}",
+    "references-data": "Données de {refName}",
+    "application-creation": "Créer une application",
+    "data-types-page": "Type de données de {applicationName}",
+    "data-types-repository": "Gestion des jeux de données de {applicationName}",
+    "data-type-authorizations": "Autorisations de {dataType}",
+    "data-type-new-authorization": "Nouvelle autorisation pour {dataType}"
+  },
+  "login": {
+    "signin": "Se connecter",
+    "signup": "Créer un compte",
+    "login": "Identifiant",
+    "login-placeholder": "Ex: michel",
+    "pwd": "Mot de passe",
+    "pwd-placeholder": "Ex: xxxx",
+    "pwd-forgotten": "Mot de passe oublié ?",
+    "register": "Créer un compte",
+    "confirm-pwd": "Confirmer le mot de passe",
+    "aria-btn-login": "Bouton valider le formulaire de connexion",
+    "aria-btn-signup": "Bouton création d'un compte"
+  },
+  "validation": {
+    "obligatoire": "Obligatoire",
+    "facultatif": "Facultatif",
+    "invalid-required": "Merci de remplir le champ",
+    "invalid-application-name": "Le nom ne doit comporter que des lettresminuscules .",
+    "invalid-application-name-length": "Le nom doit être compris en 4 et 20 caractères.",
+    "invalid-confirmed": "Les deux champs ne correspondent pas."
+  },
+  "alert": {
+    "cancel": "Annuler",
+    "server-error": "Une erreur serveur est survenue",
+    "server-error-appli-exist": "Ce nom d'application existe déjà",
+    "user-unknown": "Identifiants inconnus",
+    "application-creation-success": "L'application a été créée !",
+    "application-validate-success": "Le fichier YAML est valide !",
+    "application-edit-success": "Le fichier YAML est mis à jours !",
+    "warning": "Attention !",
+    "reference-deletion-msg": "Vous allez supprimer le référentiel : {label}. Êtes-vous sûr ?",
+    "delete": "Supprimer",
+    "reference-csv-upload-error": "Une erreur s'est produite au téléversement du fichier csv",
+    "reference-updated": "Référentiel mis à jour",
+    "data-updated": "Type de donnée mis à jour",
+    "registered-user": "Compte utilisateur créé",
+    "revoke-authorization": "Autorisation révoquée",
+    "create-authorization": "Autorisation créée",
+    "dataTypeFiltreEmpty": "Pas de données correspondant à vos critères"
+  },
+  "message": {
+    "app-config-error": "Erreur dans le fichier yaml",
+    "close": "Fermer le message",
+    "data-type-config-error": "Erreur dans le fichier csv"
+  },
+  "menu": {
+    "logout": "Se déconnecter",
+    "applications": "Applications",
+    "references": "Référentiels",
+    "french": "Français",
+    "english": "English",
+    "language": "Langue",
+    "aria-sub-menu": "Chemin d'acces",
+    "aria-nav-bar": "Menu principal",
+    "aria-pagination": "Pagination",
+    "aria-curent-page": "Page actuelle",
+    "aria-next-page": "Page suivante",
+    "aria-previous-page": "Page précédente"
+  },
+  "applications": {
+    "chose-config": "Choisir une configuration",
+    "create": "Créer l'application",
+    "comment": "Commentaire : ",
+    "no-comment": "Pas de commentaire",
+    "test": "Tester",
+    "name": "Nom de l'application",
+    "name-placeholder": "Ex : olac",
+    "creation-date": "Date de création",
+    "actions": "Actions",
+    "references": "Référentiels",
+    "dataset": "Données",
+    "trier": "Trier",
+    "trierA_z": "Nom A - z",
+    "trierZ_a": "Nom Z - a",
+    "trierRecent": "Date récente",
+    "filter": "Filtrer",
+    "change": "Modifier l'application",
+    "version": "La version actuelle de l'application <b class=\"has-text-primary\">{applicationName}</b> est la version <b class=\"has-text-primary\">{version}.</b>"
+  },
+  "errors": {
+    "emptyFile": "Le fichier est vide",
+    "missingReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+    "missingReferenceForCheckerInReference": "Pour la reference <code>{reference}</code>, la validation <code>{validationKey}</code>, il faut préciser le référentiel parmi <code>{references}</code>",
+    "unknownReferenceForChecker": "Pour le type de données <code>{dataType}</code>, la donnée <code>{datum}</code>, le composant <code>{component}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+    "unknownReferenceForCheckerInReference": "Pour la référence <code>{reference}</code>, la validation <code>{validationKey}</code>, la référence <code>{refType}</code> n’est pas dans les références acceptées qui sont : <code>{references}</code>",
+    "unsupportedVersion": "Les fichiers YAML de version <code>{actualVersion}</code> ne sont pas gérés, version attendue <code>{expectedVersion}</code>",
+    "undeclaredDataGroupForVariable": "La variable <code>{variable}</code> n’est déclarée appartenir à aucun groupe de données, elle doit être présente dans un groupe",
+    "variableInMultipleDataGroup": "La variable <code>{variable}</code> est déclarée dans plusieurs groupes de données, elle ne doit être présente que dans un groupe",
+    "unknownVariablesInDataGroup": "le groupe de données <code>{dataGroup}</code> contient des données qui ne sont pas déclarées <code>{unknownVariables}</code>. Données connues <code>{variables}</code>",
+    "unknownReferenceInCompositereference": "La reference composite <code>{compositeReference}</code> contient des références qui ne sont pas déclarées <code>{unknownReferences}</code>. Références connues <code>{references}</code>",
+    "missingReferenceInCompositereference": "Tous les composants de la    reference composite <code>{compositeReference}</code> doivent déclarer une référence",
+    "requiredReferenceInCompositeReferenceForParentKeyColumn": "Aucune référence n'a été déclarée    pour la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> dans la référence composite <code>{compositeReference}</code> .",
+    "requiredParentKeyColumnInCompositeReferenceForReference": "Dans la    référence composite <code>{compositeReference}</code> la référence <code>{reference}</code> fait référence à <code>{referenceTo}</code> mais ne déclare pas de <i>parentKeyColumn</i> .",
+    "missingParentColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentKeyColumn</i> <code>{parentKeyColumn}</code> n'existe pas dans la référence <code>{reference}</code>.",
+    "missingParentRecursiveKeyColumnForReferenceInCompositeReference": "Dans la    référence composite <code>{compositeReference}</code> la <i>parentRecursiveKey</i> <code>{parentRecursiveKey}</code> n'existe pas dans la référence <code>{reference}</code>.",
+    "missingTimeScopeVariableComponentKey": "Il faut indiquer la variable (et son composant) dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+    "timeScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{variables}</code>",
+    "timeScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+    "timeVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille la période de temps à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>. Valeurs possibles <code>{knownComponents}</code>",
+    "timeVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+    "timeScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+    "timeScopeVariableComponentPatternUnknown": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car le format de date '<code>{pattern}</code>' n’est pas géré. Formats acceptés : <code>{knownPatterns}</code>",
+    "missingAuthorizationScopeVariableComponentKey": "Il faut indiquer au moins un groupe de variables (et leur composants) dans le(s)quel(s) on recueille les informations spatiales à rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code>",
+    "missingAuthorizationForDatatype": "La section authorization doit être présente dans la description du type de données <code>{datatype}</code>",
+    "authorizationScopeVariableComponentKeyMissingVariable": "Il faut indiquer la variable dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{variables}</code>",
+    "authorizationScopeVariableComponentKeyUnknownVariable": "<code>{variable}</code> ne fait pas partie des colonnes connues <code>{knownVariables}</code>",
+    "authorizationVariableComponentKeyMissingComponent": "Il faut indiquer le composant de la variable <code>{variable}</code> dans laquelle on recueille les informations spatiales à laquelle rattacher la donnée pour le gestion des droits jeu de données <code>{dataType}</code> pour l'autorisation <code>{authorizationName}</code>. Valeurs possibles <code>{knownComponents}</code>",
+    "authorizationVariableComponentKeyUnknownComponent": "<code>{component}</code> ne fait pas partie des composants connus pour la variable <code>{variable}</code>. Composants connus : <code>{knownComponents}</code>",
+    "authorizationScopeVariableComponentWrongChecker": "Le composant <code>{component}</code> de la variable <code>{variable}</code> ne peut pas être utilisé comme portant l’information temporelle car ce n’est pas une donnée déclarée comme <code>{expectedChecker}</code>",
+    "authorizationScopeVariableComponentReftypeUnknown": "La référence <code>{refType}</code> du composant <code>{component}</code> de la variable <code>{variable}</code> n'a pas été déclarée. Références acceptées : <code>{knownPatterns}</code>",
+    "authorizationScopeVariableComponentReftypeNull": "Aucune référence n'a été définie pour le composant <code>{component}</code> de la variable <code>{variable}</code>. Références acceptées : <code>{knownPatterns}</code>",
+    "authorizationVariableComponentMustReferToCompositereference": "Pour le type de données <code>{dataType}</code>, la référence <code>{refType}</code> de l'authorisation <code>{authorizationName}</code> doit être définie commme une référence composite <code>compositeReferences</code>. CompositesReferences déclarée : <code>{knownCompositesReferences}</code>",
+    "unrecognizedProperty": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : <code>{unknownPropertyName}</code>, c’est pas une propriété reconnue. Les propriétés reconnues sont <code>{knownProperties}</code>",
+    "invalidFormat": "Erreur à la ligne <code>{lineNumber}</code> (colonne <code>{columnNumber}</code>) : '<code>{value}</code>' n’a pas le bon format. Le type attendu est <code>{targetTypeName}</code>",
+    "missingRequiredExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, vous devez renseigner l’expression à évaluer pour contrôler que la règle est respectée par les données",
+    "illegalGroovyExpression": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, l’expression renseignée <code>{expression}</code> n’est pas correcte. Erreur de compilation de l’expression à la ligne <code>{compilationError.lineNumber}</code> (colonne <code>{compilationError.columnNumber}</code>) message '<code>{compilationError.message}</code>'",
+    "unknownCheckerName": "Pour la règle de validation <code>{lineValidationRuleKey}</code>, '<code>{checkerName}</code>' est déclaré mais ce n’est pas un contrôle connu",
+    "unknownCheckerNameForVariableComponentCheckerInReference": "Dans la validation de la référence <code>{reference}</code> et la règle de validation <code>{validationRuleDescriptionEntryKey}</code>, '<code>{name}</code>' est déclaré mais ce n’est pas un contrôle connu: valeurs possibles <code>{variableComponentCheckers}</code>.",
+    "csvBoundToUnknownVariable": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> qui n’est pas connue. Variables connues <code>{variables}</code>",
+    "unknownCheckerNameForVariableComponent": "Dans la description du type de données {datatype} le composant <code>{component}</code>    de la variable <code>{variable}</code> le vérificateur de valeur <code>{checkerName}</code> est déclaré mais ce n’est pas un contrôle connu<br /> Vérificateurs connues : <code>{variableComponentCheckers}</code>",
+    "missingColumnReferenceForCheckerInReference": "Dans la description de la référence {reference} et la validation    <code>{validationRuleDescriptionEntryKey}</code> le vérificateur de valeur <code>{checkerName}</code> déclare des colonnes inconnues <code>{missingColumns}</code> : valeurs possible<code>{knownColumns}</code>",
+    "missingParamColumnReferenceForCheckerInReference": "Dans la description de la <code>{reference}</code>, la règle de validation <code>{validationRuleDescriptionEntryKey}</code> ne précise pas sur quelles colonnes la règle doit s'exécuter en déclarant un paramètre <code>columns</code>",
+    "csvBoundToUnknownVariableComponent": "Dans le format CSV, l’entête <code>{header}</code> est lié à la variable <code>{variable}</code> mais elle n’a pas de composant <code>{component}</code>. Composants connus <code>{components}</code>",
+    "invalidKeyColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsKeyElementColumns}</code> sont déclarées comme faisant partie de la clé alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "missingKeyColumnsForReference": "Dans la description du référentiel <code>{reference}</code>, vous devez déclarer les colonnes (au moins une) qui composent la clé naturelle",
+    "invalidInternationalizedColumns": "Dans la description du référentiel <code>{reference}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "invalidInternationalizedColumnsForDataType": "Dans la surcharge du référentiel <code>{reference}</code> de la description du type de donnée <code>{dataType}</code>, les colonnes <code>{unknownUsedAsInternationalizedColumns}</code> sont déclarées comme faisant partie de colonnes internationalisables alors qu’elles n’existent pas. Colonnes connues : <code>{knownColumns}</code>",
+    "unknownReferenceInDatatypeReferenceDisplay": "Dans la surcharge de l'affichage des référentiels de la description du type de donnée <code>{dataType}</code>, le référentiel <code>{reference}</code> est inconnu . Référentiels connus connues : <code>{references}</code>",
+    "unexpectedHeaderColumn": "En-tête de colonne inattendu. En-tête attendu : <code>{expectedHeaderColumn}</code> <br />En-tête actuel : <code>{actualHeaderColumn}</code>",
+    "headerColumnPatternNotMatching": "Erreur dans le format de l'en-tête de colonne. Format à respecter : <code>{expectedHeaderColumnPattern}</code><br/>En-tête actuel : <code>{actualHeaderColumn}</code>",
+    "unexpectedTokenCount": "Le nombre de token est inattendu. Nombre attendu : <code>{expectedTokenCount}</code><br/>L'en-tête actuel : <code>{actualHeader}</code> comprend <code>{actualTokenCount}</code> tokens",
+    "invalidHeaders": "En-têtes de colonne invalides. Les colonnes attendues sont : <code>{expectedColumns}</code><br/>Les colonnes actuelles sont : <code>{actualColumns}</code><br/> Il manque les colonnes : <code>{missingColumns}</code><br/>Les colonnes suivantes sont inconnues : <code>{unknownColumns}</code>",
+    "emptyHeader": "Le fichier contient un en-tête de colonne vide",
+    "duplicatedHeaders": "Les en-têtes suivants sont dupliqués : <code>{duplicatedHeaders}</code>",
+    "patternNotMatched": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+    "patternNotMatchedWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>.",
+    "invalidDate": "Pour le composant identifié : <code>{target}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+    "invalidDateWithColumn": "Pour la colonne : <code>{column}</code> la date <code>{value}</code> ne respecte pas le format attendu : <code>{pattern}</code>. ",
+    "invalidInteger": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+    "invalidIntegerWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un entier.",
+    "invalidFloat": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+    "invalidFloatWithColumn": "Pour la colonne : <code>{target}</code> la valeur <code>{value}</code> doit être un nombre décimal.",
+    "invalidReference": "Pour le composant identifié : <code>{target}</code> la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+    "invalidReferenceWithColumn": "Pour la colonne : <code>{target}</code>    la valeur <code>{value}</code> n'existe pas dans la référence <code>{refType}</code>. Valeurs attendues <code>{referenceValues}</code>.",
+    "checkerExpressionReturnedFalse": "La contrainte suivante n'est pas respectée : <code>{expression}</code>",
+    "requiredValue": "Pour le composant identifié : <code>{target}</code> la valeur ne peut pas être nulle.",
+    "requiredValueWithColumn": "Pour la colonne : <code>{target}</code> la valeur ne peut pas être nulle.",
+    "timerangeoutofinterval": "La date    <code>{value}</code> est incompatible avec l'intervale de dates du dépôt. Elle doit être comprise entre <code>{from}</code> et <code>{to}</code>.",
+    "badauthorizationscopeforrepository": "L'autorisation <code>{authorization}</code>) doit être <code>{expectedValue}/code> et non <code>{givenValue}</code>",
+    "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
+    "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+    "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
+    "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le    parent n'existe pas. Valeurs acceptées {knownReferences}",
+    "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur    à celui de la ligne de données.",
+    "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
+    "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
+    "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
+    "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
+  },
+  "referencesManagement": {
+    "actions": "Actions",
+    "consult": "Consulter",
+    "download": "Télécharger",
+    "delete": "Supprimer",
+    "references": "Référentiels",
+    "data": "Données"
+  },
+  "dataTypesManagement": {
+    "data-types": "Type de données",
+    "consult-authorization": "Consulter les autorisations",
+    "réinitialiser": "Réinitialiser",
+    "all": "tous",
+    "filtre": "filtre",
+    "tri": "tri",
+    "ASC": "ASC",
+    "DESC": "DESC",
+    "validate": "Valider",
+    "filtered": "Les filtres utilisés",
+    "sorted": "Les tris utilisés",
+    "title-modal-numeric": "Choix de l'interval de valeur",
+    "title-modal-date": "Choix de l'interval de date",
+    "manage-datasets": "Gérer les jeux de données"
+  },
+  "dataTypesRepository": {
+    "card-title-upload-file": "Déposer une version sur ce jeux de données",
+    "start-date": "Date de début",
+    "end-date": "Date de fin",
+    "comment": "Commentaire",
+    "choose-file": "Choisir un fichier",
+    "placeholder-datepicker": "Taper ou sélectionner une date...",
+    "placeholder-select": "Sélectionner...",
+    "submit": "Envoyer",
+    "list-file-data": "Liste des jeux de données sur ce dépôt",
+    "list-file-data-period": "Liste des versions pour la période",
+    "table-file-data-id": "ID",
+    "table-file-data-size": "Taille",
+    "table-file-data-create": "Création",
+    "table-file-data-create-by": "Créer par :",
+    "table-file-data-publish": "Publier",
+    "table-file-data-publish-by": "Publier par :",
+    "table-file-data-publication": "Publication",
+    "table-file-data-delete": "Supprimer",
+    "table-file-data-period": "Période"
+  },
+  "dataTypeAuthorizations": {
+    "add-auhtorization": "Ajouter une autorisation",
+    "sub-menu-data-type-authorizations": "autorisations de {dataType}",
+    "sub-menu-new-authorization": "nouvelle autorisation",
+    "users": "Utilisateurs",
+    "name": "Nom",
+    "roles": "Roles",
+    "users-placeholder": "Choisir les utilisateurs à autoriser",
+    "data-groups": "Groupes de données",
+    "data-groups-placeholder": "Choisir les données à autoriser",
+    "authorization-scopes": "Périmètres d'autorisation",
+    "period": "Période d'autorisation",
+    "from-date": "À partir du",
+    "to-date": "Jusqu'au",
+    "from-date-to-date": "De date à date",
+    "always": "Toujours",
+    "to": "à",
+    "from": "de",
+    "create": "Créer l'autorisation",
+    "user": "Utilisateur",
+    "data-group": "Groupe de données",
+    "data-type": "Type de donnée",
+    "actions": "Actions",
+    "revoke": "Révoquer"
+  },
+  "ponctuation": {
+    "semicolon": ";",
+    "comma": ",",
+    "period": ".",
+    "colon": ":",
+    "hyphen": "-",
+    "plus": "+",
+    "less": "<",
+    "greater": ">",
+    "arrow-right": "->",
+    "arrow-left": "<-",
+    "slash": "/",
+    "regEx": ".*"
+  }
 }
\ No newline at end of file
-- 
GitLab


From 07cf727fdd92f8faa303d58d8224274776676286 Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Thu, 17 Mar 2022 17:53:36 +0100
Subject: [PATCH 5/6] Corrige une faute dans un code d'erreur

---
 .../java/fr/inra/oresing/rest/ConfigurationParsingResult.java   | 2 +-
 ui2/src/locales/en.json                                         | 2 +-
 ui2/src/locales/fr.json                                         | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
index cd8d43fc2..f73238e41 100644
--- a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
+++ b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
@@ -411,7 +411,7 @@ public class ConfigurationParsingResult {
         }
 
         public Builder recordCsvMissingExportHeaderNameForConstantDescription(String dataType) {
-            return recordError("missinExportHeaderNameForConstantDescription", ImmutableMap.of(
+            return recordError("missingExportHeaderNameForConstantDescription", ImmutableMap.of(
                     "dataType", dataType
             ));
         }
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index 42b6402a2..af2714c3f 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -168,7 +168,7 @@
     "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
     "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
     "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
-    "missinExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
+    "missingExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
     "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
   },
   "referencesManagement": {
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 1aa335284..dc51af71d 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -168,7 +168,7 @@
     "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
     "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
     "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
-    "missinExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
+    "missingExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
     "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
   },
   "referencesManagement": {
-- 
GitLab


From dcd9d8e649264f4739dc90234b021a0d2fee529c Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Thu, 17 Mar 2022 18:13:44 +0100
Subject: [PATCH 6/6] Formattage Java

---
 .../fr/inra/oresing/model/Configuration.java  |  6 +++---
 .../rest/ApplicationConfigurationService.java | 14 ++++++-------
 .../fr/inra/oresing/rest/OreSiService.java    | 20 ++++++-------------
 3 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java
index 61776f56a..70fc0eac6 100644
--- a/src/main/java/fr/inra/oresing/model/Configuration.java
+++ b/src/main/java/fr/inra/oresing/model/Configuration.java
@@ -195,9 +195,9 @@ public class Configuration {
         VariableComponentKey boundTo;
         String exportHeader;
 
-        public int getColumnNumber(ImmutableList<String> headerRows ) {
-            if(headerName!=null && headerRows.contains(headerName)){
-                return headerRows.indexOf(headerName)+1;
+        public int getColumnNumber(ImmutableList<String> headerRows) {
+            if (headerName != null && headerRows.contains(headerName)) {
+                return headerRows.indexOf(headerName) + 1;
             }
             return columnNumber;
         }
diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
index 5fe245960..8b48f2f8d 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
@@ -295,25 +295,25 @@ public class ApplicationConfigurationService {
                     final String headerName = headerConstantDescription.getHeaderName();
                     final int rowNumber = headerConstantDescription.getRowNumber();
                     final int headerLine = format.getHeaderLine();
-                    if(rowNumber== headerLine){
+                    if (rowNumber == headerLine) {
                         builder.recordCsvSameHeaderLineAndFirstRowLineForConstantDescription(dataType);
                     }
                     final int firstRowLine = format.getFirstRowLine();
-                    if(rowNumber>= firstRowLine){
+                    if (rowNumber >= firstRowLine) {
                         builder.recordCsvTooBigRowLineForConstantDescription(dataType);
                     }
-                    if(rowNumber<1){
+                    if (rowNumber < 1) {
                         builder.recordCsvTooLittleRowLineForConstantDescription(dataType);
                     }
-                    if(rowNumber< headerLine && rowNumber<1){
+                    if (rowNumber < headerLine && rowNumber < 1) {
                         builder.recordCsvMissingRowLineForConstantDescription(dataType);
-                    }else if (rowNumber >headerLine && columnNumber<1  && headerName == null) {
+                    } else if (rowNumber > headerLine && columnNumber < 1 && headerName == null) {
                         builder.recordCsvMissingColumnNumberOrHeaderNameForConstantDescription(dataType);
                     } else {
                         final VariableComponentKey boundTo = headerConstantDescription.getBoundTo();
-                        if(boundTo ==null){
+                        if (boundTo == null) {
                             builder.recordCsvMissingBoundToForConstantDescription(dataType);
-                        }else if (headerConstantDescription.getExportHeader() == null) {
+                        } else if (headerConstantDescription.getExportHeader() == null) {
                             builder.recordCsvMissingExportHeaderNameForConstantDescription(dataType);
                         }
                     }
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java
index 8f4f79e62..f562a091b 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiService.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java
@@ -514,7 +514,6 @@ public class OreSiService {
 
             Datum constantValues = new Datum();
             readPreHeader(formatDescription, constantValues, linesIterator);
-
             ImmutableList<String> columns = readHeaderRow(linesIterator);
             readPostHeader(formatDescription, columns, constantValues, linesIterator);
 
@@ -1026,33 +1025,26 @@ public class OreSiService {
 
     /**
      * read some post header as example line, units, min and max values for each columns
-     *
-     * @param formatDescription
-     * @param linesIterator
      */
     private void readPostHeader(Configuration.FormatDescription formatDescription,  ImmutableList<String> headerRow, Datum constantValues, Iterator<CSVRecord> linesIterator) {
         ImmutableSetMultimap<Integer, Configuration.HeaderConstantDescription> perRowNumberConstants =
-                        formatDescription.getConstants().stream()
-                                .collect(ImmutableSetMultimap.toImmutableSetMultimap(
+                formatDescription.getConstants().stream()
+                        .collect(
+                                ImmutableSetMultimap.toImmutableSetMultimap(
                                         Configuration.HeaderConstantDescription::getRowNumber,
                                         Function.identity()
-                                        )
-                                );
-
-
+                                )
+                        );
         for (int lineNumber = formatDescription.getHeaderLine()+1; lineNumber < formatDescription.getFirstRowLine(); lineNumber++) {
             CSVRecord row = linesIterator.next();
             ImmutableSet<Configuration.HeaderConstantDescription> constantDescriptions = perRowNumberConstants.get(lineNumber);
-            constantDescriptions
-                    .stream()
-                    .forEach(constant -> {
+            constantDescriptions.forEach(constant -> {
                 int columnNumber = constant.getColumnNumber(headerRow);
                 String value = row.get(columnNumber - 1);
                 VariableComponentKey boundTo = constant.getBoundTo();
                 constantValues.put(boundTo, value);
             });
         }
-       // Iterators.advance(linesIterator, lineToSkipAfterHeader);
     }
 
     private ImmutableMap<VariableComponentKey, Expression<String>> getDefaultValueExpressions(Configuration.DataTypeDescription dataTypeDescription, Map<String, String> requiredAuthorizations) {
-- 
GitLab