diff --git a/resources/lang/fr.json b/resources/lang/fr.json
index 9be5066e6b..6aec2c89a2 100644
--- a/resources/lang/fr.json
+++ b/resources/lang/fr.json
@@ -1,4 +1,127 @@
{
+ "Authlog": "Journal d'authentification",
+ "User": "Utilisateur",
+ "IP Address": "Adresse IP",
+ "Result": "Résultat",
+ "Translation not fully supported": "La traduction n'est pas entièrement prise en charge",
+ "Warning :service_count": "Attention :service_count",
+ "Critical :service_count": "Critique :service_count",
+ "Disabled :port_count": "Désactivé :port_count",
+ "Errored :port_count": "Erreurs :port_count",
+ "Ignored :port_count": "Ignoré :port_count",
+ "Down :port_count": "Down :port_count",
+ "Deleted :port_count": "Supprimé :port_count",
+ "About :project_name": "À propos :project_name",
+ "See the list of contributors on GitHub.": "Consultez la liste des contributeurs sur GitHub.",
+ "Docs": "Documentations",
+ "Close": "Fermer",
+ "LibreNMS is an autodiscovering PHP/MySQL-based network monitoring system": "LibreNMS est un système de surveillance réseau basé sur PHP / MySQL à découverte automatique.",
+ "Packages": "Paquets",
+ "Disabled": "Désactivé",
+ "Version": "Version",
+ "Database Schema": "Schéma de base de données",
+ "Web Server": "Serveur Web",
+ "LibreNMS is a community-based project": "LibreNMS est un projet basé sur la communauté",
+ "Please feel free to join us and contribute code, documentation, and bug reports:": "N'hésitez pas à nous rejoindre et à contribuer au code, à la documentation et aux rapports de bug:",
+ "Web site": "Site Web",
+ "Bug tracker": "Traqueur de bug",
+ "Community Forum": "Forum de la communauté",
+ "Changelog": "Journal des changements",
+ "Local git log": "Local git log",
+ "Contributors": "Contributeurs",
+ "Acknowledgements": "Remerciements",
+ "Opt in to send anonymous usage statistics to LibreNMS?": "Activer pour envoyer des statistiques d'utilisation anonymes à LibreNMS?",
+ "Online stats:": "Statistiques en ligne",
+ "Clear remote stats": "Effacer les statistiques à distance",
+ "IPv4 Addresses": "Adresses IPv4",
+ "IPv4 Networks": "Réseaux IPv4",
+ "IPv6 Addresses": "Adresses IPv6",
+ "IPv6 Networks": "Réseaux IPv6",
+ "Processors": "Processeurs",
+ "Applications": "Applications",
+ "Disk I/O": "Disque I / O",
+ "Syslog Entries": "Entrées Syslog",
+ "Eventlog Entries": "Entrées du journal des événements",
+ "Sensors": "Capteurs",
+ "Wireless Sensors": "Capteurs sans fil",
+ "Toner": "Toner",
+ "License": "License",
+ "Select Devices": "Sélectionner les périphériques",
+ "Dynamic": "Dynamique",
+ "Static": "Statique",
+ "Define Rules": "Définir les règles",
+ "Create Device Group": "Créer un groupe de périphériques",
+ "Edit Device Group": "Modifier le groupe de périphériques",
+ "New Device Group": "Nouveau groupe de périphérique",
+ "Pattern": "Modèle",
+ "Type": "Type",
+ "Name": "Prénom",
+ "User Preferences": "Préférences de l'utilisateur",
+ "Global Administrative Access": "Accès administratif global",
+ "Device Permissions": "Autorisations de périphérique",
+ "Preferences": "Préférences",
+ "Language": "Langue",
+ "Change Password": "Changer le mot de passe",
+ "Verify New Password": "Vérifier le nouveau mot de passe",
+ "Peering + Transit": "Peering + Transit",
+ "FDB Tables": "Tables FDB",
+ "ARP Tables": "Tables ARP",
+ "MAC Address": "Adresse MAC",
+ "IPv6 Address": "Adresse IPv6",
+ "IPv4 Address": "Adresse IPv4",
+ "Package": "Paquet",
+ "Virtual Machines": "Machines virtuelles",
+ "Device Groups": "Groupes de périphériques",
+ "Register": "S'enregistrer",
+ "Overview": "Vue d'ensemble",
+ "Maps": "Cartes",
+ "Availability": "Disponibilité",
+ "Device Groups Maps": "Cartes de groupes de périphériques",
+ "Geographical": "Géographique",
+ "Plugins": "Plugins",
+ "Plugin Admin": "Plugin Admin",
+ "Tools": "Outils",
+ "Eventlog": "Journal des événements",
+ "Inventory": "Inventaire",
+ "MIB definitions": "Définitions MIB",
+ "No devices": "Aucun périphérique ",
+ "MIB associations": "Associations MIB",
+ "Manage Groups": "Gérer les groupes",
+ "Device Dependencies": "Dépendances du périphérique",
+ "Add Device": "Ajouter un périphérique",
+ "Delete Device": "Supprimer le périphérique",
+ "All Services": "Tous les services",
+ "Add Service": "Ajouter un service",
+ "Traffic Bills": "Factures de traffic",
+ "Pseudowires": "Pseudowires",
+ "Customers": "Clients",
+ "Transit": "Transit",
+ "Core": "Coeur",
+ "Alerts": "Alertes",
+ "Deleted": "Supprimé",
+ "Health": "Santé",
+ "Memory": "Mémoire",
+ "Processor": "Processeur",
+ "Storage": "Stockage",
+ "Wireless": "Sans-fil",
+ "Apps": "Applications",
+ "Routing": "Routage",
+ "Alerted": "Alerte",
+ "Notifications": "Notifications",
+ "Alert History": "Historique d'alerte",
+ "Statistics": "Statistiques",
+ "Alert Rules": "Règles d'alerte",
+ "Scheduled Maintenance": "Maintenance prévue",
+ "Alert Templates": "Modèles d'alerte",
+ "Alert Transports": "Alert Transports",
+ "My Settings": "Mes Paramètres",
+ "Settings": "Paramètres",
+ "Global Settings": "Paramètres globaux",
+ "Validate Config": "Valider la configuration",
+ "Auth History": "Historique d'authentification",
+ "Peering": "Peering",
+ "API Settings": "Paramètres de l'API",
+ "API Docs": "Documentation API",
"Shutdown": "Arrêt",
"The :attribute must a valid IP address\/network or hostname.": ":attribute doit avoir une adresse IP valide ou un nom d'hôte valide.",
"Never polled": "Jamais sondé",
diff --git a/resources/lang/fr/sensors.php b/resources/lang/fr/sensors.php
new file mode 100644
index 0000000000..e534b4eab5
--- /dev/null
+++ b/resources/lang/fr/sensors.php
@@ -0,0 +1,169 @@
+ [
+ 'short' => "Flux d'air",
+ 'long' => "Flux d'air",
+ 'unit' => 'cfm',
+ 'unit_long' => 'mètre cube par minute',
+ ],
+ 'ber' => [
+ 'short' => 'BER',
+ 'long' => "Taux d'erreurs",
+ 'unit' => '',
+ 'unit_long' => '',
+ ],
+ 'charge' => [
+ 'short' => 'Charge',
+ 'long' => 'Pourcentage de charge',
+ 'unit' => '%',
+ 'unit_long' => 'Pourcent',
+ ],
+ 'chromatic_dispersion' => [
+ 'short' => 'Dispersion chromatique',
+ 'long' => 'Dispersion chromatique',
+ 'unit' => 'ps/nm/km',
+ 'unit_long' => 'Picosecondes par nanomètre par kilomètre',
+ ],
+ 'cooling' => [
+ 'short' => 'Refroidissement',
+ 'long' => '',
+ 'unit' => 'W',
+ 'unit_long' => 'Watts',
+ ],
+ 'count' => [
+ 'short' => 'Count',
+ 'long' => 'Count',
+ 'unit' => '',
+ 'unit_long' => '',
+ ],
+ 'current' => [
+ 'short' => 'Courant',
+ 'long' => 'Courant',
+ 'unit' => 'A',
+ 'unit_long' => 'Ampères',
+ ],
+ 'dbm' => [
+ 'short' => 'dBm',
+ 'long' => 'dBm',
+ 'unit' => 'dBm',
+ 'unit_long' => 'Décibel-Milliwatts',
+ ],
+ 'delay' => [
+ 'short' => 'Delay',
+ 'long' => 'Delay',
+ 'unit' => 's',
+ 'unit_long' => 'Seconds',
+ ],
+ 'eer' => [
+ 'short' => 'EER',
+ 'long' => "Ratio d'efficacité énergétique",
+ 'unit' => '',
+ 'unit_long' => '',
+ ],
+ 'fanspeed' => [
+ 'short' => 'Vitesse du ventilateur',
+ 'long' => 'Vitesse du ventilateur',
+ 'unit' => 'RPM',
+ 'unit_long' => 'Rotations par Minute',
+ ],
+ 'frequency' => [
+ 'short' => 'Fréquence',
+ 'long' => 'Fréquence',
+ 'unit' => 'Hz',
+ 'unit_long' => 'Hertz',
+ ],
+ 'humidity' => [
+ 'short' => 'Humidité',
+ 'long' => "Pourcentage d'humidité",
+ 'unit' => '%',
+ 'unit_long' => 'Pourcent',
+ ],
+ 'load' => [
+ 'short' => 'Charge',
+ 'long' => 'Pourcentage de charge',
+ 'unit' => '%',
+ 'unit_long' => 'Pourcent',
+ ],
+ 'power' => [
+ 'short' => 'Puissance',
+ 'long' => 'Puissance',
+ 'unit' => 'W',
+ 'unit_long' => 'Watts',
+ ],
+ 'power_consumed' => [
+ 'short' => 'Puissance consommée',
+ 'long' => 'Puissance consommée',
+ 'unit' => 'kWh',
+ 'unit_long' => 'Kilowatt-heure',
+ ],
+ 'power_factor' => [
+ 'short' => 'Facteur de puissance',
+ 'long' => 'Facteur de puissance',
+ 'unit' => '',
+ 'unit_long' => '',
+ ],
+ 'pressure' => [
+ 'short' => 'Pression',
+ 'long' => 'Pression',
+ 'unit' => 'kPa',
+ 'unit_long' => 'Kilopascal',
+ ],
+ 'quality_factor' => [
+ 'short' => 'Facteur de qualité',
+ 'long' => 'Facteur de qualité',
+ 'unit' => '',
+ 'unit_long' => '',
+ ],
+ 'runtime' => [
+ 'short' => "Temps d'éxécution",
+ 'long' => "Temps d'éxécution",
+ 'unit' => 'Min',
+ 'unit_long' => 'Minutes',
+ ],
+ 'signal' => [
+ 'short' => 'Signal',
+ 'long' => 'Signal',
+ 'unit' => 'dBm',
+ 'unit_long' => 'Decibel-milliwatt',
+ ],
+ 'snr' => [
+ 'short' => 'SNR',
+ 'long' => 'Rapport signal sur bruit',
+ 'unit' => 'dB',
+ 'unit_long' => 'Decibel',
+ ],
+ 'state' => [
+ 'short' => 'Etat',
+ 'long' => 'Etat',
+ 'unit' => '',
+ ],
+ 'temperature' => [
+ 'short' => 'Température',
+ 'long' => 'Température',
+ 'unit' => '°C',
+ 'unit_long' => '° Celsius',
+ ],
+ 'voltage' => [
+ 'short' => 'Voltage',
+ 'long' => 'voltage',
+ 'unit' => 'V',
+ 'unit_long' => 'Volts',
+ ],
+ 'waterflow' => [
+ 'short' => "Ecoulement de l'eau",
+ 'long' => "Ecoulement de l'eau",
+ 'unit' => 'l/m',
+ 'unit_long' => 'Litres par minute',
+ ],
+];
diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php
new file mode 100644
index 0000000000..b25c6785c6
--- /dev/null
+++ b/resources/lang/fr/validation.php
@@ -0,0 +1,151 @@
+ ':attribute doit être accepté.',
+ 'active_url' => ":attribute n'est pas une URL valide.",
+ 'after' => ':attribute doit être une date après :date.',
+ 'after_or_equal' => ':attribute doit être une date après ou égale à :date.',
+ 'alpha' => ':attribute ne peut contenir que des lettres.',
+ 'alpha_dash' => ':attribute ne peut contenir que des lettres, des chiffres, des tirets et des underscores.',
+ 'alpha_num' => ':attribute ne peut contenir que des lettres et des chiffres.',
+ 'alpha_space' => ':attribute ne peut contenir que des lettres, des chiffres, des underscores et des espaces.',
+ 'array' => ':attribute doit être un tableau.',
+ 'before' => ':attribute doit être une date avant :date.',
+ 'before_or_equal' => ':attribute doit être une date antérieure ou égale à :date.',
+ 'between' => [
+ 'numeric' => ':attribute doit être entre :min et :max.',
+ 'file' => ':attribute doit être entre :min et :max kilobytes.',
+ 'string' => ':attribute doit être entre :min et :max caractères.',
+ 'array' => ':attribute doit être entre :min et :max objets.',
+ ],
+ 'boolean' => ':attribute le champ doit être vrai ou faux.',
+ 'confirmed' => ':attribute la confirmation ne correspond pas.',
+ 'date' => ":attribute n'est pas une date valide.",
+ 'date_equals' => ':attribute doit être une date égale à :date.',
+ 'date_format' => ':attribute ne correspond pas au format :format.',
+ 'different' => ':attribute et :other doit être différent.',
+ 'digits' => ':attribute doit être :digits chiffres.',
+ 'digits_between' => ':attribute doit être entre :min et :max chiffres.',
+ 'dimensions' => ":attribute a des dimensions d'image non valides.",
+ 'distinct' => ':attribute le champ a une valeur en double.',
+ 'email' => ':attribute doit être une adresse e-mail valide.',
+ 'ends_with' => ':attribute doit se terminer par l’un des éléments suivants: :values',
+ 'exists' => 'La sélection :attribute est invalide.',
+ 'file' => ':attribute doit être un fichier.',
+ 'filled' => 'Le champ :attribute doit avoir une valeur.',
+ 'gt' => [
+ 'numeric' => ':attribute doit être supérieur à :value.',
+ 'file' => ':attribute doit être supérieur à :value kilobytes.',
+ 'string' => ':attribute doit être supérieur à :value characters.',
+ 'array' => ':attribute doit avoir plus de :value objets.',
+ ],
+ 'gte' => [
+ 'numeric' => ':attribute doit être supérieur ou égal :value.',
+ 'file' => ':attribute doit être supérieur ou égal :value kilobytes.',
+ 'string' => ':attribute doit être supérieur ou égal :value caractères.',
+ 'array' => ':attribute doit avoir :value objets ou plus.',
+ ],
+ 'image' => ':attribute doit être une image.',
+ 'in' => 'La sélection :attribute est invalide.',
+ 'in_array' => "Le champ :attribute n'existe pas dans :other.",
+ 'integer' => ':attribute doit être un entier.',
+ 'ip' => ':attribute doit être une adresse IP valide.',
+ 'ipv4' => ':attribute doit être une adresse IPv4 valide.',
+ 'ipv6' => ':attribute doit être une adresse IPv6 valide.',
+ 'json' => ':attribute doit être une chaîne JSON valide.',
+ 'lt' => [
+ 'numeric' => ':attribute doit être inférieur à :value.',
+ 'file' => ':attribute doit être inférieur à :value kilobytes.',
+ 'string' => ':attribute doit être inférieur à :value caractères.',
+ 'array' => ':attribute doit avoir moins de :value objets.',
+ ],
+ 'lte' => [
+ 'numeric' => ':attribute doit être inférieur ou égal :value.',
+ 'file' => ':attribute doit être inférieur ou égal :value kilobytes.',
+ 'string' => ':attribute doit être inférieur ou égal :value caractères.',
+ 'array' => ':attribute ne doit pas avoir plus de :value objets.',
+ ],
+ 'max' => [
+ 'numeric' => ':attribute ne peut pas être supérieur à :max.',
+ 'file' => ':attribute ne peut pas être supérieur à :max kilobytes.',
+ 'string' => ':attribute ne peut pas être supérieur à :max caractères.',
+ 'array' => ':attribute peut ne pas avoir plus de :max objets.',
+ ],
+ 'mimes' => ':attribute doit être un fichier de type: :values.',
+ 'mimetypes' => ':attribute doit être un fichier de type: :values.',
+ 'min' => [
+ 'numeric' => ':attribute doit être au moins :min.',
+ 'file' => ':attribute doit être au moins :min kilobytes.',
+ 'string' => ':attribute doit être au moins :min caractères.',
+ 'array' => ':attribute doit avoir au moins :min objets.',
+ ],
+ 'not_in' => 'La sélection :attribute est invalide.',
+ 'not_regex' => 'Le format :attribute est invalide.',
+ 'numeric' => ':attribute must be a number.',
+ 'present' => 'Le champ :attribute doit être présent.',
+ 'regex' => 'Le format :attribute est invalide.',
+ 'required' => 'Le champ :attribute est requis.',
+ 'required_if' => 'Le champ :attribute est requis quand :other est :value.',
+ 'required_unless' => 'Le champ :attribute est requis sauf :other est dans :values.',
+ 'required_with' => 'Le champ :attribute est requis lorsque :values est présent.',
+ 'required_with_all' => 'Le champ :attribute est requis quand :values est présent.',
+ 'required_without' => "Le champ :attribute est requis quand :values n'est pas present.",
+ 'required_without_all' => 'Le champ :attribute est requis quand aucun des :values est présent.',
+ 'same' => ':attribute et :other doit correspondre.',
+ 'size' => [
+ 'numeric' => ':attribute doit être :size.',
+ 'file' => ':attribute doit être :size kilobytes.',
+ 'string' => ':attribute doit être :size caractères.',
+ 'array' => ':attribute doit contenir :size objets.',
+ ],
+ 'starts_with' => ':attribute doit commencer par l’un des éléments suivants: :values',
+ 'string' => ':attribute doit être une chaîne.',
+ 'timezone' => ':attribute doit être une zone valide.',
+ 'unique' => ':attribute a déjà été pris.',
+ 'uploaded' => ':attribute échec du téléchargement.',
+ 'url' => 'Le format :attribute est invalide.',
+ 'uuid' => ':attribute doit être un UUID valide.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'custom-message',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap our attribute placeholder
+ | with something more reader friendly such as "E-Mail Address" instead
+ | of "email". This simply helps us make our message more expressive.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/fr/wireless.php b/resources/lang/fr/wireless.php
new file mode 100644
index 0000000000..27ebea0323
--- /dev/null
+++ b/resources/lang/fr/wireless.php
@@ -0,0 +1,110 @@
+ [
+ 'short' => 'APs',
+ 'long' => "Nombre de points d'accès",
+ 'unit' => '',
+ ],
+ 'clients' => [
+ 'short' => 'Clients',
+ 'long' => 'Nombre de clients',
+ 'unit' => '',
+ ],
+ 'capacity' => [
+ 'short' => 'Capacité',
+ 'long' => 'Capacité',
+ 'unit' => '%',
+ ],
+ 'ccq' => [
+ 'short' => 'CCQ',
+ 'long' => 'Qualité de la connexion client',
+ 'unit' => '%',
+ ],
+ 'errors' => [
+ 'short' => 'Erreurs',
+ 'long' => "Nombre d'erreurs",
+ 'unit' => '',
+ ],
+ 'error-ratio' => [
+ 'short' => "Ratio d'erreur",
+ 'long' => "Bit/Paquets ratio d'erreur",
+ 'unit' => '%',
+ ],
+ 'error-rate' => [
+ 'short' => 'BER',
+ 'long' => "Taux d'erreur",
+ 'unit' => 'bps',
+ ],
+ 'frequency' => [
+ 'short' => 'Fréquence',
+ 'long' => 'Fréquence',
+ 'unit' => 'MHz',
+ ],
+ 'distance' => [
+ 'short' => 'Distance',
+ 'long' => 'Distance',
+ 'unit' => 'km',
+ ],
+ 'mse' => [
+ 'short' => 'MSE',
+ 'long' => 'Erreur quadratique moyenne',
+ 'unit' => 'dB',
+ ],
+ 'noise-floor' => [
+ 'short' => 'Bruit de fond',
+ 'long' => 'Bruit de fond',
+ 'unit' => 'dBm/Hz',
+ ],
+ 'power' => [
+ 'short' => 'Puissance/Signal',
+ 'long' => 'TX/RX Puissance ou Signal',
+ 'unit' => 'dBm',
+ ],
+ 'quality' => [
+ 'short' => 'Qualité',
+ 'long' => 'Qualité',
+ 'unit' => '%',
+ ],
+ 'rate' => [
+ 'short' => 'Taux',
+ 'long' => 'TX/RX Taux',
+ 'unit' => 'bps',
+ ],
+ 'rssi' => [
+ 'short' => 'RSSI',
+ 'long' => "Indicateur d'intensité du signal reçu",
+ 'unit' => 'dBm',
+ ],
+ 'snr' => [
+ 'short' => 'SNR',
+ 'long' => 'Rapport signal sur bruit',
+ 'unit' => 'dB',
+ ],
+ 'ssr' => [
+ 'short' => 'SSR',
+ 'long' => 'Rapport de force du signal',
+ 'unit' => 'dB',
+ ],
+ 'utilization' => [
+ 'short' => 'Utilisation',
+ 'long' => 'utilisation',
+ 'unit' => '%',
+ ],
+ 'xpi' => [
+ 'short' => 'XPI',
+ 'long' => 'Interférence polaire croisée',
+ 'unit' => 'dB',
+ ],
+
+];