diff --git a/internationalization.markdown b/internationalization.markdown
new file mode 100644
index 0000000000000000000000000000000000000000..ee3f1f12c55ddcc4298a7c3c074dd5b95f8c3c77
--- /dev/null
+++ b/internationalization.markdown
@@ -0,0 +1,15 @@
+``` mermaid
+  classDiagram
+    HashMap <|-- Internationalization
+    InternationalizationApplicationMap *-- Internationalization:internationalization
+    InternationalizationMap  "1"-->"*" InternationalizationApplicationMap
+    InternationalizationMap  : + InternationalizationApplicationMap application
+    InternationalizationMap  "*"-->"*" InternationalizationReferenceMap
+    InternationalizationMap  : + Map<String, InternationalizationReferenceMap> references
+    InternationalizationMap  "*"-->"*" InternationalizationDataTypeMap
+    InternationalizationMap  : + Map<String, InternationalizationDataTypeMap> references
+    InternationalizationDisplay
+    InternationalizationReferenceMap "1"-->"*" Internationalization internationalizationName
+    InternationalizationReferenceMap "1"-->"*" InternationalizationDisplay internationalizationDisplay
+    InternationalizationReferenceMap  : + Map<String, InternationalizationDataTypeMap> internationalizationDisplay
+```
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/checker/CheckerFactory.java b/src/main/java/fr/inra/oresing/checker/CheckerFactory.java
index a82c5ae3683d1540278734008298cad21e7fed81..f41576066d0ed8342fce3bca4d68ac27401b3a46 100644
--- a/src/main/java/fr/inra/oresing/checker/CheckerFactory.java
+++ b/src/main/java/fr/inra/oresing/checker/CheckerFactory.java
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -72,7 +73,7 @@ public class CheckerFactory {
         return getLineCheckers(app, dataType, null);
     }
 
