From 89bfb9cba98c40dcd84f94003b8a6e39c9aa23df Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 19:05:42 +0200
Subject: [PATCH 1/9] Ajout d'un select pour choisir sa locale.

---
 ui2/src/locales/fr.json                    |  5 +++-
 ui2/src/main.js                            |  4 ++-
 ui2/src/services/UserPreferencesService.js | 25 ++++++++++++++++
 ui2/src/utils/LocaleUtils.js               |  4 +++
 ui2/src/views/common/MenuView.vue          | 34 +++++++++++++++++-----
 5 files changed, 62 insertions(+), 10 deletions(-)
 create mode 100644 ui2/src/services/UserPreferencesService.js
 create mode 100644 ui2/src/utils/LocaleUtils.js

diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index f0f999445..9941861a8 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -26,6 +26,9 @@
   "menu": {
     "logout": "Se déconnecter",
     "applications": "Applications",
-    "references": "Référentiels"
+    "references": "Référentiels",
+    "french": "Français",
+    "english": "English",
+    "language": "Langue"
   }
 }
diff --git a/ui2/src/main.js b/ui2/src/main.js
index a22b78599..5105dcfb9 100644
--- a/ui2/src/main.js
+++ b/ui2/src/main.js
@@ -9,6 +9,7 @@ import {
   faExclamationCircle,
   faEye,
   faEyeSlash,
+  faGlobe,
   faPlus,
   faSignOutAlt,
 } from "@fortawesome/free-solid-svg-icons";
@@ -19,7 +20,8 @@ library.add(
   faPlus,
   faExclamationCircle,
   faCheck,
-  faSignOutAlt
+  faSignOutAlt,
+  faGlobe
 );
 Vue.component("vue-fontawesome", FontAwesomeIcon);
 
diff --git a/ui2/src/services/UserPreferencesService.js b/ui2/src/services/UserPreferencesService.js
new file mode 100644
index 000000000..4bbaffa5f
--- /dev/null
+++ b/ui2/src/services/UserPreferencesService.js
@@ -0,0 +1,25 @@
+import { Locales } from "@/utils/LocaleUtils";
+import { Fetcher } from "./Fetcher";
+
+const LOCAL_STORAGE_LANG = "lang";
+
+export class UserPreferencesService extends Fetcher {
+  static INSTANCE = new UserPreferencesService();
+
+  constructor() {
+    super();
+  }
+
+  getUserPrefLocale() {
+    const browserLocale = window.navigator.language.substring(0, 2);
+    return (
+      localStorage.getItem(LOCAL_STORAGE_LANG) ||
+      (Object.values(Locales).includes(browserLocale) && browserLocale) ||
+      Locales.FRENCH
+    );
+  }
+
+  setUserPrefLocale(locale) {
+    localStorage.setItem(LOCAL_STORAGE_LANG, locale);
+  }
+}
diff --git a/ui2/src/utils/LocaleUtils.js b/ui2/src/utils/LocaleUtils.js
new file mode 100644
index 000000000..6ae7fa9b6
--- /dev/null
+++ b/ui2/src/utils/LocaleUtils.js
@@ -0,0 +1,4 @@
+export const Locales = {
+  FRENCH: "fr",
+  ENGLISH: "en",
+};
diff --git a/ui2/src/views/common/MenuView.vue b/ui2/src/views/common/MenuView.vue
index a6c9516f4..fb37e23ea 100644
--- a/ui2/src/views/common/MenuView.vue
+++ b/ui2/src/views/common/MenuView.vue
@@ -17,34 +17,52 @@
           }}</b-button>
         </div>
       </b-navbar-item>
+      <b-navbar-item tag="div">
+        <b-field>
+          <b-select
+            v-model="chosenLocale"
+            :placeholder="$t('menu.language')"
+            icon="globe"
+            @input="setUserPrefLocale"
+          >
+            <option :value="locales.FRENCH">{{ $t("menu.french") }}</option>
+            <option :value="locales.ENGLISH">{{ $t("menu.english") }}</option>
+          </b-select>
+        </b-field>
+      </b-navbar-item>
     </template>
   </b-navbar>
 </template>
 
 <script>
-import { User } from "@/model/User";
-import { LoginService } from "@/services/LoginService";
 import { Component, Vue } from "vue-property-decorator";
 
