thingsboard-aplcache

Details

diff --git a/ui/src/app/locale/locale.constant-en_US.json b/ui/src/app/locale/locale.constant-en_US.json
index ed933d3..6321d63 100644
--- a/ui/src/app/locale/locale.constant-en_US.json
+++ b/ui/src/app/locale/locale.constant-en_US.json
@@ -1453,6 +1453,7 @@
     "language": {
         "language": "Language",
         "locales": {
+			"fr_FR": "French",
             "zh_CN": "Chinese",
             "en_US": "English",
             "it_IT": "Italian",
diff --git a/ui/src/app/locale/locale.constant-es_ES.json b/ui/src/app/locale/locale.constant-es_ES.json
index 5747894..733db14 100644
--- a/ui/src/app/locale/locale.constant-es_ES.json
+++ b/ui/src/app/locale/locale.constant-es_ES.json
@@ -1307,6 +1307,7 @@
         "language": "Lenguaje",
         "locales": {
             "en_US": "Inglés",
+			"fr_FR": "Francés",
             "ko_KR": "Coreano",
             "zh_CN": "Chino",
             "ru_RU": "Ruso",
diff --git a/ui/src/app/locale/locale.constant-fr_FR.json b/ui/src/app/locale/locale.constant-fr_FR.json
new file mode 100644
index 0000000..2c0a290
--- /dev/null
+++ b/ui/src/app/locale/locale.constant-fr_FR.json
@@ -0,0 +1,1461 @@
+{
+"access":{
+	"access-forbidden": "Accès interdit",
+	"access-forbidden-text": "Vous n'avez pas accès à cet emplacement! <br/> Essayez de vous connecter avec un autre utilisateur si vous souhaitez toujours accéder à cet emplacement.",
+	"refresh-token-expired": "La session a expiré",
+	"refresh-token-failed": "Impossible de rafraîchir la session",
+	"unauthorized": "non autorisé",
+	"unauthorized-access": "accès non autorisé",
+	"unauthorized-access-text": "Vous devez vous connecter pour avoir accès à cette ressource!"
+	},
+"action":{ 
+	"activate": "Activer",
+	"add": "Ajouter",
+	"apply": "Appliquer",
+	"apply-changes": "Appliquer les modifications",
+	"assign": "Attribuer",
+	"back": "retour",
+	"cancel": "Annuler",
+	"clear-search": "Effacer la recherche",
+	"close": "Fermer",
+	"copy": "Copier",
+	"copy-reference": "Copier la référence",
+	"create": "Créer",
+	"decline-changes": "Refuser les modifications",
+	"delete": "Supprimer",
+	"drag": "Drag",
+	"edit": "Modifier",
+	"edit-mode": "Mode édition",
+	"enter-edit-mode": "Entrer en mode édition",
+	"export": "Exporter",
+	"import": "Importer",
+	"make-private": "Rendre privé",
+	"no": "Non",
+	"ok": "OK",
+	"paste": "coller",
+	"paste-reference": "Coller référence",
+	"refresh": "Rafraîchir",
+	"remove": "Supprimer",
+	"run": "Exécuter",
+	"save": "Enregistrer",
+	"saveAs": "Enregistrer sous",
+	"search": "Rechercher",
+	"share": "Partager",
+	"share-via": "Partager via {{provider}}",
+	"sign-in": "Connectez-vous!",
+	"suspend": "Suspendre",
+	"unassign": "Retirer",
+	"undo": "Annuler",
+	"update": "mise à jour",
+	"view": "Afficher",
+	"yes": "Oui"
+	},
+"admin":{
+	"base-url": "URL de base",
+	"base-url-required": "L'URL de base est requise.",
+	"enable-tls": "Activer TLS",
+	"general": "Général",
+	"general-settings": "Paramètres généraux",
+	"mail-from": "Mail de",
+	"mail-from-required": "Mail de est requis.",
+	"outgoing-mail": "courrier sortant",
+	"outgoing-mail-settings": "Paramètres de courrier sortant",
+	"send-test-mail": "Envoyer un mail de test",
+	"smtp-host": "Hôte SMTP",
+	"smtp-host-required": "L'hôte SMTP est requis.",
+	"smtp-port": "Port SMTP",
+	"smtp-port-invalid": "Cela ne ressemble pas à un port smtp valide.",
+	"smtp-port-required": "Vous devez fournir un port smtp.",
+	"smtp-protocol": "Protocole SMTP",
+	"system-settings": "Paramètres système",
+	"test-mail-sent": "Le courrier de test a été envoyé avec succès!",
+	"timeout-invalid": "Cela ne ressemble pas à un délai d'expiration valide.",
+	"timeout-msec": "Délai (msec)",
+	"timeout-required": "Le délai est requis."
+	},
+"aggregation":{
+	"aggregation": "agrégation",
+	"avg": "Moyenne",
+	"count": "Compte",
+	"function": "Fonction d'agrégation de données",
+	"group-interval": "Intervalle de regroupement",
+	"limit": "Valeurs maximales",
+	"max": "Max",
+	"min": "Min",
+	"none": "Aucune",
+	"sum": "Somme"
+	},
+"alarm":{
+	"ack-time": "Heure d'acquittement",
+	"acknowledge": "Acquitter",
+	"aknowledge-alarms-text": "Etes-vous sûr de vouloir acquitter {count, plural, 1 {1 alarme} other {# alarmes}}?",
+	"aknowledge-alarms-title": "Acquitter {count, plural, 1 {1 alarme} other {# alarmes}}",
+	"alarm": "Alarme",
+	"alarm-details": "Détails de l'alarme",
+	"alarm-required": "Une alarme est requise",
+	"alarm-status": "Etat d'alarme",
+	"alarms": "Alarmes",
+	"clear": "Effacer",
+	"clear-alarms-text": "Êtes-vous sûr de vouloir effacer {count, plural, 1 {1 alarme} other {# alarmes}}?",
+	"clear-alarms-title": "Effacer {count, plural, 1 {1 alarme} other {# alarmes}}",
+	"clear-time": "Heure d'éffacement",
+	"created-time": "Heure de création",
+	"details": "Détails",
+	"display-status":{
+	"ACTIVE_ACK": "Active acquittée",
+	"ACTIVE_UNACK": "Active non acquittée",
+	"CLEARED_ACK": "effacée acquittée",
+	"CLEARED_UNACK": "effacée non acquittée"
+	},
+	"end-time": "Heure de fin",
+	"min-polling-interval-message": "Un intervalle d'interrogation d'au moins 1 seconde est autorisé.",
+	"no-alarms-matching": "Aucune alarme correspondant à {{entity}} n'a été trouvée. ",
+	"no-alarms-prompt": "Aucune alarme trouvée",
+	"no-data": "Aucune donnée à afficher",
+	"originator": "Source",
+	"originator-type": "Type de Source",
+	"polling-interval": "Intervalle d'interrogation des alarmes (sec)",
+	"polling-interval-required": "L'intervalle d'interrogation des alarmes est requis.",
+	"search": "Rechercher des alarmes",
+	"search-status":{
+	"ACK": "acquitté",
+	"ACTIVE": "active",
+	"ANY": "Toutes",
+	"CLEARED": "effacée",
+	"UNACK": "non acquittée"
+	},
+	"select-alarm": "Sélectionnez une alarme",
+	"selected-alarms": "{count, plural, 1 {1 alarme} other {# alarmes}} sélectionnées",
+	"severity": "Gravitée",
+	"severity-critical": "Critique",
+	"severity-indeterminate": "indéterminée",
+	"severity-major": "Majeure",
+	"severity-minor": "mineure",
+	"severity-warning": "Avertissement",
+	"start-time": "Heure de début",
+	"status": "Etat",
+	"type": "Type"
+	},
+"alias":{
+	"add": "Ajouter un alias",
+	"all-entities": "Toutes les entités",
+	"any-relation": "toutes",
+	"default-entity-parameter-name": "Par défaut",
+	"default-state-entity": "Entité d'état par défaut",
+	"duplicate-alias": "Un alias portant le même nom existe déjà.",
+	"edit": "Modifier l'alias",
+	"entity-filter": "Filtre d'entité",
+	"entity-filter-no-entity-matched": "Aucune entité correspondant au filtre spécifié n'a été trouvée.",
+	"filter-type": "Type de filtre",
+	"filter-type-asset-search-query": "requête de recherche d'Assets",
+	"filter-type-asset-search-query-description": "Assets de types {{assetTypes}} ayant {{relationType}} relation {{direction}} {{rootEntity}}",
+	"filter-type-asset-type": "type d'Asset",
+	"filter-type-asset-type-and-name-description": "Assets de type '{{assetType}}' et dont le nom commence par '{{prefix}}'",
+	"filter-type-asset-type-description": "Assets de type '{{assetType}}'",
+	"filter-type-device-search-query": "Requête de recherche de dispositif",
+	"filter-type-device-search-query-description": "Dispositifs de types {{deviceTypes}} ayant {{relationType}} relation {{direction}} {{rootEntity}}",
+	"filter-type-device-type": "Type de dispositif",
+	"filter-type-device-type-and-name-description": "Dispositifs de type '{{deviceType}}' et dont le nom commence par '{{prefix}}'",
+	"filter-type-device-type-description": "Dispositifs de type '{{deviceType}}'",
+	"filter-type-entity-list": "Liste d'entités",
+	"filter-type-entity-name": "Nom d'entité",
+	"filter-type-relations-query": "Interrogation des relations",
+	"filter-type-relations-query-description": "{{entities}} ayant {{relationType}} relation {{direction}} {{rootEntity}}",
+	"filter-type-required": "Le type de filtre est requis.",
+	"filter-type-single-entity": "Entité unique",
+	"filter-type-state-entity": "Entité de l'état du tableau de bord",
+	"filter-type-state-entity-description": "Entité extraite des paramètres d'état du tableau de bord",
+	"max-relation-level": "Niveau de relation maximum",
+	"name": "Nom de l'alias",
+	"name-required": "Le nom d'alias est requis",
+	"no-entity-filter-specified": "Aucun filtre d'entité spécifié",
+	"resolve-multiple": "Résoudre en plusieurs entités",
+	"root-entity": "Entité racine",
+	"root-state-entity": "Utiliser l'entité d'état du tableau de bord en tant que racine",
+	"state-entity": "Entité d'état du tableau de bord",
+	"state-entity-parameter-name": "Nom du paramètre d'entité d'état",
+	"unlimited-level": "niveau illimité"
+	},
+"asset":{
+	"add": "Ajouter un Asset",
+	"add-asset-text": "Ajouter un nouvel Asset",
+	"any-asset": "Tout Asset",
+	"asset": "Asset",
+	"asset-details": "Détails de l'Asset",
+	"asset-public": "L'Asset est public",
+	"asset-required": "Asset requis",
+	"asset-type": "Type d'Asset",
+	"asset-type-list-empty": "Aucun type d'Asset sélectionné.",
+	"asset-type-required": "Le type d'Asset est requis.",
+	"asset-types": "Types d'Asset",
+	"assets": "Assets",
+	"assign-asset-to-customer": "Attribuer des Assets au client",
+	"assign-asset-to-customer-text": "Veuillez sélectionner les Assets à attribuer au client",
+	"assign-assets": "Attribuer des Assets",
+	"assign-assets-text": "Attribuer {count, plural, 1 {1 asset} other {# assets}} au client",
+	"assign-new-asset": "Attribuer un nouvel Asset",
+	"assign-to-customer": "Attribuer au client",
+	"assign-to-customer-text": "Veuillez sélectionner le client pour attribuer le ou les Assets",
+	"assignedToCustomer": "attribué au client",
+	"copyId": "Copier l'Id de l'Asset",
+	"delete": "Supprimer un Asset",
+	"delete-asset-text": "Faites attention, après la confirmation, l'Asset et toutes les données associées deviendront irrécupérables.",
+	"delete-asset-title": "Êtes-vous sûr de vouloir supprimer l'Asset '{{assetName}}'?",
+	"delete-assets": "Supprimer des Assets",
+	"delete-assets-action-title": "Supprimer {count, plural, 1 {1 asset} other {# assets}}",
+	"delete-assets-text": "Attention, après la confirmation, tous les Assets sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-assets-title": "Etes-vous sûr de vouloir supprimer {count, plural, 1 {1 asset} other {# assets}}?",
+	"description": "Description",
+	"details": "Détails",
+	"enter-asset-type": "Entrez le type d'Asset",
+	"events": "Evènements",
+	"idCopiedMessage": "L'Id d'asset a été copié dans le presse-papier",
+	"make-private": "Rendre l'Asset privé",
+	"make-private-asset-text": "Après la confirmation, l'Asset et toutes ses données seront rendus privés et ne seront pas accessibles par d'autres.",
+	"make-private-asset-title": "Etes-vous sûr de vouloir rendre l'Asset '{{assetName}}' privé '?",
+	"make-public": "Rendre l'Asset public",
+	"make-public-asset-text": "Après la confirmation, l'asset et toutes ses données seront rendus publics et accessibles aux autres.",
+	"make-public-asset-title": "Êtes-vous sûr de vouloir rendre l'Asset '{{assetName}}' public '?",
+	"management": "Gestion d'Assets",
+	"name": "Nom",
+	"name-required": "Nom est requis.",
+	"name-starts-with": "Le nom de l'Asset commence par",
+	"no-asset-types-matching": "Aucun type d'Asset correspondant à {{entitySubtype}} n'a été trouvé. ",
+	"no-assets-matching": "Aucun Asset correspondant à {{entity}} n'a été trouvé. ",
+	"no-assets-text": "Aucun Asset trouvé",
+	"public": "Public",
+	"select-asset": "Sélectionner un Asset",
+	"select-asset-type": "Sélectionner le type d'Asset",
+	"type": "Type",
+	"type-required": "Le type est requis.",
+	"unassign-asset": "Retirer l'Asset",
+	"unassign-asset-text": "Après la confirmation, l'Asset sera non attribué et ne sera pas accessible au client.",
+	"unassign-asset-title": "Êtes-vous sûr de vouloir  retirer l'attribution de l'Asset '{{assetName}}'?",
+	"unassign-assets": "Retirer les Assets",
+	"unassign-assets-action-title": "Retirer {count, plural, 1 {1 asset} other {# assets}} du client",
+	"unassign-assets-text": "Après la confirmation, tous les Assets sélectionnés ne seront pas attribués et ne seront pas accessibles au client.",
+	"unassign-assets-title": "Êtes-vous sûr de vouloir retirer l'attribution de {count, plural, 1 {1 asset} other {# assets}}?",
+	"unassign-from-customer": "Retirer du client",
+	"view-assets": "Afficher les Assets"
+	},
+"attribute":{
+	"add": "Ajouter un attribut",
+	"add-to-dashboard": "Ajouter au tableau de bord",
+	"add-widget-to-dashboard": "Ajouter un widget au tableau de bord",
+	"attributes": "Attributs",
+	"attributes-scope": "Etendue des attributs d'entité",
+	"delete-attributes": "Supprimer les attributs",
+	"delete-attributes-text": "Attention, après la confirmation, tous les attributs sélectionnés seront supprimés.",
+	"delete-attributes-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 attribut} other {# attributs}}?",
+	"enter-attribute-value": "Entrez la valeur de l'attribut",
+	"key": "Clé",
+	"key-required": "La Clé d'attribut est requise.",
+	"last-update-time": "Dernière mise à jour",
+	"latest-telemetry": "Dernière télémétrie",
+	"next-widget": "Widget suivant",
+	"prev-widget": "Widget précédent",
+	"scope-client": "Attributs du client",
+	"scope-latest-telemetry": "Dernière télémétrie",
+	"scope-server": "Attributs du serveur",
+	"scope-shared": "Attributs partagés",
+	"selected-attributes": "{count, plural, 1 {1 attribut} other {# attributs}} sélectionnés",
+	"selected-telemetry": "{count, plural, 1 {1 unité de télémétrie} other {# unités de télémétrie}} sélectionnées",
+	"show-on-widget": "Afficher sur le widget",
+	"value": "Valeur",
+	"value-required": "La valeur d'attribut est obligatoire.",
+	"widget-mode": "Mode du widget"
+	},
+"audit-log":{
+	"action-data": "Action data",
+	"audit": "Audit",
+	"audit-log-details": "Détails du journal d'audit",
+	"audit-logs": "Journaux d'audit",
+	"clear-search": "Effacer la recherche",
+	"details": "Détails",
+	"entity-name": "Nom de l'entité",
+	"entity-type": "Type d'entité",
+	"failure-details": "Détails de l'échec",
+	"no-audit-logs-prompt": "Aucun journal trouvé",
+	"search": "Rechercher les journaux d'audit",
+	"status": "Etat",
+	"status-failure": "Échec",
+	"status-success": "Succès",
+	"timestamp": "Horodatage",
+	"type": "Type",
+	"type-activated": "Activé",
+	"type-added": "Ajouté",
+	"type-alarm-ack": "Acquitté",
+	"type-alarm-clear": "Effacé",
+	"type-assigned-to-customer": "Attribué au client",
+	"type-attributes-deleted": "Attributs supprimés",
+	"type-attributes-read": "Attributs lus",
+	"type-attributes-updated": "Attributs mis à jour",
+	"type-credentials-read": "Lecture des informations d'identification",
+	"type-credentials-updated": "Informations d'identification actualisées",
+	"type-deleted": "Supprimé",
+	"type-relation-add-or-update": "Relation mise à jour",
+	"type-relation-delete": "Relation supprimée",
+	"type-relations-delete": "Toutes les relations ont été supprimées",
+	"type-rpc-call": "Appel RPC",
+	"type-suspended": "Suspendu",
+	"type-unassigned-from-customer": "Non attribué du client",
+	"type-updated": "Mise à jour",
+	"user": "Utilisateur"
+	},
+"common":{
+	"enter-password": "Entrez le mot de passe",
+	"enter-search": "Entrez la recherche",
+	"enter-username": "Entrez le nom d'utilisateur",
+	"password": "Mot de passe",
+	"username": "Nom d'utilisateur"
+	},
+"confirm-on-exit":{
+	"html-message": "Vous avez des modifications non enregistrées. <br/> Êtes-vous sûr de vouloir quitter cette page?",
+	"message": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter cette page?",
+	"title": "Modifications non enregistrées"
+	},
+"contact":{
+	"address": "Adresse",
+	"address2": "adresse 2",
+	"city": "Ville",
+	"country": "Pays",
+	"email": "Email",
+	"no-address": "Pas d'adresse",
+	"phone": "Téléphone",
+	"postal-code": "Code postal",
+	"postal-code-invalid": "Format de code postal / code postal invalide",
+	"state": "Etat / Province"
+	},
+"content-type":{
+	"binary": "Binaire (Base64)",
+	"json": "Json",
+	"text": "Texte"
+	},
+"custom":{
+	"widget-action":{
+	"action-cell-button": "Action cell button",
+	"marker-click": "On marker click",
+	"row-click": "On row click",
+	"tooltip-tag-action": "Tooltip tag action"
+	}
+	},
+"customer":{
+	"add": "Ajouter un client",
+	"add-customer-text": "Ajouter un nouveau client",
+	"assets": "Assets du client",
+	"copyId": "Copier l'id du client",
+	"customer": "Client",
+	"customer-details": "Détails du client",
+	"customer-required": "Le client est requis",
+	"customers": "Clients",
+	"dashboard": "Tableau de bord du client",
+	"dashboards": "tableaux de bord du client",
+	"default-customer": "Client par défaut",
+	"default-customer-required": "Le client par défaut est requis pour déboguer le tableau de bord au niveau du Tenant",
+	"delete": "Supprimer le client",
+	"delete-customer-text": "Faites attention, après la confirmation, le client et toutes les données associées deviendront irrécupérables.",
+	"delete-customer-title": "Êtes-vous sûr de vouloir supprimer le client '{{customerTitle}}'?",
+	"delete-customers-action-title": "Supprimer {count, plural, 1 {1 client} other {# clients}}",
+	"delete-customers-text": "Faites attention, après la confirmation, tous les clients sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-customers-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 client} other {# clients}}?",
+	"description": "Description",
+	"details": "Détails",
+	"devices": "Dispositifs du client",
+	"events": "Événements",
+	"idCopiedMessage": "L'Id du client a été copié dans le presse-papier",
+	"manage-assets": "Gérer les Assets",
+	"manage-customer-assets": "Gérer les Assets du client",
+	"manage-customer-dashboards": "Gérer les tableaux de bord du client",
+	"manage-customer-devices": "Gérer les dispositifs du client",
+	"manage-customer-users": "Gérer les utilisateurs du client",
+	"manage-dashboards": "Gérer les tableaux de bord",
+	"manage-devices": "Gérer les dispositifs",
+	"manage-public-assets": "Gérer les Assets publics",
+	"manage-public-dashboards": "Gérer les tableaux de bord publics",
+	"manage-public-devices": "Gérer les dispositifs publics",
+	"manage-users": "Gérer les utilisateurs",
+	"management": "Gestion des clients",
+	"no-customers-matching": "Aucun client correspondant à '{{entity}} n'a été trouvé.",
+	"no-customers-text": "Aucun client trouvé",
+	"public-assets": "Assets publics",
+	"public-dashboards": "Tableaux de bord publics",
+	"public-devices": "Dispositifs publics",
+	"select-customer": "Sélectionner un client",
+	"select-default-customer": "Sélectionnez le client par défaut",
+	"title": "Titre",
+	"title-required": "Le titre est requis."
+	},
+"dashboard":{
+	"add": "Ajouter un tableau de bord",
+	"add-dashboard-text": "Ajouter un nouveau tableau de bord",
+	"add-state": "Ajouter un état du tableau de bord",
+	"add-widget": "Ajouter un nouveau widget",
+	"alias-resolution-error-title": "Erreur de configuration des alias de tableau de bord",
+	"assign-dashboard-to-customer": "Attribuer des tableaux de bord au client",
+	"assign-dashboard-to-customer-text": "Veuillez sélectionner les tableaux de bord à affecter au client",
+	"assign-dashboards": "Attribuer des tableaux de bord",
+	"assign-dashboards-text": "Attribuer {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} aux clients",
+	"assign-new-dashboard": "Attribuer un nouveau tableau de bord",
+	"assign-to-customer": "Attribuer au client",
+	"assign-to-customer-text": "Veuillez sélectionner le client pour attribuer le ou les tableaux de bord",
+	"assign-to-customers": "Attribuer des tableaux de bord aux clients",
+	"assign-to-customers-text": "Veuillez sélectionner les clients pour attribuer les tableaux de bord",
+	"assigned-customers": "clients affectés",
+	"assignedToCustomer": "Attribué au client",
+	"assignedToCustomers": "attribué aux clients",
+	"autofill-height": "Hauteur de remplissage automatique",
+	"background-color": "Couleur de fond",
+	"background-image": "Image d'arrière-plan",
+	"background-size-mode": "Mode de taille d'arrière-plan",
+	"close-toolbar": "Fermer la barre d'outils",
+	"columns-count": "Nombre de colonnes",
+	"columns-count-required": "Le nombre de colonnes est requis.",
+	"configuration-error": "Erreur de configuration",
+	"copy-public-link": "Copier le lien public",
+	"create-new": "Créer un nouveau tableau de bord",
+	"create-new-dashboard": "Créer un nouveau tableau de bord",
+	"create-new-widget": "Créer un nouveau widget",
+	"dashboard": "Tableau de bord",
+	"dashboard-details": "Détails du tableau de bord",
+	"dashboard-file": "Fichier du tableau de bord",
+	"dashboard-import-missing-aliases-title": "Configurer les alias utilisés par le tableau de bord importé",
+	"dashboard-required": "Le tableau de bord est requis.",
+	"dashboards": "Tableaux de bord",
+	"delete": "Supprimer le tableau de bord",
+	"delete-dashboard-text": "Faites attention, après la confirmation, le tableau de bord et toutes les données associées deviendront irrécupérables.",
+	"delete-dashboard-title": "Êtes-vous sûr de vouloir supprimer le tableau de bord '{{dashboardTitle}}'?",
+	"delete-dashboards": "Supprimer les tableaux de bord",
+	"delete-dashboards-action-title": "Supprimer {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}}",
+	"delete-dashboards-text": "Attention, après la confirmation, tous les tableaux de bord sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-dashboards-title": "Voulez-vous vraiment supprimer {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}}?",
+	"delete-state": "Supprimer l'état du tableau de bord",
+	"delete-state-text": "Etes-vous sûr de vouloir supprimer l'état du tableau de bord avec le nom '{{stateName}}'?",
+	"delete-state-title": "Supprimer l'état du tableau de bord",
+	"description": "Description",
+	"details": "Détails",
+	"display-dashboard-export": "Afficher l'exportation",
+	"display-dashboard-timewindow": "Afficher fenêtre de temps",
+	"display-dashboards-selection": "Afficher la sélection des tableaux de bord",
+	"display-entities-selection": "Afficher la sélection des entités",
+	"display-title": "Afficher le titre du tableau de bord",
+	"drop-image": "Déposer une image ou cliquez pour sélectionner un fichier à télécharger.",
+	"edit-state": "Modifier l'état du tableau de bord",
+	"export": "Exporter le tableau de bord",
+	"export-failed-error": "Impossible d'exporter le tableau de bord: {{error}}",
+	"hide-details": "Masquer les détails",
+	"horizontal-margin": "Marge horizontale",
+	"horizontal-margin-required": "Une valeur de marge horizontale est requise.",
+	"import": "Importer le tableau de bord",
+	"import-widget": "Importer un widget",
+	"invalid-aliases-config": "Impossible de trouver des dispositifs correspondant à certains filtres d'alias. <br/> Veuillez contacter votre administrateur pour résoudre ce problème.",
+	"invalid-dashboard-file-error": "Impossible d'importer le tableau de bord: structure de données du tableau de bord non valide",
+	"invalid-widget-file-error": "Impossible d'importer le widget: structure de données de widget invalide.",
+	"is-root-state": "Etat racine",
+	"make-private": "Rendre privé le tableau de bord",
+	"make-private-dashboard": "Rendre privé le tableau de bord",
+	"make-private-dashboard-text": "Après la confirmation, le tableau de bord sera rendu privé et ne sera plus accessible aux autres.",
+	"make-private-dashboard-title": "Etes-vous sûr de vouloir rendre le tableau de bord '{{dashboardTitle}}' privé?",
+	"make-public": "Rendre public le tableau de bord",
+	"manage-assigned-customers": "Gérer les clients affectés",
+	"manage-states": "Gérer les états du tableau de bord",
+	"management": "Gestion du tableau de bord",
+	"max-columns-count-message": "Seulement 1000 colonnes maximum sont autorisées.",
+	"max-horizontal-margin-message": "Seulement 50 sont autorisés en tant que valeur de marge horizontale maximale.",
+	"max-mobile-row-height-message": "Seuls 200 pixels sont autorisés en tant que valeur maximale de hauteur de ligne mobile.",
+	"max-vertical-margin-message": "Seulement 50 sont autorisés en tant que valeur de marge verticale maximale.",
+	"min-columns-count-message": "Seul un nombre minimum de 10 colonnes est autorisé.",
+	"min-horizontal-margin-message": "Seul 0 est autorisé comme valeur de marge horizontale minimale.",
+	"min-mobile-row-height-message": "Seuls 5 pixels sont autorisés en tant que valeur minimale de hauteur de ligne mobile.",
+	"min-vertical-margin-message": "Seul 0 est autorisé comme valeur de marge verticale minimale.",
+	"mobile-layout": "Paramètres de mise en page mobiles",
+	"mobile-row-height": "Hauteur de ligne mobile, px",
+	"mobile-row-height-required": "Une valeur de hauteur de ligne mobile est requise.",
+	"new-dashboard-title": "Nouveau titre du tableau de bord",
+	"no-dashboards-matching": "Aucun tableau de bord correspondant à {{entity}} n'a été trouvé. ",
+	"no-dashboards-text": "Aucun tableau de bord trouvé",
+	"no-image": "Aucune image sélectionnée",
+	"no-widgets": "Aucun widget configuré",
+	"open-dashboard": "Ouvrir le tableau de bord",
+	"open-toolbar": "Ouvrir la barre d'outils du tableau de bord",
+	"public": "Public",
+	"public-dashboard-notice": "<b> Remarque: </ b> N'oubliez pas de rendre publics les dispositifs associés pour accéder à leurs données.",
+	"public-dashboard-text": "Votre tableau de bord <b> {{dashboardTitle}} </ b> est maintenant public et accessible via le lien public <a href='{{publicLink}}' target='_blank'> </a>: ",
+	"public-dashboard-title": "Le tableau de bord est maintenant public",
+	"public-link": "Lien public",
+	"public-link-copied-message": "Le lien public du tableau de bord a été copié dans le presse-papier",
+	"search-states": "Recherche des états du tableau de bord",
+	"select-dashboard": "Sélectionner le tableau de bord",
+	"select-devices": "Selectionner les dispositifs",
+	"select-existing": "Sélectionnez un tableau de bord existant",
+	"select-state": "Sélectionnez l'état cible",
+	"select-widget-subtitle": "Liste des types de widgets disponibles",
+	"select-widget-title": "Sélectionner un widget",
+	"selected-states": "{count, plural, 1 {1 état du tableau de bord} other {# états du tableau de bord}} sélectionnés",
+	"set-background": "Définir l'arrière-plan",
+	"settings": "Paramètres",
+	"show-details": "Afficher les détails",
+	"socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
+	"socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
+	"state": "Etat du tableau de bord",
+	"state-controller": "Contrôleur d'état",
+	"state-id": "ID d'état",
+	"state-id-exists": "L'état du tableau de bord avec le même Id existe déjà.",
+	"state-id-required": "L'Id d'état du tableau de bord est requis.",
+	"state-name": "Nom",
+	"state-name-required": "Le nom de l'état du tableau de bord est requis",
+	"states": "Etats du tableau de bord",
+	"title": "Titre",
+	"title-color": "Couleur du titre",
+	"title-required": "Le titre est requis.",
+	"toolbar-always-open": "Garder la barre d'outils ouverte",
+	"unassign-dashboard": "Retirer le tableau de bord",
+	"unassign-dashboard-text": "Après la confirmation, le tableau de bord ne sera pas attribué et ne sera pas accessible au client.",
+	"unassign-dashboard-title": "Êtes-vous sûr de vouloir annuler l'affectation du tableau de bord '{{dashboardTitle}}'?",
+	"unassign-dashboards": "Retirer les tableaux de bord",
+	"unassign-dashboards-action-text": "Annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} des clients",
+	"unassign-dashboards-action-title": "Annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} du client",
+	"unassign-dashboards-text": "Après la confirmation, tous les tableaux de bord sélectionnés ne seront pas attribués et ne seront pas accessibles au client.",
+	"unassign-dashboards-title": "Etes-vous sûr de vouloir annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}}?",
+	"unassign-from-customer": "Retirer du client",
+	"unassign-from-customers": "Retirer les tableaux de bord des clients",
+	"unassign-from-customers-text": "Veuillez sélectionner les clients à annuler l'affectation du ou des tableaux de bord",
+	"vertical-margin": "Marge verticale",
+	"vertical-margin-required": "Une valeur de marge verticale est requise",
+	"view-dashboards": "Afficher les tableaux de bord",
+	"widget-file": "Fichier du Widget",
+	"widget-import-missing-aliases-title": "Configurer les alias utilisés par le widget importé",
+	"widgets-margins": "Marge entre les widgets"
+	},
+"datakey":{
+	"advanced": "Avancé",
+	"alarm": "Champs d'alarme",
+	"alarm-fields-required": "Les champs d'alarme sont obligatoires.",
+	"attributes": "Attributs",
+	"color": "Couleur",
+	"configuration": "Configuration de la clé de données",
+	"data-generation-func": "Fonction de génération de données",
+	"decimals": "Nombre de chiffres après virgule flottante",
+	"function-types": "Types de fonctions",
+	"function-types-required": "Les types de fonctions sont obligatoires",
+	"label": "Label",
+	"maximum-function-types": "Maximum {count, plural, 1 {1 type de fonction est autorisé.} other {# types de fonctions sont autorisés}}",
+	"maximum-timeseries-or-attributes": "Maximum {count, plural, 1 {1 timeseries / attribut est autorisé.} other {# timeseries / attributs sont autorisés}}",
+	"settings": "Paramètres",
+	"timeseries": "Timeseries",
+	"timeseries-or-attributes-required": "Les timeseries / attributs d'entité sont obligatoires.",
+	"timeseries-required": "Les Timeseries de l'entité sont obligatoires.",
+	"units": "Symbole spécial à afficher à côté de la valeur",
+	"use-data-post-processing-func": "Utiliser la fonction de post-traitement des données"
+	},
+"datasource":{
+	"add-datasource-prompt": "Veuillez ajouter une source de données",
+	"name": "Nom",
+	"type": "Type de source de données"
+	},
+"datetime":{
+	"date-from": "Date de",
+	"date-to": "Date à",
+	"time-from": "Heure de",
+	"time-to": "Heure à"
+	},
+"details":{
+	"edit-mode": "Mode édition",
+	"toggle-edit-mode": "Activer le mode édition"
+	},
+"device":{
+	"access-token": "Jeton d'accès",
+	"access-token-invalid": "La longueur du jeton d'accès doit être comprise entre 1 et 20 caractères.",
+	"access-token-required": "Le jeton d'accès est requis.",
+	"accessTokenCopiedMessage": "Le jeton d'accès au dispositif a été copié dans le presse-papier",
+	"add": "Ajouter un dispositif",
+	"add-alias": "Ajouter un alias de dispositif",
+	"add-device-text": "Ajouter un nouveau dispositif",
+	"alias": "Alias",
+	"alias-required": "Un alias du dispositif est requis.",
+	"aliases": "Alias ​​du dispositif",
+	"any-device": "N'importe quel dispositif",
+	"assign-device-to-customer": "Affecter des dispositifs au client",
+	"assign-device-to-customer-text": "Veuillez sélectionner les dispositif à affecter au client",
+	"assign-devices": "Attribuer des dispositifs",
+	"assign-devices-text": "Attribuer {count, plural, 1 {1 dispositif} other {# dispositifs}} au client",
+	"assign-new-device": "Attribuer un nouveau dispositif",
+	"assign-to-customer": "Attribuer au client",
+	"assign-to-customer-text": "Veuillez sélectionner le client pour attribuer le ou les dispositifs",
+	"assignedToCustomer": "Attribué au client",
+	"configure-alias": "Configurer '{{alias}}' alias",
+	"copyAccessToken": "Copier le jeton d'accès",
+	"copyId": "Copier l'Id du dispositif",
+	"create-new-alias": "Créez un nouveau!",
+	"create-new-key": "Créez un nouveau!",
+	"credentials": "Informations d'identification",
+	"credentials-type": "Type d'identification",
+	"delete": "Supprimer le dispositif",
+	"delete-device-text": "Faites attention, après la confirmation, le dispositif et toutes les données associées deviendront irrécupérables.",
+	"delete-device-title": "Êtes-vous sûr de vouloir supprimer le dispositif '{{deviceName}}'?",
+	"delete-devices": "Supprimer les dispositifs",
+	"delete-devices-action-title": "Supprimer {count, plural, 1 {1 dispositif} other {# dispositifs}}",
+	"delete-devices-text": "Faites attention, après la confirmation, tous les dispositifs sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-devices-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 dispositif} other {# dispositifs}}?",
+	"description": "Description",
+	"details": "Détails",
+	"device": "Dispositif",
+	"device-alias": "Alias ​​du dispositif",
+	"device-credentials": "Informations d'identification du dispositif",
+	"device-details": "Détails du dispositif",
+	"device-list": "Liste des dispositifs",
+	"device-list-empty": "Aucun dispositif sélectionné.",
+	"device-name-filter-no-device-matched": "Aucun dispositif commençant par '{{device}} n'a été trouvé.",
+	"device-name-filter-required": "Le filtre de nom de dispositif est requis.",
+	"device-public": "Le dispositif est public",
+	"device-required": "Le dispositif est requis.",
+	"device-type": "Type de dispositif",
+	"device-type-list-empty": "Aucun type de dispositif sélectionné.",
+	"device-type-required": "Le type de dispositif est requis.",
+	"device-types": "Types de dispositif",
+	"devices": "Dispositifs",
+	"duplicate-alias-error": "Alias ​​en double trouvé '{{alias}}'. <br> Les alias de dispositifs doivent être uniques dans le tableau de bord.",
+	"enter-device-type": "Entrez le type de dispositif",
+	"events": "Événements",
+	"idCopiedMessage": "l'Id du dispositif a été copié dans le presse-papiers",
+	"is-gateway": "Est une passerelle",
+	"make-private": "Rendre le dispositif privé",
+	"make-private-device-text": "Après la confirmation, le dispositif et toutes ses données seront rendues privées et ne seront pas accessibles par d'autres.",
+	"make-private-device-title": "Etes-vous sûr de vouloir rendre le dispositif {{deviceName}} privé?",
+	"make-public": "Rendre le dispositif public",
+	"make-public-device-text": "Après la confirmation, le dispositif et toutes ses données seront rendus publics et accessibles par d'autres.",
+	"make-public-device-title": "Êtes-vous sûr de vouloir rendre le dispositif {{deviceName}} 'public?",
+	"manage-credentials": "Gérer les informations d'identification",
+	"management": "Gestion des dispositifs",
+	"name": "Nom",
+	"name-required": "Le nom est requis.",
+	"name-starts-with": "Le nom du dispositif commence par",
+	"no-alias-matching": "'{{alias}}' introuvable.",
+	"no-aliases-found": "Aucun alias trouvé.",
+	"no-device-types-matching": "Aucun type de dispositif correspondant à {{entitySubtype}} n'a été trouvé.",
+	"no-devices-matching": "Aucun dispositif correspondant à '{{entity}} n'a été trouvé.",
+	"no-devices-text": "Aucun dispositif trouvé",
+	"no-key-matching": "'{{key}}' introuvable.",
+	"no-keys-found": "Aucune clé trouvée",
+	"public": "Public",
+	"remove-alias": "Supprimer l'alias du dispositif",
+	"rsa-key": "Clé publique RSA",
+	"rsa-key-required": "La clé publique RSA est requise.",
+	"secret": "Secret",
+	"secret-required": "Code secret est requis.",
+	"select-device": "Selectionner un dispositif",
+	"select-device-type": "Sélectionner le type d'appareil",
+	"unable-delete-device-alias-text": "L'alias du dispositif '{{deviceAlias}}' ne peut pas être supprimé car il est utilisé par les widgets suivants: <br/> {{widgetsList}}",
+	"unable-delete-device-alias-title": "Impossible de supprimer l'alias du dispositif",
+	"unassign-device": "Annuler l'affectation du dispositif",
+	"unassign-device-text": "Après la confirmation, le dispositif ne sera pas attribué et ne sera pas accessible au client.",
+	"unassign-device-title": "Êtes-vous sûr de vouloir annuler l'affection du dispositif {{deviceName}} '?",
+	"unassign-devices": "Annuler l'affectation des dispositifs",
+	"unassign-devices-action-title": "Annuler l'affectation de {count, plural, 1 {1 dispositif} other {#dispositifs}} du client",
+	"unassign-devices-text": "Après la confirmation, tous les dispositifs sélectionnés ne seront pas attribues et ne seront pas accessibles par le client.",
+	"unassign-devices-title": "Voulez-vous vraiment annuler l'affectation de {count, plural, 1 {1 dispositif} other {# dispositifs}}?",
+	"unassign-from-customer": "Retirer du client",
+	"use-device-name-filter": "Utiliser le filtre",
+	"view-credentials": "Afficher les informations d'identification",
+	"view-devices": "Afficher les dispositifs"
+	},
+"dialog":{ 
+	"close": "Fermer le dialogue"
+	},
+"entity" : {
+	"add-alias": "Ajouter un alias d'entité",
+	"alarm-name-starts-with": "Les alarmes dont le nom commence par '{{prefix}}'",
+	"alias": "Alias",
+	"alias-required": "Un alias d'entité est requis.",
+	"aliases": "alias d'entité",
+	"all-subtypes": "Tout",
+	"any-entity": "Toute entité",
+	"asset-name-starts-with": "Les Assets dont le nom commence par '{{prefix}}'",
+	"configure-alias": "Configurer '{{alias}}' alias",
+	"create-new-alias": "Créez un nouveau!",
+	"create-new-key": "Créez un nouveau!",
+	"customer-name-starts-with": "Les clients dont les noms commencent par '{{prefix}}'",
+	"dashboard-name-starts-with": "Les tableaux de bord dont les noms commencent par '{{prefix}}'",
+	"details": "Détails de l'entité",
+	"device-name-starts-with": "Dispositifs dont le nom commence par '{{prefix}}'",
+	"duplicate-alias-error": "Alias ​​en double trouvé '{{alias}}'. <br> Les alias d'entité doivent être uniques dans le tableau de bord.",
+	"enter-entity-type": "Entrez le type d'entité",
+	"entities": "Entités",
+	"entity": "Entité",
+	"entity-alias": "Alias de l'entité",
+	"entity-list": "Liste d'entités",
+	"entity-list-empty": "Aucune entité sélectionnée.",
+	"entity-name": "Nom de l'entité",
+	"entity-name-filter-no-entity-matched": "Aucune entité commençant par '{{entity}}' n'a été trouvée.",
+	"entity-name-filter-required": "Le filtre de nom d'entité est requis.",
+	"entity-type": "Type d'entité",
+	"entity-type-list": "Liste de types d'entités",
+	"entity-type-list-empty": "Aucun type d'entité sélectionné.",
+	"entity-types": "Types d'entité",
+	"key": "Clé",
+	"key-name": "Nom de la clé",
+	"list-of-alarms": "{count, plural, 1 {Une alarme} other {Liste de # alarmes}}",
+	"list-of-assets": "{count, plural, 1 {Un Asset} other {Liste de # Assets}}",
+	"list-of-customers": "{count, plural, 1 {Un client} other {Liste de # clients}}",
+	"list-of-dashboards": "{count, plural, 1 {Un tableau de bord} other {Liste de # tableaux de bord}}",
+	"list-of-devices": "{count, plural, 1 {Un dispositif} other {Liste de # dispositifs}}",
+	"list-of-plugins": "{count, plural, 1 {Un plugin} other {Liste de # plugins}}",
+	"list-of-rulechains": "{count, plural, 1 {Une chaîne de règles} other {Liste de # chaînes de règles}}",
+	"list-of-rulenodes": "{count, plural, 1 {Un noeud de règles} other {Liste de # noeuds de règles}}",
+	"list-of-rules": "{count, plural, 1 {Une règle} other {Liste de # règles}}",
+	"list-of-tenants": "{count, plural, 1 {Un tenant} other {Liste de # tenants}}",
+	"list-of-users": "{count, plural, 1 {Un utilisateur} other {Liste de # utilisateurs}}",
+	"missing-entity-filter-error": "Le filtre est manquant pour l'alias '{{alias}}'.",
+	"name-starts-with": "Nom commence par",
+	"no-alias-matching": "'{{alias}}' introuvable.",
+	"no-aliases-found": "Aucun alias trouvé.",
+	"no-data": "Aucune donnée à afficher",
+	"no-entities-matching": "Aucune entité correspondant à '{{entity}}' n'a été trouvée.",
+	"no-entities-prompt": "Aucune entité trouvée",
+	"no-entity-types-matching": "Aucun type d'entité correspondant à {{entityType}} n'a été trouvé. ",
+	"no-key-matching": "'{{key}}' introuvable.",
+	"no-keys-found": "Aucune clé trouvée",
+	"plugin-name-starts-with": "Plugins dont les noms commencent par '{{prefix}}'",
+	"remove-alias": "Supprimer l'alias d'entité",
+	"rule-name-starts-with": "Règles dont les noms commencent par '{{prefix}}'",
+	"rulechain-name-starts-with": "Chaînes de règles dont les noms commencent par '{{prefix}}'",
+	"rulenode-name-starts-with": "Les noeuds de règles dont le nom commence par '{{prefix}}'",
+	"search": "Recherche d'entités",
+	"select-entities": "Sélectionner des entités",
+	"selected-entities": "{count, plural, 1 {1 entité} other {# entités}} sélectionnées",
+	"tenant-name-starts-with": "Les Tenant dont le nom commence par '{{prefix}}'",
+	"type": "Type",
+	"type-alarm": "Alarme",
+	"type-alarms": "Alarmes",
+	"type-asset": "Asset",
+	"type-assets": "Assets",
+	"type-current-customer": "Client actuel",
+	"type-customer": "Client",
+	"type-customers": "Clients",
+	"type-dashboard": "Tableau de bord",
+	"type-dashboards": "Tableaux de bord",
+	"type-device": "Dispositif",
+	"type-devices": "Dispositifs",
+	"type-plugin": "Plugin",
+	"type-plugins": "Plugins",
+	"type-required": "Le type d'entité est obligatoire.",
+	"type-rule": "Règle",
+	"type-rulechain": "Chaîne de règles",
+	"type-rulechains": "Chaînes de règles",
+	"type-rulenode": "Noeud de règle",
+	"type-rulenodes": "Noeuds de règle",
+	"type-rules": "Règles",
+	"type-tenant": "Tenant",
+	"type-tenants": "Tenants",
+	"type-user": "Utilisateur",
+	"type-users": "Utilisateurs",
+	"unable-delete-entity-alias-text": "L'alias d'entité '{{entityAlias}}' ne peut pas être supprimé car il est utilisé par les widgets suivants: <br/> {{widgetsList}}",
+	"unable-delete-entity-alias-title": "Impossible de supprimer l'alias d'entité",
+	"use-entity-name-filter": "Utiliser un filtre",
+	"user-name-starts-with": "Utilisateurs dont les noms commencent par '{{prefix}}'"
+	},
+"error":{
+	"unable-to-connect": "Impossible de se connecter au serveur! Veuillez vérifier votre connexion Internet.",
+	"unhandled-error-code": "Code d'erreur non géré: {{errorCode}}",
+	"unknown-error": "Erreur inconnue"
+	},
+"event":{
+	"alarm": "Alarme",
+	"body": "Corps",
+	"data": "Données",
+	"data-type": "Type de données",
+	"entity": "Entité",
+	"error": "erreur",
+	"errors-occurred": "Des erreurs sont survenues",
+	"event": "événement",
+	"event-time": "Heure de l'événement",
+	"event-type": "Type d'événement",
+	"failed": "Échec",
+	"message-id": "Message Id",
+	"message-type": "Type de message",
+	"messages-processed": "Messages traités",
+	"metadata": "Métadonnées",
+	"method": "Méthode",
+	"no-events-prompt": "Aucun événement trouvé",
+	"relation-type": "Type de relation",
+	"server": "Serveur",
+	"status": "Etat",
+	"success": "Succès",
+	"type": "Type",
+	"type-debug-rule-chain": "Debug",
+	"type-debug-rule-node": "Debug",
+	"type-error": "Erreur",
+	"type-lc-event": "Evénement du cycle de vie",
+	"type-stats": "Statistiques"
+	},
+"extension":{
+	"add": "Ajouter une extension",
+	"add-attribute": "Ajouter un attribut",
+	"add-attribute-request": "Ajouter une demande d'attribut",
+	"add-attribute-update": "Ajouter une mise à jour d'attribut",
+	"add-broker": "Ajouter un Broker",
+	"add-config": "Ajouter une configuration de convertisseur",
+	"add-connect-request": "Ajouter une demande de connexion",
+	"add-converter": "Ajouter un convertisseur",
+	"add-device": "Ajouter un dispositif",
+	"add-disconnect-request": "Ajouter une demande de déconnexion",
+	"add-map": "Ajouter un élément de mappage",
+	"add-server-side-rpc-request": "Ajouter une requête RPC côté serveur",
+	"add-timeseries": "Ajouter des timeseries",
+	"anonymous": "Anonyme",
+	"attr-json-key-expression": "Expression json de la clé d'attribut",
+	"attr-topic-key-expression": "Expression du topic de la clé d'attribut",
+	"attribute-filter": "Filtre d'attribut",
+	"attribute-key-expression": "Expression de clé d'attribut",
+	"attribute-requests": "Demandes d'attributs",
+	"attribute-updates": "Mises à jour des attributs",
+	"attributes": "Attributs",
+	"basic": "Basic",
+	"brokers": "Brokers",
+	"ca-cert": "Fichier de certificat CA",
+	"cert": "Fichier de certificat *",
+	"client-scope": "Portée client",
+	"configuration": "Configuration",
+	"connect-requests": "Demandes de connexion",
+	"converter-configurations": "Configurations du convertisseur",
+	"converter-id": "ID du convertisseur",
+	"converter-json": "Json",
+	"converter-json-parse": "Impossible d'analyser le convertisseur json.",
+	"converter-json-required": "Le convertisseur json est requis.",
+	"converter-type": "Type de convertisseur",
+	"converters": "Convertisseurs",
+	"credentials": "Informations d'identification",
+	"custom": "Custom",
+	"delete": "Supprimer l'extension",
+	"delete-extension-text": "Attention, après la confirmation, l'extension et toutes les données associées deviendront irrécupérables.",
+	"delete-extension-title": "Êtes-vous sûr de vouloir supprimer l'extension '{{extensionId}}'?",
+	"delete-extensions-text": "Attention, après la confirmation, toutes les extensions sélectionnées seront supprimées.",
+	"delete-extensions-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 extension} other {# extensions}}?",
+	"device-name-expression": "expression du nom du dispositif",
+	"device-name-filter": "Filtre de nom de dispositif",
+	"device-type-expression": "expression de type de dispositif",
+	"disconnect-requests": "Demandes de déconnection",
+	"drop-file": "Déposez un fichier ou cliquez pour sélectionner un fichier à télécharger.",
+	"edit": "Modifier l'extension",
+	"export-extension": "Exporter l'extension",
+	"export-extensions-configuration": "Exporter la configuration des extensions",
+	"extension-id": "Id de l'extension",
+	"extension-type": "Type d'extension",
+	"extensions": "Extensions",
+	"field-required": "Le champ est obligatoire",
+	"file": "Fichier d'extensions",
+	"filter-expression": "Expression du filtre",
+	"host": "Hôte",
+	"id": "Id",
+	"import-extension": "Importer une extension",
+	"import-extensions": "Importer des extensions",
+	"import-extensions-configuration": "Importer la configuration des extensions",
+	"invalid-file-error": "Fichier d'extension non valide",
+	"json-name-expression": "Expression json du nom du dispositif",
+	"json-parse": "Impossible d'analyser json transformer.",
+	"json-required": "Transformer json est requis.",
+	"json-type-expression": "Expression json du type de dispositif",
+	"key": "Clé",
+	"mapping": "Mappage",
+	"method-filter": "Filtre de méthode",
+	"modbus-add-server": "Ajouter serveur/esclave",
+	"modbus-add-server-prompt": "Veuillez ajouter  serveur/esclave",
+	"modbus-attributes-poll-period": "Période d'interrogation des attributs (ms)",
+	"modbus-baudrate": "Débit en bauds",
+	"modbus-byte-order": "Ordre des octets",
+	"modbus-databits": "Bits de données",
+	"modbus-databits-range": "Les bits de données doivent être compris entre 7 et 8.",
+	"modbus-device-name": "Nom du dispositif",
+	"modbus-encoding": "Encodage",
+	"modbus-function": "Fonction",
+	"modbus-parity": "parité",
+	"modbus-poll-period": "Période d'interrogation (ms)",
+	"modbus-poll-period-range": "La période d'interrogation doit être une valeur positive.",
+	"modbus-port-name": "Nom du port série",
+	"modbus-register-address": "Adresse du registre",
+	"modbus-register-address-range": "L'adresse du registre doit être comprise entre 0 et 65535.",
+	"modbus-register-bit-index": "Bit index",
+	"modbus-register-bit-index-range": "L'index de bit doit être compris entre 0 et 15.",
+	"modbus-register-count": "Nombre de registre",
+	"modbus-register-count-range": "Le nombre de registres doit être une valeur positive.",
+	"modbus-server": "Serveurs / esclaves",
+	"modbus-stopbits": "Bits d'arrêt",
+	"modbus-stopbits-range": "Les bits d'arrêt doivent être compris entre 1 et 2.",
+	"modbus-tag": "Tag",
+	"modbus-timeseries-poll-period": "Période d'interrogation des Timeseries (ms)",
+	"modbus-transport": "Transport",
+	"modbus-unit-id": "Id de l'unité",
+	"modbus-unit-id-range": "L'ID de l'unité doit être compris entre 1 et 247.",
+	"no-file": "Aucun fichier sélectionné.",
+	"opc-add-server": "Ajouter un serveur",
+	"opc-add-server-prompt": "Veuillez ajouter un serveur",
+	"opc-application-name": "Nom de l'application",
+	"opc-application-uri": "Uri de l'application",
+	"opc-device-name-pattern": "modèle de nom du dispositif",
+	"opc-device-node-pattern": "modèle de noeud de dispositif",
+	"opc-identity": "Identité",
+	"opc-keystore": "Magasin de clés",
+	"opc-keystore-alias": "Alias",
+	"opc-keystore-key-password": "Mot de passe de la clé",
+	"opc-keystore-location": "Emplacement *",
+	"opc-keystore-password": "Mot de passe",
+	"opc-keystore-type": "Type",
+	"opc-scan-period-in-seconds": "Période d'analyse en secondes",
+	"opc-security": "Sécurité",
+	"opc-server": "Serveurs",
+	"opc-type": "Type",
+	"password": "Mot de passe",
+	"pem": "PEM",
+	"port": "Port",
+	"port-range": "Le port doit être compris entre 1 et 65535.",
+	"private-key": "Fichier de clé privée *",
+	"request-id-expression": "Expression de demande d'id",
+	"request-id-json-expression": "Expression json de la demande d'id",
+	"request-id-topic-expression": "Expression de la demande d'id du topic",
+	"request-topic-expression": "Expression de la demande du topic",
+	"response-timeout": "Délai de réponse en millisecondes",
+	"response-topic-expression": "Expression du topic de la réponse",
+	"retry-interval": "Intervalle de nouvelle tentative en millisecondes",
+	"selected-extensions": "{count, plural, 1 {1 extension} other {# extensions}} sélectionné",
+	"server-side-rpc": "RPC côté serveur",
+	"ssl": "Ssl",
+	"sync":{
+	"last-sync-time": "Dernière heure de synchronisation",
+	"not-available": "Non disponible",
+	"not-sync": "Non sync",
+	"status": "Status",
+	"sync": "Sync"
+	},
+	"timeout": "Délai d'attente en millisecondes",
+	"timeseries": "Timeseries",
+	"to-double": "To Double",
+	"token": "Jeton de sécurité",
+	"topic": "Topic",
+	"topic-expression": "Expression du topic",
+	"topic-filter": "Filtre du topic",
+	"topic-name-expression": "Expression du nom du dispositif (topic)",
+	"topic-type-expression": "Expression de type de dispositif (topic)",
+	"transformer": "Transformer",
+	"transformer-json": "JSON *",
+	"type": "Type",
+	"unique-id-required": "L'identifiant d'extension actuel existe déjà.",
+	"username": "Nom d'utilisateur",
+	"value": "Valeur",
+	"value-expression": "Expression de la valeur"
+	},
+"fullscreen":{
+	"exit": "Quitter le plein écran",
+	"expand": "Afficher en plein écran",
+	"fullscreen": "Plein écran",
+	"toggle": "Activer le mode plein écran"
+	},
+"function":{
+	"function": "Fonction"
+	},
+"grid":{
+	"add-item-text": "Ajouter un nouvel élément",
+	"delete-item": "Supprimer l'élément",
+	"delete-item-text": "Faites attention, après la confirmation, cet élément et toutes les données associées deviendront irrécupérables.",
+	"delete-item-title": "Êtes-vous sûr de vouloir supprimer cet élément?",
+	"delete-items": "Supprimer les éléments",
+	"delete-items-action-title": "Supprimer {count, plural, 1 {1 élément} other {# éléments}}",
+	"delete-items-text": "Attention, après la confirmation, tous les éléments sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-items-title": "Etes-vous sûr de vouloir supprimer {count, plural, 1 {1 élément} other {# éléments}}?",
+	"item-details": "Détails de l'élément",
+	"no-items-text": "Aucun élément trouvé",
+	"scroll-to-top": "Défiler vers le haut"
+	},
+"help":{
+	"goto-help-page": "Aller à la page d'aide"
+	},
+"home":{
+	"avatar": "Avatar",
+	"home": "Accueil",
+	"logout": "Déconnexion",
+	"menu": "Menu",
+	"open-user-menu": "Ouvrir le menu utilisateur",
+	"profile": "Profile"
+	},
+"icon":{
+	"icon": "Icône",
+	"material-icons": "Material icons",
+	"select-icon": "Sélectionner l'icône",
+	"show-all": "Afficher toutes les icônes"
+	},
+"import":{
+	"drop-file": "Déposez un fichier JSON ou cliquez pour sélectionner un fichier à télécharger.",
+	"no-file": "Aucun fichier sélectionné"
+	},
+"item":{
+	"selected": "Sélectionné"
+	},
+"js-func":{
+	"no-return-error": "La fonction doit renvoyer une valeur!",
+	"return-type-mismatch": "La fonction doit renvoyer une valeur de type '{{type}}' !",
+	"tidy": "Tidy"
+	},
+"key-val":{
+	"add-entry": "Ajouter une entrée",
+	"key": "Clé",
+	"no-data": "Aucune entrée",
+	"remove-entry": "Supprimer l'entrée",
+	"value": "Valeur"
+	},
+"language":{
+	"language": "Language",
+	"locales":{
+	"en_US": "Anglais",
+	"fr_FR": "Français",
+	"es_ES": "Espagnol",
+	"it_IT": "Italien",
+	"ko_KR": "Coréen",
+	"ru_RU": "Russe",
+	"zh_CN": "Chinois"
+	}
+	},
+"layout":{
+	"color": "Couleur",
+	"layout": "Mise en page",
+	"main": "Principal",
+	"manage": "Gérer les mises en page",
+	"right": "Droite",
+	"select": "Sélectionner la mise en page cible",
+	"settings": "Paramètres de mise en page"
+	},
+"legend":{
+	"avg": "avg",
+	"max": "max",
+	"min": "min",
+	"position": "Position de la légende",
+	"settings": "Paramètres de la légende",
+	"show-avg": "Afficher la valeur moyenne",
+	"show-max": "Afficher la valeur maximale",
+	"show-min": "Afficher la valeur min",
+	"show-total": "Afficher la valeur totale",
+	"total": "total"
+	},
+"login":{
+	"create-password": "Créer un mot de passe",
+	"email": "Email",
+	"forgot-password": "Mot de passe oublié?",
+	"login": "Login",
+	"new-password": "Nouveau mot de passe",
+	"new-password-again": "nouveau mot de passe",
+	"password-again": "Mot de passe à nouveau",
+	"password-link-sent-message": "Le lien de réinitialisation du mot de passe a été envoyé avec succès!",
+	"password-reset": "Mot de passe réinitialisé",
+	"passwords-mismatch-error": "Les mots de passe saisis doivent être identiques!",
+	"remember-me": "Se souvenir de moi",
+	"request-password-reset": "Demander la réinitialisation du mot de passe",
+	"reset-password": "Réinitialiser le mot de passe",
+	"sign-in": "Veuillez vous connecter",
+	"username": "Nom d'utilisateur (email)"
+	},
+"position":{
+	"bottom": "Bas",
+	"left": "Gauche",
+	"right": "Droite",
+	"top": "Haut"
+	},
+"profile":{
+	"change-password": "Modifier le mot de passe",
+	"current-password": "Mot de passe actuel",
+	"profile": "Profile"
+	},
+"relation":{
+	"add": "Ajouter une relation",
+	"add-relation-filter": "Ajouter un filtre de relation",
+	"additional-info": "Informations supplémentaires (JSON)",
+	"any-relation": "toute relation",
+	"any-relation-type": "N'importe quel type",
+	"delete": "Supprimer la relation",
+	"delete-from-relation-text": "Attention, après la confirmation, l'entité actuelle ne sera pas liée à l'entité '{{entityName}}'.",
+	"delete-from-relation-title": "Etes-vous sûr de vouloir supprimer la relation de l'entité '{{entityName}}'?",
+	"delete-from-relations-text": "Attention, après la confirmation, toutes les relations sélectionnées seront supprimées et l'entité actuelle ne sera pas liée aux entités correspondantes.",
+	"delete-from-relations-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 relation} other {# relations}}?",
+	"delete-to-relation-text": "Attention, après la confirmation, l'entité '{{entityName}} ne sera plus liée à l'entité actuelle.",
+	"delete-to-relation-title": "Êtes-vous sûr de vouloir supprimer la relation avec l'entité '{{entityName}}'?",
+	"delete-to-relations-text": "Attention, après la confirmation, toutes les relations sélectionnées seront supprimées et les entités correspondantes ne seront pas liées à l'entité en cours.",
+	"delete-to-relations-title": "Etes-vous sûr de vouloir supprimer {count, plural, 1 {1 relation} other {# relations}}?",
+	"direction": "Sens",
+	"direction-type":{
+	"FROM": "de",
+	"TO": "à"
+	},
+	"edit": "Modifier la relation",
+	"from-entity": "De l'entité",
+	"from-entity-name": "Du nom d'entité",
+	"from-entity-type": "Du type d'entité",
+	"from-relations": "Relations sortantes",
+	"invalid-additional-info": "Impossible d'analyser les informations supplémentaires json.",
+	"relation-filters": "Filtres de relation",
+	"relation-type": "Type de relation",
+	"relation-type-required": "Le type de relation est requis.",
+	"relations": "Relations",
+	"remove-relation-filter": "Supprimer le filtre de relation",
+	"search-direction":{
+	"FROM": "De",
+	"TO": "À"
+	},
+	"selected-relations": "{count, plural, 1 {1 relation} other {# relations}} sélectionné",
+	"to-entity": "À l'entité",
+	"to-entity-name": "vers le nom de l'entité",
+	"to-entity-type": "Vers le type d'entité",
+	"to-relations": "Relations entrantes",
+	"type": "Type"
+	},
+"rulechain":{
+	"add": "Ajouter une chaîne de règles",
+	"add-rulechain-text": "Ajouter une nouvelle chaîne de règles",
+	"copyId": "Copier l'identifiant de la chaîne de règles",
+	"create-new-rulechain": "Créer une nouvelle chaîne de règles",
+	"debug-mode": "Mode de débogage",
+	"delete": "Supprimer la chaîne de règles",
+	"delete-rulechain-text": "Attention, après la confirmation, la chaîne de règles et toutes les données associées deviendront irrécupérables.",
+	"delete-rulechain-title": "Voulez-vous vraiment supprimer la chaîne de règles '{{ruleChainName}}'?",
+	"delete-rulechains-action-title": "Supprimer {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}}",
+	"delete-rulechains-text": "Attention, après la confirmation, toutes les chaînes de règles sélectionnées seront supprimées et toutes les données associées deviendront irrécupérables.",
+	"delete-rulechains-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 chaîne de règles} other {#  chaînes de règles}}?",
+	"description": "Description",
+	"details": "Détails",
+	"events": "Evénements",
+	"export": "Exporter la chaîne de règles",
+	"export-failed-error": "Impossible d'exporter la chaîne de règles: {{error}}",
+	"idCopiedMessage": "L'ID de la chaîne de règles a été copié dans le presse-papier",
+	"import": "Importer la chaîne de règles",
+	"invalid-rulechain-file-error": "Impossible d'importer la chaîne de règles: structure de données de la chaîne de règles non valide",
+	"management": "Gestion des règles",
+	"name": "Nom",
+	"name-required": "Le nom est requis.",
+	"no-rulechains-matching": "Aucune chaîne de règles correspondant à {{entity}} n'a été trouvée.",
+	"no-rulechains-text": "Aucune chaîne de règles trouvée",
+	"root": "Racine",
+	"rulechain": "Chaîne de règles",
+	"rulechain-details": "Détails de la chaîne de règles",
+	"rulechain-file": "Fichier de chaîne de règles",
+	"rulechain-required": "Chaîne de règles requise",
+	"rulechains": "Chaînes de règles",
+	"select-rulechain": "Sélectionner la chaîne de règles",
+	"set-root": "Rend la chaîne de règles racine (root) ",
+	"set-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra racine (root) et gérera tous les messages de transport entrants.",
+	"set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine  (root) ?",
+	"system": "Système"
+	},
+"rulenode":{
+	"add": "Ajouter un noeud de règle",
+	"add-link": "Ajouter un lien",
+	"configuration": "Configuration",
+	"copy-selected": "Copier les éléments sélectionnés",
+	"create-new-link-label": "Créez un nouveau!",
+	"custom-link-label": "Etiquette de lien personnalisée",
+	"custom-link-label-required": "Une étiquette de lien personnalisée est requise",
+	"debug-mode": "Mode de débogage",
+	"delete": "Supprimer le noeud de règle",
+	"delete-selected": "Supprimer les éléments sélectionnés",
+	"delete-selected-objects": "Supprimer les nœuds et les connexions sélectionnés",
+	"description": "Description",
+	"deselect-all": "Désélectionner tout",
+	"deselect-all-objects": "Désélectionnez tous les nœuds et toutes les connexions",
+	"details": "Détails",
+	"directive-is-not-loaded": "La directive de configuration définie '{{directiveName}} n'est pas disponible.",
+	"events": "Événements",
+	"help": "Aide",
+	"invalid-target-rulechain": "Impossible de résoudre la chaîne de règles cible!",
+	"link": "Lien",
+	"link-details": "Détails du lien du noeud de la règle",
+	"link-label": "Étiquette du lien",
+	"link-label-required": "L'étiquette du lien est obligatoire",
+	"link-labels": "Étiquettes de lien",
+	"link-labels-required": "Les étiquettes de lien sont obligatoires",
+	"message": "Message",
+	"message-type": "Type de message",
+	"message-type-required": "Le type de message est obligatoire",
+	"metadata": "Métadonnées",
+	"metadata-required": "Les entrées de métadonnées ne peuvent pas être vides.",
+	"name": "Nom",
+	"name-required": "Le nom est requis.",
+	"no-link-label-matching": "'{{label}}' introuvable.",
+	"no-link-labels-found": "Aucune étiquette de lien trouvée",
+	"open-node-library": "Ouvrir la bibliothèque de noeud",
+	"output": "Output",
+	"rulenode-details": "Détails du noeud de la règle",
+	"search": "Recherche de noeuds",
+	"select-all": "Tout sélectionner",
+	"select-all-objects": "Sélectionnez tous les noeuds et connexions",
+	"select-message-type": "Sélectionner le type de message",
+	"test": "Test",
+	"test-script-function": "Tester le script",
+	"type": "Type",
+	"type-action": "Action",
+	"type-action-details": "Effectuer une action spéciale",
+	"type-enrichment": "Enrichissement",
+	"type-enrichment-details": "Ajouter des informations supplémentaires dans les métadonnées de message",
+	"type-external": "Externe",
+	"type-external-details": "Interagit avec le système externe",
+	"type-filter": "Filtre",
+	"type-filter-details": "Filtrer les messages entrants avec des conditions configurées",
+	"type-input": "Input",
+	"type-input-details": "Entrée logique de la chaîne de règles, transmet les messages entrants au prochain nœud de règle associé",
+	"type-rule-chain": "Chaîne de règles",
+	"type-rule-chain-details": "Transmet les messages entrants à la chaîne de règles spécifiée",
+	"type-transformation": "Transformation",
+	"type-transformation-details": "Modifier le payload du message  et les métadonnées ",
+	"type-unknown": "Inconnu",
+	"type-unknown-details": "Noeud de règle non résolu",
+	"ui-resources-load-error": "Impossible de charger les ressources de configuration de l'interface utilisateur."
+	},
+"tenant":{
+	"add": "Ajouter un Tenant",
+	"add-tenant-text": "Ajouter un nouveau Tenant",
+	"admins": "Admins",
+	"copyId": "Copier l'Id du Tenant",
+	"delete": "Supprimer le Tenant",
+	"delete-tenant-text": "Attention, après la confirmation, le Tenant et toutes les données associées deviendront irrécupérables.",
+	"delete-tenant-title": "Etes-vous sûr de vouloir supprimer le tenant '{{tenantTitle}}'?",
+	"delete-tenants-action-title": "Supprimer {count, plural, 1 {1 tenant} other {# tenants}}",
+	"delete-tenants-text": "Attention, après la confirmation, tous les Tenants sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-tenants-title": "Etes-vous sûr de vouloir supprimer {count, plural, 1 {1 tenant} other {# tenants}}?",
+	"description": "Description",
+	"details": "Détails",
+	"events": "Événements",
+	"idCopiedMessage": "L'Id  du Tenant a été copié dans le Presse-papiers",
+	"manage-tenant-admins": "Gérer les administrateurs du Tenant",
+	"management": "Gestion des Tenants",
+	"no-tenants-matching": "Aucun Tenant correspondant à {{entity}} n'a été trouvé. ",
+	"no-tenants-text": "Aucun Tenant trouvé",
+	"select-tenant": "Sélectionner un Tenant",
+	"tenant": "Tenant",
+	"tenant-details": "Détails du Tenant",
+	"tenant-required": "Tenant requis",
+	"tenants": "Tenants",
+	"title": "Titre",
+	"title-required": "Le titre est requis."
+	},
+"timeinterval":{
+	"advanced": "Avancé",
+	"days": "Jours",
+	"days-interval": "{days, plural, 1 {1 jour} other {# jours}}",
+	"hours": "Heures",
+	"hours-interval": "{hours, plural, 1 {1 heure} other {# heures}}",
+	"minutes": "Minutes",
+	"minutes-interval": "{minutes, plural, 1 {1 minute} other {# minutes}}",
+	"seconds": "Secondes",
+	"seconds-interval": "{seconds, plural, 1 {1 seconde} other {# secondes}}"
+	},
+"timewindow":{
+	"date-range": "Plage de dates",
+	"days": "{days, plural, 1 {jour} other {# jours}}",
+	"edit": "Modifier timewindow",
+	"history": "Historique",
+	"hours": "{hours, plural, 0 {heure} 1 {1 heure} other {# heures}}",
+	"last": "Dernier",
+	"last-prefix": "dernier",
+	"minutes": "{minutes, plural, 0 {minute} 1 {1 minute} other {# minutes}}",
+	"period": "de {{startTime}} à {{endTime}}",
+	"realtime": "Temps réel",
+	"seconds": "{seconds, plural, 0 {second} 1 {1 second} other {# seconds}}",
+	"time-period": "Période"
+	},
+"user":{
+	"activation-email-sent-message": "L'e-mail d'activation a été envoyé avec succès!",
+	"activation-link": "Lien d'activation utilisateur",
+	"activation-link-copied-message": "le lien d'activation de l'utilisateur a été copié dans le presse-papier",
+	"activation-link-text": "Pour activer l'utilisateur, utilisez le lien d'activation  suivant:  <a href='{{activationLink}}' target='_blank'></a>",
+	"activation-method": "Méthode d'activation",
+	"add": "Ajouter un utilisateur",
+	"add-user-text": "Ajouter un nouvel utilisateur",
+	"always-fullscreen": "Toujours en plein écran",
+	"anonymous": "Anonyme",
+	"copy-activation-link": "Copier le lien d'activation",
+	"customer": "Client",
+	"customer-users": "Utilisateurs du client",
+	"default-dashboard": "Tableau de bord par défaut",
+	"delete": "Supprimer l'utilisateur",
+	"delete-user-text": "Attention, après la confirmation, l'utilisateur et toutes les données associées deviendront irrécupérables.",
+	"delete-user-title": "Etes-vous sûr de vouloir supprimer l'utilisateur '{{userEmail}}'?",
+	"delete-users-action-title": "Supprimer {count, plural, 1 {1 utilisateur} other {# utilisateurs}}",
+	"delete-users-text": "Attention, après la confirmation, tous les utilisateurs sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-users-title": "Etes-vous sûr de vouloir supprimer {count, plural, 1 {1 utilisateur} other {# utilisateurs}}?",
+	"description": "Description",
+	"details": "Détails",
+	"display-activation-link": "Afficher le lien d'activation",
+	"email": "Email",
+	"email-required": "Email est requis.",
+	"first-name": "Prénom",
+	"invalid-email-format": "Format de courrier électronique non valide",
+	"last-name": "Nom de famille",
+	"no-users-matching": "Aucun utilisateur correspondant à '{{entity}}' n'a été trouvé.",
+	"no-users-text": "Aucun utilisateur trouvé",
+	"resend-activation": "Renvoyer l'activation",
+	"select-user": "Sélectionner l'utilisateur",
+	"send-activation-mail": "Envoyer un mail d'activation",
+	"sys-admin": "Administrateur du système",
+	"tenant-admin": "Administrateur du Tenant",
+	"tenant-admins": "administrateurs du Tenant",
+	"user": "utilisateur",
+	"user-details": "Détails de l'utilisateur",
+	"user-required": "L'utilisateur est requis",
+	"users": "Utilisateurs"
+	},
+"value":{
+	"boolean": "booléen",
+	"boolean-value": "Valeur booléenne",
+	"double": "Double",
+	"double-value": "Valeur double",
+	"false": "Faux",
+	"integer": "Entier",
+	"integer-value": "Valeur entière",
+	"invalid-integer-value": "Valeur entière invalide",
+	"long": "Long",
+	"string": "String",
+	"string-value": "Valeur String",
+	"true": "Vrai",
+	"type": "Type de valeur"
+	},
+"widget":{
+	"add": "Ajouter un widget",
+	"add-resource": "Ajouter une ressource",
+	"add-widget-type": "Ajouter un nouveau type de widget",
+	"alarm": "Widget d'alarme",
+	"css": "CSS",
+	"datakey-settings-schema": "Schéma des paramètres de Data key",
+	"edit": "Modifier le widget",
+	"editor": " Editeur de widget",
+	"export": "Exporter widget",
+	"html": "HTML",
+	"javascript": "Javascript",
+	"latest-values": "Dernières valeurs",
+	"management": "Gestion des widgets",
+	"missing-widget-title-error": "Le titre du widget doit être spécifié!",
+	"no-data-found": "Aucune donnée trouvée",
+	"remove": "Supprimer le widget",
+	"remove-resource": "Supprimer une ressource",
+	"remove-widget-text": "Après la confirmation, le widget et toutes les données associées deviendront irrécupérables.",
+	"remove-widget-title": "Êtes-vous sûr de vouloir supprimer le widget '{{widgetTitle}}'?",
+	"remove-widget-type": "Supprimer le type de widget",
+	"remove-widget-type-text": "Après la confirmation, le type de widget et toutes les données associées deviendront irrécupérables.",
+	"remove-widget-type-title": "Êtes-vous sûr de vouloir supprimer le type de widget '{{widgetName}}'?",
+	"resource-url": "URL JavaScript / CSS",
+	"resources": "Ressources",
+	"rpc": "Widget de contrôle",
+	"run": "Exécuter un widget",
+	"save": "Enregistrer le widget",
+	"save-widget-type-as": "Enregistrer le type de widget sous",
+	"save-widget-type-as-text": "Veuillez saisir un nouveau titre de widget et / ou sélectionner un ensemble de widgets cibles",
+	"saveAs": "Enregistrer le widget sous",
+	"search-data": "Rechercher des données",
+	"select-widget-type": "Sélectionnez le type de widget",
+	"select-widgets-bundle": "Sélectionner un ensemble de widgets",
+	"settings-schema": "Schéma des paramètres",
+	"static": "Widget statique",
+	"tidy": "Tidy",
+	"timeseries": "Séries chronologiques",
+	"title": "Titre du widget",
+	"title-required": "Le titre du widget est requis.",
+	"toggle-fullscreen": "Basculer le mode plein écran",
+	"type": "Type de widget",
+	"unable-to-save-widget-error": "Impossible de sauvegarder le widget! Le widget a des erreurs!",
+	"undo": "Annuler les modifications du widget",
+	"widget-bundle": "Ensemble de widget",
+	"widget-library": "Bibliothèque de widgets",
+	"widget-saved": "Widget enregistré",
+	"widget-template-load-failed-error": "Impossible de charger le modèle de widget!",
+	"widget-type-load-error": "Le widget n'a pas été chargé à cause des erreurs suivantes:",
+	"widget-type-load-failed-error": "Impossible de charger le type de widget!",
+	"widget-type-not-found": "Problème de chargement de la configuration du widget. <br> Le type de widget associé a probablement été supprimé."
+	},
+"widget-action":{
+	"custom": "Action personnalisée",
+	"header-button": "Bouton d'en-tête de widget",
+	"open-dashboard": "Naviguer vers un autre tableau de bord",
+	"open-dashboard-state": "Naviguer vers un nouvel état du tableau de bord",
+	"open-right-layout": "Ouvrir la disposition du tableau de bord droite (vue mobile)",
+	"set-entity-from-widget": "Définir l'entité à partir du widget",
+	"target-dashboard": "Tableau de bord cible",
+	"target-dashboard-state": "Etat du tableau de bord cible",
+	"target-dashboard-state-required": "L'état du tableau de bord cible est requis",
+	"update-dashboard-state": "Mettre à jour l'état actuel du tableau de bord"
+	},
+"widget-config":{
+	"action": "Action",
+	"action-icon": "Icône",
+	"action-name": "Nom",
+	"action-name-not-unique": "Une autre action portant le même nom existe déjà. <br/> Le nom de l'action doit être unique dans la même source d'action.",
+	"action-name-required": "Le nom de l'action est requis",
+	"action-source": "Source de l'action",
+	"action-source-required": "Une source d'action est requise.",
+	"action-type": "Type",
+	"action-type-required": "Le type d'action est requis.",
+	"actions": "Actions",
+	"add-action": "Ajouter une action",
+	"add-datasource": "Ajouter une source de données",
+	"advanced": "Avancé",
+	"alarm-source": "Source d'alarme",
+	"background-color": "couleur de fond",
+	"data": "Données",
+	"datasource-parameters": "Paramètres",
+	"datasource-type": "Type",
+	"datasources": "Sources de données",
+	"decimals": "Nombre de chiffres après virgule flottante",
+	"delete-action": "Supprimer l'action",
+	"delete-action-text": "Etes-vous sûr de vouloir supprimer l'action du widget nommé '{{actionName}}'?",
+	"delete-action-title": "Supprimer l'action du widget",
+	"display-legend": "Afficher la légende",
+	"display-title": "Afficher le titre",
+	"drop-shadow": "Ombre portée",
+	"edit-action": "Modifier l'action",
+	"enable-fullscreen": "Activer le plein écran",
+	"general-settings": "Paramètres généraux",
+	"height": "Hauteur",
+	"margin": "Marge",
+	"maximum-datasources": "Maximum {count, plural, 1 {1 datasource est autorisé.} other {# datasources sont autorisés}}",
+	"mobile-mode-settings": "Paramètres du mode mobile",
+	"order": "Ordre",
+	"padding": "Padding",
+	"remove-datasource": "Supprimer la source de données",
+	"search-actions": "Recherche d'actions",
+	"settings": "Paramètres",
+	"target-device": "Dispositif cible",
+	"text-color": "Couleur du texte",
+	"timewindow": "Fenêtre de temps",
+	"title": "Titre",
+	"title-style": "Style de titre",
+	"units": "Symbole spécial à afficher à côté de la valeur",
+	"use-dashboard-timewindow": "Utiliser la fenêtre de temps du tableau de bord",
+	"widget-style": "Style du widget"
+	},
+"widget-type":{
+	"create-new-widget-type": "Créer un nouveau type de widget",
+	"export": "Exporter le type de widget",
+	"export-failed-error": "Impossible d'exporter le type de widget: {{error}}",
+	"import": "Importer le type de widget",
+	"invalid-widget-type-file-error": "Impossible d'importer le type de widget: structure de données de type widget invalide.",
+	"widget-type-file": "Fichier de type Widget"
+	},
+"widgets-bundle":{
+	"add": "Ajouter un groupe de widgets",
+	"add-widgets-bundle-text": "Ajouter un nouveau groupe de widgets",
+	"create-new-widgets-bundle": "Créer un nouveau groupe de widgets",
+	"current": "Groupe actuel",
+	"delete": "Supprimer le groupe de widgets",
+	"delete-widgets-bundle-text": "Attention, après la confirmation, le groupe de widgets et toutes les données associées deviendront irrécupérables.",
+	"delete-widgets-bundle-title": "Êtes-vous sûr de vouloir supprimer le groupe de widgets '{{widgetsBundleTitle}}'?",
+	"delete-widgets-bundles-action-title": "Supprimer {count, plural, 1 {1 groupe de widgets} other {# groupes de widgets}}",
+	"delete-widgets-bundles-text": "Attention, après la confirmation, tous les groupes de widgets sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
+	"delete-widgets-bundles-title": "Voulez-vous vraiment supprimer {count, plural, 1 {1 groupe de widgets} other {# groupes de widgets}}?",
+	"details": "Détails",
+	"empty": "Le groupe de widgets est vide",
+	"export": "Exporter le groupe de widgets",
+	"export-failed-error": "Impossible d'exporter le groupe de widgets: {{error}}",
+	"import": "Importer un groupe de widgets",
+	"invalid-widgets-bundle-file-error": "Impossible d'importer un groupe de widgets: structure de données du groupe de widgets non valides.",
+	"no-widgets-bundles-matching": "Aucun groupe de widgets correspondant à {{widgetsBundle}} n'a été trouvé.",
+	"no-widgets-bundles-text": "Aucun groupe de widgets trouvé",
+	"system": "Système",
+	"title": "Titre",
+	"title-required": "Le titre est requis.",
+	"widgets-bundle-details": "Détails des groupes de widgets",
+	"widgets-bundle-file": "Fichier de groupe de widgets",
+	"widgets-bundle-required": "Un groupe de widgets est requis.",
+	"widgets-bundles": "Groupes de widgets"
+	}
+}
diff --git a/ui/src/app/locale/locale.constant-it_IT.json b/ui/src/app/locale/locale.constant-it_IT.json
index 7212b30..fcdd745 100644
--- a/ui/src/app/locale/locale.constant-it_IT.json
+++ b/ui/src/app/locale/locale.constant-it_IT.json
@@ -1434,6 +1434,7 @@
     "language": {
         "language": "Lingua",
         "locales": {
+			"fr_FR": "Francese",
             "zh_CN": "Cinese",
             "ko_KR": "Coreano",
             "en_US": "Inglese",
diff --git a/ui/src/app/locale/locale.constant-ko_KR.json b/ui/src/app/locale/locale.constant-ko_KR.json
index a4c8bcb..6027ef8 100644
--- a/ui/src/app/locale/locale.constant-ko_KR.json
+++ b/ui/src/app/locale/locale.constant-ko_KR.json
@@ -1329,6 +1329,7 @@
         "language": "언어",
         "locales": {
             "en_US": "영어",
+			"fr_FR": "프랑스의",
             "ko_KR": "한글",
             "zh_CN": "중국어",
             "ru_RU": "러시아어",
diff --git a/ui/src/app/locale/locale.constant-ru_RU.json b/ui/src/app/locale/locale.constant-ru_RU.json
index d017c63..9d2c713 100644
--- a/ui/src/app/locale/locale.constant-ru_RU.json
+++ b/ui/src/app/locale/locale.constant-ru_RU.json
@@ -1354,6 +1354,7 @@
         "language": "Язык",
         "locales": {
             "en_US": "Английский",
+			"fr_FR": "Французский",
             "zh_CN": "Китайский",
             "ko_KR": "Корейский",
             "es_ES": "Испанский",
diff --git a/ui/src/app/locale/locale.constant-zh_CN.json b/ui/src/app/locale/locale.constant-zh_CN.json
index d9cb7b1..042d230 100644
--- a/ui/src/app/locale/locale.constant-zh_CN.json
+++ b/ui/src/app/locale/locale.constant-zh_CN.json
@@ -1438,6 +1438,7 @@
         "language": "语言",
         "locales": {
             "en_US": "英语",
+			"fr_FR": "法国",
             "ko_KR": "韩语",
             "zh_CN": "汉语",
             "ru_RU": "俄语",