-    public ImmutableSet<LineChecker> getLineCheckers(Application app, String dataType, String locale) {
+    public ImmutableSet<LineChecker> getLineCheckers(Application app, String dataType, Locale locale) {
         Preconditions.checkArgument(app.getConfiguration().getDataTypes().containsKey(dataType), "Pas de type de données " + dataType + " dans " + app);
         Configuration.DataTypeDescription dataTypeDescription = app.getConfiguration().getDataTypes().get(dataType);
         ImmutableSet.Builder<LineChecker> checkersBuilder = ImmutableSet.builder();
@@ -91,7 +92,7 @@ public class CheckerFactory {
         return lineCheckers;
     }
 
-    private void parseVariableComponentdescription(Application app, String dataType, String locale, ImmutableSet.Builder<LineChecker> checkersBuilder, String variable, Configuration.ColumnDescription variableDescription, Map.Entry<String, Configuration.VariableComponentDescription> componentEntry) {
+    private void parseVariableComponentdescription(Application app, String dataType, Locale locale, ImmutableSet.Builder<LineChecker> checkersBuilder, String variable, Configuration.ColumnDescription variableDescription, Map.Entry<String, Configuration.VariableComponentDescription> componentEntry) {
         String component = componentEntry.getKey();
         VariableComponentKey variableComponentKey = new VariableComponentKey(variable, component);
         if (variableDescription.getComponents().get(component) == null) {
@@ -130,7 +131,7 @@ public class CheckerFactory {
         }
     }
 
-    private CheckerOnOneVariableComponentLineChecker getCheckerOnReferenceChecker(Application app, String dataType, String locale, Configuration.CheckerDescription checkerDescription, CheckerTarget checkerTarget, LineTransformer transformer) {
+    private CheckerOnOneVariableComponentLineChecker getCheckerOnReferenceChecker(Application app, String dataType, Locale locale, Configuration.CheckerDescription checkerDescription, CheckerTarget checkerTarget, LineTransformer transformer) {
         CheckerOnOneVariableComponentLineChecker variableComponentChecker;
         String refType = checkerDescription.getParams().getRefType();
         ReferenceValueRepository referenceValueRepository = repository.getRepository(app).referenceValue();
diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java
index 0b1f40b27eb7d5ba9ee14d23eb53ae494364aa2f..f332751c1344b02c51f74f706cd61e18b3867d3f 100644
--- a/src/main/java/fr/inra/oresing/model/Configuration.java
+++ b/src/main/java/fr/inra/oresing/model/Configuration.java
@@ -5,8 +5,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.MoreCollectors;
 import fr.inra.oresing.checker.*;
-import fr.inra.oresing.model.internationalization.Internationalization;
-import fr.inra.oresing.model.internationalization.InternationalizationMap;
+import fr.inra.oresing.model.internationalization.*;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -15,16 +14,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Nullable;
-import java.util.HashMap;
-import java.util.HashSet;
-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.TreeMap;
+import java.util.*;
 
 @Getter
 @Setter
@@ -40,6 +30,14 @@ public class Configuration {
     private LinkedHashMap<String, CompositeReferenceDescription> compositeReferences = new LinkedHashMap<>();
     private LinkedHashMap<String, DataTypeDescription> dataTypes = new LinkedHashMap<>();
 
+    public InternationalizationMap getInternationalization() {
+        final InternationalizationMap internationalizationMap = new InternationalizationMap();
+        internationalizationMap.setApplication(Optional.ofNullable(application).map(ApplicationDescription::getInternationalization).orElse(null));
+        internationalizationMap.setDataTypes(Optional.ofNullable(dataTypes).map(DataTypeDescription::getInternationalization).orElse(null));
+        internationalizationMap.setReferences(Optional.ofNullable(references).map(ReferenceDescription::getInternationalization).orElse(null));
+        return internationalizationMap;
+    }
+
     public Optional<CompositeReferenceDescription> getCompositeReferencesUsing(String reference) {
         return getCompositeReferences().values().stream()
                 .filter(compositeReferenceDescription -> compositeReferenceDescription.isDependentOfReference(reference))
@@ -98,12 +96,26 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class ReferenceDescription {
+    public static class ReferenceDescription extends InternationalizationDisplayImpl {
         private char separator = ';';
         private List<String> keyColumns = new LinkedList<>();
         private LinkedHashMap<String, ReferenceColumnDescription> columns = new LinkedHashMap<>();
         private LinkedHashMap<String, ReferenceDynamicColumnDescription> dynamicColumns = new LinkedHashMap<>();
         private LinkedHashMap<String, LineValidationRuleDescription> validations = new LinkedHashMap<>();
+
+        public static Map<String, InternationalizationReferenceMap>  getInternationalization(LinkedHashMap<String, ReferenceDescription> referenceDescriptionMap) {
+            Map<String, InternationalizationReferenceMap> internationalizationReferenceMap = new HashMap<>();
+            for (Map.Entry<String, ReferenceDescription> entry : referenceDescriptionMap.entrySet()) {
+                final String reference = entry.getKey();
+                final ReferenceDescription referenceDescription = entry.getValue();
+                final InternationalizationReferenceMap internationalizationReference = new InternationalizationReferenceMap();
+                internationalizationReference.setInternationalizationDisplay(referenceDescription.getInternationalizationDisplay());
+                internationalizationReference.setInternationalizationName(referenceDescription.getInternationalizationName());
+                internationalizationReference.setInternationalizedColumns(referenceDescription.getInternationalizedColumns());
+                internationalizationReferenceMap.put(reference, internationalizationReference);
+            }
+            return internationalizationReferenceMap;
+        }
     }
 
     @Getter
@@ -126,7 +138,7 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class CompositeReferenceDescription {
+    public static class CompositeReferenceDescription extends InternationalizationImpl {
         List<CompositeReferenceComponentDescription> components = new LinkedList<>();
 
         public boolean isDependentOfReference(String reference) {
@@ -139,7 +151,7 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class CompositeReferenceComponentDescription {
+    public static class CompositeReferenceComponentDescription extends InternationalizationImpl {
         String reference;
         String parentKeyColumn;
         String parentRecursiveKey;
@@ -148,7 +160,7 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class DataTypeDescription {
+    public static class DataTypeDescription extends InternationalizationMapDisplayImpl {
         FormatDescription format;
         LinkedHashMap<String, ColumnDescription> data = new LinkedHashMap<>();
         LinkedHashMap<String, LineValidationRuleDescription> validations = new LinkedHashMap<>();
@@ -156,6 +168,21 @@ public class Configuration {
         TreeMap<Integer, List<MigrationDescription>> migrations = new TreeMap<>();
         AuthorizationDescription authorization;
         LinkedHashMap<String, String> repository = null;
+
+        public static Map<String, InternationalizationDataTypeMap> getInternationalization(LinkedHashMap<String, DataTypeDescription> dataTypeDescriptionMap) {
+            Map<String, InternationalizationDataTypeMap> internationalizationDataTypeMapMap = new HashMap<>();
+            for (Map.Entry<String, DataTypeDescription> entry : dataTypeDescriptionMap.entrySet()) {
+                final String datatype = entry.getKey();
+                final DataTypeDescription dataTypeDescription = entry.getValue();
+                final InternationalizationDataTypeMap internationalizationDataTypeMap = new InternationalizationDataTypeMap();
+                internationalizationDataTypeMap.setInternationalizationDisplay(dataTypeDescription.getInternationalizationDisplays());
+                internationalizationDataTypeMap.setInternationalizationName(dataTypeDescription.getInternationalizationName());
+                internationalizationDataTypeMap.setInternationalizedColumns(dataTypeDescription.getInternationalizedColumns());
+                internationalizationDataTypeMap.setAuthorization(Optional.ofNullable(dataTypeDescription.getAuthorization()).map(AuthorizationDescription::getInternationalization).orElse(null));
+                internationalizationDataTypeMapMap.put(datatype, internationalizationDataTypeMap);
+            }
+            return internationalizationDataTypeMapMap;
+        }
     }
 
     @Getter
@@ -171,8 +198,39 @@ public class Configuration {
     @ToString
     public static class AuthorizationDescription {
         VariableComponentKey timeScope;
-        LinkedHashMap<String, VariableComponentKey> authorizationScopes = new LinkedHashMap<>();
+        LinkedHashMap<String, AuthorizationScopeDescription> authorizationScopes = new LinkedHashMap<>();
         LinkedHashMap<String, DataGroupDescription> dataGroups = new LinkedHashMap<>();
+
+        public InternationalizationAuthorisationMap getInternationalization() {
+            final InternationalizationAuthorisationMap internationalizationAuthorisationMap = new InternationalizationAuthorisationMap();
+            Map<String, InternationalizationAuthorisationName> authorizationScopesLocalization = new HashMap<>();
+            for (Map.Entry<String, AuthorizationScopeDescription> entry : authorizationScopes.entrySet()) {
+                final InternationalizationAuthorisationName internationalizationAuthorisationName = new InternationalizationAuthorisationName();
+                internationalizationAuthorisationName.setInternationalizationName(entry.getValue().getInternationalizationName());
+                authorizationScopesLocalization.put(entry.getKey(), internationalizationAuthorisationName);
+            }
+            internationalizationAuthorisationMap.setAuthorizationScopes(authorizationScopesLocalization);
+            Map<String, InternationalizationAuthorisationName> datagroupsLocalization = new HashMap<>();
+            for (Map.Entry<String, DataGroupDescription> entry : dataGroups.entrySet()) {
+                final InternationalizationAuthorisationName internationalizationAuthorisationName = new InternationalizationAuthorisationName();
+                internationalizationAuthorisationName.setInternationalizationName(entry.getValue().getInternationalizationName());
+                datagroupsLocalization.put(entry.getKey(), internationalizationAuthorisationName);
+            }
+            internationalizationAuthorisationMap.setDataGroups(datagroupsLocalization);
+            return internationalizationAuthorisationMap;
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    public static class AuthorizationScopeDescription extends InternationalizationImpl {
+        String variable;
+        String component;
+
+        public VariableComponentKey getVariableComponentKey() {
+            return new VariableComponentKey(variable, component);
+        }
     }
 
     @Getter
@@ -347,7 +405,7 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class DataGroupDescription {
+    public static class DataGroupDescription extends InternationalizationImpl {
         Internationalization internationalizationName;
         String label;
         Set<String> data = new LinkedHashSet<>();
@@ -356,11 +414,16 @@ public class Configuration {
     @Getter
     @Setter
     @ToString
-    public static class ApplicationDescription {
+    public static class ApplicationDescription extends InternationalizationImpl {
         String name;
         int version;
-        String defaultLanguage;
-        Internationalization internationalization;
+        Locale defaultLanguage;
+
+        public InternationalizationApplicationMap getInternationalization() {
+            final InternationalizationApplicationMap internationalizationApplicationMap = new InternationalizationApplicationMap();
+            internationalizationApplicationMap.setInternationalizationName(getInternationalizationName());
+            return internationalizationApplicationMap;
+        }
     }
 
     @Getter
diff --git a/src/main/java/fr/inra/oresing/model/ReferenceColumn.java b/src/main/java/fr/inra/oresing/model/ReferenceColumn.java
index 6469219b78b0b94fd9e67f77d5369cf84592235e..0b942eb010714b3d8dddb5970820759f4a3ceaba 100644
--- a/src/main/java/fr/inra/oresing/model/ReferenceColumn.java
+++ b/src/main/java/fr/inra/oresing/model/ReferenceColumn.java
@@ -2,12 +2,14 @@ package fr.inra.oresing.model;
 
 import lombok.Value;
 
+import java.util.Locale;
+
 @Value
 public class ReferenceColumn implements SomethingToBeStoredAsJsonInDatabase<String> {
     String column;
 
-    public static ReferenceColumn forDisplay(String locale) {
-        return new ReferenceColumn("__display_" + locale);
+    public static ReferenceColumn forDisplay(Locale locale) {
+        return new ReferenceColumn("__display_" + locale.toLanguageTag());
     }
 
     public String asString() {
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java b/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java
index c850e437c65db85b66ee819824f91740faa81573..1c862897d754ff40eeeddd958fc620fe17a39179 100644
--- a/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java
+++ b/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java
@@ -4,8 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.util.LinkedHashMap;
+import java.util.Locale;
 
 @Getter
 @Setter
-public class Internationalization extends LinkedHashMap<String, String> {
+public class Internationalization extends LinkedHashMap<Locale, String> {
 }
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java
index 32f76e515f05a32ca8a64362d1d2647e7f28082f..e5e647b273aff0aabb5fdb2c826e36c4b30d0601 100644
--- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java
@@ -6,5 +6,5 @@ import lombok.Setter;
 @Getter
 @Setter
 public class InternationalizationApplicationMap {
-    Internationalization internationalization;
+    Internationalization internationalizationName;
 }
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java
index cf421bb3da4a981ebf5d837892fe38dad9b3b891..28410175eb88735411ad9b1dca5faa8332614a0e 100644
--- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java
@@ -7,7 +7,7 @@ import java.util.Map;
 
 @Getter
 @Setter
-public class InternationalizationDataTypeMap {
+public class  InternationalizationDataTypeMap {
     Internationalization internationalizationName;
     Map<String, Internationalization> internationalizedColumns;
     InternationalizationAuthorisationMap authorization;
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java
index 5ecf041b313652cfad9c64dcc4e08a719367157c..9668e5e4a1e7898c4b1a1dab9dab5faf5514e06c 100644
--- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java
@@ -9,6 +9,7 @@ import lombok.Setter;
 import org.assertj.core.util.Strings;
 
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -17,10 +18,10 @@ import java.util.stream.Stream;
 @Getter
 @Setter
 public class InternationalizationDisplay {
-    Map<String, String> pattern;
+    Map<Locale, String> pattern;
 
     public static ReferenceDatum getDisplays(ReferenceImporterContext referenceImporterContext, ReferenceDatum refValues) {
-        Optional<Map<String, String>> displayPattern =referenceImporterContext.getDisplayPattern();
+        Optional<Map<Locale, String>> displayPattern =referenceImporterContext.getDisplayPattern();
         Map<String, Internationalization> displayColumns = referenceImporterContext.getDisplayColumns();
         String refType = referenceImporterContext.getRefType();
         ReferenceDatum displays = new ReferenceDatum();
@@ -37,7 +38,7 @@ public class InternationalizationDisplay {
                                                                 if (displayColumns.containsKey(referencedColumn)) {
                                                                     referencedColumn = displayColumns.get(referencedColumn).getOrDefault(stringEntry.getKey(), referencedColumn);
                                                                 }
-                                                                internationalizedPattern += refValues.get(new ReferenceColumn(referencedColumn)).toValueString(referenceImporterContext, referencedColumn, stringEntry.getKey());
+                                                                internationalizedPattern += refValues.get(new ReferenceColumn(referencedColumn));
                                                             }
                                                             return internationalizedPattern;
                                                         }
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..25b223029ee498fd4f10b32c90d3a5227382b381
--- /dev/null
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java
@@ -0,0 +1,12 @@
+package fr.inra.oresing.model.internationalization;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public class InternationalizationDisplayImpl extends InternationalizationImpl{
+    InternationalizationDisplay internationalizationDisplay;
+}
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7fda5bb463c1c6a08ad6de99d27a5a1f4de541f
--- /dev/null
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java
@@ -0,0 +1,15 @@
+package fr.inra.oresing.model.internationalization;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Map;
+
+@Getter
+@Setter
+@ToString
+public class InternationalizationImpl {
+    Internationalization internationalizationName;
+    Map<String, Internationalization> internationalizedColumns;
+}
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d205f322e0f064b0ac979ba3625c46274c594053
--- /dev/null
+++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java
@@ -0,0 +1,14 @@
+package fr.inra.oresing.model.internationalization;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Map;
+
+@Getter
+@Setter
+@ToString
+public class InternationalizationMapDisplayImpl extends InternationalizationImpl{
+   Map<String, InternationalizationDisplay> internationalizationDisplays;
+}
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java b/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java
index 3c9a7bd74f3227af9052c57715f1dedf5d218ec2..cd972696f210ebae5eb0d0aff8ad240752060e05 100644
--- a/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java
+++ b/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java
@@ -3,7 +3,12 @@ package fr.inra.oresing.persistence;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterators;
-import fr.inra.oresing.model.*;
+import fr.inra.oresing.model.Application;
+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.rest.ApplicationResult;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
@@ -17,6 +22,7 @@ import org.springframework.util.MultiValueMap;
 import java.sql.PreparedStatement;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -151,7 +157,7 @@ public class ReferenceValueRepository extends JsonTableInApplicationSchemaReposi
         return result;
     }
 
-    public ImmutableMap<Ltree, ApplicationResult.Reference.ReferenceUUIDAndDisplay> getReferenceIdAndDisplayPerKeys(String referenceType, String locale) {
+    public ImmutableMap<Ltree, ApplicationResult.Reference.ReferenceUUIDAndDisplay> getReferenceIdAndDisplayPerKeys(String referenceType, Locale locale) {
         Function<ReferenceValue, ApplicationResult.Reference.ReferenceUUIDAndDisplay> referenceValueToReferenceUuidAndDisplayFunction = result -> {
             ReferenceDatum referenceDatum = result.getRefValues();
             ReferenceColumn referenceColumnForDisplay = ReferenceColumn.forDisplay(locale);
diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
index 600a939b0450bd2247b465e04c017678492058a2..50a56dcebba561eb99a9f798e3424de20529449e 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
@@ -2,7 +2,6 @@ package fr.inra.oresing.rest;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.exc.InvalidFormatException;
 import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
 import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
@@ -18,7 +17,10 @@ import fr.inra.oresing.groovy.GroovyExpression;
 import fr.inra.oresing.model.Configuration;
 import fr.inra.oresing.model.LocalDateTimeRange;
 import fr.inra.oresing.model.VariableComponentKey;
-import fr.inra.oresing.model.internationalization.*;
+import fr.inra.oresing.model.internationalization.InternationalizationDataTypeMap;
+import fr.inra.oresing.model.internationalization.InternationalizationDisplay;
+import fr.inra.oresing.model.internationalization.InternationalizationMap;
+import fr.inra.oresing.model.internationalization.InternationalizationReferenceMap;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -36,50 +38,10 @@ import java.util.stream.Stream;
 @Component
 @Slf4j
 public class ApplicationConfigurationService {
-    public static final List<String> INTERNATIONALIZED_FIELDS = List.of("internationalization", "internationalizationName", "internationalizedColumns", "internationalizationDisplay");
-
-    Map<String, Map> getInternationalizedSections(Map<String, Object> toParse, List<IllegalArgumentException> exceptions) {
-        Map<String, Map> parsedMap = new LinkedHashMap<>();
-        Iterator<Map.Entry<String, Object>> iterator = toParse.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry<String, Object> entry = iterator.next();
-            String key = entry.getKey();
-            Object value = entry.getValue();
-            if (INTERNATIONALIZED_FIELDS.contains(key)) {
-                value = formatSection((Map<String, Object>) value, exceptions);
-                parsedMap.put(key, (Map) value);
-                iterator.remove();
-            } else if (value instanceof Map) {
-                Map<String, Map> internationalizedSections = getInternationalizedSections((Map<String, Object>) value, exceptions);
-                if (!internationalizedSections.isEmpty()) {
-                    parsedMap.put(key, internationalizedSections);
-                }
-            }
-        }
-        return parsedMap;
-    }
+    public static final List INTERNATIONALIZED_FIELDS = List.of("internationalization", "internationalizationName", "internationalizedColumns", "internationalizationDisplay");
 
-    private Object formatSection(Map<String, Object> value, List<IllegalArgumentException> exceptions) {
-        try {
-            return new ObjectMapper().convertValue(value, Internationalization.class);
-        } catch (IllegalArgumentException e) {
-            Map<String, Object> internationalizationMap = new HashMap<>();
-            for (Map.Entry<String, Object> entry : value.entrySet()) {
-                try {
-                    internationalizationMap.put(entry.getKey(), new ObjectMapper().convertValue(entry.getValue(), Internationalization.class));
-                } catch (IllegalArgumentException e2) {
-                    try {
-                        internationalizationMap.put(entry.getKey(), new ObjectMapper().convertValue(entry.getValue(), InternationalizationDisplay.class));
-                    } catch (IllegalArgumentException e3) {
-                        exceptions.add(e2);
-                    }
-                }
-            }
-            return internationalizationMap;
-        }
-    }
 
-    ConfigurationParsingResult unzipConfiguration(MultipartFile file) {
+    ConfigurationParsingResult unzipConfiguration(MultipartFile file){
         return null;
     }
 
@@ -114,23 +76,8 @@ public class ApplicationConfigurationService {
         Configuration configuration;
         try {
             YAMLMapper mapper = new YAMLMapper();
-            Map<String, Object> mappedObject = (Map<String, Object>) mapper.readValue(bytes, Object.class);
-            List<IllegalArgumentException> exceptions = List.of();
-            internationalizedSections = getInternationalizedSections(mappedObject, exceptions);
-            try {
-                configuration = mapper.convertValue(mappedObject, Configuration.class);
-                configuration.setInternationalization(mapper.convertValue(internationalizedSections, InternationalizationMap.class));
-            } catch (IllegalArgumentException e) {
-                if (e.getCause() instanceof UnrecognizedPropertyException) {
-                    throw (UnrecognizedPropertyException) e.getCause();
-                } else if (e.getCause() instanceof InvalidFormatException) {
-                    throw (InvalidFormatException) e.getCause();
-                } else if (e.getCause() instanceof JsonProcessingException) {
-                    throw (JsonProcessingException) e.getCause();
-                } else {
-                    throw e;
-                }
-            }
+            configuration = mapper.readValue(bytes, Configuration.class);
+
         } catch (UnrecognizedPropertyException e) {
             return onUnrecognizedPropertyException(e);
         } catch (InvalidFormatException e) {
@@ -154,10 +101,10 @@ public class ApplicationConfigurationService {
         }
 
         for (Map.Entry<String, Configuration.ReferenceDescription> referenceEntry : configuration.getReferences().entrySet()) {
-            verifyReferenceKeyColumns(builder, referenceEntry);
+            verifyReferenceKeyColumns( builder, referenceEntry);
             verifyInternationalizedColumnsExists(configuration, builder, referenceEntry);
             verifyInternationalizedColumnsExistsForPattern(configuration, builder, referenceEntry);
-            verifyValidationCheckersAreValids(builder, referenceEntry, references);
+            verifyValidationCheckersAreValids( builder, referenceEntry, references);
         }
 
         for (Map.Entry<String, Configuration.DataTypeDescription> entry : configuration.getDataTypes().entrySet()) {
@@ -180,7 +127,7 @@ public class ApplicationConfigurationService {
                 VariableComponentKey timeScopeVariableComponentKey = authorization.getTimeScope();
                 verifyDatatypeTimeScopeExistsAndIsValid(builder, dataType, dataTypeDescription, variables, timeScopeVariableComponentKey);
 
-                LinkedHashMap<String, VariableComponentKey> authorizationScopesVariableComponentKey = authorization.getAuthorizationScopes();
+                LinkedHashMap<String, Configuration.AuthorizationScopeDescription> authorizationScopesVariableComponentKey = authorization.getAuthorizationScopes();
                 verifyDatatypeAuthorizationScopeExistsAndIsValid(builder, dataType, configuration, variables, authorizationScopesVariableComponentKey);
                 requiredAuthorizationsAttributesBuilder.addAll(authorizationScopesVariableComponentKey.keySet());
             }
@@ -368,12 +315,15 @@ public class ApplicationConfigurationService {
         }
     }
 
-    private void verifyDatatypeAuthorizationScopeExistsAndIsValid(ConfigurationParsingResult.Builder builder, String dataType, Configuration configuration, Set<String> variables, LinkedHashMap<String, VariableComponentKey> authorizationScopesVariableComponentKey) {
+    private void verifyDatatypeAuthorizationScopeExistsAndIsValid(ConfigurationParsingResult.Builder builder, String dataType, Configuration configuration, Set<String> variables, LinkedHashMap<String, Configuration.AuthorizationScopeDescription> authorizationScopesVariableComponentKey) {
         if (authorizationScopesVariableComponentKey == null || authorizationScopesVariableComponentKey.isEmpty()) {
             builder.recordMissingAuthorizationScopeVariableComponentKey(dataType);
         } else {
             Configuration.DataTypeDescription dataTypeDescription = configuration.getDataTypes().get(dataType);
-            authorizationScopesVariableComponentKey.forEach((authorizationScopeName, authorizationScopeVariableComponentKey) -> {
+            authorizationScopesVariableComponentKey.entrySet().stream().forEach(authorizationScopeVariableComponentKeyEntry -> {
+                String authorizationScopeName = authorizationScopeVariableComponentKeyEntry.getKey();
+                Configuration.AuthorizationScopeDescription authorizationScopeDescription = authorizationScopeVariableComponentKeyEntry.getValue();
+                VariableComponentKey authorizationScopeVariableComponentKey = authorizationScopeDescription.getVariableComponentKey();
                 if (authorizationScopeVariableComponentKey.getVariable() == null) {
                     builder.recordAuthorizationScopeVariableComponentKeyMissingVariable(dataType, authorizationScopeName, variables);
                 } else {
@@ -554,11 +504,11 @@ public class ApplicationConfigurationService {
         if (internationalization != null) {
             Map<String, fr.inra.oresing.model.internationalization.InternationalizationReferenceMap> references = internationalization.getReferences();
             if (references != null) {
-                fr.inra.oresing.model.internationalization.InternationalizationReferenceMap orDefault = references.getOrDefault(reference, null);
-                if (orDefault != null) {
-                    InternationalizationDisplay internationalizationDisplay = orDefault.getInternationalizationDisplay();
+                fr.inra.oresing.model.internationalization.InternationalizationReferenceMap internationalizationReferenceMap = references.getOrDefault(reference, null);
+                if (internationalizationReferenceMap != null) {
+                    InternationalizationDisplay internationalizationDisplay = internationalizationReferenceMap.getInternationalizationDisplay();
                     if (internationalizationDisplay != null) {
-                        Map<String, String> patterns = internationalizationDisplay.getPattern();
+                        Map<Locale, String> patterns = internationalizationDisplay.getPattern();
                         if (patterns != null) {
                             internationalizedColumnsForDisplay = patterns.values()
                                     .stream()
@@ -803,5 +753,4 @@ public class ApplicationConfigurationService {
         int version;
     }
 
-
 }
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java b/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java
index 81fb6934279e5930b2b53ef90a52c44dd63e91e5..3521d45ac1bbaff5740dc86e83f3679821d89f18 100644
--- a/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java
+++ b/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java
@@ -3,6 +3,7 @@ package fr.inra.oresing.rest;
 import fr.inra.oresing.checker.CheckerTarget;
 import fr.inra.oresing.checker.DateLineChecker;
 import fr.inra.oresing.model.Application;
+import fr.inra.oresing.model.Configuration;
 import fr.inra.oresing.model.VariableComponentKey;
 import fr.inra.oresing.persistence.DataRow;
 import lombok.Getter;
@@ -105,6 +106,7 @@ public class DownloadDatasetQuery {
                             );
                             getApplication().getConfiguration().getDataTypes().get(getDataType()).getAuthorization().getAuthorizationScopes().values()
                                     .stream()
+                                    .map(Configuration.AuthorizationScopeDescription::getVariableComponentKey)
                                     .forEach(vck -> variableComponentKeySet.add(
                                             new VariableComponentOrderBy(vck, Order.ASC)
                                     ));
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiResources.java b/src/main/java/fr/inra/oresing/rest/OreSiResources.java
index d0215b833cb6de860ba15744afb59f3980a1c27a..a72d179fe0f0d9374f110bf2db29d9925563408e 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiResources.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiResources.java
@@ -262,7 +262,10 @@ public class OreSiResources {
 
         LinkedHashSet<String> orderedVariables = buildOrderedVariables(nameOrId, dataType);
         DownloadDatasetQuery downloadDatasetQuery = deserialiseParamDownloadDatasetQuery(params);
-        String locale = downloadDatasetQuery != null && downloadDatasetQuery.getLocale() != null ? downloadDatasetQuery.getLocale() : LocaleContextHolder.getLocale().getLanguage();
+        Locale locale = Optional.ofNullable(downloadDatasetQuery)
+                .map(DownloadDatasetQuery::getLocale)
+                .map(Locale::new)
+                .orElseGet(LocaleContextHolder::getLocale);
         List<DataRow> list = service.findData(downloadDatasetQuery, nameOrId, dataType);
         ImmutableSet<String> variables = list.stream()
                 .limit(1)
@@ -340,7 +343,7 @@ public class OreSiResources {
 
     private FileOrUUID deserialiseFileOrUUIDQuery(String datatype, String params) {
         try {
-            FileOrUUID fileOrUUID = params != null && params != "undefined" ? new ObjectMapper().readValue(params, FileOrUUID.class) : null;
+            FileOrUUID fileOrUUID = params != null && params !="undefined" ? new ObjectMapper().readValue(params, FileOrUUID.class) : null;
             Optional<BinaryFileDataset> binaryFileDatasetOpt = Optional.ofNullable(fileOrUUID)
                     .map(fileOrUUID1 -> fileOrUUID.binaryfiledataset);
             if (
@@ -359,7 +362,7 @@ public class OreSiResources {
         try {
             BinaryFileDataset binaryFileDataset = params != null ? new ObjectMapper().readValue(params, BinaryFileDataset.class) : null;
             Optional<BinaryFileDataset> binaryFileDatasetOpt = Optional.ofNullable(binaryFileDataset);
-            if (binaryFileDatasetOpt.map(binaryFileDataset1 -> binaryFileDataset1.getDatatype()).isEmpty()) {
+           if (binaryFileDatasetOpt.map(binaryFileDataset1 -> binaryFileDataset1.getDatatype()).isEmpty()) {
                 binaryFileDatasetOpt.ifPresent(binaryFileDataset1 -> binaryFileDataset1.setDatatype(datatype));
             }
             return binaryFileDataset;
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java
index d4754bc5bfe8f7f15807650f926d267fce706895..20cb24524ed3505410768b83ade9c0b990f3172a 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiService.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java
@@ -43,10 +43,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -718,7 +715,8 @@ public class OreSiService {
             LocalDateTimeRange timeScope = LocalDateTimeRange.parse(timeScopeValue, timeScopeDateLineChecker);
 
             Map<String, String> requiredAuthorizations = new LinkedHashMap<>();
-            dataTypeDescription.getAuthorization().getAuthorizationScopes().forEach((authorizationScope, variableComponentKey) -> {
+            dataTypeDescription.getAuthorization().getAuthorizationScopes().forEach((authorizationScope, authorizationScopeDescription) -> {
+                VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey();
                 String requiredAuthorization = datum.get(variableComponentKey);
                 Ltree.checkSyntax(requiredAuthorization);
                 requiredAuthorizations.put(authorizationScope, requiredAuthorization);
@@ -1116,7 +1114,8 @@ public class OreSiService {
         List<String> variableComponentsFromRepository = new LinkedList<>();
         if (requiredAuthorizations != null) {
             for (Map.Entry<String, String> entry : requiredAuthorizations.entrySet()) {
-                VariableComponentKey variableComponentKey = dataTypeDescription.getAuthorization().getAuthorizationScopes().get(entry.getKey());
+                Configuration.AuthorizationScopeDescription authorizationScopeDescription = dataTypeDescription.getAuthorization().getAuthorizationScopes().get(entry.getKey());
+                VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey();
                 String value = entry.getValue();
                 defaultValueExpressionsBuilder.put(variableComponentKey, StringGroovyExpression.forExpression("\"" + value + "\""));
                 variableComponentsFromRepository.add(variableComponentKey.getId());
@@ -1227,7 +1226,7 @@ public class OreSiService {
                 .build();
     }
 
-    public Map<String, Map<String, LineChecker>> getcheckedFormatVariableComponents(String nameOrId, String dataType, String locale) {
+    public Map<String, Map<String, LineChecker>> getcheckedFormatVariableComponents(String nameOrId, String dataType, Locale locale) {
         return checkerFactory.getLineCheckers(getApplication(nameOrId), dataType, locale)
                 .stream()
                 .filter(c -> (c instanceof DateLineChecker) || (c instanceof IntegerChecker) || (c instanceof FloatChecker) || (c instanceof ReferenceLineChecker))
@@ -1358,7 +1357,7 @@ public class OreSiService {
         return applicationConfigurationService.parseConfigurationBytes(file.getBytes());
     }
 
-    public Map<String, Map<String, Map<String, String>>> getEntitiesTranslation(String nameOrId, String locale, String datatype, Map<String, Map<String, LineChecker>> checkedFormatVariableComponents) {
+    public Map<String, Map<String, Map<String, String>>> getEntitiesTranslation(String nameOrId, Locale locale, String datatype, Map<String, Map<String, LineChecker>> checkedFormatVariableComponents) {
         Application application = getApplication(nameOrId);
         return Optional.ofNullable(application)
                 .map(a -> a.getConfiguration())
diff --git a/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java b/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java
index 8d5eadc3341d88e49fcd25f47678598994318571..9bf8885d6771803b2df07135a93defcb83febbb4 100644
--- a/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java
+++ b/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java
@@ -2,22 +2,10 @@ package fr.inra.oresing.rest;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.MoreCollectors;
-import com.google.common.collect.SetMultimap;
+import com.google.common.collect.*;
 import fr.inra.oresing.checker.LineChecker;
 import fr.inra.oresing.checker.ReferenceLineChecker;
-import fr.inra.oresing.model.ColumnPresenceConstraint;
-import fr.inra.oresing.model.Configuration;
-import fr.inra.oresing.model.ReferenceColumn;
-import fr.inra.oresing.model.ReferenceColumnIndexedValue;
-import fr.inra.oresing.model.ReferenceColumnMultipleValue;
-import fr.inra.oresing.model.ReferenceColumnSingleValue;
-import fr.inra.oresing.model.ReferenceColumnValue;
-import fr.inra.oresing.model.ReferenceDatum;
+import fr.inra.oresing.model.*;
 import fr.inra.oresing.model.internationalization.Internationalization;
 import fr.inra.oresing.model.internationalization.InternationalizationDisplay;
 import fr.inra.oresing.model.internationalization.InternationalizationMap;
@@ -36,16 +24,19 @@ import java.util.stream.Collectors;
  */
 @AllArgsConstructor
 public class ReferenceImporterContext {
+
     private static final String COMPOSITE_NATURAL_KEY_COMPONENTS_SEPARATOR = "__";
     private final Constants constants;
     /**
      * Tous les {@link LineChecker} qui s'appliquent sur chaque ligne à importer
      */
     private final ImmutableSet<LineChecker> lineCheckers;
+
     /**
      * Les clés techniques de chaque clé naturelle hiérarchique de toutes les lignes existantes en base (avant l'import)
      */
     private final ImmutableMap<Ltree, UUID> storedReferences;
+
     private final ImmutableMap<String, Column> columnsPerHeader;
     Map<String, Map<String, Map<String, String>>> displayByReferenceAndNaturalKey;
 
@@ -182,7 +173,7 @@ public class ReferenceImporterContext {
         return column.getCsvCellContent(referenceDatum);
     }
 
-    public Optional<Map<String, String>> getDisplayPattern() {
+    public Optional<Map<Locale, String>> getDisplayPattern() {
         return constants.getDisplayPattern();
     }
 
@@ -205,10 +196,10 @@ public class ReferenceImporterContext {
         private final String refType;
         private final Optional<InternationalizationReferenceMap> internationalizationReferenceMap;
         private final Map<String, Internationalization> displayColumns;
-        private final Optional<Map<String, String>> displayPattern;
+        private final Optional<Map<Locale, String>> displayPattern;
         private final HierarchicalKeyFactory hierarchicalKeyFactory;
-        private final Optional<Map<String, List<String>>> patternColumns;
-        private final Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> patternSection;
+        private final Optional<Map<Locale, List<String>>> patternColumns;
+        private final Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> patternSection;
         Constants constants;
 
         public Constants(UUID applicationId, Configuration conf, String refType, ReferenceValueRepository referenceValueRepository) {
@@ -241,7 +232,7 @@ public class ReferenceImporterContext {
                     .orElseGet(HashMap::new);
         }
 
-        private Optional<Map<String, String>> buildDisplayPattern() {
+        private Optional<Map<Locale, String>> buildDisplayPattern() {
             return this.internationalizationReferenceMap
                     .map(InternationalizationReferenceMap::getInternationalizationDisplay)
                     .map(InternationalizationDisplay::getPattern);
@@ -253,12 +244,12 @@ public class ReferenceImporterContext {
             return hierarchicalKeyFactory;
         }
 
-        private Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> buildPatternSection() {
+        private Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> buildPatternSection() {
             return displayPattern
                     .map(dp -> dp.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, k -> InternationalizationDisplay.parsePattern(k.getValue()))));
         }
 
-        private Optional<Map<String, List<String>>> buildPatternColumns() {
+        private Optional<Map<Locale, List<String>>> buildPatternColumns() {
             return displayPattern
                     .map(dp -> dp.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, k -> InternationalizationDisplay.getPatternColumns(k.getValue()))));
         }
@@ -283,7 +274,7 @@ public class ReferenceImporterContext {
             return displayColumns;
         }
 
-        public Optional<Map<String, String>> getDisplayPattern() {
+        public Optional<Map<Locale, String>> getDisplayPattern() {
             return displayPattern;
         }
 
@@ -291,11 +282,11 @@ public class ReferenceImporterContext {
             return hierarchicalKeyFactory;
         }
 
-        public Optional<Map<String, List<String>>> getPatternColumns() {
+        public Optional<Map<Locale, List<String>>> getPatternColumns() {
             return patternColumns;
         }
 
-        public Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> getPatternSection() {
+        public Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> getPatternSection() {
             return patternSection;
         }
     }
diff --git a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
index 207ba4dbe964cff8d5169f4a75282e3d291ec1eb..519004526edd850101d9bf56cade97d912644ca2 100644
--- a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
+++ b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
@@ -365,6 +365,9 @@ public class ApplicationConfigurationServiceTest {
         ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults());
         log.debug(onlyError.getMessage());
         Assert.assertEquals("unrecognizedProperty", onlyError.getMessage());
+        Assert.assertEquals(9, onlyError.getMessageParams().get("lineNumber"));
+        Assert.assertEquals(3, onlyError.getMessageParams().get("columnNumber"));
+        Assert.assertEquals("compositReference", onlyError.getMessageParams().get("unknownPropertyName"));
     }
 
     @Test
@@ -452,8 +455,8 @@ public class ApplicationConfigurationServiceTest {
 
     @Test
     public void testUnknownReferenceInInternationalizationDisplayPatternInDatatype() {
-        ConfigurationParsingResult configurationParsingResult = parseYaml("internationalizationDisplay:\n" +
-                "      sites:", "internationalizationDisplay:\n" +
+        ConfigurationParsingResult configurationParsingResult = parseYaml("internationalizationDisplays:\n" +
+                "      sites:", "internationalizationDisplays:\n" +
                 "      plateforme:");
         Assert.assertFalse(configurationParsingResult.isValid());
         ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults());
diff --git a/src/test/resources/data/foret/foret_essai.yaml b/src/test/resources/data/foret/foret_essai.yaml
index a7467c4a2faf6778b1a9eaf9b1981d039f213f89..b41b67846f323a53c6e4a02be4df8bc93d74a970 100644
--- a/src/test/resources/data/foret/foret_essai.yaml
+++ b/src/test/resources/data/foret/foret_essai.yaml
@@ -2,6 +2,9 @@ version: 0
 application:
   name: foret
   version: 1
+  internationalizationName:
+    fr: ORE F-ORE-T
+    en: ORE F-ORE-T
 compositeReferences:
   localizations:
     components:
diff --git a/src/test/resources/data/monsore/monsore-with-repository.yaml b/src/test/resources/data/monsore/monsore-with-repository.yaml
index 596fd33fac89e97b88ea0e0fe7cef7ebd731aab6..13818fc880504757db07b5e23774d344fac908ae 100644
--- a/src/test/resources/data/monsore/monsore-with-repository.yaml
+++ b/src/test/resources/data/monsore/monsore-with-repository.yaml
@@ -1,7 +1,7 @@
 version: 0
 application:
   defaultLanguage: fr
-  internationalization:
+  internationalizationName:
     fr: SOERE mon SOERE avec dépôt
     en: SOERE my SOERE with repository
   name: MONSORE
@@ -347,7 +347,7 @@ dataTypes:
     internationalizationName:
       fr: Piégeage en Montée
       en: Trap in ascent
-    internationalizationDisplay:
+    internationalizationDisplays:
       especes:
         pattern:
           fr: 'espèce :{esp_nom}'
diff --git a/src/test/resources/data/monsore/monsore.yaml b/src/test/resources/data/monsore/monsore.yaml
index ce613e5b114a629a5dab8dd360f2d104cf4ca0f1..bd9eedb49d8c07ef2c35ec9ea6488c97edad2c06 100644
--- a/src/test/resources/data/monsore/monsore.yaml
+++ b/src/test/resources/data/monsore/monsore.yaml
@@ -1,7 +1,7 @@
 version: 0
 application:
   defaultLanguage: fr
-  internationalization:
+  internationalizationName:
     fr: SOERE mon SOERE avec dépôt
     en: SOERE my SOERE with repository
   name: MONSORE
@@ -347,7 +347,7 @@ dataTypes:
     internationalizationName:
       fr: Piégeage en Montée
       en: Trap in ascent
-    internationalizationDisplay:
+    internationalizationDisplays:
       especes:
         pattern:
           fr: 'espèce :{esp_nom}'
diff --git a/src/test/resources/data/olac/olac.yaml b/src/test/resources/data/olac/olac.yaml
index 22e1c44582244434c9806c40929e756ab6dd612f..740d0f52bb5c3b27a73bd88a829dc501e37c6e17 100644
--- a/src/test/resources/data/olac/olac.yaml
+++ b/src/test/resources/data/olac/olac.yaml
@@ -1,7 +1,7 @@
 version: 0
 application:
   defaultLanguage: fr
-  internationalization:
+  internationalizationName:
     fr: Observatoire des lacs
     en: Lake observatory
   name: ola
diff --git a/src/test/resources/data/recursivite/recusivite.yaml b/src/test/resources/data/recursivite/recusivite.yaml
index 927fd64a9bd64024585513884494675268f0fdd8..413548f572985f54921bba87d7126462ee2ebf05 100644
--- a/src/test/resources/data/recursivite/recusivite.yaml
+++ b/src/test/resources/data/recursivite/recusivite.yaml
@@ -1,7 +1,7 @@
 version: 0
 application:
   defaultLanguage: fr
-  internationalization:
+  internationalizationName:
     fr: Récursivité
     en: recusivity
   name: recursivite
diff --git a/src/test/resources/data/validation/fake-app.yaml b/src/test/resources/data/validation/fake-app.yaml
index 92400598cb66089e1125b1a10deafef071c44b3e..1d5fde143e613bd7a32f0d2a16ea7934a17a9f0c 100644
--- a/src/test/resources/data/validation/fake-app.yaml
+++ b/src/test/resources/data/validation/fake-app.yaml
@@ -2,6 +2,9 @@ version: 0
 application:
   name: Sites
   version: 1
+  internationalizationName:
+    fr: Fausse application
+    en: Fake application
 compositeReferences:
   localizations:
     components:
@@ -89,7 +92,7 @@ dataTypes:
     internationalizationName:
       fr: Le site
       en: the good place
-    internationalizationDisplay:
+    internationalizationDisplays:
       sites:
           pattern:
             fr: 'le nom du site {nom du site_fr}'