+import { LoginService } from "@/services/LoginService";
+import { UserPreferencesService } from "@/services/UserPreferencesService";
+
+import { Locales } from "@/utils/LocaleUtils.js";
+
 @Component({
   components: {},
 })
 export default class MenuView extends Vue {
   loginService = LoginService.INSTANCE;
+  userPreferencesService = UserPreferencesService.INSTANCE;
 
-  loggedUser = new User();
+  locales = Locales;
+  chosenLocale = "";
 
   created() {
-    this.init();
-  }
-
-  async init() {
-    this.loggedUser = await this.loginService.getLoggedUser();
+    this.chosenLocale = this.userPreferencesService.getUserPrefLocale();
   }
 
   logout() {
     this.loginService.logout();
   }
+
+  setUserPrefLocale() {
+    this.userPreferencesService.setUserPrefLocale(this.chosenLocale);
+  }
 }
 </script>
 
-- 
GitLab


From 0df0898fe23dbe0aff0a3876e83fc6241bb81a55 Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:03:05 +0200
Subject: [PATCH 2/9] Ajout de la traduction anglaise dans le front

---
 ui2/.env                                      |  2 --
 ui2/src/i18n.js                               | 27 ---------------
 ui2/src/locales/en.json                       | 34 +++++++++++++++++++
 ui2/src/main.js                               | 28 +++++++++++++--
 ui2/src/services/Events.js                    |  3 ++
 ui2/src/services/UserPreferencesService.js    |  2 ++
 .../validation/vee-validation-rules.js        | 10 ------
 7 files changed, 64 insertions(+), 42 deletions(-)
 delete mode 100644 ui2/.env
 delete mode 100644 ui2/src/i18n.js
 create mode 100644 ui2/src/locales/en.json
 create mode 100644 ui2/src/services/Events.js

diff --git a/ui2/.env b/ui2/.env
deleted file mode 100644
index a20e25f13..000000000
--- a/ui2/.env
+++ /dev/null
@@ -1,2 +0,0 @@
-VUE_APP_I18N_LOCALE=fr
-VUE_APP_I18N_FALLBACK_LOCALE=en
diff --git a/ui2/src/i18n.js b/ui2/src/i18n.js
deleted file mode 100644
index 7841e4465..000000000
--- a/ui2/src/i18n.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import Vue from "vue";
-import VueI18n from "vue-i18n";
-
-Vue.use(VueI18n);
-
-function loadLocaleMessages() {
-  const locales = require.context(
-    "./locales",
-    true,
-    /[A-Za-z0-9-_,\s]+\.json$/i
-  );
-  const messages = {};
-  locales.keys().forEach((key) => {
-    const matched = key.match(/([A-Za-z0-9-_]+)\./i);
-    if (matched && matched.length > 1) {
-      const locale = matched[1];
-      messages[locale] = locales(key);
-    }
-  });
-  return messages;
-}
-
-export default new VueI18n({
-  locale: process.env.VUE_APP_I18N_LOCALE || "en",
-  fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || "en",
-  messages: loadLocaleMessages(),
-});
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
new file mode 100644
index 000000000..8d2325247
--- /dev/null
+++ b/ui2/src/locales/en.json
@@ -0,0 +1,34 @@
+{
+  "titles": {
+    "login-page": "Welcome to SI-ORE",
+    "applications-page": "My applications",
+    "references-page": "My references"
+  },
+  "login": {
+    "signin": "Sign in",
+    "signup": "Sign up",
+    "login": "Login",
+    "login-placeholder": "Write down the login",
+    "pwd": "Password",
+    "pwd-placeholder": "Write down the password",
+    "pwd-forgotten": "Password forgotten ? "
+  },
+  "validation": {
+    "obligatoire": "Mandatory",
+    "facultatif": "Optional",
+    "invalid-required": "Please fill the field"
+  },
+  "alert": {
+    "cancel": "Cancel",
+    "server-error": "A server error occured",
+    "user-uknown": "Uknown user"
+  },
+  "menu": {
+    "logout": "Log out",
+    "applications": "Applications",
+    "references": "References",
+    "french": "Français",
+    "english": "English",
+    "language": "Language"
+  }
+}
diff --git a/ui2/src/main.js b/ui2/src/main.js
index 5105dcfb9..9bdb15eec 100644
--- a/ui2/src/main.js
+++ b/ui2/src/main.js
@@ -27,13 +27,35 @@ Vue.component("vue-fontawesome", FontAwesomeIcon);
 
 import "@/style/global.scss";
 
