Jelajahi Sumber

dev en cours

rajah 8 bulan lalu
induk
melakukan
1a38540d69
39 mengubah file dengan 3104 tambahan dan 503 penghapusan
  1. 5 2
      angular.json
  2. 2433 0
      messages.arb
  3. 71 0
      package-lock.json
  4. 1 0
      package.json
  5. 34 28
      src/app/composants/account-details/account-details.component.html
  6. 18 10
      src/app/composants/account-details/account-details.component.ts
  7. 35 29
      src/app/composants/account-update/account-update.component.html
  8. 20 8
      src/app/composants/account-update/account-update.component.ts
  9. 16 16
      src/app/composants/categorie-create/categorie-create.component.html
  10. 17 17
      src/app/composants/categorie-details/categorie-details.component.html
  11. 10 10
      src/app/composants/categorie-list/categorie-list.component.html
  12. 26 26
      src/app/composants/categorie-update/categorie-update.component.html
  13. 7 7
      src/app/composants/home/home.component.html
  14. 5 5
      src/app/composants/login/login.component.html
  15. 39 39
      src/app/composants/menu/menu.component.html
  16. 36 34
      src/app/composants/participant-create/participant-create.component.html
  17. 18 9
      src/app/composants/participant-create/participant-create.component.ts
  18. 37 31
      src/app/composants/participant-details/participant-details.component.html
  19. 18 11
      src/app/composants/participant-details/participant-details.component.ts
  20. 20 20
      src/app/composants/participant-list/participant-list.component.html
  21. 15 4
      src/app/composants/participant-list/participant-list.component.ts
  22. 46 40
      src/app/composants/participant-update/participant-update.component.html
  23. 14 7
      src/app/composants/participant-update/participant-update.component.ts
  24. 14 14
      src/app/composants/production-create/production-create.component.html
  25. 19 21
      src/app/composants/production-details/production-details.component.html
  26. 4 4
      src/app/composants/production-list/production-list.component.html
  27. 24 26
      src/app/composants/production-update/production-update.component.html
  28. 6 6
      src/app/composants/production-upload/production-upload.component.html
  29. 8 8
      src/app/composants/variable-create/variable-create.component.html
  30. 10 10
      src/app/composants/variable-details/variable-details.component.html
  31. 7 7
      src/app/composants/variable-list/variable-list.component.html
  32. 19 19
      src/app/composants/variable-update/variable-update.component.html
  33. 11 1
      src/app/interfaces/divers.ts
  34. 18 18
      src/app/interfaces/participant.ts
  35. 9 9
      src/app/interfaces/production.ts
  36. 7 5
      src/app/services/divers.service.ts
  37. 2 0
      src/main.ts
  38. 3 1
      tsconfig.app.json
  39. 2 1
      tsconfig.spec.json

+ 5 - 2
angular.json

@@ -9,6 +9,7 @@
       "root": "",
       "root": "",
       "sourceRoot": "src",
       "sourceRoot": "src",
       "prefix": "app",
       "prefix": "app",
