2026-04-17 09:09:50 +08:00
|
|
|
|
export default {
|
|
|
|
|
|
// Login
|
|
|
|
|
|
login: {
|
|
|
|
|
|
title: 'Hermes Web UI',
|
|
|
|
|
|
description: 'Entrez votre jeton d\'acces pour continuer. Retrouvez-le dans les journaux de demarrage du serveur.',
|
|
|
|
|
|
placeholder: 'Jeton d\'acces',
|
|
|
|
|
|
submit: 'Connexion',
|
|
|
|
|
|
tokenRequired: 'Veuillez entrer votre jeton d\'acces',
|
|
|
|
|
|
invalidToken: 'Jeton invalide',
|
|
|
|
|
|
connectionFailed: 'Impossible de se connecter au serveur',
|
2026-04-22 20:27:33 +08:00
|
|
|
|
passwordLogin: 'Mot de passe',
|
|
|
|
|
|
tokenLogin: 'Jeton',
|
|
|
|
|
|
usernamePlaceholder: 'Nom d\'utilisateur',
|
|
|
|
|
|
passwordPlaceholder: 'Mot de passe',
|
|
|
|
|
|
credentialsRequired: 'Veuillez entrer le nom d\'utilisateur et le mot de passe',
|
|
|
|
|
|
invalidCredentials: 'Nom d\'utilisateur ou mot de passe incorrect',
|
|
|
|
|
|
passwordMismatch: 'Les mots de passe ne correspondent pas',
|
|
|
|
|
|
passwordTooShort: 'Le mot de passe doit contenir au moins 6 caracteres',
|
|
|
|
|
|
setupSuccess: 'Login par mot de passe configure avec succes',
|
|
|
|
|
|
passwordChanged: 'Mot de passe change avec succes',
|
|
|
|
|
|
passwordRemoved: 'Login par mot de passe supprime',
|
|
|
|
|
|
setupPassword: 'Configurer le login par mot de passe',
|
|
|
|
|
|
changePassword: 'Changer le mot de passe',
|
|
|
|
|
|
changeUsername: 'Changer le nom d\'utilisateur',
|
|
|
|
|
|
removePasswordLogin: 'Supprimer',
|
|
|
|
|
|
username: 'Nom d\'utilisateur',
|
|
|
|
|
|
currentPassword: 'Mot de passe actuel',
|
|
|
|
|
|
newPassword: 'Nouveau mot de passe',
|
|
|
|
|
|
confirmPassword: 'Confirmer le mot de passe',
|
|
|
|
|
|
newUsername: 'Nouveau nom d\'utilisateur',
|
|
|
|
|
|
usernameChanged: 'Nom d\'utilisateur change avec succes',
|
|
|
|
|
|
usernameTooShort: 'Le nom d\'utilisateur doit contenir au moins 2 caracteres',
|
|
|
|
|
|
setupDescription: 'Configurez un nom d\'utilisateur et un mot de passe pour un login rapide. Le jeton d\'acces reste disponible.',
|
|
|
|
|
|
removeConfirm: 'Voulez-vous vraiment supprimer le login par mot de passe? Vous devrez utiliser le jeton d\'acces.',
|
|
|
|
|
|
passwordLoginNotConfigured: 'Login par mot de passe non configure',
|
|
|
|
|
|
passwordLoginConfigured: 'Login par mot de passe active ({username})',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Common
|
|
|
|
|
|
common: {
|
|
|
|
|
|
loading: 'Chargement...',
|
|
|
|
|
|
cancel: 'Annuler',
|
2026-04-17 23:11:57 +08:00
|
|
|
|
retry: 'Réessayer',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
delete: 'Supprimer',
|
|
|
|
|
|
edit: 'Modifier',
|
|
|
|
|
|
save: 'Enregistrer',
|
|
|
|
|
|
saved: 'Enregistre',
|
|
|
|
|
|
update: 'Mettre a jour',
|
|
|
|
|
|
create: 'Creer',
|
|
|
|
|
|
saveFailed: 'Echec de l\'enregistrement',
|
|
|
|
|
|
ok: 'OK',
|
|
|
|
|
|
copied: 'Copie',
|
|
|
|
|
|
copy: 'Copier',
|
|
|
|
|
|
noData: 'Aucune donnee',
|
|
|
|
|
|
fetch: 'Recuperer',
|
|
|
|
|
|
add: 'Ajouter',
|
|
|
|
|
|
enable: 'Activer',
|
|
|
|
|
|
disable: 'Desactiver',
|
|
|
|
|
|
configured: 'Configure',
|
|
|
|
|
|
notConfigured: 'Non configure',
|
|
|
|
|
|
confirm: 'Confirmer',
|
|
|
|
|
|
expand: 'Developper',
|
|
|
|
|
|
collapse: 'Reduire',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Sidebar
|
|
|
|
|
|
sidebar: {
|
|
|
|
|
|
chat: 'Discussion',
|
|
|
|
|
|
jobs: 'Taches planifiees',
|
|
|
|
|
|
models: 'Modeles',
|
|
|
|
|
|
profiles: 'Profils',
|
|
|
|
|
|
skills: 'Competences',
|
|
|
|
|
|
memory: 'Memoire',
|
|
|
|
|
|
logs: 'Journaux',
|
|
|
|
|
|
usage: 'Utilisation',
|
|
|
|
|
|
channels: 'Canaux',
|
|
|
|
|
|
terminal: 'Terminal',
|
2026-04-23 14:10:14 +08:00
|
|
|
|
files: 'Fichiers',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
settings: 'Parametres',
|
|
|
|
|
|
connected: 'Connecte',
|
|
|
|
|
|
disconnected: 'Deconnecte',
|
|
|
|
|
|
updateTip: 'Executez "hermes-web-ui update" dans le terminal pour mettre a jour',
|
|
|
|
|
|
updateVersion: 'Mettre a jour vers v{version}',
|
|
|
|
|
|
updating: 'Mise a jour...',
|
|
|
|
|
|
updateSuccess: 'Mise a jour terminee, veuillez redemarrer le serveur',
|
|
|
|
|
|
updateFailed: 'Echec de la mise a jour',
|
2026-04-22 20:27:33 +08:00
|
|
|
|
logout: 'Deconnexion',
|
2026-04-24 02:31:42 +02:00
|
|
|
|
nodeVersionWarning: 'Node.js v{version} detecte. Veuillez passer a la version 23 ou ulterieure.',
|
2026-04-22 20:27:33 +08:00
|
|
|
|
changelog: 'Journal des modifications',
|
|
|
|
|
|
noChangelog: 'Aucun journal disponible',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Chat
|
|
|
|
|
|
chat: {
|
2026-04-22 16:14:50 +08:00
|
|
|
|
contextRemaining: 'restant',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
emptyState: 'Demarrer une conversation avec Hermes Agent',
|
|
|
|
|
|
inputPlaceholder: 'Tapez un message... (Entree pour envoyer, Shift+Entree pour un saut de ligne)',
|
|
|
|
|
|
attachFiles: 'Joindre des fichiers',
|
|
|
|
|
|
stop: 'Arreter',
|
|
|
|
|
|
send: 'Envoyer',
|
|
|
|
|
|
contextUsed: 'Contexte utilise :',
|
|
|
|
|
|
sessions: 'Sessions',
|
|
|
|
|
|
noSessions: 'Aucune session',
|
|
|
|
|
|
newChat: 'Nouvelle discussion',
|
|
|
|
|
|
deleteSession: 'Supprimer cette session ?',
|
|
|
|
|
|
sessionDeleted: 'Session supprimee',
|
|
|
|
|
|
rename: 'Renommer',
|
2026-04-22 02:09:58 +02:00
|
|
|
|
pin: 'Épingler',
|
|
|
|
|
|
unpin: 'Désépingler',
|
|
|
|
|
|
pinned: 'Épinglés',
|
|
|
|
|
|
chatMode: 'Chat',
|
|
|
|
|
|
liveMode: 'Direct',
|
|
|
|
|
|
liveSessions: 'Sessions en direct',
|
|
|
|
|
|
recentBadge: 'Récent',
|
|
|
|
|
|
linkedSessions: '{count} sessions liées',
|
|
|
|
|
|
noVisibleMessages: 'Aucun message visible par l’humain.',
|
|
|
|
|
|
monitorRoleUser: 'Utilisateur',
|
|
|
|
|
|
monitorRoleAssistant: 'Assistant',
|
|
|
|
|
|
copySessionId: "Copier l'ID de session",
|
2026-04-17 09:09:50 +08:00
|
|
|
|
renamed: 'Renomme',
|
|
|
|
|
|
renameFailed: 'Echec du renommage',
|
|
|
|
|
|
renameSession: 'Renommer la session',
|
|
|
|
|
|
enterNewTitle: 'Entrez un nouveau titre',
|
|
|
|
|
|
other: 'Autre',
|
|
|
|
|
|
runFailed: 'Echec de l\'execution',
|
|
|
|
|
|
error: 'Erreur',
|
|
|
|
|
|
tool: 'Outil',
|
|
|
|
|
|
arguments: 'Arguments',
|
|
|
|
|
|
result: 'Resultat',
|
|
|
|
|
|
truncated: '... (tronque)',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Jobs
|
|
|
|
|
|
jobs: {
|
|
|
|
|
|
title: 'Taches planifiees',
|
|
|
|
|
|
createJob: 'Creer une tache',
|
|
|
|
|
|
editJob: 'Modifier la tache',
|
|
|
|
|
|
noJobs: 'Aucune tache planifiee. Creez-en une pour commencer.',
|
|
|
|
|
|
name: 'Nom',
|
|
|
|
|
|
namePlaceholder: 'Nom de la tache',
|
|
|
|
|
|
schedule: 'Planification (expression Cron)',
|
|
|
|
|
|
schedulePlaceholder: 'ex. 0 9 * * *',
|
|
|
|
|
|
quickPresets: 'Presets rapides',
|
|
|
|
|
|
selectPreset: 'Selectionner un preset...',
|
|
|
|
|
|
presetEveryMinute: 'Chaque minute',
|
|
|
|
|
|
presetEvery5Min: 'Toutes les 5 minutes',
|
|
|
|
|
|
presetEveryHour: 'Chaque heure',
|
|
|
|
|
|
presetEveryDay: 'Tous les jours a 00:00',
|
|
|
|
|
|
presetEveryDay9: 'Tous les jours a 09:00',
|
|
|
|
|
|
presetEveryMonday: 'Chaque lundi a 09:00',
|
|
|
|
|
|
presetEveryMonth: 'Le 1er de chaque mois a 09:00',
|
|
|
|
|
|
prompt: 'Invite',
|
|
|
|
|
|
promptPlaceholder: 'L\'invite a executer',
|
|
|
|
|
|
deliverTarget: 'Cible de livraison',
|
|
|
|
|
|
origin: 'Origine',
|
|
|
|
|
|
local: 'Local',
|
|
|
|
|
|
repeatCount: 'Nombre de repetitions (facultatif)',
|
|
|
|
|
|
repeatPlaceholder: 'Laisser vide pour infini',
|
|
|
|
|
|
jobCreated: 'Tache creee',
|
|
|
|
|
|
jobUpdated: 'Tache mise a jour',
|
|
|
|
|
|
nameRequired: 'Le nom est requis',
|
|
|
|
|
|
scheduleRequired: 'La planification est requise',
|
|
|
|
|
|
loadFailed: 'Echec du chargement de la tache',
|
|
|
|
|
|
jobPaused: 'Tache en pause',
|
|
|
|
|
|
jobResumed: 'Tache reprise',
|
|
|
|
|
|
jobTriggered: 'Tache declenchee',
|
|
|
|
|
|
jobDeleted: 'Tache supprimee',
|
|
|
|
|
|
status: {
|
|
|
|
|
|
running: 'En cours',
|
|
|
|
|
|
paused: 'En pause',
|
|
|
|
|
|
disabled: 'Desactivee',
|
|
|
|
|
|
scheduled: 'Planifiee',
|
|
|
|
|
|
},
|
|
|
|
|
|
info: {
|
|
|
|
|
|
schedule: 'Planification',
|
|
|
|
|
|
lastRun: 'Derniere execution',
|
|
|
|
|
|
nextRun: 'Prochaine execution',
|
|
|
|
|
|
deliver: 'Livraison',
|
|
|
|
|
|
repeat: 'Repetition',
|
|
|
|
|
|
},
|
|
|
|
|
|
action: {
|
|
|
|
|
|
pause: 'Pause',
|
|
|
|
|
|
pauseJob: 'Mettre en pause',
|
|
|
|
|
|
resume: 'Reprendre',
|
|
|
|
|
|
resumeJob: 'Reprendre la tache',
|
|
|
|
|
|
runNow: 'Executer maintenant',
|
|
|
|
|
|
triggerImmediately: 'Declencher immediatement',
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Skills
|
|
|
|
|
|
skills: {
|
|
|
|
|
|
title: 'Competences',
|
|
|
|
|
|
searchPlaceholder: 'Rechercher des competences...',
|
|
|
|
|
|
noMatch: 'Aucune competence ne correspond a votre recherche',
|
|
|
|
|
|
noSkills: 'Aucune competence trouvee',
|
|
|
|
|
|
backTo: 'Retour a',
|
|
|
|
|
|
attachedFiles: 'Fichiers joints',
|
|
|
|
|
|
loadFailed: 'Echec du chargement de la competence',
|
|
|
|
|
|
fileLoadFailed: 'Echec du chargement du fichier',
|
|
|
|
|
|
toggleFailed: 'Echec de l\'activation/desactivation de la competence',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Memory
|
|
|
|
|
|
memory: {
|
|
|
|
|
|
title: 'Memoire',
|
|
|
|
|
|
refresh: 'Actualiser',
|
|
|
|
|
|
loadFailed: 'Echec du chargement de la memoire',
|
|
|
|
|
|
myNotes: 'Mes notes',
|
|
|
|
|
|
noNotes: 'Aucune note pour l\'instant.',
|
|
|
|
|
|
notesPlaceholder: 'Ecrivez vos notes...',
|
|
|
|
|
|
userProfile: 'Profil utilisateur',
|
|
|
|
|
|
noProfile: 'Aucun profil pour l\'instant.',
|
|
|
|
|
|
profilePlaceholder: 'Ecrivez votre profil...',
|
|
|
|
|
|
soul: 'Ame',
|
|
|
|
|
|
noSoul: 'Aucune configuration d\'ame pour l\'instant.',
|
|
|
|
|
|
soulPlaceholder: 'Ecrivez la configuration de l\'ame...',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Models
|
|
|
|
|
|
models: {
|
|
|
|
|
|
title: 'Modeles',
|
|
|
|
|
|
addProvider: 'Ajouter un fournisseur',
|
|
|
|
|
|
providerType: 'Type de fournisseur',
|
|
|
|
|
|
preset: 'Preset',
|
|
|
|
|
|
custom: 'Personnalise',
|
|
|
|
|
|
selectProvider: 'Selectionner un fournisseur',
|
|
|
|
|
|
chooseProvider: 'Choisir un fournisseur...',
|
|
|
|
|
|
name: 'Nom',
|
|
|
|
|
|
autoGeneratedName: 'Genere automatiquement a partir de l\'URL de base',
|
|
|
|
|
|
baseUrl: 'URL de base',
|
|
|
|
|
|
baseUrlPlaceholder: 'ex. https://api.example.com/v1',
|
|
|
|
|
|
apiKey: 'Cle API',
|
|
|
|
|
|
apiKeyPlaceholder: 'sk-...',
|
|
|
|
|
|
defaultModel: 'Modele par defaut',
|
2026-04-17 22:05:06 +08:00
|
|
|
|
selectOrInput: 'Sélectionner ou saisir un modèle...',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
selectModel: 'Selectionner un modele...',
|
|
|
|
|
|
providerAdded: 'Fournisseur ajoute',
|
|
|
|
|
|
providerDeleted: 'Fournisseur supprime',
|
|
|
|
|
|
deleteProvider: 'Supprimer le fournisseur',
|
|
|
|
|
|
deleteConfirm: 'Etes-vous sur de vouloir supprimer "{name}" ?',
|
2026-04-17 23:11:57 +08:00
|
|
|
|
codexLoginTitle: 'Connexion OpenAI Codex',
|
|
|
|
|
|
codexWaiting: 'Entrez ce code sur la page d\'autorisation pour vous connecter :',
|
|
|
|
|
|
codexCopyCode: 'Code copié',
|
|
|
|
|
|
codexOpenLink: 'Ouvrir la page d\'autorisation',
|
|
|
|
|
|
codexApproved: 'Connexion réussie',
|
|
|
|
|
|
codexExpired: 'L\'autorisation a expiré. Veuillez réessayer.',
|
2026-04-23 08:39:19 +08:00
|
|
|
|
nousLoginTitle: 'Connexion Nous Portal',
|
|
|
|
|
|
nousWaiting: 'Entrez ce code sur la page d\'autorisation:',
|
|
|
|
|
|
nousCopyCode: 'Code copié',
|
|
|
|
|
|
nousOpenLink: 'Ouvrir la page d\'autorisation',
|
|
|
|
|
|
nousApproved: 'Connexion réussie',
|
|
|
|
|
|
nousDenied: 'Autorisation refusée',
|
|
|
|
|
|
nousExpired: 'Autorisation expirée',
|
2026-04-24 08:49:45 +08:00
|
|
|
|
customBadge: 'PERSONNALISÉ',
|
|
|
|
|
|
customModelPlaceholder: 'Nom du modèle personnalisé',
|
|
|
|
|
|
customModelHint: 'Entrée pour charger',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
noProviders: 'Aucun fournisseur trouve. Ajoutez un fournisseur personnalise pour commencer.',
|
|
|
|
|
|
builtIn: 'Integre',
|
|
|
|
|
|
customType: 'Personnalise',
|
|
|
|
|
|
provider: 'Fournisseur',
|
|
|
|
|
|
local: 'Local ({host})',
|
|
|
|
|
|
selectProviderRequired: 'Veuillez selectionner un fournisseur',
|
|
|
|
|
|
baseUrlRequired: 'L\'URL de base est requise',
|
|
|
|
|
|
apiKeyRequired: 'La cle API est requise',
|
|
|
|
|
|
modelRequired: 'Le modele par defaut est requis',
|
|
|
|
|
|
enterBaseUrl: 'Veuillez d\'abord entrer l\'URL de base',
|
|
|
|
|
|
unexpectedFormat: 'Format de reponse inattendu',
|
|
|
|
|
|
foundModels: '{count} modeles trouves',
|
|
|
|
|
|
fetchFailed: 'Echec de la recuperation des modeles',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Profiles
|
|
|
|
|
|
profiles: {
|
|
|
|
|
|
title: 'Profils',
|
|
|
|
|
|
create: 'Creer un profil',
|
|
|
|
|
|
import: 'Importer',
|
|
|
|
|
|
export: 'Exporter',
|
|
|
|
|
|
rename: 'Renommer',
|
|
|
|
|
|
delete: 'Supprimer',
|
|
|
|
|
|
switchTo: 'Passer a',
|
|
|
|
|
|
switchConfirm: 'Le passage au profil "{name}" redemarrera la passerelle. Continuer ?',
|
|
|
|
|
|
switchSuccess: 'Profil "{name}" actif',
|
|
|
|
|
|
switchFailed: 'Echec du changement de profil. La passerelle peut necessiter un redemarrage manuel.',
|
|
|
|
|
|
createSuccess: 'Profil "{name}" cree',
|
|
|
|
|
|
createFailed: 'Echec de la creation du profil',
|
|
|
|
|
|
renameSuccess: 'Profil renomme',
|
|
|
|
|
|
renameFailed: 'Echec du renommage du profil',
|
|
|
|
|
|
deleteConfirm: 'Etes-vous sur de vouloir supprimer le profil "{name}" ?',
|
|
|
|
|
|
deleteSuccess: 'Profil supprime',
|
|
|
|
|
|
deleteFailed: 'Echec de la suppression du profil',
|
|
|
|
|
|
exportSuccess: 'Profil exporte',
|
|
|
|
|
|
exportFailed: 'Echec de l\'exportation du profil',
|
|
|
|
|
|
importSuccess: 'Profil importe',
|
|
|
|
|
|
importFailed: 'Echec de l\'importation du profil',
|
|
|
|
|
|
importSelectFile: 'Selectionner un fichier d\'archive',
|
|
|
|
|
|
importInvalidFile: 'Veuillez selectionner une archive valide (.tar.gz, .tgz, .gz, .zip)',
|
|
|
|
|
|
name: 'Nom du profil',
|
|
|
|
|
|
namePlaceholder: 'Lettres, chiffres et tirets uniquement',
|
|
|
|
|
|
newName: 'Nouveau nom',
|
|
|
|
|
|
newNamePlaceholder: 'Entrez un nouveau nom',
|
|
|
|
|
|
cloneFromCurrent: 'Cloner depuis le profil actuel',
|
|
|
|
|
|
archivePath: 'Chemin de l\'archive',
|
|
|
|
|
|
archivePathPlaceholder: 'Chemin serveur du fichier d\'archive',
|
|
|
|
|
|
importName: 'Nom du profil (facultatif)',
|
|
|
|
|
|
importNamePlaceholder: 'Laisser vide pour utiliser le nom de l\'archive',
|
|
|
|
|
|
active: 'Actif',
|
|
|
|
|
|
model: 'Modele',
|
|
|
|
|
|
gateway: 'Passerelle',
|
|
|
|
|
|
alias: 'Alias',
|
|
|
|
|
|
provider: 'Fournisseur',
|
|
|
|
|
|
path: 'Chemin',
|
|
|
|
|
|
skills: 'Competences',
|
|
|
|
|
|
hasEnv: 'A un .env',
|
|
|
|
|
|
hasSoulMd: 'A un soul.md',
|
|
|
|
|
|
noProfiles: 'Aucun profil trouve. Creez-en un pour commencer.',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Logs
|
|
|
|
|
|
logs: {
|
|
|
|
|
|
title: 'Journaux',
|
|
|
|
|
|
all: 'Tout',
|
|
|
|
|
|
searchPlaceholder: 'Rechercher...',
|
|
|
|
|
|
refresh: 'Actualiser',
|
|
|
|
|
|
noEntries: 'Aucune entree de journal',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Settings
|
|
|
|
|
|
settings: {
|
|
|
|
|
|
title: 'Parametres',
|
|
|
|
|
|
saved: 'Enregistre',
|
|
|
|
|
|
saveFailed: 'Echec de l\'enregistrement',
|
|
|
|
|
|
tabs: {
|
|
|
|
|
|
display: 'Affichage',
|
2026-04-22 20:27:33 +08:00
|
|
|
|
account: 'Compte',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
agent: 'Agent',
|
|
|
|
|
|
memory: 'Memoire',
|
|
|
|
|
|
session: 'Session',
|
|
|
|
|
|
privacy: 'Confidentialite',
|
|
|
|
|
|
apiServer: 'Serveur API',
|
|
|
|
|
|
},
|
|
|
|
|
|
display: {
|
|
|
|
|
|
streaming: 'Reponses en continu',
|
|
|
|
|
|
streamingHint: 'Afficher les reponses de l\'IA en temps reel',
|
|
|
|
|
|
compact: 'Mode compact',
|
|
|
|
|
|
compactHint: 'Reduire l\'espacement des messages',
|
|
|
|
|
|
showReasoning: 'Afficher le raisonnement',
|
|
|
|
|
|
showReasoningHint: 'Afficher le processus de reflexion du modele',
|
|
|
|
|
|
showCost: 'Afficher le cout',
|
|
|
|
|
|
showCostHint: 'Afficher l\'utilisation des jetons dans les reponses',
|
|
|
|
|
|
inlineDiffs: 'Diffs en ligne',
|
|
|
|
|
|
inlineDiffsHint: 'Afficher les changements de code en ligne',
|
|
|
|
|
|
bellOnComplete: 'Son de fin',
|
|
|
|
|
|
bellOnCompleteHint: 'Jouer un son lorsque l\'IA a termine',
|
|
|
|
|
|
busyInputMode: 'Mode saisie active',
|
|
|
|
|
|
busyInputModeHint: 'Permettre la saisie pendant le traitement de l\'IA',
|
|
|
|
|
|
theme: 'Theme',
|
|
|
|
|
|
themeHint: 'Choisir clair, sombre ou suivre les preferences du systeme',
|
|
|
|
|
|
themeLight: 'Clair',
|
|
|
|
|
|
themeDark: 'Sombre',
|
|
|
|
|
|
themeSystem: 'Systeme',
|
|
|
|
|
|
},
|
|
|
|
|
|
agent: {
|
|
|
|
|
|
maxTurns: 'Tours maximum',
|
|
|
|
|
|
maxTurnsHint: 'Nombre maximum de tours d\'interaction par conversation',
|
|
|
|
|
|
gatewayTimeout: 'Delai d\'attente de la passerelle',
|
|
|
|
|
|
gatewayTimeoutHint: 'Delai d\'attente de la requete en secondes',
|
|
|
|
|
|
restartDrainTimeout: 'Delai de vidange au redemarrage',
|
|
|
|
|
|
restartDrainTimeoutHint: 'Delai de vidange avant redemarrage en secondes',
|
|
|
|
|
|
toolEnforcement: 'Application des outils',
|
|
|
|
|
|
toolEnforcementHint: 'Controler le mode d\'execution des appels d\'outils',
|
|
|
|
|
|
auto: 'Automatique',
|
|
|
|
|
|
always: 'Toujours',
|
|
|
|
|
|
never: 'Jamais',
|
|
|
|
|
|
},
|
|
|
|
|
|
memory: {
|
|
|
|
|
|
enabled: 'Activer la memoire',
|
|
|
|
|
|
enabledHint: 'Permettre a l\'IA de memoriser le contexte de conversation',
|
|
|
|
|
|
userProfile: 'Profil utilisateur',
|
|
|
|
|
|
userProfileHint: 'Permettre a l\'IA de memoriser les preferences utilisateur',
|
|
|
|
|
|
charLimit: 'Limite de caracteres de la memoire',
|
|
|
|
|
|
charLimitHint: 'Nombre maximum de caracteres pour MEMORY.md',
|
|
|
|
|
|
userCharLimit: 'Limite de caracteres du profil utilisateur',
|
|
|
|
|
|
userCharLimitHint: 'Nombre maximum de caracteres pour USER.md',
|
|
|
|
|
|
},
|
|
|
|
|
|
session: {
|
|
|
|
|
|
mode: 'Mode de reinitialisation',
|
|
|
|
|
|
modeHint: 'Condition de declenchement de la reinitialisation de session',
|
|
|
|
|
|
modeBoth: 'Inactivite + Planifie',
|
|
|
|
|
|
modeIdle: 'Inactivite uniquement',
|
|
|
|
|
|
modeHourly: 'Planifie uniquement',
|
|
|
|
|
|
idleMinutes: 'Delai d\'inactivite',
|
|
|
|
|
|
idleMinutesHint: 'Temps d\'attente avant reinitialisation automatique (minutes)',
|
|
|
|
|
|
atHour: 'Heure de reinitialisation planifiee',
|
2026-04-22 02:09:58 +02:00
|
|
|
|
humanOnly: 'Afficher uniquement les sessions humaines',
|
|
|
|
|
|
humanOnlyHint: 'Masquer par défaut le bruit des sous-agents et du moniteur de session',
|
|
|
|
|
|
liveMonitorHumanOnly: 'Moniteur live : n’afficher que les sessions humaines',
|
|
|
|
|
|
liveMonitorHumanOnlyHint: 'Masquer par défaut le bruit des sous-agents et du moniteur de session dans le moniteur live',
|
2026-04-17 09:09:50 +08:00
|
|
|
|
atHourHint: 'Reinitialiser la session a cette heure chaque jour',
|
|
|
|
|
|
},
|
|
|
|
|
|
privacy: {
|
|
|
|
|
|
redactPii: 'Masquer les DPI',
|
|
|
|
|
|
redactPiiHint: 'Detecter et masquer automatiquement les informations sensibles (mots de passe, cles, etc.)',
|
|
|
|
|
|
},
|
|
|
|
|
|
apiServer: {
|
|
|
|
|
|
enable: 'Activer',
|
|
|
|
|
|
enableHint: 'Activer le serveur API',
|
|
|
|
|
|
host: 'Hote',
|
|
|
|
|
|
hostHint: 'Adresse d\'ecoute',
|
|
|
|
|
|
port: 'Port',
|
|
|
|
|
|
portHint: 'Port d\'ecoute',
|
|
|
|
|
|
key: 'Cle',
|
|
|
|
|
|
keyHint: 'Cle d\'acces API',
|
|
|
|
|
|
cors: 'Origines CORS',
|
|
|
|
|
|
corsHint: 'Sources cross-origin autorisees',
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Platform channel settings
|
|
|
|
|
|
platform: {
|
|
|
|
|
|
requireMention: "Exiger une mention {'@'}",
|
|
|
|
|
|
requireMentionGroup: "Exiger une mention {'@'} dans les groupes pour repondre",
|
|
|
|
|
|
requireMentionChannel: "Exiger une mention {'@'} dans les canaux pour repondre",
|
|
|
|
|
|
requireMentionRoom: "Exiger une mention {'@'} dans les salles pour repondre",
|
|
|
|
|
|
reactions: 'Reactions',
|
|
|
|
|
|
reactionsHint: 'Reagir aux messages avec des emoji',
|
|
|
|
|
|
freeResponseChats: 'Discussions en reponse libre',
|
|
|
|
|
|
freeResponseChatsHint: "ID de discussions repondant sans mention {'@'} (separes par des virgules)",
|
|
|
|
|
|
freeResponseChannels: 'Canaux en reponse libre',
|
|
|
|
|
|
freeResponseChannelsHint: "ID de canaux repondant sans mention {'@'} (separes par des virgules)",
|
|
|
|
|
|
freeResponseRooms: 'Salles en reponse libre',
|
|
|
|
|
|
freeResponseRoomsHint: "ID de salles repondant sans mention {'@'} (separes par des virgules)",
|
|
|
|
|
|
mentionPatterns: 'Motifs de mention personnalises',
|
|
|
|
|
|
mentionPatternsHint: 'Motifs de declenchement supplementaires',
|
|
|
|
|
|
autoThread: 'Fil automatique',
|
|
|
|
|
|
autoThreadHint: "Creer automatiquement des fils de reponse apres une mention {'@'}",
|
|
|
|
|
|
autoThreadHintRoom: 'Creer automatiquement des fils de reponse dans les salles',
|
|
|
|
|
|
dmMentionThreads: 'Fils de mention en MP',
|
|
|
|
|
|
dmMentionThreadsHint: 'Utiliser des fils de reponse pour les mentions en MP',
|
|
|
|
|
|
allowBots: 'Autoriser les messages de bots',
|
|
|
|
|
|
allowBotsHint: 'Repondre aux messages d\'autres bots',
|
|
|
|
|
|
allowedChannels: 'Canaux autorises',
|
|
|
|
|
|
allowedChannelsHint: 'Liste blanche des ID de canaux (separes par des virgules)',
|
|
|
|
|
|
ignoredChannels: 'Canaux ignores',
|
|
|
|
|
|
ignoredChannelsHint: 'Canaux ou le bot ne repond jamais (separes par des virgules)',
|
|
|
|
|
|
noThreadChannels: 'Canaux sans fil',
|
|
|
|
|
|
noThreadChannelsHint: 'Canaux ou le bot repond sans fil (separes par des virgules)',
|
|
|
|
|
|
botToken: 'Jeton de bot',
|
|
|
|
|
|
botTokenHint: 'Jeton de bot depuis le portail developpeur',
|
|
|
|
|
|
accessToken: 'Jeton d\'acces',
|
|
|
|
|
|
accessTokenHint: 'Jeton d\'acces Matrix',
|
|
|
|
|
|
homeserver: 'URL du serveur domestique',
|
|
|
|
|
|
homeserverHint: 'URL du serveur domestique Matrix',
|
|
|
|
|
|
appId: 'ID de l\'application',
|
|
|
|
|
|
appIdHint: 'ID de l\'application Feishu',
|
|
|
|
|
|
appSecret: 'Secret de l\'application',
|
|
|
|
|
|
appSecretHint: 'Secret de l\'application Feishu',
|
|
|
|
|
|
clientId: 'ID client',
|
|
|
|
|
|
clientIdHint: 'ID client DingTalk',
|
|
|
|
|
|
clientSecret: 'Secret client',
|
|
|
|
|
|
clientSecretHint: 'Secret client DingTalk',
|
|
|
|
|
|
botId: 'ID du bot',
|
|
|
|
|
|
botIdHint: 'ID du bot WeCom',
|
|
|
|
|
|
wecomSecretHint: 'Secret du bot WeCom',
|
|
|
|
|
|
waEnabled: 'Activer WhatsApp',
|
|
|
|
|
|
waEnabledHint: 'Activer WhatsApp via appairage par code QR',
|
|
|
|
|
|
weixinToken: 'Jeton Weixin',
|
|
|
|
|
|
weixinTokenHint: 'Depuis la connexion QR de la CLI weixin (hermes weixin)',
|
|
|
|
|
|
accountId: 'ID de compte',
|
|
|
|
|
|
accountIdHint: 'ID du compte Weixin',
|
|
|
|
|
|
qrLogin: 'Connexion QR',
|
|
|
|
|
|
qrRelogin: 'Reconnexion',
|
|
|
|
|
|
qrFetching: 'Recuperation du code QR...',
|
|
|
|
|
|
qrScanHint: 'Scannez avec WeChat pour vous connecter',
|
|
|
|
|
|
qrScanedHint: 'Scanne, veuillez confirmer sur le telephone...',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Language
|
|
|
|
|
|
language: {
|
|
|
|
|
|
label: 'Langue',
|
|
|
|
|
|
zh: '中文',
|
|
|
|
|
|
en: 'English',
|
|
|
|
|
|
fr: 'Francais',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Terminal
|
|
|
|
|
|
terminal: {
|
|
|
|
|
|
sessions: 'Sessions',
|
|
|
|
|
|
newTab: 'Nouveau terminal',
|
|
|
|
|
|
closeSession: 'Fermer cette session ?',
|
|
|
|
|
|
sessionExited: 'Terminee',
|
|
|
|
|
|
processExited: 'Processus termine avec le code {code}',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Usage
|
|
|
|
|
|
usage: {
|
|
|
|
|
|
title: 'Statistiques d\'utilisation',
|
|
|
|
|
|
refresh: 'Actualiser',
|
|
|
|
|
|
totalTokens: 'Total des jetons',
|
|
|
|
|
|
inputTokens: 'Entree',
|
|
|
|
|
|
outputTokens: 'Sortie',
|
|
|
|
|
|
totalSessions: 'Total des sessions',
|
|
|
|
|
|
avgPerDay: '~{n}/jour en moy.',
|
|
|
|
|
|
estimatedCost: 'Cout est.',
|
|
|
|
|
|
cacheHitRate: 'Taux de succes du cache',
|
|
|
|
|
|
modelBreakdown: 'Repartition par modele',
|
|
|
|
|
|
dailyTrend: 'Utilisation quotidienne (30 derniers jours)',
|
|
|
|
|
|
date: 'Date',
|
|
|
|
|
|
tokens: 'Jetons',
|
|
|
|
|
|
cache: 'Cache',
|
|
|
|
|
|
sessions: 'Sessions',
|
|
|
|
|
|
cost: 'Cout',
|
|
|
|
|
|
noData: 'Aucune donnee d\'utilisation',
|
|
|
|
|
|
},
|
2026-04-22 20:27:33 +08:00
|
|
|
|
|
|
|
|
|
|
// Journal des modifications
|
|
|
|
|
|
changelog: {
|
|
|
|
|
|
new_0_4_3_1: 'Ajouter la connexion par nom d\'utilisateur/mot de passe en plus du token',
|
|
|
|
|
|
new_0_4_3_2: 'Ajouter les parametres de compte pour gerer les identifiants',
|
|
|
|
|
|
new_0_4_3_3: 'Ajouter le bouton de deconnexion dans la barre laterale',
|
|
|
|
|
|
new_0_4_3_4: 'Ajouter un popup de journal des modifications en cliquant sur le numero de version',
|
|
|
|
|
|
new_0_4_2_1: 'Ajouter le suivi de l\'utilisation des tokens et la longueur de contexte dynamique',
|
|
|
|
|
|
new_0_4_2_2: 'Ajouter la modal de recherche de sessions',
|
|
|
|
|
|
new_0_4_2_3: 'Restaurer le systeme de chat de groupe avec Socket.IO et SQLite',
|
|
|
|
|
|
new_0_4_2_4: 'Ajouter les sessions epinglees et le moniteur en direct',
|
|
|
|
|
|
new_0_4_2_5: 'Corriger la detection des fournisseurs integres et l\'appariement des modeles',
|
|
|
|
|
|
new_0_4_1_1: 'Corriger le contournement d\'authentification et le service de fichiers SPA',
|
|
|
|
|
|
},
|
2026-04-23 14:10:14 +08:00
|
|
|
|
|
|
|
|
|
|
// Fichiers
|
|
|
|
|
|
files: {
|
|
|
|
|
|
title: 'Fichiers',
|
|
|
|
|
|
tree: 'Arborescence',
|
|
|
|
|
|
list: 'Liste des fichiers',
|
|
|
|
|
|
breadcrumbRoot: 'Accueil',
|
|
|
|
|
|
newFile: 'Nouveau fichier',
|
|
|
|
|
|
newFolder: 'Nouveau dossier',
|
|
|
|
|
|
upload: 'Telecharger',
|
|
|
|
|
|
refresh: 'Actualiser',
|
|
|
|
|
|
open: 'Ouvrir',
|
|
|
|
|
|
edit: 'Modifier',
|
|
|
|
|
|
preview: 'Apercu',
|
|
|
|
|
|
download: 'Telecharger',
|
|
|
|
|
|
copyPath: 'Copier le chemin',
|
|
|
|
|
|
rename: 'Renommer',
|
|
|
|
|
|
delete: 'Supprimer',
|
|
|
|
|
|
name: 'Nom',
|
|
|
|
|
|
size: 'Taille',
|
|
|
|
|
|
modified: 'Modifie',
|
|
|
|
|
|
actions: 'Actions',
|
|
|
|
|
|
emptyDir: 'Dossier vide',
|
|
|
|
|
|
loading: 'Chargement...',
|
|
|
|
|
|
confirmDelete: 'Voulez-vous vraiment supprimer "{name}" ?',
|
|
|
|
|
|
confirmDeleteDir: 'Voulez-vous vraiment supprimer le dossier "{name}" et tout son contenu ?',
|
|
|
|
|
|
deleteFailed: 'Echec de la suppression',
|
|
|
|
|
|
deleted: 'Supprime',
|
|
|
|
|
|
renameTo: 'Renommer en',
|
|
|
|
|
|
newFileName: 'Nom du fichier',
|
|
|
|
|
|
newFolderName: 'Nom du dossier',
|
|
|
|
|
|
created: 'Cree',
|
|
|
|
|
|
createFailed: 'Echec de la creation',
|
|
|
|
|
|
renamed: 'Renomme',
|
|
|
|
|
|
renameFailed: 'Echec du renommage',
|
|
|
|
|
|
uploadSuccess: '{count} fichier(s) televerse(s)',
|
|
|
|
|
|
uploadFailed: 'Echec du televersement',
|
|
|
|
|
|
saveFailed: 'Echec de l\'enregistrement',
|
|
|
|
|
|
saved: 'Enregistre',
|
|
|
|
|
|
unsavedChanges: 'Vous avez des modifications non enregistrees. Annuler ?',
|
|
|
|
|
|
pathCopied: 'Chemin copie',
|
|
|
|
|
|
fileTooLarge: 'Fichier trop volumineux (max 10 Mo)',
|
|
|
|
|
|
permissionDenied: 'Impossible de modifier un fichier protege',
|
|
|
|
|
|
notFound: 'Fichier ou dossier introuvable',
|
|
|
|
|
|
backendError: 'Echec de l\'operation sur le fichier',
|
|
|
|
|
|
dragDropHint: 'Glissez des fichiers ici pour les televerser',
|
|
|
|
|
|
closeEditor: 'Fermer l\'editeur',
|
|
|
|
|
|
closePreview: 'Fermer',
|
|
|
|
|
|
saveFile: 'Enregistrer',
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Telechargement
|
|
|
|
|
|
download: {
|
|
|
|
|
|
downloading: 'Telechargement...',
|
|
|
|
|
|
downloadFailed: 'Echec du telechargement',
|
|
|
|
|
|
fileNotFound: 'Fichier introuvable ou supprime',
|
|
|
|
|
|
fileTooLarge: 'Fichier trop volumineux (limite depassee)',
|
|
|
|
|
|
backendError: 'Echec de la lecture du fichier, l\'environnement distant est peut-etre indisponible',
|
|
|
|
|
|
backendTimeout: 'Delai de lecture du fichier depasse',
|
|
|
|
|
|
unsupportedBackend: 'Le backend de terminal actuel ne prend pas en charge le telechargement de fichiers',
|
|
|
|
|
|
invalidPath: 'Chemin de fichier invalide',
|
|
|
|
|
|
download: 'Telecharger',
|
2026-04-24 02:31:42 +02:00
|
|
|
|
downloadFile: 'Telecharger le fichier',
|
2026-04-23 14:10:14 +08:00
|
|
|
|
},
|
2026-04-17 09:09:50 +08:00
|
|
|
|
}
|