mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-20 06:02:14 +03:00
fix(i18n): complete French UI catalog (#9235)
Validated in local merge-train (devbox-vm-06-dev002) @ combined-tip (FAST gates: typecheck/complexity/cognitive/changelog/vitest — only pre-existing audit.test.ts flake). Evidence: /home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/merge-train-20260805-222248-suite.log
This commit is contained in:
1
changelog.d/fixes/9235-french-ui-catalog.md
Normal file
1
changelog.d/fixes/9235-french-ui-catalog.md
Normal file
@@ -0,0 +1 @@
|
||||
- **fix(i18n):** completed the French UI catalog by adding all missing keys and replacing every placeholder translation ([#9235](https://github.com/diegosouzapw/OmniRoute/pull/9235)) — thanks @alex-jordan547
|
||||
@@ -937,7 +937,7 @@
|
||||
"disabled": "Désactivé",
|
||||
"featureFlagOmnirouteEmergencyFallbackDescription": "Router les requêtes ayant épuisé leur budget vers le fournisseur/modèle de secours gratuit d'urgence.",
|
||||
"featureFlagArenaEloSyncEnabledDescription": "Activer la synchronisation périodique de l'ELO du classement Arena AI pour les classements d'intelligence des modèles.",
|
||||
"featureFlagExposeCcDiscoveryAliasesDescription": "__MISSING__:Advertise claude/<provider>/<model> mirror ids on /v1/models so Claude Code gateway model discovery lists non-Claude models. Warning: doubles catalog entries for all clients when enabled globally.",
|
||||
"featureFlagExposeCcDiscoveryAliasesDescription": "Afficher les identifiants miroir claude/<provider>/<model> dans /v1/models afin que la découverte de modèles de la passerelle Claude Code répertorie les modèles non-Claude. Attention : cette option double les entrées du catalogue pour tous les clients lorsqu'elle est activée globalement.",
|
||||
"sidebar": {
|
||||
"home": "Accueil",
|
||||
"dashboard": "Tableau de bord",
|
||||
@@ -1055,7 +1055,7 @@
|
||||
"combosLive": "Combo Studio",
|
||||
"combosLiveSubtitle": "Cascade de routage en direct",
|
||||
"compressionStudio": "Compression Studio",
|
||||
"compressionExclusions": "__MISSING__:Exclusions",
|
||||
"compressionExclusions": "Exclusions",
|
||||
"contextSettingsSubtitle": "Valeurs par défaut globales",
|
||||
"contextHeadroomSubtitle": "Compactage tabulaire",
|
||||
"contextSessionDedupSubtitle": "Déduplication inter-tours",
|
||||
@@ -1066,7 +1066,7 @@
|
||||
"contextUltraSubtitle": "Élagage heuristique",
|
||||
"contextOmniglyphSubtitle": "Contexte sous forme d'images",
|
||||
"compressionStudioSubtitle": "Cascade de moteurs en direct",
|
||||
"compressionExclusionsSubtitle": "__MISSING__:Per-model/endpoint bypass",
|
||||
"compressionExclusionsSubtitle": "Contournement par modèle ou point de terminaison",
|
||||
"chaosConfigSubtitle": "Exécution parallèle multi-modèles",
|
||||
"routingSection": "Routing",
|
||||
"protocolsSection": "Protocols",
|
||||
@@ -1107,7 +1107,7 @@
|
||||
"settingsSecurity": "Security",
|
||||
"settingsAccessTokens": "Jetons d'accès",
|
||||
"settingsFeatureFlags": "Indicateurs de fonctionnalités",
|
||||
"settingsCache": "__MISSING__:Cache",
|
||||
"settingsCache": "Cache",
|
||||
"settingsAuthz": "Authz",
|
||||
"settingsRouting": "Routing",
|
||||
"settingsResilience": "Resilience",
|
||||
@@ -1119,7 +1119,7 @@
|
||||
"runtime": "Runtime",
|
||||
"consoleLogs": "Console Logs",
|
||||
"logsTimeline": "Timeline",
|
||||
"logsTimelineSubtitle": "__MISSING__:Visual request timeline",
|
||||
"logsTimelineSubtitle": "Chronologie visuelle des requêtes",
|
||||
"globalRouting": "Global Routing",
|
||||
"mitmProxy": "MITM Proxy",
|
||||
"oneProxy": "1Proxy",
|
||||
@@ -1194,7 +1194,7 @@
|
||||
"settingsSecuritySubtitle": "Auth and encryption",
|
||||
"settingsAccessTokensSubtitle": "Jetons CLI restreints pour le mode distant",
|
||||
"settingsFeatureFlagsSubtitle": "Basculer les capacités du système",
|
||||
"settingsCacheSubtitle": "__MISSING__:Model catalog and response caching",
|
||||
"settingsCacheSubtitle": "Mise en cache du catalogue de modèles et des réponses",
|
||||
"settingsSidebar": "Sidebar",
|
||||
"settingsSidebarSubtitle": "Customize sidebar layout",
|
||||
"settingsAuthzSubtitle": "Inventaire des routes et politique de contournement",
|
||||
@@ -1557,7 +1557,7 @@
|
||||
"settingsGeneralDescription": "Storage, database, and general instance configuration",
|
||||
"settingsAppearanceDescription": "Theme, branding, and visual customization",
|
||||
"settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings",
|
||||
"settingsCacheDescription": "__MISSING__:TTL for model catalog cache entries",
|
||||
"settingsCacheDescription": "Durée de vie (TTL) des entrées du cache du catalogue de modèles",
|
||||
"settingsSecurityDescription": "Authentication, authorization, and access control settings",
|
||||
"featureFlags": "Indicateurs de fonctionnalités",
|
||||
"featureFlagsDescription": "Capacités du système de contrôle et fonctionnalités expérimentales",
|
||||
@@ -2912,6 +2912,28 @@
|
||||
"hermesRoleSkillsHubDesc": "Raisonnement sur les compétences et l'utilisation d'outils",
|
||||
"hermesRoleApproval": "Approbation",
|
||||
"hermesRoleApprovalDesc": "Décisions de sécurité et d'approbation",
|
||||
"hermesRoleMcp": "MCP",
|
||||
"hermesRoleMcpDesc": "Appels d'outils du serveur MCP",
|
||||
"hermesRoleTitleGeneration": "Génération de titres",
|
||||
"hermesRoleTitleGenerationDesc": "Génération du titre de session",
|
||||
"hermesRoleMemoryQueryRewrite": "Réécriture des requêtes mémoire",
|
||||
"hermesRoleMemoryQueryRewriteDesc": "Réécriture des requêtes de recherche en mémoire",
|
||||
"hermesRoleTtsAudioTags": "Balises audio TTS",
|
||||
"hermesRoleTtsAudioTagsDesc": "Génération de balises audio TTS",
|
||||
"hermesRoleTriageSpecifier": "Définition du triage",
|
||||
"hermesRoleTriageSpecifierDesc": "Définition du triage des tickets et des PR",
|
||||
"hermesRoleKanbanDecomposer": "Décomposition Kanban",
|
||||
"hermesRoleKanbanDecomposerDesc": "Décomposition des tâches Kanban",
|
||||
"hermesRoleProfileDescriber": "Description de profil",
|
||||
"hermesRoleProfileDescriberDesc": "Description du profil utilisateur",
|
||||
"hermesRoleGoalJudge": "Évaluation des objectifs",
|
||||
"hermesRoleGoalJudgeDesc": "Évaluation de l'achèvement des objectifs",
|
||||
"hermesRoleCurator": "Curation",
|
||||
"hermesRoleCuratorDesc": "Curation des compétences et de la mémoire",
|
||||
"hermesRoleMonitor": "Surveillance",
|
||||
"hermesRoleMonitorDesc": "Surveillance en arrière-plan",
|
||||
"hermesRoleBackgroundReview": "Revue en arrière-plan",
|
||||
"hermesRoleBackgroundReviewDesc": "Revue de code en arrière-plan",
|
||||
"hermesSelectBeforePreview": "Sélectionnez des modèles pour les rôles, ou assurez-vous que les rôles sont chargés, avant de prévisualiser.",
|
||||
"hermesPreviewFailed": "Échec de la génération de l'aperçu",
|
||||
"hermesSavedTo": "Enregistré dans {path}",
|
||||
@@ -2946,14 +2968,14 @@
|
||||
"copilotReloadInstruction": "Rechargez ensuite VS Code et définissez la clé API dans l'invite de saisie.",
|
||||
"wireApiChatCompletions": "Achèvements de chat (/chat/completions)",
|
||||
"wireApiResponses": "API de réponses (/réponses)",
|
||||
"ccDiscoveryInfoButton": "__MISSING__:How to enable discovery in Claude Code",
|
||||
"ccDiscoveryInfoTooltip": "__MISSING__:Advertise non-Claude models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Doubles catalog entries for all clients when enabled globally.",
|
||||
"ccDiscoveryInfoLink": "__MISSING__:Open Feature Flags",
|
||||
"ccOnboardingTitle": "__MISSING__:settings.json for gateway model discovery",
|
||||
"ccOnboardingCopy": "__MISSING__:Copy",
|
||||
"ccOnboardingCopied": "__MISSING__:Copied",
|
||||
"ccOnboardingKeyPlaceholder": "__MISSING__:<your OmniRoute API key>",
|
||||
"ccOnboardingWindowNote": "__MISSING__:Claude Code assumes a 200K context window for any model id it does not recognize. For a model with a different real window, add CLAUDE_CODE_AUTO_COMPACT_WINDOW just under it so auto-compaction does not fire too early."
|
||||
"ccDiscoveryInfoButton": "Comment activer la découverte dans Claude Code",
|
||||
"ccDiscoveryInfoTooltip": "Afficher les modèles non-Claude sous forme d'identifiants miroir claude/<provider>/<model> afin que la découverte de modèles de la passerelle Claude Code puisse les répertorier. Cette option double les entrées du catalogue pour tous les clients lorsqu'elle est activée globalement.",
|
||||
"ccDiscoveryInfoLink": "Ouvrir les indicateurs de fonctionnalités",
|
||||
"ccOnboardingTitle": "settings.json pour la découverte des modèles de la passerelle",
|
||||
"ccOnboardingCopy": "Copier",
|
||||
"ccOnboardingCopied": "Copié",
|
||||
"ccOnboardingKeyPlaceholder": "<votre clé API OmniRoute>",
|
||||
"ccOnboardingWindowNote": "Claude Code suppose une fenêtre de contexte de 200K pour tout identifiant de modèle qu'il ne reconnaît pas. Pour un modèle dont la fenêtre réelle est différente, ajoutez CLAUDE_CODE_AUTO_COMPACT_WINDOW juste en dessous afin que le compactage automatique ne se déclenche pas trop tôt."
|
||||
},
|
||||
"combos": {
|
||||
"title": "Combinaisons",
|
||||
@@ -3704,7 +3726,7 @@
|
||||
"modelsCount": "{count, plural, one {# model} other {# models}}",
|
||||
"sectionTitle": "Surface d'intégration",
|
||||
"sectionDescription": "API compatibles OpenAI et points de terminaison du protocole opérationnel",
|
||||
"tabApis": "__MISSING__:APIs",
|
||||
"tabApis": "API",
|
||||
"tabProtocols": "Protocoles",
|
||||
"tabsAria": "Sections de point de terminaison",
|
||||
"protocolsTitle": "Protocoles",
|
||||
@@ -5411,8 +5433,8 @@
|
||||
"t3ChatWebCookieHint": "Ouvrez t3.chat → DevTools → Application → Stockage local → https://t3.chat, copiez 'convex-session-id'. Ensuite, ouvrez DevTools → Réseau, copiez l'en-tête complet du cookie de toute demande de chat. Collez les deux valeurs dans les champs ci-dessous.",
|
||||
"t3ChatWebCookiePlaceholder": "convex-session-id=abc123...",
|
||||
"grokWebCookieHint": "Grok Web Cookie Hint",
|
||||
"blockClaudeExtraUsageDescription": "__MISSING__:When enabled, OmniRoute marks this Claude connection unavailable as soon as the usage API reports queued extra usage, so fallback switches to another connection instead of continuing on pay-as-you-go extra billing.",
|
||||
"blockClaudeExtraUsageLabel": "__MISSING__:Block extra Claude usage",
|
||||
"blockClaudeExtraUsageDescription": "Lorsqu'elle est activée, OmniRoute marque cette connexion Claude comme indisponible dès que l'API d'utilisation signale une consommation supplémentaire en attente. Le mécanisme de secours bascule alors vers une autre connexion au lieu de poursuivre avec une facturation supplémentaire à l'usage.",
|
||||
"blockClaudeExtraUsageLabel": "Bloquer l'utilisation supplémentaire de Claude",
|
||||
"disableCoolingDescription": "Ignorer le délai de récupération temporaire pour que cette connexion reste éligible même après des erreurs récupérables (les états terminaux comme banni/expiré s'appliquent toujours).",
|
||||
"disableCoolingLabel": "Désactiver le délai de récupération pour cette connexion",
|
||||
"bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}",
|
||||
@@ -5591,13 +5613,13 @@
|
||||
"importGrokAuth": "Importer l'authentification Grok Build",
|
||||
"zedImportTitle": "Importer depuis le trousseau Zed",
|
||||
"zedImportDescription": "Détectez les identifiants de fournisseurs d'IA (OpenAI, Anthropic, Google, Mistral, xAI) stockés par Zed IDE dans le trousseau d'accès du système d'exploitation et importez-les en tant que connexions. Zed IDE doit être installé sur cette machine.",
|
||||
"zedImportButton": "__MISSING__:Import from Zed",
|
||||
"zedImportFailed": "__MISSING__:Zed import failed",
|
||||
"zedImportButton": "Importer depuis Zed",
|
||||
"zedImportFailed": "Échec de l'importation depuis Zed",
|
||||
"zedImportHint": "Zed Import Hint",
|
||||
"zedImportNetworkError": "Zed Import Network Error",
|
||||
"zedImportNone": "Zed Import None",
|
||||
"zedImportSuccess": "__MISSING__:Imported {credentials} credential(s) from Zed for {providers} provider(s)",
|
||||
"zedImporting": "__MISSING__:Importing…",
|
||||
"zedImportSuccess": "{credentials} identifiant(s) importé(s) depuis Zed pour {providers} fournisseur(s)",
|
||||
"zedImporting": "Importation…",
|
||||
"zedNoCredentials": "Aucun identifiant Zed trouvé dans le trousseau d'accès",
|
||||
"zedUnsupportedCredentials": "Trouvé {count} identifiant(s) dans le trousseau d'accès, mais aucun ne correspond aux fournisseurs pris en charge",
|
||||
"zedManualTitle": "Importation manuelle de jeton",
|
||||
@@ -5743,7 +5765,7 @@
|
||||
"bailian-coding-plan": "Connectez Alibaba Coding Plan avec une clé API.",
|
||||
"bedrock": "Intégration native Bedrock : la découverte de modèles utilise les modèles de fondation et les profils d'inférence Bedrock, tandis que le chat utilise les API régionales Bedrock Runtime Converse/ConverseStream.",
|
||||
"anthropic": "Connectez Anthropic avec une clé API.",
|
||||
"ant-ling": "__MISSING__:Register and create an API key at the Ant Ling API console (https://chat.ant-ling.com/open), then paste it here. OmniRoute routes chat traffic to https://api.ant-ling.com/v1/chat/completions; the provider is OpenAI-compatible and also exposes an Anthropic-compatible surface.",
|
||||
"ant-ling": "Inscrivez-vous et créez une clé API dans la console API d'Ant Ling (https://chat.ant-ling.com/open), puis collez-la ici. OmniRoute achemine le trafic de chat vers https://api.ant-ling.com/v1/chat/completions ; le fournisseur est compatible avec OpenAI et expose également une interface compatible avec Anthropic.",
|
||||
"api-airforce": "Obtenez votre clé API sur https://panel.api.airforce — point de terminaison compatible OpenAI sur https://api.airforce/v1",
|
||||
"arcee-ai": "Obtenez une clé API sur arcee.ai",
|
||||
"azure-ai": "Foundry utilise la surface OpenAI v1 avec les noms de déploiement comme modèles. OmniRoute normalise les URL des ressources racines vers les points de terminaison v1 chat et /models.",
|
||||
@@ -5764,7 +5786,7 @@
|
||||
"chutes": "Clé API Bearer pour la passerelle compatible OpenAI de Chutes.",
|
||||
"clarifai": "Clarifai expose un chat, des réponses et /models compatibles avec OpenAI sur /v2/ext/openai/v1. Les modèles publics/communautaires nécessitent généralement un PAT ; les clés limitées à l'application ne fonctionnent que pour les ressources au sein de cette application.",
|
||||
"cloudflare-ai": "Nécessite un jeton API ET un ID de compte (disponible sur dash.cloudflare.com)",
|
||||
"clova-studio": "__MISSING__:CLOVA Studio (HyperCLOVA X) is OpenAI-compatible on /v1/openai. OmniRoute probes /v1/openai/models and routes chat traffic to /v1/openai/chat/completions. Uses the current clovastudio.stream.ntruss.com host — the legacy clovastudio.apigw.ntruss.com endpoint is being deprecated.",
|
||||
"clova-studio": "CLOVA Studio (HyperCLOVA X) est compatible avec OpenAI sur /v1/openai. OmniRoute interroge /v1/openai/models et achemine le trafic de chat vers /v1/openai/chat/completions. Il utilise l'hôte actuel clovastudio.stream.ntruss.com ; l'ancien point de terminaison clovastudio.apigw.ntruss.com est en cours d'abandon.",
|
||||
"codestral": "Connectez Codestral avec une clé API.",
|
||||
"cohere": "Essai gratuit : 1 000 appels API/mois pour les tests, aucune carte de crédit requise",
|
||||
"command-code": "Créez ou copiez une clé API depuis Command Code, puis collez-la ici en tant que jeton Bearer.",
|
||||
@@ -5809,9 +5831,9 @@
|
||||
"watsonx": "La passerelle de modèles watsonx expose des points de terminaison /chat/completions et /models compatibles OpenAI sous /ml/gateway/v1.",
|
||||
"ideogram": "Obtenir une clé API sur ideogram.ai/docs/api",
|
||||
"iflytek": "Obtenir une clé API sur console.xfyun.cn",
|
||||
"inception": "__MISSING__:Inception Labs is OpenAI-compatible at https://api.inceptionlabs.ai/v1. mercury-2 is the first diffusion LLM (dLLM) in the catalog — 5-10x faster generation than comparable autoregressive models, with tool calling, json_mode, and structured outputs.",
|
||||
"inception": "Inception Labs est compatible avec OpenAI à l'adresse https://api.inceptionlabs.ai/v1. mercury-2 est le premier LLM à diffusion (dLLM) du catalogue : sa génération est 5 à 10 fois plus rapide que celle de modèles autorégressifs comparables, avec prise en charge des appels d'outils, de json_mode et des sorties structurées.",
|
||||
"inference-net": "25 $ de crédits gratuits à l'inscription, plus des subventions de recherche disponibles",
|
||||
"internlm": "__MISSING__:Free monthly quota ~1M input / 3M output tokens (~10 RPM)",
|
||||
"internlm": "Quota mensuel gratuit : environ 1 M de tokens en entrée / 3 M en sortie (environ 10 RPM)",
|
||||
"jina-ai": "Clé API Bearer pour l'API de reranking Jina AI.",
|
||||
"jina-reader": "Connecter Jina Reader avec une clé API.",
|
||||
"kenari": "Kenari expose un point de terminaison de complétion de chat compatible OpenAI sur https://kenari.id/v1/chat/completions, ainsi qu'un catalogue /v1/models en direct couvrant Claude, GPT, DeepSeek, GLM, Kimi et plus encore. OmniRoute utilise le protocole OpenAI et liste les modèles via passthrough.",
|
||||
@@ -5858,7 +5880,7 @@
|
||||
"perplexity": "Connecter Perplexity avec une clé API.",
|
||||
"piapi": "Connecter PiAPI avec une clé API.",
|
||||
"pioneer": "75 $ de crédits d'utilisation gratuits — aucune carte de crédit requise",
|
||||
"plamo": "__MISSING__:PLaMo is OpenAI-compatible at https://api.platform.preferredai.jp/v1. Built by Preferred Networks and optimized for Japanese. Docs are primarily in Japanese.",
|
||||
"plamo": "PLaMo est compatible avec OpenAI à l'adresse https://api.platform.preferredai.jp/v1. Développé par Preferred Networks, il est optimisé pour le japonais. La documentation est principalement en japonais.",
|
||||
"poe": "Poe expose un chat et des réponses compatibles avec OpenAI sur https://api.poe.com/v1, avec des vérifications de solde authentifiées sur /usage/current_balance.",
|
||||
"pollinations": "Niveau gratuit sans clé : openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Les modèles Premium (claude, gemini, midijourney) nécessitent une clé API Pollinations provenant de enter.pollinations.ai.",
|
||||
"publicai": "Nécessite une clé API — crédit d'inscription unique, puis payant",
|
||||
@@ -5870,7 +5892,7 @@
|
||||
"runwayml": "La génération de vidéos Runway est basée sur des tâches. OmniRoute soumet des tâches text-to-video ou image-to-video, interroge /v1/tasks/[id] et normalise les sorties vidéo terminées dans la réponse de type OpenAI /v1/videos/generations.",
|
||||
"sambanova": "5 $ de crédits gratuits à l'inscription (validité de 30 jours), aucune carte de crédit requise",
|
||||
"sap": "La découverte de modèles utilise /v2/lm/scenarios/foundation-models/models sur AI_API_URL. Les requêtes de chat utilisent deploymentUrl/chat/completions et nécessitent AI-Resource-Group.",
|
||||
"sarvam": "__MISSING__:Sarvam AI is OpenAI-compatible on /v1. OmniRoute probes /v1/models and routes chat traffic to /v1/chat/completions. Models are tuned for Indic languages.",
|
||||
"sarvam": "Sarvam AI est compatible avec OpenAI sur /v1. OmniRoute interroge /v1/models et achemine le trafic de chat vers /v1/chat/completions. Les modèles sont optimisés pour les langues indiennes.",
|
||||
"scaleway": "1M de tokens gratuits pour les nouveaux comptes — conforme UE/RGPD (Paris), Qwen3 235B & Llama 70B",
|
||||
"sensenova": "Obtenez la clé API sur platform.sensenova.cn",
|
||||
"siliconflow": "1 $ de crédits gratuits plus des modèles gratuits en permanence après vérification de l'identité",
|
||||
@@ -5887,7 +5909,7 @@
|
||||
"together": "Connecter Together AI avec une clé API.",
|
||||
"tokenrouter": "TokenRouter expose un point de terminaison de complétion de chat compatible avec OpenAI à l'adresse https://api.tokenrouter.com/v1/chat/completions, ainsi qu'un catalogue /v1/models fonctionnel. OmniRoute utilise le protocole OpenAI.",
|
||||
"topaz": "Connecter Topaz avec une clé API.",
|
||||
"typhoon": "__MISSING__:Typhoon is OpenAI-compatible on /v1. Built by SCB 10X (Thailand); typhoon-v2.5-30b-a3b-instruct is a thai-first, multilingual model.",
|
||||
"typhoon": "Typhoon est compatible avec OpenAI sur /v1. Développé par SCB 10X (Thaïlande), typhoon-v2.5-30b-a3b-instruct est un modèle multilingue conçu en priorité pour le thaï.",
|
||||
"udio": "Coller le cookie de session depuis udio.com (authentification Supabase)",
|
||||
"uncloseai": "Aucune authentification requise. L'API accepte n'importe quelle chaîne non vide comme clé d'identification.",
|
||||
"upstage": "Connecter Upstage avec une clé API.",
|
||||
@@ -5900,7 +5922,7 @@
|
||||
"voyage-ai": "Clé API Bearer pour les API d'embeddings et de rerank de Voyage AI.",
|
||||
"wafer": "Clé API depuis https://wafer.ai",
|
||||
"wandb": "Connecter Weights & Biases Inference avec une clé API.",
|
||||
"writer": "__MISSING__:Writer Palmyra is OpenAI-compatible at https://api.writer.com/v1. palmyra-x5 offers a 1M-token context window.",
|
||||
"writer": "Writer Palmyra est compatible avec OpenAI à l'adresse https://api.writer.com/v1. palmyra-x5 offre une fenêtre de contexte de 1 M de tokens.",
|
||||
"x5lab": "X5Lab expose un point de terminaison de complétion de chat compatible OpenAI à l'adresse https://api.x5lab.dev/v1/chat/completions, ainsi qu'un catalogue /v1/models en direct. OmniRoute utilise le protocole OpenAI et liste les modèles via passthrough.",
|
||||
"xai": "Connecter xAI (Grok) avec une clé API.",
|
||||
"xiaomi-mimo": "Connecter Xiaomi MiMo avec une clé API.",
|
||||
@@ -5981,18 +6003,21 @@
|
||||
"cheaperInferenceSupporterBadge": "Ami open source",
|
||||
"cheaperInferenceSupporterTooltip": "Cheaper Inference soutient OmniRoute en tant qu'ami open source",
|
||||
"kimiPartnerLinkNote": "Lien partenaire — soutient OmniRoute sans frais supplémentaires pour vous",
|
||||
"ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)",
|
||||
"ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.",
|
||||
"ccAliasProviderLevelLabel": "__MISSING__:Provider default",
|
||||
"ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides",
|
||||
"ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}",
|
||||
"ccAliasStateInherit": "__MISSING__:Inherit",
|
||||
"ccAliasStateOn": "__MISSING__:On",
|
||||
"ccAliasStateOff": "__MISSING__:Off",
|
||||
"ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)",
|
||||
"ccAliasAddModelButton": "__MISSING__:Add override",
|
||||
"ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}",
|
||||
"ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}"
|
||||
"ccAliasSectionTitle": "Exposer dans Claude Code (claude/…)",
|
||||
"ccAliasSectionHint": "Afficher les modèles de ce fournisseur sous forme d'identifiants miroir claude/<provider>/<model> afin que la découverte de modèles de la passerelle Claude Code puisse les répertorier. Cette option est désactivée par défaut ; son activation double les entrées du catalogue pour tous les clients.",
|
||||
"ccAliasProviderLevelLabel": "Valeur par défaut du fournisseur",
|
||||
"ccAliasModelOverridesLabel": "Surcharges par modèle",
|
||||
"ccAliasModelOverrideAriaLabel": "Surcharge pour {modelId}",
|
||||
"ccAliasStateInherit": "Hériter",
|
||||
"ccAliasStateOn": "Activé",
|
||||
"ccAliasStateOff": "Désactivé",
|
||||
"ccAliasAddModelPlaceholder": "ID du modèle (par ex. gpt-4o)",
|
||||
"ccAliasAddModelButton": "Ajouter une surcharge",
|
||||
"ccAliasLoadError": "Échec du chargement des paramètres d'alias de découverte : {error}",
|
||||
"ccAliasSaveError": "Échec de l'enregistrement du paramètre d'alias de découverte : {error}",
|
||||
"apiProtocolLabel": "Protocole API",
|
||||
"apiProtocolDefault": "Compatible avec OpenAI (par défaut)",
|
||||
"apiProtocolHint": "Certains fournisseurs publient les mêmes modèles via plusieurs protocoles. Conservez la valeur par défaut sauf si vous avez besoin de l'alternative."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres",
|
||||
@@ -6087,18 +6112,18 @@
|
||||
"requestBodyLimitSaving": "Saving...",
|
||||
"requestBodyLimitSave": "Save",
|
||||
"requestBodyLimitCurrent": "Current: {value}",
|
||||
"cacheConfigLoadFailed": "__MISSING__:Failed to load cache settings",
|
||||
"cacheConfigSaveSuccess": "__MISSING__:Cache settings saved",
|
||||
"cacheConfigSaveFailed": "__MISSING__:Failed to save cache settings",
|
||||
"modelCatalogTtlWholeNumberError": "__MISSING__:Use a whole number",
|
||||
"modelCatalogTtlMinimumError": "__MISSING__:Minimum is {min} ms",
|
||||
"modelCatalogTtlMaximumError": "__MISSING__:Maximum is {max} ms",
|
||||
"modelCatalogCacheTtl": "__MISSING__:Model Catalog Cache TTL",
|
||||
"modelCatalogCacheTtlDescription": "__MISSING__:How long model catalog responses are cached before refreshing",
|
||||
"modelCatalogCacheTtlLabel": "__MISSING__:Model catalog cache TTL in milliseconds",
|
||||
"modelCatalogCacheTtlSaving": "__MISSING__:Saving...",
|
||||
"modelCatalogCacheTtlSave": "__MISSING__:Save",
|
||||
"modelCatalogCacheTtlCurrent": "__MISSING__:Current: {value} ms",
|
||||
"cacheConfigLoadFailed": "Échec du chargement des paramètres du cache",
|
||||
"cacheConfigSaveSuccess": "Paramètres du cache enregistrés",
|
||||
"cacheConfigSaveFailed": "Échec de l'enregistrement des paramètres du cache",
|
||||
"modelCatalogTtlWholeNumberError": "Utilisez un nombre entier",
|
||||
"modelCatalogTtlMinimumError": "Le minimum est de {min} ms",
|
||||
"modelCatalogTtlMaximumError": "Le maximum est de {max} ms",
|
||||
"modelCatalogCacheTtl": "TTL du cache du catalogue de modèles",
|
||||
"modelCatalogCacheTtlDescription": "Durée de mise en cache des réponses du catalogue de modèles avant actualisation",
|
||||
"modelCatalogCacheTtlLabel": "TTL du cache du catalogue de modèles en millisecondes",
|
||||
"modelCatalogCacheTtlSaving": "Enregistrement...",
|
||||
"modelCatalogCacheTtlSave": "Enregistrer",
|
||||
"modelCatalogCacheTtlCurrent": "Valeur actuelle : {value} ms",
|
||||
"mitmProxy": "Proxy MITM",
|
||||
"pricing": "Tarifs",
|
||||
"storage": "Stockage",
|
||||
@@ -6752,7 +6777,7 @@
|
||||
"howPricingWorks": "Comment fonctionne la tarification",
|
||||
"cacheWrite": "Écriture du cache",
|
||||
"unsaved": "non enregistré",
|
||||
"resetDefaults": "__MISSING__:Reset defaults",
|
||||
"resetDefaults": "Rétablir les valeurs par défaut",
|
||||
"saveProvider": "Enregistrer le fournisseur",
|
||||
"model": "Modèle",
|
||||
"models": "modèles",
|
||||
@@ -6932,13 +6957,13 @@
|
||||
"compressionPreserveSystemNever": "Jamais",
|
||||
"compressionLiveZoneTitle": "Zone active alignée sur le cache",
|
||||
"compressionLiveZoneDesc": "Maintenir stable le préfixe de conversation compressé et traiter uniquement les nouveaux éléments ajoutés.",
|
||||
"compressionExclusionsTitle": "__MISSING__:Compression Exclusions",
|
||||
"compressionExclusionsDesc": "__MISSING__:Model ids or provider/model patterns that must never be compressed. `*` is the only wildcard (e.g. `openai/*`, `*embedding*`). A matching request passes through byte-identical — no compression engine runs.",
|
||||
"compressionExclusionsPlaceholder": "__MISSING__:One pattern per line, e.g.\nopenai/text-embedding-3-large\nanthropic/*",
|
||||
"compressionExclusionsSave": "__MISSING__:Save",
|
||||
"compressionExclusionsSaved": "__MISSING__:Saved",
|
||||
"compressionExclusionsCount": "__MISSING__:{count, plural, one {# exclusion} other {# exclusions}} configured",
|
||||
"compressionExclusionsEmpty": "__MISSING__:No exclusions configured — every model/endpoint is eligible for compression (default behavior).",
|
||||
"compressionExclusionsTitle": "Exclusions de la compression",
|
||||
"compressionExclusionsDesc": "Identifiants de modèles ou motifs fournisseur/modèle qui ne doivent jamais être compressés. `*` est le seul caractère générique (par ex. `openai/*`, `*embedding*`). Une requête correspondante est transmise à l'identique, octet pour octet : aucun moteur de compression ne s'exécute.",
|
||||
"compressionExclusionsPlaceholder": "Un motif par ligne, par ex.\nopenai/text-embedding-3-large\nanthropic/*",
|
||||
"compressionExclusionsSave": "Enregistrer",
|
||||
"compressionExclusionsSaved": "Enregistré",
|
||||
"compressionExclusionsCount": "{count, plural, one {# exclusion configurée} other {# exclusions configurées}}",
|
||||
"compressionExclusionsEmpty": "Aucune exclusion configurée : chaque modèle ou point de terminaison peut être compressé (comportement par défaut).",
|
||||
"compressionCavemanConfig": "Caveman Engine Configuration",
|
||||
"compressionCavemanConfigDesc": "Fine-tune the rule-based compression engine",
|
||||
"compressionCavemanPanelHint": "Son activation/désactivation et son niveau sont définis dans le panneau :",
|
||||
@@ -9723,23 +9748,23 @@
|
||||
"deviceCodeVerificationUrl": "URL de vérification",
|
||||
"deviceCodeYourCode": "Votre code",
|
||||
"deviceCodeWaiting": "En attente d'autorisation...",
|
||||
"googleLoopbackTitle": "__MISSING__:Google sign-in can't complete from this address",
|
||||
"googleLoopbackWhatHappens": "__MISSING__:Google only releases the authorization code once <code>{redirectUri}</code> is reachable from the browser that approves the sign-in. Here that address points at this computer, not at the OmniRoute server — so the consent screen hangs instead of redirecting, and there is no callback URL to copy.",
|
||||
"googleLoopbackRecommended": "__MISSING__:Recommended — run this on your own computer, then paste the result below:",
|
||||
"googleLoopbackHelperNote": "__MISSING__:It opens the Google consent locally (where 127.0.0.1 works) and prints a one-line omniroute-cred-v1.… blob. Paste that blob into the Step 2 field below — it accepts a credential blob as well as a callback URL.",
|
||||
"googleLoopbackTunnelLabel": "__MISSING__:Or forward the dashboard port over SSH and reload OmniRoute through the tunnel:",
|
||||
"googleLoopbackTunnelNote": "__MISSING__:Replace {userPlaceholder} with your SSH username, keep the terminal open, then open {localUrl} and connect again from there.",
|
||||
"googleLoopbackHeadlessAlt": "__MISSING__:For fully headless use with no local callback at all, <a>configure your own Google OAuth credentials</a> plus a public base URL.",
|
||||
"googleLoopbackTitle": "La connexion Google ne peut pas aboutir depuis cette adresse",
|
||||
"googleLoopbackWhatHappens": "Google ne transmet le code d'autorisation que lorsque <code>{redirectUri}</code> est accessible depuis le navigateur qui approuve la connexion. Ici, cette adresse désigne cet ordinateur et non le serveur OmniRoute : l'écran de consentement reste donc bloqué au lieu d'effectuer la redirection, et aucune URL de rappel ne peut être copiée.",
|
||||
"googleLoopbackRecommended": "Recommandé : exécutez cette commande sur votre propre ordinateur, puis collez le résultat ci-dessous :",
|
||||
"googleLoopbackHelperNote": "La commande ouvre localement l'écran de consentement Google (où 127.0.0.1 fonctionne) et affiche un blob omniroute-cred-v1.… sur une seule ligne. Collez ce blob dans le champ de l'étape 2 ci-dessous ; celui-ci accepte aussi bien un blob d'identifiants qu'une URL de rappel.",
|
||||
"googleLoopbackTunnelLabel": "Vous pouvez également transférer le port du tableau de bord via SSH et recharger OmniRoute à travers le tunnel :",
|
||||
"googleLoopbackTunnelNote": "Remplacez {userPlaceholder} par votre nom d'utilisateur SSH, gardez le terminal ouvert, puis ouvrez {localUrl} et reconnectez-vous depuis cette adresse.",
|
||||
"googleLoopbackHeadlessAlt": "Pour une utilisation entièrement sans interface graphique ni rappel local, <a>configurez vos propres identifiants Google OAuth</a> ainsi qu'une URL de base publique.",
|
||||
"remoteAccessInfo": "Accès à distance : puisque vous accédez à OmniRoute à distance, après autorisation, vous verrez une page d'erreur (localhost introuvable). C'est normal : copiez simplement l'URL complète depuis la barre d'adresse de votre navigateur et collez-la ci-dessous.",
|
||||
"loopbackMismatchTitle": "__MISSING__:Sign-in can't complete from this address",
|
||||
"loopbackMismatchWhatHappened": "__MISSING__:What's happening",
|
||||
"loopbackMismatchExplanation": "__MISSING__:After you approve the login, {providerName} always sends the browser back to <code>{redirectUri}</code>. That address points at the computer running this browser, not at the OmniRoute server — so the authorization code never reaches OmniRoute and the provider fails the sign-in without showing an error.",
|
||||
"loopbackMismatchHowToFix": "__MISSING__:How to fix it",
|
||||
"loopbackMismatchStep1": "__MISSING__:On this computer, open a terminal and start an SSH tunnel to the OmniRoute server:",
|
||||
"loopbackMismatchStep1Note": "__MISSING__:Replace {userPlaceholder} with your SSH username. Keep this terminal open until the connection shows as active — both ports are needed: one serves the dashboard, the other receives the callback.",
|
||||
"loopbackMismatchStep2": "__MISSING__:In this browser, reopen OmniRoute through the tunnel:",
|
||||
"loopbackMismatchStep3": "__MISSING__:Then connect {providerName} again from the new tab. The callback now reaches the server and the login completes normally.",
|
||||
"loopbackMismatchAlternative": "__MISSING__:No SSH access? If this provider offers a token import tab, connect with a token instead — that path doesn't use a loopback callback.",
|
||||
"loopbackMismatchTitle": "La connexion ne peut pas aboutir depuis cette adresse",
|
||||
"loopbackMismatchWhatHappened": "Ce qui se passe",
|
||||
"loopbackMismatchExplanation": "Après l'approbation de la connexion, {providerName} renvoie toujours le navigateur vers <code>{redirectUri}</code>. Cette adresse désigne l'ordinateur qui exécute ce navigateur et non le serveur OmniRoute : le code d'autorisation ne parvient donc jamais à OmniRoute et la connexion au fournisseur échoue sans afficher d'erreur.",
|
||||
"loopbackMismatchHowToFix": "Comment résoudre le problème",
|
||||
"loopbackMismatchStep1": "Sur cet ordinateur, ouvrez un terminal et démarrez un tunnel SSH vers le serveur OmniRoute :",
|
||||
"loopbackMismatchStep1Note": "Remplacez {userPlaceholder} par votre nom d'utilisateur SSH. Gardez ce terminal ouvert jusqu'à ce que la connexion soit indiquée comme active ; les deux ports sont nécessaires : l'un sert le tableau de bord et l'autre reçoit le rappel.",
|
||||
"loopbackMismatchStep2": "Dans ce navigateur, rouvrez OmniRoute à travers le tunnel :",
|
||||
"loopbackMismatchStep3": "Reconnectez ensuite {providerName} depuis le nouvel onglet. Le rappel atteint désormais le serveur et la connexion aboutit normalement.",
|
||||
"loopbackMismatchAlternative": "Vous n'avez pas d'accès SSH ? Si ce fournisseur propose un onglet d'importation de jeton, connectez-vous plutôt avec un jeton ; cette méthode n'utilise pas de rappel local.",
|
||||
"step1OpenUrl": "Étape 1 : ouvrez cette URL dans votre navigateur",
|
||||
"copy": "Copier",
|
||||
"step2PasteCallback": "Étape 2 : Collez l'URL de rappel ou le code d'autorisation ici",
|
||||
@@ -11837,7 +11862,7 @@
|
||||
"description": "Activer l'accès réseau dans le bac à sable des compétences."
|
||||
}
|
||||
},
|
||||
"ccDiscoveryAliasesEnvWarning": "__MISSING__:Active via environment variable (EXPOSE_CC_DISCOVERY_ALIASES) — this overrides any dashboard toggle below."
|
||||
"ccDiscoveryAliasesEnvWarning": "Actif via la variable d'environnement EXPOSE_CC_DISCOVERY_ALIASES : cette valeur remplace tout réglage du tableau de bord ci-dessous."
|
||||
},
|
||||
"comboControl": {
|
||||
"title": "Centre de contrôle Combo",
|
||||
|
||||
Reference in New Issue
Block a user