+      "i18n": { "sourceLocale": "fr" },
       "architect": {
       "architect": {
         "build": {
         "build": {
           "builder": "@angular-devkit/build-angular:application",
           "builder": "@angular-devkit/build-angular:application",
@@ -17,7 +18,8 @@
             "index": "src/index.html",
             "index": "src/index.html",
             "browser": "src/main.ts",
             "browser": "src/main.ts",
             "polyfills": [
             "polyfills": [
-              "zone.js"
+              "zone.js",
+              "@angular/localize/init"
             ],
             ],
             "tsConfig": "tsconfig.app.json",
             "tsConfig": "tsconfig.app.json",
             "assets": [
             "assets": [
@@ -80,7 +82,8 @@
           "options": {
           "options": {
             "polyfills": [
             "polyfills": [
               "zone.js",
               "zone.js",
-              "zone.js/testing"
+              "zone.js/testing",
+              "@angular/localize/init"
             ],
             ],
             "tsConfig": "tsconfig.spec.json",
             "tsConfig": "tsconfig.spec.json",
             "assets": [
             "assets": [

+ 2433 - 0
messages.arb

@@ -0,0 +1,2433 @@
+{
+  "@@locale": "fr",
+  "3996542468246131656": "Fiche d'un participant",
+  "@3996542468246131656": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "70" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "4", "column": "46" },
+        "end": { "line": "4", "column": "70" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "71" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "70" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "4", "column": "46" },
+        "end": { "line": "4", "column": "70" }
+      }
+    ]
+  },
+  "8168765646794661881": "Retour",
+  "@8168765646794661881": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "5", "column": "133" },
+        "end": { "line": "5", "column": "141" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "6", "column": "133" },
+        "end": { "line": "6", "column": "141" }
+      },
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "6", "column": "143" },
+        "end": { "line": "6", "column": "151" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "5", "column": "142" },
+        "end": { "line": "5", "column": "150" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "6", "column": "142" },
+        "end": { "line": "6", "column": "150" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "6", "column": "145" },
+        "end": { "line": "6", "column": "153" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "5", "column": "144" },
+        "end": { "line": "5", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "6", "column": "144" },
+        "end": { "line": "6", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "6", "column": "144" },
+        "end": { "line": "6", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "5", "column": "143" },
+        "end": { "line": "5", "column": "151" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "6", "column": "144" },
+        "end": { "line": "6", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/production-upload/production-upload.component.html",
+        "start": { "line": "6", "column": "144" },
+        "end": { "line": "6", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "6", "column": "142" },
+        "end": { "line": "6", "column": "150" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "5", "column": "157" },
+        "end": { "line": "5", "column": "165" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "6", "column": "156" },
+        "end": { "line": "6", "column": "164" }
+      }
+    ]
+  },
+  "5976453380036450181": "Créé le",
+  "@5976453380036450181": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "10", "column": "91" },
+        "end": { "line": "10", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "11", "column": "91" },
+        "end": { "line": "11", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "11", "column": "91" },
+        "end": { "line": "11", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "11", "column": "91" },
+        "end": { "line": "11", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "10", "column": "91" },
+        "end": { "line": "10", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "11", "column": "91" },
+        "end": { "line": "11", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "10", "column": "91" },
+        "end": { "line": "10", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "10", "column": "94" },
+        "end": { "line": "10", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "101" }
+      }
+    ]
+  },
+  "8690005162837882910": "Modifié le",
+  "@8690005162837882910": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "17", "column": "91" },
+        "end": { "line": "17", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "18", "column": "91" },
+        "end": { "line": "18", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "18", "column": "91" },
+        "end": { "line": "18", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "18", "column": "91" },
+        "end": { "line": "18", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "17", "column": "91" },
+        "end": { "line": "17", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "18", "column": "91" },
+        "end": { "line": "18", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "17", "column": "91" },
+        "end": { "line": "17", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "17", "column": "94" },
+        "end": { "line": "17", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "104" }
+      }
+    ]
+  },
+  "5363451304863092478": "Nom",
+  "@5363451304863092478": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "24", "column": "91" },
+        "end": { "line": "24", "column": "96" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "25", "column": "91" },
+        "end": { "line": "25", "column": "96" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "97" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "24", "column": "91" },
+        "end": { "line": "24", "column": "96" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "53", "column": "60" },
+        "end": { "line": "53", "column": "65" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "25", "column": "91" },
+        "end": { "line": "25", "column": "96" }
+      }
+    ]
+  },
+  "8203024106711668685": "Prénom",
+  "@8203024106711668685": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "31", "column": "91" },
+        "end": { "line": "31", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "32", "column": "91" },
+        "end": { "line": "32", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "31", "column": "91" },
+        "end": { "line": "31", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "32", "column": "91" },
+        "end": { "line": "32", "column": "99" }
+      }
+    ]
+  },
+  "1710348196830286554": "Pseudonyme",
+  "@1710348196830286554": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "38", "column": "91" },
+        "end": { "line": "38", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "39", "column": "91" },
+        "end": { "line": "39", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/login/login.component.html",
+        "start": { "line": "16", "column": "92" },
+        "end": { "line": "16", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "25", "column": "92" },
+        "end": { "line": "25", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "38", "column": "91" },
+        "end": { "line": "38", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "54", "column": "60" },
+        "end": { "line": "54", "column": "72" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "39", "column": "91" },
+        "end": { "line": "39", "column": "103" }
+      }
+    ]
+  },
+  "5712320245580483957": "Groupe",
+  "@5712320245580483957": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "45", "column": "91" },
+        "end": { "line": "45", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "46", "column": "91" },
+        "end": { "line": "46", "column": "99" }
+      }
+    ]
+  },
+  "5249891717669571568": "Mot de passe",
+  "@5249891717669571568": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "52", "column": "91" },
+        "end": { "line": "52", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "53", "column": "91" },
+        "end": { "line": "53", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/login/login.component.html",
+        "start": { "line": "23", "column": "92" },
+        "end": { "line": "23", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "39", "column": "92" },
+        "end": { "line": "39", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "52", "column": "91" },
+        "end": { "line": "52", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "53", "column": "91" },
+        "end": { "line": "53", "column": "105" }
+      }
+    ]
+  },
+  "8166761559287030447": "Délai avant déconnexion",
+  "@8166761559287030447": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "59", "column": "91" },
+        "end": { "line": "59", "column": "116" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "46", "column": "92" },
+        "end": { "line": "46", "column": "117" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "59", "column": "91" },
+        "end": { "line": "59", "column": "116" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "60", "column": "91" },
+        "end": { "line": "60", "column": "116" }
+      }
+    ]
+  },
+  "1815195286714301387": "Adresse",
+  "@1815195286714301387": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "66", "column": "91" },
+        "end": { "line": "66", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "60", "column": "91" },
+        "end": { "line": "60", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "53", "column": "92" },
+        "end": { "line": "53", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "66", "column": "91" },
+        "end": { "line": "66", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "67", "column": "91" },
+        "end": { "line": "67", "column": "100" }
+      }
+    ]
+  },
+  "4716513778549226272": "Code postal",
+  "@4716513778549226272": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "73", "column": "91" },
+        "end": { "line": "73", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "67", "column": "91" },
+        "end": { "line": "67", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "60", "column": "92" },
+        "end": { "line": "60", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "73", "column": "91" },
+        "end": { "line": "73", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "74", "column": "91" },
+        "end": { "line": "74", "column": "104" }
+      }
+    ]
+  },
+  "5407759070423985131": "Ville",
+  "@5407759070423985131": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "80", "column": "91" },
+        "end": { "line": "80", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "74", "column": "91" },
+        "end": { "line": "74", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "67", "column": "92" },
+        "end": { "line": "67", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "80", "column": "91" },
+        "end": { "line": "80", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "81", "column": "91" },
+        "end": { "line": "81", "column": "98" }
+      }
+    ]
+  },
+  "7135345516243177577": "Pays",
+  "@7135345516243177577": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "87", "column": "91" },
+        "end": { "line": "87", "column": "97" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "81", "column": "91" },
+        "end": { "line": "81", "column": "97" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "74", "column": "92" },
+        "end": { "line": "74", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "87", "column": "91" },
+        "end": { "line": "87", "column": "97" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "88", "column": "91" },
+        "end": { "line": "88", "column": "97" }
+      }
+    ]
+  },
+  "7542094483332182245": "Numéro de téléphone",
+  "@7542094483332182245": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "94", "column": "91" },
+        "end": { "line": "94", "column": "112" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "88", "column": "91" },
+        "end": { "line": "88", "column": "112" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "81", "column": "92" },
+        "end": { "line": "81", "column": "113" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "94", "column": "91" },
+        "end": { "line": "94", "column": "112" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "95", "column": "91" },
+        "end": { "line": "95", "column": "112" }
+      }
+    ]
+  },
+  "6451366853552763375": "Adresse email",
+  "@6451366853552763375": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "101", "column": "91" },
+        "end": { "line": "101", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "95", "column": "91" },
+        "end": { "line": "95", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "88", "column": "92" },
+        "end": { "line": "88", "column": "107" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "101", "column": "91" },
+        "end": { "line": "101", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "58", "column": "60" },
+        "end": { "line": "58", "column": "75" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "102", "column": "91" },
+        "end": { "line": "102", "column": "106" }
+      }
+    ]
+  },
+  "8751414212402399949": "Inscrit le",
+  "@8751414212402399949": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "108", "column": "91" },
+        "end": { "line": "108", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "102", "column": "91" },
+        "end": { "line": "102", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "119", "column": "91" },
+        "end": { "line": "119", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "120", "column": "91" },
+        "end": { "line": "120", "column": "103" }
+      }
+    ]
+  },
+  "1102046622055756860": "Avec machine",
+  "@1102046622055756860": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "118", "column": "222" },
+        "end": { "line": "118", "column": "236" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "112", "column": "222" },
+        "end": { "line": "112", "column": "236" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "110", "column": "76" },
+        "end": { "line": "110", "column": "90" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "129", "column": "222" },
+        "end": { "line": "129", "column": "236" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "130", "column": "213" },
+        "end": { "line": "130", "column": "227" }
+      }
+    ]
+  },
+  "6375643576873540296": "Dort sur place",
+  "@6375643576873540296": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "154", "column": "234" },
+        "end": { "line": "154", "column": "250" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "148", "column": "234" },
+        "end": { "line": "148", "column": "250" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "150", "column": "79" },
+        "end": { "line": "150", "column": "95" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "165", "column": "234" },
+        "end": { "line": "165", "column": "250" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "166", "column": "225" },
+        "end": { "line": "166", "column": "241" }
+      }
+    ]
+  },
+  "4952719776065687721": "Commentaire",
+  "@4952719776065687721": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "170", "column": "91" },
+        "end": { "line": "170", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "164", "column": "91" },
+        "end": { "line": "164", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "166", "column": "92" },
+        "end": { "line": "166", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "181", "column": "91" },
+        "end": { "line": "181", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "182", "column": "91" },
+        "end": { "line": "182", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "50", "column": "92" },
+        "end": { "line": "50", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "63", "column": "91" },
+        "end": { "line": "63", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "64", "column": "92" },
+        "end": { "line": "64", "column": "105" }
+      }
+    ]
+  },
+  "1158164796106814364": "Arrivé",
+  "@1158164796106814364": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "180", "column": "206" },
+        "end": { "line": "180", "column": "214" }
+      },
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "174", "column": "206" },
+        "end": { "line": "174", "column": "214" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "195", "column": "72" },
+        "end": { "line": "195", "column": "80" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "209", "column": "206" },
+        "end": { "line": "209", "column": "214" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "56", "column": "60" },
+        "end": { "line": "56", "column": "68" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "210", "column": "197" },
+        "end": { "line": "210", "column": "205" }
+      }
+    ]
+  },
+  "1526012245521314857": "Editer",
+  "@1526012245521314857": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-details/account-details.component.html",
+        "start": { "line": "187", "column": "149" },
+        "end": { "line": "187", "column": "157" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "90", "column": "177" },
+        "end": { "line": "90", "column": "185" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "216", "column": "183" },
+        "end": { "line": "216", "column": "191" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "100", "column": "180" },
+        "end": { "line": "100", "column": "188" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "54", "column": "176" },
+        "end": { "line": "54", "column": "184" }
+      }
+    ]
+  },
+  "1785052497460968940": "Modifier",
+  "@1785052497460968940": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "181", "column": "211" },
+        "end": { "line": "181", "column": "221" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "90", "column": "211" },
+        "end": { "line": "90", "column": "221" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "217", "column": "211" },
+        "end": { "line": "217", "column": "221" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "97", "column": "211" },
+        "end": { "line": "97", "column": "221" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "55", "column": "211" },
+        "end": { "line": "55", "column": "221" }
+      }
+    ]
+  },
+  "5110775922928231258": "Modification",
+  "@5110775922928231258": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "190", "column": "72" },
+        "end": { "line": "190", "column": "86" }
+      }
+    ]
+  },
+  "950357080467930295": "Actualiser cet enregistrement ?",
+  "@950357080467930295": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "192", "column": "47" },
+        "end": { "line": "192", "column": "80" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "102", "column": "47" },
+        "end": { "line": "102", "column": "80" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "229", "column": "47" },
+        "end": { "line": "229", "column": "80" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "109", "column": "47" },
+        "end": { "line": "109", "column": "80" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "67", "column": "47" },
+        "end": { "line": "67", "column": "80" }
+      }
+    ]
+  },
+  "1711750570766225138": "Annuler",
+  "@1711750570766225138": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "194", "column": "115" },
+        "end": { "line": "194", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "104", "column": "115" },
+        "end": { "line": "104", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "119", "column": "115" },
+        "end": { "line": "119", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "83", "column": "119" },
+        "end": { "line": "83", "column": "128" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "231", "column": "115" },
+        "end": { "line": "231", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "246", "column": "115" },
+        "end": { "line": "246", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "111", "column": "115" },
+        "end": { "line": "111", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "126", "column": "115" },
+        "end": { "line": "126", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "69", "column": "115" },
+        "end": { "line": "69", "column": "124" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "84", "column": "115" },
+        "end": { "line": "84", "column": "124" }
+      }
+    ]
+  },
+  "4247263368529700262": "Confirmer",
+  "@4247263368529700262": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/account-update/account-update.component.html",
+        "start": { "line": "195", "column": "141" },
+        "end": { "line": "195", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "105", "column": "141" },
+        "end": { "line": "105", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "120", "column": "140" },
+        "end": { "line": "120", "column": "151" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "84", "column": "141" },
+        "end": { "line": "84", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "232", "column": "141" },
+        "end": { "line": "232", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "247", "column": "140" },
+        "end": { "line": "247", "column": "151" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "112", "column": "141" },
+        "end": { "line": "112", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "127", "column": "140" },
+        "end": { "line": "127", "column": "151" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "70", "column": "141" },
+        "end": { "line": "70", "column": "152" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "85", "column": "140" },
+        "end": { "line": "85", "column": "151" }
+      }
+    ]
+  },
+  "1056975647247811549": "Fiche d'une catégorie",
+  "@1056975647247811549": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "4", "column": "46" },
+        "end": { "line": "4", "column": "69" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "69" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "4", "column": "46" },
+        "end": { "line": "4", "column": "69" }
+      }
+    ]
+  },
+  "1167969454663460101": "Libellé",
+  "@1167969454663460101": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "25", "column": "91" },
+        "end": { "line": "25", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "16", "column": "60" },
+        "end": { "line": "16", "column": "69" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "25", "column": "91" },
+        "end": { "line": "25", "column": "100" }
+      }
+    ]
+  },
+  "7126705387324369355": "Numéro d'ordre",
+  "@7126705387324369355": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "108" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "32", "column": "91" },
+        "end": { "line": "32", "column": "107" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "32", "column": "91" },
+        "end": { "line": "32", "column": "107" }
+      }
+    ]
+  },
+  "9067456695925284781": "Disponible",
+  "@9067456695925284781": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "29", "column": "74" },
+        "end": { "line": "29", "column": "86" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "43", "column": "73" },
+        "end": { "line": "43", "column": "85" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "17", "column": "60" },
+        "end": { "line": "17", "column": "72" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "43", "column": "73" },
+        "end": { "line": "43", "column": "85" }
+      }
+    ]
+  },
+  "7709172455474905808": "Téléversable",
+  "@7709172455474905808": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "39", "column": "75" },
+        "end": { "line": "39", "column": "89" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "53", "column": "74" },
+        "end": { "line": "53", "column": "88" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "18", "column": "60" },
+        "end": { "line": "18", "column": "74" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "53", "column": "74" },
+        "end": { "line": "53", "column": "88" }
+      }
+    ]
+  },
+  "8451694533752444073": "Vote ouvert",
+  "@8451694533752444073": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "49", "column": "73" },
+        "end": { "line": "49", "column": "86" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "63", "column": "72" },
+        "end": { "line": "63", "column": "85" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "19", "column": "60" },
+        "end": { "line": "19", "column": "73" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "63", "column": "72" },
+        "end": { "line": "63", "column": "85" }
+      }
+    ]
+  },
+  "6152762083501726958": "Vote calculé",
+  "@6152762083501726958": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "59", "column": "73" },
+        "end": { "line": "59", "column": "87" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "73", "column": "72" },
+        "end": { "line": "73", "column": "86" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "73", "column": "72" },
+        "end": { "line": "73", "column": "86" }
+      }
+    ]
+  },
+  "8410333980120061505": "Vote publié",
+  "@8410333980120061505": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "69", "column": "76" },
+        "end": { "line": "69", "column": "89" }
+      },
+      {
+        "file": "src/app/composants/categorie-details/categorie-details.component.html",
+        "start": { "line": "83", "column": "75" },
+        "end": { "line": "83", "column": "88" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "21", "column": "60" },
+        "end": { "line": "21", "column": "73" }
+      },
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "83", "column": "75" },
+        "end": { "line": "83", "column": "88" }
+      }
+    ]
+  },
+  "9222330152375559662": "Créer",
+  "@9222330152375559662": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-create/categorie-create.component.html",
+        "start": { "line": "76", "column": "179" },
+        "end": { "line": "76", "column": "186" }
+      },
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "8", "column": "183" },
+        "end": { "line": "8", "column": "190" }
+      },
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "202", "column": "179" },
+        "end": { "line": "202", "column": "186" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "8", "column": "200" },
+        "end": { "line": "8", "column": "207" }
+      },
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "92", "column": "179" },
+        "end": { "line": "92", "column": "186" }
+      },
+      {
+        "file": "src/app/composants/production-list/production-list.component.html",
+        "start": { "line": "8", "column": "184" },
+        "end": { "line": "8", "column": "191" }
+      },
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "40", "column": "179" },
+        "end": { "line": "40", "column": "186" }
+      },
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "8", "column": "197" },
+        "end": { "line": "8", "column": "204" }
+      }
+    ]
+  },
+  "2504378199361638969": "Table des catégories",
+  "@2504378199361638969": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "68" }
+      }
+    ]
+  },
+  "5925860946277274949": "Actualiser",
+  "@5925860946277274949": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "7", "column": "193" },
+        "end": { "line": "7", "column": "205" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "7", "column": "210" },
+        "end": { "line": "7", "column": "222" }
+      },
+      {
+        "file": "src/app/composants/production-list/production-list.component.html",
+        "start": { "line": "7", "column": "194" },
+        "end": { "line": "7", "column": "206" }
+      },
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "7", "column": "207" },
+        "end": { "line": "7", "column": "219" }
+      }
+    ]
+  },
+  "2730628440070513438": "Vote terminé",
+  "@2730628440070513438": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-list/categorie-list.component.html",
+        "start": { "line": "20", "column": "60" },
+        "end": { "line": "20", "column": "74" }
+      }
+    ]
+  },
+  "3052621220241641308": "Effacer",
+  "@3052621220241641308": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "91", "column": "202" },
+        "end": { "line": "91", "column": "211" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "218", "column": "202" },
+        "end": { "line": "218", "column": "211" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "98", "column": "202" },
+        "end": { "line": "98", "column": "211" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "56", "column": "202" },
+        "end": { "line": "56", "column": "211" }
+      }
+    ]
+  },
+  "5590943340189881231": "Modification d'une catégorie",
+  "@5590943340189881231": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "100", "column": "72" },
+        "end": { "line": "100", "column": "102" }
+      }
+    ]
+  },
+  "2421039405005930878": "Suppression d'une catégorie",
+  "@2421039405005930878": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "115", "column": "83" },
+        "end": { "line": "115", "column": "112" }
+      }
+    ]
+  },
+  "4183980712617713140": "Effacer cet enregistrement ?",
+  "@4183980712617713140": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/categorie-update/categorie-update.component.html",
+        "start": { "line": "117", "column": "47" },
+        "end": { "line": "117", "column": "77" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "244", "column": "47" },
+        "end": { "line": "244", "column": "77" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "124", "column": "47" },
+        "end": { "line": "124", "column": "77" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "82", "column": "47" },
+        "end": { "line": "82", "column": "77" }
+      }
+    ]
+  },
+  "1729406214519639874": "Bienvenue",
+  "@1729406214519639874": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/home/home.component.html",
+        "start": { "line": "4", "column": "48" },
+        "end": { "line": "4", "column": "59" }
+      }
+    ]
+  },
+  "5845195747053018413": "Merci de vous {$START_LINK}connecter{$CLOSE_LINK} pour accéder à plus de fonctionnalités.",
+  "@5845195747053018413": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/home/home.component.html",
+        "start": { "line": "13", "column": "84" },
+        "end": { "line": "13", "column": "173" }
+      }
+    ]
+  },
+  "8655142270609867079": "S'identifier",
+  "@8655142270609867079": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/login/login.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "61" }
+      }
+    ]
+  },
+  "8116179437952488503": "Merci de contacter l'administrateur si vous l'avez oublié ou ne le connaissez pas.",
+  "@8116179437952488503": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/login/login.component.html",
+        "start": { "line": "26", "column": "63" },
+        "end": { "line": "26", "column": "147" }
+      }
+    ]
+  },
+  "2454050363478003966": "Login",
+  "@2454050363478003966": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/login/login.component.html",
+        "start": { "line": "32", "column": "191" },
+        "end": { "line": "32", "column": "198" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "5", "column": "125" },
+        "end": { "line": "5", "column": "132" }
+      }
+    ]
+  },
+  "3476583629594890489": "Accueil",
+  "@3476583629594890489": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "4", "column": "125" },
+        "end": { "line": "4", "column": "134" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "15", "column": "125" },
+        "end": { "line": "15", "column": "134" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "35", "column": "125" },
+        "end": { "line": "35", "column": "134" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "55", "column": "125" },
+        "end": { "line": "55", "column": "134" }
+      }
+    ]
+  },
+  "6668584344316209309": "Planning",
+  "@6668584344316209309": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "6", "column": "130" },
+        "end": { "line": "6", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "18", "column": "130" },
+        "end": { "line": "18", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "38", "column": "130" },
+        "end": { "line": "38", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "58", "column": "130" },
+        "end": { "line": "58", "column": "140" }
+      }
+    ]
+  },
+  "3419967175702537737": "Caméras",
+  "@3419967175702537737": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "7", "column": "131" },
+        "end": { "line": "7", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "19", "column": "131" },
+        "end": { "line": "19", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "39", "column": "131" },
+        "end": { "line": "39", "column": "140" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "59", "column": "131" },
+        "end": { "line": "59", "column": "140" }
+      }
+    ]
+  },
+  "2332866508838027590": "Compte",
+  "@2332866508838027590": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "16", "column": "135" },
+        "end": { "line": "16", "column": "143" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "36", "column": "135" },
+        "end": { "line": "36", "column": "143" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "56", "column": "135" },
+        "end": { "line": "56", "column": "143" }
+      }
+    ]
+  },
+  "3797778920049399855": "Logout",
+  "@3797778920049399855": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "17", "column": "163" },
+        "end": { "line": "17", "column": "171" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "37", "column": "163" },
+        "end": { "line": "37", "column": "171" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "57", "column": "163" },
+        "end": { "line": "57", "column": "171" }
+      }
+    ]
+  },
+  "4883750697490748201": "Messagerie",
+  "@4883750697490748201": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "21", "column": "124" },
+        "end": { "line": "21", "column": "136" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "41", "column": "124" },
+        "end": { "line": "41", "column": "136" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "61", "column": "124" },
+        "end": { "line": "61", "column": "136" }
+      }
+    ]
+  },
+  "5697499845932268849": "Productions",
+  "@5697499845932268849": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "23", "column": "135" },
+        "end": { "line": "23", "column": "148" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "45", "column": "135" },
+        "end": { "line": "45", "column": "148" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "66", "column": "135" },
+        "end": { "line": "66", "column": "148" }
+      }
+    ]
+  },
+  "835836004237796752": "Voter",
+  "@835836004237796752": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "25", "column": "129" },
+        "end": { "line": "25", "column": "136" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "46", "column": "129" },
+        "end": { "line": "46", "column": "136" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "68", "column": "129" },
+        "end": { "line": "68", "column": "136" }
+      }
+    ]
+  },
+  "4873897997619847055": "Résultats",
+  "@4873897997619847055": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "26", "column": "131" },
+        "end": { "line": "26", "column": "142" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "47", "column": "131" },
+        "end": { "line": "47", "column": "142" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "69", "column": "131" },
+        "end": { "line": "69", "column": "142" }
+      }
+    ]
+  },
+  "3481736869685494304": "Participants",
+  "@3481736869685494304": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "43", "column": "136" },
+        "end": { "line": "43", "column": "150" }
+      },
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "63", "column": "136" },
+        "end": { "line": "63", "column": "150" }
+      }
+    ]
+  },
+  "7860595597926666929": "Catégories",
+  "@7860595597926666929": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "65", "column": "134" },
+        "end": { "line": "65", "column": "146" }
+      }
+    ]
+  },
+  "4739496835866797007": "Présentations",
+  "@4739496835866797007": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "67", "column": "129" },
+        "end": { "line": "67", "column": "144" }
+      }
+    ]
+  },
+  "1443789630753458022": "Paramétrages",
+  "@1443789630753458022": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "71", "column": "133" },
+        "end": { "line": "71", "column": "147" }
+      }
+    ]
+  },
+  "2056113439223170910": "Voulez-vous vous déconnecter ?",
+  "@2056113439223170910": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/menu/menu.component.html",
+        "start": { "line": "81", "column": "50" },
+        "end": { "line": "81", "column": "82" }
+      }
+    ]
+  },
+  "7549066573921150406": "Groupe(s)",
+  "@7549066573921150406": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "32", "column": "92" },
+        "end": { "line": "32", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "45", "column": "91" },
+        "end": { "line": "45", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "46", "column": "91" },
+        "end": { "line": "46", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "36", "column": "92" },
+        "end": { "line": "36", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "49", "column": "91" },
+        "end": { "line": "49", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "50", "column": "92" },
+        "end": { "line": "50", "column": "103" }
+      }
+    ]
+  },
+  "5611592591303869712": "Status",
+  "@5611592591303869712": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "95", "column": "92" },
+        "end": { "line": "95", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "108", "column": "91" },
+        "end": { "line": "108", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "55", "column": "60" },
+        "end": { "line": "55", "column": "68" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "109", "column": "91" },
+        "end": { "line": "109", "column": "99" }
+      }
+    ]
+  },
+  "4598762061603761080": "Mode de paiement",
+  "@4598762061603761080": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "173", "column": "92" },
+        "end": { "line": "173", "column": "110" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "188", "column": "91" },
+        "end": { "line": "188", "column": "109" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "189", "column": "91" },
+        "end": { "line": "189", "column": "109" }
+      }
+    ]
+  },
+  "5192310602568960435": "Somme reçue",
+  "@5192310602568960435": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-create/participant-create.component.html",
+        "start": { "line": "184", "column": "92" },
+        "end": { "line": "184", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/participant-details/participant-details.component.html",
+        "start": { "line": "199", "column": "91" },
+        "end": { "line": "199", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "200", "column": "91" },
+        "end": { "line": "200", "column": "104" }
+      }
+    ]
+  },
+  "4620277891493695023": "Liste des participants",
+  "@4620277891493695023": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "70" }
+      }
+    ]
+  },
+  "6312279753327141624": "Tri",
+  "@6312279753327141624": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "12", "column": "116" },
+        "end": { "line": "12", "column": "121" }
+      }
+    ]
+  },
+  "1005198589167566031": "par nom, prénom, pseudo",
+  "@1005198589167566031": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "14", "column": "44" },
+        "end": { "line": "14", "column": "69" }
+      }
+    ]
+  },
+  "4952631785212667246": "par ordre d'inscription",
+  "@4952631785212667246": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "15", "column": "44" },
+        "end": { "line": "15", "column": "69" }
+      }
+    ]
+  },
+  "673430564078029527": "Filtrer",
+  "@673430564078029527": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "21", "column": "172" },
+        "end": { "line": "21", "column": "181" }
+      }
+    ]
+  },
+  "6462245428999877270": "Filtrer par nom, prenom, pseudonyme ou adresse email",
+  "@6462245428999877270": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "22", "column": "181" },
+        "end": { "line": "22", "column": "235" }
+      }
+    ]
+  },
+  "8564352977822135075": "Réglement",
+  "@8564352977822135075": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "27", "column": "116" },
+        "end": { "line": "27", "column": "127" }
+      }
+    ]
+  },
+  "5896013225697893921": "En attente",
+  "@5896013225697893921": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "30", "column": "44" },
+        "end": { "line": "30", "column": "56" }
+      },
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "4", "column": "39" },
+        "end": { "line": "4", "column": "51" }
+      }
+    ]
+  },
+  "1886321238220228512": "Arrivé(s)",
+  "@1886321238220228512": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "36", "column": "116" },
+        "end": { "line": "36", "column": "127" }
+      }
+    ]
+  },
+  "4709450557795328287": "Non",
+  "@4709450557795328287": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "39", "column": "44" },
+        "end": { "line": "39", "column": "49" }
+      }
+    ]
+  },
+  "7180575964287205441": "Oui",
+  "@7180575964287205441": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "40", "column": "44" },
+        "end": { "line": "40", "column": "49" }
+      }
+    ]
+  },
+  "8363252164224214061": "Retirer les filtres",
+  "@8363252164224214061": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "45", "column": "185" },
+        "end": { "line": "45", "column": "206" }
+      }
+    ]
+  },
+  "4769578347258290752": "Journées",
+  "@4769578347258290752": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-list/participant-list.component.html",
+        "start": { "line": "57", "column": "60" },
+        "end": { "line": "57", "column": "70" }
+      }
+    ]
+  },
+  "5848504930706993893": "Modification d'un participant",
+  "@5848504930706993893": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "227", "column": "72" },
+        "end": { "line": "227", "column": "103" }
+      }
+    ]
+  },
+  "6425286939262815261": "Suppression d'un participant",
+  "@6425286939262815261": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/participant-update/participant-update.component.html",
+        "start": { "line": "242", "column": "83" },
+        "end": { "line": "242", "column": "113" }
+      }
+    ]
+  },
+  "4330330782384546942": "Fiche d'une production",
+  "@4330330782384546942": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "71" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "70" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "71" }
+      }
+    ]
+  },
+  "8650499415827640724": "Type",
+  "@8650499415827640724": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "24", "column": "91" },
+        "end": { "line": "24", "column": "97" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "25", "column": "92" },
+        "end": { "line": "25", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "24", "column": "94" },
+        "end": { "line": "24", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "27", "column": "60" },
+        "end": { "line": "27", "column": "66" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "25", "column": "92" },
+        "end": { "line": "25", "column": "98" }
+      }
+    ]
+  },
+  "6518032478600962138": "Titre",
+  "@6518032478600962138": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "22", "column": "92" },
+        "end": { "line": "22", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "35", "column": "91" },
+        "end": { "line": "35", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "36", "column": "92" },
+        "end": { "line": "36", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/production-upload/production-upload.component.html",
+        "start": { "line": "11", "column": "92" },
+        "end": { "line": "11", "column": "99" }
+      }
+    ]
+  },
+  "4184547672124399805": "Auteur(s)",
+  "@4184547672124399805": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "29", "column": "92" },
+        "end": { "line": "29", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "42", "column": "91" },
+        "end": { "line": "42", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "43", "column": "92" },
+        "end": { "line": "43", "column": "103" }
+      }
+    ]
+  },
+  "1961861928422837439": "Plateforme",
+  "@1961861928422837439": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "43", "column": "92" },
+        "end": { "line": "43", "column": "104" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "56", "column": "91" },
+        "end": { "line": "56", "column": "103" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "57", "column": "92" },
+        "end": { "line": "57", "column": "104" }
+      }
+    ]
+  },
+  "1084303486709778995": "Informations privées",
+  "@1084303486709778995": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "57", "column": "92" },
+        "end": { "line": "57", "column": "114" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "70", "column": "91" },
+        "end": { "line": "70", "column": "113" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "71", "column": "92" },
+        "end": { "line": "71", "column": "114" }
+      }
+    ]
+  },
+  "1161984780845954496": "Gestionnaire",
+  "@1161984780845954496": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "64", "column": "92" },
+        "end": { "line": "64", "column": "106" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "77", "column": "91" },
+        "end": { "line": "77", "column": "105" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "78", "column": "92" },
+        "end": { "line": "78", "column": "106" }
+      }
+    ]
+  },
+  "1055686627716339120": "Archive",
+  "@1055686627716339120": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "77", "column": "92" },
+        "end": { "line": "77", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "84", "column": "91" },
+        "end": { "line": "84", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/production-upload/production-upload.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "101" }
+      }
+    ]
+  },
+  "2724936237785756734": "Vignette",
+  "@2724936237785756734": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-create/production-create.component.html",
+        "start": { "line": "84", "column": "92" },
+        "end": { "line": "84", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "92", "column": "91" },
+        "end": { "line": "92", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "89", "column": "92" },
+        "end": { "line": "89", "column": "102" }
+      }
+    ]
+  },
+  "8195208457775959680": "Téléverser",
+  "@8195208457775959680": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "86", "column": "197" },
+        "end": { "line": "86", "column": "209" }
+      },
+      {
+        "file": "src/app/composants/production-upload/production-upload.component.html",
+        "start": { "line": "26", "column": "179" },
+        "end": { "line": "26", "column": "191" }
+      }
+    ]
+  },
+  "58329231923784121": "déjà enregistré :",
+  "@58329231923784121": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-details/production-details.component.html",
+        "start": { "line": "87", "column": "62" },
+        "end": { "line": "87", "column": "81" }
+      }
+    ]
+  },
+  "8045815724051021670": "Liste des productions",
+  "@8045815724051021670": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-list/production-list.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "69" }
+      }
+    ]
+  },
+  "4187322933889458370": "Modification d'une production",
+  "@4187322933889458370": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "107", "column": "72" },
+        "end": { "line": "107", "column": "103" }
+      }
+    ]
+  },
+  "6720734055763034290": "Suppression d'une production",
+  "@6720734055763034290": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-update/production-update.component.html",
+        "start": { "line": "122", "column": "83" },
+        "end": { "line": "122", "column": "113" }
+      }
+    ]
+  },
+  "4171207248166423862": "Changement de l'archive d'une production",
+  "@4171207248166423862": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/production-upload/production-upload.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "89" }
+      }
+    ]
+  },
+  "4707714000062092858": "Fiche d'une variable",
+  "@4707714000062092858": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "69" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "3", "column": "47" },
+        "end": { "line": "3", "column": "69" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "4", "column": "47" },
+        "end": { "line": "4", "column": "69" }
+      }
+    ]
+  },
+  "8186013988289067040": "Code",
+  "@8186013988289067040": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "18", "column": "92" },
+        "end": { "line": "18", "column": "98" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "31", "column": "94" },
+        "end": { "line": "31", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "28", "column": "60" },
+        "end": { "line": "28", "column": "66" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "32", "column": "92" },
+        "end": { "line": "32", "column": "98" }
+      }
+    ]
+  },
+  "3717603792840045364": "Valeur",
+  "@3717603792840045364": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "25", "column": "92" },
+        "end": { "line": "25", "column": "100" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "38", "column": "94" },
+        "end": { "line": "38", "column": "102" }
+      },
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "29", "column": "60" },
+        "end": { "line": "29", "column": "68" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "39", "column": "92" },
+        "end": { "line": "39", "column": "100" }
+      }
+    ]
+  },
+  "8104421162933956065": "Notes",
+  "@8104421162933956065": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-create/variable-create.component.html",
+        "start": { "line": "32", "column": "92" },
+        "end": { "line": "32", "column": "99" }
+      },
+      {
+        "file": "src/app/composants/variable-details/variable-details.component.html",
+        "start": { "line": "45", "column": "94" },
+        "end": { "line": "45", "column": "101" }
+      },
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "46", "column": "92" },
+        "end": { "line": "46", "column": "99" }
+      }
+    ]
+  },
+  "323112119150982238": "Table des variables",
+  "@323112119150982238": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "3", "column": "46" },
+        "end": { "line": "3", "column": "67" }
+      }
+    ]
+  },
+  "8444614605019049321": "Filtrer par type",
+  "@8444614605019049321": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-list/variable-list.component.html",
+        "start": { "line": "12", "column": "116" },
+        "end": { "line": "12", "column": "134" }
+      }
+    ]
+  },
+  "8635670126415586847": "Modification d'une variable",
+  "@8635670126415586847": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "65", "column": "72" },
+        "end": { "line": "65", "column": "101" }
+      }
+    ]
+  },
+  "1288398567325236374": "Suppression d'une variable",
+  "@1288398567325236374": {
+    "x-locations": [
+      {
+        "file": "src/app/composants/variable-update/variable-update.component.html",
+        "start": { "line": "80", "column": "83" },
+        "end": { "line": "80", "column": "111" }
+      }
+    ]
+  },
+  "2068446867150639780": "Payé chèque",
+  "@2068446867150639780": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "5", "column": "40" },
+        "end": { "line": "5", "column": "53" }
+      }
+    ]
+  },
+  "8790345408792320258": "Payé espèces",
+  "@8790345408792320258": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "6", "column": "41" },
+        "end": { "line": "6", "column": "55" }
+      }
+    ]
+  },
+  "7316661139827937280": "Virement bancaire",
+  "@7316661139827937280": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "7", "column": "46" },
+        "end": { "line": "7", "column": "65" }
+      }
+    ]
+  },
+  "5991780187978770703": "Virement Paypal",
+  "@5991780187978770703": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "8", "column": "44" },
+        "end": { "line": "8", "column": "61" }
+      }
+    ]
+  },
+  "5561979832240808969": "Orga",
+  "@5561979832240808969": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "9", "column": "33" },
+        "end": { "line": "9", "column": "39" }
+      }
+    ]
+  },
+  "268369328039605234": "Guest",
+  "@268369328039605234": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "10", "column": "34" },
+        "end": { "line": "10", "column": "41" }
+      }
+    ]
+  },
+  "549266631374246949": "Chèque",
+  "@549266631374246949": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "15", "column": "35" },
+        "end": { "line": "15", "column": "43" }
+      }
+    ]
+  },
+  "6615189560277928691": "Virement",
+  "@6615189560277928691": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "16", "column": "37" },
+        "end": { "line": "16", "column": "47" }
+      }
+    ]
+  },
+  "3515693069597622304": "Paypal",
+  "@3515693069597622304": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "17", "column": "35" },
+        "end": { "line": "17", "column": "43" }
+      }
+    ]
+  },
+  "251571291349102694": "Espèces",
+  "@251571291349102694": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "18", "column": "36" },
+        "end": { "line": "18", "column": "45" }
+      }
+    ]
+  },
+  "6751441754948847748": "Autre",
+  "@6751441754948847748": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/participant.ts",
+        "start": { "line": "19", "column": "34" },
+        "end": { "line": "19", "column": "41" }
+      },
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "10", "column": "34" },
+        "end": { "line": "10", "column": "41" }
+      }
+    ]
+  },
+  "7790959368122127003": "Exécutable",
+  "@7790959368122127003": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "5", "column": "39" },
+        "end": { "line": "5", "column": "51" }
+      }
+    ]
+  },
+  "557807731285509805": "Graphe",
+  "@557807731285509805": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "6", "column": "35" },
+        "end": { "line": "6", "column": "43" }
+      }
+    ]
+  },
+  "2870385527157560263": "Musique",
+  "@2870385527157560263": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "7", "column": "36" },
+        "end": { "line": "7", "column": "45" }
+      }
+    ]
+  },
+  "790986261814390491": "Vidéo",
+  "@790986261814390491": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "8", "column": "34" },
+        "end": { "line": "8", "column": "41" }
+      }
+    ]
+  },
+  "5885452247889934944": "Topic",
+  "@5885452247889934944": {
+    "x-locations": [
+      {
+        "file": "src/app/interfaces/production.ts",
+        "start": { "line": "9", "column": "34" },
+        "end": { "line": "9", "column": "41" }
+      }
+    ]
+  }
+}

