From 5559c5aed48ad5508d00b74d583dc96bfee259fd Mon Sep 17 00:00:00 2001
From: Jimmy Girardet <ijkl@netc.fr>
Date: Sat, 5 Mar 2022 22:04:34 +0100
Subject: [PATCH] start and coolectivesettings

---
 modules/webapp/src/main/elm/Messages.elm      | 26 ++++++++
 modules/webapp/src/main/elm/Messages/App.elm  | 18 ++++++
 .../webapp/src/main/elm/Messages/Basics.elm   | 47 +++++++++++++++
 .../main/elm/Messages/Comp/CalEventInput.elm  | 17 ++++++
 .../Messages/Comp/ClassifierSettingsForm.elm  | 25 ++++++++
 .../Messages/Comp/CollectiveSettingsForm.elm  | 36 +++++++++++
 .../src/main/elm/Messages/Comp/Dropzone.elm   | 12 ++++
 .../main/elm/Messages/Comp/EmptyTrashForm.elm | 11 ++++
 .../src/main/elm/Messages/Comp/HttpError.elm  | 19 ++++++
 .../Messages/Comp/ItemDetail/AddFilesForm.elm | 14 +++++
 .../src/main/elm/Messages/Comp/ItemMail.elm   | 20 +++++++
 .../src/main/elm/Messages/Comp/ShareForm.elm  | 12 ++++
 .../src/main/elm/Messages/Comp/ShareMail.elm  | 19 ++++++
 .../main/elm/Messages/Comp/ShareManage.elm    | 27 +++++++++
 .../src/main/elm/Messages/Comp/ShareTable.elm | 12 ++++
 .../src/main/elm/Messages/Comp/ShareView.elm  | 19 ++++++
 .../src/main/elm/Messages/Comp/SourceForm.elm | 35 +++++++++++
 .../main/elm/Messages/Comp/SourceManage.elm   | 31 ++++++++++
 .../main/elm/Messages/Comp/SourceTable.elm    | 13 ++++
 .../main/elm/Messages/Comp/TagDropdown.elm    |  9 +++
 .../src/main/elm/Messages/Comp/UserForm.elm   | 11 ++++
 .../src/main/elm/Messages/Comp/UserManage.elm | 22 +++++++
 .../src/main/elm/Messages/Comp/UserTable.elm  | 14 +++++
 .../src/main/elm/Messages/Data/Language.elm   | 59 +++++++++++++++++++
 .../src/main/elm/Messages/DateFormat.elm      |  3 +
 .../elm/Messages/Page/CollectiveSettings.elm  | 21 +++++++
 .../src/main/elm/Messages/Page/Dashboard.elm  | 33 ++++++++++-
 .../src/main/elm/Messages/UiLanguage.elm      |  2 +
 28 files changed, 586 insertions(+), 1 deletion(-)

diff --git a/modules/webapp/src/main/elm/Messages.elm b/modules/webapp/src/main/elm/Messages.elm
index 49bdc475..ba861973 100644
--- a/modules/webapp/src/main/elm/Messages.elm
+++ b/modules/webapp/src/main/elm/Messages.elm
@@ -64,6 +64,9 @@ get lang tz =
         German ->
             de tz
 
+        French ->
+            fr tz
+
 
 {-| Get a ISO-3166-1 code of the given lanugage.
 -}
@@ -146,3 +149,26 @@ de tz =
     , shareDetail = Messages.Page.ShareDetail.de tz
     , dashboard = Messages.Page.Dashboard.de tz
     }
+
+fr : TimeZone -> Messages
+fr tz =
+    { lang = French
+    , timeZone = tz
+    , iso2 = "fr"
+    , label = "Français"
+    , flagIcon = "flag-icon flag-icon-fr"
+    , app = Messages.App.fr
+    , collectiveSettings = Messages.Page.CollectiveSettings.fr tz
+    , login = Messages.Page.Login.gb
+    , register = Messages.Page.Register.gb
+    , newInvite = Messages.Page.NewInvite.gb
+    , upload = Messages.Page.Upload.gb
+    , itemDetail = Messages.Page.ItemDetail.gb tz
+    , queue = Messages.Page.Queue.gb tz
+    , userSettings = Messages.Page.UserSettings.gb tz
+    , manageData = Messages.Page.ManageData.gb tz
+    , search = Messages.Page.Search.gb tz
+    , share = Messages.Page.Share.gb tz
+    , shareDetail = Messages.Page.ShareDetail.gb tz
+    , dashboard = Messages.Page.Dashboard.fr tz
+    }
diff --git a/modules/webapp/src/main/elm/Messages/App.elm b/modules/webapp/src/main/elm/Messages/App.elm
index 72fefaef..acb5afca 100644
--- a/modules/webapp/src/main/elm/Messages/App.elm
+++ b/modules/webapp/src/main/elm/Messages/App.elm
@@ -9,6 +9,7 @@ module Messages.App exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 
@@ -60,3 +61,20 @@ de =
     , newItemsArrived = "Neue Dokumente eingetroffen!"
     , dashboard = "Dashboard"
     }
