feat: load plugin frontends at runtime and remove plugin ids from the shell

This commit is contained in:
LukeGus committed 2026-09-22 20:15:52 -05:00
1 parent 49f0286a14
commit e88d5a52e3
721 files changed
+54265 -44416

No files matched your search

@@ -0,0 +1,149 @@
{
"newUi": {
"sidebar": {
"automations": {
"title": "Automatisations",
"tabAutomations": "Automatisations",
"tabRuns": "Courses",
"tabChannels": "Chaînes",
"createAutomation": "Nouvelle automatisation",
"backToAutomations": "Retour aux automatisations",
"createTitle": "Nouvelle automatisation",
"editTitle": "Automatisation de la modification",
"empty": "Aucune automatisation pour le moment. Créez-en une pour qu'elle réagisse à une mesure, une planification ou un événement.",
"emptyRuns": "Pas encore de runs.",
"emptyChannels": "Aucun canal pour le moment. Ajoutez-en un pour envoyer des notifications.",
"noChannelsHint": "Aucune chaîne n'est encore configurée. Ajoutez-en une dans l'onglet Chaînes.",
"addChannel": "Ajouter une chaîne",
"testChannel": "Test",
"channelTestSent": "Notification de test envoyée",
"channelTestFailed": "La notification de test a échoué",
"channelDeleted": "Chaîne supprimée",
"deleteChannelConfirm": "Supprimer ce canal ? Les automatisations qui l'utilisent cesseront d'envoyer des notifications.",
"nameLabel": "Nom",
"namePlaceholder": "Par exemple, nettoyer le répertoire /data lorsqu'il est plein.",
"nameRequired": "Le nom est requis.",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Description facultative",
"enabledLabel": "Activé",
"concurrencyLabel": "S'il est déjà en cours d'exécution",
"concurrencyHint": "Que faire si ce problème se reproduit avant la fin de la dernière exécution ?",
"concurrency": {
"skip": "Évitez la nouvelle course",
"queue": "Attendez et courez après",
"allow": "Exécutez les deux simultanément."
},
"save": "Sauvegarder",
"created": "L'automatisation a créé",
"updated": "L'automatisation a permis de sauver",
"deleted": "Automatisation supprimée",
"deleteConfirm": "Supprimer cette automatisation ? Son historique d'exécution est également supprimé.",
"runNow": "Courez maintenant",
"testRun": "Essai",
"testRunHint": "Exécute chaque étape mais ne touche à rien en dehors de Termix.",
"runStarted": "La course a commencé",
"runFinished": "Course terminée : {{status}}",
"trigger": "Déclenchement",
"steps": "Mesures",
"addStep": "Ajouter une étape",
"removeStep": "Supprimer l'étape",
"moveUp": "Monter en gamme",
"moveDown": "Descendre",
"noSteps": "Aucune étape pour l'instant. Ajoutez-en une pour décrire ce qui doit se passer.",
"webhookTokenTitle": "URL du webhook",
"webhookTokenDescription": "Ceci ne s'affiche qu'une seule fois. Enregistrez-le maintenant, il ne pourra pas être récupéré ultérieurement.",
"copy": "Copie",
"copied": "Copié",
"viewJson": "JSON",
"viewBuilder": "Constructeur",
"viewGraph": "Graphique",
"lastRun": "Dernière course",
"never": "Jamais",
"duration": "{{seconds}}s",
"stepOutput": "Sortir",
"stepError": "Erreur",
"dryRunBadge": "Essai",
"hostSelector": {
"trigger": "Hôte déclencheur",
"host": "hôte spécifique",
"fleet": "Flotte",
"all": "Tous les hôtes"
},
"triggerKinds": {
"metric_threshold": "Seuil métrique",
"host_status": "L'hôte monte ou descend",
"health_check": "changements au bilan de santé",
"schedule": "Selon un horaire",
"docker_event": "événement conteneur",
"internal_event": "Événement Termix",
"webhook": "Webhook entrant"
},
"stepTypes": {
"notify": "Envoyer une notification",
"http": "Appeler une URL",
"run_snippet": "Exécuter un extrait de code",
"run_command": "Exécuter une commande",
"docker": "Contrôler un conteneur",
"tunnel": "Contrôler un tunnel",
"wol": "Réveillez un hôte",
"wait": "Attendez",
"set_var": "Définir une variable",
"if": "Si / sinon",
"run_automation": "Exécutez une autre automatisation",
"stop": "Arrêt"
},
"statuses": {
"running": "En cours d'exécution",
"success": "Succès",
"failed": "Échoué",
"timeout": "Délai d'attente dépassé",
"skipped": "Omission",
"cancelled": "Annulé"
},
"fields": {
"host": "Hôte",
"metric": "Métrique",
"mount": "Point de montage",
"operator": "Est",
"value": "Valeur",
"forSeconds": "Maintenu pendant (secondes)",
"cooldown": "Temps de récupération (minutes)",
"cron": "Expression de Cron",
"intervalSeconds": "Toutes les (secondes)",
"timezone": "Fuseau horaire",
"timezoneServer": "Heure du serveur",
"timezoneHint": "Les heures des tâches cron sont lues dans cette zone. Ceci ne s'applique pas aux planifications par intervalles.",
"container": "Récipient",
"command": "Commande",
"url": "URL",
"method": "Méthode",
"body": "Corps",
"channels": "Chaînes",
"title": "Titre",
"message": "Message",
"snippet": "Fragment",
"seconds": "Secondes",
"conditionLeftPlaceholder": "Valeur à vérifier",
"conditionRightPlaceholder": "Comparer à",
"variableName": "Nom de la variable",
"variableValue": "Valeur",
"elevated": "Exécuter avec sudo",
"onError": "Si cela échoue",
"allowPrivateNetwork": "Autoriser les adresses réseau locales",
"allowPrivateNetworkHint": "Nécessaire pour un service auto-hébergé sur votre réseau local. Désactivé par défaut pour empêcher les requêtes vers des adresses internes."
},
"onError": {
"stop": "Arrêtez la course",
"continue": "Continuer"
}
}
}
},
"nav": {
"automations": "Automatisations"
},
"onboarding": {
"feature_automations": "Automatisations",
"feature_automations_desc": "Exécutez des actions automatiquement lorsqu'un événement se produit et recevez une notification."
}
}