diff --git a/app/translations/fr_FR.json b/app/translations/fr_FR.json
new file mode 100644
index 00000000..ea97cdfb
--- /dev/null
+++ b/app/translations/fr_FR.json
@@ -0,0 +1,305 @@
+{
+ "login": {
+ "forgotPassword": "Mot de Passe Oublié",
+ "login": "Connexion",
+ "password": "Mot de Passe",
+ "username": "Nom d'Utilisateur"
+ },
+ "error": {
+ "hereIsTheError": "Il y a une erreur",
+ "contact": "Contacter le Support de Crafty Control via Discord",
+ "terribleFailure": "C'est une Terrible Erreur !",
+ "embarassing": "Oulà, c'est embarrassant.",
+ "error": "Erreur !"
+ },
+ "404": {
+ "contact": "Contacter le Support de Crafty Control via Discord",
+ "unableToFind": "Nous ne parvenons pas à trouver la page que tu cherches. Réessaye ou reviens en arrière et rafrachis la page s'il te plaît.",
+ "notFound": "Page Non Trouvée"
+ },
+ "footer": {
+ "version": "Version",
+ "copyright": "Copyright",
+ "allRightsReserved": "Tous droits réservés"
+ },
+ "sidebar": {
+ "dashboard": "Tableau de Bord",
+ "servers": "Serveurs",
+ "documentation": "Documentation",
+ "credits": "Crédits",
+ "contribute": "Contribuer",
+ "newServer": "Créer un Nouveau Serveur",
+ "navigation": "Navigation"
+ },
+ "serverWizard": {
+ "newServer": "Créer un Nouveau Serveur",
+ "importServer": "Importer un Serveur Existant",
+ "importZip": "Importer depuis un Fichier Zip",
+ "serverName": "Non du Serveur",
+ "serverPath": "Chemin du Serveur",
+ "serverType": "Type du Serveur",
+ "absoluteServerPath": "Chemin absolu de Votre Serveur",
+ "serverJar": "Fichier Jar du Serveur",
+ "minMem": "Mémoire Minimum",
+ "maxMem": "Mémoire Maximum",
+ "serverPort": "Port du Serveur",
+ "defaultPort": "25565 par défaut",
+ "sizeInGB": "Taille en GB",
+ "zipPath": "Chemin du Serveur",
+ "absoluteZipPath": "Chemin absolu de Votre Serveur",
+ "resetForm": "Réinitialiser Formulaire",
+ "importServerButton": "Importer Serveur !",
+ "buildServer": "Créer Server!",
+ "quickSettings": "Paramètres Rapides",
+ "quickSettingsDescription": "Pas d'Inquiétude, tu peux changer tout ça polus tard",
+ "myNewServer": "Mon Nouveau Serveur",
+ "bePatient": "Merci de patienter pendant que nous ' + (importing ? 'importons' : 'téléchargeons') + ' le serveur",
+ "importing": "Importation du Serveur ...",
+ "downloading": "Téléchargement du Serveur ..."
+ },
+ "dashboard": {
+ "dashboard": "Tableau de Bord",
+ "memUsage": "Utilisation Mémoire",
+ "cpuUsage": "Utilisation CPU",
+ "host": "Hôte",
+ "players": "Joueurs",
+ "backups": "Sauvegardes",
+ "newServer": "Créer un Nouveau Serveur",
+ "allServers": "Tous les Serverus",
+ "server": "Serveur",
+ "actions": "Actions",
+ "world": "Monde",
+ "status": "Statut",
+ "online": "En Ligne",
+ "offline": "Hors Ligne",
+ "lastBackup": "Dernier:",
+ "nextBackup": "Prochain:",
+ "servers": "Serveurs",
+ "cannotSeeOnMobile": "Impossible de tout voir sur mobile ?",
+ "cannotSeeOnMobile2": "Essaie de déplacer le tableau sur le côté.",
+ "max": "Max",
+ "avg": "Moy",
+ "bePatientStart": "Merci de patienter pendant que nous démarrons le serveur.
Cet écran se mettra à jour dans quelques instants",
+ "bePatientStop": "Merci de patienter pendant que nous arrêtons le serveur.
Cet écran se mettra à jour dans quelques instants",
+ "bePatientRestart": "Merci de patienter pendant que nous redémarrons le serveur.
Cet écran se mettra à jour dans quelques instants",
+ "bePatientClone": "Merci de patienter pendant que nous clonons le serveur.
Cet écran se mettra à jour dans quelques instants",
+ "sendingCommand": "Envoi de votre commande",
+ "cpuCurFreq": "Fréquence CPU actuelle",
+ "cpuMaxFreq": "Fréquence CPU Maximum",
+ "cpuCores": "Coeurs CPU"
+ },
+ "accessDenied": {
+ "accessDenied": "Accès Interdit",
+ "noAccess": "Vous n'avez pas accès à cette ressource",
+ "contactAdmin": "Contacte ton administrateur du serveur pour avoir accès à cette ressource, ou si tu penses que tu devrais avoir accès à cette ressource, contactes le support.",
+ "contact": "Contacter le Support de Crafty Control via Discord"
+ },
+ "serverStats": {
+ "online": "En Ligne",
+ "offline": "Hors Ligne",
+ "serverStatus": "Statut du Serveur",
+ "serverStarted": "Serveur Démarré",
+ "serverUptime": "Serveur Disponible depuis",
+ "players": "Joueurs",
+ "memUsage": "Utilisation Mémoire",
+ "cpuUsage": "Utilisation CPU",
+ "version": "Version",
+ "description": "Description",
+ "errorCalculatingUptime": "Erreur de Calcul du Temps de Disponibilité",
+ "serverTime": "Temps UTC",
+ "unableToConnect": "Impossible de se Connecter"
+ },
+ "serverDetails": {
+ "serverDetails": "Détails Serveur",
+ "terminal": "Terminal",
+ "logs": "Logs",
+ "schedule": "Tâches Planifiées",
+ "backup": "Sauvegardes",
+ "files": "Fichiers",
+ "config": "Configuration",
+ "playerControls": "Gestion des Joueurs"
+ },
+ "serverTerm": {
+ "stopScroll": "Stopper l'Auto Défilement",
+ "commandInput": "Entre ta commande",
+ "sendCommand": "Envoiyer commande",
+ "start": "Démarrer",
+ "restart": "Redémarrer",
+ "stop": "Arrêter",
+ "updating": "Mise à Jour ..."
+ },
+ "serverPlayerManagement": {
+ "players": "Joueurs",
+ "bannedPlayers": "Joueurs Bannins",
+ "loadingBannedPlayers": "Chargement des Joueurs Bannis"
+ },
+ "serverBackups": {
+ "backupNow": "Sauvegarder Maintenant !",
+ "backupAtMidnight": "Sauvegarde Automatique à minuit ?",
+ "storageLocation": "Emplacement de Sauvegarde",
+ "storageLocationDesc": "Où veux-tu enregister tes sauvegardes ?",
+ "maxBackups": "Sauvergardes Max",
+ "maxBackupsDesc": "Crafty ne fera pas plus de N sauvegardes, supprimant les plus anciennes (entrer 0 pour toutes les garder)",
+ "save": "Sauvegarder",
+ "cancel": "Annuler",
+ "currentBackups": "Sauvegardes Actuelles",
+ "download": "Télécharger",
+ "path": "Chemin",
+ "size": "Taille",
+ "delete": "Supprimer",
+ "backupTask": "Une sauvegarde vient de démarrer.",
+ "destroyBackup": "Supprimer la sauvegarde \" + file_to_del + \" ?",
+ "confirmDelete": "Es-tu sûr de vouloir supprimer cette sauvegarde ? Tu ne pourras pas revenir en arrière.",
+ "confirm": "Confirmer"
+ },
+ "serverFiles": {
+ "noscript": "Le gestionnaire de fichiers ne fonctionne pas sans JavaScript",
+ "error": "Erreur lors de la récupération des fichiers",
+ "files": "Fichiers",
+ "default": "Défaut",
+ "save": "Sauvegarder",
+ "editingFile": "Edition du fichier",
+ "delete": "Supprimer",
+ "createFile": "Créer fichier",
+ "createDir": "Créer dossier",
+ "rename": "Renommer",
+ "createFileQuestion": "Quel nom veux-tu donner au nouveau fichier ?",
+ "createDirQuestion": "Quel nom veux-tu donner au nouveau dossier ?",
+ "renameItemQuestion": "Quel devrait être le nouveau nom ?",
+ "deleteItemQuestion": "Es-tu sûr de vouloir supprimer \" + name + \" ?",
+ "deleteItemQuestionMessage": "Tu es en train de supprimer \\\"\" + path + \"\\\"!
Cette action sera irréversible et ce sera perdu pour toujours !",
+ "yesDelete": "Oui, je comprends les conséquences",
+ "noDelete": "Non",
+ "unsupportedLanguage": "Attention : Ce n'est pas un type de fichier supporté",
+ "keybindings": "Raccourcis Clavier",
+ "fileReadError": "Erreur de Lecture du Fichier"
+ },
+ "serverConfig": {
+ "serverName": "Nom du Serveur",
+ "serverNameDesc": "Comment veux-tu appeler ce serveur ?",
+ "serverPath": "Dossier de Travail du Serveur",
+ "serverPathDesc": "Chemin absolu (n'incluant pas l'exécutable)",
+ "serverLogLocation": "Emplacement des Logs du Serveur",
+ "serverLogLocationDesc": "Chemin absolu du fichier de logs",
+ "serverExecutable": "Exécutable du Serveur",
+ "serverExecutableDesc": "Le fichier exécutable du serveur",
+ "serverExecutionCommand": "Commande d'Exécution du Serveur",
+ "serverExecutionCommandDesc": "Ce qui sera lancé dans un terminal en arrière plan",
+ "serverStopCommand": "Commande d'Arrêt du Serveur",
+ "serverStopCommandDesc": "Commande à envoyer pour l'arrêter",
+ "serverAutostartDelay": "Délai d'Autodémarrage du Serveur",
+ "serverAutostartDelayDesc": "Délai avant autodémarrage (Si activé ci-dessous)",
+ "serverIP": "Adresse IP du Serveur",
+ "serverIPDesc": "Adresse IP à laquelle Crafty doit se connecter pour les stats (Essaye une adresse IP réelle au lieu de 127.0.0.1 si tu as des problèmes)",
+ "serverPort": "Port du Serveur",
+ "serverPortDesc": "Port auquel Crafty doit se connecter pour les stats",
+ "removeOldLogsAfter": "Supprimer les Anciens Logs après",
+ "removeOldLogsAfterDesc": "Combien de jours le fichier doit avoir avant d'être supprimé (0 pour jamais)",
+ "serverAutoStart": "Autodémarrage du Serveur",
+ "serverCrashDetection": "Détaction de Plantage du Serveur",
+ "save": "Sauvegarder",
+ "cancel": "Annuler",
+ "deleteServer": "Supprimer Serveur",
+ "stopBeforeDeleting": "Merci d'arrêter le serveur avant de le supprimer",
+ "exeUpdateURLDesc": "Lien URL de Téléchargement Direct pour les mises à jour.",
+ "exeUpdateURL": "Lien URL de mise à jour de l'exécutable du Serveur",
+ "update": "Mettre à Jour l'Exécutable",
+ "bePatientUpdate": "Merci de patienter pendant la mise à jour du Serveur. La durée de téléchargement dépend de votre vitesse de connexion internet.
Cet écran se mettra à jour dans quelques instants",
+ "sendingRequest": "Envoi de votre requête ...",
+ "deleteServerQuestion": "Supprimer le Serveur ?",
+ "deleteServerQuestionMessage": "Es-tu sur de vouloir supprimer ce Serveur ? Après ça, il n'y aura pas de retour en arrière ...",
+ "yesDelete": "Oui, Supprimer",
+ "noDelete": "Non, revenir en arrière",
+ "deleteFilesQuestion": "Supprimer les fichiers de la machine ?",
+ "deleteFilesQuestionMessage": "Veux-tu que Crafty supprime tous les fichiers du serveur de la machine hôte ?",
+ "yesDeleteFiles": "Oui, Supprimer les fichier",
+ "noDeleteFiles": "Non, Supprimer uniquement du tabelau de bord",
+ "sendingDelete": "Suppression du Serveur",
+ "bePatientDelete": "Merci de patienter pendant la suppression du serveur du tableau de bord de Crafty. Cet écran se fermera dans quelques instants.",
+ "bePatientDeleteFiles" : "Merci de patienter pendant la suppression du serveur du tableau de bord de Crafty et des fichiers de la machine hôte. Cet écran se fermera dans quelques instants."
+ },
+ "serverConfigHelp": {
+ "title": "Zone de Configuration du Serveur",
+ "desc": "Ici, tu peux changer la configuration de ton Serveur",
+ "perms": [
+ "Il est recommendé de NE PAS
changer le chemin d'un serveur géré par Crafty.",
+ "Changer le chemin PEUT
casser des choses, surtout sur les systèmes d'opération de type Linux où les permissions sur les fichiers sont plus restreintes.",
+ "
",
+ "Si tu penses que tu dois changer l'emplacement d'un serveur, tu dois t'assurer que tu donne à l'utilisateur \"crafty\" la permission de lire et écrire à cet emplacement du serveur.",
+ "
",
+ "
",
+ "Sous Linux la meilleure façon de faire est d'exécuter les commandes suivantes :
",
+ "",
+ " sudo chown crafty:crafty /chemin/de/ton/serveur -R
",
+ " sudo chmod 2775 /chemin/de/ton/serveu -R
",
+ "
"
+ ]
+ },
+ "datatables": {
+ "i18n": {
+ "decimal": "",
+ "emptyTable": "Aucune donnée disponible dans le table",
+ "info": "Affichage de _START_ to _END_ entrées sur _TOTAL_",
+ "infoEmpty": "Affichage des entrées 0 à 0 sur 0 entrées",
+ "infoFiltered": "(filtré sur un total de _MAX_ entrées)",
+ "infoPostFix": "",
+ "thousands": ",",
+ "lengthMenu": "Afficher _MENU_ entrées",
+ "loadingRecords": "Chargement ...",
+ "processing": "Traitement ...",
+ "search": "Recherche :",
+ "zeroRecords": "Aucun enregistrement correspondant trouvcé",
+ "paginate": {
+ "first": "Première",
+ "last": "Dernière",
+ "next": "Suivante",
+ "previous": "Précédente"
+ },
+ "aria": {
+ "sortAscending": ": activer pour trier les colonnes dans l'ordre croissant",
+ "sortDescending": ": activer pour trier les colonnes dans l'ordre décroissant"
+ },
+ "buttons": {
+ "collection": "Collection ",
+ "colvis": "Visibilité de la Colonne",
+ "colvisRestore": "Restaurer la visibilité",
+ "copy": "Copier",
+ "copyKeys": "Presser ctrl or u2318 + C pour copier les données de la table dans le presse papier.
Pour annuler, clicker sur ce message ou presser échap.",
+ "copySuccess": {
+ "1": "1 ligne copiée dans le presse papier",
+ "_": "%d lignes copiées dans le presse papier"
+ },
+ "copyTitle": "Copier dans le Presse Papier",
+ "csv": "CSV",
+ "excel": "Excel",
+ "pageLength": {
+ "-1": "Afficher toutes les lignes",
+ "1": "Afficher 1 ligne",
+ "_": "Afficher %d lignes"
+ },
+ "pdf": "PDF",
+ "print": "Imprimer"
+ },
+ "select": {
+ "rows": {
+ "0": "Clicker sur une ligne pour la sélectionner",
+ "1": "%d ligne sélectionnée",
+ "_": "%d lignes sélectionnées"
+ },
+ "cells": {
+ "0": "Clicker sur une cellule pour la sélectionner",
+ "1": "%d cellule sélectionnée",
+ "_": "%d cellules sélectionnées"
+ },
+ "columns": {
+ "0": "Clicker sur une colonne pour la sélectionner",
+ "1": "%d colonne sélectionnée",
+ "_": "%d colonnes sélectionnées"
+ }
+ }
+ }
+ },
+ "base": {
+ "doesNotWorkWithoutJavascript": "Attention: Crafty ne fonctionne pas correctement si JavaScript n'est pas activé !"
+ }
+}
\ No newline at end of file