feat(i18n): add French (fr) locale (#12826)

Add French translations for the web UI and register the language in
SUPPORTED_LANGUAGES so it can be selected from the language switcher.

Coverage follows the existing partial locales (it, es, de): 13 namespaces
are translated and any remaining key falls back to English.

Signed-off-by: gangna2s-arch <281744444+gangna2s-arch@users.noreply.github.com>
Co-authored-by: gangna2s-arch <281744444+gangna2s-arch@users.noreply.github.com>
This commit is contained in:
gangna2s-archandgangna2s-arch authored and GitHub committed 2026-10-22 17:00:24 +02:00
1 parent 4c4440701a
commit 6d854d6132
14 files changed
+1873

No files matched your search

@@ -0,0 +1,101 @@
{
"activity": {
"hide": "Masquer",
"moveToHistory": "Déplacer vers l'historique",
"moreCount": "{{count}} de plus",
"waitingForInstaller": "en attente de l'installateur",
"progressLabel": "Progression pour {{name}}",
"toNode": "vers {{node}}",
"nodesDone": "{{done}} nœuds sur {{total}} terminés",
"kind": {
"model": "modèle",
"backend": "backend"
},
"verb": {
"installing": "Installation du {{kind}}",
"installed": "{{kind}} installé",
"removed": "{{kind}} supprimé",
"staged": "Modèle préparé",
"failed": "Impossible d'installer le {{kind}}",
"queued": "En file",
"staging": "Préparation du modèle",
"removing": "Suppression du {{kind}}",
"failedRemoval": "Impossible de supprimer le {{kind}}",
"failedStaging": "Impossible de préparer le modèle"
},
"phase": {
"resolving": "Résolution des fichiers",
"downloading": "Téléchargement",
"verifying": "Vérification",
"committing": "Finalisation",
"persisting": "Enregistrement de la configuration"
}
},
"manage": {
"title": "Système",
"subtitle": "Gérer les modèles et backends installés"
},
"settings": {
"title": "Paramètres",
"subtitle": "Configurer les paramètres d'exécution de LocalAI",
"saved": "Paramètres enregistrés",
"saveFailed": "Échec de l'enregistrement : {{message}}",
"loadFailed": "Échec du chargement des paramètres : {{message}}",
"sections": {
"branding": "Image de marque",
"watchdog": "Watchdog",
"memory": "Mémoire",
"backends": "Backends",
"performance": "Performance",
"tracing": "Traçage",
"api": "API et CORS",
"p2p": "P2P",
"galleries": "Galeries",
"apikeys": "Clés d'API",
"agents": "Tâches d'agents",
"agentpool": "Pool d'agents",
"assistant": "Assistant LocalAI",
"distributed": "Distribué",
"responses": "Réponses"
}
},
"traces": {
"title": "Traces",
"subtitle": "Consulter les requêtes et réponses d'API enregistrées, ainsi que les opérations des backends"
},
"users": {
"title": "Utilisateurs",
"subtitle": "Gérer les utilisateurs enregistrés, les rôles et les invitations"
},
"usage": {
"title": "Utilisation",
"subtitle": "Statistiques d'utilisation des jetons d'API",
"sources": {
"tab": "Sources",
"mixTitle": "Répartition des sources",
"ribbonAria": "{{apikey}} % clés d'API, {{web}} % interface web, {{legacy}} % hérité",
"topSources": "Principales sources dans le temps",
"searchPlaceholder": "Rechercher par nom ou préfixe",
"sortBy": "Trier",
"sortTokens": "Jetons",
"sortRequests": "Requêtes",
"sortLastUsed": "Dernière utilisation",
"sortName": "Nom",
"sortUser": "Utilisateur",
"webUI": "Interface web",
"legacy": "Hérité",
"revoked": "révoqué",
"filteredTo": "Filtré sur : {{name}}",
"clearFilter": "Effacer le filtre",
"other": "Autres ({{count}})",
"noTrafficShort": "Aucune requête sur cette période.",
"noKeysYet": "Dès que des requêtes arriveront, vous les verrez détaillées ici.",
"createKey": "Créer votre première clé d'API",
"truncatedWarning": "Affichage des 200 principales clés. Appliquez un filtre pour affiner."
}
},
"explorer": {
"title": "Explorateur",
"subtitle": "Parcourir les fichiers et la configuration"
}
}
@@ -0,0 +1,55 @@
{
"title": "Agents",
"subtitle": "Gérez des agents IA autonomes",
"actions": {
"agentHub": "Hub d'agents",
"import": "Importer",
"createAgent": "Créer un agent",
"edit": "Modifier",
"chat": "Discuter",
"export": "Exporter",
"delete": "Supprimer",
"pause": "Mettre en pause",
"resume": "Reprendre"
},
"table": {
"name": "Nom",
"status": "Statut",
"events": "Événements",
"actions": "Actions",
"eventsTooltip": "{{count}} événements - Cliquez pour voir"
},
"search": {
"placeholder": "Rechercher des agents...",
"summary_one": "{{shown}} agent sur {{total}}",
"summary_other": "{{shown}} agents sur {{total}}"
},
"empty": {
"noConfigured": "Aucun agent configuré",
"noConfiguredText": "Créez un agent pour démarrer des workflows IA autonomes.",
"browseHub": "Vous ne savez pas par où commencer ? Parcourez le <1>Hub d'agents</1> pour trouver des configurations prêtes à importer.",
"noMatching": "Aucun agent correspondant",
"noMatchingText": "Aucun agent ne correspond à « {{query}} »"
},
"sections": {
"yourAgents": "Vos agents",
"otherUsersAgents": "Agents des autres utilisateurs"
},
"deleteDialog": {
"title": "Supprimer l'agent",
"message": "Supprimer l'agent « {{name}} » ? Cette action est irréversible.",
"confirm": "Supprimer"
},
"toasts": {
"loadFailed": "Échec du chargement des agents : {{message}}",
"deleted": "Agent « {{name}} » supprimé",
"deleteFailed": "Échec de la suppression de l'agent : {{message}}",
"paused": "Agent « {{name}} » mis en pause",
"resumed": "Agent « {{name}} » repris",
"pauseFailed": "Échec de la mise en pause de l'agent : {{message}}",
"resumeFailed": "Échec de la reprise de l'agent : {{message}}",
"exported": "Agent « {{name}} » exporté",
"exportFailed": "Échec de l'export de l'agent : {{message}}",
"parseFailed": "Échec de l'analyse du fichier d'agent : {{message}}"
}
}
@@ -0,0 +1,112 @@
{
"login": {
"subtitle": "Connectez-vous pour continuer",
"registerSubtitle": "Créer un compte",
"createAdminSubtitle": "Créez votre compte administrateur",
"tokenSubtitle": "Saisissez votre clé d'API pour continuer",
"email": "E-mail",
"emailPlaceholder": "vous@exemple.com",
"name": "Nom",
"namePlaceholder": "Votre nom (facultatif)",
"password": "Mot de passe",
"passwordPlaceholder": "Saisissez le mot de passe...",
"newPasswordPlaceholder": "Au moins 12 caractères",
"confirmPassword": "Confirmer le mot de passe",
"confirmPasswordPlaceholder": "Répétez le mot de passe",
"inviteCodeLabel": "Code d'invitation",
"inviteCodeOptional": " (facultatif — évite l'attente d'approbation)",
"inviteCodePlaceholder": "Collez votre code d'invitation...",
"tokenPlaceholder": "Saisissez la clé d'API...",
"tokenAltPlaceholder": "Saisissez le jeton d'API...",
"signIn": "Se connecter",
"signingIn": "Connexion...",
"register": "S'inscrire",
"creatingAccount": "Création du compte...",
"createAdminAccount": "Créer le compte administrateur",
"signInWithGitHub": "Se connecter avec GitHub",
"signInWithSSO": "Se connecter avec SSO",
"loginWithToken": "Se connecter avec un jeton",
"showTokenLogin": "Se connecter avec une clé d'API",
"hideTokenLogin": "Masquer la connexion par jeton",
"noAccount": "Vous n'avez pas de compte ?",
"hasAccount": "Vous avez déjà un compte ?",
"or": "ou",
"errors": {
"loginFailed": "Échec de la connexion",
"registrationFailed": "Échec de l'inscription",
"invalidToken": "Jeton invalide",
"passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
"enterToken": "Veuillez saisir un jeton",
"networkError": "Erreur réseau",
"inviteRequired": "Un code d'invitation valide est requis pour s'inscrire"
},
"messages": {
"registrationPending": "Inscription réussie, en attente d'approbation."
}
},
"account": {
"title": "Compte",
"subtitle": "Profil, identifiants et clés d'API",
"unavailable": "Compte indisponible",
"unavailableText": "L'authentification doit être activée pour gérer votre compte.",
"tabs": {
"profile": "Profil",
"security": "Sécurité",
"apiKeys": "Clés d'API"
},
"profile": {
"displayName": "Nom affiché",
"displayNameDescription": "Votre nom public",
"avatarUrl": "URL de l'avatar",
"avatarUrlDescription": "URL de votre photo de profil",
"avatarUrlPlaceholder": "https://exemple.com/avatar.png",
"save": "Enregistrer",
"saving": "Enregistrement...",
"updated": "Profil mis à jour",
"updateFailed": "Échec de la mise à jour du profil : {{message}}"
},
"security": {
"currentPassword": "Mot de passe actuel",
"currentPasswordDescription": "Saisissez votre mot de passe existant pour vérifier votre identité",
"currentPasswordPlaceholder": "Mot de passe actuel",
"newPassword": "Nouveau mot de passe",
"newPasswordDescription": "Doit contenir au moins 12 caractères",
"newPasswordPlaceholder": "Nouveau mot de passe",
"confirmPassword": "Confirmer le mot de passe",
"confirmPasswordDescription": "Saisissez à nouveau votre nouveau mot de passe",
"confirmPasswordPlaceholder": "Confirmer le nouveau mot de passe",
"changePassword": "Changer le mot de passe",
"changing": "Modification...",
"changed": "Mot de passe modifié",
"passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
"tooShort": "Le nouveau mot de passe doit contenir au moins 12 caractères",
"oauthOnly": "La gestion du mot de passe n'est pas disponible pour les comptes {{provider}}."
},
"apiKeys": {
"create": "Créer une clé d'API",
"createDescription": "Générez une clé pour un accès programmatique",
"namePlaceholder": "Nom de la clé (ex. mon-app)",
"createButton": "Créer",
"creating": "Création...",
"createdToast": "Clé d'API créée",
"createFailed": "Échec de la création de la clé d'API : {{message}}",
"loadFailed": "Échec du chargement des clés d'API : {{message}}",
"revoke": "Révoquer",
"revokeKey": "Révoquer la clé",
"revokeTitle": "Révoquer la clé d'API",
"revokeMessage": "Révoquer la clé d'API « {{name}} » ? Cette action est irréversible.",
"revoked": "Clé d'API révoquée",
"revokeFailed": "Échec de la révocation de la clé d'API : {{message}}",
"copyNow": "Copiez-la maintenant — cette clé ne sera plus affichée",
"copiedToast": "Copié dans le presse-papiers",
"copyFailed": "Échec de la copie",
"empty": "Aucune clé d'API pour l'instant. Créez-en une ci-dessus pour un accès programmatique.",
"lastUsed": "dernière utilisation {{date}}"
}
},
"notFound": {
"title": "Page introuvable",
"text": "Cette page semble s'être égarée. Revenons sur le bon chemin.",
"goHome": "Retour à l'accueil"
}
}
@@ -0,0 +1,135 @@
{
"activity": {
"thought": "Réflexion",
"tool": "Outil",
"result": "Résultat",
"toolResult": "Résultat de {{name}}",
"thinking": "Réflexion en cours..."
},
"header": {
"manageModeTooltip": "Ce chat peut installer des modèles, modifier la configuration et gérer les backends en dialoguant avec LocalAI.",
"modelInfo": "Infos modèle",
"chatSettings": "Paramètres du chat",
"modelInfoTitle": "Infos modèle : {{model}}",
"editConfig": "Modifier la configuration",
"close": "Fermer"
},
"modelInfo": {
"backend": "Backend",
"modelFile": "Fichier modèle",
"contextSize": "Taille du contexte",
"threads": "Threads",
"mcp": "MCP",
"configured": "Configuré",
"chatTemplate": "Template de chat",
"yes": "Oui",
"gpuLayers": "Couches GPU"
},
"context": {
"label": "Contexte : {{percent}} %",
"labelWithTokens": "Contexte : {{percent}} % ({{tokens}} tokens)"
},
"settings": {
"title": "Paramètres du chat",
"manageMode": "Mode gestion",
"manageModeDesc": "Autoriser ce chat à installer des modèles, changer de backend et modifier la configuration en dialoguant avec LocalAI.",
"focusMode": "Mode concentration",
"focusModeDesc": "Réduit la barre latérale et l'en-tête pendant une conversation. Échap les restaure temporairement ; désactivez cette option pour conserver la mise en page complète.",
"systemPrompt": "Prompt système",
"systemPromptPlaceholder": "Vous êtes un assistant utile...",
"temperature": "Température",
"topP": "Top P",
"topK": "Top K",
"contextSize": "Taille du contexte",
"contextSizePlaceholder": "2048",
"clearHistory": "Effacer l'historique du chat"
},
"empty": {
"manageTitle": "Gérez LocalAI par la conversation",
"manageText": "Demandez d'installer des modèles, de changer de backend, de modifier la configuration ou de vérifier l'état. L'assistant résume les actions et attend votre confirmation avant de modifier quoi que ce soit.",
"suggestionsManage": [
"Qu'est-ce qui est installé ?",
"Installer un modèle de chat",
"Afficher l'état du système",
"Mettre à jour un backend"
],
"suggestionsChat": [
"Explique-moi comment ça fonctionne",
"Aide-moi à écrire du code",
"Résume un document",
"Trouve-moi des idées"
],
"noMessages": "Aucun message pour l'instant"
},
"errors": {
"viewTraces": "Consulter les traces pour plus de détails"
},
"actions": {
"copy": "Copier",
"edit": "Modifier",
"editMessage": "Modifier le message",
"save": "Enregistrer",
"cancel": "Annuler",
"regenerate": "Régénérer",
"branch": "Créer une branche ici",
"jumpToLatest": "Aller au plus récent"
},
"streaming": {
"transferring": "Transfert du modèle...",
"transferringTo": "Transfert du modèle vers {{node}}...",
"onNode": "sur {{node}}",
"eta": "~{{value}} restant",
"modelState": {
"pending": "Préparation du chargement du modèle...",
"installing": "Installation du backend...",
"staging": "Préparation des fichiers du modèle...",
"loading": "Chargement du modèle..."
}
},
"tokens": {
"perSec": "{{count}} tok/s",
"peak": "Pic : {{count}} tok/s",
"usage": "{{prompt}}p + {{completion}}c = {{total}}"
},
"input": {
"placeholder": "Message...",
"attachFile": "Joindre un fichier",
"send": "Envoyer le message",
"stopGenerating": "Arrêter la génération",
"canvasTitle": "Canvas — extrait les blocs de code et les médias dans un panneau latéral pour les prévisualiser, copier et télécharger",
"canvasLabel": "Canvas",
"openCanvas": "Ouvrir le panneau Canvas"
},
"deleteAllDialog": {
"title": "Supprimer toutes les conversations",
"message": "Supprimer toutes les conversations ? Cette action est irréversible.",
"confirm": "Tout supprimer"
},
"toasts": {
"selectModel": "Veuillez sélectionner un modèle",
"copied": "Copié dans le presse-papiers",
"copyFailed": "Impossible de copier dans le presse-papiers",
"chatCopied": "Conversation copiée dans le presse-papiers",
"forked": "Nouvelle conversation créée",
"pdfReadFailed": "Impossible de lire le texte de {{name}}. Le fichier est peut-être scanné, chiffré ou endommagé."
},
"menu": {
"trigger": "Conversations",
"triggerTitle": "Conversations (Ctrl/Cmd+K)",
"search": "Rechercher une conversation...",
"clearSearch": "Effacer la recherche",
"noMatch": "Aucune conversation ne correspond",
"noConversations": "Aucune conversation pour l'instant",
"rename": "Renommer",
"duplicate": "Dupliquer la conversation",
"copyChat": "Copier la conversation",
"exportMarkdown": "Exporter en Markdown",
"deleteChat": "Supprimer la conversation",
"newChat": "Nouvelle conversation",
"clearAll": "Tout effacer",
"deleteAllTitle": "Supprimer toutes les conversations"
},
"message": {
"you": "Vous"
}
}
@@ -0,0 +1,43 @@
{
"title": "Base de connaissances",
"subtitle": "Gérez des collections de documents pour le RAG des agents",
"newPlaceholder": "Nom de la nouvelle collection...",
"actions": {
"create": "Créer",
"creating": "Création...",
"details": "Détails",
"reset": "Réinitialiser",
"delete": "Supprimer",
"viewDetails": "Voir les détails",
"resetCollection": "Réinitialiser la collection",
"deleteCollection": "Supprimer la collection"
},
"sections": {
"yourCollections": "Vos collections",
"otherUsersCollections": "Collections des autres utilisateurs"
},
"empty": {
"title": "Aucune collection pour l'instant",
"text": "Les collections permettent d'organiser des documents en bases de connaissances que les agents peuvent interroger via RAG (génération augmentée par recherche). Créez une collection ci-dessus pour commencer.",
"noPersonal": "Vous n'avez encore aucune collection."
},
"deleteDialog": {
"title": "Supprimer la collection",
"message": "Supprimer la collection « {{name}} » ? Toutes les entrées seront supprimées et l'action est irréversible.",
"confirm": "Supprimer"
},
"resetDialog": {
"title": "Réinitialiser la collection",
"message": "Réinitialiser la collection « {{name}} » ? Toutes les entrées seront supprimées, mais la collection sera conservée.",
"confirm": "Réinitialiser"
},
"toasts": {
"loadFailed": "Échec du chargement des collections : {{message}}",
"created": "Collection « {{name}} » créée",
"createFailed": "Échec de la création de la collection : {{message}}",
"deleted": "Collection « {{name}} » supprimée",
"deleteFailed": "Échec de la suppression de la collection : {{message}}",
"reset": "Collection « {{name}} » réinitialisée",
"resetFailed": "Échec de la réinitialisation de la collection : {{message}}"
}
}
@@ -0,0 +1,115 @@
{
"unsaved": {
"title": "Abandonner les modifications ?",
"message": "Des modifications non enregistrées seront perdues si vous quittez cette page.",
"leave": "Quitter"
},
"actions": {
"save": "Enregistrer",
"saving": "Enregistrement...",
"cancel": "Annuler",
"close": "Fermer",
"confirm": "Confirmer",
"delete": "Supprimer",
"edit": "Modifier",
"add": "Ajouter",
"remove": "Retirer",
"create": "Créer",
"update": "Mettre à jour",
"refresh": "Actualiser",
"reload": "Recharger",
"retry": "Réessayer",
"search": "Rechercher",
"filter": "Filtrer",
"clear": "Effacer",
"reset": "Réinitialiser",
"apply": "Appliquer",
"back": "Retour",
"next": "Suivant",
"previous": "Précédent",
"open": "Ouvrir",
"submit": "Envoyer",
"select": "Sélectionner",
"selectAll": "Tout sélectionner",
"copy": "Copier",
"copied": "Copié",
"download": "Télécharger",
"upload": "Envoyer",
"import": "Importer",
"export": "Exporter",
"view": "Voir",
"details": "Détails",
"settings": "Paramètres",
"help": "Aide",
"yes": "Oui",
"no": "Non",
"loading": "Chargement..."
},
"status": {
"loading": "Chargement...",
"saving": "Enregistrement...",
"saved": "Enregistré",
"ready": "Prêt",
"running": "En cours",
"stopped": "Arrêté",
"starting": "Démarrage...",
"stopping": "Arrêt...",
"pending": "En attente",
"active": "Actif",
"inactive": "Inactif",
"enabled": "Activé",
"disabled": "Désactivé",
"online": "En ligne",
"offline": "Hors ligne",
"error": "Erreur",
"success": "Succès",
"warning": "Avertissement",
"info": "Info",
"empty": "Aucun élément",
"none": "Aucun",
"unknown": "Inconnu"
},
"dialogs": {
"confirmDelete": {
"title": "Confirmer la suppression",
"message": "Voulez-vous vraiment supprimer cet élément ? Cette action est irréversible.",
"confirm": "Supprimer",
"cancel": "Annuler"
},
"unsavedChanges": {
"title": "Modifications non enregistrées",
"message": "Vous avez des modifications non enregistrées. Voulez-vous les abandonner ?",
"discard": "Abandonner",
"keepEditing": "Continuer l'édition"
}
},
"forms": {
"required": "Obligatoire",
"optional": "Facultatif",
"name": "Nom",
"description": "Description",
"type": "Type",
"value": "Valeur",
"search": "Rechercher...",
"selectPlaceholder": "Choisissez une option...",
"noMatch": "Aucun résultat"
},
"time": {
"now": "à l'instant",
"secondsAgo_one": "il y a {{count}} seconde",
"secondsAgo_other": "il y a {{count}} secondes",
"minutesAgo_one": "il y a {{count}} minute",
"minutesAgo_other": "il y a {{count}} minutes",
"hoursAgo_one": "il y a {{count}} heure",
"hoursAgo_other": "il y a {{count}} heures",
"daysAgo_one": "il y a {{count}} jour",
"daysAgo_other": "il y a {{count}} jours"
},
"units": {
"bytes": "o",
"kilobytes": "Ko",
"megabytes": "Mo",
"gigabytes": "Go",
"terabytes": "To"
}
}
@@ -0,0 +1,17 @@
{
"generic": "Une erreur est survenue",
"network": "Erreur réseau. Vérifiez votre connexion et réessayez.",
"unauthorized": "Vous n'êtes pas autorisé à effectuer cette action.",
"forbidden": "Accès refusé.",
"notFound": "La ressource demandée est introuvable.",
"serverError": "Erreur du serveur. Veuillez réessayer plus tard.",
"loadFailed": "Échec du chargement : {{message}}",
"saveFailed": "Échec de l'enregistrement : {{message}}",
"deleteFailed": "Échec de la suppression : {{message}}",
"updateFailed": "Échec de la mise à jour : {{message}}",
"createFailed": "Échec de la création : {{message}}",
"operationFailed": "Échec de l'opération : {{message}}",
"invalidInput": "Saisie invalide. Vérifiez le formulaire et réessayez.",
"tryAgain": "Veuillez réessayer.",
"contactAdmin": "Si le problème persiste, contactez votre administrateur."
}
@@ -0,0 +1,114 @@
{
"cluster": {
"vram": "VRAM du cluster",
"ram": "RAM du cluster",
"nodesOnline": "{{healthy}}/{{total}} nœuds en ligne"
},
"resourceGpu": "GPU",
"resourceRam": "RAM",
"greeting": {
"morning": "Bonjour",
"afternoon": "Bon après-midi",
"evening": "Bonsoir",
"night": "Vous travaillez tard"
},
"statusLine": {
"modelsLoaded_one": "{{count}} modèle chargé",
"modelsLoaded_other": "{{count}} modèles chargés",
"noModelsLoaded": "Aucun modèle chargé",
"nodes_one": "{{count}} nœud",
"nodes_other": "{{count}} nœuds",
"loadedLabel": "Chargés",
"nodesLabel": "Nœuds"
},
"assistant": {
"title": "Gérez LocalAI par la conversation",
"description": "Installez des modèles, changez de backend, modifiez la configuration et vérifiez l'état en discutant avec LocalAI.",
"open": "Ouvrir l'assistant",
"tooltip": "Gérer LocalAI par la conversation"
},
"input": {
"placeholder": "Message...",
"attachImage": "Joindre une image",
"attachAudio": "Joindre un audio",
"attachFile": "Joindre un fichier",
"enterToSend": "Entrée pour envoyer",
"selectModelFirst": "Sélectionnez d'abord un modèle",
"sendMessage": "Envoyer le message",
"selectModelToast": "Veuillez d'abord sélectionner un modèle",
"pdfReadFailed": "Impossible de lire le texte de {{name}}. Le fichier est peut-être scanné, chiffré ou endommagé."
},
"quickLinks": {
"manageByChat": "Gérer par chat",
"installedModels": "Modèles installés",
"browseGallery": "Parcourir la galerie",
"importModel": "Importer un modèle",
"documentation": "Documentation"
},
"loadedModels": {
"heading": "Modèles actifs",
"count_one": "{{count}} modèle chargé",
"count_other": "{{count}} modèles chargés",
"stop": "Arrêter le modèle",
"stopAll": "Tout arrêter",
"serving": "En service"
},
"stopDialog": {
"title": "Arrêter le modèle",
"message": "Arrêter le modèle {{model}} ?",
"confirm": "Arrêter {{model}}",
"stopAllTitle": "Arrêter tous les modèles",
"stopAllMessage": "Arrêter les {{count}} modèles chargés ?",
"stopAllConfirm": "Tout arrêter",
"stoppedToast": "{{model}} arrêté",
"allStoppedToast": "Tous les modèles sont arrêtés",
"stopFailed": "Échec de l'arrêt : {{message}}"
},
"wizard": {
"getStarted": "Bien démarrer avec {{name}}",
"intro": "Installez votre premier modèle pour commencer. Parcourez la galerie ou importez le vôtre.",
"steps": {
"step1Title": "Parcourir la galerie de modèles",
"step1Body": "Trouvez le modèle adapté à vos besoins dans notre sélection.",
"step2Title": "Installer un modèle",
"step2Body": "Cliquez sur installer pour le télécharger et le configurer automatiquement.",
"step3Title": "Commencer à discuter",
"step3Body": "Discutez avec votre modèle depuis le navigateur ou via l'API."
},
"browseGallery": "Parcourir la galerie",
"importModel": "Importer un modèle",
"docs": "Docs",
"noModelsTitle": "Aucun modèle disponible",
"noModelsBody": "Aucun modèle n'est installé pour l'instant. Demandez à votre administrateur de configurer des modèles pour pouvoir discuter."
},
"starters": {
"title": "Recommandé pour votre matériel",
"tier": {
"cpu": "CPU uniquement",
"gpu-small": "GPU",
"gpu-mid": "GPU",
"gpu-large": "GPU"
},
"cpuNote": "Aucun GPU détecté — ces petits modèles restent réactifs sur CPU.",
"gpuNote": "Sélectionnés pour tenir dans votre VRAM disponible, avec de la marge pour le contexte.",
"install": "Installer",
"installing": "Installation",
"installStarted": "Installation de {{model}}…",
"installFailed": "Échec de l'installation : {{message}}"
},
"connect": {
"title": "Un seul point d'accès, toutes les API",
"subtitle": "LocalAI expose sa propre API complète — génération d'images et de vidéos, profondeur, détection d'objets, reranking, audio, reconnaissance faciale et vocale, et voix temps réel via WebRTC et WebSocket. En plus, une couche de compatibilité permet à toute application conçue pour OpenAI, Anthropic, Ollama ou OpenAI Responses de lui parler sans modification.",
"nativeTitle": "API native",
"compatTitle": "Compatibilité directe",
"apiReference": "Référence complète de l'API",
"copy": "Copier",
"copied": "Copié",
"browse": "Parcourir l'API",
"hide": "Masquer les points d'accès",
"dismiss": "Ignorer"
},
"jump": {
"heading": "Reprendre où vous en étiez"
}
}
@@ -0,0 +1,126 @@
{
"title": "Importer un modèle",
"subtitle": {
"source": "Collez une référence Hugging Face, une URL ou un chemin sur cet hôte.",
"yaml": "Écrivez la configuration du modèle à la main. Rien n'est détecté automatiquement."
},
"tabs": {
"ariaLabel": "Type d'import",
"source": "Depuis une source",
"yaml": "Écrire du YAML"
},
"actions": {
"import": "Importer",
"importing": "Importation…",
"create": "Créer",
"saving": "Enregistrement...",
"browseHF": "Parcourir les modèles sur Hugging Face",
"addCustom": "Ajouter personnalisé",
"copy": "Copier"
},
"form": {
"modelUri": "Source",
"uriPlaceholder": "huggingface://proprietaire/depot",
"uriHint": "Appuyez sur Entrée pour importer. LocalAI choisit le backend à partir de la source, sauf si vous en imposez un.",
"supportedFormats": "Ce que vous pouvez coller",
"options": "Options d'import",
"customPreferences": "Préférences personnalisées",
"customKeyValueHint": "Ajoutez des paires clé-valeur personnalisées pour une configuration avancée.",
"preferenceKey": "Clé de la préférence pour la ligne {{index}}",
"preferenceValue": "Valeur de la préférence pour la ligne {{index}}",
"removePref": "Supprimer cette préférence",
"key": "Clé",
"value": "Valeur",
"backend": "Backend",
"backendAuto": "Détection automatique (selon l'URI)",
"backendLoading": "Chargement des backends…",
"backendSearch": "Rechercher des backends...",
"backendHint": "Filtrez la liste selon ce que fait le modèle, puis choisissez-en un. Laissez la détection automatique et LocalAI décide. Les entrées marquées « choix manuel » ne sont jamais détectées automatiquement.",
"backendErrorHint": "Impossible de charger la liste des backends. Détection automatique uniquement.",
"backendNotInstalled": "Ce backend n'est pas encore installé. L'import le téléchargera d'abord.",
"modelName": "Nom",
"modelNamePlaceholder": "Laissez vide pour utiliser le nom du fichier",
"modelNameHint": "Nom personnalisé du modèle. Si vide, le nom du fichier sera utilisé.",
"description": "Description",
"descriptionPlaceholder": "Laissez vide pour utiliser la description par défaut",
"descriptionHint": "Description personnalisée du modèle.",
"quantizations": "Quantifications",
"quantizationsPlaceholder": "q4_k_m,q4_k_s,q3_k_m (séparées par des virgules)",
"quantizationsHint": "Quantifications préférées (séparées par des virgules). Laissez vide pour la valeur par défaut (q4_k_m).",
"mmprojQuantizations": "Quantifications MMProj",
"mmprojQuantizationsPlaceholder": "fp16,fp32 (séparées par des virgules)",
"mmprojQuantizationsHint": "Quantifications MMProj préférées. Laissez vide pour la valeur par défaut (fp16).",
"embeddings": "Embeddings",
"embeddingsHint": "Activer la prise en charge des embeddings pour ce modèle.",
"modelType": "Type de modèle",
"modelTypePlaceholder": "AutoModelForCausalLM (pour le backend transformers)",
"modelTypeHint": "Type de modèle pour le backend transformers. Exemples : AutoModelForCausalLM, SentenceTransformer, Mamba.",
"pipelineType": "Type de pipeline",
"pipelineTypeHint": "Type de pipeline pour le backend diffusers.",
"schedulerType": "Type de planificateur",
"schedulerTypePlaceholder": "k_dpmpp_2m (facultatif)",
"schedulerTypeHint": "Type de planificateur pour le backend diffusers. Exemples : k_dpmpp_2m, euler_a, ddim.",
"enableParameters": "Paramètres activés",
"enableParametersPlaceholder": "negative_prompt,num_inference_steps (séparés par des virgules)",
"enableParametersHint": "Paramètres activés pour le backend diffusers (séparés par des virgules).",
"cuda": "CUDA",
"cudaHint": "Activer la prise en charge CUDA pour l'accélération GPU.",
"yamlEditor": "Configuration du modèle",
"manualPick": "choix manuel",
"manualPickTooltip": "La détection automatique ne dirigera pas vers ce backend. Choisissez-le ici si c'est bien ce que vous voulez.",
"optionsSummary": "backend, nom, description, quantifications…",
"modalityAny": "Toutes",
"modalityFilter": "Filtrer les backends par modalité"
},
"modality": {
"text": "LLM texte",
"asr": "Reconnaissance vocale",
"tts": "Synthèse vocale",
"image": "Image / Vidéo",
"video": "Génération vidéo",
"3d": "Génération de maillage 3D",
"3d_animation": "Animation 3D",
"embeddings": "Embeddings",
"reranker": "Rerankers",
"detection": "Détection d'objets",
"vad": "Détection d'activité vocale",
"other": "Autre"
},
"estimate": {
"downloadLabel": "Téléchargement",
"vramLabel": "VRAM au chargement"
},
"progress": {
"label": "Progression de l'import",
"working": "En cours…"
},
"toasts": {
"noUri": "Veuillez saisir une URI de modèle",
"noYaml": "Veuillez saisir une configuration YAML",
"started": "Import démarré. La progression s'affiche ci-dessous.",
"imported": "Modèle importé avec succès !",
"importedYaml": "Configuration du modèle importée avec succès !",
"importFailed": "Échec de l'import : {{message}}",
"startImportFailed": "Échec du démarrage de l'import : {{message}}",
"backendsLoadFailed": "Impossible de charger la liste des backends — détection automatique uniquement",
"modalityClearedBackend": "Sélection du backend effacée — il ne faisait pas partie du groupe {{label}}.",
"copied": "Copié dans le presse-papiers"
},
"uriFormats": {
"huggingface": {
"title": "Hugging Face"
},
"http": {
"title": "URL directe"
},
"local": {
"title": "Sur cet hôte"
},
"oci": {
"title": "Registre OCI"
},
"ollama": {
"title": "Ollama"
}
}
}
@@ -0,0 +1,490 @@
{
"studio": {
"tabs": {
"images": "Images",
"video": "Vidéo",
"tts": "TTS",
"sound": "Son",
"transform": "Transformation",
"threed": "3D",
"overview": "Vue d'ensemble",
"diarization": "Diarisation"
},
"overview": {
"title": "Studio",
"subtitle": "Générez des images, des vidéos, de la 3D, de la parole et des sons avec les modèles de cette machine."
},
"groups": {
"create": "Créer",
"voice": "Voix",
"transform": "Transformer"
}
},
"image": {
"title": "Génération d'images",
"labels": {
"model": "Modèle",
"prompt": "Prompt",
"promptPlaceholder": "Décrivez l'image à générer...",
"negativePrompt": "Prompt négatif",
"negativePromptPlaceholder": "Ce qu'il faut éviter...",
"size": "Taille",
"count": "Nombre (1-4)",
"advanced": "Paramètres avancés",
"imageInputs": "Images d'entrée",
"steps": "Étapes",
"stepsPlaceholder": "20",
"seed": "Graine",
"seedPlaceholder": "Aléatoire",
"sourceImage": "Image source (img2img)",
"refImages": "Images de référence",
"refImagesAdded_one": "{{count}} image ajoutée",
"refImagesAdded_other": "{{count}} images ajoutées"
},
"actions": {
"view": "Voir",
"generate": "Générer",
"generating": "Génération..."
},
"empty": "Les images générées apparaîtront ici",
"toasts": {
"noPrompt": "Veuillez saisir un prompt",
"noModel": "Veuillez sélectionner un modèle",
"noResults": "Aucune image générée"
}
},
"video": {
"title": "Génération de vidéos",
"labels": {
"model": "Modèle",
"prompt": "Prompt",
"promptPlaceholder": "Décrivez la vidéo à générer...",
"duration": "Durée (secondes)",
"fps": "Images/s",
"size": "Taille",
"advanced": "Paramètres avancés",
"seed": "Graine",
"seedPlaceholder": "Aléatoire",
"frames": "Images",
"referenceMedia": "Média de référence",
"startImage": "Image de début",
"endImage": "Image de fin",
"avatarAudio": "Audio de l'avatar"
},
"actions": {
"generate": "Générer",
"generating": "Génération..."
},
"empty": "La vidéo générée apparaîtra ici",
"toasts": {
"noPrompt": "Veuillez saisir un prompt",
"noModel": "Veuillez sélectionner un modèle",
"noResults": "Aucune vidéo générée"
}
},
"threed": {
"title": "Génération 3D",
"animation": {
"skeletonHint": "Génère un squelette animé, sans maillage ni peau.",
"preview": "Aperçu du squelette animé",
"pause": "Pause",
"play": "Lecture",
"reset": "Réinitialiser la vue",
"timeline": "Chronologie",
"zoom": "Zoom",
"inputTooLong": "L'entrée dépasse la limite de {{limit}} octets.",
"fileTooLarge": "Le fichier sélectionné est trop volumineux.",
"readFailed": "Impossible de lire le fichier sélectionné."
},
"labels": {
"model": "Modèle",
"image": "Image d'entrée",
"quality": "Qualité",
"quality_auto": "Auto (meilleure disponible)",
"quality_coarse": "Aperçu grossier (rapide)",
"quality_512": "512³ fin",
"quality_1024": "1024³ en cascade (lent)",
"background": "Arrière-plan",
"background_auto": "Supprimer automatiquement un fond uni",
"background_keep": "Conserver l'original",
"background_black": "Supprimer le noir",
"background_white": "Supprimer le blanc",
"advanced": "Paramètres avancés",
"steps": "Étapes de forme",
"textureSteps": "Étapes de matière",
"guidance": "Guidage",
"seed": "Graine",
"seedPlaceholder": "Aléatoire"
},
"actions": {
"generate": "Générer",
"generating": "Génération...",
"remesh": "Appliquer le remaillage",
"remeshing": "Remaillage en cours...",
"showOriginal": "Afficher l'original",
"download": "Télécharger le GLB"
},
"remesh": {
"title": "Remaillage étanche pour l'impression",
"detail": "Détail du remaillage",
"coarser": "Plus grossier · plus rapide",
"finer": "Plus fin · plus lent",
"hint": "Le détail définit les plus petits éléments conservés. Le décalage d'enveloppe s'y adapte automatiquement.",
"ready": "Aperçu du modèle remaillé étanche. C'est la version qui sera téléchargée."
},
"viewer": {
"wireframe": "Fil de fer",
"autoRotate": "Rotation automatique",
"noWebgl": "WebGL2 n'est pas disponible dans ce navigateur — téléchargez le GLB pour le visualiser ailleurs.",
"contextLost": "La vue 3D a perdu le contexte GPU — rechargez la page pour la restaurer.",
"stats": "{{verts}} sommets · {{tris}} triangles",
"hint": "glisser : pivoter · pincer/molette : zoom · deux doigts/clic droit : déplacer · double-clic : réinitialiser"
},
"empty": "Le modèle 3D généré apparaîtra ici",
"toasts": {
"noImage": "Veuillez fournir une image d'entrée",
"noModel": "Veuillez sélectionner un modèle",
"noResults": "Aucun modèle généré"
}
},
"tts": {
"title": "Synthèse vocale",
"labels": {
"model": "Modèle",
"voice": "Voix",
"voicePlaceholder": "Identifiant de locuteur ou de voix (facultatif)",
"input": "Texte",
"inputPlaceholder": "Saisissez le texte à synthétiser...",
"instructions": "Instructions",
"instructionsPlaceholder": "Par exemple : Parle lentement et chaleureusement",
"instructionsHint": "Indications de diction facultatives. La prise en charge dépend du backend."
},
"actions": {
"generate": "Générer",
"generating": "Génération..."
},
"empty": "L'audio généré apparaîtra ici",
"toasts": {
"noText": "Veuillez saisir du texte",
"noModel": "Veuillez sélectionner un modèle",
"generated": "Parole générée",
"generateFailed": "Échec de la génération"
},
"voiceLibrary": {
"cloningReady": "Clonage de voix",
"loading": "Chargement des voix enregistrées…",
"modelDefault": "Utiliser la voix par défaut du modèle",
"empty": "Aucune voix enregistrée pour l'instant.",
"create": "En créer une",
"manage": "Gérer la bibliothèque de voix",
"namedVoiceHint": "Ce modèle n'accepte pas les profils audio de référence. Vous pouvez toujours saisir un locuteur nommé pris en charge par son backend."
}
},
"voiceLibrary": {
"title": "Bibliothèque de voix",
"subtitle": "Créez et gérez des voix réutilisables à partir d'un ou plusieurs enregistrements de référence.",
"loading": "Chargement des voix enregistrées…",
"listLabel": "Voix enregistrées",
"status": {
"ready": "Prêt"
},
"summary": {
"label": "État de la bibliothèque de voix",
"profiles": "voix enregistrées",
"modelsReady_one": "{{count}} modèle compatible prêt",
"modelsReady_other": "{{count}} modèles compatibles prêts",
"noModels": "Aucun modèle compatible installé"
},
"search": {
"label": "Rechercher des voix",
"placeholder": "Rechercher par voix, langue ou transcription"
},
"filters": {
"language": "Filtrer par langue",
"allLanguages": "Toutes les langues"
},
"empty": {
"title": "Votre bibliothèque de voix est vide",
"body": "Enregistrez ou importez des extraits de référence avec consentement, ajoutez leur transcription exacte et réutilisez la voix avec les modèles TTS compatibles."
},
"noResults": {
"title": "Aucune voix ne correspond à ces filtres",
"body": "Essayez une autre recherche ou affichez toutes les langues."
},
"detail": {
"eyebrow": "Voix sélectionnée",
"emptyTitle": "Sélectionnez une voix pour l'inspecter",
"emptyBody": "L'audio de référence, la transcription, la compatibilité et le consentement s'afficheront ici.",
"referenceAudio": "Audio de référence",
"transcript": "Transcription de référence"
},
"metadata": {
"language": "Langue",
"languageUnknown": "Non précisée",
"duration": "Durée",
"sampleRate": "Fréquence d'échantillonnage",
"created": "Créée le"
},
"consent": {
"confirmed": "Consentement confirmé",
"confirmedAt": "Confirmé le {{date}}"
},
"modelSetup": {
"title": "Installer un modèle de clonage de voix",
"body": "Cette voix est prête, mais elle a besoin d'un modèle acceptant l'audio de référence. Choisissez-en un vérifié par ce serveur.",
"loading": "Recherche de modèles compatibles dans vos galeries…",
"backendUnknown": "Backend choisi lors de l'installation",
"install": "Installer",
"installing": "Installation…",
"loadFailed": "Les recommandations compatibles n'ont pas pu être chargées.",
"noneAvailable": "Aucun modèle compatible non installé n'est disponible dans les galeries configurées.",
"capabilityNote": "Les recommandations proviennent des métadonnées de capacités des modèles, pas d'une liste côté navigateur."
},
"api": {
"title": "Utilisation de l'API et modèles compatibles",
"summary": "Utilisez cette voix hors du navigateur ou vérifiez la compatibilité des modèles",
"body": "Envoyez l'URI stable de la voix avec chaque requête de synthèse. LocalAI résout l'audio de référence privé et sa transcription au moment de la génération ; le YAML du modèle n'est pas modifié.",
"compatibleModels": "Modèles installés compatibles",
"noInstalledModels": "Aucun pour l'instant. Installez l'un des modèles vérifiés ci-dessus avant d'envoyer cette requête.",
"curlExample": "Exemple cURL",
"copy": "Copier la requête",
"endpointNote": "Les mêmes champs model, input et voice fonctionnent aussi avec POST /tts."
},
"actions": {
"create": "Créer une voix",
"createFirst": "Créer votre première voix",
"retry": "Réessayer",
"clearFilters": "Effacer les filtres",
"useInTTS": "Utiliser en synthèse vocale",
"delete": "Supprimer la voix",
"installModel": "Installer un modèle compatible",
"browseModels": "Parcourir tous les modèles"
},
"deleteDialog": {
"title": "Supprimer cette voix ?",
"message": "« {{name}} » et son audio de référence seront définitivement supprimés. Le YAML des modèles existants n'est pas modifié.",
"deleting": "Suppression…"
},
"toasts": {
"deleted": "{{name}} supprimée",
"installStarted": "Installation de {{name}}. La progression est disponible dans Opérations.",
"installFailed": "Impossible de démarrer l'installation : {{message}}",
"apiCopied": "Requête API copiée",
"copyFailed": "Impossible de copier la requête API"
}
},
"voiceCreate": {
"title": "Créer une voix réutilisable",
"subtitle": "Créez une voix réutilisable à partir d'un ou plusieurs extraits de référence propres et de leur transcription exacte.",
"references": {
"add": "Ajouter une autre référence",
"additional": "Référence {{number}}",
"remove": "Retirer"
},
"sections": {
"reference": {
"title": "Audio de référence",
"body": "Enregistrez dans le navigateur ou importez un extrait existant. La parole doit être propre, naturelle et provenir d'un seul locuteur."
},
"details": {
"title": "Identité et transcription",
"body": "Donnez un nom reconnaissable aux administrateurs et transcrivez l'extrait exactement, hésitations et ponctuation comprises."
},
"consent": {
"title": "Autorisation",
"body": "Le clonage de voix peut être sensible. Confirmez l'autorisation avant d'enregistrer cette référence."
}
},
"audio": {
"label": "Référence vocale",
"normalizing": "Préparation d'un WAV PCM sécurisé…",
"preview": "Référence normalisée",
"durationError": "L'audio de référence doit durer entre 1 seconde et 2 minutes.",
"decodeError": "Ce navigateur n'a pas pu décoder le fichier audio sélectionné.",
"qualityReady": "Durée recommandée",
"qualityHint": "6 à 30 secondes produisent généralement un meilleur clone"
},
"fields": {
"name": "Nom de la voix",
"namePlaceholder": "ex. Narrateur documentaire",
"language": "Langue (facultatif)",
"languagePlaceholder": "ex. fr-FR",
"description": "Description (facultatif)",
"descriptionPlaceholder": "Ton, source ou usage prévu",
"transcript": "Transcription exacte",
"transcriptPlaceholder": "Saisissez chaque mot prononcé dans l'extrait…",
"transcriptHint": "Reproduisez l'enregistrement exactement. Ne corrigez pas la grammaire et ne supprimez ni pauses ni hésitations."
},
"consent": {
"title": "Je confirme que cette voix peut être clonée",
"body": "J'ai l'autorisation du locuteur ou une autre base légale pour stocker et utiliser cet enregistrement afin de produire de la parole synthétique."
},
"readiness": {
"title": "Préparation de la voix",
"body": "Une voix devient disponible en synthèse vocale lorsque tous les éléments requis sont remplis.",
"audio": "Référence PCM-WAV valide",
"quality": "Fenêtre de qualité de 6 à 30 secondes",
"name": "Nom de voix reconnaissable",
"transcript": "Transcription de référence exacte",
"consent": "Autorisation confirmée"
},
"privacy": {
"title": "Privé par défaut. ",
"body": "L'audio de référence est stocké dans le répertoire de données de LocalAI avec des permissions restreintes et n'est jamais exposé comme chemin de dossier de modèle."
},
"actions": {
"back": "Retour à la bibliothèque",
"cancel": "Annuler",
"save": "Enregistrer la voix",
"saving": "Enregistrement…"
},
"toasts": {
"created": "{{name}} est prête à l'emploi"
}
},
"sound": {
"title": "Génération de sons",
"labels": {
"model": "Modèle",
"prompt": "Prompt",
"promptPlaceholder": "Décrivez le son à générer...",
"instrumental": "Instrumental",
"bpm": "BPM",
"duration": "Durée (secondes)",
"language": "Langue",
"timesignature": "Signature rythmique",
"keyscale": "Tonalité / Gamme",
"vocalLanguage": "Langue du chant",
"vocalLanguagePlaceholder": "ex. Français",
"caption": "Légende",
"lyrics": "Paroles",
"lyricsPlaceholder": "Paroles pour la génération vocale",
"simple": "Simple",
"advanced": "Avancé",
"seed": "Graine",
"seedPlaceholder": "Aléatoire",
"thinkMode": "Mode réflexion"
},
"actions": {
"generate": "Générer",
"generating": "Génération..."
},
"empty": "L'audio généré apparaîtra ici",
"toasts": {
"noPrompt": "Veuillez saisir un prompt",
"noModel": "Veuillez sélectionner un modèle",
"generateFailed": "Échec de la génération"
}
},
"audioTransform": {
"title": "Transformation audio",
"labels": {
"model": "Modèle",
"audio": "Audio (obligatoire)",
"reference": "Référence (facultatif)",
"referenceHelp": "Signal de bouclage / extrémité distante pour l'annulation d'écho, locuteur cible pour la conversion de voix. Laissez vide pour une transformation inconditionnelle.",
"advancedParameters": "Paramètres avancés",
"advancedParametersHelp": "propres au backend (une paire clé=valeur par ligne, ex. noise_gate=true)",
"advancedParametersPlaceholder": "# Facultatif. Pour LocalVQE :\n# noise_gate=true\n# noise_gate_threshold_dbfs=-50"
},
"input": {
"upload": "Importer",
"uploadDescription": "Déposez un fichier ici ou",
"uploadBrowse": "parcourez",
"record": "Enregistrer",
"startRecording": "Démarrer l'enregistrement",
"stop": "Arrêter",
"encoding": "Encodage...",
"clear": "Effacer",
"microphoneUnavailable": "La capture du microphone n'est pas disponible dans ce navigateur.",
"echoNotice": "Les navigateurs appliquent souvent leur propre annulation d'écho et réduction de bruit WebRTC par défaut. Le résultat est généralement moins bon qu'avec LocalVQE sur l'audio brut.",
"echoTest": "Test d'écho (enregistrer le micro pendant la lecture de la référence)",
"stopEchoTest": "Arrêter le test d'écho"
},
"result": {
"audio": "Audio",
"reference": "Référence",
"inputSpectrum": "Spectre d'entrée",
"outputSpectrum": "Spectre de sortie",
"outputSpectrumHint": "Transformez pour comparer l'atténuation",
"output": "Sortie"
},
"actions": {
"transform": "Transformer",
"processing": "Traitement..."
},
"empty": "Choisissez un fichier audio (et éventuellement une référence) à transformer"
},
"talk": {
"title": "Vocal",
"subtitle": "Conversation vocale en temps réel",
"actions": {
"start": "Démarrer la session",
"stop": "Terminer la session",
"connecting": "Connexion...",
"muted": "Micro coupé",
"mute": "Couper le micro",
"unmute": "Réactiver le micro"
},
"labels": {
"model": "Modèle",
"voice": "Voix",
"voicePlaceholder": "alloy",
"language": "Langue",
"languagePlaceholder": "fr",
"instructions": "Instructions",
"instructionsPlaceholder": "Définir la personnalité de l'assistant..."
},
"status": {
"idle": "Inactif",
"connecting": "Connexion...",
"listening": "Écoute...",
"speaking": "Parle...",
"ended": "Session terminée"
},
"toasts": {
"noModel": "Sélectionnez d'abord un modèle",
"connectFailed": "Échec de la connexion : {{message}}"
}
},
"history": {
"title": "Historique",
"empty": "Aucun historique",
"deleteEntry": "Supprimer l'entrée",
"clear": "Effacer l'historique",
"clearTitle": "Effacer tout l'historique",
"clearMessage": "Supprimer toutes les entrées de l'historique ? Cette action est irréversible.",
"clearConfirm": "Effacer",
"cleared": "Historique effacé"
},
"request": {
"heading": "Requête",
"copyCurl": "Copier en curl",
"copied": "Copié"
},
"diarization": {
"title": "Diarisation des locuteurs",
"subtitle": "Importez un enregistrement pour voir qui parle et quand. Prévisualisez la parole propre avant de mémoriser une voix.",
"model": "Modèle",
"recording": "Enregistrement",
"optIn": "Préparer les locuteurs à mémoriser",
"warning": "Les voix mémorisées sont partagées globalement sur ce serveur et sont perdues à son redémarrage. Rien n'est mémorisé automatiquement.",
"manage": "Gérer les voix mémorisées",
"running": "Diarisation…",
"run": "Diariser",
"unsupported": "Choisissez un modèle compatible avec les profils et doté d'un encodeur de locuteur, ou désactivez « Préparer les locuteurs à mémoriser » pour lancer une diarisation normale.",
"previewError": "Impossible de lire cet enregistrement. Vérifiez que votre navigateur prend en charge son format audio.",
"speakers": "Locuteurs",
"segments": "Segments",
"duration": "Parole propre : {{seconds}} secondes",
"preview": "Écouter {{number}}",
"insufficient": "Pas assez de parole propre ou aucun profil exploitable. Essayez un enregistrement avec des prises de parole plus longues et sans chevauchement.",
"nameAndRemember": "Nommer et mémoriser",
"name": "Nom",
"saving": "Enregistrement…",
"remember": "Mémoriser",
"cancel": "Annuler",
"stop": "Arrêter la prévisualisation",
"missingProfiles": "Le backend n'a pas renvoyé les profils de locuteurs demandés."
}
}
@@ -0,0 +1,379 @@
{
"lifecycle": {
"title": "Modèles",
"navLabel": "Cycle de vie des modèles",
"views": {
"explore": "Explorer",
"installed": "Installés"
},
"filters": {
"all": "Tous",
"running": "En cours",
"idle": "Inactifs",
"disabled": "Désactivés",
"pinned": "Épinglés",
"distributed": "Distribués"
},
"installed": {
"searchPlaceholder": "Rechercher les modèles installés",
"count": "{{shown}} sur {{total}}",
"backToAll": "Tous les modèles installés",
"eyebrow": "Installés sur cet hôte",
"summary": "{{count}} modèles prêts à servir.",
"summaryHint": "Sélectionnez un modèle pour inspecter son état d'exécution et ses contrôles."
},
"states": {
"running": "En cours",
"idle": "Inactif",
"disabled": "Désactivé",
"working": "En cours…"
},
"actions": {
"load": "Charger",
"loading": "Chargement…",
"stop": "Arrêter",
"update": "Mettre à jour",
"updating": "Mise à jour…",
"enable": "Activer le modèle",
"disable": "Désactiver le modèle",
"pin": "Épingler (empêche le déchargement automatique)",
"unpin": "Désépingler (autorise le déchargement automatique)",
"edit": "Modifier la configuration",
"logs": "Journaux du backend",
"delete": "Supprimer le modèle",
"forModel": "Actions pour {{model}}",
"open": "Ouvrir {{useCase}}",
"manageInstallation": "Gérer l'installation"
},
"actionNames": {
"load": "charger",
"stop": "arrêter",
"enable": "activer",
"disable": "désactiver",
"pin": "épingler",
"unpin": "désépingler",
"delete": "supprimer",
"update": "mettre à jour"
},
"toasts": {
"loaded": "{{model}} chargé",
"stopped": "{{model}} arrêté",
"enabled": "{{model}} activé",
"disabled": "{{model}} désactivé",
"pinned": "{{model}} épinglé",
"unpinned": "{{model}} désépinglé",
"deleted": "{{model}} supprimé",
"updated": "Modèles mis à jour"
},
"confirm": {
"stopTitle": "Arrêter le modèle",
"stopMessage": "Arrêter le modèle {{model}} ?",
"deleteTitle": "Supprimer le modèle",
"deleteMessage": "Supprimer le modèle {{model}} ? Cette action est irréversible."
},
"errors": {
"action": "Impossible de {{action}} {{model}} : {{message}}",
"loadList": "Impossible de charger les modèles installés : {{message}}"
},
"detail": {
"title": "Détails",
"state": "État",
"backend": "Backend",
"auto": "Auto",
"pinned": "Épinglé",
"yes": "oui",
"description": "Description",
"noDescription": "Aucune description de galerie n'est disponible pour ce modèle.",
"license": "Licence",
"tags": "Étiquettes",
"links": "Liens",
"distributed": "Distribué",
"source": "Source",
"files": "Fichiers",
"fileCount": "{{count}} fichier",
"fileCount_other": "{{count}} fichiers",
"adopted": "Adopté",
"adoptedHint": "Découvert sur un worker mais non configuré localement. Enregistrez la configuration pour la rendre permanente.",
"alias": "alias → {{target}}",
"aliasTitle": "Alias → {{target}}",
"chain": "chaîne → {{target}}",
"chainTitle": "Chaîne de bascule → {{target}}"
},
"open": {
"title": "Ouvrir",
"chat": "Chat",
"completion": "Complétion",
"image": "Image",
"video": "Vidéo",
"tts": "TTS",
"transcribe": "Transcription",
"sound": "Son",
"face": "Visage",
"voice": "Voix",
"embeddings": "Embeddings",
"rerank": "Reranking",
"vad": "VAD",
"score": "Score",
"decisions": "Décisions"
},
"empty": {
"title": "Aucun modèle installé",
"text": "Parcourez la galerie ou importez un modèle pour commencer.",
"explore": "Explorer les modèles",
"import": "Importer un modèle",
"noMatches": "Aucun modèle installé ne correspond à ces filtres.",
"clear": "Effacer les filtres"
}
},
"title": "Modèles",
"subtitle": "Parcourez et installez des modèles d'IA depuis la galerie",
"models": "Modèles",
"recommended": {
"title": "Recommandé pour votre matériel",
"cpuNote": "Aucun GPU détecté - petits modèles qui restent réactifs sur CPU.",
"gpuNote": "Dimensionnés pour tenir dans votre VRAM disponible, avec de la marge pour le contexte.",
"install": "Installer",
"installing": "Installation",
"installStarted": "Installation de {{model}}…",
"installFailed": "Échec de l'installation : {{message}}",
"dismiss": "Ignorer les recommandations",
"summary": "{{n}} modèles suggérés",
"bestFit": "Meilleur choix",
"alternative": "Convient aussi"
},
"stats": {
"available": "Disponibles",
"installed": "Installés"
},
"actions": {
"addModel": "Ajouter un modèle",
"importModel": "Importer un modèle",
"install": "Installer",
"reinstall": "Réinstaller",
"delete": "Supprimer"
},
"filters": {
"all": "Tous",
"llm": "Chat",
"image": "Image",
"video": "Vidéo",
"threed": "3D",
"threedAnimation": "Animation 3D",
"multimodal": "Multimodal",
"vision": "Vision",
"tts": "TTS",
"stt": "STT",
"diarization": "Diarisation",
"soundClassification": "Étiquetage sonore",
"soundGen": "Son",
"audioTransform": "Effets audio",
"realtimeAudio": "Audio temps réel",
"embedding": "Embeddings",
"rerank": "Reranking",
"detection": "Détection",
"vad": "VAD",
"ner": "NER",
"fitsGpu": "Tient dans le GPU",
"collapseVariants": "Une ligne par modèle",
"allBackends": "Tous les backends",
"searchBackends": "Rechercher des backends...",
"contextSize": "Contexte :",
"useCaseLabel": "Filtrer par cas d'usage",
"unavailableForBackend": "Non disponible pour le backend sélectionné",
"someSelected": "{{count}} sélectionnés",
"refineLabel": "Affiner"
},
"search": {
"placeholder": "Rechercher des modèles...",
"clearFilters": "Effacer les filtres"
},
"table": {
"modelName": "Nom du modèle",
"description": "Description",
"backend": "Backend",
"sizeVram": "Taille / VRAM",
"status": "État",
"actions": "Actions",
"size": "Taille : {{size}}",
"vram": "VRAM : {{vram}}",
"fits": "Tient",
"mayNotFit": "Peut ne pas tenir",
"trustRemoteCode": "Trust Remote Code",
"installing": "Installation",
"installingPct": "Installation · {{percent}} %",
"installed": "Installé",
"notInstalled": "Non installé"
},
"detail": {
"description": "Description",
"gallery": "Galerie",
"backend": "Backend",
"size": "Taille",
"vram": "VRAM",
"license": "Licence",
"tags": "Étiquettes",
"links": "Liens",
"warning": "Avertissement",
"files": "Fichiers",
"fitsGpu": "Tient dans le GPU",
"mayNotFitGpu": "Peut ne pas tenir dans le GPU",
"requiresTrustRemoteCode": "Nécessite Trust Remote Code",
"fileCount_one": "{{count}} fichier",
"fileCount_other": "{{count}} fichiers",
"filename": "Nom du fichier",
"uri": "URI",
"sha256": "SHA256",
"backToAll": "Tous les modèles",
"vramAt": "VRAM à {{context}}",
"headroom": "Marge",
"headroomOn": "Marge sur {{node}}"
},
"empty": {
"title": "Aucun modèle trouvé",
"withFilters": "Aucun modèle ne correspond à votre recherche ou à vos filtres.",
"collapsedVariantsHint": "Les variantes déjà proposées par une autre entrée sont masquées. Désactivez « Une ligne par modèle » pour les afficher.",
"noFilters": "La galerie de modèles est vide."
},
"deleteDialog": {
"title": "Supprimer le modèle",
"message": "Supprimer le modèle {{model}} ?",
"confirm": "Supprimer {{model}}",
"deletingToast": "Suppression de {{model}}..."
},
"errors": {
"loadFailed": "Échec du chargement des modèles : {{message}}",
"installFailed": "Échec de l'installation : {{message}}",
"deleteFailed": "Échec de la suppression : {{message}}"
},
"selector": {
"loading": "Chargement des modèles...",
"selectModel": "Sélectionner un modèle...",
"searchPlaceholder": "Rechercher des modèles...",
"noModels": "Aucun modèle disponible"
},
"variants": {
"title": "Variantes",
"chooseVariant": "Choisir une variante",
"auto": "Auto",
"autoSelected": "Sélectionnée automatiquement",
"base": "Version de base",
"doesNotFit": "Ne tient pas",
"unknownSize": "Taille inconnue",
"unknownBackend": "Backend inconnu",
"loading": "Chargement des variantes...",
"installVariant": "Installer {{variant}}",
"quantizationTitle": "Format des poids",
"unknownQuantization": "Format inconnu",
"showDetails": "Afficher tous les détails de {{variant}}",
"hideDetails": "Masquer les détails de {{variant}}",
"detailsLoading": "Chargement des détails...",
"detailsUnavailable": "Les détails de {{variant}} n'ont pas pu être chargés.",
"features": {
"dflash": "Plus rapide : DFlash",
"mtp": "Plus rapide : MTP"
}
},
"rail": {
"sortLabel": "Trier les modèles",
"downloadingPct": "téléchargement {{percent}} %",
"tooLarge": "{{size}} · trop volumineux",
"fitsSize": "{{size}} · tient",
"previousPage": "Page précédente",
"nextPage": "Page suivante",
"showingCount": "{{shown}} sur {{total}}",
"sizing": "dimensionnement…"
},
"groups": {
"text": "Texte et raisonnement",
"vision": "Vision",
"audio": "Parole et audio",
"visual": "Image et vidéo",
"other": "Tout le reste"
},
"chart": {
"title": "VRAM selon la longueur de contexte",
"available": "{{vram}} disponible",
"barTitle": "Un contexte de {{context}} nécessite {{vram}}",
"fitsEverywhere": "Fonctionne à toutes les longueurs de contexte sur cet hôte.",
"fitsNowhere": "Ne tiendra pas sur cet hôte, quelle que soit la longueur de contexte.",
"fitsUpTo": "Tient jusqu'à un contexte de {{context}}."
},
"shelves": {
"hostLabel": "Votre hôte",
"heroWithGpu": "{{vram}} de mémoire GPU, {{count}} modèles dans la galerie.",
"heroNoGpu": "{{count}} modèles dans la galerie.",
"heroHint": "Choisissez un élément à gauche pour voir sa taille, ses variantes et s'il tournera ici.",
"browsing": "Parcours",
"pickHint": "Sélectionnez un modèle pour voir son détail.",
"heroWithRam": "{{ram}} de mémoire système, {{count}} modèles dans la galerie.",
"heroWithCluster": "{{vram}} sur {{node}}, le plus grand des {{nodes}} nœuds, {{count}} modèles dans la galerie.",
"heroWithNode": "{{vram}} sur {{node}}, {{count}} modèles dans la galerie.",
"byUseCase": "Ou commencez par un cas d'usage",
"pickText": "Chat, raisonnement, embeddings",
"pickVision": "Lire des images et des documents",
"pickAudio": "Parole en entrée et en sortie",
"pickVisual": "Générer des images et des vidéos"
},
"failover": {
"title": "Chaîne de bascule",
"servedBy": "Servi par",
"changed": "modifié {{time}}",
"pinnedTo": "Épinglé sur {{target}}",
"warm": "Chaud",
"never": "Jamais",
"states": {
"primary": "Principal",
"fallback": "Repli",
"degraded": "Dégradé",
"healthy": "Sain",
"down": "Indisponible",
"recovering": "Récupération",
"missing": "Manquant"
},
"kinds": {
"local": "Local",
"remote": "Distant"
},
"columns": {
"target": "Cible",
"kind": "Type",
"warm": "Chaud",
"health": "Santé",
"lastProbe": "Dernière sonde",
"lastError": "Dernière erreur",
"actions": "Actions"
},
"actions": {
"pin": "Épingler",
"pinning": "Épinglage…",
"unpin": "Désépingler",
"unpinning": "Désépinglage…"
},
"confirm": {
"pinTitle": "Épingler {{target}} ?",
"pinMessage": "Seul {{target}} servira {{chain}} jusqu'au désépinglage. La bascule automatique est suspendue pour cette chaîne.",
"unpinTitle": "Désépingler {{chain}} ?",
"unpinMessage": "{{chain}} revient à la bascule automatique."
},
"errors": {
"pin": "Échec de l'épinglage : {{error}}",
"unpin": "Échec du désépinglage : {{error}}"
},
"overview": {
"title": "Chaînes de bascule",
"subtitle": "Santé en direct et cible active pour chaque chaîne de bascule.",
"columns": {
"chain": "Chaîne",
"state": "État",
"active": "Cible active",
"targets": "Cibles",
"changed": "Modifié"
},
"empty": {
"title": "Aucune chaîne de bascule",
"text": "Ajoutez une chaîne de bascule pour contourner automatiquement les cibles en mauvaise santé.",
"cta": "Créer une chaîne de bascule"
}
}
}
}
@@ -0,0 +1,106 @@
{
"appName": "LocalAI",
"openMenu": "Ouvrir le menu",
"closeMenu": "Fermer le menu",
"primaryNavigation": "Navigation principale",
"switchToLightMode": "Passer en mode clair",
"switchToDarkMode": "Passer en mode sombre",
"expandSidebar": "Développer la barre latérale",
"collapseSidebar": "Réduire la barre latérale",
"changeLanguage": "Changer de langue",
"logout": "Déconnexion",
"accountSettings": "Paramètres du compte",
"account": "Compte",
"accountFor": "Compte : {{name}}",
"sections": {
"create": "Créer",
"recognition": "Reconnaissance",
"build": "Construire",
"operate": "Exploiter",
"workspace": "Espace de travail"
},
"hub": {
"import": "Importer",
"recognition": "Reconnaissance",
"runtime": "Exécution",
"status": "État",
"traffic": "Trafic",
"toolsLabel": "Outils de création",
"overviewSupporting": "Tout ce que vous créez avec vos modèles, au même endroit.",
"overviewEmpty": "Aucun outil de création n'est disponible pour votre compte.",
"descriptions": {
"agents": "Créez et exécutez des agents qui utilisent vos modèles et vos outils.",
"faces": "Détectez, comparez et associez des visages.",
"fineTune": "Entraînez un modèle sur vos propres données.",
"import": "Ajoutez un modèle depuis un fichier, une URL ou un dépôt Hugging Face.",
"jobs": "Tâches planifiées et ponctuelles exécutées par les agents pour vous.",
"memory": "Collections de documents que les agents peuvent consulter.",
"quantize": "Réduisez un modèle pour l'exécuter sur du matériel plus modeste.",
"skills": "Instructions réutilisables que les agents chargent à la demande.",
"voices": "Identifiez les locuteurs et conservez une bibliothèque de profils vocaux."
}
},
"operate": {
"inference": "Inférence",
"cluster": "Cluster",
"observability": "Observabilité",
"access": "Accès",
"system": "Système",
"activity": "Activité",
"runtime": "Exécution",
"administration": "Administration"
},
"items": {
"home": "Accueil",
"models": "Modèles",
"chat": "Chat",
"studio": "Studio",
"talk": "Vocal",
"fineTune": "Fine-tuning",
"quantize": "Quantification",
"faces": "Visages",
"voices": "Voix",
"jobs": "Tâches",
"operate": "Admin",
"audioTransform": "Transformation audio",
"faceRecognition": "Reconnaissance faciale",
"voiceRecognition": "Reconnaissance vocale",
"agents": "Agents",
"skills": "Compétences",
"memory": "Mémoire",
"mcpJobs": "Tâches MCP CI",
"usage": "Utilisation",
"users": "Utilisateurs",
"middleware": "Middleware",
"backends": "Backends",
"voiceLibrary": "Bibliothèque de voix",
"traces": "Traces",
"nodes": "Nœuds",
"scheduling": "Ordonnancement",
"swarm": "Essaim",
"system": "Système",
"settings": "Paramètres",
"api": "API",
"activity": "Activité",
"overview": "Vue d'ensemble",
"thisMachine": "Cette machine",
"failover": "Bascule",
"gpuHost": "GPU et hôte",
"logs": "Journaux",
"p2p": "P2P",
"prometheus": "Prometheus",
"trafficModels": "Modèles"
},
"footer": {
"github": "GitHub",
"documentation": "Documentation",
"author": "Auteur",
"copyright": "© 2023-{{year}} {{author}}"
},
"console": {
"automation": "Automatisation",
"training": "Entraînement",
"expandNavigation": "Développer la navigation {{section}}",
"collapseNavigation": "Réduire la navigation {{section}}"
}
}
@@ -0,0 +1,79 @@
{
"title": "Compétences",
"subtitle": "Gérez les compétences des agents (instructions et ressources réutilisables)",
"unavailable": {
"subtitle": "Le service de compétences est indisponible ou l'index est en cours de reconstruction. Réessayez dans un instant.",
"retry": "Réessayer"
},
"actions": {
"newSkill": "Nouvelle compétence",
"createSkill": "Créer une compétence",
"import": "Importer",
"importing": "Importation...",
"gitRepos": "Dépôts Git",
"edit": "Modifier",
"delete": "Supprimer",
"export": "Exporter",
"sync": "Synchroniser",
"addRepo": "Ajouter un dépôt",
"adding": "Ajout...",
"remove": "Retirer",
"enable": "Activer",
"disable": "Désactiver"
},
"search": {
"placeholder": "Rechercher des compétences..."
},
"git": {
"title": "Dépôts Git",
"description": "Ajoutez des dépôts Git depuis lesquels récupérer des compétences. Elles apparaîtront dans la liste après synchronisation.",
"urlPlaceholder": "https://github.com/utilisateur/depot ou git@github.com:utilisateur/depot.git",
"noRepos": "Aucun dépôt Git configuré. Ajoutez-en un ci-dessus.",
"disabled": "Désactivé",
"removeRepo": "Retirer le dépôt"
},
"card": {
"noDescription": "Aucune description",
"readOnly": "Lecture seule",
"editTitle": "Modifier la compétence",
"deleteTitle": "Supprimer la compétence",
"exportTitle": "Exporter en .tar.gz"
},
"empty": {
"title": "Aucune compétence trouvée",
"text": "Créez une compétence ou importez-en une pour commencer.",
"noPersonal": "Vous n'avez encore aucune compétence."
},
"sections": {
"yourSkills": "Vos compétences",
"otherUsersSkills": "Compétences des autres utilisateurs"
},
"deleteDialog": {
"title": "Supprimer la compétence",
"message": "Supprimer la compétence « {{name}} » ? Cette action est irréversible.",
"confirm": "Supprimer"
},
"removeRepoDialog": {
"title": "Retirer le dépôt Git",
"message": "Retirer ce dépôt Git ? Les compétences qui en proviennent ne seront plus disponibles.",
"confirm": "Retirer"
},
"toasts": {
"loadFailed": "Échec du chargement des compétences",
"deleted": "Compétence « {{name}} » supprimée",
"deleteFailed": "Échec de la suppression de la compétence",
"exported": "Compétence « {{name}} » exportée",
"exportFailed": "Échec de l'export",
"imported": "Compétence importée depuis « {{file}} »",
"importFailed": "Échec de l'import",
"loadReposFailed": "Échec du chargement des dépôts Git",
"repoAdded": "Dépôt Git ajouté et en cours de synchronisation",
"addRepoFailed": "Échec de l'ajout du dépôt",
"synced": "Dépôt synchronisé",
"syncFailed": "Échec de la synchronisation",
"toggled": "Dépôt basculé",
"toggleFailed": "Échec du basculement",
"removed": "Dépôt retiré",
"removeFailed": "Échec du retrait"
}
}
+1
View File
@@ -13,6 +13,7 @@ export const SUPPORTED_LANGUAGES = [
{ code: 'id', name: 'Bahasa Indonesia', flag: 'ID' },
{ code: 'ko', name: '한국어', flag: 'KO' },
{ code: 'pt-BR', name: 'Português (Brasil)', flag: 'BR' },
{ code: 'fr', name: 'Français', flag: 'FR' },
]
export const NAMESPACES = [