+ 71 - 0
package-lock.json

@@ -32,6 +32,7 @@
         "@angular-devkit/build-angular": "^19.1.7",
         "@angular-devkit/build-angular": "^19.1.7",
         "@angular/cli": "^19.1.7",
         "@angular/cli": "^19.1.7",
         "@angular/compiler-cli": "^19.1.0",
         "@angular/compiler-cli": "^19.1.0",
+        "@angular/localize": "^19.1.7",
         "@types/file-saver": "^2.0.7",
         "@types/file-saver": "^2.0.7",
         "@types/jasmine": "~5.1.0",
         "@types/jasmine": "~5.1.0",
         "jasmine-core": "~5.5.0",
         "jasmine-core": "~5.5.0",
@@ -568,6 +569,31 @@
         "rxjs": "^6.5.3 || ^7.4.0"
         "rxjs": "^6.5.3 || ^7.4.0"
       }
       }
     },
     },
+    "node_modules/@angular/localize": {
+      "version": "19.1.7",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-19.1.7.tgz",
+      "integrity": "sha512-+blBPU93l/Oj9WxFuqX14Zg8ei462FIZW1r9QDnH91TJPdg1bOnGD4mMq8rYsNU7pHlo/Vu53fbiYTk/herEVA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "7.26.0",
+        "@types/babel__core": "7.20.5",
+        "fast-glob": "3.3.3",
+        "yargs": "^17.2.1"
+      },
+      "bin": {
+        "localize-extract": "tools/bundles/src/extract/cli.js",
+        "localize-migrate": "tools/bundles/src/migrate/cli.js",
+        "localize-translate": "tools/bundles/src/translate/cli.js"
+      },
+      "engines": {
+        "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler": "19.1.7",
+        "@angular/compiler-cli": "19.1.7"
+      }
+    },
     "node_modules/@angular/platform-browser": {
     "node_modules/@angular/platform-browser": {
       "version": "19.1.7",
       "version": "19.1.7",
       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.1.7.tgz",
       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.1.7.tgz",
@@ -4875,6 +4901,51 @@
         "url": "https://github.com/sponsors/isaacs"
         "url": "https://github.com/sponsors/isaacs"
       }
       }
     },
     },