+// Translation
+import { UserPreferencesService } from "./services/UserPreferencesService";
+import VueI18n from "vue-i18n";
+import i18n_en from "@/locales/en.json";
+import i18n_fr from "@/locales/fr.json";
+
+Vue.use(VueI18n);
+const userPreferencesService = UserPreferencesService.INSTANCE;
+export const i18n = new VueI18n({
+  locale: userPreferencesService.getUserPrefLocale(),
+  messages: {
+    en: i18n_en,
+    fr: i18n_fr,
+  },
+});
+
 // Validation
 import "vee-validate";
-import "@/services/validation/vee-validation-rules";
+import { required } from "vee-validate/dist/rules";
+import { extend } from "vee-validate";
+// See https://logaretm.github.io/vee-validate/guide/rules.html
+// For list of all availables rules
 
-// Translation
-import i18n from "@/i18n";
+extend("required", {
+  ...required,
+  message: i18n.t("validation.invalid-required"),
+});
 
+// Buefy
 Vue.use(Buefy, {
   defaultIconComponent: "vue-fontawesome",
   defaultIconPack: "fas",
diff --git a/ui2/src/services/Events.js b/ui2/src/services/Events.js
new file mode 100644
index 000000000..1e2eb5722
--- /dev/null
+++ b/ui2/src/services/Events.js
@@ -0,0 +1,3 @@
+export const Events = {
+  LOCALE_CHANGED: "locale_changed",
+};
diff --git a/ui2/src/services/UserPreferencesService.js b/ui2/src/services/UserPreferencesService.js
index 4bbaffa5f..fa64d350a 100644
--- a/ui2/src/services/UserPreferencesService.js
+++ b/ui2/src/services/UserPreferencesService.js
@@ -12,6 +12,7 @@ export class UserPreferencesService extends Fetcher {
 
   getUserPrefLocale() {
     const browserLocale = window.navigator.language.substring(0, 2);
+
     return (
       localStorage.getItem(LOCAL_STORAGE_LANG) ||
       (Object.values(Locales).includes(browserLocale) && browserLocale) ||
@@ -21,5 +22,6 @@ export class UserPreferencesService extends Fetcher {
 
   setUserPrefLocale(locale) {
     localStorage.setItem(LOCAL_STORAGE_LANG, locale);
+    this.$root.$i18n.locale = locale;
   }
 }
diff --git a/ui2/src/services/validation/vee-validation-rules.js b/ui2/src/services/validation/vee-validation-rules.js
index 5233349ff..e69de29bb 100644
--- a/ui2/src/services/validation/vee-validation-rules.js
+++ b/ui2/src/services/validation/vee-validation-rules.js
@@ -1,10 +0,0 @@
-import i18n from "@/i18n";
-import { required } from "vee-validate/dist/rules";
-import { extend } from "vee-validate";
-// See https://logaretm.github.io/vee-validate/guide/rules.html
-// For list of all availables rules
-
-extend("required", {
-  ...required,
-  message: i18n.t("validation.invalid-required"),
-});
-- 
GitLab


From dc34ece1a88e0b7ed93ebc5f5cb67a4ec3258d78 Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:03:30 +0200
Subject: [PATCH 3/9] Suppression d'un fichier inutile.

---
 ui2/src/services/validation/vee-validation-rules.js | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 ui2/src/services/validation/vee-validation-rules.js

diff --git a/ui2/src/services/validation/vee-validation-rules.js b/ui2/src/services/validation/vee-validation-rules.js
deleted file mode 100644
index e69de29bb..000000000
-- 
GitLab


From 32d333ef8186ceef6df1ed9b191aaf18e0d8419a Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:23:39 +0200
Subject: [PATCH 4/9] :lipstick: Correction de la taille des pages

---
 ui2/src/App.vue                   |  1 +
 ui2/src/style/_common.scss        |  5 +++++
 ui2/src/views/LoginView.vue       | 12 +++++++++---
 ui2/src/views/common/MenuView.vue |  8 +++++---
 ui2/src/views/common/PageView.vue | 12 +++++++-----
 5 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/ui2/src/App.vue b/ui2/src/App.vue
index 5f1fcd5ac..4a8686e86 100644
--- a/ui2/src/App.vue
+++ b/ui2/src/App.vue
@@ -19,5 +19,6 @@ export default class App extends Vue {}
   color: $text-default-color;
   display: flex;
   flex-direction: column;
+  height: 100%;
 }
 </style>
diff --git a/ui2/src/style/_common.scss b/ui2/src/style/_common.scss
index f77569bf7..2edd880f7 100644
--- a/ui2/src/style/_common.scss
+++ b/ui2/src/style/_common.scss
@@ -1,4 +1,9 @@
 // A file for common css across the application
+html,
+body {
+  height: 100%;
+}
+
 .title {
   color: $primary;
   &.main-title {
diff --git a/ui2/src/views/LoginView.vue b/ui2/src/views/LoginView.vue
index 9530262eb..ec78141f7 100644
--- a/ui2/src/views/LoginView.vue
+++ b/ui2/src/views/LoginView.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageView class="LoginView" :hasMenu="false">
+  <PageView class="LoginView">
     <h1 class="title main-title">{{ $t("titles.login-page") }}</h1>
     <div class="card LoginView-card">
       <b-tabs type="is-boxed">
@@ -13,13 +13,15 @@
 
 <script>
 import SignIn from "@/components/login/Signin.vue";
-import { Component, Vue } from "vue-property-decorator";
+import { Component, Provide, Vue } from "vue-property-decorator";
 import PageView from "./common/PageView.vue";
 
 @Component({
   components: { PageView, SignIn },
 })
-export default class LoginView extends Vue {}
+export default class LoginView extends Vue {
+  @Provide() shortMenu = true;
+}
 </script>
 
 <style lang="scss">
@@ -37,5 +39,9 @@ export default class LoginView extends Vue {}
   .LoginView-card {
     width: 70%;
   }
+
+  .title {
+    margin-top: 1.5rem;
+  }
 }
 </style>
diff --git a/ui2/src/views/common/MenuView.vue b/ui2/src/views/common/MenuView.vue
index fb37e23ea..706a716c5 100644
--- a/ui2/src/views/common/MenuView.vue
+++ b/ui2/src/views/common/MenuView.vue
@@ -1,6 +1,6 @@
 <template>
   <b-navbar class="menu-view">
-    <template #start>
+    <template #start v-if="!shortMenu">
       <b-navbar-item tag="router-link" :to="{ path: '/applications' }">
         {{ $t("menu.applications") }}
       </b-navbar-item>
@@ -10,7 +10,7 @@
     </template>
 
     <template #end>
-      <b-navbar-item tag="div">
+      <b-navbar-item tag="div" v-if="!shortMenu">
         <div class="buttons">
           <b-button type="is-info" @click="logout" icon-right="sign-out-alt">{{
             $t("menu.logout")
@@ -35,7 +35,7 @@
 </template>
 
 <script>
-import { Component, Vue } from "vue-property-decorator";
+import { Component, Inject, Vue } from "vue-property-decorator";
 
 import { LoginService } from "@/services/LoginService";
 import { UserPreferencesService } from "@/services/UserPreferencesService";
@@ -46,6 +46,8 @@ import { Locales } from "@/utils/LocaleUtils.js";
   components: {},
 })
 export default class MenuView extends Vue {
+  @Inject() shortMenu;
+
   loginService = LoginService.INSTANCE;
   userPreferencesService = UserPreferencesService.INSTANCE;
 
diff --git a/ui2/src/views/common/PageView.vue b/ui2/src/views/common/PageView.vue
index d5c5ff80f..6568f1d01 100644
--- a/ui2/src/views/common/PageView.vue
+++ b/ui2/src/views/common/PageView.vue
@@ -1,6 +1,6 @@
 <template>
-  <div>
-    <MenuView v-if="hasMenu" />
+  <div class="PageView">
+    <MenuView />
     <div class="container PageView-container">
       <slot></slot>
     </div>
@@ -9,15 +9,13 @@
 
 <script>
 import { LoginService } from "@/services/LoginService";
-import { Component, Prop, Vue } from "vue-property-decorator";
+import { Component, Vue } from "vue-property-decorator";
 import MenuView from "./MenuView.vue";
 
 @Component({
   components: { MenuView },
 })
 export default class PageView extends Vue {
-  @Prop({ default: true }) hasMenu;
-
   loginService = LoginService.INSTANCE;
 
   created() {
@@ -30,6 +28,10 @@ export default class PageView extends Vue {
 </script>
 
 <style lang="scss" scoped>
+.PageView {
+  height: 100%;
+}
+
 .PageView-container {
   width: 100%;
 }
-- 
GitLab


From 0425683954f8493cc1c10e31b04592e3324238ae Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:27:55 +0200
Subject: [PATCH 5/9] Change effectivement de langue dans le front.

---
 ui2/src/services/UserPreferencesService.js | 3 ++-
 ui2/src/style/_common.scss                 | 2 ++
 ui2/src/views/LoginView.vue                | 4 ----
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/ui2/src/services/UserPreferencesService.js b/ui2/src/services/UserPreferencesService.js
index fa64d350a..aa563b07b 100644
--- a/ui2/src/services/UserPreferencesService.js
+++ b/ui2/src/services/UserPreferencesService.js
@@ -1,3 +1,4 @@
+import app from "@/main";
 import { Locales } from "@/utils/LocaleUtils";
 import { Fetcher } from "./Fetcher";
 
@@ -22,6 +23,6 @@ export class UserPreferencesService extends Fetcher {
 
   setUserPrefLocale(locale) {
     localStorage.setItem(LOCAL_STORAGE_LANG, locale);
-    this.$root.$i18n.locale = locale;
+    app.$i18n.locale = locale;
   }
 }
diff --git a/ui2/src/style/_common.scss b/ui2/src/style/_common.scss
index 2edd880f7..39ad81f12 100644
--- a/ui2/src/style/_common.scss
+++ b/ui2/src/style/_common.scss
@@ -6,6 +6,8 @@ body {
 
 .title {
   color: $primary;
+  margin-top: 1.5rem;
+
   &.main-title {
     display: flex;
     align-items: center;
diff --git a/ui2/src/views/LoginView.vue b/ui2/src/views/LoginView.vue
index ec78141f7..acb5c2035 100644
--- a/ui2/src/views/LoginView.vue
+++ b/ui2/src/views/LoginView.vue
@@ -39,9 +39,5 @@ export default class LoginView extends Vue {
   .LoginView-card {
     width: 70%;
   }
-
-  .title {
-    margin-top: 1.5rem;
-  }
 }
 </style>
-- 
GitLab


From 5ac9745739eaab32133f2990cd26004b035b66f0 Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:28:43 +0200
Subject: [PATCH 6/9] Corrige une chaine de traduction

---
 ui2/src/locales/en.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index 8d2325247..80fb0d334 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -11,7 +11,7 @@
     "login-placeholder": "Write down the login",
     "pwd": "Password",
     "pwd-placeholder": "Write down the password",
-    "pwd-forgotten": "Password forgotten ? "
+    "pwd-forgotten": "Forgotten password ? "
   },
   "validation": {
     "obligatoire": "Mandatory",
-- 
GitLab


From d18ac397729dbefff8b17e479c3528a01d3218c0 Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Tue, 4 May 2021 20:40:54 +0200
Subject: [PATCH 7/9] =?UTF-8?q?Donne=20la=20locale=20dans=20le=20header=20?=
 =?UTF-8?q?des=20requ=C3=AAtes.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui2/src/services/Fetcher.js                | 25 ++++++++++++++++++++++
 ui2/src/services/UserPreferencesService.js | 15 +------------
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/ui2/src/services/Fetcher.js b/ui2/src/services/Fetcher.js
index 14117b5bd..36c308f59 100644
--- a/ui2/src/services/Fetcher.js
+++ b/ui2/src/services/Fetcher.js
@@ -1,5 +1,8 @@
 import config from "@/config";
 import { HttpStatusCodes } from "@/utils/HttpUtils";
+import { Locales } from "@/utils/LocaleUtils";
+
+export const LOCAL_STORAGE_LANG = "lang";
 
 export class Fetcher {
   async post(url, data) {
@@ -10,6 +13,9 @@ export class Fetcher {
       mode: "cors",
       credentials: "include",
       body: formData,
+      headers: {
+        "Accept-Language": this.getUserPrefLocale(),
+      },
     });
 
     return this._handleResponse(response);
@@ -22,6 +28,9 @@ export class Fetcher {
       mode: "cors",
       credentials: "include",
       body: formData,
+      headers: {
+        "Accept-Language": this.getUserPrefLocale(),
+      },
     });
 
     return this._handleResponse(response);
@@ -44,6 +53,9 @@ export class Fetcher {
       method: "GET",
       mode: "cors",
       credentials: "include",
+      headers: {
+        "Accept-Language": this.getUserPrefLocale(),
+      },
     });
 
     return this._handleResponse(response);
@@ -56,6 +68,9 @@ export class Fetcher {
       mode: "cors",
       credentials: "include",
       body: formData,
+      headers: {
+        "Accept-Language": this.getUserPrefLocale(),
+      },
     });
 
     if (response.ok) {
@@ -92,4 +107,14 @@ export class Fetcher {
     }
     return formData;
   }
+
+  getUserPrefLocale() {
+    const browserLocale = window.navigator.language.substring(0, 2);
+
+    return (
+      localStorage.getItem(LOCAL_STORAGE_LANG) ||
+      (Object.values(Locales).includes(browserLocale) && browserLocale) ||
+      Locales.FRENCH
+    );
+  }
 }
diff --git a/ui2/src/services/UserPreferencesService.js b/ui2/src/services/UserPreferencesService.js
index aa563b07b..ffbe8deca 100644
--- a/ui2/src/services/UserPreferencesService.js
+++ b/ui2/src/services/UserPreferencesService.js
@@ -1,8 +1,5 @@
 import app from "@/main";
-import { Locales } from "@/utils/LocaleUtils";
-import { Fetcher } from "./Fetcher";
-
-const LOCAL_STORAGE_LANG = "lang";
+import { Fetcher, LOCAL_STORAGE_LANG } from "./Fetcher";
 
 export class UserPreferencesService extends Fetcher {
   static INSTANCE = new UserPreferencesService();
@@ -11,16 +8,6 @@ export class UserPreferencesService extends Fetcher {
     super();
   }
 
-  getUserPrefLocale() {
-    const browserLocale = window.navigator.language.substring(0, 2);
-
-    return (
-      localStorage.getItem(LOCAL_STORAGE_LANG) ||
-      (Object.values(Locales).includes(browserLocale) && browserLocale) ||
-      Locales.FRENCH
-    );
-  }
-
   setUserPrefLocale(locale) {
     localStorage.setItem(LOCAL_STORAGE_LANG, locale);
     app.$i18n.locale = locale;
-- 
GitLab


From b2fc2c3ee4a99ad16dfd75fdf0408131f83ca911 Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Wed, 5 May 2021 10:44:46 +0200
Subject: [PATCH 8/9] =?UTF-8?q?Supprime=20fichier=20inutilis=C3=A9.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui2/src/services/Events.js | 3 ---
 1 file changed, 3 deletions(-)
 delete mode 100644 ui2/src/services/Events.js

diff --git a/ui2/src/services/Events.js b/ui2/src/services/Events.js
deleted file mode 100644
index 1e2eb5722..000000000
--- a/ui2/src/services/Events.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const Events = {
-  LOCALE_CHANGED: "locale_changed",
-};
-- 
GitLab


From 92ceddbaf07f81b7d14f0bba1ab51306e63fc77e Mon Sep 17 00:00:00 2001
From: Aurore Lecointe <lecointe@codelutin.com>
Date: Wed, 5 May 2021 15:16:01 +0200
Subject: [PATCH 9/9] =?UTF-8?q?Changements=20suite=20=C3=A0=20revue=20de?=
 =?UTF-8?q?=20code?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui2/src/components/login/Signin.vue | 2 +-
 ui2/src/locales/en.json             | 2 +-
 ui2/src/locales/fr.json             | 2 +-
 ui2/src/main.js                     | 4 ++--
 ui2/src/views/LoginView.vue         | 8 +++-----
 ui2/src/views/common/MenuView.vue   | 8 +++-----
 ui2/src/views/common/PageView.vue   | 6 ++++--
 7 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/ui2/src/components/login/Signin.vue b/ui2/src/components/login/Signin.vue
index 9afed9a4d..92da74c84 100644
--- a/ui2/src/components/login/Signin.vue
+++ b/ui2/src/components/login/Signin.vue
@@ -95,7 +95,7 @@ export default class SignIn extends Vue {
     } catch (error) {
       let message = this.$t("alert.server-error");
       if (error.status === HttpStatusCodes.FORBIDDEN) {
-        message = this.$t("alert.user-uknown");
+        message = this.$t("alert.user-unknown");
       }
       this.alertService.toastError(message, error);
     }
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index 80fb0d334..7ee339960 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -21,7 +21,7 @@
   "alert": {
     "cancel": "Cancel",
     "server-error": "A server error occured",
-    "user-uknown": "Uknown user"
+    "user-unknown": "Unknown user"
   },
   "menu": {
     "logout": "Log out",
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 9941861a8..65bb79fea 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -21,7 +21,7 @@
   "alert": {
     "cancel": "Annuler",
     "server-error": "Une erreur serveur est survenue",
-    "user-uknown": "Identifiants inconnus"
+    "user-unknown": "Identifiants inconnus"
   },
   "menu": {
     "logout": "Se déconnecter",
diff --git a/ui2/src/main.js b/ui2/src/main.js
index 9bdb15eec..45f5d5e83 100644
--- a/ui2/src/main.js
+++ b/ui2/src/main.js
@@ -47,8 +47,8 @@ export const i18n = new VueI18n({
 import "vee-validate";
 import { required } from "vee-validate/dist/rules";
 import { extend } from "vee-validate";
-// See https://logaretm.github.io/vee-validate/guide/rules.html
-// For list of all availables rules
+// Ici on surcharge les messages d'erreur de vee-validate.
+// Pour plus de règles :  https://logaretm.github.io/vee-validate/guide/rules.html
 
 extend("required", {
   ...required,
diff --git a/ui2/src/views/LoginView.vue b/ui2/src/views/LoginView.vue
index acb5c2035..9530262eb 100644
--- a/ui2/src/views/LoginView.vue
+++ b/ui2/src/views/LoginView.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageView class="LoginView">
+  <PageView class="LoginView" :hasMenu="false">
     <h1 class="title main-title">{{ $t("titles.login-page") }}</h1>
     <div class="card LoginView-card">
       <b-tabs type="is-boxed">
@@ -13,15 +13,13 @@
 
 <script>
 import SignIn from "@/components/login/Signin.vue";
-import { Component, Provide, Vue } from "vue-property-decorator";
+import { Component, Vue } from "vue-property-decorator";
 import PageView from "./common/PageView.vue";
 
 @Component({
   components: { PageView, SignIn },
 })
-export default class LoginView extends Vue {
-  @Provide() shortMenu = true;
-}
+export default class LoginView extends Vue {}
 </script>
 
 <style lang="scss">
diff --git a/ui2/src/views/common/MenuView.vue b/ui2/src/views/common/MenuView.vue
index 706a716c5..fb37e23ea 100644
--- a/ui2/src/views/common/MenuView.vue
+++ b/ui2/src/views/common/MenuView.vue
@@ -1,6 +1,6 @@
 <template>
   <b-navbar class="menu-view">
-    <template #start v-if="!shortMenu">
+    <template #start>
       <b-navbar-item tag="router-link" :to="{ path: '/applications' }">
         {{ $t("menu.applications") }}
       </b-navbar-item>
@@ -10,7 +10,7 @@
     </template>
 
     <template #end>
-      <b-navbar-item tag="div" v-if="!shortMenu">
+      <b-navbar-item tag="div">
         <div class="buttons">
           <b-button type="is-info" @click="logout" icon-right="sign-out-alt">{{
             $t("menu.logout")
@@ -35,7 +35,7 @@
 </template>
 
 <script>
-import { Component, Inject, Vue } from "vue-property-decorator";
+import { Component, Vue } from "vue-property-decorator";
 
 import { LoginService } from "@/services/LoginService";
 import { UserPreferencesService } from "@/services/UserPreferencesService";
@@ -46,8 +46,6 @@ import { Locales } from "@/utils/LocaleUtils.js";
   components: {},
 })
 export default class MenuView extends Vue {
-  @Inject() shortMenu;
-
   loginService = LoginService.INSTANCE;
   userPreferencesService = UserPreferencesService.INSTANCE;
 
diff --git a/ui2/src/views/common/PageView.vue b/ui2/src/views/common/PageView.vue
index 6568f1d01..093f3246d 100644
--- a/ui2/src/views/common/PageView.vue
+++ b/ui2/src/views/common/PageView.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="PageView">
-    <MenuView />
+    <MenuView v-if="hasMenu" />
     <div class="container PageView-container">
       <slot></slot>
     </div>
@@ -9,13 +9,15 @@
 
 <script>
 import { LoginService } from "@/services/LoginService";
-import { Component, Vue } from "vue-property-decorator";
+import { Component, Prop, Vue } from "vue-property-decorator";
 import MenuView from "./MenuView.vue";
 
 @Component({
   components: { MenuView },
 })
 export default class PageView extends Vue {
+  @Prop({ default: true }) hasMenu;
+
   loginService = LoginService.INSTANCE;
 
   created() {
-- 
GitLab