- OpenAI-compatible gateway with intelligent routing via cortiq-router (allaigate) - Embedded build-free admin SPA at /admin: 7 languages (en/ru/de/fr/es/zh/tr), light/dark themes, hot config reload (no restart) - Admin API, per-request statistics + Prometheus /metrics, secret store, playground - English documentation (primary) with Russian translations (*.ru.md)
257 lines
11 KiB
JavaScript
Vendored
257 lines
11 KiB
JavaScript
Vendored
// French (fr) — same keys as en.js; missing keys fall back to English.
|
|
export default {
|
|
// brand / common
|
|
"brand.sub": "Gateway",
|
|
"common.loading": "Chargement…",
|
|
"common.save": "Enregistrer",
|
|
"common.saving": "Enregistrement…",
|
|
"common.cancel": "Annuler",
|
|
"common.add": "Ajouter",
|
|
"common.edit": "Modifier",
|
|
"common.delete": "Supprimer",
|
|
"common.close": "Fermer",
|
|
"common.test": "Tester",
|
|
"common.copy": "Copier",
|
|
"common.copied": "Copié",
|
|
"common.confirm": "Confirmer",
|
|
"common.none": "aucun",
|
|
"common.saved": "Enregistré",
|
|
"common.error": "Erreur",
|
|
"common.ok": "OK",
|
|
"common.refresh": "Actualiser",
|
|
"common.actions": "Actions",
|
|
"common.optional": "optionnel",
|
|
"common.search": "Rechercher",
|
|
"common.all": "tous",
|
|
|
|
// nav
|
|
"nav.dashboard": "Tableau de bord",
|
|
"nav.models": "Modèles",
|
|
"nav.routing": "Routage",
|
|
"nav.protocols": "Protocoles",
|
|
"nav.keys": "Clés API",
|
|
"nav.playground": "Playground",
|
|
"nav.settings": "Paramètres",
|
|
"nav.foot": "Gateway · v{v}",
|
|
|
|
// topbar / status
|
|
"status.router": "Routeur",
|
|
"status.gateway": "Gateway",
|
|
"status.online": "en ligne",
|
|
"status.offline": "hors ligne",
|
|
"status.checking": "vérification…",
|
|
"theme.toggle": "Thème",
|
|
"logout": "Déconnexion",
|
|
|
|
// login
|
|
"login.title": "allaigate Gateway",
|
|
"login.subtitle": "Saisissez le jeton administrateur pour gérer cette passerelle.",
|
|
"login.token": "Jeton admin",
|
|
"login.tokenPlaceholder": "coller le jeton admin",
|
|
"login.submit": "Ouvrir la console",
|
|
"login.hint": "Le jeton est affiché dans le log de la passerelle au démarrage, ou défini via [admin].token_env.",
|
|
"login.failed": "Jeton admin invalide.",
|
|
|
|
// dashboard
|
|
"dash.title": "Tableau de bord",
|
|
"dash.subtitle": "Trafic en direct, coûts et analyses de routage pour votre pool de modèles.",
|
|
"dash.range": "Période",
|
|
"dash.range.1h": "1h",
|
|
"dash.range.24h": "24h",
|
|
"dash.range.7d": "7j",
|
|
"dash.kpi.requests": "Requêtes",
|
|
"dash.kpi.tokens": "Tokens",
|
|
"dash.kpi.cost": "Coût",
|
|
"dash.kpi.latency": "Latence moy.",
|
|
"dash.kpi.success": "Taux de succès",
|
|
"dash.kpi.failovers": "Basculements",
|
|
"dash.series.title": "Requêtes dans le temps",
|
|
"dash.series.cost": "Coûts dans le temps",
|
|
"dash.series.empty": "Aucun trafic sur cette période.",
|
|
"dash.breakdown.title": "Répartition",
|
|
"dash.groupby.model": "par modèle",
|
|
"dash.groupby.tier": "par niveau",
|
|
"dash.groupby.label": "par tâche",
|
|
"dash.groupby.account": "par compte",
|
|
"dash.recent.title": "Requêtes récentes",
|
|
"dash.recent.empty": "Aucune requête enregistrée. Essayez le Playground.",
|
|
"dash.col.time": "Heure",
|
|
"dash.col.model": "Modèle",
|
|
"dash.col.tier": "Niveau",
|
|
"dash.col.task": "Tâche",
|
|
"dash.col.tokens": "Tokens",
|
|
"dash.col.cost": "Coût",
|
|
"dash.col.latency": "Latence",
|
|
"dash.col.outcome": "Résultat",
|
|
"dash.col.requests": "Requêtes",
|
|
"dash.col.errors": "Erreurs",
|
|
"dash.health.title": "Santé",
|
|
"dash.health.reachable": "accessible",
|
|
"dash.health.unreachable": "inaccessible",
|
|
|
|
// models
|
|
"models.title": "Modèles",
|
|
"models.subtitle": "Votre pool de modèles — combinez modèles locaux économiques et API cloud.",
|
|
"models.add": "Ajouter un modèle",
|
|
"models.empty": "Aucun modèle. Ajoutez votre premier modèle pour commencer.",
|
|
"models.col.id": "ID",
|
|
"models.col.provider": "Fournisseur",
|
|
"models.col.model": "Modèle",
|
|
"models.col.tier": "Niveau de coût",
|
|
"models.col.key": "Clé",
|
|
"models.col.caps": "Capacités",
|
|
"models.col.price": "Prix (entrée/sortie)",
|
|
"models.probe": "Sonder",
|
|
"models.probe.ok": "Accessible ({ms} ms)",
|
|
"models.probe.fail": "Échec : {err}",
|
|
"models.form.addTitle": "Ajouter un modèle",
|
|
"models.form.editTitle": "Modifier le modèle",
|
|
"models.form.id": "ID",
|
|
"models.form.idHint": "Identifiant unique utilisé dans le routage, ex. local-qwen",
|
|
"models.form.provider": "Fournisseur",
|
|
"models.form.baseUrl": "URL de base",
|
|
"models.form.model": "Nom du modèle",
|
|
"models.form.kind": "Type",
|
|
"models.form.costTier": "Niveau de coût",
|
|
"models.form.priceIn": "Prix entrée ($/1M)",
|
|
"models.form.priceOut": "Prix sortie ($/1M)",
|
|
"models.form.apiKeyEnv": "Nom de la var. d'env. pour la clé",
|
|
"models.form.apiKeyEnvHint": "Nom de la variable d'env. ou du secret contenant la clé de ce fournisseur.",
|
|
"models.form.caps": "Capacités",
|
|
"models.form.secret": "Valeur secrète",
|
|
"models.form.secretStored": "stocké",
|
|
"models.form.secretEnv": "depuis l'env.",
|
|
"models.form.secretMissing": "non défini",
|
|
"models.form.secretPlaceholder": "définir ou remplacer la clé (écriture seule)",
|
|
"models.deleteConfirm": "Supprimer le modèle \"{id}\" ?",
|
|
|
|
// routing
|
|
"routing.title": "Routage",
|
|
"routing.subtitle": "Associez les niveaux de complexité à une liste ordonnée de modèles (priorité = repli).",
|
|
"routing.default": "Modèle par défaut",
|
|
"routing.defaultHint": "Utilisé lorsque le routeur est inaccessible.",
|
|
"routing.tiers": "Niveaux",
|
|
"routing.tierHint": "Glissez les puces pour réordonner ; le premier est préféré, les autres sont des replis.",
|
|
"routing.addModel": "+ ajouter",
|
|
"routing.addTier": "Ajouter un niveau",
|
|
"routing.tierName": "Nom du niveau",
|
|
"routing.policy": "Politique",
|
|
"routing.policy.mode": "Mode",
|
|
"routing.policy.fixed": "Table fixe",
|
|
"routing.policy.costAware": "Sensible au coût",
|
|
"routing.policy.maxCost": "Coût max par requête ($)",
|
|
"routing.policy.minClass": "Classe minimale par niveau",
|
|
"routing.empty": "Aucun modèle disponible — ajoutez des modèles d'abord.",
|
|
|
|
// protocols
|
|
"protocols.title": "Protocoles",
|
|
"protocols.subtitle": "Activez uniquement les surfaces API entrantes nécessaires. Les bascules s'appliquent en direct.",
|
|
"protocols.implemented": "implémenté",
|
|
"protocols.planned": "planifié",
|
|
"protocols.openai_chat": "OpenAI Chat Completions",
|
|
"protocols.openai_chat.d": "POST /v1/chat/completions — compatible avec OpenAI SDK, LangChain, crewAI.",
|
|
"protocols.openai_completions": "OpenAI Completions (héritage)",
|
|
"protocols.openai_completions.d": "POST /v1/completions — intégrations héritées.",
|
|
"protocols.openai_embeddings": "OpenAI Embeddings",
|
|
"protocols.openai_embeddings.d": "POST /v1/embeddings — pipelines RAG.",
|
|
"protocols.openai_models": "OpenAI Models",
|
|
"protocols.openai_models.d": "GET /v1/models — découverte automatique des clients.",
|
|
"protocols.anthropic_messages": "Anthropic Messages",
|
|
"protocols.anthropic_messages.d": "POST /v1/messages — agents natifs Claude.",
|
|
"protocols.mcp": "MCP (Model Context Protocol)",
|
|
"protocols.mcp.d": "JSON-RPC / SSE — orchestrateurs natifs MCP.",
|
|
"protocols.native_passthrough": "Passage natif",
|
|
"protocols.native_passthrough.d": "POST /route — accès direct à la décision de routage.",
|
|
|
|
// keys
|
|
"keys.title": "Clés API",
|
|
"keys.subtitle": "Clés de passerelle virtuelles pour vos agents. Les clés fournisseurs ne quittent jamais la passerelle.",
|
|
"keys.add": "Nouvelle clé",
|
|
"keys.empty": "Aucune clé configurée — la passerelle est en mode ouvert (sans auth).",
|
|
"keys.openMode": "Mode ouvert : toute requête est acceptée (aucune clé requise).",
|
|
"keys.col.key": "Clé",
|
|
"keys.col.account": "Compte",
|
|
"keys.col.rate": "Débit / min",
|
|
"keys.col.models": "Modèles autorisés",
|
|
"keys.form.title": "Nouvelle clé API",
|
|
"keys.form.account": "Compte",
|
|
"keys.form.rate": "Limite de débit / min",
|
|
"keys.form.allow": "Modèles autorisés",
|
|
"keys.form.allowHint": "Laisser vide pour autoriser tous les modèles.",
|
|
"keys.form.custom": "Clé personnalisée (optionnel)",
|
|
"keys.form.customHint": "Laisser vide pour générer automatiquement sk-gw-…",
|
|
"keys.created": "Clé créée — copiez-la maintenant, elle ne sera plus affichée :",
|
|
"keys.revoke": "Révoquer",
|
|
"keys.revokeConfirm": "Révoquer cette clé ?",
|
|
"keys.allowAll": "tous",
|
|
|
|
// playground
|
|
"pg.title": "Playground",
|
|
"pg.subtitle": "Envoyez une invite via le pipeline en direct et inspectez la décision de routage.",
|
|
"pg.system": "Invite système",
|
|
"pg.systemPlaceholder": "message système optionnel",
|
|
"pg.prompt": "Invite",
|
|
"pg.promptPlaceholder": "Posez une question…",
|
|
"pg.mode": "Mode",
|
|
"pg.mode.auto": "Auto (routage)",
|
|
"pg.mode.pinned": "Modèle épinglé",
|
|
"pg.profile": "Profil",
|
|
"pg.model": "Modèle",
|
|
"pg.temp": "Température",
|
|
"pg.maxTokens": "Tokens max",
|
|
"pg.send": "Envoyer",
|
|
"pg.sending": "Envoi…",
|
|
"pg.answer": "Réponse",
|
|
"pg.empty": "La réponse et la décision de routage s'afficheront ici.",
|
|
"pg.decision": "Décision de routage",
|
|
"pg.task": "Tâche",
|
|
"pg.tier": "Niveau",
|
|
"pg.score": "Complexité",
|
|
"pg.selected": "Modèle sélectionné",
|
|
"pg.source": "Source du routage",
|
|
"pg.cost": "Coût",
|
|
"pg.latency": "Latence",
|
|
"pg.tokens": "Tokens (entrée/sortie)",
|
|
"pg.failover": "Basculement",
|
|
"pg.error": "Requête échouée",
|
|
|
|
// settings
|
|
"settings.title": "Paramètres",
|
|
"settings.subtitle": "Connexion passerelle, entrée de routage, fiabilité et observabilité.",
|
|
"settings.router": "Connexion routeur",
|
|
"settings.router.url": "URL du routeur",
|
|
"settings.router.keyEnv": "Nom de l'env. pour la clé du routeur",
|
|
"settings.router.timeout": "Délai d'expiration (ms)",
|
|
"settings.router.verifyTls": "Vérifier le certificat TLS",
|
|
"settings.router.taxonomy": "ID de taxonomie",
|
|
"settings.route": "Entrée de routage",
|
|
"settings.route.strategy": "Stratégie de texte",
|
|
"settings.route.maxChars": "Caractères max",
|
|
"settings.route.cacheTtl": "TTL du cache",
|
|
"settings.route.profile": "Profil par défaut",
|
|
"settings.breaker": "Disjoncteur",
|
|
"settings.breaker.threshold": "Seuil d'erreur",
|
|
"settings.breaker.cooldown": "Temporisation",
|
|
"settings.log": "Journalisation",
|
|
"settings.log.level": "Niveau de log",
|
|
"settings.log.bodies": "Journaliser les corps de messages (confidentialité désactivée)",
|
|
"settings.telemetry": "Télémétrie",
|
|
"settings.telemetry.metrics": "Exposer Prometheus /metrics",
|
|
"settings.cortiq": "Métadonnées de réponse",
|
|
"settings.cortiq.echo": "Inclure le bloc de routage cortiq dans les réponses",
|
|
"settings.stats": "Statistiques",
|
|
"settings.stats.enabled": "Enregistrer les statistiques de requêtes",
|
|
"settings.stats.file": "Fichier de stats (JSONL)",
|
|
"settings.stats.retention": "Rétention",
|
|
"settings.listen": "Adresse d'écoute",
|
|
"settings.export": "Exporter la config",
|
|
"settings.import": "Importer la config",
|
|
"settings.needsRestart": "Enregistré. Certains changements (adresse d'écoute) nécessitent un redémarrage.",
|
|
|
|
// toasts / misc
|
|
"toast.saved": "Modifications enregistrées",
|
|
"toast.deleted": "Supprimé",
|
|
"toast.probing": "Sondage…",
|
|
"toast.imported": "Config importée",
|
|
};
|