diff --git a/apps/app/src/i18n/index.ts b/apps/app/src/i18n/index.ts index 38553c37..bf7acb66 100644 --- a/apps/app/src/i18n/index.ts +++ b/apps/app/src/i18n/index.ts @@ -5,18 +5,19 @@ import zh from "./locales/zh"; import vi from "./locales/vi"; import ptBR from "./locales/pt-BR"; import th from "./locales/th"; +import fr from "./locales/fr"; import { LANGUAGE_PREF_KEY } from "../app/constants"; /** * Supported languages */ -export type Language = "en" | "ja" | "zh" | "vi" | "pt-BR" | "th"; +export type Language = "en" | "ja" | "zh" | "vi" | "pt-BR" | "th" | "fr"; export type Locale = Language; /** * All supported languages - single source of truth */ -export const LANGUAGES: Language[] = ["en", "ja", "zh", "vi", "pt-BR", "th"]; +export const LANGUAGES: Language[] = ["en", "ja", "zh", "vi", "pt-BR", "th", "fr"]; /** * Language options for UI - single source of truth @@ -28,6 +29,7 @@ export const LANGUAGE_OPTIONS = [ { value: "vi" as Language, label: "Vietnamese", nativeName: "Tiếng Việt" }, { value: "pt-BR" as Language, label: "Portuguese (BR)", nativeName: "Português (BR)" }, { value: "th" as Language, label: "ไทย", nativeName: "ไทย" }, + { value: "fr" as Language, label: "French", nativeName: "Français" }, ] as const; /** @@ -38,8 +40,9 @@ const TRANSLATIONS: Record> = { ja, zh, vi, - "pt-BR": ptBR, + "pt-BR": ptBR, th, + fr, }; /** diff --git a/apps/app/src/i18n/locales/fr.ts b/apps/app/src/i18n/locales/fr.ts new file mode 100644 index 00000000..105318b8 --- /dev/null +++ b/apps/app/src/i18n/locales/fr.ts @@ -0,0 +1,2082 @@ +/** + * French translations (Français) + * Professional terms (Skills, Plugins, Commands, Sessions, OpenCode, OpenPackage, OpenWork) are NOT translated + */ + +export default { + "app.compact_command_desc": "Résumez cette session pour réduire la taille du contexte.", + "app.connection_lost": "Connexion au serveur perdue. Veuillez recharger.", + "app.deep_link_auth_queued": "Lien profond d'authentification Cloud mis en file d'attente pour OpenWork.", + "app.deep_link_remote_queued": "Lien du worker distant mis en file d'attente. OpenWork devrait passer au flux de connexion.", + "app.error.choose_folder": "Choisissez un dossier pour continuer.", + "app.error.host_requires_local": "Sélectionnez un espace de travail local pour démarrer le moteur.", + "app.error.install_failed": "L'installation d'OpenCode a échoué. Voir les journaux ci-dessus.", + "app.error.pick_workspace_folder": "Choisissez d'abord un dossier d'espace de travail.", + "app.error.remote_base_url_required": "Ajoutez une URL de serveur pour continuer.", + "app.error.tauri_required": "Cette action nécessite l'environnement d'exécution de l'application Tauri.", + "app.error_audit_load": "Échec du chargement du journal d'audit.", + "app.error_auth_failed": "Échec de l'authentification", + "app.error_auto_compact_scope": "La compaction automatique du contexte ne peut être modifiée que pour un espace de travail local ou un espace de travail de serveur OpenWork accessible en écriture.", + "app.error_cloud_signin": "Impossible de terminer la connexion à OpenWork Cloud.", + "app.error_command_not_resolved": "La commande n'a pas été résolue.", + "app.error_compact_empty": "Rien à compacter pour le moment.", + "app.error_compact_no_session": "Sélectionnez une session avec des messages avant d'exécuter /compact.", + "app.error_compact_no_session_id": "Sélectionnez une session avant de compacter.", + "app.error_connect_first": "Connectez-vous d'abord à ce worker avant d'appliquer des changements d'exécution.", + "app.error_connection_failed": "Échec de la connexion", + "app.error_connection_failed_url": "Échec de la connexion. Vérifiez l'URL et le jeton.", + "app.error_deep_link_unrecognized": "Ce lien n'est pas un lien profond OpenWork ou une URL de partage reconnu.", + "app.error_desktop_signin": "La connexion desktop a été terminée, mais OpenWork Cloud n'a pas renvoyé de jeton de session.", + "app.error_not_connected": "Non connecté à un serveur", + "app.error_pick_local_folder": "Choisissez un dossier de worker local avant de redémarrer le serveur local.", + "app.error_rate_limit": "Limite de débit dépassée", + "app.error_remote_access": "Échec de la mise à jour de l'accès distant.", + "app.error_request_failed": "Échec de la requête", + "app.error_reset_config": "Échec de la réinitialisation des valeurs par défaut de la configuration de l'application.", + "app.error_restart_local_worker": "Échec du redémarrage du worker local avec le paramètre de partage mis à jour.", + "app.error_runtime_changes": "Échec de l'application des changements d'exécution.", + "app.error_session_name_required": "Le nom de la session est requis", + "app.error_update_opencode_json": "Échec de la mise à jour de opencode.json", + "app.import_bundle_desc": "Choisissez comment importer ce bundle.", + "app.import_shared_bundle": "Importer le bundle partagé", + "app.local_disabled_reason": "Créez des espaces de travail locaux dans l'application desktop. Les espaces de travail distants et partagés fonctionnent toujours ici.", + "app.local_worker_detail": "Worker local", + "app.model_behavior_desc": "Choisissez d'abord le modèle pour voir les contrôles de comportement spécifiques au fournisseur.", + "app.model_behavior_title": "Comportement du modèle", + "app.plugins_hint_disconnected": "Serveur OpenWork indisponible. Les Plugins sont en lecture seule.", + "app.plugins_hint_limited": "Le serveur OpenWork a besoin d'un jeton pour modifier les Plugins.", + "app.plugins_hint_readonly": "Le serveur OpenWork est en lecture seule pour les Plugins.", + "app.reload_later": "Plus tard", + "app.reload_now": "Recharger maintenant", + "app.reload_stop_tasks": "Recharger et arrêter les tâches", + "app.remote_worker_detail": "Worker distant", + "app.reset_config_ok": "Valeurs par défaut de la configuration de l'application réinitialisées. Redémarrez OpenWork s'il reste des paramètres obsolètes.", + "app.shared_setup": "Configuration partagée", + "app.skill_added": "Skill ajouté", + "app.skills_hint_disconnected": "Serveur OpenWork indisponible. Ajoutez l'URL/le jeton du serveur dans Avancé pour gérer les Skills.", + "app.skills_hint_limited": "Le serveur OpenWork a besoin d'un jeton hôte pour installer/mettre à jour les Skills. Ajoutez-le dans Avancé et reconnectez-vous.", + "app.skills_hint_readonly": "Le serveur OpenWork est en lecture seule pour les Skills. Ajoutez un jeton hôte dans Avancé pour activer les installations.", + "app.unknown_error": "Erreur inconnue", + "app.worker_fallback": "Worker", + "automations.desktop_required": "Les tâches planifiées nécessitent l'application desktop.", + "automations.failed_to_load": "Échec du chargement des tâches planifiées.", + "automations.prompt_empty": "Le prompt d'automatisation est vide.", + "automations.prompt_required": "Le prompt est requis.", + "automations.schedule_required": "Le planning est requis.", + "automations.server_needs_token": "Le serveur OpenWork a besoin d'un jeton pour charger les tâches planifiées.", + "automations.server_not_ready": "Le serveur OpenWork n'est pas prêt.", + "automations.server_unavailable": "Serveur OpenWork indisponible. Connectez-vous pour synchroniser les tâches planifiées.", + "blueprint.automation_body": "Commencez à partir d'un workflow réutilisable ou saisissez votre propre tâche ci-dessous.", + "blueprint.automation_title": "Que voulez-vous automatiser ?", + "blueprint.csv_session_assistant": "Je peux vous aider à générer, nettoyer, fusionner et résumer des fichiers CSV. Quel type de travail CSV voulez-vous automatiser ?", + "blueprint.csv_session_title": "Idées de workflow CSV", + "blueprint.csv_session_user": "Je veux combiner des exports de plusieurs outils en un seul CSV propre.", + "blueprint.empty_body": "Choisissez un point de départ ou saisissez simplement ci-dessous.", + "blueprint.empty_title": "Que voulez-vous faire ?", + "blueprint.minimal_body": "Posez une question sur cet espace de travail ou utilisez un prompt de départ.", + "blueprint.minimal_title": "Commencer par une tâche", + "blueprint.starter_blueprint_desc": "Concevez un workflow répétable avec des Skills, des Commands et des étapes de transfert.", + "blueprint.starter_blueprint_prompt": "Aidez-moi à concevoir un blueprint d'automatisation réutilisable pour cet espace de travail. Demandez ce qui doit être standardisé, puis proposez le workflow.", + "blueprint.starter_blueprint_title": "Planifier un blueprint d'automatisation", + "blueprint.starter_chrome_desc": "Démarrez immédiatement une conversation d'automatisation du navigateur.", + "blueprint.starter_chrome_prompt": "Aidez-moi à me connecter à Chrome et à automatiser une tâche répétitive.", + "blueprint.starter_chrome_title": "Automatiser Chrome", + "blueprint.starter_command_desc": "Transformez un workflow répété en commande slash pour cet espace de travail.", + "blueprint.starter_command_prompt": "Aidez-moi à créer une /command réutilisable pour cet espace de travail. Demandez quel workflow je veux automatiser, puis rédigez la commande.", + "blueprint.starter_command_title": "Créer une commande réutilisable", + "blueprint.starter_connect_openai_desc": "Ajoutez votre fournisseur OpenAI pour que les modèles ChatGPT soient prêts dans les nouvelles sessions.", + "blueprint.starter_connect_openai_title": "Connecter ChatGPT", + "blueprint.starter_csv_desc": "Nettoyez ou générez des données de feuille de calcul.", + "blueprint.starter_csv_prompt": "Aidez-moi à créer ou modifier des fichiers CSV sur cet ordinateur.", + "blueprint.starter_csv_title": "Travailler sur un CSV", + "blueprint.starter_explore_desc": "Résumez les fichiers et suggérez la meilleure première tâche à traiter.", + "blueprint.starter_explore_prompt": "Résumez cet espace de travail, indiquez les fichiers les plus importants et suggérez la meilleure première tâche.", + "blueprint.starter_explore_title": "Explorer cet espace de travail", + "blueprint.welcome_message": "Bonjour, bienvenue sur OpenWork !\n\nLes gens nous utilisent pour écrire des fichiers .csv sur leur ordinateur, se connecter à Chrome et automatiser des tâches répétitives, et synchroniser des contacts avec Notion.\n\nMais la seule limite est votre imagination.\n\nQue voudriez-vous faire ?", + "blueprint.welcome_title": "Bienvenue sur OpenWork", + "common.add": "Ajouter", + "common.cancel": "Annuler", + "common.choose": "Choisir", + "common.close": "Fermer", + "common.default_parens": "(par défaut)", + "common.done": "Terminé", + "common.edit": "Modifier", + "common.hide": "Masquer", + "common.install": "Installer", + "common.navigate": "naviguer", + "common.next": "Suivant", + "common.off": "Désactivé", + "common.on": "Activé", + "common.path": "Chemin", + "common.question": "Question", + "common.refresh": "Actualiser", + "common.remove": "Supprimer", + "common.reset": "Réinitialiser", + "common.retry": "Réessayer", + "common.save": "Enregistrer", + "common.select": "sélectionner", + "common.show": "Afficher", + "common.something_went_wrong": "Un problème est survenu", + "common.submit": "Envoyer", + "common.unknown": "Inconnu", + "composer.agent_label": "Agent", + "composer.attach_files": "Joindre des fichiers", + "composer.attachments_unavailable": "Les pièces jointes ne sont pas disponibles.", + "composer.behavior_label": "Comportement", + "composer.configure": "Configurer", + "composer.default_agent": "Agent par défaut", + "composer.expand_pasted": "Cliquez pour développer le texte collé", + "composer.failed_read_attachment": "Échec de la lecture de la pièce jointe", + "composer.file_exceeds_limit": "{name} dépasse la limite de 8 Mo.", + "composer.file_kind": "Fichier", + "composer.file_too_large_encoding": "{name} est trop grand après encodage. Essayez une image plus petite.", + "composer.image_kind": "Image", + "composer.inserted_links_unsupported": "Liens insérés pour des fichiers non pris en charge.", + "composer.loading_agents": "Chargement des agents...", + "composer.loading_commands": "Chargement des Commands...", + "composer.mcps_label": "MCPs", + "composer.no_commands": "Aucune commande trouvée.", + "composer.no_matches": "Aucun résultat trouvé.", + "composer.placeholder": "Décrivez votre tâche...", + "composer.remote_worker_paste_warning": "Ceci est un worker distant. Les sandboxes sont aussi distantes. Pour partager des fichiers avec lui, téléversez-les dans le dossier Shared dans la barre latérale.", + "composer.run_task": "Exécuter la tâche", + "composer.skill_source": "Skill", + "composer.stop": "Arrêter", + "composer.tools_label": "Commands, Skills et MCPs", + "composer.unsupported_attachment_type": "Type de pièce jointe non pris en charge.", + "composer.upload_failed_local_links": "Impossible de téléverser vers le dossier partagé. Des liens locaux ont été insérés à la place.", + "composer.upload_to_shared_folder": "Téléverser vers le dossier partagé", + "composer.uploaded_multiple_files": "{count} fichiers téléversés vers le dossier partagé et liens insérés.", + "composer.uploaded_single_file": "{name} a été téléversé vers le dossier partagé et un lien a été inséré.", + "config.auto_reload_desc": "Recharge automatiquement après un changement d'agents/Skills/Commands/configuration (uniquement au repos).", + "config.auto_reload_title": "Rechargement automatique (local)", + "config.auto_reload_unavailable": "Disponible pour les espaces de travail locaux dans l'application desktop.", + "config.collaborator_token_disabled_hint": "Stocké à l'avance pour le partage distant, mais l'accès distant est actuellement désactivé.", + "config.collaborator_token_label": "Jeton collaborateur", + "config.collaborator_token_remote_hint": "Accès distant courant pour les téléphones ou ordinateurs portables se connectant à ce serveur.", + "config.connection_failed": "Échec de la connexion.", + "config.connection_failed_check": "Échec de la connexion. Vérifiez l'URL de l'hôte et le jeton.", + "config.connection_status_updated": "État de connexion mis à jour.", + "config.connection_successful": "Connexion réussie.", + "config.copied": "Copié", + "config.copy": "Copier", + "config.desktop_only_hint": "Certaines fonctions de configuration (partage du serveur local + bridge de messagerie) nécessitent l'application desktop.", + "config.diagnostics_desc": "Copiez un état d'exécution nettoyé pour le débogage.", + "config.diagnostics_title": "Bundle de diagnostic", + "config.enable_auto_reload_first": "Activez d'abord le rechargement automatique", + "config.engine_reload_desc": "Redémarrez le serveur OpenCode pour cet espace de travail.", + "config.engine_reload_title": "Rechargement du moteur", + "config.host_admin_token_hint": "Jeton interne réservé à l'hôte pour la CLI des approbations et les API d'administration. Ne l'utilisez pas dans le flux de connexion d'application distante.", + "config.host_admin_token_label": "Jeton admin hôte", + "config.host_local_only": "Local uniquement", + "config.host_offline": "Hors ligne", + "config.host_remote_enabled": "Distant activé", + "config.local_ip_hint": "Utilisez votre IP locale sur le même Wi‑Fi pour la connexion la plus rapide.", + "config.mdns_hint": "Les noms .local sont plus faciles à retenir, mais peuvent ne pas être résolus sur tous les réseaux.", + "config.messaging_identities_desc": "Gérez les identités Telegram/Slack et le routage dans l'onglet Identities.", + "config.messaging_identities_title": "Identités de messagerie", + "config.not_set": "Non défini", + "config.owner_token_disabled_hint": "Pertinent seulement après avoir activé l'accès distant pour ce worker.", + "config.owner_token_label": "Jeton propriétaire", + "config.owner_token_remote_hint": "Utilisez-le lorsqu'un client distant doit répondre aux demandes d'autorisation ou effectuer des actions réservées au propriétaire.", + "config.reload_active_tasks_warning": "Le rechargement arrêtera les tâches actives.", + "config.reload_availability_hint": "Le rechargement n'est disponible que pour les workers locaux ou les serveurs OpenWork connectés.", + "config.reload_connect_hint": "Connectez-vous à ce worker pour recharger.", + "config.reload_engine": "Recharger le moteur", + "config.reload_now_desc": "Applique les mises à jour de configuration et reconnecte votre session.", + "config.reload_now_title": "Recharger maintenant", + "config.reloading": "Rechargement...", + "config.remote_access_off_hint": "L'accès distant est désactivé. Utilisez Partager l'espace de travail pour l'activer avant de vous connecter depuis une autre machine.", + "config.resolved_worker_url": "URL du worker résolue :", + "config.resume_sessions_desc": "Si un rechargement a été mis en file d'attente pendant l'exécution de tâches, envoyer ensuite un message de reprise.", + "config.resume_sessions_title": "Reprendre les Sessions après rechargement automatique", + "config.server_needed_hint": "Connexion au serveur OpenWork nécessaire pour synchroniser Skills, Plugins et Commands.", + "config.server_section_desc": "Connectez-vous à un serveur OpenWork. Utilisez l'URL plus un jeton collaborateur ou propriétaire fourni par l'administrateur de votre serveur.", + "config.server_section_title": "Serveur OpenWork", + "config.server_sharing_desc": "Partagez ces détails avec un appareil de confiance. Gardez le serveur sur le même réseau pour une configuration plus rapide.", + "config.server_sharing_menu_hint": "Pour des liens de partage par espace de travail, utilisez Partager... dans le menu de l'espace de travail.", + "config.server_sharing_title": "Partage du serveur OpenWork", + "config.server_url_hint": "Utilisez l'URL partagée par votre serveur OpenWork. Les workers desktop locaux réutilisent un port élevé persistant dans la plage 48000-51000.", + "config.server_url_input_label": "URL du serveur OpenWork", + "config.server_url_label": "URL du serveur OpenWork", + "config.starting_server": "Démarrage du serveur…", + "config.status_connected": "Connecté", + "config.status_limited": "Limité", + "config.status_not_connected": "Non connecté", + "config.test_connection": "Tester la connexion", + "config.testing": "Test...", + "config.testing_connection": "Test de la connexion...", + "config.token_hint": "Optionnel. Collez un jeton collaborateur pour un accès courant ou un jeton propriétaire si ce client doit répondre aux demandes d'autorisation.", + "config.token_label": "Jeton collaborateur ou propriétaire", + "config.token_placeholder": "Collez votre jeton", + "config.unavailable": "Indisponible", + "config.worker_id": "ID du worker :", + "config.workspace_config_desc": "Ces paramètres affectent l'espace de travail sélectionné. Les actions limitées à l'exécution s'appliquent à l'espace de travail actuellement connecté.", + "config.workspace_config_title": "Configuration de l'espace de travail", + "config.workspace_id_prefix": "Espace de travail :", + "context_panel.add_button": "Ajouter", + "context_panel.add_folder_hint": "Ajoutez un dossier pour permettre à cet espace de travail de lire et modifier des fichiers en dehors de son répertoire racine.", + "context_panel.adding_button": "Ajout...", + "context_panel.always_available": "Toujours disponible", + "context_panel.authorized_folders": "Dossiers autorisés", + "context_panel.authorized_folders_desc": "Accordez à cet espace de travail l'accès en lecture et écriture à des répertoires situés hors de sa racine.", + "context_panel.authorized_folders_no_access": "Connectez-vous à un espace de travail de serveur OpenWork accessible en écriture pour modifier les dossiers autorisés.", + "context_panel.browse_button": "Parcourir", + "context_panel.config_access_unavailable": "L'accès à la configuration du serveur OpenWork est indisponible pour cet espace de travail.", + "context_panel.config_read_only": "Le serveur OpenWork est connecté en lecture seule pour la configuration de l'espace de travail.", + "context_panel.context": "Contexte", + "context_panel.folder_already_authorized": "Le dossier est déjà autorisé.", + "context_panel.folders_updated": "Dossiers autorisés mis à jour.", + "context_panel.input_placeholder": "Saisissez un chemin de dossier à autoriser...", + "context_panel.mcp": "MCP", + "context_panel.mcp_connected": "Connecté", + "context_panel.mcp_disabled": "Désactivé", + "context_panel.mcp_disconnected": "Déconnecté", + "context_panel.mcp_failed": "Échec", + "context_panel.mcp_needs_auth": "Authentification requise", + "context_panel.mcp_register_client": "Enregistrer le client", + "context_panel.no_external_folders": "Aucun dossier externe autorisé", + "context_panel.no_mcp": "Aucun serveur MCP chargé.", + "context_panel.no_plugins": "Aucun Plugin chargé.", + "context_panel.no_server_workspace": "Aucun espace de travail serveur actif sélectionné.", + "context_panel.no_skills": "Aucun Skill chargé.", + "context_panel.none_yet": "Aucun pour le moment.", + "context_panel.plugins": "Plugins", + "context_panel.preserving_entries": "Conservation de {count} entrées d'autorisation non liées à des dossiers.", + "context_panel.preserving_entry": "Conservation d'une entrée d'autorisation non liée à un dossier.", + "context_panel.remove_folder": "Supprimer {name}", + "context_panel.saving_folders": "Enregistrement des dossiers autorisés...", + "context_panel.server_disconnected": "Le serveur OpenWork est déconnecté.", + "context_panel.skills": "Skills", + "context_panel.working_files": "Fichiers de travail", + "context_panel.workspace_root_available": "La racine de l'espace de travail est déjà disponible.", + "context_panel.workspace_root_badge": "Racine de l'espace de travail", + "context_panel.writable_workspace_required": "Un espace de travail de serveur OpenWork accessible en écriture est requis pour mettre à jour les dossiers autorisés.", + "dashboard.access_token": "Jeton d'accès", + "dashboard.access_token_optional_hint": "Ajoutez un jeton uniquement si le worker en a besoin.", + "dashboard.blueprints_workspace": "Blueprints", + "dashboard.blueprints_workspace_desc": "Commencez avec un espace de travail prêt pour l'automatisation avec des Skills, Commands et flux partagés réutilisables.", + "dashboard.change": "Modifier", + "dashboard.choose_folder": "Choisir un dossier", + "dashboard.choose_folder_continue": "Choisissez un dossier pour continuer.", + "dashboard.choose_folder_next": "Partagez des fichiers avec votre espace de travail.", + "dashboard.choose_preset": "Choisir un preset", + "dashboard.chooser_local_desc": "Créez un espace de travail sur cet appareil et démarrez éventuellement à partir d'un modèle d'équipe.", + "dashboard.chooser_remote_desc": "Attachez-vous à un worker OpenWork auto-hébergé en utilisant une URL et un jeton d'accès.", + "dashboard.chooser_shared_desc": "Parcourez les workers cloud partagés avec votre organisation et connectez-vous en une étape.", + "dashboard.close_settings": "Fermer les paramètres", + "dashboard.cloud_signin_button": "Continuer avec Cloud", + "dashboard.cloud_signin_hint": "Accédez aux workers distants partagés avec votre organisation.", + "dashboard.cloud_signin_next": "Vous choisirez ensuite une équipe et vous vous connecterez à un espace de travail existant.", + "dashboard.cloud_signin_title": "Se connecter à OpenWork Cloud", + "dashboard.cloud_worker": "Worker cloud", + "dashboard.commands": "Commands", + "dashboard.connect_remote_button": "Connecter un accès distant", + "dashboard.connected": "Connecté", + "dashboard.connecting": "Connexion...", + "dashboard.create_local_workspace_subtitle": "Créez un espace de travail sur cet appareil et démarrez éventuellement à partir d'un modèle d'équipe.", + "dashboard.create_local_workspace_title": "Espace de travail local", + "dashboard.create_remote_custom_subtitle": "Attachez-vous à un worker OpenWork auto-hébergé.", + "dashboard.create_remote_custom_title": "Connecter un accès distant personnalisé", + "dashboard.create_remote_workspace_confirm": "Ajouter l'espace de travail", + "dashboard.create_remote_workspace_subtitle": "Enregistrez un serveur OpenWork comme espace de travail.", + "dashboard.create_remote_workspace_title": "Ajouter un espace de travail distant", + "dashboard.create_sandbox_confirm": "Créer comme sandbox", + "dashboard.create_shared_subtitle_signed_in": "Parcourez les workers cloud partagés avec votre organisation et connectez-vous en une étape.", + "dashboard.create_shared_subtitle_signed_out": "Connectez-vous à OpenWork Cloud pour accéder aux workers partagés avec votre organisation.", + "dashboard.create_shared_title": "Espaces de travail partagés", + "dashboard.create_workspace_confirm": "Créer l'espace de travail", + "dashboard.create_workspace_subtitle": "Initialiser un nouvel espace de travail basé sur un dossier.", + "dashboard.create_workspace_title": "Créer un espace de travail", + "dashboard.creating": "Création...", + "dashboard.desktop_badge": "Desktop", + "dashboard.display_name_label": "Nom d'affichage", + "dashboard.display_name_optional": "(optionnel)", + "dashboard.docker_debug_details": "Détails de débogage Docker", + "dashboard.edit_remote_workspace_confirm": "Enregistrer la connexion", + "dashboard.edit_remote_workspace_subtitle": "Mettez à jour les détails du serveur OpenWork pour cet espace de travail.", + "dashboard.edit_remote_workspace_title": "Modifier la connexion distante", + "dashboard.empty_workspace": "Espace de travail vide", + "dashboard.empty_workspace_desc": "Commencez avec un dossier vide et ajoutez ce dont vous avez besoin.", + "dashboard.error_choose_org": "Choisissez une organisation avant d'ouvrir un espace de travail.", + "dashboard.error_connect_worker": "Échec de la connexion à {name}.", + "dashboard.error_create_template": "Échec de la création de {name}.", + "dashboard.error_load_orgs": "Échec du chargement des organisations.", + "dashboard.error_load_shared_workspaces": "Échec du chargement des espaces de travail partagés.", + "dashboard.error_workspace_not_ready": "L'espace de travail n'est pas encore prêt à être connecté. Réessayez dans un instant.", + "dashboard.import_config": "Importer la configuration", + "dashboard.importing": "Importation…", + "dashboard.modal_back": "Retour", + "dashboard.modal_close": "Fermer la fenêtre Ajouter un espace de travail", + "dashboard.nav_ids": "IDs", + "dashboard.no_folder_selected": "Aucun dossier sélectionné pour le moment.", + "dashboard.open_cloud_dashboard": "Ouvrir le tableau de bord Cloud", + "dashboard.opening": "Ouverture...", + "dashboard.openwork_host_hint": "Utilisez l'URL partagée par votre serveur OpenWork.", + "dashboard.openwork_host_label": "URL du serveur OpenWork", + "dashboard.openwork_host_placeholder": "https://votre-serveur.openwork.app", + "dashboard.openwork_host_token_hint": "Optionnel. Collez un jeton collaborateur pour un accès courant ou un jeton propriétaire si ce client doit répondre aux demandes d'autorisation.", + "dashboard.openwork_host_token_label": "Jeton collaborateur ou propriétaire", + "dashboard.openwork_host_token_placeholder": "Collez votre jeton", + "dashboard.recently_updated": "Récemment mis à jour", + "dashboard.remote": "Distant", + "dashboard.remote_base_url_required": "Ajoutez une URL de serveur pour continuer.", + "dashboard.remote_connection_direct": "Direct", + "dashboard.remote_connection_openwork": "OpenWork", + "dashboard.remote_directory_hint": "Laissez vide pour utiliser la valeur par défaut du serveur.", + "dashboard.remote_directory_label": "Répertoire de l'espace de travail (optionnel)", + "dashboard.remote_directory_placeholder": "/home/team/project", + "dashboard.remote_display_name_label": "Nom d'affichage (optionnel)", + "dashboard.remote_display_name_placeholder": "Espace de travail de l'équipe design", + "dashboard.remote_server_details_hint": "Attachez-vous à un worker OpenWork auto-hébergé.", + "dashboard.remote_server_details_title": "Détails du serveur distant", + "dashboard.remote_workspace_hint": "Suivez un serveur OpenWork et reconnectez-vous à tout moment.", + "dashboard.remote_workspace_title": "Espace de travail distant", + "dashboard.repair_cache": "Réparer le cache", + "dashboard.repairing_cache": "Réparation du cache", + "dashboard.sandbox_checking_docker": "Vérification de Docker...", + "dashboard.sandbox_get_ready_action": "Préparer votre système", + "dashboard.sandbox_get_ready_desc": "Exécutez cet espace de travail dans un conteneur Docker isolé pour des exécutions plus sûres et plus reproductibles.", + "dashboard.sandbox_get_ready_title": "Les sandboxes nécessitent Docker", + "dashboard.sandbox_hide_logs": "Masquer les journaux", + "dashboard.sandbox_live_logs": "Journaux en direct", + "dashboard.sandbox_setup": "Configuration de la sandbox", + "dashboard.sandbox_show_logs": "Afficher les journaux", + "dashboard.search_shared_workspaces": "Rechercher des espaces de travail partagés", + "dashboard.select_folder": "Sélectionner un dossier", + "dashboard.settings": "Paramètres", + "dashboard.shared_workspaces_loading": "Chargement des espaces de travail partagés…", + "dashboard.shared_workspaces_no_match": "Aucun espace de travail partagé ne correspond à cette recherche.", + "dashboard.shared_workspaces_none": "Aucun espace de travail partagé n'est encore disponible.", + "dashboard.shared_workspaces_refreshing": "Actualisation des espaces de travail…", + "dashboard.skills": "Skills", + "dashboard.starter_workspace": "Espace de travail de démarrage", + "dashboard.starter_workspace_desc": "Préconfiguré pour vous montrer comment utiliser les Plugins, Commands et Skills.", + "dashboard.team_templates_hint": "Choisissez un point de départ ou laissez vide pour créer un espace de travail vide.", + "dashboard.team_templates_none": "Aucun modèle d'espace de travail partagé trouvé pour cette organisation pour le moment.", + "dashboard.team_templates_syncing": "Synchronisation", + "dashboard.team_templates_title": "Modèles d'équipe", + "dashboard.template_selected_badge": "Sélectionné", + "dashboard.unknown_creator": "Créateur inconnu", + "dashboard.worker_status_attention": "Attention", + "dashboard.worker_status_ready": "Prêt", + "dashboard.worker_status_starting": "Démarrage", + "dashboard.worker_status_stopped": "Arrêté", + "dashboard.worker_status_unknown": "Inconnu", + "dashboard.worker_url_hint": "Collez l'URL du worker OpenWork auquel vous voulez vous connecter.", + "dashboard.worker_url_label": "URL du worker", + "dashboard.workspace_connect": "Connecter", + "dashboard.workspace_connect_unavailable": "La connexion aux espaces de travail partagés n'est pas disponible ici.", + "dashboard.workspace_connecting": "Connexion", + "dashboard.workspace_folder_hint": "Choisissez où cet espace de travail doit se trouver sur votre appareil.", + "dashboard.workspace_folder_title": "Dossier de l'espace de travail", + "dashboard.workspace_not_ready_title": "Cet espace de travail n'est pas encore prêt à être connecté.", + "dashboard.workspaces": "Espaces de travail", + "den.active_org_hint": "Les workers cloud et les modèles d'équipe sont limités à l'organisation sélectionnée.", + "den.active_org_title": "Organisation active", + "den.auto_reconnect_hint": "Terminez l'authentification dans votre navigateur et OpenWork se reconnectera automatiquement ici.", + "den.checking_session": "Vérification de la session", + "den.choose_org_for_providers": "Choisissez une organisation pour voir les fournisseurs cloud.", + "den.choose_org_for_skills": "Choisissez une organisation pour voir les Skills cloud.", + "den.choose_org_for_skill_hubs": "Choisissez une organisation pour voir les hubs de Skills cloud.", + "den.choose_org_for_templates": "Choisissez une organisation pour voir les modèles d'équipe.", + "den.cloud_account_hint": "Gérez votre compte connecté et votre organisation.", + "den.cloud_account_title": "Compte cloud", + "den.cloud_control_plane_open": "Ouvrir dans le navigateur", + "den.cloud_control_plane_reset": "Réinitialiser", + "den.cloud_control_plane_save": "Enregistrer l'URL", + "den.cloud_control_plane_url_hint": "Mode développeur uniquement. Utilisez ceci pour cibler un plan de contrôle Cloud local ou auto-hébergé. Le modifier vous déconnecte afin que l'application puisse se réhydrater avec le nouveau plan de contrôle.", + "den.cloud_control_plane_url_label": "URL du plan de contrôle Cloud", + "den.cloud_provider_detail": "{count} modèles · fournisseur {source}", + "den.cloud_provider_removed_detail": "Ce fournisseur importé n'est plus dans le cloud. Désinstallez la configuration locale {providerId}.", + "den.cloud_provider_sync_detail": "Le fournisseur cloud a changé. Synchronisez la configuration {source} du modèle {count} dans opencode.jsonc.", + "den.cloud_skill_detail": "Installez ce Skill cloud dans .opencode/skills.", + "den.cloud_skill_imported_detail": "Installé localement sous {name}.", + "den.cloud_skill_removed_detail": "Ce Skill cloud a été supprimé en amont. Désinstallez la copie locale {name}.", + "den.cloud_skill_sync_detail": "Une version cloud plus récente est disponible pour {name}. Mettez à jour la copie locale pour rester synchronisé.", + "den.cloud_skills_hint": "Parcourez les Skills cloud individuels auxquels vous avez accès, installez-les localement et mettez-les à jour lorsque la version distante change.", + "den.cloud_skills_title": "Skills", + "den.cloud_providers_hint": "Importez des fournisseurs LLM gérés dans opencode.jsonc et utilisez l'identifiant de l'organisation dans cet espace de travail.", + "den.cloud_providers_title": "Fournisseurs cloud", + "den.cloud_section_desc": "Connectez-vous, choisissez une organisation et ouvrez des workers Cloud ou des modèles d'équipe.", + "den.cloud_section_title": "OpenWork Cloud", + "den.cloud_sleep_hint": "Connectez-vous à OpenWork Cloud pour garder vos tâches actives même lorsque votre ordinateur est en veille.", + "den.cloud_workers_hint": "Ouvrez directement les workers dans OpenWork en utilisant le même flux de connexion distante que l'application utilise ailleurs.", + "den.cloud_workers_title": "Workers cloud", + "den.create_account": "Créer un compte", + "den.credentials_ready_badge": "Identifiant prêt", + "den.error_base_url": "Entrez une URL de plan de contrôle Cloud valide en http:// ou https://.", + "den.error_choose_org": "Choisissez une organisation avant d'ouvrir un worker.", + "den.error_load_orgs": "Échec du chargement des organisations.", + "den.error_load_skills": "Échec du chargement des Skills cloud.", + "den.error_load_templates": "Échec du chargement des modèles d'équipe.", + "den.error_load_workers": "Échec du chargement des workers.", + "den.error_no_session": "Aucune session Cloud active trouvée.", + "den.error_no_token": "La connexion desktop a été terminée, mais OpenWork Cloud n'a pas renvoyé de jeton de session.", + "den.error_open_template": "Échec de l'ouverture de {name}.", + "den.error_open_worker": "Échec de l'ouverture de {name} dans OpenWork.", + "den.error_open_worker_fallback": "Échec de l'ouverture de {name}.", + "den.error_paste_valid_code": "Collez un lien de connexion OpenWork valide ou un code de connexion à usage unique.", + "den.error_signin_failed": "Impossible de terminer la connexion à OpenWork Cloud.", + "den.error_worker_not_ready": "Le worker n'est pas encore prêt à être ouvert. Réessayez une fois le provisionnement terminé.", + "den.finish_signin": "Terminer la connexion", + "den.finishing": "Finalisation...", + "den.hide_signin_code": "Masquer le code de connexion", + "den.import_all": "Tout importer", + "den.import_skill": "Installer", + "den.import_skill_failed": "Échec de l'installation de {name}.", + "den.import_provider": "Importer", + "den.import_provider_failed": "Échec de l'import de {name}.", + "den.imported_badge": "Importé", + "den.imported_provider": "{name} importé.", + "den.importing": "Importation...", + "den.needs_attention": "Nécessite une attention", + "den.no_cloud_providers": "Aucun fournisseur cloud n'est encore disponible pour cette organisation.", + "den.no_cloud_skills": "Aucun Skill cloud n'est encore disponible pour cette organisation.", + "den.no_cloud_workers": "Aucun worker cloud n'est encore visible pour cette organisation. Créez-en un dans Cloud, puis actualisez cet onglet.", + "den.no_org_selected": "Aucune organisation sélectionnée", + "den.no_skill_hubs": "Aucun hub de Skills cloud n'est encore disponible pour cette organisation.", + "den.no_team_templates": "Aucun modèle d'équipe pour le moment. Utilisez Partager → Modèle → Partager avec l'équipe.", + "den.open": "Ouvrir", + "den.opening": "Ouverture...", + "den.org_member_suffix": "(Membre)", + "den.org_owner_suffix": "(Propriétaire)", + "den.org_switched": "Basculé vers {name}.", + "den.out_of_sync_badge": "Désynchronisé", + "den.private_badge": "Privé", + "den.paste_signin_code": "Coller le code de connexion", + "den.refresh": "Actualiser", + "den.reload_workspace": "Rechargez l'espace de travail pour appliquer les changements de configuration.", + "den.remove_provider_failed": "Échec de la suppression de {name}.", + "den.remove_skill_failed": "Échec de la désinstallation de {name}.", + "den.removed_from_cloud_badge": "Supprimé du cloud", + "den.removed_provider": "{name} supprimé.", + "den.removing": "Suppression...", + "den.sign_out": "Se déconnecter", + "den.signed_out": "Déconnecté", + "den.signin_button": "Se connecter", + "den.signin_code_note": "Accepte un lien openwork://den-auth ou l'autorisation brute à usage unique.", + "den.signin_link_hint": "Si votre navigateur ne revient pas automatiquement dans OpenWork, collez ici le lien de connexion ou le code à usage unique depuis OpenWork Cloud.", + "den.signin_link_label": "Lien de connexion ou code à usage unique", + "den.signin_link_placeholder": "openwork://den-auth?... ou code collé", + "den.signin_title": "Se connecter à OpenWork Cloud", + "den.signing_in": "Finalisation de la connexion OpenWork Cloud...", + "den.signing_out": "Déconnexion...", + "den.skill_hub_detail": "Importez {count} Skills partagés dans .opencode/skills.", + "den.skill_hub_imported_detail": "{count} Skills importés dans cet espace de travail.", + "den.skill_hub_removed_detail": "Ce hub a été supprimé du cloud. Désinstallez les {importedCount} Skills importés de cet espace de travail.", + "den.skill_hub_skills_badge": "{count} Skills", + "den.skill_hub_sync_detail": "Le cloud contient désormais {liveCount} Skills ; cet espace de travail en a importé {importedCount}. Synchronisez pour mettre à jour l'ensemble installé.", + "den.skill_hubs_hint": "Importez chaque Skill d'un hub cloud partagé dans cet espace de travail en une seule étape.", + "den.skill_hubs_title": "Hubs de Skills", + "den.status_base_url_updated": "URL du plan de contrôle Cloud mise à jour. Reconnectez-vous pour continuer.", + "den.status_browser_signin": "Terminez la connexion dans votre navigateur pour connecter OpenWork.", + "den.status_browser_signup": "Terminez la création du compte dans votre navigateur pour connecter OpenWork.", + "den.status_cloud_signed_in_as": "OpenWork Cloud connecté en tant que {email}.", + "den.status_cloud_signin_done": "OpenWork Cloud connecté.", + "den.status_loaded_orgs": "{count} organisation{plural} chargée.", + "den.status_loaded_skills": "{count} Skill{plural} cloud chargé pour {name}.", + "den.status_loaded_templates": "{count} modèle{plural} chargé pour {name}.", + "den.status_loaded_workers": "{count} worker{plural} chargé pour {name}.", + "den.status_no_skills": "Aucun Skill cloud trouvé pour {name}.", + "den.status_no_templates": "Aucun modèle d'équipe trouvé pour {name}.", + "den.status_no_workers": "Aucun worker trouvé pour {name}.", + "den.status_opened_template": "{name} de {org} ouvert.", + "den.status_opened_template_fallback": "{name} ouvert depuis les modèles d'équipe.", + "den.status_opened_worker": "{name} ouvert dans OpenWork.", + "den.status_signed_in_as": "Connecté en tant que {email}.", + "den.status_signed_out": "Déconnecté et session OpenWork Cloud effacée sur cet appareil.", + "den.sync": "Synchroniser", + "den.sync_provider_failed": "Échec de la synchronisation de {name}.", + "den.sync_skill_failed": "Échec de la mise à jour de {name}.", + "den.synced_provider": "{name} synchronisé.", + "den.syncing": "Synchronisation...", + "den.installed_name_badge": "Local : {name}", + "den.team_template_badge": "Modèle d'équipe", + "den.team_templates_hint": "Ouvrez des modèles d'espace de travail réutilisables partagés avec cette organisation.", + "den.team_templates_title": "Modèles d'équipe", + "den.uninstall": "Désinstaller", + "den.worker_mine_badge": "À moi", + "den.worker_not_ready_title": "Ce worker n'est pas encore prêt à être ouvert.", + "den.worker_provider_label": "worker {provider}", + "den.worker_secondary_cloud": "Worker cloud", + "extensions.app_count_one": "{count} application connectée", + "extensions.app_count_many": "{count} applications connectées", + "extensions.apps_mcp_header": "Applications (MCP)", + "extensions.filter_all": "Tout", + "extensions.filter_apps": "Applications", + "extensions.filter_plugins": "Plugins", + "extensions.plugin_count_one": "{count} plugin", + "extensions.plugin_count_many": "{count} plugins", + "extensions.plugins_opencode_header": "Plugins (OpenCode)", + "extensions.subtitle": "Les applications (MCP) et les Plugins OpenCode se trouvent au même endroit.", + "extensions.title": "Extensions", + "identities.agent_behavior_desc": "Un fichier par espace de travail. Ajoutez une première ligne optionnelle @agent pour router via un agent OpenCode spécifique.", + "identities.agent_behavior_title": "Comportement de l'agent de messagerie", + "identities.agent_created": "Fichier d'agent de messagerie par défaut créé.", + "identities.agent_file_changed": "Le fichier a changé à distance. Rechargez puis enregistrez à nouveau.", + "identities.agent_loading": "Chargement du fichier de l'agent…", + "identities.agent_none": "aucun", + "identities.agent_not_found": "Fichier d'agent introuvable dans cet espace de travail pour le moment.", + "identities.agent_placeholder": "Ajoutez ici les instructions de comportement de messagerie pour opencodeRouter...", + "identities.agent_saved": "Comportement de messagerie enregistré.", + "identities.agent_scope_status": "Portée active : espace de travail · état : {status} · agent sélectionné : {agent}", + "identities.agent_status_loaded": "chargé", + "identities.agent_status_missing": "manquant", + "identities.agent_worker_scope_unavailable": "Portée du worker indisponible.", + "identities.all_channels": "Tous les canaux", + "identities.app_token_label": "Jeton d'application", + "identities.auto_bind_label": "Associer automatiquement le pair au répertoire lors d'un envoi direct", + "identities.available_channels": "Canaux disponibles", + "identities.bot_token_label": "Jeton du bot", + "identities.bot_token_placeholder": "Collez le jeton du bot Telegram de @BotFather", + "identities.botfather_step1_open": "1. Ouvrez @BotFather dans Telegram", + "identities.botfather_step1_run": "et exécutez /newbot", + "identities.botfather_step3_choose": "3. Choisissez un nom et un nom d'utilisateur pour votre bot", + "identities.botfather_step3_or_private": "pour une boîte de réception ouverte ou", + "identities.botfather_step3_private": "Privé", + "identities.botfather_step3_public": "Public", + "identities.botfather_step3_to_require": "pour exiger", + "identities.channel_label": "Canal", + "identities.channels_connected": "connecté", + "identities.channels_label": "Canaux", + "identities.configured_suffix": "configuré", + "identities.connect_server_desc": "Les identités sont disponibles lorsque vous êtes connecté à un hôte OpenWork.", + "identities.connect_server_title": "Se connecter à un serveur OpenWork", + "identities.connect_slack": "Connecter Slack", + "identities.connected_badge": "Connecté", + "identities.connecting": "Connexion...", + "identities.copy_bot_token_hint": "Copiez le jeton du bot et collez-le ci-dessous.", + "identities.copy_code": "Copier le code", + "identities.create_default_file": "Créer le fichier par défaut", + "identities.create_private_bot": "Créer un bot privé", + "identities.create_public_bot": "Créer un bot public", + "identities.days_ago": "il y a {days} j", + "identities.default_routing": "Routage par défaut", + "identities.directory_label": "Répertoire (optionnel)", + "identities.disable_messaging": "Désactiver la messagerie", + "identities.disable_messaging_message": "Cela désactivera la messagerie pour cet espace de travail. La configuration Telegram et Slack sera masquée jusqu'à ce que la messagerie soit réactivée, et vous devrez redémarrer le worker pour arrêter complètement le sidecar de messagerie.", + "identities.disable_messaging_title": "Désactiver la messagerie pour ce worker ?", + "identities.disabled_label": "Désactivé", + "identities.disabling": "Désactivation...", + "identities.disconnect": "Déconnecter", + "identities.dispatched_messages": "{sent}/{attempted} messages envoyés.", + "identities.enable_messaging": "Activer la messagerie", + "identities.enable_messaging_risk": "La messagerie peut exposer ce worker à des commandes distantes. Si un bot est public ou compromis, il peut accéder aux fichiers, identifiants et clés API disponibles pour ce worker.", + "identities.enable_messaging_title": "Activer la messagerie pour ce worker ?", + "identities.enabled_label": "Activé", + "identities.enabling": "Activation...", + "identities.health_offline": "Hors ligne", + "identities.health_running": "En cours d'exécution", + "identities.health_unavailable": "Indisponible", + "identities.health_unavailable_status": "État de santé OpenCodeRouter indisponible ({status})", + "identities.health_unknown": "Inconnu", + "identities.hours_ago": "il y a {hours} h", + "identities.identities_label": "Identités", + "identities.just_now": "À l'instant", + "identities.last_activity": "Dernière activité", + "identities.later": "Plus tard", + "identities.message_label": "Message", + "identities.message_routing_desc": "Contrôlez quelles conversations vont dans quel dossier d'espace de travail. Les messages sont routés vers le dossier par défaut du worker, sauf si vous configurez des règles ici.", + "identities.message_routing_title": "Routage des messages", + "identities.messages_today": "Messages aujourd'hui", + "identities.messaging_disabled_hint": "N'activez la messagerie que si vous comprenez le risque et prévoyez de sécuriser l'accès (par exemple, appairage Telegram privé).", + "identities.messaging_disabled_restart": "Messagerie désactivée. Redémarrez ce worker pour arrêter le sidecar de messagerie.", + "identities.messaging_disabled_risk": "Les bots de messagerie peuvent exécuter des actions sur votre worker local. S'ils sont exposés publiquement, ils peuvent permettre l'accès aux fichiers, identifiants et clés API disponibles pour ce worker.", + "identities.messaging_disabled_title": "La messagerie est désactivée par défaut", + "identities.messaging_enabled_restart": "Messagerie activée. Redémarrez ce worker pour appliquer avant de configurer les canaux.", + "identities.messaging_sidecar_not_running": "La messagerie est activée dans cet espace de travail, mais le sidecar de messagerie n'est pas encore en cours d'exécution. Redémarrez ce worker, puis revenez dans les paramètres Messagerie pour connecter Telegram ou Slack.", + "identities.minutes_ago": "il y a {minutes} min", + "identities.not_set": "Non défini", + "identities.open_bot_link": "Ouvrir @{username} dans Telegram", + "identities.pairing_code_copied": "Code d'appairage copié.", + "identities.pairing_code_copy_failed": "Impossible de copier le code d'appairage. Copiez-le manuellement.", + "identities.pairing_code_instruction_prefix": "Envoyer", + "identities.peer_id_label": "ID du pair (optionnel)", + "identities.peer_id_placeholder_slack": "ex. slack:U12345678", + "identities.peer_id_placeholder_telegram": "ex. telegram:123456789", + "identities.private_label": "Privé", + "identities.private_pairing_code": "Code d'appairage privé", + "identities.public_bot_confirm": "Oui, je comprends le risque", + "identities.public_bot_warning_message": "Votre bot sera accessible au public et toute personne qui y a accès pourra avoir un accès complet à votre worker local, y compris aux fichiers ou clés API que vous lui avez fournis. Si vous créez un bot privé, vous pouvez limiter l'accès en exigeant un jeton d'appairage. Êtes-vous sûr de vouloir rendre votre bot public ?", + "identities.public_bot_warning_title": "Rendre ce bot public ?", + "identities.public_label": "Public", + "identities.quick_setup": "Configuration rapide", + "identities.reconnect_failed": "Échec de la reconnexion. Vérifiez l'URL/le jeton OpenWork et réessayez.", + "identities.reconnected": "Reconnecté.", + "identities.reconnected_refreshing": "Reconnecté. Actualisation de l'état du worker...", + "identities.reload": "Recharger", + "identities.repair_reconnect": "Réparer et reconnecter", + "identities.restart_failed": "Échec du redémarrage. Veuillez redémarrer le worker depuis les Paramètres et réessayer.", + "identities.restart_to_disable_messaging": "La messagerie a été désactivée pour cet espace de travail. Redémarrez maintenant le worker pour arrêter le sidecar de messagerie.", + "identities.restart_to_enable_messaging": "La messagerie a été activée pour cet espace de travail. Redémarrez maintenant le worker pour lancer le sidecar de messagerie et débloquer la configuration de Telegram et Slack.", + "identities.restart_worker": "Redémarrer le worker", + "identities.restart_worker_title": "Redémarrer le worker maintenant ?", + "identities.restarting": "Redémarrage...", + "identities.routing_override_prefix": "Tous les messages sont routés vers", + "identities.routing_override_suffix": "(forçage actif)", + "identities.running_label": "En cours d'exécution", + "identities.save_behavior": "Enregistrer le comportement", + "identities.saving": "Enregistrement...", + "identities.send_test_button": "Envoyer un message de test", + "identities.send_test_desc": "Validez le câblage sortant. Utilisez un ID de pair pour un envoi direct, ou laissez l'ID vide pour distribuer selon les associations dans un répertoire.", + "identities.send_test_title": "Envoyer un message de test", + "identities.sending": "Envoi...", + "identities.slack_desc": "Votre worker apparaît comme un bot dans les canaux Slack. Les membres de l'équipe peuvent lui envoyer des messages directement ou le mentionner dans des fils.", + "identities.slack_intro": "Connectez votre espace de travail Slack pour permettre aux membres de l'équipe d'interagir avec ce worker dans les canaux et les messages directs.", + "identities.slack_unavailable": "Identités Slack indisponibles.", + "identities.status_active": "Actif", + "identities.status_label": "État", + "identities.status_stopped": "Arrêté", + "identities.stopped_label": "Arrêté", + "identities.subtitle": "Permettez aux personnes de joindre votre worker via des applications de messagerie. Connectez un canal et votre worker lira et répondra automatiquement aux messages.", + "identities.tab_general": "Général", + "identities.telegram_bot_access_desc": "Bot public : le premier chat Telegram se lie automatiquement. Bot privé : exige un code d'appairage avant que des messages n'exécutent des outils.", + "identities.telegram_delete_failed": "Échec de la suppression.", + "identities.telegram_deleted": "Supprimé.", + "identities.telegram_deleted_pending": "Supprimé (application en attente).", + "identities.telegram_desc": "Connectez un bot Telegram en mode public (boîte de réception ouverte) ou privé (code d'appairage requis).", + "identities.telegram_private_saved_pair": "Bot privé enregistré. Associez via /pair {code}", + "identities.telegram_save_failed": "Échec de l'enregistrement.", + "identities.telegram_saved": "Enregistré.", + "identities.telegram_saved_pending": "Enregistré (application en attente).", + "identities.telegram_saved_username": "Enregistré (@{username})", + "identities.telegram_unavailable": "Identités Telegram indisponibles.", + "identities.title": "Canaux de messagerie", + "identities.unsaved_changes": "Modifications non enregistrées", + "identities.worker_offline": "Worker hors ligne", + "identities.worker_online": "Worker en ligne", + "identities.worker_restarted": "Worker redémarré.", + "identities.worker_restarted_refreshing": "Worker redémarré. Actualisation de l'état de la messagerie...", + "identities.worker_scope_unavailable": "Portée du worker indisponible.", + "identities.worker_scope_unavailable_detail": "Portée du worker indisponible. Reconnectez-vous avec une URL de worker ou basculez vers un worker connu.", + "identities.worker_unavailable": "Worker indisponible", + "identities.workspace_id_required": "L'ID de l'espace de travail est requis pour gérer les identités. Reconnectez-vous avec une URL d'espace de travail ou sélectionnez un espace de travail mappé sur cet hôte.", + "identities.workspace_scope_prefix": "Portée de l'espace de travail :", + "inbox_panel.connect_to_download": "Connectez-vous à un worker pour télécharger des fichiers partagés.", + "inbox_panel.connect_to_see": "Connectez-vous pour voir les fichiers partagés.", + "inbox_panel.connect_to_upload": "Connectez-vous à un worker pour téléverser", + "inbox_panel.copy_failed": "Échec de la copie. Votre navigateur peut bloquer l'accès au presse-papiers.", + "inbox_panel.download": "Télécharger", + "inbox_panel.drop_to_upload": "Déposez des fichiers ici pour les téléverser", + "inbox_panel.helper_text": "Partagez des fichiers avec ce worker depuis l'application.", + "inbox_panel.load_failed": "Échec du chargement du dossier partagé", + "inbox_panel.missing_file_id": "ID de fichier partagé manquant.", + "inbox_panel.no_files": "Aucun fichier partagé pour le moment.", + "inbox_panel.refresh_tooltip": "Actualiser le dossier partagé", + "inbox_panel.shared_folder": "Dossier partagé", + "inbox_panel.showing_first": "Affichage des {count} premiers.", + "inbox_panel.upload_failed": "Échec du téléversement dans le dossier partagé", + "inbox_panel.upload_needs_worker": "Connectez-vous à un worker pour téléverser des fichiers dans le dossier partagé.", + "inbox_panel.upload_prompt": "Déposez des fichiers ou cliquez pour téléverser", + "inbox_panel.upload_success": "Téléversé dans le dossier partagé.", + "inbox_panel.uploading": "Téléversement...", + "inbox_panel.uploading_label": "Téléversement de {label}...", + "mcp.activate_button": "Activer", + "mcp.add_modal_subtitle": "Connectez un serveur MCP personnalisé par URL ou commande locale.", + "mcp.add_modal_title": "Ajouter une application personnalisée", + "mcp.add_server_button": "Ajouter une application", + "mcp.advanced": "Avancé", + "mcp.advanced_settings": "Paramètres avancés", + "mcp.advanced_settings_hint": "Modifiez les fichiers de configuration et gérez les connexions manuellement.", + "mcp.app_connected": "application connectée", + "mcp.apps_connected": "applications connectées", + "mcp.apps_subtitle": "Connectez vos outils préférés pour qu'OpenWork puisse les utiliser en votre nom.", + "mcp.apps_title": "Applications", + "mcp.auth.already_connected": "Déjà connecté", + "mcp.auth.already_connected_description": "{server} est déjà authentifié et prêt à être utilisé.", + "mcp.auth.applying_changes_body": "Nous redémarrons le worker pour que le nouveau MCP soit prêt à s'authentifier.", + "mcp.auth.applying_changes_title": "Application des changements avant connexion", + "mcp.auth.authorization_link": "Lien d'autorisation", + "mcp.auth.authorization_still_required": "L'autorisation est toujours requise. Réessayez pour redémarrer le flux.", + "mcp.auth.callback_invalid": "Collez l'URL de rappel ou le paramètre code pour terminer OAuth.", + "mcp.auth.callback_label": "URL de rappel ou code", + "mcp.auth.callback_placeholder": "http://127.0.0.1:19876/mcp/oauth/callback?code=...", + "mcp.auth.cancel": "Annuler", + "mcp.auth.client_registration_required": "L'enregistrement du client est requis avant que OAuth puisse continuer.", + "mcp.auth.complete_connection": "Terminer la connexion", + "mcp.auth.configured_previously": "Le MCP a peut-être été configuré globalement ou dans une session précédente. Vous pouvez fermer cette fenêtre et commencer à utiliser les outils MCP tout de suite.", + "mcp.auth.connect_server": "Connecter {server}", + "mcp.auth.copied": "Copié", + "mcp.auth.copy_link": "Copier le lien", + "mcp.auth.done": "Terminé", + "mcp.auth.failed_to_start_oauth": "Échec du démarrage du flux OAuth", + "mcp.auth.follow_browser_steps": "Suivez les étapes d'autorisation dans le navigateur.", + "mcp.auth.force_stop": "Forcer l'arrêt", + "mcp.auth.force_stopping": "Arrêt...", + "mcp.auth.im_done": "J'ai terminé", + "mcp.auth.invalid_refresh_token": "Le jeton de rafraîchissement OAuth est invalide ou expiré. Réautorisez pour continuer.", + "mcp.auth.manual_finish_hint": "Collez l'URL de rappel (localhost:19876) ou simplement le code pour terminer la connexion.", + "mcp.auth.manual_finish_title": "Serveur distant ?", + "mcp.auth.oauth_completed_reload": "OAuth terminé. Rechargez le moteur pour activer le MCP.", + "mcp.auth.oauth_failed": "Échec de l'authentification OAuth.", + "mcp.auth.oauth_not_supported_hint": "Cela peut vouloir dire :\n• Le serveur MCP n'annonce pas de capacités OAuth\n• Le moteur doit être rechargé pour découvrir les capacités du serveur\n• Essayez : opencode mcp auth {server} depuis la CLI", + "mcp.auth.open_browser_signin": "Nous ouvrirons votre navigateur pour terminer la connexion.", + "mcp.auth.port_forward_hint": "Astuce : transférez le port de rappel si nécessaire : ssh -L 19876:127.0.0.1:19876 user@host", + "mcp.auth.reauth_action": "Réautoriser OAuth", + "mcp.auth.reauth_cli_hint": "Exécutez : opencode mcp auth {server}", + "mcp.auth.reauth_failed": "Échec de la réautorisation.", + "mcp.auth.reauth_remote_hint": "Réautorisez depuis la machine qui exécute ce worker.", + "mcp.auth.reauth_running": "Réautorisation...", + "mcp.auth.reload_blocked": "Le rechargement est en pause pendant qu'une session est en cours. Arrêtez l'exécution pour terminer la configuration.", + "mcp.auth.reload_engine_retry": "Appliquer les changements et réessayer", + "mcp.auth.reload_failed": "Échec du rechargement du worker avant la connexion.", + "mcp.auth.reload_notice": "Pour que cela prenne effet, OpenWork doit actualiser le service du worker. Cela peut interrompre une session en cours.", + "mcp.auth.reload_remote_confirm": "Pour que cela prenne effet, OpenWork doit actualiser le service du worker. Cela pourrait arrêter votre session en cours. Continuer ?", + "mcp.auth.reopen_browser_link": "Cliquez ici pour rouvrir le navigateur", + "mcp.auth.request_timed_out": "La requête a expiré.", + "mcp.auth.retry": "Réessayer", + "mcp.auth.retry_now": "Réessayer maintenant", + "mcp.auth.server_disabled": "Ce serveur MCP est désactivé. Activez-le et réessayez.", + "mcp.auth.step1_description": "Nous lancerons automatiquement le flux de connexion de {server}.", + "mcp.auth.step1_title": "Ouverture de votre navigateur", + "mcp.auth.step2_description": "Connectez-vous et approuvez l'accès lorsqu'on vous le demande.", + "mcp.auth.step2_title": "Autoriser OpenWork", + "mcp.auth.step3_description": "Nous terminerons la connexion dès que l'autorisation sera terminée.", + "mcp.auth.step3_title": "Revenez ici quand vous avez terminé", + "mcp.auth.try_reload_engine": "{message}. Essayez d'abord de recharger le moteur.", + "mcp.auth.waiting_authorization": "En attente de la fin de l'autorisation dans votre navigateur...", + "mcp.auth.waiting_for_conversation_body": "Nous vous redirigerons vers l'authentification dès que possible.", + "mcp.auth.waiting_for_conversation_title": "En attente de la fin de la conversation", + "mcp.auth.waiting_for_session": "En attente que {session} termine son travail", + "mcp.available_apps": "Applications disponibles", + "mcp.cap_signin": "Connexion au compte", + "mcp.cap_tools": "Outils IA", + "mcp.config_file": "Fichier de configuration", + "mcp.config_load_failed": "Impossible de charger le fichier de configuration", + "mcp.config_not_loaded": "Pas encore chargé", + "mcp.config_source": "Depuis la configuration", + "mcp.configured": "configuré", + "mcp.connect": "Connecter", + "mcp.connect_failed": "Impossible de se connecter. Réessayez.", + "mcp.connect_server_first": "Connectez-vous d'abord au serveur.", + "mcp.connected": "Connecté", + "mcp.connected_badge": "Connecté", + "mcp.connecting": "Connexion...", + "mcp.connection_failed": "Problème de connexion — réessayez", + "mcp.connection_type": "Connexion", + "mcp.control_chrome_browser_hint": "Dans Chrome 144 ou version ultérieure, faites d'abord ceci :", + "mcp.control_chrome_browser_step_one": "Ouvrez chrome://inspect/#remote-debugging.", + "mcp.control_chrome_browser_step_two": "Activez le débogage à distance.", + "mcp.control_chrome_browser_step_three": "Autorisez les connexions de débogage entrantes lorsque Chrome le demande.", + "mcp.control_chrome_browser_title": "1. Activer l'accès à Chrome", + "mcp.control_chrome_connect": "Ajouter Control Chrome", + "mcp.control_chrome_docs": "Guide MCP officiel", + "mcp.control_chrome_edit": "Modifier les paramètres", + "mcp.control_chrome_profile_hint": "Control Chrome ouvre normalement un profil Chrome séparé. Activez ceci si vous voulez qu'OpenWork réutilise la fenêtre Chrome déjà ouverte.", + "mcp.control_chrome_profile_title": "2. Choisir quel Chrome utiliser", + "mcp.control_chrome_save": "Enregistrer les paramètres", + "mcp.control_chrome_setup_subtitle": "Activez l'accès à Chrome, puis choisissez si OpenWork doit utiliser son propre profil propre ou se rattacher au Chrome que vous utilisez déjà.", + "mcp.control_chrome_setup_title": "Configurer Control Chrome", + "mcp.control_chrome_toggle_hint": "Lorsque cette option est activée, OpenWork ajoute --autoConnect pour que le MCP se rattache à une instance Chrome que vous avez déjà démarrée.", + "mcp.control_chrome_toggle_label": "Utiliser mon profil Chrome existant", + "mcp.control_chrome_toggle_off": "OpenWork lancera un profil Chrome séparé uniquement pour l'automatisation.", + "mcp.control_chrome_toggle_on": "OpenWork réutilisera vos onglets, cookies et connexions actuels.", + "mcp.custom_app_cta_hint": "Connectez votre propre serveur MCP, outil interne ou application hébergée.", + "mcp.desktop_required": "Les applications nécessitent l'application desktop.", + "mcp.docs_link": "En savoir plus", + "mcp.file_not_found": "Fichier de configuration pas encore créé", + "mcp.finish_setup": "On y est presque", + "mcp.finish_setup_hint": "Appuyez sur Activer pour terminer la connexion de votre application.", + "mcp.friendly_status_issue": "Problème", + "mcp.friendly_status_needs_signin": "Connexion requise", + "mcp.friendly_status_offline": "Hors ligne", + "mcp.friendly_status_paused": "En pause", + "mcp.friendly_status_ready": "Prêt", + "mcp.last_synced": "Synchronisé", + "mcp.login_action": "Se connecter", + "mcp.login_hint": "Connectez votre compte pour terminer la configuration de cette application.", + "mcp.login_unavailable": "Cette application ne prend pas en charge la connexion depuis OpenWork.", + "mcp.logout_action": "Se déconnecter", + "mcp.logout_failed": "Échec de la déconnexion.", + "mcp.logout_hint": "Supprime les identifiants OAuth stockés. Vous devrez vous reconnecter.", + "mcp.logout_label": "OAuth", + "mcp.logout_modal_message": "Cela supprimera les identifiants OAuth stockés pour {server}. Vous devrez vous reconnecter pour utiliser cette application.", + "mcp.logout_modal_title": "Se déconnecter de cette application ?", + "mcp.logout_success": "Déconnecté de {server}.", + "mcp.logout_working": "Déconnexion...", + "mcp.name_required": "Entrez un nom de serveur.", + "mcp.no_apps_hint": "Connectez-en une ci-dessus pour commencer.", + "mcp.no_apps_yet": "Aucune application connectée pour le moment", + "mcp.oauth": "Se connecter", + "mcp.oauth_optional_hint": "Utilise OAuth dans le navigateur pour connecter votre compte.", + "mcp.oauth_optional_label": "Cette application nécessite une connexion", + "mcp.one_click_connect": "Connexion en un clic", + "mcp.open_file": "Ouvrir le fichier", + "mcp.opening_label": "Ouverture...", + "mcp.pick_workspace_error": "Choisissez d'abord un dossier d'espace de travail.", + "mcp.pick_workspace_first": "Choisissez d'abord un dossier d'espace de travail.", + "mcp.quick_connect_chrome_desc": "Pilotez les onglets Chrome avec l'automatisation du navigateur.", + "mcp.quick_connect_chrome_title": "Control Chrome", + "mcp.quick_connect_context7_desc": "Recherchez dans la documentation produit avec un contexte plus riche.", + "mcp.quick_connect_context7_title": "Context7", + "mcp.quick_connect_linear_desc": "Planifiez les sprints et livrez les tickets plus vite.", + "mcp.quick_connect_linear_title": "Linear", + "mcp.quick_connect_notion_desc": "Pages, bases de données et docs projet synchronisés.", + "mcp.quick_connect_notion_title": "Notion", + "mcp.quick_connect_sentry_desc": "Suivez les releases et résolvez les erreurs de production.", + "mcp.quick_connect_sentry_title": "Sentry", + "mcp.quick_connect_stripe_desc": "Inspectez paiements, factures et abonnements.", + "mcp.quick_connect_stripe_title": "Stripe", + "mcp.reload_banner_blocked_hint": "Arrêtez la tâche en cours pour activer.", + "mcp.reload_banner_description": "Appuyez sur Activer pour terminer la connexion de votre application.", + "mcp.reload_banner_description_blocked": "Une tâche est en cours. Arrêtez-la d'abord, puis activez.", + "mcp.remote_workspace_url_hint": "Les workers distants se connectent plus rapidement avec des serveurs MCP basés sur une URL.", + "mcp.remove_app": "Supprimer", + "mcp.remove_failed": "Impossible de supprimer l'application.", + "mcp.remove_modal_message": "Êtes-vous sûr de vouloir supprimer {server} ? Vous pourrez toujours l'ajouter de nouveau plus tard.", + "mcp.remove_modal_title": "Supprimer l'application", + "mcp.reveal_config_failed": "Impossible d'ouvrir le fichier de configuration", + "mcp.reveal_in_finder": "Afficher dans le Finder", + "mcp.scope_global": "Tous les espaces de travail", + "mcp.scope_project": "Cet espace de travail", + "mcp.server_command": "Commande", + "mcp.server_command_hint": "La commande shell pour démarrer le serveur.", + "mcp.server_command_placeholder": "npx -y @modelcontextprotocol/server-sequential-thinking", + "mcp.server_name": "Nom de l'application", + "mcp.server_name_placeholder": "github-copilot", + "mcp.server_type": "Type", + "mcp.server_url": "URL du serveur", + "mcp.server_url_placeholder": "https://api.githubcopilot.com/mcp/", + "mcp.sign_in_section_label": "Connexion", + "mcp.tap_to_connect": "Appuyez pour connecter", + "mcp.technical_details": "Détails techniques", + "mcp.type_cloud": "Cloud (connectez-vous avec votre compte)", + "mcp.type_local": "Local (s'exécute sur cet appareil)", + "mcp.type_local_cmd": "Local (commande)", + "mcp.type_remote": "Distant (URL)", + "mcp.url_or_command_required": "Entrez une URL pour un serveur distant ou une commande pour un serveur local.", + "mcp.your_apps": "Vos applications", + "message.tool_request_label": "Requête", + "message.tool_result_label": "Résultat", + "message.waiting_subagent": "En attente de l'arrivée de la transcription du sous-agent.", + "message_list.copy_message": "Copier le message", + "message_list.open_session": "Ouvrir la session", + "message_list.step_updates_progress": "Met à jour la progression", + "message_list.subagent_loading_transcript": "Chargement de la transcription", + "message_list.subagent_message_count": "{count} message{plural}", + "message_list.subagent_running": "En cours d'exécution", + "message_list.subagent_session_fallback": "Session du sous-agent", + "message_list.subagent_type_task": "tâche {agentType}", + "message_list.subagent_waiting_transcript": "En attente de la transcription", + "message_list.tool_checked_url": "{url} vérifié", + "message_list.tool_checked_web_fallback": "Page web vérifiée", + "message_list.tool_delegate_agent": "Déléguer {agent}", + "message_list.tool_delegate_task_fallback": "Déléguer la tâche", + "message_list.tool_load_skill_fallback": "Charger le Skill", + "message_list.tool_load_skill_named": "Charger le Skill {name}", + "message_list.tool_read_todo": "Lire la liste de tâches", + "message_list.tool_reviewed_file": "{file} relu", + "message_list.tool_reviewed_file_fallback": "Fichier relu", + "message_list.tool_reviewed_files_fallback": "Fichiers relus", + "message_list.tool_reviewed_path": "{path} relu", + "message_list.tool_run_command": "Exécuter {command}", + "message_list.tool_run_command_fallback": "Exécuter la commande", + "message_list.tool_searched_code_fallback": "Code recherché", + "message_list.tool_searched_pattern": "Recherche de {pattern}", + "message_list.tool_update_file": "Mettre à jour {file}", + "message_list.tool_update_file_fallback": "Mettre à jour le fichier", + "message_list.tool_update_todo": "Mettre à jour la liste de tâches", + "message_list.tool_updated_file": "{file} mis à jour", + "message_list.tool_updated_file_fallback": "Fichier mis à jour", + "model_behavior.desc_builtin": "Ce modèle décide lui-même de son chemin de raisonnement et n'expose pas ici de profils.", + "model_behavior.desc_generic": "Utiliser le profil {label}.", + "model_behavior.desc_high": "Passe plus de temps à raisonner avant de répondre.", + "model_behavior.desc_high_anthropic": "Utiliser le budget de réflexion étendue standard.", + "model_behavior.desc_low": "Utiliser un raisonnement plus léger avant de répondre.", + "model_behavior.desc_low_google": "Utiliser un budget de raisonnement plus léger pour des réponses plus rapides.", + "model_behavior.desc_max": "Utiliser le profil de raisonnement le plus profond du fournisseur.", + "model_behavior.desc_max_anthropic": "Utiliser le plus grand budget de réflexion étendue disponible.", + "model_behavior.desc_medium": "Équilibrer vitesse et profondeur de raisonnement.", + "model_behavior.desc_minimal": "Utiliser une très petite quantité de raisonnement.", + "model_behavior.desc_none": "Favoriser la vitesse avec le chemin de raisonnement le plus léger.", + "model_behavior.desc_standard": "Ce modèle n'expose pas de contrôles supplémentaires de raisonnement.", + "model_behavior.label_balanced": "Équilibré", + "model_behavior.label_builtin": "Intégré", + "model_behavior.label_deep": "Profond", + "model_behavior.label_extended": "Étendu", + "model_behavior.label_fast": "Rapide", + "model_behavior.label_light": "Léger", + "model_behavior.label_maximum": "Maximum", + "model_behavior.label_quick": "Express", + "model_behavior.label_standard": "Standard", + "model_behavior.title_builtin_reasoning": "Raisonnement intégré", + "model_behavior.title_extended_thinking": "Réflexion étendue", + "model_behavior.title_reasoning_budget": "Budget de raisonnement", + "model_behavior.title_reasoning_effort": "Effort de raisonnement", + "model_behavior.title_standard_generation": "Génération standard", + "model_picker.chat_model_desc": "Choisissez le modèle pour ce chat. Si un modèle prend en charge des profils de raisonnement, configurez-les sur sa carte.", + "model_picker.chat_model_title": "Modèle de chat", + "model_picker.connect_provider_hint": "Connectez ce fournisseur pour parcourir et enregistrer des modèles", + "model_picker.default_model_desc": "Choisissez le modèle par défaut pour les nouveaux chats, puis ajustez les profils de raisonnement sur sa carte avant d'appuyer sur Terminé.", + "model_picker.default_model_title": "Modèle par défaut", + "model_picker.model_count": "{count} modèles", + "model_picker.model_count_one": "1 modèle", + "model_picker.more_providers": "Plus de fournisseurs", + "model_picker.no_results": "Aucun modèle ne correspond à votre recherche.", + "model_picker.other_connected_models": "Autres modèles connectés", + "model_picker.recommended": "Recommandé", + "onboarding.access_label": "Accès", + "onboarding.add": "Ajouter", + "onboarding.add_folder_path": "Ajouter le chemin d'un dossier", + "onboarding.advanced_settings": "Paramètres avancés", + "onboarding.attach": "Attacher", + "onboarding.attach_description": "Attachez-vous à la session existante sur cet appareil.", + "onboarding.authorize_folder": "Autoriser le dossier", + "onboarding.back": "Retour", + "onboarding.checking_cli": "Vérification de la CLI OpenCode...", + "onboarding.choose_workspace_folder": "Choisir le dossier de l'espace de travail", + "onboarding.cli_checking": "Vérification de l'installation...", + "onboarding.cli_install_commands": "Installez OpenCode avec l'une des commandes ci-dessous, puis redémarrez OpenWork.", + "onboarding.cli_label": "CLI OpenCode", + "onboarding.cli_needs_update": "La CLI OpenCode doit être mise à jour pour serve.", + "onboarding.cli_not_found": "CLI OpenCode introuvable.", + "onboarding.cli_not_found_hint": "Introuvable. Installez-la pour exécuter le serveur local.", + "onboarding.cli_ready": "CLI OpenCode prête.", + "onboarding.cli_recheck": "Revérifier", + "onboarding.cli_version": "OpenCode {version}", + "onboarding.cli_version_installed": "Installé", + "onboarding.create_first_workspace": "Créer votre premier espace de travail", + "onboarding.create_workspace": "Créer un espace de travail", + "onboarding.engine_running": "Moteur déjà en cours d'exécution", + "onboarding.folders_allowed": "{count} dossier{plural} autorisé", + "onboarding.getting_ready": "Préparation en cours", + "onboarding.install": "Installer OpenCode", + "onboarding.install_instruction": "Installez OpenCode pour activer le serveur local (aucun terminal requis).", + "onboarding.last_checked": "Dernière vérification {time}", + "onboarding.manage_access_hint": "Vous pouvez gérer l'accès dans les paramètres avancés.", + "onboarding.open_settings": "Ouvrir les paramètres", + "onboarding.open_settings_hint": "Besoin d'options de moteur ou d'accès ? Ouvrez les paramètres.", + "onboarding.pick": "Choisir", + "onboarding.ready_message": "OpenCode est prêt à démarrer le serveur local.", + "onboarding.remember_choice": "Mémoriser mon choix pour la prochaine fois", + "onboarding.remote_workspace_action": "Connecter", + "onboarding.remote_workspace_card_description": "Connectez-vous à un serveur OpenWork pour accéder à un espace de travail partagé.", + "onboarding.remote_workspace_card_title": "Connecter un espace de travail distant", + "onboarding.remote_workspace_description": "Connectez-vous à un serveur OpenWork pour accéder à un espace de travail depuis n'importe où.", + "onboarding.remote_workspace_title": "Se connecter au serveur OpenWork", + "onboarding.remove": "Supprimer", + "onboarding.resolved_path": "Chemin résolu", + "onboarding.run_local": "Exécuter en local", + "onboarding.run_local_description": "OpenWork exécute OpenCode localement et garde votre travail privé.", + "onboarding.search_notes": "Rechercher des notes", + "onboarding.searching_host": "Connexion au serveur OpenWork...", + "onboarding.serve_help": "sortie de serve --help", + "onboarding.show_search_notes": "Afficher les notes de recherche", + "onboarding.start": "Démarrer OpenWork", + "onboarding.starting_host": "Démarrage du serveur OpenWork...", + "onboarding.theme_current": "Actuel : {mode}", + "onboarding.theme_dark": "Sombre", + "onboarding.theme_label": "Thème", + "onboarding.theme_light": "Clair", + "onboarding.theme_system": "Système", + "onboarding.verifying": "Vérification de l'échange sécurisé", + "onboarding.version": "Version", + "onboarding.welcome_title": "Comment souhaitez-vous exécuter OpenWork aujourd'hui ?", + "onboarding.windows_install_instruction": "Installez OpenCode pour Windows, puis redémarrez OpenWork. Assurez-vous que opencode.exe est dans le PATH.", + "onboarding.workspace_folder_label": "Un espace de travail est un dossier avec ses propres Skills, Plugins et Commands.", + "plugins.add": "Ajouter", + "plugins.add_hint": "Ajoutez des noms de packages npm, par ex. opencode-wakatime", + "plugins.add_label": "Ajouter un plugin", + "plugins.added": "Ajouté", + "plugins.config": "Config", + "plugins.config_label": "Config", + "plugins.desc": "Gérez `opencode.json` pour votre projet ou les Plugins OpenCode globaux.", + "plugins.empty": "Aucun Plugin configuré pour le moment.", + "plugins.enabled": "Activé", + "plugins.hide_setup": "Masquer la configuration", + "plugins.not_loaded": "Pas encore chargé", + "plugins.not_loaded_yet": "Pas encore chargé", + "plugins.remove": "Supprimer", + "plugins.scheduler_desc": "Exécutez des tâches planifiées avec le plugin scheduler d'OpenCode.", + "plugins.scope_global": "Global", + "plugins.scope_project": "Projet", + "plugins.setup": "Configuration", + "plugins.suggested": "Plugins suggérés", + "plugins.suggested_heading": "Plugins suggérés", + "plugins.title": "Plugins OpenCode", + "providers.api_key_label": "Clé API", + "providers.api_key_required": "La clé API est requise", + "providers.auth_failed": "Échec de l'authentification", + "providers.connect_failed": "Échec de la connexion au fournisseur", + "providers.disabled_in_config_suffix": "et l'a désactivé dans la configuration OpenCode.", + "providers.disconnect_failed": "Échec de la déconnexion du fournisseur", + "providers.disconnected_prefix": "Déconnecté", + "providers.load_failed": "Échec du chargement des fournisseurs", + "providers.no_oauth_prefix": "Aucun flux OAuth disponible pour", + "providers.no_providers_available": "Aucun fournisseur disponible", + "providers.not_connected": "Non connecté à un serveur", + "providers.not_oauth_flow_prefix": "La méthode d'authentification sélectionnée n'est pas un flux OAuth pour", + "providers.oauth_failed": "Impossible de terminer OAuth", + "providers.oauth_method_required": "La méthode OAuth est requise", + "providers.provider_error": "Erreur du fournisseur ({provider})", + "providers.provider_id_required": "L'ID du fournisseur est requis", + "providers.rate_limit_exceeded": "Limite de débit dépassée", + "providers.removal_unsupported": "La suppression de l'authentification du fournisseur n'est pas prise en charge par ce client.", + "providers.request_failed": "Échec de la requête", + "providers.save_api_key_failed": "Échec de l'enregistrement de la clé API", + "providers.still_connected_suffix": ", mais le worker le signale toujours comme connecté. Effacez toute clé API ou identifiant OAuth restant et redémarrez le worker pour le déconnecter complètement.", + "providers.unknown_provider": "Fournisseur inconnu", + "providers.use_api_key_suffix": "Utilisez plutôt une clé API.", + "question_modal.custom_answer_label": "Ou saisissez une réponse personnalisée", + "question_modal.custom_answer_placeholder": "Tapez votre réponse ici...", + "question_modal.question_counter": "Question {current} sur {total}", + "scheduled.at_time": "À {time}", + "scheduled.badge_end_of_day": "Fin de journée", + "scheduled.badge_every_few_hours": "Toutes les quelques heures", + "scheduled.badge_friday_wrapup": "Bilan du vendredi", + "scheduled.badge_weekday_evening": "Soir de semaine", + "scheduled.badge_weekday_morning": "Matin de semaine", + "scheduled.badge_weekend_review": "Bilan du week-end", + "scheduled.create_button": "Créer", + "scheduled.create_desc": "Les automatisations sont planifiées en exécutant un prompt dans un nouveau fil. Nous préremplirons un prompt pour vous.", + "scheduled.create_title": "Créer une automatisation", + "scheduled.created_prefix": "Créé", + "scheduled.custom_schedule": "Planning personnalisé", + "scheduled.daily_mode": "Quotidien", + "scheduled.day_fri": "Ven", + "scheduled.day_mon": "Lun", + "scheduled.day_sat": "Sam", + "scheduled.day_sun": "Dim", + "scheduled.day_thu": "Jeu", + "scheduled.day_tue": "Mar", + "scheduled.day_wed": "Mer", + "scheduled.days_at": "{days} à {time}", + "scheduled.default_automation_name": "Analyse quotidienne des bugs", + "scheduled.delete_confirm_desc": "Cela supprime le planning et efface la définition de tâche de {source}.", + "scheduled.delete_confirm_title": "Supprimer l'automatisation ?", + "scheduled.delete_error_fallback": "Échec de la suppression de la tâche.", + "scheduled.delete_label": "Supprimer", + "scheduled.deleting": "Suppression", + "scheduled.desktop_required": "Les tâches planifiées nécessitent l'application desktop.", + "scheduled.empty_hint": "Aucune automatisation pour le moment. Choisissez un modèle ou créez votre propre prompt d'automatisation.", + "scheduled.every_day_at": "Chaque jour à {time}", + "scheduled.every_hour": "Chaque heure", + "scheduled.every_n_hours": "Toutes les {interval} heures", + "scheduled.every_prefix": "Tous les", + "scheduled.explore_more": "Explorer davantage", + "scheduled.failed_status": "Échec", + "scheduled.filter_all": "Tout", + "scheduled.filter_scheduled": "Planifié", + "scheduled.filter_templates": "Modèles", + "scheduled.hours_suffix": "heures", + "scheduled.install_scheduler": "Installer scheduler", + "scheduled.install_scheduler_hint": "Les automatisations s'exécutent via le plugin opencode-scheduler. Ajoutez-le à cet espace de travail pour activer la planification.", + "scheduled.install_scheduler_title": "Installez scheduler pour débloquer les automatisations", + "scheduled.installing": "Installation...", + "scheduled.interval_mode": "Intervalle", + "scheduled.last_run_prefix": "Dernière exécution", + "scheduled.last_updated_prefix": "Dernière mise à jour", + "scheduled.name_label": "Nom", + "scheduled.never": "Jamais", + "scheduled.new_automation": "Nouvelle automatisation", + "scheduled.no_automations_match": "Aucune automatisation ne correspond à cette recherche.", + "scheduled.no_templates_match": "Aucun modèle ne correspond à cette recherche.", + "scheduled.not_run_yet": "Pas encore exécuté", + "scheduled.not_synced_yet": "Pas encore synchronisé", + "scheduled.page_description": "Planifiez des tâches récurrentes pour ce worker, surveillez ce qui est déjà enregistré et partez d'un modèle réutilisable.", + "scheduled.prepare_error_fallback": "Échec de la préparation de l'automatisation dans le chat.", + "scheduled.prepared_automation_in_chat": "Automatisation préparée dans le chat.", + "scheduled.prepared_job_in_chat": "{name} préparé dans le chat.", + "scheduled.quick_start_templates": "Modèles de démarrage rapide", + "scheduled.quick_start_templates_desc": "Commencez à partir d'un workflow récurrent éprouvé, puis adaptez le prompt avant de le préparer dans le chat.", + "scheduled.refreshing": "Actualisation", + "scheduled.reload_activate_hint": "OpenCode charge les Plugins au démarrage. Rechargez OpenWork pour activer opencode-scheduler.", + "scheduled.reload_activate_title": "Rechargez OpenWork pour activer les automatisations", + "scheduled.reload_openwork": "Recharger OpenWork", + "scheduled.reloading": "Rechargement...", + "scheduled.removed_job": "{name} supprimé.", + "scheduled.run_label": "Exécuter", + "scheduled.running_status": "En cours d'exécution", + "scheduled.schedule_label": "Planning", + "scheduled.scheduler_install_requested": "Installation de scheduler demandée.", + "scheduled.search_placeholder": "Rechercher des automatisations ou des modèles", + "scheduled.source_local": "Depuis le scheduler local", + "scheduled.source_remote": "Depuis le serveur OpenWork", + "scheduled.subtitle_local": "Automatisations exécutées selon un planning depuis cet appareil.", + "scheduled.subtitle_remote": "Automatisations exécutées selon un planning depuis le serveur OpenWork connecté.", + "scheduled.success_status": "Succès", + "scheduled.task_summary_no_prompt": "Aucun prompt ou aucune commande trouvé.", + "scheduled.task_summary_prompt": "Prompt", + "scheduled.template_badge": "Modèle", + "scheduled.template_count": "{count} modèles", + "scheduled.title": "Automatisations", + "scheduled.tpl_daily_planning_desc": "Construisez un plan ciblé à partir de vos tâches et de votre calendrier.", + "scheduled.tpl_daily_planning_name": "Brief de planification quotidienne", + "scheduled.tpl_habit_checkin_desc": "Effectuez une vérification rapide de responsabilité pendant la journée.", + "scheduled.tpl_habit_checkin_name": "Point d'habitude", + "scheduled.tpl_inbox_zero_desc": "Résumez les messages non lus et rédigez de courtes réponses.", + "scheduled.tpl_inbox_zero_name": "Assistant inbox zero", + "scheduled.tpl_learning_digest_desc": "Transformez les liens et notes enregistrés en digest hebdomadaire.", + "scheduled.tpl_learning_digest_name": "Digest d'apprentissage", + "scheduled.tpl_meeting_prep_desc": "Générez des points de préparation pour les réunions de demain.", + "scheduled.tpl_meeting_prep_name": "Notes de préparation de réunion", + "scheduled.tpl_weekly_wins_desc": "Créez un récapitulatif du vendredi avec réussites, blocages et prochaines étapes.", + "scheduled.tpl_weekly_wins_name": "Récapitulatif des réussites hebdomadaires", + "scheduled.view_scheduler_docs": "Voir la documentation scheduler", + "scheduled.weekdays_at": "En semaine à {time}", + "scheduled.weekends_at": "Le week-end à {time}", + "scheduled.worker_root_hint": "La racine du worker est déduite de l'espace de travail sélectionné.", + "scheduled.your_automations": "Vos automatisations", + "session.allow_for_session": "Autoriser pour la session", + "session.allow_once": "Une fois", + "session.api_key_saved": "Clé API enregistrée", + "session.attachments_add_token": "Ajoutez un jeton de serveur pour joindre des fichiers.", + "session.attachments_connect_server": "Connectez-vous au serveur OpenWork pour joindre des fichiers.", + "session.back": "Retour", + "session.close_quick_actions": "Fermer les actions rapides", + "session.close_search": "Fermer la recherche", + "session.cmd_compact_detail": "Envoyer une instruction de compaction à OpenCode pour cette session", + "session.cmd_compact_detail_empty": "Aucun message utilisateur à compacter pour le moment", + "session.cmd_compact_meta": "Compacter", + "session.cmd_compact_title": "Compacter la conversation", + "session.cmd_current_workspace": "Espace de travail actuel", + "session.cmd_model_detail": "{model} · {variant}", + "session.cmd_model_fallback": "Modèle", + "session.cmd_model_meta": "Ouvrir", + "session.cmd_model_title": "Changer le modèle", + "session.cmd_new_session_detail": "Démarrer une nouvelle tâche dans l'espace de travail actuel", + "session.cmd_new_session_meta": "Créer", + "session.cmd_new_session_title": "Créer une nouvelle session", + "session.cmd_provider_detail": "Ouvrir le flux de connexion du fournisseur", + "session.cmd_provider_meta": "Ouvrir", + "session.cmd_provider_title": "Connecter un fournisseur", + "session.cmd_rename_detail_fallback": "Donnez un nom plus clair à la session sélectionnée", + "session.cmd_rename_meta": "Renommer", + "session.cmd_rename_title": "Renommer la session actuelle", + "session.cmd_sessions_detail": "{count} disponibles dans tous les espaces de travail", + "session.cmd_sessions_meta": "Aller", + "session.cmd_sessions_title": "Rechercher des Sessions", + "session.cmd_switch": "Basculer", + "session.compacted": "Session compactée.", + "session.compacting": "Compaction du contexte de la session...", + "session.compacting_auto": "OpenCode compacte automatiquement cette session", + "session.compacting_manual": "OpenCode compacte cette session", + "session.compaction_finished": "OpenCode a terminé la compaction du contexte de la session.", + "session.compaction_started": "OpenCode a commencé la compaction du contexte de la session.", + "session.conflict_sync_toast": "Conflit de synchronisation de {path}. Les modifications locales ont été enregistrées dans {conflictPath}.", + "session.connect_failed": "Échec de la connexion", + "session.connect_to_sync": "Connectez-vous au serveur OpenWork pour synchroniser les fichiers distants.", + "session.create_or_connect_workspace": "Créer ou connecter un espace de travail", + "session.create_workspace_desc": "Ouvrez le créateur d'espace de travail et choisissez comment vous souhaitez démarrer.", + "session.create_workspace_title": "Créer un espace de travail", + "session.default_agent": "Agent par défaut", + "session.default_title": "Nouvelle session", + "session.delete": "Supprimer", + "session.delete_named_session_message": "Cela supprimera définitivement \"{title}\" et ses messages.", + "session.delete_session_generic": "Cela supprimera définitivement la session sélectionnée et ses messages.", + "session.delete_session_title": "Supprimer la session ?", + "session.deleted": "Session supprimée", + "session.deleting": "Suppression...", + "session.deny": "Refuser", + "session.details": "Détails", + "session.details_label": "Détails", + "session.doom_loop_label": "Boucle infinie", + "session.doom_loop_message": "OpenCode a détecté des appels d'outils répétés avec une entrée identique et demande s'il doit continuer après des échecs répétés.", + "session.doom_loop_note": "Refusez pour arrêter la boucle, ou autorisez si vous voulez que l'agent continue d'essayer.", + "session.doom_loop_repeated_call_label": "Appel répété", + "session.doom_loop_repeated_tool_call": "Appel d'outil répété", + "session.doom_loop_title": "Boucle infinie détectée", + "session.doom_loop_tool_label": "Outil", + "session.downloading": "Téléchargement", + "session.downloading_percent": "Téléchargement {percent}%", + "session.downloading_update_title": "Téléchargement de la mise à jour {version}", + "session.export_already_running": "L'export est déjà en cours.", + "session.export_desktop_only": "L'export est disponible dans l'application desktop.", + "session.export_desktop_only_local": "L'export est disponible pour les workers locaux dans l'application desktop.", + "session.export_local_only": "L'export n'est pris en charge que pour les workers locaux.", + "session.failed_to_compact": "Échec de la compaction de la session", + "session.failed_to_create_session": "Échec de la création de la session", + "session.failed_to_delete": "Échec de la suppression de la session", + "session.failed_to_load_agents": "Échec du chargement des agents", + "session.failed_to_load_providers": "Échec du chargement des fournisseurs", + "session.failed_to_redo": "Échec du rétablissement", + "session.failed_to_save_api_key": "Échec de l'enregistrement de la clé API", + "session.failed_to_stop": "Échec de l'arrêt", + "session.failed_to_undo": "Échec de l'annulation", + "session.file_open_desktop_only": "L'ouverture de fichier est disponible dans l'application desktop.", + "session.file_open_failed": "Échec de l'ouverture du fichier", + "session.file_open_remote_unavailable": "L'ouverture de fichier n'est pas disponible pour les espaces de travail distants.", + "session.flyout_file_modified": "Fichier modifié", + "session.flyout_new_task": "Nouvelle tâche", + "session.install_update": "Installer la mise à jour", + "session.jump_to_latest": "Aller au plus récent", + "session.jump_to_start": "Aller au début du message", + "session.load_earlier": "Charger les messages précédents", + "session.loading_detail": "Récupération des derniers messages pour cette tâche.", + "session.loading_earlier": "Chargement des messages précédents...", + "session.loading_session": "Chargement de la session", + "session.loading_title": "Chargement de la session", + "session.menu_label": "Menu", + "session.model": "Modèle", + "session.model_fallback": "Modèle", + "session.new_task": "Nouvelle tâche", + "session.next_match": "Résultat suivant", + "session.no_matches": "Aucun résultat", + "session.no_matches_command": "Aucun résultat.", + "session.no_session_selected": "Aucune session sélectionnée", + "session.nothing_to_compact": "Rien à compacter pour le moment.", + "session.nothing_to_redo": "Rien à rétablir.", + "session.nothing_to_retry": "Rien à relancer pour le moment", + "session.nothing_to_undo": "Rien à annuler pour le moment.", + "session.oauth_failed": "Échec d'OAuth", + "session.obsidian_worker_relative_only": "Seuls les fichiers relatifs au worker peuvent être ouverts dans Obsidian.", + "session.open": "Ouvrir", + "session.palette_hint_navigate": "Touches fléchées pour naviguer", + "session.palette_hint_run": "Entrée pour exécuter · Échap pour fermer", + "session.palette_placeholder_actions": "Rechercher des actions", + "session.palette_placeholder_sessions": "Trouver par titre de session ou espace de travail", + "session.palette_title_actions": "Actions rapides", + "session.palette_title_sessions": "Rechercher des Sessions", + "session.permission_label": "Autorisation", + "session.permission_message": "OpenCode demande une autorisation pour continuer.", + "session.permission_required": "Autorisation requise", + "session.phase_responding": "Réponse en cours", + "session.phase_retrying": "Nouvelle tentative", + "session.phase_run_failed": "Exécution échouée", + "session.phase_sending": "Envoi", + "session.pick_folder_desc": "Choisissez un dossier de projet ou de notes existant et OpenWork l'utilisera comme espace de travail.", + "session.pick_folder_title": "Choisissez un dossier dans lequel vous voulez travailler", + "session.pick_workspace_to_open": "Choisissez un espace de travail pour ouvrir des fichiers.", + "session.prev_match": "Résultat précédent", + "session.provider_auth_in_progress": "L'authentification du fournisseur est déjà en cours.", + "session.provider_connected": "Fournisseur connecté", + "session.quick_actions_label": "Actions rapides", + "session.quick_actions_title": "Actions rapides (Ctrl/Cmd+K)", + "session.redo_aria_label": "Rétablir le dernier message annulé", + "session.redo_label": "Rétablir", + "session.redo_title": "Rétablir le dernier message annulé", + "session.remote_sync_failed": "Échec de la synchronisation du fichier distant", + "session.rename_description": "Mettez à jour le nom de cette session.", + "session.rename_label": "Nom de la session", + "session.rename_placeholder": "Entrez un nouveau nom", + "session.rename_title": "Renommer la session", + "session.resize_workspace_column": "Redimensionner la colonne de l'espace de travail", + "session.restart_update_title": "Redémarrer pour appliquer la mise à jour {version}", + "session.restored_message": "Le message annulé a été restauré.", + "session.reveal": "Révéler", + "session.reveal_desktop_only": "Révéler est disponible dans l'application desktop.", + "session.revert_label": "Annuler", + "session.reverted_last_message": "Le dernier message utilisateur a été annulé.", + "session.run": "Exécuter", + "session.scope_label": "Portée", + "session.search_conversation_label": "Rechercher dans la conversation", + "session.search_conversation_title": "Rechercher dans la conversation (Ctrl/Cmd+F)", + "session.search_next": "Suivant", + "session.search_placeholder": "Rechercher dans ce chat", + "session.search_position": "{current} sur {total}", + "session.search_prev": "Précédent", + "session.share_active_cloud_org": "Organisation Cloud active", + "session.share_choose_org": "Choisissez une organisation dans Paramètres -> Cloud avant de partager avec votre équipe.", + "session.share_collaborator_hint": "Accès distant courant lorsque vous n'avez pas besoin d'actions réservées au propriétaire.", + "session.share_collaborator_host_hint": "Accès distant courant à cet hôte sans actions réservées au propriétaire.", + "session.share_collaborator_label": "Jeton collaborateur", + "session.share_collaborator_token": "Jeton collaborateur", + "session.share_connected_with_hint": "Cet espace de travail est actuellement connecté avec ce mot de passe.", + "session.share_desktop_app_required": "Application desktop requise", + "session.share_desktop_required": "Application desktop requise", + "session.share_host_url_and_token_required": "L'URL et le jeton de l'hôte OpenWork sont requis.", + "session.share_local_host_not_ready": "L'hôte OpenWork local n'est pas encore prêt.", + "session.share_missing_host_url": "URL d'hôte OpenWork manquante.", + "session.share_missing_token": "Jeton OpenWork manquant.", + "session.share_no_skills": "Aucun Skill trouvé dans cet espace de travail.", + "session.share_note_direct_runtime": "Le runtime du moteur est réglé sur Direct. Le changement de workers locaux peut redémarrer l'hôte et déconnecter les clients. Le jeton peut changer après un redémarrage.", + "session.share_opencode_base_url": "URL de base OpenCode", + "session.share_openwork_workers_only": "Les liens de service de partage ne sont disponibles que pour les workers OpenWork.", + "session.share_owner_permission_hint": "À utiliser lorsque le client distant doit répondre aux demandes d'autorisation.", + "session.share_password": "Mot de passe", + "session.share_password_owner_hint": "À utiliser lorsque le client distant doit répondre aux demandes d'autorisation.", + "session.share_publish_skills_failed": "Échec de la publication de l'ensemble de Skills", + "session.share_publish_workspace_failed": "Échec de la publication du profil d'espace de travail", + "session.share_resolve_local_workspace_failed": "Impossible de résoudre cet espace de travail sur l'hôte OpenWork local.", + "session.share_resolve_remote_workspace_failed": "Impossible de résoudre cet espace de travail sur l'hôte OpenWork.", + "session.share_save_team_template_failed": "Échec de l'enregistrement du modèle d'équipe", + "session.share_saved_to_org": "{name} enregistré dans {org}.", + "session.share_select_workspace": "Sélectionnez d'abord un espace de travail.", + "session.share_set_token_hint": "Définir le jeton dans les paramètres de l'espace de travail", + "session.share_sign_in_required": "Connectez-vous à OpenWork Cloud dans les Paramètres pour partager avec votre équipe.", + "session.share_skills_set_desc": "Ensemble complet de Skills depuis un espace de travail OpenWork.", + "session.share_starting_server": "Démarrage du serveur...", + "session.share_team_fallback_name": "vos modèles d'équipe", + "session.share_url_resolving_hint": "L'URL du worker est en cours de résolution ; l'URL de l'hôte est affichée en secours.", + "session.share_url_worker_hint": "À utiliser sur les téléphones ou ordinateurs portables se connectant à ce worker.", + "session.share_worker_url": "URL du worker", + "session.share_worker_url_phones_hint": "À utiliser sur les téléphones ou ordinateurs portables se connectant à ce worker.", + "session.share_worker_url_resolving_hint": "L'URL du worker est en cours de résolution ; l'URL de l'hôte est affichée en secours.", + "session.share_workspace_template_desc": "Modèle complet d'espace de travail OpenWork avec configuration, Commands, Skills et fichiers .opencode supplémentaires.", + "session.shared_folder_upload_failed": "Échec du téléversement dans le dossier partagé", + "session.show_earlier": "Afficher {count} message{plural} précédent", + "session.status_active": "Session active", + "session.status_compacting": "Compaction du contexte", + "session.status_delegating": "Délégation", + "session.status_gathering_context": "Collecte du contexte", + "session.status_planning": "Planification", + "session.status_ready": "Prêt", + "session.status_ready_session": "Session prête", + "session.status_running_shell": "Exécution du shell", + "session.status_searching_codebase": "Recherche dans la base de code", + "session.status_searching_web": "Recherche sur le web", + "session.status_thinking": "Réflexion", + "session.status_working": "Travail en cours", + "session.status_writing_file": "Écriture du fichier", + "session.stopped": "Arrêté.", + "session.stopping_run": "Arrêt de l'exécution...", + "session.todo_progress": "{completed} tâches terminées sur {total}", + "session.trying_again": "Nouvelle tentative...", + "session.unable_to_open_file": "Impossible d'ouvrir le fichier", + "session.unable_to_open_obsidian": "Impossible d'ouvrir le fichier dans Obsidian", + "session.unable_to_reveal": "Impossible de révéler l'espace de travail", + "session.undo_label": "Annuler", + "session.undo_title": "Annuler le dernier message", + "session.update_available": "Mise à jour disponible", + "session.update_available_title": "Mise à jour disponible {version}", + "session.update_ready": "Mise à jour prête", + "session.update_ready_stop_runs_title": "Mise à jour {version} prête. Arrêtez les exécutions actives pour redémarrer.", + "session.upload_connect_server": "Connectez-vous au serveur OpenWork pour téléverser des fichiers dans le dossier partagé.", + "session.uploaded_to_shared_folder": "Téléversé dans le dossier partagé.", + "session.uploaded_with_summary": "Téléversé dans le dossier partagé : {summary}", + "session.uploading_to_shared_folder": "Téléversement de {label} dans le dossier partagé...", + "session.workspace_fallback": "Espace de travail", + "session.workspace_label": "Espace de travail", + "session.workspace_path_unavailable": "Le chemin de l'espace de travail est indisponible.", + "session.workspace_setup_desc": "Commencez avec un espace de travail OpenWork guidé, ou choisissez un dossier existant dans lequel vous voulez travailler.", + "session.workspace_setup_label": "Configuration de l'espace de travail", + "session.workspace_setup_title": "Configurer votre premier espace de travail", + "settings.action_download": "Télécharger", + "settings.action_install": "Installer", + "settings.actor_host": "hôte", + "settings.actor_remote": "distant", + "settings.actor_unknown": "inconnu", + "settings.advanced": "Avancé", + "settings.advanced_title": "Avancé", + "settings.api_keys_info": "Les clés API sont stockées localement par OpenCode. Les fournisseurs basés sur l'environnement doivent être modifiés dans l'environnement du worker puis rechargés.", + "settings.appearance_hint": "Correspondre au système ou forcer le mode clair/sombre.", + "settings.appearance_title": "Apparence", + "settings.audit_error": "Erreur", + "settings.audit_loading": "Chargement", + "settings.audit_log_title": "Journal d'audit", + "settings.audit_ready": "Prêt", + "settings.auto_compact": "Compaction automatique du contexte", + "settings.auto_compact_desc": "Contrôle compaction.auto d'OpenCode pour cet espace de travail. Rechargez le moteur après modification.", + "settings.auto_update_desc": "Télécharger les mises à jour automatiquement (invite à", + "settings.auto_update_title": "Mise à jour automatique", + "settings.available_count": "{count} disponibles", + "settings.background_checks_desc": "OpenWork vérifie toujours au lancement. Vérifie aussi une fois", + "settings.background_checks_title": "Vérifications en arrière-plan", + "settings.base_url_unavailable": "URL de base indisponible", + "settings.binary_unavailable": "Binaire indisponible", + "settings.cache_nothing_to_repair": "Aucun cache OpenCode trouvé. Rien à réparer.", + "settings.cache_repair_requires_desktop": "La réparation du cache nécessite l'application desktop", + "settings.cache_repaired": "Cache OpenCode réparé. Redémarrez le moteur s'il était en cours d'exécution.", + "settings.cap_browser_tools": "Outils navigateur : {value}", + "settings.cap_commands": "Commands : {value}", + "settings.cap_config": "Config : {value}", + "settings.cap_file_tools": "Outils fichiers : {value}", + "settings.cap_inbox_off": "boîte de réception désactivée", + "settings.cap_inbox_on": "boîte de réception activée", + "settings.cap_mcp": "MCP : {value}", + "settings.cap_outbox_off": "boîte d'envoi désactivée", + "settings.cap_outbox_on": "boîte d'envoi activée", + "settings.cap_plugins": "Plugins : {value}", + "settings.cap_proxy": "Proxy (OpenCodeRouter) : {value}", + "settings.cap_read": "lecture", + "settings.cap_sandbox": "Sandbox : {value}", + "settings.cap_skills": "Skills : {value}", + "settings.cap_write": "écriture", + "settings.capabilities_title": "Capacités du serveur OpenWork", + "settings.capabilities_unavailable": "Capacités indisponibles. Connectez-vous avec un jeton client.", + "settings.change": "Modifier", + "settings.check_update": "Vérifier", + "settings.checking_for_updates": "Vérification des mises à jour", + "settings.choose": "Choisir", + "settings.clear": "Effacer", + "settings.clipboard_unavailable": "Le presse-papiers est indisponible dans cet environnement.", + "settings.configure": "Configurer", + "settings.connect_opencode_hint": "Connectez-vous à OpenCode pour charger les fournisseurs.", + "settings.connect_provider": "Connecter un fournisseur", + "settings.connected_count": "{count} connectés", + "settings.connection": "Connexion", + "settings.connection_failed": "Échec de la connexion", + "settings.connection_title": "Connexion", + "settings.copied_debug_report": "Rapport d'exécution JSON copié.", + "settings.copy_failed": "Échec de la copie du rapport d'exécution.", + "settings.copy_json": "Copier le JSON", + "settings.custom_binary_hint": "Utilisez ceci pour pointer OpenWork vers une build locale d'OpenCode", + "settings.custom_binary_label": "Binaire OpenCode personnalisé", + "settings.data_dir_unavailable": "Répertoire de données indisponible", + "settings.debug_commit": "Commit : {sha}", + "settings.debug_desktop_app": "Application desktop : {version}", + "settings.debug_opencode_router_version": "OpenCodeRouter : {version}", + "settings.debug_opencode_version": "OpenCode : {version}", + "settings.debug_openwork_server_version": "Serveur OpenWork : {version}", + "settings.debug_orchestrator_version": "Orchestrator : {version}", + "settings.debug_section_title": "Développeur", + "settings.deeplink_failed": "Échec de l'ouverture du lien profond.", + "settings.deeplink_hint": "Accepte openwork://, openwork-dev:// ou une URL brute prise en charge https://share.openworklabs.com/b/... .", + "settings.default_model": "Modèle par défaut", + "settings.delete_containers": "Suppression des conteneurs...", + "settings.delete_local_config": "Suppression de l'état local...", + "settings.desktop_only_hint": "Disponible dans l'application desktop.", + "settings.dev_mode_badge": "Mode dev", + "settings.developer": "Développeur", + "settings.developer_mode_desc": "Active les outils de débogage, diagnostics et l'onglet Développeur.", + "settings.developer_mode_title": "Mode développeur", + "settings.developer_panel_disabled": "Panneau développeur activé.", + "settings.developer_panel_enabled": "Panneau développeur activé.", + "settings.devlog_cleared": "Sortie du journal développeur effacée.", + "settings.devlog_clipboard_unavailable": "Le presse-papiers est indisponible dans cet environnement.", + "settings.devlog_copied": "Sortie du journal développeur copiée.", + "settings.devlog_copy_failed": "Échec de la copie de la sortie du journal développeur.", + "settings.devlog_export_failed": "Échec de l'export de la sortie du journal développeur.", + "settings.devlog_export_unavailable": "L'export est indisponible dans cet environnement.", + "settings.devlog_exported": "Sortie du journal développeur exportée.", + "settings.devtools_desc": "Santé des sidecars, capacités et piste d'audit.", + "settings.devtools_title": "Outils de dev", + "settings.diag_approval": "Approbation : {mode} ({ms}ms)", + "settings.diag_config_path": "Chemin de configuration : {path}", + "settings.diag_daemon_url": "Daemon : {url}", + "settings.diag_default": "par défaut", + "settings.diag_health_port": "Port de santé : {port}", + "settings.diag_healthy_ms": "Sain : {ms}ms", + "settings.diag_host_token_source": "Source du jeton hôte : {source}", + "settings.diag_last_attempt": "Dernière tentative : {time}", + "settings.diag_load_sessions_ms": "Chargement des sessions : {ms}ms", + "settings.diag_opencode_binary": "Binaire OpenCode : {binary}", + "settings.diag_opencode_url": "OpenCode : {url}", + "settings.diag_pending_permissions_ms": "Autorisations en attente : {ms}ms", + "settings.diag_pid": "PID : {pid}", + "settings.diag_providers_ms": "Fournisseurs : {ms}ms", + "settings.diag_read_only": "Lecture seule : {value}", + "settings.diag_reason": "Raison : {reason}", + "settings.diag_runtime_workspace": "Espace de travail runtime : {id}", + "settings.diag_selected_workspace": "Espace de travail sélectionné : {id}", + "settings.diag_sidecar": "Sidecar : {info}", + "settings.diag_started": "Démarré : {time}", + "settings.diag_token_source": "Source du jeton : {source}", + "settings.diag_total_ms": "Total : {ms}ms", + "settings.diag_version": "Version : {version}", + "settings.diag_workspaces": "Espaces de travail : {count}", + "settings.diagnostics_unavailable": "Diagnostics indisponibles.", + "settings.disable_developer_mode": "Désactiver le mode développeur", + "settings.disabled": "Désactivé", + "settings.disconnect": "Déconnecter", + "settings.disconnect_confirm_suffix": "Déconnecter {resolved} ? Cela supprimera les clés API ou identifiants OAuth stockés pour ce fournisseur.", + "settings.disconnect_server": "Déconnecter le serveur", + "settings.disconnected_prefix": "{resolved} déconnecté.", + "settings.disconnecting": "Déconnexion...", + "settings.docker_containers_desc": "Supprimer de force les conteneurs Docker lancés par OpenWork", + "settings.docker_containers_title": "Conteneurs Docker OpenWork", + "settings.docker_requires_desktop": "Le nettoyage Docker nécessite l'application desktop", + "settings.done": "Terminé", + "settings.downloading_bytes": "Téléchargement {downloaded}", + "settings.downloading_progress": "Téléchargement {downloaded} / {total} ({percent}%)", + "settings.enable_developer_mode": "Activer le mode développeur", + "settings.enable_exa": "Activer la recherche web Exa", + "settings.enable_exa_desc": "S'applique lorsque OpenWork Orchestrator lance OpenCode. Désactivé par", + "settings.enabled": "Activé", + "settings.engine_bundled": "Intégré (recommandé)", + "settings.engine_bundled_hint": "Le moteur intégré est l'option la plus fiable. Utilisez Système", + "settings.engine_custom_binary": "Binaire personnalisé", + "settings.engine_desc": "Choisissez comment OpenCode s'exécute localement.", + "settings.engine_runtime_label": "Runtime du moteur", + "settings.engine_source": "Source du moteur", + "settings.engine_source_debug": "Source du moteur", + "settings.engine_system_path": "Installation système (PATH)", + "settings.engine_title": "Moteur", + "settings.exa_restart_hint": "Redémarrez OpenCode ou l'orchestrateur après avoir modifié ce paramètre.", + "settings.export": "Exporter", + "settings.export_failed": "Échec de l'export du rapport d'exécution.", + "settings.export_unavailable": "L'export est indisponible dans cet environnement.", + "settings.exported_debug_report": "Rapport d'exécution JSON exporté.", + "settings.failed": "Échec", + "settings.failed_open_providers": "Échec de l'ouverture des fournisseurs", + "settings.feedback_badge": "Nous lisons chaque message", + "settings.feedback_desc": "Dites-nous ce qui vous plaît et ce qui vous semble difficile. Les retours vont directement à l'équipe et nous aident à prioriser ce qui sera livré ensuite.", + "settings.feedback_title": "Aidez à façonner OpenWork", + "settings.group_global": "Global", + "settings.group_workspace": "Espace de travail", + "settings.hide_titlebar": "Masquer la barre de titre", + "settings.hide_titlebar_desc": "Masquer la barre de titre de la fenêtre. Utile pour les gestionnaires de fenêtres en mosaïque", + "settings.join_discord": "Rejoindre Discord", + "settings.language": "Langue", + "settings.language.description": "Choisissez votre langue préférée", + "settings.last_error": "Dernière erreur", + "settings.last_stderr": "Dernier stderr", + "settings.last_stdout": "Dernier stdout", + "settings.loading_providers": "Chargement des fournisseurs...", + "settings.logs_on_host": "Les journaux sont disponibles sur l'hôte.", + "settings.managed_by_env": "Géré par l'environnement", + "settings.messaging_bridge_service": "Service bridge de messagerie.", + "settings.messaging_section_desc": "Gérez les identités Telegram/Slack et les liaisons dans l'onglet Identities.", + "settings.messaging_section_title": "Messagerie", + "settings.model": "Modèle", + "settings.model_behavior": "Comportement du modèle", + "settings.model_behavior_desc": "Ouvrez le sélecteur du modèle par défaut pour choisir des profils de raisonnement lorsqu'ils sont disponibles.", + "settings.model_default": "Par défaut", + "settings.model_description": "Valeurs par défaut + contrôles de réflexion pour les exécutions.", + "settings.model_description_default": "Choisissez parmi vos fournisseurs configurés. Cette sélection sera utilisée pour les nouvelles sessions.", + "settings.model_description_session": "Choisissez parmi vos fournisseurs configurés. Cette sélection s'applique à votre prochain message.", + "settings.model_fallback": "Secours", + "settings.model_reasoning": "Raisonnement", + "settings.model_section_desc": "Choisissez le modèle de chat par défaut et examinez sa manière de raisonner.", + "settings.model_title": "Modèle", + "settings.no_access": "aucun accès", + "settings.no_active_workspace": "Aucun espace de travail local actif.", + "settings.no_audit_entries": "Aucune entrée d'audit pour le moment.", + "settings.no_binary_selected": "Aucun binaire sélectionné.", + "settings.no_custom_path_set": "Aucun chemin personnalisé défini", + "settings.no_project_directory": "Aucun répertoire de projet", + "settings.no_stderr": "Aucun stderr capturé pour le moment.", + "settings.no_stdout": "Aucun stdout capturé pour le moment.", + "settings.no_worker_directory": "Aucun répertoire de projet", + "settings.no_worker_path": "Aucun chemin de worker disponible", + "settings.nuke_confirm_dev": "Ceci est irréversible. Cela SUPPRIMERA toutes les données OpenWork de cette build de dev ainsi que toute la configuration, l'authentification, le cache, les données et l'état de développement isolés d'OpenCode, puis quittera OpenWork. Continuer ?", + "settings.nuke_confirm_prod": "Ceci est irréversible. Cela SUPPRIMERA toutes les données OpenWork de cette build de dev ainsi que toute la configuration, l'authentification, le cache, les données et l'état de développement isolés d'OpenCode, puis quittera OpenWork. Continuer ?", + "settings.nuke_failed": "Échec de la suppression de l'état d'OpenWork et d'OpenCode.", + "settings.nuke_hint": "Utilisez ceci uniquement si vous voulez réinitialiser complètement l'application desktop et son état d'exécution OpenCode.", + "settings.nuke_success": "État d'OpenWork et d'OpenCode supprimé. OpenWork se ferme...", + "settings.off": "Désactivé", + "settings.offline": "Hors ligne", + "settings.on": "Activé", + "settings.open_deeplink_action": "Ouverture...", + "settings.open_deeplink_button": "Masquer", + "settings.open_deeplink_desc": "Collez un lien profond OpenWork ou une URL de partage pour l'ouvrir.", + "settings.open_deeplink_title": "Ouvrir un lien profond", + "settings.opencode_cache": "Cache OpenCode", + "settings.opencode_cache_description": "Répare les données mises en cache utilisées pour démarrer le moteur. Sûr à exécuter.", + "settings.opencode_engine_desc": "Runtime local pour les agents, outils et fournisseurs de modèles.", + "settings.opencode_engine_label": "Moteur OpenCode", + "settings.opencode_engine_sidecar_desc": "Sidecar d'exécution locale.", + "settings.opencode_router_sidecar": "Sidecar OpenCodeRouter", + "settings.opencode_runtime_desc": "Options de runtime pour le moteur local et le bridge orchestrator.", + "settings.opencode_sdk_desc": "Diagnostics de connexion de l'UI.", + "settings.opencode_sdk_title": "Moteur OpenCode", + "settings.opencode_section_label": "OpenCode", + "settings.opencode_url_unavailable": "URL de base indisponible", + "settings.opening": "Ouvrir le lien profond", + "settings.openwork_config_sidecar_desc": "Sidecar de configuration et d'approbations.", + "settings.openwork_diagnostics_title": "Diagnostics du serveur OpenWork", + "settings.openwork_server_desc": "Plan de contrôle des sessions pour la synchronisation de l'application, les workers et l'accès distant", + "settings.openwork_server_label": "Serveur OpenWork", + "settings.orchestrator_daemon_layer_desc": "Couche d'orchestration de l'espace de travail.", + "settings.orchestrator_daemon_title": "Daemon orchestrator", + "settings.pending_permissions": "Autorisations en attente", + "settings.production_mode_badge": "Production", + "settings.provider_default_desc": "Utiliser le comportement de raisonnement par défaut intégré du modèle.", + "settings.provider_default_label": "Valeur par défaut du fournisseur", + "settings.provider_source_config": "Config", + "settings.provider_source_custom": "Personnalisé", + "settings.provider_source_env": "Environnement", + "settings.providers_desc": "Connectez des services pour les modèles et les outils.", + "settings.providers_title": "Fournisseurs", + "settings.quit_hint": "OpenWork se ferme immédiatement après le nettoyage afin que le prochain lancement démarre avec un état local vierge pour ce mode.", + "settings.recent_events": "Événements récents", + "settings.reconnect_failed": "Échec de la reconnexion. Vérifiez l'URL/le jeton du serveur et réessayez.", + "settings.reconnect_server": "Reconnexion...", + "settings.reconnect_server_failed": "Échec de la reconnexion au serveur OpenWork.", + "settings.reconnected": "Reconnecté au serveur OpenWork.", + "settings.reconnecting": "Reconnexion...", + "settings.removing_containers": "Suppression des conteneurs...", + "settings.removing_local_state": "Suppression de l'état local...", + "settings.repair_cache": "Réparer le cache", + "settings.repairing_cache": "Réparation du cache", + "settings.report_issue": "Signaler un problème", + "settings.reset": "Réinitialiser", + "settings.reset_app_data": "Réinitialiser les données de l'application", + "settings.reset_app_data_description": "Plus agressif. Efface le cache OpenWork et les données de l'application.", + "settings.reset_app_data_title": "Réinitialiser les données de l'application", + "settings.reset_app_data_warning": "Efface le cache OpenWork et les données de l'application sur cet appareil.", + "settings.reset_button": "Réinitialiser", + "settings.reset_cancel": "Annuler", + "settings.reset_config_defaults": "Réinitialisation...", + "settings.reset_config_failed": "Échec de la réinitialisation de la configuration de l'application.", + "settings.reset_confirm_button": "Réinitialiser et redémarrer", + "settings.reset_confirmation_hint": "Tapez {resetWord} pour confirmer. OpenWork redémarrera.", + "settings.reset_confirmation_label": "Confirmation", + "settings.reset_confirmation_placeholder": "Tapez RESET", + "settings.reset_onboarding": "Réinitialiser l'onboarding", + "settings.reset_onboarding_description": "Efface les préférences OpenWork et redémarre l'application.", + "settings.reset_onboarding_title": "Réinitialiser l'onboarding", + "settings.reset_onboarding_warning": "Efface les préférences locales OpenWork et les marqueurs d'onboarding des espaces de travail.", + "settings.reset_openwork_desc_dev": "Avec le mode dev actif, cela n'efface que l'état de développement isolé d'OpenCode dans openwork-dev-data.", + "settings.reset_openwork_desc_prod": "Avec le mode dev actif, cela n'efface que l'état de développement isolé d'OpenCode dans openwork-dev-data.", + "settings.reset_openwork_title": "Réinitialiser l'état d'OpenWork et d'OpenCode", + "settings.reset_recovery_desc": "Effacer les données ou redémarrer le flux de configuration.", + "settings.reset_recovery_title": "Réinitialisation et récupération", + "settings.reset_requires_confirm": "Nécessite de taper RESET et redémarrera l'application.", + "settings.reset_startup": "Réinitialiser le mode de démarrage par défaut", + "settings.reset_startup_pref": "Réinitialiser la préférence de démarrage", + "settings.reset_stop_active_runs": "Arrêtez les exécutions actives avant de réinitialiser.", + "settings.resetting": "Réinitialisation...", + "settings.restart_blocked_message": "OpenWork doit redémarrer pour terminer cette mise à jour. Pour éviter d'interrompre votre travail en cours, l'installation est mise en pause jusqu'à la fin de vos exécutions actives ou jusqu'à ce que vous les arrêtiez.", + "settings.restart_failed": "Échec du redémarrage. Vérifiez les journaux et réessayez.", + "settings.restart_local_server": "Redémarrage...", + "settings.restart_opencode": "Redémarrage...", + "settings.restart_opencode_router": "Redémarrage...", + "settings.restart_openwork_server": "Redémarrage...", + "settings.restart_orchestrator": "Redémarrage...", + "settings.restart_server_failed": "Échec du redémarrage du serveur local.", + "settings.restarted": "Serveur local redémarré.", + "settings.restarting": "Redémarrage...", + "settings.reveal_config": "Révéler la configuration", + "settings.reveal_config_failed": "Échec de la révélation de la configuration de l'espace de travail.", + "settings.reveal_config_requires_desktop": "Révéler la configuration nécessite l'application desktop", + "settings.revealed_workspace_config": "Configuration de l'espace de travail révélée.", + "settings.run_sandbox_probe": "Exécution de la sonde...", + "settings.running_probe": "Exécution de la sonde...", + "settings.runtime_applies_hint": "S'applique au prochain démarrage ou rechargement du moteur.", + "settings.runtime_debug_desc": "Instantané de diagnostic lisible avec export en un clic.", + "settings.runtime_debug_title": "Rapport de débogage runtime", + "settings.runtime_desc": "État de votre moteur local et du serveur OpenWork.", + "settings.runtime_direct": "Direct (OpenCode)", + "settings.runtime_orchestrator": "OpenWork Orchestrator", + "settings.runtime_title": "Runtime", + "settings.sandbox_error": "Erreur", + "settings.sandbox_export_hint": "Utilisez Exporter dans le rapport de débogage runtime ci-dessus pour", + "settings.sandbox_probe_desc": "Exécute une vérification temporaire de démarrage de sandbox Docker et", + "settings.sandbox_probe_errors": "La sonde de sandbox s'est terminée avec des erreurs.", + "settings.sandbox_probe_failed": "Échec de la sonde de sandbox.", + "settings.sandbox_probe_success": "Sonde de sandbox réussie. Exportez le rapport de débogage pour le support.", + "settings.sandbox_probe_title": "Sonde de sandbox", + "settings.sandbox_ready": "Prêt", + "settings.sandbox_requires_desktop": "La sonde de sandbox nécessite l'application desktop", + "settings.sandbox_result": "Résultat : {status}", + "settings.sandbox_run_id": "ID d'exécution : {id}", + "settings.sandbox_stop_runs_hint": "Arrêtez les exécutions actives avant de sonder", + "settings.search_models": "Rechercher des modèles…", + "settings.select_binary": "Sélectionner le binaire OpenCode", + "settings.select_workspace_first": "Sélectionnez un espace de travail local avant de révéler la configuration.", + "settings.send_feedback": "Envoyer un retour", + "settings.service_restarts_desc": "Redémarrez des services hôtes spécifiques sans quitter ceci", + "settings.service_restarts_title": "Redémarrages de services", + "settings.session_model": "Modèle", + "settings.show_model_reasoning": "Afficher le raisonnement du modèle", + "settings.show_model_reasoning_desc": "Développe les traces de raisonnement dans l'UI lorsqu'un modèle les expose.", + "settings.showing_models": "Affichage de {count} sur {total}", + "settings.sidecar_config_unavailable": "Configuration du sidecar indisponible", + "settings.startup": "Démarrage", + "settings.startup_local": "Démarrer le serveur local", + "settings.startup_not_set": "Se connecter au serveur", + "settings.startup_remote_warning": "La préférence de démarrage est actuellement distante. Paramètres du moteur", + "settings.startup_reset_hint": "Cela efface votre préférence enregistrée et affiche la connexion", + "settings.startup_server": "Se connecter au serveur", + "settings.startup_title": "Démarrage", + "settings.stop_local_server": "Arrêter le serveur local", + "settings.stop_runs_before_cleanup": "Arrêtez les exécutions actives avant le nettoyage", + "settings.stop_runs_before_reset_config": "Arrêtez les exécutions actives avant de réinitialiser la configuration", + "settings.stop_runs_to_reset": "Arrêtez les exécutions actives pour réinitialiser", + "settings.switch": "Basculer", + "settings.tab_advanced": "Avancé", + "settings.tab_appearance": "Apparence", + "settings.tab_automations": "Automatisations", + "settings.tab_cloud": "Cloud", + "settings.tab_debug": "Débogage", + "settings.tab_description_advanced": "Inspectez la santé du runtime, l'état de connexion et les contrôles destinés aux développeurs.", + "settings.tab_description_appearance": "Ajustez l'apparence d'OpenWork sur desktop, thème système et chrome de l'application.", + "settings.tab_description_automations": "Créez et gérez des automatisations planifiées depuis les paramètres de l'espace de travail.", + "settings.tab_description_debug": "Consultez les diagnostics du runtime, les journaux et les utilitaires de débogage bas niveau.", + "settings.tab_description_den": "Gérez votre connexion OpenWork Cloud, les workers hébergés et l'accès à l'espace de travail.", + "settings.tab_description_extensions": "Gérez les applications MCP et les Plugins OpenCode pour cet espace de travail.", + "settings.tab_description_general": "Connectez des fournisseurs, choisissez le modèle par défaut, autorisez des dossiers et contrôlez l'espace de travail OpenWork sélectionné ainsi que sa connexion runtime.", + "settings.tab_description_messaging": "Configurez les identités du routeur et le comportement de la boîte de réception depuis les paramètres de l'espace de travail.", + "settings.tab_description_model": "Ajustez le modèle par défaut, le comportement d'exécution et les paramètres de sortie de l'assistant.", + "settings.tab_description_recovery": "Réparez l'état des migrations, réinitialisez les valeurs par défaut de l'espace de travail et récupérez les paramètres locaux.", + "settings.tab_description_skills": "Parcourez, modifiez et installez des Skills sans quitter les paramètres.", + "settings.tab_description_updates": "Gardez l'application à jour avec des vérifications discrètes en arrière-plan et des contrôles d'installation.", + "settings.tab_extensions": "Extensions", + "settings.tab_general": "Paramètres", + "settings.tab_messaging": "Messagerie", + "settings.tab_model": "Modèle", + "settings.tab_recovery": "Récupération", + "settings.tab_skills": "Skills", + "settings.tab_updates": "Mises à jour", + "settings.theme_dark": "Sombre", + "settings.theme_light": "Clair", + "settings.theme_system": "Système", + "settings.theme_system_hint": "Le mode système suit automatiquement la préférence de votre OS.", + "settings.toolbar_ready_to_install": "Prêt à installer", + "settings.update": "Mettre à jour", + "settings.update_available": "Mise à jour disponible : v", + "settings.update_available_version": "Mise à jour disponible : v{version}", + "settings.update_check_button": "Vérifier", + "settings.update_check_failed": "Échec de la vérification des mises à jour", + "settings.update_checking": "Vérification...", + "settings.update_download_button": "Télécharger", + "settings.update_downloading": "Téléchargement...", + "settings.update_error": "Échec de la vérification des mises à jour", + "settings.update_install_button": "Installer et redémarrer", + "settings.update_last_checked": "Dernière vérification {time}", + "settings.update_published": "Publié le {date}", + "settings.update_ready": "Prêt à installer : v", + "settings.update_ready_version": "Prêt à installer : v{version}", + "settings.update_uptodate": "À jour", + "settings.updates": "Mises à jour", + "settings.updates_desc": "Gardez OpenWork à jour.", + "settings.updates_desktop_only": "Les mises à jour ne sont disponibles que dans l'application desktop.", + "settings.updates_not_supported": "Les mises à jour ne sont pas prises en charge dans cet environnement.", + "settings.updates_title": "Mises à jour", + "settings.version": "Version", + "settings.versions_desc": "Infos de build sidecar + desktop.", + "settings.versions_title": "Versions", + "settings.window_appearance_desc": "Personnalisez l'apparence de la fenêtre.", + "settings.worker_id_label": "Worker {id}", + "settings.worker_unresolved": "Worker {runtimeWorkspaceId}", + "settings.workspace_config_desc": ".opencode/openwork.json", + "settings.workspace_config_title": "Configuration de l'espace de travail", + "settings.workspace_debug_events_label": "Événements de débogage de l'espace de travail", + "settings.workspace_fallback_name": "Espace de travail", + "share.active_cloud_org": "Organisation Cloud active", + "share.back_hint": "Retour aux options de partage", + "share.chooser_subtitle": "Choisissez comment vous voulez partager cet espace de travail.", + "share.close_hint": "Fermer", + "share.cloud_signin_note": "OpenWork Cloud s'ouvre dans votre navigateur et revient ici après la connexion.", + "share.collaborator_hint": "Accès courant sans approbations d'autorisation.", + "share.connect_messaging_desc": "Utilisez cet espace de travail depuis Slack, Telegram et d'autres services.", + "share.connect_messaging_title": "Connecter la messagerie", + "share.connection_details_label": "Détails de connexion", + "share.copy_hint": "Copier", + "share.copy_link_hint": "Copier le lien", + "share.create_template_link": "Créer un lien de modèle", + "share.credentials_disabled_hint": "Activez l'accès distant et cliquez sur Enregistrer pour redémarrer le worker et révéler les détails de connexion en direct de cet espace de travail.", + "share.field_password": "Mot de passe", + "share.field_worker_url": "URL du worker", + "share.hide_password": "Masquer le mot de passe", + "share.included_in_template": "Inclus dans ce modèle", + "share.option_access_desc": "Révélez les détails de connexion en direct nécessaires pour atteindre cet espace de travail en cours d'exécution depuis une autre machine.", + "share.option_access_title": "Accéder à l'espace de travail à distance", + "share.option_public_desc": "Créez un lien de partage que n'importe qui peut utiliser pour démarrer à partir de ce modèle.", + "share.option_public_title": "Modèle public", + "share.option_team_desc": "Enregistrez ce modèle d'espace de travail dans votre organisation OpenWork Cloud active.", + "share.option_team_title": "Partager avec l'équipe", + "share.option_template_desc": "Emballez cette configuration pour que quelqu'un d'autre puisse démarrer depuis le même environnement.", + "share.option_template_title": "Partager un modèle", + "share.optional_collaborator": "Accès collaborateur optionnel", + "share.public_intro": "Partagez cet espace de travail comme lien de modèle public.", + "share.publishing": "Publication...", + "share.regenerate_link": "Régénérer le lien", + "share.remote_access_desc": "Désactivé par défaut. N'activez cette option que lorsque vous voulez que ce worker soit joignable depuis une autre machine.", + "share.remote_access_disabled": "L'accès distant est actuellement désactivé.", + "share.remote_access_enabled": "L'accès distant est actuellement activé.", + "share.remote_access_title": "Accès distant", + "share.remote_save": "Enregistrer", + "share.remote_save_busy": "Enregistrement...", + "share.reveal_password": "Révéler le mot de passe", + "share.save_to_team": "Enregistrer dans l'équipe", + "share.saving": "Enregistrement...", + "share.setup": "Configuration", + "share.sign_in_to_share": "Connectez-vous pour partager avec l'équipe", + "share.subtitle_access": "Révélez les détails de connexion en direct nécessaires pour atteindre cet espace de travail depuis une autre machine.", + "share.subtitle_template_public": "Créez un lien de modèle d'espace de travail public que tout le monde peut importer.", + "share.subtitle_template_team": "Enregistrez un modèle d'espace de travail dans votre organisation OpenWork Cloud active.", + "share.team_intro": "Enregistrez ce modèle dans votre organisation OpenWork Cloud active pour que les coéquipiers puissent l'ouvrir plus tard depuis les paramètres Cloud.", + "share.template_intro": "Partagez une configuration réutilisable sans accorder d'accès en direct à cet espace de travail en cours d'exécution.", + "share.template_item_config": "Commands et configuration", + "share.template_item_config_desc": "Commands réutilisables et configuration OpenWork/OpenCode.", + "share.template_item_settings": "Paramètres de l'espace de travail", + "share.template_item_settings_desc": "Le profil d'espace de travail partagé et le comportement par défaut.", + "share.template_item_skills": "Skills inclus", + "share.template_item_skills_desc": "Skills personnalisés enregistrés dans cet espace de travail.", + "share.template_name_label": "Nom du modèle", + "share.title": "Partager l'espace de travail", + "share.view_access": "Accéder à l'espace de travail à distance", + "share.view_template": "Partager un modèle", + "share.view_template_public": "Modèle public", + "share.view_template_team": "Partager avec l'équipe", + "share.warning_basic": "Partagez uniquement avec des personnes de confiance. Ces identifiants donnent un accès en direct à cet espace de travail.", + "share.warning_full": "Ces identifiants donnent un accès en direct à cet espace de travail. Le partage distant de cet espace de travail peut permettre à toute personne ayant accès à votre réseau de contrôler votre worker.", + "share.workspace_fallback": "Espace de travail", + "share.workspace_template_desc": "Partagez la configuration de base et les valeurs par défaut de l'espace de travail.", + "share.workspace_template_title": "Modèle d'espace de travail", + "share_skill_destination.add_to_workspace": "share_skill_destination.add_to_workspace", + "share_skill_destination.adding": "share_skill_destination.adding", + "share_skill_destination.confirm_busy": "Ajout du Skill...", + "share_skill_destination.confirm_button": "Ajouter le Skill à l'espace de travail", + "share_skill_destination.connect_remote": "Connecter un espace de travail distant", + "share_skill_destination.connect_remote_desc": "Attachez un hôte OpenWork, puis choisissez-le dans la liste pour importer ce Skill.", + "share_skill_destination.connect_remote_hint": "share_skill_destination.connect_remote_hint", + "share_skill_destination.create_worker": "Créer un nouvel espace de travail", + "share_skill_destination.create_worker_desc": "Ouvrez le flux de configuration de l'espace de travail, puis ajoutez ce Skill une fois que le nouvel espace de travail est prêt.", + "share_skill_destination.create_worker_hint": "share_skill_destination.create_worker_hint", + "share_skill_destination.current_badge": "Actuel", + "share_skill_destination.existing_workers": "Espaces de travail existants", + "share_skill_destination.fallback_skill_name": "Skill partagé", + "share_skill_destination.footer_idle": "Choisissez un espace de travail pour continuer.", + "share_skill_destination.footer_selected": "Espace de travail sélectionné :", + "share_skill_destination.local_badge": "Local", + "share_skill_destination.more_options": "share_skill_destination.more_options", + "share_skill_destination.new_destination": "Nouvelle destination", + "share_skill_destination.no_workers": "Aucun espace de travail n'est encore prêt. Créez-en un ou connectez un espace de travail distant pour installer ce Skill.", + "share_skill_destination.remote_badge": "Distant", + "share_skill_destination.sandbox_badge": "Sandbox", + "share_skill_destination.selected_badge": "Sélectionné", + "share_skill_destination.selected_hint": "Sélectionné. Vérifiez la destination ci-dessous, puis confirmez.", + "share_skill_destination.skill_label": "Skill partagé", + "share_skill_destination.subtitle": "Choisissez un espace de travail existant ou créez-en un nouveau avant d'importer ce Skill partagé.", + "share_skill_destination.title": "Où ce Skill doit-il aller ?", + "share_skill_destination.trigger_label": "Déclencheur", + "sidebar.active": "Actif", + "sidebar.add_workspace": "Ajouter un nouvel espace de travail", + "sidebar.collapse": "Réduire", + "sidebar.connect_remote": "Connecter un accès distant", + "sidebar.delete_session": "Supprimer la session", + "sidebar.drag_reorder": "Faire glisser pour réorganiser", + "sidebar.edit_connection": "Modifier la connexion", + "sidebar.expand": "Développer", + "sidebar.import_config": "Importer la configuration", + "sidebar.needs_attention": "Nécessite une attention", + "sidebar.new_worker": "Nouveau worker", + "sidebar.no_workspaces": "Aucun espace de travail dans cette session pour le moment. Ajoutez-en un pour commencer.", + "sidebar.progress": "Progression", + "sidebar.show_fewer": "Afficher moins", + "sidebar.show_more": "Afficher {count} de plus", + "sidebar.stop_sandbox": "Arrêter la sandbox", + "sidebar.switch": "Basculer", + "sidebar.test_connection": "Tester la connexion", + "skills.add_custom_repo": "Ajouter un dépôt GitHub personnalisé", + "skills.add_git_repo": "Ajouter un dépôt git", + "skills.add_openwork_hub": "Ajouter un Hub OpenWork", + "skills.available_from_hub": "Disponible depuis le Hub", + "skills.catalog_search_placeholder": "Rechercher parmi les Skills installés, d'équipe et du hub", + "skills.cloud_add_skill": "Ajouter un Skill", + "skills.cloud_choose_org_detail": "Utilisez le panneau Cloud pour choisir votre organisation active, puis actualisez cette liste.", + "skills.cloud_choose_org_hint": "Choisissez une organisation dans Paramètres → Cloud pour charger les Skills d'équipe.", + "skills.cloud_footer_label": "Équipe", + "skills.cloud_hub_label": "Hub : {name}", + "skills.cloud_install_need_server": "Connectez-vous à un serveur OpenWork avec un accès en écriture aux Skills pour installer les Skills d'équipe sur ce worker.", + "skills.cloud_installed": "{name} installé sur ce worker.", + "skills.cloud_installed_as": "Installé sous {name}", + "skills.cloud_installing": "Installation de {title}…", + "skills.cloud_installing_short": "Installation", + "skills.cloud_no_search_matches": "Aucun Skill ne correspond à cette recherche.", + "skills.cloud_org_empty": "Aucun Skill d'organisation n'est encore disponible.", + "skills.cloud_org_fallback": "OpenWork Cloud", + "skills.cloud_org_load_failed": "Échec du chargement des Skills de l'organisation.", + "skills.cloud_refresh": "Actualiser les Skills d'équipe", + "skills.cloud_section_subtitle": "Skills partagés avec vous via OpenWork Cloud — y compris les hubs de Skills d'équipe auxquels vous avez accès.", + "skills.cloud_section_title": "Depuis votre organisation", + "skills.cloud_shared_org": "Organisation", + "skills.cloud_shared_private": "Privé", + "skills.cloud_shared_public": "Public", + "skills.cloud_sign_in": "Se connecter à Cloud", + "skills.cloud_sign_in_hint": "Connectez-vous à OpenWork Cloud pour parcourir les Skills d'équipe et d'organisation.", + "skills.cloud_status_installed": "Installé", + "skills.cloud_status_update": "Mise à jour disponible", + "skills.cloud_update_skill": "Mettre à jour", + "skills.cloud_updated": "{name} mis à jour sur ce worker.", + "skills.cloud_updating": "Mise à jour de {title}…", + "skills.cloud_removed": "Skill cloud local {name} supprimé.", + "skills.copy_link_failed": "Échec de la copie du lien", + "skills.create_in_chat": "Créer un Skill dans le chat", + "skills.desktop_required": "La gestion des Skills nécessite l'application desktop.", + "skills.enter_plugin_name": "Entrez un nom de package plugin.", + "skills.failed_load_active": "Échec du chargement des Plugins actifs.", + "skills.failed_load_opencode": "Échec du chargement de opencode.json", + "skills.failed_parse_opencode": "Échec de l'analyse de opencode.json", + "skills.failed_to_load": "Échec du chargement des Skills", + "skills.failed_update_opencode": "Échec de la mise à jour de opencode.json", + "skills.filter_all": "Tout", + "skills.filter_cloud": "Équipe", + "skills.filter_hub": "Hub", + "skills.filter_installed": "Installé", + "skills.from_repo": "Depuis {owner}/{repo}", + "skills.github_repo_hint": "Entrez un dépôt GitHub au format owner/repo.", + "skills.host_mode_only": "Espace de travail local uniquement", + "skills.host_only_error": "La gestion des Skills nécessite un espace de travail local ou un serveur OpenWork connecté.", + "skills.hub_desc": "Parcourez les Skills partagés depuis des hubs adossés à GitHub et ajoutez-les à ce worker.", + "skills.hub_label": "Hub", + "skills.import": "Importer", + "skills.import_failed": "Échec de l'import ({status})", + "skills.import_local": "Importer un Skill local", + "skills.import_local_hint": "Copiez un dossier de Skill existant dans cet espace de travail.", + "skills.import_local_skill": "Importer un Skill local", + "skills.imported": "Importé.", + "skills.install": "Installer", + "skills.install_failed": "Échec de l'installation du Skill.", + "skills.install_name_title": "Installer {name}", + "skills.install_skill_creator": "Installer le créateur de Skills", + "skills.install_skill_creator_hint": "Ce Skill vous permet de créer d'autres Skills depuis le chat.", + "skills.installed": "Skills installés", + "skills.installed_desc": "Les Skills installés vivent sur ce worker et peuvent être modifiés ou partagés.", + "skills.installed_label": "Installé", + "skills.installed_status": "Installé", + "skills.installing": "Ajouter un Skill", + "skills.installing_prefix": "Installation de {name}…", + "skills.installing_skill_creator": "Installation du créateur de Skills...", + "skills.link_copied": "Lien copié", + "skills.loading": "Chargement…", + "skills.no_description": "Aucune description pour le moment.", + "skills.no_hub_repo_label": "Aucun dépôt de hub sélectionné", + "skills.no_hub_repo_selected": "Aucun Skill de hub disponible.", + "skills.no_hub_skills": "Aucun dépôt de hub sélectionné. Ajoutez un dépôt GitHub pour parcourir les Skills.", + "skills.no_opencode_found": "Aucun opencode.json trouvé pour le moment. Ajoutez un plugin pour en créer un.", + "skills.no_opencode_workspace": "Aucun opencode.json dans cet espace de travail pour le moment.", + "skills.no_skills": "Aucun Skill détecté dans `.opencode/skills`, `.claude/skills` ou `~/.agents/skills`.", + "skills.no_skills_found": "Aucun Skill trouvé pour le moment.", + "skills.owner_label": "Propriétaire", + "skills.owner_repo_required": "Le propriétaire et le dépôt sont requis.", + "skills.pick_project_first": "Choisissez d'abord un dossier de projet.", + "skills.pick_project_for_active": "Choisissez un dossier de projet pour charger les Plugins actifs.", + "skills.pick_project_for_plugins": "Choisissez un dossier de projet pour gérer les Plugins du projet.", + "skills.pick_workspace_first": "Choisissez d'abord un dossier d'espace de travail.", + "skills.plugin_already_listed": "Le plugin est déjà listé dans opencode.json.", + "skills.plugin_management_host_only": "La gestion des Plugins nécessite l'application desktop.", + "skills.plugins_host_only": "Les Plugins ne sont disponibles que dans l'application desktop.", + "skills.ref_label": "Ref (branche/tag/commit)", + "skills.refresh": "Actualiser", + "skills.refresh_hub": "Actualiser le hub", + "skills.refresh_hub_title": "Actualiser le catalogue du hub", + "skills.remove_saved_repo": "Supprimer le dépôt enregistré", + "skills.repo_label": "Dépôt", + "skills.reveal_failed": "Échec de l'ouverture du dossier des Skills.", + "skills.reveal_folder": "Ouvrir le dossier des Skills", + "skills.reveal_folder_hint": "Ouvrir le répertoire des Skills dans le Finder.", + "skills.save_and_load": "Enregistrer et charger", + "skills.save_failed": "Échec de l'enregistrement du Skill.", + "skills.select_skill_folder": "Sélectionner le dossier du Skill", + "skills.share_back": "Retour", + "skills.share_chooser_subtitle": "Enregistrez dans votre organisation OpenWork Cloud ou publiez un lien d'installation public.", + "skills.share_close": "Fermer", + "skills.share_copy_link": "Copier", + "skills.share_done": "Terminé", + "skills.share_option_public_desc": "Créez un lien que tout le monde peut utiliser pour installer ce Skill.", + "skills.share_option_public_title": "Lien public", + "skills.share_option_team_desc": "Ajoutez ce Skill à votre organisation OpenWork Cloud active.", + "skills.share_option_team_title": "Partager avec l'équipe", + "skills.share_public_create": "Créer le lien", + "skills.share_public_creating": "Publication…", + "skills.share_public_intro": "Publiez un lien public. Toute personne disposant de l'URL peut installer ce Skill.", + "skills.share_public_regenerate": "Régénérer le lien", + "skills.share_publisher_label": "Éditeur", + "skills.share_subtitle_public": "Toute personne ayant le lien peut installer ce Skill.", + "skills.share_subtitle_team": "Stocké dans votre organisation pour les coéquipiers.", + "skills.share_team_choose_org": "Choisissez une organisation dans Paramètres → Cloud avant de partager avec votre équipe.", + "skills.share_team_permissions_intro": "Téléversez ce Skill dans votre organisation OpenWork Cloud active et décidez qui peut le voir.", + "skills.share_team_permissions_label": "Autorisations de partage", + "skills.share_team_permission_org": "Organisation uniquement - pas dans le hub", + "skills.share_team_permission_private": "Privé pour moi uniquement", + "skills.share_team_hub_label": "Ajouter au hub de Skills (optionnel)", + "skills.share_team_hub_none": "Organisation uniquement — pas dans un hub", + "skills.share_team_hubs_loading": "Chargement des hubs…", + "skills.share_team_intro": "Enregistrez ce Skill dans votre organisation active afin que les coéquipiers puissent l'installer depuis Cloud.", + "skills.share_team_org_fallback": "Organisation Cloud active", + "skills.share_team_save": "Enregistrer dans l'équipe", + "skills.share_team_saving": "Enregistrement…", + "skills.share_team_upload_and_save": "Téléverser et enregistrer", + "skills.share_team_uploading": "Téléversement…", + "skills.share_team_sign_in": "Connectez-vous pour partager avec l'équipe", + "skills.share_team_sign_in_hint": "OpenWork Cloud s'ouvre dans votre navigateur. Revenez ici après vous être connecté.", + "skills.share_team_success": "Enregistré dans {org}. Les coéquipiers peuvent l'installer depuis les Skills de votre organisation.", + "skills.share_team_uploaded_success": "Téléversé dans {org}. Les Skills cloud seront actualisés pour votre compte.", + "skills.share_title": "Partager le Skill", + "skills.shown_count": "{count} affichés", + "skills.skill_creator_already_installed": "Le créateur de Skills est déjà installé.", + "skills.skill_creator_installed": "Créateur de Skills installé.", + "skills.skill_load_failed": "Échec du chargement du Skill.", + "skills.source_label": "Source", + "skills.subtitle": "Gérez les Skills de cet espace de travail.", + "skills.title": "Skills", + "skills.trigger_label": "Déclencheur : {trigger}", + "skills.uninstall": "Désinstaller", + "skills.uninstall_failed": "Échec de la désinstallation du Skill.", + "skills.uninstall_title": "Désinstaller le Skill ?", + "skills.uninstall_warning": "Cela supprimera définitivement le Skill `{name}` de votre espace de travail.", + "skills.uninstalled": "Skill supprimé.", + "skills.unknown_error": "Erreur inconnue", + "skills.worker_profile_desc": "Les Skills sont les capacités centrales de ce worker. Découvrez-les via le Hub, gérez ce qui est installé et créez-en de nouveaux directement dans le chat.", + "status.back": "Retour à l'écran précédent", + "status.connected": "Connecté", + "status.connecting": "Connexion", + "status.creating_task": "Création d'une nouvelle tâche", + "status.creating_workspace": "Création de l'espace de travail", + "status.developer_mode": "Mode développeur", + "status.disconnected": "Déconnecté", + "status.disconnected_hint": "Ouvrez les paramètres pour vous reconnecter", + "status.disconnected_label": "Déconnecté", + "status.disconnecting": "Déconnexion", + "status.feedback": "Retour", + "status.idle": "Inactif", + "status.installing_opencode": "Installation d'OpenCode", + "status.limited_hint": "Reconnectez-vous pour restaurer toutes les fonctionnalités OpenWork", + "status.limited_mcp_hint": "{count} MCP connecté · reconnectez-vous pour toutes les fonctionnalités", + "status.limited_mode": "Mode limité", + "status.live": "En direct", + "status.loading_session": "Chargement de la session", + "status.mcp_connected": "{count} MCP connecté", + "status.openwork_ready": "OpenWork prêt", + "status.providers_connected": "{count} fournisseur{plural} connecté", + "status.ready_for_tasks": "Prêt pour de nouvelles tâches", + "status.reloading_engine": "Rechargement du moteur", + "status.restarting_engine": "Redémarrage du moteur", + "status.running": "En cours d'exécution", + "status.send_feedback": "Envoyer un retour", + "status.settings": "Paramètres", + "status.starting_engine": "Démarrage du moteur", + "system.cache_repair_requires_desktop": "La réparation du cache nécessite l'application desktop.", + "system.docker_cleanup_requires_desktop": "Le nettoyage Docker nécessite l'application desktop.", + "system.reload_body_agents": "OpenCode charge les agents au démarrage. Rechargez le moteur pour rendre les agents mis à jour disponibles.", + "system.reload_body_commands": "OpenCode charge les Commands au démarrage. Rechargez le moteur pour rendre les Commands mis à jour disponibles.", + "system.reload_body_config": "OpenCode lit opencode.json au démarrage. Rechargez le moteur pour appliquer les changements de configuration.", + "system.reload_body_default": "OpenWork a détecté des changements qui nécessitent le rechargement de l'instance OpenCode.", + "system.reload_body_mcp": "OpenCode charge les serveurs MCP au démarrage. Rechargez le moteur pour activer la nouvelle connexion.", + "system.reload_body_mixed": "OpenWork a détecté des changements de configuration OpenCode. Rechargez le moteur pour les appliquer.", + "system.reload_body_plugins": "OpenCode charge les plugins npm au démarrage. Rechargez le moteur pour appliquer les changements de opencode.json.", + "system.reload_body_skills": "OpenCode peut mettre en cache la découverte/l'état des Skills. Rechargez le moteur pour rendre les Skills nouvellement installés disponibles.", + "system.reload_failed": "Échec du rechargement du moteur.", + "system.reload_required": "Rechargement requis", + "system.reload_unavailable": "Le rechargement n'est pas disponible pour ce worker.", + "system.stop_active_runs_before_reset": "Arrêtez les exécutions actives avant de réinitialiser.", + "system.stop_runs_before_update": "Arrêtez les exécutions actives avant d'installer une mise à jour.", + "system.updates_not_supported": "Les mises à jour ne sont pas prises en charge dans cet environnement.", + "time.hours_ago": "il y a {count} h", + "time.just_now": "à l'instant", + "time.minutes_ago": "il y a {count} min", + "time.seconds_ago": "il y a {count} s", + "workspace.loading_tasks": "Chargement des tâches...", + "workspace.local_badge": "Local", + "workspace.new_task_inline": "+ Nouvelle tâche", + "workspace.no_tasks": "Aucune tâche pour le moment.", + "workspace.remote_badge": "Distant", + "workspace.rename_description": "Mettez à jour le nom affiché dans la barre latérale.", + "workspace.rename_label": "Nom de l'espace de travail", + "workspace.rename_placeholder": "Espace de travail de l'équipe design", + "workspace.rename_title": "Modifier le nom de l'espace de travail", + "workspace.sandbox_badge": "Sandbox", + "workspace.selected": "Sélectionné", + "workspace.switch": "Basculer", + "workspace.switching_status_connecting": "Vérification de votre connexion", + "workspace.switching_status_loading": "Chargement des tâches récentes", + "workspace.switching_status_preparing": "Préparation en cours", + "workspace.switching_subtitle": "Nous allons restaurer votre travail récent.", + "workspace.switching_title": "Ouverture de {name}", + "workspace.switching_title_unknown": "Ouverture de l'espace de travail", + "workspace_list.add_workspace": "Ajouter un espace de travail", + "workspace_list.connect_remote": "Connecter un espace de travail distant", + "workspace_list.connecting": "Connexion...", + "workspace_list.delete_session": "Supprimer la session", + "workspace_list.desktop_only_hint": "Créez des espaces de travail locaux dans l'application desktop.", + "workspace_list.edit_connection": "Modifier la connexion", + "workspace_list.edit_name": "Modifier le nom", + "workspace_list.hide_child_sessions": "Masquer les sessions enfants", + "workspace_list.import_config": "Importer la configuration", + "workspace_list.new_workspace": "Nouvel espace de travail", + "workspace_list.recover": "Récupérer", + "workspace_list.remove_workspace": "Supprimer l'espace de travail", + "workspace_list.rename_session": "Renommer la session", + "workspace_list.reveal_explorer": "Révéler dans l'Explorateur", + "workspace_list.reveal_finder": "Révéler dans le Finder", + "workspace_list.session_actions": "Actions de session", + "workspace_list.share": "Partager...", + "workspace_list.show_child_sessions": "Afficher les sessions enfants", + "workspace_list.show_more": "Afficher {count} de plus", + "workspace_list.show_more_fallback": "Afficher plus", + "workspace_list.test_connection": "Tester la connexion", + "workspace_list.workspace_fallback": "Espace de travail", + "workspace_list.workspace_options": "Options de l'espace de travail", + "workspace_sidebar.automations": "Automatisations", + "workspace_sidebar.close_sidebar": "Fermer la barre latérale", + "workspace_sidebar.collapse_sidebar": "Réduire la barre latérale", + "workspace_sidebar.configuration": "configuration", + "workspace_sidebar.expand_sidebar": "Développer la barre latérale", + "workspace_sidebar.extensions": "Extensions", + "workspace_sidebar.messaging": "Messagerie", +} as const; diff --git a/apps/app/src/i18n/locales/index.ts b/apps/app/src/i18n/locales/index.ts index 394728a7..6b51f570 100644 --- a/apps/app/src/i18n/locales/index.ts +++ b/apps/app/src/i18n/locales/index.ts @@ -6,3 +6,4 @@ export { default as ja } from "./ja"; export { default as zh } from "./zh"; export { default as vi } from "./vi"; export { default as ptBR } from "./pt-BR"; +export { default as fr } from "./fr"; diff --git a/scripts/i18n-audit.mjs b/scripts/i18n-audit.mjs index 2909b2b0..2b8e2561 100644 --- a/scripts/i18n-audit.mjs +++ b/scripts/i18n-audit.mjs @@ -25,7 +25,7 @@ const REPO_ROOT = resolve(__dirname, ".."); const LOCALES_DIR = join(REPO_ROOT, "apps/app/src/i18n/locales"); const APP_SRC = join(REPO_ROOT, "apps/app/src"); -const LOCALES = ["ja", "zh", "vi", "pt-BR", "th"]; +const LOCALES = ["ja", "zh", "vi", "pt-BR", "th", "fr"]; const EN_FILE = join(LOCALES_DIR, "en.ts"); const mode = process.argv[2] ?? "--all";