+
+
+fr : Texts
+fr =
+    { collectiveProfile = "Profile groupe"
+    , userProfile = "Profile utilisateur"
+    , lightDark = "Clair/Sombre"
+    , logout = "Déconnexion "
+    , items = "Documents"
+    , manageData = "Gérer les informations complémentaires"
+    , uploadFiles = "Envoyer des documents"
+    , processingQueue = "File de traitement"
+    , newInvites = "Nouvelles invitations"
+    , help = "Aide"
+    , newItemsArrived = "De nouveaux documents sont arrivés!"
+    , dashboard = "Tableau de bord"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Basics.elm b/modules/webapp/src/main/elm/Messages/Basics.elm
index 3dabacf0..63f9caec 100644
--- a/modules/webapp/src/main/elm/Messages/Basics.elm
+++ b/modules/webapp/src/main/elm/Messages/Basics.elm
@@ -9,6 +9,7 @@ module Messages.Basics exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 
@@ -143,3 +144,49 @@ Nachricht verschwindet dann.
     , periodicQueries = "Periodische Abfragen"
     , notificationHooks = "Webhooks"
     }
+
+
+fr : Texts
+fr =
+    { incoming = "Recus"
+    , outgoing = "Envoyés"
+    , deleted = "Supprimés"
+    , tags = "Tags"
+    , items = "Documents"
+    , submit = "Envoyer"
+    , submitThisForm = "Envoyer ce formulaire"
+    , cancel = "Annuler"
+    , delete = "Supprimer"
+    , created = "Créé"
+    , edit = "Editer"
+    , back = "Retour"
+    , backToList = "Retour à la liste"
+    , searchPlaceholder = "Rechercher…"
+    , selectPlaceholder = "Sélectionner…"
+    , id = "Id"
+    , ok = "Ok"
+    , yes = "Oui"
+    , no = "Non"
+    , chooseTag = "Choisir un  tag…"
+    , loading = "Chargement…"
+    , name = "Nom"
+    , organization = "Organisation"
+    , person = "Personne"
+    , equipment = "Equipment"
+    , folder = "Dossier"
+    , date = "Date"
+    , correspondent = "Correspondant"
+    , concerning = "Concerné"
+    , customFields = "Champs Personnalisés"
+    , direction = "Direction"
+    , folderNotOwnerWarning =
+        """
+Vous n'êtes **pas membre** de ce dossier. Ce document sera désormais
+**masqué** de toute recherche. Utilisez un dossier dont vous êtes membre
+afin de rendre ce document visible. Ce message sera ainsi masqué.
+                      """
+    , shares = "Partages"
+    , sources = "Sources"
+    , periodicQueries = "Requêtes Périodiques"
+    , notificationHooks = "Webhooks"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/CalEventInput.elm b/modules/webapp/src/main/elm/Messages/Comp/CalEventInput.elm
index d3a4d455..65331596 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/CalEventInput.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/CalEventInput.elm
@@ -9,6 +9,7 @@ module Messages.Comp.CalEventInput exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -63,3 +64,19 @@ de tz =
     , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
     , httpError = Messages.Comp.HttpError.de
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { weekday = "Jour  de la semaine"
+    , year = "Année"
+    , month = "Mois"
+    , day = "Jour"
+    , hour = "Heure"
+    , minute = "Minute"
+    , error = "Erreur"
+    , schedule = "Programmation"
+    , next = "Suivant"
+    , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.French tz
+    , httpError = Messages.Comp.HttpError.fr
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ClassifierSettingsForm.elm b/modules/webapp/src/main/elm/Messages/Comp/ClassifierSettingsForm.elm
index d3594285..51fbfbd3 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ClassifierSettingsForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ClassifierSettingsForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ClassifierSettingsForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -77,3 +78,27 @@ Eine leere Whitelist stellt das Auto-Tagging ab.
     , schedule = "Zeitplan"
     , itemCountHelp = "Die maximale Anzahl an Dokumenten, von denen gelernt werden soll (sortiert nach Datum, neueste zuerst). Verwende 0 um alle einzuschließen."
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , calEventInput = Messages.Comp.CalEventInput.fr tz
+    , autoTaggingText =
+        """
+L'Auto-Tagging fonctionne en apprenant des documents existants. Plus
+de documents seront tagués correctement, le mieux cela marchera. Les tâches 
+d'apprentissage sont effectuées périodiquement selon une programmation.
+Il est possible de spécifier la catégorie de tag qui doit être utilisée pour 
+l'apprentissage (liste blanche) ou ignorée (liste noire).
+
+Laisser liste blanche vide  désactive l'Auto-Tagging.
+
+            """
+    , blacklistOrWhitelist = "Les catégories suivantes sont-elles en liste blanche ou noire ?"
+    , whitelistLabel = "Inclure ces catégories de tag pour l'apprentissage"
+    , blacklistLabel = "Exclure ces catégories de tag pour l'apprentissage"
+    , itemCount = "Nombre maximum de documents à utiliser"
+    , schedule = "Programmation"
+    , itemCountHelp = "Le nombre de maximum de documents à utilser pour l'apprentissage, classés pas date (le plus récent en premier). Laisser 0 si pas de limite."
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm b/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm
index 78a93b39..d7fff107 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.CollectiveSettingsForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.Language exposing (Language)
@@ -118,3 +119,38 @@ de tz =
     , passwords = "Passwörter"
     , passwordsInfo = "Diese Passwörter werden zum Lesen von verschlüsselten PDFs verwendet. Diese Passwörter werden in der Datanbank **in Klartext** gespeichert!"
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.fr tz
+    , emptyTrashForm = Messages.Comp.EmptyTrashForm.fr tz
+    , httpError = Messages.Comp.HttpError.fr
+    , save = "Enregistrer"
+    , saveSettings = "Enregistrer la configuration"
+    , documentLanguage = "Langue du document"
+    , documentLanguageHelp = "La langue de vos documents. Cela aide la reconnaissance de charactères (OCR) et l'analyse de texte."
+    , integrationEndpoint = "Integration Endpoint"
+    , integrationEndpointLabel = "Activer integration endpoint"
+    , integrationEndpointHelp =
+        "L'Integration Endpoint permet aux applications (locales) d'envoyer des fichiers. "
+            ++ "Il peut être désactivé pour le groupe."
+    , fulltextSearch = "Recherche en texte intégral"
+    , reindexAllData = "Réindexer les documents"
+    , reindexAllDataHelp =
+        "Ceci démarrera une tâche qui effacera l'index de recherche en texte intégral et réindexera tous les documents."
+            ++ "Veuillez presser OK afin d'éviter toute réindexation accidentèle."
+    , autoTagging = "Auto-Tagging"
+    , startNow = "Commencer"
+    , languageLabel = Messages.Data.Language.fr
+    , classifierTaskStarted = "Tâche de classement démarrée."
+    , emptyTrashTaskStarted = "Vidange de la corbeille démarrée."
+    , emptyTrashStartInvalidForm = "Le formulaire de vidange de la corbeille contient des erreurs."
+    , fulltextReindexSubmitted = "Réindexation de la recherche en texte intégral démarrée."
+    , fulltextReindexOkMissing =
+        "Veuillez presser OK pour confirmer le lancement de la réindexation des documents."
+    , emptyTrash = "Vider la corbeille"
+    , passwords = "Mots de passe"
+    , passwordsInfo = "Ces mots de passes sont utilisés pour le traitement des PDF encryptés. Veuillez noter qu'ils sont stockés dans la base de donnée en **clair**!"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/Dropzone.elm b/modules/webapp/src/main/elm/Messages/Comp/Dropzone.elm
index 2d6b9947..141e4106 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/Dropzone.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/Dropzone.elm
@@ -9,6 +9,7 @@ module Messages.Comp.Dropzone exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -42,3 +43,14 @@ de =
         "Dateien auswählen (pdf, docx, txt, html, …). "
             ++ "Archive (zip und eml) werden extrahiert."
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , dropFilesHere = "Déposer les fichiers ici"
+    , or = "Ou"
+    , selectInfo =
+        "Choisir un fichier (pdf, docx, txt, html, ...)."
+            ++ "Les archives (zip et eml) seront extraites."
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/EmptyTrashForm.elm b/modules/webapp/src/main/elm/Messages/Comp/EmptyTrashForm.elm
index 26dc9d4a..3fa2ddbe 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/EmptyTrashForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/EmptyTrashForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.EmptyTrashForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -43,3 +44,13 @@ de tz =
     , minAge = "Mindestalter (Tage)"
     , minAgeInfo = "Das Mindestalter (in Tagen) der Dokumente, die gelöscht werden. Es wird das Datum der letzten Veränderung verwendet."
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , calEventInput = Messages.Comp.CalEventInput.fr tz
+    , schedule = "Programmation"
+    , minAge = "Durée minimum (jours)"
+    , minAgeInfo = "Durée minimum en jours avant qu'un document soit supprimé. L'heure de la dernière mise à jour est utilisée."
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/HttpError.elm b/modules/webapp/src/main/elm/Messages/Comp/HttpError.elm
index 686c0322..c16008b0 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/HttpError.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/HttpError.elm
@@ -8,6 +8,7 @@
 module Messages.Comp.HttpError exposing
     ( de
     , gb
+    , fr
     )
 
 import Http
@@ -51,6 +52,24 @@ de err =
     errorToString texts err
 
 
+fr : Http.Error -> String
+fr err =
+    let
+        texts =
+            { badUrl = \url -> "Erreur avec l'url: " ++ url
+            , timeout = "Délais d'attente réseau (timeout) expiré."
+            , networkError = "Erreur de réseau"
+            , invalidResponseStatus =
+                \status ->
+                    "Status de réponse invalide: " ++ String.fromInt status ++ "."
+            , invalidInput = "Entrée invalide pour traiter la requête"
+            , notFound = "La ressource demandée n'existe pas."
+            , invalidBody = \str -> "Erreur en décodant la réponse: " ++ str
+            , accessDenied = "Accès refusé"
+            }
+    in
+    errorToString texts err
+
 
 -- Error Utilities
 
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ItemDetail/AddFilesForm.elm b/modules/webapp/src/main/elm/Messages/Comp/ItemDetail/AddFilesForm.elm
index 8733d3a1..e2d33ffd 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ItemDetail/AddFilesForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ItemDetail/AddFilesForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ItemDetail.AddFilesForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -49,3 +50,16 @@ de =
             ++ "sind evtl. noch nicht sofort verfügbar. "
     , refreshNow = "Neu laden"
     }
+
+
+fr : Texts
+fr =
+    { dropzone = Messages.Comp.Dropzone.fr
+    , basics = Messages.Basics.fr
+    , addMoreFilesToItem = "Ajouter plus de fichier à ce document"
+    , reset = "Reset"
+    , filesSubmittedInfo =
+        "Tous les fichiers ont été importés. Ils sont en cours de traitement, certains"
+            ++ "peuvent ne pas être immédiatement disponible. "
+    , refreshNow = "Rafraichir maintenant"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm
index f50885bd..e3bf3d71 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ItemMail exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Http
@@ -70,3 +71,22 @@ de =
     , moreRecipients = "Weitere…"
     , lessRecipients = "Weniger…"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , httpError = Messages.Comp.HttpError.fr
+    , selectConnection = "Selectionner la connexion..."
+    , sendVia = "Envoyer via"
+    , recipients = "Destinataire(s)"
+    , ccRecipients = "CC"
+    , bccRecipients = "BCC"
+    , subject = "Sujet"
+    , body = "Corps"
+    , includeAllAttachments = "Inclure toutes les pièces-jointes"
+    , connectionMissing = "Aucune connection E-mail configurée. Pour en ajouter, aller dans Paramètres utilisateur."
+    , sendLabel = "Envoyer"
+    , moreRecipients = "Plus…"
+    , lessRecipients = "Moins…"
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm
index 44a9bcb5..3d2ae03a 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ShareForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -44,3 +45,14 @@ de =
     , publishUntil = "Publiziert bis"
     , clearPassword = "Passwort entfernen"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , queryLabel = "Requête"
+    , enabled = "Actif"
+    , password = "Mot de passe"
+    , publishUntil = "Publié jusqu'au"
+    , clearPassword = "Supprimer le mot de passe"
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm
index 04d49ba1..dd0c8a30 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ShareMail exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Http
@@ -61,3 +62,21 @@ Freundliche Grüße
 """
     , mailSent = "E-Mail gesendet."
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , httpError = Messages.Comp.HttpError.fr
+    , itemMail = Messages.Comp.ItemMail.fr
+    , subjectTemplate = \mt -> "Documents Partagés" ++ (Maybe.map (\n -> ": " ++ n) mt |> Maybe.withDefault "")
+    , bodyTemplate = \url -> """Bonjour,
+
+Ci-joints les documents:
+
+    """ ++ url ++ """
+
+Cordialement
+"""
+    , mailSent = "Mail envoyé."
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm
index b34e2775..4bd6a910 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ShareManage exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -93,3 +94,29 @@ de tz =
     , notOwnerInfo = "Nur der Benutzer, der diese Freigabe erstellt hat, kann diese auch ändern."
     , showOwningSharesOnly = "Nur meine Freigaben anzeigen"
     }
+
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , httpError = Messages.Comp.HttpError.fr
+    , shareTable = Messages.Comp.ShareTable.fr tz
+    , shareForm = Messages.Comp.ShareForm.fr
+    , shareView = Messages.Comp.ShareView.fr tz
+    , shareMail = Messages.Comp.ShareMail.fr
+    , newShare = "Nouveau partage"
+    , copyToClipboard = "Copier dans le presse-papier"
+    , openInNewTab = "Ouvrir dans un nouvel onglet/fenêtre"
+    , publicUrl = "URL publique"
+    , reallyDeleteShare = "Confirmer la suppression de ce partage ?"
+    , createNewShare = "Créer un nouveau partage"
+    , deleteThisShare = "Supprimer un partage"
+    , errorGeneratingQR = "Erreur  lors de la génération du QR Code"
+    , correctFormErrors = "Veuillez corriger les erreurs du formulaire."
+    , noName = "Sans nom"
+    , shareInformation = "Partager des informations"
+    , sendViaMail = "Envoyer par E-Mail"
+    , notOwnerInfo = "Seul l'utilisateur ayant créé ce partage peut modifier ses propiétés."
+    , showOwningSharesOnly = "Montrer seulement mes partages"
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm
index fe802679..4f60d1d0 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ShareTable exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -44,3 +45,14 @@ de tz =
     , publishUntil = "Publiziert bis"
     , user = "Benutzer"
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.French tz
+    , active = "Actif"
+    , publishUntil = "Publié jusqu'au"
+    , user = "Utilisateur"
+    }
+
diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm
index 2e44452c..f91e3d2b 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm
@@ -9,6 +9,7 @@ module Messages.Comp.ShareView exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -65,3 +66,21 @@ de tz =
     , views = "Aufrufe"
     , lastAccess = "Letzter Zugriff"
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , date = DF.formatDateLong Messages.UiLanguage.French tz
+    , qrCodeError = "Erreur  lors de la génération du QR Code"
+    , expiredInfo = "Ce partage a expiré."
+    , disabledInfo = "Ce partage est inactif."
+    , noName = "Sans nom"
+    , copyToClipboard = "Copier dans le presse-papier"
+    , openInNewTab = "Ouvrir dans un nouvel onglet/fenêtre"
+    , publishUntil = "Publié jusqu'au"
+    , passwordProtected = "Protégé par mot de passe"
+    , views = "Vues"
+    , lastAccess = "Dernier accès"
+    }
+
diff --git a/modules/webapp/src/main/elm/Messages/Comp/SourceForm.elm b/modules/webapp/src/main/elm/Messages/Comp/SourceForm.elm
index ac7e9a19..03270f82 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/SourceForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/SourceForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.SourceForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.Language exposing (Language)
@@ -101,3 +102,37 @@ importieren: `*.pdf`. Globs können auch mittels OR kombiniert werden:
     , languageLabel = Messages.Data.Language.de
     , attachmentsOnly = "Bei E-Mails nur die Anhänge importieren"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , tagDropdown = Messages.Comp.TagDropdown.fr
+    , description = "Description"
+    , enabled = "Actif"
+    , priority = "Priorité"
+    , priorityInfo = "Ordre de priorité utilisé par le programmateur lors du traitement des fichiers envoyés."
+    , metadata = "Metadonnées"
+    , metadataInfoText =
+        "Les métadonnées mentionnées ici sont automatiquement assignées à chaque fichier envoyé "
+            ++ "via cette source, à moins d'être écrasées par les métadonnées de la requête d'envoi."
+            ++ "Les tags de la requête sont ajoutés à ceux définis ici."
+    , folderInfo = "Choisir le dossier où seront déposés automatiquement les documents."
+    , tagsInfo = "Choisir les tags qui seront assignés aux documents."
+    , fileFilter = "Filtre de fichier"
+    , fileFilterInfo = """
+
+Spécifier un filtre type 'glob' afin de filtrer les fichiers
+à l'envoi d'archives (ex: pour mail et zip). Par Example, pour
+extraire uniquement les fichiers pdf: `*.pdf`.
+Les filtre 'glob' peuvent être combinés avec OR, comme cela:
+`.pdf|mail.html`.
+
+"""
+    , language = "Langue"
+    , languageInfo =
+        "Utilisé pour l'extraction et l'analyse du texte. La langue"
+            ++ "par défaut du groupe est utilisée, si rien n'est spécifié ici."
+    , languageLabel = Messages.Data.Language.fr
+    , attachmentsOnly = "Importer uniquement les pièces-jointes pour les mails."
+    }
diff --git a/modules/webapp/src/main/elm/Messages/Comp/SourceManage.elm b/modules/webapp/src/main/elm/Messages/Comp/SourceManage.elm
index d022d270..4432e4d8 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/SourceManage.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/SourceManage.elm
@@ -9,6 +9,7 @@ module Messages.Comp.SourceManage exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Http
@@ -98,3 +99,33 @@ de =
     , errorGeneratingQR = "Fehler beim Generieren des QR-Code"
     , correctFormErrors = "Bitte korrigiere die Fehler im Formular."
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , sourceTable = Messages.Comp.SourceTable.fr
+    , sourceForm = Messages.Comp.SourceForm.fr
+    , httpError = Messages.Comp.HttpError.fr
+    , addSourceUrl = "Ajouter une url source"
+    , newSource = "Nouvelle source"
+    , publicUploads = "Envois publiques"
+    , sourceInfoText =
+        "Cette source défini les URL vers les lequelles n'importe qui peut vous envoyer"
+            ++ "des fichiers. Il y a une page web pouvant être partagée ou l'url de l'API"
+            ++ "peut être utilisée avec d'autres clients."
+    , itemsCreatedInfo =
+        \n ->
+                ""
+                ++ String.fromInt n
+                ++ " documents créés via cette source."
+    , publicUploadPage = "Page des envois publiques"
+    , copyToClipboard = "Copier dans le presse-papier"
+    , openInNewTab = "Ouvrir dans un nouvel onglet/fenêtre"
+    , publicUploadUrl = "URL pour l'API publique d'envoi"
+    , reallyDeleteSource = "Confirmer la suppression de cette source ?"
+    , createNewSource = "Créer une nouvelle source"
+    , deleteThisSource = "Supprimer cette source"
+    , errorGeneratingQR = "Erreur lors de la génération du  QR Code"
+    , correctFormErrors = "Veuillez corriger les erreurs du formulaire."
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/SourceTable.elm b/modules/webapp/src/main/elm/Messages/Comp/SourceTable.elm
index fa99d9d3..5c4b635b 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/SourceTable.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/SourceTable.elm
@@ -9,6 +9,7 @@ module Messages.Comp.SourceTable exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -47,3 +48,15 @@ de =
     , id = "ID"
     , show = "Anzeigen"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , abbrev = "Abbrev"
+    , enabled = "Actif"
+    , counter = "Compteur"
+    , priority = "Priorité"
+    , id = "Id"
+    , show = "Montrer"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/TagDropdown.elm b/modules/webapp/src/main/elm/Messages/Comp/TagDropdown.elm
index 283ca845..149ed0b0 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/TagDropdown.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/TagDropdown.elm
@@ -9,6 +9,7 @@ module Messages.Comp.TagDropdown exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -35,3 +36,11 @@ de =
     , placeholder = "Suche…"
     , noCategory = "Keine Kategorie"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , placeholder = "Rechercher…"
+    , noCategory = "Aucune catégorie"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/UserForm.elm b/modules/webapp/src/main/elm/Messages/Comp/UserForm.elm
index 2afe5953..eca0a86d 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/UserForm.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/UserForm.elm
@@ -9,6 +9,7 @@ module Messages.Comp.UserForm exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Messages.Basics
@@ -41,3 +42,13 @@ de =
     , email = "E-Mail"
     , password = "Passwort"
     }
+
+
+fr : Texts
+fr =
+    { basics = Messages.Basics.fr
+    , login = "Identifiant"
+    , state = "Etat"
+    , email = "E-Mail"
+    , password = "Mot de passe"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm b/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm
index 9de653a7..19e2c649 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm
@@ -9,6 +9,7 @@ module Messages.Comp.UserManage exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -79,3 +80,24 @@ de tz =
     , shares = "Freigaben"
     , deleteFollowingData = "Die folgenden Daten werden auch gelöscht"
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { userTable = Messages.Comp.UserTable.fr tz
+    , userForm = Messages.Comp.UserForm.fr
+    , basics = Messages.Basics.fr
+    , httpError = Messages.Comp.HttpError.fr
+    , users = "Utilisateurs"
+    , newUser = "Nouvel utilisateur"
+    , addNewUser = "Ajouter un utilisateur"
+    , reallyDeleteUser = "Confirmer la suppression de l'utilisateur ?"
+    , createNewUser = "Créer un  utilisateur"
+    , deleteThisUser = "Supprimer cet  utilisateur"
+    , pleaseCorrectErrors = "Merci de corriger les erreurs du formulaire."
+    , notDeleteCurrentUser = "Un utilisateur actuellement connecté ne peut être supprimé."
+    , folders = "Répertoires"
+    , sentMails = "mails envoyés"
+    , shares = "partages"
+    , deleteFollowingData = "Les éléments suivants seront supprimés"
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Comp/UserTable.elm b/modules/webapp/src/main/elm/Messages/Comp/UserTable.elm
index 36240a3d..7d8f5364 100644
--- a/modules/webapp/src/main/elm/Messages/Comp/UserTable.elm
+++ b/modules/webapp/src/main/elm/Messages/Comp/UserTable.elm
@@ -9,6 +9,7 @@ module Messages.Comp.UserTable exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -53,3 +54,16 @@ de tz =
     , lastLogin = "Letzte Anmeldung"
     , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German tz
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , login = "Identifiant"
+    , state = "Etat"
+    , source = "Type"
+    , email = "E-Mail"
+    , logins = "Connexions"
+    , lastLogin = "Dernière connexion"
+    , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.French tz
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Data/Language.elm b/modules/webapp/src/main/elm/Messages/Data/Language.elm
index 5da90b73..63fba709 100644
--- a/modules/webapp/src/main/elm/Messages/Data/Language.elm
+++ b/modules/webapp/src/main/elm/Messages/Data/Language.elm
@@ -8,6 +8,7 @@
 module Messages.Data.Language exposing
     ( de
     , gb
+    , fr
     )
 
 import Data.Language exposing (Language(..))
@@ -127,3 +128,61 @@ de lang =
 
         Hungarian ->
             "Ungarisch"
+
+
+fr : Language -> String
+fr lang =
+    case lang of
+        German ->
+            "Allemand"
+
+        English ->
+            "Anglais"
+
+        French ->
+            "Français"
+
+        Italian ->
+            "Italien"
+
+        Spanish ->
+            "Espagnol"
+
+        Portuguese ->
+            "Portugais"
+
+        Czech ->
+            "Tchèque"
+
+        Danish ->
+            "Danois"
+
+        Finnish ->
+            "Finlandais"
+
+        Norwegian ->
+            "Norvégiens"
+
+        Swedish ->
+            "Suédois"
+
+        Russian ->
+            "Russe"
+
+        Romanian ->
+            "Roumain"
+
+        Dutch ->
+            "Néerlandais"
+
+        Latvian ->
+            "Letton"
+
+        Japanese ->
+            "Japonnais"
+
+        Hebrew ->
+            "Hébreu"
+
+        Hungarian ->
+            "Hongrois"
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/DateFormat.elm b/modules/webapp/src/main/elm/Messages/DateFormat.elm
index 23584132..ccfca89d 100644
--- a/modules/webapp/src/main/elm/Messages/DateFormat.elm
+++ b/modules/webapp/src/main/elm/Messages/DateFormat.elm
@@ -44,6 +44,9 @@ get lang =
         German ->
             de
 
+        French ->
+            fr
+
 
 format : UiLanguage -> TimeZone -> (DateTimeMsg -> List Token) -> Int -> String
 format lang zone pattern millis =
diff --git a/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm b/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm
index f41c12a4..f3873c2f 100644
--- a/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm
+++ b/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm
@@ -9,6 +9,7 @@ module Messages.Page.CollectiveSettings exposing
     ( Texts
     , de
     , gb
+    , fr
     )
 
 import Data.TimeZone exposing (TimeZone)
@@ -78,3 +79,23 @@ de tz =
     , items = "Dokumente"
     , submitSuccessful = "Einstellungen gespeichert."
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , userManage = Messages.Comp.UserManage.fr tz
+    , collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.fr tz
+    , sourceManage = Messages.Comp.SourceManage.fr
+    , shareManage = Messages.Comp.ShareManage.fr tz
+    , httpError = Messages.Comp.HttpError.fr
+    , collectiveSettings =  "Paramètres de groupe"
+    , insights = "Synthèse"
+    , settings = "Configuration"
+    , users = "Utilisateurs"
+    , user = "Utilisateur"
+    , collective = "Global"
+    , size = "Taille"
+    , items = "Documents"
+    , submitSuccessful = "Configuration sauvegardée."
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/Page/Dashboard.elm b/modules/webapp/src/main/elm/Messages/Page/Dashboard.elm
index a0330a0a..a78d319f 100644
--- a/modules/webapp/src/main/elm/Messages/Page/Dashboard.elm
+++ b/modules/webapp/src/main/elm/Messages/Page/Dashboard.elm
@@ -5,7 +5,7 @@
 -}
 
 
-module Messages.Page.Dashboard exposing (Texts, de, gb)
+module Messages.Page.Dashboard exposing (Texts, de, gb, fr)
 
 import Data.TimeZone exposing (TimeZone)
 import Messages.Basics
@@ -116,3 +116,34 @@ de tz =
     , dashboards = "Dashboards"
     , predefinedMessage = "Dieses Dashboard ist vordefiniert und kann nicht entfernt werden. Es wird durch ein gespeichertes ersetzt."
     }
+
+
+fr : TimeZone -> Texts
+fr tz =
+    { basics = Messages.Basics.fr
+    , bookmarkChooser = Messages.Comp.BookmarkChooser.gb
+    , notificationHookManage = Messages.Comp.NotificationHookManage.gb
+    , periodicQueryManage = Messages.Comp.PeriodicQueryTaskManage.gb tz
+    , sourceManage = Messages.Comp.SourceManage.gb
+    , shareManage = Messages.Comp.ShareManage.gb tz
+    , organizationManage = Messages.Comp.OrgManage.gb
+    , personManage = Messages.Comp.PersonManage.gb
+    , equipManage = Messages.Comp.EquipmentManage.gb
+    , tagManage = Messages.Comp.TagManage.gb
+    , folderManage = Messages.Comp.FolderManage.gb tz
+    , uploadForm = Messages.Comp.UploadForm.gb
+    , dashboard = Messages.Comp.DashboardView.gb tz
+    , dashboardManage = Messages.Comp.DashboardManage.gb
+    , defaultDashboard = Messages.Page.DefaultDashboard.gb
+    , accountScope = Messages.Data.AccountScope.gb
+    , manage = "Informations Complémentaires"
+    , dashboardLink = "Tableau de Bord"
+    , bookmarks = "Favoris"
+    , misc = "Divers"
+    , settings = "Configuration"
+    , documentation = "Documentation"
+    , uploadFiles =  "Envoyer des documents"
+    , editDashboard = "Editer le Tableau de Bord"
+    , dashboards = "Tableaux de bord"
+    , predefinedMessage = "Ce tableau de bord est prédéfini et ne peut être supprimer. Il est remplacé par le premier que vous enregistrez."
+    }
\ No newline at end of file
diff --git a/modules/webapp/src/main/elm/Messages/UiLanguage.elm b/modules/webapp/src/main/elm/Messages/UiLanguage.elm
index 9e211a02..7e24ed7c 100644
--- a/modules/webapp/src/main/elm/Messages/UiLanguage.elm
+++ b/modules/webapp/src/main/elm/Messages/UiLanguage.elm
@@ -17,10 +17,12 @@ module Messages.UiLanguage exposing
 type UiLanguage
     = English
     | German
+    | French
 
 
 all : List UiLanguage
 all =
     [ English
     , German
+    , French
     ]