+    "node_modules/@types/babel__core": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+      "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "node_modules/@types/babel__generator": {
+      "version": "7.6.8",
+      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+      "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+      "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__traverse": {
+      "version": "7.20.7",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+      "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.20.7"
+      }
+    },
     "node_modules/@types/body-parser": {
     "node_modules/@types/body-parser": {
       "version": "1.19.5",
       "version": "1.19.5",
       "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
       "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",

+ 1 - 0
package.json

@@ -34,6 +34,7 @@
     "@angular-devkit/build-angular": "^19.1.7",
     "@angular-devkit/build-angular": "^19.1.7",
     "@angular/cli": "^19.1.7",
     "@angular/cli": "^19.1.7",
     "@angular/compiler-cli": "^19.1.0",
     "@angular/compiler-cli": "^19.1.0",
+    "@angular/localize": "^19.1.7",
     "@types/file-saver": "^2.0.7",
     "@types/file-saver": "^2.0.7",
     "@types/jasmine": "~5.1.0",
     "@types/jasmine": "~5.1.0",
     "jasmine-core": "~5.5.0",
     "jasmine-core": "~5.5.0",

+ 34 - 28
src/app/composants/account-details/account-details.component.html

@@ -1,112 +1,112 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'un participant</div>
+	<div class="card-header"><span i18n>Fiche d'un participant</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToHome()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToHome()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body scrollable">
 	<div class="card-body scrollable">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Nom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Nom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Prénom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Prénom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse" disabled>
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Délai avant déconnexion</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Délai avant déconnexion</span></label>
 			<div class="col-sm-2">
 			<div class="col-sm-2">
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion" disabled>
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code postal</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code postal</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Ville</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Ville</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pays</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pays</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro de téléphone</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro de téléphone</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse email</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse email</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email" disabled>
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Inscrit le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Inscrit le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 			</div>
 			</div>
@@ -116,43 +116,49 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine">Avec machine</label>
+					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine"><small><span i18n>Avec machine</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
+@if (this.journees.jour1Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1">Jour 1</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1"><small>{{ journees.jour1Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour2Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2">Jour 2</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2"><small>{{ journees.jour2Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour3Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3">Jour 3</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3"><small>{{ journees.jour3Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite">Dort sur place</label>
+					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite"><small><span i18n>Dort sur place</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -161,14 +167,14 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled> 
-						<label class="form-check-label" for="useAmigabus">Vient en Amigabus</label>
+						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled>
+						<label class="form-check-label" for="useAmigabus"><small><span i18n>Vient en Amigabus</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div> -->
 			</div> -->
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire" disabled></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire" disabled></textarea>
 			</div>
 			</div>
@@ -178,14 +184,14 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived">Arrivé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived"><small><span i18n>Arrivé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-		<button type="button" (click)="updateProfil()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;Editer</button>
+		<button type="button" (click)="updateProfil()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;<span i18n>Editer</span></button>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 18 - 10
src/app/composants/account-details/account-details.component.ts

@@ -1,29 +1,37 @@
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { Router } from '@angular/router';
 import { Router } from '@angular/router';
+import { FormsModule } from '@angular/forms';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { Participant } from '../../interfaces/participant';
 import { Participant } from '../../interfaces/participant';
-import { AccountService } from '../../services/account.service' 
-import { FormsModule } from '@angular/forms'; 
+import { AccountService } from '../../services/account.service'
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-account-details', imports: [FormsModule, MenuComponent], templateUrl: './account-details.component.html', styleUrl: './account-details.component.css' })
 @Component({ selector: 'app-account-details', imports: [FormsModule, MenuComponent], templateUrl: './account-details.component.html', styleUrl: './account-details.component.css' })
 
 
-export class AccountDetailsComponent implements OnInit, AfterViewInit 
+export class AccountDetailsComponent implements OnInit, AfterViewInit
 {
 {
- 
+
+  journees: Journees = new Journees();
+
   participant: Participant = new Participant();
   participant: Participant = new Participant();
-  
-  constructor(private accountService : AccountService, private router: Router, private menu: MenuComponent) { }
 
 
-  ngOnInit() 
+  constructor(private diversService: DiversService, private accountService : AccountService, private router: Router, private menu: MenuComponent) { }
+
+  ngOnInit()
   {
   {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
+
     this.participant = new Participant();
     this.participant = new Participant();
     this.accountService.getProfil().subscribe( data => { this.participant = data; });
     this.accountService.getProfil().subscribe( data => { this.participant = data; });
   }
   }
-  
+
   ngAfterViewInit() { }
   ngAfterViewInit() { }
- 
+
   updateProfil() { this.router.navigate(['/account-update']); }
   updateProfil() { this.router.navigate(['/account-update']); }
-  
+
   goToHome(){ this.router.navigate(['/'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
   goToHome(){ this.router.navigate(['/'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
 
 
 }
 }

+ 35 - 29
src/app/composants/account-update/account-update.component.html

@@ -2,105 +2,105 @@
 <div id="main">
 <div id="main">
 <form id="formParticipant" #formRef="ngForm" class="needs-validation">
 <form id="formParticipant" #formRef="ngForm" class="needs-validation">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'un participant</div>
+	<div class="card-header"><span i18n>Fiche d'un participant</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToHome()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToHome()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body scrollable">
 	<div class="card-body scrollable">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Nom&nbsp;<sup><span class="text-danger">*</span></sup></label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Nom</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Prénom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Prénom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code postal</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code postal</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Ville</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Ville</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pays</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pays</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro de téléphone</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro de téléphone</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse email</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse email</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Inscrit le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Inscrit le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 			</div>
 			</div>
@@ -110,43 +110,49 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine">Avec machine</label>
+					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine"><small><span i18n>Avec machine</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
+@if (this.journees.jour1Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1">Jour 1</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1"><small>{{ journees.jour1Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour2Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2">Jour 2</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2"><small>{{ journees.jour2Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour3Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3">Jour 3</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3"><small>{{ journees.jour3Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite">Dort sur place</label>
+					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite"><small><span i18n>Dort sur place</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -156,13 +162,13 @@
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
 						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled>
 						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled>
-						<label class="form-check-label" for="useAmigabus">Vient en Amigabus</label>
+						<label class="form-check-label" for="useAmigabus"><small><span i18n>Vient en Amigabus</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div> -->
 			</div> -->
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 			</div>
 			</div>
@@ -172,14 +178,14 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived">Arrivé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived"><small><span i18n>Arrivé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;Modifier</button>
+			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;<span i18n>Modifier</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
@@ -188,12 +194,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title" id="modalModifierTitre">Modification</h5>
+				<h5 class="modal-title" id="modalModifierTitre"><span i18n>Modification</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Actualiser cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Actualiser cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>

+ 20 - 8
src/app/composants/account-update/account-update.component.ts

@@ -1,23 +1,35 @@
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
 import { Router } from '@angular/router';
 import { Router } from '@angular/router';
+import { FormsModule, NgForm } from '@angular/forms';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { Participant } from '../../interfaces/participant';
 import { Participant } from '../../interfaces/participant';
-import { AccountService } from '../../services/account.service' 
-import { FormsModule, NgForm } from '@angular/forms'; 
+import { AccountService } from '../../services/account.service'
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-account-update', imports: [FormsModule, MenuComponent], templateUrl: './account-update.component.html', styleUrl: './account-update.component.css' })
 @Component({ selector: 'app-account-update', imports: [FormsModule, MenuComponent], templateUrl: './account-update.component.html', styleUrl: './account-update.component.css' })
 
 
 export class AccountUpdateComponent implements OnInit, AfterViewInit
 export class AccountUpdateComponent implements OnInit, AfterViewInit
 {
 {
-  
+
   @ViewChild('formRef') participantForm!: NgForm;
   @ViewChild('formRef') participantForm!: NgForm;
- 
+
+  journees: Journees = new Journees();
+
   participant: Participant = new Participant();
   participant: Participant = new Participant();
-  
-  constructor(private accountService : AccountService, private router: Router, private menu: MenuComponent) { }
 
 
-  ngOnInit() { this.accountService.getProfil().subscribe(data => { this.participant = data; }); }
-  
+  constructor(private diversService: DiversService, private accountService : AccountService, private router: Router, private menu: MenuComponent) { }
+
+  ngOnInit()
+  {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
+
+    this.participant = new Participant();
+    this.accountService.getProfil().subscribe(data => { this.participant = data; });
+  }
+
   ngAfterViewInit() { }
   ngAfterViewInit() { }
 
 
   updateConfirmed() { if (this.participantForm.valid) { this.accountService.updateProfil(this.participant).subscribe(() => { this.goToHome(); }); } }
   updateConfirmed() { if (this.participantForm.valid) { this.accountService.updateProfil(this.participant).subscribe(() => { this.goToHome(); }); } }

+ 16 - 16
src/app/composants/categorie-create/categorie-create.component.html

@@ -2,21 +2,21 @@
 <div id="main">
 <div id="main">
 <form  #formRef="ngForm" (ngSubmit)="addCategorie()" class="needs-validation">
 <form  #formRef="ngForm" (ngSubmit)="addCategorie()" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-	<div class="card-header">Fiche d'une catégorie</div>
+	<div class="card-header"><span i18n>Fiche d'une catégorie</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Libellé&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Libellé</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="libelle" name="libelle" [(ngModel)]="categorie.libelle" #libelleRef="ngModel" required [class.is-invalid]="libelleRef.invalid && libelleRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="libelle" name="libelle" [(ngModel)]="categorie.libelle" #libelleRef="ngModel" required [class.is-invalid]="libelleRef.invalid && libelleRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro d'ordre</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro d'ordre</span></label>
 				<div class="col-sm-2">
 				<div class="col-sm-2">
 					<input type="number" min="0" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre">
 					<input type="number" min="0" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre">
 				</div>
 				</div>
@@ -26,8 +26,8 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available"> 
-						<label class="form-check-label" for="available">Disponible</label>
+						<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available">
+						<label class="form-check-label" for="available"><small><span i18n>Disponible</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -36,8 +36,8 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable"> 
-						<label class="form-check-label" for="uploadable">Téléversable</label>
+						<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable">
+						<label class="form-check-label" for="uploadable"><small><span i18n>Téléversable</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -46,8 +46,8 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable"> 
-						<label class="form-check-label" for="pollable">Vote ouvert</label>
+						<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable">
+						<label class="form-check-label" for="pollable"><small><span i18n>Vote ouvert</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -56,8 +56,8 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed"> 
-						<label class="form-check-label" for="computed">Vote calculé</label>
+						<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed">
+						<label class="form-check-label" for="computed"><small><span i18n>Vote calculé</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -66,16 +66,16 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable"> 
-						<label class="form-check-label" for="displayable">Vote publié</label>
+						<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable">
+						<label class="form-check-label" for="displayable"><small><span i18n>Vote publié</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
-</div>
+</div>

+ 17 - 17
src/app/composants/categorie-details/categorie-details.component.html

@@ -1,36 +1,36 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'une catégorie</div>
+	<div class="card-header"><span i18n>Fiche d'une catégorie</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body">
 	<div class="card-body">
 
 
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="categorie.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="categorie.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="categorie.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="categorie.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Libellé</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Libellé</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="libelle" name="libelle" [(ngModel)]="categorie.libelle" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="libelle" name="libelle" [(ngModel)]="categorie.libelle" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro d'ordre</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro d'ordre</span></label>
 			<div class="col-sm-2">
 			<div class="col-sm-2">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre" disabled>
 			</div>
 			</div>
@@ -40,8 +40,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available" disabled> 
-					<label class="form-check-label" for="available">Disponible</label>
+					<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available" disabled>
+					<label class="form-check-label" for="available"><small><span i18n>Disponible</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -50,8 +50,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable" disabled> 
-					<label class="form-check-label" for="uploadable">Téléversable</label>
+					<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable" disabled>
+					<label class="form-check-label" for="uploadable"><small><span i18n>Téléversable</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -60,8 +60,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable" disabled> 
-					<label class="form-check-label" for="pollable">Vote ouvert</label>
+					<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable" disabled>
+					<label class="form-check-label" for="pollable"><small><span i18n>Vote ouvert</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -70,8 +70,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed" disabled> 
-					<label class="form-check-label" for="computed">Vote calculé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed" disabled>
+					<label class="form-check-label" for="computed"><small><span i18n>Vote calculé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -80,15 +80,15 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable" disabled> 
-					<label class="form-check-label" for="displayable">Vote publié</label>
+					<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable" disabled>
+					<label class="form-check-label" for="displayable"><small><span i18n>Vote publié</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-		<button type="button" (click)="updateCategorie(categorie.numeroCategorie)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;Editer</button>
+		<button type="button" (click)="updateCategorie(categorie.numeroCategorie)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;<span i18n>Editer</span></button>
 	</div>
 	</div>
 </div>
 </div>
 </div>
 </div>

+ 10 - 10
src/app/composants/categorie-list/categorie-list.component.html

@@ -1,12 +1,12 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow">
 <div class="card shadow">
-	<div class="card-header">Table des catégories</div>
+	<div class="card-header"><span i18n>Table des catégories</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
 		<div class="row">
 		<div class="row">
 			<div class="form-group col-sm-4 label-nobr">
 			<div class="form-group col-sm-4 label-nobr">
-				<button type="button" (click)="goToRefreshListCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;Actualiser</button>
-				<button type="button" (click)="goToNewCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+				<button type="button" (click)="goToRefreshListCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+				<button type="button" (click)="goToNewCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -14,12 +14,12 @@
 		<table class="table table-sm">
 		<table class="table table-sm">
 			<thead class="thead-dark">
 			<thead class="thead-dark">
 				<tr>
 				<tr>
-					<th class="fs-6 label-nobr"><small>Libellé</small></th>
-					<th class="fs-6 label-nobr"><small>Disponible</small></th>
-					<th class="fs-6 label-nobr"><small>Téléversable</small></th>
-					<th class="fs-6 label-nobr"><small>Vote ouvert</small></th>
-					<th class="fs-6 label-nobr"><small>Vote terminé</small></th>
-					<th class="fs-6 label-nobr"><small>Vote publié</small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Libellé</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Disponible</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Téléversable</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Vote ouvert</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Vote terminé</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Vote publié</span></small></th>
 				</tr>
 				</tr>
 			</thead>
 			</thead>
 			<tbody>
 			<tbody>
@@ -37,4 +37,4 @@
 		</table>
 		</table>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 26 - 26
src/app/composants/categorie-update/categorie-update.component.html

@@ -2,35 +2,35 @@
 <div id="main">
 <div id="main">
 <form id="formVariable" #formRef="ngForm" class="needs-validation">
 <form id="formVariable" #formRef="ngForm" class="needs-validation">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'une catégorie</div>
+	<div class="card-header"><span i18n>Fiche d'une catégorie</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToListCategorie()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body">
 	<div class="card-body">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" [(ngModel)]="categorie.dateCreation" name="dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" [(ngModel)]="categorie.dateCreation" name="dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" [(ngModel)]="categorie.dateModification" name="dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" [(ngModel)]="categorie.dateModification" name="dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
   	<div class="form-group row">
   	<div class="form-group row">
- 	  	<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Libellé&nbsp;<sup><span class="text-danger">*</span></sup></label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Libellé</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="libelle" [(ngModel)]="categorie.libelle" name="libelle" #libelleRef="ngModel" required [class.is-invalid]="libelleRef.invalid && libelleRef.touched">
 				<input type="text" class="form-control form-control-sm field-separate" id="libelle" [(ngModel)]="categorie.libelle" name="libelle" #libelleRef="ngModel" required [class.is-invalid]="libelleRef.invalid && libelleRef.touched">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro d'ordre</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro d'ordre</span></label>
 			<div class="col-sm-2">
 			<div class="col-sm-2">
 				<input type="number" min="0" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre">
 				<input type="number" min="0" class="form-control form-control-sm field-separate" id="numeroOrdre" name="numeroOrdre" [(ngModel)]="categorie.numeroOrdre">
 			</div>
 			</div>
@@ -40,8 +40,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available"> 
-					<label class="form-check-label" for="available">Disponible</label>
+					<input class="form-check-input field-separate" type="checkbox" id="available" name="available" [(ngModel)]="categorie.available">
+					<label class="form-check-label" for="available"><small><span i18n>Disponible</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -50,8 +50,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable"> 
-					<label class="form-check-label" for="uploadable">Téléversable</label>
+					<input class="form-check-input field-separate" type="checkbox" id="uploadable" name="uploadable" [(ngModel)]="categorie.uploadable">
+					<label class="form-check-label" for="uploadable"><small><span i18n>Téléversable</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -60,8 +60,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable"> 
-					<label class="form-check-label" for="pollable">Vote ouvert</label>
+					<input class="form-check-input field-separate" type="checkbox" id="pollable" name="pollable" [(ngModel)]="categorie.pollable">
+					<label class="form-check-label" for="pollable"><small><span i18n>Vote ouvert</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -70,8 +70,8 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed"> 
-					<label class="form-check-label" for="computed">Vote calculé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="computed" name="computed" [(ngModel)]="categorie.computed">
+					<label class="form-check-label" for="computed"><small><span i18n>Vote calculé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -80,16 +80,16 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable"> 
-					<label class="form-check-label" for="displayable">Vote publié</label>
+					<input class="form-check-input field-separate" type="checkbox" id="displayable" name="displayable" [(ngModel)]="categorie.displayable">
+					<label class="form-check-label" for="displayable"><small><span i18n>Vote publié</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;Modifier</button>
-			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;Effacer</button>
+			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;<span i18n>Modifier</span></button>
+			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;<span i18n>Effacer</span></button>
 	</div>
 	</div>
 </div>
 </div>
 </form>
 </form>
@@ -98,12 +98,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title" id="modalModifierTitre">Modification</h5>
+				<h5 class="modal-title" id="modalModifierTitre"><span i18n>Modification d'une catégorie</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Actualiser cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Actualiser cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -113,12 +113,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title text-danger" id="modalEffacerTitre">Suppression</h5>
+				<h5 class="modal-title text-danger" id="modalEffacerTitre"><span i18n>Suppression d'une catégorie</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Effacer cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Effacer cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>

+ 7 - 7
src/app/composants/home/home.component.html

@@ -2,16 +2,16 @@
 <div id="main">
 <div id="main">
 <div class="center" style="min-width: 30rem;">
 <div class="center" style="min-width: 30rem;">
 
 
-<p class="fs-2 text-center">Bienvenue @if (this.logged) { {{ this.pseudonyme }} }</p>
+<p class="fs-2 text-center"><span i18n>Bienvenue</span> @if (this.logged) { {{ this.pseudonyme }} }</p>
 
 
-@if (this.message) { 
-  @if (this.message.erreur) { <div class="alert alert-danger" role="alert"> {{ this.message.erreur }}</div> } 
-  @if (this.message.alerte) { <div class="alert alert-warning" role="alert"> {{ this.message.alerte }}</div> } 
-  @if (this.message.information) { <div class="alert alert-info" role="alert"> {{ this.message.information }}</div> } 
-  @if (this.message.autre) { <div class="alert alert-light" role="alert"> {{ this.message.autre }}</div> } 
+@if (this.message) {
+  @if (this.message.erreur) { <div class="alert alert-danger" role="alert"> {{ this.message.erreur }}</div> }
+  @if (this.message.alerte) { <div class="alert alert-warning" role="alert"> {{ this.message.alerte }}</div> }
+  @if (this.message.information) { <div class="alert alert-info" role="alert"> {{ this.message.information }}</div> }
+  @if (this.message.autre) { <div class="alert alert-light" role="alert"> {{ this.message.autre }}</div> }
 }
 }
 
 
-@if (!this.logged) { <div class="alert alert-info" role="alert">Merci de vous <a href="/login">connecter</a> pour accéder à plus de fonctionnalités.</div> }
+@if (!this.logged) { <div class="alert alert-info" role="alert"><span i18n>Merci de vous <a href="/login">connecter</a> pour accéder à plus de fonctionnalités.</span></div> }
 
 
 </div>
 </div>
 </div>
 </div>

+ 5 - 5
src/app/composants/login/login.component.html

@@ -2,7 +2,7 @@
 <div id="main">
 <div id="main">
 <form #formRef="ngForm" (ngSubmit)="connexion()" class="needs-validation">
 <form #formRef="ngForm" (ngSubmit)="connexion()" class="needs-validation">
 	<div class="card shadow center" style="min-width: 30rem;">
 	<div class="card shadow center" style="min-width: 30rem;">
-		<div class="card-header">S'identifier</div>
+		<div class="card-header"><span i18n>S'identifier</span></div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			@if (this.identifiants.erreur !== "") {
 			@if (this.identifiants.erreur !== "") {
@@ -14,23 +14,23 @@
 			}
 			}
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" #userid id="userid" name="userid" [(ngModel)]="identifiants.username" #userRef="ngModel" required [class.is-invalid]="userRef.invalid && userRef.touched" autofocus>
 					<input type="text" class="form-control form-control-sm field-separate" #userid id="userid" name="userid" [(ngModel)]="identifiants.username" #userRef="ngModel" required [class.is-invalid]="userRef.invalid && userRef.touched" autofocus>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="password" class="form-control form-control-sm field-separate" id="userpwd" name="userpwd" [(ngModel)]="identifiants.password" #passRef="ngModel" required [class.is-invalid]="passRef.invalid && passRef.touched">
 					<input type="password" class="form-control form-control-sm field-separate" id="userpwd" name="userpwd" [(ngModel)]="identifiants.password" #passRef="ngModel" required [class.is-invalid]="passRef.invalid && passRef.touched">
-					<div class="form-text field-separate">Merci de contacter l'administrateur si vous l'avez oublié ou ne le connaissez pas.</div>
+					<div class="form-text field-separate"><span i18n>Merci de contacter l'administrateur si vous l'avez oublié ou ne le connaissez pas.</span></div>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 		</div>
 		</div>
 		<div class="card-footer" #menu_login>
 		<div class="card-footer" #menu_login>
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-right-to-bracket"></i>&nbsp;Login</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-right-to-bracket"></i>&nbsp;<span i18n>Login</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>

+ 39 - 39
src/app/composants/menu/menu.component.html

@@ -2,10 +2,10 @@
 
 
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
   <ul class="nav nav-pills nav-flush flex-column text-center">
   <ul class="nav nav-pills nav-flush flex-column text-center">
-	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
-		<li><a routerLink="/login" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Login" placement="right" container="body"><i class="fa-solid fa-right-to-bracket"></i></a></li>
-		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
-		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
+	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
+		<li><a routerLink="/login" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Login" placement="right" container="body"><i class="fa-solid fa-right-to-bracket"></i></a></li>
+		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
+		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
 	</ul>
 	</ul>
 </div>
 </div>
 
 
@@ -13,18 +13,18 @@
 
 
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
   <ul class="nav nav-pills nav-flush flex-column text-center">
   <ul class="nav nav-pills nav-flush flex-column text-center">
-	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
-		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
-		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
-		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
-		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
+	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
+		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
+		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
+		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
+		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
 
 
-		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
+		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
 
-		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
 
 
-		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 
 
 	</ul>
 	</ul>
 </div>
 </div>
@@ -33,19 +33,19 @@
 
 
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
   <ul class="nav nav-pills nav-flush flex-column text-center">
   <ul class="nav nav-pills nav-flush flex-column text-center">
-	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
-		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
-		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
-		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
-		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
+	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
+		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
+		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
+		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
+		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
 
 
-		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
+		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
 
-		<li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
+		<li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
 
 
-		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
-		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 	</ul>
 	</ul>
 </div>
 </div>
 
 
@@ -53,23 +53,23 @@
 
 
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
 <div class="d-flex flex-column flex-shrink-0 bg-body-tertiary" id="sidenav">
   <ul class="nav nav-pills nav-flush flex-column text-center">
   <ul class="nav nav-pills nav-flush flex-column text-center">
-	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
-		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
-		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
-		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
-		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
+	 	<li><a routerLink="/home" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Accueil" placement="right" container="body"><i class="fa-solid fa-home"></i></a></li>
+		<li><a routerLink="/account-details" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Compte" placement="right" container="body"><i class="fa-solid fa-user"></i></a></li>
+		<li><a routerLinkActive="active" data-bs-toggle="modal" data-bs-target="#modalDeconnecter" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Logout" placement="right" container="body"><i class="fa-solid fa-right-from-bracket"></i></a></li>
+		<li><a routerLink="/event-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Planning" placement="right" container="body"><i class="fa-solid fa-clock"></i></a></li>
+		<li><a routerLink="/webcam-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Caméras" placement="right" container="body"><i class="fa-solid fa-eye"></i></a></li>
 
 
-		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
+		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
 
-		<li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
+		<li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
 
 
-		<li><a routerLink="/categorie-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Catégories" placement="right" container="body"><i class="fa-solid fa-layer-group"></i></a></li>
-		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
-		<li><a routerLink="/show-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Présentations" placement="right" container="body"><i class="fa-solid fa-display"></i></a></li>
-		<li><a routerLink="/poll-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+		<li><a routerLink="/categorie-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Catégories" placement="right" container="body"><i class="fa-solid fa-layer-group"></i></a></li>
+		<li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/show-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Présentations" placement="right" container="body"><i class="fa-solid fa-display"></i></a></li>
+		<li><a routerLink="/poll-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 
 
-		<li><a routerLink="/variable-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" tooltip="Paramétrages" placement="right" container="body"><i class="fa-solid fa-sliders-h"></i></a></li>
+		<li><a routerLink="/variable-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Paramétrages" placement="right" container="body"><i class="fa-solid fa-sliders-h"></i></a></li>
 	</ul>
 	</ul>
 </div>
 </div>
 
 
@@ -79,10 +79,10 @@
 <div class="modal fade" id="modalDeconnecter" tabindex="-1" aria-labelledby="modalDeconnecterTitre" aria-hidden="false">
 <div class="modal fade" id="modalDeconnecter" tabindex="-1" aria-labelledby="modalDeconnecterTitre" aria-hidden="false">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
-			<div class="modal-body">Voulez-vous vous déconnecter ?</div>
+      <div class="modal-body"><span i18n>Voulez-vous vous déconnecter ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="deconnexion()" data-bs-dismiss="modal">Confirmer</button>
+        <button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+        <button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="deconnexion()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>

+ 36 - 34
src/app/composants/participant-create/participant-create.component.html

@@ -2,98 +2,98 @@
 <div id="main">
 <div id="main">
 <form #formRef="ngForm" (ngSubmit)="addParticipant()" class="needs-validation">
 <form #formRef="ngForm" (ngSubmit)="addParticipant()" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Fiche d'un participant</div>
+		<div class="card-header"><span i18n>Fiche d'un participant</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body scrollable">
 		<div class="card-body scrollable">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Nom&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Nom</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Prénom</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Prénom</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 					<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" #pseudonymeRef="ngModel" required [class.is-invalid]="pseudonymeRef.invalid && pseudonymeRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" #pseudonymeRef="ngModel" required [class.is-invalid]="pseudonymeRef.invalid && pseudonymeRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 					<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Délai avant déconnexion</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Délai avant déconnexion</span></label>
 				<div class="col-sm-2">
 				<div class="col-sm-2">
 					<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion">
 					<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 					<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code postal</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code postal</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 					<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Ville</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Ville</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 					<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pays</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pays</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 					<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro de téléphone</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro de téléphone</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 					<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse email</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse email</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 					<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Status</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Status</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-group field-separate">
 					<div class="form-group field-separate">
 						<select class="form-select form-select-sm" id="status" name="status" [(ngModel)]="participant.statut" required #statusRef="ngModel" [class.is-invalid]="statusRef.invalid && statusRef.touched">
 						<select class="form-select form-select-sm" id="status" name="status" [(ngModel)]="participant.statut" required #statusRef="ngModel" [class.is-invalid]="statusRef.invalid && statusRef.touched">
@@ -107,48 +107,50 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine"> 
-						<label class="form-check-label" for="withMachine">Avec machine</label>
+						<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine">
+						<label class="form-check-label" for="withMachine"><small><span i18n>Avec machine</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
+@if (this.journees.jour1Court) {
 			<div class="form-group row">
 			<div class="form-group row">
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1"> 
-						<label class="form-check-label" for="hereDay1">Jour 1</label>
+						<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1"><label class="form-check-label" for="hereDay1"><small>{{ journees.jour1Long }}</small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
+}
 
 
+@if (this.journees.jour2Court) {
 			<div class="form-group row">
 			<div class="form-group row">
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2"> 
-						<label class="form-check-label" for="hereDay2">Jour 2</label>
+						<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2"><label class="form-check-label" for="hereDay2"><small>{{ journees.jour2Long }}</small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
+}
 
 
+@if (this.journees.jour3Court) {
 			<div class="form-group row">
 			<div class="form-group row">
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3"> 
-						<label class="form-check-label" for="hereDay3">Jour 3</label>
+						<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3"><label class="form-check-label" for="hereDay3"><small>{{ journees.jour3Long }}</small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
+}
 
 
 			<div class="form-group row">
 			<div class="form-group row">
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite"> 
-						<label class="form-check-label" for="sleepingOnSite">Dort sur place</label>
+						<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite"><label class="form-check-label" for="sleepingOnSite"><small><span i18n>Dort sur place</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
@@ -157,21 +159,21 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus"> 
-						<label class="form-check-label" for="useAmigabus">Vient en Amigabus</label>
+						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus">
+						<label class="form-check-label" for="useAmigabus"><small><span i18n>Vient en Amigabus</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div> -->
 			</div> -->
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mode de paiement</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mode de paiement</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-group field-separate">
 					<div class="form-group field-separate">
 						<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement" required #modePaiementRef="ngModel">
 						<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement" required #modePaiementRef="ngModel">
@@ -182,7 +184,7 @@
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Somme reçue</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Somme reçue</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue">
 					<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue">
 				</div>
 				</div>
@@ -192,16 +194,16 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" checked> 
-						<label class="form-check-label" for="arrived">Arrivé</label>
+						<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" checked>
+						<label class="form-check-label" for="arrived"><small><span i18n>Arrivé</span></small></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
-</div>
+</div>

+ 18 - 9
src/app/composants/participant-create/participant-create.component.ts

@@ -1,26 +1,35 @@
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { FormsModule, NgForm } from '@angular/forms';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { ParticipantService } from '../../services/participant.service';
 import { ParticipantService } from '../../services/participant.service';
-import { Router } from '@angular/router';
-import { FormsModule, NgForm } from '@angular/forms'; 
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-participant-create', imports: [FormsModule, MenuComponent], templateUrl: './participant-create.component.html', styleUrl: './participant-create.component.css' })
 @Component({ selector: 'app-participant-create', imports: [FormsModule, MenuComponent], templateUrl: './participant-create.component.html', styleUrl: './participant-create.component.css' })
 
 
 export class ParticipantCreateComponent implements OnInit, AfterViewInit
 export class ParticipantCreateComponent implements OnInit, AfterViewInit
 {
 {
-  
+
+  journees: Journees = new Journees();
+
   PS: ParticipantEnum[] = ParticipantStatutList;
   PS: ParticipantEnum[] = ParticipantStatutList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
 
 
   @ViewChild('formRef') participantForm!: NgForm;
   @ViewChild('formRef') participantForm!: NgForm;
-  
+
   participant: Participant = new Participant();
   participant: Participant = new Participant();
-  
-  constructor(private participantService: ParticipantService, private router: Router, private menu: MenuComponent) { }
 
 
-  ngOnInit(): void { }
-  
+  constructor(private diversService: DiversService, private participantService: ParticipantService, private router: Router, private menu: MenuComponent) { }
+
+  ngOnInit()
+  {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
+  }
+
   ngAfterViewInit() { }
   ngAfterViewInit() { }
 
 
   private saveParticipant() { this.participantService.createParticipant(this.participant).subscribe({ next: () => { this.goToListParticipant(); }, error: (err: any) => { console.log(err); }, complete: () => { } }); }
   private saveParticipant() { this.participantService.createParticipant(this.participant).subscribe({ next: () => { this.goToListParticipant(); }, error: (err: any) => { console.log(err); }, complete: () => { } }); }
@@ -28,5 +37,5 @@ export class ParticipantCreateComponent implements OnInit, AfterViewInit
   addParticipant() { if (this.participantForm.valid) { this.saveParticipant(); } }
   addParticipant() { if (this.participantForm.valid) { this.saveParticipant(); } }
 
 
   goToListParticipant() {this.router.navigate(['/participant-list'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
   goToListParticipant() {this.router.navigate(['/participant-list'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
-  
+
 }
 }

+ 37 - 31
src/app/composants/participant-details/participant-details.component.html

@@ -1,112 +1,112 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'un participant</div>
+	<div class="card-header"><span i18n>Fiche d'un participant</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body scrollable">
 	<div class="card-body scrollable">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Nom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Nom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Prénom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Prénom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse" disabled>
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Délai avant déconnexion</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Délai avant déconnexion</span></label>
 			<div class="col-sm-2">
 			<div class="col-sm-2">
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion" disabled>
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code postal</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code postal</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Ville</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Ville</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pays</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pays</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro de téléphone</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro de téléphone</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse email</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse email</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email" disabled>
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Status</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Status</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-group field-separate">
 				<div class="form-group field-separate">
 					<select class="form-select form-select-sm" id="status" name="status" [(ngModel)]="participant.statut" disabled>
 					<select class="form-select form-select-sm" id="status" name="status" [(ngModel)]="participant.statut" disabled>
@@ -117,7 +117,7 @@
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Inscrit le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Inscrit le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 			</div>
 			</div>
@@ -127,43 +127,49 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine">Avec machine</label>
+					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine" disabled> <label class="form-check-label" for="withMachine"><small><span i18n>Avec machine</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
+@if (this.journees.jour1Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1">Jour 1</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1" disabled> <label class="form-check-label" for="hereDay1"><small>{{ journees.jour1Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour2Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2">Jour 2</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2" disabled> <label class="form-check-label" for="hereDay2"><small>{{ journees.jour2Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour3Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3">Jour 3</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3" disabled> <label class="form-check-label" for="hereDay3"><small>{{ journees.jour3Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite">Dort sur place</label>
+					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite" disabled> <label class="form-check-label" for="sleepingOnSite"><small><span i18n>Dort sur place</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -172,21 +178,21 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled> 
-						<label class="form-check-label" for="useAmigabus">Vient en Amigabus</label>
+						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus" disabled>
+						<label class="form-check-label" for="useAmigabus"><span i18n>Vient en Amigabus</span></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div> -->
 			</div> -->
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire" disabled></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire" disabled></textarea>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mode de paiement</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mode de paiement</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-group field-separate">
 				<div class="form-group field-separate">
 					<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement" disabled>
 					<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement" disabled>
@@ -197,7 +203,7 @@
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Somme reçue</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Somme reçue</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue" disabled>
 			</div>
 			</div>
@@ -207,14 +213,14 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived">Arrivé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived" disabled> <label class="form-check-label" for="arrived"><small><span i18n>Arrivé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-		<button type="button" (click)="updateParticipant(participant.numeroParticipant)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;Editer</button>
+		<button type="button" (click)="updateParticipant(participant.numeroParticipant)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;<span i18n>Editer</span></button>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 18 - 11
src/app/composants/participant-details/participant-details.component.ts

@@ -1,35 +1,42 @@
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
 import { ActivatedRoute, Router } from '@angular/router';
+import { FormsModule } from '@angular/forms';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { ParticipantService } from '../../services/participant.service';
 import { ParticipantService } from '../../services/participant.service';
-import { FormsModule } from '@angular/forms'; 
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-participant-details', imports: [FormsModule, MenuComponent], templateUrl: './participant-details.component.html', styleUrl: './participant-details.component.css' })
 @Component({ selector: 'app-participant-details', imports: [FormsModule, MenuComponent], templateUrl: './participant-details.component.html', styleUrl: './participant-details.component.css' })
 
 
-export class ParticipantDetailsComponent implements OnInit, AfterViewInit 
+export class ParticipantDetailsComponent implements OnInit, AfterViewInit
 {
 {
-  
+
+  journees: Journees = new Journees();
+
   PS: ParticipantEnum[] = ParticipantStatutList;
   PS: ParticipantEnum[] = ParticipantStatutList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
- 
-  numeroParticipant: number = 0;
 
 
+  numeroParticipant: number = 0;
   participant: Participant = new Participant();
   participant: Participant = new Participant();
-  
-  constructor(private participantService: ParticipantService, private route: ActivatedRoute, private router: Router, private menu: MenuComponent) { }
 
 
-  ngOnInit(): void 
+  constructor(private diversService: DiversService, private participantService: ParticipantService, private route: ActivatedRoute, private router: Router, private menu: MenuComponent) { }
+
+  ngOnInit()
   {
   {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
+
     this.numeroParticipant = this.route.snapshot.params['numeroParticipant'];
     this.numeroParticipant = this.route.snapshot.params['numeroParticipant'];
     this.participant = new Participant();
     this.participant = new Participant();
     this.participantService.getByIdParticipant(this.numeroParticipant).subscribe( data => { this.participant = data; });
     this.participantService.getByIdParticipant(this.numeroParticipant).subscribe( data => { this.participant = data; });
   }
   }
-  
+
   ngAfterViewInit() { }
   ngAfterViewInit() { }
- 
+
   updateParticipant(id: number) { this.router.navigate(['/participant-update', id]); }
   updateParticipant(id: number) { this.router.navigate(['/participant-update', id]); }
-  
+
   goToListParticipant(){ this.router.navigate(['/participant-list'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
   goToListParticipant(){ this.router.navigate(['/participant-list'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
 
 
 }
 }

+ 20 - 20
src/app/composants/participant-list/participant-list.component.html

@@ -1,49 +1,49 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow">
 <div class="card shadow">
-	<div class="card-header">Table des participants</div>
+	<div class="card-header"><span i18n>Liste des participants</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
 		<div class="row justify-content-between">
 		<div class="row justify-content-between">
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
-				<button type="button" (click)="goToRefreshListParticipant()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;Actualiser</button>
-				<button type="button" (click)="goToNewParticipant()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+				<button type="button" (click)="goToRefreshListParticipant()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+				<button type="button" (click)="goToNewParticipant()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 			</div>
 			</div>
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
 				<div class="input-group input-group-sn">
 				<div class="input-group input-group-sn">
-					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled>Tri</button>
+					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Tri</span></button>
  				  <select class="form-select form-select-sm field-separate" id="select_tri" [(ngModel)]="listeTri" (change)="trier($event)" placement="bottom">
  				  <select class="form-select form-select-sm field-separate" id="select_tri" [(ngModel)]="listeTri" (change)="trier($event)" placement="bottom">
-						<option value="0">par nom</option>
-					  <option value="1">inscription</option>
+						<option value="0"><span i18n>par nom, prénom, pseudo</span></option>
+						<option value="1"><span i18n>par ordre d'inscription</span></option>
 				  </select>
 				  </select>
 			  </div>
 			  </div>
 			</div>
 			</div>
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
 				<div class="input-group input-group-sn">
 				<div class="input-group input-group-sn">
-					<button type="button" (click)="filtrageParNom()" class="btn bg-gradient btn-primary btn-sm field-separate"><i class="fa-solid fa-filter"></i>&nbsp;Filtrer</button>
-					<input type="text" (keydown.enter)="filtrageParNom()" class="form-control form-control-sm field-separate" id="input_nom" [(ngModel)]="nomFiltre" tooltip="Filtrer par nom, prenom, pseudonyme ou adresse email" placement="bottom">
+					<button type="button" (click)="filtrageParNom()" class="btn bg-gradient btn-primary btn-sm field-separate"><i class="fa-solid fa-filter"></i>&nbsp;<span i18n>Filtrer</span></button>
+					<input type="text" (keydown.enter)="filtrageParNom()" class="form-control form-control-sm field-separate" id="input_nom" [(ngModel)]="nomFiltre" i18n-tooltip tooltip="Filtrer par nom, prenom, pseudonyme ou adresse email" placement="bottom">
 			  </div>
 			  </div>
 			</div>
 			</div>
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
 				<div class="input-group input-group-sn">
 				<div class="input-group input-group-sn">
-					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled>Réglement</button>
+					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Réglement</span></button>
 				  <select class="form-select form-select-sm field-separate" id="select_statut" [(ngModel)]="statutFiltre" (change)="filtrageParStatut($event)">
 				  <select class="form-select form-select-sm field-separate" id="select_statut" [(ngModel)]="statutFiltre" (change)="filtrageParStatut($event)">
 						<option value="0"></option>
 						<option value="0"></option>
-						<option value="1">En attente</option>
+						<option value="1"><span i18n>En attente</span></option>
 				  </select>
 				  </select>
 			  </div>
 			  </div>
 			</div>
 			</div>
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
 				<div class="input-group input-group-sn">
 				<div class="input-group input-group-sn">
-					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled>Arrivé(s)</button>
+					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Arrivé(s)</span></button>
 				  <select class="form-select form-select-sm field-separate" id="select_arrive" [(ngModel)]="arriveFiltre" (change)="filtrageParArrive($event)">
 				  <select class="form-select form-select-sm field-separate" id="select_arrive" [(ngModel)]="arriveFiltre" (change)="filtrageParArrive($event)">
 					  <option value="0"></option>
 					  <option value="0"></option>
-					  <option value="1">Non</option>
-						<option value="2">Oui</option>
+						<option value="1"><span i18n>Non</span></option>
+						<option value="2"><span i18n>Oui</span></option>
 				  </select>
 				  </select>
 			  </div>
 			  </div>
 			</div>
 			</div>
 			<div class="form-group col-sm-2 label-nobr">
 			<div class="form-group col-sm-2 label-nobr">
-				<button type="button" (click)="filtrageReset()" class="btn bg-gradient btn-secondary btn-sm field-separate"><i class="fa-solid fa-filter-circle-xmark"></i>&nbsp;Retirer les filtres</button>
+				<button type="button" (click)="filtrageReset()" class="btn bg-gradient btn-secondary btn-sm field-separate"><i class="fa-solid fa-filter-circle-xmark"></i>&nbsp;<span i18n>Retirer les filtres</span></button>
 			</div>
 			</div>
    	</div>
    	</div>
 	</div>
 	</div>
@@ -51,12 +51,12 @@
 		<table class="table table-sm">
 		<table class="table table-sm">
 			<thead class="thead-dark">
 			<thead class="thead-dark">
 				<tr>
 				<tr>
-					<th class="fs-6 label-nobr"><small>Nom</small></th>
-					<th class="fs-6 label-nobr"><small>Pseudonyme</small></th>
-					<th class="fs-6 label-nobr"><small>Status</small></th>
-					<th class="fs-6 label-nobr"><small>Arrivé</small></th>
-					<th class="fs-6 label-nobr"><small>Journées</small></th>
-					<th class="fs-6 label-nobr"><small>Adresse email</small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Nom</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Pseudonyme</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Status</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Arrivé</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Journées</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Adresse email</span></small></th>
 				</tr>
 				</tr>
 			</thead>
 			</thead>
 			<tbody>
 			<tbody>

+ 15 - 4
src/app/composants/participant-list/participant-list.component.ts

@@ -1,16 +1,21 @@
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { Component, OnInit, AfterViewInit } from '@angular/core';
 import { Router } from '@angular/router';
 import { Router } from '@angular/router';
+import { FormsModule, NgForm } from '@angular/forms';
+import { TooltipModule } from 'ngx-bootstrap/tooltip';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { ParticipantList, ParticipantEnum, ParticipantStatutList } from '../../interfaces/participant';
 import { ParticipantList, ParticipantEnum, ParticipantStatutList } from '../../interfaces/participant';
 import { ParticipantService } from '../../services/participant.service';
 import { ParticipantService } from '../../services/participant.service';
-import { FormsModule, NgForm } from '@angular/forms';
-import { TooltipModule } from 'ngx-bootstrap/tooltip';
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-participant-list', imports: [TooltipModule, FormsModule, MenuComponent], templateUrl: './participant-list.component.html', styleUrl: './participant-list.component.css' })
 @Component({ selector: 'app-participant-list', imports: [TooltipModule, FormsModule, MenuComponent], templateUrl: './participant-list.component.html', styleUrl: './participant-list.component.css' })
 
 
 export class ParticipantListComponent implements OnInit, AfterViewInit
 export class ParticipantListComponent implements OnInit, AfterViewInit
 {
 {
 
 
+  journees: Journees = new Journees();
+
   listeTri: number = 0;
   listeTri: number = 0;
   nomFiltre: string = "";
   nomFiltre: string = "";
   statutFiltre: number = 0;
   statutFiltre: number = 0;
@@ -20,9 +25,15 @@ export class ParticipantListComponent implements OnInit, AfterViewInit
 
 
   participants: ParticipantList[] = [];
   participants: ParticipantList[] = [];
 
 
-  constructor(private participantService: ParticipantService, private router: Router) { }
+  constructor(private diversService: DiversService, private participantService: ParticipantService, private router: Router) { }
+
+  ngOnInit()
+  {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
 
 
-  ngOnInit(): void { this.retreiveDatas(); }
+    this.retreiveDatas();
+  }
 
 
   ngAfterViewInit() { }
   ngAfterViewInit() { }
 
 

+ 46 - 40
src/app/composants/participant-update/participant-update.component.html

@@ -2,112 +2,112 @@
 <div id="main">
 <div id="main">
 <form id="formParticipant" #formRef="ngForm" class="needs-validation">
 <form id="formParticipant" #formRef="ngForm" class="needs-validation">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'un participant</div>
+	<div class="card-header"><span i18n>Fiche d'un participant</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+		<button (click)="goToListParticipant()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body scrollable">
 	<div class="card-body scrollable">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="participant.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="participant.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Nom&nbsp;<sup><span class="text-danger">*</span></sup></label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Nom</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 				<input type="text" class="form-control form-control-sm field-separate" id="nom" name="nom" [(ngModel)]="participant.nom" #nomRef="ngModel" required [class.is-invalid]="nomRef.invalid && nomRef.touched">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Prénom</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Prénom</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 				<input type="text" class="form-control form-control-sm field-separate" id="prenom" name="prenom" [(ngModel)]="participant.prenom">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pseudonyme&nbsp;<sup><span class="text-danger">*</span></sup></label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pseudonyme</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" #pseudonymeRef="ngModel" required [class.is-invalid]="pseudonymeRef.invalid && pseudonymeRef.touched">
 				<input type="text" class="form-control form-control-sm field-separate" id="pseudonyme" name="pseudonyme" [(ngModel)]="participant.pseudonyme" #pseudonymeRef="ngModel" required [class.is-invalid]="pseudonymeRef.invalid && pseudonymeRef.touched">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupe" name="groupe" [(ngModel)]="participant.groupe">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mot de passe</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mot de passe</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 				<input type="password" class="form-control form-control-sm field-separate" id="motDePasse" name="motDePasse" [(ngModel)]="participant.motDePasse">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Délai avant déconnexion</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Délai avant déconnexion</span></label>
 			<div class="col-sm-2">
 			<div class="col-sm-2">
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion">
 				<input type="number" min="5" max="60" class="form-control form-control-sm field-separate" id="delaiDeconnexion" name="delaiDeconnexion" [(ngModel)]="participant.delaiDeconnexion">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 				<input type="text" class="form-control form-control-sm field-separate" id="adresse" name="adresse" [(ngModel)]="participant.adresse">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code postal</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code postal</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 				<input type="text" class="form-control form-control-sm field-separate" id="codePostal" name="codePostal" [(ngModel)]="participant.codePostal">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Ville</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Ville</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 				<input type="text" class="form-control form-control-sm field-separate" id="ville" name="ville" [(ngModel)]="participant.ville">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Pays</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Pays</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 				<input type="text" class="form-control form-control-sm field-separate" id="pays" name="pays" [(ngModel)]="participant.pays">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Numéro de téléphone</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Numéro de téléphone</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 				<input type="text" class="form-control form-control-sm field-separate" id="numeroTelephone" name="numeroTelephone" [(ngModel)]="participant.numeroTelephone">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Adresse email</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Adresse email</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 				<input type="email" class="form-control form-control-sm field-separate" id="email" name="email" [(ngModel)]="participant.email">
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Status</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Status</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-group field-separate">
 				<div class="form-group field-separate">
 					<select class="form-select form-select-sm" id="statut" name="statut" [(ngModel)]="participant.statut">
 					<select class="form-select form-select-sm" id="statut" name="statut" [(ngModel)]="participant.statut">
@@ -118,7 +118,7 @@
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Inscrit le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Inscrit le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateInscription" name="dateInscription" [(ngModel)]="participant.dateInscription" disabled>
 			</div>
 			</div>
@@ -128,43 +128,49 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine"> <label class="form-check-label" for="withMachine">Avec machine</label>
+					<input class="form-check-input field-separate" type="checkbox" id="withMachine" name="withMachine" [(ngModel)]="participant.withMachine"> <label class="form-check-label" for="withMachine"><small><span i18n>Avec machine</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
+@if (this.journees.jour1Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1"> <label class="form-check-label" for="hereDay1">Jour 1</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay1" name="hereDay1" [(ngModel)]="participant.hereDay1"> <label class="form-check-label" for="hereDay1"><small>{{ journees.jour1Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour2Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2"> <label class="form-check-label" for="hereDay2">Jour 2</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay2" name="hereDay2" [(ngModel)]="participant.hereDay2"> <label class="form-check-label" for="hereDay2"><small>{{ journees.jour2Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
+@if (this.journees.jour3Court) {
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3"> <label class="form-check-label" for="hereDay3">Jour 3</label>
+					<input class="form-check-input field-separate" type="checkbox" id="hereDay3" name="hereDay3" [(ngModel)]="participant.hereDay3"> <label class="form-check-label" for="hereDay3"><small>{{ journees.jour3Long }}</small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
+}
 
 
 		<div class="form-group row">
 		<div class="form-group row">
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite"> <label class="form-check-label" for="sleepingOnSite">Dort sur place</label>
+					<input class="form-check-input field-separate" type="checkbox" id="sleepingOnSite" name="sleepingOnSite" [(ngModel)]="participant.sleepingOnSite"> <label class="form-check-label" for="sleepingOnSite"><small><span i18n>Dort sur place</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -173,21 +179,21 @@
 				<div class="col-sm-4"></div>
 				<div class="col-sm-4"></div>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-check form-switch">
 					<div class="form-check form-switch">
-						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus"> 
-						<label class="form-check-label" for="useAmigabus">Vient en Amigabus</label>
+						<input class="form-check-input field-separate" type="checkbox" id="useAmigabus" name="useAmigabus" [(ngModel)]="participant.useAmigabus">
+						<label class="form-check-label" for="useAmigabus"><span i18n>Vient en Amigabus</span></label>
 					</div>
 					</div>
 				</div>
 				</div>
 			</div> -->
 			</div> -->
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="participant.commentaire"></textarea>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Mode de paiement</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Mode de paiement</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-group field-separate">
 				<div class="form-group field-separate">
 					<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement">
 					<select class="form-select form-select-sm" id="modePaiement" name="modePaiement" [(ngModel)]="participant.modePaiement">
@@ -198,7 +204,7 @@
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Somme reçue</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Somme reçue</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue">
 				<input type="text" class="form-control form-control-sm field-separate" id="sommeRecue" name="sommeRecue" [(ngModel)]="participant.sommeRecue">
 			</div>
 			</div>
@@ -208,15 +214,15 @@
 			<div class="col-sm-4"></div>
 			<div class="col-sm-4"></div>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-check form-switch">
 				<div class="form-check form-switch">
-					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived"> <label class="form-check-label" for="arrived">Arrivé</label>
+					<input class="form-check-input field-separate" type="checkbox" id="arrived" name="arrived" [(ngModel)]="participant.arrived"> <label class="form-check-label" for="arrived"><small><span i18n>Arrivé</span></small></label>
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;Modifier</button>
-			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;Effacer</button>
+			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;<span i18n>Modifier</span></button>
+			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;<span i18n>Effacer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
@@ -225,12 +231,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title" id="modalModifierTitre">Modification</h5>
+				<h5 class="modal-title" id="modalModifierTitre"><span i18n>Modification d'un participant</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Actualiser cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Actualiser cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -240,14 +246,14 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title text-danger" id="modalEffacerTitre">Suppression</h5>
+				<h5 class="modal-title text-danger" id="modalEffacerTitre"><span i18n>Suppression d'un participant</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Effacer cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Effacer cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 14 - 7
src/app/composants/participant-update/participant-update.component.ts

@@ -1,32 +1,39 @@
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
 import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
 import { ActivatedRoute, Router } from '@angular/router';
+import { FormsModule, NgForm } from '@angular/forms';
+
 import { MenuComponent } from '../menu/menu.component';
 import { MenuComponent } from '../menu/menu.component';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { Participant, ParticipantEnum, ParticipantStatutList, ParticipantModePaiementList } from '../../interfaces/participant';
 import { ParticipantService } from '../../services/participant.service';
 import { ParticipantService } from '../../services/participant.service';
-import { FormsModule, NgForm } from '@angular/forms'; 
+import { Journees } from '../../interfaces/divers';
+import { DiversService } from '../../services/divers.service'
 
 
 @Component({ selector: 'app-participant-update', imports: [FormsModule, MenuComponent], templateUrl: './participant-update.component.html', styleUrl: './participant-update.component.css' })
 @Component({ selector: 'app-participant-update', imports: [FormsModule, MenuComponent], templateUrl: './participant-update.component.html', styleUrl: './participant-update.component.css' })
 
 
 export class ParticipantUpdateComponent implements OnInit, AfterViewInit
 export class ParticipantUpdateComponent implements OnInit, AfterViewInit
 {
 {
-  
+
+  journees: Journees = new Journees();
+
   PS: ParticipantEnum[] = ParticipantStatutList;
   PS: ParticipantEnum[] = ParticipantStatutList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
   PMP: ParticipantEnum[] = ParticipantModePaiementList;
 
 
   @ViewChild('formRef') participantForm!: NgForm;
   @ViewChild('formRef') participantForm!: NgForm;
 
 
   numeroParticipant: number = 0;
   numeroParticipant: number = 0;
-  
   participant: Participant = new Participant();
   participant: Participant = new Participant();
-  
-  constructor(private participantService: ParticipantService, private route: ActivatedRoute, private router: Router, private menu: MenuComponent) { }
 
 
-  ngOnInit(): void 
+  constructor(private diversService: DiversService, private participantService: ParticipantService, private route: ActivatedRoute, private router: Router, private menu: MenuComponent) { }
+
+  ngOnInit()
   {
   {
+    this.journees = new Journees();
+    this.diversService.getJournees().subscribe(data => { this.journees = data; });
+
     this.numeroParticipant = this.route.snapshot.params['numeroParticipant'];
     this.numeroParticipant = this.route.snapshot.params['numeroParticipant'];
     this.participantService.getByIdParticipant(this.numeroParticipant).subscribe(data => { this.participant = data; });
     this.participantService.getByIdParticipant(this.numeroParticipant).subscribe(data => { this.participant = data; });
   }
   }
-  
+
   ngAfterViewInit() { }
   ngAfterViewInit() { }
 
 
   updateConfirmed() { if (this.participantForm.valid) { this.participantService.updateParticipant(this.numeroParticipant, this.participant).subscribe(() => { this.goToListParticipant(); }); } }
   updateConfirmed() { if (this.participantForm.valid) { this.participantService.updateParticipant(this.numeroParticipant, this.participant).subscribe(() => { this.goToListParticipant(); }); } }

+ 14 - 14
src/app/composants/production-create/production-create.component.html

@@ -2,14 +2,14 @@
 <div id="main">
 <div id="main">
 <form #formRef="ngForm" (ngSubmit)="addProduction()" class="needs-validation">
 <form #formRef="ngForm" (ngSubmit)="addProduction()" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Fiche d'une production</div>
+		<div class="card-header"><span i18n>Fiche d'une production</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-group field-separate">
 					<div class="form-group field-separate">
 						<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type">
 						<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type">
@@ -20,49 +20,49 @@
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Titre&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Titre</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" #titreRef="ngModel" required [class.is-invalid]="titreRef.invalid && titreRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" #titreRef="ngModel" required [class.is-invalid]="titreRef.invalid && titreRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Auteur(s)&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Auteur(s)</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" #auteursRef="ngModel" required [class.is-invalid]="auteursRef.invalid && auteursRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" #auteursRef="ngModel" required [class.is-invalid]="auteursRef.invalid && auteursRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe(s)</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Plateforme</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Plateforme</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme">
 					<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Informations privées</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Informations privées</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees"></textarea>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Gestionnaire&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Gestionnaire</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-group">
 					<div class="form-group">
 						<select class="form-select form-select-sm field-separate" id="numeroParticipant" name="numeroParticipant" [(ngModel)]="production.numeroParticipant">
 						<select class="form-select form-select-sm field-separate" id="numeroParticipant" name="numeroParticipant" [(ngModel)]="production.numeroParticipant">
@@ -75,14 +75,14 @@
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Archive</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Archive</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="archive" name="archive" accept="application/zip" (change)="onArchiveSelected($event)">
 					<input type="file" class="form-control form-control-sm field-separate" id="archive" name="archive" accept="application/zip" (change)="onArchiveSelected($event)">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Vignette</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
 				</div>
 				</div>
@@ -90,8 +90,8 @@
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
-</div>
+</div>

+ 19 - 21
src/app/composants/production-details/production-details.component.html

@@ -1,33 +1,31 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow center">
 <div class="card shadow center">
-	<div class="card-header">Fiche d'une production</div>
+	<div class="card-header"><span i18n>Fiche d'une production</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm">
-			<i class="fa-solid fa-xmark"></i>&nbsp;Retour
-		</button>
+		<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body scrollable">
 	<div class="card-body scrollable">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="production.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="production.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="production.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="production.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<div class="form-group field-separate">
 				<div class="form-group field-separate">
-					<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type" disabled> 
+					<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type" disabled>
 					  @for (type of types; track type.key) { <option [value]="type.key">{{ type.value }}</option> }
 					  @for (type of types; track type.key) { <option [value]="type.key">{{ type.value }}</option> }
 					</select>
 					</select>
 				</div>
 				</div>
@@ -35,64 +33,64 @@
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Titre</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Titre</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Auteur(s)</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Auteur(s)</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe(s)</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Plateforme</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Plateforme</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire" disabled></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire" disabled></textarea>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Informations privées</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Informations privées</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees" disabled></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees" disabled></textarea>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Gestionnaire</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Gestionnaire</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.nomGestionnaire" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.nomGestionnaire" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Archive</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Archive</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
-				<button type="button" (click)="updateArchive(production.numeroProduction)" class="btn bg-gradient btn-primary btn-sm field-separate"><i class="fa-solid fa-upload"></i>&nbsp;Téléverser</button>
-				<small class="text-muted">&nbsp;&nbsp;déjà enregistré : {{ production.nomArchive }} (v{{ production.numeroVersion }})</small>
+				<button type="button" (click)="updateArchive(production.numeroProduction)" class="btn bg-gradient btn-primary btn-sm field-separate"><i class="fa-solid fa-upload"></i>&nbsp;<span i18n>Téléverser</span></button>
+				<small class="text-muted">&nbsp;&nbsp;<span i18n>déjà enregistré :</span> {{ production.nomArchive }} (v{{ production.numeroVersion }})</small>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Vignette</label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<img src="{{ production.vignette }}" alt="" class="img-fluid rounded-2">
 				<img src="{{ production.vignette }}" alt="" class="img-fluid rounded-2">
 			</div>
 			</div>
@@ -100,7 +98,7 @@
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-		<button type="button" (click)="updateProduction(production.numeroProduction)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;Editer</button>
+		<button type="button" (click)="updateProduction(production.numeroProduction)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;<span i18n>Editer</span></button>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 4 - 4
src/app/composants/production-list/production-list.component.html

@@ -1,12 +1,12 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow rounded-bottom-0">
 <div class="card shadow rounded-bottom-0">
-	<div class="card-header">Liste des productions</div>
+	<div class="card-header"><span i18n>Liste des productions</span></div>
 	<div class="card-header">
 	<div class="card-header">
 		<div class="row">
 		<div class="row">
 			<div class="form-group col-sm-4 label-nobr">
 			<div class="form-group col-sm-4 label-nobr">
-				<button type="button" (click)="goToRefreshListProduction()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;Actualiser</button>
-				<button type="button" (click)="goToNewProduction()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+				<button type="button" (click)="goToRefreshListProduction()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+				<button type="button" (click)="goToNewProduction()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -27,7 +27,7 @@
        </div>
        </div>
 			<div class="card-footer d-flex justify-content-between">
 			<div class="card-footer d-flex justify-content-between">
 			  <i class="fa-solid fa-download text-primary pointeur-souris" (click)="getFile(production.numeroProduction, production.nomArchive)" tooltip="{{ production.nomArchive }} (v{{ production.numeroVersion }})" placement="top" container="body"></i>
 			  <i class="fa-solid fa-download text-primary pointeur-souris" (click)="getFile(production.numeroProduction, production.nomArchive)" tooltip="{{ production.nomArchive }} (v{{ production.numeroVersion }})" placement="top" container="body"></i>
-				<i class="fa-solid fa-user-tie text-muted" style="margin-left:7px;" tooltip="géré par {{ production.nomGestionnaire }}" placement="top" container="body"></i>
+				<i class="fa-solid fa-user-tie text-muted" style="margin-left:7px;" i18n-tootip tooltip="géré par {{ production.nomGestionnaire }}" placement="top" container="body"></i>
 			</div>
 			</div>
 		</div>
 		</div>
 	}
 	}

+ 24 - 26
src/app/composants/production-update/production-update.component.html

@@ -2,30 +2,28 @@
 <div id="main">
 <div id="main">
 <form id="formProduction" #formRef="ngForm" class="needs-validation">
 <form id="formProduction" #formRef="ngForm" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Fiche d'une production</div>
+		<div class="card-header"><span i18n>Fiche d'une production</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm">
-				<i class="fa-solid fa-xmark"></i>&nbsp;Retour
-			</button>
+			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="production.dateCreation" disabled>
 					<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="production.dateCreation" disabled>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="production.dateModification" disabled>
 					<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="production.dateModification" disabled>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<div class="form-group field-separate">
 					<div class="form-group field-separate">
 						<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type"> @for (type of types; track type.key) {
 						<select class="form-select form-select-sm" id="type" name="type" [(ngModel)]="production.type"> @for (type of types; track type.key) {
@@ -36,49 +34,49 @@
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Titre&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Titre</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" #titreRef="ngModel" required [class.is-invalid]="titreRef.invalid && titreRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" #titreRef="ngModel" required [class.is-invalid]="titreRef.invalid && titreRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Auteur(s)&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Auteur(s)</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" #auteursRef="ngModel" required [class.is-invalid]="auteursRef.invalid && auteursRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="auteurs" name="auteurs" [(ngModel)]="production.auteurs" #auteursRef="ngModel" required [class.is-invalid]="auteursRef.invalid && auteursRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Groupe(s)</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Groupe(s)</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes">
 					<input type="text" class="form-control form-control-sm field-separate" id="groupes" name="groupes" [(ngModel)]="production.groupes">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Plateforme</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Plateforme</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme">
 					<input type="text" class="form-control form-control-sm field-separate" id="plateforme" name="plateforme" [(ngModel)]="production.plateforme">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Commentaire</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Informations privées</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Informations privées</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="informationsPrivees" name="informationsPrivees" [(ngModel)]="production.informationsPrivees"></textarea>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Gestionnaire&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Gestionnaire</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 						<select class="form-select form-select-sm field-separate" id="numeroParticipant" name="numeroParticipant" [(ngModel)]="production.numeroGestionnaire">
 						<select class="form-select form-select-sm field-separate" id="numeroParticipant" name="numeroParticipant" [(ngModel)]="production.numeroGestionnaire">
 				    @for (participant of participants; track participant.numeroParticipant) {
 				    @for (participant of participants; track participant.numeroParticipant) {
@@ -89,7 +87,7 @@
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Vignette</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
 				</div>
 				</div>
@@ -97,8 +95,8 @@
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;Modifier</button>
-			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;Effacer</button>
+			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;<span i18n>Modifier</span></button>
+			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;<span i18n>Effacer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
@@ -107,12 +105,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title" id="modalModifierTitre">Modification</h5>
+				<h5 class="modal-title" id="modalModifierTitre"><span i18n>Modification d'une production</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Actualiser cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Actualiser cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -122,14 +120,14 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title text-danger" id="modalEffacerTitre">Suppression</h5>
+				<h5 class="modal-title text-danger" id="modalEffacerTitre"><span i18n>Suppression d'une production</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Effacer cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Effacer cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 6 - 6
src/app/composants/production-upload/production-upload.component.html

@@ -2,21 +2,21 @@
 <div id="main">
 <div id="main">
 <form #formRef="ngForm" (ngSubmit)="addProductionFile()" class="needs-validation">
 <form #formRef="ngForm" (ngSubmit)="addProductionFile()" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Changement de l'archive d'une production</div>
+		<div class="card-header"><span i18n>Changement de l'archive d'une production</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button (click)="goToListProduction()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Titre</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Titre</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" disabled>
 					<input type="text" class="form-control form-control-sm field-separate" id="titre" name="titre" [(ngModel)]="production.titre" disabled>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Archive</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Archive</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="archive" name="archive" accept="application/zip" (change)="onArchiveSelected($event)">
 					<input type="file" class="form-control form-control-sm field-separate" id="archive" name="archive" accept="application/zip" (change)="onArchiveSelected($event)">
 				</div>
 				</div>
@@ -24,8 +24,8 @@
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;Téléverser</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Téléverser</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
-</div>
+</div>

+ 8 - 8
src/app/composants/variable-create/variable-create.component.html

@@ -2,35 +2,35 @@
 <div id="main">
 <div id="main">
 <form #formRef="ngForm" (ngSubmit)="addVariable()" class="needs-validation">
 <form #formRef="ngForm" (ngSubmit)="addVariable()" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Fiche d'une variable</div>
+		<div class="card-header"><span i18n>Fiche d'une variable</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" #typeRef="ngModel" required [class.is-invalid]="typeRef.invalid && typeRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" #typeRef="ngModel" required [class.is-invalid]="typeRef.invalid && typeRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" #codeRef="ngModel" required [class.is-invalid]="codeRef.invalid && codeRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" #codeRef="ngModel" required [class.is-invalid]="codeRef.invalid && codeRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Valeur</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Valeur</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur">
 					<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Notes</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Notes</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes"></textarea>
 				</div>
 				</div>
@@ -38,8 +38,8 @@
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+			<button type="button" class="btn bg-gradient btn-success btn-sm text-left" type="submit" [disabled]="formRef.invalid"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
-</div>
+</div>

+ 10 - 10
src/app/composants/variable-details/variable-details.component.html

@@ -1,49 +1,49 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow center">
 <div class="card shadow center">
-  <div class="card-header">Fiche d'une variable</div>
+  <div class="card-header"><span i18n>Fiche d'une variable</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
-		<button type="button" (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+    <button type="button" (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 	</div>
 	</div>
 	<div class="card-body">
 	<div class="card-body">
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="variable.dateCreation" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="variable.dateCreation" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="variable.dateModification" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="variable.dateModification" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Valeur</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Valeur</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur" disabled>
 				<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur" disabled>
 			</div>
 			</div>
 		</div>
 		</div>
 
 
 		<div class="form-group row">
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Notes</label>
+      <label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Notes</span></label>
 			<div class="col-sm-8">
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes" disabled></textarea>
 				<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes" disabled></textarea>
 			</div>
 			</div>
@@ -52,7 +52,7 @@
 
 
 	</div>
 	</div>
 	<div class="card-footer">
 	<div class="card-footer">
-		<button type="button" (click)="updateVariable(variable.numeroVariable)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;Editer</button>
+    <button type="button" (click)="updateVariable(variable.numeroVariable)" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-pen"></i>&nbsp;<span i18n>Editer</span></button>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 7 - 7
src/app/composants/variable-list/variable-list.component.html

@@ -1,16 +1,16 @@
 <app-menu></app-menu>
 <app-menu></app-menu>
 <div id="main">
 <div id="main">
 <div class="card shadow">
 <div class="card shadow">
-	<div class="card-header">Table des variables</div>
+	<div class="card-header"><span i18n>Table des variables</span></div>
 	<div class="card-header shadow-sm">
 	<div class="card-header shadow-sm">
 		<div class="row justify-content-between">
 		<div class="row justify-content-between">
 			<div class="form-group col-sm-4 label-nobr">
 			<div class="form-group col-sm-4 label-nobr">
-				<button type="button" (click)="goToRefreshListVariable()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;Actualiser</button>
-				<button type="button" (click)="goToNewVariable()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;Créer</button>
+				<button type="button" (click)="goToRefreshListVariable()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+				<button type="button" (click)="goToNewVariable()" class="btn bg-gradient btn-primary btn-sm field-separate" style="margin-right: 5px;"><i class="fa-solid fa-plus"></i>&nbsp;<span i18n>Créer</span></button>
 			</div>
 			</div>
   		<div class="form-group col-sm-2 label-nobr">
   		<div class="form-group col-sm-2 label-nobr">
 				<div class="input-group input-group-sn">
 				<div class="input-group input-group-sn">
-					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled>Filtrer par type</button>
+					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Filtrer par type</span></button>
   				<select class="form-select form-select-sm field-separate" id="select_type" [(ngModel)]="typeFiltre" (change)="filtrageParType($event)">
   				<select class="form-select form-select-sm field-separate" id="select_type" [(ngModel)]="typeFiltre" (change)="filtrageParType($event)">
 	  				<option> </option>
 	  				<option> </option>
             @for (type of types; track type) {
             @for (type of types; track type) {
@@ -25,9 +25,9 @@
 		<table class="table table-sm">
 		<table class="table table-sm">
 			<thead class="thead-dark">
 			<thead class="thead-dark">
 				<tr>
 				<tr>
-					<th class="fs-6 label-nobr"><small>Type</small></th>
-					<th class="fs-6 label-nobr"><small>Code</small></th>
-					<th class="fs-6 label-nobr"><small>Valeur</small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Type</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Code</span></small></th>
+					<th class="fs-6 label-nobr"><small><span i18n>Valeur</span></small></th>
 				</tr>
 				</tr>
 			</thead>
 			</thead>
 			<tbody>
 			<tbody>

+ 19 - 19
src/app/composants/variable-update/variable-update.component.html

@@ -2,49 +2,49 @@
 <div id="main">
 <div id="main">
 <form id="formVariable" #formRef="ngForm" class="needs-validation">
 <form id="formVariable" #formRef="ngForm" class="needs-validation">
 	<div class="card shadow center">
 	<div class="card shadow center">
-		<div class="card-header">Fiche d'une variable</div>
+		<div class="card-header"><span i18n>Fiche d'une variable</span></div>
 		<div class="card-header shadow-sm">
 		<div class="card-header shadow-sm">
-			<button type="button" (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;Retour</button>
+			<button type="button" (click)="goToListVariable()" class="btn bg-gradient btn-primary btn-sm"><i class="fa-solid fa-xmark"></i>&nbsp;<span i18n>Retour</span></button>
 		</div>
 		</div>
 		<div class="card-body">
 		<div class="card-body">
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Créé le</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Créé le</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="variable.dateCreation" disabled>
 					<input type="text" class="form-control form-control-sm field-separate" id="dateCreation" name="dateCreation" [(ngModel)]="variable.dateCreation" disabled>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Modifié le</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Modifié le</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="variable.dateModification" disabled>
 					<input type="text" class="form-control form-control-sm field-separate" id="dateModification" name="dateModification" [(ngModel)]="variable.dateModification" disabled>
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Type&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Type</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" #typeRef="ngModel" required [class.is-invalid]="typeRef.invalid && typeRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="type" name="type" [(ngModel)]="variable.type" #typeRef="ngModel" required [class.is-invalid]="typeRef.invalid && typeRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Code&nbsp;<sup><span class="text-danger">*</span></sup></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Code</span>&nbsp;<sup><span class="text-danger">*</span></sup></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" #codeRef="ngModel" required [class.is-invalid]="codeRef.invalid && codeRef.touched">
 					<input type="text" class="form-control form-control-sm field-separate" id="code" name="code" [(ngModel)]="variable.code" #codeRef="ngModel" required [class.is-invalid]="codeRef.invalid && codeRef.touched">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Valeur</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Valeur</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur">
 					<input type="text" class="form-control form-control-sm field-separate" id="valeur" name="valeur" [(ngModel)]="variable.valeur">
 				</div>
 				</div>
 			</div>
 			</div>
 
 
 			<div class="form-group row">
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr">Notes</label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Notes</span></label>
 				<div class="col-sm-8">
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes"></textarea>
 					<textarea class="form-control form-control-sm field-separate" id="notes" name="notes" [(ngModel)]="variable.notes"></textarea>
 				</div>
 				</div>
@@ -53,8 +53,8 @@
 
 
 		</div>
 		</div>
 		<div class="card-footer">
 		<div class="card-footer">
-			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;Modifier</button>
-			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;Effacer</button>
+			<button type="button" class="btn bg-gradient btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalModifier" [disabled]="formRef.invalid"><i class="fa-solid fa-check"></i>&nbsp;<span i18n>Modifier</span></button>
+			<button type="button" class="btn bg-gradient btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#modalEffacer" style="float: right;"><i class="fa-solid fa-trash"></i>&nbsp;<span i18n>Effacer</span></button>
 		</div>
 		</div>
 	</div>
 	</div>
 </form>
 </form>
@@ -63,12 +63,12 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title" id="modalModifierTitre">Modification</h5>
+				<h5 class="modal-title" id="modalModifierTitre"><span i18n>Modification d'une variable</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Actualiser cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Actualiser cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-warning btn-sm" (click)="updateConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -78,14 +78,14 @@
 	<div class="modal-dialog modal-dialog-centered" role="document">
 	<div class="modal-dialog modal-dialog-centered" role="document">
 		<div class="modal-content">
 		<div class="modal-content">
 			<div class="modal-header">
 			<div class="modal-header">
-				<h5 class="modal-title text-danger" id="modalEffacerTitre">Suppression</h5>
+				<h5 class="modal-title text-danger" id="modalEffacerTitre"><span i18n>Suppression d'une variable</span></h5>
 			</div>
 			</div>
-			<div class="modal-body">Effacer cet enregistrement ?</div>
+			<div class="modal-body"><span i18n>Effacer cet enregistrement ?</span></div>
 			<div class="modal-footer">
 			<div class="modal-footer">
-				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal">Annuler</button>
-				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal">Confirmer</button>
+				<button type="button" class="btn bg-gradient btn-secondary btn-sm" data-bs-dismiss="modal"><span i18n>Annuler</span></button>
+				<button type="button" class="btn bg-gradient btn-danger btn-sm" (click)="deleteConfirmed()" data-bs-dismiss="modal"><span i18n>Confirmer</span></button>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
 </div>
 </div>
-</div>
+</div>

+ 11 - 1
src/app/interfaces/divers.ts

@@ -5,4 +5,14 @@ export class Message
   alerte: string = "";
   alerte: string = "";
   information: string = "";
   information: string = "";
   autre: string = "";
   autre: string = "";
-}
+}
+
+export class Journees
+{
+  jour1Court: string = "";
+  jour1Long: string = "";
+  jour2Court: string = "";
+  jour2Long: string = "";
+  jour3Court: string = "";
+  jour3Long: string = "";
+}

+ 18 - 18
src/app/interfaces/participant.ts

@@ -1,26 +1,26 @@
 export class ParticipantEnum { key!: string; value!: string; }
 export class ParticipantEnum { key!: string; value!: string; }
 
 
-export const ParticipantStatutList: ParticipantEnum[] = 
-[ 
-  { key: "EN_ATTENTE", value: "En attente"}, 
-  { key: "PAYE_CHEQUE", value: "Payé chèque"}, 
-  { key: "PAYE_ESPECES", value: "Payé espèces"}, 
-  { key: "VIREMENT_BANCAIRE", value: "Virement bancaire"}, 
-  { key: "VIREMENT_PAYPAL", value: "Virement Paypal"}, 
-  { key: "ORGA", value: "Orga"}, 
-  { key: "GUEST", value: "Guest"} 
+export const ParticipantStatutList: ParticipantEnum[] =
+[
+  { key: "EN_ATTENTE", value: $localize`En attente`},
+  { key: "PAYE_CHEQUE", value: $localize`Payé chèque`},
+  { key: "PAYE_ESPECES", value: $localize`Payé espèces`},
+  { key: "VIREMENT_BANCAIRE", value: $localize`Virement bancaire`},
+  { key: "VIREMENT_PAYPAL", value: $localize`Virement Paypal`},
+  { key: "ORGA", value: $localize`Orga`},
+  { key: "GUEST", value: $localize`Guest`}
 ];
 ];
 
 
-export const ParticipantModePaiementList: ParticipantEnum[] = 
-[ 
-  { key: "CHEQUE", value: "Chèque"}, 
-  { key: "VIREMENT", value: "Virement"}, 
-  { key: "PAYPAL", value: "Paypal"}, 
-  { key: "ESPECES", value: "Espèces"}, 
-  { key: "AUTRE", value: "Autre"}
+export const ParticipantModePaiementList: ParticipantEnum[] =
+[
+  { key: "CHEQUE", value: $localize`Chèque`},
+  { key: "VIREMENT", value: $localize`Virement`},
+  { key: "PAYPAL", value: $localize`Paypal`},
+  { key: "ESPECES", value: $localize`Espèces`},
+  { key: "AUTRE", value: $localize`Autre`}
 ];
 ];
 
 
-export class Participant 
+export class Participant
 {
 {
   dateCreation: string = "";
   dateCreation: string = "";
   dateModification: string = "";
   dateModification: string = "";
@@ -59,7 +59,7 @@ export class ParticipantShort
   prenom: string = "";
   prenom: string = "";
 }
 }
 
 
-export class ParticipantList 
+export class ParticipantList
 {
 {
   numeroParticipant: number = 0;
   numeroParticipant: number = 0;
   nom: string = "";
   nom: string = "";

+ 9 - 9
src/app/interfaces/production.ts

@@ -1,17 +1,17 @@
 
 
 export class ProductionEnum { key!: string; value!: string; }
 export class ProductionEnum { key!: string; value!: string; }
 
 
-export const ProductionTypeList: ProductionEnum[] = 
-[ 
-  { key: "EXECUTABLE", value: "Exécutable"}, 
-  { key: "GRAPHE", value: "Graphe"}, 
-  { key: "MUSIQUE", value: "Musique"}, 
-  { key: "VIDEO", value: "Vidéo"}, 
-  { key: "TOPIC", value: "Topic"}, 
-  { key: "AUTRE", value: "Autre"} 
+export const ProductionTypeList: ProductionEnum[] =
+[
+  { key: "EXECUTABLE", value: $localize`Exécutable`},
+  { key: "GRAPHE", value: $localize`Graphe`},
+  { key: "MUSIQUE", value: $localize`Musique`},
+  { key: "VIDEO", value: $localize`Vidéo`},
+  { key: "TOPIC", value: $localize`Topic`},
+  { key: "AUTRE", value: $localize`Autre`}
 ];
 ];
 
 
-export class Production 
+export class Production
 {
 {
   numeroProduction: number = 0;
   numeroProduction: number = 0;
   type: string = "AUTRE";
   type: string = "AUTRE";

+ 7 - 5
src/app/services/divers.service.ts

@@ -2,17 +2,19 @@ import { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http'
 import { HttpClient } from '@angular/common/http'
 import { Observable } from 'rxjs';
 import { Observable } from 'rxjs';
 import { Environnement } from '../env';
 import { Environnement } from '../env';
-import { Message } from '../interfaces/divers';
+import { Message, Journees } from '../interfaces/divers';
 
 
 @Injectable({ providedIn: 'root' })
 @Injectable({ providedIn: 'root' })
 
 
-export class DiversService 
+export class DiversService
 {
 {
 
 
   private baseURL = Environnement.apiUrl + "divers";
   private baseURL = Environnement.apiUrl + "divers";
 
 
   constructor(private httpClient: HttpClient) { }
   constructor(private httpClient: HttpClient) { }
-  
+
   getMessage(): Observable<Message>{ return this.httpClient.get<Message>(`${this.baseURL}/welcome`); }
   getMessage(): Observable<Message>{ return this.httpClient.get<Message>(`${this.baseURL}/welcome`); }
-  
-}
+
+  getJournees(): Observable<Journees>{ return this.httpClient.get<Journees>(`${this.baseURL}/days`); }
+
+}

+ 2 - 0
src/main.ts

@@ -1,3 +1,5 @@
+/// <reference types="@angular/localize" />
+
 import { bootstrapApplication } from '@angular/platform-browser';
 import { bootstrapApplication } from '@angular/platform-browser';
 import { appConfig } from './app/app.config';
 import { appConfig } from './app/app.config';
 import { AppComponent } from './app/app.component';
 import { AppComponent } from './app/app.component';

+ 3 - 1
tsconfig.app.json

@@ -4,7 +4,9 @@
   "extends": "./tsconfig.json",
   "extends": "./tsconfig.json",
   "compilerOptions": {
   "compilerOptions": {
     "outDir": "./out-tsc/app",
     "outDir": "./out-tsc/app",
-    "types": []
+    "types": [
+      "@angular/localize"
+    ]
   },
   },
   "files": [
   "files": [
     "src/main.ts"
     "src/main.ts"

+ 2 - 1
tsconfig.spec.json

@@ -5,7 +5,8 @@
   "compilerOptions": {
   "compilerOptions": {
     "outDir": "./out-tsc/spec",
     "outDir": "./out-tsc/spec",
     "types": [
     "types": [
-      "jasmine"
+      "jasmine",
+      "@angular/localize"
     ]
     ]
   },
   },
   "include": [
   "include": [