From 3d7d02a10a8510c868f05ee7a2eb5a6d9b39ee05 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Thu, 26 Feb 2026 16:50:47 -0300 Subject: [PATCH] feat: add new internationalization message files for multiple languages and update Portuguese (Brazil) messages. --- src/i18n/messages/fr.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/he.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/hu.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/id.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/in.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/it.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/ja.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/ko.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/ms.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/nl.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/no.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/phi.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/pl.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/pt-BR.json | 12 +- src/i18n/messages/pt.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/ro.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/ru.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/sk.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/sv.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/th.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/uk-UA.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/vi.json | 2040 ++++++++++++++++++++++++++++++++++ src/i18n/messages/zh-CN.json | 2040 ++++++++++++++++++++++++++++++++++ 23 files changed, 44886 insertions(+), 6 deletions(-) create mode 100644 src/i18n/messages/fr.json create mode 100644 src/i18n/messages/he.json create mode 100644 src/i18n/messages/hu.json create mode 100644 src/i18n/messages/id.json create mode 100644 src/i18n/messages/in.json create mode 100644 src/i18n/messages/it.json create mode 100644 src/i18n/messages/ja.json create mode 100644 src/i18n/messages/ko.json create mode 100644 src/i18n/messages/ms.json create mode 100644 src/i18n/messages/nl.json create mode 100644 src/i18n/messages/no.json create mode 100644 src/i18n/messages/phi.json create mode 100644 src/i18n/messages/pl.json create mode 100644 src/i18n/messages/pt.json create mode 100644 src/i18n/messages/ro.json create mode 100644 src/i18n/messages/ru.json create mode 100644 src/i18n/messages/sk.json create mode 100644 src/i18n/messages/sv.json create mode 100644 src/i18n/messages/th.json create mode 100644 src/i18n/messages/uk-UA.json create mode 100644 src/i18n/messages/vi.json create mode 100644 src/i18n/messages/zh-CN.json diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json new file mode 100644 index 0000000000..74768b3ddb --- /dev/null +++ b/src/i18n/messages/fr.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Enregistrer", + "cancel": "Annuler", + "delete": "Supprimer", + "loading": "Chargement...", + "error": "Une erreur s'est produite", + "success": "Succès", + "confirm": "Etes-vous sûr ?", + "refresh": "Actualiser", + "close": "Fermer", + "add": "Ajouter", + "edit": "Modifier", + "search": "Rechercher", + "back": "Retour", + "next": "Suivant", + "submit": "Soumettre", + "reset": "Réinitialiser", + "copy": "Copier", + "copied": "Copié!", + "enabled": "Activé", + "disabled": "Désactivé", + "active": "Actif", + "inactive": "Inactif", + "noData": "Aucune donnée disponible", + "configure": "Configurer", + "manage": "Gérer", + "name": "Nom", + "actions": "Actions", + "status": "Statut", + "type": "Tapez", + "model": "Modèle", + "models": "modèles", + "provider": "Fournisseur", + "account": "Compte", + "time": "Temps", + "details": "Détails", + "created": "Créé", + "lastUsed": "Dernière utilisation", + "loadMore": "Charger plus", + "noResults": "Aucun résultat trouvé", + "reloadPage": "Recharger la page", + "connected": "Connecté", + "disconnected": "Déconnecté", + "notConfigured": "Non configuré", + "testConnection": "Tester la connexion", + "enable": "Activer", + "disable": "Désactiver", + "columns": "Colonnes", + "newest": "Le plus récent", + "oldest": "Le plus ancien", + "all": "Tout", + "none": "Aucun", + "yes": "Oui", + "no": "Non", + "warning": "Avertissement", + "note": "Remarque", + "free": "Gratuit", + "skipToContent": "Passer au contenu" + }, + "sidebar": { + "home": "Accueil", + "dashboard": "Tableau de bord", + "providers": "Fournisseurs", + "combos": "Combinaisons", + "usage": "Utilisation", + "analytics": "Analyse", + "costs": "Coûts", + "health": "Santé", + "limits": "Limites et quotas", + "cliTools": "Outils CLI", + "settings": "Paramètres", + "translator": "Traducteur", + "docs": "Documentation", + "issues": "Problèmes", + "endpoint": "Point de terminaison", + "apiManager": "Gestionnaire d'API", + "logs": "Journaux", + "auditLog": "Journal d'audit", + "shutdown": "Arrêt", + "restart": "Redémarrer", + "shutdownConfirm": "Arrêter OmniRoute ?", + "restartConfirm": "Redémarrer OmniRoute ?", + "version": "v{version}", + "debug": "Débogage", + "system": "Système", + "help": "Aide", + "serverDisconnected": "Serveur déconnecté", + "serverDisconnectedMsg": "Le serveur proxy a été arrêté ou est en train de redémarrer.", + "expandSidebar": "Développer la barre latérale", + "collapseSidebar": "Réduire la barre latérale" + }, + "header": { + "logout": "Déconnexion", + "language": "Langue", + "providers": "Fournisseurs", + "providerDescription": "Gérez vos connexions aux fournisseurs d'IA", + "combos": "Combinaisons", + "comboDescription": "Combinaisons de modèles avec bascule de secours", + "usage": "Utilisation et analyses", + "usageDescription": "Surveillez l'utilisation de votre API, la consommation de jetons et les journaux de requêtes", + "analytics": "Analytique", + "analyticsDescription": "Graphiques, tendances et informations d'évaluation", + "cliTools": "Outils CLI", + "cliToolsDescription": "Configurer les outils CLI", + "home": "Accueil", + "homeDescription": "Bienvenue sur OmniRoute", + "endpoint": "Point de terminaison", + "endpointDescription": "Configuration du point de terminaison de l'API", + "settings": "Paramètres", + "settingsDescription": "Gérez vos préférences", + "openaiCompatible": "Compatible avec OpenAI", + "anthropicCompatible": "Compatible Anthropic" + }, + "home": { + "quickStart": "Démarrage rapide", + "quickStartDesc": "Démarrez en 4 étapes. Connectez des fournisseurs, routez les modèles et surveillez tout.", + "fullDocs": "Documentation complète", + "step1Title": "1. Créer une clé API", + "step1Desc": "Allez dans Endpoint -> Clés enregistrées. Générez une clé par environnement.", + "step2Title": "2. Connecter des fournisseurs", + "step2Desc": "Ajoutez des comptes dans Providers. Prend en charge OAuth, API Key et paliers gratuits.", + "step3Title": "3. Configurer votre client", + "step3Desc": "Définissez l'URL de base sur {url} dans votre IDE ou client API.", + "step4Title": "4. Surveiller et optimiser", + "step4Desc": "Suivez les tokens, les coûts et les erreurs dans Journaux des requêtes et Analytique.", + "providersOverview": "Présentation des fournisseurs", + "configuredOf": "{configured} configuré parmi {total} fournisseurs disponibles", + "noModelsAvailable": "Aucun modèle disponible pour ce fournisseur.", + "configureFirst": "Configurez d'abord une connexion dans {providers}", + "configureProvider": "Configurer le fournisseur", + "modelAvailable": "Modèle {count} disponible", + "modelsAvailable": "{count} modèles disponibles", + "connectionsActive": "Connexion {count} active", + "connectionsActivePlural": "{count} connexions actives", + "copyModelName": "Copier le nom du modèle", + "documentation": "Documentation", + "healthMonitor": "Moniteur de santé", + "reportIssue": "Signaler un problème", + "activeError": "{active} actif · Erreur {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "Clé API", + "requestsShort": "{count} reqs", + "providerModelsTitle": "{provider} - Modèles", + "copiedModel": "Copié : {model}", + "aliasLabel": "pseudonyme" + }, + "analytics": { + "title": "Analyse", + "overviewDescription": "Surveillez vos modèles d'utilisation des API, la consommation de jetons, les coûts et les tendances d'activité sur tous les fournisseurs et modèles.", + "evalsDescription": "Exécutez des suites d'évaluation pour tester et valider vos points de terminaison LLM. Comparez la qualité des modèles, détectez les régressions et évaluez la latence.", + "overview": "Aperçu", + "evals": "Évaluations" + }, + "apiManager": { + "title": "Clés API", + "createKey": "Créer une clé API", + "key": "Clé", + "revokeKey": "Révoquer la clé", + "revokeConfirm": "Êtes-vous sûr de vouloir révoquer cette clé API ?", + "noKeys": "Pas encore de clé API", + "noKeysDesc": "Créez votre première clé API pour authentifier les requêtes sur votre point de terminaison", + "keyLabel": "Étiquette de clé", + "permissions": "Autorisations", + "expiresAt": "Expire", + "never": "Jamais", + "revoke": "Révoquer", + "showKey": "Afficher la clé", + "hideKey": "Masquer la clé", + "copyKey": "Copier la clé API", + "allModels": "Tous les modèles", + "selectedModels": "Modèles sélectionnés", + "readOnly": "Lecture seule", + "fullAccess": "Accès complet", + "keyManagement": "Gestion des clés API", + "keyManagementDesc": "Créez et gérez des clés API pour authentifier les requêtes sur votre point de terminaison", + "totalKeys": "Clés totales", + "restricted": "Restreint", + "totalRequests": "Total des demandes", + "modelsAvailable": "Modèles disponibles", + "registeredKeys": "Clés enregistrées", + "keysRegistered": "{count} clés enregistrées", + "keyRegistered": "Clé {count} enregistrée", + "keysSecurityNote": "Chaque clé isole le suivi de l'utilisation et peut être révoquée indépendamment. Les clés sont masquées après leur création pour des raisons de sécurité.", + "createFirstKey": "Créez votre première clé", + "name": "Nom", + "usage": "Utilisation", + "created": "Créé", + "actions": "Actions", + "reqs": "demandes", + "neverUsed": "Jamais utilisé", + "deleteConfirm": "Supprimer cette clé API ?", + "usageTips": "Conseils d'utilisation", + "tipAuth": "Utilisez les clés API dans l'en-tête d'autorisation en tant que Bearer YOUR_KEY", + "tipSecure": "Les clés ne sont affichées qu'une seule fois lors de la création : stockez-les en toute sécurité", + "tipSeparate": "Créer des clés distinctes pour différents clients ou environnements", + "tipRestrict": "Restreindre les clés à des modèles spécifiques pour une meilleure sécurité et un meilleur contrôle des coûts", + "keyName": "Nom de la clé", + "keyNamePlaceholder": "par exemple, clé de production, clé de développement", + "keyNameDesc": "Choisissez un nom descriptif pour identifier l'objectif de cette clé", + "keyCreated": "Clé API créée", + "keyCreatedSuccess": "Clé créée avec succès !", + "keyCreatedNote": "Copiez et stockez cette clé maintenant – elle ne sera plus affichée.", + "done": "Terminé", + "savePermissions": "Enregistrer les autorisations", + "allowAll": "Tout autoriser", + "restrict": "Restreindre", + "allowAllInfo": "Cette clé peut accéder à tous les modèles disponibles.", + "restrictInfo": "Cette clé peut accéder à {selected} des modèles {total}.", + "selected": "{count} sélectionné", + "all": "Tout", + "clear": "Effacer", + "searchModels": "Rechercher des modèles par nom ou fournisseur...", + "noModelsFound": "Aucun modèle trouvé", + "keyNameRequired": "Le nom de la clé est requis", + "keyNameTooLong": "Le nom de la clé doit comporter {max} caractères ou moins.", + "keyNameInvalid": "Le nom de la clé ne peut contenir que des lettres, des chiffres, des espaces, des traits d'union et des traits de soulignement.", + "invalidKeyName": "Nom de clé invalide", + "failedCreateKey": "Échec de la création de la clé", + "failedCreateKeyRetry": "Échec de la création de la clé. Veuillez réessayer.", + "invalidKeyId": "ID de clé invalide", + "failedDeleteKey": "Échec de la suppression de la clé", + "failedDeleteKeyRetry": "Échec de la suppression de la clé. Veuillez réessayer.", + "invalidModelsSelection": "Sélection de modèles invalide", + "cannotSelectMoreThanModels": "Impossible de sélectionner plus de {max} modèles", + "failedUpdatePermissions": "Échec de la mise à jour des autorisations", + "failedUpdatePermissionsRetry": "Échec de la mise à jour des autorisations. Veuillez réessayer.", + "unknownProvider": "inconnu", + "copyMaskedKey": "Copier la clé masquée", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Dernier : {date}", + "editPermissions": "Modifier les autorisations", + "deleteKey": "Supprimer la clé", + "model": "Modèle {count}", + "models": "Modèles {count}", + "permissionsTitle": "Autorisations : {name}", + "allowAllDesc": "Cette clé peut accéder à tous les modèles disponibles.", + "restrictDesc": "Cette clé peut accéder à {selectedCount} des modèles {totalModels}.", + "selectedCount": "{count} sélectionné" + }, + "auditLog": { + "title": "Journal d'audit", + "searchPlaceholder": "Actions de recherche...", + "action": "Action", + "actor": "Acteur", + "target": "Cible", + "ipAddress": "Adresse IP", + "timestamp": "Horodatage", + "noEntries": "Aucune entrée d'audit trouvée", + "filterByAction": "Filtrer par action...", + "filterByActor": "Filtrer par acteur...", + "filterEntriesAria": "Filtrer les entrées du journal d'audit", + "filterByActionTypeAria": "Filtrer par type d'action", + "filterByActorAria": "Filtrer par acteur", + "refreshAuditLogAria": "Actualiser le journal d'audit", + "tableAria": "Entrées du journal d'audit", + "failedFetchAuditLog": "Échec de la récupération du journal d'audit", + "notAvailable": "—", + "description": "Actions administratives et événements de sécurité", + "showing": "Affichage des entrées {count} (décalage {offset})", + "previous": "Précédent" + }, + "cliTools": { + "title": "Outils CLI", + "noActiveProviders": "Aucun fournisseur actif", + "noActiveProvidersDesc": "Veuillez d'abord ajouter et connecter des fournisseurs pour configurer les outils CLI.", + "mapModels": "Modèles de cartes", + "testConnection": "Tester la connexion", + "connectionStatus": "État de la connexion", + "configureEndpoint": "Configurer le point de terminaison", + "instructions": "Instructions", + "modelMapping": "Cartographie du modèle", + "baseUrl": "URL de base", + "apiKey": "Clé API", + "configured": "Configuré", + "notConfigured": "Non configuré", + "notInstalled": "Non installé", + "custom": "Personnalisé", + "unknown": "Inconnu", + "lastSavedAt": "Dernier enregistrement : {date}", + "never": "Jamais", + "justNow": "juste maintenant", + "minutesAgoShort": "il y a {count}m", + "hoursAgoShort": "il y a {count}h", + "daysAgoShort": "Il y a {count}j", + "monthsAgoShort": "Il y a {count}mo", + "yearsAgoShort": "Il y a {count}ans", + "runtimeCheckFailed": "La vérification de l'exécution a échoué", + "yourApiKeyPlaceholder": "votre-clé-API", + "modelPlaceholder": "fournisseur/identifiant de modèle", + "configurationSaved": "Configuration enregistrée avec succès.", + "failedToSave": "Échec de l'enregistrement de la configuration.", + "noApiKeysCreateOne": "Aucune clé API – Créez-en une sur la page Clés", + "defaultOmnirouteKey": "sk_omniroute (par défaut)", + "selectModel": "Sélectionnez le modèle", + "selectModelForAlias": "Sélectionnez le modèle pour {alias}", + "selectModelForTool": "Sélectionnez le modèle pour {tool}", + "select": "Sélectionnez", + "clear": "Effacer", + "comingSoon": "Bientôt disponible", + "checkingRuntime": "Vérification de l'état d'exécution...", + "guideOnlyIntegration": "Intégration avec guide uniquement (aucun runtime local requis)", + "cliRuntimeDetected": "Runtime CLI détecté et prêt", + "cliFoundNotRunnable": "CLI trouvée mais non exécutable{reason}", + "cliRuntimeNotDetected": "L'exécution CLI n'est pas détectée", + "binary": "Binaire", + "configPath": "Chemin de configuration", + "configPathShort": "Configuration", + "failedCheckRuntimeStatus": "Échec de la vérification de l'état d'exécution.", + "copy": "Copier", + "copied": "Copié", + "copyConfig": "Copier la configuration", + "saveConfig": "Enregistrer la configuration", + "selectionSaved": "Sélection enregistrée", + "guide": "Guider", + "detected": "Détecté", + "notReady": "Pas prêt", + "active": "Actif", + "inactive": "Inactif", + "startMitm": "Démarrer MITM", + "stopMitm": "Arrêtez le MITM", + "mitmStarted": "MITM a démarré avec succès !", + "mitmStopped": "MITM s'est arrêté avec succès !", + "failedStart": "Échec du démarrage de MITM", + "failedStop": "Échec de l'arrêt de MITM", + "saveMappings": "Enregistrer les mappages", + "mappingsSaved": "Mappages enregistrés !", + "failedSaveMappings": "Échec de l'enregistrement des mappages", + "howItWorks": "Comment ça marche :", + "antigravityHowWorksDesc": "Antigravity envoie des requêtes au point de terminaison de Google. MITM les intercepte et les redirige vers OmniRoute.", + "antigravityStep1": "1. Démarrez MITM pour acheminer les demandes via OmniRoute.", + "antigravityStep2Prefix": "2. Ajouter", + "antigravityStep2Suffix": "à votre fichier hosts en tant que 127.0.0.1.", + "antigravityStep3": "3. Ouvrez Antigravity et les requêtes seront proxy.", + "sudoPasswordRequiredTitle": "Mot de passe Sudo requis", + "sudoPasswordHint": "Un mot de passe administrateur est requis pour modifier les paramètres du fichier hôte et du proxy système.", + "enterSudoPassword": "Entrez le mot de passe sudo", + "sudoPasswordRequiredError": "Le mot de passe Sudo est requis.", + "cancel": "Annuler", + "confirm": "Confirmer", + "settingsApplied": "Paramètres appliqués avec succès !", + "failedApplySettings": "Échec de l'application des paramètres", + "settingsReset": "Les paramètres ont été réinitialisés avec succès !", + "failedResetSettings": "Échec de la réinitialisation des paramètres", + "backupRestored": "Sauvegarde restaurée !", + "failedRestore": "Échec de la restauration", + "checkingCli": "Vérification de {tool} CLI...", + "cliNotRunnable": "{tool} CLI installé mais non exécutable", + "cliNotInstalled": "{tool} CLI non installé", + "cliNotDetected": "{tool} CLI non détectée", + "cliDetectedReady": "{tool} CLI détecté et prêt", + "cliFoundFailedHealthcheck": "{tool} CLI a été trouvée mais le contrôle de santé d'exécution a échoué{reason}.", + "installCliPrompt": "Veuillez installer {tool} CLI pour utiliser cette fonctionnalité.", + "installCodexPrompt": "Veuillez installer Codex CLI pour utiliser la fonctionnalité d'application automatique.", + "hide": "Masquer", + "howToInstall": "Comment installer", + "installationGuide": "Guide d'installation", + "platforms": "macOS/Linux/Windows :", + "afterInstallationRun": "Après l'installation, exécutez", + "toVerify": "à vérifier.", + "current": "Actuel", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Réinitialiser aux valeurs par défaut", + "providerModelPlaceholder": "fournisseur/identifiant de modèle", + "apply": "Postuler", + "reset": "Réinitialiser", + "manualConfig": "Configuration manuelle", + "backups": "Sauvegardes", + "configBackups": "Sauvegardes de configuration", + "noBackupsYet": "Aucune sauvegarde pour l'instant. Les sauvegardes sont créées automatiquement avant chaque application ou réinitialisation.", + "restore": "Restaurer", + "backupRestoredReloading": "Sauvegarde restaurée ! Statut de rechargement...", + "failedRestoreBackup": "Échec de la restauration de la sauvegarde", + "applied": "Appliqué!", + "failed": "Échec", + "resetDone": "Réinitialisez !", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute est configuré en tant que fournisseur compatible OpenAI", + "provider": "Fournisseur", + "model": "Modèle", + "providers": "Fournisseurs", + "auth": "Authentification", + "noApiKeysAvailable": "Aucune clé API disponible", + "usingDefaultOmniroute": "Utilisation par défaut : sk_omniroute", + "updateConfig": "Mettre à jour la configuration", + "applyConfig": "Appliquer la configuration", + "noBackupsAvailable": "Aucune sauvegarde disponible.", + "profileSaved": "Profil \"{name}\" enregistré !", + "failedSaveProfile": "Échec de l'enregistrement du profil", + "profileActivated": "Profil activé !", + "failedActivateProfile": "Échec de l'activation du profil", + "profiles": "Profils", + "savedProfiles": "Profils enregistrés", + "noProfilesYet": "Aucun profil enregistré pour le moment. Enregistrez la configuration actuelle en tant que profil ci-dessous.", + "activate": "Activer", + "deleteProfile": "Supprimer le profil", + "profileNamePlaceholder": "Nom du profil (par exemple, compte personnel)", + "saveCurrent": "Enregistrer le courant", + "codexAuthNotePrefix": "Utilisations du Codex", + "codexAuthNoteMiddle": "avec", + "codexAuthNoteSuffix": "Cliquez sur \"Appliquer\" pour effectuer la configuration automatique.", + "claudeManualConfiguration": "Claude CLI - Configuration manuelle", + "codexManualConfiguration": "CLI Codex - Configuration manuelle", + "droidManualConfiguration": "Factory Droid - Configuration manuelle", + "openClawManualConfiguration": "Griffe ouverte - Configuration manuelle", + "clineManualConfiguration": "Configuration manuelle en ligne", + "kiloManualConfiguration": "Configuration manuelle du code kilo", + "toolDescriptions": { + "antigravity": "IDE Google Antigravity avec MITM", + "claude": "Anthropique Claude Code CLI", + "codex": "CLI du Codex OpenAI", + "droid": "Assistant IA pour droïdes d'usine", + "openclaw": "Assistant IA Open Claw", + "cline": "CLI de l'assistant de codage Cline AI", + "kilo": "CLI de l'assistant IA Kilo Code", + "cursor": "Éditeur de code AI du curseur", + "continue": "Continuer l'Assistant IA" + }, + "guides": { + "cursor": { + "notes": { + "0": "Nécessite un compte Cursor Pro pour utiliser cette fonctionnalité.", + "1": "Le curseur achemine les requêtes via son propre serveur, le point de terminaison local n'est donc pas pris en charge. Veuillez activer Cloud Endpoint dans les paramètres." + }, + "steps": { + "1": { + "title": "Ouvrir les paramètres", + "desc": "Allez dans Paramètres -> Modèles" + }, + "2": { + "title": "Activer l'API OpenAI", + "desc": "Activer l'option \"Clé API OpenAI\"" + }, + "3": { + "title": "URL de base" + }, + "4": { + "title": "Clé API" + }, + "5": { + "title": "Ajouter un modèle personnalisé", + "desc": "Cliquez sur \"Afficher tous les modèles\" -> \"Ajouter un modèle personnalisé\"" + }, + "6": { + "title": "Sélectionnez le modèle" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Ouvrir la configuration", + "desc": "Ouvrir le fichier de configuration Continuer" + }, + "2": { + "title": "Clé API" + }, + "3": { + "title": "Sélectionnez le modèle" + }, + "4": { + "title": "Ajouter une configuration de modèle", + "desc": "Ajoutez la configuration suivante à votre tableau models :" + } + } + } + } + }, + "combos": { + "title": "Combinaisons", + "description": "Créez des combinaisons de modèles avec un routage pondéré et une prise en charge de secours", + "createCombo": "Créer une combinaison", + "editCombo": "Modifier la combinaison", + "deleteCombo": "Supprimer la combinaison", + "noModels": "Aucun modèle", + "noModelsYet": "Aucun modèle ajouté pour l'instant", + "addModel": "Ajouter un modèle", + "addModelToCombo": "Ajouter un modèle au combo", + "routingStrategy": "Stratégie de routage", + "maxRetries": "Nombre maximal de tentatives", + "timeout": "Délai d'expiration (ms)", + "healthcheck": "Bilan de santé", + "priority": "Priorité", + "fallback": "Repli", + "roundRobin": "Tournoi à la ronde", + "random": "Aléatoire", + "leastLatency": "Moins de latence", + "comboName": "Nom de la combinaison", + "comboNamePlaceholder": "mon-combo", + "deleteConfirm": "Supprimer cette combinaison ?", + "noCombosYet": "Pas encore de combo", + "comboCreated": "Combo créé avec succès", + "comboUpdated": "Combo mis à jour avec succès", + "comboDeleted": "Combinaison supprimée", + "failedCreate": "Échec de la création du combo", + "failedUpdate": "Échec de la mise à jour du combo", + "errorCreating": "Erreur lors de la création du combo", + "errorUpdating": "Erreur lors de la mise à jour du combo", + "errorDeleting": "Erreur lors de la suppression du combo", + "testFailed": "La demande de test a échoué", + "failedToggle": "Impossible de basculer la combinaison", + "testResults": "Résultats des tests — {name}", + "resolvedBy": "Résolu par :", + "more": "+{count} plus", + "reqs": "demandes", + "success": "succès", + "proxyConfigured": "Proxy configuré", + "copyComboName": "Copier le nom du combo", + "enableCombo": "Activer la combinaison", + "disableCombo": "Désactiver la combinaison", + "testCombo": "Combinaison de tests", + "duplicate": "Dupliquer", + "proxyConfig": "Configuration du proxy", + "nameRequired": "Le nom est requis", + "nameInvalid": "Uniquement les lettres, chiffres, -, _, / et . autorisé", + "nameHint": "Lettres, chiffres, -, _, / et . autorisé", + "priorityDesc": "Repli séquentiel : essaie d'abord le modèle 1, puis le 2, etc.", + "weightedDesc": "Répartit le trafic en pourcentage de poids avec repli", + "roundRobinDesc": "Distribution circulaire : chaque demande va au modèle suivant en rotation", + "randomDesc": "Sélection aléatoire uniforme, puis retour aux modèles restants", + "leastUsedDesc": "Sélectionne le modèle avec le moins de demandes, en équilibrant la charge au fil du temps", + "costOptimizedDesc": "Itinéraires vers le modèle le moins cher en premier en fonction du prix", + "models": "Modèles", + "autoBalance": "Équilibre automatique", + "advancedSettings": "Paramètres avancés", + "retryDelay": "Délai de nouvelle tentative (ms)", + "concurrencyPerModel": "Concurrence / Modèle", + "queueTimeout": "Délai d'expiration de la file d'attente (ms)", + "advancedHint": "Laissez vide pour utiliser les valeurs par défaut globales. Ceux-ci remplacent les paramètres de chaque fournisseur.", + "moveUp": "Monter", + "moveDown": "Descendre", + "removeModel": "Supprimer", + "saving": "Sauvegarde...", + "weighted": "Pondéré", + "leastUsed": "Le moins utilisé", + "costOpt": "Option de coût" + }, + "costs": { + "title": "Coûts", + "budget": "Budget", + "totalCost": "Coût total", + "breakdown": "Répartition des coûts", + "noData": "Aucune donnée sur les coûts", + "byModel": "Par modèle", + "byProvider": "Par fournisseur" + }, + "endpoint": { + "title": "Point de terminaison de l'API", + "available": "Points de terminaison disponibles", + "cloudProxy": "Proxy cloud", + "disableConfirm": "Êtes-vous sûr de vouloir désactiver le proxy cloud ?", + "baseUrl": "URL de base", + "apiKeyLabel": "Clé API", + "registeredKeys": "Clés enregistrées", + "chatCompletions": "Achèvements des discussions", + "responses": "Réponses", + "listModels": "Liste des modèles", + "usingCloudProxy": "Utiliser le proxy cloud", + "usingLocalServer": "Utiliser un serveur local", + "machineId": "ID de l'ordinateur : {id}...", + "disableCloud": "Désactiver le cloud", + "enableCloud": "Activer le cloud", + "modelsAcrossEndpoints": "Modèles {models} sur {endpoints} points de terminaison", + "chatDesc": "Chat en streaming et sans streaming avec tous les fournisseurs", + "embeddings": "Intégrations", + "embeddingsDesc": "Intégrations de texte pour les pipelines de recherche et RAG", + "imageGeneration": "Génération d'images", + "imageDesc": "Générer des images à partir d'invites de texte", + "rerank": "Reclassement", + "rerankDesc": "Reclasser les documents par pertinence par rapport à une requête", + "audioTranscription": "Transcription audio", + "audioTranscriptionDesc": "Transcrire des fichiers audio en texte (Whisper)", + "textToSpeech": "Synthèse vocale", + "textToSpeechDesc": "Convertir du texte en discours au son naturel", + "moderations": "Modérations", + "moderationsDesc": "Modération du contenu et classification de sécurité", + "enableCloudTitle": "Activer le proxy cloud", + "whatYouGet": "Ce que vous obtiendrez", + "cloudBenefitAccess": "Accédez à votre API depuis n'importe où dans le monde", + "cloudBenefitShare": "Partagez facilement le point de terminaison avec votre équipe", + "cloudBenefitPorts": "Pas besoin d'ouvrir des ports ou de configurer un pare-feu", + "cloudBenefitEdge": "Réseau périphérique mondial rapide", + "cloudSessionNote": "Cloud conservera votre session d'authentification pendant 1 jour. S'il n'est pas utilisé, il sera automatiquement supprimé.", + "cloudUnstableNote": "Cloud est actuellement instable avec Claude Code OAuth dans certains cas.", + "cloudConnected": "Proxy Cloud connecté !", + "connectingToCloud": "Connexion au cloud...", + "verifyingConnection": "Vérification de la connexion...", + "connecting": "Connexion...", + "verifying": "Vérification...", + "connected": "Connecté !", + "disableCloudTitle": "Désactiver le proxy cloud", + "disableWarning": "Toutes les sessions d'authentification seront supprimées du cloud.", + "syncingData": "Synchronisation des dernières données...", + "disablingCloud": "Désactivation du cloud...", + "syncing": "Synchronisation...", + "disabling": "Désactivation...", + "cloudConnectedVerified": "Cloud Proxy connecté et vérifié !", + "connectedVerificationPending": "Connecté – vérification en attente", + "connectedVerificationPendingWithError": "Connecté — vérification en attente : {error}", + "cloudDisabledSuccess": "Cloud désactivé avec succès", + "syncedSuccess": "Synchronisé avec succès", + "failedDisable": "Échec de la désactivation du cloud", + "failedEnable": "Échec de l'activation du cloud", + "cloudRequestTimeout": "Expiration du délai de demande cloud", + "cloudRequestFailed": "La requête cloud a échoué", + "cloudWorkerUnreachable": "Impossible d'atteindre le travailleur cloud. Assurez-vous que le service cloud est en cours d'exécution (npm run dev dans /cloud).", + "connectionFailed": "La connexion a échoué", + "syncFailed": "Échec de la synchronisation des données cloud", + "providerModelsTitle": "{provider} — Modèles", + "noModelsForProvider": "Aucun modèle disponible pour ce fournisseur.", + "chat": "Discuter", + "embedding": "Intégration", + "image": "Images", + "custom": "personnalisé", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Santé du système", + "description": "Surveillance en temps réel de votre instance OmniRoute", + "healthy": "Sain", + "degraded": "Dégradé", + "down": "Vers le bas", + "uptime": "Temps de disponibilité", + "memory": "Mémoire", + "memoryRss": "Mémoire (RSS)", + "heap": "Tas", + "cpu": "Processeur", + "database": "Base de données", + "version": "Version", + "lastCheck": "Dernière vérification", + "providerHealth": "Santé du prestataire", + "systemMetrics": "Métriques du système", + "tokenHealth": "Santé du jeton", + "refreshAll": "Actualiser tout", + "checkNow": "Vérifiez maintenant", + "loadingHealth": "Chargement des données de santé...", + "failedToLoad": "Échec du chargement des données d'état : {error}", + "retry": "Réessayer", + "allOperational": "Tous les systèmes opérationnels", + "issuesDetected": "Problèmes système détectés", + "updatedAt": "{time} mis à jour", + "latency": "Latence", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Total des demandes", + "noDataYet": "Aucune donnée pour l'instant", + "promptCache": "Cache d'invite", + "entries": "Entrées", + "hitRate": "Taux de réussite", + "hitsMisses": "Coups réussis / Manqués", + "signatureCache": "Cache de signatures", + "signatureDefaults": "Valeurs par défaut", + "signatureTool": "Outil", + "signatureFamily": "Famille", + "signatureSession": "Séance", + "recovering": "Récupération", + "noCBData": "Aucune donnée sur les disjoncteurs disponible. Faites d'abord quelques demandes.", + "providerHealthStatusAria": "État de santé du prestataire", + "issuesLabel": "Problèmes détectés", + "operational": "Opérationnel", + "providers": "Fournisseurs", + "healthyCount": "{count} en bonne santé", + "nodeVersion": "Nœud {version}", + "failures": "Échec de {count}", + "failuresPlural": "{count} échecs", + "lastFailure": "Dernier", + "rateLimitStatus": "Statut de limite de débit", + "activeLimiters": "{count} limiteur actif", + "activeLimitersPlural": "{count} limiteurs actifs", + "queued": "En file d'attente", + "queuedCount": "{count} en file d'attente", + "running": "courir", + "runningCount": "{count} en cours d'exécution", + "ok": "D'accord", + "activeLockouts": "Verrouillages actifs", + "resetConfirm": "Réinitialiser tous les disjoncteurs à l'état sain ? Cela effacera tous les décomptes d’échecs et restaurera tous les fournisseurs à l’état opérationnel.", + "resetAllTitle": "Réinitialisez tous les disjoncteurs à l’état sain", + "resetting": "Réinitialisation...", + "resetAll": "Tout réinitialiser", + "until": "Jusqu'au {time}" + }, + "limits": { + "title": "Limites et quotas", + "rateLimit": "Limite de taux", + "remaining": "Restant", + "requestsPerMinute": "Requêtes/min", + "tokensPerMinute": "Jetons/min", + "dailyLimit": "Limite quotidienne" + }, + "logs": { + "title": "Journaux", + "requestLogs": "Journaux de demande", + "proxyLogs": "Journaux proxy", + "auditLog": "Journal d'audit", + "console": "Console", + "auditLogDesc": "Actions administratives et événements de sécurité", + "loading": "Chargement...", + "refresh": "Actualiser", + "filterByAction": "Filtrer par action...", + "filterByActor": "Filtrer par acteur...", + "filterEntriesAria": "Filtrer les entrées du journal d'audit", + "filterByActionTypeAria": "Filtrer par type d'action", + "filterByActorAria": "Filtrer par acteur", + "refreshAuditLogAria": "Actualiser le journal d'audit", + "tableAria": "Entrées du journal d'audit", + "failedFetchAuditLog": "Échec de la récupération du journal d'audit", + "showing": "Affichage des entrées {count} (décalage {offset})", + "search": "Rechercher", + "timestamp": "Horodatage", + "action": "Action", + "actor": "Acteur", + "target": "Cible", + "details": "Détails", + "ipAddress": "Adresse IP", + "notAvailable": "—", + "noEntries": "Aucune entrée du journal d'audit trouvée", + "previous": "Précédent", + "next": "Suivant" + }, + "onboarding": { + "welcome": "Bienvenue", + "security": "Sécurité", + "test": "Tester", + "ready": "Prêt !", + "setPassword": "Définir le mot de passe", + "addProvider": "Ajoutez votre premier fournisseur", + "getStarted": "Commencer", + "skip": "Sauter", + "skipWizard": "Ignorer complètement l'assistant", + "skipPassword": "Ignorer la configuration du mot de passe", + "skipAndContinue": "Passer et continuer", + "passwordLabel": "Mot de passe", + "confirmPassword": "Confirmer le mot de passe", + "enterPassword": "Entrez le mot de passe", + "confirmPasswordPlaceholder": "Confirmer le mot de passe", + "passwordsMismatch": "Les mots de passe ne correspondent pas", + "setupComplete": "Configuration terminée !", + "goToDashboard": "Accédez au tableau de bord →", + "welcomeDesc": "OmniRoute est votre proxy API IA local. Il achemine les requêtes vers plusieurs fournisseurs d'IA avec équilibrage de charge, basculement et suivi de l'utilisation.", + "multiProvider": "Multi-fournisseur", + "usageTracking": "Suivi de l'utilisation", + "apiKeyMgmt": "Gestion des clés API", + "securityDesc": "Définissez un mot de passe pour protéger votre tableau de bord ou ignorez-le pour l'instant.", + "providerDesc": "Connectez votre premier fournisseur d'IA. Vous pourrez en ajouter d’autres plus tard.", + "apiKeyRequired": "Clé API (obligatoire)", + "customUrlOptional": "URL personnalisée (facultatif)", + "testDesc": "Vérifions que la connexion de votre fournisseur fonctionne.", + "runTest": "Exécuter le test de connexion", + "testingConnection": "Test de connexion...", + "connectionSuccessful": "Connexion réussie ! Votre fournisseur est prêt.", + "noProviderFound": "Aucun fournisseur trouvé. Vous pourrez en ajouter un depuis le tableau de bord plus tard.", + "testFailed": "Le test a échoué, mais vous pourrez le configurer ultérieurement.", + "couldNotTest": "Impossible de tester pour le moment. Vous pouvez tester depuis le tableau de bord.", + "doneDesc": "Vous êtes prêt ! Votre instance OmniRoute est configurée et prête à proxyer les requêtes IA.", + "yourEndpoint": "Votre point de terminaison :", + "continue": "Continuer", + "retry": "Réessayer", + "failedSetPassword": "Échec de la définition du mot de passe. Essayer à nouveau.", + "failedAddProvider": "Échec de l'ajout du fournisseur. Essayer à nouveau.", + "connectionError": "Erreur de connexion. Veuillez réessayer.", + "provider": "Fournisseur" + }, + "providers": { + "title": "Fournisseurs", + "addProvider": "Ajouter un fournisseur", + "editProvider": "Modifier le fournisseur", + "deleteProvider": "Supprimer le fournisseur", + "noProviders": "Aucun fournisseur configuré", + "modelAvailability": "Disponibilité du modèle", + "accounts": "Comptes", + "newAccount": "Nouveau compte", + "deleteConfirm": "Êtes-vous sûr de vouloir supprimer ce fournisseur ?", + "testing": "Test...", + "testConnection": "Tester la connexion", + "testSuccess": "Connexion réussie", + "testFailed": "La connexion a échoué", + "available": "Disponible", + "cooldown": "Temps de recharge", + "unavailable": "Indisponible", + "unknown": "Inconnu", + "oauthLabel": "OAuth", + "compatibleLabel": "Compatible", + "chat": "Discuter", + "responses": "Réponses", + "messages": "Messages", + "oauthProviders": "Fournisseurs OAuth", + "freeProviders": "Fournisseurs gratuits", + "apiKeyProviders": "Fournisseurs de clés API", + "compatibleProviders": "Fournisseurs compatibles avec les clés API", + "testAll": "Tout tester", + "testAllOAuth": "Testez toutes les connexions OAuth", + "testAllFree": "Testez toutes les connexions gratuites", + "testAllApiKey": "Testez toutes les connexions de clé API", + "testAllCompatible": "Testez toutes les connexions compatibles", + "connected": "{count} Connecté", + "errorCount": "{count} Erreur ({code})", + "errorCountNoCode": "{count} Erreur", + "noConnections": "Aucune connexion", + "disabled": "Désactivé", + "enableProvider": "Activer le fournisseur", + "disableProvider": "Désactiver le fournisseur", + "testResults": "Résultats des tests", + "noCompatibleYet": "Aucun fournisseur compatible ajouté pour le moment", + "compatibleHint": "Utilisez les boutons ci-dessus pour ajouter des points de terminaison compatibles OpenAI ou Anthropic", + "addOpenAICompatible": "Ajouter la compatibilité OpenAI", + "addAnthropicCompatible": "Ajouter une compatibilité anthropique", + "addNewProvider": "Ajouter un nouveau fournisseur", + "backToProviders": "Retour aux fournisseurs", + "configureNewProvider": "Configurez un nouveau fournisseur d'IA à utiliser avec vos applications.", + "providerLabel": "Fournisseur", + "selectProvider": "Sélectionnez un fournisseur", + "selectedProvider": "Fournisseur sélectionné", + "authMethod": "Méthode d'authentification", + "apiKeyLabel": "Clé API", + "apiKeyRequired": "La clé API est requise", + "selectProviderRequired": "Veuillez sélectionner un fournisseur", + "enterApiKey": "Entrez votre clé API", + "apiKeySecure": "Votre clé API sera cryptée et stockée en toute sécurité.", + "oauth2Connect": "Connectez-vous avec OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Connectez votre compte en utilisant l'authentification OAuth2.", + "displayName": "Nom d'affichage", + "displayNamePlaceholder": "par exemple, API de production, environnement de développement", + "displayNameHint": "Facultatif. Un nom convivial pour identifier cette configuration.", + "active": "Actif", + "activeDescription": "Activez ce fournisseur pour l'utiliser dans vos applications", + "cancel": "Annuler", + "createProvider": "Créer un fournisseur", + "failedCreate": "Échec de la création du fournisseur", + "errorOccurred": "Une erreur s'est produite. Veuillez réessayer.", + "modelStatus": "Statut du modèle", + "allModelsOperational": "Tous les modèles opérationnels", + "modelsWithIssues": "{count} modèle(s) présentant des problèmes", + "allModelsNormal": "Tous les modèles répondent normalement.", + "cooldownCleared": "Temps de recharge effacé pour {model}", + "failedClearCooldown": "Échec de la suppression du temps de recharge", + "loadingAvailability": "Chargement de la disponibilité du modèle...", + "clearCooldown": "Effacer", + "clearing": "Dégagement...", + "until": "Jusqu'au {time}", + "providerTestFailed": "Le test du fournisseur a échoué", + "modeTest": "{mode}Test", + "passedCount": "{count} réussi", + "failedCount": "{count} a échoué", + "testedCount": "{count} testé", + "millisecondsAbbr": "{value}ms", + "okShort": "D'accord", + "errorShort": "ERREUR", + "noActiveConnectionsInGroup": "Aucune connexion active trouvée pour ce groupe.", + "allTestsPassed": "Tous les tests {total} ont été réussis", + "testSummary": "{passed}/{total} réussi, {failed} échoué", + "nameLabel": "Nom", + "prefixLabel": "Préfixe", + "baseUrlLabel": "URL de base", + "apiTypeLabel": "Type d'API", + "prefixHint": "Obligatoire. Préfixe unique pour les noms de modèles.", + "nameHint": "Obligatoire. Une étiquette conviviale pour ce nœud.", + "baseUrlHint": "Obligatoire.  URL de base de l’API du fournisseur.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Valider la connexion", + "validating": "Validation...", + "connectionValid": "La connexion est valide !", + "connectionFailed": "La connexion a échoué. Vérifiez l'URL et la clé.", + "testKeyLabel": "Clé API de test", + "testKeyPlaceholder": "sk-... (pour validation uniquement)", + "providerNotFound": "Fournisseur introuvable", + "deleteConnectionConfirm": "Supprimer cette connexion ?", + "failedSetAlias": "Échec de la définition de l'alias", + "failedSaveConnection": "Échec de l'enregistrement de la connexion", + "failedSaveConnectionRetry": "Échec de l'enregistrement de la connexion. Veuillez réessayer.", + "failedRetestConnection": "Échec du nouveau test de connexion", + "deleteCompatibleNodeConfirm": "Supprimer ce nœud compatible {type} ?", + "anthropicCompatibleDetails": "Détails compatibles anthropiques", + "openaiCompatibleDetails": "Détails compatibles avec OpenAI", + "messagesApi": "API de messages", + "responsesApi": "API de réponses", + "chatCompletions": "Achèvements des discussions", + "importingModels": "Importation...", + "importFromModels": "Importer depuis /models", + "addConnectionToImport": "Ajoutez une connexion pour activer l'importation.", + "noModelsConfigured": "Aucun modèle configuré", + "connectionCount": "{count} connexion(s)", + "fetchingModels": "Récupération des modèles disponibles...", + "failedFetchModels": "Échec de la récupération des modèles", + "noModelsFound": "Aucun modèle trouvé", + "importFailed": "Échec de l'importation", + "noNewModelsAdded": "Aucun nouveau modèle n'a été ajouté.", + "adding": "Ajout...", + "importingModelsTitle": "Importation de modèles", + "copyModel": "Copier le modèle", + "removeModel": "Supprimer le modèle", + "rateLimitProtected": "Protégé", + "rateLimitUnprotected": "Non protégé", + "enableRateLimitProtection": "Cliquez pour activer la protection de limite de débit", + "disableRateLimitProtection": "Cliquez pour désactiver la protection de limite de débit", + "productionKey": "Clé de production", + "enterNewApiKey": "Saisissez une nouvelle clé API", + "optional": "Facultatif", + "anthropicCompatibleName": "Compatible anthropique", + "openaiCompatibleName": "Compatible avec OpenAI", + "failedImportModels": "Échec de l'importation des modèles", + "noModelsReturnedFromEndpoint": "Aucun modèle renvoyé par le point de terminaison /models.", + "importingModelsProgress": "Importation de {current} des modèles {total}...", + "foundModelsStartingImport": "Modèles {count} trouvés. Démarrage de l'importation...", + "importingModelById": "Importation de {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} a été importé avec succès !", + "noNewModelsAddedExisting": "Aucun nouveau modèle n'a été ajouté (tous existent déjà).", + "importDoneCount": "✓ C'est fait ! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Une erreur inattendue s'est produite", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "messages", + "responsesPath": "réponses", + "chatCompletionsPath": "chat/achèvements", + "add": "Ajouter", + "edit": "Modifier", + "delete": "Supprimer", + "anthropic": "Anthropique", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Une seule connexion est autorisée par nœud compatible. Ajoutez un autre nœud si vous avez besoin de plus de connexions.", + "connections": "Connexions", + "providerProxyTitleConfigured": "Mandataire du fournisseur : {host}", + "configured": "configuré", + "providerProxyConfigureHint": "Configurer le proxy pour toutes les connexions de ce fournisseur", + "providerProxy": "Proxy du fournisseur", + "noConnectionsYet": "Aucune connexion pour l'instant", + "addFirstConnectionHint": "Ajoutez votre première connexion pour commencer", + "addConnection": "Ajouter une connexion", + "availableModels": "Modèles disponibles", + "pageAutoRefresh": "La page s'actualisera automatiquement...", + "statusDisabled": "désactivé", + "statusConnected": "connecté", + "statusRuntimeIssue": "problème d'exécution", + "statusAuthFailed": "l'authentification a échoué", + "statusRateLimited": "tarif limité", + "statusNetworkIssue": "problème de réseau", + "statusTestUnsupported": "test non pris en charge", + "statusUnavailable": "indisponible", + "statusFailed": "échoué", + "statusError": "erreur", + "oauthAccount": "Compte OAuth", + "errorTypeRuntime": "Exécution locale", + "errorTypeUpstreamAuth": "Authentification en amont", + "errorTypeMissingCredential": "Identifiant manquant", + "errorTypeRefreshFailed": "Échec de l'actualisation", + "errorTypeTokenExpired": "Jeton expiré", + "errorTypeRateLimited": "Tarif limité", + "errorTypeUpstreamUnavailable": "Amont indisponible", + "errorTypeNetworkError": "Erreur réseau", + "errorTypeTestUnsupported": "Test non pris en charge", + "errorTypeUpstreamError": "Erreur en amont", + "proxySourceGlobal": "Mondial", + "proxySourceProvider": "Fournisseur", + "proxySourceKey": "Clé", + "proxyConfiguredBySource": "Mandataire ({source}) : {host}", + "autoPriority": "Automatique : {priority}", + "proxy": "Procuration", + "retestAuthentication": "Retester l'authentification", + "retest": "Retester", + "disableConnection": "Désactiver la connexion", + "enableConnection": "Activer la connexion", + "reauthenticateConnection": "Réauthentifier cette connexion", + "proxyConfig": "Configuration du proxy", + "aliasExistsAlert": "L'alias \"{alias}\" existe déjà. Veuillez utiliser un modèle différent ou modifier l'alias existant.", + "openRouterAnyModelHint": "OpenRouter prend en charge n'importe quel modèle. Ajoutez des modèles et créez des alias pour un accès rapide.", + "modelIdFromOpenRouter": "ID du modèle (depuis OpenRouter)", + "openRouterModelPlaceholder": "anthropique/claude-3-opus", + "customModels": "Modèles personnalisés", + "customModelsHint": "Ajoutez des ID de modèle qui ne figurent pas dans la liste par défaut. Ceux-ci seront disponibles pour le routage.", + "modelId": "ID du modèle", + "customModelPlaceholder": "par ex. gpt-4.5-turbo", + "loading": "Chargement...", + "removeCustomModel": "Supprimer le modèle personnalisé", + "noCustomModels": "Aucun modèle personnalisé ajouté pour l'instant.", + "allSuggestedAliasesExist": "Tous les alias suggérés existent déjà. Veuillez choisir un autre modèle ou supprimer les alias conflictuels.", + "failedSaveCustomModel": "Échec de l'enregistrement du modèle personnalisé", + "modelAddedSuccess": "Modèle {modelId} ajouté avec succès", + "failedAddModelTryAgain": "Échec de l'ajout du modèle. Veuillez réessayer.", + "failedSaveImportedModel": "Échec de l'enregistrement du modèle importé dans la base de données personnalisée", + "failedImportModelsTryAgain": "Échec de l'importation des modèles. Veuillez réessayer.", + "failedRemoveModelFromDatabase": "Échec de la suppression du modèle de la base de données", + "modelRemovedSuccess": "Modèle supprimé avec succès", + "failedDeleteModelTryAgain": "Échec de la suppression du modèle. Veuillez réessayer.", + "compatibleModelsDescription": "Ajoutez manuellement des modèles compatibles {type} ou importez-les à partir du point de terminaison /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "La validation de la clé API a échoué. Veuillez vérifier votre clé et réessayer.", + "addProviderApiKeyTitle": "Ajouter la clé API {provider}", + "checking": "Vérification...", + "check": "Vérifier", + "valid": "Valide", + "invalid": "Invalide", + "creating": "Création...", + "validationChecksAnthropicCompatible": "La validation vérifie {provider} en vérifiant la clé API.", + "validationChecksOpenAiCompatible": "La validation vérifie {provider} via /models sur votre URL de base.", + "priorityLabel": "Priorité", + "saving": "Sauvegarde...", + "save": "Enregistrer", + "editConnection": "Modifier la connexion", + "accountName": "Nom du compte", + "email": "Courriel", + "healthCheckMinutes": "Bilan de santé (min)", + "healthCheckHint": "Intervalle d’actualisation proactif des jetons. 0 = désactivé.", + "failedTestConnection": "Échec du test de connexion", + "failed": "Échec", + "leaveBlankKeepCurrentApiKey": "Laissez vide pour conserver la clé API actuelle.", + "editCompatibleTitle": "Modifier {type} Compatible", + "compatibleBaseUrlHint": "Utilisez l'URL de base (se terminant par /v1) pour votre API compatible {type}.", + "apiKeyForCheck": "Clé API (pour vérification)", + "compatibleProdPlaceholder": "{type} Compatible (Prod)" + }, + "settings": { + "title": "Paramètres", + "general": "Général", + "security": "Sécurité", + "appearance": "Apparence", + "routing": "Routage", + "cache": "Cache", + "resilience": "Résilience", + "systemPrompt": "Invite système", + "thinkingBudget": "Penser le budget", + "proxy": "Procuration", + "pricing": "Tarifs", + "storage": "Stockage", + "policies": "Politiques", + "ipFilter": "Filtre IP", + "comboDefaults": "Valeurs par défaut des combos", + "fallbackChains": "Chaînes de secours", + "changePassword": "Changer le mot de passe", + "enablePassword": "Activer le mot de passe", + "darkMode": "Mode sombre", + "lightMode": "Mode lumière", + "systemTheme": "Thème système", + "enableCache": "Activer le cache", + "cacheTTL": "Durée de vie du cache", + "maxCacheSize": "Taille maximale du cache", + "clearCache": "Vider le cache", + "cacheHits": "Accès au cache", + "cacheMisses": "Manques de cache", + "hitRate": "Taux de réussite", + "cacheEntries": "Entrées du cache", + "circuitBreaker": "Disjoncteur", + "retryPolicy": "Politique de nouvelle tentative", + "maxRetries": "Nombre maximal de tentatives", + "retryDelay": "Délai de nouvelle tentative", + "timeoutMs": "Délai d'expiration (ms)", + "enableSystemPrompt": "Activer l'invite système", + "systemPromptText": "Texte d'invite du système", + "enableThinking": "Permettre la réflexion", + "maxThinkingTokens": "Jetons de réflexion maximum", + "enableProxy": "Activer le proxy", + "proxyUrl": "URL du proxy", + "pricingRates": "Format des tarifs", + "currentPricing": "Aperçu des prix actuels", + "loadingPricing": "Chargement des données de tarification...", + "noPricing": "Aucune donnée de prix disponible", + "input": "Entrée", + "output": "Sortie", + "cached": "En cache", + "reasoning": "Raisonnement", + "cacheCreation": "Création de cache", + "customPricing": "Tarification personnalisée", + "databaseSize": "Taille de la base de données", + "backupDb": "Base de données de sauvegarde", + "restoreDb": "Restaurer la base de données", + "exportData": "Exporter des données", + "importData": "Importer des données", + "clearData": "Effacer toutes les données", + "clearDataConfirm": "Cela supprimera définitivement toutes les données. Es-tu sûr?", + "enableRequestLogs": "Activer les journaux de demandes", + "logRetention": "Conservation des journaux", + "ipWhitelist": "Liste blanche IP", + "ipBlacklist": "Liste noire IP", + "addIP": "Ajouter une adresse IP", + "savedSuccessfully": "Paramètres enregistrés avec succès", + "ai": "IA", + "advanced": "Avancé", + "localMode": "Mode local — Toutes les données stockées sur votre machine", + "settingsSectionsAria": "Sections de paramètres", + "switchThemes": "Basculer entre les thèmes clairs et sombres", + "themeSelectionAria": "Sélection de thème", + "themeLight": "Lumière", + "themeDark": "Sombre", + "themeSystem": "Système", + "hideHealthLogs": "Masquer les journaux de contrôle de santé", + "hideHealthLogsDesc": "Lorsqu'il est activé, supprimez les messages [HealthCheck] dans la console du serveur", + "promptCache": "Cache d'invite", + "flushCache": "Vider le cache", + "flushing": "Rinçage…", + "size": "Taille", + "hits": "Clics", + "evictions": "Expulsions", + "loadingCacheStats": "Chargement des statistiques du cache…", + "globalProxy": "Proxy mondial", + "globalProxyDesc": "Configurez un proxy sortant global pour tous les appels d'API. Les fournisseurs individuels, les combos et les clés peuvent remplacer cela.", + "noGlobalProxy": "Aucun proxy global configuré", + "globalLabel": "Mondial", + "configure": "Configurer", + "globalSystemPrompt": "Invite système globale", + "systemPromptDesc": "Injecté dans toutes les requêtes au niveau du proxy", + "saved": "Enregistré", + "systemPromptPlaceholder": "Entrez l'invite du système pour injecter dans toutes les requêtes...", + "systemPromptHint": "Cette invite est ajoutée au message système de chaque demande. À utiliser pour les instructions globales, les consignes de sécurité ou les règles de formatage des réponses.", + "chars": "{count} caractères", + "thinkingBudgetTitle": "Penser le budget", + "thinkingBudgetDesc": "Contrôler l'utilisation des jetons de raisonnement IA pour toutes les requêtes", + "passthrough": "Passage", + "passthroughDesc": "Aucun changement — le client contrôle le budget en pensant", + "auto": "Automatique", + "autoDesc": "Supprimez toute configuration de réflexion - laissez le fournisseur décider", + "custom": "Personnalisé", + "customDesc": "Définir un budget de jetons fixe pour toutes les demandes", + "adaptive": "Adaptatif", + "adaptiveDesc": "Adaptez le budget en fonction de la complexité de la demande", + "effortNone": "Aucun (0 jeton)", + "effortLow": "Faible (1 000 jetons)", + "effortMedium": "Moyen (10 000 jetons)", + "effortHigh": "Élevé (128 000 jetons)", + "tokenBudget": "Budget des jetons", + "tokens": "jetons", + "baseEffortLevel": "Niveau d'effort de base", + "adaptiveHint": "Le mode adaptatif évolue à partir de ce niveau de base en fonction du nombre de messages, de l'utilisation des outils et de la longueur des invites.", + "requireLogin": "Exiger une connexion", + "requireLoginDesc": "Lorsqu'il est activé, le tableau de bord nécessite un mot de passe. Lorsqu'il est désactivé, accédez sans connexion.", + "currentPassword": "Mot de passe actuel", + "enterCurrentPassword": "Entrez le mot de passe actuel", + "newPassword": "Nouveau mot de passe", + "enterNewPassword": "Entrez le nouveau mot de passe", + "confirmPassword": "Confirmer le nouveau mot de passe", + "confirmPasswordPlaceholder": "Confirmer le nouveau mot de passe", + "passwordsNoMatch": "Les mots de passe ne correspondent pas", + "passwordUpdated": "Mot de passe mis à jour avec succès", + "failedUpdatePassword": "Échec de la mise à jour du mot de passe", + "errorOccurred": "Une erreur s'est produite", + "updatePassword": "Mettre à jour le mot de passe", + "setPassword": "Définir le mot de passe", + "apiEndpointProtection": "Protection des points de terminaison API", + "requireAuthModels": "Exiger une clé API pour /models", + "requireAuthModelsDesc": "Lorsqu'il est activé, le point de terminaison /v1/models renvoie 404 pour les demandes non authentifiées. Empêche la découverte de modèles par des utilisateurs non autorisés.", + "blockedProviders": "Fournisseurs bloqués", + "blockedProvidersDesc": "Masquez les fournisseurs spécifiques de la réponse /v1/models. Les fournisseurs bloqués n'apparaîtront pas dans les listes de modèles.", + "providersBlocked": "{count} fournisseur(s) bloqué(s) sur /models", + "blockProviderTitle": "Bloquer {provider}", + "unblockProviderTitle": "Débloquer {provider}", + "routingStrategy": "Stratégie de routage", + "fillFirst": "Remplir d'abord", + "fillFirstDesc": "Utiliser les comptes par ordre de priorité", + "roundRobin": "Tournoi à la ronde", + "roundRobinDesc": "Parcourez tous les comptes", + "p2c": "P2C", + "p2cDesc": "Choisissez-en 2 au hasard, utilisez le plus sain", + "random": "Aléatoire", + "randomDesc": "Compte aléatoire à chaque demande", + "leastUsed": "Le moins utilisé", + "leastUsedDesc": "Choisissez le compte le moins récemment utilisé", + "costOpt": "Option de coût", + "costOptDesc": "Préférer le compte disponible le moins cher", + "stickyLimit": "Limite collante", + "stickyLimitDesc": "Appels par compte avant de changer", + "modelAliases": "Alias de modèle", + "modelAliasesDesc": "Modèles génériques pour remapper les noms de modèles • Utilisez * et ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Modèle", + "targetModel": "Modèle cible", + "add": "+ Ajouter", + "session": "Séance", + "sessionDetailsAria": "Détails de la séance", + "status": "Statut", + "authenticated": "Authentifié", + "guest": "Invité", + "loginTime": "Heure de connexion", + "sessionAge": "Âge de la session", + "browser": "Navigateur", + "clearLocalData": "Effacer les données locales", + "logout": "Déconnexion", + "clearLocalDataConfirm": "Effacer toutes les données locales ? Cela réinitialisera vos préférences.", + "unknown": "Inconnu", + "systemActor": "système", + "ipAccessControl": "Contrôle d'accès IP", + "ipAccessControlDesc": "Bloquer ou autoriser des adresses IP spécifiques", + "ipModeDisabled": "Désactivé", + "ipModeBlacklist": "Liste noire", + "ipModeWhitelist": "Liste blanche", + "ipModeWhitelistPriority": "Priorité WL", + "addIpAddress": "Ajouter une adresse IP", + "ipAddressPlaceholder": "192.168.1.0/24 ou 10.0.*.*", + "block": "+ Bloquer", + "allow": "+ Autoriser", + "blocked": "Bloqué ({count})", + "allowed": "Autorisé ({count})", + "temporaryBans": "Interdictions temporaires ({count})", + "minLeft": "{min}m restant", + "auditLog": "Journal d'audit", + "searchAuditLogs": "Rechercher dans les journaux d'audit...", + "failedLoadAuditLog": "Échec du chargement du journal d'audit", + "noAuditEvents": "Aucun événement d'audit trouvé", + "action": "Action", + "actor": "Acteur", + "details": "Détails", + "time": "Temps", + "fallbackChainsTitle": "Chaînes de secours", + "fallbackChainsDesc": "Définir l'ordre de secours du fournisseur par modèle", + "addChain": "+ Ajouter une chaîne", + "modelName": "Nom du modèle", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Fournisseurs (séparés par des virgules, par ordre de priorité)", + "providersCommaSeparatedPlaceholder": "anthropique, openai, gémeaux", + "createChain": "Créer une chaîne", + "noFallbackChains": "Aucune chaîne de repli", + "noFallbackChainsDesc": "Créez une chaîne pour définir l'ordre de secours du fournisseur pour un modèle.", + "loadingFallbackChains": "Chargement des chaînes de secours...", + "deleteChainConfirm": "Supprimer la chaîne de secours pour « {model} » ?", + "chainCreated": "Chaîne créée pour {model}", + "chainDeleted": "Chaîne supprimée pour {model}", + "failedCreateChain": "Échec de la création de la chaîne", + "failedDeleteChain": "Échec de la suppression de la chaîne", + "deleteChain": "Supprimer la chaîne", + "fillModelAndProviders": "Veuillez remplir le nom du modèle et les fournisseurs", + "addAtLeastOneProvider": "Ajouter au moins un fournisseur", + "comboDefaultsTitle": "Valeurs par défaut des combos", + "globalComboConfig": "Configuration combinée globale", + "defaultStrategy": "Stratégie par défaut", + "defaultStrategyDesc": "Appliqué aux nouveaux combos sans stratégie explicite", + "comboStrategyAria": "Stratégie combinée", + "priority": "Priorité", + "weighted": "Pondéré", + "maxRetriesLabel": "Nombre maximal de tentatives", + "retryDelayLabel": "Délai de nouvelle tentative (ms)", + "timeoutLabel": "Délai d'expiration (ms)", + "healthCheck": "Bilan de santé", + "healthCheckDesc": "Pré-vérifier la disponibilité du fournisseur", + "trackMetrics": "Suivre les métriques", + "trackMetricsDesc": "Enregistrer les métriques de requête par combo", + "providerOverrides": "Remplacements du fournisseur", + "providerOverridesDesc": "Remplacez le délai d'attente et les tentatives par fournisseur. Les paramètres du fournisseur remplacent les valeurs par défaut globales.", + "providerMaxRetriesAria": "{provider} tentatives maximales", + "providerTimeoutAria": "{provider} délai d'expiration ms", + "removeProviderOverrideAria": "Supprimer le remplacement de {provider}", + "newProviderNamePlaceholder": "par ex. google, ouvre...", + "newProviderNameAria": "Nom du nouveau fournisseur", + "retries": "nouvelles tentatives", + "ms": "Mme", + "saveComboDefaults": "Enregistrer les valeurs par défaut du combo", + "maxNestingDepth": "Profondeur maximale d'emboîtement", + "concurrencyPerModel": "Concurrence / Modèle", + "queueTimeout": "Délai d'expiration de la file d'attente (ms)", + "providerProfiles": "Profils de fournisseurs", + "providerProfilesDesc": "Paramètres de résilience séparés pour les fournisseurs OAuth (basés sur la session) et API Key (mesurés). Les fournisseurs OAuth ont des seuils plus stricts en raison de limites de débit plus basses.", + "oauthProviders": "Fournisseurs OAuth", + "apiKeyProviders": "Fournisseurs de clés API", + "transientCooldown": "Temps de recharge transitoire", + "rateLimitCooldown": "Temps de recharge de la limite de débit", + "maxBackoffLevel": "Niveau d'attente maximum", + "cbThreshold": "Seuil CB", + "cbResetTime": "Temps de réinitialisation du CB", + "rateLimiting": "Limitation du débit", + "rateLimitingDesc": "Les fournisseurs de clés API sont automatiquement limités en débit avec des valeurs par défaut sûres. Les limites sont apprises à partir des en-têtes de réponse et s’adaptent au fil du temps.", + "defaultSafetyNet": "Filet de sécurité par défaut", + "rpm": "RPM", + "minGap": "Écart minimum", + "maxConcurrent": "Maximum simultané", + "activeLimiters": "Limiteurs actifs", + "noActiveLimiters": "Pas encore de limiteurs de débit actifs.", + "reservoir": "Réservoir", + "running": "Courir", + "queued": "En file d'attente", + "circuitBreakers": "Disjoncteurs", + "breakerStateClosed": "Fermé", + "breakerStateOpen": "Ouvert", + "breakerStateHalfOpen": "Mi-ouvert", + "tripped": "{count} déclenché", + "healthy": "{count} en bonne santé", + "resetAll": "Tout réinitialiser", + "noCircuitBreakers": "Aucun disjoncteur n'est encore actif. Ils sont créés automatiquement lorsque les demandes transitent par le pipeline combo.", + "failures": "{count} échec(s)", + "policiesLocked": "Politiques et identifiants verrouillés", + "allOperational": "Tous les systèmes opérationnels – pas de verrouillage ni de disjoncteur déclenché", + "loadingPolicies": "Chargement des politiques...", + "lockedIdentifiers": "Identifiants verrouillés", + "unlockedIdentifier": "Débloqué : {identifier}", + "sinceDate": "depuis {date}", + "forceUnlock": "Forcer le déverrouillage", + "unlocking": "Déverrouillage...", + "failedUnlock": "Échec du déverrouillage", + "failedLoadWithStatus": "Échec du chargement : {status}", + "failedLoadResilience": "Échec du chargement de l'état de résilience", + "saveFailed": "Échec de l'enregistrement", + "resetFailed": "Échec de la réinitialisation", + "loadingResilience": "Chargement de l'état de résilience...", + "retry": "Réessayer", + "systemStorage": "Système et stockage", + "allDataLocal": "Toutes les données stockées localement sur votre machine", + "databasePath": "Chemin de la base de données", + "exportDatabase": "Exporter la base de données", + "exportAll": "Exporter tout (.tar.gz)", + "importDatabase": "Importer la base de données", + "confirmDbImport": "Confirmer l'importation de la base de données", + "confirmDbImportDesc": "Cela remplacera toutes les données actuelles par le contenu de {file}. Une sauvegarde sera créée automatiquement avant l'importation.", + "yesImport": "Oui, importer", + "lastBackup": "Dernière sauvegarde", + "noBackupYet": "Pas encore de sauvegarde", + "backupNow": "Sauvegarder maintenant", + "backupRestore": "Sauvegarde et restauration", + "viewBackups": "Afficher les sauvegardes", + "hide": "Masquer", + "backupRetentionDesc": "Les instantanés de la base de données sont créés automatiquement avant la restauration et toutes les 15 minutes lorsque les données changent. Rétention : 24 heures sur 24 + 30 sauvegardes quotidiennes avec rotation intelligente.", + "loadingBackups": "Chargement des sauvegardes...", + "noBackupsYet": "Aucune sauvegarde disponible pour le moment. Les sauvegardes seront créées automatiquement lorsque les données changent.", + "backupsAvailable": "{count} sauvegarde(s) disponible(s)", + "refresh": "Actualiser", + "confirm": "Confirmer ?", + "yes": "Oui", + "no": "Non", + "restore": "Restaurer", + "invalidFileType": "Type de fichier invalide. Seuls les fichiers .sqlite sont acceptés.", + "exportFailed": "Échec de l'exportation", + "exportFailedWithError": "Échec de l'exportation : {error}", + "fullExportFailedWithError": "Échec de l'exportation complète : {error}", + "backupCreated": "Sauvegarde créée : {file}", + "restoreSuccess": "Restauré ! Connexions {connections}, nœuds {nodes}, combos {combos}, clés API {apiKeys}.", + "importSuccess": "Base de données importée ! Connexions {connections}, nœuds {nodes}, combos {combos}, clés API {apiKeys}.", + "justNow": "juste maintenant", + "minutesAgo": "il y a {count}m", + "hoursAgo": "il y a {count}h", + "daysAgo": "Il y a {count}j", + "backupReasonManual": "manuel", + "backupReasonPreRestore": "pré-restauration", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Aucun changement depuis la dernière sauvegarde", + "backupFailed": "La sauvegarde a échoué", + "restoreFailed": "La restauration a échoué", + "importFailed": "Échec de l'importation", + "errorDuringRestore": "Une erreur s'est produite lors de la restauration", + "errorDuringImport": "Une erreur s'est produite lors de l'importation", + "modelPricing": "Prix ​​du modèle", + "modelPricingDesc": "Configurer les tarifs par modèle • Tous les tarifs en jetons $/1 M", + "providers": "Fournisseurs", + "registry": "Registre", + "priced": "Prix", + "searchProvidersModels": "Rechercher des fournisseurs ou des modèles...", + "showAll": "Afficher tout", + "noProvidersMatch": "Aucun fournisseur ne correspond à votre recherche.", + "howPricingWorks": "Comment fonctionne la tarification", + "cacheWrite": "Écriture du cache", + "unsaved": "non enregistré", + "resetDefaults": "Réinitialiser les paramètres par défaut", + "saveProvider": "Enregistrer le fournisseur", + "saving": "Sauvegarde...", + "model": "Modèle", + "models": "modèles", + "moreProviders": "{count} autres fournisseurs", + "withPricing": "avec tarification configurée", + "policiesCircuitBreakers": "Politiques et disjoncteurs", + "activeIssuesDetected": "Problèmes actifs détectés", + "off": "Désactivé", + "resetPricingConfirm": "Réinitialiser tous les prix de {provider} aux valeurs par défaut ?", + "pricingDescInput": "Entrée : jetons envoyés au modèle", + "pricingDescOutput": "Sortie : jetons générés", + "pricingDescCached": "En cache : entrée réutilisée (~ 50 % du taux d'entrée)", + "pricingDescReasoning": "Raisonnement : penser aux jetons (revient à la sortie)", + "pricingDescCacheWrite": "Cache Write : création d'entrées de cache (revient à Input)", + "pricingDescFormula": "Coût = (entrée × input_rate) + (output × output_rate) + (mis en cache × cached_rate) par million de jetons.", + "pricingSettingsTitle": "Paramètres de tarification", + "totalModels": "Total des modèles", + "active": "Actif", + "costCalculation": "Calcul du coût", + "costCalculationDesc": "Les coûts sont calculés en fonction de l'utilisation des jetons et des tarifs configurés pour chaque modèle.", + "pricingFormat": "Format de tarification", + "pricingFormatDesc": "Tous les tarifs sont en jetons $/1M (dollars par million de jetons).", + "tokenTypes": "Types de jetons", + "inputTokenDesc": "Jetons d'invite standard", + "outputTokenDesc": "Jetons d'achèvement/réponse", + "cachedTokenDesc": "Jetons d'entrée mis en cache (généralement 50 % du taux d'entrée)", + "reasoningTokenDesc": "Jetons de raisonnement/réflexion spéciaux (repli au taux de sortie)", + "cacheCreationTokenDesc": "Jetons utilisés pour créer des entrées de cache (repli sur le débit d'entrée)", + "customPricingNote": "Vous pouvez remplacer le prix par défaut pour des modèles spécifiques. Les remplacements personnalisés ont la priorité sur les prix détectés automatiquement.", + "editPricing": "Modifier le prix", + "viewFullDetails": "Afficher tous les détails" + }, + "translator": { + "title": "Traducteur", + "metaTitle": "Aire de jeux pour traducteurs | OmniRoute", + "metaDescription": "Déboguer, tester et visualiser les traductions au format API entre les fournisseurs", + "playgroundTitle": "Terrain de jeu des traducteurs", + "playground": "Aire de jeux", + "realtime": "Activité de traduction en temps réel", + "chatTester": "Testeur de chat", + "testBench": "Banc d'essai", + "liveMonitor": "Moniteur en direct", + "modeDescriptionPlayground": "Collez n'importe quel corps de requête d'API et voyez comment OmniRoute le traduit entre les formats de fournisseur (OpenAI ↔ Claude ↔ Gemini ↔ API Responses)", + "modeDescriptionChatTester": "Envoyez de vraies demandes de chat via OmniRoute et inspectez l'aller-retour complet : entrée, demande traduite, réponse du fournisseur et sortie traduite.", + "modeDescriptionTestBench": "Exécutez des scénarios prédéfinis et comparez la compatibilité entre les fournisseurs et les modèles.", + "modeDescriptionLiveMonitor": "Regardez les événements de traduction en temps réel à mesure que les demandes transitent par OmniRoute.", + "modeDescriptionFallback": "Déboguez, testez et visualisez comment OmniRoute traduit les requêtes API entre les fournisseurs.", + "recentTranslations": "Traductions récentes", + "noTranslations": "Pas encore de traductions", + "source": "Source", + "target": "Cible", + "time": "Temps", + "model": "Modèle", + "status": "Statut", + "latency": "Latence", + "totalTranslations": "Traductions totales", + "successful": "Réussi", + "errors": "Erreurs", + "avgLatency": "Latence moyenne", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "En direct – Actualisation automatique", + "paused": "En pause", + "eventsAppearHint": "Les événements de traduction apparaissent ici à mesure que les demandes transitent par OmniRoute. Utilisez l'une de ces méthodes pour générer des événements :", + "chatTesterTab": "Onglet Testeur de chat", + "testBenchTab": "Onglet Banc de Test", + "externalApiCalls": "Appels d'API externes", + "ideCliIntegrations": "Intégrations IDE/CLI", + "inMemoryNote": "Remarque : Les événements sont stockés en mémoire et réinitialisés au redémarrage du serveur.", + "ok": "D'accord", + "errorShort": "ERREUR", + "formatConverter": "Convertisseur de formats", + "formatConverterDescription": "Collez ou saisissez un corps de requête JSON. Le traducteur détectera automatiquement le format source et le convertira au format cible. Utilisez-le pour déboguer la façon dont OmniRoute traduit les requêtes entre les formats (OpenAI ↔ Claude ↔ Gemini ↔ API Responses).", + "input": "Entrée", + "output": "Sortie", + "auto": "Automatique", + "swapFormats": "Changer de format", + "translateAction": "Traduire", + "clear": "Effacer", + "inputPlaceholder": "Collez le corps d'une demande ici ou sélectionnez un modèle ci-dessous...", + "exampleTemplates": "Exemples de modèles", + "exampleTemplatesHint": "— Cliquez pour charger", + "templateLoadHint": "Le modèle charge la requête au format {format}. Modifiez le format source pour charger dans un format différent.", + "compatibilityTester": "Testeur de compatibilité", + "compatibilityReport": "Rapport de compatibilité", + "testBenchDescription": "Exécutez des scénarios prédéfinis (Simple Chat, Tool Calling, etc.) pour vérifier la traduction et la compatibilité des fournisseurs. Sélectionnez un format source et un fournisseur cible, puis exécutez tous les tests pour voir un pourcentage de compatibilité. Utilisez-le pour découvrir les fonctionnalités qui fonctionnent entre les fournisseurs.", + "targetProvider": "Fournisseur cible", + "runAllTests": "Exécuter tous les tests", + "runTest": "Exécuter le test", + "reRun": "Réexécuter", + "running": "Courir...", + "passed": "réussi", + "failed": "échoué", + "passedIconLabel": "✅ Réussi", + "chunks": "morceaux", + "scenarioSimpleChat": "Discussion simple", + "scenarioToolCalling": "Appel d'outil", + "scenarioMultiTurn": "Multi-tours", + "scenarioThinking": "Penser", + "scenarioSystemPrompt": "Invite système", + "scenarioStreaming": "Diffusion en continu", + "templateNames": { + "simple-chat": "Discussion simple", + "tool-calling": "Appel d'outil", + "multi-turn": "Multi-tours", + "thinking": "Penser", + "system-prompt": "Invite système", + "streaming": "Diffusion en continu" + }, + "templateDescriptions": { + "simple-chat": "Message texte de base", + "tool-calling": "Invocation de fonction/outil", + "multi-turn": "Conversation avec l'histoire", + "thinking": "Pensée/raisonnement étendu", + "system-prompt": "Instructions système complexes", + "streaming": "Demande de streaming SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Vous êtes un assistant utile.", + "userGreeting": "Bonjour ! Comment allez-vous aujourd'hui?" + }, + "toolCalling": { + "userWeather": "Quel temps fait-il à São Paulo ?", + "toolDescription": "Obtenir la météo actuelle pour un emplacement", + "cityNameDescription": "Nom de la ville" + }, + "multiTurn": { + "system": "Vous êtes assistant de codage.", + "userInitial": "Écrivez une fonction pour trier un tableau en Python.", + "assistantExample": "Voici une fonction de tri simple :\n\n```python\ndef sort_array(arr):\n retour trié (arr)\n```", + "userFollowUp": "Maintenant, faites-le trier par ordre décroissant." + }, + "thinking": { + "question": "Quelle est la somme des 100 premiers nombres premiers ?" + }, + "systemPrompt": { + "systemInstruction": "Vous êtes un ingénieur logiciel senior spécialisé dans les systèmes distribués. Répondez aux questions de manière concise en utilisant les meilleures pratiques de l’industrie. Fournissez toujours des exemples de code lorsque cela est pertinent. Formatez vos réponses en utilisant le markdown.", + "question": "Comment mettre en œuvre un modèle de disjoncteur ?" + }, + "streaming": { + "prompt": "Racontez-moi une courte histoire sur un robot qui apprend à peindre." + } + }, + "openaiCompatibleLabel": "Compatible avec OpenAI", + "anthropicCompatibleLabel": "Compatible anthropique", + "noTemplateForFormat": "Aucun modèle pour ce format", + "translationFailed": "Échec de la traduction : {error}", + "pipelineDebugger": "Débogueur de pipeline", + "translationPipeline": "Pipeline de traduction", + "pipelineVisualization": "Visualisation des pipelines", + "pipelineVisualizationHint": "Envoyez un message pour voir comment votre demande passe par la détection → traduction → appel du fournisseur.", + "chatTesterDescription": "Envoyez des messages dans un format client spécifique et inspectez chaque étape du pipeline de traduction.", + "chatTesterFlow": "Demande client → Détection de format → OpenAI Intermédiaire → Format du fournisseur → Réponse", + "clickStepToInspect": "Cliquez sur n’importe quelle étape pour inspecter les données à ce stade.", + "clientFormat": "Format client", + "provider": "Fournisseur", + "modelPlaceholder": "Sélectionnez ou saisissez un nom de modèle...", + "sendMessageToSeePipeline": "Envoyez un message pour voir le pipeline de traduction", + "chatMessageHintPrefix": "Votre message sera formaté comme un", + "chatMessageHintSuffix": "demande, traduite via le pipeline et envoyée au fournisseur sélectionné.", + "youWithFormat": "Vous ({format})", + "assistant": "Assistante", + "typeMessage": "Tapez un message...", + "send": "Envoyer", + "clientRequest": "Demande du client", + "clientRequestDescription": "Le corps de la requête tel que votre client l'enverrait", + "formatDetected": "Format détecté", + "formatDetectedDescription": "OmniRoute détecte automatiquement le format de l'API à partir de la structure de la demande", + "openaiIntermediate": "Intermédiaire OpenAI", + "openaiIntermediateDescription": "Tous les formats sont d'abord normalisés au format OpenAI (le pont universel)", + "providerFormat": "Format du fournisseur", + "providerFormatDescription": "Le format OpenAI est traduit au format natif du fournisseur", + "providerResponse": "Réponse du fournisseur", + "providerResponseRawDescription": "La réponse brute de l'API du fournisseur", + "providerResponseSseDescription": "Le flux SSE brut de l'API du fournisseur", + "unexpectedError": "Une erreur inattendue s'est produite", + "error": "Erreur", + "errorMessage": "Erreur : {message}", + "requestFailed": "La demande a échoué", + "noTextExtracted": "(Aucun texte extrait)", + "liveMonitorDescriptionPrefix": "Affiche les événements de traduction lorsque les appels d'API transitent par OmniRoute. Les événements proviennent du tampon en mémoire (réinitialisation au redémarrage). Utiliser", + "liveMonitorDescriptionSuffix": ", ou des appels d'API externes pour générer des événements." + }, + "usage": { + "title": "Utilisation", + "loggerTab": "Enregistreur", + "proxyTab": "Procuration", + "budgetManagement": "Gestion budgétaire", + "budgetSaved": "Limites budgétaires enregistrées", + "budgetSaveFailed": "Échec de la sauvegarde du budget", + "loadingBudgetData": "Chargement des données budgétaires...", + "noApiKeysTitle": "Aucune clé API", + "noApiKeysDescription": "Ajoutez d'abord des clés API pour définir des limites budgétaires.", + "apiKey": "Clé API", + "todaysSpend": "Dépenses du jour", + "thisMonth": "Ce mois-ci", + "setLimits": "Fixer des limites", + "dailyLimitUsd": "Limite quotidienne (USD)", + "monthlyLimitUsd": "Limite mensuelle (USD)", + "warningThresholdPercent": "Seuil d'avertissement (%)", + "dailyLimitPlaceholder": "par ex. 5h00", + "monthlyLimitPlaceholder": "par ex. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Enregistrer les limites", + "budgetOk": "Budget OK — {remaining} restant", + "budgetExceeded": "Budget dépassé : les demandes peuvent être bloquées", + "totalRequests": "Total des demandes", + "noDataYet": "Aucune donnée pour l'instant", + "latency": "Latence", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Cache d'invite", + "systemHealth": "Santé du système", + "entries": "Entrées", + "activeCount": "{count} actif", + "openCircuitBreakersDetected": "Disjoncteurs ouverts détectés", + "hitRate": "Taux de réussite", + "hitsMisses": "Coups réussis / Manqués", + "circuitBreakers": "Disjoncteurs", + "lockedIPs": "IP verrouillées", + "lockoutsAutoRefreshHint": "Verrouillage de la limite de débit par modèle • Actualisation automatique toutes les 10 s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} restant", + "howItWorks": "Comment ça marche", + "howItWorksSubtitle": "Découvrez comment les évaluations valident vos réponses LLM", + "define": "Définir", + "defineStepDescription": "Créez des scénarios de test avec des invites de saisie et des critères de sortie attendus à l'aide de stratégies telles que le contenu, l'expression régulière ou la correspondance exacte.", + "run": "Courir", + "runStepDescription": "Exécutez des cas de test sur vos points de terminaison LLM via OmniRoute. Chaque cas est envoyé comme une véritable requête API.", + "evaluate": "Évaluer", + "evaluateStepDescription": "Les réponses sont comparées aux critères attendus. Voir réussite/échec pour chaque cas avec des mesures de latence et des commentaires détaillés.", + "evalSuites": "Suites d'évaluation", + "evalSuitesHint": "Cliquez sur une suite pour afficher les cas de test, puis exécutez-la pour évaluer vos points de terminaison LLM.", + "evalsLoading": "Chargement des suites d'évaluation...", + "noEvalSuitesFound": "Aucune suite d'évaluation trouvée", + "noEvalSuitesDescription": "Les suites d'évaluation peuvent être définies via l'API ou dans le code. Ils testent les sorties du modèle par rapport aux résultats attendus à l'aide de stratégies telles que le contenu, l'expression régulière, la correspondance exacte et les fonctions personnalisées.", + "columnCase": "Cas", + "columnStatus": "Statut", + "columnLatency": "Latence", + "columnDetails": "Détails", + "columnModel": "Modèle", + "columnStrategy": "Stratégie", + "columnExpected": "Attendu", + "statsSuites": "Suites", + "statsTestCases": "Cas de test", + "statsModels": "Modèles", + "statsCoverage": "Couverture", + "statsStrategiesCount": "Stratégies {count}", + "evaluationStrategies": "Stratégies d'évaluation", + "modelsUnderTest": "Modèles en test", + "searchSuitesPlaceholder": "Rechercher des suites...", + "passSuffix": "passer", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Exécuter l'évaluation", + "runningProgress": "Exécution de {current}/{total}...", + "passRate": "taux de réussite", + "summaryBreakdown": "{passed} réussi · {failed} échoué · {total} total", + "passedIconLabel": "✅ Réussi", + "failedIconLabel": "❌ Échec", + "detailsContains": "Contient : \"{term}\"", + "detailsRegex": "Expression régulière : {pattern}", + "detailsExpected": "Attendu : \"{expected}\"", + "noResultsYet": "Aucun résultat pour l'instant", + "testCasesCount": "Cas de test ({count})", + "noTestCasesDefined": "Aucun cas de test défini", + "runEvalHint": "Cliquez sur « Exécuter l'évaluation » pour exécuter tous les cas sur votre point de terminaison LLM. Chaque test envoie une requête réelle via OmniRoute.", + "notifyNoTestCases": "Aucun cas de test défini pour cette suite", + "notifyAllCasesPassed": "Tous les {total} cas ont été réussis ✅", + "notifySomeCasesFailed": "{passed}/{total} réussi, {failed} échoué", + "notifyEvalRunFailed": "Échec de l'exécution de l'évaluation", + "notifyEvalTitle": "Évaluation : {name}", + "modelEvals": "Évaluations de modèles", + "evalsHeroDescription": "Testez et validez vos points de terminaison LLM en exécutant des suites d'évaluation prédéfinies. Chaque suite contient des cas de test qui envoient des invites réelles via OmniRoute et comparent les réponses aux critères attendus, vous aidant ainsi à détecter les régressions, à comparer les modèles et à garantir la qualité des réponses entre les fournisseurs.", + "qualityValidation": "Validation de la qualité", + "modelComparison": "Comparaison des modèles", + "regressionDetection": "Détection de régression", + "latencyBenchmarks": "Benchmarks de latence", + "modelLockouts": "Modèles de verrouillage", + "noLockouts": "Aucun modèle actuellement verrouillé", + "activeSessions": "Séances actives", + "noSessions": "Aucune session active", + "sessionsHint": "Les sessions apparaissent au fur et à mesure que les demandes transitent par le proxy", + "sessionsTrackedHint": "Suivi via une demande d'empreinte digitale • Actualisation automatique 5 s", + "session": "Séance", + "age": "Âge", + "requests": "Demandes", + "connection": "Connexion", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limites du fournisseur", + "noProviders": "Aucun fournisseur connecté", + "connectProvidersForQuota": "Connectez-vous aux fournisseurs avec OAuth pour suivre les limites de quota et l'utilisation de vos API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtré à partir de {count})", + "autoRefresh": "Actualisation automatique", + "refreshAll": "Actualiser tout", + "loadingQuotas": "Chargement...", + "account": "Compte", + "modelQuotas": "Quotas de modèles", + "lastUsed": "Dernière utilisation", + "actions": "Actions", + "refreshQuota": "Actualiser le quota", + "today": "Aujourd'hui", + "tomorrow": "Demain", + "dayTimeFormat": "{day}, {time}", + "inDuration": "dans {duration}", + "notApplicable": "N/D", + "rawPlanWithValue": "Plan brut : {plan}", + "noPlanFromProvider": "Aucun plan du fournisseur", + "noQuotaData": "Aucune donnée de quota", + "noQuotaDataAvailable": "Aucune donnée de quota disponible", + "noAccountsForTierFilter": "Aucun compte trouvé pour le filtre de niveau", + "tierAll": "Tout", + "tierEnterprise": "Entreprise", + "tierTeam": "Équipe", + "tierBusiness": "Affaires", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Plus", + "tierFree": "Gratuit", + "tierUnknown": "Inconnu" + }, + "modals": { + "waitingAuth": "En attente d'autorisation", + "verificationUrl": "URL de vérification", + "yourCode": "Votre code", + "remoteAccess": "Accès à distance :", + "connectedSuccess": "Connecté avec succès !", + "connectionFailed": "Échec de la connexion", + "chooseAuthMethod": "Choisissez votre méthode d'authentification :", + "awsBuilderId": "ID du constructeur AWS", + "awsIamIdentity": "Centre d'identité AWS IAM", + "googleAccount": "Compte Google", + "githubAccount": "Compte GitHub", + "importToken": "Jeton d'importation", + "pasteToken": "Collez le jeton d'actualisation de Kiro IDE.", + "awsRegion": "Région AWS", + "autoDetecting": "Jetons à détection automatique...", + "readingFromCache": "Lecture à partir du cache AWS SSO", + "readingFromCursor": "Lecture à partir de la base de données Cursor IDE", + "initializing": "Initialisation...", + "pricingConfig": "Configuration des prix", + "loadingPricing": "Chargement des données de tarification...", + "pricingRatesFormat": "Format des tarifs", + "noPricingData": "Aucune donnée de prix disponible", + "noModelsFound": "Aucun modèle trouvé" + }, + "loggers": { + "allProviders": "Tous les fournisseurs", + "allModels": "Tous les modèles", + "allAccounts": "Tous les comptes", + "allApiKeys": "Toutes les clés API", + "allTypes": "Tous types", + "allLevels": "Tous les niveaux", + "modelAZ": "Modèle A-Z", + "modelZA": "Modèle ZA", + "loadingLogs": "Chargement des journaux...", + "loadingProxyLogs": "Chargement des journaux proxy...", + "noLogEntries": "Aucune entrée de journal trouvée", + "noPayloadData": "Aucune donnée utile disponible pour cette entrée de journal.", + "proxyEvent": "Événement proxy", + "proxy": "Procuration", + "level": "Niveau", + "directNative": "Direct (natif)", + "combo": "Combo", + "inputTokens": "Moi :", + "outputTokens": "O :" + }, + "stats": { + "usageOverview": "Aperçu de l'utilisation", + "outputTokens": "Jetons de sortie", + "totalCost": "Coût total", + "usageByModel": "Utilisation par modèle", + "usageByAccount": "Utilisation par compte", + "failedToLoad": "Échec du chargement des statistiques d'utilisation.", + "tokenHealth": "Santé du jeton", + "totalOAuth": "OAuth total", + "healthy": "Sain", + "warning": "Avertissement", + "errored": "Erreur", + "lastCheck": "Dernière vérification", + "noData": "Aucune donnée", + "share": "Partager", + "unableToLoad": "Impossible de charger les métriques du système", + "product": "Produit", + "resources": "Ressources", + "company": "Entreprise" + }, + "auth": { + "welcome": "Bienvenue", + "signIn": "Connectez-vous", + "enterPassword": "Entrez votre mot de passe pour continuer", + "password": "Mot de passe", + "unifiedProxy": "Proxy API IA unifié", + "unifiedAiApiProxy": "Proxy API IA unifié", + "unifiedAiApiProxyDesc": "Acheminez les requêtes vers plusieurs fournisseurs d’IA via un seul point de terminaison. Équilibrage de charge, basculement et suivi de l'utilisation intégrés.", + "passwordNotEnabled": "La protection par mot de passe n'est pas activée", + "loading": "Chargement...", + "invalidPassword": "Mot de passe invalide", + "errorOccurredRetry": "Une erreur s'est produite. Veuillez réessayer.", + "configureInstance": "Configureons votre instance OmniRoute", + "runOnboardingWizard": "Exécutez l'assistant d'onboarding pour configurer votre mot de passe et connecter votre premier fournisseur d'IA.", + "startOnboarding": "Commencer l'intégration", + "secureYourInstance": "Sécurisez votre instance", + "setPasswordDescription": "Définissez un mot de passe pour protéger votre tableau de bord et sécuriser vos points de terminaison d'API contre tout accès non autorisé.", + "configurePassword": "Configurer le mot de passe", + "continue": "Continuer", + "windowWillClose": "Cette fenêtre se fermera automatiquement...", + "closeTabNow": "Vous pouvez fermer cet onglet maintenant.", + "copyUrlManual": "Copiez l'URL depuis la barre d'adresse et collez-la dans l'application.", + "accessDeniedDescription": "Vous n'êtes pas autorisé à accéder à cette ressource. Vérifiez votre clé API ou contactez l'administrateur.", + "goToDashboard": "Aller au tableau de bord", + "featureMultiProviderTitle": "Multi-fournisseur", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google et plus", + "featureLoadBalancingTitle": "Équilibrage de charge", + "featureLoadBalancingDesc": "Distribuez intelligemment les demandes", + "featureUsageTrackingTitle": "Suivi de l'utilisation", + "featureUsageTrackingDesc": "Surveiller les coûts et les jetons", + "resetPassword": "Réinitialiser le mot de passe", + "resetDescription": "Choisissez une méthode pour récupérer l'accès à votre tableau de bord", + "stopServer": "Arrêtez le serveur OmniRoute", + "processing": "Traitement...", + "pleaseWait": "Veuillez patienter pendant que nous finalisons l'autorisation.", + "authSuccess": "Autorisation réussie !", + "copyUrl": "Copiez cette URL", + "accessDenied": "Accès refusé", + "methodCliTitle": "Méthode 1 : réinitialisation de la CLI", + "methodCliDescription": "Exécutez la commande suivante sur le serveur sur lequel OmniRoute est exécuté :", + "methodCliHint": "Cela vous demandera de définir un nouveau mot de passe. Le serveur doit d'abord être arrêté.", + "methodManualTitle": "Méthode 2 : réinitialisation manuelle", + "methodManualDescription": "Supprimez le mot de passe de la base de données et définissez-en un nouveau au démarrage :", + "setPasswordInYour": "Définissez un nouveau mot de passe dans votre", + "fileLabelSuffix": "fichier :", + "newPasswordPlaceholder": "votre_nouveau_mot_de_passe", + "deleteSettingsFile": "Supprimer", + "orRemovePasswordHashField": "ou supprimez le champ passwordHash", + "restartServerWithNewPassword": "Redémarrez le serveur - il utilisera le nouveau mot de passe", + "backToLogin": "Retour à la connexion", + "forgotPassword": "Mot de passe oublié ?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Accédez à la maison", + "toggleMenu": "Changer de menu", + "featuresLink": "Caractéristiques", + "docsLink": "Documents", + "github": "GitHub", + "versionLive": "La v1.0 est maintenant disponible", + "oneEndpoint": "Un point de terminaison pour", + "allProviders": "Tous les fournisseurs d'IA", + "heroDescription": "Proxy de point de terminaison IA avec tableau de bord Web : un port JavaScript de CLIProxyAPI. Fonctionne de manière transparente avec Claude Code, OpenAI Codex, Cline, RooCode et d'autres outils CLI.", + "getStarted": "Commencer", + "viewOnGithub": "Voir sur GitHub", + "powerfulFeatures": "Fonctionnalités puissantes", + "featuresSubtitle": "Tout ce dont vous avez besoin pour gérer votre infrastructure d'IA en un seul endroit, conçu pour évoluer.", + "featureUnifiedEndpointTitle": "Point de terminaison unifié", + "featureUnifiedEndpointDesc": "Accédez à tous les fournisseurs via une seule URL API standard.", + "featureEasySetupTitle": "Installation facile", + "featureEasySetupDesc": "Soyez opérationnel en quelques minutes avec la commande npx.", + "featureModelFallbackTitle": "Modèle de secours", + "featureModelFallbackDesc": "Changez automatiquement de fournisseur en cas de panne ou de latence élevée.", + "featureUsageTrackingTitle": "Suivi de l'utilisation", + "featureUsageTrackingDesc": "Analyses détaillées et surveillance des coûts sur tous les modèles.", + "featureOAuthApiKeysTitle": "Clés OAuth et API", + "featureOAuthApiKeysDesc": "Gérez en toute sécurité les informations d’identification dans un seul coffre-fort.", + "featureCloudSyncTitle": "Synchronisation dans le cloud", + "featureCloudSyncDesc": "Synchronisez instantanément vos configurations sur tous les appareils.", + "featureCliSupportTitle": "Prise en charge de l'interface CLI", + "featureCliSupportDesc": "Fonctionne avec Claude Code, Codex, Cline, Cursor et plus encore.", + "featureDashboardTitle": "Tableau de bord", + "featureDashboardDesc": "Tableau de bord visuel pour une analyse du trafic en temps réel.", + "howItWorks": "Comment fonctionne OmniRoute", + "howItWorksDescription": "Les données circulent de manière transparente depuis votre application via notre couche de routage intelligente jusqu'au meilleur fournisseur pour le travail.", + "howItWorksStep1Title": "1. CLI et SDK", + "howItWorksStep1Description": "Vos demandes partent de vos outils préférés ou de notre SDK unifié. Changez simplement l'URL de base.", + "howItWorksStep2Title": "2. Centre OmniRoute", + "howItWorksStep2Description": "Notre moteur analyse l'invite, vérifie l'état du fournisseur et trace les itinéraires pour obtenir la latence ou le coût le plus faible.", + "howItWorksStep3Title": "3. Fournisseurs d'IA", + "howItWorksStep3Description": "La demande est satisfaite instantanément par OpenAI, Anthropic, Gemini ou autres.", + "getStartedIn30Seconds": "Commencez en 30 secondes", + "getStartedDescription": "Installez OmniRoute, configurez vos fournisseurs via le tableau de bord Web et commencez à acheminer les demandes d'IA.", + "installOmniRoute": "Installer OmniRoute", + "installStepDescription": "Exécutez la commande npx pour démarrer le serveur instantanément", + "openDashboard": "Ouvrir le tableau de bord", + "openDashboardStepDescription": "Configurer les fournisseurs et les clés API via l'interface Web", + "routeRequests": "Demandes d'itinéraire", + "routeRequestsStepDescription": "Pointez vos outils CLI vers {endpoint}", + "terminal": "borne", + "copy": "Copier", + "copied": "✓ Copié", + "startingOmniRoute": "Démarrage d'OmniRoute...", + "serverRunningOnLabel": "Serveur fonctionnant sur", + "dashboardLabel": "Tableau de bord", + "readyToRoute": "Prêt à rouler ! ✓", + "configureProvidersNote": "📝 Configurez les fournisseurs dans le tableau de bord ou utilisez des variables d'environnement", + "dataLocation": "Emplacement des données :", + "dataLocationMacLinux": " macOS/Linux :", + "dataLocationWindows": " Fenêtres :", + "product": "Produit", + "dashboardLink": "Tableau de bord", + "changelog": "Journal des modifications", + "resources": "Ressources", + "documentation": "Documentation", + "npm": "MNP", + "legal": "Juridique", + "mitLicense": "Licence MIT", + "footerTagline": "Le point de terminaison unifié pour la génération d’IA. Connectez, acheminez et gérez vos fournisseurs d'IA en toute simplicité.", + "copyright": "© {year} OmniRoute. Tous droits réservés.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "Codex OpenAI", + "flowToolCline": "Clin", + "flowToolCursor": "Curseur", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Anthropique", + "flowProviderGemini": "Gémeaux", + "flowProviderGithubCopilot": "Copilote GitHub", + "interactiveDiagram": "Diagramme interactif visible sur le bureau", + "ctaTitle": "Prêt à simplifier votre infrastructure d'IA ?", + "ctaDescription": "Rejoignez les développeurs qui rationalisent leurs intégrations d'IA avec OmniRoute. Open source et démarrage gratuit.", + "startFree": "Commencez gratuitement", + "readDocumentation": "Lire la documentation" + }, + "docs": { + "title": "Documentation", + "quickStart": "Démarrage rapide", + "features": "Caractéristiques", + "supportedProviders": "Fournisseurs pris en charge", + "supportedProvidersToc": "Fournisseurs", + "commonUseCases": "Cas d'utilisation courants", + "clientCompatibility": "Compatibilité client", + "apiReference": "Référence API", + "method": "Méthode", + "path": "Chemin", + "notes": "Remarques", + "modelPrefixes": "Préfixes de modèle", + "prefix": "Préfixe", + "troubleshooting": "Dépannage", + "supportsChat": "Prend en charge les points de terminaison de chat et de réponses.", + "oauthAutoRefresh": "Connexion OAuth avec actualisation automatique des jetons.", + "fullStreaming": "Prise en charge complète du streaming pour tous les modèles.", + "docsLabel": "Documents", + "docsHeroDescription": "Passerelle IA pour les LLM multi-fournisseurs. Un point de terminaison pour OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor et plus de 20 autres fournisseurs.", + "openDashboard": "Ouvrir le tableau de bord", + "endpointPage": "Page de point de terminaison", + "github": "GitHub", + "reportIssue": "Signaler un problème", + "onThisPage": "Sur cette page", + "documentationVersion": "Documentation-v{version}", + "quickStartStep1Title": "1. Installez et exécutez", + "quickStartStep1Prefix": "Courir", + "quickStartStep1Middle": "ou clonez depuis GitHub et exécutez", + "quickStartStep2Title": "2. Créer une clé API", + "quickStartStep2Text": "Accédez à Endpoint -> Clés enregistrées. Générez une clé par environnement.", + "quickStartStep3Title": "3. Connectez les fournisseurs", + "quickStartStep3Text": "Ajoutez des comptes de fournisseur via une connexion OAuth, une clé API ou une connexion automatique de niveau gratuit.", + "quickStartStep4Title": "4. Définir l'URL de la base de clients", + "quickStartStep4Prefix": "Pointez votre client IDE ou API vers", + "quickStartStep4Suffix": "Utilisez le préfixe du fournisseur, par exemple", + "featureRoutingTitle": "Routage multi-fournisseurs", + "featureRoutingText": "Acheminez les requêtes vers plus de 30 fournisseurs d’IA via un seul point de terminaison compatible OpenAI. Prend en charge les API de chat, de réponses, d'audio et d'image.", + "featureCombosTitle": "Combos et équilibrage", + "featureCombosText": "Créez des combinaisons de modèles avec des chaînes de secours et des stratégies d'équilibrage : round-robin, priorité, aléatoire, moins utilisé et coût optimisé.", + "featureUsageTitle": "Suivi de l'utilisation et des coûts", + "featureUsageText": "Comptage des jetons en temps réel, calcul des coûts par fournisseur/modèle et répartition détaillée de l'utilisation par clé API et compte.", + "featureAnalyticsTitle": "Tableau de bord d'analyse", + "featureAnalyticsText": "Analyses visuelles avec des graphiques pour les requêtes, les jetons, les erreurs, la latence, les coûts et la popularité du modèle au fil du temps.", + "featureHealthTitle": "Surveillance de la santé", + "featureHealthText": "Contrôles de santé en direct, statut du fournisseur, états des disjoncteurs et détection automatique des limites de débit avec interruption exponentielle.", + "featureCliTitle": "Outils CLI", + "featureCliText": "Gérez les configurations IDE, exportez/importez des sauvegardes, découvrez les profils codex et configurez les paramètres à partir du tableau de bord.", + "featureSecurityTitle": "Sécurité et politiques", + "featureSecurityText": "Authentification par clé API, filtrage IP, protection contre l'injection rapide, politiques de domaine, gestion de session et journalisation d'audit.", + "featureCloudSyncTitle": "Synchronisation dans le cloud", + "featureCloudSyncText": "Synchronisez votre configuration avec Cloudflare Workers pour un accès à distance avec des informations d'identification cryptées et un basculement automatique.", + "providersAcrossConnectionTypes": "Fournisseurs {count} sur trois types de connexion.", + "manageProviders": "Gérer les fournisseurs", + "providersCount": "{count} fournisseurs", + "providerTypeFree": "Niveau gratuit", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Clé API", + "useCaseSingleEndpointTitle": "Point de terminaison unique pour de nombreux fournisseurs", + "useCaseSingleEndpointText": "Dirigez les clients vers une URL de base et acheminez-les par préfixe de modèle (par exemple : gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Repli et changement de modèle avec des combos", + "useCaseFallbackText": "Créez des modèles combinés dans le tableau de bord et maintenez la configuration client stable pendant que les fournisseurs effectuent une rotation en interne.", + "useCaseUsageVisibilityTitle": "Visibilité de l'utilisation, du coût et du débogage", + "useCaseUsageVisibilityText": "Suivez les jetons et le coût par fournisseur, compte et clé API dans les onglets Utilisation et Analyse.", + "clientCherryStudioTitle": "Studio Cerise", + "baseUrlLabel": "URL de base", + "chatEndpointLabel": "Point de terminaison de discussion", + "modelRecommendationLabel": "Recommandation de modèle : préfixe explicite", + "clientCodexTitle": "Modèles de copilote Codex / GitHub", + "clientCodexBullet1": "Utiliser les ID de modèle avec", + "clientCodexBullet2": "Les modèles de la famille Codex sont acheminés automatiquement vers", + "clientCodexBullet3": "Les modèles non-Codex continuent", + "clientCursorTitle": "Curseur IDE", + "clientCursorBullet1": "Utiliser", + "clientCursorBullet1Suffix": "préfixe pour les modèles Cursor.", + "clientCursorBullet2": "Connexion OAuth - connectez-vous à partir de la page Fournisseurs.", + "clientClaudeTitle": "Claude Code / Antigravité", + "clientClaudeBullet1Prefix": "Utiliser", + "clientClaudeBullet1Middle": "(Claude) ou", + "clientClaudeBullet1Suffix": "Préfixe (Antigravité).", + "endpointChatNote": "Point de terminaison de discussion compatible OpenAI (par défaut).", + "endpointResponsesNote": "Point de terminaison de l’API de réponses (Codex, série o).", + "endpointModelsNote": "Catalogue modèle pour tous les fournisseurs connectés.", + "endpointAudioNote": "Transcription audio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Génération d'images (NanoBanana).", + "endpointRewriteChatNote": "Aide à la réécriture pour les clients sans /v1.", + "endpointRewriteResponsesNote": "Assistant de réécriture pour les réponses sans /v1.", + "endpointRewriteModelsNote": "Aide à la réécriture pour la découverte de modèles sans /v1.", + "modelPrefixesDescriptionStart": "Utilisez le préfixe du fournisseur avant le nom du modèle pour acheminer vers un fournisseur spécifique. Exemple :", + "modelPrefixesDescriptionEnd": "itinéraires vers GitHub Copilot.", + "provider": "Fournisseur", + "type": "Tapez", + "troubleshootingModelRouting": "Si le client échoue avec le routage du modèle, utilisez un fournisseur/modèle explicite (par exemple : gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Si vous recevez des erreurs de modèle ambiguës, choisissez un préfixe de fournisseur au lieu d'un simple ID de modèle.", + "troubleshootingCodexFamily": "Pour les modèles de la famille GitHub Codex, conservez le modèle sous la forme gh/ ; Le routeur sélectionne /réponses automatiquement.", + "troubleshootingTestConnection": "Utilisez Tableau de bord > Fournisseurs > Tester la connexion avant de tester à partir d'IDE ou de clients externes.", + "troubleshootingCircuitBreaker": "Si un fournisseur indique que le disjoncteur est ouvert, attendez le temps de recharge ou consultez la page Santé pour plus de détails.", + "troubleshootingOAuth": "Pour les fournisseurs OAuth, réauthentifiez-vous si les jetons expirent. Vérifiez l'indicateur d'état de la carte du fournisseur." + }, + "legal": { + "privacyPolicy": "Politique de confidentialité", + "termsOfService": "Conditions d'utilisation", + "providerConfigurations": "Configurations du fournisseur", + "apiKeys": "Clés API", + "usageLogs": "Journaux d'utilisation", + "applicationSettings": "Paramètres de l'application", + "viewExportAnalytics": "Afficher et exporter les analyses d'utilisation", + "clearHistory": "Effacer l'historique d'utilisation à tout moment", + "configureRetention": "Configurer les politiques de conservation des journaux", + "backupRestore": "Sauvegardez et restaurez votre base de données", + "privacyMetadataTitle": "Politique de confidentialité | OmniRoute", + "privacyMetadataDescription": "Politique de confidentialité pour le routeur proxy OmniRoute AI API.", + "termsMetadataTitle": "Conditions d'utilisation | OmniRoute", + "termsMetadataDescription": "Conditions d'utilisation du routeur proxy de l'API OmniRoute AI.", + "backToHome": "Retour à la maison", + "lastUpdated": "Dernière mise à jour : {date}", + "policyLastUpdatedDate": "13 février 2026", + "listSeparator": "-", + "questionsVisit": "Des questions ? Visitez notre", + "githubRepository": "Dépôt GitHub", + "privacySection1Title": "1. Architecture locale d’abord", + "privacySection1Text": "OmniRoute est conçu comme une application locale. Tout le traitement et le stockage des données s'effectuent entièrement sur votre machine. Il n'y a pas de serveur centralisé collectant vos informations.", + "privacySection2Title": "2. Données que nous stockons", + "privacyDataStoredIn": "Les données suivantes sont stockées localement dans", + "privacyDataProviderConfigurationsDesc": "URL de connexion, types de fournisseurs et paramètres de priorité", + "privacyDataApiKeysDesc": "crypté et stocké localement pour l'authentification auprès des fournisseurs d'IA", + "privacyDataUsageLogsDesc": "nombre de requêtes, utilisation des jetons, noms de modèles, horodatages et temps de réponse", + "privacyDataApplicationSettingsDesc": "préférences de thème, stratégie de routage et configurations combo", + "privacySection3Title": "3. Pas de télémétrie", + "privacySection3Text": "OmniRoute ne collecte pas de rapports de télémétrie, d'analyse ou d'erreur. Aucune donnée n'est envoyée à nous ou à un tiers. Vos modèles d'utilisation, appels API et configurations restent entièrement privés.", + "privacySection4Title": "4. Fournisseurs d'IA tiers", + "privacySection4Text": "Lorsque vous effectuez des appels API via OmniRoute, vos requêtes sont transmises aux fournisseurs d'IA que vous avez configurés (par exemple : OpenAI, Anthropic, Google). Ces fournisseurs ont leurs propres politiques de confidentialité qui régissent la manière dont ils traitent vos données. Veuillez consulter :", + "privacyOpenAiPolicy": "Politique de confidentialité d'OpenAI", + "privacyAnthropicPolicy": "Politique de confidentialité anthropique", + "privacyGooglePolicy": "Politique de confidentialité de Google", + "privacySection5Title": "5. Synchronisation cloud (facultatif)", + "privacySection5Text": "Si vous activez la fonctionnalité facultative de synchronisation dans le cloud, les configurations du fournisseur et les clés API peuvent être transmises à un point de terminaison cloud configuré. Cette fonctionnalité est désactivée par défaut et nécessite une inscription explicite.", + "privacySection6Title": "6. Journalisation", + "privacyLoggingIntro": "Les journaux de demandes peuvent être configurés via les paramètres du tableau de bord. Vous pouvez :", + "privacySection7Title": "7. Vos droits", + "privacySection7TextStart": "Puisque toutes les données sont stockées localement, vous avez le contrôle total. Vous pouvez supprimer vos données à tout moment en supprimant le", + "privacySection7TextEnd": "répertoire ou en utilisant les fonctionnalités de sauvegarde et de restauration de la base de données dans le tableau de bord.", + "termsSection1Title": "1. Aperçu", + "termsSection1Text": "OmniRoute est un premier routeur proxy API AI local qui fonctionne entièrement sur votre machine. Il achemine les requêtes vers plusieurs fournisseurs d'IA avec équilibrage de charge, basculement et suivi de l'utilisation.", + "termsSection2Title": "2. Responsabilités de l'utilisateur", + "termsResponsibilityApiKeys": "Vous êtes seul responsable de la gestion de vos propres clés API et informations d'identification pour les fournisseurs d'IA tiers (OpenAI, Anthropic, Google, etc.).", + "termsResponsibilityCompliance": "Vous devez respecter les conditions de service de chaque fournisseur d'IA dont vous accédez à l'API via OmniRoute.", + "termsResponsibilitySecurity": "Vous êtes responsable de la sécurité de votre installation OmniRoute locale, notamment en définissant un mot de passe et en restreignant l'accès au réseau.", + "termsSection3Title": "3. Comment ça marche", + "termsSection3Text": "OmniRoute agit en tant que proxy intermédiaire. Les appels API envoyés à OmniRoute sont traduits et transmis à vos fournisseurs d'IA configurés. OmniRoute ne modifie pas le contenu de vos demandes ou réponses au-delà de la traduction du protocole nécessaire.", + "termsSection4Title": "4. Traitement des données", + "termsDataStoredLocally": "Toutes les données sont stockées localement sur votre machine dans une base de données SQLite.", + "termsNoTransmission": "OmniRoute ne transmet aucune donnée aux serveurs externes, sauf si vous activez explicitement les fonctionnalités de synchronisation dans le cloud.", + "termsDataLocationText": "Les journaux d'utilisation, les clés API et la configuration sont stockés dans", + "termsSection5Title": "5. Avis de non-responsabilité", + "termsSection5Text": "OmniRoute est fourni « tel quel », sans garantie d'aucune sorte. Nous ne sommes pas responsables des coûts occasionnés par l'utilisation de l'API, les interruptions de service ou la perte de données. Conservez toujours des sauvegardes de votre configuration.", + "termsSection6Title": "6. Ouvrir la source", + "termsSection6Text": "OmniRoute est un logiciel open source. Vous êtes libre de l'inspecter, de le modifier et de le distribuer selon les termes de sa licence." + } +} diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json new file mode 100644 index 0000000000..532e4095c2 --- /dev/null +++ b/src/i18n/messages/he.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "שמור", + "cancel": "בטל", + "delete": "מחק", + "loading": "טוען...", + "error": "אירעה שגיאה", + "success": "הצלחה", + "confirm": "אתה בטוח?", + "refresh": "רענן", + "close": "סגור", + "add": "הוסף", + "edit": "ערוך", + "search": "חפש", + "back": "חזרה", + "next": "הבא", + "submit": "שלח", + "reset": "אפס", + "copy": "העתק", + "copied": "הועתק!", + "enabled": "מופעל", + "disabled": "מושבת", + "active": "פעיל", + "inactive": "לא פעיל", + "noData": "אין נתונים זמינים", + "configure": "הגדר", + "manage": "נהל", + "name": "שם", + "actions": "פעולות", + "status": "סטטוס", + "type": "הקלד", + "model": "דגם", + "models": "דגמים", + "provider": "ספק", + "account": "חשבון", + "time": "זמן", + "details": "פרטים", + "created": "נוצר", + "lastUsed": "בשימוש אחרון", + "loadMore": "טען עוד", + "noResults": "לא נמצאו תוצאות", + "reloadPage": "טען מחדש את הדף", + "connected": "מחובר", + "disconnected": "מנותק", + "notConfigured": "לא מוגדר", + "testConnection": "בדיקת חיבור", + "enable": "אפשר", + "disable": "השבת", + "columns": "עמודות", + "newest": "הכי חדש", + "oldest": "הכי ותיק", + "all": "הכל", + "none": "אין", + "yes": "כן", + "no": "לא", + "warning": "אזהרה", + "note": "הערה", + "free": "חינם", + "skipToContent": "דלג לתוכן" + }, + "sidebar": { + "home": "בית", + "dashboard": "לוח מחוונים", + "providers": "ספקים", + "combos": "שילובים", + "usage": "שימוש", + "analytics": "אנליטיקס", + "costs": "עלויות", + "health": "בריאות", + "limits": "מגבלות ומכסות", + "cliTools": "כלי CLI", + "settings": "הגדרות", + "translator": "מתרגם", + "docs": "מסמכים", + "issues": "בעיות", + "endpoint": "נקודת קצה", + "apiManager": "מנהל API", + "logs": "יומנים", + "auditLog": "יומן ביקורת", + "shutdown": "כיבוי", + "restart": "הפעל מחדש", + "shutdownConfirm": "לסגור את OmniRoute?", + "restartConfirm": "להפעיל מחדש את OmniRoute?", + "version": "v{version}", + "debug": "ניפוי באגים", + "system": "מערכת", + "help": "עזרה", + "serverDisconnected": "השרת מנותק", + "serverDisconnectedMsg": "שרת ה-proxy נעצר או מופעל מחדש.", + "expandSidebar": "הרחב את סרגל הצד", + "collapseSidebar": "כווץ את סרגל הצד" + }, + "header": { + "logout": "התנתק", + "language": "שפה", + "providers": "ספקים", + "providerDescription": "נהל את חיבורי ספק ה-AI שלך", + "combos": "שילובים", + "comboDescription": "שילובי דגם עם סתירה", + "usage": "שימוש ואנליטיקה", + "usageDescription": "עקוב אחר השימוש ב-API, צריכת האסימונים ויומני הבקשות שלך", + "analytics": "אנליטיקס", + "analyticsDescription": "תרשימים, מגמות ותובנות הערכה", + "cliTools": "כלי CLI", + "cliToolsDescription": "הגדר כלי CLI", + "home": "בית", + "homeDescription": "ברוכים הבאים ל-OmniRoute", + "endpoint": "נקודת קצה", + "endpointDescription": "תצורת נקודת קצה API", + "settings": "הגדרות", + "settingsDescription": "נהל את ההעדפות שלך", + "openaiCompatible": "תואם OpenAI", + "anthropicCompatible": "תואם אנתרופי" + }, + "home": { + "quickStart": "התחלה מהירה", + "quickStartDesc": "קום לרוץ ב-4 שלבים. חבר ספקים, דגמי נתיב, מעקב אחר הכל.", + "fullDocs": "מסמכים מלאים", + "step1Title": "1. צור מפתח API", + "step1Desc": "עבור אל Endpoint -> מפתחות רשומים. צור מפתח אחד לכל סביבה.", + "step2Title": "2. חבר ספקים", + "step2Desc": "הוסף חשבונות ב-ספקים. תומך ב-OAuth, מפתח API ושכבות חינמיות.", + "step3Title": "3. כוון את הלקוח שלך", + "step3Desc": "הגדר את כתובת האתר הבסיסית ל-{url} בלקוח ה-IDE או ה-API שלך.", + "step4Title": "4. מעקב ואופטימיזציה", + "step4Desc": "עקוב אחר אסימונים, עלויות ושגיאות ב- יומני בקשות וAnalytics.", + "providersOverview": "סקירת ספקים", + "configuredOf": "{configured} מוגדר של {total} ספקים זמינים", + "noModelsAvailable": "אין דגמים זמינים עבור ספק זה.", + "configureFirst": "תחילה הגדר חיבור ב{providers}", + "configureProvider": "הגדר ספק", + "modelAvailable": "דגם {count} זמין", + "modelsAvailable": "{count} דגמים זמינים", + "connectionsActive": "{count} חיבור פעיל", + "connectionsActivePlural": "{count} חיבורים פעילים", + "copyModelName": "העתק את שם הדגם", + "documentation": "תיעוד", + "healthMonitor": "מוניטור בריאות", + "reportIssue": "דווח על בעיה", + "activeError": "{active} פעיל · שגיאה {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "מפתח API", + "requestsShort": "{count} בקשות", + "providerModelsTitle": "{provider} - דגמים", + "copiedModel": "הועתק: {model}", + "aliasLabel": "כינוי" + }, + "analytics": { + "title": "אנליטיקס", + "overviewDescription": "עקוב אחר דפוסי השימוש שלך ב-API, צריכת אסימונים, עלויות ומגמות פעילות בכל הספקים והדגמים.", + "evalsDescription": "הפעל חבילות הערכה כדי לבדוק ולאמת את נקודות הקצה שלך ב-LLM. השווה את איכות המודל, זיהוי רגרסיות והשהייה בהשוואה.", + "overview": "סקירה כללית", + "evals": "Evals" + }, + "apiManager": { + "title": "מפתחות API", + "createKey": "צור מפתח API", + "key": "מפתח", + "revokeKey": "בטל מפתח", + "revokeConfirm": "האם אתה בטוח שברצונך לבטל מפתח API זה?", + "noKeys": "עדיין אין מפתחות API", + "noKeysDesc": "צור את מפתח ה-API הראשון שלך כדי לאמת בקשות לנקודת הקצה שלך", + "keyLabel": "תווית מפתח", + "permissions": "הרשאות", + "expiresAt": "פג תוקף", + "never": "לעולם לא", + "revoke": "בטל", + "showKey": "הצג מפתח", + "hideKey": "הסתר מפתח", + "copyKey": "העתק מפתח API", + "allModels": "כל הדגמים", + "selectedModels": "דגמים נבחרים", + "readOnly": "קריאה בלבד", + "fullAccess": "גישה מלאה", + "keyManagement": "ניהול מפתחות API", + "keyManagementDesc": "צור ונהל מפתחות API לאימות בקשות לנקודת הקצה שלך", + "totalKeys": "סך הכל מפתחות", + "restricted": "מוגבל", + "totalRequests": "סך כל הבקשות", + "modelsAvailable": "דגמים זמינים", + "registeredKeys": "מפתחות רשומים", + "keysRegistered": "{count} מפתחות רשומים", + "keyRegistered": "מפתח {count} נרשם", + "keysSecurityNote": "כל מפתח מבודד את מעקב השימוש וניתן לבטלו באופן עצמאי. מפתחות מוסווים לאחר יצירתם לצורך אבטחה.", + "createFirstKey": "צור את המפתח הראשון שלך", + "name": "שם", + "usage": "שימוש", + "created": "נוצר", + "actions": "פעולות", + "reqs": "בקשות", + "neverUsed": "מעולם לא היה בשימוש", + "deleteConfirm": "למחוק מפתח API זה?", + "usageTips": "טיפים לשימוש", + "tipAuth": "השתמש במפתחות API בכותרת ההרשאה בתור נושא YOUR_KEY", + "tipSecure": "מפתחות מוצגים פעם אחת בלבד במהלך היצירה - אחסן אותם בצורה מאובטחת", + "tipSeparate": "צור מפתחות נפרדים עבור לקוחות או סביבות שונות", + "tipRestrict": "הגבל מפתחות לדגמים ספציפיים לאבטחה ובקרת עלויות טובים יותר", + "keyName": "שם מפתח", + "keyNamePlaceholder": "למשל מפתח ייצור, מפתח פיתוח", + "keyNameDesc": "בחר שם תיאורי כדי לזהות את מטרת מפתח זה", + "keyCreated": "מפתח API נוצר", + "keyCreatedSuccess": "מפתח נוצר בהצלחה!", + "keyCreatedNote": "העתק ואחסן את המפתח הזה עכשיו - הוא לא יוצג שוב.", + "done": "בוצע", + "savePermissions": "שמור הרשאות", + "allowAll": "אפשר הכל", + "restrict": "הגבל", + "allowAllInfo": "מפתח זה יכול לגשת לכל הדגמים הזמינים.", + "restrictInfo": "מפתח זה יכול לגשת ל-{selected} מתוך דגמי {total}.", + "selected": "{count} נבחר", + "all": "הכל", + "clear": "ברור", + "searchModels": "חפש דגמים לפי שם או ספק...", + "noModelsFound": "לא נמצאו דגמים", + "keyNameRequired": "נדרש שם מפתח", + "keyNameTooLong": "שם המפתח חייב להיות {max} תווים או פחות", + "keyNameInvalid": "שם המפתח יכול להכיל רק אותיות, מספרים, רווחים, מקפים וקווים תחתונים", + "invalidKeyName": "שם מפתח לא חוקי", + "failedCreateKey": "יצירת המפתח נכשלה", + "failedCreateKeyRetry": "יצירת המפתח נכשלה. אנא נסה שוב.", + "invalidKeyId": "מזהה מפתח לא חוקי", + "failedDeleteKey": "מחיקת המפתח נכשלה", + "failedDeleteKeyRetry": "מחיקת המפתח נכשלה. אנא נסה שוב.", + "invalidModelsSelection": "בחירת דגמים לא חוקית", + "cannotSelectMoreThanModels": "לא ניתן לבחור יותר מדגמי {max}", + "failedUpdatePermissions": "עדכון ההרשאות נכשל", + "failedUpdatePermissionsRetry": "עדכון ההרשאות נכשל. אנא נסה שוב.", + "unknownProvider": "לא ידוע", + "copyMaskedKey": "העתק מפתח מסכה", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "אחרון: {date}", + "editPermissions": "ערוך הרשאות", + "deleteKey": "מחק מפתח", + "model": "דגם {count}", + "models": "דגמי {count}", + "permissionsTitle": "הרשאות: {name}", + "allowAllDesc": "מפתח זה יכול לגשת לכל הדגמים הזמינים.", + "restrictDesc": "מפתח זה יכול לגשת ל-{selectedCount} מתוך דגמי {totalModels}.", + "selectedCount": "{count} נבחר" + }, + "auditLog": { + "title": "יומן ביקורת", + "searchPlaceholder": "פעולות חיפוש...", + "action": "פעולה", + "actor": "שחקן", + "target": "יעד", + "ipAddress": "כתובת IP", + "timestamp": "חותמת זמן", + "noEntries": "לא נמצאו ערכי ביקורת", + "filterByAction": "סינון לפי פעולה...", + "filterByActor": "סנן לפי שחקן...", + "filterEntriesAria": "סינון ערכי יומן ביקורת", + "filterByActionTypeAria": "סנן לפי סוג פעולה", + "filterByActorAria": "סנן לפי שחקן", + "refreshAuditLogAria": "רענן יומן ביקורת", + "tableAria": "רישומי יומן ביקורת", + "failedFetchAuditLog": "אחזור יומן הביקורת נכשל", + "notAvailable": "—", + "description": "פעולות מנהליות ואירועי אבטחה", + "showing": "מציג ערכים של {count} (היסט {offset})", + "previous": "הקודם" + }, + "cliTools": { + "title": "כלי CLI", + "noActiveProviders": "אין ספקים פעילים", + "noActiveProvidersDesc": "אנא הוסף וחבר ספקים תחילה כדי להגדיר כלי CLI.", + "mapModels": "דגמי מפה", + "testConnection": "בדיקת חיבור", + "connectionStatus": "מצב חיבור", + "configureEndpoint": "הגדר את נקודת הקצה", + "instructions": "הוראות", + "modelMapping": "מיפוי מודלים", + "baseUrl": "כתובת האתר הבסיסית", + "apiKey": "מפתח API", + "configured": "מוגדר", + "notConfigured": "לא מוגדר", + "notInstalled": "לא מותקן", + "custom": "מותאם אישית", + "unknown": "לא ידוע", + "lastSavedAt": "נשמר לאחרונה: {date}", + "never": "לעולם לא", + "justNow": "רק עכשיו", + "minutesAgoShort": "לפני {count}מ'", + "hoursAgoShort": "לפני {count}h", + "daysAgoShort": "לפני {count}d", + "monthsAgoShort": "{count}חודש לפני", + "yearsAgoShort": "לפני {count}y", + "runtimeCheckFailed": "בדיקת זמן הריצה נכשלה", + "yourApiKeyPlaceholder": "your-api-key", + "modelPlaceholder": "ספק/מזהה דגם", + "configurationSaved": "התצורה נשמרה בהצלחה.", + "failedToSave": "שמירת התצורה נכשלה.", + "noApiKeysCreateOne": "ללא מפתחות API - צור אחד בדף מפתחות", + "defaultOmnirouteKey": "sk_omniroute (ברירת מחדל)", + "selectModel": "בחר דגם", + "selectModelForAlias": "בחר דגם עבור {alias}", + "selectModelForTool": "בחר דגם עבור {tool}", + "select": "בחר", + "clear": "ברור", + "comingSoon": "בקרוב", + "checkingRuntime": "בודק סטטוס זמן ריצה...", + "guideOnlyIntegration": "אינטגרציה במדריך בלבד (אין צורך בזמן ריצה מקומי)", + "cliRuntimeDetected": "זמן ריצה CLI זוהה ומוכן", + "cliFoundNotRunnable": "CLI נמצא אך לא ניתן להרצה{reason}", + "cliRuntimeNotDetected": "זמן ריצה CLI לא זוהה", + "binary": "בינארי", + "configPath": "נתיב תצורה", + "configPathShort": "Config", + "failedCheckRuntimeStatus": "בדיקת סטטוס זמן הריצה נכשלה.", + "copy": "העתק", + "copied": "הועתק", + "copyConfig": "העתק תצורה", + "saveConfig": "שמור תצורה", + "selectionSaved": "הבחירה נשמרה", + "guide": "מדריך", + "detected": "זוהה", + "notReady": "לא מוכן", + "active": "פעיל", + "inactive": "לא פעיל", + "startMitm": "הפעל את MITM", + "stopMitm": "עצור את MITM", + "mitmStarted": "MITM התחיל בהצלחה!", + "mitmStopped": "MITM נעצר בהצלחה!", + "failedStart": "הפעלת MITM נכשלה", + "failedStop": "עצירת MITM נכשלה", + "saveMappings": "שמור מיפויים", + "mappingsSaved": "המיפויים נשמרו!", + "failedSaveMappings": "שמירת המיפויים נכשלה", + "howItWorks": "איך זה עובד:", + "antigravityHowWorksDesc": "אנטי כבידה שולחת בקשות לנקודת הקצה של גוגל. MITM מיירט ומפנה אותם אל OmniRoute.", + "antigravityStep1": "1. הפעל את MITM כדי לנתב בקשות דרך OmniRoute.", + "antigravityStep2Prefix": "2. הוסף", + "antigravityStep2Suffix": "לקובץ המארחים שלך כ-127.0.0.1.", + "antigravityStep3": "3. פתח את Antigravity ובקשות יסופקו.", + "sudoPasswordRequiredTitle": "נדרשת סיסמת סודו", + "sudoPasswordHint": "נדרשת סיסמת מנהל כדי לשנות את הגדרות ה-Proxy של המארחים ומערכת ה-proxy.", + "enterSudoPassword": "הזן את סיסמת הסודו", + "sudoPasswordRequiredError": "נדרשת סיסמת סודו.", + "cancel": "בטל", + "confirm": "אשר", + "settingsApplied": "ההגדרות הוחלו בהצלחה!", + "failedApplySettings": "החלת ההגדרות נכשלה", + "settingsReset": "ההגדרות אופסו בהצלחה!", + "failedResetSettings": "איפוס ההגדרות נכשל", + "backupRestored": "הגיבוי שוחזר!", + "failedRestore": "השחזור נכשל", + "checkingCli": "בודק את {tool} CLI...", + "cliNotRunnable": "{tool} CLI מותקן אך לא ניתן להרצה", + "cliNotInstalled": "{tool} CLI לא מותקן", + "cliNotDetected": "{tool} CLI לא זוהה", + "cliDetectedReady": "{tool} CLI זוהה ומוכן", + "cliFoundFailedHealthcheck": "{tool} CLI נמצא אך בדיקת תקינות זמן הריצה נכשלה{reason}.", + "installCliPrompt": "אנא התקן את {tool} CLI כדי להשתמש בתכונה זו.", + "installCodexPrompt": "אנא התקן את Codex CLI כדי להשתמש בתכונת היישום האוטומטי.", + "hide": "הסתר", + "howToInstall": "כיצד להתקין", + "installationGuide": "מדריך התקנה", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "לאחר ההתקנה, הפעל", + "toVerify": "לאמת.", + "current": "נוכחי", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "אפס לברירת המחדל", + "providerModelPlaceholder": "ספק/מזהה דגם", + "apply": "החל", + "reset": "אפס", + "manualConfig": "תצורה ידנית", + "backups": "גיבויים", + "configBackups": "גיבויי תצורה", + "noBackupsYet": "עדיין אין גיבויים. גיבויים נוצרים באופן אוטומטי לפני כל החלה או איפוס.", + "restore": "שחזר", + "backupRestoredReloading": "הגיבוי שוחזר! טוען מחדש סטטוס...", + "failedRestoreBackup": "שחזור הגיבוי נכשל", + "applied": "הוחל!", + "failed": "נכשל", + "resetDone": "אפס!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute מוגדר כספק תואם OpenAI", + "provider": "ספק", + "model": "דגם", + "providers": "ספקים", + "auth": "Auth", + "noApiKeysAvailable": "אין מפתחות API זמינים", + "usingDefaultOmniroute": "שימוש בברירת המחדל: sk_omniroute", + "updateConfig": "עדכן את התצורה", + "applyConfig": "החל Config", + "noBackupsAvailable": "אין גיבויים זמינים.", + "profileSaved": "הפרופיל \"{name}\" נשמר!", + "failedSaveProfile": "שמירת הפרופיל נכשלה", + "profileActivated": "הפרופיל הופעל!", + "failedActivateProfile": "הפעלת הפרופיל נכשלה", + "profiles": "פרופילים", + "savedProfiles": "פרופילים שמורים", + "noProfilesYet": "עדיין לא נשמרו פרופילים. שמור את התצורה הנוכחית כפרופיל למטה.", + "activate": "הפעל", + "deleteProfile": "מחק את הפרופיל", + "profileNamePlaceholder": "שם פרופיל (למשל חשבון אישי)", + "saveCurrent": "שמור נוכחי", + "codexAuthNotePrefix": "קודקס משתמש", + "codexAuthNoteMiddle": "עם", + "codexAuthNoteSuffix": "לחץ על \"החל\" כדי להגדיר אוטומטית.", + "claudeManualConfiguration": "קלוד CLI - תצורה ידנית", + "codexManualConfiguration": "Codex CLI - תצורה ידנית", + "droidManualConfiguration": "מפעל דרואיד - תצורה ידנית", + "openClawManualConfiguration": "פתח טופר - תצורה ידנית", + "clineManualConfiguration": "תצורה ידנית של Cline", + "kiloManualConfiguration": "תצורה ידנית של קילו קוד", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE עם MITM", + "claude": "קלוד האנתרופי קוד CLI", + "codex": "OpenAI Codex CLI", + "droid": "מפעל Droid AI Assistant", + "openclaw": "פתח את Claw AI Assistant", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "קילו קוד AI עוזר CLI", + "cursor": "עורך קוד AI של הסמן", + "continue": "המשך עוזר AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "דורש חשבון Cursor Pro כדי להשתמש בתכונה זו.", + "1": "הסמן מנתב בקשות דרך השרת שלו, כך שנקודת קצה מקומית אינה נתמכת. אנא הפעל את Cloud Endpoint בהגדרות." + }, + "steps": { + "1": { + "title": "פתח את ההגדרות", + "desc": "עבור אל הגדרות -> דגמים" + }, + "2": { + "title": "הפעל את OpenAI API", + "desc": "הפעל את האפשרות \"מפתח API של OpenAI\"." + }, + "3": { + "title": "כתובת האתר הבסיסית" + }, + "4": { + "title": "מפתח API" + }, + "5": { + "title": "הוסף דגם מותאם אישית", + "desc": "לחץ על \"הצג את כל הדגמים\" -> \"הוסף דגם מותאם אישית\"" + }, + "6": { + "title": "בחר דגם" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "פתח את Config", + "desc": "פתח את קובץ המשך התצורה" + }, + "2": { + "title": "מפתח API" + }, + "3": { + "title": "בחר דגם" + }, + "4": { + "title": "הוסף דגם Config", + "desc": "הוסף את התצורה הבאה למערך הדגמים שלך:" + } + } + } + } + }, + "combos": { + "title": "שילובים", + "description": "צור שילובי דגמים עם ניתוב משוקלל ותמיכה ב-fallback", + "createCombo": "צור קומבו", + "editCombo": "ערוך משולבת", + "deleteCombo": "מחק שילוב", + "noModels": "אין דגמים", + "noModelsYet": "עדיין לא נוספו דגמים", + "addModel": "הוסף דגם", + "addModelToCombo": "הוסף דגם לשילוב", + "routingStrategy": "אסטרטגיית ניתוב", + "maxRetries": "מקסימום מנסה שוב", + "timeout": "זמן קצוב (ms)", + "healthcheck": "בדיקת בריאות", + "priority": "עדיפות", + "fallback": "נסיגה", + "roundRobin": "רובין עגול", + "random": "אקראי", + "leastLatency": "הכי פחות חביון", + "comboName": "שם משולב", + "comboNamePlaceholder": "שלי-קומבו", + "deleteConfirm": "למחוק את השילוב הזה?", + "noCombosYet": "עדיין אין קומבינות", + "comboCreated": "השילוב נוצר בהצלחה", + "comboUpdated": "המשולב עודכן בהצלחה", + "comboDeleted": "השילוב נמחק", + "failedCreate": "יצירת המשולבת נכשלה", + "failedUpdate": "עדכון המשולב נכשל", + "errorCreating": "שגיאה ביצירת שילוב", + "errorUpdating": "שגיאה בעדכון המשולב", + "errorDeleting": "שגיאה במחיקת המשולב", + "testFailed": "בקשת הבדיקה נכשלה", + "failedToggle": "החלפת המשולבת נכשלה", + "testResults": "תוצאות בדיקה - {name}", + "resolvedBy": "נפתר על ידי:", + "more": "+{count} נוספים", + "reqs": "בקשות", + "success": "הצלחה", + "proxyConfigured": "פרוקסי מוגדר", + "copyComboName": "העתק את השם המשולב", + "enableCombo": "אפשר שילוב", + "disableCombo": "השבת את השילוב", + "testCombo": "משולבת בדיקה", + "duplicate": "שכפול", + "proxyConfig": "תצורת פרוקסי", + "nameRequired": "נדרש שם", + "nameInvalid": "רק אותיות, מספרים, -, _, / ו-. מותר", + "nameHint": "אותיות, מספרים, -, _, / ו. מותר", + "priorityDesc": "נפילה רציפה: מנסה קודם את דגם 1, אחר כך 2 וכו'.", + "weightedDesc": "מחלק את התעבורה לפי אחוז משקל עם נפילה", + "roundRobinDesc": "חלוקה מעגלית: כל בקשה עוברת לדגם הבא בסיבוב", + "randomDesc": "בחירה אקראית אחידה, ואז חזרה לדגמים שנותרו", + "leastUsedDesc": "בוחר את הדגם עם הכי פחות בקשות, מאזן עומס לאורך זמן", + "costOptimizedDesc": "מסלולים לדגם הזול ביותר לפי תמחור", + "models": "דגמים", + "autoBalance": "איזון אוטומטי", + "advancedSettings": "הגדרות מתקדמות", + "retryDelay": "נסה שוב עיכוב (מילישניות)", + "concurrencyPerModel": "במקביל / דגם", + "queueTimeout": "זמן קצוב לתור (מילישניות)", + "advancedHint": "השאר ריק כדי להשתמש בברירות המחדל גלובליות. אלה עוקפים הגדרות לכל ספק.", + "moveUp": "לזוז למעלה", + "moveDown": "לזוז למטה", + "removeModel": "הסר", + "saving": "שומר...", + "weighted": "משוקלל", + "leastUsed": "הכי פחות בשימוש", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "עלויות", + "budget": "תקציב", + "totalCost": "עלות כוללת", + "breakdown": "פירוט עלויות", + "noData": "אין נתוני עלויות", + "byModel": "לפי דגם", + "byProvider": "לפי ספק" + }, + "endpoint": { + "title": "נקודת קצה API", + "available": "נקודות קצה זמינות", + "cloudProxy": "פרוקסי ענן", + "disableConfirm": "האם אתה בטוח שברצונך להשבית את פרוקסי הענן?", + "baseUrl": "כתובת האתר הבסיסית", + "apiKeyLabel": "מפתח API", + "registeredKeys": "מפתחות רשומים", + "chatCompletions": "השלמת צ'אט", + "responses": "תגובות", + "listModels": "רשימת דגמים", + "usingCloudProxy": "שימוש ב-Cloud Proxy", + "usingLocalServer": "שימוש בשרת מקומי", + "machineId": "מזהה מכונה: {id}...", + "disableCloud": "השבת את הענן", + "enableCloud": "אפשר ענן", + "modelsAcrossEndpoints": "מודלים {models} על פני {endpoints} נקודות קצה", + "chatDesc": "צ'אט בסטרימינג ושלא בסטרימינג עם כל הספקים", + "embeddings": "הטבעות", + "embeddingsDesc": "הטמעת טקסט עבור חיפוש וצינורות RAG", + "imageGeneration": "יצירת תמונה", + "imageDesc": "צור תמונות מהודעות טקסט", + "rerank": "דרג מחדש", + "rerankDesc": "דרג מחדש מסמכים לפי רלוונטיות לשאילתה", + "audioTranscription": "תמלול אודיו", + "audioTranscriptionDesc": "תמלול קבצי שמע לטקסט (לחישה)", + "textToSpeech": "טקסט לדיבור", + "textToSpeechDesc": "המרת טקסט לדיבור בצלילים טבעיים", + "moderations": "מנחות", + "moderationsDesc": "ניהול תוכן וסיווג בטיחות", + "enableCloudTitle": "אפשר Cloud Proxy", + "whatYouGet": "מה תקבל", + "cloudBenefitAccess": "גש ל-API שלך מכל מקום בעולם", + "cloudBenefitShare": "שתף נקודת קצה עם הצוות שלך בקלות", + "cloudBenefitPorts": "אין צורך לפתוח פורטים או להגדיר חומת אש", + "cloudBenefitEdge": "רשת קצה גלובלית מהירה", + "cloudSessionNote": "Cloud ישמור את הפעלת האישור שלך למשך יום אחד. אם לא נעשה בו שימוש, הוא יימחק אוטומטית.", + "cloudUnstableNote": "Cloud כרגע אינו יציב עם Claude Code OAuth במקרים מסוימים.", + "cloudConnected": "Cloud Proxy מחובר!", + "connectingToCloud": "מתחבר לענן...", + "verifyingConnection": "מאמת את החיבור...", + "connecting": "מתחבר...", + "verifying": "מאמת...", + "connected": "מחובר!", + "disableCloudTitle": "השבת פרוקסי ענן", + "disableWarning": "כל הפעלות האימות יימחקו מהענן.", + "syncingData": "מסנכרן את הנתונים העדכניים ביותר...", + "disablingCloud": "משבית את הענן...", + "syncing": "מסנכרן...", + "disabling": "משבית...", + "cloudConnectedVerified": "Cloud Proxy מחובר ומאומת!", + "connectedVerificationPending": "מחובר - ממתין לאימות", + "connectedVerificationPendingWithError": "מחובר - ממתין לאימות: {error}", + "cloudDisabledSuccess": "הענן הושבת בהצלחה", + "syncedSuccess": "סנכרון בהצלחה", + "failedDisable": "נכשל השבתת הענן", + "failedEnable": "הפעלת הענן נכשלה", + "cloudRequestTimeout": "פסק זמן לבקשת ענן", + "cloudRequestFailed": "בקשת הענן נכשלה", + "cloudWorkerUnreachable": "לא ניתן היה להגיע לעובד הענן. ודא ששירות הענן פועל (npm run dev in /cloud).", + "connectionFailed": "החיבור נכשל", + "syncFailed": "סנכרון נתוני ענן נכשל", + "providerModelsTitle": "{provider} — דגמים", + "noModelsForProvider": "אין דגמים זמינים עבור ספק זה.", + "chat": "צ'אט", + "embedding": "הטבעה", + "image": "תמונה", + "custom": "מותאם אישית", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "בריאות המערכת", + "description": "ניטור בזמן אמת של מופע OmniRoute שלך", + "healthy": "בריא", + "degraded": "מושפל", + "down": "למטה", + "uptime": "זמן פעולה", + "memory": "זיכרון", + "memoryRss": "זיכרון (RSS)", + "heap": "ערימה", + "cpu": "מעבד", + "database": "מסד נתונים", + "version": "גרסה", + "lastCheck": "בדיקה אחרונה", + "providerHealth": "בריאות הספק", + "systemMetrics": "מדדי מערכת", + "tokenHealth": "Token Health", + "refreshAll": "רענן הכל", + "checkNow": "בדוק עכשיו", + "loadingHealth": "טוען נתוני בריאות...", + "failedToLoad": "טעינת נתוני בריאות נכשלה: {error}", + "retry": "נסה שוב", + "allOperational": "כל המערכות פועלות", + "issuesDetected": "זוהו בעיות במערכת", + "updatedAt": "עודכן {time}", + "latency": "חביון", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "עמ' 99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "סך כל הבקשות", + "noDataYet": "עדיין אין נתונים", + "promptCache": "הפקודה מטמון", + "entries": "ערכים", + "hitRate": "שיעור כניסות", + "hitsMisses": "להיטים / פספוסים", + "signatureCache": "מטמון חתימה", + "signatureDefaults": "ברירות מחדל", + "signatureTool": "כלי", + "signatureFamily": "משפחה", + "signatureSession": "מושב", + "recovering": "מתאושש", + "noCBData": "אין נתוני מפסק זמינים. קודם תבקש כמה בקשות.", + "providerHealthStatusAria": "מצב בריאותי של ספק", + "issuesLabel": "בעיות זוהו", + "operational": "מבצעי", + "providers": "ספקים", + "healthyCount": "{count} בריא", + "nodeVersion": "צומת {version}", + "failures": "{count} כשל", + "failuresPlural": "{count} כשלים", + "lastFailure": "אחרון", + "rateLimitStatus": "סטטוס מגבלת שיעור", + "activeLimiters": "{count} מגביל פעיל", + "activeLimitersPlural": "{count} מגבילים פעילים", + "queued": "בתור", + "queuedCount": "{count} בתור", + "running": "ריצה", + "runningCount": "{count} פועל", + "ok": "בסדר", + "activeLockouts": "נעילה אקטיבית", + "resetConfirm": "לאפס את כל המפסקים למצב תקין? פעולה זו תנקה את כל ספירת הכשלים ותחזיר את כל הספקים למצב תפעולי.", + "resetAllTitle": "אפס את כל המפסקים למצב תקין", + "resetting": "מאפס...", + "resetAll": "אפס הכל", + "until": "עד {time}" + }, + "limits": { + "title": "מגבלות ומכסות", + "rateLimit": "מגבלת שיעור", + "remaining": "נשאר", + "requestsPerMinute": "בקשות/דקה", + "tokensPerMinute": "אסימונים/דקה", + "dailyLimit": "מגבלה יומית" + }, + "logs": { + "title": "יומנים", + "requestLogs": "בקש יומני", + "proxyLogs": "יומני פרוקסי", + "auditLog": "יומן ביקורת", + "console": "קונסולה", + "auditLogDesc": "פעולות מנהליות ואירועי אבטחה", + "loading": "טוען...", + "refresh": "רענן", + "filterByAction": "סינון לפי פעולה...", + "filterByActor": "סנן לפי שחקן...", + "filterEntriesAria": "סינון ערכי יומן ביקורת", + "filterByActionTypeAria": "סנן לפי סוג פעולה", + "filterByActorAria": "סנן לפי שחקן", + "refreshAuditLogAria": "רענן יומן ביקורת", + "tableAria": "רישומי יומן ביקורת", + "failedFetchAuditLog": "אחזור יומן הביקורת נכשל", + "showing": "מציג ערכים של {count} (היסט {offset})", + "search": "חפש", + "timestamp": "חותמת זמן", + "action": "פעולה", + "actor": "שחקן", + "target": "יעד", + "details": "פרטים", + "ipAddress": "כתובת IP", + "notAvailable": "—", + "noEntries": "לא נמצאו ערכי יומן ביקורת", + "previous": "הקודם", + "next": "הבא" + }, + "onboarding": { + "welcome": "ברוך הבא", + "security": "אבטחה", + "test": "מבחן", + "ready": "מוכן!", + "setPassword": "הגדר סיסמה", + "addProvider": "הוסף את הספק הראשון שלך", + "getStarted": "התחל", + "skip": "דלג", + "skipWizard": "דלג לחלוטין על האשף", + "skipPassword": "דלג על הגדרת הסיסמה", + "skipAndContinue": "דלג והמשך", + "passwordLabel": "סיסמה", + "confirmPassword": "אשר את הסיסמה", + "enterPassword": "הזן סיסמה", + "confirmPasswordPlaceholder": "אשר את הסיסמה", + "passwordsMismatch": "הסיסמאות אינן תואמות", + "setupComplete": "ההתקנה הושלמה!", + "goToDashboard": "עבור אל לוח המחוונים →", + "welcomeDesc": "OmniRoute הוא פרוקסי ה-AI API המקומי שלך. הוא מנתב בקשות לספקי AI מרובים עם איזון עומסים, כשל ומעקב אחר שימוש.", + "multiProvider": "רב ספקים", + "usageTracking": "מעקב אחר שימוש", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "הגדר סיסמה כדי להגן על לוח המחוונים שלך, או דלג לעת עתה.", + "providerDesc": "חבר את ספק הבינה המלאכותית הראשון שלך. תוכל להוסיף עוד מאוחר יותר.", + "apiKeyRequired": "מפתח API (נדרש)", + "customUrlOptional": "כתובת אתר מותאמת אישית (אופציונלי)", + "testDesc": "בוא נוודא שחיבור הספק שלך עובד.", + "runTest": "הפעל בדיקת חיבור", + "testingConnection": "בודק חיבור...", + "connectionSuccessful": "החיבור הצליח! הספק שלך מוכן.", + "noProviderFound": "לא נמצא ספק. אתה יכול להוסיף אחד מלוח המחוונים מאוחר יותר.", + "testFailed": "הבדיקה נכשלה, אך תוכל להגדיר זאת מאוחר יותר.", + "couldNotTest": "לא ניתן לבדוק כרגע. אתה יכול לבדוק מלוח המחוונים.", + "doneDesc": "אתה מוכן! מופע OmniRoute שלך ​​מוגדר ומוכן לבקשות AI בשרת proxy.", + "yourEndpoint": "נקודת הקצה שלך:", + "continue": "המשך", + "retry": "נסה שוב", + "failedSetPassword": "הגדרת הסיסמה נכשלה. נסה שוב.", + "failedAddProvider": "הוספת הספק נכשלה. נסה שוב.", + "connectionError": "שגיאת חיבור. אנא נסה שוב.", + "provider": "ספק" + }, + "providers": { + "title": "ספקים", + "addProvider": "הוסף ספק", + "editProvider": "ערוך ספק", + "deleteProvider": "מחק ספק", + "noProviders": "לא הוגדרו ספקים", + "modelAvailability": "זמינות דגם", + "accounts": "חשבונות", + "newAccount": "חשבון חדש", + "deleteConfirm": "האם אתה בטוח שברצונך למחוק את הספק הזה?", + "testing": "בודקים...", + "testConnection": "בדיקת חיבור", + "testSuccess": "החיבור הצליח", + "testFailed": "החיבור נכשל", + "available": "זמין", + "cooldown": "התקררות", + "unavailable": "לא זמין", + "unknown": "לא ידוע", + "oauthLabel": "OAuth", + "compatibleLabel": "תואם", + "chat": "צ'אט", + "responses": "תגובות", + "messages": "הודעות", + "oauthProviders": "ספקי OAuth", + "freeProviders": "ספקים בחינם", + "apiKeyProviders": "ספקי מפתח API", + "compatibleProviders": "ספקים תואמים מפתח API", + "testAll": "בדוק הכל", + "testAllOAuth": "בדוק את כל חיבורי OAuth", + "testAllFree": "בדוק את כל החיבורים החינמיים", + "testAllApiKey": "בדוק את כל חיבורי מפתח ה-API", + "testAllCompatible": "בדוק את כל החיבורים התואמים", + "connected": "{count} מחובר", + "errorCount": "{count} שגיאה ({code})", + "errorCountNoCode": "{count} שגיאה", + "noConnections": "אין קשרים", + "disabled": "מושבת", + "enableProvider": "הפעל ספק", + "disableProvider": "השבת את הספק", + "testResults": "תוצאות בדיקה", + "noCompatibleYet": "עדיין לא נוספו ספקים תואמים", + "compatibleHint": "השתמש בלחצנים שלמעלה כדי להוסיף נקודות קצה תואמות OpenAI או Anthropic", + "addOpenAICompatible": "הוסף OpenAI Compatible", + "addAnthropicCompatible": "הוסף תואם אנתרופי", + "addNewProvider": "הוסף ספק חדש", + "backToProviders": "חזרה לספקים", + "configureNewProvider": "הגדר ספק AI חדש לשימוש עם היישומים שלך.", + "providerLabel": "ספק", + "selectProvider": "בחר ספק", + "selectedProvider": "ספק נבחר", + "authMethod": "שיטת אימות", + "apiKeyLabel": "מפתח API", + "apiKeyRequired": "מפתח API נדרש", + "selectProviderRequired": "אנא בחר ספק", + "enterApiKey": "הזן את מפתח ה-API שלך", + "apiKeySecure": "מפתח ה-API שלך יוצפן ויישמר בצורה מאובטחת.", + "oauth2Connect": "התחבר עם OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "חבר את החשבון שלך באמצעות אימות OAuth2.", + "displayName": "שם תצוגה", + "displayNamePlaceholder": "למשל, ייצור API, Dev Environment", + "displayNameHint": "אופציונלי. שם ידידותי לזיהוי תצורה זו.", + "active": "פעיל", + "activeDescription": "אפשר ספק זה לשימוש ביישומים שלך", + "cancel": "בטל", + "createProvider": "צור ספק", + "failedCreate": "יצירת הספק נכשלה", + "errorOccurred": "אירעה שגיאה. אנא נסה שוב.", + "modelStatus": "סטטוס דגם", + "allModelsOperational": "כל הדגמים מבצעיים", + "modelsWithIssues": "{count} דגמים עם בעיות", + "allModelsNormal": "כל הדגמים מגיבים כרגיל.", + "cooldownCleared": "קירור נוקה עבור {model}", + "failedClearCooldown": "ניקוי הקירור נכשל", + "loadingAvailability": "טוען זמינות דגם...", + "clearCooldown": "ברור", + "clearing": "מנקה...", + "until": "עד {time}", + "providerTestFailed": "בדיקת הספק נכשלה", + "modeTest": "{mode} מבחן", + "passedCount": "{count} עבר", + "failedCount": "{count} נכשל", + "testedCount": "{count} נבדק", + "millisecondsAbbr": "{value}ms", + "okShort": "בסדר", + "errorShort": "שגיאה", + "noActiveConnectionsInGroup": "לא נמצאו חיבורים פעילים לקבוצה זו.", + "allTestsPassed": "כל המבחנים {total} עברו", + "testSummary": "{passed}/{total} עבר, {failed} נכשל", + "nameLabel": "שם", + "prefixLabel": "קידומת", + "baseUrlLabel": "כתובת האתר הבסיסית", + "apiTypeLabel": "סוג API", + "prefixHint": "חובה. קידומת ייחודית לשמות הדגמים.", + "nameHint": "חובה. תווית ידידותית לצומת זה.", + "baseUrlHint": "חובה.  כתובת האתר הבסיסית של ספק API.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "אימות חיבור", + "validating": "מאמת...", + "connectionValid": "החיבור תקף!", + "connectionFailed": "החיבור נכשל. בדוק כתובת אתר ומפתח.", + "testKeyLabel": "בדוק מפתח API", + "testKeyPlaceholder": "sk-... (לאימות בלבד)", + "providerNotFound": "הספק לא נמצא", + "deleteConnectionConfirm": "למחוק את החיבור הזה?", + "failedSetAlias": "הגדרת הכינוי נכשלה", + "failedSaveConnection": "שמירת החיבור נכשלה", + "failedSaveConnectionRetry": "שמירת החיבור נכשלה. אנא נסה שוב.", + "failedRetestConnection": "הבדיקה מחדש של החיבור נכשלה", + "deleteCompatibleNodeConfirm": "למחוק את הצומת התואם {type} הזה?", + "anthropicCompatibleDetails": "פרטים תואמים לאנתרופיים", + "openaiCompatibleDetails": "פרטים תואמי OpenAI", + "messagesApi": "הודעות API", + "responsesApi": "API של תגובות", + "chatCompletions": "השלמת צ'אט", + "importingModels": "מייבא...", + "importFromModels": "ייבוא מ /models", + "addConnectionToImport": "הוסף חיבור כדי לאפשר ייבוא.", + "noModelsConfigured": "לא הוגדרו דגמים", + "connectionCount": "{count} חיבור(ים)", + "fetchingModels": "מביא דגמים זמינים...", + "failedFetchModels": "אחזור הדגמים נכשל", + "noModelsFound": "לא נמצאו דגמים", + "importFailed": "הייבוא נכשל", + "noNewModelsAdded": "לא נוספו דגמים חדשים.", + "adding": "מוסיף...", + "importingModelsTitle": "ייבוא דגמים", + "copyModel": "העתק דגם", + "removeModel": "הסר את הדגם", + "rateLimitProtected": "מוגן", + "rateLimitUnprotected": "לא מוגן", + "enableRateLimitProtection": "לחץ כדי להפעיל הגנה על מגבלת שיעור", + "disableRateLimitProtection": "לחץ כדי להשבית את ההגנה על מגבלת התעריף", + "productionKey": "מפתח ייצור", + "enterNewApiKey": "הזן מפתח API חדש", + "optional": "אופציונלי", + "anthropicCompatibleName": "תואם אנתרופי", + "openaiCompatibleName": "תואם OpenAI", + "failedImportModels": "ייבוא דגמים נכשל", + "noModelsReturnedFromEndpoint": "לא הוחזרו מודלים מנקודת הקצה /models.", + "importingModelsProgress": "מייבא {current} מתוך דגמי {total}...", + "foundModelsStartingImport": "נמצאו דגמי {count}. מתחיל לייבא...", + "importingModelById": "מייבא את {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} יובא בהצלחה!", + "noNewModelsAddedExisting": "לא נוספו דגמים חדשים (כולם כבר קיימים).", + "importDoneCount": "✓ בוצע! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "אירעה שגיאה בלתי צפויה", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "הודעות", + "responsesPath": "תגובות", + "chatCompletionsPath": "צ'אט/השלמות", + "add": "הוסף", + "edit": "ערוך", + "delete": "מחק", + "anthropic": "אנתרופית", + "openai": "OpenAI", + "singleConnectionPerCompatible": "רק חיבור אחד מותר לכל צומת תואם. הוסף צומת נוסף אם אתה זקוק לחיבורים נוספים.", + "connections": "חיבורים", + "providerProxyTitleConfigured": "proxy של ספק: {host}", + "configured": "מוגדר", + "providerProxyConfigureHint": "הגדר פרוקסי עבור כל החיבורים של ספק זה", + "providerProxy": "פרוקסי של ספק", + "noConnectionsYet": "עדיין אין קשרים", + "addFirstConnectionHint": "הוסף את החיבור הראשון שלך כדי להתחיל", + "addConnection": "הוסף חיבור", + "availableModels": "דגמים זמינים", + "pageAutoRefresh": "הדף יתרענן אוטומטית...", + "statusDisabled": "נכים", + "statusConnected": "מחובר", + "statusRuntimeIssue": "בעיה בזמן ריצה", + "statusAuthFailed": "האימות נכשל", + "statusRateLimited": "שיעור מוגבל", + "statusNetworkIssue": "בעיה ברשת", + "statusTestUnsupported": "בדיקה לא נתמכת", + "statusUnavailable": "לא זמין", + "statusFailed": "נכשל", + "statusError": "שגיאה", + "oauthAccount": "חשבון OAuth", + "errorTypeRuntime": "זמן ריצה מקומי", + "errorTypeUpstreamAuth": "אישור במעלה הזרם", + "errorTypeMissingCredential": "חסר אישור", + "errorTypeRefreshFailed": "הרענון נכשל", + "errorTypeTokenExpired": "פג תוקף האסימון", + "errorTypeRateLimited": "שיעור מוגבל", + "errorTypeUpstreamUnavailable": "במעלה הזרם לא זמין", + "errorTypeNetworkError": "שגיאת רשת", + "errorTypeTestUnsupported": "הבדיקה לא נתמכת", + "errorTypeUpstreamError": "שגיאה במעלה הזרם", + "proxySourceGlobal": "גלובלי", + "proxySourceProvider": "ספק", + "proxySourceKey": "מפתח", + "proxyConfiguredBySource": "פרוקסי ({source}): {host}", + "autoPriority": "אוטומטי: {priority}", + "proxy": "פרוקסי", + "retestAuthentication": "בדוק שוב את האימות", + "retest": "בדיקה חוזרת", + "disableConnection": "השבת את החיבור", + "enableConnection": "אפשר חיבור", + "reauthenticateConnection": "אימות מחדש את החיבור הזה", + "proxyConfig": "תצורת פרוקסי", + "aliasExistsAlert": "הכינוי \"{alias}\" כבר קיים. אנא השתמש בדגם אחר או ערוך כינוי קיים.", + "openRouterAnyModelHint": "OpenRouter תומך בכל דגם. הוסף דגמים וצור כינויים לגישה מהירה.", + "modelIdFromOpenRouter": "מזהה דגם (מ-OpenRouter)", + "openRouterModelPlaceholder": "אנתרופי/קלאוד-3-אופוס", + "customModels": "דגמים מותאמים אישית", + "customModelsHint": "הוסף מזהי דגמים שאינם ברשימת ברירת המחדל. אלה יהיו זמינים לניתוב.", + "modelId": "מזהה דגם", + "customModelPlaceholder": "למשל gpt-4.5-טורבו", + "loading": "טוען...", + "removeCustomModel": "הסר דגם מותאם אישית", + "noCustomModels": "עדיין לא נוספו דגמים מותאמים אישית.", + "allSuggestedAliasesExist": "כל הכינויים המוצעים כבר קיימים. בחר דגם אחר או הסר כינויים סותרים.", + "failedSaveCustomModel": "שמירת הדגם המותאם אישית נכשלה", + "modelAddedSuccess": "הדגם {modelId} נוסף בהצלחה", + "failedAddModelTryAgain": "הוספת הדגם נכשלה. אנא נסה שוב.", + "failedSaveImportedModel": "שמירת המודל המיובא במסד נתונים מותאם אישית נכשלה", + "failedImportModelsTryAgain": "ייבוא דגמים נכשל. אנא נסה שוב.", + "failedRemoveModelFromDatabase": "הסרת הדגם ממסד הנתונים נכשלה", + "modelRemovedSuccess": "הדגם הוסר בהצלחה", + "failedDeleteModelTryAgain": "מחיקת הדגם נכשלה. אנא נסה שוב.", + "compatibleModelsDescription": "הוסף מודלים תואמים ל-{type} באופן ידני או ייבא אותם מנקודת הקצה /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "אימות מפתח API נכשל. בדוק את המפתח שלך ונסה שוב.", + "addProviderApiKeyTitle": "הוסף מפתח API של {provider}", + "checking": "בודק...", + "check": "בדוק", + "valid": "תקף", + "invalid": "לא חוקי", + "creating": "יוצר...", + "validationChecksAnthropicCompatible": "אימות בודק {provider} על ידי אימות מפתח ה-API.", + "validationChecksOpenAiCompatible": "בדיקת אימות {provider} באמצעות /models בכתובת האתר הבסיסית שלך.", + "priorityLabel": "עדיפות", + "saving": "שומר...", + "save": "שמור", + "editConnection": "ערוך חיבור", + "accountName": "שם חשבון", + "email": "דוא\"ל", + "healthCheckMinutes": "בדיקת בריאות (דקה)", + "healthCheckHint": "מרווח רענון אסימון פרואקטיבי. 0 = מושבת.", + "failedTestConnection": "בדיקת החיבור נכשלה", + "failed": "נכשל", + "leaveBlankKeepCurrentApiKey": "השאר ריק כדי לשמור את מפתח ה-API הנוכחי.", + "editCompatibleTitle": "ערוך {type} תואם", + "compatibleBaseUrlHint": "השתמש בכתובת ה-URL הבסיסית (המסתיימת ב-/v1) עבור ה-API התואם {type} שלך.", + "apiKeyForCheck": "מפתח API (לבדיקה)", + "compatibleProdPlaceholder": "{type} תואם (פרוד)" + }, + "settings": { + "title": "הגדרות", + "general": "כללי", + "security": "אבטחה", + "appearance": "מראה", + "routing": "ניתוב", + "cache": "מטמון", + "resilience": "חוסן", + "systemPrompt": "הנחית מערכת", + "thinkingBudget": "חשיבה תקציב", + "proxy": "פרוקסי", + "pricing": "תמחור", + "storage": "אחסון", + "policies": "מדיניות", + "ipFilter": "מסנן IP", + "comboDefaults": "ברירת מחדל משולבת", + "fallbackChains": "שרשראות Fallback", + "changePassword": "שנה סיסמה", + "enablePassword": "אפשר סיסמה", + "darkMode": "מצב כהה", + "lightMode": "מצב אור", + "systemTheme": "ערכת נושא של המערכת", + "enableCache": "אפשר מטמון", + "cacheTTL": "מטמון TTL", + "maxCacheSize": "גודל מטמון מקסימלי", + "clearCache": "נקה את המטמון", + "cacheHits": "מטמון להיטים", + "cacheMisses": "מטמון פספוסים", + "hitRate": "שיעור כניסות", + "cacheEntries": "ערכים במטמון", + "circuitBreaker": "מפסק חשמל", + "retryPolicy": "מדיניות נסה שוב", + "maxRetries": "מקסימום מנסה שוב", + "retryDelay": "נסה שוב Delay", + "timeoutMs": "זמן קצוב (ms)", + "enableSystemPrompt": "הפעל את בקשת המערכת", + "systemPromptText": "טקסט הודעת מערכת", + "enableThinking": "אפשר חשיבה", + "maxThinkingTokens": "מקס חשיבה אסימונים", + "enableProxy": "אפשר פרוקסי", + "proxyUrl": "כתובת פרוקסי", + "pricingRates": "פורמט תעריפים", + "currentPricing": "סקירת תמחור נוכחית", + "loadingPricing": "טוען נתוני תמחור...", + "noPricing": "אין נתוני תמחור זמינים", + "input": "קלט", + "output": "פלט", + "cached": "שמור במטמון", + "reasoning": "נימוק", + "cacheCreation": "יצירת מטמון", + "customPricing": "תמחור מותאם אישית", + "databaseSize": "גודל מסד נתונים", + "backupDb": "מסד נתונים גיבוי", + "restoreDb": "שחזר מסד נתונים", + "exportData": "ייצוא נתונים", + "importData": "ייבוא נתונים", + "clearData": "נקה את כל הנתונים", + "clearDataConfirm": "פעולה זו תמחק לצמיתות את כל הנתונים. אתה בטוח?", + "enableRequestLogs": "הפעל יומני בקשות", + "logRetention": "שימור יומן", + "ipWhitelist": "רשימת ה-IP הלבנה", + "ipBlacklist": "רשימה שחורה של IP", + "addIP": "הוסף IP", + "savedSuccessfully": "ההגדרות נשמרו בהצלחה", + "ai": "AI", + "advanced": "מתקדם", + "localMode": "מצב מקומי - כל הנתונים המאוחסנים במכשיר שלך", + "settingsSectionsAria": "קטעי הגדרות", + "switchThemes": "עבור בין נושאים בהירים לכהים", + "themeSelectionAria": "בחירת נושא", + "themeLight": "אור", + "themeDark": "כהה", + "themeSystem": "מערכת", + "hideHealthLogs": "הסתר יומני בדיקת בריאות", + "hideHealthLogsDesc": "כאשר מופעל, דחק הודעות [HealthCheck] במסוף השרת", + "promptCache": "הפקודה מטמון", + "flushCache": "לשטוף את המטמון", + "flushing": "שוטף…", + "size": "גודל", + "hits": "להיטים", + "evictions": "פינויים", + "loadingCacheStats": "טוען נתונים סטטיסטיים של מטמון...", + "globalProxy": "פרוקסי גלובלי", + "globalProxyDesc": "הגדר פרוקסי יוצא גלובלי עבור כל קריאות ה-API. ספקים בודדים, שילובים ומפתחות יכולים לעקוף זאת.", + "noGlobalProxy": "לא הוגדר פרוקסי גלובלי", + "globalLabel": "גלובלי", + "configure": "הגדר", + "globalSystemPrompt": "הודעת מערכת גלובלית", + "systemPromptDesc": "מוזרק לכל הבקשות ברמת פרוקסי", + "saved": "נשמר", + "systemPromptPlaceholder": "הזן בקשת מערכת כדי להזין את כל הבקשות...", + "systemPromptHint": "הנחיה זו מוצמדת להודעת המערכת של כל בקשה. השתמש עבור הוראות גלובליות, הנחיות בטיחות או כללי עיצוב תגובה.", + "chars": "{count} תווים", + "thinkingBudgetTitle": "חשיבה תקציב", + "thinkingBudgetDesc": "שליטה בשימוש באסימונים של AI בכל הבקשות", + "passthrough": "מעבר", + "passthroughDesc": "ללא שינויים - הלקוח שולט בתקציב החשיבה", + "auto": "אוטומטי", + "autoDesc": "הסר את כל תצורת החשיבה - תן לספק להחליט", + "custom": "מותאם אישית", + "customDesc": "הגדר תקציב אסימון קבוע עבור כל הבקשות", + "adaptive": "הסתגלות", + "adaptiveDesc": "קנה מידה תקציב בהתאם למורכבות הבקשה", + "effortNone": "אין (0 אסימונים)", + "effortLow": "נמוך (1K אסימונים)", + "effortMedium": "בינוני (10K אסימונים)", + "effortHigh": "גבוה (128K אסימונים)", + "tokenBudget": "תקציב סמלי", + "tokens": "אסימונים", + "baseEffortLevel": "רמת מאמץ בסיסית", + "adaptiveHint": "מצב הסתגלות משתנה מרמת בסיס זו על סמך ספירת הודעות, שימוש בכלי ואורך ההנחיות.", + "requireLogin": "דרוש כניסה", + "requireLoginDesc": "כאשר מופעל, לוח המחוונים דורש סיסמה. כאשר כבוי, גישה ללא התחברות.", + "currentPassword": "סיסמה נוכחית", + "enterCurrentPassword": "הזן את הסיסמה הנוכחית", + "newPassword": "סיסמה חדשה", + "enterNewPassword": "הזן סיסמה חדשה", + "confirmPassword": "אשר סיסמה חדשה", + "confirmPasswordPlaceholder": "אשר את הסיסמה החדשה", + "passwordsNoMatch": "הסיסמאות אינן תואמות", + "passwordUpdated": "הסיסמה עודכנה בהצלחה", + "failedUpdatePassword": "עדכון הסיסמה נכשל", + "errorOccurred": "אירעה שגיאה", + "updatePassword": "עדכן סיסמה", + "setPassword": "הגדר סיסמה", + "apiEndpointProtection": "הגנת נקודת קצה של API", + "requireAuthModels": "דרוש מפתח API עבור /models", + "requireAuthModelsDesc": "כאשר מופעל, נקודת הקצה /v1/models מחזירה 404 עבור בקשות לא מאומתות. מונע גילוי מודל על ידי משתמשים לא מורשים.", + "blockedProviders": "ספקים חסומים", + "blockedProvidersDesc": "הסתר ספקים ספציפיים מהתגובה /v1/models. ספקים חסומים לא יופיעו ברשימות הדגמים.", + "providersBlocked": "{count} ספק(ים) חסומים מ/מודלים", + "blockProviderTitle": "חסום {provider}", + "unblockProviderTitle": "בטל את החסימה של {provider}", + "routingStrategy": "אסטרטגיית ניתוב", + "fillFirst": "תמלא קודם", + "fillFirstDesc": "השתמש בחשבונות בסדר עדיפות", + "roundRobin": "רובין עגול", + "roundRobinDesc": "עברו על כל החשבונות", + "p2c": "P2C", + "p2cDesc": "בחר 2 אקראי, השתמש באחד הבריא יותר", + "random": "אקראי", + "randomDesc": "חשבון אקראי בכל בקשה", + "leastUsed": "הכי פחות בשימוש", + "leastUsedDesc": "בחר חשבון שנעשה בו שימוש לפחות לאחרונה", + "costOpt": "אופטימיזציית עלות", + "costOptDesc": "העדיפו את החשבון הזול ביותר הזמין", + "stickyLimit": "גבול דביק", + "stickyLimitDesc": "שיחות לכל חשבון לפני המעבר", + "modelAliases": "כינויי דגם", + "modelAliasesDesc": "תבניות תווים כלליים למיפוי מחדש של שמות מודלים • השתמש ב-* וב-?", + "aliasPatternPlaceholder": "קלוד-סונט-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "דפוס", + "targetModel": "דגם מטרה", + "add": "+ הוסף", + "session": "מושב", + "sessionDetailsAria": "פרטי הפגישה", + "status": "סטטוס", + "authenticated": "מאומת", + "guest": "אורח", + "loginTime": "זמן כניסה", + "sessionAge": "גיל מושב", + "browser": "דפדפן", + "clearLocalData": "נקה נתונים מקומיים", + "logout": "התנתק", + "clearLocalDataConfirm": "לנקות את כל הנתונים המקומיים? זה יאפס את ההעדפות שלך.", + "unknown": "לא ידוע", + "systemActor": "מערכת", + "ipAccessControl": "בקרת גישה ל-IP", + "ipAccessControlDesc": "חסום או אפשר כתובות IP ספציפיות", + "ipModeDisabled": "מושבת", + "ipModeBlacklist": "רשימה שחורה", + "ipModeWhitelist": "רשימת הלבנים", + "ipModeWhitelistPriority": "עדיפות WL", + "addIpAddress": "הוסף כתובת IP", + "ipAddressPlaceholder": "192.168.1.0/24 או 10.0.*.*", + "block": "+ חסום", + "allow": "+ אפשר", + "blocked": "חסום ({count})", + "allowed": "מותר ({count})", + "temporaryBans": "איסורים זמניים ({count})", + "minLeft": "נותרו {min}מ'", + "auditLog": "יומן ביקורת", + "searchAuditLogs": "חפש ביומני ביקורת...", + "failedLoadAuditLog": "טעינת יומן הביקורת נכשלה", + "noAuditEvents": "לא נמצאו אירועי ביקורת", + "action": "פעולה", + "actor": "שחקן", + "details": "פרטים", + "time": "זמן", + "fallbackChainsTitle": "שרשראות Fallback", + "fallbackChainsDesc": "הגדר סדר חילוף של ספק לכל דגם", + "addChain": "+ הוסף שרשרת", + "modelName": "שם הדגם", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "ספקים (מופרדים בפסיקים, לפי סדר עדיפות)", + "providersCommaSeparatedPlaceholder": "אנתרופי, אופנאי, תאומים", + "createChain": "צור שרשרת", + "noFallbackChains": "אין שרשראות נפילה", + "noFallbackChainsDesc": "צור שרשרת כדי להגדיר סדר חילוף של ספק עבור דגם.", + "loadingFallbackChains": "טוען שרשראות חוזרות...", + "deleteChainConfirm": "האם למחוק שרשרת חלופית עבור \"{model}\"?", + "chainCreated": "שרשרת נוצרה עבור {model}", + "chainDeleted": "השרשרת נמחקה עבור {model}", + "failedCreateChain": "יצירת השרשרת נכשלה", + "failedDeleteChain": "מחיקת השרשרת נכשלה", + "deleteChain": "מחק שרשרת", + "fillModelAndProviders": "נא למלא את שם הדגם והספקים", + "addAtLeastOneProvider": "הוסף לפחות ספק אחד", + "comboDefaultsTitle": "ברירת מחדל משולבת", + "globalComboConfig": "תצורת משולבת גלובלית", + "defaultStrategy": "אסטרטגיית ברירת מחדל", + "defaultStrategyDesc": "מיושם על שילובים חדשים ללא אסטרטגיה מפורשת", + "comboStrategyAria": "אסטרטגיה משולבת", + "priority": "עדיפות", + "weighted": "משוקלל", + "maxRetriesLabel": "מקסימום מנסה שוב", + "retryDelayLabel": "נסה שוב עיכוב (מילישניות)", + "timeoutLabel": "זמן קצוב (ms)", + "healthCheck": "בדיקת בריאות", + "healthCheckDesc": "בדוק מראש את זמינות הספק", + "trackMetrics": "עקוב אחר מדדים", + "trackMetricsDesc": "רשום ערכי בקשת משולבת", + "providerOverrides": "עקיפות ספק", + "providerOverridesDesc": "עוקף פסק זמן וניסיונות חוזרים לכל ספק. הגדרות הספק עוקפות את ברירת המחדל העולמית.", + "providerMaxRetriesAria": "{provider} מקסימום ניסיונות חוזרים", + "providerTimeoutAria": "{provider} זמן קצוב שניות", + "removeProviderOverrideAria": "הסר את עקיפת {provider}", + "newProviderNamePlaceholder": "למשל גוגל, פתח...", + "newProviderNameAria": "שם ספק חדש", + "retries": "ניסיונות חוזרים", + "ms": "MS", + "saveComboDefaults": "שמור את ברירת המחדל של Combo", + "maxNestingDepth": "עומק קינון מקסימלי", + "concurrencyPerModel": "במקביל / דגם", + "queueTimeout": "זמן קצוב לתור (מילישניות)", + "providerProfiles": "פרופילי ספקים", + "providerProfilesDesc": "הגדרות חוסן נפרדות עבור ספקי OAuth (מבוסס הפעלה) ומפתח API (מדוד). לספקי OAuth יש ספים מחמירים יותר בגלל מגבלות תעריפים נמוכות יותר.", + "oauthProviders": "ספקי OAuth", + "apiKeyProviders": "ספקי מפתח API", + "transientCooldown": "קירור חולף", + "rateLimitCooldown": "צינון מגבלת שיעור", + "maxBackoffLevel": "רמת גיבוי מקסימלית", + "cbThreshold": "סף CB", + "cbResetTime": "זמן איפוס CB", + "rateLimiting": "הגבלת תעריפים", + "rateLimitingDesc": "ספקי מפתחות API מוגבלים אוטומטית בתעריף עם ברירות מחדל בטוחות. מגבלות נלמדות מכותרות תגובות ומתאימות לאורך זמן.", + "defaultSafetyNet": "רשת בטיחות ברירת מחדל", + "rpm": "סל\"ד", + "minGap": "Min Gap", + "maxConcurrent": "מקסימום במקביל", + "activeLimiters": "מגבילים פעילים", + "noActiveLimiters": "עדיין אין מגבילי תעריפים פעילים.", + "reservoir": "מאגר", + "running": "ריצה", + "queued": "בתור", + "circuitBreakers": "מפסקים", + "breakerStateClosed": "סגור", + "breakerStateOpen": "פתוח", + "breakerStateHalfOpen": "חצי פתוח", + "tripped": "{count} מעד", + "healthy": "{count} בריא", + "resetAll": "אפס הכל", + "noCircuitBreakers": "אין מפסקים פעילים עדיין. הם נוצרים באופן אוטומטי כאשר בקשות זורמות בצינור המשולב.", + "failures": "{count} כשלים", + "policiesLocked": "מדיניות ומזהים נעולים", + "allOperational": "כל המערכות פועלות - ללא נעילה או מפסקים שהותקעו", + "loadingPolicies": "טוען מדיניות...", + "lockedIdentifiers": "מזהים נעולים", + "unlockedIdentifier": "לא נעול: {identifier}", + "sinceDate": "מאז {date}", + "forceUnlock": "ביטול נעילה בכוח", + "unlocking": "פותח...", + "failedUnlock": "ביטול הנעילה נכשל", + "failedLoadWithStatus": "הטעינה נכשלה: {status}", + "failedLoadResilience": "טעינת סטטוס החוסן נכשלה", + "saveFailed": "השמירה נכשלה", + "resetFailed": "האיפוס נכשל", + "loadingResilience": "טוען סטטוס חוסן...", + "retry": "נסה שוב", + "systemStorage": "מערכת ואחסון", + "allDataLocal": "כל הנתונים המאוחסנים באופן מקומי במחשב שלך", + "databasePath": "נתיב מסד נתונים", + "exportDatabase": "ייצוא מסד נתונים", + "exportAll": "ייצא הכל (.tar.gz)", + "importDatabase": "ייבוא מסד נתונים", + "confirmDbImport": "אשר ייבוא מסד נתונים", + "confirmDbImportDesc": "פעולה זו תחליף את כל הנתונים הנוכחיים בתוכן מ-{file}. גיבוי ייווצר אוטומטית לפני הייבוא.", + "yesImport": "כן, ייבוא", + "lastBackup": "גיבוי אחרון", + "noBackupYet": "עדיין אין גיבוי", + "backupNow": "גיבוי עכשיו", + "backupRestore": "גיבוי ושחזור", + "viewBackups": "הצג גיבויים", + "hide": "הסתר", + "backupRetentionDesc": "צילומי מסד נתונים נוצרים באופן אוטומטי לפני השחזור וכל 15 דקות כאשר הנתונים משתנים. שימור: 24 שעות + 30 גיבויים יומיים עם סיבוב חכם.", + "loadingBackups": "טוען גיבויים...", + "noBackupsYet": "עדיין אין גיבויים זמינים. גיבויים ייווצרו באופן אוטומטי כאשר הנתונים משתנים.", + "backupsAvailable": "{count} גיבוי(ים) זמינים", + "refresh": "רענן", + "confirm": "לאשר?", + "yes": "כן", + "no": "לא", + "restore": "שחזר", + "invalidFileType": "סוג קובץ לא חוקי. רק קבצי sqlite מתקבלים.", + "exportFailed": "הייצוא נכשל", + "exportFailedWithError": "הייצוא נכשל: {error}", + "fullExportFailedWithError": "הייצוא המלא נכשל: {error}", + "backupCreated": "גיבוי נוצר: {file}", + "restoreSuccess": "שוחזר! {connections} חיבורים, {nodes} צמתים, {combos} שילובים, {apiKeys} מפתחות API.", + "importSuccess": "מסד נתונים מיובא! {connections} חיבורים, {nodes} צמתים, {combos} שילובים, {apiKeys} מפתחות API.", + "justNow": "רק עכשיו", + "minutesAgo": "לפני {count}מ'", + "hoursAgo": "לפני {count}h", + "daysAgo": "לפני {count}d", + "backupReasonManual": "ידני", + "backupReasonPreRestore": "שחזור מראש", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "אין שינויים מאז הגיבוי האחרון", + "backupFailed": "הגיבוי נכשל", + "restoreFailed": "השחזור נכשל", + "importFailed": "הייבוא נכשל", + "errorDuringRestore": "אירעה שגיאה במהלך השחזור", + "errorDuringImport": "אירעה שגיאה במהלך הייבוא", + "modelPricing": "תמחור דגם", + "modelPricingDesc": "הגדר תעריפי עלות לכל דגם • כל התעריפים באסימונים של $/1M", + "providers": "ספקים", + "registry": "רישום", + "priced": "במחיר", + "searchProvidersModels": "חיפוש ספקים או דגמים...", + "showAll": "הצג הכל", + "noProvidersMatch": "אין ספקים שתואמים לחיפוש שלך.", + "howPricingWorks": "איך עובד התמחור", + "cacheWrite": "כתוב מטמון", + "unsaved": "לא נשמר", + "resetDefaults": "אפס את ברירת המחדל", + "saveProvider": "שמור ספק", + "saving": "שומר...", + "model": "דגם", + "models": "דגמים", + "moreProviders": "{count} ספקים נוספים", + "withPricing": "עם התמחור מוגדר", + "policiesCircuitBreakers": "מדיניות ומפסקי חשמל", + "activeIssuesDetected": "זוהו בעיות פעילות", + "off": "כבוי", + "resetPricingConfirm": "לאפס את כל התמחור עבור {provider} לברירות המחדל?", + "pricingDescInput": "קלט: אסימונים שנשלחו לדגם", + "pricingDescOutput": "פלט: נוצרו אסימונים", + "pricingDescCached": "מטמון: שימוש חוזר בקלט (~50% מקצב הקלט)", + "pricingDescReasoning": "נימוק: אסימוני חשיבה (נופל בחזרה לפלט)", + "pricingDescCacheWrite": "כתיבת מטמון: יצירת ערכי מטמון (נופל בחזרה לקלט)", + "pricingDescFormula": "עלות = (קלט × input_rate) + (פלט × output_rate) + (מטמון × cached_rate) למיליון אסימונים.", + "pricingSettingsTitle": "הגדרות תמחור", + "totalModels": "סך הכל דגמים", + "active": "פעיל", + "costCalculation": "חישוב עלות", + "costCalculationDesc": "העלויות מחושבות על סמך השימוש באסימונים ותעריפי התמחור שהוגדרו עבור כל דגם.", + "pricingFormat": "פורמט תמחור", + "pricingFormatDesc": "כל התעריפים הם ב-$/1M אסימונים (דולר למיליון אסימונים).", + "tokenTypes": "סוגי אסימונים", + "inputTokenDesc": "אסימוני הנחיה סטנדרטיים", + "outputTokenDesc": "אסימוני השלמה/תגובה", + "cachedTokenDesc": "אסימוני קלט במטמון (בדרך כלל 50% משיעור הקלט)", + "reasoningTokenDesc": "אסימוני נימוק/חשיבה מיוחדים (חזרה לקצב פלט)", + "cacheCreationTokenDesc": "אסימונים המשמשים ליצירת ערכי מטמון (חזרה לקצב קלט)", + "customPricingNote": "אתה יכול לעקוף את תמחור ברירת המחדל עבור דגמים ספציפיים. עקיפות מותאמות אישית מקבלות עדיפות על פני תמחור שזוהה אוטומטית.", + "editPricing": "ערוך תמחור", + "viewFullDetails": "צפה בפרטים המלאים" + }, + "translator": { + "title": "מתרגם", + "metaTitle": "מגרש משחקים מתרגם | OmniRoute", + "metaDescription": "נפה באגים, בדוק והצג תרגומים של פורמט API בין ספקים", + "playgroundTitle": "מגרש משחקים של מתרגמים", + "playground": "מגרש משחקים", + "realtime": "פעילות תרגום בזמן אמת", + "chatTester": "בודק צ'אט", + "testBench": "ספסל מבחן", + "liveMonitor": "צג חי", + "modeDescriptionPlayground": "הדבק כל גוף בקשת API וראה כיצד OmniRoute מתרגם אותו בין פורמטים של ספקים (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "שלח בקשות צ'אט אמיתיות דרך OmniRoute ובדוק את המסלול המלא הלוך ושוב: קלט, בקשה מתורגמת, תגובת ספק ופלט מתורגם.", + "modeDescriptionTestBench": "הפעל תרחישים מוגדרים מראש והשווה תאימות בין ספקים ודגמים.", + "modeDescriptionLiveMonitor": "צפה באירועי תרגום בזמן אמת כאשר בקשות זורמות דרך OmniRoute.", + "modeDescriptionFallback": "נפה באגים, בדוק ודמיין כיצד OmniRoute מתרגם בקשות API בין ספקים.", + "recentTranslations": "תרגומים אחרונים", + "noTranslations": "עדיין אין תרגומים", + "source": "מקור", + "target": "יעד", + "time": "זמן", + "model": "דגם", + "status": "סטטוס", + "latency": "חביון", + "totalTranslations": "סך כל התרגומים", + "successful": "מוצלח", + "errors": "שגיאות", + "avgLatency": "זמן אחזור ממוצע", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "חי - רענון אוטומטי", + "paused": "מושהה", + "eventsAppearHint": "אירועי תרגום מופיעים כאן כאשר בקשות זורמות דרך OmniRoute. השתמש בכל אחת מהשיטות הבאות כדי ליצור אירועים:", + "chatTesterTab": "לשונית בודק צ'אט", + "testBenchTab": "לשונית ספסל בדיקה", + "externalApiCalls": "קריאות API חיצוניות", + "ideCliIntegrations": "שילובי IDE/CLI", + "inMemoryNote": "הערה: אירועים מאוחסנים בזיכרון ומתאפסים כאשר השרת מופעל מחדש.", + "ok": "בסדר", + "errorShort": "שגיאה", + "formatConverter": "ממיר פורמטים", + "formatConverterDescription": "הדבק או הקלד גוף בקשת JSON. המתרגם יזהה אוטומטית את פורמט המקור וימיר אותו לפורמט היעד. השתמש בזה כדי לנפות באגים כיצד OmniRoute מתרגם בקשות בין פורמטים (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "קלט", + "output": "פלט", + "auto": "אוטומטי", + "swapFormats": "החלפת פורמטים", + "translateAction": "תרגם", + "clear": "ברור", + "inputPlaceholder": "הדבק כאן גוף בקשה או בחר תבנית למטה...", + "exampleTemplates": "תבניות לדוגמה", + "exampleTemplatesHint": "- לחץ לטעינה", + "templateLoadHint": "התבנית טוענת את הבקשה בפורמט {format}. שנה את פורמט המקור כדי לטעון בפורמט אחר.", + "compatibilityTester": "בודק תאימות", + "compatibilityReport": "דוח תאימות", + "testBenchDescription": "הפעל תרחישים מוגדרים מראש (Simple Chat, Tool Calling וכו') כדי לאמת תאימות תרגום ותאימות לספקים. בחר פורמט מקור וספק יעד, ולאחר מכן הרץ את כל הבדיקות כדי לראות אחוז תאימות. השתמש בזה כדי למצוא אילו תכונות פועלות בין ספקים.", + "targetProvider": "ספק יעד", + "runAllTests": "הפעל את כל הבדיקות", + "runTest": "הפעל בדיקה", + "reRun": "הרץ מחדש", + "running": "פועל...", + "passed": "עבר", + "failed": "נכשל", + "passedIconLabel": "✅ עבר", + "chunks": "נתחים", + "scenarioSimpleChat": "צ'אט פשוט", + "scenarioToolCalling": "כלי שיחות", + "scenarioMultiTurn": "רב סיבובים", + "scenarioThinking": "חושבים", + "scenarioSystemPrompt": "הנחית מערכת", + "scenarioStreaming": "סטרימינג", + "templateNames": { + "simple-chat": "צ'אט פשוט", + "tool-calling": "כלי שיחות", + "multi-turn": "רב סיבובים", + "thinking": "חושבים", + "system-prompt": "הנחית מערכת", + "streaming": "סטרימינג" + }, + "templateDescriptions": { + "simple-chat": "הודעת טקסט בסיסית", + "tool-calling": "הפעלת פונקציה/כלי", + "multi-turn": "שיחה עם היסטוריה", + "thinking": "חשיבה / חשיבה מורחבת", + "system-prompt": "הוראות מערכת מורכבות", + "streaming": "בקשת הזרמת SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "אתה עוזר מועיל.", + "userGreeting": "שלום! מה שלומך היום?" + }, + "toolCalling": { + "userWeather": "מה מזג האוויר בסאו פאולו?", + "toolDescription": "קבל מזג אוויר עדכני עבור מיקום", + "cityNameDescription": "שם העיר" + }, + "multiTurn": { + "system": "אתה עוזר קידוד.", + "userInitial": "כתוב פונקציה למיון מערך ב- Python.", + "assistantExample": "הנה פונקציית מיון פשוטה:\n\n```פיתון\ndef sort_array(arr):\n החזר ממוין (arr)\n```", + "userFollowUp": "עכשיו עשה את זה בסדר יורד." + }, + "thinking": { + "question": "מהו הסכום של 100 המספרים הראשוניים הראשונים?" + }, + "systemPrompt": { + "systemInstruction": "אתה מהנדס תוכנה בכיר המתמחה במערכות מבוזרות. ענה על שאלות בצורה תמציתית תוך שימוש בשיטות העבודה המומלצות בתעשייה. ספק תמיד דוגמאות קוד כאשר רלוונטי. עצב את התגובות שלך באמצעות סימון.", + "question": "איך אני מיישם דפוס מפסק זרם?" + }, + "streaming": { + "prompt": "ספר לי סיפור קצר על רובוט שלומד לצייר." + } + }, + "openaiCompatibleLabel": "תואם OpenAI", + "anthropicCompatibleLabel": "תואם אנתרופי", + "noTemplateForFormat": "אין תבנית עבור פורמט זה", + "translationFailed": "התרגום נכשל: {error}", + "pipelineDebugger": "מאתר באגים בצנרת", + "translationPipeline": "צינור תרגום", + "pipelineVisualization": "הדמיית צינור", + "pipelineVisualizationHint": "שלח הודעה כדי לראות כיצד הבקשה שלך זורמת באמצעות זיהוי → תרגום → שיחת ספק.", + "chatTesterDescription": "שלח הודעות כפורמט לקוח ספציפי ובדוק כל שלב בצינור התרגום.", + "chatTesterFlow": "בקשת לקוח ← זיהוי פורמט ← OpenAI Intermediate ← פורמט ספק ← תגובה", + "clickStepToInspect": "לחץ על כל שלב כדי לבדוק את הנתונים באותו שלב.", + "clientFormat": "פורמט לקוח", + "provider": "ספק", + "modelPlaceholder": "בחר או הקלד שם דגם...", + "sendMessageToSeePipeline": "שלח הודעה כדי לראות את צינור התרגום", + "chatMessageHintPrefix": "ההודעה שלך תעוצב כ-", + "chatMessageHintSuffix": "בקשה, שתורגמה דרך הצינור, ונשלחה לספק הנבחר.", + "youWithFormat": "אתה ({format})", + "assistant": "עוזר", + "typeMessage": "הקלד הודעה...", + "send": "שלח", + "clientRequest": "בקשת לקוח", + "clientRequestDescription": "גוף הבקשה כפי שהלקוח שלך ישלח אותו", + "formatDetected": "פורמט זוהה", + "formatDetectedDescription": "OmniRoute מזהה אוטומטית את פורמט ה-API ממבנה הבקשה", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "כל הפורמטים מנורמלים תחילה לפורמט OpenAI (הגשר האוניברסלי)", + "providerFormat": "פורמט ספק", + "providerFormatDescription": "פורמט OpenAI מתורגם לפורמט המקורי של הספק", + "providerResponse": "תגובת הספק", + "providerResponseRawDescription": "התגובה הגולמית מ-API של ספק", + "providerResponseSseDescription": "זרם ה-SSE הגולמי מ-API של ספק", + "unexpectedError": "אירעה שגיאה בלתי צפויה", + "error": "שגיאה", + "errorMessage": "שגיאה: {message}", + "requestFailed": "הבקשה נכשלה", + "noTextExtracted": "(לא חולץ טקסט)", + "liveMonitorDescriptionPrefix": "מציג אירועי תרגום כאשר קריאות API זורמות דרך OmniRoute. אירועים מגיעים מהמאגר בזיכרון (מתאפסים בהפעלה מחדש). השתמש", + "liveMonitorDescriptionSuffix": ", או קריאות API חיצוניות ליצירת אירועים." + }, + "usage": { + "title": "שימוש", + "loggerTab": "לוגר", + "proxyTab": "פרוקסי", + "budgetManagement": "ניהול תקציב", + "budgetSaved": "מגבלות התקציב נשמרו", + "budgetSaveFailed": "חיסכון בתקציב נכשל", + "loadingBudgetData": "טוען נתוני תקציב...", + "noApiKeysTitle": "אין מפתחות API", + "noApiKeysDescription": "הוסף מפתחות API תחילה כדי להגדיר מגבלות תקציב.", + "apiKey": "מפתח API", + "todaysSpend": "ההוצאה של היום", + "thisMonth": "החודש הזה", + "setLimits": "הגדר גבולות", + "dailyLimitUsd": "מגבלה יומית (דולר ארה\"ב)", + "monthlyLimitUsd": "מגבלה חודשית (דולר ארה\"ב)", + "warningThresholdPercent": "סף אזהרה (%)", + "dailyLimitPlaceholder": "למשל 5.00", + "monthlyLimitPlaceholder": "למשל 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "שמור גבולות", + "budgetOk": "התקציב בסדר - נותרו {remaining}", + "budgetExceeded": "חרגת מהתקציב - ייתכן שבקשות ייחסמו", + "totalRequests": "סך כל הבקשות", + "noDataYet": "עדיין אין נתונים", + "latency": "חביון", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "עמ' 99", + "promptCache": "הפקודה מטמון", + "systemHealth": "בריאות המערכת", + "entries": "ערכים", + "activeCount": "{count} פעיל", + "openCircuitBreakersDetected": "זוהו מפסקי זרם פתוחים", + "hitRate": "שיעור כניסות", + "hitsMisses": "להיטים / פספוסים", + "circuitBreakers": "מפסקים", + "lockedIPs": "כתובות IP נעולים", + "lockoutsAutoRefreshHint": "נעילות מגבלת קצב לכל דגם • רענון אוטומטי 10 שניות", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} נותרו", + "howItWorks": "איך זה עובד", + "howItWorksSubtitle": "למד כיצד הערכות מאמתות את תגובות ה-LLM שלך", + "define": "תגדיר", + "defineStepDescription": "צור מקרי בדיקה עם הנחיות קלט וקריטריוני פלט צפויים באמצעות אסטרטגיות כמו מכיל, ביטוי רגיל או התאמה מדויקת.", + "run": "רוץ", + "runStepDescription": "בצע מקרי בדיקה מול נקודות הקצה של LLM שלך באמצעות OmniRoute. כל מקרה נשלח כבקשת API אמיתית.", + "evaluate": "להעריך", + "evaluateStepDescription": "תגובות מושוות מול קריטריונים צפויים. ראה עובר/נכשל עבור כל מקרה עם מדדי חביון ומשוב מפורט.", + "evalSuites": "סוויטות הערכה", + "evalSuitesHint": "לחץ על חבילה כדי להציג מקרי בדיקה, ולאחר מכן הפעל כדי להעריך את נקודות הקצה שלך ב-LLM", + "evalsLoading": "טוען סוויטות eval...", + "noEvalSuitesFound": "לא נמצאו סוויטות Eval", + "noEvalSuitesDescription": "ניתן להגדיר חבילות Eval דרך ה-API או בקוד. הם בודקים פלטי מודל מול תוצאות צפויות באמצעות אסטרטגיות כמו מכיל, ביטוי רגיל, התאמה מדויקת ופונקציות מותאמות אישית.", + "columnCase": "מקרה", + "columnStatus": "סטטוס", + "columnLatency": "חביון", + "columnDetails": "פרטים", + "columnModel": "דגם", + "columnStrategy": "אסטרטגיה", + "columnExpected": "צפוי", + "statsSuites": "סוויטות", + "statsTestCases": "מקרי מבחן", + "statsModels": "דגמים", + "statsCoverage": "כיסוי", + "statsStrategiesCount": "{count} אסטרטגיות", + "evaluationStrategies": "אסטרטגיות הערכה", + "modelsUnderTest": "דגמים בבדיקה", + "searchSuitesPlaceholder": "חפש סוויטות...", + "passSuffix": "לעבור", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "הפעל את Eval", + "runningProgress": "פועל {current}/{total}...", + "passRate": "שיעור מעבר", + "summaryBreakdown": "{passed} עבר · {failed} נכשל · {total} סך הכל", + "passedIconLabel": "✅ עבר", + "failedIconLabel": "❌ נכשל", + "detailsContains": "מכיל: \"{term}\"", + "detailsRegex": "ביטוי רגולרי: {pattern}", + "detailsExpected": "צפוי: \"{expected}\"", + "noResultsYet": "עדיין אין תוצאות", + "testCasesCount": "מקרי בדיקה ({count})", + "noTestCasesDefined": "לא הוגדרו מקרי בדיקה", + "runEvalHint": "לחץ על \"הפעל Eval\" כדי לבצע את כל התיקים נגד נקודת הקצה של LLM שלך. כל בדיקה שולחת בקשה אמיתית דרך OmniRoute.", + "notifyNoTestCases": "לא הוגדרו מקרי בדיקה עבור חבילה זו", + "notifyAllCasesPassed": "כל {total} המקרים עברו ✅", + "notifySomeCasesFailed": "{passed}/{total} עבר, {failed} נכשל", + "notifyEvalRunFailed": "ריצת Eval נכשלה", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "הערכות מודל", + "evalsHeroDescription": "בדוק ואמת את נקודות הקצה של LLM שלך על ידי הפעלת חבילות הערכה מוגדרות מראש. כל חבילה מכילה מקרי בדיקה ששולחים הנחיות אמיתיות דרך OmniRoute ומשווים תגובות מול קריטריונים צפויים - עוזרים לך לזהות רגרסיות, להשוות מודלים ולהבטיח איכות תגובה בין ספקים.", + "qualityValidation": "אימות איכות", + "modelComparison": "השוואת דגמים", + "regressionDetection": "זיהוי רגרסיה", + "latencyBenchmarks": "מדדי אחזור", + "modelLockouts": "דגם נעילות", + "noLockouts": "אין דגמים נעולים כרגע", + "activeSessions": "הפעלות פעילות", + "noSessions": "אין הפעלות פעילות", + "sessionsHint": "הפעלות מופיעות כאשר בקשות זורמות דרך ה-proxy", + "sessionsTrackedHint": "מעקב באמצעות טביעת אצבע בקשה • רענון אוטומטי 5s", + "session": "מושב", + "age": "גיל", + "requests": "בקשות", + "connection": "חיבור", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}מ'", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "מגבלות ספקים", + "noProviders": "אין ספקים מחוברים", + "connectProvidersForQuota": "התחבר לספקים עם OAuth כדי לעקוב אחר מגבלות מכסת ה-API והשימוש שלך.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(מסונן מ-{count})", + "autoRefresh": "רענון אוטומטי", + "refreshAll": "רענן הכל", + "loadingQuotas": "טוען...", + "account": "חשבון", + "modelQuotas": "מכסות דגם", + "lastUsed": "בשימוש אחרון", + "actions": "פעולות", + "refreshQuota": "רענון מכסה", + "today": "היום", + "tomorrow": "מחר", + "dayTimeFormat": "{day}, {time}", + "inDuration": "ב{duration}", + "notApplicable": "לא", + "rawPlanWithValue": "תוכנית גולמית: {plan}", + "noPlanFromProvider": "אין תוכנית מספק", + "noQuotaData": "אין נתוני מכסה", + "noQuotaDataAvailable": "אין נתוני מכסה זמינים", + "noAccountsForTierFilter": "לא נמצאו חשבונות עבור מסנן שכבות", + "tierAll": "הכל", + "tierEnterprise": "Enterprise", + "tierTeam": "צוות", + "tierBusiness": "עסקים", + "tierUltra": "אולטרה", + "tierPro": "פרו", + "tierPlus": "בנוסף", + "tierFree": "חינם", + "tierUnknown": "לא ידוע" + }, + "modals": { + "waitingAuth": "ממתין לאישור", + "verificationUrl": "כתובת אתר לאימות", + "yourCode": "הקוד שלך", + "remoteAccess": "גישה מרחוק:", + "connectedSuccess": "מחובר בהצלחה!", + "connectionFailed": "החיבור נכשל", + "chooseAuthMethod": "בחר את שיטת האימות שלך:", + "awsBuilderId": "מזהה בונה AWS", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "חשבון Google", + "githubAccount": "חשבון GitHub", + "importToken": "ייבוא אסימון", + "pasteToken": "הדבק אסימון רענון מ-Kiro IDE.", + "awsRegion": "אזור AWS", + "autoDetecting": "מזהה אוטומטית אסימונים...", + "readingFromCache": "קריאה ממטמון SSO של AWS", + "readingFromCursor": "קריאה ממסד הנתונים Cursor IDE", + "initializing": "מאתחל...", + "pricingConfig": "תצורת תמחור", + "loadingPricing": "טוען נתוני תמחור...", + "pricingRatesFormat": "פורמט תעריפים", + "noPricingData": "אין נתוני תמחור זמינים", + "noModelsFound": "לא נמצאו דגמים" + }, + "loggers": { + "allProviders": "כל הספקים", + "allModels": "כל הדגמים", + "allAccounts": "כל החשבונות", + "allApiKeys": "כל מפתחות ה-API", + "allTypes": "כל הסוגים", + "allLevels": "כל הרמות", + "modelAZ": "דגם A-Z", + "modelZA": "דגם Z-A", + "loadingLogs": "טוען יומנים...", + "loadingProxyLogs": "טוען יומני proxy...", + "noLogEntries": "לא נמצאו רשומות יומן", + "noPayloadData": "אין נתוני מטען זמינים עבור ערך יומן זה.", + "proxyEvent": "אירוע פרוקסי", + "proxy": "פרוקסי", + "level": "רמה", + "directNative": "ישיר (יליד)", + "combo": "קומבו", + "inputTokens": "אני:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "סקירת שימוש", + "outputTokens": "אסימוני פלט", + "totalCost": "עלות כוללת", + "usageByModel": "שימוש לפי דגם", + "usageByAccount": "שימוש לפי חשבון", + "failedToLoad": "טעינת סטטיסטיקת שימוש נכשלה.", + "tokenHealth": "Token Health", + "totalOAuth": "סך הכל OAuth", + "healthy": "בריא", + "warning": "אזהרה", + "errored": "שגיאה", + "lastCheck": "בדיקה אחרונה", + "noData": "אין נתונים", + "share": "שתף", + "unableToLoad": "לא ניתן לטעון מדדי מערכת", + "product": "מוצר", + "resources": "משאבים", + "company": "חברה" + }, + "auth": { + "welcome": "ברוך הבא", + "signIn": "היכנס", + "enterPassword": "הזן את הסיסמה שלך כדי להמשיך", + "password": "סיסמה", + "unifiedProxy": "פרוקסי מאוחד של AI API", + "unifiedAiApiProxy": "פרוקסי מאוחד של AI API", + "unifiedAiApiProxyDesc": "נתב בקשות למספר ספקי AI דרך נקודת קצה אחת. איזון עומסים, מעבר לכשל ומעקב שימוש מובנה.", + "passwordNotEnabled": "הגנת סיסמה אינה מופעלת", + "loading": "טוען...", + "invalidPassword": "סיסמה לא חוקית", + "errorOccurredRetry": "אירעה שגיאה. אנא נסה שוב.", + "configureInstance": "בואו להגדיר את מופע OmniRoute שלך", + "runOnboardingWizard": "הפעל את אשף ההטמעה כדי להגדיר את הסיסמה שלך ולחבר את ספק הבינה המלאכותית הראשון שלך.", + "startOnboarding": "התחל את ההטמעה", + "secureYourInstance": "אבטח את המופע שלך", + "setPasswordDescription": "הגדר סיסמה כדי להגן על לוח המחוונים שלך ולאבטח את נקודות הקצה שלך ב-API מגישה לא מורשית.", + "configurePassword": "הגדר סיסמה", + "continue": "המשך", + "windowWillClose": "חלון זה ייסגר אוטומטית...", + "closeTabNow": "אתה יכול לסגור את הכרטיסייה הזו עכשיו.", + "copyUrlManual": "אנא העתק את כתובת האתר מסרגל הכתובות והדבק אותה באפליקציה.", + "accessDeniedDescription": "אין לך הרשאה לגשת למשאב זה. בדוק את מפתח ה-API שלך או פנה למנהל המערכת.", + "goToDashboard": "עבור אל לוח המחוונים", + "featureMultiProviderTitle": "רב ספקים", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google ועוד", + "featureLoadBalancingTitle": "איזון עומסים", + "featureLoadBalancingDesc": "הפצת בקשות בצורה חכמה", + "featureUsageTrackingTitle": "מעקב אחר שימוש", + "featureUsageTrackingDesc": "מעקב אחר עלויות ואסימונים", + "resetPassword": "אפס סיסמה", + "resetDescription": "בחר שיטה לשחזור גישה ללוח המחוונים שלך", + "stopServer": "עצור את שרת OmniRoute", + "processing": "מעבד...", + "pleaseWait": "אנא המתן בזמן שאנו משלימים את ההרשאה.", + "authSuccess": "ההרשאה הצליחה!", + "copyUrl": "העתק כתובת URL זו", + "accessDenied": "הגישה נדחתה", + "methodCliTitle": "שיטה 1: איפוס CLI", + "methodCliDescription": "הפעל את הפקודה הבאה בשרת שבו פועל OmniRoute:", + "methodCliHint": "זה ינחה אותך להגדיר סיסמה חדשה. יש לעצור תחילה את השרת.", + "methodManualTitle": "שיטה 2: איפוס ידני", + "methodManualDescription": "מחק את הסיסמה ממסד הנתונים והגדר סיסמה חדשה בעת ההפעלה:", + "setPasswordInYour": "הגדר סיסמה חדשה ב-", + "fileLabelSuffix": "קובץ:", + "newPasswordPlaceholder": "הסיסמה_החדשה שלך", + "deleteSettingsFile": "מחק", + "orRemovePasswordHashField": "או הסר את שדה passwordHash", + "restartServerWithNewPassword": "הפעל מחדש את השרת - הוא ישתמש בסיסמה החדשה", + "backToLogin": "חזרה לכניסה", + "forgotPassword": "שכחת סיסמה?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "נווט אל הבית", + "toggleMenu": "החלף תפריט", + "featuresLink": "תכונות", + "docsLink": "מסמכים", + "github": "GitHub", + "versionLive": "v1.0 זמין כעת", + "oneEndpoint": "נקודת קצה אחת עבור", + "allProviders": "כל ספקי הבינה המלאכותית", + "heroDescription": "פרוקסי נקודת קצה של AI עם לוח מחוונים באינטרנט - יציאת JavaScript של CLIProxyAPI. עובד בצורה חלקה עם Claude Code, OpenAI Codex, Cline, RooCode וכלי CLI אחרים.", + "getStarted": "התחל", + "viewOnGithub": "הצג ב-GitHub", + "powerfulFeatures": "תכונות עוצמתיות", + "featuresSubtitle": "כל מה שאתה צריך כדי לנהל את תשתית הבינה המלאכותית שלך במקום אחד, בנוי לקנה מידה.", + "featureUnifiedEndpointTitle": "נקודת קצה מאוחדת", + "featureUnifiedEndpointDesc": "גישה לכל הספקים באמצעות כתובת URL רגילה של API רגילה.", + "featureEasySetupTitle": "התקנה קלה", + "featureEasySetupDesc": "התחל לעבוד תוך דקות עם פקודת npx.", + "featureModelFallbackTitle": "דגם Fallback", + "featureModelFallbackDesc": "החלף ספקים אוטומטית במקרה של כשל או זמן אחזור גבוה.", + "featureUsageTrackingTitle": "מעקב אחר שימוש", + "featureUsageTrackingDesc": "ניתוח מפורט וניטור עלויות בכל הדגמים.", + "featureOAuthApiKeysTitle": "מפתחות OAuth ומפתחות API", + "featureOAuthApiKeysDesc": "ניהול מאובטח של אישורים בכספת אחת.", + "featureCloudSyncTitle": "סנכרון ענן", + "featureCloudSyncDesc": "סנכרן את התצורות שלך בין מכשירים באופן מיידי.", + "featureCliSupportTitle": "תמיכת CLI", + "featureCliSupportDesc": "עובד עם Claude Code, Codex, Cline, Cursor ועוד.", + "featureDashboardTitle": "לוח מחוונים", + "featureDashboardDesc": "לוח מחוונים חזותי לניתוח תנועה בזמן אמת.", + "howItWorks": "איך עובד OmniRoute", + "howItWorksDescription": "הנתונים זורמים בצורה חלקה מהאפליקציה שלך דרך שכבת הניתוב החכמה שלנו לספק הטוב ביותר לתפקיד.", + "howItWorksStep1Title": "1. CLI ו-SDKs", + "howItWorksStep1Description": "הבקשות שלך מתחילות מהכלים המועדפים עליך או מה-SDK המאוחד שלנו. פשוט שנה את כתובת האתר הבסיסית.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "המנוע שלנו מנתח את ההנחיה, בודק את תקינות הספק ומסלולים לאיחור או עלות הנמוכים ביותר.", + "howItWorksStep3Title": "3. ספקי AI", + "howItWorksStep3Description": "הבקשה מתמלאת על ידי OpenAI, Anthropic, Gemini או אחרים באופן מיידי.", + "getStartedIn30Seconds": "התחל תוך 30 שניות", + "getStartedDescription": "התקן את OmniRoute, הגדר את הספקים שלך באמצעות לוח המחוונים באינטרנט, והתחל לנתב בקשות AI.", + "installOmniRoute": "התקן את OmniRoute", + "installStepDescription": "הפעל את פקודת npx כדי להפעיל את השרת באופן מיידי", + "openDashboard": "פתח את לוח המחוונים", + "openDashboardStepDescription": "הגדר ספקים ומפתחות API באמצעות ממשק אינטרנט", + "routeRequests": "בקשות מסלול", + "routeRequestsStepDescription": "הפנה את כלי ה-CLI שלך אל {endpoint}", + "terminal": "מסוף", + "copy": "העתק", + "copied": "✓ הועתק", + "startingOmniRoute": "מתחיל את OmniRoute...", + "serverRunningOnLabel": "שרת פועל על", + "dashboardLabel": "לוח מחוונים", + "readyToRoute": "מוכן למסלול! ✓", + "configureProvidersNote": "📝 הגדר ספקים בלוח המחוונים או השתמש במשתני סביבה", + "dataLocation": "מיקום נתונים:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " חלונות:", + "product": "מוצר", + "dashboardLink": "לוח מחוונים", + "changelog": "יומן שינויים", + "resources": "משאבים", + "documentation": "תיעוד", + "npm": "NPM", + "legal": "חוקי", + "mitLicense": "רישיון MIT", + "footerTagline": "נקודת הקצה המאוחדת ליצירת AI. התחבר, נתב ונהל את ספקי ה-AI שלך בקלות.", + "copyright": "© {year} OmniRoute. כֹּל הַזְכוּיוֹת שְׁמוּרוֹת.", + "flowToolClaudeCode": "קלוד קוד", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "קלין", + "flowToolCursor": "סמן", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "אנתרופית", + "flowProviderGemini": "מזל תאומים", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "דיאגרמה אינטראקטיבית גלויה על שולחן העבודה", + "ctaTitle": "מוכן לפשט את תשתית הבינה המלאכותית שלך?", + "ctaDescription": "הצטרפו למפתחים שמייעלים את שילובי הבינה המלאכותית שלהם עם OmniRoute. קוד פתוח וחינמי להפעלה.", + "startFree": "התחל בחינם", + "readDocumentation": "קרא תיעוד" + }, + "docs": { + "title": "תיעוד", + "quickStart": "התחלה מהירה", + "features": "תכונות", + "supportedProviders": "ספקים נתמכים", + "supportedProvidersToc": "ספקים", + "commonUseCases": "מקרי שימוש נפוצים", + "clientCompatibility": "תאימות ללקוח", + "apiReference": "הפניה ל-API", + "method": "שיטה", + "path": "נתיב", + "notes": "הערות", + "modelPrefixes": "קידומות דגם", + "prefix": "קידומת", + "troubleshooting": "פתרון בעיות", + "supportsChat": "תומך גם בצ'אט וגם בנקודות קצה של תגובות.", + "oauthAutoRefresh": "חיבור OAuth עם רענון אסימון אוטומטי.", + "fullStreaming": "תמיכה מלאה בסטרימינג לכל הדגמים.", + "docsLabel": "מסמכים", + "docsHeroDescription": "שער AI עבור LLMs מרובי ספקים. נקודת קצה אחת עבור OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor ועוד 20 ספקים נוספים.", + "openDashboard": "פתח את לוח המחוונים", + "endpointPage": "עמוד נקודת קצה", + "github": "GitHub", + "reportIssue": "דווח על בעיה", + "onThisPage": "בעמוד הזה", + "documentationVersion": "תיעוד - v{version}", + "quickStartStep1Title": "1. התקן והפעל", + "quickStartStep1Prefix": "רוץ", + "quickStartStep1Middle": "או לשכפל מ-GitHub ולהפעיל", + "quickStartStep2Title": "2. צור מפתח API", + "quickStartStep2Text": "עבור אל נקודת קצה -> מפתחות רשומים. צור מפתח אחד לכל סביבה.", + "quickStartStep3Title": "3. חבר ספקים", + "quickStartStep3Text": "הוסף חשבונות ספקים באמצעות התחברות OAuth, מפתח API או חיבור אוטומטי בשכבה חופשית.", + "quickStartStep4Title": "4. הגדר את כתובת האתר של בסיס הלקוחות", + "quickStartStep4Prefix": "הפנה אל לקוח ה-IDE או ה-API שלך", + "quickStartStep4Suffix": "השתמש בקידומת ספק, למשל", + "featureRoutingTitle": "ניתוב רב ספקים", + "featureRoutingText": "נתב בקשות ל-30+ ספקי AI דרך נקודת קצה אחת תואמת OpenAI. תומך בצ'אט, תגובות, אודיו ותמונה API.", + "featureCombosTitle": "שילובים ואיזון", + "featureCombosText": "צור שילובי מודלים עם שרשראות ניצול ואסטרטגיות איזון: עגול, עדיפות, אקראי, הכי פחות בשימוש ואופטימיזציה לעלות.", + "featureUsageTitle": "מעקב אחר שימוש ועלויות", + "featureUsageText": "ספירת אסימונים בזמן אמת, חישוב עלויות לכל ספק/דגם ופירוט שימוש מפורט לפי מפתח API וחשבון.", + "featureAnalyticsTitle": "לוח המחוונים של Analytics", + "featureAnalyticsText": "ניתוח חזותי עם תרשימים עבור בקשות, אסימונים, שגיאות, חביון, עלויות ופופולריות של מודל לאורך זמן.", + "featureHealthTitle": "ניטור בריאות", + "featureHealthText": "בדיקות תקינות בזמן אמת, מצב הספק, מצבי מפסק זרם וזיהוי מגבלת קצב אוטומטי עם השבתה אקספוננציאלית.", + "featureCliTitle": "כלי CLI", + "featureCliText": "נהל תצורות IDE, ייצא/ייבוא גיבויים, גלה פרופילי קודקס והגדר הגדרות מלוח המחוונים.", + "featureSecurityTitle": "אבטחה ומדיניות", + "featureSecurityText": "אימות מפתח API, סינון IP, שמירה על הזרקת הודעות, מדיניות תחום, ניהול הפעלות ורישום ביקורת.", + "featureCloudSyncTitle": "סנכרון ענן", + "featureCloudSyncText": "סנכרן את התצורה שלך עם Cloudflare Workers לגישה מרחוק עם אישורים מוצפנים ומעבר אוטומטי לכשל.", + "providersAcrossConnectionTypes": "{count} ספקים בשלושה סוגי חיבורים.", + "manageProviders": "נהל ספקים", + "providersCount": "{count} ספקים", + "providerTypeFree": "דרג חינם", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "מפתח API", + "useCaseSingleEndpointTitle": "נקודת קצה אחת עבור ספקים רבים", + "useCaseSingleEndpointText": "כוון לקוחות לכתובת אתר בסיס אחת ונתב לפי קידומת דגם (לדוגמה: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "מיתוג והחלפת דגמים עם שילובים", + "useCaseFallbackText": "צור מודלים משולבים בלוח המחוונים ושמור על יציבות תצורת הלקוח בזמן שהספקים מסתובבים באופן פנימי.", + "useCaseUsageVisibilityTitle": "שימוש, עלות ונראות באגים", + "useCaseUsageVisibilityText": "עקוב אחר אסימונים ועלות לפי ספק, חשבון ומפתח API בכרטיסיות שימוש ו-Analytics.", + "clientCherryStudioTitle": "סטודיו דובדבן", + "baseUrlLabel": "כתובת האתר הבסיסית", + "chatEndpointLabel": "נקודת קצה של צ'אט", + "modelRecommendationLabel": "המלצת דגם: קידומת מפורשת", + "clientCodexTitle": "דגמי Codex / GitHub Copilot", + "clientCodexBullet1": "השתמש במזהי דגם עם", + "clientCodexBullet2": "מודלים של משפחת Codex מנותבים אוטומטית אל", + "clientCodexBullet3": "דגמים שאינם קודקס ממשיכים", + "clientCursorTitle": "הסמן IDE", + "clientCursorBullet1": "השתמש", + "clientCursorBullet1Suffix": "קידומת עבור דגמי Cursor.", + "clientCursorBullet2": "חיבור OAuth - כניסה מדף הספקים.", + "clientClaudeTitle": "קוד קלוד / אנטי כבידה", + "clientClaudeBullet1Prefix": "השתמש", + "clientClaudeBullet1Middle": "(קלוד) או", + "clientClaudeBullet1Suffix": "קידומת (אנטי כבידה).", + "endpointChatNote": "נקודת קצה צ'אט תואמת OpenAI (ברירת מחדל).", + "endpointResponsesNote": "נקודת קצה של תגובות API (Codex, o-series).", + "endpointModelsNote": "קטלוג דגמים לכל הספקים המחוברים.", + "endpointAudioNote": "תמלול אודיו (Deepgram, AssemblyAI).", + "endpointImagesNote": "יצירת תמונות (NanoBanana).", + "endpointRewriteChatNote": "עוזר שכתוב עבור לקוחות ללא /v1.", + "endpointRewriteResponsesNote": "שכתוב עוזר לתגובות ללא /v1.", + "endpointRewriteModelsNote": "עוזר שכתוב לגילוי מודל ללא /v1.", + "modelPrefixesDescriptionStart": "השתמש בקידומת הספק לפני שם הדגם כדי לנתב לספק ספציפי. דוגמה:", + "modelPrefixesDescriptionEnd": "מסלולים אל GitHub Copilot.", + "provider": "ספק", + "type": "הקלד", + "troubleshootingModelRouting": "אם הלקוח נכשל בניתוב המודל, השתמש בספק/מודל מפורש (לדוגמה: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "אם אתה מקבל שגיאות מודל מעורפלות, בחר קידומת ספק במקום מזהה דגם חשוף.", + "troubleshootingCodexFamily": "עבור מודלים של משפחת GitHub Codex, שמור את הדגם בתור gh/; הנתב בוחר / תגובות באופן אוטומטי.", + "troubleshootingTestConnection": "השתמש בלוח מחוונים > ספקים > בדוק חיבור לפני בדיקה מ-IDEs או לקוחות חיצוניים.", + "troubleshootingCircuitBreaker": "אם ספק מציג מפסק פתוח, המתן להתקררות או בדוק את דף הבריאות לפרטים.", + "troubleshootingOAuth": "עבור ספקי OAuth, בצע אימות מחדש אם פג תוקפם של אסימונים. בדוק את מחוון מצב כרטיס הספק." + }, + "legal": { + "privacyPolicy": "מדיניות פרטיות", + "termsOfService": "תנאים והגבלות", + "providerConfigurations": "תצורות ספק", + "apiKeys": "מפתחות API", + "usageLogs": "יומני שימוש", + "applicationSettings": "הגדרות אפליקציה", + "viewExportAnalytics": "הצג וייצא ניתוחי שימוש", + "clearHistory": "נקה היסטוריית שימוש בכל עת", + "configureRetention": "הגדר מדיניות שימור יומן", + "backupRestore": "גבה ושחזר את מסד הנתונים שלך", + "privacyMetadataTitle": "מדיניות פרטיות | OmniRoute", + "privacyMetadataDescription": "מדיניות פרטיות עבור נתב ה-Proxy של OmniRoute AI API.", + "termsMetadataTitle": "תנאים והגבלות | OmniRoute", + "termsMetadataDescription": "תנאים והגבלות עבור נתב ה-Proxy של OmniRoute AI API.", + "backToHome": "חזרה הביתה", + "lastUpdated": "עודכן לאחרונה: {date}", + "policyLastUpdatedDate": "13 בפברואר, 2026", + "listSeparator": "-", + "questionsVisit": "שאלות? בקר שלנו", + "githubRepository": "מאגר GitHub", + "privacySection1Title": "1. אדריכלות מקומית-ראשונה", + "privacySection1Text": "OmniRoute מתוכנן כאפליקציה מקומית ראשונה. כל עיבוד ואחסון הנתונים מתרחשים במלואם במחשב שלך. אין שרת מרכזי שאוסף את המידע שלך.", + "privacySection2Title": "2. נתונים שאנו מאחסנים", + "privacyDataStoredIn": "הנתונים הבאים מאוחסנים באופן מקומי ב", + "privacyDataProviderConfigurationsDesc": "כתובות אתרים של חיבור, סוגי ספקים והגדרות עדיפות", + "privacyDataApiKeysDesc": "מוצפן ומאוחסן באופן מקומי לצורך אימות מול ספקי AI", + "privacyDataUsageLogsDesc": "ספירת בקשות, שימוש באסימונים, שמות דגמים, חותמות זמן וזמני תגובה", + "privacyDataApplicationSettingsDesc": "העדפות נושא, אסטרטגיית ניתוב ותצורות משולבות", + "privacySection3Title": "3. אין טלמטריה", + "privacySection3Text": "OmniRoute אינו אוסף דוחות טלמטריה, ניתוחים או קריסה. שום מידע לא נשלח אלינו או לצד שלישי כלשהו. דפוסי השימוש, קריאות ה-API והתצורות שלך נשארים פרטיים לחלוטין.", + "privacySection4Title": "4. ספקי AI של צד שלישי", + "privacySection4Text": "כאשר אתה מבצע קריאות API דרך OmniRoute, הבקשות שלך מועברות לספקי AI שהגדרת (לדוגמה: OpenAI, Anthropic, Google). לספקים אלה יש מדיניות פרטיות משלהם המסדירה את אופן הטיפול בנתונים שלך. אנא בדוק:", + "privacyOpenAiPolicy": "מדיניות הפרטיות של OpenAI", + "privacyAnthropicPolicy": "מדיניות הפרטיות של אנתרופי", + "privacyGooglePolicy": "מדיניות הפרטיות של גוגל", + "privacySection5Title": "5. סנכרון ענן (אופציונלי)", + "privacySection5Text": "אם תפעיל את תכונת סנכרון הענן האופציונלית, ייתכן שתצורות ספק ומפתחות API ישודרו לנקודת קצה מוגדרת בענן. תכונה זו מושבתת כברירת מחדל ודורשת הסכמה מפורשת.", + "privacySection6Title": "6. רישום", + "privacyLoggingIntro": "ניתן להגדיר יומני בקשות דרך הגדרות לוח המחוונים. אתה יכול:", + "privacySection7Title": "7. הזכויות שלך", + "privacySection7TextStart": "מכיוון שכל הנתונים מאוחסנים באופן מקומי, יש לך שליטה מלאה. אתה יכול למחוק את הנתונים שלך בכל עת על ידי הסרת ה-", + "privacySection7TextEnd": "ספרייה או באמצעות תכונות הגיבוי והשחזור של מסד הנתונים בלוח המחוונים.", + "termsSection1Title": "1. סקירה כללית", + "termsSection1Text": "OmniRoute הוא נתב פרוקסי AI API מקומי ראשון שפועל כולו על המחשב שלך. הוא מנתב בקשות לספקי AI מרובים עם איזון עומסים, כשל ומעקב אחר שימוש.", + "termsSection2Title": "2. אחריות המשתמש", + "termsResponsibilityApiKeys": "אתה האחראי הבלעדי לניהול מפתחות ה-API והאישורים שלך עבור ספקי AI של צד שלישי (OpenAI, Anthropic, Google וכו').", + "termsResponsibilityCompliance": "עליך לציית לתנאי השירות של כל ספק AI שאליו אתה ניגש ל-API שלו דרך OmniRoute.", + "termsResponsibilitySecurity": "אתה אחראי לאבטחת התקנת OmniRoute המקומית שלך, כולל הגדרת סיסמה והגבלת גישה לרשת.", + "termsSection3Title": "3. איך זה עובד", + "termsSection3Text": "OmniRoute פועלת כפרוקסי מתווך. קריאות API הנשלחות אל OmniRoute מתורגמות ומועברות לספקי הבינה המלאכותית המוגדרת שלך. OmniRoute אינה משנה את תוכן הבקשות או התגובות שלך מעבר לתרגום הפרוטוקול הדרוש.", + "termsSection4Title": "4. טיפול בנתונים", + "termsDataStoredLocally": "כל הנתונים מאוחסנים באופן מקומי במחשב שלך במסד נתונים של SQLite.", + "termsNoTransmission": "OmniRoute אינה משדרת נתונים כלשהם לשרתים חיצוניים אלא אם אתה מפעיל במפורש תכונות סנכרון בענן.", + "termsDataLocationText": "יומני שימוש, מפתחות API ותצורה מאוחסנים ב", + "termsSection5Title": "5. כתב ויתור", + "termsSection5Text": "OmniRoute מסופק \"כמות שהוא\" ללא אחריות מכל סוג שהוא. איננו אחראים לכל עלויות שייגרמו כתוצאה משימוש ב-API, שיבושים בשירות או אובדן נתונים. שמור תמיד גיבויים של התצורה שלך.", + "termsSection6Title": "6. קוד פתוח", + "termsSection6Text": "OmniRoute היא תוכנת קוד פתוח. אתה חופשי לבדוק, לשנות ולהפיץ אותו תחת תנאי הרישיון שלו." + } +} diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json new file mode 100644 index 0000000000..67c4cf7107 --- /dev/null +++ b/src/i18n/messages/hu.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Mentés", + "cancel": "Mégsem", + "delete": "Törölje", + "loading": "Betöltés...", + "error": "Hiba történt", + "success": "Siker", + "confirm": "Biztos vagy benne?", + "refresh": "Frissítés", + "close": "Bezárás", + "add": "Hozzáadás", + "edit": "Szerkesztés", + "search": "Keresés", + "back": "Vissza", + "next": "Következő", + "submit": "Beküld", + "reset": "Reset", + "copy": "Másolás", + "copied": "Másolva!", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "active": "Aktív", + "inactive": "Inaktív", + "noData": "Nincs adat", + "configure": "Konfigurálás", + "manage": "Kezelése", + "name": "Név", + "actions": "Akciók", + "status": "Állapot", + "type": "Írja be", + "model": "Modell", + "models": "modellek", + "provider": "Szolgáltató", + "account": "fiók", + "time": "Idő", + "details": "Részletek", + "created": "Létrehozva", + "lastUsed": "Utoljára használt", + "loadMore": "Load More", + "noResults": "Nincs találat", + "reloadPage": "Oldal újratöltése", + "connected": "Csatlakozva", + "disconnected": "Lekapcsolva", + "notConfigured": "Nincs konfigurálva", + "testConnection": "Kapcsolat tesztelése", + "enable": "Engedélyezés", + "disable": "Letiltás", + "columns": "Oszlopok", + "newest": "Legújabb", + "oldest": "Legrégebbi", + "all": "Mind", + "none": "Egyik sem", + "yes": "Igen", + "no": "Nem", + "warning": "Figyelmeztetés", + "note": "Megjegyzés", + "free": "Ingyenes", + "skipToContent": "Ugrás a tartalomhoz" + }, + "sidebar": { + "home": "Otthon", + "dashboard": "Irányítópult", + "providers": "Szolgáltatók", + "combos": "Kombók", + "usage": "Használat", + "analytics": "Analytics", + "costs": "Költségek", + "health": "Egészség", + "limits": "Korlátok és kvóták", + "cliTools": "CLI eszközök", + "settings": "Beállítások elemre", + "translator": "Fordító", + "docs": "Dokumentumok", + "issues": "problémák", + "endpoint": "Végpont", + "apiManager": "API-kezelő", + "logs": "Naplók", + "auditLog": "Ellenőrzési napló", + "shutdown": "Leállítás", + "restart": "Indítsa újra", + "shutdownConfirm": "Leállítja az OmniRoute-ot?", + "restartConfirm": "Újraindítja az OmniRoute-ot?", + "version": "v{version}", + "debug": "Hibakeresés", + "system": "Rendszer", + "help": "Segítség", + "serverDisconnected": "A szerver leválasztva", + "serverDisconnectedMsg": "A proxyszerver leállt vagy újraindul.", + "expandSidebar": "Az oldalsáv kibontása", + "collapseSidebar": "Oldalsáv összecsukása" + }, + "header": { + "logout": "Kijelentkezés", + "language": "Nyelv", + "providers": "Szolgáltatók", + "providerDescription": "Kezelje AI-szolgáltatói kapcsolatait", + "combos": "Kombók", + "comboDescription": "Modellkombinációk tartalékkal", + "usage": "Használat és elemzések", + "usageDescription": "Kövesse nyomon API-használatát, tokenfelhasználását és kérésnaplóit", + "analytics": "Analytics", + "analyticsDescription": "Diagramok, trendek és értékelési betekintések", + "cliTools": "CLI eszközök", + "cliToolsDescription": "A CLI eszközök konfigurálása", + "home": "Otthon", + "homeDescription": "Üdvözöljük az OmniRoute oldalán", + "endpoint": "Végpont", + "endpointDescription": "API-végpont konfigurációja", + "settings": "Beállítások elemre", + "settingsDescription": "Kezelje beállításait", + "openaiCompatible": "OpenAI kompatibilis", + "anthropicCompatible": "Antropikus kompatibilis" + }, + "home": { + "quickStart": "Gyors kezdés", + "quickStartDesc": "4 lépésben indulhat el. Csatlakoztassa a szolgáltatókat, útvonal modelleket, figyeljen mindent.", + "fullDocs": "Teljes dokumentumok", + "step1Title": "1. Hozzon létre API-kulcsot", + "step1Desc": "Lépjen a Végpont -> Regisztrált kulcsok oldalra. Környezetenként egy kulcsot generál.", + "step2Title": "2. Csatlakoztassa a szolgáltatókat", + "step2Desc": "Adjon hozzá fiókokat a Providers-ban. Támogatja az OAuth-ot, az API-kulcsot és az ingyenes szinteket.", + "step3Title": "3. Irányítsa ügyfelét", + "step3Desc": "Állítsa be az alap URL-t {url} értékre az IDE- vagy API-kliensében.", + "step4Title": "4. Figyelje és optimalizálja", + "step4Desc": "Kövesse nyomon a tokeneket, a költségeket és a hibákat a Kérésnaplókban és az Analytics.", + "providersOverview": "Szolgáltatók áttekintése", + "configuredOf": "{configured} {total} elérhető szolgáltató közül konfigurálva", + "noModelsAvailable": "Ehhez a szolgáltatóhoz nem állnak rendelkezésre modellek.", + "configureFirst": "Először konfiguráljon egy kapcsolatot itt: {providers}", + "configureProvider": "A szolgáltató konfigurálása", + "modelAvailable": "{count} modell elérhető", + "modelsAvailable": "{count} modellek állnak rendelkezésre", + "connectionsActive": "{count} kapcsolat aktív", + "connectionsActivePlural": "{count} kapcsolatok aktívak", + "copyModelName": "Másolja a modell nevét", + "documentation": "Dokumentáció", + "healthMonitor": "Egészségügyi Monitor", + "reportIssue": "Probléma bejelentése", + "activeError": "{active} aktív · {errors} hiba", + "oauthLabel": "OAuth", + "apiKeyLabel": "API kulcs", + "requestsShort": "{count} igény", + "providerModelsTitle": "{provider} - Modellek", + "copiedModel": "Másolva: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Kövesse nyomon API-használati mintáit, tokenfelhasználását, költségeit és tevékenységi trendjeit az összes szolgáltatónál és modellnél.", + "evalsDescription": "Futtasson kiértékelő csomagokat az LLM-végpontok teszteléséhez és érvényesítéséhez. Hasonlítsa össze a modell minőségét, észlelje a regressziókat és mérje fel a késleltetést.", + "overview": "Áttekintés", + "evals": "Evals" + }, + "apiManager": { + "title": "API kulcsok", + "createKey": "API-kulcs létrehozása", + "key": "Kulcs", + "revokeKey": "Kulcs visszavonása", + "revokeConfirm": "Biztosan visszavonja ezt az API-kulcsot?", + "noKeys": "Még nincsenek API-kulcsok", + "noKeysDesc": "Hozza létre az első API-kulcsot a végponthoz érkezett kérések hitelesítéséhez", + "keyLabel": "Kulcscímke", + "permissions": "Engedélyek", + "expiresAt": "Lejár", + "never": "Soha", + "revoke": "Visszavonás", + "showKey": "Kulcs megjelenítése", + "hideKey": "Kulcs elrejtése", + "copyKey": "API-kulcs másolása", + "allModels": "Minden modell", + "selectedModels": "Válogatott modellek", + "readOnly": "Csak olvasható", + "fullAccess": "Teljes hozzáférés", + "keyManagement": "API kulcskezelés", + "keyManagementDesc": "API-kulcsok létrehozása és kezelése a végponthoz intézett kérések hitelesítéséhez", + "totalKeys": "Összes kulcs", + "restricted": "Korlátozott", + "totalRequests": "Összes kérés", + "modelsAvailable": "Elérhető modellek", + "registeredKeys": "Regisztrált kulcsok", + "keysRegistered": "{count} kulcsok regisztrálva", + "keyRegistered": "{count} kulcs regisztrálva", + "keysSecurityNote": "Mindegyik kulcs elkülöníti a használat nyomon követését, és egymástól függetlenül visszavonható. A kulcsok létrehozása után a biztonság kedvéért el vannak takarva.", + "createFirstKey": "Készítse el első kulcsát", + "name": "Név", + "usage": "Használat", + "created": "Létrehozva", + "actions": "Akciók", + "reqs": "követ", + "neverUsed": "Soha nem használt", + "deleteConfirm": "Törli ezt az API-kulcsot?", + "usageTips": "Használati tippek", + "tipAuth": "Használja az API-kulcsokat az engedélyezési fejlécben YOUR_KEY hordozóként", + "tipSecure": "A kulcsok csak egyszer jelennek meg a létrehozás során – tárolja őket biztonságosan", + "tipSeparate": "Hozzon létre külön kulcsokat a különböző ügyfelekhez vagy környezetekhez", + "tipRestrict": "Korlátozza a kulcsokat bizonyos modellekre a jobb biztonság és költségkontroll érdekében", + "keyName": "Kulcs neve", + "keyNamePlaceholder": "pl. Gyártási kulcs, Fejlesztési Kulcs", + "keyNameDesc": "Válasszon egy leíró nevet a kulcs céljának azonosításához", + "keyCreated": "API-kulcs létrehozva", + "keyCreatedSuccess": "A kulcs sikeresen létrehozva!", + "keyCreatedNote": "Másolja ki és tárolja ezt a kulcsot most – többé nem jelenik meg.", + "done": "Kész", + "savePermissions": "Engedélyek mentése", + "allowAll": "Minden engedélyezése", + "restrict": "Korlátozás", + "allowAllInfo": "Ezzel a gombbal minden elérhető modell elérhető.", + "restrictInfo": "Ezzel a kulccsal {selected}/{total} modell érhető el.", + "selected": "{count} kiválasztva", + "all": "Mind", + "clear": "Világos", + "searchModels": "Modellek keresése név vagy szolgáltató szerint...", + "noModelsFound": "Nem található modell", + "keyNameRequired": "A kulcsnév megadása kötelező", + "keyNameTooLong": "A kulcsnév legfeljebb {max} karakter hosszú lehet", + "keyNameInvalid": "A kulcsnév csak betűket, számokat, szóközöket, kötőjeleket és aláhúzásjeleket tartalmazhat", + "invalidKeyName": "Érvénytelen kulcsnév", + "failedCreateKey": "Nem sikerült létrehozni a kulcsot", + "failedCreateKeyRetry": "Nem sikerült létrehozni a kulcsot. Kérjük, próbálja újra.", + "invalidKeyId": "Érvénytelen kulcsazonosító", + "failedDeleteKey": "Nem sikerült törölni a kulcsot", + "failedDeleteKeyRetry": "Nem sikerült törölni a kulcsot. Kérjük, próbálja újra.", + "invalidModelsSelection": "Érvénytelen modellválasztás", + "cannotSelectMoreThanModels": "Legfeljebb {max} modellt választhat ki", + "failedUpdatePermissions": "Nem sikerült frissíteni az engedélyeket", + "failedUpdatePermissionsRetry": "Nem sikerült frissíteni az engedélyeket. Kérjük, próbálja újra.", + "unknownProvider": "ismeretlen", + "copyMaskedKey": "Maszkolt kulcs másolása", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Utolsó: {date}", + "editPermissions": "Engedélyek szerkesztése", + "deleteKey": "Kulcs törlése", + "model": "{count} modell", + "models": "{count} modellek", + "permissionsTitle": "Engedélyek: {name}", + "allowAllDesc": "Ezzel a gombbal minden elérhető modell elérhető.", + "restrictDesc": "Ezzel a kulccsal {selectedCount}/{totalModels} modell érhető el.", + "selectedCount": "{count} kiválasztva" + }, + "auditLog": { + "title": "Ellenőrzési napló", + "searchPlaceholder": "Keresési műveletek...", + "action": "Akció", + "actor": "színész", + "target": "Cél", + "ipAddress": "IP-cím", + "timestamp": "Időbélyeg", + "noEntries": "Nem található ellenőrzési bejegyzés", + "filterByAction": "Szűrés művelet szerint...", + "filterByActor": "Szűrés színész szerint...", + "filterEntriesAria": "Az ellenőrzési naplóbejegyzések szűrése", + "filterByActionTypeAria": "Szűrés művelettípus szerint", + "filterByActorAria": "Szűrés színész szerint", + "refreshAuditLogAria": "Az auditnapló frissítése", + "tableAria": "Naplóbejegyzések ellenőrzése", + "failedFetchAuditLog": "Nem sikerült lekérni a naplót", + "notAvailable": "—", + "description": "Adminisztratív műveletek és biztonsági események", + "showing": "{count} bejegyzés megjelenítése (eltolás {offset})", + "previous": "Előző" + }, + "cliTools": { + "title": "CLI eszközök", + "noActiveProviders": "Nincsenek aktív szolgáltatók", + "noActiveProvidersDesc": "A CLI-eszközök konfigurálásához először vegye fel és csatlakoztassa a szolgáltatókat.", + "mapModels": "Térképmodellek", + "testConnection": "Kapcsolat tesztelése", + "connectionStatus": "Kapcsolat állapota", + "configureEndpoint": "Végpont konfigurálása", + "instructions": "Utasítások", + "modelMapping": "Modelltérképezés", + "baseUrl": "Alap URL", + "apiKey": "API kulcs", + "configured": "Beállítva", + "notConfigured": "Nincs konfigurálva", + "notInstalled": "Nincs telepítve", + "custom": "Egyedi", + "unknown": "Ismeretlen", + "lastSavedAt": "Utolsó mentés: {date}", + "never": "Soha", + "justNow": "csak most", + "minutesAgoShort": "{count} perce", + "hoursAgoShort": "{count}órája", + "daysAgoShort": "{count}napja", + "monthsAgoShort": "{count}hónapja", + "yearsAgoShort": "{count}éve", + "runtimeCheckFailed": "Futásidejű ellenőrzés sikertelen", + "yourApiKeyPlaceholder": "az api-kulcsod", + "modelPlaceholder": "szolgáltató/modellazonosító", + "configurationSaved": "A konfiguráció sikeresen mentve.", + "failedToSave": "Nem sikerült menteni a konfigurációt.", + "noApiKeysCreateOne": "Nincsenek API-kulcsok – Hozzon létre egyet a Kulcsok oldalon", + "defaultOmnirouteKey": "sk_omniroute (alapértelmezett)", + "selectModel": "Válassza a Model lehetőséget", + "selectModelForAlias": "Válassza ki a {alias} modelljét", + "selectModelForTool": "Válassza ki a {tool} modelljét", + "select": "Válassza ki", + "clear": "Világos", + "comingSoon": "Hamarosan", + "checkingRuntime": "Futásidejű állapot ellenőrzése...", + "guideOnlyIntegration": "Csak útmutató integráció (nincs szükség helyi futtatókörnyezetre)", + "cliRuntimeDetected": "CLI futási idő észlelve és készen áll", + "cliFoundNotRunnable": "CLI megtalálható, de nem futtatható{reason}", + "cliRuntimeNotDetected": "A CLI futási ideje nem észlelhető", + "binary": "Bináris", + "configPath": "Konfigurációs útvonal", + "configPathShort": "Konfig", + "failedCheckRuntimeStatus": "Nem sikerült ellenőrizni a futásidejű állapotot.", + "copy": "Másolás", + "copied": "Másolva", + "copyConfig": "Config másolása", + "saveConfig": "Konfiguráció mentése", + "selectionSaved": "Kijelölés mentve", + "guide": "Útmutató", + "detected": "Észlelve", + "notReady": "Nincs kész", + "active": "Aktív", + "inactive": "Inaktív", + "startMitm": "Indítsa el a MITM-et", + "stopMitm": "Állítsa le a MITM-et", + "mitmStarted": "A MITM sikeresen elindult!", + "mitmStopped": "A MITM sikeresen leállt!", + "failedStart": "Nem sikerült elindítani a MITM-et", + "failedStop": "Nem sikerült leállítani a MITM-et", + "saveMappings": "Leképezések mentése", + "mappingsSaved": "A leképezések mentve!", + "failedSaveMappings": "Nem sikerült menteni a hozzárendeléseket", + "howItWorks": "Hogyan működik:", + "antigravityHowWorksDesc": "Az Antigravitáció kéréseket küld a Google végpontjának. A MITM elfogja és átirányítja őket az OmniRoute-ra.", + "antigravityStep1": "1. Indítsa el a MITM-et, hogy a kéréseket az OmniRoute-on keresztül irányítsa.", + "antigravityStep2Prefix": "2. Hozzáadás", + "antigravityStep2Suffix": "a hosts fájlba 127.0.0.1 néven.", + "antigravityStep3": "3. Nyissa meg az Antigravitációt, és a kérések proxyval lesznek ellátva.", + "sudoPasswordRequiredTitle": "Sudo jelszó szükséges", + "sudoPasswordHint": "Rendszergazdai jelszó szükséges a hosts fájl és a rendszerproxy beállításainak módosításához.", + "enterSudoPassword": "Írja be a sudo jelszót", + "sudoPasswordRequiredError": "Sudo jelszó szükséges.", + "cancel": "Mégsem", + "confirm": "Erősítse meg", + "settingsApplied": "A beállítások sikeresen alkalmazva!", + "failedApplySettings": "Nem sikerült alkalmazni a beállításokat", + "settingsReset": "A beállítások visszaállítása sikerült!", + "failedResetSettings": "Nem sikerült visszaállítani a beállításokat", + "backupRestored": "A biztonsági mentés visszaállítva!", + "failedRestore": "Nem sikerült visszaállítani", + "checkingCli": "{tool} CLI ellenőrzése...", + "cliNotRunnable": "{tool} CLI telepítve, de nem futtatható", + "cliNotInstalled": "{tool} CLI nincs telepítve", + "cliNotDetected": "{tool} CLI nem észlelhető", + "cliDetectedReady": "{tool} CLI észlelve és készen áll", + "cliFoundFailedHealthcheck": "{tool} CLI található, de a futásidejű állapotellenőrzés nem sikerült{reason}.", + "installCliPrompt": "A funkció használatához telepítse a {tool} CLI-t.", + "installCodexPrompt": "Kérjük, telepítse a Codex CLI-t az automatikus alkalmazás használatához.", + "hide": "Elrejtés", + "howToInstall": "Hogyan kell telepíteni", + "installationGuide": "Telepítési útmutató", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Telepítés után futtassa", + "toVerify": "ellenőrizni.", + "current": "Aktuális", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Visszaállítás alapértelmezettre", + "providerModelPlaceholder": "szolgáltató/modellazonosító", + "apply": "Alkalmazni", + "reset": "Reset", + "manualConfig": "Manual Config", + "backups": "Biztonsági mentések", + "configBackups": "Biztonsági mentések konfigurációja", + "noBackupsYet": "Még nincs biztonsági másolat. A biztonsági mentések automatikusan létrejönnek minden Alkalmazás vagy Visszaállítás előtt.", + "restore": "Visszaállítás", + "backupRestoredReloading": "A biztonsági mentés visszaállítva! Állapot újratöltése...", + "failedRestoreBackup": "Nem sikerült visszaállítani a biztonsági másolatot", + "applied": "Alkalmazva!", + "failed": "Sikertelen", + "resetDone": "Reset!", + "omnirouteConfiguredOpenAiCompatible": "Az OmniRoute OpenAI-kompatibilis szolgáltatóként van konfigurálva", + "provider": "Szolgáltató", + "model": "Modell", + "providers": "Szolgáltatók", + "auth": "Auth", + "noApiKeysAvailable": "Nem állnak rendelkezésre API-kulcsok", + "usingDefaultOmniroute": "Az alapértelmezett: sk_omniroute használata", + "updateConfig": "Frissítse a konfigurációt", + "applyConfig": "Alkalmazza a Config-ot", + "noBackupsAvailable": "Nincsenek biztonsági mentések.", + "profileSaved": "A \"{name}\" profil mentve!", + "failedSaveProfile": "Nem sikerült menteni a profilt", + "profileActivated": "Profil aktiválva!", + "failedActivateProfile": "Nem sikerült aktiválni a profilt", + "profiles": "Profilok", + "savedProfiles": "Mentett profilok", + "noProfilesYet": "Még nincs mentett profil. Mentse el az aktuális konfigurációt profilként alább.", + "activate": "Aktiválja", + "deleteProfile": "Profil törlése", + "profileNamePlaceholder": "Profilnév (pl. személyes fiók)", + "saveCurrent": "Aktuális mentése", + "codexAuthNotePrefix": "Codex használ", + "codexAuthNoteMiddle": "-val", + "codexAuthNoteSuffix": "Kattintson az \"Alkalmaz\" gombra az automatikus konfiguráláshoz.", + "claudeManualConfiguration": "Claude CLI - Kézi konfiguráció", + "codexManualConfiguration": "Codex CLI - Kézi konfiguráció", + "droidManualConfiguration": "Gyári Droid - Kézi konfiguráció", + "openClawManualConfiguration": "Open Claw – Manuális konfiguráció", + "clineManualConfiguration": "Cline kézi konfiguráció", + "kiloManualConfiguration": "Kiló kód kézi konfiguráció", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE MITM-mel", + "claude": "Antropikus Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Gyári Droid AI-asszisztens", + "openclaw": "Nyissa meg a Claw AI Assistant alkalmazást", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Kurzor AI kódszerkesztő", + "continue": "Az AI-asszisztens folytatása" + }, + "guides": { + "cursor": { + "notes": { + "0": "A funkció használatához Cursor Pro fiók szükséges.", + "1": "A kurzor a kéréseket a saját kiszolgálóján keresztül irányítja, így a helyi végpont nem támogatott. Kérjük, engedélyezze a Cloud Endpoint szolgáltatást a Beállításokban." + }, + "steps": { + "1": { + "title": "Nyissa meg a Beállítások lehetőséget", + "desc": "Lépjen a Beállítások -> Modellek menüpontra" + }, + "2": { + "title": "Engedélyezze az OpenAI API-t", + "desc": "Engedélyezze az „OpenAI API kulcs” opciót" + }, + "3": { + "title": "Alap URL" + }, + "4": { + "title": "API kulcs" + }, + "5": { + "title": "Egyéni modell hozzáadása", + "desc": "Kattintson az \"Összes modell megtekintése\" -> \"Egyéni modell hozzáadása\" elemre." + }, + "6": { + "title": "Válassza a Model lehetőséget" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Nyissa meg a Config-ot", + "desc": "Nyissa meg a Continue konfigurációs fájlt" + }, + "2": { + "title": "API kulcs" + }, + "3": { + "title": "Válassza a Model lehetőséget" + }, + "4": { + "title": "Add Model Config", + "desc": "Adja hozzá a következő konfigurációt a modellek tömbjéhez:" + } + } + } + } + }, + "combos": { + "title": "Kombók", + "description": "Modellkombinációk létrehozása súlyozott útválasztással és tartalék támogatással", + "createCombo": "Combo létrehozása", + "editCombo": "Combo szerkesztése", + "deleteCombo": "Combo törlése", + "noModels": "Nincsenek modellek", + "noModelsYet": "Még nincsenek modellek hozzáadva", + "addModel": "Modell hozzáadása", + "addModelToCombo": "Modell hozzáadása a Combo-hoz", + "routingStrategy": "Útválasztási stratégia", + "maxRetries": "Max újrapróbálkozás", + "timeout": "Időtúllépés (ms)", + "healthcheck": "Egészségügyi ellenőrzés", + "priority": "Prioritás", + "fallback": "Tartalék", + "roundRobin": "Round Robin", + "random": "Véletlenszerű", + "leastLatency": "Legkisebb késleltetés", + "comboName": "Kombinált név", + "comboNamePlaceholder": "az én-kombóm", + "deleteConfirm": "Törli ezt a kombinációt?", + "noCombosYet": "Még nincsenek kombók", + "comboCreated": "A kombináció sikeresen létrehozva", + "comboUpdated": "A kombináció sikeresen frissítve", + "comboDeleted": "A kombináció törölve", + "failedCreate": "Nem sikerült a kombináció létrehozása", + "failedUpdate": "Nem sikerült frissíteni a kombinációt", + "errorCreating": "Hiba a kombináció létrehozásakor", + "errorUpdating": "Hiba történt a kombó frissítésekor", + "errorDeleting": "Hiba a kombináció törlésekor", + "testFailed": "A tesztkérés sikertelen", + "failedToggle": "Nem sikerült a kombó váltása", + "testResults": "Teszt eredményei – {name}", + "resolvedBy": "Megoldotta:", + "more": "+{count} további", + "reqs": "követ", + "success": "sikert", + "proxyConfigured": "Proxy konfigurálva", + "copyComboName": "Kombinált név másolása", + "enableCombo": "Combo engedélyezése", + "disableCombo": "A kombináció letiltása", + "testCombo": "Teszt kombó", + "duplicate": "Megkettőzés", + "proxyConfig": "Proxy konfiguráció", + "nameRequired": "A név megadása kötelező", + "nameInvalid": "Csak betűk, számok, -, _, / és . megengedett", + "nameHint": "Betűk, számok, -, _, / és . megengedett", + "priorityDesc": "Szekvenciális tartalék: először az 1-es, majd a 2-es modellt próbálja meg stb.", + "weightedDesc": "A forgalmat tömegszázalékban osztja el tartalékkal", + "roundRobinDesc": "Körkörös eloszlás: minden kérés a következő forgatási modellhez kerül", + "randomDesc": "Egységes véletlenszerű kiválasztás, majd visszaállás a többi modellhez", + "leastUsedDesc": "A legkevesebb kéréssel rendelkező modellt választja, idővel kiegyensúlyozva a terhelést", + "costOptimizedDesc": "Először a legolcsóbb modellhez vezet az árak alapján", + "models": "Modellek", + "autoBalance": "Automatikus egyensúly", + "advancedSettings": "Speciális beállítások", + "retryDelay": "Újrapróbálkozás késleltetése (ms)", + "concurrencyPerModel": "Egyidejűség / Modell", + "queueTimeout": "Sor időtúllépése (ms)", + "advancedHint": "Hagyja üresen a globális alapértelmezések használatához. Ezek felülbírálják a szolgáltatónkénti beállításokat.", + "moveUp": "Lépj felfelé", + "moveDown": "Mozgás lefelé", + "removeModel": "Távolítsa el", + "saving": "Mentés...", + "weighted": "Súlyozott", + "leastUsed": "Legkevésbé használt", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Költségek", + "budget": "Költségvetés", + "totalCost": "Teljes költség", + "breakdown": "Költségbontás", + "noData": "Nincsenek költségadatok", + "byModel": "Modell szerint", + "byProvider": "Szolgáltató által" + }, + "endpoint": { + "title": "API végpont", + "available": "Elérhető végpontok", + "cloudProxy": "Cloud Proxy", + "disableConfirm": "Biztosan letiltja a felhőproxyt?", + "baseUrl": "Alap URL", + "apiKeyLabel": "API kulcs", + "registeredKeys": "Regisztrált kulcsok", + "chatCompletions": "Csevegés befejezése", + "responses": "Válaszok", + "listModels": "Modellek listája", + "usingCloudProxy": "Cloud Proxy használata", + "usingLocalServer": "Helyi szerver használata", + "machineId": "Gépazonosító: {id}...", + "disableCloud": "Felhő letiltása", + "enableCloud": "Felhő engedélyezése", + "modelsAcrossEndpoints": "{models} modellek {endpoints} végpontokon keresztül", + "chatDesc": "Streaming és nem streaming csevegés minden szolgáltatóval", + "embeddings": "Beágyazások", + "embeddingsDesc": "Szövegbeágyazások keresési és RAG-folyamatokhoz", + "imageGeneration": "Képgenerálás", + "imageDesc": "Készítsen képeket szöveges promptokból", + "rerank": "Rerank", + "rerankDesc": "A dokumentumok átsorolása a lekérdezés szempontjából való relevancia szerint", + "audioTranscription": "Hang átírása", + "audioTranscriptionDesc": "Hangfájlok átírása szöveggé (suttogás)", + "textToSpeech": "Text to Speech", + "textToSpeechDesc": "Szöveg átalakítása természetes hangzású beszéddé", + "moderations": "Moderálások", + "moderationsDesc": "A tartalom moderálása és biztonsági osztályozása", + "enableCloudTitle": "Cloud Proxy engedélyezése", + "whatYouGet": "Amit kapsz", + "cloudBenefitAccess": "Hozzáférés az API-jához a világ bármely pontjáról", + "cloudBenefitShare": "Ossza meg egyszerűen a végpontot csapatával", + "cloudBenefitPorts": "Nincs szükség portok megnyitására vagy tűzfal konfigurálására", + "cloudBenefitEdge": "Gyors globális élhálózat", + "cloudSessionNote": "A Cloud 1 napig megőrzi a hitelesítési munkamenetet. Ha nem használja, akkor automatikusan törlődik.", + "cloudUnstableNote": "A felhő jelenleg bizonyos esetekben instabil a Claude Code OAuth-szal.", + "cloudConnected": "Cloud Proxy csatlakoztatva!", + "connectingToCloud": "Csatlakozás a felhőhöz...", + "verifyingConnection": "Kapcsolat ellenőrzése...", + "connecting": "Csatlakozás...", + "verifying": "Ellenőrzés...", + "connected": "Csatlakozva!", + "disableCloudTitle": "A Cloud Proxy letiltása", + "disableWarning": "Az összes hitelesítési munkamenet törlődik a felhőből.", + "syncingData": "Legfrissebb adatok szinkronizálása...", + "disablingCloud": "Felhő letiltása...", + "syncing": "Szinkronizálás...", + "disabling": "Letiltása...", + "cloudConnectedVerified": "Cloud Proxy csatlakoztatva és ellenőrizve!", + "connectedVerificationPending": "Csatlakoztatva – ellenőrzés függőben", + "connectedVerificationPendingWithError": "Csatlakozva – ellenőrzés függőben: {error}", + "cloudDisabledSuccess": "A felhő sikeresen letiltott", + "syncedSuccess": "Sikeresen szinkronizálva", + "failedDisable": "Nem sikerült letiltani a felhőt", + "failedEnable": "Nem sikerült engedélyezni a felhőt", + "cloudRequestTimeout": "Felhőkérelem időtúllépés", + "cloudRequestFailed": "Cloud kérés sikertelen", + "cloudWorkerUnreachable": "Nem sikerült elérni a felhőkezelőt. Győződjön meg arról, hogy a felhőszolgáltatás fut (npm run dev in /cloud).", + "connectionFailed": "A csatlakozás sikertelen", + "syncFailed": "Nem sikerült szinkronizálni a felhőadatokat", + "providerModelsTitle": "{provider} – Modellek", + "noModelsForProvider": "Ehhez a szolgáltatóhoz nem állnak rendelkezésre modellek.", + "chat": "Chat", + "embedding": "Beágyazás", + "image": "Kép", + "custom": "szokás", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Rendszer egészsége", + "description": "Az OmniRoute példány valós idejű megfigyelése", + "healthy": "Egészséges", + "degraded": "Leépült", + "down": "Le", + "uptime": "Üzemidő", + "memory": "Memória", + "memoryRss": "Memória (RSS)", + "heap": "kupac", + "cpu": "CPU", + "database": "Adatbázis", + "version": "Verzió", + "lastCheck": "Utolsó ellenőrzés", + "providerHealth": "Szolgáltató egészsége", + "systemMetrics": "Rendszermetrikák", + "tokenHealth": "Token Health", + "refreshAll": "Összes frissítése", + "checkNow": "Ellenőrizze most", + "loadingHealth": "Egészségügyi adatok betöltése...", + "failedToLoad": "Nem sikerült betölteni az egészségügyi adatokat: {error}", + "retry": "Próbálja újra", + "allOperational": "Minden rendszer működőképes", + "issuesDetected": "Rendszerhibák észlelve", + "updatedAt": "Frissítve {time}", + "latency": "Látencia", + "latencyP50": "50. o", + "latencyP95": "95. o", + "latencyP99": "99. o", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Összes kérés", + "noDataYet": "Még nincsenek adatok", + "promptCache": "Prompt Cache", + "entries": "Bejegyzések", + "hitRate": "Hit Rate", + "hitsMisses": "Találatok / hiányzók", + "signatureCache": "Aláírás gyorsítótár", + "signatureDefaults": "Alapértelmezések", + "signatureTool": "Eszköz", + "signatureFamily": "Család", + "signatureSession": "Munkamenet", + "recovering": "Gyógyulás", + "noCBData": "Nem állnak rendelkezésre adatok a megszakítóról. Először tegyen néhány kérést.", + "providerHealthStatusAria": "Szolgáltató egészségi állapota", + "issuesLabel": "Problémák észlelve", + "operational": "Működőképes", + "providers": "Szolgáltatók", + "healthyCount": "{count} egészséges", + "nodeVersion": "{version} csomópont", + "failures": "{count} hiba", + "failuresPlural": "{count} hibák", + "lastFailure": "Utolsó", + "rateLimitStatus": "Díjkorlát állapota", + "activeLimiters": "{count} aktív korlátozó", + "activeLimitersPlural": "{count} aktív korlátozó", + "queued": "Sorban", + "queuedCount": "{count} sorba áll", + "running": "futás", + "runningCount": "{count} fut", + "ok": "OK", + "activeLockouts": "Aktív zárolások", + "resetConfirm": "Visszaállítja az összes megszakítót egészséges állapotba? Ez törli az összes hibaszámot, és visszaállítja az összes szolgáltató működőképes állapotát.", + "resetAllTitle": "Állítsa vissza az összes megszakítót egészséges állapotba", + "resetting": "Visszaállítás...", + "resetAll": "Összes visszaállítása", + "until": "{time}-ig" + }, + "limits": { + "title": "Korlátok és kvóták", + "rateLimit": "Rate Limit", + "remaining": "Maradt", + "requestsPerMinute": "Kérések/perc", + "tokensPerMinute": "Token/perc", + "dailyLimit": "Napi limit" + }, + "logs": { + "title": "Naplók", + "requestLogs": "Kérelemnaplók", + "proxyLogs": "Proxy naplók", + "auditLog": "Ellenőrzési napló", + "console": "konzol", + "auditLogDesc": "Adminisztratív műveletek és biztonsági események", + "loading": "Betöltés...", + "refresh": "Frissítés", + "filterByAction": "Szűrés művelet szerint...", + "filterByActor": "Szűrés színész szerint...", + "filterEntriesAria": "Az ellenőrzési naplóbejegyzések szűrése", + "filterByActionTypeAria": "Szűrés művelettípus szerint", + "filterByActorAria": "Szűrés színész szerint", + "refreshAuditLogAria": "Az auditnapló frissítése", + "tableAria": "Naplóbejegyzések ellenőrzése", + "failedFetchAuditLog": "Nem sikerült lekérni a naplót", + "showing": "{count} bejegyzés megjelenítése (eltolás {offset})", + "search": "Keresés", + "timestamp": "Időbélyeg", + "action": "Akció", + "actor": "színész", + "target": "Cél", + "details": "Részletek", + "ipAddress": "IP-cím", + "notAvailable": "—", + "noEntries": "Nem található naplóbejegyzés", + "previous": "Előző", + "next": "Következő" + }, + "onboarding": { + "welcome": "Üdvözöljük", + "security": "Biztonság", + "test": "Teszt", + "ready": "Kész!", + "setPassword": "Jelszó beállítása", + "addProvider": "Adja hozzá első szolgáltatóját", + "getStarted": "Kezdje el", + "skip": "Kihagyás", + "skipWizard": "A varázsló teljes kihagyása", + "skipPassword": "A jelszó beállításának kihagyása", + "skipAndContinue": "Skip & Continue", + "passwordLabel": "Jelszó", + "confirmPassword": "Jelszó megerősítése", + "enterPassword": "Írja be a jelszót", + "confirmPasswordPlaceholder": "Erősítse meg a jelszót", + "passwordsMismatch": "A jelszavak nem egyeznek", + "setupComplete": "A beállítás kész!", + "goToDashboard": "Nyissa meg az Irányítópult → lehetőséget", + "welcomeDesc": "Az OmniRoute az Ön helyi AI API-proxyja. A kéréseket több mesterségesintelligencia-szolgáltatóhoz irányítja terheléselosztással, feladatátvétellel és a használat nyomon követésével.", + "multiProvider": "Több szolgáltató", + "usageTracking": "Használat követése", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "Állítson be jelszót az irányítópult védelméhez, vagy most hagyja ki.", + "providerDesc": "Csatlakoztassa első AI-szolgáltatóját. Később továbbiakat is hozzáadhat.", + "apiKeyRequired": "API-kulcs (kötelező)", + "customUrlOptional": "Egyéni URL (nem kötelező)", + "testDesc": "Ellenőrizzük, hogy működik-e a szolgáltatói kapcsolat.", + "runTest": "Futtassa a csatlakozási tesztet", + "testingConnection": "Kapcsolat tesztelése...", + "connectionSuccessful": "Sikeres csatlakozás! A szolgáltató készen áll.", + "noProviderFound": "Nem található szolgáltató. Később hozzáadhat egyet az irányítópultról.", + "testFailed": "A teszt sikertelen volt, de ezt később beállíthatja.", + "couldNotTest": "Jelenleg nem lehetett tesztelni. A műszerfalról tesztelheti.", + "doneDesc": "Minden készen áll! Az OmniRoute-példány konfigurálva van, és készen áll az AI-kérések proxyjára.", + "yourEndpoint": "Az Ön végpontja:", + "continue": "Folytatás", + "retry": "Próbálja újra", + "failedSetPassword": "Nem sikerült beállítani a jelszót. Próbáld újra.", + "failedAddProvider": "Nem sikerült hozzáadni a szolgáltatót. Próbáld újra.", + "connectionError": "Csatlakozási hiba. Kérjük, próbálja újra.", + "provider": "Szolgáltató" + }, + "providers": { + "title": "Szolgáltatók", + "addProvider": "Szolgáltató hozzáadása", + "editProvider": "Szolgáltató szerkesztése", + "deleteProvider": "Szolgáltató törlése", + "noProviders": "Nincs beállítva szolgáltató", + "modelAvailability": "Modell elérhetősége", + "accounts": "Fiókok", + "newAccount": "Új fiók", + "deleteConfirm": "Biztosan törli ezt a szolgáltatót?", + "testing": "Tesztelés...", + "testConnection": "Kapcsolat tesztelése", + "testSuccess": "Sikeres csatlakozás", + "testFailed": "A csatlakozás sikertelen", + "available": "Elérhető", + "cooldown": "Lehűlés", + "unavailable": "Nem elérhető", + "unknown": "Ismeretlen", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatibilis", + "chat": "Chat", + "responses": "Válaszok", + "messages": "Üzenetek", + "oauthProviders": "OAuth-szolgáltatók", + "freeProviders": "Ingyenes szolgáltatók", + "apiKeyProviders": "API kulcs szolgáltatók", + "compatibleProviders": "API-kulcs-kompatibilis szolgáltatók", + "testAll": "Test All", + "testAllOAuth": "Tesztelje az összes OAuth-kapcsolatot", + "testAllFree": "Tesztelje az összes ingyenes kapcsolatot", + "testAllApiKey": "Tesztelje az összes API-kulcs kapcsolatot", + "testAllCompatible": "Tesztelje az összes kompatibilis kapcsolatot", + "connected": "{count} Csatlakozva", + "errorCount": "{count} Hiba ({code})", + "errorCountNoCode": "{count} Hiba", + "noConnections": "Nincsenek kapcsolatok", + "disabled": "Letiltva", + "enableProvider": "Szolgáltató engedélyezése", + "disableProvider": "Szolgáltató letiltása", + "testResults": "Teszt eredményei", + "noCompatibleYet": "Még nincsenek kompatibilis szolgáltatók hozzáadva", + "compatibleHint": "Használja a fenti gombokat OpenAI vagy Anthropic kompatibilis végpontok hozzáadásához", + "addOpenAICompatible": "Add hozzá az OpenAI-kompatibilist", + "addAnthropicCompatible": "Adja hozzá az Antropikus kompatibilitást", + "addNewProvider": "Új szolgáltató hozzáadása", + "backToProviders": "Vissza a szolgáltatókhoz", + "configureNewProvider": "Konfiguráljon egy új AI-szolgáltatót az alkalmazásaihoz.", + "providerLabel": "Szolgáltató", + "selectProvider": "Válasszon szolgáltatót", + "selectedProvider": "Kiválasztott szolgáltató", + "authMethod": "Hitelesítési módszer", + "apiKeyLabel": "API kulcs", + "apiKeyRequired": "API-kulcs szükséges", + "selectProviderRequired": "Kérjük, válasszon szolgáltatót", + "enterApiKey": "Adja meg API-kulcsát", + "apiKeySecure": "Az API-kulcs titkosítva lesz, és biztonságosan tárolja.", + "oauth2Connect": "Csatlakozzon az OAuth2-höz", + "oauth2Label": "OAuth2", + "oauth2Desc": "Csatlakoztassa fiókját OAuth2-hitelesítéssel.", + "displayName": "Megjelenítési név", + "displayNamePlaceholder": "pl.: Termelési API, Dev Environment", + "displayNameHint": "Választható. Barátságos név a konfiguráció azonosítására.", + "active": "Aktív", + "activeDescription": "Engedélyezze ezt a szolgáltatót az alkalmazásokban való használatra", + "cancel": "Mégsem", + "createProvider": "Szolgáltató létrehozása", + "failedCreate": "Nem sikerült létrehozni a szolgáltatót", + "errorOccurred": "Hiba történt. Kérjük, próbálja újra.", + "modelStatus": "Modell állapota", + "allModelsOperational": "Minden modell működőképes", + "modelsWithIssues": "{count} problémákkal küzdő modell(ek).", + "allModelsNormal": "Minden modell normálisan reagál.", + "cooldownCleared": "Lehűlés törölve a következőhöz: {model}", + "failedClearCooldown": "Nem sikerült törölni a lehűlést", + "loadingAvailability": "A modell elérhetőségének betöltése...", + "clearCooldown": "Világos", + "clearing": "Törlés...", + "until": "{time}-ig", + "providerTestFailed": "A szolgáltató tesztje sikertelen", + "modeTest": "{mode} Teszt", + "passedCount": "{count} sikeres", + "failedCount": "{count} sikertelen", + "testedCount": "{count} tesztelve", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "HIBA", + "noActiveConnectionsInGroup": "Nem található aktív kapcsolat ehhez a csoporthoz.", + "allTestsPassed": "Minden {total} teszt sikeres", + "testSummary": "{passed}/{total} sikeres, {failed} sikertelen", + "nameLabel": "Név", + "prefixLabel": "Előtag", + "baseUrlLabel": "Alap URL", + "apiTypeLabel": "API típus", + "prefixHint": "Kötelező. Egyedi előtag a modellnevekhez.", + "nameHint": "Kötelező. Barátságos címke ehhez a csomóponthoz.", + "baseUrlHint": "Kötelező.  Szolgáltató API alap URL-je.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Érvényesítse a kapcsolatot", + "validating": "Érvényesítés folyamatban...", + "connectionValid": "A kapcsolat érvényes!", + "connectionFailed": "A csatlakozás sikertelen. Ellenőrizze az URL-t és a kulcsot.", + "testKeyLabel": "Teszt API-kulcs", + "testKeyPlaceholder": "sk-... (csak érvényesítés céljából)", + "providerNotFound": "Szolgáltató nem található", + "deleteConnectionConfirm": "Törli ezt a kapcsolatot?", + "failedSetAlias": "Nem sikerült beállítani az aliast", + "failedSaveConnection": "Nem sikerült menteni a kapcsolatot", + "failedSaveConnectionRetry": "Nem sikerült menteni a kapcsolatot. Kérjük, próbálja újra.", + "failedRetestConnection": "Nem sikerült újra tesztelni a kapcsolatot", + "deleteCompatibleNodeConfirm": "Törli ezt a {type} Kompatibilis csomópontot?", + "anthropicCompatibleDetails": "Antropikus kompatibilis részletek", + "openaiCompatibleDetails": "OpenAI-kompatibilis részletek", + "messagesApi": "Messages API", + "responsesApi": "Válaszok API", + "chatCompletions": "Csevegés befejezése", + "importingModels": "Importálás...", + "importFromModels": "Importálás a /models-ből", + "addConnectionToImport": "Adjon hozzá egy kapcsolatot az importálás engedélyezéséhez.", + "noModelsConfigured": "Nincsenek konfigurálva modellek", + "connectionCount": "{count} kapcsolat", + "fetchingModels": "Elérhető modellek lekérése...", + "failedFetchModels": "Nem sikerült lekérni a modelleket", + "noModelsFound": "Nem található modell", + "importFailed": "Az importálás sikertelen", + "noNewModelsAdded": "Nem adtak hozzá új modelleket.", + "adding": "Hozzáadás...", + "importingModelsTitle": "Modellek importálása", + "copyModel": "Modell másolása", + "removeModel": "Modell eltávolítása", + "rateLimitProtected": "Védett", + "rateLimitUnprotected": "Nem védett", + "enableRateLimitProtection": "Kattintson a sebességkorlátozás védelem engedélyezéséhez", + "disableRateLimitProtection": "Kattintson a rátakorlát védelmének letiltásához", + "productionKey": "Gyártási kulcs", + "enterNewApiKey": "Adja meg az új API-kulcsot", + "optional": "Választható", + "anthropicCompatibleName": "Antropikus kompatibilis", + "openaiCompatibleName": "OpenAI kompatibilis", + "failedImportModels": "A modellek importálása sikertelen", + "noModelsReturnedFromEndpoint": "Nincsenek visszaadott modellek a /models végpontról.", + "importingModelsProgress": "{current}/{total} modell importálása...", + "foundModelsStartingImport": "{count} modellt találtunk. Importálás indítása...", + "importingModelById": "{modelId} importálása...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} sikeresen importálva!", + "noNewModelsAddedExisting": "Nem adtak hozzá új modelleket (már mindegyik létezik).", + "importDoneCount": "✓ Kész! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Váratlan hiba történt", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "üzeneteket", + "responsesPath": "válaszokat", + "chatCompletionsPath": "chat/befejezések", + "add": "Hozzáadás", + "edit": "Szerkesztés", + "delete": "Törölje", + "anthropic": "Antropikus", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Kompatibilis csomópontonként csak egy kapcsolat engedélyezett. Adjon hozzá egy másik csomópontot, ha több kapcsolatra van szüksége.", + "connections": "Kapcsolatok", + "providerProxyTitleConfigured": "Szolgáltató proxy: {host}", + "configured": "konfigurálva", + "providerProxyConfigureHint": "Konfigurálja a proxyt a szolgáltató összes kapcsolatához", + "providerProxy": "Szolgáltató proxy", + "noConnectionsYet": "Még nincsenek kapcsolatok", + "addFirstConnectionHint": "A kezdéshez adja hozzá az első kapcsolatot", + "addConnection": "Csatlakozás hozzáadása", + "availableModels": "Elérhető modellek", + "pageAutoRefresh": "Az oldal automatikusan frissül...", + "statusDisabled": "letiltva", + "statusConnected": "csatlakoztatva", + "statusRuntimeIssue": "futásidejű probléma", + "statusAuthFailed": "a hitelesítés nem sikerült", + "statusRateLimited": "mértéke korlátozott", + "statusNetworkIssue": "hálózati probléma", + "statusTestUnsupported": "a teszt nem támogatott", + "statusUnavailable": "nem elérhető", + "statusFailed": "nem sikerült", + "statusError": "hiba", + "oauthAccount": "OAuth-fiók", + "errorTypeRuntime": "Helyi futásidő", + "errorTypeUpstreamAuth": "Felfelé irányuló hitelesítés", + "errorTypeMissingCredential": "Hiányzó hitelesítő adat", + "errorTypeRefreshFailed": "A frissítés nem sikerült", + "errorTypeTokenExpired": "A token lejárt", + "errorTypeRateLimited": "Ára korlátozott", + "errorTypeUpstreamUnavailable": "Upstream nem elérhető", + "errorTypeNetworkError": "Hálózati hiba", + "errorTypeTestUnsupported": "A teszt nem támogatott", + "errorTypeUpstreamError": "Upstream hiba", + "proxySourceGlobal": "Globális", + "proxySourceProvider": "Szolgáltató", + "proxySourceKey": "Kulcs", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Automatikus: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Tesztelje újra a hitelesítést", + "retest": "Újrateszt", + "disableConnection": "Kapcsolódás letiltása", + "enableConnection": "Kapcsolat engedélyezése", + "reauthenticateConnection": "Hitelesítse újra ezt a kapcsolatot", + "proxyConfig": "Proxy konfig", + "aliasExistsAlert": "A \"{alias}\" alias már létezik. Kérjük, használjon másik modellt, vagy módosítsa a meglévő álnevet.", + "openRouterAnyModelHint": "Az OpenRouter bármilyen modellt támogat. Adjon hozzá modelleket és hozzon létre álneveket a gyors hozzáférés érdekében.", + "modelIdFromOpenRouter": "Modellazonosító (az OpenRoutertől)", + "openRouterModelPlaceholder": "antropikus/claude-3-opus", + "customModels": "Egyedi modellek", + "customModelsHint": "Adjon hozzá olyan modellazonosítókat, amelyek nem szerepelnek az alapértelmezett listában. Ezek elérhetők lesznek az útválasztáshoz.", + "modelId": "Modellazonosító", + "customModelPlaceholder": "pl. gpt-4.5-turbo", + "loading": "Betöltés...", + "removeCustomModel": "Távolítsa el az egyéni modellt", + "noCustomModels": "Egyedi modellek még nincsenek hozzáadva.", + "allSuggestedAliasesExist": "Az összes javasolt álnév már létezik. Kérjük, válasszon másik modellt, vagy távolítsa el az ütköző álneveket.", + "failedSaveCustomModel": "Nem sikerült menteni az egyéni modellt", + "modelAddedSuccess": "A {modelId} modell sikeresen hozzáadva", + "failedAddModelTryAgain": "Nem sikerült hozzáadni a modellt. Kérjük, próbálja újra.", + "failedSaveImportedModel": "Nem sikerült menteni az importált modellt az egyéni adatbázisba", + "failedImportModelsTryAgain": "A modellek importálása sikertelen. Kérjük, próbálja újra.", + "failedRemoveModelFromDatabase": "Nem sikerült eltávolítani a modellt az adatbázisból", + "modelRemovedSuccess": "A modell sikeresen eltávolítva", + "failedDeleteModelTryAgain": "Nem sikerült törölni a modellt. Kérjük, próbálja újra.", + "compatibleModelsDescription": "Adjon hozzá {type}-kompatibilis modelleket manuálisan, vagy importálja őket a /models végpontból.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Az API-kulcs ellenőrzése sikertelen. Kérjük, ellenőrizze a kulcsot, és próbálja újra.", + "addProviderApiKeyTitle": "Adja hozzá a {provider} API-kulcsot", + "checking": "Ellenőrzés...", + "check": "Ellenőrizze", + "valid": "Érvényes", + "invalid": "Érvénytelen", + "creating": "Létrehozás...", + "validationChecksAnthropicCompatible": "Az érvényesítés az API-kulcs ellenőrzésével ellenőrzi {provider}.", + "validationChecksOpenAiCompatible": "Az érvényesítés ellenőrzi a {provider} /models segítségével az alap URL-címen.", + "priorityLabel": "Prioritás", + "saving": "Mentés...", + "save": "Mentés", + "editConnection": "Kapcsolat szerkesztése", + "accountName": "Fiók neve", + "email": "E-mail", + "healthCheckMinutes": "állapotfelmérés (perc)", + "healthCheckHint": "Proaktív token frissítési időköz. 0 = letiltva.", + "failedTestConnection": "Nem sikerült tesztelni a kapcsolatot", + "failed": "Sikertelen", + "leaveBlankKeepCurrentApiKey": "Hagyja üresen az aktuális API-kulcs megtartásához.", + "editCompatibleTitle": "Szerkesztés {type} Kompatibilis", + "compatibleBaseUrlHint": "Használja a {type}-kompatibilis API alap URL-jét (a /v1 végződésű).", + "apiKeyForCheck": "API-kulcs (ellenőrzéshez)", + "compatibleProdPlaceholder": "{type} Kompatibilis (termék)" + }, + "settings": { + "title": "Beállítások elemre", + "general": "tábornok", + "security": "Biztonság", + "appearance": "Megjelenés", + "routing": "Útválasztás", + "cache": "Gyorsítótár", + "resilience": "Rugalmasság", + "systemPrompt": "Rendszer Prompt", + "thinkingBudget": "Gondolkodó költségvetés", + "proxy": "Proxy", + "pricing": "Árképzés", + "storage": "Tárolás", + "policies": "Irányelvek", + "ipFilter": "IP-szűrő", + "comboDefaults": "Kombinált alapértékek", + "fallbackChains": "Tartalék láncok", + "changePassword": "Jelszó módosítása", + "enablePassword": "Jelszó engedélyezése", + "darkMode": "Sötét mód", + "lightMode": "Fény mód", + "systemTheme": "Rendszer téma", + "enableCache": "Gyorsítótár engedélyezése", + "cacheTTL": "Gyorsítótár TTL", + "maxCacheSize": "Max gyorsítótár mérete", + "clearCache": "Törölje a gyorsítótárat", + "cacheHits": "Gyorsítótár találatai", + "cacheMisses": "Gyorsítótár hiányzik", + "hitRate": "Hit Rate", + "cacheEntries": "Gyorsítótár bejegyzései", + "circuitBreaker": "Áramköri megszakító", + "retryPolicy": "Irányelv újrapróbálkozása", + "maxRetries": "Max újrapróbálkozás", + "retryDelay": "Újrapróbálkozás késleltetése", + "timeoutMs": "Időtúllépés (ms)", + "enableSystemPrompt": "Rendszerprompt engedélyezése", + "systemPromptText": "Rendszerkérő szöveg", + "enableThinking": "Gondolkodás engedélyezése", + "maxThinkingTokens": "Max gondolkodási jelzők", + "enableProxy": "Proxy engedélyezése", + "proxyUrl": "Proxy URL", + "pricingRates": "Árképzési tarifák formátuma", + "currentPricing": "Jelenlegi árképzés áttekintése", + "loadingPricing": "Áradatok betöltése...", + "noPricing": "Nem állnak rendelkezésre árazási adatok", + "input": "Bemenet", + "output": "Kimenet", + "cached": "Gyorsítótárban", + "reasoning": "okoskodás", + "cacheCreation": "Gyorsítótár létrehozása", + "customPricing": "Egyedi árképzés", + "databaseSize": "Adatbázis mérete", + "backupDb": "Biztonsági mentési adatbázis", + "restoreDb": "Adatbázis visszaállítása", + "exportData": "Adatok exportálása", + "importData": "Adatok importálása", + "clearData": "Minden adat törlése", + "clearDataConfirm": "Ezzel véglegesen törli az összes adatot. Biztos vagy benne?", + "enableRequestLogs": "Kérelemnaplók engedélyezése", + "logRetention": "Napló megtartása", + "ipWhitelist": "IP fehérlista", + "ipBlacklist": "IP feketelista", + "addIP": "IP hozzáadása", + "savedSuccessfully": "A beállítások sikeresen elmentve", + "ai": "AI", + "advanced": "Haladó", + "localMode": "Helyi mód — A készüléken tárolt összes adat", + "settingsSectionsAria": "Beállítások szakaszok", + "switchThemes": "Váltás a világos és a sötét témák között", + "themeSelectionAria": "Témaválasztás", + "themeLight": "Fény", + "themeDark": "Sötét", + "themeSystem": "Rendszer", + "hideHealthLogs": "Állapotellenőrzési naplók elrejtése", + "hideHealthLogsDesc": "Ha BE van kapcsolva, tiltsa le a [HealthCheck] üzeneteket a kiszolgálókonzolon", + "promptCache": "Prompt Cache", + "flushCache": "Öblítse ki a gyorsítótárat", + "flushing": "Öblítés…", + "size": "Méret", + "hits": "Találatok", + "evictions": "Kilakoltatások", + "loadingCacheStats": "Gyorsítótári statisztikák betöltése…", + "globalProxy": "Globális proxy", + "globalProxyDesc": "Konfiguráljon egy globális kimenő proxyt az összes API-híváshoz. Az egyes szolgáltatók, kombinációk és kulcsok ezt felülírhatják.", + "noGlobalProxy": "Nincs konfigurálva globális proxy", + "globalLabel": "Globális", + "configure": "Konfigurálás", + "globalSystemPrompt": "Globális rendszerprompt", + "systemPromptDesc": "Minden proxy szintű kérésbe beszúrva", + "saved": "Mentve", + "systemPromptPlaceholder": "Írja be a rendszerpromptot az összes kérésbe való beillesztéshez...", + "systemPromptHint": "Ez a prompt minden kérés rendszerüzenete elé kerül. Használja általános utasításokhoz, biztonsági irányelvekhez vagy válaszformázási szabályokhoz.", + "chars": "{count} karakter", + "thinkingBudgetTitle": "Gondolkodó költségvetés", + "thinkingBudgetDesc": "Az AI érvelési jogkivonat használatának szabályozása minden kérésnél", + "passthrough": "Átjárás", + "passthroughDesc": "Nincs változás – az ügyfél irányítja a költségvetést", + "auto": "Auto", + "autoDesc": "Távolítsa el az összes gondolkodó konfigurációt – hagyja, hogy a szolgáltató döntsön", + "custom": "Egyedi", + "customDesc": "Állítson be egy rögzített token költségkeretet minden kérelemhez", + "adaptive": "Adaptív", + "adaptiveDesc": "A költségvetés méretezése a kérés összetettsége alapján", + "effortNone": "Nincs (0 token)", + "effortLow": "Alacsony (1K token)", + "effortMedium": "Közepes (10 000 token)", + "effortHigh": "Magas (128 000 token)", + "tokenBudget": "Token költségvetés", + "tokens": "tokenek", + "baseEffortLevel": "Alap erőfeszítési szint", + "adaptiveHint": "Az adaptív mód erről az alapszintről skálázódik az üzenetszám, a szerszámhasználat és a prompt hossza alapján.", + "requireLogin": "Bejelentkezés szükséges", + "requireLoginDesc": "Bekapcsolt állapotban az irányítópult jelszót kér. Kikapcsolt állapotban bejelentkezés nélkül hozzáférhet.", + "currentPassword": "Jelenlegi jelszó", + "enterCurrentPassword": "Adja meg az aktuális jelszót", + "newPassword": "Új jelszó", + "enterNewPassword": "Írja be az új jelszót", + "confirmPassword": "Új jelszó megerősítése", + "confirmPasswordPlaceholder": "Erősítse meg az új jelszót", + "passwordsNoMatch": "A jelszavak nem egyeznek", + "passwordUpdated": "A jelszó sikeresen frissítve", + "failedUpdatePassword": "Nem sikerült frissíteni a jelszót", + "errorOccurred": "Hiba történt", + "updatePassword": "Jelszó frissítése", + "setPassword": "Jelszó beállítása", + "apiEndpointProtection": "API Endpoint Protection", + "requireAuthModels": "API-kulcs szükséges a /models-hoz", + "requireAuthModelsDesc": "Bekapcsolt állapotban a /v1/models végpont 404-et ad vissza a nem hitelesített kérésekhez. Megakadályozza, hogy illetéktelen felhasználók felfedezzék a modellt.", + "blockedProviders": "Letiltott szolgáltatók", + "blockedProvidersDesc": "Adott szolgáltatók elrejtése a /v1/models válaszból. A blokkolt szolgáltatók nem jelennek meg a modelllistában.", + "providersBlocked": "{count} szolgáltató(k) blokkolva a /models-ből", + "blockProviderTitle": "{provider} letiltása", + "unblockProviderTitle": "{provider} blokkolásának feloldása", + "routingStrategy": "Útválasztási stratégia", + "fillFirst": "Először töltse ki", + "fillFirstDesc": "A fiókokat prioritási sorrendben használja", + "roundRobin": "Round Robin", + "roundRobinDesc": "Váltson végig az összes fiókon", + "p2c": "P2C", + "p2cDesc": "Válasszon 2 véletlenszerűen, és használja az egészségesebbet", + "random": "Véletlenszerű", + "randomDesc": "Véletlen számla minden kérés", + "leastUsed": "Legkevésbé használt", + "leastUsedDesc": "Válassza ki a legutóbb használt fiókot", + "costOpt": "Költségopt", + "costOptDesc": "A legolcsóbb elérhető fiók előnyben részesítése", + "stickyLimit": "Ragadós határ", + "stickyLimitDesc": "Hívások fiókonként váltás előtt", + "modelAliases": "Modell álnevek", + "modelAliasesDesc": "Helyettesítő karakter minták a modellnevek újratervezéséhez • Használja a * és a ?", + "aliasPatternPlaceholder": "claude-szonett-*", + "aliasTargetPlaceholder": "claude-szonett-4-20250514", + "pattern": "Minta", + "targetModel": "Célmodell", + "add": "+ Hozzáadás", + "session": "Munkamenet", + "sessionDetailsAria": "A munkamenet részletei", + "status": "Állapot", + "authenticated": "Hitelesítve", + "guest": "Vendég", + "loginTime": "Bejelentkezési idő", + "sessionAge": "Session Age", + "browser": "Böngésző", + "clearLocalData": "Helyi adatok törlése", + "logout": "Kijelentkezés", + "clearLocalDataConfirm": "Törli az összes helyi adatot? Ezzel visszaállítja beállításait.", + "unknown": "Ismeretlen", + "systemActor": "rendszer", + "ipAccessControl": "IP Access Control", + "ipAccessControlDesc": "Adott IP-címek letiltása vagy engedélyezése", + "ipModeDisabled": "Letiltva", + "ipModeBlacklist": "Feketelista", + "ipModeWhitelist": "Fehérlista", + "ipModeWhitelistPriority": "WL prioritás", + "addIpAddress": "IP-cím hozzáadása", + "ipAddressPlaceholder": "192.168.1.0/24 vagy 10.0.*.*", + "block": "+ Blokkolás", + "allow": "+ Engedélyezés", + "blocked": "Letiltva ({count})", + "allowed": "Engedélyezett ({count})", + "temporaryBans": "Ideiglenes kitiltások ({count})", + "minLeft": "{min}m van hátra", + "auditLog": "Ellenőrzési napló", + "searchAuditLogs": "Keresés az ellenőrzési naplókban...", + "failedLoadAuditLog": "Nem sikerült betölteni a naplót", + "noAuditEvents": "Nem található ellenőrzési esemény", + "action": "Akció", + "actor": "színész", + "details": "Részletek", + "time": "Idő", + "fallbackChainsTitle": "Tartalék láncok", + "fallbackChainsDesc": "Határozza meg a szolgáltató tartalék sorrendjét modellenként", + "addChain": "+ Lánc hozzáadása", + "modelName": "Modell neve", + "modelNamePlaceholder": "claude-szonett-4-20250514", + "providersCommaSeparated": "Szolgáltatók (vesszővel elválasztva, prioritási sorrendben)", + "providersCommaSeparatedPlaceholder": "antropikus, openai, gemini", + "createChain": "Lánc létrehozása", + "noFallbackChains": "Nincs tartalék lánc", + "noFallbackChainsDesc": "Hozzon létre egy láncot a szolgáltató tartalék sorrendjének meghatározásához egy modellhez.", + "loadingFallbackChains": "Tartalékláncok betöltése...", + "deleteChainConfirm": "Törli a tartalék láncot a következőhöz: „{model}”?", + "chainCreated": "Lánc létrehozva a {model} számára", + "chainDeleted": "Lánc törölve a következőhöz: {model}", + "failedCreateChain": "Nem sikerült létrehozni a láncot", + "failedDeleteChain": "Nem sikerült törölni a láncot", + "deleteChain": "Lánc törlése", + "fillModelAndProviders": "Kérjük, adja meg a modell nevét és a szolgáltatókat", + "addAtLeastOneProvider": "Adjon hozzá legalább egy szolgáltatót", + "comboDefaultsTitle": "Kombinált alapértékek", + "globalComboConfig": "Globális kombinált konfiguráció", + "defaultStrategy": "Alapértelmezett stratégia", + "defaultStrategyDesc": "Új kombókra alkalmazva kifejezett stratégia nélkül", + "comboStrategyAria": "Kombinált stratégia", + "priority": "Prioritás", + "weighted": "Súlyozott", + "maxRetriesLabel": "Max újrapróbálkozás", + "retryDelayLabel": "Újrapróbálkozás késleltetése (ms)", + "timeoutLabel": "Időtúllépés (ms)", + "healthCheck": "állapotfelmérés", + "healthCheckDesc": "Előzetesen ellenőrizze a szolgáltató elérhetőségét", + "trackMetrics": "Kövesse nyomon a mérőszámokat", + "trackMetricsDesc": "Rögzítse a kombinált kérések mérőszámait", + "providerOverrides": "Szolgáltató felülbírálása", + "providerOverridesDesc": "Időtúllépés felülbírálása és újrapróbálkozás szolgáltatónként. A szolgáltatói beállítások felülírják a globális alapértelmezéseket.", + "providerMaxRetriesAria": "{provider} maximális újrapróbálkozás", + "providerTimeoutAria": "{provider} időtúllépés ms", + "removeProviderOverrideAria": "Távolítsa el a {provider} felülírást", + "newProviderNamePlaceholder": "pl. google, openai...", + "newProviderNameAria": "Új szolgáltató neve", + "retries": "újrapróbálkozik", + "ms": "ms", + "saveComboDefaults": "Kombinált alapértelmezések mentése", + "maxNestingDepth": "Maximális beágyazási mélység", + "concurrencyPerModel": "Egyidejűség / Modell", + "queueTimeout": "Sor időtúllépése (ms)", + "providerProfiles": "Szolgáltatói profilok", + "providerProfilesDesc": "Különálló rugalmassági beállítások az OAuth (munkamenet alapú) és az API-kulcs (mérős) szolgáltatók számára. Az alacsonyabb díjkorlátok miatt az OAuth-szolgáltatók szigorúbb küszöbértékeket alkalmaznak.", + "oauthProviders": "OAuth-szolgáltatók", + "apiKeyProviders": "API kulcs szolgáltatók", + "transientCooldown": "Átmeneti lehűlés", + "rateLimitCooldown": "Rate Limit Cooldown", + "maxBackoffLevel": "Max visszalépési szint", + "cbThreshold": "CB küszöb", + "cbResetTime": "CB visszaállítási idő", + "rateLimiting": "Rate Limiting", + "rateLimitingDesc": "Az API-kulcs-szolgáltatók automatikusan korlátozva vannak a biztonságos alapértelmezett értékekkel. A korlátok a válaszfejlécekből tanulnak, és idővel alkalmazkodnak.", + "defaultSafetyNet": "Alapértelmezett biztonsági háló", + "rpm": "RPM", + "minGap": "Min. hézag", + "maxConcurrent": "Max egyidejű", + "activeLimiters": "Aktív korlátozók", + "noActiveLimiters": "Még nincsenek aktív sebességkorlátozók.", + "reservoir": "Víztározó", + "running": "Futás", + "queued": "Sorban", + "circuitBreakers": "Áramköri megszakítók", + "breakerStateClosed": "Zárva", + "breakerStateOpen": "Nyissa meg", + "breakerStateHalfOpen": "Félig nyitva", + "tripped": "{count} leoldott", + "healthy": "{count} egészséges", + "resetAll": "Összes visszaállítása", + "noCircuitBreakers": "Még nincs aktív megszakító. A rendszer automatikusan létrehozza őket, amikor a kérések áthaladnak a kombinált folyamaton.", + "failures": "{count} hiba", + "policiesLocked": "Irányelvek és zárolt azonosítók", + "allOperational": "Minden rendszer működőképes – nincs reteszelés vagy kioldott megszakító", + "loadingPolicies": "Irányelvek betöltése...", + "lockedIdentifiers": "Zárolt azonosítók", + "unlockedIdentifier": "Feloldva: {identifier}", + "sinceDate": "{date} óta", + "forceUnlock": "Kényszer feloldás", + "unlocking": "Feloldás...", + "failedUnlock": "Nem sikerült feloldani", + "failedLoadWithStatus": "Nem sikerült betölteni: {status}", + "failedLoadResilience": "Nem sikerült betölteni a rugalmassági állapotot", + "saveFailed": "A mentés nem sikerült", + "resetFailed": "A visszaállítás nem sikerült", + "loadingResilience": "Rugalmassági állapot betöltése...", + "retry": "Próbálja újra", + "systemStorage": "Rendszer és tárolás", + "allDataLocal": "Minden adat helyileg a gépén tárolva", + "databasePath": "Adatbázis elérési út", + "exportDatabase": "Adatbázis exportálása", + "exportAll": "Összes exportálása (.tar.gz)", + "importDatabase": "Adatbázis importálása", + "confirmDbImport": "Erősítse meg az adatbázis importálását", + "confirmDbImportDesc": "Ez lecseréli az összes jelenlegi adatot a {file} tartalommal. Az importálás előtt automatikusan biztonsági másolat készül.", + "yesImport": "Igen, Import", + "lastBackup": "Utolsó biztonsági mentés", + "noBackupYet": "Még nincs biztonsági mentés", + "backupNow": "Biztonsági mentés most", + "backupRestore": "Biztonsági mentés és visszaállítás", + "viewBackups": "Biztonsági másolatok megtekintése", + "hide": "Elrejtés", + "backupRetentionDesc": "Az adatbázis-pillanatképek automatikusan létrejönnek a visszaállítás előtt és 15 percenként, amikor az adatok megváltoznak. Megőrzés: 24 órás + 30 napi biztonsági mentés intelligens rotációval.", + "loadingBackups": "Biztonsági mentések betöltése...", + "noBackupsYet": "Még nem állnak rendelkezésre biztonsági másolatok. A biztonsági másolatok automatikusan létrejönnek, amikor az adatok megváltoznak.", + "backupsAvailable": "{count} biztonsági mentés elérhető", + "refresh": "Frissítés", + "confirm": "Megerősíteni?", + "yes": "Igen", + "no": "Nem", + "restore": "Visszaállítás", + "invalidFileType": "Érvénytelen fájltípus. Csak .sqlite fájlok fogadhatók el.", + "exportFailed": "Nem sikerült exportálni", + "exportFailedWithError": "Az exportálás sikertelen: {error}", + "fullExportFailedWithError": "A teljes exportálás sikertelen: {error}", + "backupCreated": "Biztonsági másolat létrehozva: {file}", + "restoreSuccess": "Helyreállítva! {connections} kapcsolatok, {nodes} csomópontok, {combos} kombók, {apiKeys} API-kulcsok.", + "importSuccess": "Adatbázis importálva! {connections} kapcsolatok, {nodes} csomópontok, {combos} kombók, {apiKeys} API-kulcsok.", + "justNow": "csak most", + "minutesAgo": "{count} perce", + "hoursAgo": "{count}órája", + "daysAgo": "{count}napja", + "backupReasonManual": "kézikönyvet", + "backupReasonPreRestore": "elő-visszaállítás", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Nincs változás a legutóbbi biztonsági mentés óta", + "backupFailed": "A biztonsági mentés nem sikerült", + "restoreFailed": "A visszaállítás nem sikerült", + "importFailed": "Az importálás sikertelen", + "errorDuringRestore": "Hiba történt a visszaállítás során", + "errorDuringImport": "Hiba történt az importálás során", + "modelPricing": "Modell árképzés", + "modelPricingDesc": "Költségdíjak konfigurálása modellenként • Minden díj $/1M tokenben", + "providers": "Szolgáltatók", + "registry": "Nyilvántartásba", + "priced": "Árú", + "searchProvidersModels": "Keressen szolgáltatók vagy modellek között...", + "showAll": "Összes megjelenítése", + "noProvidersMatch": "Egyetlen szolgáltató sem felel meg a keresésnek.", + "howPricingWorks": "Hogyan működik az árképzés", + "cacheWrite": "Gyorsítótár írás", + "unsaved": "nem mentve", + "resetDefaults": "Alapértékek visszaállítása", + "saveProvider": "Mentse a Szolgáltatót", + "saving": "Mentés...", + "model": "Modell", + "models": "modellek", + "moreProviders": "{count} további szolgáltató", + "withPricing": "konfigurált árképzéssel", + "policiesCircuitBreakers": "Irányelvek és áramkör-megszakítók", + "activeIssuesDetected": "Aktív problémák észlelve", + "off": "Ki", + "resetPricingConfirm": "Visszaállítja a {provider} összes árát az alapértelmezett értékre?", + "pricingDescInput": "Bemenet: a modellnek küldött tokenek", + "pricingDescOutput": "Kimenet: generált tokenek", + "pricingDescCached": "Gyorsítótárazott: újrafelhasznált bemenet (a beviteli sebesség kb. 50%-a)", + "pricingDescReasoning": "Indoklás: gondolkodási tokenek (visszaesik a kimenetre)", + "pricingDescCacheWrite": "Cache Write: gyorsítótár-bejegyzések létrehozása (visszatér a bevitelre)", + "pricingDescFormula": "Költség = (bemenet × bemeneti_ráta) + (kimenet × kimeneti_ráta) + (gyorsítótárazott × gyorsítótárazott_ráta) millió tokenenként.", + "pricingSettingsTitle": "Árképzési beállítások", + "totalModels": "Összes modell", + "active": "Aktív", + "costCalculation": "Költségszámítás", + "costCalculationDesc": "A költségek kiszámítása a tokenhasználat és az egyes modellekhez konfigurált árképzési árak alapján történik.", + "pricingFormat": "Árképzési formátum", + "pricingFormatDesc": "Minden árfolyam $/1M tokenben értendő (dollár/millió token).", + "tokenTypes": "Token típusok", + "inputTokenDesc": "Szabványos prompt tokenek", + "outputTokenDesc": "Kitöltés/válasz tokenek", + "cachedTokenDesc": "Gyorsítótárazott beviteli tokenek (általában a beviteli sebesség 50%-a)", + "reasoningTokenDesc": "Speciális érvelési/gondolkodási tokenek (visszaállás a kimeneti sebességre)", + "cacheCreationTokenDesc": "A gyorsítótár bejegyzéseinek létrehozására használt tokenek (vissza a beviteli sebességre)", + "customPricingNote": "Egyes modelleknél felülbírálhatja az alapértelmezett árazást. Az egyéni felülbírálások elsőbbséget élveznek az automatikusan észlelt árképzéssel szemben.", + "editPricing": "Árak szerkesztése", + "viewFullDetails": "Teljes részletek megtekintése" + }, + "translator": { + "title": "Fordító", + "metaTitle": "Fordító játszótér | OmniRoute", + "metaDescription": "Hibakeresés, tesztelés és API-formátumú fordítások megjelenítése a szolgáltatók között", + "playgroundTitle": "Fordító játszótér", + "playground": "Játszótér", + "realtime": "Valós idejű fordítási tevékenység", + "chatTester": "Chat tesztelő", + "testBench": "Tesztpad", + "liveMonitor": "Élő monitor", + "modeDescriptionPlayground": "Illessze be az API kérés törzsét, és nézze meg, hogyan fordítja le az OmniRoute azt a szolgáltatói formátumok között (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Küldjön valódi csevegési kérelmeket az OmniRoute-on keresztül, és ellenőrizze a teljes körutat: bemenet, lefordított kérés, szolgáltató válasza és lefordított kimenet.", + "modeDescriptionTestBench": "Futtasson előre meghatározott forgatókönyveket, és hasonlítsa össze a szolgáltatók és modellek kompatibilitását.", + "modeDescriptionLiveMonitor": "Nézze meg valós időben a fordítási eseményeket, ahogy a kérések az OmniRoute-on keresztül áramlanak.", + "modeDescriptionFallback": "Hibakeresés, tesztelés és vizualizálás, hogy az OmniRoute hogyan fordítja le az API-kéréseket a szolgáltatók között.", + "recentTranslations": "Friss fordítások", + "noTranslations": "Még nincsenek fordítások", + "source": "Forrás", + "target": "Cél", + "time": "Idő", + "model": "Modell", + "status": "Állapot", + "latency": "Látencia", + "totalTranslations": "Összes fordítás", + "successful": "Sikeres", + "errors": "Hibák", + "avgLatency": "Átl. késleltetés", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Élő — Automatikus frissítés", + "paused": "Szüneteltetve", + "eventsAppearHint": "A fordítási események itt jelennek meg, amikor a kérések az OmniRoute-on keresztül áramlanak. Használja az alábbi módszerek bármelyikét események generálásához:", + "chatTesterTab": "Chat Tester lapon", + "testBenchTab": "Tesztpad fül", + "externalApiCalls": "Külső API-hívások", + "ideCliIntegrations": "IDE/CLI integrációk", + "inMemoryNote": "Megjegyzés: Az események a memóriában tárolódnak, és a szerver újraindulásakor visszaállnak.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Formátum konverter", + "formatConverterDescription": "Illessze be vagy írja be a JSON-kérelem törzsét. A fordító automatikusan felismeri a forrásformátumot, és konvertálja a célformátumra. Használja ezt a hibakereséshez, hogy az OmniRoute hogyan fordítja le a kéréseket a formátumok között (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Bemenet", + "output": "Kimenet", + "auto": "Auto", + "swapFormats": "Formátumok felcserélése", + "translateAction": "Fordítás", + "clear": "Világos", + "inputPlaceholder": "Illessze be ide a kérés törzsét, vagy válasszon egy sablont lent...", + "exampleTemplates": "Példa sablonok", + "exampleTemplatesHint": "— Kattintson a betöltéshez", + "templateLoadHint": "A sablon {format} formátumban tölti be a kérést. Módosítsa a Forrásformátumot, hogy más formátumban töltse be.", + "compatibilityTester": "Kompatibilitástesztelő", + "compatibilityReport": "Kompatibilitási jelentés", + "testBenchDescription": "Futtasson előre meghatározott forgatókönyveket (Simple Chat, Tool Calling stb.) a fordítás és a szolgáltató kompatibilitás ellenőrzéséhez. Válassza ki a forrásformátumot és a célszolgáltatót, majd futtassa az összes tesztet a kompatibilitási százalék megtekintéséhez. Ezzel megtudhatja, mely szolgáltatások működnek a szolgáltatók között.", + "targetProvider": "Célszolgáltató", + "runAllTests": "Futtassa az összes tesztet", + "runTest": "Futtassa a tesztet", + "reRun": "Futtassa újra", + "running": "Futás...", + "passed": "átment", + "failed": "nem sikerült", + "passedIconLabel": "✅ Sikerült", + "chunks": "darabokat", + "scenarioSimpleChat": "Egyszerű csevegés", + "scenarioToolCalling": "Szerszámhívás", + "scenarioMultiTurn": "Többfordulós", + "scenarioThinking": "Gondolkodás", + "scenarioSystemPrompt": "Rendszer Prompt", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Egyszerű csevegés", + "tool-calling": "Szerszámhívás", + "multi-turn": "Többfordulós", + "thinking": "Gondolkodás", + "system-prompt": "Rendszer Prompt", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Alapvető szöveges üzenet", + "tool-calling": "Funkció/eszköz meghívása", + "multi-turn": "Beszélgetés a történelemmel", + "thinking": "Kiterjesztett gondolkodás / érvelés", + "system-prompt": "Összetett rendszerutasítások", + "streaming": "SSE streaming kérés" + }, + "templatePayloads": { + "simpleChat": { + "system": "Segítőkész asszisztens vagy.", + "userGreeting": "Sziasztok! hogy vagy ma?" + }, + "toolCalling": { + "userWeather": "Milyen az idő São Paulóban?", + "toolDescription": "Az adott hely aktuális időjárásának megtekintése", + "cityNameDescription": "Város neve" + }, + "multiTurn": { + "system": "Ön egy kódolási asszisztens.", + "userInitial": "Írjon függvényt egy tömb rendezéséhez Pythonban.", + "assistantExample": "Íme egy egyszerű rendezési funkció:\n\n``` python\ndef sort_array(arr):\n vissza rendezve (arr)\n```", + "userFollowUp": "Most rendezze csökkenő sorrendbe." + }, + "thinking": { + "question": "Mennyi az első 100 prímszám összege?" + }, + "systemPrompt": { + "systemInstruction": "Ön elosztott rendszerekre szakosodott vezető szoftvermérnök. Válaszoljon a kérdésekre tömören, az iparág legjobb gyakorlatait használva. Mindig adjon meg kódpéldákat, ha releváns. Formázza meg válaszait a markdown segítségével.", + "question": "Hogyan valósíthatok meg egy megszakító mintát?" + }, + "streaming": { + "prompt": "Mesélj egy rövid történetet egy festeni tanuló robotról." + } + }, + "openaiCompatibleLabel": "OpenAI kompatibilis", + "anthropicCompatibleLabel": "Antropikus kompatibilis", + "noTemplateForFormat": "Ehhez a formátumhoz nincs sablon", + "translationFailed": "Sikertelen fordítás: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Translation Pipeline", + "pipelineVisualization": "Pipeline vizualizáció", + "pipelineVisualizationHint": "Küldjön üzenetet, hogy megtudja, hogyan halad a kérése az észlelés → fordítás → szolgáltató hívása révén.", + "chatTesterDescription": "Küldjön üzeneteket egy adott ügyfélformátumban, és ellenőrizze a fordítási folyamat minden lépését.", + "chatTesterFlow": "Ügyfélkérés → Formátumészlelés → OpenAI Köztes → Szolgáltatói formátum → Válasz", + "clickStepToInspect": "Kattintson bármelyik lépésre az adatok ellenőrzéséhez.", + "clientFormat": "Kliens formátum", + "provider": "Szolgáltató", + "modelPlaceholder": "Válassza ki vagy írja be a modell nevét...", + "sendMessageToSeePipeline": "A fordítási folyamat megtekintéséhez küldjön üzenetet", + "chatMessageHintPrefix": "Az üzenet formátuma a", + "chatMessageHintSuffix": "kérést, lefordítják a folyamaton keresztül, és elküldik a kiválasztott szolgáltatónak.", + "youWithFormat": "Te ({format})", + "assistant": "Asszisztens", + "typeMessage": "Írjon be egy üzenetet...", + "send": "Küldés", + "clientRequest": "Ügyfél kérése", + "clientRequestDescription": "A kérés szerve, ahogyan az Ön ügyfele küldené", + "formatDetected": "Formátum észlelve", + "formatDetectedDescription": "Az OmniRoute automatikusan észleli az API-formátumot a kérésstruktúrából", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Minden formátum először OpenAI formátumra (az univerzális hídra) normalizálódik.", + "providerFormat": "Szolgáltatói formátum", + "providerFormatDescription": "Az OpenAI formátumot lefordítják a szolgáltató natív formátumára", + "providerResponse": "Szolgáltató válasza", + "providerResponseRawDescription": "A nyers válasz a szolgáltató API-tól", + "providerResponseSseDescription": "A nyers SSE adatfolyam a szolgáltató API-tól", + "unexpectedError": "Váratlan hiba történt", + "error": "Hiba", + "errorMessage": "Hiba: {message}", + "requestFailed": "A kérés sikertelen", + "noTextExtracted": "(Nincs kivonatolva szöveg)", + "liveMonitorDescriptionPrefix": "Megjeleníti a fordítási eseményeket, ahogy az API-hívások az OmniRoute-on keresztül áramlanak. Az események a memóriában lévő pufferből származnak (újraindításkor visszaáll). Használja", + "liveMonitorDescriptionSuffix": ", vagy külső API-hívások események generálásához." + }, + "usage": { + "title": "Használat", + "loggerTab": "Logger", + "proxyTab": "Proxy", + "budgetManagement": "Költségvetési menedzsment", + "budgetSaved": "Költségkeret-korlátok mentve", + "budgetSaveFailed": "Nem sikerült megtakarítani a költségkeretet", + "loadingBudgetData": "Költségvetési adatok betöltése...", + "noApiKeysTitle": "Nincsenek API kulcsok", + "noApiKeysDescription": "Először adjon hozzá API-kulcsokat a költségvetési korlátok beállításához.", + "apiKey": "API kulcs", + "todaysSpend": "A mai kiadás", + "thisMonth": "Ebben a hónapban", + "setLimits": "Állítsa be a korlátokat", + "dailyLimitUsd": "Napi limit (USD)", + "monthlyLimitUsd": "Havi limit (USD)", + "warningThresholdPercent": "Figyelmeztetési küszöb (%)", + "dailyLimitPlaceholder": "pl. 5.00", + "monthlyLimitPlaceholder": "pl. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Mentse el a határokat", + "budgetOk": "Költségkeret rendben – {remaining} maradt", + "budgetExceeded": "A költségkeret túllépve – a kérelmek blokkolva lehetnek", + "totalRequests": "Összes kérés", + "noDataYet": "Még nincsenek adatok", + "latency": "Látencia", + "latencyP50": "50. o", + "latencyP95": "95. o", + "latencyP99": "99. o", + "promptCache": "Prompt Cache", + "systemHealth": "Rendszer egészsége", + "entries": "Bejegyzések", + "activeCount": "{count} aktív", + "openCircuitBreakersDetected": "Szakadási megszakítók észlelve", + "hitRate": "Hit Rate", + "hitsMisses": "Találatok / hiányzók", + "circuitBreakers": "Áramköri megszakítók", + "lockedIPs": "Zárolt IP-k", + "lockoutsAutoRefreshHint": "Modellenkénti sebességkorlátozások • Automatikus frissítés 10 másodpercig", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} maradt", + "howItWorks": "Hogyan működik", + "howItWorksSubtitle": "Ismerje meg, hogyan érvényesítik az értékelések az Ön LLM-válaszait", + "define": "Határozza meg", + "defineStepDescription": "Hozzon létre teszteseteket bemeneti promptokkal és várható kimeneti feltételekkel olyan stratégiák használatával, mint a tartalmaz, a reguláris kifejezés vagy a pontos egyezés.", + "run": "Fuss", + "runStepDescription": "Végezzen teszteseteket LLM-végpontjaival szemben az OmniRoute segítségével. Minden eset valódi API-kérésként kerül elküldésre.", + "evaluate": "Értékelje", + "evaluateStepDescription": "A válaszokat a várt kritériumokhoz hasonlítják. Tekintse meg az egyes esetek sikerességét/sikertelenségét a késleltetési mutatók és a részletes visszajelzések segítségével.", + "evalSuites": "Értékelő lakosztályok", + "evalSuitesHint": "Kattintson egy csomagra a tesztesetek megtekintéséhez, majd futtassa az LLM-végpontok kiértékeléséhez", + "evalsLoading": "Eval Suite betöltése...", + "noEvalSuitesFound": "Nem található Eval Suites", + "noEvalSuitesDescription": "Az Eval programcsomagok API-n keresztül vagy kódban definiálhatók. A modell kimeneteit tesztelik a várt eredményekkel összehasonlítva olyan stratégiák használatával, mint a tartalom, a regex, a pontos egyezés és az egyéni függvények.", + "columnCase": "Tok", + "columnStatus": "Állapot", + "columnLatency": "Látencia", + "columnDetails": "Részletek", + "columnModel": "Modell", + "columnStrategy": "Stratégia", + "columnExpected": "Várható", + "statsSuites": "Lakosztályok", + "statsTestCases": "Tesztesetek", + "statsModels": "Modellek", + "statsCoverage": "Lefedettség", + "statsStrategiesCount": "{count} stratégiákat", + "evaluationStrategies": "Értékelési stratégiák", + "modelsUnderTest": "Teszt alatt lévő modellek", + "searchSuitesPlaceholder": "Lakosztályok keresése...", + "passSuffix": "pass", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Fuss Eval", + "runningProgress": "{current}/{total} fut...", + "passRate": "áthaladási arány", + "summaryBreakdown": "{passed} sikeres · {failed} sikertelen · {total} összesen", + "passedIconLabel": "✅ Sikerült", + "failedIconLabel": "❌ Nem sikerült", + "detailsContains": "Tartalmazza: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Várható: \"{expected}\"", + "noResultsYet": "Még nincs eredmény", + "testCasesCount": "Tesztesetek ({count})", + "noTestCasesDefined": "Nincsenek meghatározva tesztesetek", + "runEvalHint": "Kattintson a \"Run Eval\" gombra az összes eset végrehajtásához az LLM-végponton. Minden teszt valódi kérést küld az OmniRoute-on keresztül.", + "notifyNoTestCases": "Nincsenek meghatározva tesztesetek ehhez a csomaghoz", + "notifyAllCasesPassed": "Minden {total} eset sikeres ✅", + "notifySomeCasesFailed": "{passed}/{total} sikeres, {failed} sikertelen", + "notifyEvalRunFailed": "Eval run nem sikerült", + "notifyEvalTitle": "Értékelés: {name}", + "modelEvals": "Modellértékelések", + "evalsHeroDescription": "Tesztelje és érvényesítse LLM-végpontjait előre meghatározott kiértékelő csomagok futtatásával. Minden csomag teszteseteket tartalmaz, amelyek valódi felszólításokat küldenek az OmniRoute-on keresztül, és összehasonlítják a válaszokat a várt kritériumokkal – segítik a regressziók észlelését, a modellek összehasonlítását, és biztosítják a válaszadás minőségét a szolgáltatók között.", + "qualityValidation": "Minőségellenőrzés", + "modelComparison": "Modell-összehasonlítás", + "regressionDetection": "Regresszió észlelése", + "latencyBenchmarks": "Késési időre vonatkozó referenciaértékek", + "modelLockouts": "Modellzárások", + "noLockouts": "Jelenleg nincs zárolt modell", + "activeSessions": "Aktív munkamenetek", + "noSessions": "Nincsenek aktív munkamenetek", + "sessionsHint": "A munkamenetek úgy jelennek meg, mint a kérések a proxyn keresztül", + "sessionsTrackedHint": "Ujjlenyomat-kéréssel követve • Automatikus frissítés 5 másodpercig", + "session": "Munkamenet", + "age": "Életkor", + "requests": "Kérések", + "connection": "Csatlakozás", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Szolgáltatói korlátok", + "noProviders": "Nincs szolgáltató csatlakozva", + "connectProvidersForQuota": "Csatlakozzon OAuth szolgáltatókhoz az API-kvótakorlátok és -használat nyomon követéséhez.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(szűrve innen: {count})", + "autoRefresh": "Automatikus frissítés", + "refreshAll": "Összes frissítése", + "loadingQuotas": "Betöltés...", + "account": "fiók", + "modelQuotas": "Modellkvóták", + "lastUsed": "Utoljára használt", + "actions": "Akciók", + "refreshQuota": "Kvóta frissítése", + "today": "Ma", + "tomorrow": "Holnap", + "dayTimeFormat": "{day}, {time}", + "inDuration": "itt: {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Nyers terv: {plan}", + "noPlanFromProvider": "Nincs terv a szolgáltatótól", + "noQuotaData": "Nincsenek kvótaadatok", + "noQuotaDataAvailable": "Nem állnak rendelkezésre kvótaadatok", + "noAccountsForTierFilter": "Nem található fiók a rétegszűrőhöz", + "tierAll": "Mind", + "tierEnterprise": "Enterprise", + "tierTeam": "Csapat", + "tierBusiness": "Üzleti", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Plusz", + "tierFree": "Ingyenes", + "tierUnknown": "Ismeretlen" + }, + "modals": { + "waitingAuth": "Várakozás az engedélyezésre", + "verificationUrl": "Ellenőrző URL", + "yourCode": "Az Ön kódja", + "remoteAccess": "Távoli hozzáférés:", + "connectedSuccess": "Sikeres csatlakozás!", + "connectionFailed": "Sikertelen csatlakozás", + "chooseAuthMethod": "Válassza ki a hitelesítési módot:", + "awsBuilderId": "AWS Builder ID", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "Google Fiók", + "githubAccount": "GitHub fiók", + "importToken": "Token importálása", + "pasteToken": "Illessze be a Kiro IDE frissítési tokent.", + "awsRegion": "AWS régió", + "autoDetecting": "Tokenek automatikus felismerése...", + "readingFromCache": "Olvasás az AWS SSO gyorsítótárból", + "readingFromCursor": "Olvasás a Cursor IDE adatbázisból", + "initializing": "Inicializálás...", + "pricingConfig": "Árképzési konfiguráció", + "loadingPricing": "Áradatok betöltése...", + "pricingRatesFormat": "Árképzési tarifák formátuma", + "noPricingData": "Nem állnak rendelkezésre árazási adatok", + "noModelsFound": "Nem található modell" + }, + "loggers": { + "allProviders": "Minden szolgáltató", + "allModels": "Minden modell", + "allAccounts": "Minden fiók", + "allApiKeys": "Minden API kulcs", + "allTypes": "Minden típus", + "allLevels": "Minden szint", + "modelAZ": "A-Z modell", + "modelZA": "Z-A modell", + "loadingLogs": "Naplók betöltése...", + "loadingProxyLogs": "Proxynaplók betöltése...", + "noLogEntries": "Nem találhatók naplóbejegyzések", + "noPayloadData": "Ehhez a naplóbejegyzéshez nem állnak rendelkezésre hasznos adatok.", + "proxyEvent": "Proxy esemény", + "proxy": "Proxy", + "level": "Szint", + "directNative": "Közvetlen (natív)", + "combo": "Combo", + "inputTokens": "Én:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Használati áttekintés", + "outputTokens": "Kimeneti tokenek", + "totalCost": "Teljes költség", + "usageByModel": "Használat modellenként", + "usageByAccount": "Használat fiók szerint", + "failedToLoad": "Nem sikerült betölteni a használati statisztikákat.", + "tokenHealth": "Token Health", + "totalOAuth": "Teljes OAuth", + "healthy": "Egészséges", + "warning": "Figyelmeztetés", + "errored": "Hibás", + "lastCheck": "Utolsó ellenőrzés", + "noData": "Nincs adat", + "share": "Megosztás", + "unableToLoad": "Nem sikerült betölteni a rendszermutatókat", + "product": "Termék", + "resources": "Erőforrások", + "company": "Társaság" + }, + "auth": { + "welcome": "Üdvözöljük", + "signIn": "Jelentkezzen be", + "enterPassword": "A folytatáshoz adja meg jelszavát", + "password": "Jelszó", + "unifiedProxy": "Egységes AI API-proxy", + "unifiedAiApiProxy": "Egységes AI API-proxy", + "unifiedAiApiProxyDesc": "A kéréseket több mesterségesintelligencia-szolgáltatóhoz irányítja egyetlen végponton keresztül. Beépített terheléselosztás, feladatátvétel és használati nyomon követés.", + "passwordNotEnabled": "A jelszavas védelem nincs engedélyezve", + "loading": "Betöltés...", + "invalidPassword": "Érvénytelen jelszó", + "errorOccurredRetry": "Hiba történt. Kérjük, próbálja újra.", + "configureInstance": "Állítsuk be az OmniRoute-példányt", + "runOnboardingWizard": "Futtassa a bevezető varázslót a jelszó beállításához, és csatlakoztassa első mesterségesintelligencia-szolgáltatóját.", + "startOnboarding": "Kezdje el a Belépést", + "secureYourInstance": "Biztosítsa példányát", + "setPasswordDescription": "Állítson be egy jelszót az irányítópult védelméhez, és védje meg API-végpontjait az illetéktelen hozzáféréstől.", + "configurePassword": "Jelszó konfigurálása", + "continue": "Folytatás", + "windowWillClose": "Ez az ablak automatikusan bezárul...", + "closeTabNow": "Most bezárhatja ezt a lapot.", + "copyUrlManual": "Kérjük, másolja ki az URL-t a címsorból, és illessze be az alkalmazásba.", + "accessDeniedDescription": "Nincs engedélye az erőforrás elérésére. Ellenőrizze az API-kulcsot, vagy forduljon a rendszergazdához.", + "goToDashboard": "Lépjen az Irányítópultra", + "featureMultiProviderTitle": "Több szolgáltató", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google és még sok más", + "featureLoadBalancingTitle": "Terheléselosztás", + "featureLoadBalancingDesc": "Okosan ossza el a kéréseket", + "featureUsageTrackingTitle": "Használat követése", + "featureUsageTrackingDesc": "Kövesse nyomon a költségeket és a tokeneket", + "resetPassword": "Jelszó visszaállítása", + "resetDescription": "Válasszon módszert az irányítópulthoz való hozzáférés helyreállításához", + "stopServer": "Állítsa le az OmniRoute szervert", + "processing": "Feldolgozás...", + "pleaseWait": "Kérjük, várjon, amíg befejezzük az engedélyezést.", + "authSuccess": "Az engedélyezés sikeres!", + "copyUrl": "Másolja ezt az URL-t", + "accessDenied": "Hozzáférés megtagadva", + "methodCliTitle": "1. módszer: CLI visszaállítás", + "methodCliDescription": "Futtassa a következő parancsot azon a szerveren, ahol az OmniRoute fut:", + "methodCliHint": "Ez új jelszó beállítására kéri. Először le kell állítani a szervert.", + "methodManualTitle": "2. módszer: Kézi visszaállítás", + "methodManualDescription": "Törölje a jelszót az adatbázisból, és indításkor állítson be újat:", + "setPasswordInYour": "Állítson be új jelszót", + "fileLabelSuffix": "fájl:", + "newPasswordPlaceholder": "az Ön_új_jelszava", + "deleteSettingsFile": "Törölje", + "orRemovePasswordHashField": "vagy távolítsa el a passwordHash mezőt", + "restartServerWithNewPassword": "Indítsa újra a szervert - az új jelszót fogja használni", + "backToLogin": "Vissza a Bejelentkezéshez", + "forgotPassword": "Elfelejtetted a jelszavad?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navigáljon haza", + "toggleMenu": "Váltó menü", + "featuresLink": "Jellemzők", + "docsLink": "Dokumentumok", + "github": "GitHub", + "versionLive": "A v1.0 már elérhető", + "oneEndpoint": "One Endpoint for", + "allProviders": "Minden AI szolgáltató", + "heroDescription": "AI végpont proxy webes irányítópulttal – A CLIProxyAPI JavaScript-portja. Zökkenőmentesen működik a Claude Code, OpenAI Codex, Cline, RooCode és más CLI eszközökkel.", + "getStarted": "Kezdje el", + "viewOnGithub": "Megtekintés a GitHubon", + "powerfulFeatures": "Erőteljes tulajdonságok", + "featuresSubtitle": "Minden, amire szüksége van az AI-infrastruktúra kezeléséhez egy helyen, méretre építetten.", + "featureUnifiedEndpointTitle": "Egységes végpont", + "featureUnifiedEndpointDesc": "Az összes szolgáltató elérése egyetlen szabványos API URL-címen keresztül.", + "featureEasySetupTitle": "Egyszerű beállítás", + "featureEasySetupDesc": "Az npx paranccsal percek alatt üzembe helyezheti.", + "featureModelFallbackTitle": "Modell tartalék", + "featureModelFallbackDesc": "Automatikus szolgáltatóváltás hiba vagy magas késleltetés esetén.", + "featureUsageTrackingTitle": "Használat követése", + "featureUsageTrackingDesc": "Részletes elemzés és költségkövetés az összes modellben.", + "featureOAuthApiKeysTitle": "OAuth és API kulcsok", + "featureOAuthApiKeysDesc": "A hitelesítő adatok biztonságos kezelése egyetlen tárolóban.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncDesc": "Azonnal szinkronizálja konfigurációit az eszközök között.", + "featureCliSupportTitle": "CLI támogatás", + "featureCliSupportDesc": "Működik a Claude Code, Codex, Cline, Cursor és még sok más funkcióval.", + "featureDashboardTitle": "Irányítópult", + "featureDashboardDesc": "Vizuális irányítópult a valós idejű forgalomelemzéshez.", + "howItWorks": "Hogyan működik az OmniRoute", + "howItWorksDescription": "Az adatok zökkenőmentesen áramlanak az alkalmazásból az intelligens útválasztási rétegünkön keresztül a feladat legjobb szolgáltatójáig.", + "howItWorksStep1Title": "1. CLI és SDK-k", + "howItWorksStep1Description": "Kérései a kedvenc eszközeiből vagy az egységes SDK-nkból indulnak ki. Csak módosítsa az alap URL-t.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Motorunk elemzi a felszólítást, ellenőrzi a szolgáltató állapotát, és a legalacsonyabb késleltetést vagy költséget keresi.", + "howItWorksStep3Title": "3. AI szolgáltatók", + "howItWorksStep3Description": "A kérést az OpenAI, az Anthropic, a Gemini vagy mások azonnal teljesítik.", + "getStartedIn30Seconds": "Kezdje el 30 másodpercen belül", + "getStartedDescription": "Telepítse az OmniRoute-ot, konfigurálja szolgáltatóit a webes irányítópulton keresztül, és indítsa el az AI-kérések útválasztását.", + "installOmniRoute": "Telepítse az OmniRoute-ot", + "installStepDescription": "Futtassa az npx parancsot a kiszolgáló azonnali elindításához", + "openDashboard": "Nyissa meg az Irányítópultot", + "openDashboardStepDescription": "A szolgáltatók és az API-kulcsok konfigurálása webes felületen keresztül", + "routeRequests": "Útvonalkérések", + "routeRequestsStepDescription": "Irányítsa CLI-eszközeit a {endpoint} címre", + "terminal": "terminál", + "copy": "Másolás", + "copied": "✓ Másolva", + "startingOmniRoute": "Az OmniRoute indítása...", + "serverRunningOnLabel": "A szerver fut", + "dashboardLabel": "Irányítópult", + "readyToRoute": "Útvonalra készen! ✓", + "configureProvidersNote": "📝 Konfigurálja a szolgáltatókat az irányítópulton, vagy használjon környezeti változókat", + "dataLocation": "Adatok helye:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Termék", + "dashboardLink": "Irányítópult", + "changelog": "Változásnapló", + "resources": "Erőforrások", + "documentation": "Dokumentáció", + "npm": "NPM", + "legal": "Jogi", + "mitLicense": "MIT licenc", + "footerTagline": "Az AI generálás egységes végpontja. Könnyedén csatlakozhat, irányíthat és kezelhet AI-szolgáltatóit.", + "copyright": "© {year} OmniRoute. Minden jog fenntartva.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Kurzor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropikus", + "flowProviderGemini": "Ikrek", + "flowProviderGithubCopilot": "GitHub másodpilóta", + "interactiveDiagram": "Az asztalon látható interaktív diagram", + "ctaTitle": "Készen áll az AI-infrastruktúra egyszerűsítésére?", + "ctaDescription": "Csatlakozzon azokhoz a fejlesztőkhöz, akik az AI-integrációikat az OmniRoute segítségével egyszerűsítik. Nyílt forráskódú és ingyenesen indítható.", + "startFree": "Kezdje ingyenesen", + "readDocumentation": "Olvassa el a dokumentációt" + }, + "docs": { + "title": "Dokumentáció", + "quickStart": "Gyors kezdés", + "features": "Jellemzők", + "supportedProviders": "Támogatott szolgáltatók", + "supportedProvidersToc": "Szolgáltatók", + "commonUseCases": "Gyakori használati esetek", + "clientCompatibility": "Kliens kompatibilitás", + "apiReference": "API-referencia", + "method": "módszer", + "path": "Útvonal", + "notes": "Megjegyzések", + "modelPrefixes": "Modell előtagok", + "prefix": "Előtag", + "troubleshooting": "Hibaelhárítás", + "supportsChat": "Támogatja a chat és a válaszok végpontjait egyaránt.", + "oauthAutoRefresh": "OAuth kapcsolat automatikus tokenfrissítéssel.", + "fullStreaming": "Teljes streaming támogatás minden modellhez.", + "docsLabel": "Dokumentumok", + "docsHeroDescription": "AI átjáró több szolgáltató LLM-ek számára. Egy végpont OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor és 20+ további szolgáltató számára.", + "openDashboard": "Nyissa meg az Irányítópultot", + "endpointPage": "Végpont oldal", + "github": "GitHub", + "reportIssue": "Probléma bejelentése", + "onThisPage": "Ezen az oldalon", + "documentationVersion": "Dokumentáció - v{version}", + "quickStartStep1Title": "1. Telepítse és futtassa", + "quickStartStep1Prefix": "Fuss", + "quickStartStep1Middle": "vagy klónozzuk a GitHubból és futtassuk", + "quickStartStep2Title": "2. Hozzon létre API-kulcsot", + "quickStartStep2Text": "Lépjen a Végpont -> Regisztrált kulcsok elemre. Környezetenként egy kulcsot generál.", + "quickStartStep3Title": "3. Csatlakoztassa a szolgáltatókat", + "quickStartStep3Text": "Adjon hozzá szolgáltatói fiókokat OAuth-bejelentkezéssel, API-kulccsal vagy szabadszintű automatikus csatlakozással.", + "quickStartStep4Title": "4. Állítsa be az ügyfélbázis URL-jét", + "quickStartStep4Prefix": "Irányítsa az IDE- vagy API-kliensét", + "quickStartStep4Suffix": "Használjon például szolgáltatói előtagot", + "featureRoutingTitle": "Többszolgáltatós útválasztás", + "featureRoutingText": "A kérések 30+ AI-szolgáltatóhoz irányíthatók egyetlen OpenAI-kompatibilis végponton keresztül. Támogatja a csevegést, a válaszokat, a hang- és kép API-kat.", + "featureCombosTitle": "Kombók és egyensúlyozás", + "featureCombosText": "Hozzon létre modellkombinációkat tartalék láncokkal és kiegyensúlyozási stratégiákkal: körmérkőzés, prioritás, véletlenszerű, legkevésbé használt és költségoptimalizált.", + "featureUsageTitle": "Használat és költségkövetés", + "featureUsageText": "Valós idejű tokenszámlálás, költségszámítás szolgáltatónként/modellenként, valamint részletes használati lebontás API-kulcs és fiók szerint.", + "featureAnalyticsTitle": "Analytics irányítópult", + "featureAnalyticsText": "Vizuális elemzés diagramokkal a kérésekhez, tokenekhez, hibákhoz, késleltetéshez, költségekhez és a modell népszerűségének időbeli alakulásához.", + "featureHealthTitle": "Egészségügyi Monitoring", + "featureHealthText": "Élő állapotellenőrzések, szolgáltatói állapot, megszakító állapotok és automatikus sebességkorlát-észlelés exponenciális visszalépéssel.", + "featureCliTitle": "CLI eszközök", + "featureCliText": "Kezelje az IDE konfigurációkat, exportálja/importálja a biztonsági másolatokat, fedezze fel a kódexprofilokat, és konfigurálja a beállításokat az irányítópultról.", + "featureSecurityTitle": "Biztonság és irányelvek", + "featureSecurityText": "API-kulcs hitelesítés, IP-szűrés, azonnali befecskendezési őr, tartományi szabályzatok, munkamenet-kezelés és naplózás.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncText": "Szinkronizálja konfigurációját a Cloudflare Workers szolgáltatással a távoli eléréshez titkosított hitelesítő adatokkal és automatikus feladatátvétellel.", + "providersAcrossConnectionTypes": "{count} szolgáltatók három kapcsolattípuson keresztül.", + "manageProviders": "Szolgáltatók kezelése", + "providersCount": "{count} szolgáltatók", + "providerTypeFree": "Ingyenes szint", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API kulcs", + "useCaseSingleEndpointTitle": "Egyetlen végpont sok szolgáltató számára", + "useCaseSingleEndpointText": "Irányítsa az ügyfeleket egy alap URL-re, és irányítsa a modell előtagja szerint (például: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Tartalék és modellváltás kombókkal", + "useCaseFallbackText": "Hozzon létre kombinált modelleket az irányítópulton, és tartsa stabilan a klienskonfigurációt, miközben a szolgáltatók belülről váltanak.", + "useCaseUsageVisibilityTitle": "Használat, költség és hibakeresés láthatósága", + "useCaseUsageVisibilityText": "Kövesse nyomon a tokeneket és a költségeket szolgáltató, fiók és API-kulcs szerint a Használat és az Analytics lapokon.", + "clientCherryStudioTitle": "Cherry Stúdió", + "baseUrlLabel": "Alap URL", + "chatEndpointLabel": "Csevegés végpontja", + "modelRecommendationLabel": "Modelljavaslat: kifejezett előtag", + "clientCodexTitle": "Codex / GitHub másodpilóta modellek", + "clientCodexBullet1": "Használja a modellazonosítókat", + "clientCodexBullet2": "A Codex-család modelljei automatikusan irányítanak ide", + "clientCodexBullet3": "A nem Codex modellek tovább működnek", + "clientCursorTitle": "Kurzor IDE", + "clientCursorBullet1": "Használja", + "clientCursorBullet1Suffix": "kurzormodellek előtagja.", + "clientCursorBullet2": "OAuth kapcsolat – bejelentkezés a Szolgáltatók oldaláról.", + "clientClaudeTitle": "Claude Code / Antigravitáció", + "clientClaudeBullet1Prefix": "Használja", + "clientClaudeBullet1Middle": "(Claude) ill", + "clientClaudeBullet1Suffix": "(Antigravitációs) előtag.", + "endpointChatNote": "OpenAI-kompatibilis csevegési végpont (alapértelmezett).", + "endpointResponsesNote": "Responses API-végpont (Codex, o-sorozat).", + "endpointModelsNote": "Modelkatalógus az összes csatlakoztatott szolgáltatóhoz.", + "endpointAudioNote": "Hang átírása (Deepgram, AssemblyAI).", + "endpointImagesNote": "Képgenerálás (NanoBanana).", + "endpointRewriteChatNote": "Átírási segéd a /v1 nélküli ügyfelek számára.", + "endpointRewriteResponsesNote": "Újraírási segéd a /v1 nélküli válaszokhoz.", + "endpointRewriteModelsNote": "Segítő átírása a modellfelderítéshez /v1 nélkül.", + "modelPrefixesDescriptionStart": "Használja a szolgáltató előtagot a modell neve előtt, hogy egy adott szolgáltatóhoz irányítson. Példa:", + "modelPrefixesDescriptionEnd": "útvonalak a GitHub Copilothoz.", + "provider": "Szolgáltató", + "type": "Írja be", + "troubleshootingModelRouting": "Ha az ügyfél sikertelen a modell-útválasztással, használja az explicit szolgáltató/modell értéket (például: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Ha kétértelmű modellhibákat kap, válasszon egy szolgáltatói előtagot a puszta modellazonosító helyett.", + "troubleshootingCodexFamily": "A GitHub Codex-családhoz tartozó modelleknél tartsa a modellt gh/; a router automatikusan kiválasztja a /válaszokat.", + "troubleshootingTestConnection": "Az IDE-kből vagy külső kliensekből történő tesztelés előtt használja az Irányítópult > Szolgáltatók > Kapcsolat tesztelése menüpontot.", + "troubleshootingCircuitBreaker": "Ha a szolgáltató azt mutatja, hogy az áramkör megszakítója nyitva van, várja meg a lehűlést, vagy nézze meg az Egészség oldalt a részletekért.", + "troubleshootingOAuth": "OAuth-szolgáltatók esetén hitelesítse újra, ha a tokenek lejárnak. Ellenőrizze a szolgáltatói kártya állapotjelzőjét." + }, + "legal": { + "privacyPolicy": "Adatvédelmi szabályzat", + "termsOfService": "Szolgáltatási feltételek", + "providerConfigurations": "Szolgáltatói konfigurációk", + "apiKeys": "API kulcsok", + "usageLogs": "Használati naplók", + "applicationSettings": "Alkalmazás beállításai", + "viewExportAnalytics": "Használati elemzés megtekintése és exportálása", + "clearHistory": "Bármikor törölje a használati előzményeket", + "configureRetention": "Állítsa be a naplózási házirendeket", + "backupRestore": "Készítsen biztonsági másolatot és állítsa vissza az adatbázist", + "privacyMetadataTitle": "Adatvédelmi szabályzat | OmniRoute", + "privacyMetadataDescription": "Az OmniRoute AI API proxy router adatvédelmi szabályzata.", + "termsMetadataTitle": "Szolgáltatási feltételek | OmniRoute", + "termsMetadataDescription": "Az OmniRoute AI API proxy router szolgáltatási feltételei.", + "backToHome": "Vissza haza", + "lastUpdated": "Utolsó frissítés: {date}", + "policyLastUpdatedDate": "2026. február 13", + "listSeparator": "-", + "questionsVisit": "Kérdések? Látogass el hozzánk", + "githubRepository": "GitHub adattár", + "privacySection1Title": "1. Local-First Architecture", + "privacySection1Text": "Az OmniRoute helyi alkalmazásnak készült. Minden adatfeldolgozás és tárolás teljes egészében az Ön gépén történik. Nincs központi szerver, amely gyűjti az Ön adatait.", + "privacySection2Title": "2. Az általunk tárolt adatok", + "privacyDataStoredIn": "A következő adatok helyben kerülnek tárolásra", + "privacyDataProviderConfigurationsDesc": "kapcsolati URL-ek, szolgáltatótípusok és prioritási beállítások", + "privacyDataApiKeysDesc": "titkosítva és helyben tárolva az AI-szolgáltatókkal való hitelesítéshez", + "privacyDataUsageLogsDesc": "kérések száma, tokenhasználat, modellnevek, időbélyegek és válaszidők", + "privacyDataApplicationSettingsDesc": "témabeállítások, útválasztási stratégia és kombinált konfigurációk", + "privacySection3Title": "3. Nincs telemetria", + "privacySection3Text": "Az OmniRoute nem gyűjt telemetriai, elemzési vagy összeomlási jelentéseket. Semmilyen adatot nem küldünk nekünk vagy harmadik félnek. A használati minták, az API-hívások és a konfigurációk teljesen privátak maradnak.", + "privacySection4Title": "4. Harmadik fél AI-szolgáltatók", + "privacySection4Text": "Amikor API-hívásokat kezdeményez az OmniRoute-on keresztül, kéréseit a rendszer az Ön által konfigurált AI-szolgáltatókhoz továbbítja (például: OpenAI, Anthropic, Google). Ezek a szolgáltatók saját adatvédelmi szabályzattal rendelkeznek, amelyek szabályozzák az Ön adatainak kezelését. Kérjük, tekintse át:", + "privacyOpenAiPolicy": "OpenAI adatvédelmi szabályzat", + "privacyAnthropicPolicy": "Antropikus adatvédelmi szabályzat", + "privacyGooglePolicy": "Google adatvédelmi irányelvek", + "privacySection5Title": "5. Felhőszinkronizálás (opcionális)", + "privacySection5Text": "Ha engedélyezi az opcionális felhőszinkronizálási funkciót, a szolgáltatói konfigurációk és az API-kulcsok egy konfigurált felhő-végpontra továbbíthatók. Ez a funkció alapértelmezés szerint le van tiltva, és kifejezett feliratkozást igényel.", + "privacySection6Title": "6. Naplózás", + "privacyLoggingIntro": "A kérések naplói az irányítópult beállításaiban konfigurálhatók. A következőket teheti:", + "privacySection7Title": "7. Az Ön jogai", + "privacySection7TextStart": "Mivel az összes adatot helyben tárolják, az Ön teljes ellenőrzése alatt áll. Adatait bármikor törölheti, ha eltávolítja a", + "privacySection7TextEnd": "könyvtárat vagy az irányítópult adatbázis biztonsági mentési és visszaállítási funkcióit használja.", + "termsSection1Title": "1. Áttekintés", + "termsSection1Text": "Az OmniRoute egy helyileg első AI API-proxy router, amely teljes egészében az Ön gépén működik. A kéréseket több mesterségesintelligencia-szolgáltatóhoz irányítja terheléselosztással, feladatátvétellel és a használat nyomon követésével.", + "termsSection2Title": "2. Felhasználó kötelezettségei", + "termsResponsibilityApiKeys": "Kizárólag Ön felelős saját API-kulcsainak és harmadik fél mesterségesintelligencia-szolgáltatók (OpenAI, Anthropic, Google stb.) hitelesítő adatainak kezeléséért.", + "termsResponsibilityCompliance": "Meg kell felelnie minden olyan mesterséges intelligencia-szolgáltató szolgáltatási feltételeinek, amelyek API-jához az OmniRoute-on keresztül hozzáfér.", + "termsResponsibilitySecurity": "Ön felelős a helyi OmniRoute telepítés biztonságáért, beleértve a jelszó beállítását és a hálózati hozzáférés korlátozását.", + "termsSection3Title": "3. Hogyan működik", + "termsSection3Text": "Az OmniRoute közvetítő proxyként működik. Az OmniRoute-nak küldött API-hívásokat lefordítják és továbbítják a beállított AI-szolgáltatóknak. Az OmniRoute a szükséges protokollfordításon túl nem módosítja kérései vagy válaszai tartalmát.", + "termsSection4Title": "4. Adatkezelés", + "termsDataStoredLocally": "Minden adatot helyileg tárolunk a gépen egy SQLite adatbázisban.", + "termsNoTransmission": "Az OmniRoute nem továbbít semmilyen adatot külső szerverekre, kivéve, ha kifejezetten engedélyezi a felhőalapú szinkronizálási funkciókat.", + "termsDataLocationText": "A használati naplókat, az API-kulcsokat és a konfigurációt a rendszer tárolja", + "termsSection5Title": "5. Jogi nyilatkozat", + "termsSection5Text": "Az OmniRoute \"ahogy van\" mindenféle garancia nélkül biztosított. Nem vállalunk felelősséget az API használatából, a szolgáltatás megszakadásából vagy az adatvesztésből eredő költségekért. Mindig készítsen biztonsági másolatot a konfigurációjáról.", + "termsSection6Title": "6. Nyílt forráskód", + "termsSection6Text": "Az OmniRoute egy nyílt forráskódú szoftver. Ön szabadon megvizsgálhatja, módosíthatja és terjesztheti a licenc feltételei szerint." + } +} diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json new file mode 100644 index 0000000000..9582d2a3d8 --- /dev/null +++ b/src/i18n/messages/id.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Simpan", + "cancel": "Batalkan", + "delete": "Hapus", + "loading": "Memuat...", + "error": "Terjadi kesalahan", + "success": "Sukses", + "confirm": "Apakah kamu yakin?", + "refresh": "Segarkan", + "close": "Tutup", + "add": "Tambahkan", + "edit": "Sunting", + "search": "Cari", + "back": "Kembali", + "next": "Selanjutnya", + "submit": "Kirim", + "reset": "Setel ulang", + "copy": "Salin", + "copied": "Disalin!", + "enabled": "Diaktifkan", + "disabled": "Dengan disabilitas", + "active": "Aktif", + "inactive": "Tidak aktif", + "noData": "Tidak ada data yang tersedia", + "configure": "Konfigurasikan", + "manage": "Kelola", + "name": "Nama", + "actions": "Tindakan", + "status": "Status", + "type": "Ketik", + "model": "Model", + "models": "model", + "provider": "Penyedia", + "account": "Akun", + "time": "Waktu", + "details": "Detail", + "created": "Dibuat", + "lastUsed": "Terakhir Digunakan", + "loadMore": "Muat Lebih Banyak", + "noResults": "Tidak ada hasil yang ditemukan", + "reloadPage": "Muat Ulang Halaman", + "connected": "Terhubung", + "disconnected": "Terputus", + "notConfigured": "Tidak dikonfigurasi", + "testConnection": "Uji Koneksi", + "enable": "Aktifkan", + "disable": "Nonaktifkan", + "columns": "Kolom", + "newest": "Terbaru", + "oldest": "Tertua", + "all": "Semua", + "none": "Tidak ada", + "yes": "Ya", + "no": "Tidak", + "warning": "Peringatan", + "note": "Catatan", + "free": "Gratis", + "skipToContent": "Lewati ke konten" + }, + "sidebar": { + "home": "Rumah", + "dashboard": "Dasbor", + "providers": "Penyedia", + "combos": "kombo", + "usage": "Penggunaan", + "analytics": "Analisis", + "costs": "Biaya", + "health": "Kesehatan", + "limits": "Batas & Kuota", + "cliTools": "Alat CLI", + "settings": "Pengaturan", + "translator": "Penerjemah", + "docs": "dokumen", + "issues": "Masalah", + "endpoint": "Titik akhir", + "apiManager": "Manajer API", + "logs": "Log", + "auditLog": "Catatan Audit", + "shutdown": "Matikan", + "restart": "Mulai ulang", + "shutdownConfirm": "Matikan OmniRoute?", + "restartConfirm": "Mulai ulang OmniRoute?", + "version": "v{version}", + "debug": "Men-debug", + "system": "Sistem", + "help": "Bantuan", + "serverDisconnected": "Server Terputus", + "serverDisconnectedMsg": "Server proxy telah dihentikan atau dimulai ulang.", + "expandSidebar": "Luaskan bilah sisi", + "collapseSidebar": "Ciutkan bilah sisi" + }, + "header": { + "logout": "Keluar", + "language": "Bahasa", + "providers": "Penyedia", + "providerDescription": "Kelola koneksi penyedia AI Anda", + "combos": "kombo", + "comboDescription": "Kombo model dengan fallback", + "usage": "Penggunaan & Analisis", + "usageDescription": "Pantau penggunaan API Anda, konsumsi token, dan log permintaan", + "analytics": "Analisis", + "analyticsDescription": "Bagan, tren, dan wawasan evaluasi", + "cliTools": "Alat CLI", + "cliToolsDescription": "Konfigurasikan alat CLI", + "home": "Rumah", + "homeDescription": "Selamat datang di OmniRoute", + "endpoint": "Titik akhir", + "endpointDescription": "Konfigurasi titik akhir API", + "settings": "Pengaturan", + "settingsDescription": "Kelola preferensi Anda", + "openaiCompatible": "Kompatibel dengan OpenAI", + "anthropicCompatible": "Kompatibel Antropis" + }, + "home": { + "quickStart": "Mulai Cepat", + "quickStartDesc": "Bangun dan jalankan dalam 4 langkah. Hubungkan penyedia, model rute, pantau semuanya.", + "fullDocs": "Dokumen Lengkap", + "step1Title": "1. Buat kunci API", + "step1Desc": "Buka Endpoint -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.", + "step2Title": "2. Hubungkan penyedia", + "step2Desc": "Tambahkan akun di Providers. Mendukung OAuth, Kunci API, dan tingkatan gratis.", + "step3Title": "3. Arahkan klien Anda", + "step3Desc": "Tetapkan URL dasar ke {url} di klien IDE atau API Anda.", + "step4Title": "4. Pantau & optimalkan", + "step4Desc": "Lacak token, biaya, dan kesalahan di Log Permintaan dan Analytics.", + "providersOverview": "Ikhtisar Penyedia", + "configuredOf": "{configured} dikonfigurasi dari {total} penyedia yang tersedia", + "noModelsAvailable": "Tidak ada model yang tersedia untuk penyedia ini.", + "configureFirst": "Konfigurasikan koneksi terlebih dahulu di {providers}", + "configureProvider": "Konfigurasikan Penyedia", + "modelAvailable": "Model {count} tersedia", + "modelsAvailable": "{count} model tersedia", + "connectionsActive": "Koneksi {count} aktif", + "connectionsActivePlural": "{count} koneksi aktif", + "copyModelName": "Salin nama model", + "documentation": "Dokumentasi", + "healthMonitor": "Pemantau Kesehatan", + "reportIssue": "Laporkan masalah", + "activeError": "{active} aktif · kesalahan {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "Kunci API", + "requestsShort": "{count} permintaan", + "providerModelsTitle": "{provider} - Model", + "copiedModel": "Disalin: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analisis", + "overviewDescription": "Pantau pola penggunaan API Anda, konsumsi token, biaya, dan tren aktivitas di semua penyedia dan model.", + "evalsDescription": "Jalankan rangkaian evaluasi untuk menguji dan memvalidasi titik akhir LLM Anda. Bandingkan kualitas model, deteksi regresi, dan latensi tolok ukur.", + "overview": "Ikhtisar", + "evals": "Evaluasi" + }, + "apiManager": { + "title": "Kunci API", + "createKey": "Buat Kunci API", + "key": "Kunci", + "revokeKey": "Cabut Kunci", + "revokeConfirm": "Apakah Anda yakin ingin mencabut kunci API ini?", + "noKeys": "Belum ada kunci API", + "noKeysDesc": "Buat kunci API pertama Anda untuk mengautentikasi permintaan ke titik akhir Anda", + "keyLabel": "Label Kunci", + "permissions": "Izin", + "expiresAt": "Kedaluwarsa", + "never": "Tidak pernah", + "revoke": "Cabut", + "showKey": "Tampilkan Kunci", + "hideKey": "Sembunyikan Kunci", + "copyKey": "Salin Kunci API", + "allModels": "Semua model", + "selectedModels": "Model Terpilih", + "readOnly": "Hanya Baca", + "fullAccess": "Akses Penuh", + "keyManagement": "Manajemen Kunci API", + "keyManagementDesc": "Buat dan kelola kunci API untuk mengautentikasi permintaan ke titik akhir Anda", + "totalKeys": "Jumlah Kunci", + "restricted": "Terbatas", + "totalRequests": "Jumlah Permintaan", + "modelsAvailable": "Model Tersedia", + "registeredKeys": "Kunci Terdaftar", + "keysRegistered": "{count} kunci terdaftar", + "keyRegistered": "Kunci {count} terdaftar", + "keysSecurityNote": "Setiap kunci mengisolasi pelacakan penggunaan dan dapat dicabut secara independen. Kunci disamarkan setelah pembuatan demi keamanan.", + "createFirstKey": "Buat Kunci Pertama Anda", + "name": "Nama", + "usage": "Penggunaan", + "created": "Dibuat", + "actions": "Tindakan", + "reqs": "persyaratan", + "neverUsed": "Tidak pernah digunakan", + "deleteConfirm": "Hapus kunci API ini?", + "usageTips": "Tip Penggunaan", + "tipAuth": "Gunakan kunci API di header Otorisasi sebagai Pembawa YOUR_KEY", + "tipSecure": "Kunci hanya ditampilkan satu kali selama pembuatan — simpanlah dengan aman", + "tipSeparate": "Buat kunci terpisah untuk klien atau lingkungan yang berbeda", + "tipRestrict": "Batasi kunci pada model tertentu untuk keamanan dan pengendalian biaya yang lebih baik", + "keyName": "Nama Kunci", + "keyNamePlaceholder": "misalnya, Kunci Produksi, Kunci Pengembangan", + "keyNameDesc": "Pilih nama deskriptif untuk mengidentifikasi tujuan kunci ini", + "keyCreated": "Kunci API Dibuat", + "keyCreatedSuccess": "Kunci berhasil dibuat!", + "keyCreatedNote": "Salin dan simpan kunci ini sekarang — kunci ini tidak akan ditampilkan lagi.", + "done": "Selesai", + "savePermissions": "Simpan Izin", + "allowAll": "Izinkan Semua", + "restrict": "Batasi", + "allowAllInfo": "Kunci ini dapat mengakses semua model yang tersedia.", + "restrictInfo": "Kunci ini dapat mengakses {selected} dari {total} model.", + "selected": "{count} dipilih", + "all": "Semua", + "clear": "Jelas", + "searchModels": "Cari model berdasarkan nama atau penyedia...", + "noModelsFound": "Tidak ada model yang ditemukan", + "keyNameRequired": "Nama kunci wajib diisi", + "keyNameTooLong": "Nama kunci harus terdiri dari {max} karakter atau kurang", + "keyNameInvalid": "Nama kunci hanya boleh berisi huruf, angka, spasi, tanda hubung, dan garis bawah", + "invalidKeyName": "Nama kunci tidak valid", + "failedCreateKey": "Gagal membuat kunci", + "failedCreateKeyRetry": "Gagal membuat kunci. Silakan coba lagi.", + "invalidKeyId": "ID kunci tidak valid", + "failedDeleteKey": "Gagal menghapus kunci", + "failedDeleteKeyRetry": "Gagal menghapus kunci. Silakan coba lagi.", + "invalidModelsSelection": "Pemilihan model tidak valid", + "cannotSelectMoreThanModels": "Tidak dapat memilih lebih dari {max} model", + "failedUpdatePermissions": "Gagal memperbarui izin", + "failedUpdatePermissionsRetry": "Gagal memperbarui izin. Silakan coba lagi.", + "unknownProvider": "tidak diketahui", + "copyMaskedKey": "Salin kunci bertopeng", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Terakhir: {date}", + "editPermissions": "Edit izin", + "deleteKey": "Hapus kunci", + "model": "{count} modelnya", + "models": "{count} model", + "permissionsTitle": "Izin: {name}", + "allowAllDesc": "Kunci ini dapat mengakses semua model yang tersedia.", + "restrictDesc": "Kunci ini dapat mengakses {selectedCount} dari {totalModels} model.", + "selectedCount": "{count} dipilih" + }, + "auditLog": { + "title": "Catatan Audit", + "searchPlaceholder": "Tindakan pencarian...", + "action": "Tindakan", + "actor": "Aktor", + "target": "Sasaran", + "ipAddress": "Alamat IP", + "timestamp": "Stempel waktu", + "noEntries": "Tidak ada entri audit yang ditemukan", + "filterByAction": "Filter berdasarkan tindakan...", + "filterByActor": "Filter menurut aktor...", + "filterEntriesAria": "Filter entri log audit", + "filterByActionTypeAria": "Filter berdasarkan jenis tindakan", + "filterByActorAria": "Filter berdasarkan aktor", + "refreshAuditLogAria": "Segarkan log audit", + "tableAria": "Entri log audit", + "failedFetchAuditLog": "Gagal mengambil log audit", + "notAvailable": "—", + "description": "Tindakan administratif dan tindakan keamanan", + "showing": "Menampilkan entri {count} (mengimbangi {offset})", + "previous": "Sebelumnya" + }, + "cliTools": { + "title": "Alat CLI", + "noActiveProviders": "Tidak ada penyedia aktif", + "noActiveProvidersDesc": "Harap tambahkan dan sambungkan penyedia terlebih dahulu untuk mengonfigurasi alat CLI.", + "mapModels": "Model Peta", + "testConnection": "Uji Koneksi", + "connectionStatus": "Status Koneksi", + "configureEndpoint": "Konfigurasikan Titik Akhir", + "instructions": "instruksi", + "modelMapping": "Pemetaan Model", + "baseUrl": "URL dasar", + "apiKey": "Kunci API", + "configured": "Dikonfigurasi", + "notConfigured": "Tidak dikonfigurasi", + "notInstalled": "Tidak dipasang", + "custom": "Adat", + "unknown": "Tidak diketahui", + "lastSavedAt": "Terakhir disimpan: {date}", + "never": "Tidak pernah", + "justNow": "sekarang", + "minutesAgoShort": "{count}m yang lalu", + "hoursAgoShort": "{count}jam yang lalu", + "daysAgoShort": "{count}hari yang lalu", + "monthsAgoShort": "{count}bln yang lalu", + "yearsAgoShort": "{count}tahun yang lalu", + "runtimeCheckFailed": "Pemeriksaan waktu proses gagal", + "yourApiKeyPlaceholder": "kunci-api-Anda", + "modelPlaceholder": "penyedia/model-id", + "configurationSaved": "Konfigurasi berhasil disimpan.", + "failedToSave": "Gagal menyimpan konfigurasi.", + "noApiKeysCreateOne": "Tidak ada kunci API - Buat satu di halaman Kunci", + "defaultOmnirouteKey": "sk_omniroute (bawaan)", + "selectModel": "Pilih Model", + "selectModelForAlias": "Pilih model untuk {alias}", + "selectModelForTool": "Pilih Model untuk {tool}", + "select": "Pilih", + "clear": "Jelas", + "comingSoon": "Segera hadir", + "checkingRuntime": "Memeriksa status waktu proses...", + "guideOnlyIntegration": "Integrasi khusus panduan (tidak diperlukan runtime lokal)", + "cliRuntimeDetected": "Waktu proses CLI terdeteksi dan siap", + "cliFoundNotRunnable": "CLI ditemukan tetapi tidak dapat dijalankan{reason}", + "cliRuntimeNotDetected": "Waktu proses CLI tidak terdeteksi", + "binary": "Biner", + "configPath": "jalur konfigurasi", + "configPathShort": "Konfigurasi", + "failedCheckRuntimeStatus": "Gagal memeriksa status waktu proses.", + "copy": "Salin", + "copied": "Disalin", + "copyConfig": "Salin Konfigurasi", + "saveConfig": "Simpan Konfigurasi", + "selectionSaved": "Pilihan disimpan", + "guide": "Panduan", + "detected": "Terdeteksi", + "notReady": "Belum siap", + "active": "Aktif", + "inactive": "Tidak aktif", + "startMitm": "Mulai MITM", + "stopMitm": "Hentikan MITM", + "mitmStarted": "MITM dimulai dengan sukses!", + "mitmStopped": "MITM berhasil dihentikan!", + "failedStart": "Gagal memulai MITM", + "failedStop": "Gagal menghentikan MITM", + "saveMappings": "Simpan Pemetaan", + "mappingsSaved": "Pemetaan disimpan!", + "failedSaveMappings": "Gagal menyimpan pemetaan", + "howItWorks": "Cara kerjanya:", + "antigravityHowWorksDesc": "Antigravitasi mengirimkan permintaan ke titik akhir Google. MITM mencegat dan mengarahkan mereka ke OmniRoute.", + "antigravityStep1": "1. Mulai MITM untuk merutekan permintaan melalui OmniRoute.", + "antigravityStep2Prefix": "2. Tambahkan", + "antigravityStep2Suffix": "ke file host Anda sebagai 127.0.0.1.", + "antigravityStep3": "3. Buka Antigravitasi dan permintaan akan diproksi.", + "sudoPasswordRequiredTitle": "Kata Sandi Sudo Diperlukan", + "sudoPasswordHint": "Kata sandi administrator diperlukan untuk mengubah file host dan pengaturan proxy sistem.", + "enterSudoPassword": "Masukkan kata sandi sudo", + "sudoPasswordRequiredError": "Kata sandi Sudo diperlukan.", + "cancel": "Batalkan", + "confirm": "Konfirmasikan", + "settingsApplied": "Pengaturan berhasil diterapkan!", + "failedApplySettings": "Gagal menerapkan pengaturan", + "settingsReset": "Pengaturan berhasil diatur ulang!", + "failedResetSettings": "Gagal menyetel ulang setelan", + "backupRestored": "Cadangan dipulihkan!", + "failedRestore": "Gagal memulihkan", + "checkingCli": "Memeriksa {tool} CLI...", + "cliNotRunnable": "{tool} CLI diinstal tetapi tidak dapat dijalankan", + "cliNotInstalled": "{tool} CLI tidak diinstal", + "cliNotDetected": "{tool} CLI tidak terdeteksi", + "cliDetectedReady": "{tool} CLI terdeteksi dan siap", + "cliFoundFailedHealthcheck": "{tool} CLI ditemukan tetapi pemeriksaan kesehatan runtime gagal{reason}.", + "installCliPrompt": "Silakan instal {tool} CLI untuk menggunakan fitur ini.", + "installCodexPrompt": "Silakan instal Codex CLI untuk menggunakan fitur penerapan otomatis.", + "hide": "Sembunyikan", + "howToInstall": "Cara Menginstal", + "installationGuide": "Panduan Instalasi", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Setelah instalasi, jalankan", + "toVerify": "untuk memverifikasi.", + "current": "Saat ini", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Atur ulang ke default", + "providerModelPlaceholder": "penyedia/model-id", + "apply": "Terapkan", + "reset": "Setel ulang", + "manualConfig": "Konfigurasi Manual", + "backups": "Cadangan", + "configBackups": "Konfigurasi Cadangan", + "noBackupsYet": "Belum ada cadangan. Cadangan dibuat secara otomatis sebelum setiap Terapkan atau Atur Ulang.", + "restore": "Pulihkan", + "backupRestoredReloading": "Cadangan dipulihkan! Memuat ulang status...", + "failedRestoreBackup": "Gagal memulihkan cadangan", + "applied": "Diterapkan!", + "failed": "Gagal", + "resetDone": "Setel ulang!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasi sebagai penyedia yang kompatibel dengan OpenAI", + "provider": "Penyedia", + "model": "Model", + "providers": "Penyedia", + "auth": "Penulis", + "noApiKeysAvailable": "Tidak ada kunci API yang tersedia", + "usingDefaultOmniroute": "Menggunakan default: sk_omniroute", + "updateConfig": "Perbarui Konfigurasi", + "applyConfig": "Terapkan Konfigurasi", + "noBackupsAvailable": "Tidak ada cadangan yang tersedia.", + "profileSaved": "Profil \"{name}\" disimpan!", + "failedSaveProfile": "Gagal menyimpan profil", + "profileActivated": "Profil diaktifkan!", + "failedActivateProfile": "Gagal mengaktifkan profil", + "profiles": "Profil", + "savedProfiles": "Profil Tersimpan", + "noProfilesYet": "Belum ada profil yang disimpan. Simpan konfigurasi saat ini sebagai profil di bawah.", + "activate": "Aktifkan", + "deleteProfile": "Hapus profil", + "profileNamePlaceholder": "Nama profil (misalnya Akun Pribadi)", + "saveCurrent": "Simpan Saat Ini", + "codexAuthNotePrefix": "Penggunaan kodeks", + "codexAuthNoteMiddle": "dengan", + "codexAuthNoteSuffix": "Klik \"Terapkan\" untuk mengkonfigurasi otomatis.", + "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual", + "codexManualConfiguration": "Codex CLI - Konfigurasi Manual", + "droidManualConfiguration": "Pabrik Droid - Konfigurasi Manual", + "openClawManualConfiguration": "Buka Claw - Konfigurasi Manual", + "clineManualConfiguration": "Konfigurasi Manual Cline", + "kiloManualConfiguration": "Konfigurasi Manual Kode Kilo", + "toolDescriptions": { + "antigravity": "IDE Antigravitasi Google dengan MITM", + "claude": "CLI Kode Claude Antropis", + "codex": "CLI Codex OpenAI", + "droid": "Asisten AI Droid Pabrik", + "openclaw": "Buka Asisten AI Claw", + "cline": "CLI Asisten Pengkodean AI Cline", + "kilo": "CLI Asisten AI Kode Kilo", + "cursor": "Editor Kode AI Kursor", + "continue": "Lanjutkan Asisten AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Membutuhkan akun Cursor Pro untuk menggunakan fitur ini.", + "1": "Kursor merutekan permintaan melalui servernya sendiri, sehingga titik akhir lokal tidak didukung. Harap aktifkan Cloud Endpoint di Pengaturan." + }, + "steps": { + "1": { + "title": "Buka Pengaturan", + "desc": "Buka Pengaturan -> Model" + }, + "2": { + "title": "Aktifkan API OpenAI", + "desc": "Aktifkan opsi \"Kunci API OpenAI\"." + }, + "3": { + "title": "URL dasar" + }, + "4": { + "title": "Kunci API" + }, + "5": { + "title": "Tambahkan Model Khusus", + "desc": "Klik \"Lihat Semua Model\" -> \"Tambahkan Model Khusus\"" + }, + "6": { + "title": "Pilih Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Buka Konfigurasi", + "desc": "Buka Lanjutkan file konfigurasi" + }, + "2": { + "title": "Kunci API" + }, + "3": { + "title": "Pilih Model" + }, + "4": { + "title": "Tambahkan Konfigurasi Model", + "desc": "Tambahkan konfigurasi berikut ke array model Anda:" + } + } + } + } + }, + "combos": { + "title": "kombo", + "description": "Buat kombo model dengan perutean berbobot dan dukungan fallback", + "createCombo": "Buat Kombo", + "editCombo": "Sunting Kombo", + "deleteCombo": "Hapus Kombo", + "noModels": "Tidak ada model", + "noModelsYet": "Belum ada model yang ditambahkan", + "addModel": "Tambahkan Model", + "addModelToCombo": "Tambahkan Model ke Kombo", + "routingStrategy": "Strategi Perutean", + "maxRetries": "Percobaan Ulang Maks", + "timeout": "Batas waktu (md)", + "healthcheck": "Pemeriksaan kesehatan", + "priority": "Prioritas", + "fallback": "Penggantian", + "roundRobin": "Robin Bulat", + "random": "Acak", + "leastLatency": "Latensi Paling Sedikit", + "comboName": "Nama Kombo", + "comboNamePlaceholder": "kombo saya", + "deleteConfirm": "Hapus kombo ini?", + "noCombosYet": "Belum ada kombo", + "comboCreated": "Kombo berhasil dibuat", + "comboUpdated": "Kombo berhasil diperbarui", + "comboDeleted": "Kombo dihapus", + "failedCreate": "Gagal membuat kombo", + "failedUpdate": "Gagal memperbarui kombo", + "errorCreating": "Terjadi kesalahan saat membuat kombo", + "errorUpdating": "Terjadi kesalahan saat memperbarui kombo", + "errorDeleting": "Terjadi kesalahan saat menghapus kombo", + "testFailed": "Permintaan pengujian gagal", + "failedToggle": "Gagal mengganti kombo", + "testResults": "Hasil Tes — {name}", + "resolvedBy": "Diselesaikan oleh:", + "more": "+{count} lainnya", + "reqs": "persyaratan", + "success": "sukses", + "proxyConfigured": "Proksi dikonfigurasi", + "copyComboName": "Salin nama kombo", + "enableCombo": "Aktifkan kombo", + "disableCombo": "Nonaktifkan kombo", + "testCombo": "Uji kombo", + "duplicate": "Duplikat", + "proxyConfig": "Konfigurasi proksi", + "nameRequired": "Nama wajib diisi", + "nameInvalid": "Hanya huruf, angka, -, _, / dan . diperbolehkan", + "nameHint": "Huruf, angka, -, _, / dan . diperbolehkan", + "priorityDesc": "Penggantian berurutan: mencoba model 1 terlebih dahulu, lalu 2, dst.", + "weightedDesc": "Mendistribusikan lalu lintas berdasarkan persentase bobot dengan fallback", + "roundRobinDesc": "Distribusi melingkar: setiap permintaan diteruskan ke model berikutnya secara bergilir", + "randomDesc": "Pemilihan acak seragam, lalu kembali ke model lainnya", + "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, menyeimbangkan beban dari waktu ke waktu", + "costOptimizedDesc": "Rutekan ke model termurah terlebih dahulu berdasarkan harga", + "models": "Model", + "autoBalance": "Keseimbangan otomatis", + "advancedSettings": "Pengaturan Lanjutan", + "retryDelay": "Penundaan Coba Lagi (md)", + "concurrencyPerModel": "Konkurensi / Model", + "queueTimeout": "Batas Waktu Antrian (md)", + "advancedHint": "Biarkan kosong untuk menggunakan default global. Ini mengesampingkan pengaturan per penyedia.", + "moveUp": "Naik", + "moveDown": "Pindah ke bawah", + "removeModel": "Hapus", + "saving": "Menyimpan...", + "weighted": "Tertimbang", + "leastUsed": "Paling Sedikit Digunakan", + "costOpt": "Pilihan Biaya" + }, + "costs": { + "title": "Biaya", + "budget": "Anggaran", + "totalCost": "Jumlah Biaya", + "breakdown": "Rincian Biaya", + "noData": "Tidak ada data biaya", + "byModel": "Berdasarkan Model", + "byProvider": "Oleh Penyedia" + }, + "endpoint": { + "title": "Titik Akhir API", + "available": "Titik Akhir yang Tersedia", + "cloudProxy": "Proksi Awan", + "disableConfirm": "Apakah Anda yakin ingin menonaktifkan proksi cloud?", + "baseUrl": "URL dasar", + "apiKeyLabel": "Kunci API", + "registeredKeys": "Kunci Terdaftar", + "chatCompletions": "Penyelesaian Obrolan", + "responses": "Tanggapan", + "listModels": "Daftar Model", + "usingCloudProxy": "Menggunakan Proksi Awan", + "usingLocalServer": "Menggunakan Server Lokal", + "machineId": "ID Mesin: {id}...", + "disableCloud": "Nonaktifkan Awan", + "enableCloud": "Aktifkan Awan", + "modelsAcrossEndpoints": "{models} model di seluruh titik akhir {endpoints}", + "chatDesc": "Obrolan streaming & non-streaming dengan semua penyedia", + "embeddings": "Penyematan", + "embeddingsDesc": "Penyematan teks untuk saluran pencarian & RAG", + "imageGeneration": "Pembuatan Gambar", + "imageDesc": "Hasilkan gambar dari petunjuk teks", + "rerank": "Ubah peringkat", + "rerankDesc": "Urutkan ulang dokumen berdasarkan relevansinya dengan kueri", + "audioTranscription": "Transkripsi Audio", + "audioTranscriptionDesc": "Transkripsikan file audio ke teks (Bisikan)", + "textToSpeech": "Teks ke Ucapan", + "textToSpeechDesc": "Ubah teks menjadi ucapan yang terdengar alami", + "moderations": "Moderasi", + "moderationsDesc": "Moderasi konten dan klasifikasi keamanan", + "enableCloudTitle": "Aktifkan Proksi Cloud", + "whatYouGet": "Apa yang akan Anda dapatkan", + "cloudBenefitAccess": "Akses API Anda dari mana saja di dunia", + "cloudBenefitShare": "Bagikan titik akhir dengan tim Anda dengan mudah", + "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi firewall", + "cloudBenefitEdge": "Jaringan edge global yang cepat", + "cloudSessionNote": "Cloud akan menyimpan sesi autentikasi Anda selama 1 hari. Jika tidak digunakan maka akan otomatis terhapus.", + "cloudUnstableNote": "Cloud saat ini tidak stabil dengan Claude Code OAuth dalam beberapa kasus.", + "cloudConnected": "Proksi Cloud terhubung!", + "connectingToCloud": "Menghubungkan ke awan...", + "verifyingConnection": "Memverifikasi koneksi...", + "connecting": "Menghubungkan...", + "verifying": "Memverifikasi...", + "connected": "Terhubung!", + "disableCloudTitle": "Nonaktifkan Proksi Cloud", + "disableWarning": "Semua sesi autentikasi akan dihapus dari cloud.", + "syncingData": "Menyinkronkan data terbaru...", + "disablingCloud": "Menonaktifkan awan...", + "syncing": "Menyinkronkan...", + "disabling": "Menonaktifkan...", + "cloudConnectedVerified": "Cloud Proxy terhubung dan terverifikasi!", + "connectedVerificationPending": "Terhubung — verifikasi tertunda", + "connectedVerificationPendingWithError": "Terhubung — verifikasi tertunda: {error}", + "cloudDisabledSuccess": "Cloud berhasil dinonaktifkan", + "syncedSuccess": "Berhasil disinkronkan", + "failedDisable": "Gagal menonaktifkan awan", + "failedEnable": "Gagal mengaktifkan awan", + "cloudRequestTimeout": "Batas waktu permintaan cloud", + "cloudRequestFailed": "Permintaan awan gagal", + "cloudWorkerUnreachable": "Tidak dapat menjangkau pekerja cloud. Pastikan layanan cloud berjalan (npm run dev di/cloud).", + "connectionFailed": "Koneksi gagal", + "syncFailed": "Gagal menyinkronkan data cloud", + "providerModelsTitle": "{provider} — Model", + "noModelsForProvider": "Tidak ada model yang tersedia untuk penyedia ini.", + "chat": "Obrolan", + "embedding": "Penyematan", + "image": "Gambar", + "custom": "adat", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Kesehatan Sistem", + "description": "Pemantauan instans OmniRoute Anda secara real-time", + "healthy": "Sehat", + "degraded": "Terdegradasi", + "down": "Turun", + "uptime": "Waktu aktif", + "memory": "Memori", + "memoryRss": "Memori (RSS)", + "heap": "tumpukan", + "cpu": "CPU", + "database": "Basis data", + "version": "Versi", + "lastCheck": "Pemeriksaan Terakhir", + "providerHealth": "Kesehatan Penyedia", + "systemMetrics": "Metrik Sistem", + "tokenHealth": "Token Kesehatan", + "refreshAll": "Segarkan Semua", + "checkNow": "Periksa Sekarang", + "loadingHealth": "Memuat data kesehatan...", + "failedToLoad": "Gagal memuat data kesehatan: {error}", + "retry": "Coba lagi", + "allOperational": "Semua sistem beroperasi", + "issuesDetected": "Masalah sistem terdeteksi", + "updatedAt": "Diperbarui {time}", + "latency": "Latensi", + "latencyP50": "hal50", + "latencyP95": "hal95", + "latencyP99": "hal99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Jumlah permintaan", + "noDataYet": "Belum ada datanya", + "promptCache": "Tembolok Cepat", + "entries": "Entri", + "hitRate": "Tingkat Hit", + "hitsMisses": "Hit / Miss", + "signatureCache": "Tembolok Tanda Tangan", + "signatureDefaults": "Default", + "signatureTool": "Alat", + "signatureFamily": "Keluarga", + "signatureSession": "Sesi", + "recovering": "Memulihkan", + "noCBData": "Tidak ada data pemutus sirkuit yang tersedia. Buatlah beberapa permintaan terlebih dahulu.", + "providerHealthStatusAria": "Status kesehatan penyedia", + "issuesLabel": "Masalah Terdeteksi", + "operational": "Operasional", + "providers": "Penyedia", + "healthyCount": "{count} sehat", + "nodeVersion": "Simpul {version}", + "failures": "{count} kegagalan", + "failuresPlural": "{count} kegagalan", + "lastFailure": "Terakhir", + "rateLimitStatus": "Status Batas Nilai", + "activeLimiters": "{count} pembatas aktif", + "activeLimitersPlural": "{count} pembatas aktif", + "queued": "Mengantri", + "queuedCount": "{count} mengantri", + "running": "berlari", + "runningCount": "{count} berjalan", + "ok": "Oke", + "activeLockouts": "Penguncian Aktif", + "resetConfirm": "Reset semua pemutus sirkuit ke kondisi sehat? Ini akan menghapus semua jumlah kegagalan dan memulihkan semua penyedia ke status operasional.", + "resetAllTitle": "Setel ulang semua pemutus sirkuit ke kondisi sehat", + "resetting": "Menyetel ulang...", + "resetAll": "Atur Ulang Semua", + "until": "Sampai {time}" + }, + "limits": { + "title": "Batas & Kuota", + "rateLimit": "Batas Nilai", + "remaining": "Tersisa", + "requestsPerMinute": "Permintaan/mnt", + "tokensPerMinute": "Token/mnt", + "dailyLimit": "Batas Harian" + }, + "logs": { + "title": "Log", + "requestLogs": "Log Permintaan", + "proxyLogs": "Log Proksi", + "auditLog": "Catatan Audit", + "console": "Konsol", + "auditLogDesc": "Tindakan administratif dan tindakan keamanan", + "loading": "Memuat...", + "refresh": "Segarkan", + "filterByAction": "Filter berdasarkan tindakan...", + "filterByActor": "Filter menurut aktor...", + "filterEntriesAria": "Filter entri log audit", + "filterByActionTypeAria": "Filter berdasarkan jenis tindakan", + "filterByActorAria": "Filter berdasarkan aktor", + "refreshAuditLogAria": "Segarkan log audit", + "tableAria": "Entri log audit", + "failedFetchAuditLog": "Gagal mengambil log audit", + "showing": "Menampilkan entri {count} (mengimbangi {offset})", + "search": "Cari", + "timestamp": "Stempel waktu", + "action": "Tindakan", + "actor": "Aktor", + "target": "Sasaran", + "details": "Detail", + "ipAddress": "Alamat IP", + "notAvailable": "—", + "noEntries": "Tidak ditemukan entri log audit", + "previous": "Sebelumnya", + "next": "Selanjutnya" + }, + "onboarding": { + "welcome": "Selamat datang", + "security": "Keamanan", + "test": "Tes", + "ready": "Siap!", + "setPassword": "Tetapkan Kata Sandi", + "addProvider": "Tambahkan penyedia pertama Anda", + "getStarted": "Memulai", + "skip": "Lewati", + "skipWizard": "Lewati wizard sepenuhnya", + "skipPassword": "Lewati pengaturan kata sandi", + "skipAndContinue": "Lewati & Lanjutkan", + "passwordLabel": "Kata sandi", + "confirmPassword": "Konfirmasi Kata Sandi", + "enterPassword": "Masukkan kata sandi", + "confirmPasswordPlaceholder": "Konfirmasikan kata sandi", + "passwordsMismatch": "Kata sandi tidak cocok", + "setupComplete": "Penyiapan Selesai!", + "goToDashboard": "Buka Dasbor →", + "welcomeDesc": "OmniRoute adalah proksi AI API lokal Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.", + "multiProvider": "Multi-Penyedia", + "usageTracking": "Pelacakan Penggunaan", + "apiKeyMgmt": "Manajemen Kunci API", + "securityDesc": "Tetapkan kata sandi untuk melindungi dasbor Anda, atau lewati saja sekarang.", + "providerDesc": "Hubungkan penyedia AI pertama Anda. Anda dapat menambahkan lebih banyak lagi nanti.", + "apiKeyRequired": "Kunci API (wajib)", + "customUrlOptional": "URL khusus (opsional)", + "testDesc": "Mari verifikasi koneksi penyedia Anda berfungsi.", + "runTest": "Jalankan Tes Koneksi", + "testingConnection": "Menguji koneksi...", + "connectionSuccessful": "Koneksi berhasil! Penyedia Anda sudah siap.", + "noProviderFound": "Tidak ada penyedia yang ditemukan. Anda dapat menambahkannya dari dasbor nanti.", + "testFailed": "Pengujian gagal, namun Anda dapat mengonfigurasinya nanti.", + "couldNotTest": "Tidak dapat menguji saat ini. Anda dapat mengujinya dari dasbor.", + "doneDesc": "Anda sudah siap! Instans OmniRoute Anda telah dikonfigurasi dan siap untuk memproksi permintaan AI.", + "yourEndpoint": "Titik akhir Anda:", + "continue": "Lanjutkan", + "retry": "Coba lagi", + "failedSetPassword": "Gagal menyetel kata sandi. Coba lagi.", + "failedAddProvider": "Gagal menambahkan penyedia. Coba lagi.", + "connectionError": "Kesalahan koneksi. Silakan coba lagi.", + "provider": "Penyedia" + }, + "providers": { + "title": "Penyedia", + "addProvider": "Tambahkan Penyedia", + "editProvider": "Sunting Penyedia", + "deleteProvider": "Hapus Penyedia", + "noProviders": "Tidak ada penyedia yang dikonfigurasi", + "modelAvailability": "Ketersediaan Model", + "accounts": "Akun", + "newAccount": "Akun Baru", + "deleteConfirm": "Apakah Anda yakin ingin menghapus penyedia ini?", + "testing": "Menguji...", + "testConnection": "Uji Koneksi", + "testSuccess": "Koneksi berhasil", + "testFailed": "Koneksi gagal", + "available": "Tersedia", + "cooldown": "Pendinginan", + "unavailable": "Tidak tersedia", + "unknown": "Tidak diketahui", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatibel", + "chat": "Obrolan", + "responses": "Tanggapan", + "messages": "Pesan", + "oauthProviders": "Penyedia OAuth", + "freeProviders": "Penyedia Gratis", + "apiKeyProviders": "Penyedia Kunci API", + "compatibleProviders": "Penyedia Kompatibel Kunci API", + "testAll": "Uji Semua", + "testAllOAuth": "Uji semua koneksi OAuth", + "testAllFree": "Uji semua koneksi Gratis", + "testAllApiKey": "Uji semua koneksi Kunci API", + "testAllCompatible": "Uji semua koneksi yang Kompatibel", + "connected": "{count} Terhubung", + "errorCount": "{count} Kesalahan ({code})", + "errorCountNoCode": "{count} Kesalahan", + "noConnections": "Tidak ada koneksi", + "disabled": "Dengan disabilitas", + "enableProvider": "Aktifkan penyedia", + "disableProvider": "Nonaktifkan penyedia", + "testResults": "Hasil Tes", + "noCompatibleYet": "Belum ada penyedia kompatibel yang ditambahkan", + "compatibleHint": "Gunakan tombol di atas untuk menambahkan titik akhir yang kompatibel dengan OpenAI atau Anthropic", + "addOpenAICompatible": "Tambahkan Kompatibel dengan OpenAI", + "addAnthropicCompatible": "Tambahkan Kompatibel Antropis", + "addNewProvider": "Tambahkan Penyedia Baru", + "backToProviders": "Kembali ke Penyedia", + "configureNewProvider": "Konfigurasikan penyedia AI baru untuk digunakan dengan aplikasi Anda.", + "providerLabel": "Penyedia", + "selectProvider": "Pilih penyedia", + "selectedProvider": "Penyedia yang dipilih", + "authMethod": "Metode Otentikasi", + "apiKeyLabel": "Kunci API", + "apiKeyRequired": "Kunci API diperlukan", + "selectProviderRequired": "Silakan pilih penyedia", + "enterApiKey": "Masukkan kunci API Anda", + "apiKeySecure": "Kunci API Anda akan dienkripsi dan disimpan dengan aman.", + "oauth2Connect": "Terhubung dengan OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Hubungkan akun Anda menggunakan autentikasi OAuth2.", + "displayName": "Nama Tampilan", + "displayNamePlaceholder": "misalnya, API Produksi, Lingkungan Pengembang", + "displayNameHint": "Opsional. Nama yang bersahabat untuk mengidentifikasi konfigurasi ini.", + "active": "Aktif", + "activeDescription": "Aktifkan penyedia ini untuk digunakan dalam aplikasi Anda", + "cancel": "Batalkan", + "createProvider": "Buat Penyedia", + "failedCreate": "Gagal membuat penyedia", + "errorOccurred": "Terjadi kesalahan. Silakan coba lagi.", + "modelStatus": "Status Model", + "allModelsOperational": "Semua model beroperasi", + "modelsWithIssues": "{count} model yang bermasalah", + "allModelsNormal": "Semua model merespons secara normal.", + "cooldownCleared": "Cooldown selesai untuk {model}", + "failedClearCooldown": "Gagal menghapus cooldown", + "loadingAvailability": "Memuat ketersediaan model...", + "clearCooldown": "Jelas", + "clearing": "Membersihkan...", + "until": "Sampai {time}", + "providerTestFailed": "Tes penyedia gagal", + "modeTest": "{mode} Tes", + "passedCount": "{count} lulus", + "failedCount": "{count} gagal", + "testedCount": "{count} diuji", + "millisecondsAbbr": "{value}ms", + "okShort": "Oke", + "errorShort": "KESALAHAN", + "noActiveConnectionsInGroup": "Tidak ditemukan koneksi aktif untuk grup ini.", + "allTestsPassed": "Semua tes {total} lulus", + "testSummary": "{passed}/{total} lulus, {failed} gagal", + "nameLabel": "Nama", + "prefixLabel": "Awalan", + "baseUrlLabel": "URL dasar", + "apiTypeLabel": "Jenis API", + "prefixHint": "Diperlukan. Awalan unik untuk nama model.", + "nameHint": "Diperlukan. Label ramah untuk node ini.", + "baseUrlHint": "Diperlukan.  URL dasar API penyedia.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Validasi Koneksi", + "validating": "Memvalidasi...", + "connectionValid": "Koneksi valid!", + "connectionFailed": "Koneksi gagal. Periksa URL dan kunci.", + "testKeyLabel": "Uji Kunci API", + "testKeyPlaceholder": "sk-... (untuk validasi saja)", + "providerNotFound": "Penyedia tidak ditemukan", + "deleteConnectionConfirm": "Hapus koneksi ini?", + "failedSetAlias": "Gagal menyetel alias", + "failedSaveConnection": "Gagal menyimpan koneksi", + "failedSaveConnectionRetry": "Gagal menyimpan koneksi. Silakan coba lagi.", + "failedRetestConnection": "Gagal menguji ulang koneksi", + "deleteCompatibleNodeConfirm": "Hapus node yang kompatibel dengan {type} ini?", + "anthropicCompatibleDetails": "Detail Kompatibel Antropis", + "openaiCompatibleDetails": "Detail Kompatibel OpenAI", + "messagesApi": "API Pesan", + "responsesApi": "API Respons", + "chatCompletions": "Penyelesaian Obrolan", + "importingModels": "Mengimpor...", + "importFromModels": "Impor dari /models", + "addConnectionToImport": "Tambahkan koneksi untuk mengaktifkan impor.", + "noModelsConfigured": "Tidak ada model yang dikonfigurasi", + "connectionCount": "{count} koneksi", + "fetchingModels": "Mengambil model yang tersedia...", + "failedFetchModels": "Gagal mengambil model", + "noModelsFound": "Tidak ada model yang ditemukan", + "importFailed": "Impor gagal", + "noNewModelsAdded": "Tidak ada model baru yang ditambahkan.", + "adding": "Menambahkan...", + "importingModelsTitle": "Mengimpor Model", + "copyModel": "Salin modelnya", + "removeModel": "Hapus modelnya", + "rateLimitProtected": "Dilindungi", + "rateLimitUnprotected": "Tidak terlindungi", + "enableRateLimitProtection": "Klik untuk mengaktifkan perlindungan batas tarif", + "disableRateLimitProtection": "Klik untuk menonaktifkan perlindungan batas tarif", + "productionKey": "Kunci Produksi", + "enterNewApiKey": "Masukkan kunci API baru", + "optional": "Opsional", + "anthropicCompatibleName": "Kompatibel Antropis", + "openaiCompatibleName": "Kompatibel dengan OpenAI", + "failedImportModels": "Gagal mengimpor model", + "noModelsReturnedFromEndpoint": "Tidak ada model yang dikembalikan dari titik akhir /models.", + "importingModelsProgress": "Mengimpor {current} dari {total} model...", + "foundModelsStartingImport": "Ditemukan model {count}. Mulai mengimpor...", + "importingModelById": "Mengimpor {modelId}...", + "importSuccessCount": "Berhasil mengimpor {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Tidak ada model baru yang ditambahkan (semua sudah ada).", + "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Terjadi kesalahan yang tidak terduga", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "pesan", + "responsesPath": "tanggapan", + "chatCompletionsPath": "obrolan/penyelesaian", + "add": "Tambahkan", + "edit": "Sunting", + "delete": "Hapus", + "anthropic": "Antropis", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Hanya satu koneksi yang diperbolehkan per node yang kompatibel. Tambahkan node lain jika Anda memerlukan lebih banyak koneksi.", + "connections": "Koneksi", + "providerProxyTitleConfigured": "Proksi penyedia: {host}", + "configured": "dikonfigurasi", + "providerProxyConfigureHint": "Konfigurasikan proxy untuk semua koneksi penyedia ini", + "providerProxy": "Proksi Penyedia", + "noConnectionsYet": "Belum ada koneksi", + "addFirstConnectionHint": "Tambahkan koneksi pertama Anda untuk memulai", + "addConnection": "Tambahkan Koneksi", + "availableModels": "Model yang Tersedia", + "pageAutoRefresh": "Halaman akan disegarkan secara otomatis...", + "statusDisabled": "dengan disabilitas", + "statusConnected": "terhubung", + "statusRuntimeIssue": "masalah waktu proses", + "statusAuthFailed": "autentikasi gagal", + "statusRateLimited": "tarif terbatas", + "statusNetworkIssue": "masalah jaringan", + "statusTestUnsupported": "tes tidak didukung", + "statusUnavailable": "tidak tersedia", + "statusFailed": "gagal", + "statusError": "kesalahan", + "oauthAccount": "Akun OAuth", + "errorTypeRuntime": "Waktu proses lokal", + "errorTypeUpstreamAuth": "Otentikasi hulu", + "errorTypeMissingCredential": "Kredensial tidak ada", + "errorTypeRefreshFailed": "Penyegaran gagal", + "errorTypeTokenExpired": "Token sudah habis masa berlakunya", + "errorTypeRateLimited": "Tarif terbatas", + "errorTypeUpstreamUnavailable": "Hulu tidak tersedia", + "errorTypeNetworkError": "Kesalahan jaringan", + "errorTypeTestUnsupported": "Tes tidak didukung", + "errorTypeUpstreamError": "Kesalahan hulu", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Penyedia", + "proxySourceKey": "Kunci", + "proxyConfiguredBySource": "Proksi ({source}): {host}", + "autoPriority": "Otomatis: {priority}", + "proxy": "Proksi", + "retestAuthentication": "Uji ulang autentikasi", + "retest": "Tes ulang", + "disableConnection": "Nonaktifkan koneksi", + "enableConnection": "Aktifkan koneksi", + "reauthenticateConnection": "Otentikasi ulang koneksi ini", + "proxyConfig": "Konfigurasi proxy", + "aliasExistsAlert": "Alias \"{alias}\" sudah ada. Silakan gunakan model lain atau edit alias yang ada.", + "openRouterAnyModelHint": "OpenRouter mendukung model apa pun. Tambahkan model dan buat alias untuk akses cepat.", + "modelIdFromOpenRouter": "ID Model (dari OpenRouter)", + "openRouterModelPlaceholder": "antropik/claude-3-opus", + "customModels": "Model Khusus", + "customModelsHint": "Tambahkan ID model yang tidak ada dalam daftar default. Ini akan tersedia untuk perutean.", + "modelId": "ID Model", + "customModelPlaceholder": "misalnya gpt-4.5-turbo", + "loading": "Memuat...", + "removeCustomModel": "Hapus model khusus", + "noCustomModels": "Belum ada model khusus yang ditambahkan.", + "allSuggestedAliasesExist": "Semua alias yang disarankan sudah ada. Silakan pilih model lain atau hapus alias yang bertentangan.", + "failedSaveCustomModel": "Gagal menyimpan model khusus", + "modelAddedSuccess": "Model {modelId} berhasil ditambahkan", + "failedAddModelTryAgain": "Gagal menambahkan model. Silakan coba lagi.", + "failedSaveImportedModel": "Gagal menyimpan model yang diimpor ke database khusus", + "failedImportModelsTryAgain": "Gagal mengimpor model. Silakan coba lagi.", + "failedRemoveModelFromDatabase": "Gagal menghapus model dari database", + "modelRemovedSuccess": "Model berhasil dihapus", + "failedDeleteModelTryAgain": "Gagal menghapus model. Silakan coba lagi.", + "compatibleModelsDescription": "Tambahkan model yang kompatibel dengan {type} secara manual atau impor dari titik akhir /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Validasi kunci API gagal. Silakan periksa kunci Anda dan coba lagi.", + "addProviderApiKeyTitle": "Tambahkan Kunci API {provider}", + "checking": "Memeriksa...", + "check": "Periksa", + "valid": "Sah", + "invalid": "Tidak valid", + "creating": "Membuat...", + "validationChecksAnthropicCompatible": "Validasi memeriksa {provider} dengan memverifikasi kunci API.", + "validationChecksOpenAiCompatible": "Pemeriksaan validasi {provider} melalui /models pada URL dasar Anda.", + "priorityLabel": "Prioritas", + "saving": "Menyimpan...", + "save": "Simpan", + "editConnection": "Sunting Koneksi", + "accountName": "Nama akun", + "email": "Surel", + "healthCheckMinutes": "Pemeriksaan Kesehatan (menit)", + "healthCheckHint": "Interval penyegaran token proaktif. 0 = dinonaktifkan.", + "failedTestConnection": "Gagal menguji koneksi", + "failed": "Gagal", + "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mempertahankan kunci API saat ini.", + "editCompatibleTitle": "Sunting {type} Kompatibel", + "compatibleBaseUrlHint": "Gunakan URL dasar (berakhiran /v1) untuk API Anda yang kompatibel dengan {type}.", + "apiKeyForCheck": "Kunci API (untuk Pemeriksaan)", + "compatibleProdPlaceholder": "{type} Kompatibel (Prod)" + }, + "settings": { + "title": "Pengaturan", + "general": "Umum", + "security": "Keamanan", + "appearance": "Penampilan", + "routing": "Perutean", + "cache": "Tembolok", + "resilience": "Ketahanan", + "systemPrompt": "Perintah Sistem", + "thinkingBudget": "Memikirkan Anggaran", + "proxy": "Proksi", + "pricing": "Harga", + "storage": "Penyimpanan", + "policies": "Kebijakan", + "ipFilter": "penyaring IP", + "comboDefaults": "Default Kombo", + "fallbackChains": "Rantai Pengganti", + "changePassword": "Ubah Kata Sandi", + "enablePassword": "Aktifkan Kata Sandi", + "darkMode": "Mode Gelap", + "lightMode": "Modus Cahaya", + "systemTheme": "Tema Sistem", + "enableCache": "Aktifkan Cache", + "cacheTTL": "Tembolok TTL", + "maxCacheSize": "Ukuran Tembolok Maks", + "clearCache": "Hapus Tembolok", + "cacheHits": "Cache Hit", + "cacheMisses": "Cache Hilang", + "hitRate": "Tingkat Hit", + "cacheEntries": "Entri Cache", + "circuitBreaker": "Pemutus Arus", + "retryPolicy": "Kebijakan Coba Ulang", + "maxRetries": "Percobaan Ulang Maks", + "retryDelay": "Coba lagi Penundaan", + "timeoutMs": "Batas waktu (md)", + "enableSystemPrompt": "Aktifkan Perintah Sistem", + "systemPromptText": "Teks Perintah Sistem", + "enableThinking": "Aktifkan Berpikir", + "maxThinkingTokens": "Token Berpikir Maks", + "enableProxy": "Aktifkan Proksi", + "proxyUrl": "URL proksi", + "pricingRates": "Format Tarif Harga", + "currentPricing": "Ikhtisar Harga Saat Ini", + "loadingPricing": "Memuat data harga...", + "noPricing": "Tidak ada data harga yang tersedia", + "input": "Masukan", + "output": "Keluaran", + "cached": "Di-cache", + "reasoning": "Penalaran", + "cacheCreation": "Pembuatan Cache", + "customPricing": "Harga Khusus", + "databaseSize": "Ukuran Basis Data", + "backupDb": "Basis Data Cadangan", + "restoreDb": "Pulihkan Basis Data", + "exportData": "Ekspor Data", + "importData": "Impor Data", + "clearData": "Hapus Semua Data", + "clearDataConfirm": "Ini akan menghapus semua data secara permanen. Apa kamu yakin?", + "enableRequestLogs": "Aktifkan Log Permintaan", + "logRetention": "Retensi Log", + "ipWhitelist": "Daftar Putih IP", + "ipBlacklist": "Daftar Hitam IP", + "addIP": "Tambahkan alamat IP", + "savedSuccessfully": "Pengaturan berhasil disimpan", + "ai": "AI", + "advanced": "Lanjutan", + "localMode": "Mode Lokal — Semua data disimpan di mesin Anda", + "settingsSectionsAria": "Bagian pengaturan", + "switchThemes": "Beralih antara tema terang dan gelap", + "themeSelectionAria": "Pemilihan tema", + "themeLight": "Ringan", + "themeDark": "Gelap", + "themeSystem": "Sistem", + "hideHealthLogs": "Sembunyikan Log Pemeriksaan Kesehatan", + "hideHealthLogsDesc": "Saat AKTIF, sembunyikan pesan [HealthCheck] di konsol server", + "promptCache": "Tembolok Cepat", + "flushCache": "Siram Cache", + "flushing": "Pembilasan…", + "size": "Ukuran", + "hits": "Pukulan", + "evictions": "Penggusuran", + "loadingCacheStats": "Memuat statistik cache…", + "globalProxy": "Proksi Global", + "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Penyedia individual, kombo, dan kunci dapat mengesampingkan hal ini.", + "noGlobalProxy": "Tidak ada proksi global yang dikonfigurasi", + "globalLabel": "Global", + "configure": "Konfigurasikan", + "globalSystemPrompt": "Perintah Sistem Global", + "systemPromptDesc": "Disuntikkan ke semua permintaan di tingkat proxy", + "saved": "Disimpan", + "systemPromptPlaceholder": "Masukkan prompt sistem untuk menyuntikkan ke semua permintaan...", + "systemPromptHint": "Prompt ini ditambahkan ke pesan sistem dari setiap permintaan. Gunakan untuk instruksi global, pedoman keselamatan, atau aturan format respons.", + "chars": "{count} karakter", + "thinkingBudgetTitle": "Memikirkan Anggaran", + "thinkingBudgetDesc": "Kontrol penggunaan token penalaran AI di semua permintaan", + "passthrough": "Melewati", + "passthroughDesc": "Tidak ada perubahan — klien mengontrol anggaran pemikiran", + "auto": "Otomatis", + "autoDesc": "Hapus semua konfigurasi pemikiran — biarkan penyedia memutuskan", + "custom": "Adat", + "customDesc": "Tetapkan anggaran token tetap untuk semua permintaan", + "adaptive": "adaptif", + "adaptiveDesc": "Skalakan anggaran berdasarkan kompleksitas permintaan", + "effortNone": "Tidak ada (0 token)", + "effortLow": "Rendah (token 1K)", + "effortMedium": "Sedang (10 ribu token)", + "effortHigh": "Tinggi (128 ribu token)", + "tokenBudget": "Anggaran Token", + "tokens": "token", + "baseEffortLevel": "Tingkat Upaya Dasar", + "adaptiveHint": "Mode adaptif diskalakan dari tingkat dasar ini berdasarkan jumlah pesan, penggunaan alat, dan panjang perintah.", + "requireLogin": "Memerlukan login", + "requireLoginDesc": "Saat AKTIF, dasbor memerlukan kata sandi. Saat MATI, akses tanpa login.", + "currentPassword": "Kata Sandi Saat Ini", + "enterCurrentPassword": "Masukkan kata sandi saat ini", + "newPassword": "Kata Sandi Baru", + "enterNewPassword": "Masukkan kata sandi baru", + "confirmPassword": "Konfirmasi Kata Sandi Baru", + "confirmPasswordPlaceholder": "Konfirmasikan kata sandi baru", + "passwordsNoMatch": "Kata sandi tidak cocok", + "passwordUpdated": "Kata sandi berhasil diperbarui", + "failedUpdatePassword": "Gagal memperbarui kata sandi", + "errorOccurred": "Terjadi kesalahan", + "updatePassword": "Perbarui Kata Sandi", + "setPassword": "Tetapkan Kata Sandi", + "apiEndpointProtection": "Perlindungan Titik Akhir API", + "requireAuthModels": "Memerlukan kunci API untuk /models", + "requireAuthModelsDesc": "Saat AKTIF, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak diautentikasi. Mencegah penemuan model oleh pengguna yang tidak sah.", + "blockedProviders": "Penyedia yang Diblokir", + "blockedProvidersDesc": "Sembunyikan penyedia tertentu dari respons /v1/models. Penyedia yang diblokir tidak akan muncul dalam daftar model.", + "providersBlocked": "{count} penyedia diblokir dari /models", + "blockProviderTitle": "Blokir {provider}", + "unblockProviderTitle": "Buka blokir {provider}", + "routingStrategy": "Strategi Perutean", + "fillFirst": "Isi Dulu", + "fillFirstDesc": "Gunakan akun dalam urutan prioritas", + "roundRobin": "Robin Bulat", + "roundRobinDesc": "Telusuri semua akun", + "p2c": "P2C", + "p2cDesc": "Pilih 2 secara acak, gunakan yang lebih sehat", + "random": "Acak", + "randomDesc": "Akun acak setiap permintaan", + "leastUsed": "Paling Sedikit Digunakan", + "leastUsedDesc": "Pilih akun yang paling jarang digunakan", + "costOpt": "Pilihan Biaya", + "costOptDesc": "Lebih suka akun termurah yang tersedia", + "stickyLimit": "Batas Lengket", + "stickyLimitDesc": "Panggilan per akun sebelum beralih", + "modelAliases": "Alias Model", + "modelAliasesDesc": "Pola karakter pengganti untuk memetakan ulang nama model • Gunakan * dan ?", + "aliasPatternPlaceholder": "claude-soneta-*", + "aliasTargetPlaceholder": "claude-soneta-4-20250514", + "pattern": "Pola", + "targetModel": "Model Sasaran", + "add": "+ Tambahkan", + "session": "Sesi", + "sessionDetailsAria": "Detail sesi", + "status": "Status", + "authenticated": "Diautentikasi", + "guest": "Tamu", + "loginTime": "Waktu Masuk", + "sessionAge": "Usia Sesi", + "browser": "Peramban", + "clearLocalData": "Hapus Data Lokal", + "logout": "Keluar", + "clearLocalDataConfirm": "Hapus semua data lokal? Ini akan mengatur ulang preferensi Anda.", + "unknown": "Tidak diketahui", + "systemActor": "sistem", + "ipAccessControl": "Kontrol Akses IP", + "ipAccessControlDesc": "Blokir atau izinkan alamat IP tertentu", + "ipModeDisabled": "Dengan disabilitas", + "ipModeBlacklist": "Daftar Hitam", + "ipModeWhitelist": "Daftar putih", + "ipModeWhitelistPriority": "Prioritas WL", + "addIpAddress": "Tambahkan Alamat IP", + "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*", + "block": "+ Blokir", + "allow": "+ Izinkan", + "blocked": "Diblokir ({count})", + "allowed": "Diizinkan ({count})", + "temporaryBans": "Larangan Sementara ({count})", + "minLeft": "{min}m lagi", + "auditLog": "Catatan Audit", + "searchAuditLogs": "Telusuri log audit...", + "failedLoadAuditLog": "Gagal memuat log audit", + "noAuditEvents": "Tidak ada peristiwa audit yang ditemukan", + "action": "Tindakan", + "actor": "Aktor", + "details": "Detail", + "time": "Waktu", + "fallbackChainsTitle": "Rantai Pengganti", + "fallbackChainsDesc": "Tentukan pesanan cadangan penyedia per model", + "addChain": "+ Tambahkan Rantai", + "modelName": "Nama Model", + "modelNamePlaceholder": "claude-soneta-4-20250514", + "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam urutan prioritas)", + "providersCommaSeparatedPlaceholder": "antropik, openai, gemini", + "createChain": "Buat Rantai", + "noFallbackChains": "Tidak Ada Rantai Cadangan", + "noFallbackChainsDesc": "Buat rantai untuk menentukan urutan cadangan penyedia untuk suatu model.", + "loadingFallbackChains": "Memuat rantai cadangan...", + "deleteChainConfirm": "Hapus rantai cadangan untuk \"{model}\"?", + "chainCreated": "Rantai dibuat untuk {model}", + "chainDeleted": "Rantai dihapus untuk {model}", + "failedCreateChain": "Gagal membuat rantai", + "failedDeleteChain": "Gagal menghapus rantai", + "deleteChain": "Hapus rantai", + "fillModelAndProviders": "Silakan isi nama model dan penyedia", + "addAtLeastOneProvider": "Tambahkan setidaknya satu penyedia", + "comboDefaultsTitle": "Default Kombo", + "globalComboConfig": "Konfigurasi kombo global", + "defaultStrategy": "Strategi Bawaan", + "defaultStrategyDesc": "Diterapkan pada kombo baru tanpa strategi eksplisit", + "comboStrategyAria": "Strategi kombo", + "priority": "Prioritas", + "weighted": "Tertimbang", + "maxRetriesLabel": "Percobaan Ulang Maks", + "retryDelayLabel": "Penundaan Coba Lagi (md)", + "timeoutLabel": "Batas waktu (md)", + "healthCheck": "Pemeriksaan Kesehatan", + "healthCheckDesc": "Periksa terlebih dahulu ketersediaan penyedia", + "trackMetrics": "Lacak Metrik", + "trackMetricsDesc": "Catat metrik permintaan per kombo", + "providerOverrides": "Penggantian Penyedia", + "providerOverridesDesc": "Ganti batas waktu dan coba lagi per penyedia. Pengaturan penyedia mengambil alih pengaturan default global.", + "providerMaxRetriesAria": "{provider} percobaan ulang maksimal", + "providerTimeoutAria": "{provider} batas waktu mdtk", + "removeProviderOverrideAria": "Hapus penggantian {provider}", + "newProviderNamePlaceholder": "misalnya google, buka...", + "newProviderNameAria": "Nama penyedia baru", + "retries": "percobaan ulang", + "ms": "Nona", + "saveComboDefaults": "Simpan Default Kombo", + "maxNestingDepth": "Kedalaman Sarang Maks", + "concurrencyPerModel": "Konkurensi / Model", + "queueTimeout": "Batas Waktu Antrian (md)", + "providerProfiles": "Profil Penyedia", + "providerProfilesDesc": "Pisahkan pengaturan ketahanan untuk penyedia OAuth (berbasis sesi) dan Kunci API (terukur). Penyedia OAuth memiliki ambang batas yang lebih ketat karena batas tarif yang lebih rendah.", + "oauthProviders": "Penyedia OAuth", + "apiKeyProviders": "Penyedia Kunci API", + "transientCooldown": "Pendinginan Sementara", + "rateLimitCooldown": "Cooldown Batas Nilai", + "maxBackoffLevel": "Tingkat Mundur Maks", + "cbThreshold": "Ambang Batas CB", + "cbResetTime": "Waktu Reset CB", + "rateLimiting": "Pembatasan Nilai", + "rateLimitingDesc": "Penyedia Kunci API secara otomatis dibatasi tarifnya dengan default yang aman. Batasan dipelajari dari header respons dan diadaptasi seiring waktu.", + "defaultSafetyNet": "Jaring Pengaman Default", + "rpm": "RPM", + "minGap": "Kesenjangan Minimal", + "maxConcurrent": "Maks Bersamaan", + "activeLimiters": "Pembatas Aktif", + "noActiveLimiters": "Belum ada pembatas tarif aktif.", + "reservoir": "waduk", + "running": "Berlari", + "queued": "Mengantri", + "circuitBreakers": "Pemutus Sirkuit", + "breakerStateClosed": "Tertutup", + "breakerStateOpen": "Buka", + "breakerStateHalfOpen": "Setengah Terbuka", + "tripped": "{count} tersandung", + "healthy": "{count} sehat", + "resetAll": "Atur Ulang Semua", + "noCircuitBreakers": "Belum ada pemutus sirkuit yang aktif. Mereka dibuat secara otomatis ketika permintaan mengalir melalui pipa kombo.", + "failures": "{count} kegagalan", + "policiesLocked": "Kebijakan & Pengidentifikasi Terkunci", + "allOperational": "Semua sistem beroperasi — tidak ada penguncian atau pemutus arus", + "loadingPolicies": "Memuat kebijakan...", + "lockedIdentifiers": "Pengidentifikasi Terkunci", + "unlockedIdentifier": "Tidak Terkunci: {identifier}", + "sinceDate": "sejak {date}", + "forceUnlock": "Paksa Buka Kunci", + "unlocking": "Membuka kunci...", + "failedUnlock": "Gagal membuka kunci", + "failedLoadWithStatus": "Gagal memuat: {status}", + "failedLoadResilience": "Gagal memuat status ketahanan", + "saveFailed": "Gagal menyimpan", + "resetFailed": "Penyetelan ulang gagal", + "loadingResilience": "Memuat status ketahanan...", + "retry": "Coba lagi", + "systemStorage": "Sistem & Penyimpanan", + "allDataLocal": "Semua data disimpan secara lokal di mesin Anda", + "databasePath": "Jalur Basis Data", + "exportDatabase": "Ekspor Basis Data", + "exportAll": "Ekspor Semua (.tar.gz)", + "importDatabase": "Impor Basis Data", + "confirmDbImport": "Konfirmasikan Impor Basis Data", + "confirmDbImportDesc": "Ini akan mengganti semua data saat ini dengan konten dari {file}. Cadangan akan dibuat secara otomatis sebelum impor.", + "yesImport": "Ya, Impor", + "lastBackup": "Cadangan Terakhir", + "noBackupYet": "Belum ada cadangan", + "backupNow": "Cadangkan Sekarang", + "backupRestore": "Cadangkan & Pulihkan", + "viewBackups": "Lihat Cadangan", + "hide": "Sembunyikan", + "backupRetentionDesc": "Snapshot database dibuat secara otomatis sebelum pemulihan dan setiap 15 menit saat data berubah. Retensi: 24 jam + 30 pencadangan harian dengan rotasi cerdas.", + "loadingBackups": "Memuat cadangan...", + "noBackupsYet": "Belum ada cadangan yang tersedia. Cadangan akan dibuat secara otomatis ketika data berubah.", + "backupsAvailable": "{count} cadangan tersedia", + "refresh": "Segarkan", + "confirm": "Konfirmasikan?", + "yes": "Ya", + "no": "Tidak", + "restore": "Pulihkan", + "invalidFileType": "Jenis berkas tidak valid. Hanya file .sqlite yang diterima.", + "exportFailed": "Ekspor gagal", + "exportFailedWithError": "Ekspor gagal: {error}", + "fullExportFailedWithError": "Ekspor penuh gagal: {error}", + "backupCreated": "Cadangan dibuat: {file}", + "restoreSuccess": "Dipulihkan! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.", + "importSuccess": "Basis data diimpor! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.", + "justNow": "sekarang", + "minutesAgo": "{count}m yang lalu", + "hoursAgo": "{count}jam yang lalu", + "daysAgo": "{count}hari yang lalu", + "backupReasonManual": "panduan", + "backupReasonPreRestore": "pra-pemulihan", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Tidak ada perubahan sejak pencadangan terakhir", + "backupFailed": "Pencadangan gagal", + "restoreFailed": "Pemulihan gagal", + "importFailed": "Impor gagal", + "errorDuringRestore": "Terjadi kesalahan saat pemulihan", + "errorDuringImport": "Terjadi kesalahan saat mengimpor", + "modelPricing": "Harga Model", + "modelPricingDesc": "Konfigurasikan tarif biaya per model • Semua tarif dalam token $/1 juta", + "providers": "Penyedia", + "registry": "Registri", + "priced": "Harga", + "searchProvidersModels": "Penyedia atau model pencarian...", + "showAll": "Tampilkan Semua", + "noProvidersMatch": "Tidak ada penyedia yang cocok dengan pencarian Anda.", + "howPricingWorks": "Bagaimana Penetapan Harga Bekerja", + "cacheWrite": "Tulis Cache", + "unsaved": "belum disimpan", + "resetDefaults": "Atur Ulang Default", + "saveProvider": "Simpan Penyedia", + "saving": "Menyimpan...", + "model": "Model", + "models": "model", + "moreProviders": "{count} penyedia lainnya", + "withPricing": "dengan harga yang dikonfigurasi", + "policiesCircuitBreakers": "Kebijakan & Pemutus Arus", + "activeIssuesDetected": "Masalah aktif terdeteksi", + "off": "Mati", + "resetPricingConfirm": "Reset semua harga untuk {provider} ke default?", + "pricingDescInput": "Input: token dikirim ke model", + "pricingDescOutput": "Output: token dihasilkan", + "pricingDescCached": "Tembolok: masukan yang digunakan kembali (~50% dari tingkat masukan)", + "pricingDescReasoning": "Penalaran: token pemikiran (kembali ke Output)", + "pricingDescCacheWrite": "Cache Write: membuat entri cache (kembali ke Input)", + "pricingDescFormula": "Biaya = (input × input_rate) + (output × output_rate) + (cached × cached_rate) per juta token.", + "pricingSettingsTitle": "Pengaturan Harga", + "totalModels": "Jumlah Model", + "active": "Aktif", + "costCalculation": "Perhitungan Biaya", + "costCalculationDesc": "Biaya dihitung berdasarkan penggunaan token dan tarif harga yang dikonfigurasi untuk setiap model.", + "pricingFormat": "Format Harga", + "pricingFormatDesc": "Semua tarif dalam $/1 juta token (dolar per juta token).", + "tokenTypes": "Jenis Token", + "inputTokenDesc": "Token cepat standar", + "outputTokenDesc": "Token penyelesaian/respons", + "cachedTokenDesc": "Token masukan yang di-cache (biasanya 50% dari tingkat masukan)", + "reasoningTokenDesc": "Token penalaran/pemikiran khusus (pengembalian ke tingkat output)", + "cacheCreationTokenDesc": "Token yang digunakan untuk membuat entri cache (pengembalian ke tingkat input)", + "customPricingNote": "Anda dapat mengganti harga default untuk model tertentu. Penggantian khusus lebih diprioritaskan dibandingkan harga yang terdeteksi otomatis.", + "editPricing": "Sunting Harga", + "viewFullDetails": "Lihat Detail Lengkap" + }, + "translator": { + "title": "Penerjemah", + "metaTitle": "Taman Bermain Penerjemah | OmniRoute", + "metaDescription": "Debug, uji, dan visualisasikan terjemahan format API antar penyedia", + "playgroundTitle": "Taman Bermain Penerjemah", + "playground": "Taman bermain", + "realtime": "Aktivitas Penerjemahan Waktu Nyata", + "chatTester": "Penguji Obrolan", + "testBench": "Bangku Tes", + "liveMonitor": "Monitor Langsung", + "modeDescriptionPlayground": "Tempelkan isi permintaan API apa pun dan lihat bagaimana OmniRoute menerjemahkannya di antara format penyedia (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Kirim permintaan obrolan nyata melalui OmniRoute dan periksa perjalanan pulang pergi secara lengkap: masukan, permintaan yang diterjemahkan, respons penyedia, dan keluaran yang diterjemahkan.", + "modeDescriptionTestBench": "Jalankan skenario yang telah ditentukan sebelumnya dan bandingkan kompatibilitas antar penyedia dan model.", + "modeDescriptionLiveMonitor": "Tonton acara terjemahan secara real time saat permintaan mengalir melalui OmniRoute.", + "modeDescriptionFallback": "Debug, uji, dan visualisasikan bagaimana OmniRoute menerjemahkan permintaan API antar penyedia.", + "recentTranslations": "Terjemahan Terbaru", + "noTranslations": "Belum ada terjemahan", + "source": "Sumber", + "target": "Sasaran", + "time": "Waktu", + "model": "Model", + "status": "Status", + "latency": "Latensi", + "totalTranslations": "Terjemahan Total", + "successful": "Berhasil", + "errors": "Kesalahan", + "avgLatency": "Rata-rata Latensi", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Langsung — Menyegarkan otomatis", + "paused": "Dijeda", + "eventsAppearHint": "Peristiwa penerjemahan muncul di sini saat permintaan mengalir melalui OmniRoute. Gunakan salah satu metode berikut untuk menghasilkan peristiwa:", + "chatTesterTab": "Tab Penguji Obrolan", + "testBenchTab": "Tab Bangku Tes", + "externalApiCalls": "Panggilan API eksternal", + "ideCliIntegrations": "Integrasi IDE/CLI", + "inMemoryNote": "Catatan: Acara disimpan di memori dan disetel ulang saat server dimulai ulang.", + "ok": "Oke", + "errorShort": "KESALAHAN", + "formatConverter": "Konverter Format", + "formatConverterDescription": "Tempel atau ketik isi permintaan JSON. Penerjemah akan secara otomatis mendeteksi format sumber dan mengubahnya ke format target. Gunakan ini untuk men-debug bagaimana OmniRoute menerjemahkan permintaan antar format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Masukan", + "output": "Keluaran", + "auto": "Otomatis", + "swapFormats": "Tukar format", + "translateAction": "Terjemahkan", + "clear": "Jelas", + "inputPlaceholder": "Tempelkan isi permintaan di sini atau pilih templat di bawah...", + "exampleTemplates": "Contoh Template", + "exampleTemplatesHint": "— Klik untuk memuat", + "templateLoadHint": "Templat memuat permintaan dalam format {format}. Ubah Format Sumber untuk memuat dalam format yang berbeda.", + "compatibilityTester": "Penguji Kompatibilitas", + "compatibilityReport": "Laporan Kompatibilitas", + "testBenchDescription": "Jalankan skenario yang telah ditentukan sebelumnya (Obrolan Sederhana, Panggilan Alat, dll.) untuk memverifikasi kompatibilitas terjemahan dan penyedia. Pilih format sumber dan penyedia target, lalu jalankan semua pengujian untuk melihat persentase kompatibilitas. Gunakan ini untuk menemukan fitur mana yang berfungsi di seluruh penyedia.", + "targetProvider": "Penyedia Sasaran", + "runAllTests": "Jalankan Semua Tes", + "runTest": "Jalankan Tes", + "reRun": "Jalankan kembali", + "running": "Berlari...", + "passed": "berlalu", + "failed": "gagal", + "passedIconLabel": "✅ Lulus", + "chunks": "potongan", + "scenarioSimpleChat": "Obrolan Sederhana", + "scenarioToolCalling": "Panggilan Alat", + "scenarioMultiTurn": "Multi-putaran", + "scenarioThinking": "Berpikir", + "scenarioSystemPrompt": "Perintah Sistem", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Obrolan Sederhana", + "tool-calling": "Panggilan Alat", + "multi-turn": "Multi-putaran", + "thinking": "Berpikir", + "system-prompt": "Perintah Sistem", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Pesan teks dasar", + "tool-calling": "Pemanggilan fungsi/alat", + "multi-turn": "Percakapan dengan sejarah", + "thinking": "Pemikiran/penalaran yang diperluas", + "system-prompt": "Instruksi sistem yang kompleks", + "streaming": "Permintaan streaming SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Anda adalah asisten yang membantu.", + "userGreeting": "Halo! Apa kabarmu hari ini?" + }, + "toolCalling": { + "userWeather": "Bagaimana cuaca di Sao Paulo?", + "toolDescription": "Dapatkan cuaca terkini untuk suatu lokasi", + "cityNameDescription": "Nama kota" + }, + "multiTurn": { + "system": "Anda adalah asisten pengkodean.", + "userInitial": "Tulis fungsi untuk mengurutkan array dengan Python.", + "assistantExample": "Berikut fungsi pengurutan sederhana:\n\n``` ular piton\ndef sort_array(arr):\n kembali diurutkan(arr)\n```", + "userFollowUp": "Sekarang urutkan dalam urutan menurun." + }, + "thinking": { + "question": "Berapa jumlah 100 bilangan prima pertama?" + }, + "systemPrompt": { + "systemInstruction": "Anda adalah insinyur perangkat lunak senior yang berspesialisasi dalam sistem terdistribusi. Jawab pertanyaan dengan singkat menggunakan praktik terbaik industri. Selalu berikan contoh kode bila relevan. Format tanggapan Anda menggunakan penurunan harga.", + "question": "Bagaimana cara menerapkan pola pemutus sirkuit?" + }, + "streaming": { + "prompt": "Ceritakan sebuah cerita pendek tentang robot yang belajar melukis." + } + }, + "openaiCompatibleLabel": "Kompatibel dengan OpenAI", + "anthropicCompatibleLabel": "Kompatibel Antropis", + "noTemplateForFormat": "Tidak ada templat untuk format ini", + "translationFailed": "Terjemahan gagal: {error}", + "pipelineDebugger": "Debugger Saluran Pipa", + "translationPipeline": "Saluran Terjemahan", + "pipelineVisualization": "Visualisasi saluran pipa", + "pipelineVisualizationHint": "Kirim pesan untuk melihat bagaimana permintaan Anda mengalir melalui deteksi → terjemahan → panggilan penyedia.", + "chatTesterDescription": "Kirim pesan sebagai format klien tertentu dan periksa setiap langkah alur terjemahan.", + "chatTesterFlow": "Permintaan Klien → Deteksi Format → OpenAI Intermediate → Format Penyedia → Respons", + "clickStepToInspect": "Klik langkah mana pun untuk memeriksa data pada tahap itu.", + "clientFormat": "Format Klien", + "provider": "Penyedia", + "modelPlaceholder": "Pilih atau ketikkan nama model...", + "sendMessageToSeePipeline": "Kirim pesan untuk melihat alur terjemahan", + "chatMessageHintPrefix": "Pesan Anda akan diformat sebagai a", + "chatMessageHintSuffix": "permintaan, diterjemahkan melalui pipeline, dan dikirim ke penyedia yang dipilih.", + "youWithFormat": "Anda ({format})", + "assistant": "Asisten", + "typeMessage": "Ketik pesan...", + "send": "Kirim", + "clientRequest": "Permintaan Klien", + "clientRequestDescription": "Badan permintaan sebagai klien Anda akan mengirimkannya", + "formatDetected": "Format Terdeteksi", + "formatDetectedDescription": "OmniRoute secara otomatis mendeteksi format API dari struktur permintaan", + "openaiIntermediate": "OpenAI Menengah", + "openaiIntermediateDescription": "Semua format pertama-tama dinormalisasi ke format OpenAI (jembatan universal)", + "providerFormat": "Format Penyedia", + "providerFormatDescription": "Format OpenAI diterjemahkan ke format asli penyedia", + "providerResponse": "Respon Penyedia", + "providerResponseRawDescription": "Respons mentah dari API penyedia", + "providerResponseSseDescription": "Aliran SSE mentah dari API penyedia", + "unexpectedError": "Terjadi kesalahan yang tidak terduga", + "error": "Kesalahan", + "errorMessage": "Kesalahan: {message}", + "requestFailed": "Permintaan gagal", + "noTextExtracted": "(Tidak ada teks yang diekstraksi)", + "liveMonitorDescriptionPrefix": "Menampilkan peristiwa terjemahan saat panggilan API mengalir melalui OmniRoute. Acara berasal dari buffer dalam memori (direset saat restart). Gunakan", + "liveMonitorDescriptionSuffix": ", atau panggilan API eksternal untuk menghasilkan peristiwa." + }, + "usage": { + "title": "Penggunaan", + "loggerTab": "penebang", + "proxyTab": "Proksi", + "budgetManagement": "Manajemen Anggaran", + "budgetSaved": "Batasan anggaran dihemat", + "budgetSaveFailed": "Gagal menghemat anggaran", + "loadingBudgetData": "Memuat data anggaran...", + "noApiKeysTitle": "Tidak Ada Kunci API", + "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyiapkan batas anggaran.", + "apiKey": "Kunci API", + "todaysSpend": "Pembelanjaan hari ini", + "thisMonth": "Bulan ini", + "setLimits": "Tetapkan Batasan", + "dailyLimitUsd": "Batas Harian (USD)", + "monthlyLimitUsd": "Batas Bulanan (USD)", + "warningThresholdPercent": "Ambang Peringatan (%)", + "dailyLimitPlaceholder": "misalnya 5.00", + "monthlyLimitPlaceholder": "misalnya 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Simpan Batas", + "budgetOk": "Anggaran OK — {remaining} tersisa", + "budgetExceeded": "Anggaran terlampaui — permintaan mungkin diblokir", + "totalRequests": "Jumlah permintaan", + "noDataYet": "Belum ada datanya", + "latency": "Latensi", + "latencyP50": "hal50", + "latencyP95": "hal95", + "latencyP99": "hal99", + "promptCache": "Tembolok Cepat", + "systemHealth": "Kesehatan Sistem", + "entries": "Entri", + "activeCount": "{count} aktif", + "openCircuitBreakersDetected": "Pemutus sirkuit terbuka terdeteksi", + "hitRate": "Tingkat Hit", + "hitsMisses": "Hit / Miss", + "circuitBreakers": "Pemutus Sirkuit", + "lockedIPs": "IP terkunci", + "lockoutsAutoRefreshHint": "Kunci batas kecepatan per model • Refresh otomatis 10 detik", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} tersisa", + "howItWorks": "Cara Kerjanya", + "howItWorksSubtitle": "Pelajari bagaimana evaluasi memvalidasi respons LLM Anda", + "define": "Definisikan", + "defineStepDescription": "Buat kasus pengujian dengan perintah masukan dan kriteria keluaran yang diharapkan menggunakan strategi seperti berisi, regex, atau pencocokan tepat.", + "run": "Jalankan", + "runStepDescription": "Jalankan kasus uji terhadap titik akhir LLM Anda melalui OmniRoute. Setiap kasus dikirim sebagai permintaan API nyata.", + "evaluate": "Evaluasi", + "evaluateStepDescription": "Tanggapan dibandingkan dengan kriteria yang diharapkan. Lihat lulus/gagal untuk setiap kasus dengan metrik latensi dan masukan terperinci.", + "evalSuites": "Ruang Evaluasi", + "evalSuitesHint": "Klik rangkaian untuk melihat kasus pengujian, lalu jalankan untuk mengevaluasi titik akhir LLM Anda", + "evalsLoading": "Memuat suite eval...", + "noEvalSuitesFound": "Tidak Ada Suite Eval yang Ditemukan", + "noEvalSuitesDescription": "Suite eval dapat ditentukan melalui API atau kode. Mereka menguji keluaran model terhadap hasil yang diharapkan menggunakan strategi seperti konten, regex, pencocokan tepat, dan fungsi khusus.", + "columnCase": "Kasus", + "columnStatus": "Status", + "columnLatency": "Latensi", + "columnDetails": "Detail", + "columnModel": "Model", + "columnStrategy": "Strategi", + "columnExpected": "Diharapkan", + "statsSuites": "Suite", + "statsTestCases": "Kasus Uji", + "statsModels": "Model", + "statsCoverage": "Cakupan", + "statsStrategiesCount": "{count} strategi", + "evaluationStrategies": "Strategi Evaluasi", + "modelsUnderTest": "Model Sedang Diuji", + "searchSuitesPlaceholder": "Ruang pencarian...", + "passSuffix": "lulus", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Jalankan Eval", + "runningProgress": "Menjalankan {current}/{total}...", + "passRate": "tingkat kelulusan", + "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} total", + "passedIconLabel": "✅ Lulus", + "failedIconLabel": "❌ Gagal", + "detailsContains": "Berisi: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Diharapkan: \"{expected}\"", + "noResultsYet": "Belum ada hasil", + "testCasesCount": "Kasus Uji ({count})", + "noTestCasesDefined": "Tidak ada kasus uji yang ditentukan", + "runEvalHint": "Klik \"Jalankan Eval\" untuk menjalankan semua kasus terhadap titik akhir LLM Anda. Setiap pengujian mengirimkan permintaan nyata melalui OmniRoute.", + "notifyNoTestCases": "Tidak ada kasus uji yang ditentukan untuk rangkaian ini", + "notifyAllCasesPassed": "Semua kasus {total} lolos ✅", + "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal", + "notifyEvalRunFailed": "Proses evaluasi gagal", + "notifyEvalTitle": "Evaluasi: {name}", + "modelEvals": "Evaluasi Model", + "evalsHeroDescription": "Uji dan validasi titik akhir LLM Anda dengan menjalankan rangkaian evaluasi yang telah ditentukan sebelumnya. Setiap rangkaian berisi kasus pengujian yang mengirimkan perintah nyata melalui OmniRoute dan membandingkan respons terhadap kriteria yang diharapkan — membantu Anda mendeteksi regresi, membandingkan model, dan memastikan kualitas respons di seluruh penyedia.", + "qualityValidation": "Validasi Kualitas", + "modelComparison": "Perbandingan Model", + "regressionDetection": "Deteksi Regresi", + "latencyBenchmarks": "Tolok Ukur Latensi", + "modelLockouts": "Penguncian Model", + "noLockouts": "Tidak ada model yang dikunci saat ini", + "activeSessions": "Sesi Aktif", + "noSessions": "Tidak ada sesi aktif", + "sessionsHint": "Sesi muncul saat permintaan mengalir melalui proxy", + "sessionsTrackedHint": "Dilacak melalui permintaan sidik jari • Penyegaran otomatis 5 detik", + "session": "Sesi", + "age": "Usia", + "requests": "Permintaan", + "connection": "Koneksi", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}dtk", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}jam", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Batasan Penyedia", + "noProviders": "Tidak Ada Penyedia yang Terhubung", + "connectProvidersForQuota": "Hubungkan ke penyedia dengan OAuth untuk melacak batas dan penggunaan kuota API Anda.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(difilter dari {count})", + "autoRefresh": "Segarkan otomatis", + "refreshAll": "Segarkan Semua", + "loadingQuotas": "Memuat...", + "account": "Akun", + "modelQuotas": "Kuota Model", + "lastUsed": "Terakhir Digunakan", + "actions": "Tindakan", + "refreshQuota": "Segarkan kuota", + "today": "Hari ini", + "tomorrow": "Besok", + "dayTimeFormat": "{day}, {time}", + "inDuration": "di {duration}", + "notApplicable": "T/A", + "rawPlanWithValue": "Paket mentah: {plan}", + "noPlanFromProvider": "Tidak ada rencana dari penyedia", + "noQuotaData": "Tidak ada data kuota", + "noQuotaDataAvailable": "Tidak ada data kuota yang tersedia", + "noAccountsForTierFilter": "Tidak ditemukan akun untuk filter tingkat", + "tierAll": "Semua", + "tierEnterprise": "Perusahaan", + "tierTeam": "Tim", + "tierBusiness": "Bisnis", + "tierUltra": "Sangat", + "tierPro": "Pro", + "tierPlus": "Ditambah lagi", + "tierFree": "Gratis", + "tierUnknown": "Tidak diketahui" + }, + "modals": { + "waitingAuth": "Menunggu Otorisasi", + "verificationUrl": "URL verifikasi", + "yourCode": "Kode Anda", + "remoteAccess": "Akses jarak jauh:", + "connectedSuccess": "Berhasil Terhubung!", + "connectionFailed": "Koneksi Gagal", + "chooseAuthMethod": "Pilih metode autentikasi Anda:", + "awsBuilderId": "ID Pembuat AWS", + "awsIamIdentity": "Pusat Identitas AWS IAM", + "googleAccount": "Akun Google", + "githubAccount": "Akun GitHub", + "importToken": "Impor Token", + "pasteToken": "Tempel token penyegaran dari Kiro IDE.", + "awsRegion": "Wilayah AWS", + "autoDetecting": "Token yang terdeteksi secara otomatis...", + "readingFromCache": "Membaca dari cache AWS SSO", + "readingFromCursor": "Membaca dari database Cursor IDE", + "initializing": "Menginisialisasi...", + "pricingConfig": "Konfigurasi Harga", + "loadingPricing": "Memuat data harga...", + "pricingRatesFormat": "Format Tarif Harga", + "noPricingData": "Tidak ada data harga yang tersedia", + "noModelsFound": "Tidak ada model yang ditemukan" + }, + "loggers": { + "allProviders": "Semua Penyedia", + "allModels": "Semua Model", + "allAccounts": "Semua Akun", + "allApiKeys": "Semua Kunci API", + "allTypes": "Semua Jenis", + "allLevels": "Semua Tingkat", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Memuat log...", + "loadingProxyLogs": "Memuat log proxy...", + "noLogEntries": "Tidak ada entri log yang ditemukan", + "noPayloadData": "Tidak ada data muatan yang tersedia untuk entri log ini.", + "proxyEvent": "Acara Proksi", + "proxy": "Proksi", + "level": "Tingkat", + "directNative": "Langsung (asli)", + "combo": "kombo", + "inputTokens": "Saya:", + "outputTokens": "HAI:" + }, + "stats": { + "usageOverview": "Ikhtisar Penggunaan", + "outputTokens": "Token Keluaran", + "totalCost": "Jumlah Biaya", + "usageByModel": "Penggunaan berdasarkan Model", + "usageByAccount": "Penggunaan berdasarkan Akun", + "failedToLoad": "Gagal memuat statistik penggunaan.", + "tokenHealth": "Token Kesehatan", + "totalOAuth": "Total OAuth", + "healthy": "Sehat", + "warning": "Peringatan", + "errored": "Salah", + "lastCheck": "Pemeriksaan terakhir", + "noData": "Tidak ada data", + "share": "Bagikan", + "unableToLoad": "Tidak dapat memuat metrik sistem", + "product": "Produk", + "resources": "Sumber daya", + "company": "Perusahaan" + }, + "auth": { + "welcome": "Selamat datang", + "signIn": "Masuk", + "enterPassword": "Masukkan kata sandi Anda untuk melanjutkan", + "password": "Kata sandi", + "unifiedProxy": "Proksi API AI Terpadu", + "unifiedAiApiProxy": "Proksi API AI Terpadu", + "unifiedAiApiProxyDesc": "Merutekan permintaan ke beberapa penyedia AI melalui satu titik akhir. Penyeimbangan beban, failover, dan pelacakan penggunaan sudah ada di dalamnya.", + "passwordNotEnabled": "Perlindungan kata sandi tidak diaktifkan", + "loading": "Memuat...", + "invalidPassword": "Kata sandi tidak valid", + "errorOccurredRetry": "Terjadi kesalahan. Silakan coba lagi.", + "configureInstance": "Mari konfigurasikan instans OmniRoute Anda", + "runOnboardingWizard": "Jalankan wizard orientasi untuk menyiapkan kata sandi Anda dan menghubungkan penyedia AI pertama Anda.", + "startOnboarding": "Mulai Orientasi", + "secureYourInstance": "Amankan Instans Anda", + "setPasswordDescription": "Tetapkan kata sandi untuk melindungi dasbor Anda dan mengamankan titik akhir API Anda dari akses tidak sah.", + "configurePassword": "Konfigurasikan Kata Sandi", + "continue": "Lanjutkan", + "windowWillClose": "Jendela ini akan tertutup secara otomatis...", + "closeTabNow": "Anda dapat menutup tab ini sekarang.", + "copyUrlManual": "Silakan salin URL dari bilah alamat dan tempelkan di aplikasi.", + "accessDeniedDescription": "Anda tidak memiliki izin untuk mengakses sumber daya ini. Periksa kunci API Anda atau hubungi administrator.", + "goToDashboard": "Buka Dasbor", + "featureMultiProviderTitle": "Multi-Penyedia", + "featureMultiProviderDesc": "OpenAI, Antropik, Google, dan banyak lagi", + "featureLoadBalancingTitle": "Penyeimbangan Beban", + "featureLoadBalancingDesc": "Distribusikan permintaan dengan cerdas", + "featureUsageTrackingTitle": "Pelacakan Penggunaan", + "featureUsageTrackingDesc": "Pantau biaya dan token", + "resetPassword": "Atur Ulang Kata Sandi", + "resetDescription": "Pilih metode untuk memulihkan akses ke dasbor Anda", + "stopServer": "Hentikan server OmniRoute", + "processing": "Memproses...", + "pleaseWait": "Harap tunggu sementara kami menyelesaikan otorisasi.", + "authSuccess": "Otorisasi Berhasil!", + "copyUrl": "Salin URL ini", + "accessDenied": "Akses Ditolak", + "methodCliTitle": "Metode 1: Atur Ulang CLI", + "methodCliDescription": "Jalankan perintah berikut di server tempat OmniRoute berjalan:", + "methodCliHint": "Ini akan meminta Anda untuk menetapkan kata sandi baru. Server harus dihentikan terlebih dahulu.", + "methodManualTitle": "Metode 2: Reset Manual", + "methodManualDescription": "Hapus kata sandi dari database dan atur kata sandi baru saat startup:", + "setPasswordInYour": "Tetapkan kata sandi baru di Anda", + "fileLabelSuffix": "mengajukan:", + "newPasswordPlaceholder": "kata sandi_baru_Anda", + "deleteSettingsFile": "Hapus", + "orRemovePasswordHashField": "atau hapus bidang passwordHash", + "restartServerWithNewPassword": "Mulai ulang server - server akan menggunakan kata sandi baru", + "backToLogin": "Kembali ke Masuk", + "forgotPassword": "Lupa kata sandi?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Arahkan ke rumah", + "toggleMenu": "Alihkan menu", + "featuresLink": "Fitur", + "docsLink": "dokumen", + "github": "GitHub", + "versionLive": "v1.0 sekarang aktif", + "oneEndpoint": "Satu Titik Akhir untuk", + "allProviders": "Semua Penyedia AI", + "heroDescription": "Proksi titik akhir AI dengan dasbor web - Port JavaScript CLIProxyAPI. Bekerja secara lancar dengan Claude Code, OpenAI Codex, Cline, RooCode, dan alat CLI lainnya.", + "getStarted": "Memulai", + "viewOnGithub": "Lihat di GitHub", + "powerfulFeatures": "Fitur Canggih", + "featuresSubtitle": "Semua yang Anda perlukan untuk mengelola infrastruktur AI Anda di satu tempat, dibuat untuk skala besar.", + "featureUnifiedEndpointTitle": "Titik Akhir Terpadu", + "featureUnifiedEndpointDesc": "Akses semua penyedia melalui satu URL API standar.", + "featureEasySetupTitle": "Pengaturan Mudah", + "featureEasySetupDesc": "Bangun dan jalankan dalam hitungan menit dengan perintah npx.", + "featureModelFallbackTitle": "Penggantian Model", + "featureModelFallbackDesc": "Secara otomatis beralih penyedia jika terjadi kegagalan atau latensi tinggi.", + "featureUsageTrackingTitle": "Pelacakan Penggunaan", + "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan biaya di semua model.", + "featureOAuthApiKeysTitle": "Kunci OAuth & API", + "featureOAuthApiKeysDesc": "Kelola kredensial dengan aman dalam satu brankas.", + "featureCloudSyncTitle": "Sinkronisasi Awan", + "featureCloudSyncDesc": "Sinkronkan konfigurasi Anda di seluruh perangkat secara instan.", + "featureCliSupportTitle": "Dukungan CLI", + "featureCliSupportDesc": "Bekerja dengan Claude Code, Codex, Cline, Cursor, dan banyak lagi.", + "featureDashboardTitle": "Dasbor", + "featureDashboardDesc": "Dasbor visual untuk analisis lalu lintas waktu nyata.", + "howItWorks": "Cara Kerja OmniRoute", + "howItWorksDescription": "Data mengalir dengan lancar dari aplikasi Anda melalui lapisan perutean cerdas kami ke penyedia terbaik untuk pekerjaan tersebut.", + "howItWorksStep1Title": "1. CLI & SDK", + "howItWorksStep1Description": "Permintaan Anda dimulai dari alat favorit Anda atau SDK terpadu kami. Ubah saja URL dasar.", + "howItWorksStep2Title": "2. Hub OmniRoute", + "howItWorksStep2Description": "Mesin kami menganalisis perintah, memeriksa kesehatan penyedia, dan merutekan latensi atau biaya terendah.", + "howItWorksStep3Title": "3. Penyedia AI", + "howItWorksStep3Description": "Permintaan tersebut dipenuhi oleh OpenAI, Anthropic, Gemini, atau lainnya secara instan.", + "getStartedIn30Seconds": "Memulai dalam 30 Detik", + "getStartedDescription": "Instal OmniRoute, konfigurasikan penyedia Anda melalui dasbor web, dan mulai merutekan permintaan AI.", + "installOmniRoute": "Instal OmniRoute", + "installStepDescription": "Jalankan perintah npx untuk memulai server secara instan", + "openDashboard": "Buka Dasbor", + "openDashboardStepDescription": "Konfigurasikan penyedia dan kunci API melalui antarmuka web", + "routeRequests": "Permintaan Rute", + "routeRequestsStepDescription": "Arahkan alat CLI Anda ke {endpoint}", + "terminal": "terminal", + "copy": "Salin", + "copied": "✓ Disalin", + "startingOmniRoute": "Memulai OmniRoute...", + "serverRunningOnLabel": "Server berjalan", + "dashboardLabel": "Dasbor", + "readyToRoute": "Siap untuk rute! ✓", + "configureProvidersNote": "📝 Konfigurasikan penyedia di dasbor atau gunakan variabel lingkungan", + "dataLocation": "Lokasi Data:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " jendela:", + "product": "Produk", + "dashboardLink": "Dasbor", + "changelog": "log perubahan", + "resources": "Sumber daya", + "documentation": "Dokumentasi", + "npm": "NPM", + "legal": "Hukum", + "mitLicense": "Lisensi MIT", + "footerTagline": "Titik akhir terpadu untuk generasi AI. Hubungkan, rutekan, dan kelola penyedia AI Anda dengan mudah.", + "copyright": "© {year} OmniRoute. Semua hak dilindungi undang-undang.", + "flowToolClaudeCode": "Kode Claude", + "flowToolOpenAICodex": "Kodeks OpenAI", + "flowToolCline": "Klinik", + "flowToolCursor": "Kursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropis", + "flowProviderGemini": "kembar", + "flowProviderGithubCopilot": "Kopilot GitHub", + "interactiveDiagram": "Diagram interaktif terlihat di desktop", + "ctaTitle": "Siap Menyederhanakan Infrastruktur AI Anda?", + "ctaDescription": "Bergabunglah dengan pengembang yang menyederhanakan integrasi AI mereka dengan OmniRoute. Sumber terbuka dan gratis untuk memulai.", + "startFree": "Mulai Gratis", + "readDocumentation": "Baca Dokumentasi" + }, + "docs": { + "title": "Dokumentasi", + "quickStart": "Mulai Cepat", + "features": "Fitur", + "supportedProviders": "Penyedia yang Didukung", + "supportedProvidersToc": "Penyedia", + "commonUseCases": "Kasus Penggunaan Umum", + "clientCompatibility": "Kompatibilitas Klien", + "apiReference": "Referensi API", + "method": "Metode", + "path": "Jalan", + "notes": "Catatan", + "modelPrefixes": "Awalan Model", + "prefix": "Awalan", + "troubleshooting": "Pemecahan masalah", + "supportsChat": "Mendukung titik akhir obrolan dan respons.", + "oauthAutoRefresh": "Koneksi OAuth dengan penyegaran token otomatis.", + "fullStreaming": "Dukungan streaming penuh untuk semua model.", + "docsLabel": "dokumen", + "docsHeroDescription": "Gerbang AI untuk LLM multi-penyedia. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, dan 20+ penyedia lainnya.", + "openDashboard": "Buka Dasbor", + "endpointPage": "Halaman Titik Akhir", + "github": "GitHub", + "reportIssue": "Laporkan Masalah", + "onThisPage": "Di halaman ini", + "documentationVersion": "Dokumentasi - v{version}", + "quickStartStep1Title": "1. Instal dan jalankan", + "quickStartStep1Prefix": "Jalankan", + "quickStartStep1Middle": "atau kloning dari GitHub dan jalankan", + "quickStartStep2Title": "2. Buat kunci API", + "quickStartStep2Text": "Buka Titik Akhir -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.", + "quickStartStep3Title": "3. Hubungkan penyedia", + "quickStartStep3Text": "Tambahkan akun penyedia melalui login OAuth, kunci API, atau koneksi otomatis tingkat gratis.", + "quickStartStep4Title": "4. Tetapkan URL basis klien", + "quickStartStep4Prefix": "Arahkan klien IDE atau API Anda ke", + "quickStartStep4Suffix": "Gunakan awalan penyedia, misalnya", + "featureRoutingTitle": "Perutean Multi-Penyedia", + "featureRoutingText": "Rutekan permintaan ke 30+ penyedia AI melalui satu titik akhir yang kompatibel dengan OpenAI. Mendukung API obrolan, respons, audio, dan gambar.", + "featureCombosTitle": "Kombo dan Penyeimbangan", + "featureCombosText": "Buat kombo model dengan rantai cadangan dan strategi penyeimbangan: round-robin, prioritas, acak, paling jarang digunakan, dan hemat biaya.", + "featureUsageTitle": "Pelacakan Penggunaan dan Biaya", + "featureUsageText": "Penghitungan token secara real-time, penghitungan biaya per penyedia/model, dan perincian penggunaan terperinci berdasarkan kunci API dan akun.", + "featureAnalyticsTitle": "Dasbor Analisis", + "featureAnalyticsText": "Analisis visual dengan bagan untuk permintaan, token, kesalahan, latensi, biaya, dan popularitas model dari waktu ke waktu.", + "featureHealthTitle": "Pemantauan Kesehatan", + "featureHealthText": "Pemeriksaan kesehatan langsung, status penyedia, status pemutus sirkuit, dan deteksi batas tarif otomatis dengan backoff eksponensial.", + "featureCliTitle": "Alat CLI", + "featureCliText": "Kelola konfigurasi IDE, ekspor/impor cadangan, temukan profil codex, dan konfigurasikan pengaturan dari dasbor.", + "featureSecurityTitle": "Keamanan dan Kebijakan", + "featureSecurityText": "Otentikasi kunci API, pemfilteran IP, pelindung injeksi cepat, kebijakan domain, manajemen sesi, dan pencatatan audit.", + "featureCloudSyncTitle": "Sinkronisasi Awan", + "featureCloudSyncText": "Sinkronkan konfigurasi Anda ke Cloudflare Workers untuk akses jarak jauh dengan kredensial terenkripsi dan failover otomatis.", + "providersAcrossConnectionTypes": "{count} penyedia di tiga jenis koneksi.", + "manageProviders": "Kelola Penyedia", + "providersCount": "{count} penyedia", + "providerTypeFree": "Tingkat Gratis", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Kunci API", + "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak penyedia", + "useCaseSingleEndpointText": "Arahkan klien ke satu URL dasar dan rutekan berdasarkan awalan model (misalnya: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Penggantian dan peralihan model dengan kombo", + "useCaseFallbackText": "Buat model kombo di Dasbor dan pertahankan konfigurasi klien tetap stabil sementara penyedia melakukan rotasi secara internal.", + "useCaseUsageVisibilityTitle": "Penggunaan, biaya, dan visibilitas debug", + "useCaseUsageVisibilityText": "Lacak token dan biaya berdasarkan penyedia, akun, dan kunci API di tab Penggunaan dan Analisis.", + "clientCherryStudioTitle": "Studio Ceri", + "baseUrlLabel": "URL dasar", + "chatEndpointLabel": "Titik akhir obrolan", + "modelRecommendationLabel": "Rekomendasi model: awalan eksplisit", + "clientCodexTitle": "Model Kopilot Codex / GitHub", + "clientCodexBullet1": "Gunakan ID model dengan", + "clientCodexBullet2": "Model keluarga Codex dirutekan otomatis ke", + "clientCodexBullet3": "Model non-Codex terus berlanjut", + "clientCursorTitle": "IDE kursor", + "clientCursorBullet1": "Gunakan", + "clientCursorBullet1Suffix": "awalan untuk model Kursor.", + "clientCursorBullet2": "Koneksi OAuth - login dari halaman Penyedia.", + "clientClaudeTitle": "Kode Claude / Antigravitasi", + "clientClaudeBullet1Prefix": "Gunakan", + "clientClaudeBullet1Middle": "(Claude) atau", + "clientClaudeBullet1Suffix": "Awalan (Antigravitasi).", + "endpointChatNote": "Titik akhir obrolan yang kompatibel dengan OpenAI (default).", + "endpointResponsesNote": "Titik akhir API respons (Codex, o-series).", + "endpointModelsNote": "Katalog model untuk semua penyedia yang terhubung.", + "endpointAudioNote": "Transkripsi audio (Deepgram, MajelisAI).", + "endpointImagesNote": "Pembuatan gambar (NanoBanana).", + "endpointRewriteChatNote": "Tulis ulang pembantu untuk klien tanpa /v1.", + "endpointRewriteResponsesNote": "Tulis ulang pembantu untuk Respons tanpa /v1.", + "endpointRewriteModelsNote": "Tulis ulang pembantu untuk penemuan model tanpa /v1.", + "modelPrefixesDescriptionStart": "Gunakan awalan penyedia sebelum nama model untuk merutekan ke penyedia tertentu. Contoh:", + "modelPrefixesDescriptionEnd": "rute ke GitHub Copilot.", + "provider": "Penyedia", + "type": "Ketik", + "troubleshootingModelRouting": "Jika klien gagal dengan perutean model, gunakan penyedia/model eksplisit (misalnya: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Jika Anda menerima kesalahan model yang ambigu, pilih awalan penyedia, bukan ID model biasa.", + "troubleshootingCodexFamily": "Untuk model keluarga GitHub Codex, pertahankan model sebagai gh/; router memilih / merespons secara otomatis.", + "troubleshootingTestConnection": "Gunakan Dasbor > Penyedia > Uji Koneksi sebelum menguji dari IDE atau klien eksternal.", + "troubleshootingCircuitBreaker": "Jika penyedia menunjukkan pemutus sirkuit terbuka, tunggu hingga cooldown atau periksa halaman Kesehatan untuk detailnya.", + "troubleshootingOAuth": "Untuk penyedia OAuth, autentikasi ulang jika masa berlaku token habis. Periksa indikator status kartu penyedia." + }, + "legal": { + "privacyPolicy": "Kebijakan Privasi", + "termsOfService": "Ketentuan Layanan", + "providerConfigurations": "Konfigurasi penyedia", + "apiKeys": "Kunci API", + "usageLogs": "Log penggunaan", + "applicationSettings": "Pengaturan aplikasi", + "viewExportAnalytics": "Lihat dan ekspor analisis penggunaan", + "clearHistory": "Hapus riwayat penggunaan kapan saja", + "configureRetention": "Konfigurasikan kebijakan penyimpanan log", + "backupRestore": "Cadangkan dan pulihkan database Anda", + "privacyMetadataTitle": "Kebijakan Privasi | OmniRoute", + "privacyMetadataDescription": "Kebijakan privasi untuk router proksi OmniRoute AI API.", + "termsMetadataTitle": "Ketentuan Layanan | OmniRoute", + "termsMetadataDescription": "Persyaratan layanan untuk router proksi OmniRoute AI API.", + "backToHome": "Kembali ke rumah", + "lastUpdated": "Terakhir diperbarui: {date}", + "policyLastUpdatedDate": "13 Februari 2026", + "listSeparator": "-", + "questionsVisit": "Pertanyaan? Kunjungi kami", + "githubRepository": "Repositori GitHub", + "privacySection1Title": "1. Arsitektur Lokal-Pertama", + "privacySection1Text": "OmniRoute dirancang sebagai aplikasi lokal pertama. Semua pemrosesan dan penyimpanan data sepenuhnya dilakukan di mesin Anda. Tidak ada server terpusat yang mengumpulkan informasi Anda.", + "privacySection2Title": "2. Data yang Kami Simpan", + "privacyDataStoredIn": "Data berikut disimpan secara lokal di", + "privacyDataProviderConfigurationsDesc": "URL koneksi, jenis penyedia, dan pengaturan prioritas", + "privacyDataApiKeysDesc": "dienkripsi dan disimpan secara lokal untuk diautentikasi dengan penyedia AI", + "privacyDataUsageLogsDesc": "jumlah permintaan, penggunaan token, nama model, stempel waktu, dan waktu respons", + "privacyDataApplicationSettingsDesc": "preferensi tema, strategi perutean, dan konfigurasi kombo", + "privacySection3Title": "3. Tidak Ada Telemetri", + "privacySection3Text": "OmniRoute tidak mengumpulkan telemetri, analitik, atau laporan kerusakan. Tidak ada data yang dikirimkan kepada kami atau pihak ketiga mana pun. Pola penggunaan, panggilan API, dan konfigurasi Anda sepenuhnya bersifat pribadi.", + "privacySection4Title": "4. Penyedia AI Pihak Ketiga", + "privacySection4Text": "Saat Anda melakukan panggilan API melalui OmniRoute, permintaan Anda diteruskan ke penyedia AI yang telah Anda konfigurasikan (misalnya: OpenAI, Anthropic, Google). Penyedia ini memiliki kebijakan privasinya sendiri yang mengatur cara mereka menangani data Anda. Harap tinjau:", + "privacyOpenAiPolicy": "Kebijakan Privasi OpenAI", + "privacyAnthropicPolicy": "Kebijakan Privasi Antropis", + "privacyGooglePolicy": "Kebijakan Privasi Google", + "privacySection5Title": "5. Sinkronisasi Cloud (Opsional)", + "privacySection5Text": "Jika Anda mengaktifkan fitur sinkronisasi cloud opsional, konfigurasi penyedia dan kunci API dapat dikirimkan ke titik akhir cloud yang dikonfigurasi. Fitur ini dinonaktifkan secara default dan memerlukan keikutsertaan yang jelas.", + "privacySection6Title": "6. Pencatatan", + "privacyLoggingIntro": "Log permintaan dapat dikonfigurasi melalui pengaturan dasbor. Anda dapat:", + "privacySection7Title": "7. Hak Anda", + "privacySection7TextStart": "Karena semua data disimpan secara lokal, Anda memiliki kendali penuh. Anda dapat menghapus data Anda kapan saja dengan menghapusnya", + "privacySection7TextEnd": "direktori atau menggunakan fitur pencadangan dan pemulihan basis data di dasbor.", + "termsSection1Title": "1. Ikhtisar", + "termsSection1Text": "OmniRoute adalah router proksi AI API lokal pertama yang beroperasi sepenuhnya di mesin Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.", + "termsSection2Title": "2. Tanggung Jawab Pengguna", + "termsResponsibilityApiKeys": "Anda sepenuhnya bertanggung jawab untuk mengelola kunci API dan kredensial Anda sendiri untuk penyedia AI pihak ketiga (OpenAI, Anthropic, Google, dll.).", + "termsResponsibilityCompliance": "Anda harus mematuhi persyaratan layanan setiap penyedia AI yang API-nya Anda akses melalui OmniRoute.", + "termsResponsibilitySecurity": "Anda bertanggung jawab atas keamanan instalasi OmniRoute lokal Anda, termasuk mengatur kata sandi dan membatasi akses jaringan.", + "termsSection3Title": "3. Cara Kerjanya", + "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dikirim ke OmniRoute diterjemahkan dan diteruskan ke penyedia AI Anda yang dikonfigurasi. OmniRoute tidak mengubah konten permintaan atau tanggapan Anda di luar terjemahan protokol yang diperlukan.", + "termsSection4Title": "4. Penanganan Data", + "termsDataStoredLocally": "Semua data disimpan secara lokal di mesin Anda dalam database SQLite.", + "termsNoTransmission": "OmniRoute tidak mengirimkan data apa pun ke server eksternal kecuali Anda secara eksplisit mengaktifkan fitur sinkronisasi cloud.", + "termsDataLocationText": "Log penggunaan, kunci API, dan konfigurasi disimpan di", + "termsSection5Title": "5. Penafian", + "termsSection5Text": "OmniRoute disediakan \"sebagaimana adanya\" tanpa jaminan apa pun. Kami tidak bertanggung jawab atas segala biaya yang timbul akibat penggunaan API, gangguan layanan, atau kehilangan data. Selalu simpan cadangan konfigurasi Anda.", + "termsSection6Title": "6. Sumber Terbuka", + "termsSection6Text": "OmniRoute adalah perangkat lunak sumber terbuka. Anda bebas memeriksa, memodifikasi, dan mendistribusikannya berdasarkan ketentuan lisensinya." + } +} diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json new file mode 100644 index 0000000000..becd96521a --- /dev/null +++ b/src/i18n/messages/in.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "सहेजें", + "cancel": "रद्द करें", + "delete": "हटाएँ", + "loading": "लोड हो रहा है...", + "error": "एक त्रुटि हुई", + "success": "सफलता", + "confirm": "क्या आप निश्चित हैं?", + "refresh": "ताज़ा करें", + "close": "बंद करें", + "add": "जोड़ें", + "edit": "संपादित करें", + "search": "खोजें", + "back": "वापस", + "next": "अगला", + "submit": "सबमिट करें", + "reset": "रीसेट करें", + "copy": "प्रतिलिपि", + "copied": "नकल की गई!", + "enabled": "सक्षम", + "disabled": "विकलांग", + "active": "सक्रिय", + "inactive": "निष्क्रिय", + "noData": "कोई डेटा उपलब्ध नहीं है", + "configure": "कॉन्फ़िगर करें", + "manage": "प्रबंधित करें", + "name": "नाम", + "actions": "क्रियाएँ", + "status": "स्थिति", + "type": "प्रकार", + "model": "मॉडल", + "models": "मॉडल", + "provider": "प्रदाता", + "account": "खाता", + "time": "समय", + "details": "विवरण", + "created": "बनाया गया", + "lastUsed": "अंतिम बार उपयोग किया गया", + "loadMore": "अधिक लोड करें", + "noResults": "कोई परिणाम नहीं मिला", + "reloadPage": "पृष्ठ पुनः लोड करें", + "connected": "जुड़ा हुआ", + "disconnected": "विच्छेदित", + "notConfigured": "कॉन्फ़िगर नहीं किया गया", + "testConnection": "परीक्षण कनेक्शन", + "enable": "सक्षम करें", + "disable": "अक्षम करें", + "columns": "कॉलम", + "newest": "नवीनतम", + "oldest": "सबसे पुराना", + "all": "सब", + "none": "कोई नहीं", + "yes": "हाँ", + "no": "नहीं", + "warning": "चेतावनी", + "note": "नोट", + "free": "निःशुल्क", + "skipToContent": "सामग्री पर जाएं" + }, + "sidebar": { + "home": "घर", + "dashboard": "डैशबोर्ड", + "providers": "प्रदाता", + "combos": "संयोजन", + "usage": "उपयोग", + "analytics": "विश्लेषिकी", + "costs": "लागत", + "health": "स्वास्थ्य", + "limits": "सीमाएँ और कोटा", + "cliTools": "सीएलआई उपकरण", + "settings": "सेटिंग्स", + "translator": "अनुवादक", + "docs": "दस्तावेज़", + "issues": "मुद्दे", + "endpoint": "समापन बिंदु", + "apiManager": "एपीआई प्रबंधक", + "logs": "लॉग", + "auditLog": "ऑडिट लॉग", + "shutdown": "बंद", + "restart": "पुनः प्रारंभ करें", + "shutdownConfirm": "ओम्निरूट बंद करें?", + "restartConfirm": "ओम्निरूट पुनः आरंभ करें?", + "version": "v{version}", + "debug": "डीबग करें", + "system": "सिस्टम", + "help": "मदद", + "serverDisconnected": "सर्वर डिसकनेक्ट हो गया", + "serverDisconnectedMsg": "प्रॉक्सी सर्वर बंद कर दिया गया है या पुनः प्रारंभ हो रहा है।", + "expandSidebar": "साइडबार का विस्तार करें", + "collapseSidebar": "साइडबार को संक्षिप्त करें" + }, + "header": { + "logout": "लॉगआउट करें", + "language": "भाषा", + "providers": "प्रदाता", + "providerDescription": "अपने AI प्रदाता कनेक्शन प्रबंधित करें", + "combos": "संयोजन", + "comboDescription": "फ़ॉलबैक के साथ मॉडल संयोजन", + "usage": "उपयोग एवं विश्लेषिकी", + "usageDescription": "अपने एपीआई उपयोग, टोकन खपत और अनुरोध लॉग की निगरानी करें", + "analytics": "विश्लेषिकी", + "analyticsDescription": "चार्ट, रुझान और मूल्यांकन अंतर्दृष्टि", + "cliTools": "सीएलआई उपकरण", + "cliToolsDescription": "सीएलआई उपकरण कॉन्फ़िगर करें", + "home": "घर", + "homeDescription": "ओमनीरूट में आपका स्वागत है", + "endpoint": "समापन बिंदु", + "endpointDescription": "एपीआई समापन बिंदु विन्यास", + "settings": "सेटिंग्स", + "settingsDescription": "अपनी प्राथमिकताएँ प्रबंधित करें", + "openaiCompatible": "ओपनएआई संगत", + "anthropicCompatible": "एंथ्रोपिक संगत" + }, + "home": { + "quickStart": "त्वरित शुरुआत", + "quickStartDesc": "4 चरणों में उठें और दौड़ें। प्रदाताओं को कनेक्ट करें, मॉडल रूट करें, हर चीज़ की निगरानी करें।", + "fullDocs": "पूर्ण दस्तावेज़", + "step1Title": "1. एपीआई कुंजी बनाएं", + "step1Desc": "Endpoint -> पंजीकृत कुंजियाँ पर जाएँ। प्रति परिवेश एक कुंजी उत्पन्न करें.", + "step2Title": "2. प्रदाताओं को कनेक्ट करें", + "step2Desc": "प्रदाताओं में खाते जोड़ें। OAuth, API कुंजी और निःशुल्क स्तरों का समर्थन करता है।", + "step3Title": "3. अपने ग्राहक को इंगित करें", + "step3Desc": "अपने IDE या API क्लाइंट में बेस URL को {url} पर सेट करें।", + "step4Title": "4. मॉनिटर और ऑप्टिमाइज़ करें", + "step4Desc": "अनुरोध लॉग्स और Analytics में टोकन, लागत और त्रुटियों को ट्रैक करें।", + "providersOverview": "प्रदाताओं का अवलोकन", + "configuredOf": "{configured} {total} उपलब्ध प्रदाताओं में से कॉन्फ़िगर किया गया", + "noModelsAvailable": "इस प्रदाता के लिए कोई मॉडल उपलब्ध नहीं है.", + "configureFirst": "पहले {providers} में एक कनेक्शन कॉन्फ़िगर करें", + "configureProvider": "प्रदाता को कॉन्फ़िगर करें", + "modelAvailable": "{count} मॉडल उपलब्ध है", + "modelsAvailable": "{count} मॉडल उपलब्ध हैं", + "connectionsActive": "{count} कनेक्शन सक्रिय", + "connectionsActivePlural": "{count} कनेक्शन सक्रिय", + "copyModelName": "मॉडल का नाम कॉपी करें", + "documentation": "दस्तावेज़ीकरण", + "healthMonitor": "स्वास्थ्य मॉनिटर", + "reportIssue": "रिपोर्ट मुद्दा", + "activeError": "{active} सक्रिय · {errors} त्रुटि", + "oauthLabel": "OAuth", + "apiKeyLabel": "एपीआई कुंजी", + "requestsShort": "{count} अनुरोध", + "providerModelsTitle": "{provider} - मॉडल", + "copiedModel": "कॉपी किया गया: {model}", + "aliasLabel": "उपनाम" + }, + "analytics": { + "title": "विश्लेषिकी", + "overviewDescription": "सभी प्रदाताओं और मॉडलों में अपने एपीआई उपयोग पैटर्न, टोकन खपत, लागत और गतिविधि रुझान की निगरानी करें।", + "evalsDescription": "अपने एलएलएम समापन बिंदुओं का परीक्षण और सत्यापन करने के लिए मूल्यांकन सुइट चलाएँ। मॉडल गुणवत्ता की तुलना करें, प्रतिगमन और बेंचमार्क विलंबता का पता लगाएं।", + "overview": "सिंहावलोकन", + "evals": "एवल्स" + }, + "apiManager": { + "title": "एपीआई कुंजी", + "createKey": "एपीआई कुंजी बनाएं", + "key": "कुंजी", + "revokeKey": "कुंजी निरस्त करें", + "revokeConfirm": "क्या आप वाकई इस एपीआई कुंजी को निरस्त करना चाहते हैं?", + "noKeys": "अभी तक कोई API कुंजी नहीं है", + "noKeysDesc": "अपने एंडपॉइंट पर अनुरोधों को प्रमाणित करने के लिए अपनी पहली एपीआई कुंजी बनाएं", + "keyLabel": "कुंजी लेबल", + "permissions": "अनुमतियाँ", + "expiresAt": "समाप्त हो रहा है", + "never": "कभी नहीं", + "revoke": "निरस्त करें", + "showKey": "कुंजी दिखाएँ", + "hideKey": "कुंजी छिपाएँ", + "copyKey": "एपीआई कुंजी कॉपी करें", + "allModels": "सभी मॉडल", + "selectedModels": "चयनित मॉडल", + "readOnly": "केवल पढ़ने के लिए", + "fullAccess": "पूर्ण प्रवेश", + "keyManagement": "एपीआई कुंजी प्रबंधन", + "keyManagementDesc": "अपने एंडपॉइंट पर अनुरोधों को प्रमाणित करने के लिए एपीआई कुंजियाँ बनाएं और प्रबंधित करें", + "totalKeys": "कुल कुंजियाँ", + "restricted": "प्रतिबंधित", + "totalRequests": "कुल अनुरोध", + "modelsAvailable": "मॉडल उपलब्ध हैं", + "registeredKeys": "पंजीकृत कुंजियाँ", + "keysRegistered": "{count} कुंजियाँ पंजीकृत", + "keyRegistered": "{count} कुंजी पंजीकृत", + "keysSecurityNote": "प्रत्येक कुंजी उपयोग ट्रैकिंग को अलग करती है और इसे स्वतंत्र रूप से निरस्त किया जा सकता है। सुरक्षा के लिए निर्माण के बाद कुंजियाँ छिपा दी जाती हैं।", + "createFirstKey": "अपनी पहली कुंजी बनाएं", + "name": "नाम", + "usage": "उपयोग", + "created": "बनाया गया", + "actions": "क्रियाएँ", + "reqs": "अनुरोध", + "neverUsed": "कभी उपयोग नहीं किया गया", + "deleteConfirm": "यह API कुंजी हटाएँ?", + "usageTips": "उपयोग युक्तियाँ", + "tipAuth": "प्राधिकरण शीर्षलेख में बियरर Your_KEY के रूप में एपीआई कुंजियों का उपयोग करें", + "tipSecure": "निर्माण के दौरान कुंजियाँ केवल एक बार दिखाई जाती हैं - उन्हें सुरक्षित रूप से संग्रहीत करें", + "tipSeparate": "विभिन्न ग्राहकों या परिवेशों के लिए अलग-अलग कुंजियाँ बनाएँ", + "tipRestrict": "बेहतर सुरक्षा और लागत नियंत्रण के लिए कुंजियों को विशिष्ट मॉडलों तक सीमित रखें", + "keyName": "कुंजी का नाम", + "keyNamePlaceholder": "उदाहरण के लिए, उत्पादन कुंजी, विकास कुंजी", + "keyNameDesc": "इस कुंजी के उद्देश्य को पहचानने के लिए एक वर्णनात्मक नाम चुनें", + "keyCreated": "एपीआई कुंजी बनाई गई", + "keyCreatedSuccess": "कुंजी सफलतापूर्वक बनाई गई!", + "keyCreatedNote": "इस कुंजी को अभी कॉपी करें और संग्रहीत करें - इसे दोबारा नहीं दिखाया जाएगा।", + "done": "हो गया", + "savePermissions": "अनुमतियाँ सहेजें", + "allowAll": "सभी को अनुमति दें", + "restrict": "प्रतिबंधित करें", + "allowAllInfo": "यह कुंजी सभी उपलब्ध मॉडलों तक पहुंच सकती है.", + "restrictInfo": "यह कुंजी {total} मॉडलों में से {selected} तक पहुंच सकती है।", + "selected": "{count} चयनित", + "all": "सब", + "clear": "स्पष्ट", + "searchModels": "नाम या प्रदाता के आधार पर मॉडल खोजें...", + "noModelsFound": "कोई मॉडल नहीं मिला", + "keyNameRequired": "कुंजी नाम आवश्यक है", + "keyNameTooLong": "कुंजी नाम {max} वर्ण या उससे कम होना चाहिए", + "keyNameInvalid": "कुंजी नाम में केवल अक्षर, संख्याएँ, रिक्त स्थान, हाइफ़न और अंडरस्कोर हो सकते हैं", + "invalidKeyName": "अमान्य कुंजी नाम", + "failedCreateKey": "कुंजी बनाने में विफल", + "failedCreateKeyRetry": "कुंजी बनाने में विफल. कृपया पुन: प्रयास करें।", + "invalidKeyId": "अमान्य कुंजी आईडी", + "failedDeleteKey": "कुंजी हटाने में विफल", + "failedDeleteKeyRetry": "कुंजी हटाने में विफल. कृपया पुन: प्रयास करें।", + "invalidModelsSelection": "अमान्य मॉडल चयन", + "cannotSelectMoreThanModels": "{max} से अधिक मॉडल का चयन नहीं किया जा सकता", + "failedUpdatePermissions": "अनुमतियाँ अद्यतन करने में विफल", + "failedUpdatePermissionsRetry": "अनुमतियाँ अद्यतन करने में विफल. कृपया पुन: प्रयास करें।", + "unknownProvider": "अज्ञात", + "copyMaskedKey": "नकाबपोश कुंजी की प्रतिलिपि बनाएँ", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "अंतिम: {date}", + "editPermissions": "अनुमतियाँ संपादित करें", + "deleteKey": "कुंजी हटाएँ", + "model": "{count} मॉडल", + "models": "{count} मॉडल", + "permissionsTitle": "अनुमतियाँ: {name}", + "allowAllDesc": "यह कुंजी सभी उपलब्ध मॉडलों तक पहुंच सकती है.", + "restrictDesc": "यह कुंजी {totalModels} मॉडलों में से {selectedCount} तक पहुंच सकती है।", + "selectedCount": "{count} चयनित" + }, + "auditLog": { + "title": "ऑडिट लॉग", + "searchPlaceholder": "खोज क्रियाएँ...", + "action": "कार्रवाई", + "actor": "अभिनेता", + "target": "लक्ष्य", + "ipAddress": "आईपी पता", + "timestamp": "टाइमस्टैम्प", + "noEntries": "कोई ऑडिट प्रविष्टियाँ नहीं मिलीं", + "filterByAction": "क्रिया के अनुसार फ़िल्टर करें...", + "filterByActor": "अभिनेता द्वारा फ़िल्टर करें...", + "filterEntriesAria": "ऑडिट लॉग प्रविष्टियाँ फ़िल्टर करें", + "filterByActionTypeAria": "क्रिया प्रकार के अनुसार फ़िल्टर करें", + "filterByActorAria": "अभिनेता द्वारा फ़िल्टर करें", + "refreshAuditLogAria": "ऑडिट लॉग ताज़ा करें", + "tableAria": "ऑडिट लॉग प्रविष्टियाँ", + "failedFetchAuditLog": "ऑडिट लॉग लाने में विफल", + "notAvailable": "—", + "description": "प्रशासनिक कार्रवाई और सुरक्षा घटनाएँ", + "showing": "{count} प्रविष्टियाँ दिखाई जा रही हैं (ऑफ़सेट {offset})", + "previous": "पिछला" + }, + "cliTools": { + "title": "सीएलआई उपकरण", + "noActiveProviders": "कोई सक्रिय प्रदाता नहीं", + "noActiveProvidersDesc": "कृपया सीएलआई टूल कॉन्फ़िगर करने के लिए पहले प्रदाताओं को जोड़ें और कनेक्ट करें।", + "mapModels": "मानचित्र मॉडल", + "testConnection": "परीक्षण कनेक्शन", + "connectionStatus": "कनेक्शन स्थिति", + "configureEndpoint": "समापनबिंदु कॉन्फ़िगर करें", + "instructions": "अनुदेश", + "modelMapping": "मॉडल मानचित्रण", + "baseUrl": "आधार यूआरएल", + "apiKey": "एपीआई कुंजी", + "configured": "विन्यस्त", + "notConfigured": "कॉन्फ़िगर नहीं किया गया", + "notInstalled": "स्थापित नहीं", + "custom": "कस्टम", + "unknown": "अज्ञात", + "lastSavedAt": "अंतिम बार सहेजा गया: {date}", + "never": "कभी नहीं", + "justNow": "अभी अभी", + "minutesAgoShort": "{count}m पहले", + "hoursAgoShort": "{count}h पहले", + "daysAgoShort": "{count}दिन पहले", + "monthsAgoShort": "{count}महीने पहले", + "yearsAgoShort": "{count}वर्ष पहले", + "runtimeCheckFailed": "रनटाइम जांच विफल रही", + "yourApiKeyPlaceholder": "आपकी-एपीआई-कुंजी", + "modelPlaceholder": "प्रदाता/मॉडल-आईडी", + "configurationSaved": "कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया.", + "failedToSave": "कॉन्फ़िगरेशन सहेजने में विफल.", + "noApiKeysCreateOne": "कोई एपीआई कुंजी नहीं - कुंजी पृष्ठ में एक बनाएं", + "defaultOmnirouteKey": "sk_omniroute (डिफ़ॉल्ट)", + "selectModel": "मॉडल का चयन करें", + "selectModelForAlias": "{alias} के लिए मॉडल चुनें", + "selectModelForTool": "{tool} के लिए मॉडल चुनें", + "select": "चयन करें", + "clear": "स्पष्ट", + "comingSoon": "जल्द आ रहा है", + "checkingRuntime": "रनटाइम स्थिति की जाँच की जा रही है...", + "guideOnlyIntegration": "केवल गाइड एकीकरण (कोई स्थानीय रनटाइम आवश्यक नहीं)", + "cliRuntimeDetected": "सीएलआई रनटाइम का पता चला और तैयार है", + "cliFoundNotRunnable": "सीएलआई मिला लेकिन चलाने योग्य नहीं{reason}", + "cliRuntimeNotDetected": "सीएलआई रनटाइम का पता नहीं चला", + "binary": "बाइनरी", + "configPath": "कॉन्फ़िग पथ", + "configPathShort": "कॉन्फिग", + "failedCheckRuntimeStatus": "रनटाइम स्थिति जांचने में विफल.", + "copy": "प्रतिलिपि", + "copied": "नकल की गई", + "copyConfig": "कॉन्फ़िग कॉपी करें", + "saveConfig": "कॉन्फ़िगरेशन सहेजें", + "selectionSaved": "चयन सहेजा गया", + "guide": "मार्गदर्शक", + "detected": "पता चला", + "notReady": "तैयार नहीं", + "active": "सक्रिय", + "inactive": "निष्क्रिय", + "startMitm": "एमआईटीएम प्रारंभ करें", + "stopMitm": "एमआईटीएम बंद करो", + "mitmStarted": "एमआईटीएम सफलतापूर्वक शुरू हुआ!", + "mitmStopped": "एमआईटीएम सफलतापूर्वक बंद हो गया!", + "failedStart": "एमआईटीएम प्रारंभ करने में विफल", + "failedStop": "एमआईटीएम को रोकने में विफल", + "saveMappings": "मैपिंग सहेजें", + "mappingsSaved": "मैपिंग सहेजी गई!", + "failedSaveMappings": "मैपिंग सहेजने में विफल", + "howItWorks": "यह कैसे काम करता है:", + "antigravityHowWorksDesc": "एंटीग्रेविटी Google के एंडपॉइंट पर अनुरोध भेजती है। एमआईटीएम उन्हें रोकता है और ओमनीरूट पर पुनर्निर्देशित करता है।", + "antigravityStep1": "1. ओमनीरूट के माध्यम से अनुरोधों को रूट करने के लिए एमआईटीएम प्रारंभ करें।", + "antigravityStep2Prefix": "2. जोड़ें", + "antigravityStep2Suffix": "आपकी होस्ट फ़ाइल में 127.0.0.1 के रूप में।", + "antigravityStep3": "3. एंटीग्रेविटी खोलें और अनुरोधों को प्रॉक्सी किया जाएगा।", + "sudoPasswordRequiredTitle": "सूडो पासवर्ड आवश्यक", + "sudoPasswordHint": "होस्ट फ़ाइल और सिस्टम प्रॉक्सी सेटिंग्स को संशोधित करने के लिए प्रशासक पासवर्ड की आवश्यकता होती है।", + "enterSudoPassword": "सूडो पासवर्ड डालें", + "sudoPasswordRequiredError": "सूडो पासवर्ड आवश्यक है.", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "settingsApplied": "सेटिंग्स सफलतापूर्वक लागू हो गईं!", + "failedApplySettings": "सेटिंग लागू करने में विफल", + "settingsReset": "सेटिंग्स सफलतापूर्वक रीसेट हो गईं!", + "failedResetSettings": "सेटिंग्स रीसेट करने में विफल", + "backupRestored": "बैकअप बहाल!", + "failedRestore": "पुनर्स्थापित करने में विफल", + "checkingCli": "{tool} CLI की जाँच हो रही है...", + "cliNotRunnable": "{tool} सीएलआई स्थापित है लेकिन चलाने योग्य नहीं है", + "cliNotInstalled": "{tool} सीएलआई स्थापित नहीं है", + "cliNotDetected": "{tool} सीएलआई का पता नहीं चला", + "cliDetectedReady": "{tool} सीएलआई का पता चला और तैयार है", + "cliFoundFailedHealthcheck": "{tool} CLI पाया गया लेकिन रनटाइम स्वास्थ्य जांच विफल रही{reason}।", + "installCliPrompt": "कृपया इस सुविधा का उपयोग करने के लिए {tool} CLI इंस्टॉल करें।", + "installCodexPrompt": "स्वत: लागू सुविधा का उपयोग करने के लिए कृपया कोडेक्स सीएलआई स्थापित करें।", + "hide": "छिपाओ", + "howToInstall": "कैसे स्थापित करें", + "installationGuide": "इंस्टालेशन गाइड", + "platforms": "मैकओएस/लिनक्स/विंडोज़:", + "afterInstallationRun": "इंस्टालेशन के बाद रन करें", + "toVerify": "सत्यापित करना.", + "current": "वर्तमान", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "डिफ़ॉल्ट पर रीसेट करें", + "providerModelPlaceholder": "प्रदाता/मॉडल-आईडी", + "apply": "आवेदन करें", + "reset": "रीसेट करें", + "manualConfig": "मैनुअल कॉन्फिग", + "backups": "बैकअप", + "configBackups": "कॉन्फ़िग बैकअप", + "noBackupsYet": "अभी तक कोई बैकअप नहीं है. प्रत्येक लागू या रीसेट से पहले बैकअप स्वचालित रूप से बनाए जाते हैं।", + "restore": "पुनर्स्थापित करें", + "backupRestoredReloading": "बैकअप बहाल! स्थिति पुनः लोड हो रही है...", + "failedRestoreBackup": "बैकअप पुनर्स्थापित करने में विफल", + "applied": "लागू!", + "failed": "असफल", + "resetDone": "रीसेट करें!", + "omnirouteConfiguredOpenAiCompatible": "ओम्निरूट को OpenAI-संगत प्रदाता के रूप में कॉन्फ़िगर किया गया है", + "provider": "प्रदाता", + "model": "मॉडल", + "providers": "प्रदाता", + "auth": "प्रामाणिक", + "noApiKeysAvailable": "कोई API कुंजी उपलब्ध नहीं है", + "usingDefaultOmniroute": "डिफ़ॉल्ट का उपयोग करना: sk_omniroute", + "updateConfig": "कॉन्फ़िगरेशन अद्यतन करें", + "applyConfig": "कॉन्फ़िगरेशन लागू करें", + "noBackupsAvailable": "कोई बैकअप उपलब्ध नहीं है.", + "profileSaved": "प्रोफ़ाइल \"{name}\" सहेजी गई!", + "failedSaveProfile": "प्रोफ़ाइल सहेजने में विफल", + "profileActivated": "प्रोफ़ाइल सक्रिय!", + "failedActivateProfile": "प्रोफ़ाइल सक्रिय करने में विफल", + "profiles": "प्रोफाइल", + "savedProfiles": "सहेजे गए प्रोफ़ाइल", + "noProfilesYet": "अभी तक कोई प्रोफ़ाइल सहेजी नहीं गई. वर्तमान कॉन्फ़िगरेशन को नीचे प्रोफ़ाइल के रूप में सहेजें।", + "activate": "सक्रिय करें", + "deleteProfile": "प्रोफ़ाइल हटाएँ", + "profileNamePlaceholder": "प्रोफ़ाइल नाम (जैसे व्यक्तिगत खाता)", + "saveCurrent": "वर्तमान सहेजें", + "codexAuthNotePrefix": "कोडेक्स का उपयोग करता है", + "codexAuthNoteMiddle": "के साथ", + "codexAuthNoteSuffix": "स्वतः कॉन्फ़िगर करने के लिए \"लागू करें\" पर क्लिक करें।", + "claudeManualConfiguration": "क्लाउड सीएलआई - मैनुअल कॉन्फ़िगरेशन", + "codexManualConfiguration": "कोडेक्स सीएलआई - मैनुअल कॉन्फ़िगरेशन", + "droidManualConfiguration": "फ़ैक्टरी Droid - मैनुअल कॉन्फ़िगरेशन", + "openClawManualConfiguration": "खुला पंजा - मैनुअल कॉन्फ़िगरेशन", + "clineManualConfiguration": "क्लाइन मैनुअल कॉन्फ़िगरेशन", + "kiloManualConfiguration": "किलो कोड मैनुअल कॉन्फ़िगरेशन", + "toolDescriptions": { + "antigravity": "एमआईटीएम के साथ गूगल एंटीग्रेविटी आईडीई", + "claude": "एंथ्रोपिक क्लाउड कोड सीएलआई", + "codex": "ओपनएआई कोडेक्स सीएलआई", + "droid": "फ़ैक्टरी Droid AI सहायक", + "openclaw": "क्लॉ एआई असिस्टेंट खोलें", + "cline": "क्लाइन एआई कोडिंग सहायक सीएलआई", + "kilo": "किलो कोड एआई असिस्टेंट सीएलआई", + "cursor": "कर्सर एआई कोड संपादक", + "continue": "एआई असिस्टेंट जारी रखें" + }, + "guides": { + "cursor": { + "notes": { + "0": "इस सुविधा का उपयोग करने के लिए कर्सर प्रो खाते की आवश्यकता है।", + "1": "कर्सर अपने स्वयं के सर्वर के माध्यम से अनुरोधों को रूट करता है, इसलिए स्थानीय समापन बिंदु समर्थित नहीं है। कृपया सेटिंग्स में क्लाउड एंडपॉइंट सक्षम करें।" + }, + "steps": { + "1": { + "title": "सेटिंग्स खोलें", + "desc": "सेटिंग्स -> मॉडल पर जाएं" + }, + "2": { + "title": "OpenAI API सक्षम करें", + "desc": "\"ओपनएआई एपीआई कुंजी\" विकल्प सक्षम करें" + }, + "3": { + "title": "आधार यूआरएल" + }, + "4": { + "title": "एपीआई कुंजी" + }, + "5": { + "title": "कस्टम मॉडल जोड़ें", + "desc": "\"सभी मॉडल देखें\" -> \"कस्टम मॉडल जोड़ें\" पर क्लिक करें" + }, + "6": { + "title": "मॉडल का चयन करें" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "कॉन्फ़िगरेशन खोलें", + "desc": "जारी रखें कॉन्फ़िगरेशन फ़ाइल खोलें" + }, + "2": { + "title": "एपीआई कुंजी" + }, + "3": { + "title": "मॉडल का चयन करें" + }, + "4": { + "title": "मॉडल कॉन्फ़िगरेशन जोड़ें", + "desc": "अपने मॉडल सरणी में निम्नलिखित कॉन्फ़िगरेशन जोड़ें:" + } + } + } + } + }, + "combos": { + "title": "संयोजन", + "description": "भारित रूटिंग और फ़ॉलबैक समर्थन के साथ मॉडल कॉम्बो बनाएं", + "createCombo": "कॉम्बो बनाएं", + "editCombo": "कॉम्बो संपादित करें", + "deleteCombo": "कॉम्बो हटाएँ", + "noModels": "कोई मॉडल नहीं", + "noModelsYet": "अभी तक कोई मॉडल नहीं जोड़ा गया", + "addModel": "मॉडल जोड़ें", + "addModelToCombo": "कॉम्बो में मॉडल जोड़ें", + "routingStrategy": "रूटिंग रणनीति", + "maxRetries": "अधिकतम पुनर्प्रयास", + "timeout": "टाइमआउट (एमएस)", + "healthcheck": "स्वास्थ्य जांच", + "priority": "प्राथमिकता", + "fallback": "फ़ॉलबैक", + "roundRobin": "राउंड रोबिन", + "random": "यादृच्छिक", + "leastLatency": "न्यूनतम विलंबता", + "comboName": "कॉम्बो नाम", + "comboNamePlaceholder": "मेरा-कॉम्बो", + "deleteConfirm": "यह कॉम्बो हटाएं?", + "noCombosYet": "अभी तक कोई कॉम्बो नहीं", + "comboCreated": "कॉम्बो सफलतापूर्वक बनाया गया", + "comboUpdated": "कॉम्बो सफलतापूर्वक अपडेट किया गया", + "comboDeleted": "कॉम्बो हटा दिया गया", + "failedCreate": "कॉम्बो बनाने में विफल", + "failedUpdate": "कॉम्बो अपडेट करने में विफल", + "errorCreating": "कॉम्बो बनाने में त्रुटि", + "errorUpdating": "कॉम्बो अपडेट करने में त्रुटि", + "errorDeleting": "कॉम्बो हटाने में त्रुटि", + "testFailed": "परीक्षण अनुरोध विफल रहा", + "failedToggle": "कॉम्बो टॉगल करने में विफल", + "testResults": "परीक्षा परिणाम — {name}", + "resolvedBy": "द्वारा हल किया गया:", + "more": "+{count} और अधिक", + "reqs": "अनुरोध", + "success": "सफलता", + "proxyConfigured": "प्रॉक्सी कॉन्फ़िगर किया गया", + "copyComboName": "कॉम्बो नाम कॉपी करें", + "enableCombo": "कॉम्बो सक्षम करें", + "disableCombo": "कॉम्बो अक्षम करें", + "testCombo": "कॉम्बो का परीक्षण करें", + "duplicate": "डुप्लिकेट", + "proxyConfig": "प्रॉक्सी कॉन्फ़िगरेशन", + "nameRequired": "नाम आवश्यक है", + "nameInvalid": "केवल अक्षर, संख्याएँ, -, _, / और। अनुमति", + "nameHint": "अक्षर, अंक, -, _, / और। अनुमति", + "priorityDesc": "अनुक्रमिक फ़ॉलबैक: पहले मॉडल 1 आज़माता है, फिर 2, आदि।", + "weightedDesc": "फ़ॉलबैक के साथ ट्रैफ़िक को भार प्रतिशत के आधार पर वितरित करता है", + "roundRobinDesc": "परिपत्र वितरण: प्रत्येक अनुरोध रोटेशन में अगले मॉडल पर जाता है", + "randomDesc": "समान यादृच्छिक चयन, फिर शेष मॉडलों पर वापस लौटना", + "leastUsedDesc": "समय के साथ लोड को संतुलित करते हुए, सबसे कम अनुरोधों वाला मॉडल चुनता है", + "costOptimizedDesc": "मूल्य निर्धारण के आधार पर सबसे पहले सबसे सस्ते मॉडल पर रूट करें", + "models": "मॉडल", + "autoBalance": "स्वत: संतुलन", + "advancedSettings": "उन्नत सेटिंग्स", + "retryDelay": "पुनः प्रयास विलंब (एमएस)", + "concurrencyPerModel": "समवर्ती/मॉडल", + "queueTimeout": "कतार समय समाप्ति (एमएस)", + "advancedHint": "वैश्विक डिफ़ॉल्ट का उपयोग करने के लिए खाली छोड़ें। ये प्रति-प्रदाता सेटिंग्स को ओवरराइड करते हैं।", + "moveUp": "ऊपर बढ़ो", + "moveDown": "नीचे जाएँ", + "removeModel": "हटाओ", + "saving": "सहेजा जा रहा है...", + "weighted": "भारित", + "leastUsed": "सबसे कम इस्तेमाल किया गया", + "costOpt": "लागत-विकल्प" + }, + "costs": { + "title": "लागत", + "budget": "बजट", + "totalCost": "कुल लागत", + "breakdown": "लागत विच्छेदन", + "noData": "कोई लागत डेटा नहीं", + "byModel": "मॉडल द्वारा", + "byProvider": "प्रदाता द्वारा" + }, + "endpoint": { + "title": "एपीआई समापन बिंदु", + "available": "उपलब्ध समापनबिंदु", + "cloudProxy": "क्लाउड प्रॉक्सी", + "disableConfirm": "क्या आप वाकई क्लाउड प्रॉक्सी को अक्षम करना चाहते हैं?", + "baseUrl": "आधार यूआरएल", + "apiKeyLabel": "एपीआई कुंजी", + "registeredKeys": "पंजीकृत कुंजियाँ", + "chatCompletions": "चैट समापन", + "responses": "प्रतिक्रियाएँ", + "listModels": "मॉडलों की सूची बनाएं", + "usingCloudProxy": "क्लाउड प्रॉक्सी का उपयोग करना", + "usingLocalServer": "स्थानीय सर्वर का उपयोग करना", + "machineId": "मशीन आईडी: {id}...", + "disableCloud": "बादल अक्षम करें", + "enableCloud": "क्लाउड सक्षम करें", + "modelsAcrossEndpoints": "{models} मॉडल {endpoints} समापन बिंदु पर", + "chatDesc": "सभी प्रदाताओं के साथ स्ट्रीमिंग और गैर-स्ट्रीमिंग चैट", + "embeddings": "एंबेडिंग", + "embeddingsDesc": "खोज और RAG पाइपलाइनों के लिए टेक्स्ट एम्बेडिंग", + "imageGeneration": "छवि निर्माण", + "imageDesc": "टेक्स्ट प्रॉम्प्ट से छवियाँ उत्पन्न करें", + "rerank": "पुनः रैंक करें", + "rerankDesc": "किसी क्वेरी की प्रासंगिकता के आधार पर दस्तावेज़ों को पुन: रैंक करें", + "audioTranscription": "ऑडियो ट्रांस्क्रिप्शन", + "audioTranscriptionDesc": "ऑडियो फ़ाइलों को टेक्स्ट में ट्रांसक्राइब करें (व्हिस्पर)", + "textToSpeech": "पाठ से वाक्", + "textToSpeechDesc": "पाठ को प्राकृतिक-ध्वनि वाले भाषण में बदलें", + "moderations": "संयम", + "moderationsDesc": "सामग्री मॉडरेशन और सुरक्षा वर्गीकरण", + "enableCloudTitle": "क्लाउड प्रॉक्सी सक्षम करें", + "whatYouGet": "तुम्हें क्या मिलेगा", + "cloudBenefitAccess": "दुनिया में कहीं से भी अपने एपीआई तक पहुंचें", + "cloudBenefitShare": "अपनी टीम के साथ आसानी से समापन बिंदु साझा करें", + "cloudBenefitPorts": "पोर्ट खोलने या फ़ायरवॉल कॉन्फ़िगर करने की कोई आवश्यकता नहीं है", + "cloudBenefitEdge": "तेज़ वैश्विक बढ़त नेटवर्क", + "cloudSessionNote": "क्लाउड आपके प्रमाणीकरण सत्र को 1 दिन तक रखेगा। यदि उपयोग नहीं किया गया तो यह स्वचालित रूप से हटा दिया जाएगा।", + "cloudUnstableNote": "क्लाउड वर्तमान में कुछ मामलों में क्लाउड कोड OAuth के साथ अस्थिर है।", + "cloudConnected": "क्लाउड प्रॉक्सी कनेक्ट!", + "connectingToCloud": "क्लाउड से कनेक्ट हो रहा है...", + "verifyingConnection": "कनेक्शन सत्यापित किया जा रहा है...", + "connecting": "कनेक्ट हो रहा है...", + "verifying": "सत्यापन किया जा रहा है...", + "connected": "जुड़ा हुआ!", + "disableCloudTitle": "क्लाउड प्रॉक्सी अक्षम करें", + "disableWarning": "सभी प्रमाणीकरण सत्र क्लाउड से हटा दिए जाएंगे.", + "syncingData": "नवीनतम डेटा समन्वयित किया जा रहा है...", + "disablingCloud": "क्लाउड को अक्षम किया जा रहा है...", + "syncing": "सिंक हो रहा है...", + "disabling": "अक्षम किया जा रहा है...", + "cloudConnectedVerified": "क्लाउड प्रॉक्सी कनेक्ट और सत्यापित!", + "connectedVerificationPending": "कनेक्टेड - सत्यापन लंबित है", + "connectedVerificationPendingWithError": "कनेक्टेड - सत्यापन लंबित: {error}", + "cloudDisabledSuccess": "क्लाउड सफलतापूर्वक अक्षम किया गया", + "syncedSuccess": "सफलतापूर्वक समन्वयित किया गया", + "failedDisable": "क्लाउड को अक्षम करने में विफल", + "failedEnable": "क्लाउड सक्षम करने में विफल", + "cloudRequestTimeout": "क्लाउड अनुरोध समयबाह्य", + "cloudRequestFailed": "क्लाउड अनुरोध विफल रहा", + "cloudWorkerUnreachable": "क्लाउड वर्कर तक नहीं पहुंच सका. सुनिश्चित करें कि क्लाउड सेवा चल रही है (npm run dev in /cloud)।", + "connectionFailed": "कनेक्शन विफल", + "syncFailed": "क्लाउड डेटा सिंक करने में विफल", + "providerModelsTitle": "{provider} - मॉडल", + "noModelsForProvider": "इस प्रदाता के लिए कोई मॉडल उपलब्ध नहीं है.", + "chat": "बातचीत", + "embedding": "एंबेडिंग", + "image": "छवि", + "custom": "कस्टम", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "सिस्टम स्वास्थ्य", + "description": "आपके ओम्निरूट उदाहरण की वास्तविक समय की निगरानी", + "healthy": "स्वस्थ", + "degraded": "अपमानित", + "down": "नीचे", + "uptime": "अपटाइम", + "memory": "स्मृति", + "memoryRss": "मेमोरी (आरएसएस)", + "heap": "ढेर", + "cpu": "सीपीयू", + "database": "डेटाबेस", + "version": "संस्करण", + "lastCheck": "अंतिम जाँच", + "providerHealth": "प्रदाता स्वास्थ्य", + "systemMetrics": "सिस्टम मेट्रिक्स", + "tokenHealth": "सांकेतिक स्वास्थ्य", + "refreshAll": "सभी को ताज़ा करें", + "checkNow": "अभी जांचें", + "loadingHealth": "स्वास्थ्य डेटा लोड हो रहा है...", + "failedToLoad": "स्वास्थ्य डेटा लोड करने में विफल: {error}", + "retry": "पुनः प्रयास करें", + "allOperational": "सभी प्रणालियाँ क्रियाशील", + "issuesDetected": "सिस्टम संबंधी समस्याओं का पता चला", + "updatedAt": "अपडेट किया गया {time}", + "latency": "विलंबता", + "latencyP50": "p50", + "latencyP95": "पी95", + "latencyP99": "पी99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "कुल अनुरोध", + "noDataYet": "अभी तक कोई डेटा नहीं", + "promptCache": "शीघ्र कैश", + "entries": "प्रविष्टियाँ", + "hitRate": "हिट दर", + "hitsMisses": "हिट/मिस", + "signatureCache": "हस्ताक्षर कैश", + "signatureDefaults": "डिफ़ॉल्ट", + "signatureTool": "औज़ार", + "signatureFamily": "परिवार", + "signatureSession": "सत्र", + "recovering": "ठीक हो रहा है", + "noCBData": "कोई सर्किट ब्रेकर डेटा उपलब्ध नहीं है. पहले कुछ अनुरोध करें.", + "providerHealthStatusAria": "प्रदाता स्वास्थ्य स्थिति", + "issuesLabel": "समस्याओं का पता लगाया गया", + "operational": "संचालनात्मक", + "providers": "प्रदाता", + "healthyCount": "{count} स्वस्थ", + "nodeVersion": "नोड {version}", + "failures": "{count} विफलता", + "failuresPlural": "{count} विफलताएँ", + "lastFailure": "अंतिम", + "rateLimitStatus": "दर सीमा स्थिति", + "activeLimiters": "{count} सक्रिय सीमक", + "activeLimitersPlural": "{count} सक्रिय सीमक", + "queued": "कतारबद्ध", + "queuedCount": "{count} पंक्तिबद्ध", + "running": "चल रहा है", + "runningCount": "{count} चल रहा है", + "ok": "ठीक है", + "activeLockouts": "सक्रिय तालाबंदी", + "resetConfirm": "सभी सर्किट ब्रेकरों को स्वस्थ स्थिति में रीसेट करें? यह सभी विफलताओं को साफ़ कर देगा और सभी प्रदाताओं को परिचालन स्थिति में बहाल कर देगा।", + "resetAllTitle": "सभी सर्किट ब्रेकरों को स्वस्थ स्थिति में रीसेट करें", + "resetting": "रीसेट किया जा रहा है...", + "resetAll": "सभी रीसेट करें", + "until": "{time} तक" + }, + "limits": { + "title": "सीमाएँ और कोटा", + "rateLimit": "दर सीमा", + "remaining": "शेष", + "requestsPerMinute": "अनुरोध/मिनट", + "tokensPerMinute": "टोकन/मिनट", + "dailyLimit": "दैनिक सीमा" + }, + "logs": { + "title": "लॉग", + "requestLogs": "लॉग का अनुरोध करें", + "proxyLogs": "प्रॉक्सी लॉग", + "auditLog": "ऑडिट लॉग", + "console": "सांत्वना", + "auditLogDesc": "प्रशासनिक कार्रवाई और सुरक्षा घटनाएँ", + "loading": "लोड हो रहा है...", + "refresh": "ताज़ा करें", + "filterByAction": "क्रिया के अनुसार फ़िल्टर करें...", + "filterByActor": "अभिनेता द्वारा फ़िल्टर करें...", + "filterEntriesAria": "ऑडिट लॉग प्रविष्टियाँ फ़िल्टर करें", + "filterByActionTypeAria": "क्रिया प्रकार के अनुसार फ़िल्टर करें", + "filterByActorAria": "अभिनेता द्वारा फ़िल्टर करें", + "refreshAuditLogAria": "ऑडिट लॉग ताज़ा करें", + "tableAria": "ऑडिट लॉग प्रविष्टियाँ", + "failedFetchAuditLog": "ऑडिट लॉग लाने में विफल", + "showing": "{count} प्रविष्टियाँ दिखाई जा रही हैं (ऑफ़सेट {offset})", + "search": "खोजें", + "timestamp": "टाइमस्टैम्प", + "action": "कार्रवाई", + "actor": "अभिनेता", + "target": "लक्ष्य", + "details": "विवरण", + "ipAddress": "आईपी पता", + "notAvailable": "—", + "noEntries": "कोई ऑडिट लॉग प्रविष्टियाँ नहीं मिलीं", + "previous": "पिछला", + "next": "अगला" + }, + "onboarding": { + "welcome": "स्वागत है", + "security": "सुरक्षा", + "test": "परीक्षण", + "ready": "तैयार!", + "setPassword": "पासवर्ड सेट करें", + "addProvider": "अपना पहला प्रदाता जोड़ें", + "getStarted": "आरंभ करें", + "skip": "छोड़ें", + "skipWizard": "विज़ार्ड को पूरी तरह छोड़ें", + "skipPassword": "पासवर्ड सेटअप छोड़ें", + "skipAndContinue": "छोड़ें और जारी रखें", + "passwordLabel": "पासवर्ड", + "confirmPassword": "पासवर्ड की पुष्टि करें", + "enterPassword": "पासवर्ड दर्ज करें", + "confirmPasswordPlaceholder": "पासवर्ड की पुष्टि करें", + "passwordsMismatch": "पासवर्ड मेल नहीं खाते", + "setupComplete": "सेटअप पूर्ण!", + "goToDashboard": "डैशबोर्ड → पर जाएँ", + "welcomeDesc": "ओमनीरूट आपका स्थानीय एआई एपीआई प्रॉक्सी है। यह लोड संतुलन, फेलओवर और उपयोग ट्रैकिंग के साथ कई एआई प्रदाताओं के लिए अनुरोधों को रूट करता है।", + "multiProvider": "बहु-प्रदाता", + "usageTracking": "उपयोग ट्रैकिंग", + "apiKeyMgmt": "एपीआई कुंजी प्रबंधन", + "securityDesc": "अपने डैशबोर्ड की सुरक्षा के लिए एक पासवर्ड सेट करें, या अभी के लिए छोड़ें।", + "providerDesc": "अपना पहला AI प्रदाता कनेक्ट करें. आप बाद में और भी जोड़ सकते हैं.", + "apiKeyRequired": "एपीआई कुंजी (आवश्यक)", + "customUrlOptional": "कस्टम यूआरएल (वैकल्पिक)", + "testDesc": "आइए सत्यापित करें कि आपका प्रदाता कनेक्शन काम करता है।", + "runTest": "कनेक्शन परीक्षण चलाएँ", + "testingConnection": "कनेक्शन का परीक्षण किया जा रहा है...", + "connectionSuccessful": "कनेक्शन सफल! आपका प्रदाता तैयार है.", + "noProviderFound": "कोई प्रदाता नहीं मिला. आप बाद में डैशबोर्ड से एक जोड़ सकते हैं।", + "testFailed": "परीक्षण विफल रहा, लेकिन आप इसे बाद में कॉन्फ़िगर कर सकते हैं.", + "couldNotTest": "अभी परीक्षण नहीं किया जा सका. आप डैशबोर्ड से परीक्षण कर सकते हैं.", + "doneDesc": "आप पूरी तरह तैयार हैं! आपका ओमनीरूट इंस्टेंस कॉन्फ़िगर किया गया है और प्रॉक्सी एआई अनुरोधों के लिए तैयार है।", + "yourEndpoint": "आपका समापन बिंदु:", + "continue": "जारी रखें", + "retry": "पुनः प्रयास करें", + "failedSetPassword": "पासवर्ड सेट करने में विफल. पुनः प्रयास करें।", + "failedAddProvider": "प्रदाता जोड़ने में विफल. पुनः प्रयास करें।", + "connectionError": "कनेक्शन त्रुटि. कृपया पुन: प्रयास करें।", + "provider": "प्रदाता" + }, + "providers": { + "title": "प्रदाता", + "addProvider": "प्रदाता जोड़ें", + "editProvider": "प्रदाता संपादित करें", + "deleteProvider": "प्रदाता हटाएँ", + "noProviders": "कोई प्रदाता कॉन्फ़िगर नहीं किया गया", + "modelAvailability": "मॉडल उपलब्धता", + "accounts": "लेखा", + "newAccount": "नया खाता", + "deleteConfirm": "क्या आप वाकई इस प्रदाता को हटाना चाहते हैं?", + "testing": "परीक्षण...", + "testConnection": "परीक्षण कनेक्शन", + "testSuccess": "कनेक्शन सफल", + "testFailed": "कनेक्शन विफल", + "available": "उपलब्ध", + "cooldown": "ठंडा होना", + "unavailable": "अनुपलब्ध", + "unknown": "अज्ञात", + "oauthLabel": "OAuth", + "compatibleLabel": "संगत", + "chat": "बातचीत", + "responses": "प्रतिक्रियाएँ", + "messages": "संदेश", + "oauthProviders": "OAuth प्रदाता", + "freeProviders": "मुफ़्त प्रदाता", + "apiKeyProviders": "एपीआई कुंजी प्रदाता", + "compatibleProviders": "एपीआई कुंजी संगत प्रदाता", + "testAll": "सभी का परीक्षण करें", + "testAllOAuth": "सभी OAuth कनेक्शन का परीक्षण करें", + "testAllFree": "सभी निःशुल्क कनेक्शनों का परीक्षण करें", + "testAllApiKey": "सभी एपीआई कुंजी कनेक्शन का परीक्षण करें", + "testAllCompatible": "सभी संगत कनेक्शनों का परीक्षण करें", + "connected": "{count} कनेक्टेड", + "errorCount": "{count} त्रुटि ({code})", + "errorCountNoCode": "{count} त्रुटि", + "noConnections": "कोई कनेक्शन नहीं", + "disabled": "विकलांग", + "enableProvider": "प्रदाता सक्षम करें", + "disableProvider": "प्रदाता को अक्षम करें", + "testResults": "परीक्षण के परिणाम", + "noCompatibleYet": "अभी तक कोई संगत प्रदाता नहीं जोड़ा गया", + "compatibleHint": "OpenAI या एंथ्रोपिक संगत एंडपॉइंट जोड़ने के लिए ऊपर दिए गए बटनों का उपयोग करें", + "addOpenAICompatible": "OpenAI संगत जोड़ें", + "addAnthropicCompatible": "एंथ्रोपिक संगत जोड़ें", + "addNewProvider": "नया प्रदाता जोड़ें", + "backToProviders": "प्रदाताओं के पास वापस जाएँ", + "configureNewProvider": "अपने एप्लिकेशन के साथ उपयोग करने के लिए एक नया AI प्रदाता कॉन्फ़िगर करें।", + "providerLabel": "प्रदाता", + "selectProvider": "एक प्रदाता चुनें", + "selectedProvider": "चयनित प्रदाता", + "authMethod": "प्रमाणीकरण विधि", + "apiKeyLabel": "एपीआई कुंजी", + "apiKeyRequired": "एपीआई कुंजी आवश्यक है", + "selectProviderRequired": "कृपया एक प्रदाता चुनें", + "enterApiKey": "अपनी एपीआई कुंजी दर्ज करें", + "apiKeySecure": "आपकी एपीआई कुंजी एन्क्रिप्ट की जाएगी और सुरक्षित रूप से संग्रहीत की जाएगी।", + "oauth2Connect": "OAuth2 से जुड़ें", + "oauth2Label": "OAuth2", + "oauth2Desc": "OAuth2 प्रमाणीकरण का उपयोग करके अपना खाता कनेक्ट करें।", + "displayName": "प्रदर्शन नाम", + "displayNamePlaceholder": "उदाहरण के लिए, प्रोडक्शन एपीआई, डेव एनवायरनमेंट", + "displayNameHint": "वैकल्पिक. इस कॉन्फ़िगरेशन की पहचान करने के लिए एक अनुकूल नाम.", + "active": "सक्रिय", + "activeDescription": "अपने अनुप्रयोगों में उपयोग के लिए इस प्रदाता को सक्षम करें", + "cancel": "रद्द करें", + "createProvider": "प्रदाता बनाएँ", + "failedCreate": "प्रदाता बनाने में विफल", + "errorOccurred": "एक त्रुटि हुई. कृपया पुन: प्रयास करें।", + "modelStatus": "मॉडल स्थिति", + "allModelsOperational": "सभी मॉडल क्रियाशील", + "modelsWithIssues": "मुद्दों के साथ {count} मॉडल", + "allModelsNormal": "सभी मॉडल सामान्य रूप से प्रतिक्रिया दे रहे हैं।", + "cooldownCleared": "{model} के लिए कूलडाउन साफ़ हो गया", + "failedClearCooldown": "कूल्डाउन साफ़ करने में विफल", + "loadingAvailability": "मॉडल उपलब्धता लोड हो रही है...", + "clearCooldown": "स्पष्ट", + "clearing": "समाशोधन...", + "until": "{time} तक", + "providerTestFailed": "प्रदाता परीक्षण विफल रहा", + "modeTest": "{mode} परीक्षण", + "passedCount": "{count} उत्तीर्ण", + "failedCount": "{count} विफल", + "testedCount": "{count} का परीक्षण किया गया", + "millisecondsAbbr": "{value}ms", + "okShort": "ठीक है", + "errorShort": "त्रुटि", + "noActiveConnectionsInGroup": "इस समूह के लिए कोई सक्रिय कनेक्शन नहीं मिला.", + "allTestsPassed": "सभी {total} परीक्षण उत्तीर्ण", + "testSummary": "{passed}/{total} उत्तीर्ण, {failed} अनुत्तीर्ण", + "nameLabel": "नाम", + "prefixLabel": "उपसर्ग", + "baseUrlLabel": "आधार यूआरएल", + "apiTypeLabel": "एपीआई प्रकार", + "prefixHint": "आवश्यक. मॉडल नामों के लिए अद्वितीय उपसर्ग.", + "nameHint": "आवश्यक. इस नोड के लिए एक अनुकूल लेबल.", + "baseUrlHint": "आवश्यक.  प्रदाता एपीआई आधार यूआरएल।", + "anthropicPrefixPlaceholder": "एसी-उत्पाद", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "कनेक्शन मान्य करें", + "validating": "सत्यापन किया जा रहा है...", + "connectionValid": "कनेक्शन वैध है!", + "connectionFailed": "कनेक्शन विफल. यूआरएल और कुंजी जांचें.", + "testKeyLabel": "परीक्षण एपीआई कुंजी", + "testKeyPlaceholder": "एसके-... (केवल सत्यापन के लिए)", + "providerNotFound": "प्रदाता नहीं मिला", + "deleteConnectionConfirm": "यह कनेक्शन हटाएं?", + "failedSetAlias": "उपनाम सेट करने में विफल", + "failedSaveConnection": "कनेक्शन सहेजने में विफल", + "failedSaveConnectionRetry": "कनेक्शन सहेजने में विफल. कृपया पुन: प्रयास करें।", + "failedRetestConnection": "कनेक्शन का पुनः परीक्षण करने में विफल", + "deleteCompatibleNodeConfirm": "इस {type} संगत नोड को हटाएं?", + "anthropicCompatibleDetails": "मानवशास्त्रीय संगत विवरण", + "openaiCompatibleDetails": "OpenAI संगत विवरण", + "messagesApi": "संदेश एपीआई", + "responsesApi": "प्रतिक्रियाएँ एपीआई", + "chatCompletions": "चैट समापन", + "importingModels": "आयात किया जा रहा है...", + "importFromModels": "/मॉडल से आयात करें", + "addConnectionToImport": "आयात सक्षम करने के लिए एक कनेक्शन जोड़ें.", + "noModelsConfigured": "कोई मॉडल कॉन्फ़िगर नहीं किया गया", + "connectionCount": "{count} कनेक्शन", + "fetchingModels": "उपलब्ध मॉडल लाये जा रहे हैं...", + "failedFetchModels": "मॉडल लाने में विफल", + "noModelsFound": "कोई मॉडल नहीं मिला", + "importFailed": "आयात विफल", + "noNewModelsAdded": "कोई नया मॉडल नहीं जोड़ा गया.", + "adding": "जोड़ा जा रहा है...", + "importingModelsTitle": "मॉडल आयात करना", + "copyModel": "मॉडल कॉपी करें", + "removeModel": "मॉडल हटाएँ", + "rateLimitProtected": "संरक्षित", + "rateLimitUnprotected": "असुरक्षित", + "enableRateLimitProtection": "दर सीमा सुरक्षा सक्षम करने के लिए क्लिक करें", + "disableRateLimitProtection": "दर सीमा सुरक्षा अक्षम करने के लिए क्लिक करें", + "productionKey": "उत्पादन कुंजी", + "enterNewApiKey": "नई एपीआई कुंजी दर्ज करें", + "optional": "वैकल्पिक", + "anthropicCompatibleName": "एंथ्रोपिक संगत", + "openaiCompatibleName": "ओपनएआई संगत", + "failedImportModels": "मॉडल आयात करने में विफल", + "noModelsReturnedFromEndpoint": "/मॉडल एंडपॉइंट से कोई मॉडल नहीं लौटा।", + "importingModelsProgress": "{total} मॉडलों में से {current} आयात किया जा रहा है...", + "foundModelsStartingImport": "{count} मॉडल मिले। आयात शुरू हो रहा है...", + "importingModelById": "आयात कर रहा है {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} को सफलतापूर्वक आयात किया गया!", + "noNewModelsAddedExisting": "कोई नया मॉडल नहीं जोड़ा गया (सभी पहले से मौजूद हैं)।", + "importDoneCount": "✓ हो गया! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "एक अप्रत्याशित त्रुटि उत्पन्न हुई", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "संदेश", + "responsesPath": "प्रतिक्रियाएं", + "chatCompletionsPath": "चैट/समापन", + "add": "जोड़ें", + "edit": "संपादित करें", + "delete": "हटाएँ", + "anthropic": "मानवशास्त्रीय", + "openai": "ओपनएआई", + "singleConnectionPerCompatible": "प्रति संगत नोड केवल एक कनेक्शन की अनुमति है। यदि आपको अधिक कनेक्शन की आवश्यकता है तो एक और नोड जोड़ें।", + "connections": "कनेक्शन", + "providerProxyTitleConfigured": "प्रदाता प्रॉक्सी: {host}", + "configured": "विन्यस्त", + "providerProxyConfigureHint": "इस प्रदाता के सभी कनेक्शनों के लिए प्रॉक्सी कॉन्फ़िगर करें", + "providerProxy": "प्रदाता प्रॉक्सी", + "noConnectionsYet": "अभी तक कोई कनेक्शन नहीं", + "addFirstConnectionHint": "आरंभ करने के लिए अपना पहला कनेक्शन जोड़ें", + "addConnection": "कनेक्शन जोड़ें", + "availableModels": "उपलब्ध मॉडल", + "pageAutoRefresh": "पेज अपने आप रीफ़्रेश हो जाएगा...", + "statusDisabled": "अक्षम", + "statusConnected": "जुड़ा हुआ", + "statusRuntimeIssue": "रनटाइम मुद्दा", + "statusAuthFailed": "प्रमाणीकरण विफल रहा", + "statusRateLimited": "दर सीमित", + "statusNetworkIssue": "नेटवर्क समस्या", + "statusTestUnsupported": "परीक्षण असमर्थित", + "statusUnavailable": "अनुपलब्ध", + "statusFailed": "विफल", + "statusError": "त्रुटि", + "oauthAccount": "OAuth खाता", + "errorTypeRuntime": "स्थानीय रनटाइम", + "errorTypeUpstreamAuth": "अपस्ट्रीम ऑथ", + "errorTypeMissingCredential": "क्रेडेंशियल गायब है", + "errorTypeRefreshFailed": "रिफ्रेश विफल रहा", + "errorTypeTokenExpired": "टोकन समाप्त हो गया", + "errorTypeRateLimited": "दर सीमित", + "errorTypeUpstreamUnavailable": "अपस्ट्रीम अनुपलब्ध", + "errorTypeNetworkError": "नेटवर्क त्रुटि", + "errorTypeTestUnsupported": "परीक्षण असमर्थित", + "errorTypeUpstreamError": "अपस्ट्रीम त्रुटि", + "proxySourceGlobal": "वैश्विक", + "proxySourceProvider": "प्रदाता", + "proxySourceKey": "कुंजी", + "proxyConfiguredBySource": "प्रॉक्सी ({source}): {host}", + "autoPriority": "ऑटो: {priority}", + "proxy": "प्रॉक्सी", + "retestAuthentication": "प्रमाणीकरण पुनः परीक्षण करें", + "retest": "दोबारा परीक्षण करें", + "disableConnection": "कनेक्शन अक्षम करें", + "enableConnection": "कनेक्शन सक्षम करें", + "reauthenticateConnection": "इस कनेक्शन को पुनः प्रमाणित करें", + "proxyConfig": "प्रॉक्सी कॉन्फ़िगरेशन", + "aliasExistsAlert": "उपनाम \"{alias}\" पहले से मौजूद है। कृपया किसी भिन्न मॉडल का उपयोग करें या मौजूदा उपनाम संपादित करें।", + "openRouterAnyModelHint": "ओपनराउटर किसी भी मॉडल का समर्थन करता है। त्वरित पहुंच के लिए मॉडल जोड़ें और उपनाम बनाएं।", + "modelIdFromOpenRouter": "मॉडल आईडी (ओपनराउटर से)", + "openRouterModelPlaceholder": "एंथ्रोपिक/क्लाउड-3-ओपस", + "customModels": "कस्टम मॉडल", + "customModelsHint": "मॉडल आईडी जोड़ें जो डिफ़ॉल्ट सूची में नहीं हैं। ये रूटिंग के लिए उपलब्ध होंगे.", + "modelId": "मॉडल आईडी", + "customModelPlaceholder": "जैसे जीपीटी-4.5-टर्बो", + "loading": "लोड हो रहा है...", + "removeCustomModel": "कस्टम मॉडल हटाएँ", + "noCustomModels": "अभी तक कोई कस्टम मॉडल नहीं जोड़ा गया.", + "allSuggestedAliasesExist": "सुझाए गए सभी उपनाम पहले से मौजूद हैं. कृपया कोई भिन्न मॉडल चुनें या परस्पर विरोधी उपनाम हटा दें।", + "failedSaveCustomModel": "कस्टम मॉडल सहेजने में विफल", + "modelAddedSuccess": "मॉडल {modelId} सफलतापूर्वक जोड़ा गया", + "failedAddModelTryAgain": "मॉडल जोड़ने में विफल. कृपया पुन: प्रयास करें।", + "failedSaveImportedModel": "आयातित मॉडल को कस्टम डेटाबेस में सहेजने में विफल", + "failedImportModelsTryAgain": "मॉडल आयात करने में विफल. कृपया पुन: प्रयास करें।", + "failedRemoveModelFromDatabase": "डेटाबेस से मॉडल हटाने में विफल", + "modelRemovedSuccess": "मॉडल सफलतापूर्वक निकाला गया", + "failedDeleteModelTryAgain": "मॉडल हटाने में विफल. कृपया पुन: प्रयास करें।", + "compatibleModelsDescription": "{type}-संगत मॉडल को मैन्युअल रूप से जोड़ें या उन्हें /मॉडल एंडपॉइंट से आयात करें।", + "anthropicCompatibleModelPlaceholder": "क्लाउड-3-ओपस-20240229", + "openaiCompatibleModelPlaceholder": "जीपीटी-4o", + "apiKeyValidationFailed": "एपीआई कुंजी सत्यापन विफल रहा. कृपया अपनी कुंजी जांचें और पुनः प्रयास करें।", + "addProviderApiKeyTitle": "{provider} API कुंजी जोड़ें", + "checking": "जाँच हो रही है...", + "check": "जांचें", + "valid": "मान्य", + "invalid": "अमान्य", + "creating": "बनाया जा रहा है...", + "validationChecksAnthropicCompatible": "सत्यापन एपीआई कुंजी को सत्यापित करके {provider} की जांच करता है।", + "validationChecksOpenAiCompatible": "सत्यापन आपके आधार URL पर /मॉडल के माध्यम से {provider} की जाँच करता है।", + "priorityLabel": "प्राथमिकता", + "saving": "सहेजा जा रहा है...", + "save": "सहेजें", + "editConnection": "कनेक्शन संपादित करें", + "accountName": "खाता नाम", + "email": "ईमेल", + "healthCheckMinutes": "स्वास्थ्य जांच (न्यूनतम)", + "healthCheckHint": "प्रोएक्टिव टोकन ताज़ा अंतराल। 0 = अक्षम.", + "failedTestConnection": "कनेक्शन का परीक्षण करने में विफल", + "failed": "असफल", + "leaveBlankKeepCurrentApiKey": "वर्तमान एपीआई कुंजी रखने के लिए खाली छोड़ दें।", + "editCompatibleTitle": "संपादित करें {type} संगत", + "compatibleBaseUrlHint": "अपने {type}-संगत API के लिए आधार URL (/v1 पर समाप्त) का उपयोग करें।", + "apiKeyForCheck": "एपीआई कुंजी (चेक के लिए)", + "compatibleProdPlaceholder": "{type} संगत (उत्पाद)" + }, + "settings": { + "title": "सेटिंग्स", + "general": "सामान्य", + "security": "सुरक्षा", + "appearance": "दिखावट", + "routing": "रूटिंग", + "cache": "कैश", + "resilience": "लचीलापन", + "systemPrompt": "सिस्टम प्रॉम्प्ट", + "thinkingBudget": "सोच बजट", + "proxy": "प्रॉक्सी", + "pricing": "मूल्य निर्धारण", + "storage": "भंडारण", + "policies": "नीतियाँ", + "ipFilter": "आईपी फ़िल्टर", + "comboDefaults": "कॉम्बो डिफ़ॉल्ट", + "fallbackChains": "फ़ॉलबैक चेन", + "changePassword": "पासवर्ड बदलें", + "enablePassword": "पासवर्ड सक्षम करें", + "darkMode": "डार्क मोड", + "lightMode": "लाइट मोड", + "systemTheme": "सिस्टम थीम", + "enableCache": "कैश सक्षम करें", + "cacheTTL": "कैश टीटीएल", + "maxCacheSize": "अधिकतम कैश आकार", + "clearCache": "कैश साफ़ करें", + "cacheHits": "कैश हिट्स", + "cacheMisses": "कैश छूट गया", + "hitRate": "हिट दर", + "cacheEntries": "कैश प्रविष्टियाँ", + "circuitBreaker": "सर्किट ब्रेकर", + "retryPolicy": "पुनः प्रयास नीति", + "maxRetries": "अधिकतम पुनर्प्रयास", + "retryDelay": "विलंब पुनः प्रयास करें", + "timeoutMs": "टाइमआउट (एमएस)", + "enableSystemPrompt": "सिस्टम प्रॉम्प्ट सक्षम करें", + "systemPromptText": "सिस्टम प्रॉम्प्ट टेक्स्ट", + "enableThinking": "सोचने को सक्षम करें", + "maxThinkingTokens": "मैक्स थिंकिंग टोकन", + "enableProxy": "प्रॉक्सी सक्षम करें", + "proxyUrl": "प्रॉक्सी यूआरएल", + "pricingRates": "मूल्य निर्धारण दरें प्रारूप", + "currentPricing": "वर्तमान मूल्य निर्धारण अवलोकन", + "loadingPricing": "मूल्य निर्धारण डेटा लोड हो रहा है...", + "noPricing": "कोई मूल्य निर्धारण डेटा उपलब्ध नहीं है", + "input": "इनपुट", + "output": "आउटपुट", + "cached": "कैश्ड", + "reasoning": "तर्क", + "cacheCreation": "कैश निर्माण", + "customPricing": "कस्टम मूल्य निर्धारण", + "databaseSize": "डेटाबेस का आकार", + "backupDb": "बैकअप डेटाबेस", + "restoreDb": "डेटाबेस पुनर्स्थापित करें", + "exportData": "डेटा निर्यात करें", + "importData": "डेटा आयात करें", + "clearData": "सभी डेटा साफ़ करें", + "clearDataConfirm": "इससे सारा डेटा स्थायी रूप से हट जाएगा. क्या आपको यकीन है?", + "enableRequestLogs": "अनुरोध लॉग सक्षम करें", + "logRetention": "लॉग प्रतिधारण", + "ipWhitelist": "आईपी श्वेतसूची", + "ipBlacklist": "आईपी ​​ब्लैकलिस्ट", + "addIP": "आईपी जोड़ें", + "savedSuccessfully": "सेटिंग्स सफलतापूर्वक सहेजी गईं", + "ai": "ऐ", + "advanced": "उन्नत", + "localMode": "स्थानीय मोड - आपकी मशीन पर संग्रहीत सभी डेटा", + "settingsSectionsAria": "सेटिंग्स अनुभाग", + "switchThemes": "प्रकाश और अंधेरे विषयों के बीच स्विच करें", + "themeSelectionAria": "थीम चयन", + "themeLight": "रोशनी", + "themeDark": "अंधेरा", + "themeSystem": "सिस्टम", + "hideHealthLogs": "स्वास्थ्य जांच लॉग छुपाएं", + "hideHealthLogsDesc": "चालू होने पर, सर्वर कंसोल में [हेल्थचेक] संदेशों को दबाएँ", + "promptCache": "शीघ्र कैश", + "flushCache": "कैश फ्लश करें", + "flushing": "निस्तब्धता...", + "size": "आकार", + "hits": "हिट्स", + "evictions": "बेदखली", + "loadingCacheStats": "कैश आँकड़े लोड हो रहे हैं...", + "globalProxy": "वैश्विक प्रॉक्सी", + "globalProxyDesc": "सभी एपीआई कॉल के लिए वैश्विक आउटबाउंड प्रॉक्सी कॉन्फ़िगर करें। व्यक्तिगत प्रदाता, कॉम्बो और कुंजियाँ इसे ओवरराइड कर सकती हैं।", + "noGlobalProxy": "कोई वैश्विक प्रॉक्सी कॉन्फ़िगर नहीं की गई", + "globalLabel": "वैश्विक", + "configure": "कॉन्फ़िगर करें", + "globalSystemPrompt": "ग्लोबल सिस्टम प्रॉम्प्ट", + "systemPromptDesc": "प्रॉक्सी स्तर पर सभी अनुरोधों में इंजेक्ट किया गया", + "saved": "सहेजा गया", + "systemPromptPlaceholder": "सभी अनुरोधों को सम्मिलित करने के लिए सिस्टम प्रॉम्प्ट दर्ज करें...", + "systemPromptHint": "यह संकेत प्रत्येक अनुरोध के सिस्टम संदेश से जुड़ा होता है। वैश्विक निर्देशों, सुरक्षा दिशानिर्देशों, या प्रतिक्रिया स्वरूपण नियमों के लिए उपयोग करें।", + "chars": "{count} वर्ण", + "thinkingBudgetTitle": "सोच बजट", + "thinkingBudgetDesc": "सभी अनुरोधों में एआई तर्क टोकन उपयोग को नियंत्रित करें", + "passthrough": "पारगमन", + "passthroughDesc": "कोई परिवर्तन नहीं - ग्राहक सोच बजट को नियंत्रित करता है", + "auto": "ऑटो", + "autoDesc": "सभी सोच कॉन्फ़िगरेशन को हटा दें - प्रदाता को निर्णय लेने दें", + "custom": "कस्टम", + "customDesc": "सभी अनुरोधों के लिए एक निश्चित टोकन बजट निर्धारित करें", + "adaptive": "अनुकूली", + "adaptiveDesc": "अनुरोध जटिलता के आधार पर बजट मापें", + "effortNone": "कोई नहीं (0 टोकन)", + "effortLow": "कम (1K टोकन)", + "effortMedium": "मध्यम (10K टोकन)", + "effortHigh": "उच्च (128K टोकन)", + "tokenBudget": "सांकेतिक बजट", + "tokens": "टोकन", + "baseEffortLevel": "आधार प्रयास स्तर", + "adaptiveHint": "संदेश गणना, टूल उपयोग और प्रॉम्प्ट लंबाई के आधार पर इस आधार स्तर से अनुकूली मोड स्केल होता है।", + "requireLogin": "लॉगिन की आवश्यकता है", + "requireLoginDesc": "चालू होने पर, डैशबोर्ड को पासवर्ड की आवश्यकता होती है। बंद होने पर, लॉगिन के बिना पहुंचें।", + "currentPassword": "वर्तमान पासवर्ड", + "enterCurrentPassword": "वर्तमान पासवर्ड दर्ज करें", + "newPassword": "नया पासवर्ड", + "enterNewPassword": "नया पासवर्ड दर्ज करें", + "confirmPassword": "नये पासवर्ड की पुष्टि करें", + "confirmPasswordPlaceholder": "नये पासवर्ड की पुष्टि करें", + "passwordsNoMatch": "पासवर्ड मेल नहीं खाते", + "passwordUpdated": "पासवर्ड सफलतापूर्वक अपडेट किया गया", + "failedUpdatePassword": "पासवर्ड अपडेट करने में विफल", + "errorOccurred": "एक त्रुटि हुई", + "updatePassword": "पासवर्ड अपडेट करें", + "setPassword": "पासवर्ड सेट करें", + "apiEndpointProtection": "एपीआई समापन बिंदु सुरक्षा", + "requireAuthModels": "/मॉडल के लिए एपीआई कुंजी की आवश्यकता है", + "requireAuthModelsDesc": "चालू होने पर, /v1/मॉडल एंडपॉइंट अप्रमाणित अनुरोधों के लिए 404 लौटाता है। अनधिकृत उपयोगकर्ताओं द्वारा मॉडल खोज को रोकता है।", + "blockedProviders": "अवरुद्ध प्रदाता", + "blockedProvidersDesc": "/v1/मॉडल प्रतिक्रिया से विशिष्ट प्रदाताओं को छुपाएं। अवरुद्ध प्रदाता मॉडल सूची में दिखाई नहीं देंगे।", + "providersBlocked": "{count} प्रदाता/प्रदाताओं को /मॉडल से अवरोधित किया गया", + "blockProviderTitle": "ब्लॉक करें {provider}", + "unblockProviderTitle": "अनब्लॉक करें {provider}", + "routingStrategy": "रूटिंग रणनीति", + "fillFirst": "पहले भरें", + "fillFirstDesc": "प्राथमिकता क्रम में खातों का उपयोग करें", + "roundRobin": "राउंड रोबिन", + "roundRobinDesc": "सभी खातों के माध्यम से चक्रित करें", + "p2c": "पी2सी", + "p2cDesc": "2 यादृच्छिक चुनें, स्वस्थ का उपयोग करें", + "random": "यादृच्छिक", + "randomDesc": "प्रत्येक अनुरोध का यादृच्छिक खाता", + "leastUsed": "सबसे कम इस्तेमाल किया गया", + "leastUsedDesc": "कम से कम हाल ही में उपयोग किया गया खाता चुनें", + "costOpt": "लागत विकल्प", + "costOptDesc": "सबसे सस्ते उपलब्ध खाते को प्राथमिकता दें", + "stickyLimit": "चिपचिपी सीमा", + "stickyLimitDesc": "स्विच करने से पहले प्रति खाता कॉल", + "modelAliases": "मॉडल उपनाम", + "modelAliasesDesc": "मॉडल नामों को रीमैप करने के लिए वाइल्डकार्ड पैटर्न • * और ? का उपयोग करें", + "aliasPatternPlaceholder": "क्लाउड-सॉनेट-*", + "aliasTargetPlaceholder": "क्लाउड-सॉनेट-4-20250514", + "pattern": "पैटर्न", + "targetModel": "लक्ष्य मॉडल", + "add": "+ जोड़ें", + "session": "सत्र", + "sessionDetailsAria": "सत्र विवरण", + "status": "स्थिति", + "authenticated": "प्रमाणित", + "guest": "अतिथि", + "loginTime": "लॉगिन समय", + "sessionAge": "सत्र आयु", + "browser": "ब्राउज़र", + "clearLocalData": "स्थानीय डेटा साफ़ करें", + "logout": "लॉगआउट करें", + "clearLocalDataConfirm": "सभी स्थानीय डेटा साफ़ करें? इससे आपकी प्राथमिकताएं रीसेट हो जाएंगी.", + "unknown": "अज्ञात", + "systemActor": "प्रणाली", + "ipAccessControl": "आईपी ​​अभिगम नियंत्रण", + "ipAccessControlDesc": "विशिष्ट आईपी पते को ब्लॉक करें या अनुमति दें", + "ipModeDisabled": "विकलांग", + "ipModeBlacklist": "काली सूची", + "ipModeWhitelist": "श्वेतसूची", + "ipModeWhitelistPriority": "डब्ल्यूएल प्राथमिकता", + "addIpAddress": "आईपी पता जोड़ें", + "ipAddressPlaceholder": "192.168.1.0/24 या 10.0.*.*", + "block": "+ ब्लॉक", + "allow": "+ अनुमति दें", + "blocked": "अवरोधित ({count})", + "allowed": "अनुमति है ({count})", + "temporaryBans": "अस्थायी प्रतिबंध ({count})", + "minLeft": "{min}m शेष", + "auditLog": "ऑडिट लॉग", + "searchAuditLogs": "ऑडिट लॉग खोजें...", + "failedLoadAuditLog": "ऑडिट लॉग लोड करने में विफल", + "noAuditEvents": "कोई ऑडिट इवेंट नहीं मिला", + "action": "कार्रवाई", + "actor": "अभिनेता", + "details": "विवरण", + "time": "समय", + "fallbackChainsTitle": "फ़ॉलबैक चेन", + "fallbackChainsDesc": "प्रति मॉडल प्रदाता फ़ॉलबैक ऑर्डर को परिभाषित करें", + "addChain": "+ चेन जोड़ें", + "modelName": "मॉडल का नाम", + "modelNamePlaceholder": "क्लाउड-सॉनेट-4-20250514", + "providersCommaSeparated": "प्रदाता (अल्पविराम से अलग, प्राथमिकता क्रम में)", + "providersCommaSeparatedPlaceholder": "एंथ्रोपिक, ओपनाई, जेमिनी", + "createChain": "शृंखला बनाएं", + "noFallbackChains": "कोई फ़ॉलबैक चेन नहीं", + "noFallbackChainsDesc": "किसी मॉडल के लिए प्रदाता फ़ॉलबैक ऑर्डर को परिभाषित करने के लिए एक श्रृंखला बनाएं।", + "loadingFallbackChains": "फ़ॉलबैक चेन लोड हो रही हैं...", + "deleteChainConfirm": "\"{model}\" के लिए फ़ॉलबैक श्रृंखला हटाएं?", + "chainCreated": "{model} के लिए श्रृंखला बनाई गई", + "chainDeleted": "{model} के लिए श्रृंखला हटा दी गई", + "failedCreateChain": "श्रृंखला बनाने में विफल", + "failedDeleteChain": "श्रृंखला हटाने में विफल", + "deleteChain": "शृंखला हटाएँ", + "fillModelAndProviders": "कृपया मॉडल का नाम और प्रदाता भरें", + "addAtLeastOneProvider": "कम से कम एक प्रदाता जोड़ें", + "comboDefaultsTitle": "कॉम्बो डिफ़ॉल्ट", + "globalComboConfig": "वैश्विक कॉम्बो कॉन्फ़िगरेशन", + "defaultStrategy": "डिफ़ॉल्ट रणनीति", + "defaultStrategyDesc": "स्पष्ट रणनीति के बिना नए कॉम्बो पर लागू किया गया", + "comboStrategyAria": "कॉम्बो रणनीति", + "priority": "प्राथमिकता", + "weighted": "भारित", + "maxRetriesLabel": "अधिकतम पुनर्प्रयास", + "retryDelayLabel": "पुनः प्रयास विलंब (एमएस)", + "timeoutLabel": "टाइमआउट (एमएस)", + "healthCheck": "स्वास्थ्य जांच", + "healthCheckDesc": "प्रदाता उपलब्धता की पूर्व-जाँच करें", + "trackMetrics": "ट्रैक मेट्रिक्स", + "trackMetricsDesc": "प्रति-कॉम्बो अनुरोध मेट्रिक्स रिकॉर्ड करें", + "providerOverrides": "प्रदाता ओवरराइड करता है", + "providerOverridesDesc": "प्रति प्रदाता टाइमआउट और पुनः प्रयास को ओवरराइड करें। प्रदाता सेटिंग्स वैश्विक डिफ़ॉल्ट को ओवरराइड करती हैं।", + "providerMaxRetriesAria": "{provider} अधिकतम पुनः प्रयास", + "providerTimeoutAria": "{provider} टाइमआउट एमएस", + "removeProviderOverrideAria": "{provider} ओवरराइड हटाएँ", + "newProviderNamePlaceholder": "जैसे गूगल, ओपनाई...", + "newProviderNameAria": "नये प्रदाता का नाम", + "retries": "पुनः प्रयास करें", + "ms": "सुश्री", + "saveComboDefaults": "कॉम्बो डिफ़ॉल्ट सहेजें", + "maxNestingDepth": "अधिकतम नेस्टिंग गहराई", + "concurrencyPerModel": "समवर्ती/मॉडल", + "queueTimeout": "कतार समय समाप्ति (एमएस)", + "providerProfiles": "प्रदाता प्रोफाइल", + "providerProfilesDesc": "OAuth (सत्र-आधारित) और API कुंजी (मीटर्ड) प्रदाताओं के लिए अलग लचीलापन सेटिंग्स। कम दर सीमा के कारण OAuth प्रदाताओं के पास सख्त सीमाएँ हैं।", + "oauthProviders": "OAuth प्रदाता", + "apiKeyProviders": "एपीआई कुंजी प्रदाता", + "transientCooldown": "क्षणिक शीतलता", + "rateLimitCooldown": "दर सीमा शीतलन", + "maxBackoffLevel": "अधिकतम बैकऑफ़ स्तर", + "cbThreshold": "सीबी दहलीज", + "cbResetTime": "सीबी रीसेट समय", + "rateLimiting": "दर सीमित करना", + "rateLimitingDesc": "एपीआई कुंजी प्रदाता सुरक्षित डिफ़ॉल्ट के साथ स्वचालित रूप से दर-सीमित होते हैं। सीमाएँ प्रतिक्रिया शीर्षलेखों से सीखी जाती हैं और समय के साथ अनुकूलित होती हैं।", + "defaultSafetyNet": "डिफ़ॉल्ट सुरक्षा जाल", + "rpm": "आरपीएम", + "minGap": "मिन गैप", + "maxConcurrent": "अधिकतम समवर्ती", + "activeLimiters": "सक्रिय सीमाएँ", + "noActiveLimiters": "अभी तक कोई सक्रिय दर सीमा नहीं है.", + "reservoir": "जलाशय", + "running": "चल रहा है", + "queued": "कतारबद्ध", + "circuitBreakers": "सर्किट ब्रेकर", + "breakerStateClosed": "बंद", + "breakerStateOpen": "खुला", + "breakerStateHalfOpen": "आधा खुला", + "tripped": "{count} फिसल गया", + "healthy": "{count} स्वस्थ", + "resetAll": "सभी रीसेट करें", + "noCircuitBreakers": "अभी तक कोई सर्किट ब्रेकर सक्रिय नहीं है। जब अनुरोध कॉम्बो पाइपलाइन के माध्यम से प्रवाहित होते हैं तो वे स्वचालित रूप से बनाए जाते हैं।", + "failures": "{count} विफलताएं", + "policiesLocked": "नीतियां और लॉक किए गए पहचानकर्ता", + "allOperational": "सभी प्रणालियाँ चालू - कोई तालाबंदी या ट्रिप्ड ब्रेकर नहीं", + "loadingPolicies": "नीतियां लोड हो रही हैं...", + "lockedIdentifiers": "लॉक किए गए पहचानकर्ता", + "unlockedIdentifier": "अनलॉक: {identifier}", + "sinceDate": "चूँकि {date}", + "forceUnlock": "बलपूर्वक अनलॉक करें", + "unlocking": "अनलॉक हो रहा है...", + "failedUnlock": "अनलॉक करने में विफल", + "failedLoadWithStatus": "लोड करने में विफल: {status}", + "failedLoadResilience": "लचीलापन स्थिति लोड करने में विफल", + "saveFailed": "सहेजना विफल", + "resetFailed": "रीसेट विफल रहा", + "loadingResilience": "लचीलापन स्थिति लोड हो रही है...", + "retry": "पुनः प्रयास करें", + "systemStorage": "सिस्टम एवं भंडारण", + "allDataLocal": "आपकी मशीन पर सभी डेटा स्थानीय रूप से संग्रहीत है", + "databasePath": "डेटाबेस पथ", + "exportDatabase": "डेटाबेस निर्यात करें", + "exportAll": "सभी निर्यात करें (.tar.gz)", + "importDatabase": "डेटाबेस आयात करें", + "confirmDbImport": "डेटाबेस आयात की पुष्टि करें", + "confirmDbImportDesc": "यह सभी मौजूदा डेटा को {file} की सामग्री से बदल देगा। आयात से पहले एक बैकअप स्वचालित रूप से बनाया जाएगा।", + "yesImport": "हाँ, आयात करें", + "lastBackup": "अंतिम बैकअप", + "noBackupYet": "अभी तक कोई बैकअप नहीं है", + "backupNow": "अभी बैकअप लें", + "backupRestore": "बैकअप और पुनर्स्थापना", + "viewBackups": "बैकअप देखें", + "hide": "छिपाओ", + "backupRetentionDesc": "डेटाबेस स्नैपशॉट पुनर्स्थापना से पहले और डेटा में परिवर्तन होने पर हर 15 मिनट में स्वचालित रूप से बनाए जाते हैं। प्रतिधारण: स्मार्ट रोटेशन के साथ 24 घंटे + 30 दैनिक बैकअप।", + "loadingBackups": "बैकअप लोड हो रहा है...", + "noBackupsYet": "अभी तक कोई बैकअप उपलब्ध नहीं है. डेटा बदलने पर बैकअप स्वचालित रूप से बनाया जाएगा।", + "backupsAvailable": "{count} बैकअप उपलब्ध है", + "refresh": "ताज़ा करें", + "confirm": "पुष्टि करें?", + "yes": "हाँ", + "no": "नहीं", + "restore": "पुनर्स्थापित करें", + "invalidFileType": "अमान्य फ़ाइल प्रकार. केवल .sqlite फ़ाइलें स्वीकार की जाती हैं।", + "exportFailed": "निर्यात विफल", + "exportFailedWithError": "निर्यात विफल: {error}", + "fullExportFailedWithError": "पूर्ण निर्यात विफल: {error}", + "backupCreated": "बैकअप बनाया गया: {file}", + "restoreSuccess": "पुनर्स्थापित! {connections} कनेक्शन, {nodes} नोड्स, {combos} कॉम्बो, {apiKeys} API कुंजियाँ।", + "importSuccess": "डेटाबेस आयातित! {connections} कनेक्शन, {nodes} नोड्स, {combos} कॉम्बो, {apiKeys} API कुंजियाँ।", + "justNow": "अभी अभी", + "minutesAgo": "{count}m पहले", + "hoursAgo": "{count}h पहले", + "daysAgo": "{count}दिन पहले", + "backupReasonManual": "मैनुअल", + "backupReasonPreRestore": "पूर्व-पुनर्स्थापना", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "पिछले बैकअप के बाद से कोई परिवर्तन नहीं", + "backupFailed": "बैकअप विफल रहा", + "restoreFailed": "पुनर्स्थापना विफल", + "importFailed": "आयात विफल", + "errorDuringRestore": "पुनर्स्थापना के दौरान एक त्रुटि उत्पन्न हुई", + "errorDuringImport": "आयात के दौरान एक त्रुटि उत्पन्न हुई", + "modelPricing": "मॉडल मूल्य निर्धारण", + "modelPricingDesc": "प्रति मॉडल लागत दरें कॉन्फ़िगर करें • सभी दरें $/1M टोकन में", + "providers": "प्रदाता", + "registry": "रजिस्ट्री", + "priced": "कीमत", + "searchProvidersModels": "प्रदाता या मॉडल खोजें...", + "showAll": "सभी दिखाएँ", + "noProvidersMatch": "कोई भी प्रदाता आपकी खोज से मेल नहीं खाता।", + "howPricingWorks": "मूल्य निर्धारण कैसे काम करता है", + "cacheWrite": "कैश लिखें", + "unsaved": "सहेजा नहीं गया", + "resetDefaults": "डिफ़ॉल्ट रीसेट करें", + "saveProvider": "प्रदाता सहेजें", + "saving": "सहेजा जा रहा है...", + "model": "मॉडल", + "models": "मॉडल", + "moreProviders": "{count} अधिक प्रदाता", + "withPricing": "मूल्य निर्धारण के साथ कॉन्फ़िगर किया गया", + "policiesCircuitBreakers": "नीतियां और सर्किट ब्रेकर", + "activeIssuesDetected": "सक्रिय समस्याओं का पता चला", + "off": "बंद", + "resetPricingConfirm": "{provider} के सभी मूल्यों को डिफ़ॉल्ट पर रीसेट करें?", + "pricingDescInput": "इनपुट: मॉडल को टोकन भेजे गए", + "pricingDescOutput": "आउटपुट: टोकन उत्पन्न", + "pricingDescCached": "कैश्ड: पुन: उपयोग किया गया इनपुट (~इनपुट दर का 50%)", + "pricingDescReasoning": "तर्क: सोच टोकन (आउटपुट पर वापस आता है)", + "pricingDescCacheWrite": "कैश लिखें: कैश प्रविष्टियाँ बनाना (इनपुट पर वापस आता है)", + "pricingDescFormula": "लागत = (इनपुट × इनपुट_रेट) + (आउटपुट × आउटपुट_रेट) + (कैश्ड × कैश्ड_रेट) प्रति मिलियन टोकन।", + "pricingSettingsTitle": "मूल्य निर्धारण सेटिंग्स", + "totalModels": "कुल मॉडल", + "active": "सक्रिय", + "costCalculation": "लागत गणना", + "costCalculationDesc": "लागत की गणना प्रत्येक मॉडल के लिए कॉन्फ़िगर किए गए टोकन उपयोग और मूल्य निर्धारण दरों के आधार पर की जाती है।", + "pricingFormat": "मूल्य निर्धारण प्रारूप", + "pricingFormatDesc": "सभी दरें $/1M टोकन (डॉलर प्रति मिलियन टोकन) में हैं।", + "tokenTypes": "टोकन प्रकार", + "inputTokenDesc": "मानक शीघ्र टोकन", + "outputTokenDesc": "पूर्णता/प्रतिक्रिया टोकन", + "cachedTokenDesc": "कैश्ड इनपुट टोकन (आमतौर पर इनपुट दर का 50%)", + "reasoningTokenDesc": "विशेष तर्क/सोच टोकन (आउटपुट दर पर वापसी)", + "cacheCreationTokenDesc": "कैश प्रविष्टियाँ बनाने के लिए उपयोग किए जाने वाले टोकन (इनपुट दर पर फ़ॉलबैक)", + "customPricingNote": "आप विशिष्ट मॉडलों के लिए डिफ़ॉल्ट मूल्य निर्धारण को ओवरराइड कर सकते हैं। कस्टम ओवरराइड्स को स्वतः-पता लगाए गए मूल्य-निर्धारण पर प्राथमिकता दी जाती है।", + "editPricing": "मूल्य निर्धारण संपादित करें", + "viewFullDetails": "पूर्ण विवरण देखें" + }, + "translator": { + "title": "अनुवादक", + "metaTitle": "अनुवादक खेल का मैदान | ओम्निरूट", + "metaDescription": "प्रदाताओं के बीच एपीआई प्रारूप अनुवाद को डीबग, परीक्षण और विज़ुअलाइज़ करें", + "playgroundTitle": "अनुवादक खेल का मैदान", + "playground": "खेल का मैदान", + "realtime": "वास्तविक समय अनुवाद गतिविधि", + "chatTester": "चैट परीक्षक", + "testBench": "टेस्ट बेंच", + "liveMonitor": "लाइव मॉनिटर", + "modeDescriptionPlayground": "किसी भी एपीआई अनुरोध निकाय को पेस्ट करें और देखें कि ओमनीरूट इसे प्रदाता प्रारूपों के बीच कैसे अनुवादित करता है (ओपनएआई ↔ क्लाउड ↔ जेमिनी ↔ रिस्पॉन्स एपीआई)", + "modeDescriptionChatTester": "ओमनीरूट के माध्यम से वास्तविक चैट अनुरोध भेजें और पूर्ण राउंड-ट्रिप का निरीक्षण करें: इनपुट, अनुवादित अनुरोध, प्रदाता प्रतिक्रिया और अनुवादित आउटपुट।", + "modeDescriptionTestBench": "पूर्वनिर्धारित परिदृश्य चलाएँ और प्रदाताओं और मॉडलों के बीच अनुकूलता की तुलना करें।", + "modeDescriptionLiveMonitor": "ओमनीरूट के माध्यम से अनुरोध प्रवाहित होने पर वास्तविक समय में अनुवाद की घटनाओं को देखें।", + "modeDescriptionFallback": "डीबग करें, परीक्षण करें और कल्पना करें कि कैसे ओमनीरूट प्रदाताओं के बीच एपीआई अनुरोधों का अनुवाद करता है।", + "recentTranslations": "हालिया अनुवाद", + "noTranslations": "अभी तक कोई अनुवाद नहीं", + "source": "स्रोत", + "target": "लक्ष्य", + "time": "समय", + "model": "मॉडल", + "status": "स्थिति", + "latency": "विलंबता", + "totalTranslations": "कुल अनुवाद", + "successful": "सफल", + "errors": "त्रुटियाँ", + "avgLatency": "औसत विलंबता", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "लाइव - ऑटो-रिफ्रेशिंग", + "paused": "रुका हुआ", + "eventsAppearHint": "ओमनीरूट के माध्यम से अनुरोध प्रवाहित होने पर अनुवाद कार्यक्रम यहां दिखाई देते हैं। ईवेंट उत्पन्न करने के लिए इनमें से किसी भी तरीके का उपयोग करें:", + "chatTesterTab": "चैट परीक्षक टैब", + "testBenchTab": "टेस्ट बेंच टैब", + "externalApiCalls": "बाहरी एपीआई कॉल", + "ideCliIntegrations": "आईडीई/सीएलआई एकीकरण", + "inMemoryNote": "नोट: ईवेंट मेमोरी में संग्रहीत होते हैं और सर्वर पुनरारंभ होने पर रीसेट हो जाते हैं।", + "ok": "ठीक है", + "errorShort": "त्रुटि", + "formatConverter": "प्रारूप परिवर्तक", + "formatConverterDescription": "JSON अनुरोध का मुख्य भाग चिपकाएँ या टाइप करें। अनुवादक स्रोत प्रारूप का स्वतः पता लगाएगा और उसे लक्ष्य प्रारूप में परिवर्तित करेगा। इसका उपयोग डीबग करने के लिए करें कि कैसे ओमनीरूट प्रारूपों के बीच अनुरोधों का अनुवाद करता है (ओपनएआई ↔ क्लाउड ↔ जेमिनी ↔ रिस्पॉन्स एपीआई)।", + "input": "इनपुट", + "output": "आउटपुट", + "auto": "ऑटो", + "swapFormats": "स्वरूपों की अदला-बदली करें", + "translateAction": "अनुवाद करें", + "clear": "स्पष्ट", + "inputPlaceholder": "अनुरोध का मुख्य भाग यहां चिपकाएँ या नीचे एक टेम्पलेट चुनें...", + "exampleTemplates": "उदाहरण टेम्पलेट्स", + "exampleTemplatesHint": "- लोड करने के लिए क्लिक करें", + "templateLoadHint": "टेम्प्लेट अनुरोध को {format} प्रारूप में लोड करता है। किसी भिन्न प्रारूप में लोड करने के लिए स्रोत प्रारूप बदलें।", + "compatibilityTester": "अनुकूलता परीक्षक", + "compatibilityReport": "अनुकूलता रिपोर्ट", + "testBenchDescription": "अनुवाद और प्रदाता अनुकूलता को सत्यापित करने के लिए पूर्वनिर्धारित परिदृश्य (सरल चैट, टूल कॉलिंग, आदि) चलाएँ। एक स्रोत प्रारूप और लक्ष्य प्रदाता का चयन करें, फिर संगतता प्रतिशत देखने के लिए सभी परीक्षण चलाएँ। इसका उपयोग यह जानने के लिए करें कि कौन सी सुविधाएँ सभी प्रदाताओं पर काम करती हैं।", + "targetProvider": "लक्ष्य प्रदाता", + "runAllTests": "सभी परीक्षण चलाएँ", + "runTest": "परीक्षण चलाएँ", + "reRun": "पुनः चलाएँ", + "running": "चल रहा है...", + "passed": "पारित", + "failed": "विफल", + "passedIconLabel": "✅उत्तीर्ण", + "chunks": "टुकड़े", + "scenarioSimpleChat": "सरल चैट", + "scenarioToolCalling": "टूल कॉलिंग", + "scenarioMultiTurn": "बहु-मोड़", + "scenarioThinking": "सोच रहा हूँ", + "scenarioSystemPrompt": "सिस्टम प्रॉम्प्ट", + "scenarioStreaming": "स्ट्रीमिंग", + "templateNames": { + "simple-chat": "सरल चैट", + "tool-calling": "टूल कॉलिंग", + "multi-turn": "बहु-मोड़", + "thinking": "सोच रहा हूँ", + "system-prompt": "सिस्टम प्रॉम्प्ट", + "streaming": "स्ट्रीमिंग" + }, + "templateDescriptions": { + "simple-chat": "मूल पाठ संदेश", + "tool-calling": "फ़ंक्शन/उपकरण मंगलाचरण", + "multi-turn": "इतिहास से बातचीत", + "thinking": "विस्तारित सोच/तर्क", + "system-prompt": "जटिल सिस्टम निर्देश", + "streaming": "एसएसई स्ट्रीमिंग अनुरोध" + }, + "templatePayloads": { + "simpleChat": { + "system": "आप एक सहायक सहायक हैं.", + "userGreeting": "नमस्कार! आज आप कैसे हैं?" + }, + "toolCalling": { + "userWeather": "साओ पाउलो में मौसम कैसा है?", + "toolDescription": "किसी स्थान के लिए वर्तमान मौसम प्राप्त करें", + "cityNameDescription": "शहर का नाम" + }, + "multiTurn": { + "system": "आप एक कोडिंग सहायक हैं.", + "userInitial": "पायथन में किसी सरणी को सॉर्ट करने के लिए एक फ़ंक्शन लिखें।", + "assistantExample": "यहां एक सरल सॉर्ट फ़ंक्शन है:\n\n```अजगर\nडीईएफ़ sort_array(arr):\n वापसी क्रमबद्ध(arr)\n```", + "userFollowUp": "अब इसे घटते क्रम में क्रमबद्ध करें।" + }, + "thinking": { + "question": "प्रथम 100 अभाज्य संख्याओं का योग क्या है?" + }, + "systemPrompt": { + "systemInstruction": "आप एक वरिष्ठ सॉफ्टवेयर इंजीनियर हैं जो वितरित प्रणालियों में विशेषज्ञता रखते हैं। उद्योग की सर्वोत्तम प्रथाओं का उपयोग करके प्रश्नों के उत्तर संक्षेप में दें। प्रासंगिक होने पर हमेशा कोड उदाहरण प्रदान करें। मार्कडाउन का उपयोग करके अपनी प्रतिक्रियाएँ प्रारूपित करें।", + "question": "मैं सर्किट ब्रेकर पैटर्न कैसे लागू करूं?" + }, + "streaming": { + "prompt": "मुझे पेंटिंग सीखने वाले एक रोबोट के बारे में एक छोटी कहानी बताओ।" + } + }, + "openaiCompatibleLabel": "ओपनएआई संगत", + "anthropicCompatibleLabel": "एंथ्रोपिक संगत", + "noTemplateForFormat": "इस प्रारूप के लिए कोई टेम्पलेट नहीं", + "translationFailed": "अनुवाद विफल: {error}", + "pipelineDebugger": "पाइपलाइन डिबगर", + "translationPipeline": "अनुवाद पाइपलाइन", + "pipelineVisualization": "पाइपलाइन विज़ुअलाइज़ेशन", + "pipelineVisualizationHint": "यह देखने के लिए एक संदेश भेजें कि आपका अनुरोध पता लगाने → अनुवाद → प्रदाता कॉल के माध्यम से कैसे प्रवाहित होता है।", + "chatTesterDescription": "संदेशों को एक विशिष्ट क्लाइंट प्रारूप के रूप में भेजें और अनुवाद पाइपलाइन के प्रत्येक चरण का निरीक्षण करें।", + "chatTesterFlow": "ग्राहक अनुरोध → प्रारूप का पता लगाना → ओपनएआई इंटरमीडिएट → प्रदाता प्रारूप → प्रतिक्रिया", + "clickStepToInspect": "उस स्तर पर डेटा का निरीक्षण करने के लिए किसी भी चरण पर क्लिक करें।", + "clientFormat": "ग्राहक प्रारूप", + "provider": "प्रदाता", + "modelPlaceholder": "मॉडल का नाम चुनें या टाइप करें...", + "sendMessageToSeePipeline": "अनुवाद पाइपलाइन देखने के लिए एक संदेश भेजें", + "chatMessageHintPrefix": "आपका संदेश इस रूप में स्वरूपित किया जाएगा", + "chatMessageHintSuffix": "अनुरोध, पाइपलाइन के माध्यम से अनुवादित, और चयनित प्रदाता को भेजा गया।", + "youWithFormat": "आप ({format})", + "assistant": "सहायक", + "typeMessage": "एक संदेश टाइप करें...", + "send": "भेजें", + "clientRequest": "ग्राहक अनुरोध", + "clientRequestDescription": "आपके ग्राहक के रूप में अनुरोध निकाय इसे भेजेगा", + "formatDetected": "प्रारूप का पता लगाया गया", + "formatDetectedDescription": "ओमनीरूट अनुरोध संरचना से एपीआई प्रारूप का स्वतः पता लगाता है", + "openaiIntermediate": "ओपनएआई इंटरमीडिएट", + "openaiIntermediateDescription": "सभी प्रारूपों को पहले OpenAI प्रारूप (यूनिवर्सल ब्रिज) में सामान्यीकृत किया जाता है", + "providerFormat": "प्रदाता प्रारूप", + "providerFormatDescription": "OpenAI प्रारूप को प्रदाता के मूल प्रारूप में अनुवादित किया जाता है", + "providerResponse": "प्रदाता प्रतिक्रिया", + "providerResponseRawDescription": "प्रदाता एपीआई से कच्ची प्रतिक्रिया", + "providerResponseSseDescription": "प्रदाता एपीआई से कच्ची एसएसई स्ट्रीम", + "unexpectedError": "एक अप्रत्याशित त्रुटि उत्पन्न हुई", + "error": "त्रुटि", + "errorMessage": "त्रुटि: {message}", + "requestFailed": "अनुरोध विफल", + "noTextExtracted": "(कोई पाठ नहीं निकाला गया)", + "liveMonitorDescriptionPrefix": "ओमनीरूट के माध्यम से एपीआई कॉल प्रवाह के रूप में अनुवाद घटनाओं को दिखाता है। ईवेंट इन-मेमोरी बफ़र (पुनः आरंभ होने पर रीसेट) से आते हैं। उपयोग करें", + "liveMonitorDescriptionSuffix": ", या ईवेंट उत्पन्न करने के लिए बाहरी एपीआई कॉल।" + }, + "usage": { + "title": "उपयोग", + "loggerTab": "लकड़हारा", + "proxyTab": "प्रॉक्सी", + "budgetManagement": "बजट प्रबंधन", + "budgetSaved": "बजट सीमा बचाई गई", + "budgetSaveFailed": "बजट बचाने में विफल", + "loadingBudgetData": "बजट डेटा लोड हो रहा है...", + "noApiKeysTitle": "कोई एपीआई कुंजी नहीं", + "noApiKeysDescription": "बजट सीमा निर्धारित करने के लिए पहले एपीआई कुंजियाँ जोड़ें।", + "apiKey": "एपीआई कुंजी", + "todaysSpend": "आज का खर्च", + "thisMonth": "इस महीने", + "setLimits": "सीमाएँ निर्धारित करें", + "dailyLimitUsd": "दैनिक सीमा (USD)", + "monthlyLimitUsd": "मासिक सीमा (USD)", + "warningThresholdPercent": "चेतावनी सीमा (%)", + "dailyLimitPlaceholder": "जैसे 5.00", + "monthlyLimitPlaceholder": "जैसे 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "सीमाएँ सहेजें", + "budgetOk": "बजट ठीक है - {remaining} शेष", + "budgetExceeded": "बजट पार हो गया - अनुरोधों को अवरुद्ध किया जा सकता है", + "totalRequests": "कुल अनुरोध", + "noDataYet": "अभी तक कोई डेटा नहीं", + "latency": "विलंबता", + "latencyP50": "p50", + "latencyP95": "पी95", + "latencyP99": "पी99", + "promptCache": "शीघ्र कैश", + "systemHealth": "सिस्टम स्वास्थ्य", + "entries": "प्रविष्टियाँ", + "activeCount": "{count} सक्रिय", + "openCircuitBreakersDetected": "खुले सर्किट ब्रेकरों का पता चला", + "hitRate": "हिट दर", + "hitsMisses": "हिट/मिस", + "circuitBreakers": "सर्किट ब्रेकर", + "lockedIPs": "लॉक किए गए आईपी", + "lockoutsAutoRefreshHint": "प्रति-मॉडल दर सीमा लॉक • ऑटो-रीफ्रेश 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} शेष", + "howItWorks": "यह कैसे काम करता है", + "howItWorksSubtitle": "जानें कि मूल्यांकन आपके एलएलएम प्रतिक्रियाओं को कैसे मान्य करते हैं", + "define": "परिभाषित करें", + "defineStepDescription": "सम्‍मिलित, रेगेक्स, या सटीक मिलान जैसी रणनीतियों का उपयोग करके इनपुट संकेतों और अपेक्षित आउटपुट मानदंडों के साथ परीक्षण मामले बनाएं।", + "run": "भागो", + "runStepDescription": "ओम्निरूट के माध्यम से अपने एलएलएम समापन बिंदुओं के विरुद्ध परीक्षण मामले निष्पादित करें। प्रत्येक मामले को वास्तविक एपीआई अनुरोध के रूप में भेजा जाता है।", + "evaluate": "मूल्यांकन करें", + "evaluateStepDescription": "प्रत्युत्तरों की तुलना अपेक्षित मानदंडों से की जाती है। विलंबता मेट्रिक्स और विस्तृत फीडबैक के साथ प्रत्येक मामले के लिए पास/असफल देखें।", + "evalSuites": "मूल्यांकन सूट", + "evalSuitesHint": "परीक्षण मामलों को देखने के लिए एक सूट पर क्लिक करें, फिर अपने एलएलएम समापन बिंदुओं का मूल्यांकन करने के लिए चलाएं", + "evalsLoading": "इवल सूट लोड हो रहा है...", + "noEvalSuitesFound": "कोई इवल सूट नहीं मिला", + "noEvalSuitesDescription": "इवल सुइट्स को एपीआई या कोड के माध्यम से परिभाषित किया जा सकता है। वे सम्‍मिलित, रेगेक्स, सटीक मिलान और कस्टम फ़ंक्शंस जैसी रणनीतियों का उपयोग करके अपेक्षित परिणामों के विरुद्ध मॉडल आउटपुट का परीक्षण करते हैं।", + "columnCase": "मामला", + "columnStatus": "स्थिति", + "columnLatency": "विलंबता", + "columnDetails": "विवरण", + "columnModel": "मॉडल", + "columnStrategy": "रणनीति", + "columnExpected": "अपेक्षित", + "statsSuites": "सूट", + "statsTestCases": "परीक्षण मामले", + "statsModels": "मॉडल", + "statsCoverage": "कवरेज", + "statsStrategiesCount": "{count} रणनीतियाँ", + "evaluationStrategies": "Evaluation Strategies", + "modelsUnderTest": "Models Under Test", + "searchSuitesPlaceholder": "Search suites...", + "passSuffix": "pass", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Run Eval", + "runningProgress": "चल रहा है {current}/{total}...", + "passRate": "pass rate", + "summaryBreakdown": "{passed} उत्तीर्ण · {failed} अनुत्तीर्ण · {total} कुल", + "passedIconLabel": "✅उत्तीर्ण", + "failedIconLabel": "❌ Failed", + "detailsContains": "इसमें शामिल है: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "अपेक्षित: \"{expected}\"", + "noResultsYet": "No results yet", + "testCasesCount": "परीक्षण मामले ({count})", + "noTestCasesDefined": "No test cases defined", + "runEvalHint": "अपने एलएलएम समापन बिंदु के विरुद्ध सभी मामलों को निष्पादित करने के लिए \"रन इवल\" पर क्लिक करें। प्रत्येक परीक्षण ओम्निरूट के माध्यम से एक वास्तविक अनुरोध भेजता है।", + "notifyNoTestCases": "इस सुइट के लिए कोई परीक्षण मामला परिभाषित नहीं है", + "notifyAllCasesPassed": "सभी {total} मामले पारित ✅", + "notifySomeCasesFailed": "{passed}/{total} उत्तीर्ण, {failed} अनुत्तीर्ण", + "notifyEvalRunFailed": "Eval run failed", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "Model Evaluations", + "evalsHeroDescription": "पूर्वनिर्धारित मूल्यांकन सुइट्स चलाकर अपने एलएलएम समापन बिंदुओं का परीक्षण और सत्यापन करें। प्रत्येक सुइट में परीक्षण मामले होते हैं जो ओमनीरूट के माध्यम से वास्तविक संकेत भेजते हैं और अपेक्षित मानदंडों के विरुद्ध प्रतिक्रियाओं की तुलना करते हैं - आपको प्रतिगमन का पता लगाने, मॉडल की तुलना करने और प्रदाताओं के बीच प्रतिक्रिया की गुणवत्ता सुनिश्चित करने में मदद करते हैं।", + "qualityValidation": "Quality Validation", + "modelComparison": "Model Comparison", + "regressionDetection": "Regression Detection", + "latencyBenchmarks": "Latency Benchmarks", + "modelLockouts": "Model Lockouts", + "noLockouts": "वर्तमान में कोई भी मॉडल लॉक नहीं है", + "activeSessions": "सक्रिय सत्र", + "noSessions": "कोई सक्रिय सत्र नहीं", + "sessionsHint": "प्रॉक्सी के माध्यम से अनुरोध प्रवाहित होने पर सत्र दिखाई देते हैं", + "sessionsTrackedHint": "अनुरोध फ़िंगरप्रिंटिंग के माध्यम से ट्रैक किया गया • ऑटो-रीफ्रेश 5s", + "session": "सत्र", + "age": "उम्र", + "requests": "अनुरोध", + "connection": "कनेक्शन", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "प्रदाता सीमाएँ", + "noProviders": "कोई प्रदाता कनेक्ट नहीं है", + "connectProvidersForQuota": "अपनी एपीआई कोटा सीमा और उपयोग को ट्रैक करने के लिए OAuth वाले प्रदाताओं से जुड़ें।", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "({count} से फ़िल्टर किया गया)", + "autoRefresh": "स्वतः ताज़ा करें", + "refreshAll": "सभी को ताज़ा करें", + "loadingQuotas": "लोड हो रहा है...", + "account": "खाता", + "modelQuotas": "मॉडल कोटा", + "lastUsed": "अंतिम बार उपयोग किया गया", + "actions": "क्रियाएँ", + "refreshQuota": "ताज़ा कोटा", + "today": "आज", + "tomorrow": "कल", + "dayTimeFormat": "{day}, {time}", + "inDuration": "{duration} में", + "notApplicable": "एन/ए", + "rawPlanWithValue": "कच्ची योजना: {plan}", + "noPlanFromProvider": "प्रदाता की ओर से कोई योजना नहीं", + "noQuotaData": "कोई कोटा डेटा नहीं", + "noQuotaDataAvailable": "कोई कोटा डेटा उपलब्ध नहीं है", + "noAccountsForTierFilter": "टियर फ़िल्टर के लिए कोई खाता नहीं मिला", + "tierAll": "सब", + "tierEnterprise": "उद्यम", + "tierTeam": "टीम", + "tierBusiness": "व्यवसाय", + "tierUltra": "अल्ट्रा", + "tierPro": "प्रो", + "tierPlus": "प्लस", + "tierFree": "निःशुल्क", + "tierUnknown": "अज्ञात" + }, + "modals": { + "waitingAuth": "प्राधिकरण की प्रतीक्षा की जा रही है", + "verificationUrl": "सत्यापन यूआरएल", + "yourCode": "आपका कोड", + "remoteAccess": "रिमोट एक्सेस:", + "connectedSuccess": "सफलतापूर्वक कनेक्ट हो गया!", + "connectionFailed": "कनेक्शन विफल", + "chooseAuthMethod": "अपनी प्रमाणीकरण विधि चुनें:", + "awsBuilderId": "AWS बिल्डर आईडी", + "awsIamIdentity": "एडब्ल्यूएस आईएएम पहचान केंद्र", + "googleAccount": "गूगल खाता", + "githubAccount": "गिटहब खाता", + "importToken": "टोकन आयात करें", + "pasteToken": "किरो आईडीई से ताज़ा टोकन चिपकाएँ।", + "awsRegion": "एडब्ल्यूएस क्षेत्र", + "autoDetecting": "टोकन का स्वतः पता लगाना...", + "readingFromCache": "AWS SSO कैश से पढ़ना", + "readingFromCursor": "कर्सर आईडीई डेटाबेस से पढ़ना", + "initializing": "प्रारंभ किया जा रहा है...", + "pricingConfig": "मूल्य निर्धारण विन्यास", + "loadingPricing": "मूल्य निर्धारण डेटा लोड हो रहा है...", + "pricingRatesFormat": "मूल्य निर्धारण दरें प्रारूप", + "noPricingData": "कोई मूल्य निर्धारण डेटा उपलब्ध नहीं है", + "noModelsFound": "कोई मॉडल नहीं मिला" + }, + "loggers": { + "allProviders": "सभी प्रदाता", + "allModels": "सभी मॉडल", + "allAccounts": "सभी खाते", + "allApiKeys": "सभी एपीआई कुंजियाँ", + "allTypes": "सभी प्रकार", + "allLevels": "सभी स्तर", + "modelAZ": "मॉडल ए-जेड", + "modelZA": "मॉडल जेड-ए", + "loadingLogs": "लॉग लोड हो रहे हैं...", + "loadingProxyLogs": "प्रॉक्सी लॉग लोड हो रहा है...", + "noLogEntries": "कोई लॉग प्रविष्टियाँ नहीं मिलीं", + "noPayloadData": "इस लॉग प्रविष्टि के लिए कोई पेलोड डेटा उपलब्ध नहीं है।", + "proxyEvent": "प्रॉक्सी इवेंट", + "proxy": "प्रॉक्सी", + "level": "स्तर", + "directNative": "प्रत्यक्ष (मूल)", + "combo": "कॉम्बो", + "inputTokens": "मैं:", + "outputTokens": "हे:" + }, + "stats": { + "usageOverview": "उपयोग अवलोकन", + "outputTokens": "आउटपुट टोकन", + "totalCost": "कुल लागत", + "usageByModel": "मॉडल द्वारा उपयोग", + "usageByAccount": "खाते द्वारा उपयोग", + "failedToLoad": "उपयोग आँकड़े लोड करने में विफल.", + "tokenHealth": "सांकेतिक स्वास्थ्य", + "totalOAuth": "कुल OAuth", + "healthy": "स्वस्थ", + "warning": "चेतावनी", + "errored": "ग़लती हुई", + "lastCheck": "आखिरी जांच", + "noData": "कोई डेटा नहीं", + "share": "साझा करें", + "unableToLoad": "सिस्टम मेट्रिक्स लोड करने में असमर्थ", + "product": "उत्पाद", + "resources": "संसाधन", + "company": "कंपनी" + }, + "auth": { + "welcome": "स्वागत है", + "signIn": "साइन इन करें", + "enterPassword": "जारी रखने के लिए अपना पासवर्ड दर्ज करें", + "password": "पासवर्ड", + "unifiedProxy": "एकीकृत एआई एपीआई प्रॉक्सी", + "unifiedAiApiProxy": "एकीकृत एआई एपीआई प्रॉक्सी", + "unifiedAiApiProxyDesc": "एक ही समापन बिंदु के माध्यम से एकाधिक एआई प्रदाताओं को अनुरोध रूट करें। लोड संतुलन, फेलओवर और उपयोग ट्रैकिंग अंतर्निहित है।", + "passwordNotEnabled": "पासवर्ड सुरक्षा सक्षम नहीं है", + "loading": "लोड हो रहा है...", + "invalidPassword": "अमान्य पासवर्ड", + "errorOccurredRetry": "एक त्रुटि हुई. कृपया पुन: प्रयास करें।", + "configureInstance": "आइए आपका ओम्निरूट इंस्टेंस कॉन्फ़िगर करें", + "runOnboardingWizard": "अपना पासवर्ड सेट करने और अपने पहले AI प्रदाता को कनेक्ट करने के लिए ऑनबोर्डिंग विज़ार्ड चलाएँ।", + "startOnboarding": "ऑनबोर्डिंग प्रारंभ करें", + "secureYourInstance": "अपना उदाहरण सुरक्षित करें", + "setPasswordDescription": "अपने डैशबोर्ड की सुरक्षा और अपने एपीआई एंडपॉइंट को अनधिकृत पहुंच से सुरक्षित करने के लिए एक पासवर्ड सेट करें।", + "configurePassword": "पासवर्ड कॉन्फ़िगर करें", + "continue": "जारी रखें", + "windowWillClose": "यह विंडो अपने आप बंद हो जाएगी...", + "closeTabNow": "अब आप इस टैब को बंद कर सकते हैं.", + "copyUrlManual": "कृपया एड्रेस बार से यूआरएल कॉपी करें और एप्लिकेशन में पेस्ट करें।", + "accessDeniedDescription": "आपके पास इस संसाधन तक पहुँचने की अनुमति नहीं है. अपनी एपीआई कुंजी जांचें या व्यवस्थापक से संपर्क करें।", + "goToDashboard": "डैशबोर्ड पर जाएँ", + "featureMultiProviderTitle": "बहु-प्रदाता", + "featureMultiProviderDesc": "ओपनएआई, एंथ्रोपिक, गूगल, और बहुत कुछ", + "featureLoadBalancingTitle": "भार संतुलन", + "featureLoadBalancingDesc": "अनुरोधों को समझदारी से वितरित करें", + "featureUsageTrackingTitle": "उपयोग ट्रैकिंग", + "featureUsageTrackingDesc": "लागत और टोकन की निगरानी करें", + "resetPassword": "पासवर्ड रीसेट करें", + "resetDescription": "अपने डैशबोर्ड तक पहुंच पुनर्प्राप्त करने के लिए एक विधि चुनें", + "stopServer": "ओम्निरूट सर्वर बंद करें", + "processing": "प्रसंस्करण...", + "pleaseWait": "कृपया तब तक प्रतीक्षा करें जब तक हम प्राधिकरण पूरा नहीं कर लेते।", + "authSuccess": "प्राधिकरण सफल!", + "copyUrl": "इस यूआरएल को कॉपी करें", + "accessDenied": "प्रवेश अस्वीकृत", + "methodCliTitle": "विधि 1: सीएलआई रीसेट", + "methodCliDescription": "उस सर्वर पर निम्नलिखित कमांड चलाएँ जहाँ ओमनीरूट चल रहा है:", + "methodCliHint": "यह आपको एक नया पासवर्ड सेट करने के लिए प्रेरित करेगा। सबसे पहले सर्वर को बंद करना होगा.", + "methodManualTitle": "विधि 2: मैन्युअल रीसेट", + "methodManualDescription": "डेटाबेस से पासवर्ड हटाएं और स्टार्टअप पर एक नया पासवर्ड सेट करें:", + "setPasswordInYour": "अपने में एक नया पासवर्ड सेट करें", + "fileLabelSuffix": "फ़ाइल:", + "newPasswordPlaceholder": "आपका_नया_पासवर्ड", + "deleteSettingsFile": "हटाएँ", + "orRemovePasswordHashField": "या पासवर्डहैश फ़ील्ड हटा दें", + "restartServerWithNewPassword": "सर्वर को पुनरारंभ करें - यह नए पासवर्ड का उपयोग करेगा", + "backToLogin": "लॉगइन पर वापस जाएँ", + "forgotPassword": "पासवर्ड भूल गए?" + }, + "landing": { + "brandName": "ओम्निरूट", + "navigateHome": "घर पर नेविगेट करें", + "toggleMenu": "मेनू टॉगल करें", + "featuresLink": "विशेषताएं", + "docsLink": "दस्तावेज़", + "github": "गिटहब", + "versionLive": "v1.0 अब लाइव है", + "oneEndpoint": "के लिए एक समापन बिंदु", + "allProviders": "सभी एआई प्रदाता", + "heroDescription": "वेब डैशबोर्ड के साथ एआई एंडपॉइंट प्रॉक्सी - CLIProxyAPI का एक जावास्क्रिप्ट पोर्ट। क्लाउड कोड, ओपनएआई कोडेक्स, क्लाइन, रूओकोड और अन्य सीएलआई टूल के साथ निर्बाध रूप से काम करता है।", + "getStarted": "आरंभ करें", + "viewOnGithub": "GitHub पर देखें", + "powerfulFeatures": "शक्तिशाली विशेषताएं", + "featuresSubtitle": "अपने एआई बुनियादी ढांचे को प्रबंधित करने के लिए आपको जो कुछ भी चाहिए वह एक ही स्थान पर, पैमाने के लिए बनाया गया है।", + "featureUnifiedEndpointTitle": "एकीकृत समापन बिंदु", + "featureUnifiedEndpointDesc": "एक ही मानक एपीआई यूआरएल के माध्यम से सभी प्रदाताओं तक पहुंचें।", + "featureEasySetupTitle": "आसान सेटअप", + "featureEasySetupDesc": "एनपीएक्स कमांड के साथ मिनटों में उठें और दौड़ें।", + "featureModelFallbackTitle": "मॉडल फ़ॉलबैक", + "featureModelFallbackDesc": "विफलता या उच्च विलंबता पर प्रदाताओं को स्वचालित रूप से स्विच करें।", + "featureUsageTrackingTitle": "उपयोग ट्रैकिंग", + "featureUsageTrackingDesc": "सभी मॉडलों में विस्तृत विश्लेषण और लागत निगरानी।", + "featureOAuthApiKeysTitle": "OAuth और API कुंजियाँ", + "featureOAuthApiKeysDesc": "एक तिजोरी में क्रेडेंशियल्स को सुरक्षित रूप से प्रबंधित करें।", + "featureCloudSyncTitle": "क्लाउड सिंक", + "featureCloudSyncDesc": "अपने कॉन्फ़िगरेशन को सभी डिवाइसों में तुरंत सिंक करें।", + "featureCliSupportTitle": "सीएलआई समर्थन", + "featureCliSupportDesc": "क्लाउड कोड, कोडेक्स, क्लाइन, कर्सर और बहुत कुछ के साथ काम करता है।", + "featureDashboardTitle": "डैशबोर्ड", + "featureDashboardDesc": "वास्तविक समय ट्रैफ़िक विश्लेषण के लिए विज़ुअल डैशबोर्ड।", + "howItWorks": "ओमनीरूट कैसे काम करता है", + "howItWorksDescription": "डेटा आपके एप्लिकेशन से हमारी बुद्धिमान रूटिंग परत के माध्यम से कार्य के लिए सर्वोत्तम प्रदाता तक निर्बाध रूप से प्रवाहित होता है।", + "howItWorksStep1Title": "1. सीएलआई और एसडीके", + "howItWorksStep1Description": "आपके अनुरोध आपके पसंदीदा टूल या हमारे एकीकृत एसडीके से शुरू होते हैं। बस आधार यूआरएल बदलें.", + "howItWorksStep2Title": "2. ओमनीरूट हब", + "howItWorksStep2Description": "हमारा इंजन शीघ्रता का विश्लेषण करता है, प्रदाता के स्वास्थ्य की जांच करता है, और न्यूनतम विलंबता या लागत के लिए मार्गों की जांच करता है।", + "howItWorksStep3Title": "3. एआई प्रदाता", + "howItWorksStep3Description": "अनुरोध OpenAI, एंथ्रोपिक, जेमिनी या अन्य द्वारा तुरंत पूरा किया जाता है।", + "getStartedIn30Seconds": "30 सेकंड में आरंभ करें", + "getStartedDescription": "ओम्निरूट स्थापित करें, वेब डैशबोर्ड के माध्यम से अपने प्रदाताओं को कॉन्फ़िगर करें, और एआई अनुरोधों को रूट करना शुरू करें।", + "installOmniRoute": "ओम्निरूट स्थापित करें", + "installStepDescription": "सर्वर को तुरंत प्रारंभ करने के लिए npx कमांड चलाएँ", + "openDashboard": "डैशबोर्ड खोलें", + "openDashboardStepDescription": "वेब इंटरफ़ेस के माध्यम से प्रदाताओं और एपीआई कुंजियों को कॉन्फ़िगर करें", + "routeRequests": "मार्ग अनुरोध", + "routeRequestsStepDescription": "अपने सीएलआई टूल को {endpoint} पर इंगित करें", + "terminal": "टर्मिनल", + "copy": "प्रतिलिपि", + "copied": "✓ कॉपी किया गया", + "startingOmniRoute": "ओम्निरूट प्रारंभ हो रहा है...", + "serverRunningOnLabel": "सर्वर चालू है", + "dashboardLabel": "डैशबोर्ड", + "readyToRoute": "रूट करने के लिए तैयार! ✓", + "configureProvidersNote": "📝 डैशबोर्ड में प्रदाताओं को कॉन्फ़िगर करें या पर्यावरण चर का उपयोग करें", + "dataLocation": "डेटा स्थान:", + "dataLocationMacLinux": " मैकओएस/लिनक्स:", + "dataLocationWindows": " खिड़कियाँ:", + "product": "उत्पाद", + "dashboardLink": "डैशबोर्ड", + "changelog": "चेंजलॉग", + "resources": "संसाधन", + "documentation": "दस्तावेज़ीकरण", + "npm": "एनपीएम", + "legal": "कानूनी", + "mitLicense": "एमआईटी लाइसेंस", + "footerTagline": "एआई पीढ़ी के लिए एकीकृत समापन बिंदु। अपने AI प्रदाताओं को आसानी से कनेक्ट करें, रूट करें और प्रबंधित करें।", + "copyright": "© {year} ओम्निरूट। सर्वाधिकार सुरक्षित।", + "flowToolClaudeCode": "क्लाउड कोड", + "flowToolOpenAICodex": "ओपनएआई कोडेक्स", + "flowToolCline": "क्लाइन", + "flowToolCursor": "कर्सर", + "flowProviderOpenAI": "ओपनएआई", + "flowProviderAnthropic": "मानवशास्त्रीय", + "flowProviderGemini": "मिथुन", + "flowProviderGithubCopilot": "गिटहब कोपायलट", + "interactiveDiagram": "इंटरएक्टिव आरेख डेस्कटॉप पर दिखाई दे रहा है", + "ctaTitle": "क्या आप अपने एआई इंफ्रास्ट्रक्चर को सरल बनाने के लिए तैयार हैं?", + "ctaDescription": "उन डेवलपर्स से जुड़ें जो ओमनीरूट के साथ अपने एआई एकीकरण को सुव्यवस्थित कर रहे हैं। खुला स्रोत और प्रारंभ करने के लिए निःशुल्क।", + "startFree": "निःशुल्क प्रारंभ करें", + "readDocumentation": "दस्तावेज़ीकरण पढ़ें" + }, + "docs": { + "title": "दस्तावेज़ीकरण", + "quickStart": "त्वरित शुरुआत", + "features": "विशेषताएं", + "supportedProviders": "समर्थित प्रदाता", + "supportedProvidersToc": "प्रदाता", + "commonUseCases": "सामान्य उपयोग के मामले", + "clientCompatibility": "ग्राहक अनुकूलता", + "apiReference": "एपीआई संदर्भ", + "method": "विधि", + "path": "पथ", + "notes": "टिप्पणियाँ", + "modelPrefixes": "मॉडल उपसर्ग", + "prefix": "उपसर्ग", + "troubleshooting": "समस्या निवारण", + "supportsChat": "चैट और प्रतिक्रिया दोनों समापन बिंदुओं का समर्थन करता है।", + "oauthAutoRefresh": "स्वचालित टोकन ताज़ा के साथ OAuth कनेक्शन।", + "fullStreaming": "सभी मॉडलों के लिए पूर्ण स्ट्रीमिंग समर्थन।", + "docsLabel": "दस्तावेज़", + "docsHeroDescription": "बहु-प्रदाता एलएलएम के लिए एआई गेटवे। ओपनएआई, एंथ्रोपिक, जेमिनी, गिटहब कोपायलट, क्लाउड कोड, कर्सर और 20+ अधिक प्रदाताओं के लिए एक समापन बिंदु।", + "openDashboard": "डैशबोर्ड खोलें", + "endpointPage": "समापन बिंदु पृष्ठ", + "github": "गिटहब", + "reportIssue": "रिपोर्ट मुद्दा", + "onThisPage": "इस पेज पर", + "documentationVersion": "दस्तावेज़ीकरण - v{version}", + "quickStartStep1Title": "1. इंस्टॉल करें और चलाएं", + "quickStartStep1Prefix": "भागो", + "quickStartStep1Middle": "या GitHub से क्लोन करें और चलाएं", + "quickStartStep2Title": "2. एपीआई कुंजी बनाएं", + "quickStartStep2Text": "एंडपॉइंट -> पंजीकृत कुंजियाँ पर जाएँ। प्रति परिवेश एक कुंजी उत्पन्न करें.", + "quickStartStep3Title": "3. प्रदाताओं को कनेक्ट करें", + "quickStartStep3Text": "OAuth लॉगिन, API कुंजी, या फ्री-टियर ऑटो-कनेक्ट के माध्यम से प्रदाता खाते जोड़ें।", + "quickStartStep4Title": "4. क्लाइंट बेस यूआरएल सेट करें", + "quickStartStep4Prefix": "अपने आईडीई या एपीआई क्लाइंट को इंगित करें", + "quickStartStep4Suffix": "उदाहरण के लिए, प्रदाता उपसर्ग का उपयोग करें", + "featureRoutingTitle": "बहु-प्रदाता रूटिंग", + "featureRoutingText": "एकल OpenAI-संगत एंडपॉइंट के माध्यम से 30+ AI प्रदाताओं को रूट अनुरोध। चैट, प्रतिक्रियाओं, ऑडियो और छवि एपीआई का समर्थन करता है।", + "featureCombosTitle": "संयोजन और संतुलन", + "featureCombosText": "फ़ॉलबैक चेन और संतुलन रणनीतियों के साथ मॉडल कॉम्बो बनाएं: राउंड-रॉबिन, प्राथमिकता, यादृच्छिक, कम से कम उपयोग किया गया और लागत-अनुकूलित।", + "featureUsageTitle": "उपयोग और लागत ट्रैकिंग", + "featureUsageText": "वास्तविक समय टोकन गणना, प्रति प्रदाता/मॉडल लागत गणना, और एपीआई कुंजी और खाते द्वारा विस्तृत उपयोग विवरण।", + "featureAnalyticsTitle": "एनालिटिक्स डैशबोर्ड", + "featureAnalyticsText": "समय के साथ अनुरोधों, टोकन, त्रुटियों, विलंबता, लागत और मॉडल की लोकप्रियता के लिए चार्ट के साथ दृश्य विश्लेषण।", + "featureHealthTitle": "स्वास्थ्य निगरानी", + "featureHealthText": "लाइव स्वास्थ्य जांच, प्रदाता स्थिति, सर्किट ब्रेकर स्थिति, और घातीय बैकऑफ़ के साथ स्वचालित दर सीमा का पता लगाना।", + "featureCliTitle": "सीएलआई उपकरण", + "featureCliText": "आईडीई कॉन्फ़िगरेशन प्रबंधित करें, बैकअप निर्यात/आयात करें, कोडेक्स प्रोफ़ाइल खोजें और डैशबोर्ड से सेटिंग्स कॉन्फ़िगर करें।", + "featureSecurityTitle": "सुरक्षा और नीतियाँ", + "featureSecurityText": "एपीआई कुंजी प्रमाणीकरण, आईपी फ़िल्टरिंग, शीघ्र इंजेक्शन गार्ड, डोमेन नीतियां, सत्र प्रबंधन और ऑडिट लॉगिंग।", + "featureCloudSyncTitle": "क्लाउड सिंक", + "featureCloudSyncText": "एन्क्रिप्टेड क्रेडेंशियल और स्वचालित फ़ेलओवर के साथ रिमोट एक्सेस के लिए अपने कॉन्फ़िगरेशन को क्लाउडफ़ेयर वर्कर्स के साथ सिंक करें।", + "providersAcrossConnectionTypes": "तीन कनेक्शन प्रकारों में {count} प्रदाता।", + "manageProviders": "प्रदाताओं को प्रबंधित करें", + "providersCount": "{count} प्रदाता", + "providerTypeFree": "फ्री टियर", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "एपीआई कुंजी", + "useCaseSingleEndpointTitle": "कई प्रदाताओं के लिए एकल समापन बिंदु", + "useCaseSingleEndpointText": "क्लाइंट को एक आधार URL पर इंगित करें और मॉडल उपसर्ग द्वारा रूट करें (उदाहरण के लिए: gh/, cc/, kr/, openai/)।", + "useCaseFallbackTitle": "कॉम्बो के साथ फ़ॉलबैक और मॉडल स्विचिंग", + "useCaseFallbackText": "डैशबोर्ड में कॉम्बो मॉडल बनाएं और क्लाइंट कॉन्फ़िगरेशन को स्थिर रखें जबकि प्रदाता आंतरिक रूप से घूमते रहें।", + "useCaseUsageVisibilityTitle": "उपयोग, लागत और डिबग दृश्यता", + "useCaseUsageVisibilityText": "उपयोग और विश्लेषण टैब में प्रदाता, खाते और एपीआई कुंजी द्वारा टोकन और लागत को ट्रैक करें।", + "clientCherryStudioTitle": "चेरी स्टूडियो", + "baseUrlLabel": "आधार यूआरएल", + "chatEndpointLabel": "चैट समापन बिंदु", + "modelRecommendationLabel": "मॉडल अनुशंसा: स्पष्ट उपसर्ग", + "clientCodexTitle": "कोडेक्स/गिटहब कोपायलट मॉडल", + "clientCodexBullet1": "के साथ मॉडल आईडी का उपयोग करें", + "clientCodexBullet2": "कोडेक्स-फ़ैमिली मॉडल ऑटो-रूट", + "clientCodexBullet3": "गैर-कोडेक्स मॉडल जारी हैं", + "clientCursorTitle": "कर्सर आईडीई", + "clientCursorBullet1": "उपयोग करें", + "clientCursorBullet1Suffix": "कर्सर मॉडल के लिए उपसर्ग.", + "clientCursorBullet2": "OAuth कनेक्शन - प्रदाता पृष्ठ से लॉगिन करें।", + "clientClaudeTitle": "क्लाउड कोड / एंटीग्रेविटी", + "clientClaudeBullet1Prefix": "उपयोग करें", + "clientClaudeBullet1Middle": "(क्लाउड) या", + "clientClaudeBullet1Suffix": "(एंटीग्रेविटी) उपसर्ग।", + "endpointChatNote": "OpenAI-संगत चैट समापन बिंदु (डिफ़ॉल्ट)।", + "endpointResponsesNote": "प्रतिक्रियाएँ एपीआई समापन बिंदु (कोडेक्स, ओ-श्रृंखला)।", + "endpointModelsNote": "सभी जुड़े हुए प्रदाताओं के लिए मॉडल कैटलॉग।", + "endpointAudioNote": "ऑडियो ट्रांसक्रिप्शन (डीपग्राम, असेंबलीएआई)।", + "endpointImagesNote": "छवि निर्माण (नैनोबनाना)।", + "endpointRewriteChatNote": "/v1 के बिना ग्राहकों के लिए सहायक को फिर से लिखें।", + "endpointRewriteResponsesNote": "/v1 के बिना प्रतिक्रियाओं के लिए सहायक को फिर से लिखें।", + "endpointRewriteModelsNote": "/v1 के बिना मॉडल खोज के लिए सहायक को फिर से लिखें।", + "modelPrefixesDescriptionStart": "किसी विशिष्ट प्रदाता तक रूट करने के लिए मॉडल नाम से पहले प्रदाता उपसर्ग का उपयोग करें। उदाहरण:", + "modelPrefixesDescriptionEnd": "GitHub Copilot के लिए मार्ग।", + "provider": "प्रदाता", + "type": "प्रकार", + "troubleshootingModelRouting": "यदि क्लाइंट मॉडल रूटिंग में विफल रहता है, तो स्पष्ट प्रदाता/मॉडल का उपयोग करें (उदाहरण के लिए: gh/gpt-5.1-कोडेक्स)।", + "troubleshootingAmbiguousModels": "यदि आपको अस्पष्ट मॉडल त्रुटियाँ प्राप्त होती हैं, तो नंगे मॉडल आईडी के बजाय प्रदाता उपसर्ग चुनें।", + "troubleshootingCodexFamily": "GitHub कोडेक्स-फ़ैमिली मॉडल के लिए, मॉडल को gh/ के रूप में रखें; राउटर स्वचालित रूप से/प्रतिक्रियाओं का चयन करता है।", + "troubleshootingTestConnection": "आईडीई या बाहरी क्लाइंट से परीक्षण करने से पहले डैशबोर्ड > प्रदाता > परीक्षण कनेक्शन का उपयोग करें।", + "troubleshootingCircuitBreaker": "यदि कोई प्रदाता सर्किट ब्रेकर खुला दिखाता है, तो कूलडाउन की प्रतीक्षा करें या विवरण के लिए स्वास्थ्य पृष्ठ देखें।", + "troubleshootingOAuth": "OAuth प्रदाताओं के लिए, यदि टोकन समाप्त हो जाते हैं तो पुनः प्रमाणित करें। प्रदाता कार्ड स्थिति संकेतक की जाँच करें।" + }, + "legal": { + "privacyPolicy": "गोपनीयता नीति", + "termsOfService": "सेवा की शर्तें", + "providerConfigurations": "प्रदाता विन्यास", + "apiKeys": "एपीआई कुंजियाँ", + "usageLogs": "उपयोग लॉग", + "applicationSettings": "एप्लिकेशन सेटिंग्स", + "viewExportAnalytics": "उपयोग विश्लेषण देखें और निर्यात करें", + "clearHistory": "किसी भी समय उपयोग इतिहास साफ़ करें", + "configureRetention": "लॉग अवधारण नीतियों को कॉन्फ़िगर करें", + "backupRestore": "अपने डेटाबेस का बैकअप लें और पुनर्स्थापित करें", + "privacyMetadataTitle": "गोपनीयता नीति | ओम्निरूट", + "privacyMetadataDescription": "ओमनीरूट एआई एपीआई प्रॉक्सी राउटर के लिए गोपनीयता नीति।", + "termsMetadataTitle": "सेवा की शर्तें | ओम्निरूट", + "termsMetadataDescription": "ओमनीरूट एआई एपीआई प्रॉक्सी राउटर के लिए सेवा की शर्तें।", + "backToHome": "घर वापस", + "lastUpdated": "अंतिम अद्यतन: {date}", + "policyLastUpdatedDate": "13 फ़रवरी 2026", + "listSeparator": "-", + "questionsVisit": "प्रश्न? हमारे पर जाएँ", + "githubRepository": "गिटहब रिपॉजिटरी", + "privacySection1Title": "1. स्थानीय-प्रथम वास्तुकला", + "privacySection1Text": "ओमनीरूट को स्थानीय-प्रथम एप्लिकेशन के रूप में डिज़ाइन किया गया है। सभी डेटा प्रोसेसिंग और भंडारण पूरी तरह से आपकी मशीन पर होता है। आपकी जानकारी एकत्र करने वाला कोई केंद्रीकृत सर्वर नहीं है।", + "privacySection2Title": "2. डेटा हम संग्रहीत करते हैं", + "privacyDataStoredIn": "निम्नलिखित डेटा को स्थानीय रूप से संग्रहीत किया जाता है", + "privacyDataProviderConfigurationsDesc": "कनेक्शन यूआरएल, प्रदाता प्रकार और प्राथमिकता सेटिंग्स", + "privacyDataApiKeysDesc": "एआई प्रदाताओं के साथ प्रमाणीकरण के लिए एन्क्रिप्टेड और स्थानीय रूप से संग्रहीत", + "privacyDataUsageLogsDesc": "अनुरोध संख्या, टोकन उपयोग, मॉडल नाम, टाइमस्टैम्प और प्रतिक्रिया समय", + "privacyDataApplicationSettingsDesc": "थीम प्राथमिकताएँ, रूटिंग रणनीति और कॉम्बो कॉन्फ़िगरेशन", + "privacySection3Title": "3. कोई टेलीमेट्री नहीं", + "privacySection3Text": "ओमनीरूट टेलीमेट्री, एनालिटिक्स या क्रैश रिपोर्ट एकत्र नहीं करता है। हमें या किसी तीसरे पक्ष को कोई डेटा नहीं भेजा जाता है। आपके उपयोग पैटर्न, एपीआई कॉल और कॉन्फ़िगरेशन पूरी तरह से निजी रहते हैं।", + "privacySection4Title": "4. तृतीय-पक्ष एआई प्रदाता", + "privacySection4Text": "जब आप ओमनीरूट के माध्यम से एपीआई कॉल करते हैं, तो आपके अनुरोध आपके द्वारा कॉन्फ़िगर किए गए एआई प्रदाताओं को भेज दिए जाते हैं (उदाहरण के लिए: ओपनएआई, एंथ्रोपिक, गूगल)। इन प्रदाताओं की अपनी गोपनीयता नीतियां होती हैं जो यह नियंत्रित करती हैं कि वे आपके डेटा को कैसे संभालते हैं। कृपया समीक्षा करें:", + "privacyOpenAiPolicy": "ओपनएआई गोपनीयता नीति", + "privacyAnthropicPolicy": "मानवशास्त्रीय गोपनीयता नीति", + "privacyGooglePolicy": "गूगल गोपनीयता नीति", + "privacySection5Title": "5. क्लाउड सिंक (वैकल्पिक)", + "privacySection5Text": "यदि आप वैकल्पिक क्लाउड सिंक सुविधा सक्षम करते हैं, तो प्रदाता कॉन्फ़िगरेशन और एपीआई कुंजियाँ कॉन्फ़िगर किए गए क्लाउड एंडपॉइंट पर प्रेषित की जा सकती हैं। यह सुविधा डिफ़ॉल्ट रूप से अक्षम है और इसके लिए स्पष्ट ऑप्ट-इन की आवश्यकता है।", + "privacySection6Title": "6. लॉगिंग", + "privacyLoggingIntro": "अनुरोध लॉग को डैशबोर्ड सेटिंग्स के माध्यम से कॉन्फ़िगर किया जा सकता है। आप यह कर सकते हैं:", + "privacySection7Title": "7. आपके अधिकार", + "privacySection7TextStart": "चूँकि सारा डेटा स्थानीय रूप से संग्रहीत होता है, इसलिए आपका पूरा नियंत्रण होता है। आप किसी भी समय हटाकर अपना डेटा हटा सकते हैं", + "privacySection7TextEnd": "निर्देशिका या डेटाबेस बैकअप का उपयोग करना और डैशबोर्ड में सुविधाओं को पुनर्स्थापित करना।", + "termsSection1Title": "1. सिंहावलोकन", + "termsSection1Text": "ओमनीरूट एक स्थानीय-पहला एआई एपीआई प्रॉक्सी राउटर है जो पूरी तरह से आपकी मशीन पर काम करता है। यह लोड संतुलन, फेलओवर और उपयोग ट्रैकिंग के साथ कई एआई प्रदाताओं के लिए अनुरोधों को रूट करता है।", + "termsSection2Title": "2. उपयोगकर्ता जिम्मेदारियाँ", + "termsResponsibilityApiKeys": "आप तृतीय-पक्ष AI प्रदाताओं (OpenAI, Anthropic, Google, आदि) के लिए अपनी स्वयं की API कुंजियाँ और क्रेडेंशियल प्रबंधित करने के लिए पूरी तरह से जिम्मेदार हैं।", + "termsResponsibilityCompliance": "आपको प्रत्येक एआई प्रदाता की सेवा की शर्तों का पालन करना होगा जिनकी एपीआई आप ओमनीरूट के माध्यम से एक्सेस करते हैं।", + "termsResponsibilitySecurity": "आप अपने स्थानीय ओमनीरूट इंस्टॉलेशन की सुरक्षा के लिए जिम्मेदार हैं, जिसमें पासवर्ड सेट करना और नेटवर्क एक्सेस को प्रतिबंधित करना शामिल है।", + "termsSection3Title": "3. यह कैसे काम करता है", + "termsSection3Text": "ओमनीरूट एक मध्यस्थ प्रॉक्सी के रूप में कार्य करता है। ओम्निरूट को भेजी गई एपीआई कॉल का अनुवाद किया जाता है और आपके कॉन्फ़िगर किए गए एआई प्रदाताओं को अग्रेषित किया जाता है। ओमनीरूट आपके अनुरोधों या प्रतिक्रियाओं की सामग्री को आवश्यक प्रोटोकॉल अनुवाद से परे संशोधित नहीं करता है।", + "termsSection4Title": "4. डेटा हैंडलिंग", + "termsDataStoredLocally": "सभी डेटा आपकी मशीन पर SQLite डेटाबेस में स्थानीय रूप से संग्रहीत किया जाता है।", + "termsNoTransmission": "जब तक आप स्पष्ट रूप से क्लाउड सिंक सुविधाओं को सक्षम नहीं करते हैं, तब तक ओमनीरूट किसी भी डेटा को बाहरी सर्वर पर प्रसारित नहीं करता है।", + "termsDataLocationText": "उपयोग लॉग, एपीआई कुंजियाँ और कॉन्फ़िगरेशन संग्रहीत हैं", + "termsSection5Title": "5. अस्वीकरण", + "termsSection5Text": "ओम्निरूट को किसी भी प्रकार की वारंटी के बिना \"जैसा है\" प्रदान किया जाता है। हम एपीआई उपयोग, सेवा व्यवधान या डेटा हानि के कारण होने वाली किसी भी लागत के लिए ज़िम्मेदार नहीं हैं। हमेशा अपने कॉन्फ़िगरेशन का बैकअप बनाए रखें।", + "termsSection6Title": "6. खुला स्रोत", + "termsSection6Text": "ओमनीरूट ओपन-सोर्स सॉफ्टवेयर है। आप इसके लाइसेंस की शर्तों के तहत इसका निरीक्षण, संशोधन और वितरण करने के लिए स्वतंत्र हैं।" + } +} diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json new file mode 100644 index 0000000000..4f4062d072 --- /dev/null +++ b/src/i18n/messages/it.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Salva", + "cancel": "Cancellare", + "delete": "Eliminare", + "loading": "Caricamento...", + "error": "Si è verificato un errore", + "success": "Successo", + "confirm": "Sei sicuro?", + "refresh": "Aggiorna", + "close": "Vicino", + "add": "Aggiungere", + "edit": "Modificare", + "search": "Ricerca", + "back": "Indietro", + "next": "Prossimo", + "submit": "Invia", + "reset": "Reset", + "copy": "Copia", + "copied": "Copiato!", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "active": "Attivo", + "inactive": "Inattivo", + "noData": "Nessun dato disponibile", + "configure": "Configura", + "manage": "Maneggio", + "name": "Nome", + "actions": "Azioni", + "status": "Stato", + "type": "Tipo", + "model": "Modello", + "models": "modelli", + "provider": "Fornitore", + "account": "Account", + "time": "Tempo", + "details": "Dettagli", + "created": "Creato", + "lastUsed": "Ultimo utilizzo", + "loadMore": "Carica altro", + "noResults": "Nessun risultato trovato", + "reloadPage": "Ricarica la pagina", + "connected": "Collegato", + "disconnected": "Disconnesso", + "notConfigured": "Non configurato", + "testConnection": "Prova connessione", + "enable": "Abilitare", + "disable": "Disabilita", + "columns": "Colonne", + "newest": "Più recente", + "oldest": "Il più antico", + "all": "Tutto", + "none": "Nessuno", + "yes": "SÌ", + "no": "NO", + "warning": "Avvertimento", + "note": "Nota", + "free": "Gratuito", + "skipToContent": "Vai al contenuto" + }, + "sidebar": { + "home": "Casa", + "dashboard": "Pannello di controllo", + "providers": "Fornitori", + "combos": "Combinazioni", + "usage": "Utilizzo", + "analytics": "Analitica", + "costs": "Costi", + "health": "Salute", + "limits": "Limiti e quote", + "cliTools": "Strumenti CLI", + "settings": "Impostazioni", + "translator": "Traduttore", + "docs": "Documenti", + "issues": "Problemi", + "endpoint": "Punto finale", + "apiManager": "Gestore API", + "logs": "Registri", + "auditLog": "Registro di controllo", + "shutdown": "Fermare", + "restart": "Ricomincia", + "shutdownConfirm": "Arrestare OmniRoute?", + "restartConfirm": "Riavviare OmniRoute?", + "version": "v{version}", + "debug": "Debug", + "system": "Sistema", + "help": "Aiuto", + "serverDisconnected": "Server disconnesso", + "serverDisconnectedMsg": "Il server proxy è stato arrestato o si sta riavviando.", + "expandSidebar": "Espandi la barra laterale", + "collapseSidebar": "Comprimi la barra laterale" + }, + "header": { + "logout": "Esci", + "language": "Lingua", + "providers": "Fornitori", + "providerDescription": "Gestisci le connessioni del tuo fornitore di intelligenza artificiale", + "combos": "Combinazioni", + "comboDescription": "Combo di modelli con fallback", + "usage": "Utilizzo e analisi", + "usageDescription": "Monitora l'utilizzo dell'API, il consumo dei token e i log delle richieste", + "analytics": "Analitica", + "analyticsDescription": "Grafici, tendenze e approfondimenti sulla valutazione", + "cliTools": "Strumenti CLI", + "cliToolsDescription": "Configura gli strumenti CLI", + "home": "Casa", + "homeDescription": "Benvenuti in OmniRoute", + "endpoint": "Punto finale", + "endpointDescription": "Configurazione dell'endpoint API", + "settings": "Impostazioni", + "settingsDescription": "Gestisci le tue preferenze", + "openaiCompatible": "Compatibile con OpenAI", + "anthropicCompatible": "Compatibile antropico" + }, + "home": { + "quickStart": "Avvio rapido", + "quickStartDesc": "Diventa subito operativo in 4 passaggi. Connetti fornitori, modelli di percorso, monitora tutto.", + "fullDocs": "Documenti completi", + "step1Title": "1. Crea la chiave API", + "step1Desc": "Vai a Endpoint -> Chiavi registrate. Genera una chiave per ambiente.", + "step2Title": "2. Connetti i fornitori", + "step2Desc": "Aggiungi account in Providers. Supporta OAuth, chiave API e livelli gratuiti.", + "step3Title": "3. Punta il tuo cliente", + "step3Desc": "Imposta l'URL di base su {url} nel tuo client IDE o API.", + "step4Title": "4. Monitora e ottimizza", + "step4Desc": "Tieni traccia di token, costi ed errori in Request Logs e Analytics.", + "providersOverview": "Panoramica dei fornitori", + "configuredOf": "{configured} configurato tra {total} provider disponibili", + "noModelsAvailable": "Nessun modello disponibile per questo fornitore.", + "configureFirst": "Configura prima una connessione in {providers}", + "configureProvider": "Configura fornitore", + "modelAvailable": "{count} modello disponibile", + "modelsAvailable": "{count} modelli disponibili", + "connectionsActive": "Connessione {count} attiva", + "connectionsActivePlural": "{count} connessioni attive", + "copyModelName": "Copia il nome del modello", + "documentation": "Documentazione", + "healthMonitor": "Monitoraggio della salute", + "reportIssue": "Segnala il problema", + "activeError": "{active} attivo · {errors} errore", + "oauthLabel": "OAuth", + "apiKeyLabel": "Chiave API", + "requestsShort": "{count} richieste", + "providerModelsTitle": "{provider} - Modelli", + "copiedModel": "Copiato: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analitica", + "overviewDescription": "Monitora i modelli di utilizzo delle API, il consumo di token, i costi e le tendenze delle attività su tutti i provider e modelli.", + "evalsDescription": "Esegui suite di valutazione per testare e convalidare i tuoi endpoint LLM. Confronta la qualità del modello, rileva le regressioni e confronta la latenza.", + "overview": "Panoramica", + "evals": "Valutazioni" + }, + "apiManager": { + "title": "Chiavi API", + "createKey": "Crea chiave API", + "key": "Chiave", + "revokeKey": "Revoca chiave", + "revokeConfirm": "Sei sicuro di voler revocare questa chiave API?", + "noKeys": "Nessuna chiave API ancora", + "noKeysDesc": "Crea la tua prima chiave API per autenticare le richieste al tuo endpoint", + "keyLabel": "Etichetta chiave", + "permissions": "Autorizzazioni", + "expiresAt": "Scade", + "never": "Mai", + "revoke": "Revocare", + "showKey": "Mostra chiave", + "hideKey": "Nascondi chiave", + "copyKey": "Copia la chiave API", + "allModels": "Tutti i modelli", + "selectedModels": "Modelli selezionati", + "readOnly": "Sola lettura", + "fullAccess": "Accesso completo", + "keyManagement": "Gestione delle chiavi API", + "keyManagementDesc": "Crea e gestisci le chiavi API per autenticare le richieste al tuo endpoint", + "totalKeys": "Chiavi totali", + "restricted": "Limitato", + "totalRequests": "Richieste totali", + "modelsAvailable": "Modelli disponibili", + "registeredKeys": "Chiavi registrate", + "keysRegistered": "Chiavi {count} registrate", + "keyRegistered": "Chiave {count} registrata", + "keysSecurityNote": "Ciascuna chiave isola il monitoraggio dell'utilizzo e può essere revocata in modo indipendente. Le chiavi vengono mascherate dopo la creazione per motivi di sicurezza.", + "createFirstKey": "Crea la tua prima chiave", + "name": "Nome", + "usage": "Utilizzo", + "created": "Creato", + "actions": "Azioni", + "reqs": "req", + "neverUsed": "Mai usato", + "deleteConfirm": "Eliminare questa chiave API?", + "usageTips": "Suggerimenti per l'uso", + "tipAuth": "Utilizza le chiavi API nell'intestazione Autorizzazione come portatore YOUR_KEY", + "tipSecure": "Le chiavi vengono visualizzate solo una volta durante la creazione: conservale in modo sicuro", + "tipSeparate": "Crea chiavi separate per client o ambienti diversi", + "tipRestrict": "Limita le chiavi a modelli specifici per una migliore sicurezza e controllo dei costi", + "keyName": "Nome chiave", + "keyNamePlaceholder": "ad esempio, Chiave di produzione, Chiave di sviluppo", + "keyNameDesc": "Scegli un nome descrittivo per identificare lo scopo di questa chiave", + "keyCreated": "Chiave API creata", + "keyCreatedSuccess": "Chiave creata con successo!", + "keyCreatedNote": "Copia e memorizza questa chiave adesso: non verrà più mostrata.", + "done": "Fatto", + "savePermissions": "Salva autorizzazioni", + "allowAll": "Consenti tutto", + "restrict": "Limitare", + "allowAllInfo": "Questa chiave può accedere a tutti i modelli disponibili.", + "restrictInfo": "Questa chiave può accedere a {selected} di {total} modelli.", + "selected": "{count} selezionato", + "all": "Tutto", + "clear": "Chiaro", + "searchModels": "Cerca modelli per nome o fornitore...", + "noModelsFound": "Nessun modello trovato", + "keyNameRequired": "Il nome della chiave è obbligatorio", + "keyNameTooLong": "Il nome della chiave deve contenere {max} caratteri o meno", + "keyNameInvalid": "Il nome della chiave può contenere solo lettere, numeri, spazi, trattini e trattini bassi", + "invalidKeyName": "Nome della chiave non valido", + "failedCreateKey": "Impossibile creare la chiave", + "failedCreateKeyRetry": "Impossibile creare la chiave. Per favore riprova.", + "invalidKeyId": "ID chiave non valido", + "failedDeleteKey": "Impossibile eliminare la chiave", + "failedDeleteKeyRetry": "Impossibile eliminare la chiave. Per favore riprova.", + "invalidModelsSelection": "Selezione dei modelli non valida", + "cannotSelectMoreThanModels": "Impossibile selezionare più di {max} modelli", + "failedUpdatePermissions": "Impossibile aggiornare le autorizzazioni", + "failedUpdatePermissionsRetry": "Impossibile aggiornare le autorizzazioni. Per favore riprova.", + "unknownProvider": "sconosciuto", + "copyMaskedKey": "Copia chiave mascherata", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Ultimo: {date}", + "editPermissions": "Modifica autorizzazioni", + "deleteKey": "Cancella chiave", + "model": "{count} modello", + "models": "{count} modelli", + "permissionsTitle": "Autorizzazioni: {name}", + "allowAllDesc": "Questa chiave può accedere a tutti i modelli disponibili.", + "restrictDesc": "Questa chiave può accedere a {selectedCount} di {totalModels} modelli.", + "selectedCount": "{count} selezionato" + }, + "auditLog": { + "title": "Registro di controllo", + "searchPlaceholder": "Cerca azioni...", + "action": "Azione", + "actor": "Attore", + "target": "Bersaglio", + "ipAddress": "Indirizzo IP", + "timestamp": "Timestamp", + "noEntries": "Nessuna voce di controllo trovata", + "filterByAction": "Filtra per azione...", + "filterByActor": "Filtra per attore...", + "filterEntriesAria": "Filtra le voci del registro di controllo", + "filterByActionTypeAria": "Filtra per tipo di azione", + "filterByActorAria": "Filtra per attore", + "refreshAuditLogAria": "Aggiorna il registro di controllo", + "tableAria": "Voci del registro di controllo", + "failedFetchAuditLog": "Impossibile recuperare il registro di controllo", + "notAvailable": "—", + "description": "Azioni amministrative ed eventi di sicurezza", + "showing": "Visualizzazione delle voci {count} (offset {offset})", + "previous": "Precedente" + }, + "cliTools": { + "title": "Strumenti CLI", + "noActiveProviders": "Nessun fornitore attivo", + "noActiveProvidersDesc": "Aggiungi e connetti prima i provider per configurare gli strumenti CLI.", + "mapModels": "Modelli di mappe", + "testConnection": "Prova connessione", + "connectionStatus": "Stato della connessione", + "configureEndpoint": "Configura punto finale", + "instructions": "Istruzioni", + "modelMapping": "Mappatura del modello", + "baseUrl": "URL di base", + "apiKey": "Chiave API", + "configured": "Configurato", + "notConfigured": "Non configurato", + "notInstalled": "Non installato", + "custom": "Costume", + "unknown": "Sconosciuto", + "lastSavedAt": "Ultimo salvataggio: {date}", + "never": "Mai", + "justNow": "proprio adesso", + "minutesAgoShort": "{count}m fa", + "hoursAgoShort": "{count}h fa", + "daysAgoShort": "{count}d fa", + "monthsAgoShort": "{count}mo fa", + "yearsAgoShort": "{count}y fa", + "runtimeCheckFailed": "Il controllo di runtime non è riuscito", + "yourApiKeyPlaceholder": "la tua chiave API", + "modelPlaceholder": "provider/ID modello", + "configurationSaved": "Configurazione salvata con successo.", + "failedToSave": "Impossibile salvare la configurazione.", + "noApiKeysCreateOne": "Nessuna chiave API: creane una nella pagina Chiavi", + "defaultOmnirouteKey": "sk_omniroute (predefinito)", + "selectModel": "Seleziona modello", + "selectModelForAlias": "Seleziona il modello per {alias}", + "selectModelForTool": "Seleziona il modello per {tool}", + "select": "Selezionare", + "clear": "Chiaro", + "comingSoon": "Prossimamente", + "checkingRuntime": "Controllo dello stato di runtime in corso...", + "guideOnlyIntegration": "Integrazione solo con guida (non è richiesto runtime locale)", + "cliRuntimeDetected": "Runtime CLI rilevato e pronto", + "cliFoundNotRunnable": "CLI trovata ma non eseguibile{reason}", + "cliRuntimeNotDetected": "Runtime CLI non rilevato", + "binary": "Binario", + "configPath": "Percorso di configurazione", + "configPathShort": "Configurazione", + "failedCheckRuntimeStatus": "Impossibile controllare lo stato del runtime.", + "copy": "Copia", + "copied": "Copiato", + "copyConfig": "Copia config", + "saveConfig": "Salva configurazione", + "selectionSaved": "Selezione salvata", + "guide": "Guida", + "detected": "Rilevato", + "notReady": "Non pronto", + "active": "Attivo", + "inactive": "Inattivo", + "startMitm": "Avvia il MITM", + "stopMitm": "Interrompi il MITM", + "mitmStarted": "MITM è iniziato con successo!", + "mitmStopped": "MITM si è interrotto con successo!", + "failedStart": "Impossibile avviare MITM", + "failedStop": "Impossibile arrestare MITM", + "saveMappings": "Salva mappature", + "mappingsSaved": "Mappature salvate!", + "failedSaveMappings": "Impossibile salvare le mappature", + "howItWorks": "Come funziona:", + "antigravityHowWorksDesc": "Antigravity invia richieste all'endpoint di Google. MITM li intercetta e li reindirizza a OmniRoute.", + "antigravityStep1": "1. Avviare MITM per instradare le richieste tramite OmniRoute.", + "antigravityStep2Prefix": "2. Aggiungi", + "antigravityStep2Suffix": "al file host come 127.0.0.1.", + "antigravityStep3": "3. Open Antigravity e le richieste verranno inoltrate.", + "sudoPasswordRequiredTitle": "Password Sudo obbligatoria", + "sudoPasswordHint": "Per modificare le impostazioni del file host e del proxy di sistema è necessaria la password dell'amministratore.", + "enterSudoPassword": "Inserisci la password sudo", + "sudoPasswordRequiredError": "È richiesta la password Sudo.", + "cancel": "Cancellare", + "confirm": "Confermare", + "settingsApplied": "Impostazioni applicate con successo!", + "failedApplySettings": "Impossibile applicare le impostazioni", + "settingsReset": "Le impostazioni sono state ripristinate con successo!", + "failedResetSettings": "Impossibile ripristinare le impostazioni", + "backupRestored": "Backup ripristinato!", + "failedRestore": "Impossibile ripristinare", + "checkingCli": "Controllo {tool} CLI...", + "cliNotRunnable": "{tool} CLI installata ma non eseguibile", + "cliNotInstalled": "{tool} CLI non installata", + "cliNotDetected": "{tool} CLI non rilevata", + "cliDetectedReady": "{tool} CLI rilevata e pronta", + "cliFoundFailedHealthcheck": "{tool} La CLI è stata trovata ma il controllo dello stato di runtime non è riuscito{reason}.", + "installCliPrompt": "Installa {tool} CLI per utilizzare questa funzionalità.", + "installCodexPrompt": "Installa la CLI del Codex per utilizzare la funzionalità di applicazione automatica.", + "hide": "Nascondere", + "howToInstall": "Come installare", + "installationGuide": "Guida all'installazione", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "Dopo l'installazione, esegui", + "toVerify": "per verificare.", + "current": "Attuale", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Ripristina le impostazioni predefinite", + "providerModelPlaceholder": "provider/ID modello", + "apply": "Fare domanda a", + "reset": "Reset", + "manualConfig": "Configurazione manuale", + "backups": "Backup", + "configBackups": "Backup di configurazione", + "noBackupsYet": "Nessun backup ancora. I backup vengono creati automaticamente prima di ogni applicazione o ripristino.", + "restore": "Ripristinare", + "backupRestoredReloading": "Backup ripristinato! Stato di ricarica...", + "failedRestoreBackup": "Impossibile ripristinare il backup", + "applied": "Applicato!", + "failed": "Fallito", + "resetDone": "Reset!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute è configurato come provider compatibile con OpenAI", + "provider": "Fornitore", + "model": "Modello", + "providers": "Fornitori", + "auth": "Aut", + "noApiKeysAvailable": "Nessuna chiave API disponibile", + "usingDefaultOmniroute": "Utilizzo predefinito: sk_omniroute", + "updateConfig": "Aggiorna config", + "applyConfig": "Applica config", + "noBackupsAvailable": "Nessun backup disponibile.", + "profileSaved": "Profilo \"{name}\" salvato!", + "failedSaveProfile": "Impossibile salvare il profilo", + "profileActivated": "Profilo attivato!", + "failedActivateProfile": "Impossibile attivare il profilo", + "profiles": "Profili", + "savedProfiles": "Profili salvati", + "noProfilesYet": "Nessun profilo ancora salvato. Salva la configurazione corrente come profilo di seguito.", + "activate": "Attivare", + "deleteProfile": "Elimina profilo", + "profileNamePlaceholder": "Nome del profilo (ad es. Account personale)", + "saveCurrent": "Salva corrente", + "codexAuthNotePrefix": "Usi del Codice", + "codexAuthNoteMiddle": "con", + "codexAuthNoteSuffix": "Fare clic su \"Applica\" per la configurazione automatica.", + "claudeManualConfiguration": "Claude CLI - Configurazione manuale", + "codexManualConfiguration": "Codex CLI - Configurazione manuale", + "droidManualConfiguration": "Droid di fabbrica - Configurazione manuale", + "openClawManualConfiguration": "Open Claw - Configurazione manuale", + "clineManualConfiguration": "Configurazione manuale della linea", + "kiloManualConfiguration": "Configurazione manuale del codice Kilo", + "toolDescriptions": { + "antigravity": "IDE Antigravità di Google con MITM", + "claude": "CLI del codice Claude antropico", + "codex": "CLI del codice OpenAI", + "droid": "Assistente AI Droid di fabbrica", + "openclaw": "Apri l'Assistente AI Claw", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "CLI dell'Assistente AI Kilo Code", + "cursor": "Editor del codice AI del cursore", + "continue": "Continua Assistente AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Richiede l'account Cursor Pro per utilizzare questa funzionalità.", + "1": "Il cursore instrada le richieste tramite il proprio server, quindi l'endpoint locale non è supportato. Abilita Cloud Endpoint nelle Impostazioni." + }, + "steps": { + "1": { + "title": "Apri Impostazioni", + "desc": "Vai su Impostazioni -> Modelli" + }, + "2": { + "title": "Abilita l'API OpenAI", + "desc": "Abilita l'opzione \"Chiave API OpenAI\"." + }, + "3": { + "title": "URL di base" + }, + "4": { + "title": "Chiave API" + }, + "5": { + "title": "Aggiungi modello personalizzato", + "desc": "Fai clic su \"Visualizza tutto il modello\" -> \"Aggiungi modello personalizzato\"" + }, + "6": { + "title": "Seleziona modello" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Apri Configurazione", + "desc": "Apri il file di configurazione Continua" + }, + "2": { + "title": "Chiave API" + }, + "3": { + "title": "Seleziona modello" + }, + "4": { + "title": "Aggiungi configurazione modello", + "desc": "Aggiungi la seguente configurazione all'array dei modelli:" + } + } + } + } + }, + "combos": { + "title": "Combinazioni", + "description": "Crea combinazioni di modelli con routing ponderato e supporto fallback", + "createCombo": "Crea combinazione", + "editCombo": "Modifica combinazione", + "deleteCombo": "Elimina combinazione", + "noModels": "Nessun modello", + "noModelsYet": "Nessun modello ancora aggiunto", + "addModel": "Aggiungi modello", + "addModelToCombo": "Aggiungi modello alla combinazione", + "routingStrategy": "Strategia di instradamento", + "maxRetries": "Numero massimo di tentativi", + "timeout": "Timeout (ms)", + "healthcheck": "Controllo dello stato di salute", + "priority": "Priorità", + "fallback": "Ricaderci", + "roundRobin": "Girotondo", + "random": "Casuale", + "leastLatency": "Latenza minima", + "comboName": "Nome combinato", + "comboNamePlaceholder": "la mia combinazione", + "deleteConfirm": "Eliminare questa combinazione?", + "noCombosYet": "Nessuna combo ancora", + "comboCreated": "Combo creato con successo", + "comboUpdated": "Combo aggiornato con successo", + "comboDeleted": "Combinazione eliminata", + "failedCreate": "Impossibile creare la combinazione", + "failedUpdate": "Impossibile aggiornare la combinazione", + "errorCreating": "Errore durante la creazione della combinazione", + "errorUpdating": "Errore durante l'aggiornamento della combinazione", + "errorDeleting": "Errore durante l'eliminazione della combinazione", + "testFailed": "Richiesta di prova non riuscita", + "failedToggle": "Impossibile attivare/disattivare la combo", + "testResults": "Risultati del test — {name}", + "resolvedBy": "Risolto da:", + "more": "+{count} altro", + "reqs": "req", + "success": "successo", + "proxyConfigured": "Proxy configurato", + "copyComboName": "Copia il nome della combinazione", + "enableCombo": "Abilita combinazione", + "disableCombo": "Disabilita combinazione", + "testCombo": "Combinazione di prova", + "duplicate": "Duplicato", + "proxyConfig": "Configurazione proxy", + "nameRequired": "Il nome è obbligatorio", + "nameInvalid": "Solo lettere, numeri, -, _, / e . consentito", + "nameHint": "Lettere, numeri, -, _, / e . consentito", + "priorityDesc": "Fallback sequenziale: prova prima il modello 1, poi il 2 e così via.", + "weightedDesc": "Distribuisce il traffico in base alla percentuale di peso con fallback", + "roundRobinDesc": "Distribuzione circolare: ogni richiesta va al modello successivo a rotazione", + "randomDesc": "Selezione casuale uniforme, quindi fallback sui modelli rimanenti", + "leastUsedDesc": "Sceglie il modello con meno richieste, bilanciando il carico nel tempo", + "costOptimizedDesc": "Percorsi prima verso il modello più economico in base al prezzo", + "models": "Modelli", + "autoBalance": "Bilanciamento automatico", + "advancedSettings": "Impostazioni avanzate", + "retryDelay": "Ritardo tentativi (ms)", + "concurrencyPerModel": "Concorrenza/modello", + "queueTimeout": "Timeout coda (ms)", + "advancedHint": "Lascia vuoto per utilizzare le impostazioni predefinite globali. Questi sovrascrivono le impostazioni per provider.", + "moveUp": "Vai su", + "moveDown": "Spostati giù", + "removeModel": "Rimuovere", + "saving": "Risparmio...", + "weighted": "Ponderato", + "leastUsed": "Meno usato", + "costOpt": "Opzione costo" + }, + "costs": { + "title": "Costi", + "budget": "Bilancio", + "totalCost": "Costo totale", + "breakdown": "Ripartizione dei costi", + "noData": "Nessun dato sui costi", + "byModel": "Per modello", + "byProvider": "Per fornitore" + }, + "endpoint": { + "title": "Endpoint API", + "available": "Endpoint disponibili", + "cloudProxy": "Proxy cloud", + "disableConfirm": "Sei sicuro di voler disabilitare il proxy cloud?", + "baseUrl": "URL di base", + "apiKeyLabel": "Chiave API", + "registeredKeys": "Chiavi registrate", + "chatCompletions": "Completamenti della chat", + "responses": "Risposte", + "listModels": "Elenco modelli", + "usingCloudProxy": "Utilizzo del proxy cloud", + "usingLocalServer": "Utilizzo del server locale", + "machineId": "ID macchina: {id}...", + "disableCloud": "Disabilita Nuvola", + "enableCloud": "Abilita nuvola", + "modelsAcrossEndpoints": "Modelli {models} sugli endpoint {endpoints}", + "chatDesc": "Chat in streaming e non in streaming con tutti i provider", + "embeddings": "Incorporamenti", + "embeddingsDesc": "Incorporamenti di testo per pipeline di ricerca e RAG", + "imageGeneration": "Generazione di immagini", + "imageDesc": "Genera immagini da istruzioni di testo", + "rerank": "Riclassificare", + "rerankDesc": "Riclassificare i documenti in base alla pertinenza rispetto a una query", + "audioTranscription": "Trascrizione audio", + "audioTranscriptionDesc": "Trascrivere file audio in testo (Whisper)", + "textToSpeech": "Sintesi vocale da testo", + "textToSpeechDesc": "Converti il ​​testo in parlato dal suono naturale", + "moderations": "Moderazioni", + "moderationsDesc": "Moderazione dei contenuti e classificazione della sicurezza", + "enableCloudTitle": "Abilita proxy cloud", + "whatYouGet": "Cosa otterrai", + "cloudBenefitAccess": "Accedi alla tua API da qualsiasi parte del mondo", + "cloudBenefitShare": "Condividi facilmente l'endpoint con il tuo team", + "cloudBenefitPorts": "Non è necessario aprire porte o configurare il firewall", + "cloudBenefitEdge": "Rete edge globale veloce", + "cloudSessionNote": "Cloud manterrà la tua sessione di autenticazione per 1 giorno. Se non utilizzato verrà automaticamente cancellato.", + "cloudUnstableNote": "In alcuni casi, il cloud è attualmente instabile con Claude Code OAuth.", + "cloudConnected": "Proxy cloud connesso!", + "connectingToCloud": "Connessione al cloud...", + "verifyingConnection": "Verifica della connessione...", + "connecting": "Connessione...", + "verifying": "Verifica...", + "connected": "Collegato!", + "disableCloudTitle": "Disabilita proxy cloud", + "disableWarning": "Tutte le sessioni di autenticazione verranno eliminate dal cloud.", + "syncingData": "Sincronizzazione dei dati più recenti...", + "disablingCloud": "Disabilitazione del cloud...", + "syncing": "Sincronizzazione...", + "disabling": "Disabilitazione...", + "cloudConnectedVerified": "Cloud Proxy connesso e verificato!", + "connectedVerificationPending": "Connesso: verifica in sospeso", + "connectedVerificationPendingWithError": "Connesso: verifica in sospeso: {error}", + "cloudDisabledSuccess": "Cloud disabilitato correttamente", + "syncedSuccess": "Sincronizzazione riuscita", + "failedDisable": "Impossibile disattivare il cloud", + "failedEnable": "Impossibile abilitare il cloud", + "cloudRequestTimeout": "Timeout della richiesta cloud", + "cloudRequestFailed": "Richiesta cloud non riuscita", + "cloudWorkerUnreachable": "Impossibile raggiungere il lavoratore cloud. Assicurati che il servizio cloud sia in esecuzione (npm run dev in /cloud).", + "connectionFailed": "Connessione non riuscita", + "syncFailed": "Impossibile sincronizzare i dati cloud", + "providerModelsTitle": "{provider} — Modelli", + "noModelsForProvider": "Nessun modello disponibile per questo fornitore.", + "chat": "Chiacchierata", + "embedding": "Incorporamento", + "image": "Immagine", + "custom": "costume", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Salute del sistema", + "description": "Monitoraggio in tempo reale della tua istanza OmniRoute", + "healthy": "Salutare", + "degraded": "Degradato", + "down": "Giù", + "uptime": "Tempo di attività", + "memory": "Memoria", + "memoryRss": "Memoria (RSS)", + "heap": "Mucchio", + "cpu": "processore", + "database": "Banca dati", + "version": "Versione", + "lastCheck": "Ultimo controllo", + "providerHealth": "Salute del fornitore", + "systemMetrics": "Metriche di sistema", + "tokenHealth": "Gettone di salute", + "refreshAll": "Aggiorna tutto", + "checkNow": "Controlla ora", + "loadingHealth": "Caricamento dati sanitari...", + "failedToLoad": "Impossibile caricare i dati sanitari: {error}", + "retry": "Riprova", + "allOperational": "Tutti i sistemi operativi", + "issuesDetected": "Rilevati problemi di sistema", + "updatedAt": "Aggiornato {time}", + "latency": "Latenza", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Richieste totali", + "noDataYet": "Nessun dato ancora", + "promptCache": "Cache dei suggerimenti", + "entries": "Voci", + "hitRate": "Tasso di successo", + "hitsMisses": "Colpi / Mancati", + "signatureCache": "Cache delle firme", + "signatureDefaults": "Predefiniti", + "signatureTool": "Attrezzo", + "signatureFamily": "Famiglia", + "signatureSession": "Sessione", + "recovering": "Recupero", + "noCBData": "Nessun dato disponibile sull'interruttore automatico. Fai prima alcune richieste.", + "providerHealthStatusAria": "Stato di salute del fornitore", + "issuesLabel": "Problemi rilevati", + "operational": "Operativo", + "providers": "Fornitori", + "healthyCount": "{count} sano", + "nodeVersion": "Nodo {version}", + "failures": "{count} errore", + "failuresPlural": "{count} errori", + "lastFailure": "Scorso", + "rateLimitStatus": "Stato del limite di velocità", + "activeLimiters": "{count} limitatore attivo", + "activeLimitersPlural": "{count} limitatori attivi", + "queued": "In coda", + "queuedCount": "{count} in coda", + "running": "corsa", + "runningCount": "{count} in esecuzione", + "ok": "OK", + "activeLockouts": "Blocchi attivi", + "resetConfirm": "Ripristinare tutti gli interruttori automatici allo stato integro? Ciò eliminerà tutti i conteggi degli errori e ripristinerà tutti i provider allo stato operativo.", + "resetAllTitle": "Ripristinare tutti gli interruttori automatici allo stato integro", + "resetting": "Reimpostazione...", + "resetAll": "Reimposta tutto", + "until": "Fino al {time}" + }, + "limits": { + "title": "Limiti e quote", + "rateLimit": "Limite di velocità", + "remaining": "Rimanente", + "requestsPerMinute": "Richieste/min", + "tokensPerMinute": "Gettoni/min", + "dailyLimit": "Limite giornaliero" + }, + "logs": { + "title": "Registri", + "requestLogs": "Richiedi registri", + "proxyLogs": "Registri proxy", + "auditLog": "Registro di controllo", + "console": "Consolle", + "auditLogDesc": "Azioni amministrative ed eventi di sicurezza", + "loading": "Caricamento...", + "refresh": "Aggiorna", + "filterByAction": "Filtra per azione...", + "filterByActor": "Filtra per attore...", + "filterEntriesAria": "Filtra le voci del registro di controllo", + "filterByActionTypeAria": "Filtra per tipo di azione", + "filterByActorAria": "Filtra per attore", + "refreshAuditLogAria": "Aggiorna il registro di controllo", + "tableAria": "Voci del registro di controllo", + "failedFetchAuditLog": "Impossibile recuperare il registro di controllo", + "showing": "Visualizzazione delle voci {count} (offset {offset})", + "search": "Ricerca", + "timestamp": "Timestamp", + "action": "Azione", + "actor": "Attore", + "target": "Bersaglio", + "details": "Dettagli", + "ipAddress": "Indirizzo IP", + "notAvailable": "—", + "noEntries": "Nessuna voce del registro di controllo trovata", + "previous": "Precedente", + "next": "Prossimo" + }, + "onboarding": { + "welcome": "Benvenuto", + "security": "Sicurezza", + "test": "Test", + "ready": "Pronto!", + "setPassword": "Imposta password", + "addProvider": "Aggiungi il tuo primo fornitore", + "getStarted": "Inizia", + "skip": "Saltare", + "skipWizard": "Salta completamente la procedura guidata", + "skipPassword": "Salta l'impostazione della password", + "skipAndContinue": "Salta e continua", + "passwordLabel": "Password", + "confirmPassword": "Conferma password", + "enterPassword": "Inserisci la password", + "confirmPasswordPlaceholder": "Conferma password", + "passwordsMismatch": "Le password non corrispondono", + "setupComplete": "Configurazione completata!", + "goToDashboard": "Vai alla dashboard →", + "welcomeDesc": "OmniRoute è il tuo proxy API AI locale. Indirizza le richieste a più fornitori di intelligenza artificiale con bilanciamento del carico, failover e monitoraggio dell'utilizzo.", + "multiProvider": "Multi-provider", + "usageTracking": "Monitoraggio dell'utilizzo", + "apiKeyMgmt": "Gestione chiave API", + "securityDesc": "Imposta una password per proteggere la tua dashboard o salta per ora.", + "providerDesc": "Connetti il ​​tuo primo fornitore di intelligenza artificiale. Puoi aggiungerne altri in seguito.", + "apiKeyRequired": "Chiave API (richiesto)", + "customUrlOptional": "URL personalizzato (facoltativo)", + "testDesc": "Verifichiamo che la connessione del tuo provider funzioni.", + "runTest": "Esegui il test di connessione", + "testingConnection": "Test della connessione...", + "connectionSuccessful": "Connessione riuscita! Il tuo fornitore è pronto.", + "noProviderFound": "Nessun fornitore trovato. Puoi aggiungerne uno dalla dashboard in un secondo momento.", + "testFailed": "Il test è fallito, ma puoi configurarlo in seguito.", + "couldNotTest": "Impossibile eseguire il test in questo momento. Puoi testare dalla dashboard.", + "doneDesc": "È tutto pronto! La tua istanza OmniRoute è configurata e pronta per eseguire il proxy delle richieste AI.", + "yourEndpoint": "Il tuo punto finale:", + "continue": "Continuare", + "retry": "Riprova", + "failedSetPassword": "Impossibile impostare la password. Riprova.", + "failedAddProvider": "Impossibile aggiungere il fornitore. Riprova.", + "connectionError": "Errore di connessione. Per favore riprova.", + "provider": "Fornitore" + }, + "providers": { + "title": "Fornitori", + "addProvider": "Aggiungi fornitore", + "editProvider": "Modifica fornitore", + "deleteProvider": "Elimina fornitore", + "noProviders": "Nessun provider configurato", + "modelAvailability": "Disponibilità del modello", + "accounts": "Conti", + "newAccount": "Nuovo conto", + "deleteConfirm": "Sei sicuro di voler eliminare questo fornitore?", + "testing": "Prova...", + "testConnection": "Prova connessione", + "testSuccess": "Connessione riuscita", + "testFailed": "Connessione non riuscita", + "available": "Disponibile", + "cooldown": "Raffreddare", + "unavailable": "Non disponibile", + "unknown": "Sconosciuto", + "oauthLabel": "OAuth", + "compatibleLabel": "Compatibile", + "chat": "Chiacchierata", + "responses": "Risposte", + "messages": "Messaggi", + "oauthProviders": "Provider OAuth", + "freeProviders": "Fornitori gratuiti", + "apiKeyProviders": "Fornitori di chiavi API", + "compatibleProviders": "Fornitori compatibili con chiave API", + "testAll": "Prova tutto", + "testAllOAuth": "Testa tutte le connessioni OAuth", + "testAllFree": "Testa tutte le connessioni gratuite", + "testAllApiKey": "Testa tutte le connessioni della chiave API", + "testAllCompatible": "Testare tutte le connessioni compatibili", + "connected": "{count} Connesso", + "errorCount": "{count} Errore ({code})", + "errorCountNoCode": "{count} Errore", + "noConnections": "Nessuna connessione", + "disabled": "Disabilitato", + "enableProvider": "Abilita fornitore", + "disableProvider": "Disabilita fornitore", + "testResults": "Risultati dei test", + "noCompatibleYet": "Nessun fornitore compatibile ancora aggiunto", + "compatibleHint": "Utilizza i pulsanti qui sopra per aggiungere endpoint compatibili con OpenAI o Anthropic", + "addOpenAICompatible": "Aggiungi compatibile con OpenAI", + "addAnthropicCompatible": "Aggiungi compatibilità antropica", + "addNewProvider": "Aggiungi nuovo fornitore", + "backToProviders": "Torniamo ai fornitori", + "configureNewProvider": "Configura un nuovo provider AI da utilizzare con le tue applicazioni.", + "providerLabel": "Fornitore", + "selectProvider": "Seleziona un fornitore", + "selectedProvider": "Fornitore selezionato", + "authMethod": "Metodo di autenticazione", + "apiKeyLabel": "Chiave API", + "apiKeyRequired": "È richiesta la chiave API", + "selectProviderRequired": "Seleziona un fornitore", + "enterApiKey": "Inserisci la tua chiave API", + "apiKeySecure": "La tua chiave API verrà crittografata e archiviata in modo sicuro.", + "oauth2Connect": "Connettiti con OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Connetti il ​​tuo account utilizzando l'autenticazione OAuth2.", + "displayName": "Nome da visualizzare", + "displayNamePlaceholder": "ad esempio, API di produzione, ambiente di sviluppo", + "displayNameHint": "Opzionale. Un nome descrittivo per identificare questa configurazione.", + "active": "Attivo", + "activeDescription": "Abilita questo provider per l'utilizzo nelle tue applicazioni", + "cancel": "Cancellare", + "createProvider": "Crea fornitore", + "failedCreate": "Impossibile creare il fornitore", + "errorOccurred": "Si è verificato un errore. Per favore riprova.", + "modelStatus": "Stato del modello", + "allModelsOperational": "Tutti i modelli operativi", + "modelsWithIssues": "{count} modelli con problemi", + "allModelsNormal": "Tutti i modelli rispondono normalmente.", + "cooldownCleared": "Recupero cancellato per {model}", + "failedClearCooldown": "Impossibile cancellare il tempo di recupero", + "loadingAvailability": "Caricamento disponibilità del modello...", + "clearCooldown": "Chiaro", + "clearing": "Cancellazione...", + "until": "Fino al {time}", + "providerTestFailed": "Il test del fornitore è fallito", + "modeTest": "{mode} Prova", + "passedCount": "{count} superato", + "failedCount": "{count} non riuscito", + "testedCount": "{count} testato", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "ERRORE", + "noActiveConnectionsInGroup": "Nessuna connessione attiva trovata per questo gruppo.", + "allTestsPassed": "Tutti i test {total} sono stati superati", + "testSummary": "{passed}/{total} superato, {failed} fallito", + "nameLabel": "Nome", + "prefixLabel": "Prefisso", + "baseUrlLabel": "URL di base", + "apiTypeLabel": "Tipo API", + "prefixHint": "Necessario. Prefisso univoco per i nomi dei modelli.", + "nameHint": "Necessario. Un'etichetta amichevole per questo nodo.", + "baseUrlHint": "Necessario.  URL di base dell'API del provider.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Convalida connessione", + "validating": "Convalida...", + "connectionValid": "La connessione è valida!", + "connectionFailed": "Connessione non riuscita. Controlla l'URL e la chiave.", + "testKeyLabel": "Testare la chiave API", + "testKeyPlaceholder": "sk-... (solo per la convalida)", + "providerNotFound": "Fornitore non trovato", + "deleteConnectionConfirm": "Eliminare questa connessione?", + "failedSetAlias": "Impossibile impostare l'alias", + "failedSaveConnection": "Impossibile salvare la connessione", + "failedSaveConnectionRetry": "Impossibile salvare la connessione. Per favore riprova.", + "failedRetestConnection": "Impossibile ripetere il test della connessione", + "deleteCompatibleNodeConfirm": "Eliminare questo {type} nodo compatibile?", + "anthropicCompatibleDetails": "Dettagli compatibilità antropica", + "openaiCompatibleDetails": "Dettagli compatibili con OpenAI", + "messagesApi": "API dei messaggi", + "responsesApi": "API di risposta", + "chatCompletions": "Completamenti della chat", + "importingModels": "Importazione...", + "importFromModels": "Importa da /modelli", + "addConnectionToImport": "Aggiungi una connessione per abilitare l'importazione.", + "noModelsConfigured": "Nessun modello configurato", + "connectionCount": "{count} connessione/i", + "fetchingModels": "Recupero dei modelli disponibili...", + "failedFetchModels": "Impossibile recuperare i modelli", + "noModelsFound": "Nessun modello trovato", + "importFailed": "Importazione non riuscita", + "noNewModelsAdded": "Non sono stati aggiunti nuovi modelli.", + "adding": "Aggiunta...", + "importingModelsTitle": "Importazione di modelli", + "copyModel": "Copia modello", + "removeModel": "Rimuovi il modello", + "rateLimitProtected": "Protetto", + "rateLimitUnprotected": "Non protetto", + "enableRateLimitProtection": "Fare clic per abilitare la protezione del limite di velocità", + "disableRateLimitProtection": "Fare clic per disattivare la protezione del limite di velocità", + "productionKey": "Chiave di produzione", + "enterNewApiKey": "Inserisci la nuova chiave API", + "optional": "Opzionale", + "anthropicCompatibleName": "Compatibile antropico", + "openaiCompatibleName": "Compatibile con OpenAI", + "failedImportModels": "Impossibile importare i modelli", + "noModelsReturnedFromEndpoint": "Nessun modello restituito dall'endpoint /models.", + "importingModelsProgress": "Importazione di {current} di modelli {total}...", + "foundModelsStartingImport": "Trovati modelli {count}. Avvio dell'importazione...", + "importingModelById": "Importazione di {modelId}...", + "importSuccessCount": "Importazione di {count, plural, one {# model} other {# models}} riuscita!", + "noNewModelsAddedExisting": "Non sono stati aggiunti nuovi modelli (esistono già tutti).", + "importDoneCount": "✓ Fatto! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Si è verificato un errore imprevisto", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "messaggi", + "responsesPath": "risposte", + "chatCompletionsPath": "chat/completamenti", + "add": "Aggiungere", + "edit": "Modificare", + "delete": "Eliminare", + "anthropic": "Antropico", + "openai": "OpenAI", + "singleConnectionPerCompatible": "È consentita una sola connessione per nodo compatibile. Aggiungi un altro nodo se hai bisogno di più connessioni.", + "connections": "Connessioni", + "providerProxyTitleConfigured": "Proxy del fornitore: {host}", + "configured": "configurato", + "providerProxyConfigureHint": "Configura il proxy per tutte le connessioni di questo provider", + "providerProxy": "Procura del fornitore", + "noConnectionsYet": "Nessuna connessione ancora", + "addFirstConnectionHint": "Aggiungi la tua prima connessione per iniziare", + "addConnection": "Aggiungi connessione", + "availableModels": "Modelli disponibili", + "pageAutoRefresh": "La pagina si aggiornerà automaticamente...", + "statusDisabled": "disabilitato", + "statusConnected": "collegato", + "statusRuntimeIssue": "problema di esecuzione", + "statusAuthFailed": "autenticazione non riuscita", + "statusRateLimited": "tariffa limitata", + "statusNetworkIssue": "problema di rete", + "statusTestUnsupported": "test non supportato", + "statusUnavailable": "non disponibile", + "statusFailed": "fallito", + "statusError": "errore", + "oauthAccount": "Account OAuth", + "errorTypeRuntime": "Runtime locale", + "errorTypeUpstreamAuth": "Aut. a monte", + "errorTypeMissingCredential": "Credenziale mancante", + "errorTypeRefreshFailed": "Aggiornamento non riuscito", + "errorTypeTokenExpired": "Il gettone è scaduto", + "errorTypeRateLimited": "Tariffa limitata", + "errorTypeUpstreamUnavailable": "A monte non disponibile", + "errorTypeNetworkError": "Errore di rete", + "errorTypeTestUnsupported": "Test non supportato", + "errorTypeUpstreamError": "Errore a monte", + "proxySourceGlobal": "Globale", + "proxySourceProvider": "Fornitore", + "proxySourceKey": "Chiave", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Automatico: {priority}", + "proxy": "Procura", + "retestAuthentication": "Ritestare l'autenticazione", + "retest": "Ripetere il test", + "disableConnection": "Disabilita connessione", + "enableConnection": "Abilita connessione", + "reauthenticateConnection": "Autenticare nuovamente questa connessione", + "proxyConfig": "Configurazione proxy", + "aliasExistsAlert": "L'alias \"{alias}\" esiste già. Utilizza un modello diverso o modifica l'alias esistente.", + "openRouterAnyModelHint": "OpenRouter supporta qualsiasi modello. Aggiungi modelli e crea alias per un accesso rapido.", + "modelIdFromOpenRouter": "ID modello (da OpenRouter)", + "openRouterModelPlaceholder": "antropico/claude-3-opus", + "customModels": "Modelli personalizzati", + "customModelsHint": "Aggiungi ID modello non presenti nell'elenco predefinito. Questi saranno disponibili per il routing.", + "modelId": "ID modello", + "customModelPlaceholder": "per esempio. gpt-4.5-turbo", + "loading": "Caricamento...", + "removeCustomModel": "Rimuovi il modello personalizzato", + "noCustomModels": "Nessun modello personalizzato ancora aggiunto.", + "allSuggestedAliasesExist": "Tutti gli alias suggeriti esistono già. Scegli un modello diverso o rimuovi gli alias in conflitto.", + "failedSaveCustomModel": "Impossibile salvare il modello personalizzato", + "modelAddedSuccess": "Il modello {modelId} è stato aggiunto correttamente", + "failedAddModelTryAgain": "Impossibile aggiungere il modello. Per favore riprova.", + "failedSaveImportedModel": "Impossibile salvare il modello importato nel database personalizzato", + "failedImportModelsTryAgain": "Impossibile importare i modelli. Per favore riprova.", + "failedRemoveModelFromDatabase": "Impossibile rimuovere il modello dal database", + "modelRemovedSuccess": "Modello rimosso con successo", + "failedDeleteModelTryAgain": "Impossibile eliminare il modello. Per favore riprova.", + "compatibleModelsDescription": "Aggiungi manualmente modelli compatibili con {type} o importali dall'endpoint /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Convalida della chiave API non riuscita. Controlla la chiave e riprova.", + "addProviderApiKeyTitle": "Aggiungi la chiave API {provider}", + "checking": "Controllo...", + "check": "Controllo", + "valid": "Valido", + "invalid": "Non valido", + "creating": "Creazione...", + "validationChecksAnthropicCompatible": "La convalida controlla {provider} verificando la chiave API.", + "validationChecksOpenAiCompatible": "La convalida controlla {provider} tramite /models sull'URL di base.", + "priorityLabel": "Priorità", + "saving": "Risparmio...", + "save": "Salva", + "editConnection": "Modifica connessione", + "accountName": "Nome utente", + "email": "E-mail", + "healthCheckMinutes": "Controllo dello stato (min)", + "healthCheckHint": "Intervallo di aggiornamento del token proattivo. 0 = disabilitato.", + "failedTestConnection": "Impossibile testare la connessione", + "failed": "Fallito", + "leaveBlankKeepCurrentApiKey": "Lascia vuoto per mantenere la chiave API corrente.", + "editCompatibleTitle": "Modifica {type} Compatibile", + "compatibleBaseUrlHint": "Utilizza l'URL di base (che termina con /v1) per la tua API compatibile con {type}.", + "apiKeyForCheck": "Chiave API (per controllo)", + "compatibleProdPlaceholder": "{type} Compatibile (prodotto)" + }, + "settings": { + "title": "Impostazioni", + "general": "Generale", + "security": "Sicurezza", + "appearance": "Aspetto", + "routing": "Instradamento", + "cache": "Cache", + "resilience": "Resilienza", + "systemPrompt": "Richiesta di sistema", + "thinkingBudget": "Pensare al bilancio", + "proxy": "Procura", + "pricing": "Prezzi", + "storage": "Magazzinaggio", + "policies": "Politiche", + "ipFilter": "Filtro IP", + "comboDefaults": "Impostazioni predefinite combinate", + "fallbackChains": "Catene di ripiego", + "changePassword": "Cambiare la password", + "enablePassword": "Abilita password", + "darkMode": "Modalità oscura", + "lightMode": "Modalità luce", + "systemTheme": "Tema del sistema", + "enableCache": "Abilita cache", + "cacheTTL": "TTL della cache", + "maxCacheSize": "Dimensione massima della cache", + "clearCache": "Cancella cache", + "cacheHits": "Riscontri nella cache", + "cacheMisses": "Mancati cache", + "hitRate": "Tasso di successo", + "cacheEntries": "Voci della cache", + "circuitBreaker": "Interruttore automatico", + "retryPolicy": "Riprova la policy", + "maxRetries": "Numero massimo di tentativi", + "retryDelay": "Ritardo riprova", + "timeoutMs": "Timeout (ms)", + "enableSystemPrompt": "Abilita richiesta di sistema", + "systemPromptText": "Testo della richiesta di sistema", + "enableThinking": "Abilita il pensiero", + "maxThinkingTokens": "Gettoni pensiero massimo", + "enableProxy": "Abilita proxy", + "proxyUrl": "URL proxy", + "pricingRates": "Formato delle tariffe dei prezzi", + "currentPricing": "Panoramica dei prezzi attuali", + "loadingPricing": "Caricamento dati sui prezzi...", + "noPricing": "Nessun dato sui prezzi disponibile", + "input": "Ingresso", + "output": "Produzione", + "cached": "Memorizzato nella cache", + "reasoning": "Ragionamento", + "cacheCreation": "Creazione della cache", + "customPricing": "Prezzi personalizzati", + "databaseSize": "Dimensioni del database", + "backupDb": "Backup della banca dati", + "restoreDb": "Ripristina database", + "exportData": "Esporta dati", + "importData": "Importa dati", + "clearData": "Cancella tutti i dati", + "clearDataConfirm": "Ciò eliminerà definitivamente tutti i dati. Sei sicuro?", + "enableRequestLogs": "Abilita i registri delle richieste", + "logRetention": "Conservazione del registro", + "ipWhitelist": "Lista bianca IP", + "ipBlacklist": "Lista nera IP", + "addIP": "Aggiungi IP", + "savedSuccessfully": "Impostazioni salvate con successo", + "ai": "AI", + "advanced": "Avanzato", + "localMode": "Modalità locale: tutti i dati archiviati sul computer", + "settingsSectionsAria": "Sezioni Impostazioni", + "switchThemes": "Passa dal tema chiaro a quello scuro e viceversa", + "themeSelectionAria": "Selezione del tema", + "themeLight": "Leggero", + "themeDark": "Buio", + "themeSystem": "Sistema", + "hideHealthLogs": "Nascondi i registri di controllo dello stato", + "hideHealthLogsDesc": "Quando è attivo, elimina i messaggi [HealthCheck] nella console del server", + "promptCache": "Cache dei suggerimenti", + "flushCache": "Svuota cache", + "flushing": "Lavaggio…", + "size": "Misurare", + "hits": "Colpi", + "evictions": "Sfratti", + "loadingCacheStats": "Caricamento delle statistiche della cache…", + "globalProxy": "Procura globale", + "globalProxyDesc": "Configura un proxy in uscita globale per tutte le chiamate API. Singoli provider, combinazioni e chiavi possono sovrascrivere questo aspetto.", + "noGlobalProxy": "Nessun proxy globale configurato", + "globalLabel": "Globale", + "configure": "Configura", + "globalSystemPrompt": "Prompt del sistema globale", + "systemPromptDesc": "Inserito in tutte le richieste a livello proxy", + "saved": "Salvato", + "systemPromptPlaceholder": "Inserisci la richiesta di sistema per l'inserimento in tutte le richieste...", + "systemPromptHint": "Questo prompt viene anteposto al messaggio di sistema di ogni richiesta. Utilizzare per istruzioni globali, linee guida sulla sicurezza o regole di formattazione della risposta.", + "chars": "{count} caratteri", + "thinkingBudgetTitle": "Pensare al bilancio", + "thinkingBudgetDesc": "Controlla l'utilizzo dei token di ragionamento dell'intelligenza artificiale in tutte le richieste", + "passthrough": "Passante", + "passthroughDesc": "Nessun cambiamento: il cliente controlla il budget", + "auto": "Auto", + "autoDesc": "Elimina ogni configurazione pensante: lascia decidere al provider", + "custom": "Costume", + "customDesc": "Imposta un budget token fisso per tutte le richieste", + "adaptive": "Adattivo", + "adaptiveDesc": "Ridimensiona il budget in base alla complessità della richiesta", + "effortNone": "Nessuno (0 token)", + "effortLow": "Basso (token da 1.000)", + "effortMedium": "Medio (token da 10.000)", + "effortHigh": "Alto (token 128K)", + "tokenBudget": "Bilancio simbolico", + "tokens": "gettoni", + "baseEffortLevel": "Livello di impegno base", + "adaptiveHint": "La modalità adattiva si adatta a questo livello di base in base al conteggio dei messaggi, all'utilizzo dello strumento e alla lunghezza dei prompt.", + "requireLogin": "Richiedi l'accesso", + "requireLoginDesc": "Quando è attivo, il dashboard richiede la password. Quando OFF, accedi senza login.", + "currentPassword": "password attuale", + "enterCurrentPassword": "Inserisci la password attuale", + "newPassword": "Nuova parola d'ordine", + "enterNewPassword": "Inserisci la nuova password", + "confirmPassword": "Conferma nuova password", + "confirmPasswordPlaceholder": "Conferma la nuova password", + "passwordsNoMatch": "Le password non corrispondono", + "passwordUpdated": "Password aggiornata con successo", + "failedUpdatePassword": "Impossibile aggiornare la password", + "errorOccurred": "Si è verificato un errore", + "updatePassword": "Aggiorna password", + "setPassword": "Imposta password", + "apiEndpointProtection": "Protezione endpoint API", + "requireAuthModels": "Richiedi la chiave API per /models", + "requireAuthModelsDesc": "Quando è attivo, l'endpoint /v1/models restituisce 404 per le richieste non autenticate. Impedisce il rilevamento del modello da parte di utenti non autorizzati.", + "blockedProviders": "Provider bloccati", + "blockedProvidersDesc": "Nascondi provider specifici dalla risposta /v1/models. I fornitori bloccati non verranno visualizzati negli elenchi dei modelli.", + "providersBlocked": "{count} provider bloccati da /models", + "blockProviderTitle": "Blocca {provider}", + "unblockProviderTitle": "Sblocca {provider}", + "routingStrategy": "Strategia di instradamento", + "fillFirst": "Riempi prima", + "fillFirstDesc": "Utilizza gli account in ordine di priorità", + "roundRobin": "Girotondo", + "roundRobinDesc": "Scorri tutti gli account", + "p2c": "P2C", + "p2cDesc": "Scegline 2 a caso, usa quello più sano", + "random": "Casuale", + "randomDesc": "Account casuale per ogni richiesta", + "leastUsed": "Meno usato", + "leastUsedDesc": "Scegli l'account utilizzato meno di recente", + "costOpt": "Opzione costo", + "costOptDesc": "Preferisci il conto più economico disponibile", + "stickyLimit": "Limite appiccicoso", + "stickyLimitDesc": "Chiamate per account prima del cambio", + "modelAliases": "Alias ​​del modello", + "modelAliasesDesc": "Modelli di caratteri jolly per rimappare i nomi dei modelli • Utilizzare * e ?", + "aliasPatternPlaceholder": "claude-sonetto-*", + "aliasTargetPlaceholder": "claude-sonetto-4-20250514", + "pattern": "Modello", + "targetModel": "Modello obiettivo", + "add": "+ Aggiungi", + "session": "Sessione", + "sessionDetailsAria": "Dettagli della sessione", + "status": "Stato", + "authenticated": "Autenticato", + "guest": "Ospite", + "loginTime": "Orario di accesso", + "sessionAge": "Età della sessione", + "browser": "Navigatore", + "clearLocalData": "Cancella dati locali", + "logout": "Esci", + "clearLocalDataConfirm": "Cancellare tutti i dati locali? Ciò ripristinerà le tue preferenze.", + "unknown": "Sconosciuto", + "systemActor": "sistema", + "ipAccessControl": "Controllo dell'accesso IP", + "ipAccessControlDesc": "Blocca o consenti indirizzi IP specifici", + "ipModeDisabled": "Disabilitato", + "ipModeBlacklist": "Lista nera", + "ipModeWhitelist": "Lista bianca", + "ipModeWhitelistPriority": "Priorità WL", + "addIpAddress": "Aggiungi indirizzo IP", + "ipAddressPlaceholder": "192.168.1.0/24 o 10.0.*.*", + "block": "+ Blocca", + "allow": "+ Consenti", + "blocked": "Bloccato ({count})", + "allowed": "Consentito ({count})", + "temporaryBans": "Divieti temporanei ({count})", + "minLeft": "{min}m rimasti", + "auditLog": "Registro di controllo", + "searchAuditLogs": "Cerca nei log di controllo...", + "failedLoadAuditLog": "Impossibile caricare il registro di controllo", + "noAuditEvents": "Nessun evento di controllo trovato", + "action": "Azione", + "actor": "Attore", + "details": "Dettagli", + "time": "Tempo", + "fallbackChainsTitle": "Catene di ripiego", + "fallbackChainsDesc": "Definire l'ordine di fallback del fornitore per modello", + "addChain": "+ Aggiungi catena", + "modelName": "Nome del modello", + "modelNamePlaceholder": "claude-sonetto-4-20250514", + "providersCommaSeparated": "Fornitori (separati da virgole, in ordine di priorità)", + "providersCommaSeparatedPlaceholder": "antropico, openai, gemelli", + "createChain": "Crea catena", + "noFallbackChains": "Nessuna catena di fallback", + "noFallbackChainsDesc": "Creare una catena per definire l'ordine di fallback del provider per un modello.", + "loadingFallbackChains": "Caricamento catene di fallback...", + "deleteChainConfirm": "Eliminare la catena di fallback per \"{model}\"?", + "chainCreated": "Catena creata per {model}", + "chainDeleted": "Catena eliminata per {model}", + "failedCreateChain": "Impossibile creare la catena", + "failedDeleteChain": "Impossibile eliminare la catena", + "deleteChain": "Elimina catena", + "fillModelAndProviders": "Inserisci il nome del modello e i fornitori", + "addAtLeastOneProvider": "Aggiungi almeno un fornitore", + "comboDefaultsTitle": "Impostazioni predefinite combinate", + "globalComboConfig": "Configurazione combinata globale", + "defaultStrategy": "Strategia predefinita", + "defaultStrategyDesc": "Applicato a nuove combo senza strategia esplicita", + "comboStrategyAria": "Strategia combinata", + "priority": "Priorità", + "weighted": "Ponderato", + "maxRetriesLabel": "Numero massimo di tentativi", + "retryDelayLabel": "Ritardo tentativi (ms)", + "timeoutLabel": "Timeout (ms)", + "healthCheck": "Controllo dello stato di salute", + "healthCheckDesc": "Verifica preventiva la disponibilità del fornitore", + "trackMetrics": "Tieni traccia delle metriche", + "trackMetricsDesc": "Registra i parametri delle richieste per combo", + "providerOverrides": "Il fornitore esegue l'override", + "providerOverridesDesc": "Sostituisci timeout e tentativi per provider. Le impostazioni del provider sovrascrivono le impostazioni predefinite globali.", + "providerMaxRetriesAria": "{provider} numero massimo di tentativi", + "providerTimeoutAria": "{provider} timeout ms", + "removeProviderOverrideAria": "Rimuovi la sostituzione {provider}", + "newProviderNamePlaceholder": "per esempio. google, apri...", + "newProviderNameAria": "Nuovo nome del fornitore", + "retries": "riprova", + "ms": "SM", + "saveComboDefaults": "Salva impostazioni predefinite combo", + "maxNestingDepth": "Profondità massima di nidificazione", + "concurrencyPerModel": "Concorrenza/modello", + "queueTimeout": "Timeout coda (ms)", + "providerProfiles": "Profili dei fornitori", + "providerProfilesDesc": "Impostazioni di resilienza separate per i provider OAuth (basati sulla sessione) e API Key (misurati). I fornitori di OAuth hanno soglie più rigide a causa di limiti di velocità inferiori.", + "oauthProviders": "Provider OAuth", + "apiKeyProviders": "Fornitori di chiavi API", + "transientCooldown": "Recupero temporaneo", + "rateLimitCooldown": "Recupero del limite di velocità", + "maxBackoffLevel": "Livello massimo di backoff", + "cbThreshold": "Soglia CB", + "cbResetTime": "Tempo di ripristino dell'interruttore", + "rateLimiting": "Limitazione della velocità", + "rateLimitingDesc": "I fornitori di chiavi API sono automaticamente limitati in termini di velocità con impostazioni predefinite sicure. I limiti vengono appresi dalle intestazioni di risposta e si adattano nel tempo.", + "defaultSafetyNet": "Rete di sicurezza predefinita", + "rpm": "giri al minuto", + "minGap": "Divario minimo", + "maxConcurrent": "Massimo simultaneo", + "activeLimiters": "Limitatori attivi", + "noActiveLimiters": "Nessun limitatore di velocità attivo ancora.", + "reservoir": "Serbatoio", + "running": "Corsa", + "queued": "In coda", + "circuitBreakers": "Interruttori automatici", + "breakerStateClosed": "Chiuso", + "breakerStateOpen": "Aprire", + "breakerStateHalfOpen": "Semiaperto", + "tripped": "{count} è inciampato", + "healthy": "{count} sano", + "resetAll": "Reimposta tutto", + "noCircuitBreakers": "Nessun interruttore ancora attivo. Vengono creati automaticamente quando le richieste passano attraverso la pipeline combinata.", + "failures": "{count} errore/i", + "policiesLocked": "Policy e identificatori bloccati", + "allOperational": "Tutti i sistemi sono operativi: nessun blocco o interruttore scattato", + "loadingPolicies": "Caricamento policy...", + "lockedIdentifiers": "Identificatori bloccati", + "unlockedIdentifier": "Sbloccato: {identifier}", + "sinceDate": "dal {date}", + "forceUnlock": "Sblocco forzato", + "unlocking": "Sblocco...", + "failedUnlock": "Impossibile sbloccare", + "failedLoadWithStatus": "Impossibile caricare: {status}", + "failedLoadResilience": "Impossibile caricare lo stato di resilienza", + "saveFailed": "Salvataggio non riuscito", + "resetFailed": "Reimpostazione non riuscita", + "loadingResilience": "Caricamento dello stato di resilienza...", + "retry": "Riprova", + "systemStorage": "Sistema e archiviazione", + "allDataLocal": "Tutti i dati archiviati localmente sul tuo computer", + "databasePath": "Percorso del database", + "exportDatabase": "Esporta banca dati", + "exportAll": "Esporta tutto (.tar.gz)", + "importDatabase": "Importa banca dati", + "confirmDbImport": "Conferma l'importazione del database", + "confirmDbImportDesc": "Questo sostituirà tutti i dati correnti con il contenuto di {file}. Un backup verrà creato automaticamente prima dell'importazione.", + "yesImport": "Sì, importa", + "lastBackup": "Ultimo backup", + "noBackupYet": "Nessun backup ancora", + "backupNow": "Esegui il backup ora", + "backupRestore": "Backup e ripristino", + "viewBackups": "Visualizza backup", + "hide": "Nascondere", + "backupRetentionDesc": "Gli snapshot del database vengono creati automaticamente prima del ripristino e ogni 15 minuti in caso di modifica dei dati. Conservazione: 24 ore su 24 + 30 backup giornalieri con rotazione intelligente.", + "loadingBackups": "Caricamento dei backup...", + "noBackupsYet": "Nessun backup ancora disponibile. I backup verranno creati automaticamente quando i dati cambiano.", + "backupsAvailable": "{count} backup disponibili", + "refresh": "Aggiorna", + "confirm": "Confermare?", + "yes": "SÌ", + "no": "NO", + "restore": "Ripristinare", + "invalidFileType": "Tipo di file non valido. Sono accettati solo file .sqlite.", + "exportFailed": "Esportazione non riuscita", + "exportFailedWithError": "Esportazione non riuscita: {error}", + "fullExportFailedWithError": "Esportazione completa non riuscita: {error}", + "backupCreated": "Backup creato: {file}", + "restoreSuccess": "Restaurato! Connessioni {connections}, nodi {nodes}, combo {combos}, chiavi API {apiKeys}.", + "importSuccess": "Database importato! Connessioni {connections}, nodi {nodes}, combo {combos}, chiavi API {apiKeys}.", + "justNow": "proprio adesso", + "minutesAgo": "{count}m fa", + "hoursAgo": "{count}h fa", + "daysAgo": "{count}d fa", + "backupReasonManual": "manuale", + "backupReasonPreRestore": "pre-ripristino", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Nessuna modifica dall'ultimo backup", + "backupFailed": "Backup non riuscito", + "restoreFailed": "Ripristino non riuscito", + "importFailed": "Importazione non riuscita", + "errorDuringRestore": "Si è verificato un errore durante il ripristino", + "errorDuringImport": "Si è verificato un errore durante l'importazione", + "modelPricing": "Prezzi del modello", + "modelPricingDesc": "Configura le tariffe per modello • Tutte le tariffe in token da $/1 milione", + "providers": "Fornitori", + "registry": "Registro", + "priced": "Prezzo", + "searchProvidersModels": "Cerca fornitori o modelli...", + "showAll": "Mostra tutto", + "noProvidersMatch": "Nessun fornitore corrisponde alla tua ricerca.", + "howPricingWorks": "Come funzionano i prezzi", + "cacheWrite": "Scrittura nella cache", + "unsaved": "non salvato", + "resetDefaults": "Ripristina le impostazioni predefinite", + "saveProvider": "Salva fornitore", + "saving": "Risparmio...", + "model": "Modello", + "models": "modelli", + "moreProviders": "{count} altri fornitori", + "withPricing": "con i prezzi configurati", + "policiesCircuitBreakers": "Politiche e interruttori automatici", + "activeIssuesDetected": "Rilevati problemi attivi", + "off": "Spento", + "resetPricingConfirm": "Ripristinare tutti i prezzi per {provider} ai valori predefiniti?", + "pricingDescInput": "Input: token inviati al modello", + "pricingDescOutput": "Output: token generati", + "pricingDescCached": "Memorizzato nella cache: input riutilizzato (~50% della velocità di input)", + "pricingDescReasoning": "Ragionamento: gettoni pensanti (ricade nell'Output)", + "pricingDescCacheWrite": "Scrittura cache: creazione di voci cache (ricade su Input)", + "pricingDescFormula": "Costo = (input × input_rate) + (output × output_rate) + (cache × cached_rate) per milione di token.", + "pricingSettingsTitle": "Impostazioni dei prezzi", + "totalModels": "Modelli totali", + "active": "Attivo", + "costCalculation": "Calcolo dei costi", + "costCalculationDesc": "I costi vengono calcolati in base all'utilizzo dei token e alle tariffe configurate per ciascun modello.", + "pricingFormat": "Formato dei prezzi", + "pricingFormatDesc": "Tutte le tariffe sono in token $/1 milione (dollari per milione di token).", + "tokenTypes": "Tipi di token", + "inputTokenDesc": "Token di richiesta standard", + "outputTokenDesc": "Token di completamento/risposta", + "cachedTokenDesc": "Token di input memorizzati nella cache (in genere il 50% della velocità di input)", + "reasoningTokenDesc": "Segnalini ragionamento/pensiero speciali (ripiego al tasso di produzione)", + "cacheCreationTokenDesc": "Token utilizzati per creare voci nella cache (fallback alla velocità di input)", + "customPricingNote": "Puoi sostituire i prezzi predefiniti per modelli specifici. Le sostituzioni personalizzate hanno la priorità sui prezzi rilevati automaticamente.", + "editPricing": "Modifica prezzi", + "viewFullDetails": "Visualizza i dettagli completi" + }, + "translator": { + "title": "Traduttore", + "metaTitle": "Parco giochi per traduttori | OmniRoute", + "metaDescription": "Eseguire il debug, testare e visualizzare le traduzioni del formato API tra fornitori", + "playgroundTitle": "Parco giochi per traduttori", + "playground": "Parco giochi", + "realtime": "Attività di traduzione in tempo reale", + "chatTester": "Tester della chat", + "testBench": "Banco di prova", + "liveMonitor": "Monitoraggio dal vivo", + "modeDescriptionPlayground": "Incolla qualsiasi corpo della richiesta API e guarda come OmniRoute lo traduce tra i formati del provider (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Invia richieste di chat reali tramite OmniRoute e controlla l'intero percorso di andata e ritorno: input, richiesta tradotta, risposta del fornitore e output tradotto.", + "modeDescriptionTestBench": "Esegui scenari predefiniti e confronta la compatibilità tra provider e modelli.", + "modeDescriptionLiveMonitor": "Guarda gli eventi di traduzione in tempo reale mentre le richieste fluiscono attraverso OmniRoute.", + "modeDescriptionFallback": "Eseguire il debug, testare e visualizzare come OmniRoute traduce le richieste API tra provider.", + "recentTranslations": "Traduzioni recenti", + "noTranslations": "Nessuna traduzione ancora", + "source": "Fonte", + "target": "Bersaglio", + "time": "Tempo", + "model": "Modello", + "status": "Stato", + "latency": "Latenza", + "totalTranslations": "Traduzioni totali", + "successful": "Riuscito", + "errors": "Errori", + "avgLatency": "Latenza media", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live: aggiornamento automatico", + "paused": "In pausa", + "eventsAppearHint": "Gli eventi di traduzione vengono visualizzati qui mentre le richieste passano attraverso OmniRoute. Utilizza uno di questi metodi per generare eventi:", + "chatTesterTab": "Scheda Tester chat", + "testBenchTab": "Scheda Banco di prova", + "externalApiCalls": "Chiamate API esterne", + "ideCliIntegrations": "Integrazioni IDE/CLI", + "inMemoryNote": "Nota: gli eventi vengono archiviati in memoria e ripristinati al riavvio del server.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Convertitore di formato", + "formatConverterDescription": "Incolla o digita il corpo della richiesta JSON. Il traduttore rileverà automaticamente il formato di origine e lo convertirà nel formato di destinazione. Utilizzalo per eseguire il debug del modo in cui OmniRoute traduce le richieste tra formati (OpenAI ↔ Claude ↔ Gemini ↔ API delle risposte).", + "input": "Ingresso", + "output": "Produzione", + "auto": "Auto", + "swapFormats": "Scambia formati", + "translateAction": "Tradurre", + "clear": "Chiaro", + "inputPlaceholder": "Incolla qui il corpo della richiesta o seleziona un modello qui sotto...", + "exampleTemplates": "Modelli di esempio", + "exampleTemplatesHint": "— Fare clic per caricare", + "templateLoadHint": "Il modello carica la richiesta nel formato {format}. Cambia il formato di origine per caricare in un formato diverso.", + "compatibilityTester": "Tester di compatibilità", + "compatibilityReport": "Rapporto sulla compatibilità", + "testBenchDescription": "Esegui scenari predefiniti (Chat semplice, Chiamata di strumenti, ecc.) per verificare la compatibilità della traduzione e del provider. Seleziona un formato di origine e un provider di destinazione, quindi esegui tutti i test per visualizzare una percentuale di compatibilità. Usalo per scoprire quali funzionalità funzionano tra i diversi fornitori.", + "targetProvider": "Fornitore di destinazione", + "runAllTests": "Esegui tutti i test", + "runTest": "Esegui prova", + "reRun": "Rieseguire", + "running": "Corsa...", + "passed": "passato", + "failed": "fallito", + "passedIconLabel": "✅Superato", + "chunks": "pezzi", + "scenarioSimpleChat": "Chat semplice", + "scenarioToolCalling": "Chiamata dello strumento", + "scenarioMultiTurn": "Multigiro", + "scenarioThinking": "Pensiero", + "scenarioSystemPrompt": "Richiesta di sistema", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Chat semplice", + "tool-calling": "Chiamata dello strumento", + "multi-turn": "Multigiro", + "thinking": "Pensiero", + "system-prompt": "Richiesta di sistema", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Messaggio di testo di base", + "tool-calling": "Invocazione di funzioni/strumenti", + "multi-turn": "Conversazione con la storia", + "thinking": "Pensiero/ragionamento esteso", + "system-prompt": "Istruzioni di sistema complesse", + "streaming": "Richiesta di streaming SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Sei un assistente utile.", + "userGreeting": "Ciao! Come stai oggi?" + }, + "toolCalling": { + "userWeather": "Che tempo fa a San Paolo?", + "toolDescription": "Ottieni il meteo attuale per una località", + "cityNameDescription": "Nome della città" + }, + "multiTurn": { + "system": "Sei un assistente di codifica.", + "userInitial": "Scrivi una funzione per ordinare un array in Python.", + "assistantExample": "Ecco una semplice funzione di ordinamento:\n\n```pitone\ndef sort_array(arr):\n restituire ordinato(arr)\n```", + "userFollowUp": "Ora ordinalo in ordine decrescente." + }, + "thinking": { + "question": "Qual è la somma dei primi 100 numeri primi?" + }, + "systemPrompt": { + "systemInstruction": "Sei un ingegnere informatico senior specializzato in sistemi distribuiti. Rispondi alle domande in modo conciso utilizzando le migliori pratiche del settore. Fornisci sempre esempi di codice quando pertinente. Formatta le tue risposte utilizzando Markdown.", + "question": "Come si implementa un modello di interruttore automatico?" + }, + "streaming": { + "prompt": "Raccontami una breve storia su un robot che impara a dipingere." + } + }, + "openaiCompatibleLabel": "Compatibile con OpenAI", + "anthropicCompatibleLabel": "Compatibile antropico", + "noTemplateForFormat": "Nessun modello per questo formato", + "translationFailed": "Traduzione non riuscita: {error}", + "pipelineDebugger": "Debug della pipeline", + "translationPipeline": "Pipeline di traduzione", + "pipelineVisualization": "Visualizzazione della pipeline", + "pipelineVisualizationHint": "Invia un messaggio per vedere come scorre la tua richiesta attraverso rilevamento → traduzione → chiamata al fornitore.", + "chatTesterDescription": "Invia messaggi in un formato client specifico e ispeziona ogni passaggio della pipeline di traduzione.", + "chatTesterFlow": "Richiesta client → Rilevamento formato → OpenAI Intermediate → Formato provider → Risposta", + "clickStepToInspect": "Fare clic su qualsiasi passaggio per controllare i dati in quella fase.", + "clientFormat": "Formato cliente", + "provider": "Fornitore", + "modelPlaceholder": "Seleziona o digita il nome di un modello...", + "sendMessageToSeePipeline": "Invia un messaggio per vedere la pipeline di traduzione", + "chatMessageHintPrefix": "Il tuo messaggio sarà formattato come a", + "chatMessageHintSuffix": "richiesta, tradotta attraverso la pipeline e inviata al fornitore selezionato.", + "youWithFormat": "Tu ({format})", + "assistant": "Assistente", + "typeMessage": "Digita un messaggio...", + "send": "Inviare", + "clientRequest": "Richiesta del cliente", + "clientRequestDescription": "Il corpo della richiesta così come lo invierebbe il tuo cliente", + "formatDetected": "Formato rilevato", + "formatDetectedDescription": "OmniRoute rileva automaticamente il formato API dalla struttura della richiesta", + "openaiIntermediate": "OpenAI intermedio", + "openaiIntermediateDescription": "Tutti i formati vengono prima normalizzati nel formato OpenAI (il bridge universale)", + "providerFormat": "Formato del fornitore", + "providerFormatDescription": "Il formato OpenAI è tradotto nel formato nativo del provider", + "providerResponse": "Risposta del fornitore", + "providerResponseRawDescription": "La risposta non elaborata dall'API del provider", + "providerResponseSseDescription": "Il flusso SSE non elaborato dall'API del provider", + "unexpectedError": "Si è verificato un errore imprevisto", + "error": "Errore", + "errorMessage": "Errore: {message}", + "requestFailed": "Richiesta non riuscita", + "noTextExtracted": "(Nessun testo estratto)", + "liveMonitorDescriptionPrefix": "Mostra gli eventi di traduzione mentre le chiamate API fluiscono attraverso OmniRoute. Gli eventi provengono dal buffer in memoria (si ripristina al riavvio). Utilizzo", + "liveMonitorDescriptionSuffix": "o chiamate API esterne per generare eventi." + }, + "usage": { + "title": "Utilizzo", + "loggerTab": "Registratore", + "proxyTab": "Procura", + "budgetManagement": "Gestione del bilancio", + "budgetSaved": "Limiti di budget salvati", + "budgetSaveFailed": "Impossibile salvare il budget", + "loadingBudgetData": "Caricamento dei dati del budget...", + "noApiKeysTitle": "Nessuna chiave API", + "noApiKeysDescription": "Aggiungi prima le chiavi API per impostare i limiti di budget.", + "apiKey": "Chiave API", + "todaysSpend": "La spesa di oggi", + "thisMonth": "Questo mese", + "setLimits": "Imposta limiti", + "dailyLimitUsd": "Limite giornaliero (USD)", + "monthlyLimitUsd": "Limite mensile (USD)", + "warningThresholdPercent": "Soglia di avviso (%)", + "dailyLimitPlaceholder": "per esempio. 5.00", + "monthlyLimitPlaceholder": "per esempio. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Salva limiti", + "budgetOk": "Budget OK: {remaining} rimanente", + "budgetExceeded": "Budget superato: le richieste potrebbero essere bloccate", + "totalRequests": "Richieste totali", + "noDataYet": "Nessun dato ancora", + "latency": "Latenza", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Cache dei suggerimenti", + "systemHealth": "Salute del sistema", + "entries": "Voci", + "activeCount": "{count} attivo", + "openCircuitBreakersDetected": "Rilevati interruttori automatici aperti", + "hitRate": "Tasso di successo", + "hitsMisses": "Colpi / Mancati", + "circuitBreakers": "Interruttori automatici", + "lockedIPs": "IP bloccati", + "lockoutsAutoRefreshHint": "Blocchi del limite di velocità per modello • Aggiornamento automatico 10 secondi", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} rimasto", + "howItWorks": "Come funziona", + "howItWorksSubtitle": "Scopri come le valutazioni convalidano le tue risposte LLM", + "define": "Definire", + "defineStepDescription": "Crea casi di test con prompt di input e criteri di output previsti utilizzando strategie come contiene, regex o corrispondenza esatta.", + "run": "Correre", + "runStepDescription": "Esegui casi di test sugli endpoint LLM tramite OmniRoute. Ogni caso viene inviato come una vera richiesta API.", + "evaluate": "Valutare", + "evaluateStepDescription": "Le risposte vengono confrontate con i criteri attesi. Visualizza il superamento/fallimento per ciascun caso con parametri di latenza e feedback dettagliato.", + "evalSuites": "Suite di valutazione", + "evalSuitesHint": "Fai clic su una suite per visualizzare i casi di test, quindi esegui per valutare i tuoi endpoint LLM", + "evalsLoading": "Caricamento suite di valutazione...", + "noEvalSuitesFound": "Nessuna suite di valutazione trovata", + "noEvalSuitesDescription": "Le suite di valutazione possono essere definite tramite l'API o nel codice. Testano gli output del modello rispetto ai risultati attesi utilizzando strategie come contiene, regex, corrispondenza esatta e funzioni personalizzate.", + "columnCase": "Caso", + "columnStatus": "Stato", + "columnLatency": "Latenza", + "columnDetails": "Dettagli", + "columnModel": "Modello", + "columnStrategy": "Strategia", + "columnExpected": "Previsto", + "statsSuites": "Suite", + "statsTestCases": "Casi di prova", + "statsModels": "Modelli", + "statsCoverage": "Copertura", + "statsStrategiesCount": "{count} strategie", + "evaluationStrategies": "Strategie di valutazione", + "modelsUnderTest": "Modelli in prova", + "searchSuitesPlaceholder": "Cerca suite...", + "passSuffix": "passaggio", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Esegui valutazione", + "runningProgress": "In esecuzione {current}/{total}...", + "passRate": "tasso di passaggio", + "summaryBreakdown": "{passed} superato · {failed} fallito · {total} totale", + "passedIconLabel": "✅Superato", + "failedIconLabel": "❌ Fallito", + "detailsContains": "Contiene: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Previsto: \"{expected}\"", + "noResultsYet": "Nessun risultato ancora", + "testCasesCount": "Casi di test ({count})", + "noTestCasesDefined": "Nessun caso di test definito", + "runEvalHint": "Fai clic su \"Esegui valutazione\" per eseguire tutti i casi sull'endpoint LLM. Ogni test invia una richiesta reale tramite OmniRoute.", + "notifyNoTestCases": "Nessun caso di test definito per questa suite", + "notifyAllCasesPassed": "Tutti i casi {total} sono stati superati ✅", + "notifySomeCasesFailed": "{passed}/{total} superato, {failed} fallito", + "notifyEvalRunFailed": "L'esecuzione di valutazione non è riuscita", + "notifyEvalTitle": "Valutazione: {name}", + "modelEvals": "Valutazioni dei modelli", + "evalsHeroDescription": "Testa e convalida i tuoi endpoint LLM eseguendo suite di valutazione predefinite. Ogni suite contiene casi di test che inviano richieste reali tramite OmniRoute e confrontano le risposte con i criteri previsti, aiutandoti a rilevare regressioni, confrontare modelli e garantire la qualità delle risposte tra i fornitori.", + "qualityValidation": "Convalida della qualità", + "modelComparison": "Confronto dei modelli", + "regressionDetection": "Rilevamento della regressione", + "latencyBenchmarks": "Benchmark di latenza", + "modelLockouts": "Blocchi del modello", + "noLockouts": "Nessun modello attualmente bloccato", + "activeSessions": "Sessioni attive", + "noSessions": "Nessuna sessione attiva", + "sessionsHint": "Le sessioni vengono visualizzate mentre le richieste passano attraverso il proxy", + "sessionsTrackedHint": "Tracciato tramite richiesta di impronta digitale • Aggiornamento automatico 5 s", + "session": "Sessione", + "age": "Età", + "requests": "Richieste", + "connection": "Connessione", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limiti del fornitore", + "noProviders": "Nessun provider connesso", + "connectProvidersForQuota": "Connettiti ai provider con OAuth per monitorare i limiti di quota e l'utilizzo dell'API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrato da {count})", + "autoRefresh": "Aggiornamento automatico", + "refreshAll": "Aggiorna tutto", + "loadingQuotas": "Caricamento...", + "account": "Account", + "modelQuotas": "Quote modello", + "lastUsed": "Ultimo utilizzo", + "actions": "Azioni", + "refreshQuota": "Aggiorna quota", + "today": "Oggi", + "tomorrow": "Domani", + "dayTimeFormat": "{day}, {time}", + "inDuration": "in {duration}", + "notApplicable": "N / A", + "rawPlanWithValue": "Piano grezzo: {plan}", + "noPlanFromProvider": "Nessun piano dal fornitore", + "noQuotaData": "Nessun dato sulle quote", + "noQuotaDataAvailable": "Nessun dato sulle quote disponibile", + "noAccountsForTierFilter": "Nessun account trovato per il filtro del livello", + "tierAll": "Tutto", + "tierEnterprise": "Impresa", + "tierTeam": "Squadra", + "tierBusiness": "Attività commerciale", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Più", + "tierFree": "Gratuito", + "tierUnknown": "Sconosciuto" + }, + "modals": { + "waitingAuth": "In attesa di autorizzazione", + "verificationUrl": "URL di verifica", + "yourCode": "Il tuo codice", + "remoteAccess": "Accesso remoto:", + "connectedSuccess": "Connesso con successo!", + "connectionFailed": "Connessione non riuscita", + "chooseAuthMethod": "Scegli il tuo metodo di autenticazione:", + "awsBuilderId": "ID del generatore AWS", + "awsIamIdentity": "Centro identità AWS IAM", + "googleAccount": "Account Google", + "githubAccount": "Conto GitHub", + "importToken": "Importa gettone", + "pasteToken": "Incolla il token di aggiornamento da Kiro IDE.", + "awsRegion": "Regione AWS", + "autoDetecting": "Token di rilevamento automatico...", + "readingFromCache": "Lettura dalla cache AWS SSO", + "readingFromCursor": "Lettura dal database Cursor IDE", + "initializing": "Inizializzazione...", + "pricingConfig": "Configurazione dei prezzi", + "loadingPricing": "Caricamento dati sui prezzi...", + "pricingRatesFormat": "Formato delle tariffe dei prezzi", + "noPricingData": "Nessun dato sui prezzi disponibile", + "noModelsFound": "Nessun modello trovato" + }, + "loggers": { + "allProviders": "Tutti i fornitori", + "allModels": "Tutti i modelli", + "allAccounts": "Tutti i conti", + "allApiKeys": "Tutte le chiavi API", + "allTypes": "Tutti i tipi", + "allLevels": "Tutti i livelli", + "modelAZ": "Modello dalla A alla Z", + "modelZA": "Modello Z-A", + "loadingLogs": "Caricamento registri...", + "loadingProxyLogs": "Caricamento dei registri proxy...", + "noLogEntries": "Nessuna voce di registro trovata", + "noPayloadData": "Nessun dato sul carico utile disponibile per questa voce di registro.", + "proxyEvent": "Evento proxy", + "proxy": "Procura", + "level": "Livello", + "directNative": "Diretto (nativo)", + "combo": "Combinato", + "inputTokens": "IO:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Panoramica sull'utilizzo", + "outputTokens": "Gettoni di uscita", + "totalCost": "Costo totale", + "usageByModel": "Utilizzo per modello", + "usageByAccount": "Utilizzo per account", + "failedToLoad": "Impossibile caricare le statistiche sull'utilizzo.", + "tokenHealth": "Gettone di salute", + "totalOAuth": "OAuth totale", + "healthy": "Salutare", + "warning": "Avvertimento", + "errored": "Errore", + "lastCheck": "Ultimo controllo", + "noData": "Nessun dato", + "share": "Condividere", + "unableToLoad": "Impossibile caricare le metriche di sistema", + "product": "Prodotto", + "resources": "Risorse", + "company": "Azienda" + }, + "auth": { + "welcome": "Benvenuto", + "signIn": "Registrazione", + "enterPassword": "Inserisci la tua password per continuare", + "password": "Password", + "unifiedProxy": "Proxy API AI unificato", + "unifiedAiApiProxy": "Proxy API AI unificato", + "unifiedAiApiProxyDesc": "Instrada le richieste a più fornitori di intelligenza artificiale attraverso un singolo endpoint. Bilanciamento del carico, failover e monitoraggio dell'utilizzo integrati.", + "passwordNotEnabled": "La protezione tramite password non è abilitata", + "loading": "Caricamento...", + "invalidPassword": "Password non valida", + "errorOccurredRetry": "Si è verificato un errore. Per favore riprova.", + "configureInstance": "Configura la tua istanza OmniRoute", + "runOnboardingWizard": "Esegui la procedura guidata di onboarding per impostare la tua password e connettere il tuo primo provider AI.", + "startOnboarding": "Inizia l'onboarding", + "secureYourInstance": "Proteggi la tua istanza", + "setPasswordDescription": "Imposta una password per proteggere la tua dashboard e proteggere i tuoi endpoint API da accessi non autorizzati.", + "configurePassword": "Configura password", + "continue": "Continuare", + "windowWillClose": "Questa finestra si chiuderà automaticamente...", + "closeTabNow": "Puoi chiudere questa scheda ora.", + "copyUrlManual": "Copia l'URL dalla barra degli indirizzi e incollalo nell'applicazione.", + "accessDeniedDescription": "Non hai l'autorizzazione per accedere a questa risorsa. Controlla la tua chiave API o contatta l'amministratore.", + "goToDashboard": "Vai alla dashboard", + "featureMultiProviderTitle": "Multi-provider", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google e altro ancora", + "featureLoadBalancingTitle": "Bilanciamento del carico", + "featureLoadBalancingDesc": "Distribuisci le richieste in modo intelligente", + "featureUsageTrackingTitle": "Monitoraggio dell'utilizzo", + "featureUsageTrackingDesc": "Monitorare costi e gettoni", + "resetPassword": "Reimposta password", + "resetDescription": "Scegli un metodo per recuperare l'accesso alla tua dashboard", + "stopServer": "Arrestare il server OmniRoute", + "processing": "Elaborazione...", + "pleaseWait": "Ti preghiamo di attendere mentre completiamo l'autorizzazione.", + "authSuccess": "Autorizzazione riuscita!", + "copyUrl": "Copia questo URL", + "accessDenied": "Accesso negato", + "methodCliTitle": "Metodo 1: reimpostazione CLI", + "methodCliDescription": "Esegui il comando seguente sul server su cui è in esecuzione OmniRoute:", + "methodCliHint": "Questo ti chiederà di impostare una nuova password. Il server deve essere prima arrestato.", + "methodManualTitle": "Metodo 2: ripristino manuale", + "methodManualDescription": "Elimina la password dal database e impostane una nuova all'avvio:", + "setPasswordInYour": "Imposta una nuova password nel tuo", + "fileLabelSuffix": "file:", + "newPasswordPlaceholder": "la tua_nuova_password", + "deleteSettingsFile": "Eliminare", + "orRemovePasswordHashField": "o rimuovere il campo passwordHash", + "restartServerWithNewPassword": "Riavvia il server: utilizzerà la nuova password", + "backToLogin": "Torna all'accesso", + "forgotPassword": "Ha dimenticato la password?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Naviga verso casa", + "toggleMenu": "Cambia menu", + "featuresLink": "Caratteristiche", + "docsLink": "Documenti", + "github": "GitHub", + "versionLive": "La v1.0 è ora disponibile", + "oneEndpoint": "Un endpoint per", + "allProviders": "Tutti i fornitori di intelligenza artificiale", + "heroDescription": "Proxy endpoint AI con dashboard Web: una porta JavaScript di CLIProxyAPI. Funziona perfettamente con Claude Code, OpenAI Codex, Cline, RooCode e altri strumenti CLI.", + "getStarted": "Inizia", + "viewOnGithub": "Visualizza su GitHub", + "powerfulFeatures": "Funzionalità potenti", + "featuresSubtitle": "Tutto ciò di cui hai bisogno per gestire la tua infrastruttura IA in un unico posto, progettato per essere scalabile.", + "featureUnifiedEndpointTitle": "Endpoint unificato", + "featureUnifiedEndpointDesc": "Accedi a tutti i fornitori tramite un unico URL API standard.", + "featureEasySetupTitle": "Configurazione semplice", + "featureEasySetupDesc": "Diventa subito operativo in pochi minuti con il comando npx.", + "featureModelFallbackTitle": "Modello di ripiego", + "featureModelFallbackDesc": "Cambia automaticamente provider in caso di guasto o latenza elevata.", + "featureUsageTrackingTitle": "Monitoraggio dell'utilizzo", + "featureUsageTrackingDesc": "Analisi dettagliate e monitoraggio dei costi su tutti i modelli.", + "featureOAuthApiKeysTitle": "OAuth e chiavi API", + "featureOAuthApiKeysDesc": "Gestisci in modo sicuro le credenziali in un unico deposito.", + "featureCloudSyncTitle": "Sincronizzazione nel cloud", + "featureCloudSyncDesc": "Sincronizza istantaneamente le tue configurazioni su tutti i dispositivi.", + "featureCliSupportTitle": "Supporto CLI", + "featureCliSupportDesc": "Funziona con Claude Code, Codex, Cline, Cursor e altro.", + "featureDashboardTitle": "Pannello di controllo", + "featureDashboardDesc": "Dashboard visiva per l'analisi del traffico in tempo reale.", + "howItWorks": "Come funziona OmniRoute", + "howItWorksDescription": "I dati fluiscono senza soluzione di continuità dalla tua applicazione attraverso il nostro livello di routing intelligente fino al miglior fornitore per il lavoro.", + "howItWorksStep1Title": "1. CLI e SDK", + "howItWorksStep1Description": "Le tue richieste partono dai tuoi strumenti preferiti o dal nostro SDK unificato. Basta cambiare l'URL di base.", + "howItWorksStep2Title": "2. Hub OmniRoute", + "howItWorksStep2Description": "Il nostro motore analizza il prompt, controlla lo stato del provider e instrada la latenza o il costo più bassi.", + "howItWorksStep3Title": "3. Fornitori di IA", + "howItWorksStep3Description": "La richiesta viene soddisfatta immediatamente da OpenAI, Anthropic, Gemini o altri.", + "getStartedIn30Seconds": "Inizia in 30 secondi", + "getStartedDescription": "Installa OmniRoute, configura i tuoi provider tramite dashboard web e inizia a instradare le richieste AI.", + "installOmniRoute": "Installa OmniRoute", + "installStepDescription": "Esegui il comando npx per avviare immediatamente il server", + "openDashboard": "Apri Dashboard", + "openDashboardStepDescription": "Configura provider e chiavi API tramite interfaccia web", + "routeRequests": "Richieste di percorso", + "routeRequestsStepDescription": "Punta i tuoi strumenti CLI su {endpoint}", + "terminal": "terminale", + "copy": "Copia", + "copied": "✓ Copiato", + "startingOmniRoute": "Avvio di OmniRoute...", + "serverRunningOnLabel": "Server in esecuzione", + "dashboardLabel": "Pannello di controllo", + "readyToRoute": "Pronti per la rotta! ✓", + "configureProvidersNote": "📝 Configura i fornitori nella dashboard o utilizza le variabili di ambiente", + "dataLocation": "Posizione dei dati:", + "dataLocationMacLinux": "macOS/Linux:", + "dataLocationWindows": "Finestre:", + "product": "Prodotto", + "dashboardLink": "Pannello di controllo", + "changelog": "Registro delle modifiche", + "resources": "Risorse", + "documentation": "Documentazione", + "npm": "NPM", + "legal": "Legale", + "mitLicense": "Licenza del MIT", + "footerTagline": "L'endpoint unificato per la generazione di IA. Connetti, instrada e gestisci i tuoi fornitori di intelligenza artificiale con facilità.", + "copyright": "© {year} OmniRoute. Tutti i diritti riservati.", + "flowToolClaudeCode": "Codice Claudio", + "flowToolOpenAICodex": "Codice OpenAI", + "flowToolCline": "Cline", + "flowToolCursor": "Cursore", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropico", + "flowProviderGemini": "Gemelli", + "flowProviderGithubCopilot": "Copilota GitHub", + "interactiveDiagram": "Diagramma interattivo visibile sul desktop", + "ctaTitle": "Pronto a semplificare la tua infrastruttura AI?", + "ctaDescription": "Unisciti agli sviluppatori che stanno ottimizzando le loro integrazioni IA con OmniRoute. Open source e avvio gratuito.", + "startFree": "Inizia gratis", + "readDocumentation": "Leggi la documentazione" + }, + "docs": { + "title": "Documentazione", + "quickStart": "Avvio rapido", + "features": "Caratteristiche", + "supportedProviders": "Provider supportati", + "supportedProvidersToc": "Fornitori", + "commonUseCases": "Casi d'uso comuni", + "clientCompatibility": "Compatibilità con il cliente", + "apiReference": "Riferimento API", + "method": "Metodo", + "path": "Sentiero", + "notes": "Note", + "modelPrefixes": "Prefissi del modello", + "prefix": "Prefisso", + "troubleshooting": "Risoluzione dei problemi", + "supportsChat": "Supporta sia gli endpoint di chat che quelli di risposta.", + "oauthAutoRefresh": "Connessione OAuth con aggiornamento automatico del token.", + "fullStreaming": "Supporto streaming completo per tutti i modelli.", + "docsLabel": "Documenti", + "docsHeroDescription": "Gateway AI per LLM multi-provider. Un endpoint per OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e oltre 20 altri provider.", + "openDashboard": "Apri Dashboard", + "endpointPage": "Pagina dell'endpoint", + "github": "GitHub", + "reportIssue": "Segnala problema", + "onThisPage": "In questa pagina", + "documentationVersion": "Documentazione - v{version}", + "quickStartStep1Title": "1. Installa ed esegui", + "quickStartStep1Prefix": "Correre", + "quickStartStep1Middle": "oppure clona da GitHub ed esegui", + "quickStartStep2Title": "2. Crea la chiave API", + "quickStartStep2Text": "Vai su Endpoint -> Chiavi registrate. Genera una chiave per ambiente.", + "quickStartStep3Title": "3. Connetti i fornitori", + "quickStartStep3Text": "Aggiungi account provider tramite accesso OAuth, chiave API o connessione automatica a livello gratuito.", + "quickStartStep4Title": "4. Imposta l'URL di base del cliente", + "quickStartStep4Prefix": "Punta il tuo client IDE o API a", + "quickStartStep4Suffix": "Utilizza il prefisso del provider, ad esempio", + "featureRoutingTitle": "Routing multi-provider", + "featureRoutingText": "Instrada le richieste a oltre 30 fornitori di intelligenza artificiale attraverso un singolo endpoint compatibile con OpenAI. Supporta API di chat, risposte, audio e immagini.", + "featureCombosTitle": "Combo e bilanciamento", + "featureCombosText": "Crea combinazioni di modelli con catene di fallback e strategie di bilanciamento: round robin, priorità, casuale, meno utilizzato e con costi ottimizzati.", + "featureUsageTitle": "Monitoraggio dell'utilizzo e dei costi", + "featureUsageText": "Conteggio dei token in tempo reale, calcolo dei costi per provider/modello e suddivisione dettagliata dell'utilizzo per chiave API e account.", + "featureAnalyticsTitle": "Pannello di analisi", + "featureAnalyticsText": "Analisi visiva con grafici per richieste, token, errori, latenza, costi e popolarità del modello nel tempo.", + "featureHealthTitle": "Monitoraggio sanitario", + "featureHealthText": "Controlli dello stato in tempo reale, stato del fornitore, stati degli interruttori automatici e rilevamento automatico dei limiti di velocità con backoff esponenziale.", + "featureCliTitle": "Strumenti CLI", + "featureCliText": "Gestisci le configurazioni IDE, esporta/importa backup, scopri i profili codex e configura le impostazioni dalla dashboard.", + "featureSecurityTitle": "Sicurezza e politiche", + "featureSecurityText": "Autenticazione con chiave API, filtraggio IP, protezione prompt injection, policy di dominio, gestione delle sessioni e registrazione di controllo.", + "featureCloudSyncTitle": "Sincronizzazione nel cloud", + "featureCloudSyncText": "Sincronizza la tua configurazione con Cloudflare Workers per l'accesso remoto con credenziali crittografate e failover automatico.", + "providersAcrossConnectionTypes": "{count} provider in tre tipi di connessione.", + "manageProviders": "Gestisci fornitori", + "providersCount": "{count} fornitori", + "providerTypeFree": "Livello gratuito", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Chiave API", + "useCaseSingleEndpointTitle": "Endpoint unico per molti provider", + "useCaseSingleEndpointText": "Puntare i client a un URL di base e instradarli in base al prefisso del modello (ad esempio: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback e cambio di modello con combo", + "useCaseFallbackText": "Crea modelli combinati in Dashboard e mantieni stabile la configurazione del client mentre i fornitori ruotano internamente.", + "useCaseUsageVisibilityTitle": "Visibilità sull'utilizzo, sui costi e sul debug", + "useCaseUsageVisibilityText": "Tieni traccia dei token e dei costi per provider, account e chiave API nelle schede Utilizzo e Analisi.", + "clientCherryStudioTitle": "Studio della ciliegia", + "baseUrlLabel": "URL di base", + "chatEndpointLabel": "Endpoint della chat", + "modelRecommendationLabel": "Raccomandazione del modello: prefisso esplicito", + "clientCodexTitle": "Modelli Copilot Codex/GitHub", + "clientCodexBullet1": "Utilizza gli ID modello con", + "clientCodexBullet2": "I modelli della famiglia Codex si instradano automaticamente verso", + "clientCodexBullet3": "I modelli non Codex continuano", + "clientCursorTitle": "Cursore IDE", + "clientCursorBullet1": "Utilizzo", + "clientCursorBullet1Suffix": "prefisso per i modelli Cursor.", + "clientCursorBullet2": "Connessione OAuth: accedi dalla pagina Provider.", + "clientClaudeTitle": "Codice Claude / Antigravità", + "clientClaudeBullet1Prefix": "Utilizzo", + "clientClaudeBullet1Middle": "(Claude) o", + "clientClaudeBullet1Suffix": "(Antigravità).", + "endpointChatNote": "Endpoint chat compatibile con OpenAI (impostazione predefinita).", + "endpointResponsesNote": "Endpoint API di risposta (Codex, serie o).", + "endpointModelsNote": "Catalogo dei modelli per tutti i fornitori collegati.", + "endpointAudioNote": "Trascrizione audio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Generazione di immagini (NanoBanana).", + "endpointRewriteChatNote": "Riscrivere l'helper per i client senza /v1.", + "endpointRewriteResponsesNote": "Riscrivi l'helper per le risposte senza /v1.", + "endpointRewriteModelsNote": "Riscrivere l'helper per l'individuazione dei modelli senza /v1.", + "modelPrefixesDescriptionStart": "Utilizzare il prefisso del provider prima del nome del modello per instradare a un provider specifico. Esempio:", + "modelPrefixesDescriptionEnd": "percorsi verso GitHub Copilot.", + "provider": "Fornitore", + "type": "Tipo", + "troubleshootingModelRouting": "Se il client non riesce con il routing del modello, utilizzare un provider/modello esplicito (ad esempio: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Se ricevi errori di modello ambigui, scegli il prefisso del provider anziché un semplice ID modello.", + "troubleshootingCodexFamily": "Per i modelli della famiglia GitHub Codex, mantieni il modello come gh/; il router seleziona/risponde automaticamente.", + "troubleshootingTestConnection": "Utilizza Dashboard > Provider > Verifica connessione prima di effettuare test da IDE o client esterni.", + "troubleshootingCircuitBreaker": "Se un fornitore mostra l'interruttore aperto, attendi il raffreddamento o controlla la pagina Salute per i dettagli.", + "troubleshootingOAuth": "Per i provider OAuth, eseguire nuovamente l'autenticazione se i token scadono. Controlla l'indicatore di stato della carta del fornitore." + }, + "legal": { + "privacyPolicy": "politica sulla riservatezza", + "termsOfService": "Termini di servizio", + "providerConfigurations": "Configurazioni del fornitore", + "apiKeys": "Chiavi API", + "usageLogs": "Registri di utilizzo", + "applicationSettings": "Impostazioni dell'applicazione", + "viewExportAnalytics": "Visualizza ed esporta analisi sull'utilizzo", + "clearHistory": "Cancella la cronologia di utilizzo in qualsiasi momento", + "configureRetention": "Configurare i criteri di conservazione dei log", + "backupRestore": "Esegui il backup e ripristina il tuo database", + "privacyMetadataTitle": "Informativa sulla privacy | OmniRoute", + "privacyMetadataDescription": "Informativa sulla privacy per il router proxy API OmniRoute AI.", + "termsMetadataTitle": "Termini di servizio | OmniRoute", + "termsMetadataDescription": "Termini di servizio per il router proxy API OmniRoute AI.", + "backToHome": "Ritorno a casa", + "lastUpdated": "Ultimo aggiornamento: {date}", + "policyLastUpdatedDate": "13 febbraio 2026", + "listSeparator": "-", + "questionsVisit": "Domande? Visita il nostro", + "githubRepository": "Repositorio GitHub", + "privacySection1Title": "1. Architettura locale-prima", + "privacySection1Text": "OmniRoute è progettato come un'applicazione local-first. Tutta l'elaborazione e l'archiviazione dei dati avviene interamente sul tuo computer. Non esiste un server centralizzato che raccoglie le tue informazioni.", + "privacySection2Title": "2. Dati che conserviamo", + "privacyDataStoredIn": "I seguenti dati vengono archiviati localmente in", + "privacyDataProviderConfigurationsDesc": "URL di connessione, tipi di provider e impostazioni di priorità", + "privacyDataApiKeysDesc": "crittografati e archiviati localmente per l'autenticazione con i fornitori di intelligenza artificiale", + "privacyDataUsageLogsDesc": "conteggi delle richieste, utilizzo dei token, nomi dei modelli, timestamp e tempi di risposta", + "privacyDataApplicationSettingsDesc": "preferenze del tema, strategia di routing e configurazioni combinate", + "privacySection3Title": "3. Nessuna telemetria", + "privacySection3Text": "OmniRoute non raccoglie dati di telemetria, analisi o rapporti sugli arresti anomali. Nessun dato viene inviato a noi o a terzi. I tuoi modelli di utilizzo, le chiamate API e le configurazioni rimangono completamente privati.", + "privacySection4Title": "4. Fornitori di IA di terze parti", + "privacySection4Text": "Quando effettui chiamate API tramite OmniRoute, le tue richieste vengono inoltrate ai fornitori di intelligenza artificiale che hai configurato (ad esempio: OpenAI, Anthropic, Google). Questi fornitori hanno le proprie politiche sulla privacy che regolano il modo in cui gestiscono i tuoi dati. Si prega di rivedere:", + "privacyOpenAiPolicy": "Informativa sulla privacy di OpenAI", + "privacyAnthropicPolicy": "Informativa sulla privacy antropica", + "privacyGooglePolicy": "Informativa sulla privacy di Google", + "privacySection5Title": "5. Sincronizzazione cloud (opzionale)", + "privacySection5Text": "Se abiliti la funzionalità opzionale di sincronizzazione cloud, le configurazioni del provider e le chiavi API potrebbero essere trasmesse a un endpoint cloud configurato. Questa funzionalità è disabilitata per impostazione predefinita e richiede un consenso esplicito.", + "privacySection6Title": "6. Registrazione", + "privacyLoggingIntro": "I registri delle richieste possono essere configurati tramite le impostazioni del dashboard. Puoi:", + "privacySection7Title": "7. I tuoi diritti", + "privacySection7TextStart": "Poiché tutti i dati sono archiviati localmente, hai il pieno controllo. Puoi cancellare i tuoi dati in qualsiasi momento rimuovendo il", + "privacySection7TextEnd": "directory o utilizzando le funzionalità di backup e ripristino del database nel dashboard.", + "termsSection1Title": "1. Panoramica", + "termsSection1Text": "OmniRoute è un router proxy API AI locale che funziona interamente sul tuo computer. Indirizza le richieste a più fornitori di intelligenza artificiale con bilanciamento del carico, failover e monitoraggio dell'utilizzo.", + "termsSection2Title": "2. Responsabilità dell'utente", + "termsResponsibilityApiKeys": "Sei l'unico responsabile della gestione delle tue chiavi API e credenziali per fornitori di intelligenza artificiale di terze parti (OpenAI, Anthropic, Google, ecc.).", + "termsResponsibilityCompliance": "Devi rispettare i termini di servizio di ciascun fornitore di intelligenza artificiale alla cui API accedi tramite OmniRoute.", + "termsResponsibilitySecurity": "L'utente è responsabile della sicurezza dell'installazione locale di OmniRoute, inclusa l'impostazione di una password e la limitazione dell'accesso alla rete.", + "termsSection3Title": "3. Come funziona", + "termsSection3Text": "OmniRoute funge da proxy intermediario. Le chiamate API inviate a OmniRoute vengono tradotte e inoltrate ai provider AI configurati. OmniRoute non modifica il contenuto delle richieste o delle risposte oltre la necessaria traduzione del protocollo.", + "termsSection4Title": "4. Trattamento dei dati", + "termsDataStoredLocally": "Tutti i dati vengono archiviati localmente sul tuo computer in un database SQLite.", + "termsNoTransmission": "OmniRoute non trasmette dati a server esterni a meno che non abiliti esplicitamente le funzionalità di sincronizzazione cloud.", + "termsDataLocationText": "I log di utilizzo, le chiavi API e la configurazione sono archiviati in", + "termsSection5Title": "5. Dichiarazione di non responsabilità", + "termsSection5Text": "OmniRoute viene fornito \"così com'è\" senza garanzie di alcun tipo. Non siamo responsabili per eventuali costi sostenuti per l'utilizzo dell'API, interruzioni del servizio o perdita di dati. Mantieni sempre i backup della tua configurazione.", + "termsSection6Title": "6. Sorgente aperta", + "termsSection6Text": "OmniRoute è un software open source. Sei libero di esaminarlo, modificarlo e distribuirlo secondo i termini della sua licenza." + } +} diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json new file mode 100644 index 0000000000..88cfabadc3 --- /dev/null +++ b/src/i18n/messages/ja.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "保存", + "cancel": "キャンセル", + "delete": "削除", + "loading": "読み込み中...", + "error": "エラーが発生しました", + "success": "成功", + "confirm": "よろしいですか?", + "refresh": "リフレッシュ", + "close": "閉じる", + "add": "追加", + "edit": "編集", + "search": "検索", + "back": "戻る", + "next": "次へ", + "submit": "送信する", + "reset": "リセット", + "copy": "コピー", + "copied": "コピーしました!", + "enabled": "有効", + "disabled": "無効", + "active": "アクティブ", + "inactive": "非アクティブ", + "noData": "利用可能なデータがありません", + "configure": "設定する", + "manage": "管理する", + "name": "名前", + "actions": "アクション", + "status": "ステータス", + "type": "種類", + "model": "モデル", + "models": "モデル", + "provider": "プロバイダー", + "account": "アカウント", + "time": "時間", + "details": "詳細", + "created": "作成されました", + "lastUsed": "最後に使用したもの", + "loadMore": "もっと読み込む", + "noResults": "結果が見つかりませんでした", + "reloadPage": "ページをリロードする", + "connected": "接続済み", + "disconnected": "切断されました", + "notConfigured": "未設定", + "testConnection": "テスト接続", + "enable": "有効にする", + "disable": "無効にする", + "columns": "列", + "newest": "新しい順", + "oldest": "古い順", + "all": "すべて", + "none": "なし", + "yes": "はい", + "no": "いいえ", + "warning": "警告", + "note": "注記", + "free": "無料", + "skipToContent": "コンテンツにスキップ" + }, + "sidebar": { + "home": "ホーム", + "dashboard": "ダッシュボード", + "providers": "プロバイダー", + "combos": "コンボ", + "usage": "使用法", + "analytics": "分析", + "costs": "コスト", + "health": "健康", + "limits": "制限と割り当て", + "cliTools": "CLIツール", + "settings": "設定", + "translator": "翻訳者", + "docs": "ドキュメント", + "issues": "問題点", + "endpoint": "エンドポイント", + "apiManager": "APIマネージャー", + "logs": "ログ", + "auditLog": "監査ログ", + "shutdown": "シャットダウン", + "restart": "再起動", + "shutdownConfirm": "オムニルートをシャットダウンしますか?", + "restartConfirm": "オムニルートを再起動しますか?", + "version": "v{version}", + "debug": "デバッグ", + "system": "システム", + "help": "ヘルプ", + "serverDisconnected": "サーバーが切断されました", + "serverDisconnectedMsg": "プロキシ サーバーが停止しているか、再起動中です。", + "expandSidebar": "サイドバーを展開する", + "collapseSidebar": "サイドバーを折りたたむ" + }, + "header": { + "logout": "ログアウト", + "language": "言語", + "providers": "プロバイダー", + "providerDescription": "AI プロバイダー接続を管理します", + "combos": "コンボ", + "comboDescription": "フォールバック付きのモデルコンボ", + "usage": "使用状況と分析", + "usageDescription": "API の使用状況、トークンの消費、リクエスト ログを監視します。", + "analytics": "アナリティクス", + "analyticsDescription": "チャート、トレンド、評価の洞察", + "cliTools": "CLIツール", + "cliToolsDescription": "CLI ツールの構成", + "home": "ホーム", + "homeDescription": "オムニルートへようこそ", + "endpoint": "エンドポイント", + "endpointDescription": "APIエンドポイント構成", + "settings": "設定", + "settingsDescription": "設定を管理します", + "openaiCompatible": "OpenAI対応", + "anthropicCompatible": "Anthropic 互換" + }, + "home": { + "quickStart": "クイックスタート", + "quickStartDesc": "4 ステップでセットアップ完了。プロバイダー接続、モデルルーティング、監視まで一括で行えます。", + "fullDocs": "完全版ドキュメント", + "step1Title": "1. APIキーの作成", + "step1Desc": "Endpoint -> Registered Keys に移動し、環境ごとに 1 つのキーを作成します。", + "step2Title": "2. プロバイダーを接続", + "step2Desc": "Providers でアカウントを追加します。OAuth、API Key、無料枠に対応しています。", + "step3Title": "3. クライアントを設定", + "step3Desc": "IDE または API クライアントの Base URL を {url} に設定します。", + "step4Title": "4. 監視と最適化", + "step4Desc": "リクエストログアナリティクス でトークン・コスト・エラーを追跡します。", + "providersOverview": "プロバイダーの概要", + "configuredOf": "{configured} は {total} の利用可能なプロバイダーで構成されています", + "noModelsAvailable": "このプロバイダーで利用できるモデルはありません。", + "configureFirst": "最初に {providers} で接続を構成します", + "configureProvider": "プロバイダーの構成", + "modelAvailable": "{count} モデルが利用可能", + "modelsAvailable": "{count} モデルが利用可能", + "connectionsActive": "{count} 接続がアクティブです", + "connectionsActivePlural": "{count} 接続がアクティブです", + "copyModelName": "モデル名をコピーする", + "documentation": "ドキュメント", + "healthMonitor": "ヘルスモニター", + "reportIssue": "問題を報告する", + "activeError": "{active} アクティブ · {errors} エラー", + "oauthLabel": "OAuth", + "apiKeyLabel": "APIキー", + "requestsShort": "{count} 件", + "providerModelsTitle": "{provider} - モデル", + "copiedModel": "コピーしました: {model}", + "aliasLabel": "別名" + }, + "analytics": { + "title": "分析", + "overviewDescription": "すべてのプロバイダーとモデルにわたる API 使用パターン、トークン消費量、コスト、アクティビティの傾向を監視します。", + "evalsDescription": "評価スイートを実行して、LLM エンドポイントをテストおよび検証します。モデルの品質を比較し、回帰を検出し、待ち時間をベンチマークします。", + "overview": "概要", + "evals": "エヴァルス" + }, + "apiManager": { + "title": "APIキー", + "createKey": "APIキーの作成", + "key": "キー", + "revokeKey": "キーを取り消す", + "revokeConfirm": "この API キーを取り消してもよろしいですか?", + "noKeys": "API キーはまだありません", + "noKeysDesc": "エンドポイントへのリクエストを認証するための最初の API キーを作成します", + "keyLabel": "キーラベル", + "permissions": "権限", + "expiresAt": "有効期限が切れます", + "never": "決してしない", + "revoke": "取り消し", + "showKey": "キーを表示", + "hideKey": "キーを隠す", + "copyKey": "APIキーをコピーする", + "allModels": "全モデル", + "selectedModels": "選択されたモデル", + "readOnly": "読み取り専用", + "fullAccess": "フルアクセス", + "keyManagement": "APIキー管理", + "keyManagementDesc": "エンドポイントへのリクエストを認証するための API キーを作成および管理する", + "totalKeys": "キーの総数", + "restricted": "制限付き", + "totalRequests": "総リクエスト数", + "modelsAvailable": "利用可能なモデル", + "registeredKeys": "登録されたキー", + "keysRegistered": "{count} キーが登録されました", + "keyRegistered": "{count} キーが登録されました", + "keysSecurityNote": "各キーは使用状況の追跡を分離しており、個別に取り消すことができます。キーは、セキュリティのために作成後にマスクされます。", + "createFirstKey": "最初のキーを作成する", + "name": "名前", + "usage": "使用法", + "created": "作成されました", + "actions": "アクション", + "reqs": "要求", + "neverUsed": "一度も使用されていない", + "deleteConfirm": "この API キーを削除しますか?", + "usageTips": "使用上のヒント", + "tipAuth": "Authorization ヘッダーの API キーをベアラー YOUR_KEY として使用します", + "tipSecure": "キーは作成中に一度だけ表示されます - 安全に保管してください", + "tipSeparate": "異なるクライアントまたは環境に対して個別のキーを作成する", + "tipRestrict": "セキュリティとコスト管理を向上させるためにキーを特定のモデルに制限する", + "keyName": "キー名", + "keyNamePlaceholder": "例: プロダクションキー、開発キー", + "keyNameDesc": "このキーの目的を識別するためのわかりやすい名前を選択してください", + "keyCreated": "APIキーが作成されました", + "keyCreatedSuccess": "キーが正常に作成されました。", + "keyCreatedNote": "このキーをコピーして保存してください。再度表示されなくなります。", + "done": "完了", + "savePermissions": "権限の保存", + "allowAll": "すべて許可", + "restrict": "制限する", + "allowAllInfo": "このキーは、利用可能なすべてのモデルにアクセスできます。", + "restrictInfo": "このキーは、{total} モデルの {selected} にアクセスできます。", + "selected": "{count} が選択されました", + "all": "すべて", + "clear": "クリア", + "searchModels": "名前またはプロバイダーでモデルを検索...", + "noModelsFound": "モデルが見つかりません", + "keyNameRequired": "キー名は必須です", + "keyNameTooLong": "キー名は {max} 文字以下である必要があります", + "keyNameInvalid": "キー名には文字、数字、スペース、ハイフン、アンダースコアのみを含めることができます", + "invalidKeyName": "無効なキー名です", + "failedCreateKey": "キーの作成に失敗しました", + "failedCreateKeyRetry": "キーの作成に失敗しました。もう一度試してください。", + "invalidKeyId": "無効なキーID", + "failedDeleteKey": "キーの削除に失敗しました", + "failedDeleteKeyRetry": "キーの削除に失敗しました。もう一度試してください。", + "invalidModelsSelection": "無効なモデルの選択", + "cannotSelectMoreThanModels": "{max} モデルを超えるモデルは選択できません", + "failedUpdatePermissions": "権限の更新に失敗しました", + "failedUpdatePermissionsRetry": "権限の更新に失敗しました。もう一度試してください。", + "unknownProvider": "不明", + "copyMaskedKey": "マスクされたキーをコピーする", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "最後: {date}", + "editPermissions": "権限の編集", + "deleteKey": "削除キー", + "model": "{count} モデル", + "models": "{count} モデル", + "permissionsTitle": "権限: {name}", + "allowAllDesc": "このキーは、利用可能なすべてのモデルにアクセスできます。", + "restrictDesc": "このキーは、{totalModels} モデルの {selectedCount} にアクセスできます。", + "selectedCount": "{count} が選択されました" + }, + "auditLog": { + "title": "監査ログ", + "searchPlaceholder": "検索アクション...", + "action": "アクション", + "actor": "俳優", + "target": "ターゲット", + "ipAddress": "IPアドレス", + "timestamp": "タイムスタンプ", + "noEntries": "監査エントリが見つかりませんでした", + "filterByAction": "アクションでフィルタリング...", + "filterByActor": "俳優でフィルター...", + "filterEntriesAria": "監査ログエントリをフィルタリングする", + "filterByActionTypeAria": "アクションの種類でフィルタリングする", + "filterByActorAria": "俳優で絞り込む", + "refreshAuditLogAria": "監査ログを更新する", + "tableAria": "監査ログエントリ", + "failedFetchAuditLog": "監査ログの取得に失敗しました", + "notAvailable": "—", + "description": "管理アクションとセキュリティ イベント", + "showing": "{count} エントリを表示しています (オフセット {offset})", + "previous": "前へ" + }, + "cliTools": { + "title": "CLIツール", + "noActiveProviders": "アクティブなプロバイダーはありません", + "noActiveProvidersDesc": "CLI ツールを設定するには、最初にプロバイダーを追加して接続してください。", + "mapModels": "地図モデル", + "testConnection": "テスト接続", + "connectionStatus": "接続ステータス", + "configureEndpoint": "エンドポイントの構成", + "instructions": "指示", + "modelMapping": "モデルマッピング", + "baseUrl": "ベースURL", + "apiKey": "APIキー", + "configured": "設定済み", + "notConfigured": "未設定", + "notInstalled": "インストールされていません", + "custom": "カスタム", + "unknown": "不明", + "lastSavedAt": "最終保存日: {date}", + "never": "決してしない", + "justNow": "たった今", + "minutesAgoShort": "{count}分前", + "hoursAgoShort": "{count}時間前", + "daysAgoShort": "{count}日前", + "monthsAgoShort": "{count} か月前", + "yearsAgoShort": "{count}年前", + "runtimeCheckFailed": "実行時チェックに失敗しました", + "yourApiKeyPlaceholder": "あなたの API キー", + "modelPlaceholder": "プロバイダー/モデル ID", + "configurationSaved": "設定が正常に保存されました。", + "failedToSave": "設定の保存に失敗しました。", + "noApiKeysCreateOne": "API キーがありません - [キー] ページで API キーを作成します", + "defaultOmnirouteKey": "sk_omniroute (デフォルト)", + "selectModel": "モデルの選択", + "selectModelForAlias": "{alias} のモデルを選択してください", + "selectModelForTool": "{tool} のモデルを選択してください", + "select": "選択", + "clear": "クリア", + "comingSoon": "近日公開予定", + "checkingRuntime": "実行時のステータスを確認しています...", + "guideOnlyIntegration": "ガイドのみの統合 (ローカル ランタイムは不要)", + "cliRuntimeDetected": "CLI ランタイムが検出され準備完了", + "cliFoundNotRunnable": "CLI は見つかりましたが、実行できません{reason}", + "cliRuntimeNotDetected": "CLI ランタイムが検出されない", + "binary": "バイナリ", + "configPath": "構成パス", + "configPathShort": "構成", + "failedCheckRuntimeStatus": "実行時のステータスの確認に失敗しました。", + "copy": "コピー", + "copied": "コピーされました", + "copyConfig": "構成のコピー", + "saveConfig": "設定の保存", + "selectionSaved": "選択内容が保存されました", + "guide": "ガイド", + "detected": "検出されました", + "notReady": "準備ができていません", + "active": "アクティブ", + "inactive": "非アクティブ", + "startMitm": "MITMを開始する", + "stopMitm": "MITMを停止する", + "mitmStarted": "MITM は正常に開始されました。", + "mitmStopped": "MITM は正常に停止しました。", + "failedStart": "MITMの開始に失敗しました", + "failedStop": "MITMの停止に失敗しました", + "saveMappings": "マッピングの保存", + "mappingsSaved": "マッピングが保存されました!", + "failedSaveMappings": "マッピングの保存に失敗しました", + "howItWorks": "仕組み:", + "antigravityHowWorksDesc": "Antigravity は Google のエンドポイントにリクエストを送信します。 MITM はそれらをインターセプトし、OmniRoute にリダイレクトします。", + "antigravityStep1": "1. MITM を開始して、OmniRoute 経由でリクエストをルーティングします。", + "antigravityStep2Prefix": "2.追加", + "antigravityStep2Suffix": "ホスト ファイルに 127.0.0.1 として追加します。", + "antigravityStep3": "3. Antigravity を開くと、リクエストがプロキシされます。", + "sudoPasswordRequiredTitle": "Sudo パスワードが必要です", + "sudoPasswordHint": "ホスト ファイルとシステム プロキシ設定を変更するには、管理者パスワードが必要です。", + "enterSudoPassword": "sudoパスワードを入力してください", + "sudoPasswordRequiredError": "Sudo パスワードが必要です。", + "cancel": "キャンセル", + "confirm": "確認する", + "settingsApplied": "設定が正常に適用されました。", + "failedApplySettings": "設定の適用に失敗しました", + "settingsReset": "設定が正常にリセットされました。", + "failedResetSettings": "設定のリセットに失敗しました", + "backupRestored": "バックアップが復元されました!", + "failedRestore": "復元に失敗しました", + "checkingCli": "{tool} CLI を確認しています...", + "cliNotRunnable": "{tool} CLI はインストールされていますが、実行できません", + "cliNotInstalled": "{tool} CLI がインストールされていません", + "cliNotDetected": "{tool} CLI が検出されませんでした", + "cliDetectedReady": "{tool} CLI が検出され準備完了", + "cliFoundFailedHealthcheck": "{tool} CLI が見つかりましたが、ランタイム ヘルスチェック {reason} に失敗しました。", + "installCliPrompt": "この機能を使用するには、{tool} CLI をインストールしてください。", + "installCodexPrompt": "自動適用機能を使用するには、Codex CLI をインストールしてください。", + "hide": "隠す", + "howToInstall": "インストール方法", + "installationGuide": "インストールガイド", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "インストール後、実行します", + "toVerify": "確認するために。", + "current": "現在", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "デフォルトにリセットする", + "providerModelPlaceholder": "プロバイダー/モデル ID", + "apply": "申し込む", + "reset": "リセット", + "manualConfig": "手動設定", + "backups": "バックアップ", + "configBackups": "構成のバックアップ", + "noBackupsYet": "まだバックアップはありません。バックアップは、適用またはリセットの前に自動的に作成されます。", + "restore": "復元", + "backupRestoredReloading": "バックアップが復元されました!ステータスをリロード中...", + "failedRestoreBackup": "バックアップの復元に失敗しました", + "applied": "適用されました!", + "failed": "失敗しました", + "resetDone": "リセット!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute は OpenAI 互換プロバイダーとして構成されています", + "provider": "プロバイダー", + "model": "モデル", + "providers": "プロバイダー", + "auth": "認証", + "noApiKeysAvailable": "利用可能な API キーがありません", + "usingDefaultOmniroute": "デフォルトの使用: sk_omniroute", + "updateConfig": "構成の更新", + "applyConfig": "構成の適用", + "noBackupsAvailable": "利用可能なバックアップはありません。", + "profileSaved": "プロフィール「{name}」を保存しました!", + "failedSaveProfile": "プロファイルの保存に失敗しました", + "profileActivated": "プロフィールが有効になりました!", + "failedActivateProfile": "プロファイルをアクティブ化できませんでした", + "profiles": "プロフィール", + "savedProfiles": "保存されたプロファイル", + "noProfilesYet": "プロファイルはまだ保存されていません。現在の設定を以下のプロファイルとして保存します。", + "activate": "アクティブ化する", + "deleteProfile": "プロフィールの削除", + "profileNamePlaceholder": "プロファイル名 (例: 個人アカウント)", + "saveCurrent": "現在の保存", + "codexAuthNotePrefix": "コーデックスの用途", + "codexAuthNoteMiddle": "と", + "codexAuthNoteSuffix": "「適用」をクリックして自動設定を行います。", + "claudeManualConfiguration": "Claude CLI - 手動構成", + "codexManualConfiguration": "Codex CLI - 手動構成", + "droidManualConfiguration": "Factory Droid - 手動構成", + "openClawManualConfiguration": "オープンクロー - 手動設定", + "clineManualConfiguration": "クライン手動設定", + "kiloManualConfiguration": "キロコードの手動設定", + "toolDescriptions": { + "antigravity": "MITM を備えた Google Antigravity IDE", + "claude": "Anthropic Claude コード CLI", + "codex": "OpenAI コーデックス CLI", + "droid": "ファクトリー ドロイド AI アシスタント", + "openclaw": "オープンクロー AI アシスタント", + "cline": "Cline AI コーディング アシスタント CLI", + "kilo": "Kilo Code AI アシスタント CLI", + "cursor": "カーソルAIコードエディター", + "continue": "AIアシスタントを続ける" + }, + "guides": { + "cursor": { + "notes": { + "0": "この機能を使用するには、Cursor Pro アカウントが必要です。", + "1": "カーソルは独自のサーバーを介してリクエストをルーティングするため、ローカル エンドポイントはサポートされません。設定でクラウドエンドポイントを有効にしてください。" + }, + "steps": { + "1": { + "title": "設定を開く", + "desc": "設定 -> モデルに移動します" + }, + "2": { + "title": "OpenAI APIを有効にする", + "desc": "「OpenAI API キー」オプションを有効にする" + }, + "3": { + "title": "ベースURL" + }, + "4": { + "title": "APIキー" + }, + "5": { + "title": "カスタムモデルの追加", + "desc": "「すべてのモデルを表示」→「カスタムモデルを追加」をクリックします。" + }, + "6": { + "title": "モデルの選択" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "構成を開く", + "desc": "Continue 構成ファイルを開く" + }, + "2": { + "title": "APIキー" + }, + "3": { + "title": "モデルの選択" + }, + "4": { + "title": "モデル構成の追加", + "desc": "次の構成をモデル配列に追加します。" + } + } + } + } + }, + "combos": { + "title": "コンボ", + "description": "重み付けルーティングとフォールバックのサポートを備えたモデルのコンボを作成する", + "createCombo": "コンボを作成する", + "editCombo": "コンボを編集する", + "deleteCombo": "コンボの削除", + "noModels": "モデルがありません", + "noModelsYet": "まだモデルは追加されていません", + "addModel": "モデルの追加", + "addModelToCombo": "モデルをコンボに追加", + "routingStrategy": "ルーティング戦略", + "maxRetries": "最大再試行回数", + "timeout": "タイムアウト (ミリ秒)", + "healthcheck": "ヘルスチェック", + "priority": "優先順位", + "fallback": "フォールバック", + "roundRobin": "ラウンドロビン", + "random": "ランダム", + "leastLatency": "最小レイテンシ", + "comboName": "コンボ名", + "comboNamePlaceholder": "私のコンボ", + "deleteConfirm": "このコンボを削除しますか?", + "noCombosYet": "まだコンボはありません", + "comboCreated": "コンボが正常に作成されました", + "comboUpdated": "コンボが正常に更新されました", + "comboDeleted": "コンボが削除されました", + "failedCreate": "コンボ作成に失敗しました", + "failedUpdate": "コンボの更新に失敗しました", + "errorCreating": "コンボ作成エラー", + "errorUpdating": "コンボ更新エラー", + "errorDeleting": "コンボ削除エラー", + "testFailed": "テストリクエストが失敗しました", + "failedToggle": "コンボの切り替えに失敗しました", + "testResults": "テスト結果 — {name}", + "resolvedBy": "解決者:", + "more": "+{count} 詳細", + "reqs": "要求", + "success": "成功", + "proxyConfigured": "プロキシが設定されました", + "copyComboName": "コンボ名をコピーする", + "enableCombo": "コンボを有効にする", + "disableCombo": "コンボを無効にする", + "testCombo": "テストコンボ", + "duplicate": "重複", + "proxyConfig": "プロキシ構成", + "nameRequired": "名前は必須です", + "nameInvalid": "文字、数字、-、_、/、および のみ。許可される", + "nameHint": "文字、数字、-、_、/、および 。許可される", + "priorityDesc": "順次フォールバック: 最初にモデル 1、次にモデル 2 というように試行します。", + "weightedDesc": "フォールバックを使用して重量パーセントに基づいてトラフィックを分散します。", + "roundRobinDesc": "循環分散: 各リクエストはローテーションで次のモデルに送信されます。", + "randomDesc": "均一なランダム選択、その後残りのモデルへのフォールバック", + "leastUsedDesc": "リクエストが最も少ないモデルを選択し、時間の経過とともに負荷のバランスをとります", + "costOptimizedDesc": "価格に基づいて最初に最も安価なモデルにルーティングします", + "models": "モデル", + "autoBalance": "オートバランス", + "advancedSettings": "詳細設定", + "retryDelay": "再試行遅延 (ミリ秒)", + "concurrencyPerModel": "同時実行性 / モデル", + "queueTimeout": "キューのタイムアウト (ミリ秒)", + "advancedHint": "グローバルなデフォルトを使用するには、空のままにします。これらはプロバイダーごとの設定をオーバーライドします。", + "moveUp": "上に移動", + "moveDown": "下に移動", + "removeModel": "削除", + "saving": "保存中...", + "weighted": "加重", + "leastUsed": "最も使用頻度の低いもの", + "costOpt": "コスト最適化" + }, + "costs": { + "title": "コスト", + "budget": "予算", + "totalCost": "総コスト", + "breakdown": "コストの内訳", + "noData": "コストデータなし", + "byModel": "モデル別", + "byProvider": "プロバイダー別" + }, + "endpoint": { + "title": "APIエンドポイント", + "available": "利用可能なエンドポイント", + "cloudProxy": "クラウドプロキシ", + "disableConfirm": "クラウド プロキシを無効にしてもよろしいですか?", + "baseUrl": "ベースURL", + "apiKeyLabel": "APIキー", + "registeredKeys": "登録されたキー", + "chatCompletions": "チャットの完了", + "responses": "応答", + "listModels": "モデルの一覧表示", + "usingCloudProxy": "クラウドプロキシの使用", + "usingLocalServer": "ローカルサーバーの使用", + "machineId": "マシン ID: {id}...", + "disableCloud": "クラウドを無効にする", + "enableCloud": "クラウドを有効にする", + "modelsAcrossEndpoints": "{endpoints} エンドポイントにわたる {models} モデル", + "chatDesc": "すべてのプロバイダーとのストリーミングおよび非ストリーミング チャット", + "embeddings": "埋め込み", + "embeddingsDesc": "検索および RAG パイプライン用のテキスト埋め込み", + "imageGeneration": "画像生成", + "imageDesc": "テキストプロンプトから画像を生成する", + "rerank": "リランク", + "rerankDesc": "クエリとの関連性によってドキュメントを再ランク付けする", + "audioTranscription": "音声文字起こし", + "audioTranscriptionDesc": "音声ファイルをテキストに変換する (Whisper)", + "textToSpeech": "テキスト読み上げ", + "textToSpeechDesc": "テキストを自然な音声に変換する", + "moderations": "モデレーション", + "moderationsDesc": "コンテンツの管理と安全性の分類", + "enableCloudTitle": "クラウドプロキシを有効にする", + "whatYouGet": "得られるもの", + "cloudBenefitAccess": "世界中のどこからでも API にアクセス", + "cloudBenefitShare": "エンドポイントをチームと簡単に共有", + "cloudBenefitPorts": "ポートを開いたりファイアウォールを設定したりする必要はありません", + "cloudBenefitEdge": "高速なグローバルエッジネットワーク", + "cloudSessionNote": "クラウドは認証セッションを 1 日間保持します。使用されない場合は自動的に削除されます。", + "cloudUnstableNote": "現在、Claude Code OAuth ではクラウドが不安定になる場合があります。", + "cloudConnected": "クラウドプロキシが接続されました!", + "connectingToCloud": "クラウドに接続しています...", + "verifyingConnection": "接続を確認しています...", + "connecting": "接続中...", + "verifying": "確認中...", + "connected": "つながりました!", + "disableCloudTitle": "クラウドプロキシを無効にする", + "disableWarning": "すべての認証セッションはクラウドから削除されます。", + "syncingData": "最新のデータを同期しています...", + "disablingCloud": "クラウドを無効にしています...", + "syncing": "同期中...", + "disabling": "無効化中...", + "cloudConnectedVerified": "クラウド プロキシが接続され、確認されました。", + "connectedVerificationPending": "接続済み — 検証保留中", + "connectedVerificationPendingWithError": "接続済み — 検証保留中: {error}", + "cloudDisabledSuccess": "クラウドは正常に無効になりました", + "syncedSuccess": "正常に同期されました", + "failedDisable": "クラウドを無効にできませんでした", + "failedEnable": "クラウドを有効にできませんでした", + "cloudRequestTimeout": "クラウドリクエストのタイムアウト", + "cloudRequestFailed": "クラウドリクエストが失敗しました", + "cloudWorkerUnreachable": "クラウド ワーカーに到達できませんでした。クラウド サービスが実行されていることを確認します (/cloud の npm run dev)。", + "connectionFailed": "接続に失敗しました", + "syncFailed": "クラウドデータの同期に失敗しました", + "providerModelsTitle": "{provider} — モデル", + "noModelsForProvider": "このプロバイダーで利用できるモデルはありません。", + "chat": "チャット", + "embedding": "埋め込み", + "image": "画像", + "custom": "カスタム", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "システムの健全性", + "description": "OmniRoute インスタンスのリアルタイム監視", + "healthy": "健康", + "degraded": "劣化した", + "down": "ダウン", + "uptime": "稼働時間", + "memory": "記憶", + "memoryRss": "メモリ(RSS)", + "heap": "ヒープ", + "cpu": "CPU", + "database": "データベース", + "version": "バージョン", + "lastCheck": "最終チェック", + "providerHealth": "プロバイダーの健康状態", + "systemMetrics": "システムメトリクス", + "tokenHealth": "トークンの健全性", + "refreshAll": "すべて更新", + "checkNow": "今すぐチェック", + "loadingHealth": "健康データをロードしています...", + "failedToLoad": "健康データのロードに失敗しました: {error}", + "retry": "再試行", + "allOperational": "すべてのシステムが稼働中", + "issuesDetected": "システムの問題が検出されました", + "updatedAt": "{time} を更新しました", + "latency": "レイテンシー", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "リクエストの合計", + "noDataYet": "まだデータがありません", + "promptCache": "プロンプトキャッシュ", + "entries": "エントリー", + "hitRate": "命中率", + "hitsMisses": "ヒット/ミス", + "signatureCache": "署名キャッシュ", + "signatureDefaults": "デフォルト", + "signatureTool": "ツール", + "signatureFamily": "家族", + "signatureSession": "セッション", + "recovering": "回復中", + "noCBData": "サーキットブレーカーのデータはありません。最初にいくつかのリクエストを行ってください。", + "providerHealthStatusAria": "プロバイダーの健康状態", + "issuesLabel": "検出された問題", + "operational": "稼働中", + "providers": "プロバイダー", + "healthyCount": "{count} は健康です", + "nodeVersion": "ノード {version}", + "failures": "{count} 失敗", + "failuresPlural": "{count} の失敗", + "lastFailure": "最後", + "rateLimitStatus": "レート制限ステータス", + "activeLimiters": "{count} アクティブ リミッター", + "activeLimitersPlural": "{count} アクティブ リミッター", + "queued": "キューに入れられました", + "queuedCount": "{count} がキューに入れられました", + "running": "走っている", + "runningCount": "{count} 実行中", + "ok": "OK", + "activeLockouts": "アクティブなロックアウト", + "resetConfirm": "すべてのサーキットブレーカーを正常な状態にリセットしますか?これにより、すべての失敗カウントがクリアされ、すべてのプロバイダーが動作状態に復元されます。", + "resetAllTitle": "すべてのサーキットブレーカーを正常な状態にリセットします", + "resetting": "リセット中...", + "resetAll": "すべてリセット", + "until": "{time} まで" + }, + "limits": { + "title": "制限と割り当て", + "rateLimit": "レート制限", + "remaining": "残り", + "requestsPerMinute": "リクエスト/分", + "tokensPerMinute": "トークン/分", + "dailyLimit": "1日あたりの制限" + }, + "logs": { + "title": "ログ", + "requestLogs": "リクエストログ", + "proxyLogs": "プロキシログ", + "auditLog": "監査ログ", + "console": "コンソール", + "auditLogDesc": "管理アクションとセキュリティ イベント", + "loading": "読み込み中...", + "refresh": "リフレッシュ", + "filterByAction": "アクションでフィルタリング...", + "filterByActor": "俳優でフィルター...", + "filterEntriesAria": "監査ログエントリをフィルタリングする", + "filterByActionTypeAria": "アクションの種類でフィルタリングする", + "filterByActorAria": "俳優で絞り込む", + "refreshAuditLogAria": "監査ログを更新する", + "tableAria": "監査ログエントリ", + "failedFetchAuditLog": "監査ログの取得に失敗しました", + "showing": "{count} エントリを表示しています (オフセット {offset})", + "search": "検索", + "timestamp": "タイムスタンプ", + "action": "アクション", + "actor": "俳優", + "target": "ターゲット", + "details": "詳細", + "ipAddress": "IPアドレス", + "notAvailable": "—", + "noEntries": "監査ログエントリが見つかりませんでした", + "previous": "前へ", + "next": "次へ" + }, + "onboarding": { + "welcome": "ようこそ", + "security": "セキュリティ", + "test": "テスト", + "ready": "準備完了!", + "setPassword": "パスワードを設定する", + "addProvider": "最初のプロバイダーを追加する", + "getStarted": "始めましょう", + "skip": "スキップ", + "skipWizard": "ウィザードを完全にスキップする", + "skipPassword": "パスワード設定をスキップする", + "skipAndContinue": "スキップして続行", + "passwordLabel": "パスワード", + "confirmPassword": "パスワードの確認", + "enterPassword": "パスワードを入力してください", + "confirmPasswordPlaceholder": "パスワードの確認", + "passwordsMismatch": "パスワードが一致しません", + "setupComplete": "セットアップ完了!", + "goToDashboard": "ダッシュボードに移動 →", + "welcomeDesc": "OmniRoute はローカル AI API プロキシです。負荷分散、フェイルオーバー、使用状況追跡を使用して、リクエストを複数の AI プロバイダーにルーティングします。", + "multiProvider": "マルチプロバイダー", + "usageTracking": "使用状況の追跡", + "apiKeyMgmt": "APIキー管理", + "securityDesc": "ダッシュボードを保護するためにパスワードを設定するか、今はスキップしてください。", + "providerDesc": "初めての AI プロバイダーに接続します。後でさらに追加することもできます。", + "apiKeyRequired": "APIキー(必須)", + "customUrlOptional": "カスタム URL (オプション)", + "testDesc": "プロバイダー接続が機能することを確認してみましょう。", + "runTest": "接続テストの実行", + "testingConnection": "接続をテストしています...", + "connectionSuccessful": "接続成功!プロバイダーの準備が整いました。", + "noProviderFound": "プロバイダーが見つかりませんでした。後でダッシュボードから追加できます。", + "testFailed": "テストは失敗しましたが、これは後で構成できます。", + "couldNotTest": "現在テストできませんでした。ダッシュボードからテストできます。", + "doneDesc": "準備は完了です! OmniRoute インスタンスが構成され、AI リクエストをプロキシする準備ができました。", + "yourEndpoint": "エンドポイント:", + "continue": "続ける", + "retry": "再試行", + "failedSetPassword": "パスワードの設定に失敗しました。もう一度やり直してください。", + "failedAddProvider": "プロバイダーの追加に失敗しました。もう一度やり直してください。", + "connectionError": "接続エラー。もう一度試してください。", + "provider": "プロバイダー" + }, + "providers": { + "title": "プロバイダー", + "addProvider": "プロバイダーの追加", + "editProvider": "プロバイダーの編集", + "deleteProvider": "プロバイダーの削除", + "noProviders": "プロバイダーが構成されていません", + "modelAvailability": "モデルの入手可能性", + "accounts": "アカウント", + "newAccount": "新しいアカウント", + "deleteConfirm": "このプロバイダーを削除してもよろしいですか?", + "testing": "テスト中...", + "testConnection": "テスト接続", + "testSuccess": "接続成功", + "testFailed": "接続に失敗しました", + "available": "利用可能", + "cooldown": "クールダウン", + "unavailable": "利用不可", + "unknown": "不明", + "oauthLabel": "OAuth", + "compatibleLabel": "互換性のある", + "chat": "チャット", + "responses": "応答", + "messages": "メッセージ", + "oauthProviders": "OAuthプロバイダー", + "freeProviders": "無料プロバイダー", + "apiKeyProviders": "APIキープロバイダー", + "compatibleProviders": "API キー互換プロバイダー", + "testAll": "すべてをテストする", + "testAllOAuth": "すべての OAuth 接続をテストする", + "testAllFree": "すべての無料接続をテストする", + "testAllApiKey": "すべての API キー接続をテストする", + "testAllCompatible": "すべての互換性のある接続をテストする", + "connected": "{count} 接続されました", + "errorCount": "{count} エラー ({code})", + "errorCountNoCode": "{count} エラー", + "noConnections": "接続がありません", + "disabled": "障害者", + "enableProvider": "プロバイダーを有効にする", + "disableProvider": "プロバイダーを無効にする", + "testResults": "テスト結果", + "noCompatibleYet": "互換性のあるプロバイダーはまだ追加されていません", + "compatibleHint": "上のボタンを使用して、OpenAI または Anthropic と互換性のあるエンドポイントを追加します", + "addOpenAICompatible": "OpenAI互換性を追加", + "addAnthropicCompatible": "人間互換性を追加", + "addNewProvider": "新しいプロバイダーの追加", + "backToProviders": "プロバイダーに戻る", + "configureNewProvider": "アプリケーションで使用する新しい AI プロバイダーを構成します。", + "providerLabel": "プロバイダー", + "selectProvider": "プロバイダーを選択してください", + "selectedProvider": "選択したプロバイダー", + "authMethod": "認証方法", + "apiKeyLabel": "APIキー", + "apiKeyRequired": "APIキーが必要です", + "selectProviderRequired": "プロバイダーを選択してください", + "enterApiKey": "API キーを入力してください", + "apiKeySecure": "API キーは暗号化され、安全に保管されます。", + "oauth2Connect": "OAuth2で接続する", + "oauth2Label": "OAuth2", + "oauth2Desc": "OAuth2 認証を使用してアカウントを接続します。", + "displayName": "表示名", + "displayNamePlaceholder": "例: 本番 API、開発環境", + "displayNameHint": "オプション。この構成を識別するためのフレンドリ名。", + "active": "アクティブ", + "activeDescription": "このプロバイダーをアプリケーションで使用できるようにします。", + "cancel": "キャンセル", + "createProvider": "プロバイダーの作成", + "failedCreate": "プロバイダーの作成に失敗しました", + "errorOccurred": "エラーが発生しました。もう一度試してください。", + "modelStatus": "モデルステータス", + "allModelsOperational": "全モデル稼働中", + "modelsWithIssues": "{count} モデルに問題があります", + "allModelsNormal": "全機種正常に反応しております。", + "cooldownCleared": "{model} のクールダウンがクリアされました", + "failedClearCooldown": "クールダウンをクリアできませんでした", + "loadingAvailability": "モデルの可用性を読み込んでいます...", + "clearCooldown": "クリア", + "clearing": "クリア中...", + "until": "{time} まで", + "providerTestFailed": "プロバイダーのテストに失敗しました", + "modeTest": "{mode} テスト", + "passedCount": "{count} が合格しました", + "failedCount": "{count} が失敗しました", + "testedCount": "{count} テスト済み", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "エラー", + "noActiveConnectionsInGroup": "このグループに対してアクティブな接続が見つかりません。", + "allTestsPassed": "すべての {total} テストに合格しました", + "testSummary": "{passed}/{total} は成功、{failed} は失敗", + "nameLabel": "名前", + "prefixLabel": "プレフィックス", + "baseUrlLabel": "ベースURL", + "apiTypeLabel": "API タイプ", + "prefixHint": "必須。モデル名の一意の接頭辞。", + "nameHint": "必須。このノードのわかりやすいラベル。", + "baseUrlHint": "必須。  プロバイダー API のベース URL。", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "接続の検証", + "validating": "検証中...", + "connectionValid": "接続は有効です!", + "connectionFailed": "接続に失敗しました。 URLとキーを確認してください。", + "testKeyLabel": "APIキーをテストする", + "testKeyPlaceholder": "sk-... (検証のみ)", + "providerNotFound": "プロバイダーが見つかりません", + "deleteConnectionConfirm": "この接続を削除しますか?", + "failedSetAlias": "エイリアスの設定に失敗しました", + "failedSaveConnection": "接続の保存に失敗しました", + "failedSaveConnectionRetry": "接続を保存できませんでした。もう一度試してください。", + "failedRetestConnection": "接続の再テストに失敗しました", + "deleteCompatibleNodeConfirm": "この {type} 互換ノードを削除しますか?", + "anthropicCompatibleDetails": "人類互換性の詳細", + "openaiCompatibleDetails": "OpenAI互換性の詳細", + "messagesApi": "メッセージAPI", + "responsesApi": "レスポンスAPI", + "chatCompletions": "チャットの完了", + "importingModels": "インポート中...", + "importFromModels": "/models からインポート", + "addConnectionToImport": "接続を追加してインポートを有効にします。", + "noModelsConfigured": "モデルが設定されていません", + "connectionCount": "{count} 接続", + "fetchingModels": "利用可能なモデルを取得しています...", + "failedFetchModels": "モデルの取得に失敗しました", + "noModelsFound": "モデルが見つかりません", + "importFailed": "インポートに失敗しました", + "noNewModelsAdded": "新しいモデルは追加されませんでした。", + "adding": "追加中...", + "importingModelsTitle": "モデルのインポート", + "copyModel": "モデルをコピーする", + "removeModel": "モデルの削除", + "rateLimitProtected": "保護されています", + "rateLimitUnprotected": "保護されていない", + "enableRateLimitProtection": "クリックしてレート制限保護を有効にします", + "disableRateLimitProtection": "クリックしてレート制限保護を無効にします", + "productionKey": "プロダクションキー", + "enterNewApiKey": "新しいAPIキーを入力してください", + "optional": "オプション", + "anthropicCompatibleName": "人間互換性", + "openaiCompatibleName": "OpenAI対応", + "failedImportModels": "モデルのインポートに失敗しました", + "noModelsReturnedFromEndpoint": "/models エンドポイントからモデルが返されませんでした。", + "importingModelsProgress": "{total} モデルの {current} をインポートしています...", + "foundModelsStartingImport": "{count} モデルが見つかりました。インポートを開始しています...", + "importingModelById": "{modelId} をインポートしています...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} が正常にインポートされました。", + "noNewModelsAddedExisting": "新しいモデルは追加されませんでした (すべてすでに存在しています)。", + "importDoneCount": "✓ 完了! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "予期しないエラーが発生しました", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "メッセージ", + "responsesPath": "応答", + "chatCompletionsPath": "チャット/補完", + "add": "追加", + "edit": "編集", + "delete": "削除", + "anthropic": "人間的", + "openai": "OpenAI", + "singleConnectionPerCompatible": "互換性のあるノードごとに 1 つの接続のみが許可されます。さらに接続が必要な場合は、別のノードを追加します。", + "connections": "接続", + "providerProxyTitleConfigured": "プロバイダー プロキシ: {host}", + "configured": "設定済み", + "providerProxyConfigureHint": "このプロバイダーのすべての接続に対してプロキシを構成します", + "providerProxy": "プロバイダープロキシ", + "noConnectionsYet": "まだ接続がありません", + "addFirstConnectionHint": "最初の接続を追加して開始します", + "addConnection": "接続の追加", + "availableModels": "利用可能なモデル", + "pageAutoRefresh": "ページは自動的に更新されます...", + "statusDisabled": "無効化された", + "statusConnected": "接続されています", + "statusRuntimeIssue": "ランタイムの問題", + "statusAuthFailed": "認証に失敗しました", + "statusRateLimited": "レート制限あり", + "statusNetworkIssue": "ネットワークの問題", + "statusTestUnsupported": "テストはサポートされていません", + "statusUnavailable": "利用不可", + "statusFailed": "失敗しました", + "statusError": "エラー", + "oauthAccount": "OAuth アカウント", + "errorTypeRuntime": "ローカルランタイム", + "errorTypeUpstreamAuth": "アップストリーム認証", + "errorTypeMissingCredential": "資格情報がありません", + "errorTypeRefreshFailed": "更新に失敗しました", + "errorTypeTokenExpired": "トークンの有効期限が切れました", + "errorTypeRateLimited": "レート制限あり", + "errorTypeUpstreamUnavailable": "上流は利用不可", + "errorTypeNetworkError": "ネットワークエラー", + "errorTypeTestUnsupported": "テストはサポートされていません", + "errorTypeUpstreamError": "上流エラー", + "proxySourceGlobal": "グローバル", + "proxySourceProvider": "プロバイダー", + "proxySourceKey": "キー", + "proxyConfiguredBySource": "プロキシ ({source}): {host}", + "autoPriority": "自動: {priority}", + "proxy": "プロキシ", + "retestAuthentication": "認証を再テストする", + "retest": "再テスト", + "disableConnection": "接続を無効にする", + "enableConnection": "接続を有効にする", + "reauthenticateConnection": "この接続を再認証します", + "proxyConfig": "プロキシ構成", + "aliasExistsAlert": "エイリアス「{alias}」はすでに存在します。別のモデルを使用するか、既存のエイリアスを編集してください。", + "openRouterAnyModelHint": "OpenRouter はあらゆるモデルをサポートします。モデルを追加し、すぐにアクセスできるようにエイリアスを作成します。", + "modelIdFromOpenRouter": "モデルID (OpenRouterから)", + "openRouterModelPlaceholder": "人間的/クロード-3-作品", + "customModels": "カスタムモデル", + "customModelsHint": "デフォルトのリストにないモデル ID を追加します。これらはルーティングに使用できるようになります。", + "modelId": "モデルID", + "customModelPlaceholder": "例: gpt-4.5-ターボ", + "loading": "読み込み中...", + "removeCustomModel": "カスタムモデルを削除する", + "noCustomModels": "カスタム モデルはまだ追加されていません。", + "allSuggestedAliasesExist": "提案されたエイリアスはすべてすでに存在します。別のモデルを選択するか、競合するエイリアスを削除してください。", + "failedSaveCustomModel": "カスタムモデルの保存に失敗しました", + "modelAddedSuccess": "モデル {modelId} が正常に追加されました", + "failedAddModelTryAgain": "モデルの追加に失敗しました。もう一度試してください。", + "failedSaveImportedModel": "インポートされたモデルをカスタム データベースに保存できませんでした", + "failedImportModelsTryAgain": "モデルのインポートに失敗しました。もう一度試してください。", + "failedRemoveModelFromDatabase": "データベースからモデルを削除できませんでした", + "modelRemovedSuccess": "モデルは正常に削除されました", + "failedDeleteModelTryAgain": "モデルの削除に失敗しました。もう一度試してください。", + "compatibleModelsDescription": "{type} 互換モデルを手動で追加するか、/models エンドポイントからインポートします。", + "anthropicCompatibleModelPlaceholder": "クロード-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "API キーの検証に失敗しました。キーを確認して再試行してください。", + "addProviderApiKeyTitle": "{provider} API キーを追加", + "checking": "確認中...", + "check": "チェックする", + "valid": "有効", + "invalid": "無効です", + "creating": "作成中...", + "validationChecksAnthropicCompatible": "検証では、API キーを検証することで {provider} をチェックします。", + "validationChecksOpenAiCompatible": "検証では、ベース URL の /models を介して {provider} がチェックされます。", + "priorityLabel": "優先順位", + "saving": "保存中...", + "save": "保存", + "editConnection": "接続の編集", + "accountName": "アカウント名", + "email": "電子メール", + "healthCheckMinutes": "ヘルスチェック (分)", + "healthCheckHint": "プロアクティブなトークンの更新間隔。 0 = 無効。", + "failedTestConnection": "接続のテストに失敗しました", + "failed": "失敗しました", + "leaveBlankKeepCurrentApiKey": "現在の API キーを保持するには、空白のままにします。", + "editCompatibleTitle": "編集 {type} 互換", + "compatibleBaseUrlHint": "{type} 互換 API のベース URL (/v1 で終わる) を使用します。", + "apiKeyForCheck": "APIキー(チェック用)", + "compatibleProdPlaceholder": "{type} 互換性あり (製品)" + }, + "settings": { + "title": "設定", + "general": "一般", + "security": "セキュリティ", + "appearance": "外観", + "routing": "ルーティング", + "cache": "キャッシュ", + "resilience": "回復力", + "systemPrompt": "システムプロンプト", + "thinkingBudget": "予算を考える", + "proxy": "プロキシ", + "pricing": "価格設定", + "storage": "ストレージ", + "policies": "ポリシー", + "ipFilter": "IPフィルター", + "comboDefaults": "コンボのデフォルト", + "fallbackChains": "フォールバックチェーン", + "changePassword": "パスワードの変更", + "enablePassword": "パスワードを有効にする", + "darkMode": "ダークモード", + "lightMode": "ライトモード", + "systemTheme": "システムテーマ", + "enableCache": "キャッシュを有効にする", + "cacheTTL": "キャッシュTTL", + "maxCacheSize": "最大キャッシュサイズ", + "clearCache": "キャッシュのクリア", + "cacheHits": "キャッシュヒット", + "cacheMisses": "キャッシュミス", + "hitRate": "命中率", + "cacheEntries": "キャッシュエントリ", + "circuitBreaker": "サーキットブレーカー", + "retryPolicy": "再試行ポリシー", + "maxRetries": "最大再試行回数", + "retryDelay": "再試行遅延", + "timeoutMs": "タイムアウト (ミリ秒)", + "enableSystemPrompt": "システムプロンプトを有効にする", + "systemPromptText": "システムプロンプトテキスト", + "enableThinking": "思考を可能にする", + "maxThinkingTokens": "最大思考トークン", + "enableProxy": "プロキシを有効にする", + "proxyUrl": "プロキシ URL", + "pricingRates": "価格設定レートの形式", + "currentPricing": "現在の価格の概要", + "loadingPricing": "価格データをロードしています...", + "noPricing": "利用可能な価格データはありません", + "input": "入力", + "output": "出力", + "cached": "キャッシュされた", + "reasoning": "推論", + "cacheCreation": "キャッシュの作成", + "customPricing": "カスタム価格設定", + "databaseSize": "データベースのサイズ", + "backupDb": "バックアップデータベース", + "restoreDb": "データベースの復元", + "exportData": "データのエクスポート", + "importData": "データのインポート", + "clearData": "すべてのデータをクリア", + "clearDataConfirm": "これにより、すべてのデータが完全に削除されます。本気ですか?", + "enableRequestLogs": "リクエストログを有効にする", + "logRetention": "ログの保存期間", + "ipWhitelist": "IPホワイトリスト", + "ipBlacklist": "IPブラックリスト", + "addIP": "IPの追加", + "savedSuccessfully": "設定が正常に保存されました", + "ai": "AI", + "advanced": "上級者向け", + "localMode": "ローカル モード — すべてのデータはマシンに保存されています", + "settingsSectionsAria": "設定セクション", + "switchThemes": "明るいテーマと暗いテーマを切り替える", + "themeSelectionAria": "テーマの選択", + "themeLight": "ライト", + "themeDark": "暗い", + "themeSystem": "システム", + "hideHealthLogs": "ヘルスチェックログを非表示にする", + "hideHealthLogsDesc": "ON の場合、サーバー コンソールで [HealthCheck] メッセージを抑制します", + "promptCache": "プロンプトキャッシュ", + "flushCache": "キャッシュのフラッシュ", + "flushing": "フラッシング…", + "size": "サイズ", + "hits": "ヒット曲", + "evictions": "立ち退き", + "loadingCacheStats": "キャッシュ統計を読み込み中…", + "globalProxy": "グローバルプロキシ", + "globalProxyDesc": "すべての API 呼び出しに対してグローバル送信プロキシを構成します。個々のプロバイダー、コンボ、およびキーはこれをオーバーライドできます。", + "noGlobalProxy": "グローバル プロキシが構成されていません", + "globalLabel": "グローバル", + "configure": "設定する", + "globalSystemPrompt": "グローバル システム プロンプト", + "systemPromptDesc": "プロキシレベルですべてのリクエストに挿入されます", + "saved": "保存されました", + "systemPromptPlaceholder": "すべてのリクエストに挿入するシステム プロンプトを入力してください...", + "systemPromptHint": "このプロンプトは、すべてのリクエストのシステム メッセージの先頭に追加されます。グローバルな指示、安全ガイドライン、または応答のフォーマット規則に使用します。", + "chars": "{count} 文字", + "thinkingBudgetTitle": "予算を考える", + "thinkingBudgetDesc": "すべてのリクエストにわたる AI 推論トークンの使用を制御する", + "passthrough": "パススルー", + "passthroughDesc": "変更なし – クライアントが思考予算をコントロール", + "auto": "自動", + "autoDesc": "すべての思考構成を取り除きます - プロバイダーに決定させます", + "custom": "カスタム", + "customDesc": "すべてのリクエストに対して固定のトークン予算を設定する", + "adaptive": "アダプティブ", + "adaptiveDesc": "リクエストの複雑さに基づいて予算を調整する", + "effortNone": "なし(トークン0個)", + "effortLow": "低 (1,000 トークン)", + "effortMedium": "中 (10,000 トークン)", + "effortHigh": "高 (128,000 トークン)", + "tokenBudget": "トークンの予算", + "tokens": "トークン", + "baseEffortLevel": "基本努力レベル", + "adaptiveHint": "アダプティブ モードは、メッセージ数、ツールの使用状況、プロンプトの長さに基づいて、この基本レベルからスケールします。", + "requireLogin": "ログインが必要", + "requireLoginDesc": "ON の場合、ダッシュボードにはパスワードが必要です。 OFFの場合、ログインせずにアクセスします。", + "currentPassword": "現在のパスワード", + "enterCurrentPassword": "現在のパスワードを入力してください", + "newPassword": "新しいパスワード", + "enterNewPassword": "新しいパスワードを入力してください", + "confirmPassword": "新しいパスワードを確認する", + "confirmPasswordPlaceholder": "新しいパスワードを確認します", + "passwordsNoMatch": "パスワードが一致しません", + "passwordUpdated": "パスワードが正常に更新されました", + "failedUpdatePassword": "パスワードの更新に失敗しました", + "errorOccurred": "エラーが発生しました", + "updatePassword": "パスワードを更新する", + "setPassword": "パスワードを設定する", + "apiEndpointProtection": "APIエンドポイント保護", + "requireAuthModels": "/models の API キーが必要です", + "requireAuthModelsDesc": "ON の場合、/v1/models エンドポイントは、認証されていないリクエストに対して 404 を返します。権限のないユーザーによるモデルの発見を防ぎます。", + "blockedProviders": "ブロックされたプロバイダー", + "blockedProvidersDesc": "/v1/models 応答から特定のプロバイダーを非表示にします。ブロックされたプロバイダーはモデルのリストに表示されません。", + "providersBlocked": "{count} プロバイダーが /models からブロックされました", + "blockProviderTitle": "{provider} をブロックする", + "unblockProviderTitle": "{provider} のブロックを解除する", + "routingStrategy": "ルーティング戦略", + "fillFirst": "最初に入力してください", + "fillFirstDesc": "優先順位に従ってアカウントを使用する", + "roundRobin": "ラウンドロビン", + "roundRobinDesc": "すべてのアカウントを循環する", + "p2c": "P2C", + "p2cDesc": "ランダムに 2 つ選択し、より健康的なものを使用してください", + "random": "ランダム", + "randomDesc": "リクエストごとにランダムなアカウント", + "leastUsed": "最も使用されていない", + "leastUsedDesc": "最も最近使用されていないアカウントを選択する", + "costOpt": "コストオプション", + "costOptDesc": "利用可能な最も安いアカウントを優先する", + "stickyLimit": "スティッキー制限", + "stickyLimitDesc": "切り替える前のアカウントごとの通話数", + "modelAliases": "モデルのエイリアス", + "modelAliasesDesc": "モデル名を再マッピングするワイルドカード パターン • * と ? を使用します。", + "aliasPatternPlaceholder": "クロード・ソネット-*", + "aliasTargetPlaceholder": "クロード・ソネット-4-20250514", + "pattern": "パターン", + "targetModel": "対象機種", + "add": "+追加", + "session": "セッション", + "sessionDetailsAria": "セッション詳細", + "status": "ステータス", + "authenticated": "認証済み", + "guest": "ゲスト", + "loginTime": "ログイン時間", + "sessionAge": "セッションの経過時間", + "browser": "ブラウザ", + "clearLocalData": "ローカルデータのクリア", + "logout": "ログアウト", + "clearLocalDataConfirm": "ローカルデータをすべて消去しますか?これにより設定がリセットされます。", + "unknown": "不明", + "systemActor": "システム", + "ipAccessControl": "IPアクセス制御", + "ipAccessControlDesc": "特定の IP アドレスをブロックまたは許可する", + "ipModeDisabled": "障害者", + "ipModeBlacklist": "ブラックリスト", + "ipModeWhitelist": "ホワイトリスト", + "ipModeWhitelistPriority": "WL優先", + "addIpAddress": "IPアドレスの追加", + "ipAddressPlaceholder": "192.168.1.0/24 または 10.0.*.*", + "block": "+ブロック", + "allow": "+ 許可する", + "blocked": "ブロックされました ({count})", + "allowed": "許可されています ({count})", + "temporaryBans": "一時的な禁止 ({count})", + "minLeft": "残り {min}m", + "auditLog": "監査ログ", + "searchAuditLogs": "監査ログを検索します...", + "failedLoadAuditLog": "監査ログのロードに失敗しました", + "noAuditEvents": "監査イベントが見つかりませんでした", + "action": "アクション", + "actor": "俳優", + "details": "詳細", + "time": "時間", + "fallbackChainsTitle": "フォールバックチェーン", + "fallbackChainsDesc": "モデルごとにプロバイダーのフォールバック順序を定義する", + "addChain": "+ チェーンを追加", + "modelName": "モデル名", + "modelNamePlaceholder": "クロード・ソネット-4-20250514", + "providersCommaSeparated": "プロバイダー (カンマ区切り、優先順位順)", + "providersCommaSeparatedPlaceholder": "人間、オープンナイ、ジェミニ", + "createChain": "チェーンの作成", + "noFallbackChains": "フォールバックチェーンなし", + "noFallbackChainsDesc": "チェーンを作成して、モデルのプロバイダーのフォールバック順序を定義します。", + "loadingFallbackChains": "フォールバック チェーンをロードしています...", + "deleteChainConfirm": "「{model}」のフォールバック チェーンを削除しますか?", + "chainCreated": "{model} 用にチェーンが作成されました", + "chainDeleted": "{model} のチェーンが削除されました", + "failedCreateChain": "チェーンの作成に失敗しました", + "failedDeleteChain": "チェーンの削除に失敗しました", + "deleteChain": "チェーンの削除", + "fillModelAndProviders": "モデル名とプロバイダーを入力してください", + "addAtLeastOneProvider": "少なくとも 1 つのプロバイダーを追加します", + "comboDefaultsTitle": "コンボのデフォルト", + "globalComboConfig": "グローバルコンボ構成", + "defaultStrategy": "デフォルトの戦略", + "defaultStrategyDesc": "明示的な戦略なしで新しいコンボに適用される", + "comboStrategyAria": "コンボ戦略", + "priority": "優先順位", + "weighted": "加重", + "maxRetriesLabel": "最大再試行回数", + "retryDelayLabel": "再試行遅延 (ミリ秒)", + "timeoutLabel": "タイムアウト (ミリ秒)", + "healthCheck": "健康診断", + "healthCheckDesc": "プロバイダーの可用性を事前に確認する", + "trackMetrics": "メトリクスの追跡", + "trackMetricsDesc": "コンボごとのリクエストメトリクスを記録する", + "providerOverrides": "プロバイダーのオーバーライド", + "providerOverridesDesc": "プロバイダーごとにタイムアウトと再試行をオーバーライドします。プロバイダー設定はグローバルデフォルトをオーバーライドします。", + "providerMaxRetriesAria": "{provider} 最大再試行回数", + "providerTimeoutAria": "{provider} タイムアウトミリ秒", + "removeProviderOverrideAria": "{provider} オーバーライドを削除", + "newProviderNamePlaceholder": "例:グーグル、オープンナイ...", + "newProviderNameAria": "新しいプロバイダ名", + "retries": "再試行", + "ms": "ミリ秒", + "saveComboDefaults": "コンボのデフォルトを保存", + "maxNestingDepth": "最大ネスト深さ", + "concurrencyPerModel": "同時実行性 / モデル", + "queueTimeout": "キューのタイムアウト (ミリ秒)", + "providerProfiles": "プロバイダープロファイル", + "providerProfilesDesc": "OAuth (セッションベース) プロバイダーと API キー (従量制) プロバイダーの個別の復元設定。 OAuth プロバイダーには、レート制限が低いため、より厳しいしきい値が設定されています。", + "oauthProviders": "OAuthプロバイダー", + "apiKeyProviders": "APIキープロバイダー", + "transientCooldown": "一時的なクールダウン", + "rateLimitCooldown": "レート制限クールダウン", + "maxBackoffLevel": "最大バックオフ レベル", + "cbThreshold": "CB しきい値", + "cbResetTime": "CBリセット時間", + "rateLimiting": "レート制限", + "rateLimitingDesc": "API キープロバイダーは、安全なデフォルトで自動的にレート制限されます。制限は応答ヘッダーから学習され、時間の経過とともに適応されます。", + "defaultSafetyNet": "デフォルトのセーフティネット", + "rpm": "回転数", + "minGap": "最小ギャップ", + "maxConcurrent": "最大同時実行数", + "activeLimiters": "アクティブリミッター", + "noActiveLimiters": "アクティブなレート リミッタはまだありません。", + "reservoir": "貯水池", + "running": "ランニング", + "queued": "キューに入れられました", + "circuitBreakers": "サーキットブレーカー", + "breakerStateClosed": "閉店", + "breakerStateOpen": "開く", + "breakerStateHalfOpen": "ハーフオープン", + "tripped": "{count} がトリップしました", + "healthy": "{count} は健康です", + "resetAll": "すべてリセット", + "noCircuitBreakers": "まだサーキットブレーカーが作動していません。これらは、リクエストがコンボ パイプラインを通過するときに自動的に作成されます。", + "failures": "{count} 回の失敗", + "policiesLocked": "ポリシーとロックされた識別子", + "allOperational": "すべてのシステムが稼働中 - ロックアウトやブレーカーの低下はありません", + "loadingPolicies": "ポリシーを読み込んでいます...", + "lockedIdentifiers": "ロックされた識別子", + "unlockedIdentifier": "ロック解除済み: {identifier}", + "sinceDate": "{date} 以降", + "forceUnlock": "強制ロック解除", + "unlocking": "ロックを解除中...", + "failedUnlock": "ロック解除に失敗しました", + "failedLoadWithStatus": "ロードに失敗しました: {status}", + "failedLoadResilience": "復元ステータスのロードに失敗しました", + "saveFailed": "保存に失敗しました", + "resetFailed": "リセットに失敗しました", + "loadingResilience": "回復力ステータスを読み込んでいます...", + "retry": "再試行", + "systemStorage": "システムとストレージ", + "allDataLocal": "すべてのデータはマシン上にローカルに保存されます", + "databasePath": "データベースのパス", + "exportDatabase": "データベースのエクスポート", + "exportAll": "すべてエクスポート (.tar.gz)", + "importDatabase": "データベースのインポート", + "confirmDbImport": "データベースのインポートを確認する", + "confirmDbImportDesc": "これにより、現在のデータがすべて {file} のコンテンツに置き換えられます。インポート前にバックアップが自動的に作成されます。", + "yesImport": "はい、インポートします", + "lastBackup": "最後のバックアップ", + "noBackupYet": "まだバックアップがありません", + "backupNow": "今すぐバックアップ", + "backupRestore": "バックアップと復元", + "viewBackups": "バックアップの表示", + "hide": "隠す", + "backupRetentionDesc": "データベースのスナップショットは、復元前とデータ変更時に 15 分ごとに自動的に作成されます。保持: スマート ローテーションによる 24 時間 + 30 日のバックアップ。", + "loadingBackups": "バックアップを読み込んでいます...", + "noBackupsYet": "利用可能なバックアップはまだありません。データが変更されると、バックアップが自動的に作成されます。", + "backupsAvailable": "{count} 個のバックアップが利用可能です", + "refresh": "リフレッシュ", + "confirm": "確認しますか?", + "yes": "はい", + "no": "いいえ", + "restore": "復元", + "invalidFileType": "無効なファイルタイプです。 .sqlite ファイルのみが受け入れられます。", + "exportFailed": "エクスポートに失敗しました", + "exportFailedWithError": "エクスポートに失敗しました: {error}", + "fullExportFailedWithError": "完全なエクスポートに失敗しました: {error}", + "backupCreated": "バックアップが作成されました: {file}", + "restoreSuccess": "復元されました! {connections} 接続、{nodes} ノード、{combos} コンボ、{apiKeys} API キー。", + "importSuccess": "データベースがインポートされました! {connections} 接続、{nodes} ノード、{combos} コンボ、{apiKeys} API キー。", + "justNow": "たった今", + "minutesAgo": "{count}分前", + "hoursAgo": "{count}時間前", + "daysAgo": "{count}日前", + "backupReasonManual": "マニュアル", + "backupReasonPreRestore": "復元前", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "前回のバックアップ以降変更はありません", + "backupFailed": "バックアップに失敗しました", + "restoreFailed": "復元に失敗しました", + "importFailed": "インポートに失敗しました", + "errorDuringRestore": "復元中にエラーが発生しました", + "errorDuringImport": "インポート中にエラーが発生しました", + "modelPricing": "モデルの価格", + "modelPricingDesc": "モデルごとにコストレートを設定します。すべてのレートは $/1M トークン単位です。", + "providers": "プロバイダー", + "registry": "レジストリ", + "priced": "価格付き", + "searchProvidersModels": "プロバイダーまたはモデルを検索...", + "showAll": "すべて表示", + "noProvidersMatch": "検索に一致するプロバイダーはありません。", + "howPricingWorks": "価格設定の仕組み", + "cacheWrite": "キャッシュ書き込み", + "unsaved": "未保存", + "resetDefaults": "デフォルトにリセット", + "saveProvider": "プロバイダーの保存", + "saving": "保存中...", + "model": "モデル", + "models": "モデル", + "moreProviders": "{count} 件のプロバイダーが追加されました", + "withPricing": "価格設定が設定された状態で", + "policiesCircuitBreakers": "ポリシーとサーキットブレーカー", + "activeIssuesDetected": "アクティブな問題が検出されました", + "off": "オフ", + "resetPricingConfirm": "{provider} のすべての価格をデフォルトにリセットしますか?", + "pricingDescInput": "入力: モデルに送信されたトークン", + "pricingDescOutput": "出力: 生成されたトークン", + "pricingDescCached": "キャッシュ: 再利用された入力 (入力レートの最大 50%)", + "pricingDescReasoning": "推論: 思考トークン (出力にフォールバック)", + "pricingDescCacheWrite": "キャッシュ書き込み: キャッシュ エントリの作成 (入力にフォールバック)", + "pricingDescFormula": "コスト = (入力 × 入力レート) + (出力 × 出力レート) + (キャッシュ × キャッシュ レート) 100 万トークンあたり。", + "pricingSettingsTitle": "価格設定", + "totalModels": "トータルモデル", + "active": "アクティブ", + "costCalculation": "コスト計算", + "costCalculationDesc": "コストは、トークンの使用量と各モデルに設定された価格設定レートに基づいて計算されます。", + "pricingFormat": "価格設定形式", + "pricingFormatDesc": "すべてのレートは、$/1M トークン (100 万トークンあたりのドル) 単位です。", + "tokenTypes": "トークンの種類", + "inputTokenDesc": "標準プロンプトトークン", + "outputTokenDesc": "完了/応答トークン", + "cachedTokenDesc": "キャッシュされた入力トークン (通常は入力レートの 50%)", + "reasoningTokenDesc": "特別な推論/思考トークン (出力レートへのフォールバック)", + "cacheCreationTokenDesc": "キャッシュ エントリの作成に使用されるトークン (入力レートへのフォールバック)", + "customPricingNote": "特定のモデルのデフォルトの価格をオーバーライドできます。カスタム オーバーライドは、自動検出された価格設定よりも優先されます。", + "editPricing": "価格の編集", + "viewFullDetails": "詳細を表示" + }, + "translator": { + "title": "翻訳者", + "metaTitle": "翻訳者の遊び場 |オムニルート", + "metaDescription": "プロバイダー間の API 形式の変換をデバッグ、テスト、視覚化する", + "playgroundTitle": "翻訳者の遊び場", + "playground": "遊び場", + "realtime": "リアルタイム翻訳アクティビティ", + "chatTester": "チャットテスター", + "testBench": "テストベンチ", + "liveMonitor": "ライブモニター", + "modeDescriptionPlayground": "任意の API リクエスト本文を貼り付け、OmniRoute がプロバイダー形式間でそれをどのように変換するかを確認します (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "OmniRoute 経由で実際のチャット リクエストを送信し、入力、翻訳されたリクエスト、プロバイダーの応答、翻訳された出力の完全なラウンドトリップを検査します。", + "modeDescriptionTestBench": "事前定義されたシナリオを実行し、プロバイダーやモデル間の互換性を比較します。", + "modeDescriptionLiveMonitor": "リクエストが OmniRoute を通過するときに、翻訳イベントをリアルタイムで監視します。", + "modeDescriptionFallback": "OmniRoute がプロバイダー間で API リクエストを変換する方法をデバッグ、テスト、視覚化します。", + "recentTranslations": "最近の翻訳", + "noTranslations": "まだ翻訳はありません", + "source": "ソース", + "target": "ターゲット", + "time": "時間", + "model": "モデル", + "status": "ステータス", + "latency": "レイテンシー", + "totalTranslations": "総翻訳数", + "successful": "成功しました", + "errors": "エラー", + "avgLatency": "平均遅延時間", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "ライブ — 自動更新", + "paused": "一時停止中", + "eventsAppearHint": "リクエストが OmniRoute を流れると、翻訳イベントがここに表示されます。イベントを生成するには、次のいずれかの方法を使用します。", + "chatTesterTab": "「チャットテスター」タブ", + "testBenchTab": "「テストベンチ」タブ", + "externalApiCalls": "外部 API 呼び出し", + "ideCliIntegrations": "IDE/CLIの統合", + "inMemoryNote": "注: イベントはメモリ内に保存され、サーバーの再起動時にリセットされます。", + "ok": "OK", + "errorShort": "エラー", + "formatConverter": "フォーマットコンバーター", + "formatConverterDescription": "JSON リクエスト本文を貼り付けるか入力します。トランスレータはソース形式を自動検出し、ターゲット形式に変換します。これを使用して、OmniRoute が形式間でリクエストを変換する方法 (OpenAI ↔ Claude ↔ Gemini ↔ Response API) をデバッグします。", + "input": "入力", + "output": "出力", + "auto": "自動", + "swapFormats": "フォーマットを交換する", + "translateAction": "翻訳する", + "clear": "クリア", + "inputPlaceholder": "ここにリクエスト本文を貼り付けるか、下のテンプレートを選択してください...", + "exampleTemplates": "テンプレートの例", + "exampleTemplatesHint": "— クリックしてロード", + "templateLoadHint": "テンプレートはリクエストを {format} 形式でロードします。別の形式でロードするには、ソース形式を変更します。", + "compatibilityTester": "互換性テスター", + "compatibilityReport": "互換性レポート", + "testBenchDescription": "事前定義されたシナリオ (単純なチャット、ツール呼び出しなど) を実行して、翻訳とプロバイダーの互換性を確認します。ソース形式とターゲットプロバイダーを選択し、すべてのテストを実行して互換性の割合を確認します。これを使用して、プロバイダー間で機能する機能を見つけます。", + "targetProvider": "対象プロバイダー", + "runAllTests": "すべてのテストを実行する", + "runTest": "テストの実行", + "reRun": "再実行", + "running": "走っています...", + "passed": "合格しました", + "failed": "失敗しました", + "passedIconLabel": "✅ 合格", + "chunks": "チャンク", + "scenarioSimpleChat": "簡単なチャット", + "scenarioToolCalling": "ツール呼び出し", + "scenarioMultiTurn": "マルチターン", + "scenarioThinking": "考える", + "scenarioSystemPrompt": "システムプロンプト", + "scenarioStreaming": "ストリーミング", + "templateNames": { + "simple-chat": "簡単なチャット", + "tool-calling": "ツール呼び出し", + "multi-turn": "マルチターン", + "thinking": "考える", + "system-prompt": "システムプロンプト", + "streaming": "ストリーミング" + }, + "templateDescriptions": { + "simple-chat": "基本的なテキストメッセージ", + "tool-calling": "関数/ツールの呼び出し", + "multi-turn": "歴史との対話", + "thinking": "拡張された思考/推論", + "system-prompt": "複雑なシステム命令", + "streaming": "SSEストリーミングリクエスト" + }, + "templatePayloads": { + "simpleChat": { + "system": "あなたは役に立つアシスタントです。", + "userGreeting": "こんにちは!今日は元気ですか?" + }, + "toolCalling": { + "userWeather": "サンパウロの天気は?", + "toolDescription": "場所の現在の天気を取得する", + "cityNameDescription": "都市名" + }, + "multiTurn": { + "system": "あなたはコーディングアシスタントです。", + "userInitial": "Python で配列をソートする関数を作成します。", + "assistantExample": "簡単な並べ替え関数を次に示します。\n\n「」パイソン\ndef sort_array(arr):\n ソートされた状態で返す(arr)\n「」", + "userFollowUp": "次に、降順で並べ替えるようにします。" + }, + "thinking": { + "question": "最初の 100 個の素数の合計はいくらですか?" + }, + "systemPrompt": { + "systemInstruction": "あなたは分散システムを専門とするシニア ソフトウェア エンジニアです。業界のベスト プラクティスを使用して質問に簡潔に答えます。関連する場合は、必ずコード例を提供してください。マークダウンを使用して応答をフォーマットします。", + "question": "サーキット ブレーカー パターンを実装するにはどうすればよいですか?" + }, + "streaming": { + "prompt": "ロボットが絵を描くことを学ぶことについての短い物語を教えてください。" + } + }, + "openaiCompatibleLabel": "OpenAI対応", + "anthropicCompatibleLabel": "人間互換性", + "noTemplateForFormat": "この形式のテンプレートはありません", + "translationFailed": "変換に失敗しました: {error}", + "pipelineDebugger": "パイプラインデバッガー", + "translationPipeline": "翻訳パイプライン", + "pipelineVisualization": "パイプラインの可視化", + "pipelineVisualizationHint": "メッセージを送信して、リクエストが検出→変換→プロバイダー呼び出しまでどのように流れるかを確認します。", + "chatTesterDescription": "メッセージを特定のクライアント形式で送信し、翻訳パイプラインの各ステップを検査します。", + "chatTesterFlow": "クライアントリクエスト → フォーマット検出 → OpenAI中間 → プロバイダフォーマット → 応答", + "clickStepToInspect": "任意のステップをクリックして、その段階のデータを検査します。", + "clientFormat": "クライアント形式", + "provider": "プロバイダー", + "modelPlaceholder": "モデル名を選択または入力します...", + "sendMessageToSeePipeline": "メッセージを送信して翻訳パイプラインを確認してください", + "chatMessageHintPrefix": "メッセージの形式は次のようになります。", + "chatMessageHintSuffix": "リクエストがパイプラインを通じて変換され、選択されたプロバイダーに送信されます。", + "youWithFormat": "あなた ({format})", + "assistant": "アシスタント", + "typeMessage": "メッセージを入力してください...", + "send": "送信", + "clientRequest": "クライアントリクエスト", + "clientRequestDescription": "クライアントが送信するリクエスト本文", + "formatDetected": "フォーマットが検出されました", + "formatDetectedDescription": "OmniRoute はリクエスト構造から API 形式を自動検出します", + "openaiIntermediate": "OpenAI中級者", + "openaiIntermediateDescription": "すべての形式は最初に OpenAI 形式 (ユニバーサル ブリッジ) に正規化されます。", + "providerFormat": "プロバイダー形式", + "providerFormatDescription": "OpenAI 形式はプロバイダーのネイティブ形式に変換されます", + "providerResponse": "プロバイダーの応答", + "providerResponseRawDescription": "プロバイダー API からの生の応答", + "providerResponseSseDescription": "プロバイダー API からの生の SSE ストリーム", + "unexpectedError": "予期しないエラーが発生しました", + "error": "エラー", + "errorMessage": "エラー: {message}", + "requestFailed": "リクエストが失敗しました", + "noTextExtracted": "(テキストは抽出されません)", + "liveMonitorDescriptionPrefix": "API 呼び出しが OmniRoute を通過する際の翻訳イベントを表示します。イベントはメモリ内バッファから取得されます (再起動時にリセットされます)。使用する", + "liveMonitorDescriptionSuffix": "、またはイベントを生成するための外部 API 呼び出し。" + }, + "usage": { + "title": "使用法", + "loggerTab": "ロガー", + "proxyTab": "プロキシ", + "budgetManagement": "予算管理", + "budgetSaved": "予算制限が保存されました", + "budgetSaveFailed": "予算を節約できませんでした", + "loadingBudgetData": "予算データをロードしています...", + "noApiKeysTitle": "APIキーがありません", + "noApiKeysDescription": "最初に API キーを追加して、予算制限を設定します。", + "apiKey": "APIキー", + "todaysSpend": "今日の支出", + "thisMonth": "今月", + "setLimits": "制限を設定する", + "dailyLimitUsd": "1 日あたりの限度額 (USD)", + "monthlyLimitUsd": "月間限度額 (USD)", + "warningThresholdPercent": "警告しきい値 (%)", + "dailyLimitPlaceholder": "例: 5.00", + "monthlyLimitPlaceholder": "例: 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "保存制限", + "budgetOk": "予算は OK — 残り {remaining}", + "budgetExceeded": "予算を超えています - リクエストはブロックされる可能性があります", + "totalRequests": "リクエストの合計", + "noDataYet": "まだデータがありません", + "latency": "レイテンシー", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "プロンプトキャッシュ", + "systemHealth": "システムの健全性", + "entries": "エントリー", + "activeCount": "{count} がアクティブです", + "openCircuitBreakersDetected": "断線ブレーカーが検出されました", + "hitRate": "命中率", + "hitsMisses": "ヒット/ミス", + "circuitBreakers": "サーキットブレーカー", + "lockedIPs": "ロックされたIP", + "lockoutsAutoRefreshHint": "モデルごとのレート制限ロック • 自動リフレッシュ 10 秒", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} 残り", + "howItWorks": "仕組み", + "howItWorksSubtitle": "評価によって LLM 応答がどのように検証されるかを学びます", + "define": "定義する", + "defineStepDescription": "含む、正規表現、完全一致などの戦略を使用して、入力プロンプトと予想される出力基準を含むテスト ケースを作成します。", + "run": "走る", + "runStepDescription": "OmniRoute を通じて LLM エンドポイントに対してテスト ケースを実行します。各ケースは実際の API リクエストとして送信されます。", + "evaluate": "評価する", + "evaluateStepDescription": "応答は予想される基準と比較されます。遅延メトリクスと詳細なフィードバックを使用して、各ケースの合否を確認します。", + "evalSuites": "評価スイート", + "evalSuitesHint": "スイートをクリックしてテスト ケースを表示し、実行して LLM エンドポイントを評価します", + "evalsLoading": "評価スイートを読み込み中...", + "noEvalSuitesFound": "Eval スイートが見つかりません", + "noEvalSuitesDescription": "評価スイートは、API またはコードで定義できます。これらは、contains、regex、完全一致、カスタム関数などの戦略を使用して、予想される結果に対してモデルの出力をテストします。", + "columnCase": "ケース", + "columnStatus": "ステータス", + "columnLatency": "レイテンシー", + "columnDetails": "詳細", + "columnModel": "モデル", + "columnStrategy": "戦略", + "columnExpected": "期待される", + "statsSuites": "スイート", + "statsTestCases": "テストケース", + "statsModels": "モデル", + "statsCoverage": "適用範囲", + "statsStrategiesCount": "{count} 戦略", + "evaluationStrategies": "評価戦略", + "modelsUnderTest": "テスト対象のモデル", + "searchSuitesPlaceholder": "スイートを検索...", + "passSuffix": "パスする", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "評価の実行", + "runningProgress": "{current}/{total} を実行中...", + "passRate": "合格率", + "summaryBreakdown": "{passed} 成功 · {failed} 失敗 · {total} 合計", + "passedIconLabel": "✅ 合格", + "failedIconLabel": "❌ 失敗しました", + "detailsContains": "内容: 「{term}」", + "detailsRegex": "正規表現: {pattern}", + "detailsExpected": "予期される内容: 「{expected}」", + "noResultsYet": "まだ結果はありません", + "testCasesCount": "テストケース ({count})", + "noTestCasesDefined": "テストケースが定義されていません", + "runEvalHint": "[Run Eval] をクリックして、LLM エンドポイントに対してすべてのケースを実行します。各テストは、OmniRoute を通じて実際のリクエストを送信します。", + "notifyNoTestCases": "このスイートにはテスト ケースが定義されていません", + "notifyAllCasesPassed": "すべての {total} 件のケースが合格しました ✅", + "notifySomeCasesFailed": "{passed}/{total} は成功、{failed} は失敗", + "notifyEvalRunFailed": "評価の実行に失敗しました", + "notifyEvalTitle": "評価: {name}", + "modelEvals": "モデルの評価", + "evalsHeroDescription": "事前定義された評価スイートを実行して、LLM エンドポイントをテストおよび検証します。各スイートには、OmniRoute を通じて実際のプロンプトを送信し、予想される基準と応答を比較するテスト ケースが含まれており、回帰の検出、モデルの比較、プロバイダー全体での応答品質の確保に役立ちます。", + "qualityValidation": "品質検証", + "modelComparison": "モデルの比較", + "regressionDetection": "回帰の検出", + "latencyBenchmarks": "レイテンシのベンチマーク", + "modelLockouts": "モデルのロックアウト", + "noLockouts": "現在ロックされているモデルはありません", + "activeSessions": "アクティブなセッション", + "noSessions": "アクティブなセッションはありません", + "sessionsHint": "リクエストがプロキシを通過するとセッションが表示されます", + "sessionsTrackedHint": "リクエストのフィンガープリンティングによって追跡 • 自動リフレッシュ 5 秒", + "session": "セッション", + "age": "年齢", + "requests": "リクエスト", + "connection": "接続", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "プロバイダーの制限", + "noProviders": "プロバイダーが接続されていません", + "connectProvidersForQuota": "OAuth を使用してプロバイダーに接続し、API クォータの制限と使用状況を追跡します。", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "({count} からフィルタリング)", + "autoRefresh": "自動更新", + "refreshAll": "すべて更新", + "loadingQuotas": "読み込み中...", + "account": "アカウント", + "modelQuotas": "モデルのクォータ", + "lastUsed": "最後に使用したもの", + "actions": "アクション", + "refreshQuota": "クォータの更新", + "today": "今日", + "tomorrow": "明日", + "dayTimeFormat": "{day}、{time}", + "inDuration": "{duration} 内", + "notApplicable": "該当なし", + "rawPlanWithValue": "未加工のプラン: {plan}", + "noPlanFromProvider": "プロバイダーからのプランなし", + "noQuotaData": "クォータ データがありません", + "noQuotaDataAvailable": "利用可能なクォータ データがありません", + "noAccountsForTierFilter": "層フィルターのアカウントが見つかりませんでした", + "tierAll": "すべて", + "tierEnterprise": "エンタープライズ", + "tierTeam": "チーム", + "tierBusiness": "ビジネス", + "tierUltra": "ウルトラ", + "tierPro": "プロ", + "tierPlus": "プラス", + "tierFree": "無料", + "tierUnknown": "不明" + }, + "modals": { + "waitingAuth": "承認を待っています", + "verificationUrl": "認証URL", + "yourCode": "あなたのコード", + "remoteAccess": "リモートアクセス:", + "connectedSuccess": "正常に接続されました!", + "connectionFailed": "接続に失敗しました", + "chooseAuthMethod": "認証方法を選択してください:", + "awsBuilderId": "AWS ビルダー ID", + "awsIamIdentity": "AWS IAM ID センター", + "googleAccount": "Googleアカウント", + "githubAccount": "GitHub アカウント", + "importToken": "トークンのインポート", + "pasteToken": "Kiro IDE からリフレッシュ トークンを貼り付けます。", + "awsRegion": "AWS リージョン", + "autoDetecting": "トークンを自動検出しています...", + "readingFromCache": "AWS SSO キャッシュからの読み取り", + "readingFromCursor": "Cursor IDE データベースからの読み取り", + "initializing": "初期化中...", + "pricingConfig": "価格設定", + "loadingPricing": "価格データをロードしています...", + "pricingRatesFormat": "価格設定レートの形式", + "noPricingData": "利用可能な価格データはありません", + "noModelsFound": "モデルが見つかりません" + }, + "loggers": { + "allProviders": "すべてのプロバイダー", + "allModels": "全モデル", + "allAccounts": "すべてのアカウント", + "allApiKeys": "すべての API キー", + "allTypes": "全種類", + "allLevels": "すべてのレベル", + "modelAZ": "モデルA~Z", + "modelZA": "Z-A型", + "loadingLogs": "ログを読み込んでいます...", + "loadingProxyLogs": "プロキシ ログを読み込んでいます...", + "noLogEntries": "ログエントリが見つかりませんでした", + "noPayloadData": "このログ エントリに使用できるペイロード データはありません。", + "proxyEvent": "プロキシイベント", + "proxy": "プロキシ", + "level": "レベル", + "directNative": "ダイレクト(ネイティブ)", + "combo": "コンボ", + "inputTokens": "私:", + "outputTokens": "お:" + }, + "stats": { + "usageOverview": "使用方法の概要", + "outputTokens": "出力トークン", + "totalCost": "総コスト", + "usageByModel": "モデル別の使用状況", + "usageByAccount": "アカウント別の使用状況", + "failedToLoad": "使用状況統計のロードに失敗しました。", + "tokenHealth": "トークンの健全性", + "totalOAuth": "合計 OAuth", + "healthy": "健康", + "warning": "警告", + "errored": "エラーが発生しました", + "lastCheck": "最終チェック", + "noData": "データなし", + "share": "シェアする", + "unableToLoad": "システムメトリクスをロードできません", + "product": "製品", + "resources": "リソース", + "company": "会社名" + }, + "auth": { + "welcome": "ようこそ", + "signIn": "サインイン", + "enterPassword": "続行するにはパスワードを入力してください", + "password": "パスワード", + "unifiedProxy": "統合 AI API プロキシ", + "unifiedAiApiProxy": "統合 AI API プロキシ", + "unifiedAiApiProxyDesc": "単一のエンドポイントを通じて複数の AI プロバイダーにリクエストをルーティングします。負荷分散、フェイルオーバー、使用状況追跡が組み込まれています。", + "passwordNotEnabled": "パスワード保護が有効になっていません", + "loading": "読み込み中...", + "invalidPassword": "無効なパスワード", + "errorOccurredRetry": "エラーが発生しました。もう一度試してください。", + "configureInstance": "OmniRoute インスタンスを構成しましょう", + "runOnboardingWizard": "オンボーディングウィザードを実行して、パスワード設定と最初の AI プロバイダー接続を行います。", + "startOnboarding": "オンボーディングを開始する", + "secureYourInstance": "インスタンスを保護する", + "setPasswordDescription": "パスワードを設定してダッシュボードを保護し、API エンドポイントを不正アクセスから保護します。", + "configurePassword": "パスワードの設定", + "continue": "続ける", + "windowWillClose": "このウィンドウは自動的に閉じます...", + "closeTabNow": "このタブは今閉じても大丈夫です。", + "copyUrlManual": "アドレスバーの URL をコピーしてアプリケーションに貼り付けてください。", + "accessDeniedDescription": "このリソースにアクセスする権限がありません。 API キーを確認するか、管理者に問い合わせてください。", + "goToDashboard": "ダッシュボードに移動", + "featureMultiProviderTitle": "マルチプロバイダー", + "featureMultiProviderDesc": "OpenAI、Anthropic、Google など", + "featureLoadBalancingTitle": "ロードバランシング", + "featureLoadBalancingDesc": "リクエストをインテリジェントに分散する", + "featureUsageTrackingTitle": "使用状況の追跡", + "featureUsageTrackingDesc": "コストとトークンを監視する", + "resetPassword": "パスワードのリセット", + "resetDescription": "ダッシュボードへのアクセスを回復する方法を選択してください", + "stopServer": "OmniRoute サーバーを停止", + "processing": "処理中...", + "pleaseWait": "認証が完了するまでお待ちください。", + "authSuccess": "認証に成功しました!", + "copyUrl": "この URL をコピーする", + "accessDenied": "アクセスが拒否されました", + "methodCliTitle": "方法 1: CLI のリセット", + "methodCliDescription": "OmniRoute が実行されているサーバーで次のコマンドを実行します。", + "methodCliHint": "新しいパスワードを設定するよう求められます。最初にサーバーを停止する必要があります。", + "methodManualTitle": "方法 2: 手動リセット", + "methodManualDescription": "データベースからパスワードを削除し、起動時に新しいパスワードを設定します:", + "setPasswordInYour": "次のファイルで新しいパスワードを設定してください", + "fileLabelSuffix": "ファイル:", + "newPasswordPlaceholder": "あなたの新しいパスワード", + "deleteSettingsFile": "削除", + "orRemovePasswordHashField": "または、passwordHash フィールドを削除します", + "restartServerWithNewPassword": "サーバーを再起動すると新しいパスワードが適用されます", + "backToLogin": "ログインに戻る", + "forgotPassword": "パスワードをお忘れですか?" + }, + "landing": { + "brandName": "オムニルート", + "navigateHome": "ホームに移動する", + "toggleMenu": "メニューの切り替え", + "featuresLink": "特長", + "docsLink": "ドキュメント", + "github": "GitHub", + "versionLive": "v1.0 が公開されました", + "oneEndpoint": "1 つのエンドポイント", + "allProviders": "すべての AI プロバイダー", + "heroDescription": "Web ダッシュボードを備えた AI エンドポイント プロキシ - CLIProxyAPI の JavaScript ポート。 Claude Code、OpenAI Codex、Cline、RooCode、その他の CLI ツールとシームレスに連携します。", + "getStarted": "始めましょう", + "viewOnGithub": "GitHub で見る", + "powerfulFeatures": "強力な機能", + "featuresSubtitle": "AI インフラストラクチャを管理するために必要なものすべてが 1 か所で構築され、規模に応じて構築されます。", + "featureUnifiedEndpointTitle": "統合エンドポイント", + "featureUnifiedEndpointDesc": "単一の標準 API URL を介してすべてのプロバイダーにアクセスします。", + "featureEasySetupTitle": "簡単セットアップ", + "featureEasySetupDesc": "npx コマンドを使用すると、数分で起動して実行できます。", + "featureModelFallbackTitle": "モデルのフォールバック", + "featureModelFallbackDesc": "障害が発生したり待ち時間が長くなったりすると、プロバイダーを自動的に切り替えます。", + "featureUsageTrackingTitle": "使用状況の追跡", + "featureUsageTrackingDesc": "すべてのモデルにわたる詳細な分析とコストの監視。", + "featureOAuthApiKeysTitle": "OAuth と API キー", + "featureOAuthApiKeysDesc": "認証情報を 1 つのコンテナーで安全に管理します。", + "featureCloudSyncTitle": "クラウド同期", + "featureCloudSyncDesc": "デバイス間で構成を即座に同期します。", + "featureCliSupportTitle": "CLI のサポート", + "featureCliSupportDesc": "クロード コード、コーデックス、クライン、カーソルなどで動作します。", + "featureDashboardTitle": "ダッシュボード", + "featureDashboardDesc": "リアルタイムのトラフィック分析のためのビジュアル ダッシュボード。", + "howItWorks": "オムニルートの仕組み", + "howItWorksDescription": "データはアプリケーションからインテリジェントなルーティング層を介して、ジョブに最適なプロバイダーにシームレスに流れます。", + "howItWorksStep1Title": "1. CLI と SDK", + "howItWorksStep1Description": "リクエストはお気に入りのツールまたは統合 SDK から始まります。ベースURLを変更するだけです。", + "howItWorksStep2Title": "2. オムニルートハブ", + "howItWorksStep2Description": "私たちのエンジンはプロンプトを分析し、プロバイダーの状態をチェックし、遅延やコストが最小になるようにルートを設定します。", + "howItWorksStep3Title": "3. AIプロバイダー", + "howItWorksStep3Description": "リクエストは、OpenAI、Anthropic、Gemini などによって即座に実行されます。", + "getStartedIn30Seconds": "30 秒で始めましょう", + "getStartedDescription": "OmniRoute をインストールし、Web ダッシュボードでプロバイダーを構成し、AI リクエストのルーティングを開始します。", + "installOmniRoute": "オムニルートをインストールする", + "installStepDescription": "npxコマンドを実行してサーバーを即座に起動します", + "openDashboard": "ダッシュボードを開く", + "openDashboardStepDescription": "Webインターフェース経由でプロバイダーとAPIキーを設定する", + "routeRequests": "ルートリクエスト", + "routeRequestsStepDescription": "CLI ツールを {endpoint} に指定します。", + "terminal": "端子", + "copy": "コピー", + "copied": "✓ コピーされました", + "startingOmniRoute": "オムニルートを開始しています...", + "serverRunningOnLabel": "で実行されているサーバー", + "dashboardLabel": "ダッシュボード", + "readyToRoute": "ルートの準備ができました! ✓", + "configureProvidersNote": "📝 ダッシュボードでプロバイダーを構成するか、環境変数を使用する", + "dataLocation": "データの場所:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "製品", + "dashboardLink": "ダッシュボード", + "changelog": "変更履歴", + "resources": "リソース", + "documentation": "ドキュメント", + "npm": "故宮", + "legal": "法的", + "mitLicense": "MITライセンス", + "footerTagline": "AI 生成のための統合エンドポイント。 AI プロバイダーを簡単に接続、ルーティング、管理します。", + "copyright": "© {year} オムニルート。無断転載を禁じます。", + "flowToolClaudeCode": "クロード・コード", + "flowToolOpenAICodex": "OpenAI コーデックス", + "flowToolCline": "クライン", + "flowToolCursor": "カーソル", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "人間的", + "flowProviderGemini": "ジェミニ", + "flowProviderGithubCopilot": "GitHub コパイロット", + "interactiveDiagram": "デスクトップ上に表示されるインタラクティブな図", + "ctaTitle": "AI インフラストラクチャを簡素化する準備はできていますか?", + "ctaDescription": "OmniRoute との AI 統合を効率化している開発者に加わりましょう。オープンソースで無料で始められます。", + "startFree": "無料で始める", + "readDocumentation": "ドキュメントを読む" + }, + "docs": { + "title": "ドキュメント", + "quickStart": "クイックスタート", + "features": "特長", + "supportedProviders": "サポートされているプロバイダー", + "supportedProvidersToc": "プロバイダー", + "commonUseCases": "一般的な使用例", + "clientCompatibility": "クライアントの互換性", + "apiReference": "APIリファレンス", + "method": "方法", + "path": "パス", + "notes": "注意事項", + "modelPrefixes": "モデルプレフィックス", + "prefix": "プレフィックス", + "troubleshooting": "トラブルシューティング", + "supportsChat": "チャットと応答の両方のエンドポイントをサポートします。", + "oauthAutoRefresh": "自動トークン更新を使用した OAuth 接続。", + "fullStreaming": "すべてのモデルでストリーミングを完全にサポート。", + "docsLabel": "ドキュメント", + "docsHeroDescription": "マルチプロバイダー LLM 用の AI ゲートウェイ。 OpenAI、Anthropic、Gemini、GitHub Copilot、Claude Code、Cursor、および 20 以上のプロバイダーに対応する 1 つのエンドポイント。", + "openDashboard": "ダッシュボードを開く", + "endpointPage": "エンドポイントページ", + "github": "GitHub", + "reportIssue": "レポートの問題", + "onThisPage": "このページでは", + "documentationVersion": "ドキュメント - v{version}", + "quickStartStep1Title": "1. インストールして実行する", + "quickStartStep1Prefix": "走る", + "quickStartStep1Middle": "または GitHub からクローンを作成して実行します", + "quickStartStep2Title": "2. APIキーの作成", + "quickStartStep2Text": "[エンドポイント] -> [登録済みキー] に移動します。環境ごとに 1 つのキーを生成します。", + "quickStartStep3Title": "3. プロバイダーに接続する", + "quickStartStep3Text": "OAuth ログイン、API キー、または無料枠の自動接続を介してプロバイダー アカウントを追加します。", + "quickStartStep4Title": "4. クライアントベースURLの設定", + "quickStartStep4Prefix": "IDE または API クライアントを次のように指定します。", + "quickStartStep4Suffix": "たとえば、プロバイダーのプレフィックスを使用します。", + "featureRoutingTitle": "マルチプロバイダールーティング", + "featureRoutingText": "単一の OpenAI 互換エンドポイントを通じて 30 以上の AI プロバイダーにリクエストをルーティングします。チャット、応答、音声、画像 API をサポートします。", + "featureCombosTitle": "コンボとバランス調整", + "featureCombosText": "フォールバック チェーンとバランス戦略 (ラウンドロビン、優先順位、ランダム、使用量が最も少ない戦略、コスト最適化) を使用してモデル コンボを作成します。", + "featureUsageTitle": "使用量とコストの追跡", + "featureUsageText": "リアルタイムのトークンカウント、プロバイダー/モデルごとのコスト計算、API キーとアカウントごとの詳細な使用量の内訳。", + "featureAnalyticsTitle": "分析ダッシュボード", + "featureAnalyticsText": "リクエスト、トークン、エラー、レイテンシ、コスト、およびモデルの人気を時系列でグラフ化した視覚的な分析。", + "featureHealthTitle": "ヘルスモニタリング", + "featureHealthText": "ライブヘルスチェック、プロバイダーのステータス、サーキットブレーカーの状態、および指数バックオフによる自動レート制限検出。", + "featureCliTitle": "CLIツール", + "featureCliText": "IDE 構成の管理、バックアップのエクスポート/インポート、コーデックス プロファイルの検出、ダッシュボードからの設定の構成を行います。", + "featureSecurityTitle": "セキュリティとポリシー", + "featureSecurityText": "API キー認証、IP フィルタリング、プロンプト インジェクション ガード、ドメイン ポリシー、セッション管理、監査ログ。", + "featureCloudSyncTitle": "クラウド同期", + "featureCloudSyncText": "構成をCloudflare Workersに同期して、暗号化された認証情報と自動フェイルオーバーによるリモートアクセスを実現します。", + "providersAcrossConnectionTypes": "{count} プロバイダーは 3 つの接続タイプにまたがります。", + "manageProviders": "プロバイダーの管理", + "providersCount": "{count} プロバイダー", + "providerTypeFree": "無料利用枠", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "APIキー", + "useCaseSingleEndpointTitle": "多くのプロバイダーに対応する単一のエンドポイント", + "useCaseSingleEndpointText": "クライアントに 1 つのベース URL を指定し、モデル プレフィックス (例: gh/、cc/、kr/、openai/) によってルーティングします。", + "useCaseFallbackTitle": "コンボによるフォールバックとモデル切り替え", + "useCaseFallbackText": "ダッシュボードでコンボ モデルを作成し、プロバイダーが内部でローテーションする間、クライアント構成を安定に保ちます。", + "useCaseUsageVisibilityTitle": "使用量、コスト、デバッグの可視性", + "useCaseUsageVisibilityText": "[使用状況] タブと [分析] タブで、プロバイダー、アカウント、API キーごとにトークンとコストを追跡します。", + "clientCherryStudioTitle": "チェリースタジオ", + "baseUrlLabel": "ベースURL", + "chatEndpointLabel": "チャットエンドポイント", + "modelRecommendationLabel": "モデルの推奨事項: 明示的なプレフィックス", + "clientCodexTitle": "Codex / GitHub コパイロット モデル", + "clientCodexBullet1": "モデル ID を使用する", + "clientCodexBullet2": "Codex ファミリ モデルの自動ルーティング先", + "clientCodexBullet3": "非コーデックスモデルも継続", + "clientCursorTitle": "カーソルIDE", + "clientCursorBullet1": "使用する", + "clientCursorBullet1Suffix": "カーソルモデルのプレフィックス。", + "clientCursorBullet2": "OAuth 接続 - プロバイダー ページからログインします。", + "clientClaudeTitle": "クロード・コード / 反重力", + "clientClaudeBullet1Prefix": "使用する", + "clientClaudeBullet1Middle": "(クロード)または", + "clientClaudeBullet1Suffix": "(反重力) 接頭辞。", + "endpointChatNote": "OpenAI 互換のチャット エンドポイント (デフォルト)。", + "endpointResponsesNote": "応答 API エンドポイント (Codex、o シリーズ)。", + "endpointModelsNote": "接続されているすべてのプロバイダーのモデル カタログ。", + "endpointAudioNote": "音声転写 (Deepgram、AssemblyAI)。", + "endpointImagesNote": "画像生成(NanoBanana)。", + "endpointRewriteChatNote": "/v1 のないクライアント用のヘルパーを書き換えます。", + "endpointRewriteResponsesNote": "/v1 のない応答のヘルパーを書き換えます。", + "endpointRewriteModelsNote": "/v1 を使用せずにモデル検出用のヘルパーを書き換えます。", + "modelPrefixesDescriptionStart": "特定のプロバイダーにルーティングするには、モデル名の前にプロバイダーのプレフィックスを使用します。例:", + "modelPrefixesDescriptionEnd": "GitHub Copilot にルートします。", + "provider": "プロバイダー", + "type": "種類", + "troubleshootingModelRouting": "クライアントがモデル ルーティングに失敗した場合は、明示的なプロバイダー/モデル (例: gh/gpt-5.1-codex) を使用します。", + "troubleshootingAmbiguousModels": "あいまいなモデル エラーを受け取った場合は、裸のモデル ID の代わりにプロバイダー プレフィックスを選択してください。", + "troubleshootingCodexFamily": "GitHub Codex ファミリ モデルの場合、モデルを gh/ として保持します。ルーターは自動的に選択/応答します。", + "troubleshootingTestConnection": "IDE または外部クライアントからテストする前に、[ダッシュボード] > [プロバイダー] > [接続のテスト] を使用します。", + "troubleshootingCircuitBreaker": "プロバイダーがサーキット ブレーカーが開いていることを示している場合は、クールダウンするまで待つか、詳細について [ヘルス] ページを確認してください。", + "troubleshootingOAuth": "OAuth プロバイダーの場合、トークンの有効期限が切れた場合は再認証します。プロバイダー カードのステータス インジケーターを確認します。" + }, + "legal": { + "privacyPolicy": "プライバシーポリシー", + "termsOfService": "利用規約", + "providerConfigurations": "プロバイダーの構成", + "apiKeys": "APIキー", + "usageLogs": "使用ログ", + "applicationSettings": "アプリケーション設定", + "viewExportAnalytics": "使用状況分析の表示とエクスポート", + "clearHistory": "利用履歴はいつでもクリア", + "configureRetention": "ログ保持ポリシーを構成する", + "backupRestore": "データベースのバックアップと復元", + "privacyMetadataTitle": "プライバシーポリシー |オムニルート", + "privacyMetadataDescription": "OmniRoute AI API プロキシ ルーターのプライバシー ポリシー。", + "termsMetadataTitle": "利用規約 |オムニルート", + "termsMetadataDescription": "OmniRoute AI API プロキシ ルーターの利用規約。", + "backToHome": "家に戻る", + "lastUpdated": "最終更新日: {date}", + "policyLastUpdatedDate": "2026 年 2 月 13 日", + "listSeparator": "-", + "questionsVisit": "質問がありますか?訪問してください", + "githubRepository": "GitHub リポジトリ", + "privacySection1Title": "1. ローカルファーストのアーキテクチャ", + "privacySection1Text": "OmniRoute はローカルファーストのアプリケーションとして設計されています。すべてのデータの処理と保存は完全にマシン上で行われます。あなたの情報を収集する集中サーバーはありません。", + "privacySection2Title": "2. 当社が保管するデータ", + "privacyDataStoredIn": "次のデータはローカルに保存されます。", + "privacyDataProviderConfigurationsDesc": "接続 URL、プロバイダーの種類、および優先度の設定", + "privacyDataApiKeysDesc": "AI プロバイダーによる認証のために暗号化され、ローカルに保存されます", + "privacyDataUsageLogsDesc": "リクエスト数、トークン使用量、モデル名、タイムスタンプ、応答時間", + "privacyDataApplicationSettingsDesc": "テーマの設定、ルーティング戦略、およびコンボ構成", + "privacySection3Title": "3. テレメトリなし", + "privacySection3Text": "OmniRoute は、テレメトリ、分析、またはクラッシュ レポートを収集しません。データが当社または第三者に送信されることはありません。使用パターン、API 呼び出し、構成は完全に非公開のままです。", + "privacySection4Title": "4. サードパーティの AI プロバイダー", + "privacySection4Text": "OmniRoute 経由で API 呼び出しを行うと、リクエストは構成した AI プロバイダー (例: OpenAI、Anthropic、Google) に転送されます。これらのプロバイダーには、データの取り扱い方法を規定する独自のプライバシー ポリシーがあります。確認してください:", + "privacyOpenAiPolicy": "OpenAI プライバシー ポリシー", + "privacyAnthropicPolicy": "人類のプライバシーポリシー", + "privacyGooglePolicy": "Google プライバシー ポリシー", + "privacySection5Title": "5. クラウド同期 (オプション)", + "privacySection5Text": "オプションのクラウド同期機能を有効にすると、プロバイダー設定と API キーが、設定されたクラウド エンドポイントに送信される場合があります。この機能はデフォルトでは無効になっており、明示的なオプトインが必要です。", + "privacySection6Title": "6. ロギング", + "privacyLoggingIntro": "リクエスト ログは、ダッシュボード設定を通じて構成できます。次のことができます。", + "privacySection7Title": "7. お客様の権利", + "privacySection7TextStart": "すべてのデータはローカルに保存されるため、完全に制御できます。データはいつでも削除できます。", + "privacySection7TextEnd": "ディレクトリを使用するか、ダッシュボードのデータベースのバックアップおよび復元機能を使用します。", + "termsSection1Title": "1. 概要", + "termsSection1Text": "OmniRoute は、完全にマシン上で動作するローカルファーストの AI API プロキシ ルーターです。負荷分散、フェイルオーバー、使用状況追跡を使用して、リクエストを複数の AI プロバイダーにルーティングします。", + "termsSection2Title": "2. ユーザーの責任", + "termsResponsibilityApiKeys": "独自の API キーとサードパーティ AI プロバイダー (OpenAI、Anthropic、Google など) の認証情報の管理はお客様が単独で責任を負います。", + "termsResponsibilityCompliance": "OmniRoute を通じて API にアクセスする各 AI プロバイダーのサービス規約に従う必要があります。", + "termsResponsibilitySecurity": "パスワードの設定やネットワーク アクセスの制限など、ローカルの OmniRoute インストールのセキュリティについてはお客様の責任となります。", + "termsSection3Title": "3. 仕組み", + "termsSection3Text": "OmniRoute は中間プロキシとして機能します。 OmniRoute に送信された API 呼び出しは変換され、構成された AI プロバイダーに転送されます。 OmniRoute は、必要なプロトコル変換を超えてリクエストや応答の内容を変更しません。", + "termsSection4Title": "4. データの取り扱い", + "termsDataStoredLocally": "すべてのデータは、ローカルのマシン上の SQLite データベースに保存されます。", + "termsNoTransmission": "OmniRoute は、クラウド同期機能を明示的に有効にしない限り、外部サーバーにデータを送信しません。", + "termsDataLocationText": "使用ログ、API キー、設定は次の場所に保存されます。", + "termsSection5Title": "5. 免責事項", + "termsSection5Text": "OmniRoute は、いかなる種類の保証もなく「現状のまま」提供されます。 API の使用、サービスの中断、またはデータの損失によって発生する費用については、当社は責任を負いません。構成のバックアップを常に維持してください。", + "termsSection6Title": "6. オープンソース", + "termsSection6Text": "OmniRoute はオープンソース ソフトウェアです。ライセンス条項に基づいて、自由に検査、変更、配布することができます。" + } +} diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json new file mode 100644 index 0000000000..7834e22d61 --- /dev/null +++ b/src/i18n/messages/ko.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "저장", + "cancel": "취소", + "delete": "삭제", + "loading": "로드 중...", + "error": "오류가 발생했습니다", + "success": "성공", + "confirm": "확실합니까?", + "refresh": "새로고침", + "close": "닫기", + "add": "추가", + "edit": "편집", + "search": "검색", + "back": "뒤로", + "next": "다음", + "submit": "제출", + "reset": "재설정", + "copy": "복사", + "copied": "복사되었습니다!", + "enabled": "활성화됨", + "disabled": "장애인", + "active": "활성", + "inactive": "비활성", + "noData": "사용 가능한 데이터가 없습니다.", + "configure": "구성", + "manage": "관리하다", + "name": "이름", + "actions": "작업", + "status": "상태", + "type": "유형", + "model": "모델", + "models": "모델", + "provider": "공급자", + "account": "계정", + "time": "시간", + "details": "세부정보", + "created": "생성됨", + "lastUsed": "마지막으로 사용됨", + "loadMore": "더 로드하기", + "noResults": "검색결과가 없습니다", + "reloadPage": "페이지 새로고침", + "connected": "연결됨", + "disconnected": "연결이 끊김", + "notConfigured": "구성되지 않음", + "testConnection": "연결 테스트", + "enable": "활성화", + "disable": "비활성화", + "columns": "열", + "newest": "최신", + "oldest": "가장 오래된", + "all": "모두", + "none": "없음", + "yes": "예", + "no": "아니요", + "warning": "경고", + "note": "참고", + "free": "무료", + "skipToContent": "콘텐츠로 건너뛰기" + }, + "sidebar": { + "home": "홈", + "dashboard": "대시보드", + "providers": "공급자", + "combos": "콤보", + "usage": "사용법", + "analytics": "분석", + "costs": "비용", + "health": "건강", + "limits": "한도 및 할당량", + "cliTools": "CLI 도구", + "settings": "설정", + "translator": "번역기", + "docs": "문서", + "issues": "문제", + "endpoint": "엔드포인트", + "apiManager": "API 관리자", + "logs": "로그", + "auditLog": "감사 로그", + "shutdown": "종료", + "restart": "다시 시작", + "shutdownConfirm": "OmniRoute를 종료하시겠습니까?", + "restartConfirm": "OmniRoute를 다시 시작하시겠습니까?", + "version": "v{version}", + "debug": "디버그", + "system": "시스템", + "help": "도움말", + "serverDisconnected": "서버 연결 끊김", + "serverDisconnectedMsg": "프록시 서버가 중지되었거나 다시 시작되는 중입니다.", + "expandSidebar": "사이드바 확장", + "collapseSidebar": "사이드바 접기" + }, + "header": { + "logout": "로그아웃", + "language": "언어", + "providers": "공급자", + "providerDescription": "AI 공급자 연결 관리", + "combos": "콤보", + "comboDescription": "폴백을 사용한 모델 콤보", + "usage": "사용 및 분석", + "usageDescription": "API 사용량, 토큰 소비 및 요청 로그를 모니터링하세요.", + "analytics": "분석", + "analyticsDescription": "차트, 추세 및 평가 통찰력", + "cliTools": "CLI 도구", + "cliToolsDescription": "CLI 도구 구성", + "home": "홈", + "homeDescription": "OmniRoute에 오신 것을 환영합니다", + "endpoint": "엔드포인트", + "endpointDescription": "API 엔드포인트 구성", + "settings": "설정", + "settingsDescription": "환경설정 관리", + "openaiCompatible": "OpenAI 호환", + "anthropicCompatible": "인류 친화적" + }, + "home": { + "quickStart": "빠른 시작", + "quickStartDesc": "4단계로 시작해 보세요. 공급자를 연결하고, 모델을 라우팅하고, 모든 것을 모니터링하세요.", + "fullDocs": "전체 문서", + "step1Title": "1. API 키 생성", + "step1Desc": "Endpoint -> 등록된 키로 이동합니다. 환경당 하나의 키를 생성합니다.", + "step2Title": "2. 공급자 연결", + "step2Desc": "Providers에 계정을 추가하세요. OAuth, API 키 및 무료 등급을 지원합니다.", + "step3Title": "3. 고객에게 지시하십시오", + "step3Desc": "IDE 또는 API 클라이언트에서 기본 URL을 {url}으로 설정하세요.", + "step4Title": "4. 모니터링 및 최적화", + "step4Desc": "요청 로그Analytics에서 토큰, 비용 및 오류를 추적합니다.", + "providersOverview": "공급자 개요", + "configuredOf": "{configured}은(는) {total} 사용 가능한 공급자로 구성되었습니다.", + "noModelsAvailable": "이 제공업체에 사용할 수 있는 모델이 없습니다.", + "configureFirst": "먼저 {providers}에서 연결을 구성하세요.", + "configureProvider": "공급자 구성", + "modelAvailable": "{count} 모델 사용 가능", + "modelsAvailable": "{count} 모델 사용 가능", + "connectionsActive": "{count} 연결 활성", + "connectionsActivePlural": "{count} 연결이 활성화되었습니다.", + "copyModelName": "모델명 복사", + "documentation": "문서", + "healthMonitor": "건강 모니터", + "reportIssue": "문제 신고", + "activeError": "{active} 활성 · {errors} 오류", + "oauthLabel": "OAuth", + "apiKeyLabel": "API 키", + "requestsShort": "{count} 요청", + "providerModelsTitle": "{provider} - 모델", + "copiedModel": "복사됨: {model}", + "aliasLabel": "별칭" + }, + "analytics": { + "title": "분석", + "overviewDescription": "모든 공급자와 모델 전반에 걸쳐 API 사용 패턴, 토큰 소비, 비용, 활동 추세를 모니터링하세요.", + "evalsDescription": "평가 모음을 실행하여 LLM 엔드포인트를 테스트하고 검증하세요. 모델 품질을 비교하고, 회귀를 감지하고, 벤치마크 대기 시간을 측정합니다.", + "overview": "개요", + "evals": "평가" + }, + "apiManager": { + "title": "API 키", + "createKey": "API 키 생성", + "key": "열쇠", + "revokeKey": "키 취소", + "revokeConfirm": "이 API 키를 취소하시겠습니까?", + "noKeys": "아직 API 키가 없습니다.", + "noKeysDesc": "엔드포인트에 대한 요청을 인증하기 위한 첫 번째 API 키 생성", + "keyLabel": "키 라벨", + "permissions": "권한", + "expiresAt": "만료", + "never": "절대로", + "revoke": "취소", + "showKey": "키 표시", + "hideKey": "키 숨기기", + "copyKey": "API 키 복사", + "allModels": "모든 모델", + "selectedModels": "선택된 모델", + "readOnly": "읽기 전용", + "fullAccess": "전체 액세스", + "keyManagement": "API 키 관리", + "keyManagementDesc": "엔드포인트에 대한 요청을 인증하기 위한 API 키 생성 및 관리", + "totalKeys": "총 키", + "restricted": "제한됨", + "totalRequests": "총 요청", + "modelsAvailable": "사용 가능한 모델", + "registeredKeys": "등록된 키", + "keysRegistered": "{count} 키가 등록되었습니다.", + "keyRegistered": "{count} 키가 등록되었습니다.", + "keysSecurityNote": "각 키는 사용 추적을 분리하고 독립적으로 취소할 수 있습니다. 보안을 위해 키는 생성 후 마스크 처리됩니다.", + "createFirstKey": "첫 번째 키 만들기", + "name": "이름", + "usage": "사용법", + "created": "생성됨", + "actions": "작업", + "reqs": "요구 사항", + "neverUsed": "한번도 사용하지 않음", + "deleteConfirm": "이 API 키를 삭제하시겠습니까?", + "usageTips": "사용 팁", + "tipAuth": "Authorization 헤더의 API 키를 Bearer YOUR_KEY로 사용하세요.", + "tipSecure": "키는 생성 중에 한 번만 표시되므로 안전하게 보관하세요.", + "tipSeparate": "다양한 클라이언트 또는 환경에 대해 별도의 키 생성", + "tipRestrict": "더 나은 보안 및 비용 관리를 위해 키를 특정 모델로 제한합니다.", + "keyName": "키 이름", + "keyNamePlaceholder": "예: 생산 키, 개발 키", + "keyNameDesc": "이 키의 목적을 식별하려면 설명이 포함된 이름을 선택하세요.", + "keyCreated": "API 키가 생성되었습니다.", + "keyCreatedSuccess": "키가 생성되었습니다!", + "keyCreatedNote": "지금 이 키를 복사하여 저장하세요. 다시 표시되지 않습니다.", + "done": "완료", + "savePermissions": "저장 권한", + "allowAll": "모두 허용", + "restrict": "제한하다", + "allowAllInfo": "이 키는 사용 가능한 모든 모델에 액세스할 수 있습니다.", + "restrictInfo": "이 키는 {total} 모델 중 {selected}에 액세스할 수 있습니다.", + "selected": "{count} 선택됨", + "all": "모두", + "clear": "지우기", + "searchModels": "이름이나 제공업체로 모델 검색...", + "noModelsFound": "모델을 찾을 수 없습니다.", + "keyNameRequired": "키 이름은 필수 항목입니다.", + "keyNameTooLong": "키 이름은 {max}자 이하여야 합니다.", + "keyNameInvalid": "키 이름에는 문자, 숫자, 공백, 하이픈, 밑줄만 포함할 수 있습니다.", + "invalidKeyName": "잘못된 키 이름", + "failedCreateKey": "키를 생성하지 못했습니다.", + "failedCreateKeyRetry": "키를 생성하지 못했습니다. 다시 시도해 주세요.", + "invalidKeyId": "잘못된 키 ID", + "failedDeleteKey": "키를 삭제하지 못했습니다.", + "failedDeleteKeyRetry": "키를 삭제하지 못했습니다. 다시 시도해 주세요.", + "invalidModelsSelection": "잘못된 모델 선택", + "cannotSelectMoreThanModels": "{max}개 이상의 모델을 선택할 수 없습니다.", + "failedUpdatePermissions": "권한을 업데이트하지 못했습니다.", + "failedUpdatePermissionsRetry": "권한을 업데이트하지 못했습니다. 다시 시도해 주세요.", + "unknownProvider": "알 수 없음", + "copyMaskedKey": "마스크된 키 복사", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "마지막: {date}", + "editPermissions": "권한 편집", + "deleteKey": "키 삭제", + "model": "{count} 모델", + "models": "{count} 모델", + "permissionsTitle": "권한: {name}", + "allowAllDesc": "이 키는 사용 가능한 모든 모델에 액세스할 수 있습니다.", + "restrictDesc": "이 키는 {totalModels} 모델 중 {selectedCount}에 액세스할 수 있습니다.", + "selectedCount": "{count} 선택됨" + }, + "auditLog": { + "title": "감사 로그", + "searchPlaceholder": "검색 작업...", + "action": "액션", + "actor": "배우", + "target": "대상", + "ipAddress": "IP 주소", + "timestamp": "타임스탬프", + "noEntries": "감사 항목을 찾을 수 없습니다.", + "filterByAction": "작업별로 필터링...", + "filterByActor": "배우별로 필터링...", + "filterEntriesAria": "감사 로그 항목 필터링", + "filterByActionTypeAria": "작업 유형별로 필터링", + "filterByActorAria": "배우별로 필터링", + "refreshAuditLogAria": "감사 로그 새로 고침", + "tableAria": "감사 로그 항목", + "failedFetchAuditLog": "감사 로그를 가져오지 못했습니다.", + "notAvailable": "—", + "description": "관리 조치 및 보안 이벤트", + "showing": "{count} 항목 표시 중(오프셋 {offset})", + "previous": "이전" + }, + "cliTools": { + "title": "CLI 도구", + "noActiveProviders": "활성 제공업체 없음", + "noActiveProvidersDesc": "CLI 도구를 구성하려면 먼저 공급자를 추가하고 연결하세요.", + "mapModels": "지도 모델", + "testConnection": "연결 테스트", + "connectionStatus": "연결 상태", + "configureEndpoint": "끝점 구성", + "instructions": "지침", + "modelMapping": "모델 매핑", + "baseUrl": "기본 URL", + "apiKey": "API 키", + "configured": "구성됨", + "notConfigured": "구성되지 않음", + "notInstalled": "설치되지 않음", + "custom": "맞춤", + "unknown": "알 수 없음", + "lastSavedAt": "마지막 저장: {date}", + "never": "절대로", + "justNow": "지금 막", + "minutesAgoShort": "{count}분 전", + "hoursAgoShort": "{count}시간 전", + "daysAgoShort": "{count}일 전", + "monthsAgoShort": "{count}개월 전", + "yearsAgoShort": "{count}년 전", + "runtimeCheckFailed": "런타임 확인 실패", + "yourApiKeyPlaceholder": "귀하의 API 키", + "modelPlaceholder": "공급자/모델 ID", + "configurationSaved": "구성이 성공적으로 저장되었습니다.", + "failedToSave": "구성을 저장하지 못했습니다.", + "noApiKeysCreateOne": "API 키 없음 - 키 페이지에서 키 만들기", + "defaultOmnirouteKey": "sk_omniroute(기본값)", + "selectModel": "모델 선택", + "selectModelForAlias": "{alias} 모델 선택", + "selectModelForTool": "{tool}의 모델 선택", + "select": "선택", + "clear": "지우기", + "comingSoon": "곧 출시 예정", + "checkingRuntime": "런타임 상태 확인 중...", + "guideOnlyIntegration": "가이드 전용 통합(로컬 런타임 필요 없음)", + "cliRuntimeDetected": "CLI 런타임이 감지되어 준비됨", + "cliFoundNotRunnable": "CLI를 찾았지만 실행할 수 없음{reason}", + "cliRuntimeNotDetected": "CLI 런타임이 감지되지 않음", + "binary": "바이너리", + "configPath": "구성 경로", + "configPathShort": "구성", + "failedCheckRuntimeStatus": "런타임 상태를 확인하지 못했습니다.", + "copy": "복사", + "copied": "복사됨", + "copyConfig": "구성 복사", + "saveConfig": "구성 저장", + "selectionSaved": "선택 항목이 저장되었습니다.", + "guide": "가이드", + "detected": "감지됨", + "notReady": "준비되지 않음", + "active": "활성", + "inactive": "비활성", + "startMitm": "MITM 시작", + "stopMitm": "MITM 중지", + "mitmStarted": "MITM이 성공적으로 시작되었습니다!", + "mitmStopped": "MITM이 성공적으로 중지되었습니다!", + "failedStart": "MITM을 시작하지 못했습니다.", + "failedStop": "MITM을 중지하지 못했습니다.", + "saveMappings": "매핑 저장", + "mappingsSaved": "매핑이 저장되었습니다!", + "failedSaveMappings": "매핑을 저장하지 못했습니다.", + "howItWorks": "작동 방식:", + "antigravityHowWorksDesc": "Antigravity는 Google의 엔드포인트로 요청을 보냅니다. MITM은 이를 가로채서 OmniRoute로 리디렉션합니다.", + "antigravityStep1": "1. MITM을 시작하여 OmniRoute를 통해 요청을 라우팅합니다.", + "antigravityStep2Prefix": "2. 추가", + "antigravityStep2Suffix": "호스트 파일에 127.0.0.1로 저장하세요.", + "antigravityStep3": "3. 반중력을 공개하면 요청이 프록시됩니다.", + "sudoPasswordRequiredTitle": "Sudo 비밀번호가 필요합니다", + "sudoPasswordHint": "호스트 파일 및 시스템 프록시 설정을 수정하려면 관리자 비밀번호가 필요합니다.", + "enterSudoPassword": "sudo 비밀번호를 입력하세요", + "sudoPasswordRequiredError": "Sudo 비밀번호가 필요합니다.", + "cancel": "취소", + "confirm": "확인", + "settingsApplied": "설정이 성공적으로 적용되었습니다!", + "failedApplySettings": "설정을 적용하지 못했습니다.", + "settingsReset": "설정이 재설정되었습니다!", + "failedResetSettings": "설정을 재설정하지 못했습니다.", + "backupRestored": "백업이 복원되었습니다!", + "failedRestore": "복원하지 못했습니다.", + "checkingCli": "{tool} CLI 확인 중...", + "cliNotRunnable": "{tool} CLI가 설치되었지만 실행할 수 없음", + "cliNotInstalled": "{tool} CLI가 설치되지 않았습니다.", + "cliNotDetected": "{tool} CLI가 감지되지 않음", + "cliDetectedReady": "{tool} CLI가 감지되어 준비됨", + "cliFoundFailedHealthcheck": "{tool} CLI를 찾았지만 런타임 상태 확인에 실패했습니다{reason}.", + "installCliPrompt": "이 기능을 사용하려면 {tool} CLI를 설치하세요.", + "installCodexPrompt": "자동 적용 기능을 사용하려면 Codex CLI를 설치하세요.", + "hide": "숨기기", + "howToInstall": "설치 방법", + "installationGuide": "설치 가이드", + "platforms": "macOS/리눅스/윈도우:", + "afterInstallationRun": "설치 후 실행", + "toVerify": "확인하기 위해.", + "current": "현재", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "기본값으로 재설정", + "providerModelPlaceholder": "공급자/모델 ID", + "apply": "적용", + "reset": "재설정", + "manualConfig": "수동 구성", + "backups": "백업", + "configBackups": "구성 백업", + "noBackupsYet": "아직 백업이 없습니다. 각 적용 또는 재설정 전에 백업이 자동으로 생성됩니다.", + "restore": "복원", + "backupRestoredReloading": "백업이 복원되었습니다! 상태를 다시 로드하는 중...", + "failedRestoreBackup": "백업을 복원하지 못했습니다.", + "applied": "적용되었습니다!", + "failed": "실패", + "resetDone": "재설정!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute는 OpenAI 호환 공급자로 구성됩니다.", + "provider": "공급자", + "model": "모델", + "providers": "공급자", + "auth": "인증", + "noApiKeysAvailable": "사용 가능한 API 키가 없습니다.", + "usingDefaultOmniroute": "기본값 사용: sk_omniroute", + "updateConfig": "구성 업데이트", + "applyConfig": "구성 적용", + "noBackupsAvailable": "사용 가능한 백업이 없습니다.", + "profileSaved": "프로필 \"{name}\"이(가) 저장되었습니다!", + "failedSaveProfile": "프로필을 저장하지 못했습니다.", + "profileActivated": "프로필이 활성화되었습니다!", + "failedActivateProfile": "프로필을 활성화하지 못했습니다.", + "profiles": "프로필", + "savedProfiles": "저장된 프로필", + "noProfilesYet": "아직 저장된 프로필이 없습니다. 현재 구성을 아래 프로필로 저장합니다.", + "activate": "활성화", + "deleteProfile": "프로필 삭제", + "profileNamePlaceholder": "프로필 이름(예: 개인 계정)", + "saveCurrent": "현재 저장", + "codexAuthNotePrefix": "코덱스 사용", + "codexAuthNoteMiddle": "와", + "codexAuthNoteSuffix": "자동 구성하려면 \"적용\"을 클릭하세요.", + "claudeManualConfiguration": "Claude CLI - 수동 구성", + "codexManualConfiguration": "Codex CLI - 수동 구성", + "droidManualConfiguration": "Factory Droid - 수동 구성", + "openClawManualConfiguration": "오픈 클로 - 수동 구성", + "clineManualConfiguration": "클라인 수동 구성", + "kiloManualConfiguration": "Kilo 코드 수동 구성", + "toolDescriptions": { + "antigravity": "MITM이 포함된 Google 반중력 IDE", + "claude": "인류 클로드 코드 CLI", + "codex": "OpenAI 코덱스 CLI", + "droid": "팩토리 드로이드 AI 어시스턴트", + "openclaw": "Claw AI 도우미 열기", + "cline": "Cline AI 코딩 어시스턴트 CLI", + "kilo": "킬로코드 AI 어시스턴트 CLI", + "cursor": "커서 AI 코드 편집기", + "continue": "AI 어시스턴트 계속하기" + }, + "guides": { + "cursor": { + "notes": { + "0": "이 기능을 사용하려면 Cursor Pro 계정이 필요합니다.", + "1": "커서는 자체 서버를 통해 요청을 라우팅하므로 로컬 엔드포인트는 지원되지 않습니다. 설정에서 Cloud Endpoint를 활성화하세요." + }, + "steps": { + "1": { + "title": "설정 열기", + "desc": "설정 -> 모델로 이동하세요." + }, + "2": { + "title": "OpenAI API 활성화", + "desc": "\"OpenAI API 키\" 옵션 활성화" + }, + "3": { + "title": "기본 URL" + }, + "4": { + "title": "API 키" + }, + "5": { + "title": "맞춤 모델 추가", + "desc": "\"모든 모델 보기\" -> \"사용자 정의 모델 추가\"를 클릭하세요." + }, + "6": { + "title": "모델 선택" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "구성 열기", + "desc": "계속 구성 파일 열기" + }, + "2": { + "title": "API 키" + }, + "3": { + "title": "모델 선택" + }, + "4": { + "title": "모델 구성 추가", + "desc": "모델 배열에 다음 구성을 추가합니다." + } + } + } + } + }, + "combos": { + "title": "콤보", + "description": "가중치 기반 라우팅 및 폴백 지원을 통해 모델 콤보 생성", + "createCombo": "콤보 생성", + "editCombo": "콤보 편집", + "deleteCombo": "콤보 삭제", + "noModels": "모델 없음", + "noModelsYet": "아직 추가된 모델이 없습니다.", + "addModel": "모델 추가", + "addModelToCombo": "콤보에 모델 추가", + "routingStrategy": "라우팅 전략", + "maxRetries": "최대 재시도 횟수", + "timeout": "시간 초과(밀리초)", + "healthcheck": "건강검진", + "priority": "우선순위", + "fallback": "대체", + "roundRobin": "라운드 로빈", + "random": "무작위", + "leastLatency": "최소 지연 시간", + "comboName": "콤보 이름", + "comboNamePlaceholder": "내 콤보", + "deleteConfirm": "이 콤보를 삭제하시겠습니까?", + "noCombosYet": "아직 콤보가 없습니다.", + "comboCreated": "콤보가 성공적으로 생성되었습니다.", + "comboUpdated": "콤보가 성공적으로 업데이트되었습니다.", + "comboDeleted": "콤보가 삭제되었습니다.", + "failedCreate": "콤보를 생성하지 못했습니다.", + "failedUpdate": "콤보를 업데이트하지 못했습니다.", + "errorCreating": "콤보 생성 중 오류 발생", + "errorUpdating": "콤보 업데이트 중 오류 발생", + "errorDeleting": "콤보 삭제 오류", + "testFailed": "테스트 요청 실패", + "failedToggle": "콤보를 전환하지 못했습니다.", + "testResults": "테스트 결과 — {name}", + "resolvedBy": "해결 방법:", + "more": "+{count} 더보기", + "reqs": "요구 사항", + "success": "성공", + "proxyConfigured": "프록시가 구성됨", + "copyComboName": "콤보 이름 복사", + "enableCombo": "콤보 활성화", + "disableCombo": "콤보 비활성화", + "testCombo": "테스트 콤보", + "duplicate": "중복", + "proxyConfig": "프록시 구성", + "nameRequired": "이름은 필수입니다", + "nameInvalid": "문자, 숫자, -, _, / 및 .만 가능합니다. 허용됨", + "nameHint": "문자, 숫자, -, _, / 및 . 허용됨", + "priorityDesc": "순차적 폴백: 모델 1을 먼저 시도한 다음 2 등을 시도합니다.", + "weightedDesc": "대체 기능을 사용하여 중량 비율로 트래픽을 분산합니다.", + "roundRobinDesc": "순환 배포: 각 요청은 교대로 다음 모델로 이동합니다.", + "randomDesc": "균일한 무작위 선택 후 나머지 모델로 대체", + "leastUsedDesc": "시간이 지남에 따라 로드 밸런싱을 통해 요청이 가장 적은 모델을 선택합니다.", + "costOptimizedDesc": "가격을 기준으로 가장 저렴한 모델로 먼저 라우팅", + "models": "모델", + "autoBalance": "자동 균형", + "advancedSettings": "고급 설정", + "retryDelay": "재시도 지연(ms)", + "concurrencyPerModel": "동시성/모델", + "queueTimeout": "대기열 시간 초과(밀리초)", + "advancedHint": "전역 기본값을 사용하려면 비워 두세요. 이는 공급자별 설정을 재정의합니다.", + "moveUp": "위로 이동", + "moveDown": "아래로 이동", + "removeModel": "제거", + "saving": "저장 중...", + "weighted": "가중", + "leastUsed": "가장 적게 사용됨", + "costOpt": "비용 최적화" + }, + "costs": { + "title": "비용", + "budget": "예산", + "totalCost": "총 비용", + "breakdown": "비용 분석", + "noData": "비용 데이터 없음", + "byModel": "모델별", + "byProvider": "공급자별" + }, + "endpoint": { + "title": "API 엔드포인트", + "available": "사용 가능한 엔드포인트", + "cloudProxy": "클라우드 프록시", + "disableConfirm": "클라우드 프록시를 비활성화하시겠습니까?", + "baseUrl": "기본 URL", + "apiKeyLabel": "API 키", + "registeredKeys": "등록된 키", + "chatCompletions": "채팅 완료", + "responses": "응답", + "listModels": "모델 나열", + "usingCloudProxy": "클라우드 프록시 사용", + "usingLocalServer": "로컬 서버 사용", + "machineId": "머신 ID: {id}...", + "disableCloud": "클라우드 비활성화", + "enableCloud": "클라우드 활성화", + "modelsAcrossEndpoints": "{endpoints} 엔드포인트 전반의 {models} 모델", + "chatDesc": "모든 제공업체와의 스트리밍 및 비스트리밍 채팅", + "embeddings": "임베딩", + "embeddingsDesc": "검색 및 RAG 파이프라인을 위한 텍스트 임베딩", + "imageGeneration": "이미지 생성", + "imageDesc": "텍스트 프롬프트에서 이미지 생성", + "rerank": "순위 재지정", + "rerankDesc": "쿼리 관련성에 따라 문서의 순위를 다시 매깁니다.", + "audioTranscription": "오디오 전사", + "audioTranscriptionDesc": "오디오 파일을 텍스트로 변환(속삭임)", + "textToSpeech": "텍스트 음성 변환", + "textToSpeechDesc": "텍스트를 자연스러운 음성으로 변환", + "moderations": "조정", + "moderationsDesc": "콘텐츠 조정 및 안전 분류", + "enableCloudTitle": "클라우드 프록시 활성화", + "whatYouGet": "당신이 얻을 것입니다", + "cloudBenefitAccess": "전 세계 어디에서나 API에 액세스하세요", + "cloudBenefitShare": "팀과 쉽게 엔드포인트 공유", + "cloudBenefitPorts": "포트를 열거나 방화벽을 구성할 필요가 없습니다.", + "cloudBenefitEdge": "빠른 글로벌 에지 네트워크", + "cloudSessionNote": "Cloud는 인증 세션을 1일 동안 유지합니다. 사용하지 않을 경우 자동 삭제됩니다.", + "cloudUnstableNote": "Cloud는 현재 Claude Code OAuth를 사용하는 경우에 불안정합니다.", + "cloudConnected": "클라우드 프록시가 연결되었습니다!", + "connectingToCloud": "클라우드에 연결 중...", + "verifyingConnection": "연결 확인 중...", + "connecting": "연결 중...", + "verifying": "확인 중...", + "connected": "연결되었습니다!", + "disableCloudTitle": "클라우드 프록시 비활성화", + "disableWarning": "모든 인증 세션이 클라우드에서 삭제됩니다.", + "syncingData": "최신 데이터 동기화 중...", + "disablingCloud": "클라우드를 비활성화하는 중...", + "syncing": "동기화 중...", + "disabling": "비활성화 중...", + "cloudConnectedVerified": "클라우드 프록시가 연결되고 확인되었습니다!", + "connectedVerificationPending": "연결됨 — 확인 대기 중", + "connectedVerificationPendingWithError": "연결됨 — 확인 대기 중: {error}", + "cloudDisabledSuccess": "클라우드가 비활성화되었습니다.", + "syncedSuccess": "성공적으로 동기화되었습니다", + "failedDisable": "클라우드를 비활성화하지 못했습니다.", + "failedEnable": "클라우드를 활성화하지 못했습니다.", + "cloudRequestTimeout": "클라우드 요청 시간 초과", + "cloudRequestFailed": "클라우드 요청 실패", + "cloudWorkerUnreachable": "클라우드 작업자에 연결할 수 없습니다. 클라우드 서비스가 실행 중인지 확인하세요(npm run dev in /cloud).", + "connectionFailed": "연결 실패", + "syncFailed": "클라우드 데이터를 동기화하지 못했습니다.", + "providerModelsTitle": "{provider} — 모델", + "noModelsForProvider": "이 제공업체에 사용할 수 있는 모델이 없습니다.", + "chat": "채팅", + "embedding": "임베딩", + "image": "이미지", + "custom": "관습", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "시스템 상태", + "description": "OmniRoute 인스턴스의 실시간 모니터링", + "healthy": "건강하다", + "degraded": "저하됨", + "down": "아래로", + "uptime": "가동 시간", + "memory": "메모리", + "memoryRss": "메모리(RSS)", + "heap": "힙", + "cpu": "CPU", + "database": "데이터베이스", + "version": "버전", + "lastCheck": "마지막 확인", + "providerHealth": "제공자 상태", + "systemMetrics": "시스템 측정항목", + "tokenHealth": "토큰 상태", + "refreshAll": "모두 새로 고침", + "checkNow": "지금 확인하세요", + "loadingHealth": "건강 데이터 로드 중...", + "failedToLoad": "상태 데이터를 로드하지 못했습니다: {error}", + "retry": "재시도", + "allOperational": "모든 시스템 작동", + "issuesDetected": "시스템 문제가 감지되었습니다.", + "updatedAt": "{time} 업데이트됨", + "latency": "대기 시간", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "총 요청수", + "noDataYet": "아직 데이터가 없습니다", + "promptCache": "프롬프트 캐시", + "entries": "항목", + "hitRate": "적중률", + "hitsMisses": "안타/실패", + "signatureCache": "서명 캐시", + "signatureDefaults": "기본값", + "signatureTool": "도구", + "signatureFamily": "가족", + "signatureSession": "세션", + "recovering": "회복 중", + "noCBData": "사용 가능한 회로 차단기 데이터가 없습니다. 먼저 몇 가지 요청을 해보세요.", + "providerHealthStatusAria": "공급자 상태", + "issuesLabel": "발견된 문제", + "operational": "운영", + "providers": "공급자", + "healthyCount": "{count} 건강함", + "nodeVersion": "노드 {version}", + "failures": "{count} 실패", + "failuresPlural": "{count} 실패", + "lastFailure": "마지막", + "rateLimitStatus": "비율 제한 상태", + "activeLimiters": "{count} 활성 제한기", + "activeLimitersPlural": "{count} 활성 제한기", + "queued": "대기 중", + "queuedCount": "{count} 대기 중", + "running": "달리기", + "runningCount": "{count} 실행 중", + "ok": "알았어", + "activeLockouts": "활성 잠금", + "resetConfirm": "모든 회로 차단기를 정상 상태로 재설정하시겠습니까? 그러면 모든 실패 횟수가 지워지고 모든 공급자가 작동 상태로 복원됩니다.", + "resetAllTitle": "모든 회로 차단기를 정상 상태로 재설정", + "resetting": "재설정 중...", + "resetAll": "모두 재설정", + "until": "{time}까지" + }, + "limits": { + "title": "한도 및 할당량", + "rateLimit": "비율 제한", + "remaining": "남은", + "requestsPerMinute": "요청/분", + "tokensPerMinute": "토큰/분", + "dailyLimit": "일일 한도" + }, + "logs": { + "title": "로그", + "requestLogs": "요청 로그", + "proxyLogs": "프록시 로그", + "auditLog": "감사 로그", + "console": "콘솔", + "auditLogDesc": "관리 조치 및 보안 이벤트", + "loading": "로드 중...", + "refresh": "새로고침", + "filterByAction": "작업별로 필터링...", + "filterByActor": "배우별로 필터링...", + "filterEntriesAria": "감사 로그 항목 필터링", + "filterByActionTypeAria": "작업 유형별로 필터링", + "filterByActorAria": "배우별로 필터링", + "refreshAuditLogAria": "감사 로그 새로 고침", + "tableAria": "감사 로그 항목", + "failedFetchAuditLog": "감사 로그를 가져오지 못했습니다.", + "showing": "{count} 항목 표시 중(오프셋 {offset})", + "search": "검색", + "timestamp": "타임스탬프", + "action": "액션", + "actor": "배우", + "target": "대상", + "details": "세부정보", + "ipAddress": "IP 주소", + "notAvailable": "—", + "noEntries": "감사 로그 항목이 없습니다.", + "previous": "이전", + "next": "다음" + }, + "onboarding": { + "welcome": "환영합니다", + "security": "보안", + "test": "테스트", + "ready": "준비됐어요!", + "setPassword": "비밀번호 설정", + "addProvider": "첫 번째 공급자 추가", + "getStarted": "시작하기", + "skip": "건너뛰기", + "skipWizard": "마법사를 완전히 건너뛰기", + "skipPassword": "비밀번호 설정 건너뛰기", + "skipAndContinue": "건너뛰고 계속하기", + "passwordLabel": "비밀번호", + "confirmPassword": "비밀번호 확인", + "enterPassword": "비밀번호를 입력하세요", + "confirmPasswordPlaceholder": "비밀번호 확인", + "passwordsMismatch": "비밀번호가 일치하지 않습니다.", + "setupComplete": "설정 완료!", + "goToDashboard": "대시보드로 이동 →", + "welcomeDesc": "OmniRoute는 로컬 AI API 프록시입니다. 로드 밸런싱, 장애 조치 및 사용량 추적을 통해 요청을 여러 AI 공급자에게 라우팅합니다.", + "multiProvider": "다중 공급자", + "usageTracking": "사용량 추적", + "apiKeyMgmt": "API 키 관리", + "securityDesc": "대시보드를 보호하기 위해 비밀번호를 설정하거나 지금은 건너뛰세요.", + "providerDesc": "첫 번째 AI 공급자를 연결하세요. 나중에 더 추가할 수 있습니다.", + "apiKeyRequired": "API 키(필수)", + "customUrlOptional": "맞춤 URL(선택사항)", + "testDesc": "공급자 연결이 작동하는지 확인해 보겠습니다.", + "runTest": "연결 테스트 실행", + "testingConnection": "연결 테스트 중...", + "connectionSuccessful": "연결 성공! 귀하의 서비스 제공자가 준비되었습니다.", + "noProviderFound": "공급자를 찾을 수 없습니다. 나중에 대시보드에서 추가할 수 있습니다.", + "testFailed": "테스트에 실패했지만 나중에 구성할 수 있습니다.", + "couldNotTest": "지금은 테스트할 수 없습니다. 대시보드에서 테스트할 수 있습니다.", + "doneDesc": "모든 준비가 완료되었습니다. OmniRoute 인스턴스가 구성되어 AI 요청을 프록시할 준비가 되었습니다.", + "yourEndpoint": "귀하의 엔드포인트:", + "continue": "계속", + "retry": "재시도", + "failedSetPassword": "비밀번호를 설정하지 못했습니다. 다시 시도해 보세요.", + "failedAddProvider": "공급자를 추가하지 못했습니다. 다시 시도해 보세요.", + "connectionError": "연결 오류입니다. 다시 시도해 주세요.", + "provider": "공급자" + }, + "providers": { + "title": "공급자", + "addProvider": "공급자 추가", + "editProvider": "제공자 편집", + "deleteProvider": "공급자 삭제", + "noProviders": "구성된 제공업체가 없습니다.", + "modelAvailability": "모델 가용성", + "accounts": "계정", + "newAccount": "새 계정", + "deleteConfirm": "이 제공업체를 삭제하시겠습니까?", + "testing": "테스트 중...", + "testConnection": "연결 테스트", + "testSuccess": "연결 성공", + "testFailed": "연결 실패", + "available": "가능", + "cooldown": "쿨다운", + "unavailable": "이용 불가", + "unknown": "알 수 없음", + "oauthLabel": "OAuth", + "compatibleLabel": "호환 가능", + "chat": "채팅", + "responses": "응답", + "messages": "메시지", + "oauthProviders": "OAuth 제공자", + "freeProviders": "무료 제공업체", + "apiKeyProviders": "API 키 제공자", + "compatibleProviders": "API 키 호환 제공자", + "testAll": "모두 테스트", + "testAllOAuth": "모든 OAuth 연결 테스트", + "testAllFree": "모든 무료 연결 테스트", + "testAllApiKey": "모든 API 키 연결 테스트", + "testAllCompatible": "모든 호환 연결 테스트", + "connected": "{count} 연결됨", + "errorCount": "{count} 오류({code})", + "errorCountNoCode": "{count} 오류", + "noConnections": "연결 없음", + "disabled": "장애인", + "enableProvider": "공급자 활성화", + "disableProvider": "공급자 비활성화", + "testResults": "테스트 결과", + "noCompatibleYet": "아직 호환되는 제공업체가 추가되지 않았습니다.", + "compatibleHint": "위 버튼을 사용하여 OpenAI 또는 Anthropic 호환 엔드포인트를 추가하세요.", + "addOpenAICompatible": "OpenAI 호환 추가", + "addAnthropicCompatible": "인류 호환 추가", + "addNewProvider": "새 공급자 추가", + "backToProviders": "공급자로 돌아가기", + "configureNewProvider": "애플리케이션과 함께 사용할 새 AI 공급자를 구성합니다.", + "providerLabel": "공급자", + "selectProvider": "제공업체 선택", + "selectedProvider": "선택된 제공업체", + "authMethod": "인증 방법", + "apiKeyLabel": "API 키", + "apiKeyRequired": "API 키가 필요합니다", + "selectProviderRequired": "제공업체를 선택하세요.", + "enterApiKey": "API 키를 입력하세요", + "apiKeySecure": "귀하의 API 키는 암호화되어 안전하게 저장됩니다.", + "oauth2Connect": "OAuth2로 연결", + "oauth2Label": "OAuth2", + "oauth2Desc": "OAuth2 인증을 사용하여 계정을 연결하세요.", + "displayName": "표시 이름", + "displayNamePlaceholder": "예: 프로덕션 API, 개발 환경", + "displayNameHint": "선택사항. 이 구성을 식별하기 위한 친숙한 이름입니다.", + "active": "활성", + "activeDescription": "애플리케이션에서 이 공급자를 사용하도록 설정", + "cancel": "취소", + "createProvider": "공급자 생성", + "failedCreate": "공급자를 생성하지 못했습니다.", + "errorOccurred": "오류가 발생했습니다. 다시 시도해 주세요.", + "modelStatus": "모델현황", + "allModelsOperational": "모든 모델 작동 가능", + "modelsWithIssues": "문제가 있는 {count} 모델", + "allModelsNormal": "모든 모델이 정상적으로 반응하고 있습니다.", + "cooldownCleared": "{model}의 쿨다운이 삭제되었습니다.", + "failedClearCooldown": "쿨다운을 지우지 못했습니다.", + "loadingAvailability": "모델 가용성 로드 중...", + "clearCooldown": "지우기", + "clearing": "지우는 중...", + "until": "{time}까지", + "providerTestFailed": "공급자 테스트 실패", + "modeTest": "{mode} 테스트", + "passedCount": "{count} 통과됨", + "failedCount": "{count} 실패", + "testedCount": "{count} 테스트됨", + "millisecondsAbbr": "{value}ms", + "okShort": "알았어", + "errorShort": "오류", + "noActiveConnectionsInGroup": "이 그룹에 대한 활성 연결이 없습니다.", + "allTestsPassed": "모든 {total} 테스트를 통과했습니다.", + "testSummary": "{passed}/{total} 통과, {failed} 실패", + "nameLabel": "이름", + "prefixLabel": "접두사", + "baseUrlLabel": "기본 URL", + "apiTypeLabel": "API 유형", + "prefixHint": "필수입니다. 모델 이름의 고유 접두사입니다.", + "nameHint": "필수입니다. 이 노드에 대한 친숙한 레이블입니다.", + "baseUrlHint": "필수입니다.  공급자 API 기본 URL.", + "anthropicPrefixPlaceholder": "AC-PROD", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "연결 확인", + "validating": "검증 중...", + "connectionValid": "연결이 유효합니다!", + "connectionFailed": "연결에 실패했습니다. URL과 키를 확인하세요.", + "testKeyLabel": "테스트 API 키", + "testKeyPlaceholder": "sk-...(검증용으로만)", + "providerNotFound": "공급자를 찾을 수 없습니다.", + "deleteConnectionConfirm": "이 연결을 삭제하시겠습니까?", + "failedSetAlias": "별칭을 설정하지 못했습니다.", + "failedSaveConnection": "연결을 저장하지 못했습니다.", + "failedSaveConnectionRetry": "연결을 저장하지 못했습니다. 다시 시도해 주세요.", + "failedRetestConnection": "연결을 다시 테스트하지 못했습니다.", + "deleteCompatibleNodeConfirm": "이 {type} 호환 노드를 삭제하시겠습니까?", + "anthropicCompatibleDetails": "인류 친화적인 세부 사항", + "openaiCompatibleDetails": "OpenAI 호환 세부정보", + "messagesApi": "메시지 API", + "responsesApi": "응답 API", + "chatCompletions": "채팅 완료", + "importingModels": "가져오는 중...", + "importFromModels": "/models에서 가져오기", + "addConnectionToImport": "가져오기를 활성화하려면 연결을 추가하세요.", + "noModelsConfigured": "구성된 모델이 없습니다.", + "connectionCount": "{count} 연결", + "fetchingModels": "사용 가능한 모델을 가져오는 중...", + "failedFetchModels": "모델을 가져오지 못했습니다.", + "noModelsFound": "모델을 찾을 수 없습니다.", + "importFailed": "가져오기 실패", + "noNewModelsAdded": "새로운 모델이 추가되지 않았습니다.", + "adding": "추가 중...", + "importingModelsTitle": "모델 가져오기", + "copyModel": "모델 복사", + "removeModel": "모델 삭제", + "rateLimitProtected": "보호됨", + "rateLimitUnprotected": "보호되지 않음", + "enableRateLimitProtection": "속도 제한 보호를 활성화하려면 클릭하세요.", + "disableRateLimitProtection": "속도 제한 보호를 비활성화하려면 클릭하세요.", + "productionKey": "생산 키", + "enterNewApiKey": "새 API 키를 입력하세요", + "optional": "선택사항", + "anthropicCompatibleName": "인류 친화적", + "openaiCompatibleName": "OpenAI 호환", + "failedImportModels": "모델을 가져오지 못했습니다.", + "noModelsReturnedFromEndpoint": "/models 엔드포인트에서 반환된 모델이 없습니다.", + "importingModelsProgress": "{total} 모델 중 {current} 가져오는 중...", + "foundModelsStartingImport": "{count} 모델을 찾았습니다. 가져오기 시작 중...", + "importingModelById": "{modelId} 가져오는 중...", + "importSuccessCount": "{count, plural, one {# model} other {# models}}을(를) 성공적으로 가져왔습니다!", + "noNewModelsAddedExisting": "새로운 모델이 추가되지 않았습니다(모두 이미 존재함).", + "importDoneCount": "✓ 완료! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "예상치 못한 오류가 발생했습니다.", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "메시지", + "responsesPath": "응답", + "chatCompletionsPath": "채팅/완료", + "add": "추가", + "edit": "편집", + "delete": "삭제", + "anthropic": "인류학", + "openai": "오픈AI", + "singleConnectionPerCompatible": "호환되는 노드당 하나의 연결만 허용됩니다. 더 많은 연결이 필요한 경우 다른 노드를 추가하세요.", + "connections": "연결", + "providerProxyTitleConfigured": "공급자 프록시: {host}", + "configured": "구성된", + "providerProxyConfigureHint": "이 공급자의 모든 연결에 대한 프록시 구성", + "providerProxy": "공급자 프록시", + "noConnectionsYet": "아직 연결이 없습니다.", + "addFirstConnectionHint": "시작하려면 첫 번째 연결을 추가하세요.", + "addConnection": "연결 추가", + "availableModels": "사용 가능한 모델", + "pageAutoRefresh": "페이지가 자동으로 새로 고쳐집니다...", + "statusDisabled": "장애인", + "statusConnected": "연결됨", + "statusRuntimeIssue": "런타임 문제", + "statusAuthFailed": "인증 실패", + "statusRateLimited": "요금 제한", + "statusNetworkIssue": "네트워크 문제", + "statusTestUnsupported": "지원되지 않는 테스트", + "statusUnavailable": "이용할 수 없음", + "statusFailed": "실패했다", + "statusError": "오류", + "oauthAccount": "OAuth 계정", + "errorTypeRuntime": "로컬 런타임", + "errorTypeUpstreamAuth": "업스트림 인증", + "errorTypeMissingCredential": "자격증명 누락", + "errorTypeRefreshFailed": "새로고침 실패", + "errorTypeTokenExpired": "토큰이 만료되었습니다.", + "errorTypeRateLimited": "요금 제한", + "errorTypeUpstreamUnavailable": "업스트림 이용 불가", + "errorTypeNetworkError": "네트워크 오류", + "errorTypeTestUnsupported": "지원되지 않는 테스트", + "errorTypeUpstreamError": "업스트림 오류", + "proxySourceGlobal": "글로벌", + "proxySourceProvider": "공급자", + "proxySourceKey": "열쇠", + "proxyConfiguredBySource": "프록시({source}): {host}", + "autoPriority": "자동: {priority}", + "proxy": "프록시", + "retestAuthentication": "인증 재테스트", + "retest": "재테스트", + "disableConnection": "연결 비활성화", + "enableConnection": "연결 활성화", + "reauthenticateConnection": "이 연결을 다시 인증하세요.", + "proxyConfig": "프록시 구성", + "aliasExistsAlert": "별칭 \"{alias}\"이(가) 이미 존재합니다. 다른 모델을 사용하거나 기존 별칭을 수정하세요.", + "openRouterAnyModelHint": "OpenRouter는 모든 모델을 지원합니다. 빠른 액세스를 위해 모델을 추가하고 별칭을 만듭니다.", + "modelIdFromOpenRouter": "모델 ID(OpenRouter에서)", + "openRouterModelPlaceholder": "인류학/claude-3-opus", + "customModels": "맞춤형 모델", + "customModelsHint": "기본 목록에 없는 모델 ID를 추가하세요. 라우팅에 사용할 수 있습니다.", + "modelId": "모델 ID", + "customModelPlaceholder": "예를 들어 gpt-4.5-터보", + "loading": "로드 중...", + "removeCustomModel": "맞춤 모델 삭제", + "noCustomModels": "아직 추가된 커스텀 모델이 없습니다.", + "allSuggestedAliasesExist": "제안된 별칭이 모두 이미 존재합니다. 다른 모델을 선택하거나 충돌하는 별칭을 삭제하세요.", + "failedSaveCustomModel": "커스텀 모델을 저장하지 못했습니다.", + "modelAddedSuccess": "모델 {modelId}이(가) 성공적으로 추가되었습니다.", + "failedAddModelTryAgain": "모델을 추가하지 못했습니다. 다시 시도해 주세요.", + "failedSaveImportedModel": "가져온 모델을 사용자 정의 데이터베이스에 저장하지 못했습니다.", + "failedImportModelsTryAgain": "모델을 가져오지 못했습니다. 다시 시도해 주세요.", + "failedRemoveModelFromDatabase": "데이터베이스에서 모델을 제거하지 못했습니다.", + "modelRemovedSuccess": "모델이 성공적으로 제거되었습니다.", + "failedDeleteModelTryAgain": "모델을 삭제하지 못했습니다. 다시 시도해 주세요.", + "compatibleModelsDescription": "{type} 호환 모델을 수동으로 추가하거나 /models 엔드포인트에서 가져옵니다.", + "anthropicCompatibleModelPlaceholder": "클로드-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "API 키 검증에 실패했습니다. 키를 확인하고 다시 시도해 주세요.", + "addProviderApiKeyTitle": "{provider} API 키 추가", + "checking": "확인 중...", + "check": "확인", + "valid": "유효", + "invalid": "유효하지 않음", + "creating": "만드는 중...", + "validationChecksAnthropicCompatible": "검증은 API 키를 확인하여 {provider}을 확인합니다.", + "validationChecksOpenAiCompatible": "유효성 검사는 기본 URL의 /models를 통해 {provider}을 확인합니다.", + "priorityLabel": "우선순위", + "saving": "저장 중...", + "save": "저장", + "editConnection": "연결 편집", + "accountName": "계정 이름", + "email": "이메일", + "healthCheckMinutes": "상태 점검(분)", + "healthCheckHint": "사전 토큰 새로 고침 간격. 0 = 비활성화됨.", + "failedTestConnection": "연결을 테스트하지 못했습니다.", + "failed": "실패", + "leaveBlankKeepCurrentApiKey": "현재 API 키를 유지하려면 비워 두세요.", + "editCompatibleTitle": "{type} 호환 가능 편집", + "compatibleBaseUrlHint": "{type} 호환 API에는 기본 URL(/v1로 끝남)을 사용하세요.", + "apiKeyForCheck": "API Key(확인용)", + "compatibleProdPlaceholder": "{type} 호환 가능(프로덕션)" + }, + "settings": { + "title": "설정", + "general": "일반", + "security": "보안", + "appearance": "외관", + "routing": "라우팅", + "cache": "캐시", + "resilience": "탄력성", + "systemPrompt": "시스템 프롬프트", + "thinkingBudget": "생각하는 예산", + "proxy": "프록시", + "pricing": "가격", + "storage": "저장", + "policies": "정책", + "ipFilter": "IP 필터", + "comboDefaults": "콤보 기본값", + "fallbackChains": "폴백 체인", + "changePassword": "비밀번호 변경", + "enablePassword": "비밀번호 활성화", + "darkMode": "다크 모드", + "lightMode": "라이트 모드", + "systemTheme": "시스템 테마", + "enableCache": "캐시 활성화", + "cacheTTL": "캐시 TTL", + "maxCacheSize": "최대 캐시 크기", + "clearCache": "캐시 지우기", + "cacheHits": "캐시 적중", + "cacheMisses": "캐시 미스", + "hitRate": "적중률", + "cacheEntries": "캐시 항목", + "circuitBreaker": "회로 차단기", + "retryPolicy": "재시도 정책", + "maxRetries": "최대 재시도 횟수", + "retryDelay": "재시도 지연", + "timeoutMs": "시간 초과(밀리초)", + "enableSystemPrompt": "시스템 프롬프트 활성화", + "systemPromptText": "시스템 프롬프트 텍스트", + "enableThinking": "사고 활성화", + "maxThinkingTokens": "맥스 씽킹 토큰", + "enableProxy": "프록시 활성화", + "proxyUrl": "프록시 URL", + "pricingRates": "가격 요율 형식", + "currentPricing": "현재 가격 개요", + "loadingPricing": "가격 데이터 로드 중...", + "noPricing": "사용 가능한 가격 데이터가 없습니다.", + "input": "입력", + "output": "출력", + "cached": "캐시됨", + "reasoning": "추론", + "cacheCreation": "캐시 생성", + "customPricing": "맞춤형 가격", + "databaseSize": "데이터베이스 크기", + "backupDb": "백업 데이터베이스", + "restoreDb": "데이터베이스 복원", + "exportData": "데이터 내보내기", + "importData": "데이터 가져오기", + "clearData": "모든 데이터 지우기", + "clearDataConfirm": "모든 데이터가 영구적으로 삭제됩니다. 확실합니까?", + "enableRequestLogs": "요청 로그 활성화", + "logRetention": "로그 보존", + "ipWhitelist": "IP 화이트리스트", + "ipBlacklist": "IP 블랙리스트", + "addIP": "IP 추가", + "savedSuccessfully": "설정이 성공적으로 저장되었습니다.", + "ai": "AI", + "advanced": "고급", + "localMode": "로컬 모드 — 컴퓨터에 저장된 모든 데이터", + "settingsSectionsAria": "설정 섹션", + "switchThemes": "밝은 테마와 어두운 테마 간 전환", + "themeSelectionAria": "테마 선택", + "themeLight": "빛", + "themeDark": "어둠", + "themeSystem": "시스템", + "hideHealthLogs": "상태 확인 로그 숨기기", + "hideHealthLogsDesc": "ON일 때, 서버 콘솔에서 [HealthCheck] 메시지를 억제합니다.", + "promptCache": "프롬프트 캐시", + "flushCache": "캐시 플러시", + "flushing": "플러싱…", + "size": "크기", + "hits": "조회수", + "evictions": "퇴거", + "loadingCacheStats": "캐시 통계 로드 중…", + "globalProxy": "글로벌 프록시", + "globalProxyDesc": "모든 API 호출에 대해 글로벌 아웃바운드 프록시를 구성합니다. 개별 공급자, 콤보 및 키가 이를 재정의할 수 있습니다.", + "noGlobalProxy": "글로벌 프록시가 구성되지 않았습니다.", + "globalLabel": "글로벌", + "configure": "구성", + "globalSystemPrompt": "글로벌 시스템 프롬프트", + "systemPromptDesc": "프록시 수준에서 모든 요청에 삽입됩니다.", + "saved": "저장됨", + "systemPromptPlaceholder": "모든 요청에 삽입하려면 시스템 프롬프트를 입력하세요...", + "systemPromptHint": "이 프롬프트는 모든 요청의 시스템 메시지 앞에 추가됩니다. 전역 지침, 안전 지침 또는 응답 형식 지정 규칙에 사용합니다.", + "chars": "{count}자", + "thinkingBudgetTitle": "생각하는 예산", + "thinkingBudgetDesc": "모든 요청에서 AI 추론 토큰 사용을 제어합니다.", + "passthrough": "통과", + "passthroughDesc": "변경 사항 없음 - 클라이언트가 사고 예산을 제어합니다.", + "auto": "자동", + "autoDesc": "모든 사고 구성 제거 - 공급자가 결정하도록 함", + "custom": "맞춤", + "customDesc": "모든 요청에 대해 고정 토큰 예산 설정", + "adaptive": "적응형", + "adaptiveDesc": "요청 복잡성에 따라 예산 규모 조정", + "effortNone": "없음(토큰 0개)", + "effortLow": "낮음(1,000개 토큰)", + "effortMedium": "중간(10,000개 토큰)", + "effortHigh": "높음(128K 토큰)", + "tokenBudget": "토큰예산", + "tokens": "토큰", + "baseEffortLevel": "기본 노력 수준", + "adaptiveHint": "적응 모드는 메시지 수, 도구 사용량 및 프롬프트 길이에 따라 이 기본 수준에서 확장됩니다.", + "requireLogin": "로그인 필요", + "requireLoginDesc": "ON으로 설정하면 대시보드에 비밀번호가 필요합니다. OFF시 로그인 없이 접속 가능합니다.", + "currentPassword": "현재 비밀번호", + "enterCurrentPassword": "현재 비밀번호를 입력하세요", + "newPassword": "새 비밀번호", + "enterNewPassword": "새 비밀번호를 입력하세요", + "confirmPassword": "새 비밀번호 확인", + "confirmPasswordPlaceholder": "새 비밀번호 확인", + "passwordsNoMatch": "비밀번호가 일치하지 않습니다.", + "passwordUpdated": "비밀번호가 성공적으로 업데이트되었습니다.", + "failedUpdatePassword": "비밀번호를 업데이트하지 못했습니다.", + "errorOccurred": "오류가 발생했습니다", + "updatePassword": "비밀번호 업데이트", + "setPassword": "비밀번호 설정", + "apiEndpointProtection": "API 엔드포인트 보호", + "requireAuthModels": "/models에 대한 API 키 필요", + "requireAuthModelsDesc": "ON인 경우 /v1/models 엔드포인트는 인증되지 않은 요청에 대해 404를 반환합니다. 승인되지 않은 사용자가 모델을 발견하는 것을 방지합니다.", + "blockedProviders": "차단된 제공업체", + "blockedProvidersDesc": "/v1/models 응답에서 특정 공급자를 숨깁니다. 차단된 제공업체는 모델 목록에 표시되지 않습니다.", + "providersBlocked": "{count} 공급자가 /models에서 차단되었습니다.", + "blockProviderTitle": "{provider} 차단", + "unblockProviderTitle": "{provider} 차단 해제", + "routingStrategy": "라우팅 전략", + "fillFirst": "먼저 채우기", + "fillFirstDesc": "우선순위에 따라 계정을 사용하세요", + "roundRobin": "라운드 로빈", + "roundRobinDesc": "모든 계정을 순환합니다.", + "p2c": "P2C", + "p2cDesc": "무작위로 2개를 선택하고 더 건강한 것을 사용하세요", + "random": "무작위", + "randomDesc": "각 요청마다 무작위 계정", + "leastUsed": "최소 사용", + "leastUsedDesc": "최근에 가장 적게 사용한 계정 선택", + "costOpt": "비용 선택", + "costOptDesc": "가장 저렴한 계정을 선호합니다", + "stickyLimit": "고정 한도", + "stickyLimitDesc": "전환 전 계정당 통화", + "modelAliases": "모델 별칭", + "modelAliasesDesc": "모델 이름을 다시 매핑하는 와일드카드 패턴 • * 및 ?를 사용합니다.", + "aliasPatternPlaceholder": "클로드-소네트-*", + "aliasTargetPlaceholder": "클로드 소네트-4-20250514", + "pattern": "패턴", + "targetModel": "대상 모델", + "add": "+ 추가", + "session": "세션", + "sessionDetailsAria": "세션 세부정보", + "status": "상태", + "authenticated": "인증됨", + "guest": "손님", + "loginTime": "로그인 시간", + "sessionAge": "세션 연령", + "browser": "브라우저", + "clearLocalData": "로컬 데이터 지우기", + "logout": "로그아웃", + "clearLocalDataConfirm": "모든 로컬 데이터를 삭제하시겠습니까? 그러면 기본 설정이 재설정됩니다.", + "unknown": "알 수 없음", + "systemActor": "시스템", + "ipAccessControl": "IP 접근 제어", + "ipAccessControlDesc": "특정 IP 주소 차단 또는 허용", + "ipModeDisabled": "장애인", + "ipModeBlacklist": "블랙리스트", + "ipModeWhitelist": "화이트리스트", + "ipModeWhitelistPriority": "WL 우선순위", + "addIpAddress": "IP 주소 추가", + "ipAddressPlaceholder": "192.168.1.0/24 또는 10.0.*.*", + "block": "+ 차단", + "allow": "+ 허용", + "blocked": "차단됨({count})", + "allowed": "허용됨({count})", + "temporaryBans": "임시 금지({count})", + "minLeft": "{min}분 남음", + "auditLog": "감사 로그", + "searchAuditLogs": "감사 로그 검색...", + "failedLoadAuditLog": "감사 로그를 로드하지 못했습니다.", + "noAuditEvents": "감사 이벤트가 없습니다.", + "action": "액션", + "actor": "배우", + "details": "세부정보", + "time": "시간", + "fallbackChainsTitle": "폴백 체인", + "fallbackChainsDesc": "모델별 공급자 대체 순서 정의", + "addChain": "+ 체인 추가", + "modelName": "모델명", + "modelNamePlaceholder": "클로드 소네트-4-20250514", + "providersCommaSeparated": "공급자(쉼표로 구분, 우선순위)", + "providersCommaSeparatedPlaceholder": "인류, openai, 쌍둥이자리", + "createChain": "체인 생성", + "noFallbackChains": "대체 체인 없음", + "noFallbackChainsDesc": "모델에 대한 공급자 대체 순서를 정의하는 체인을 만듭니다.", + "loadingFallbackChains": "대체 체인 로드 중...", + "deleteChainConfirm": "'{model}'에 대한 대체 체인을 삭제하시겠습니까?", + "chainCreated": "{model}용으로 생성된 체인", + "chainDeleted": "{model}에 대한 체인이 삭제되었습니다.", + "failedCreateChain": "체인을 생성하지 못했습니다.", + "failedDeleteChain": "체인을 삭제하지 못했습니다.", + "deleteChain": "체인 삭제", + "fillModelAndProviders": "모델명과 제공업체를 입력하세요.", + "addAtLeastOneProvider": "제공업체를 하나 이상 추가하세요.", + "comboDefaultsTitle": "콤보 기본값", + "globalComboConfig": "글로벌 콤보 구성", + "defaultStrategy": "기본 전략", + "defaultStrategyDesc": "명시적인 전략이 없는 새로운 콤보에 적용", + "comboStrategyAria": "콤보 전략", + "priority": "우선순위", + "weighted": "가중", + "maxRetriesLabel": "최대 재시도 횟수", + "retryDelayLabel": "재시도 지연(ms)", + "timeoutLabel": "시간 초과(밀리초)", + "healthCheck": "건강검진", + "healthCheckDesc": "제공업체 가용성 사전 확인", + "trackMetrics": "추적 지표", + "trackMetricsDesc": "콤보별 요청 측정항목 기록", + "providerOverrides": "공급자 재정의", + "providerOverridesDesc": "공급자당 시간 초과 및 재시도를 재정의합니다. 공급자 설정은 전역 기본값을 재정의합니다.", + "providerMaxRetriesAria": "{provider} 최대 재시도 횟수", + "providerTimeoutAria": "{provider} 시간 초과(밀리초)", + "removeProviderOverrideAria": "{provider} 재정의 제거", + "newProviderNamePlaceholder": "예를 들어 구글, 오픈아이...", + "newProviderNameAria": "새 제공업체 이름", + "retries": "재시도", + "ms": "ms", + "saveComboDefaults": "콤보 기본값 저장", + "maxNestingDepth": "최대 중첩 깊이", + "concurrencyPerModel": "동시성/모델", + "queueTimeout": "대기열 시간 초과(밀리초)", + "providerProfiles": "공급자 프로필", + "providerProfilesDesc": "OAuth(세션 기반) 및 API 키(측정) 공급자에 대한 별도의 복원력 설정입니다. OAuth 공급자는 낮은 비율 제한으로 인해 더 엄격한 기준을 적용합니다.", + "oauthProviders": "OAuth 제공자", + "apiKeyProviders": "API 키 제공자", + "transientCooldown": "일시적인 쿨다운", + "rateLimitCooldown": "비율 제한 쿨다운", + "maxBackoffLevel": "최대 백오프 수준", + "cbThreshold": "CB 임계값", + "cbResetTime": "차단기 재설정 시간", + "rateLimiting": "속도 제한", + "rateLimitingDesc": "API 키 제공자는 안전한 기본값을 사용하여 자동으로 속도가 제한됩니다. 제한은 응답 헤더에서 학습되고 시간이 지남에 따라 조정됩니다.", + "defaultSafetyNet": "기본 안전망", + "rpm": "RPM", + "minGap": "민갭", + "maxConcurrent": "최대 동시", + "activeLimiters": "활성 리미터", + "noActiveLimiters": "아직 활성 속도 제한기가 없습니다.", + "reservoir": "저수지", + "running": "달리기", + "queued": "대기 중", + "circuitBreakers": "회로 차단기", + "breakerStateClosed": "휴무", + "breakerStateOpen": "열기", + "breakerStateHalfOpen": "반개방형", + "tripped": "{count}이(가) 작동되었습니다.", + "healthy": "{count} 건강함", + "resetAll": "모두 재설정", + "noCircuitBreakers": "아직 활성화된 회로 차단기가 없습니다. 요청이 콤보 파이프라인을 통해 흐를 때 자동으로 생성됩니다.", + "failures": "{count} 실패", + "policiesLocked": "정책 및 잠긴 식별자", + "allOperational": "모든 시스템 작동 — 잠금이나 차단기 작동 없음", + "loadingPolicies": "정책 로드 중...", + "lockedIdentifiers": "잠긴 식별자", + "unlockedIdentifier": "잠금 해제됨: {identifier}", + "sinceDate": "{date} 이후", + "forceUnlock": "강제 잠금 해제", + "unlocking": "잠금 해제 중...", + "failedUnlock": "잠금 해제에 실패했습니다.", + "failedLoadWithStatus": "로드 실패: {status}", + "failedLoadResilience": "복원력 상태를 로드하지 못했습니다.", + "saveFailed": "저장 실패", + "resetFailed": "재설정 실패", + "loadingResilience": "복원력 상태 로드 중...", + "retry": "재시도", + "systemStorage": "시스템 및 스토리지", + "allDataLocal": "모든 데이터는 컴퓨터에 로컬로 저장됩니다.", + "databasePath": "데이터베이스 경로", + "exportDatabase": "데이터베이스 내보내기", + "exportAll": "모두 내보내기(.tar.gz)", + "importDatabase": "데이터베이스 가져오기", + "confirmDbImport": "데이터베이스 가져오기 확인", + "confirmDbImportDesc": "그러면 모든 현재 데이터가 {file}의 콘텐츠로 대체됩니다. 가져오기 전에 백업이 자동으로 생성됩니다.", + "yesImport": "예, 수입합니다", + "lastBackup": "마지막 백업", + "noBackupYet": "아직 백업이 없습니다", + "backupNow": "지금 백업", + "backupRestore": "백업 및 복원", + "viewBackups": "백업 보기", + "hide": "숨기기", + "backupRetentionDesc": "데이터베이스 스냅샷은 복원 전과 데이터가 변경될 때 15분마다 자동으로 생성됩니다. 보존: 스마트 순환을 통한 24시간 + 30일 백업.", + "loadingBackups": "백업 로드 중...", + "noBackupsYet": "아직 사용할 수 있는 백업이 없습니다. 데이터가 변경되면 백업이 자동으로 생성됩니다.", + "backupsAvailable": "{count} 백업 사용 가능", + "refresh": "새로고침", + "confirm": "확인하시겠습니까?", + "yes": "예", + "no": "아니요", + "restore": "복원", + "invalidFileType": "파일 형식이 잘못되었습니다. .sqlite 파일만 허용됩니다.", + "exportFailed": "내보내기 실패", + "exportFailedWithError": "내보내기 실패: {error}", + "fullExportFailedWithError": "전체 내보내기 실패: {error}", + "backupCreated": "생성된 백업: {file}", + "restoreSuccess": "복원되었습니다! {connections} 연결, {nodes} 노드, {combos} 콤보, {apiKeys} API 키.", + "importSuccess": "데이터베이스를 가져왔습니다! {connections} 연결, {nodes} 노드, {combos} 콤보, {apiKeys} API 키.", + "justNow": "지금 막", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "daysAgo": "{count}일 전", + "backupReasonManual": "매뉴얼", + "backupReasonPreRestore": "사전 복원", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "마지막 백업 이후 변경 사항 없음", + "backupFailed": "백업 실패", + "restoreFailed": "복원 실패", + "importFailed": "가져오기 실패", + "errorDuringRestore": "복원 중 오류가 발생했습니다.", + "errorDuringImport": "가져오는 중에 오류가 발생했습니다.", + "modelPricing": "모델 가격", + "modelPricingDesc": "모델별 비용 구성 • 모든 비용은 $/1M 토큰 단위", + "providers": "공급자", + "registry": "레지스트리", + "priced": "가격", + "searchProvidersModels": "공급자 또는 모델 검색...", + "showAll": "모두 표시", + "noProvidersMatch": "검색어와 일치하는 제공업체가 없습니다.", + "howPricingWorks": "가격 책정 방식", + "cacheWrite": "캐시 쓰기", + "unsaved": "저장되지 않은", + "resetDefaults": "기본값 재설정", + "saveProvider": "공급자 저장", + "saving": "저장 중...", + "model": "모델", + "models": "모델", + "moreProviders": "{count} 제공업체 더보기", + "withPricing": "가격이 구성된 경우", + "policiesCircuitBreakers": "정책 및 회로 차단기", + "activeIssuesDetected": "활성 문제가 감지되었습니다.", + "off": "끄기", + "resetPricingConfirm": "{provider}의 모든 가격을 기본값으로 재설정하시겠습니까?", + "pricingDescInput": "입력: 모델에 전송된 토큰", + "pricingDescOutput": "출력: 생성된 토큰", + "pricingDescCached": "캐시됨: 재사용된 입력(입력 속도의 ~50%)", + "pricingDescReasoning": "추론: 사고 토큰(출력으로 대체)", + "pricingDescCacheWrite": "캐시 쓰기: 캐시 항목 생성(입력으로 대체)", + "pricingDescFormula": "비용 = (입력 × 입력 속도) + (출력 × 출력 속도) + (캐시 × 캐시 속도) 백만 토큰당.", + "pricingSettingsTitle": "가격 설정", + "totalModels": "총 모델", + "active": "활성", + "costCalculation": "비용 계산", + "costCalculationDesc": "비용은 토큰 사용량과 각 모델에 구성된 가격 책정 요율을 기준으로 계산됩니다.", + "pricingFormat": "가격 형식", + "pricingFormatDesc": "모든 요율은 $/1M 토큰(백만 토큰당 달러) 단위입니다.", + "tokenTypes": "토큰 유형", + "inputTokenDesc": "표준 프롬프트 토큰", + "outputTokenDesc": "완료/응답 토큰", + "cachedTokenDesc": "캐시된 입력 토큰(일반적으로 입력 속도의 50%)", + "reasoningTokenDesc": "특수 추론/사고 토큰(출력 속도로 대체)", + "cacheCreationTokenDesc": "캐시 항목을 생성하는 데 사용되는 토큰(입력 속도로 대체)", + "customPricingNote": "특정 모델의 기본 가격을 재정의할 수 있습니다. 맞춤 재정의는 자동 감지된 가격보다 우선 적용됩니다.", + "editPricing": "가격 편집", + "viewFullDetails": "전체 세부정보 보기" + }, + "translator": { + "title": "번역기", + "metaTitle": "번역가 놀이터 | 옴니루트", + "metaDescription": "공급자 간의 API 형식 변환을 디버그, 테스트 및 시각화합니다.", + "playgroundTitle": "번역가 놀이터", + "playground": "놀이터", + "realtime": "실시간 번역 활동", + "chatTester": "채팅 테스터", + "testBench": "테스트 벤치", + "liveMonitor": "라이브 모니터", + "modeDescriptionPlayground": "API 요청 본문을 붙여넣고 OmniRoute가 이를 공급자 형식(OpenAI ← Claude ← Gemini ← Responses API) 간에 어떻게 변환하는지 확인하세요.", + "modeDescriptionChatTester": "OmniRoute를 통해 실제 채팅 요청을 보내고 전체 왕복(입력, 번역된 요청, 공급자 응답 및 번역된 출력)을 검사합니다.", + "modeDescriptionTestBench": "사전 정의된 시나리오를 실행하고 공급자와 모델 간의 호환성을 비교하세요.", + "modeDescriptionLiveMonitor": "요청이 OmniRoute를 통해 전달됨에 따라 번역 이벤트를 실시간으로 감시하세요.", + "modeDescriptionFallback": "OmniRoute가 공급자 간 API 요청을 변환하는 방법을 디버그, 테스트 및 시각화합니다.", + "recentTranslations": "최근 번역", + "noTranslations": "아직 번역이 없습니다.", + "source": "소스", + "target": "대상", + "time": "시간", + "model": "모델", + "status": "상태", + "latency": "대기 시간", + "totalTranslations": "총 번역", + "successful": "성공", + "errors": "오류", + "avgLatency": "평균 지연 시간", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "실시간 — 자동 새로고침", + "paused": "일시중지됨", + "eventsAppearHint": "요청이 OmniRoute를 통해 전달될 때 번역 이벤트가 여기에 표시됩니다. 이벤트를 생성하려면 다음 방법 중 하나를 사용하세요.", + "chatTesterTab": "채팅 테스터 탭", + "testBenchTab": "테스트 벤치 탭", + "externalApiCalls": "외부 API 호출", + "ideCliIntegrations": "IDE/CLI 통합", + "inMemoryNote": "참고: 이벤트는 메모리에 저장되며 서버가 다시 시작되면 재설정됩니다.", + "ok": "알았어", + "errorShort": "오류", + "formatConverter": "형식 변환기", + "formatConverterDescription": "JSON 요청 본문을 붙여넣거나 입력하세요. 변환기는 소스 형식을 자동으로 감지하여 대상 형식으로 변환합니다. 이를 사용하여 OmniRoute가 형식(OpenAI ← Claude ⇔ Gemini ⇔ Responses API) 간 요청을 변환하는 방법을 디버깅합니다.", + "input": "입력", + "output": "출력", + "auto": "자동", + "swapFormats": "형식 교환", + "translateAction": "번역하다", + "clear": "지우기", + "inputPlaceholder": "여기에 요청 본문을 붙여넣거나 아래에서 템플릿을 선택하세요...", + "exampleTemplates": "예제 템플릿", + "exampleTemplatesHint": "— 로드하려면 클릭하세요.", + "templateLoadHint": "템플릿은 {format} 형식으로 요청을 로드합니다. 다른 형식으로 로드하려면 소스 형식을 변경하세요.", + "compatibilityTester": "호환성 테스터", + "compatibilityReport": "호환성 보고서", + "testBenchDescription": "사전 정의된 시나리오(간단한 채팅, 도구 호출 등)를 실행하여 번역 및 공급자 호환성을 확인하세요. 소스 형식과 대상 공급자를 선택한 다음 모든 테스트를 실행하여 호환성 비율을 확인하세요. 이를 사용하여 공급자 간에 작동하는 기능을 찾으세요.", + "targetProvider": "대상 제공자", + "runAllTests": "모든 테스트 실행", + "runTest": "테스트 실행", + "reRun": "재실행", + "running": "실행중...", + "passed": "합격", + "failed": "실패했다", + "passedIconLabel": "✅ 합격", + "chunks": "덩어리", + "scenarioSimpleChat": "간단한 채팅", + "scenarioToolCalling": "도구 호출", + "scenarioMultiTurn": "다회전", + "scenarioThinking": "생각", + "scenarioSystemPrompt": "시스템 프롬프트", + "scenarioStreaming": "스트리밍", + "templateNames": { + "simple-chat": "간단한 채팅", + "tool-calling": "도구 호출", + "multi-turn": "다회전", + "thinking": "생각", + "system-prompt": "시스템 프롬프트", + "streaming": "스트리밍" + }, + "templateDescriptions": { + "simple-chat": "기본 문자 메시지", + "tool-calling": "함수/도구 호출", + "multi-turn": "역사와의 대화", + "thinking": "확장된 사고/추론", + "system-prompt": "복잡한 시스템 지침", + "streaming": "SSE 스트리밍 요청" + }, + "templatePayloads": { + "simpleChat": { + "system": "당신은 도움이 되는 조수입니다.", + "userGreeting": "안녕하세요! 오늘 기분이 어떠세요?" + }, + "toolCalling": { + "userWeather": "상파울루 날씨는 어떻습니까?", + "toolDescription": "특정 위치의 현재 날씨 확인", + "cityNameDescription": "도시 이름" + }, + "multiTurn": { + "system": "당신은 코딩 도우미입니다.", + "userInitial": "Python에서 배열을 정렬하는 함수를 작성합니다.", + "assistantExample": "다음은 간단한 정렬 기능입니다.\n\n``파이썬\ndef sort_array(arr):\n 반환 정렬(arr)\n````", + "userFollowUp": "이제 내림차순으로 정렬해 보겠습니다." + }, + "thinking": { + "question": "처음 100개의 소수의 합은 얼마입니까?" + }, + "systemPrompt": { + "systemInstruction": "당신은 분산 시스템을 전문으로 하는 수석 소프트웨어 엔지니어입니다. 업계 모범 사례를 사용하여 질문에 간결하게 답변하세요. 관련이 있는 경우 항상 코드 예제를 제공하세요. 마크다운을 사용하여 응답 형식을 지정하세요.", + "question": "회로 차단기 패턴을 어떻게 구현하나요?" + }, + "streaming": { + "prompt": "그림 그리는 법을 배우는 로봇에 대한 짧은 이야기를 들려주세요." + } + }, + "openaiCompatibleLabel": "OpenAI 호환", + "anthropicCompatibleLabel": "인류 친화적", + "noTemplateForFormat": "이 형식에 대한 템플릿이 없습니다.", + "translationFailed": "번역 실패: {error}", + "pipelineDebugger": "파이프라인 디버거", + "translationPipeline": "번역 파이프라인", + "pipelineVisualization": "파이프라인 시각화", + "pipelineVisualizationHint": "감지 → 번역 → 공급자 호출을 통해 요청이 어떻게 진행되는지 확인하려면 메시지를 보내세요.", + "chatTesterDescription": "특정 클라이언트 형식으로 메시지를 보내고 번역 파이프라인의 각 단계를 검사합니다.", + "chatTesterFlow": "클라이언트 요청 → 형식 감지 → OpenAI Intermediate → 공급자 형식 → 응답", + "clickStepToInspect": "단계를 클릭하면 해당 단계의 데이터를 검사할 수 있습니다.", + "clientFormat": "클라이언트 형식", + "provider": "공급자", + "modelPlaceholder": "모델 이름을 선택하거나 입력하세요...", + "sendMessageToSeePipeline": "번역 파이프라인을 보려면 메시지를 보내세요.", + "chatMessageHintPrefix": "귀하의 메시지는 다음과 같은 형식으로 지정됩니다.", + "chatMessageHintSuffix": "요청하고 파이프라인을 통해 번역되어 선택한 공급자에게 전송됩니다.", + "youWithFormat": "귀하({format})", + "assistant": "어시스턴트", + "typeMessage": "메시지를 입력하세요...", + "send": "보내기", + "clientRequest": "클라이언트 요청", + "clientRequestDescription": "클라이언트가 보내는 요청 본문", + "formatDetected": "형식이 감지되었습니다.", + "formatDetectedDescription": "OmniRoute는 요청 구조에서 API 형식을 자동 감지합니다.", + "openaiIntermediate": "OpenAI 중급", + "openaiIntermediateDescription": "모든 형식은 먼저 OpenAI 형식(범용 브리지)으로 정규화됩니다.", + "providerFormat": "공급자 형식", + "providerFormatDescription": "OpenAI 형식은 공급자의 기본 형식으로 변환됩니다.", + "providerResponse": "제공자 응답", + "providerResponseRawDescription": "공급자 API의 원시 응답", + "providerResponseSseDescription": "공급자 API의 원시 SSE 스트림", + "unexpectedError": "예상치 못한 오류가 발생했습니다.", + "error": "오류", + "errorMessage": "오류: {message}", + "requestFailed": "요청 실패", + "noTextExtracted": "(텍스트가 추출되지 않았습니다)", + "liveMonitorDescriptionPrefix": "OmniRoute를 통한 API 호출 흐름으로 번역 이벤트를 표시합니다. 이벤트는 메모리 내 버퍼에서 발생합니다(다시 시작 시 재설정). 사용", + "liveMonitorDescriptionSuffix": ", 또는 외부 API 호출을 통해 이벤트를 생성합니다." + }, + "usage": { + "title": "사용법", + "loggerTab": "로거", + "proxyTab": "프록시", + "budgetManagement": "예산 관리", + "budgetSaved": "예산 한도가 저장되었습니다.", + "budgetSaveFailed": "예산을 저장하지 못했습니다.", + "loadingBudgetData": "예산 데이터 로드 중...", + "noApiKeysTitle": "API 키 없음", + "noApiKeysDescription": "예산 한도를 설정하려면 먼저 API 키를 추가하세요.", + "apiKey": "API 키", + "todaysSpend": "오늘의 지출", + "thisMonth": "이번 달", + "setLimits": "한도 설정", + "dailyLimitUsd": "일일 한도(USD)", + "monthlyLimitUsd": "월 한도(USD)", + "warningThresholdPercent": "경고 임계값(%)", + "dailyLimitPlaceholder": "예를 들어 5.00", + "monthlyLimitPlaceholder": "예를 들어 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "저장 한도", + "budgetOk": "예산 양호 — {remaining} 남음", + "budgetExceeded": "예산 초과 - 요청이 차단될 수 있음", + "totalRequests": "총 요청수", + "noDataYet": "아직 데이터가 없습니다", + "latency": "대기 시간", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "프롬프트 캐시", + "systemHealth": "시스템 상태", + "entries": "항목", + "activeCount": "{count} 활성", + "openCircuitBreakersDetected": "개방형 회로 차단기가 감지되었습니다.", + "hitRate": "적중률", + "hitsMisses": "안타/실패", + "circuitBreakers": "회로 차단기", + "lockedIPs": "잠긴 IP", + "lockoutsAutoRefreshHint": "모델별 비율 제한 잠금 • 10초 자동 새로고침", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} 남음", + "howItWorks": "작동 방식", + "howItWorksSubtitle": "평가를 통해 LLM 응답을 검증하는 방법 알아보기", + "define": "정의", + "defineStepDescription": "포함, 정규식 또는 정확한 일치와 같은 전략을 사용하여 입력 프롬프트 및 예상 출력 기준으로 테스트 사례를 만듭니다.", + "run": "실행", + "runStepDescription": "OmniRoute를 통해 LLM 엔드포인트에 대해 테스트 케이스를 실행하세요. 각 사례는 실제 API 요청으로 전송됩니다.", + "evaluate": "평가하다", + "evaluateStepDescription": "응답은 예상 기준과 비교됩니다. 지연 시간 측정항목과 자세한 피드백을 통해 각 사례의 통과/실패를 확인하세요.", + "evalSuites": "평가 제품군", + "evalSuitesHint": "제품군을 클릭하여 테스트 사례를 본 다음 실행하여 LLM 엔드포인트를 평가하세요.", + "evalsLoading": "평가 모음 로드 중...", + "noEvalSuitesFound": "평가 제품군을 찾을 수 없습니다.", + "noEvalSuitesDescription": "평가 제품군은 API 또는 코드를 통해 정의할 수 있습니다. 포함, 정규식, 정확한 일치 및 사용자 정의 기능과 같은 전략을 사용하여 예상 결과에 대해 모델 출력을 테스트합니다.", + "columnCase": "케이스", + "columnStatus": "상태", + "columnLatency": "대기 시간", + "columnDetails": "세부정보", + "columnModel": "모델", + "columnStrategy": "전략", + "columnExpected": "예상", + "statsSuites": "스위트", + "statsTestCases": "테스트 케이스", + "statsModels": "모델", + "statsCoverage": "적용 범위", + "statsStrategiesCount": "{count} 전략", + "evaluationStrategies": "평가 전략", + "modelsUnderTest": "테스트 중인 모델", + "searchSuitesPlaceholder": "제품군 검색...", + "passSuffix": "통과", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "평가 실행", + "runningProgress": "{current}/{total} 실행 중...", + "passRate": "합격률", + "summaryBreakdown": "{passed} 통과 · {failed} 실패 · 총 {total}", + "passedIconLabel": "✅ 합격", + "failedIconLabel": "❌ 실패", + "detailsContains": "포함: \"{term}\"", + "detailsRegex": "정규식: {pattern}", + "detailsExpected": "예상: \"{expected}\"", + "noResultsYet": "아직 결과가 없습니다", + "testCasesCount": "테스트 케이스({count})", + "noTestCasesDefined": "정의된 테스트 사례가 없습니다.", + "runEvalHint": "LLM 엔드포인트에 대해 모든 사례를 실행하려면 \"평가 실행\"을 클릭하세요. 각 테스트는 OmniRoute를 통해 실제 요청을 보냅니다.", + "notifyNoTestCases": "이 제품군에 대해 정의된 테스트 사례가 없습니다.", + "notifyAllCasesPassed": "{total} 건 모두 통과됨 ✅", + "notifySomeCasesFailed": "{passed}/{total} 통과, {failed} 실패", + "notifyEvalRunFailed": "평가 실행 실패", + "notifyEvalTitle": "평가: {name}", + "modelEvals": "모델 평가", + "evalsHeroDescription": "사전 정의된 평가 제품군을 실행하여 LLM 엔드포인트를 테스트하고 검증하세요. 각 제품군에는 OmniRoute를 통해 실제 프롬프트를 보내고 예상 기준과 응답을 비교하는 테스트 사례가 포함되어 있어 회귀를 감지하고, 모델을 비교하고, 공급자 전체의 응답 품질을 보장하는 데 도움이 됩니다.", + "qualityValidation": "품질 검증", + "modelComparison": "모델 비교", + "regressionDetection": "회귀 감지", + "latencyBenchmarks": "지연 시간 벤치마크", + "modelLockouts": "모델 잠금", + "noLockouts": "현재 잠긴 모델이 없습니다.", + "activeSessions": "활성 세션", + "noSessions": "활성 세션 없음", + "sessionsHint": "세션은 프록시를 통한 요청 흐름으로 나타납니다.", + "sessionsTrackedHint": "요청 핑거프린팅을 통해 추적됨 • 자동 새로고침 5초", + "session": "세션", + "age": "나이", + "requests": "요청사항", + "connection": "연결", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "공급자 한도", + "noProviders": "연결된 제공업체 없음", + "connectProvidersForQuota": "OAuth를 통해 공급자에 연결하여 API 할당량 한도 및 사용량을 추적하세요.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "({count}에서 필터링됨)", + "autoRefresh": "자동 새로고침", + "refreshAll": "모두 새로 고침", + "loadingQuotas": "로드 중...", + "account": "계정", + "modelQuotas": "모델 할당량", + "lastUsed": "마지막으로 사용됨", + "actions": "작업", + "refreshQuota": "새로고침 할당량", + "today": "오늘", + "tomorrow": "내일", + "dayTimeFormat": "{day}, {time}", + "inDuration": "{duration}에서", + "notApplicable": "해당 없음", + "rawPlanWithValue": "기본 계획: {plan}", + "noPlanFromProvider": "공급자의 계획 없음", + "noQuotaData": "할당량 데이터 없음", + "noQuotaDataAvailable": "사용 가능한 할당량 데이터가 없습니다.", + "noAccountsForTierFilter": "등급 필터에 대한 계정을 찾을 수 없습니다.", + "tierAll": "모두", + "tierEnterprise": "기업", + "tierTeam": "팀", + "tierBusiness": "비즈니스", + "tierUltra": "울트라", + "tierPro": "프로", + "tierPlus": "플러스", + "tierFree": "무료", + "tierUnknown": "알 수 없음" + }, + "modals": { + "waitingAuth": "승인을 기다리는 중", + "verificationUrl": "확인 URL", + "yourCode": "귀하의 코드", + "remoteAccess": "원격 액세스:", + "connectedSuccess": "성공적으로 연결되었습니다!", + "connectionFailed": "연결 실패", + "chooseAuthMethod": "인증 방법을 선택하세요:", + "awsBuilderId": "AWS 빌더 ID", + "awsIamIdentity": "AWS IAM 자격 증명 센터", + "googleAccount": "구글 계정", + "githubAccount": "GitHub 계정", + "importToken": "토큰 가져오기", + "pasteToken": "Kiro IDE에서 새로 고침 토큰을 붙여넣습니다.", + "awsRegion": "AWS 지역", + "autoDetecting": "토큰 자동 감지 중...", + "readingFromCache": "AWS SSO 캐시에서 읽기", + "readingFromCursor": "커서 IDE 데이터베이스에서 읽기", + "initializing": "초기화 중...", + "pricingConfig": "가격 구성", + "loadingPricing": "가격 데이터 로드 중...", + "pricingRatesFormat": "가격 요율 형식", + "noPricingData": "사용 가능한 가격 데이터가 없습니다.", + "noModelsFound": "모델을 찾을 수 없습니다." + }, + "loggers": { + "allProviders": "모든 제공자", + "allModels": "모든 모델", + "allAccounts": "모든 계정", + "allApiKeys": "모든 API 키", + "allTypes": "모든 유형", + "allLevels": "모든 레벨", + "modelAZ": "모델 A-Z", + "modelZA": "모델 Z-A", + "loadingLogs": "로그 로드 중...", + "loadingProxyLogs": "프록시 로그 로드 중...", + "noLogEntries": "로그 항목을 찾을 수 없습니다.", + "noPayloadData": "이 로그 항목에 사용할 수 있는 페이로드 데이터가 없습니다.", + "proxyEvent": "프록시 이벤트", + "proxy": "프록시", + "level": "레벨", + "directNative": "직접(네이티브)", + "combo": "콤보", + "inputTokens": "나:", + "outputTokens": "아:" + }, + "stats": { + "usageOverview": "사용법 개요", + "outputTokens": "출력 토큰", + "totalCost": "총 비용", + "usageByModel": "모델별 사용량", + "usageByAccount": "계정별 사용량", + "failedToLoad": "사용 통계를 로드하지 못했습니다.", + "tokenHealth": "토큰 상태", + "totalOAuth": "총 OAuth", + "healthy": "건강하다", + "warning": "경고", + "errored": "오류 발생", + "lastCheck": "마지막 확인", + "noData": "데이터 없음", + "share": "공유", + "unableToLoad": "시스템 측정항목을 로드할 수 없습니다.", + "product": "제품", + "resources": "자원", + "company": "회사" + }, + "auth": { + "welcome": "환영합니다", + "signIn": "로그인", + "enterPassword": "계속하려면 비밀번호를 입력하세요", + "password": "비밀번호", + "unifiedProxy": "통합 AI API 프록시", + "unifiedAiApiProxy": "통합 AI API 프록시", + "unifiedAiApiProxyDesc": "단일 엔드포인트를 통해 여러 AI 공급자에게 요청을 라우팅합니다. 로드 밸런싱, 장애 조치 및 사용 추적 기능이 내장되어 있습니다.", + "passwordNotEnabled": "비밀번호 보호가 활성화되지 않았습니다.", + "loading": "로드 중...", + "invalidPassword": "잘못된 비밀번호", + "errorOccurredRetry": "오류가 발생했습니다. 다시 시도해 주세요.", + "configureInstance": "OmniRoute 인스턴스를 구성해 보겠습니다.", + "runOnboardingWizard": "온보딩 마법사를 실행하여 비밀번호를 설정하고 첫 번째 AI 공급자를 연결하세요.", + "startOnboarding": "온보딩 시작", + "secureYourInstance": "인스턴스 보안", + "setPasswordDescription": "대시보드를 보호하고 무단 액세스로부터 API 엔드포인트를 보호하기 위해 비밀번호를 설정하세요.", + "configurePassword": "비밀번호 구성", + "continue": "계속", + "windowWillClose": "이 창은 자동으로 닫힙니다...", + "closeTabNow": "이제 이 탭을 닫아도 됩니다.", + "copyUrlManual": "주소 표시줄에서 URL을 복사하여 애플리케이션에 붙여넣으세요.", + "accessDeniedDescription": "이 리소스에 액세스할 수 있는 권한이 없습니다. API 키를 확인하거나 관리자에게 문의하세요.", + "goToDashboard": "대시보드로 이동", + "featureMultiProviderTitle": "다중 공급자", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google 등", + "featureLoadBalancingTitle": "로드 밸런싱", + "featureLoadBalancingDesc": "요청을 지능적으로 분산", + "featureUsageTrackingTitle": "사용량 추적", + "featureUsageTrackingDesc": "비용 및 토큰 모니터링", + "resetPassword": "비밀번호 재설정", + "resetDescription": "대시보드에 대한 액세스를 복구하는 방법을 선택하세요.", + "stopServer": "OmniRoute 서버 중지", + "processing": "처리 중...", + "pleaseWait": "승인이 완료되는 동안 잠시 기다려 주십시오.", + "authSuccess": "승인 성공!", + "copyUrl": "이 URL 복사", + "accessDenied": "액세스가 거부되었습니다.", + "methodCliTitle": "방법 1: CLI 재설정", + "methodCliDescription": "OmniRoute가 실행 중인 서버에서 다음 명령을 실행합니다.", + "methodCliHint": "그러면 새 비밀번호를 설정하라는 메시지가 표시됩니다. 먼저 서버를 중지해야 합니다.", + "methodManualTitle": "방법 2: 수동 재설정", + "methodManualDescription": "데이터베이스에서 비밀번호를 삭제하고 시작 시 새 비밀번호를 설정하세요.", + "setPasswordInYour": "새 비밀번호를 설정하세요.", + "fileLabelSuffix": "파일:", + "newPasswordPlaceholder": "your_new_password", + "deleteSettingsFile": "삭제", + "orRemovePasswordHashField": "또는 PasswordHash 필드를 제거하세요.", + "restartServerWithNewPassword": "서버를 다시 시작하세요. 새 비밀번호가 사용됩니다.", + "backToLogin": "로그인으로 돌아가기", + "forgotPassword": "비밀번호를 잊으셨나요?" + }, + "landing": { + "brandName": "옴니루트", + "navigateHome": "집으로 이동", + "toggleMenu": "토글 메뉴", + "featuresLink": "특징", + "docsLink": "문서", + "github": "GitHub", + "versionLive": "v1.0이 출시되었습니다", + "oneEndpoint": "하나의 엔드포인트", + "allProviders": "모든 AI 제공업체", + "heroDescription": "웹 대시보드가 ​​포함된 AI 엔드포인트 프록시 - CLIProxyAPI의 JavaScript 포트입니다. Claude Code, OpenAI Codex, Cline, RooCode 및 기타 CLI 도구와 원활하게 작동합니다.", + "getStarted": "시작하기", + "viewOnGithub": "GitHub에서 보기", + "powerfulFeatures": "강력한 기능", + "featuresSubtitle": "AI 인프라를 한 곳에서 관리하는 데 필요한 모든 것이 확장 가능하도록 구축되었습니다.", + "featureUnifiedEndpointTitle": "통합 엔드포인트", + "featureUnifiedEndpointDesc": "단일 표준 API URL을 통해 모든 공급자에 액세스합니다.", + "featureEasySetupTitle": "쉬운 설정", + "featureEasySetupDesc": "npx 명령을 사용하여 몇 분 만에 시작하고 실행할 수 있습니다.", + "featureModelFallbackTitle": "모델 대체", + "featureModelFallbackDesc": "장애가 발생하거나 대기 시간이 긴 경우 공급자를 자동으로 전환합니다.", + "featureUsageTrackingTitle": "사용량 추적", + "featureUsageTrackingDesc": "모든 모델에 대한 자세한 분석 및 비용 모니터링.", + "featureOAuthApiKeysTitle": "OAuth 및 API 키", + "featureOAuthApiKeysDesc": "하나의 저장소에서 자격 증명을 안전하게 관리하세요.", + "featureCloudSyncTitle": "클라우드 동기화", + "featureCloudSyncDesc": "여러 장치에서 구성을 즉시 동기화하세요.", + "featureCliSupportTitle": "CLI 지원", + "featureCliSupportDesc": "Claude Code, Codex, Cline, Cursor 등과 함께 작동합니다.", + "featureDashboardTitle": "대시보드", + "featureDashboardDesc": "실시간 트래픽 분석을 위한 시각적 대시보드입니다.", + "howItWorks": "OmniRoute 작동 방식", + "howItWorksDescription": "데이터는 귀하의 애플리케이션에서 당사의 지능형 라우팅 계층을 통해 작업에 가장 적합한 제공업체로 원활하게 흐릅니다.", + "howItWorksStep1Title": "1. CLI 및 SDK", + "howItWorksStep1Description": "귀하의 요청은 귀하가 선호하는 도구 또는 당사의 통합 SDK에서 시작됩니다. 기본 URL만 변경하면 됩니다.", + "howItWorksStep2Title": "2. 옴니루트 허브", + "howItWorksStep2Description": "우리 엔진은 프롬프트를 분석하고 공급자 상태를 확인하며 지연 시간이나 비용이 가장 낮은 경로를 지정합니다.", + "howItWorksStep3Title": "3. AI 제공업체", + "howItWorksStep3Description": "요청은 OpenAI, Anthropic, Gemini 등이 즉시 이행합니다.", + "getStartedIn30Seconds": "30초 안에 시작하세요", + "getStartedDescription": "OmniRoute를 설치하고, 웹 대시보드를 통해 공급자를 구성하고, AI 요청 라우팅을 시작하세요.", + "installOmniRoute": "OmniRoute 설치", + "installStepDescription": "npx 명령을 실행하여 서버를 즉시 시작하세요.", + "openDashboard": "대시보드 열기", + "openDashboardStepDescription": "웹 인터페이스를 통해 공급자 및 API 키 구성", + "routeRequests": "라우팅 요청", + "routeRequestsStepDescription": "CLI 도구를 {endpoint}에 지정하세요.", + "terminal": "터미널", + "copy": "복사", + "copied": "✓ 복사됨", + "startingOmniRoute": "OmniRoute 시작 중...", + "serverRunningOnLabel": "실행 중인 서버", + "dashboardLabel": "대시보드", + "readyToRoute": "라우팅 준비 완료! ✓", + "configureProvidersNote": "📝 대시보드에서 공급자를 구성하거나 환경 변수를 사용하세요.", + "dataLocation": "데이터 위치:", + "dataLocationMacLinux": " 맥OS/리눅스:", + "dataLocationWindows": " 윈도우:", + "product": "제품", + "dashboardLink": "대시보드", + "changelog": "변경 내역", + "resources": "자원", + "documentation": "문서", + "npm": "NPM", + "legal": "법적", + "mitLicense": "MIT 라이센스", + "footerTagline": "AI 생성을 위한 통합 엔드포인트입니다. AI 공급자를 쉽게 연결하고 라우팅하고 관리하세요.", + "copyright": "© {year} OmniRoute. 모든 권리 보유.", + "flowToolClaudeCode": "클로드 코드", + "flowToolOpenAICodex": "오픈AI 코덱스", + "flowToolCline": "클라인", + "flowToolCursor": "커서", + "flowProviderOpenAI": "오픈AI", + "flowProviderAnthropic": "인류학", + "flowProviderGemini": "쌍둥이자리", + "flowProviderGithubCopilot": "GitHub 코파일럿", + "interactiveDiagram": "데스크탑에 표시되는 대화형 다이어그램", + "ctaTitle": "AI 인프라를 단순화할 준비가 되셨나요?", + "ctaDescription": "OmniRoute를 통해 AI 통합을 간소화하는 개발자와 함께하세요. 오픈 소스이며 무료로 시작할 수 있습니다.", + "startFree": "무료로 시작하세요", + "readDocumentation": "문서 읽기" + }, + "docs": { + "title": "문서", + "quickStart": "빠른 시작", + "features": "특징", + "supportedProviders": "지원되는 제공업체", + "supportedProvidersToc": "공급자", + "commonUseCases": "일반적인 사용 사례", + "clientCompatibility": "클라이언트 호환성", + "apiReference": "API 참조", + "method": "방법", + "path": "경로", + "notes": "메모", + "modelPrefixes": "모델 접두어", + "prefix": "접두사", + "troubleshooting": "문제 해결", + "supportsChat": "채팅 및 응답 엔드포인트를 모두 지원합니다.", + "oauthAutoRefresh": "자동 토큰 새로 고침을 통한 OAuth 연결.", + "fullStreaming": "모든 모델에 대한 전체 스트리밍 지원.", + "docsLabel": "문서", + "docsHeroDescription": "다중 공급자 LLM을 위한 AI 게이트웨이. OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor 및 20개 이상의 공급자를 위한 하나의 엔드포인트입니다.", + "openDashboard": "대시보드 열기", + "endpointPage": "엔드포인트 페이지", + "github": "GitHub", + "reportIssue": "문제 보고", + "onThisPage": "이 페이지에서", + "documentationVersion": "문서 - v{version}", + "quickStartStep1Title": "1. 설치 및 실행", + "quickStartStep1Prefix": "실행", + "quickStartStep1Middle": "또는 GitHub에서 복제하여 실행하세요.", + "quickStartStep2Title": "2. API 키 생성", + "quickStartStep2Text": "엔드포인트 -> 등록된 키로 이동합니다. 환경당 하나의 키를 생성합니다.", + "quickStartStep3Title": "3. 공급자 연결", + "quickStartStep3Text": "OAuth 로그인, API 키 또는 무료 계층 자동 연결을 통해 공급자 계정을 추가하세요.", + "quickStartStep4Title": "4. 클라이언트 기본 URL 설정", + "quickStartStep4Prefix": "IDE 또는 API 클라이언트를 다음으로 지정하세요.", + "quickStartStep4Suffix": "예를 들어 공급자 접두사를 사용하십시오.", + "featureRoutingTitle": "다중 공급자 라우팅", + "featureRoutingText": "단일 OpenAI 호환 엔드포인트를 통해 30개 이상의 AI 공급자에게 요청을 라우팅합니다. 채팅, 응답, 오디오 및 이미지 API를 지원합니다.", + "featureCombosTitle": "콤보와 밸런싱", + "featureCombosText": "대체 체인 및 균형 조정 전략(라운드 로빈, 우선 순위, 무작위, 최소 사용, 비용 최적화)을 사용하여 모델 콤보를 만듭니다.", + "featureUsageTitle": "사용량 및 비용 추적", + "featureUsageText": "실시간 토큰 계산, 공급자/모델별 비용 계산, API 키 및 계정별 세부 사용량 분석.", + "featureAnalyticsTitle": "분석 대시보드", + "featureAnalyticsText": "시간 경과에 따른 요청, 토큰, 오류, 대기 시간, 비용 및 모델 인기도에 대한 차트가 포함된 시각적 분석입니다.", + "featureHealthTitle": "건강 모니터링", + "featureHealthText": "실시간 상태 확인, 공급자 상태, 회로 차단기 상태 및 지수 백오프를 통한 자동 속도 제한 감지.", + "featureCliTitle": "CLI 도구", + "featureCliText": "IDE 구성을 관리하고, 백업을 내보내거나 가져오고, 코덱스 프로필을 검색하고, 대시보드에서 설정을 구성하세요.", + "featureSecurityTitle": "보안 및 정책", + "featureSecurityText": "API 키 인증, IP 필터링, 프롬프트 주입 가드, 도메인 정책, 세션 관리 및 감사 로깅.", + "featureCloudSyncTitle": "클라우드 동기화", + "featureCloudSyncText": "암호화된 자격 증명 및 자동 장애 조치를 통해 원격 액세스를 위해 구성을 Cloudflare Workers에 동기화하세요.", + "providersAcrossConnectionTypes": "세 가지 연결 유형에 걸쳐 {count} 공급자.", + "manageProviders": "공급자 관리", + "providersCount": "{count} 제공업체", + "providerTypeFree": "프리 티어", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API 키", + "useCaseSingleEndpointTitle": "많은 공급자를 위한 단일 엔드포인트", + "useCaseSingleEndpointText": "클라이언트를 하나의 기본 URL로 지정하고 모델 접두사(예: gh/, cc/, kr/, openai/)로 라우팅합니다.", + "useCaseFallbackTitle": "콤보를 사용한 폴백 및 모델 전환", + "useCaseFallbackText": "대시보드에서 콤보 모델을 생성하고 공급자가 내부적으로 순환하는 동안 클라이언트 구성을 안정적으로 유지하세요.", + "useCaseUsageVisibilityTitle": "사용량, 비용 및 디버그 가시성", + "useCaseUsageVisibilityText": "사용량 및 분석 탭에서 공급자, 계정, API 키별로 토큰과 비용을 추적하세요.", + "clientCherryStudioTitle": "체리 스튜디오", + "baseUrlLabel": "기본 URL", + "chatEndpointLabel": "채팅 엔드포인트", + "modelRecommendationLabel": "모델 권장사항: 명시적 접두사", + "clientCodexTitle": "Codex / GitHub Copilot 모델", + "clientCodexBullet1": "다음과 함께 모델 ID를 사용하세요.", + "clientCodexBullet2": "Codex 계열 모델은 다음으로 자동 라우팅됩니다.", + "clientCodexBullet3": "비 Codex 모델은 계속됩니다", + "clientCursorTitle": "커서 IDE", + "clientCursorBullet1": "사용", + "clientCursorBullet1Suffix": "커서 모델의 접두사.", + "clientCursorBullet2": "OAuth 연결 - 공급자 페이지에서 로그인합니다.", + "clientClaudeTitle": "클로드 코드 / 반중력", + "clientClaudeBullet1Prefix": "사용", + "clientClaudeBullet1Middle": "(클로드) 또는", + "clientClaudeBullet1Suffix": "(반중력) 접두사.", + "endpointChatNote": "OpenAI 호환 채팅 엔드포인트(기본값)", + "endpointResponsesNote": "응답 API 엔드포인트(Codex, o-시리즈).", + "endpointModelsNote": "연결된 모든 공급자의 모델 카탈로그입니다.", + "endpointAudioNote": "오디오 전사(Deepgram, AssemblyAI).", + "endpointImagesNote": "이미지 생성(NanoBanana).", + "endpointRewriteChatNote": "/v1이 없는 클라이언트용 도우미를 다시 작성합니다.", + "endpointRewriteResponsesNote": "/v1 없이 응답에 대한 도우미를 다시 작성합니다.", + "endpointRewriteModelsNote": "/v1 없이 모델 검색을 위한 도우미를 다시 작성합니다.", + "modelPrefixesDescriptionStart": "특정 공급자로 라우팅하려면 모델 이름 앞에 공급자 접두사를 사용하십시오. 예:", + "modelPrefixesDescriptionEnd": "GitHub Copilot으로 경로를 지정합니다.", + "provider": "공급자", + "type": "유형", + "troubleshootingModelRouting": "클라이언트가 모델 라우팅에 실패하면 명시적인 공급자/모델을 사용하십시오(예: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "모호한 모델 오류가 발생하는 경우 기본 모델 ID 대신 공급자 접두사를 선택하세요.", + "troubleshootingCodexFamily": "GitHub Codex 계열 모델의 경우 모델을 gh/로 유지합니다. 라우터는 /responses를 자동으로 선택합니다.", + "troubleshootingTestConnection": "IDE 또는 외부 클라이언트에서 테스트하기 전에 대시보드 > 공급자 > 연결 테스트를 사용하세요.", + "troubleshootingCircuitBreaker": "공급자가 회로 차단기를 열었다고 표시하는 경우 대기 시간을 기다리거나 상태 페이지에서 자세한 내용을 확인하세요.", + "troubleshootingOAuth": "OAuth 공급자의 경우 토큰이 만료되면 다시 인증하세요. 공급자 카드 상태 표시기를 확인하십시오." + }, + "legal": { + "privacyPolicy": "개인 정보 보호 정책", + "termsOfService": "서비스 약관", + "providerConfigurations": "공급자 구성", + "apiKeys": "API 키", + "usageLogs": "사용 로그", + "applicationSettings": "애플리케이션 설정", + "viewExportAnalytics": "사용량 분석 보기 및 내보내기", + "clearHistory": "언제든지 사용 내역 지우기", + "configureRetention": "로그 보존 정책 구성", + "backupRestore": "데이터베이스 백업 및 복원", + "privacyMetadataTitle": "개인정보 보호정책 | 옴니루트", + "privacyMetadataDescription": "OmniRoute AI API 프록시 라우터에 대한 개인정보 보호정책.", + "termsMetadataTitle": "서비스 약관 | 옴니루트", + "termsMetadataDescription": "OmniRoute AI API 프록시 라우터에 대한 서비스 약관입니다.", + "backToHome": "집으로 돌아가기", + "lastUpdated": "최종 업데이트: {date}", + "policyLastUpdatedDate": "2026년 2월 13일", + "listSeparator": "-", + "questionsVisit": "질문이 있으신가요? 우리를 방문하세요", + "githubRepository": "GitHub 저장소", + "privacySection1Title": "1. 로컬 우선 아키텍처", + "privacySection1Text": "OmniRoute는 로컬 우선 애플리케이션으로 설계되었습니다. 모든 데이터 처리 및 저장은 전적으로 귀하의 컴퓨터에서 이루어집니다. 귀하의 정보를 수집하는 중앙 집중식 서버가 없습니다.", + "privacySection2Title": "2. 당사가 저장하는 데이터", + "privacyDataStoredIn": "다음 데이터는 로컬에 저장됩니다.", + "privacyDataProviderConfigurationsDesc": "연결 URL, 공급자 유형 및 우선순위 설정", + "privacyDataApiKeysDesc": "AI 제공업체 인증을 위해 암호화되어 로컬에 저장됨", + "privacyDataUsageLogsDesc": "요청 수, 토큰 사용량, 모델 이름, 타임스탬프 및 응답 시간", + "privacyDataApplicationSettingsDesc": "테마 기본 설정, 라우팅 전략 및 콤보 구성", + "privacySection3Title": "3. 원격 측정 없음", + "privacySection3Text": "OmniRoute는 원격 측정, 분석 또는 충돌 보고서를 수집하지 않습니다. 어떠한 데이터도 당사나 제3자에게 전송되지 않습니다. 귀하의 사용 패턴, API 호출 및 구성은 완전히 비공개로 유지됩니다.", + "privacySection4Title": "4. 제3자 AI 제공업체", + "privacySection4Text": "OmniRoute를 통해 API 호출을 수행하면 요청은 구성한 AI 공급자(예: OpenAI, Anthropic, Google)로 전달됩니다. 이러한 제공업체는 귀하의 데이터를 처리하는 방법을 관리하는 자체 개인 정보 보호 정책을 가지고 있습니다. 검토해 주십시오:", + "privacyOpenAiPolicy": "OpenAI 개인정보 보호정책", + "privacyAnthropicPolicy": "인류학적 개인정보 보호정책", + "privacyGooglePolicy": "Google 개인정보 보호정책", + "privacySection5Title": "5. 클라우드 동기화(선택 사항)", + "privacySection5Text": "선택적 클라우드 동기화 기능을 활성화하면 공급자 구성 및 API 키가 구성된 클라우드 엔드포인트로 전송될 수 있습니다. 이 기능은 기본적으로 비활성화되어 있으며 명시적인 선택이 필요합니다.", + "privacySection6Title": "6. 로깅", + "privacyLoggingIntro": "요청 로그는 대시보드 설정을 통해 구성할 수 있습니다. 다음을 수행할 수 있습니다.", + "privacySection7Title": "7. 귀하의 권리", + "privacySection7TextStart": "모든 데이터는 로컬에 저장되므로 모든 권한을 가질 수 있습니다. 언제든지 제거하여 데이터를 삭제할 수 있습니다.", + "privacySection7TextEnd": "디렉터리를 사용하거나 대시보드의 데이터베이스 백업 및 복원 기능을 사용합니다.", + "termsSection1Title": "1. 개요", + "termsSection1Text": "OmniRoute는 전적으로 사용자의 머신에서 작동하는 로컬 우선 AI API 프록시 라우터입니다. 로드 밸런싱, 장애 조치 및 사용량 추적을 통해 요청을 여러 AI 공급자에게 라우팅합니다.", + "termsSection2Title": "2. 사용자의 책임", + "termsResponsibilityApiKeys": "제3자 AI 제공업체(OpenAI, Anthropic, Google 등)에 대한 자체 API 키 및 자격 증명을 관리하는 것은 전적으로 귀하의 책임입니다.", + "termsResponsibilityCompliance": "귀하는 OmniRoute를 통해 API에 액세스하는 각 AI 제공업체의 서비스 약관을 준수해야 합니다.", + "termsResponsibilitySecurity": "비밀번호 설정 및 네트워크 액세스 제한을 포함하여 로컬 OmniRoute 설치의 보안에 대한 책임은 귀하에게 있습니다.", + "termsSection3Title": "3. 작동 원리", + "termsSection3Text": "OmniRoute는 중개 프록시 역할을 합니다. OmniRoute로 전송된 API 호출은 변환되어 구성된 AI 공급자에게 전달됩니다. OmniRoute는 필요한 프로토콜 변환 이상으로 요청 또는 응답의 내용을 수정하지 않습니다.", + "termsSection4Title": "4. 데이터 처리", + "termsDataStoredLocally": "모든 데이터는 컴퓨터의 SQLite 데이터베이스에 로컬로 저장됩니다.", + "termsNoTransmission": "OmniRoute는 클라우드 동기화 기능을 명시적으로 활성화하지 않는 한 외부 서버에 데이터를 전송하지 않습니다.", + "termsDataLocationText": "사용 로그, API 키 및 구성은 다음 위치에 저장됩니다.", + "termsSection5Title": "5. 면책조항", + "termsSection5Text": "OmniRoute는 어떠한 종류의 보증도 없이 \"있는 그대로\" 제공됩니다. API 사용, 서비스 중단 또는 데이터 손실로 인해 발생하는 비용에 대해 당사는 책임을 지지 않습니다. 항상 구성의 백업을 유지하십시오.", + "termsSection6Title": "6. 오픈 소스", + "termsSection6Text": "OmniRoute는 오픈 소스 소프트웨어입니다. 라이센스 조건에 따라 자유롭게 검사, 수정 및 배포할 수 있습니다." + } +} diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json new file mode 100644 index 0000000000..6bf615df4b --- /dev/null +++ b/src/i18n/messages/ms.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Jimat", + "cancel": "Batal", + "delete": "Padam", + "loading": "Memuatkan...", + "error": "Ralat berlaku", + "success": "Kejayaan", + "confirm": "Adakah anda pasti?", + "refresh": "Segarkan semula", + "close": "tutup", + "add": "Tambah", + "edit": "Sunting", + "search": "Cari", + "back": "belakang", + "next": "Seterusnya", + "submit": "Hantar", + "reset": "Tetapkan semula", + "copy": "salin", + "copied": "disalin!", + "enabled": "Didayakan", + "disabled": "Dilumpuhkan", + "active": "Aktif", + "inactive": "Tidak aktif", + "noData": "Tiada data tersedia", + "configure": "Konfigurasikan", + "manage": "Urus", + "name": "Nama", + "actions": "Tindakan", + "status": "Status", + "type": "taip", + "model": "Model", + "models": "model", + "provider": "Pembekal", + "account": "Akaun", + "time": "Masa", + "details": "Butiran", + "created": "Dicipta", + "lastUsed": "Terakhir Digunakan", + "loadMore": "Muatkan Lagi", + "noResults": "Tiada hasil ditemui", + "reloadPage": "Muat Semula Halaman", + "connected": "Bersambung", + "disconnected": "Terputus sambungan", + "notConfigured": "Tidak dikonfigurasikan", + "testConnection": "Sambungan Ujian", + "enable": "Dayakan", + "disable": "Lumpuhkan", + "columns": "Lajur", + "newest": "Terbaru", + "oldest": "Tertua", + "all": "Semua", + "none": "tiada", + "yes": "ya", + "no": "Tidak", + "warning": "Amaran", + "note": "Nota", + "free": "Percuma", + "skipToContent": "Langkau ke kandungan" + }, + "sidebar": { + "home": "Rumah", + "dashboard": "Papan pemuka", + "providers": "Pembekal", + "combos": "Kombo", + "usage": "Penggunaan", + "analytics": "Analitis", + "costs": "Kos", + "health": "Kesihatan", + "limits": "Had & Kuota", + "cliTools": "Alat CLI", + "settings": "tetapan", + "translator": "Penterjemah", + "docs": "Dokumen", + "issues": "Isu", + "endpoint": "Titik akhir", + "apiManager": "Pengurus API", + "logs": "Log", + "auditLog": "Log Audit", + "shutdown": "Tutup", + "restart": "Mulakan semula", + "shutdownConfirm": "Tutup OmniRoute?", + "restartConfirm": "Mulakan semula OmniRoute?", + "version": "v{version}", + "debug": "Nyahpepijat", + "system": "Sistem", + "help": "Tolong", + "serverDisconnected": "Pelayan Terputus Sambungan", + "serverDisconnectedMsg": "Pelayan proksi telah dihentikan atau dimulakan semula.", + "expandSidebar": "Kembangkan bar sisi", + "collapseSidebar": "Runtuhkan bar sisi" + }, + "header": { + "logout": "Log keluar", + "language": "Bahasa", + "providers": "Pembekal", + "providerDescription": "Urus sambungan pembekal AI anda", + "combos": "Kombo", + "comboDescription": "Gabungan model dengan sandaran", + "usage": "Penggunaan & Analitis", + "usageDescription": "Pantau penggunaan API anda, penggunaan token dan log permintaan", + "analytics": "Analitis", + "analyticsDescription": "Carta, arah aliran dan cerapan penilaian", + "cliTools": "Alat CLI", + "cliToolsDescription": "Konfigurasikan alatan CLI", + "home": "Rumah", + "homeDescription": "Selamat datang ke OmniRoute", + "endpoint": "Titik akhir", + "endpointDescription": "Konfigurasi titik akhir API", + "settings": "tetapan", + "settingsDescription": "Urus pilihan anda", + "openaiCompatible": "Serasi OpenAI", + "anthropicCompatible": "Serasi Anthropic" + }, + "home": { + "quickStart": "Mula Pantas", + "quickStartDesc": "Bangun dan berlari dalam 4 langkah. Sambungkan pembekal, model laluan, pantau segala-galanya.", + "fullDocs": "Dokumen Penuh", + "step1Title": "1. Cipta kunci API", + "step1Desc": "Pergi ke Endpoint -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.", + "step2Title": "2. Sambungkan pembekal", + "step2Desc": "Tambahkan akaun dalam Providers. Menyokong OAuth, Kunci API dan peringkat percuma.", + "step3Title": "3. Arahkan pelanggan anda", + "step3Desc": "Tetapkan URL asas kepada {url} dalam klien IDE atau API anda.", + "step4Title": "4. Pantau & optimumkan", + "step4Desc": "Jejaki token, kos dan ralat dalam Log Permintaan dan Analytics.", + "providersOverview": "Gambaran Keseluruhan Penyedia", + "configuredOf": "{configured} dikonfigurasikan daripada {total} pembekal yang tersedia", + "noModelsAvailable": "Tiada model tersedia untuk pembekal ini.", + "configureFirst": "Konfigurasikan sambungan dahulu dalam {providers}", + "configureProvider": "Konfigurasikan Pembekal", + "modelAvailable": "{count} model tersedia", + "modelsAvailable": "{count} model tersedia", + "connectionsActive": "{count} sambungan aktif", + "connectionsActivePlural": "{count} sambungan aktif", + "copyModelName": "Salin nama model", + "documentation": "Dokumentasi", + "healthMonitor": "Pemantau Kesihatan", + "reportIssue": "Laporkan isu", + "activeError": "{active} aktif · {errors} ralat", + "oauthLabel": "OAuth", + "apiKeyLabel": "Kunci API", + "requestsShort": "{count} permintaan", + "providerModelsTitle": "{provider} - Model", + "copiedModel": "Disalin: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analitis", + "overviewDescription": "Pantau corak penggunaan API anda, penggunaan token, kos dan aliran aktiviti merentas semua pembekal dan model.", + "evalsDescription": "Jalankan suite penilaian untuk menguji dan mengesahkan titik akhir LLM anda. Bandingkan kualiti model, mengesan regresi dan kependaman penanda aras.", + "overview": "Gambaran keseluruhan", + "evals": "Evals" + }, + "apiManager": { + "title": "Kunci API", + "createKey": "Cipta Kunci API", + "key": "kunci", + "revokeKey": "Batalkan Kunci", + "revokeConfirm": "Adakah anda pasti mahu membatalkan kunci API ini?", + "noKeys": "Tiada kunci API lagi", + "noKeysDesc": "Cipta kunci API pertama anda untuk mengesahkan permintaan ke titik akhir anda", + "keyLabel": "Label Kunci", + "permissions": "kebenaran", + "expiresAt": "tamat tempoh", + "never": "tidak pernah", + "revoke": "Batalkan", + "showKey": "Tunjukkan Kunci", + "hideKey": "Sembunyikan Kunci", + "copyKey": "Salin Kunci API", + "allModels": "Semua model", + "selectedModels": "Model Terpilih", + "readOnly": "Baca Sahaja", + "fullAccess": "Akses Penuh", + "keyManagement": "Pengurusan Kunci API", + "keyManagementDesc": "Buat dan urus kunci API untuk mengesahkan permintaan ke titik akhir anda", + "totalKeys": "Jumlah Kunci", + "restricted": "Terhad", + "totalRequests": "Jumlah Permintaan", + "modelsAvailable": "Model Tersedia", + "registeredKeys": "Kunci Berdaftar", + "keysRegistered": "{count} kunci didaftarkan", + "keyRegistered": "{count} kunci didaftarkan", + "keysSecurityNote": "Setiap kunci mengasingkan penjejakan penggunaan dan boleh dibatalkan secara bebas. Kunci ditutup selepas penciptaan untuk keselamatan.", + "createFirstKey": "Cipta Kunci Pertama Anda", + "name": "Nama", + "usage": "Penggunaan", + "created": "Dicipta", + "actions": "Tindakan", + "reqs": "reqs", + "neverUsed": "Tidak pernah digunakan", + "deleteConfirm": "Padamkan kunci API ini?", + "usageTips": "Petua Penggunaan", + "tipAuth": "Gunakan kunci API dalam pengepala Kebenaran sebagai Pembawa YOUR_KEY", + "tipSecure": "Kunci hanya ditunjukkan sekali semasa penciptaan — simpannya dengan selamat", + "tipSeparate": "Buat kunci berasingan untuk pelanggan atau persekitaran yang berbeza", + "tipRestrict": "Hadkan kunci kepada model tertentu untuk keselamatan dan kawalan kos yang lebih baik", + "keyName": "Nama Kunci", + "keyNamePlaceholder": "cth., Kunci Pengeluaran, Kunci Pembangunan", + "keyNameDesc": "Pilih nama deskriptif untuk mengenal pasti tujuan kunci ini", + "keyCreated": "Kunci API Dicipta", + "keyCreatedSuccess": "Kunci berjaya dibuat!", + "keyCreatedNote": "Salin dan simpan kunci ini sekarang — ia tidak akan ditunjukkan lagi.", + "done": "Selesai", + "savePermissions": "Simpan Kebenaran", + "allowAll": "Benarkan Semua", + "restrict": "Sekat", + "allowAllInfo": "Kunci ini boleh mengakses semua model yang tersedia.", + "restrictInfo": "Kunci ini boleh mengakses {selected} daripada {total} model.", + "selected": "{count} dipilih", + "all": "Semua", + "clear": "Jelas", + "searchModels": "Cari model mengikut nama atau pembekal...", + "noModelsFound": "Tiada model ditemui", + "keyNameRequired": "Nama kunci diperlukan", + "keyNameTooLong": "Nama kunci mestilah {max} aksara atau kurang", + "keyNameInvalid": "Nama kunci hanya boleh mengandungi huruf, nombor, ruang, sempang dan garis bawah", + "invalidKeyName": "Nama kunci tidak sah", + "failedCreateKey": "Gagal mencipta kunci", + "failedCreateKeyRetry": "Gagal mencipta kunci. Sila cuba lagi.", + "invalidKeyId": "ID kunci tidak sah", + "failedDeleteKey": "Gagal memadamkan kunci", + "failedDeleteKeyRetry": "Gagal memadamkan kunci. Sila cuba lagi.", + "invalidModelsSelection": "Pemilihan model tidak sah", + "cannotSelectMoreThanModels": "Tidak boleh memilih lebih daripada {max} model", + "failedUpdatePermissions": "Gagal mengemas kini kebenaran", + "failedUpdatePermissionsRetry": "Gagal mengemas kini kebenaran. Sila cuba lagi.", + "unknownProvider": "tidak diketahui", + "copyMaskedKey": "Salin kunci bertopeng", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Terakhir: {date}", + "editPermissions": "Edit kebenaran", + "deleteKey": "Padam kunci", + "model": "{count} model", + "models": "{count} model", + "permissionsTitle": "Kebenaran: {name}", + "allowAllDesc": "Kunci ini boleh mengakses semua model yang tersedia.", + "restrictDesc": "Kunci ini boleh mengakses {selectedCount} daripada {totalModels} model.", + "selectedCount": "{count} dipilih" + }, + "auditLog": { + "title": "Log Audit", + "searchPlaceholder": "Tindakan carian...", + "action": "Tindakan", + "actor": "pelakon", + "target": "Sasaran", + "ipAddress": "Alamat IP", + "timestamp": "Cap masa", + "noEntries": "Tiada entri audit ditemui", + "filterByAction": "Tapis mengikut tindakan...", + "filterByActor": "Tapis mengikut pelakon...", + "filterEntriesAria": "Tapis entri log audit", + "filterByActionTypeAria": "Tapis mengikut jenis tindakan", + "filterByActorAria": "Tapis mengikut pelakon", + "refreshAuditLogAria": "Muat semula log audit", + "tableAria": "Entri log audit", + "failedFetchAuditLog": "Gagal mengambil log audit", + "notAvailable": "—", + "description": "Tindakan pentadbiran dan acara keselamatan", + "showing": "Menunjukkan entri {count} (mengimbangi {offset})", + "previous": "Sebelumnya" + }, + "cliTools": { + "title": "Alat CLI", + "noActiveProviders": "Tiada pembekal aktif", + "noActiveProvidersDesc": "Sila tambah dan sambungkan pembekal terlebih dahulu untuk mengkonfigurasi alatan CLI.", + "mapModels": "Model Peta", + "testConnection": "Sambungan Ujian", + "connectionStatus": "Status Sambungan", + "configureEndpoint": "Konfigurasikan Titik Akhir", + "instructions": "Arahan", + "modelMapping": "Pemetaan Model", + "baseUrl": "URL asas", + "apiKey": "Kunci API", + "configured": "Dikonfigurasikan", + "notConfigured": "Tidak dikonfigurasikan", + "notInstalled": "Tidak dipasang", + "custom": "Adat", + "unknown": "Tidak diketahui", + "lastSavedAt": "Terakhir disimpan: {date}", + "never": "tidak pernah", + "justNow": "tadi", + "minutesAgoShort": "{count}m yang lalu", + "hoursAgoShort": "{count}j lalu", + "daysAgoShort": "{count}h yang lalu", + "monthsAgoShort": "{count}bln lalu", + "yearsAgoShort": "{count}y yang lalu", + "runtimeCheckFailed": "Semakan masa jalan gagal", + "yourApiKeyPlaceholder": "kunci-api anda", + "modelPlaceholder": "pembekal/model-id", + "configurationSaved": "Konfigurasi berjaya disimpan.", + "failedToSave": "Gagal menyimpan konfigurasi.", + "noApiKeysCreateOne": "Tiada kunci API - Buat satu dalam halaman Kekunci", + "defaultOmnirouteKey": "sk_omniroute (lalai)", + "selectModel": "Pilih Model", + "selectModelForAlias": "Pilih model untuk {alias}", + "selectModelForTool": "Pilih Model untuk {tool}", + "select": "Pilih", + "clear": "Jelas", + "comingSoon": "Akan datang", + "checkingRuntime": "Menyemak status masa jalan...", + "guideOnlyIntegration": "Penyepaduan panduan sahaja (tiada masa jalan tempatan diperlukan)", + "cliRuntimeDetected": "Masa jalan CLI dikesan dan sedia", + "cliFoundNotRunnable": "CLI ditemui tetapi tidak boleh dijalankan{reason}", + "cliRuntimeNotDetected": "Masa jalan CLI tidak dikesan", + "binary": "binari", + "configPath": "Laluan konfigurasi", + "configPathShort": "Konfigurasi", + "failedCheckRuntimeStatus": "Gagal menyemak status masa jalan.", + "copy": "salin", + "copied": "disalin", + "copyConfig": "Salin Konfigurasi", + "saveConfig": "Simpan Konfigurasi", + "selectionSaved": "Pilihan disimpan", + "guide": "Panduan", + "detected": "Dikesan", + "notReady": "Tidak bersedia", + "active": "Aktif", + "inactive": "Tidak aktif", + "startMitm": "Mulakan MITM", + "stopMitm": "Hentikan MITM", + "mitmStarted": "MITM bermula dengan jayanya!", + "mitmStopped": "MITM berjaya berhenti!", + "failedStart": "Gagal memulakan MITM", + "failedStop": "Gagal menghentikan MITM", + "saveMappings": "Simpan Pemetaan", + "mappingsSaved": "Pemetaan disimpan!", + "failedSaveMappings": "Gagal menyimpan pemetaan", + "howItWorks": "Cara ia berfungsi:", + "antigravityHowWorksDesc": "Antigraviti menghantar permintaan ke titik akhir Google. MITM memintas dan mengubah hala mereka ke OmniRoute.", + "antigravityStep1": "1. Mulakan MITM untuk menghalakan permintaan melalui OmniRoute.", + "antigravityStep2Prefix": "2. Tambah", + "antigravityStep2Suffix": "ke fail hos anda sebagai 127.0.0.1.", + "antigravityStep3": "3. Buka Antigraviti dan permintaan akan diproksikan.", + "sudoPasswordRequiredTitle": "Kata Laluan Sudo Diperlukan", + "sudoPasswordHint": "Kata laluan pentadbir diperlukan untuk mengubah suai fail hos dan tetapan proksi sistem.", + "enterSudoPassword": "Masukkan kata laluan sudo", + "sudoPasswordRequiredError": "Kata laluan sudo diperlukan.", + "cancel": "Batal", + "confirm": "sahkan", + "settingsApplied": "Tetapan berjaya digunakan!", + "failedApplySettings": "Gagal menggunakan tetapan", + "settingsReset": "Tetapan berjaya ditetapkan semula!", + "failedResetSettings": "Gagal menetapkan semula tetapan", + "backupRestored": "Sandaran dipulihkan!", + "failedRestore": "Gagal dipulihkan", + "checkingCli": "Menyemak {tool} CLI...", + "cliNotRunnable": "{tool} CLI dipasang tetapi tidak boleh dijalankan", + "cliNotInstalled": "{tool} CLI tidak dipasang", + "cliNotDetected": "{tool} CLI tidak dikesan", + "cliDetectedReady": "{tool} CLI dikesan dan sedia", + "cliFoundFailedHealthcheck": "{tool} CLI ditemui tetapi gagal pemeriksaan kesihatan masa jalan{reason}.", + "installCliPrompt": "Sila pasang {tool} CLI untuk menggunakan ciri ini.", + "installCodexPrompt": "Sila pasang Codex CLI untuk menggunakan ciri autoguna.", + "hide": "Sembunyi", + "howToInstall": "Cara Memasang", + "installationGuide": "Panduan Pemasangan", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Selepas pemasangan, jalankan", + "toVerify": "untuk mengesahkan.", + "current": "semasa", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Tetapkan semula kepada lalai", + "providerModelPlaceholder": "pembekal/model-id", + "apply": "Mohon", + "reset": "Tetapkan semula", + "manualConfig": "Konfigurasi Manual", + "backups": "Sandaran", + "configBackups": "Konfigurasi Sandaran", + "noBackupsYet": "Tiada sandaran lagi. Sandaran dibuat secara automatik sebelum setiap Guna atau Tetapkan Semula.", + "restore": "Pulihkan", + "backupRestoredReloading": "Sandaran dipulihkan! Memuat semula status...", + "failedRestoreBackup": "Gagal memulihkan sandaran", + "applied": "Digunakan!", + "failed": "gagal", + "resetDone": "Tetapkan semula!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasikan sebagai pembekal serasi OpenAI", + "provider": "Pembekal", + "model": "Model", + "providers": "Pembekal", + "auth": "Pengesahan", + "noApiKeysAvailable": "Tiada kunci API tersedia", + "usingDefaultOmniroute": "Menggunakan lalai: sk_omniroute", + "updateConfig": "Kemas kini Konfigurasi", + "applyConfig": "Gunakan Konfigurasi", + "noBackupsAvailable": "Tiada sandaran tersedia.", + "profileSaved": "Profil \"{name}\" disimpan!", + "failedSaveProfile": "Gagal menyimpan profil", + "profileActivated": "Profil diaktifkan!", + "failedActivateProfile": "Gagal mengaktifkan profil", + "profiles": "Profil", + "savedProfiles": "Profil Disimpan", + "noProfilesYet": "Tiada profil disimpan lagi. Simpan konfigurasi semasa sebagai profil di bawah.", + "activate": "Aktifkan", + "deleteProfile": "Padam profil", + "profileNamePlaceholder": "Nama profil (cth. Akaun Peribadi)", + "saveCurrent": "Simpan Semasa", + "codexAuthNotePrefix": "Penggunaan Codex", + "codexAuthNoteMiddle": "dengan", + "codexAuthNoteSuffix": "Klik \"Guna\" untuk konfigurasi automatik.", + "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual", + "codexManualConfiguration": "Codex CLI - Konfigurasi Manual", + "droidManualConfiguration": "Droid Kilang - Konfigurasi Manual", + "openClawManualConfiguration": "Cakar Terbuka - Konfigurasi Manual", + "clineManualConfiguration": "Konfigurasi Manual Cline", + "kiloManualConfiguration": "Konfigurasi Manual Kod Kilo", + "toolDescriptions": { + "antigravity": "IDE Antigraviti Google dengan MITM", + "claude": "Kod Claude Anthropic CLI", + "codex": "OpenAI Codex CLI", + "droid": "Pembantu AI Droid Kilang", + "openclaw": "Buka Pembantu AI Claw", + "cline": "Pembantu Pengekodan AI Cline CLI", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Editor Kod AI Kursor", + "continue": "Teruskan AI Assistant" + }, + "guides": { + "cursor": { + "notes": { + "0": "Memerlukan akaun Cursor Pro untuk menggunakan ciri ini.", + "1": "Laluan kursor meminta melalui pelayannya sendiri, jadi titik akhir setempat tidak disokong. Sila dayakan Cloud Endpoint dalam Tetapan." + }, + "steps": { + "1": { + "title": "Buka Tetapan", + "desc": "Pergi ke Tetapan -> Model" + }, + "2": { + "title": "Dayakan OpenAI API", + "desc": "Dayakan pilihan \"kunci API OpenAI\"." + }, + "3": { + "title": "URL asas" + }, + "4": { + "title": "Kunci API" + }, + "5": { + "title": "Tambah Model Tersuai", + "desc": "Klik \"Lihat Semua Model\" -> \"Tambah Model Tersuai\"" + }, + "6": { + "title": "Pilih Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Buka Konfigurasi", + "desc": "Buka fail konfigurasi Teruskan" + }, + "2": { + "title": "Kunci API" + }, + "3": { + "title": "Pilih Model" + }, + "4": { + "title": "Tambah Konfigurasi Model", + "desc": "Tambahkan konfigurasi berikut pada tatasusunan model anda:" + } + } + } + } + }, + "combos": { + "title": "Kombo", + "description": "Cipta gabungan model dengan penghalaan berwajaran dan sokongan sandaran", + "createCombo": "Buat Combo", + "editCombo": "Edit Kombo", + "deleteCombo": "Padamkan Kombo", + "noModels": "Tiada model", + "noModelsYet": "Tiada model ditambah lagi", + "addModel": "Tambah Model", + "addModelToCombo": "Tambahkan Model pada Combo", + "routingStrategy": "Strategi Penghalaan", + "maxRetries": "Max Cuba Semula", + "timeout": "Tamat masa (ms)", + "healthcheck": "Pemeriksaan kesihatan", + "priority": "Keutamaan", + "fallback": "Fallback", + "roundRobin": "Round Robin", + "random": "rawak", + "leastLatency": "Kependaman Terkecil", + "comboName": "Nama Kombo", + "comboNamePlaceholder": "kombo saya", + "deleteConfirm": "Padamkan kombo ini?", + "noCombosYet": "Tiada kombo lagi", + "comboCreated": "Kombo berjaya dibuat", + "comboUpdated": "Kombo berjaya dikemas kini", + "comboDeleted": "Kombo dipadamkan", + "failedCreate": "Gagal membuat kombo", + "failedUpdate": "Gagal mengemas kini kombo", + "errorCreating": "Ralat membuat kombo", + "errorUpdating": "Ralat mengemas kini kombo", + "errorDeleting": "Ralat memadam kombo", + "testFailed": "Permintaan ujian gagal", + "failedToggle": "Gagal menukar kombo", + "testResults": "Keputusan Ujian — {name}", + "resolvedBy": "diselesaikan oleh:", + "more": "+{count} lagi", + "reqs": "reqs", + "success": "kejayaan", + "proxyConfigured": "Proksi dikonfigurasikan", + "copyComboName": "Salin nama kombo", + "enableCombo": "Dayakan kombo", + "disableCombo": "Lumpuhkan kombo", + "testCombo": "Kombo ujian", + "duplicate": "Pendua", + "proxyConfig": "Konfigurasi proksi", + "nameRequired": "Nama diperlukan", + "nameInvalid": "Hanya huruf, nombor, -, _, / dan . dibenarkan", + "nameHint": "Huruf, nombor, -, _, / dan . dibenarkan", + "priorityDesc": "Saling berurutan: cuba model 1 dahulu, kemudian 2, dsb.", + "weightedDesc": "Mengagihkan trafik mengikut peratusan berat dengan sandaran", + "roundRobinDesc": "Pengedaran pekeliling: setiap permintaan pergi ke model seterusnya secara bergilir", + "randomDesc": "Pemilihan rawak seragam, kemudian sandarkan kepada model yang tinggal", + "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, mengimbangi beban dari semasa ke semasa", + "costOptimizedDesc": "Laluan ke model termurah dahulu berdasarkan harga", + "models": "model", + "autoBalance": "Imbangan automatik", + "advancedSettings": "Tetapan Lanjutan", + "retryDelay": "Cuba Semula Kelewatan (ms)", + "concurrencyPerModel": "Concurrency / Model", + "queueTimeout": "Waktu Beratur (ms)", + "advancedHint": "Biarkan kosong untuk menggunakan lalai global. Ini mengatasi tetapan setiap pembekal.", + "moveUp": "Bergerak ke atas", + "moveDown": "Bergerak ke bawah", + "removeModel": "Alih keluar", + "saving": "Menyimpan...", + "weighted": "Ditimbang", + "leastUsed": "Paling Kurang Digunakan", + "costOpt": "Kos-Opt" + }, + "costs": { + "title": "Kos", + "budget": "Bajet", + "totalCost": "Jumlah Kos", + "breakdown": "Pecahan Kos", + "noData": "Tiada data kos", + "byModel": "Mengikut Model", + "byProvider": "Oleh Pembekal" + }, + "endpoint": { + "title": "Titik Akhir API", + "available": "Titik Akhir Tersedia", + "cloudProxy": "Proksi Awan", + "disableConfirm": "Adakah anda pasti mahu melumpuhkan proksi awan?", + "baseUrl": "URL asas", + "apiKeyLabel": "Kunci API", + "registeredKeys": "Kunci Berdaftar", + "chatCompletions": "Selesai Sembang", + "responses": "Jawapan", + "listModels": "Senaraikan Model", + "usingCloudProxy": "Menggunakan Proksi Awan", + "usingLocalServer": "Menggunakan Pelayan Tempatan", + "machineId": "ID Mesin: {id}...", + "disableCloud": "Lumpuhkan Cloud", + "enableCloud": "Dayakan Cloud", + "modelsAcrossEndpoints": "{models} model merentas {endpoints} titik akhir", + "chatDesc": "Sembang penstriman & bukan penstriman dengan semua pembekal", + "embeddings": "Embeddings", + "embeddingsDesc": "Pembenaman teks untuk carian & saluran paip RAG", + "imageGeneration": "Penjanaan Imej", + "imageDesc": "Hasilkan imej daripada gesaan teks", + "rerank": "Kedudukan semula", + "rerankDesc": "Susun semula dokumen mengikut kaitan dengan pertanyaan", + "audioTranscription": "Transkripsi Audio", + "audioTranscriptionDesc": "Transkripsikan fail audio kepada teks (Bisikan)", + "textToSpeech": "Teks kepada Ucapan", + "textToSpeechDesc": "Tukar teks kepada pertuturan yang berbunyi semula jadi", + "moderations": "Kesederhanaan", + "moderationsDesc": "Penyederhanaan kandungan dan klasifikasi keselamatan", + "enableCloudTitle": "Dayakan Cloud Proxy", + "whatYouGet": "Apa yang anda akan dapat", + "cloudBenefitAccess": "Akses API anda dari mana-mana sahaja di dunia", + "cloudBenefitShare": "Kongsi titik akhir dengan pasukan anda dengan mudah", + "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi tembok api", + "cloudBenefitEdge": "Rangkaian kelebihan global yang pantas", + "cloudSessionNote": "Cloud akan mengekalkan sesi pengesahan anda selama 1 hari. Jika tidak digunakan, ia akan dipadam secara automatik.", + "cloudUnstableNote": "Cloud tidak stabil pada masa ini dengan Claude Code OAuth dalam beberapa kes.", + "cloudConnected": "Proksi Awan disambungkan!", + "connectingToCloud": "Menyambung ke awan...", + "verifyingConnection": "Mengesahkan sambungan...", + "connecting": "Menyambung...", + "verifying": "Mengesahkan...", + "connected": "Bersambung!", + "disableCloudTitle": "Lumpuhkan Proksi Awan", + "disableWarning": "Semua sesi pengesahan akan dipadamkan daripada awan.", + "syncingData": "Menyegerakkan data terkini...", + "disablingCloud": "Melumpuhkan awan...", + "syncing": "Menyegerakkan...", + "disabling": "Melumpuhkan...", + "cloudConnectedVerified": "Cloud Proxy disambungkan dan disahkan!", + "connectedVerificationPending": "Bersambung — pengesahan belum selesai", + "connectedVerificationPendingWithError": "Disambungkan — pengesahan belum selesai: {error}", + "cloudDisabledSuccess": "Cloud berjaya dilumpuhkan", + "syncedSuccess": "Berjaya disegerakkan", + "failedDisable": "Gagal melumpuhkan awan", + "failedEnable": "Gagal mendayakan awan", + "cloudRequestTimeout": "Tamat masa permintaan awan", + "cloudRequestFailed": "Permintaan awan gagal", + "cloudWorkerUnreachable": "Tidak dapat menghubungi pekerja awan. Pastikan perkhidmatan awan sedang berjalan (npm run dev in /cloud).", + "connectionFailed": "Sambungan gagal", + "syncFailed": "Gagal menyegerakkan data awan", + "providerModelsTitle": "{provider} — Model", + "noModelsForProvider": "Tiada model tersedia untuk pembekal ini.", + "chat": "Sembang", + "embedding": "Membenamkan", + "image": "Imej", + "custom": "adat", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Kesihatan Sistem", + "description": "Pemantauan masa nyata bagi tika OmniRoute anda", + "healthy": "Sihat", + "degraded": "Dihina", + "down": "Bawah", + "uptime": "Masa aktif", + "memory": "Ingatan", + "memoryRss": "Memori (RSS)", + "heap": "Timbunan", + "cpu": "CPU", + "database": "Pangkalan data", + "version": "Versi", + "lastCheck": "Semakan Terakhir", + "providerHealth": "Kesihatan Pembekal", + "systemMetrics": "Metrik Sistem", + "tokenHealth": "Kesihatan Token", + "refreshAll": "Muat semula Semua", + "checkNow": "Semak Sekarang", + "loadingHealth": "Memuatkan data kesihatan...", + "failedToLoad": "Gagal memuatkan data kesihatan: {error}", + "retry": "Cuba semula", + "allOperational": "Semua sistem beroperasi", + "issuesDetected": "Isu sistem dikesan", + "updatedAt": "Dikemas kini {time}", + "latency": "Latensi", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Jumlah permintaan", + "noDataYet": "Tiada data lagi", + "promptCache": "Cache Prompt", + "entries": "entri", + "hitRate": "Kadar Hit", + "hitsMisses": "Hit / Rindu", + "signatureCache": "Cache Tandatangan", + "signatureDefaults": "Lalai", + "signatureTool": "alat", + "signatureFamily": "Keluarga", + "signatureSession": "Sesi", + "recovering": "Pulih", + "noCBData": "Tiada data pemutus litar tersedia. Buat beberapa permintaan dahulu.", + "providerHealthStatusAria": "Status kesihatan pembekal", + "issuesLabel": "Isu Dikesan", + "operational": "Beroperasi", + "providers": "Pembekal", + "healthyCount": "{count} sihat", + "nodeVersion": "Nod {version}", + "failures": "{count} kegagalan", + "failuresPlural": "{count} kegagalan", + "lastFailure": "Terakhir", + "rateLimitStatus": "Status Had Kadar", + "activeLimiters": "{count} pengehad aktif", + "activeLimitersPlural": "{count} pengehad aktif", + "queued": "Beratur", + "queuedCount": "{count} beratur", + "running": "berlari", + "runningCount": "{count} berjalan", + "ok": "OK", + "activeLockouts": "Sekatan Aktif", + "resetConfirm": "Tetapkan semula semua pemutus litar kepada keadaan sihat? Ini akan mengosongkan semua kiraan kegagalan dan memulihkan semua pembekal kepada status operasi.", + "resetAllTitle": "Tetapkan semula semua pemutus litar kepada keadaan sihat", + "resetting": "Menetapkan semula...", + "resetAll": "Tetapkan Semula Semua", + "until": "Sehingga {time}" + }, + "limits": { + "title": "Had & Kuota", + "rateLimit": "Had Kadar", + "remaining": "yang tinggal", + "requestsPerMinute": "Permintaan/min", + "tokensPerMinute": "Token/min", + "dailyLimit": "Had Harian" + }, + "logs": { + "title": "Log", + "requestLogs": "Permintaan Log", + "proxyLogs": "Log Proksi", + "auditLog": "Log Audit", + "console": "Konsol", + "auditLogDesc": "Tindakan pentadbiran dan acara keselamatan", + "loading": "Memuatkan...", + "refresh": "Segarkan semula", + "filterByAction": "Tapis mengikut tindakan...", + "filterByActor": "Tapis mengikut pelakon...", + "filterEntriesAria": "Tapis entri log audit", + "filterByActionTypeAria": "Tapis mengikut jenis tindakan", + "filterByActorAria": "Tapis mengikut pelakon", + "refreshAuditLogAria": "Muat semula log audit", + "tableAria": "Entri log audit", + "failedFetchAuditLog": "Gagal mengambil log audit", + "showing": "Menunjukkan entri {count} (mengimbangi {offset})", + "search": "Cari", + "timestamp": "Cap masa", + "action": "Tindakan", + "actor": "pelakon", + "target": "Sasaran", + "details": "Butiran", + "ipAddress": "Alamat IP", + "notAvailable": "—", + "noEntries": "Tiada entri log audit ditemui", + "previous": "Sebelumnya", + "next": "Seterusnya" + }, + "onboarding": { + "welcome": "Selamat datang", + "security": "Keselamatan", + "test": "Ujian", + "ready": "sedia!", + "setPassword": "Tetapkan Kata Laluan", + "addProvider": "Tambahkan pembekal pertama anda", + "getStarted": "Mulakan", + "skip": "Langkau", + "skipWizard": "Langkau wizard sepenuhnya", + "skipPassword": "Langkau persediaan kata laluan", + "skipAndContinue": "Langkau & Teruskan", + "passwordLabel": "Kata laluan", + "confirmPassword": "Sahkan Kata Laluan", + "enterPassword": "Masukkan kata laluan", + "confirmPasswordPlaceholder": "Sahkan kata laluan", + "passwordsMismatch": "Kata laluan tidak sepadan", + "setupComplete": "Persediaan Selesai!", + "goToDashboard": "Pergi ke Papan Pemuka →", + "welcomeDesc": "OmniRoute ialah proksi API AI tempatan anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.", + "multiProvider": "Pelbagai Pembekal", + "usageTracking": "Penjejakan Penggunaan", + "apiKeyMgmt": "Mgmt Kunci API", + "securityDesc": "Tetapkan kata laluan untuk melindungi papan pemuka anda atau langkau buat masa ini.", + "providerDesc": "Sambungkan pembekal AI pertama anda. Anda boleh menambah lagi kemudian.", + "apiKeyRequired": "Kunci API (diperlukan)", + "customUrlOptional": "URL tersuai (pilihan)", + "testDesc": "Mari sahkan sambungan pembekal anda berfungsi.", + "runTest": "Jalankan Ujian Sambungan", + "testingConnection": "Menguji sambungan...", + "connectionSuccessful": "Sambungan berjaya! Pembekal anda sudah bersedia.", + "noProviderFound": "Tiada pembekal ditemui. Anda boleh menambah satu daripada papan pemuka kemudian.", + "testFailed": "Ujian gagal, tetapi anda boleh mengkonfigurasi ini kemudian.", + "couldNotTest": "Tidak dapat menguji sekarang. Anda boleh menguji dari papan pemuka.", + "doneDesc": "Anda sudah bersedia! Contoh OmniRoute anda dikonfigurasikan dan bersedia untuk memproksi permintaan AI.", + "yourEndpoint": "Titik akhir anda:", + "continue": "teruskan", + "retry": "Cuba semula", + "failedSetPassword": "Gagal menetapkan kata laluan. Cuba lagi.", + "failedAddProvider": "Gagal menambah pembekal. Cuba lagi.", + "connectionError": "Ralat sambungan. Sila cuba lagi.", + "provider": "Pembekal" + }, + "providers": { + "title": "Pembekal", + "addProvider": "Tambah Pembekal", + "editProvider": "Edit Pembekal", + "deleteProvider": "Padamkan Pembekal", + "noProviders": "Tiada pembekal dikonfigurasikan", + "modelAvailability": "Ketersediaan Model", + "accounts": "Akaun", + "newAccount": "Akaun Baru", + "deleteConfirm": "Adakah anda pasti mahu memadamkan pembekal ini?", + "testing": "Menguji...", + "testConnection": "Sambungan Ujian", + "testSuccess": "Sambungan berjaya", + "testFailed": "Sambungan gagal", + "available": "Tersedia", + "cooldown": "Cooldown", + "unavailable": "Tidak tersedia", + "unknown": "Tidak diketahui", + "oauthLabel": "OAuth", + "compatibleLabel": "serasi", + "chat": "Sembang", + "responses": "Jawapan", + "messages": "Mesej", + "oauthProviders": "Pembekal OAuth", + "freeProviders": "Pembekal Percuma", + "apiKeyProviders": "Pembekal Kunci API", + "compatibleProviders": "Pembekal Serasi Kunci API", + "testAll": "Uji Semua", + "testAllOAuth": "Uji semua sambungan OAuth", + "testAllFree": "Uji semua sambungan Percuma", + "testAllApiKey": "Uji semua sambungan Kunci API", + "testAllCompatible": "Uji semua sambungan yang Serasi", + "connected": "{count} Disambungkan", + "errorCount": "{count} Ralat ({code})", + "errorCountNoCode": "{count} Ralat", + "noConnections": "Tiada sambungan", + "disabled": "Dilumpuhkan", + "enableProvider": "Dayakan pembekal", + "disableProvider": "Lumpuhkan pembekal", + "testResults": "Keputusan Ujian", + "noCompatibleYet": "Tiada pembekal yang serasi ditambah lagi", + "compatibleHint": "Gunakan butang di atas untuk menambah titik akhir serasi OpenAI atau Anthropic", + "addOpenAICompatible": "Tambah OpenAI Compatible", + "addAnthropicCompatible": "Tambah Anthropic Compatible", + "addNewProvider": "Tambah Penyedia Baharu", + "backToProviders": "Kembali ke Penyedia", + "configureNewProvider": "Konfigurasikan pembekal AI baharu untuk digunakan dengan aplikasi anda.", + "providerLabel": "Pembekal", + "selectProvider": "Pilih pembekal", + "selectedProvider": "Pembekal terpilih", + "authMethod": "Kaedah Pengesahan", + "apiKeyLabel": "Kunci API", + "apiKeyRequired": "Kunci API diperlukan", + "selectProviderRequired": "Sila pilih pembekal", + "enterApiKey": "Masukkan kunci API anda", + "apiKeySecure": "Kunci API anda akan disulitkan dan disimpan dengan selamat.", + "oauth2Connect": "Berhubung dengan OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Sambungkan akaun anda menggunakan pengesahan OAuth2.", + "displayName": "Nama Paparan", + "displayNamePlaceholder": "cth., API Pengeluaran, Persekitaran Dev", + "displayNameHint": "Pilihan. Nama yang mesra untuk mengenal pasti konfigurasi ini.", + "active": "Aktif", + "activeDescription": "Dayakan pembekal ini untuk digunakan dalam aplikasi anda", + "cancel": "Batal", + "createProvider": "Buat Pembekal", + "failedCreate": "Gagal membuat pembekal", + "errorOccurred": "Ralat berlaku. Sila cuba lagi.", + "modelStatus": "Status Model", + "allModelsOperational": "Semua model beroperasi", + "modelsWithIssues": "{count} model dengan isu", + "allModelsNormal": "Semua model bertindak balas secara normal.", + "cooldownCleared": "Cooldown dikosongkan untuk {model}", + "failedClearCooldown": "Gagal mengosongkan cooldown", + "loadingAvailability": "Memuatkan ketersediaan model...", + "clearCooldown": "Jelas", + "clearing": "Membersihkan...", + "until": "Sehingga {time}", + "providerTestFailed": "Ujian pembekal gagal", + "modeTest": "{mode} Ujian", + "passedCount": "{count} lulus", + "failedCount": "{count} gagal", + "testedCount": "{count} diuji", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "RALAT", + "noActiveConnectionsInGroup": "Tiada sambungan aktif ditemui untuk kumpulan ini.", + "allTestsPassed": "Semua ujian {total} lulus", + "testSummary": "{passed}/{total} lulus, {failed} gagal", + "nameLabel": "Nama", + "prefixLabel": "Awalan", + "baseUrlLabel": "URL asas", + "apiTypeLabel": "Jenis API", + "prefixHint": "Diperlukan. Awalan unik untuk nama model.", + "nameHint": "Diperlukan. Label mesra untuk nod ini.", + "baseUrlHint": "Diperlukan.  URL asas API pembekal.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Sahkan Sambungan", + "validating": "Mengesahkan...", + "connectionValid": "Sambungan adalah sah!", + "connectionFailed": "Sambungan gagal. Semak URL dan kunci.", + "testKeyLabel": "Uji Kunci API", + "testKeyPlaceholder": "sk-... (untuk pengesahan sahaja)", + "providerNotFound": "Pembekal tidak ditemui", + "deleteConnectionConfirm": "Padamkan sambungan ini?", + "failedSetAlias": "Gagal menetapkan alias", + "failedSaveConnection": "Gagal menyimpan sambungan", + "failedSaveConnectionRetry": "Gagal menyimpan sambungan. Sila cuba lagi.", + "failedRetestConnection": "Gagal menguji semula sambungan", + "deleteCompatibleNodeConfirm": "Padamkan {type} nod yang serasi ini?", + "anthropicCompatibleDetails": "Butiran Serasi Anthropic", + "openaiCompatibleDetails": "Butiran Serasi OpenAI", + "messagesApi": "API Messages", + "responsesApi": "API Respons", + "chatCompletions": "Selesai Sembang", + "importingModels": "Mengimport...", + "importFromModels": "Import daripada /models", + "addConnectionToImport": "Tambahkan sambungan untuk mendayakan pengimportan.", + "noModelsConfigured": "Tiada model yang dikonfigurasikan", + "connectionCount": "{count} sambungan", + "fetchingModels": "Mengambil model yang tersedia...", + "failedFetchModels": "Gagal mengambil model", + "noModelsFound": "Tiada model ditemui", + "importFailed": "Import gagal", + "noNewModelsAdded": "Tiada model baharu ditambahkan.", + "adding": "Menambah...", + "importingModelsTitle": "Mengimport Model", + "copyModel": "Salin model", + "removeModel": "Alih keluar model", + "rateLimitProtected": "Dilindungi", + "rateLimitUnprotected": "Tidak dilindungi", + "enableRateLimitProtection": "Klik untuk mendayakan perlindungan had kadar", + "disableRateLimitProtection": "Klik untuk melumpuhkan perlindungan had kadar", + "productionKey": "Kunci Pengeluaran", + "enterNewApiKey": "Masukkan kunci API baharu", + "optional": "Pilihan", + "anthropicCompatibleName": "Serasi Anthropic", + "openaiCompatibleName": "Serasi OpenAI", + "failedImportModels": "Gagal mengimport model", + "noModelsReturnedFromEndpoint": "Tiada model dikembalikan dari titik akhir /models.", + "importingModelsProgress": "Mengimport {current} daripada {total} model...", + "foundModelsStartingImport": "Menemui model {count}. Memulakan import...", + "importingModelById": "Mengimport {modelId}...", + "importSuccessCount": "Berjaya mengimport {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Tiada model baharu ditambahkan (semua sudah wujud).", + "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Ralat yang tidak dijangka berlaku", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "mesej", + "responsesPath": "maklum balas", + "chatCompletionsPath": "sembang/penyelesaian", + "add": "Tambah", + "edit": "Sunting", + "delete": "Padam", + "anthropic": "Antropik", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Hanya satu sambungan dibenarkan bagi setiap nod yang serasi. Tambahkan nod lain jika anda memerlukan lebih banyak sambungan.", + "connections": "Sambungan", + "providerProxyTitleConfigured": "Proksi pembekal: {host}", + "configured": "dikonfigurasikan", + "providerProxyConfigureHint": "Konfigurasikan proksi untuk semua sambungan pembekal ini", + "providerProxy": "Proksi Pembekal", + "noConnectionsYet": "Tiada sambungan lagi", + "addFirstConnectionHint": "Tambahkan sambungan pertama anda untuk bermula", + "addConnection": "Tambah Sambungan", + "availableModels": "Model Tersedia", + "pageAutoRefresh": "Halaman akan dimuat semula secara automatik...", + "statusDisabled": "kurang upaya", + "statusConnected": "bersambung", + "statusRuntimeIssue": "isu runtime", + "statusAuthFailed": "pengesahan gagal", + "statusRateLimited": "kadar terhad", + "statusNetworkIssue": "isu rangkaian", + "statusTestUnsupported": "ujian tidak disokong", + "statusUnavailable": "tidak tersedia", + "statusFailed": "gagal", + "statusError": "kesilapan", + "oauthAccount": "Akaun OAuth", + "errorTypeRuntime": "Masa jalan tempatan", + "errorTypeUpstreamAuth": "Pengesahan huluan", + "errorTypeMissingCredential": "Tiada bukti kelayakan", + "errorTypeRefreshFailed": "Muat semula gagal", + "errorTypeTokenExpired": "Token tamat tempoh", + "errorTypeRateLimited": "Kadar terhad", + "errorTypeUpstreamUnavailable": "Hulu tidak tersedia", + "errorTypeNetworkError": "Ralat rangkaian", + "errorTypeTestUnsupported": "Ujian tidak disokong", + "errorTypeUpstreamError": "Ralat huluan", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Pembekal", + "proxySourceKey": "kunci", + "proxyConfiguredBySource": "Proksi ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "proksi", + "retestAuthentication": "Uji semula pengesahan", + "retest": "Uji semula", + "disableConnection": "Lumpuhkan sambungan", + "enableConnection": "Dayakan sambungan", + "reauthenticateConnection": "Sahkan semula sambungan ini", + "proxyConfig": "Konfigurasi proksi", + "aliasExistsAlert": "Alias \"{alias}\" sudah wujud. Sila gunakan model lain atau edit alias sedia ada.", + "openRouterAnyModelHint": "OpenRouter menyokong mana-mana model. Tambah model dan buat alias untuk akses pantas.", + "modelIdFromOpenRouter": "ID Model (dari OpenRouter)", + "openRouterModelPlaceholder": "antropik/claude-3-opus", + "customModels": "Model Tersuai", + "customModelsHint": "Tambahkan ID model yang tiada dalam senarai lalai. Ini akan tersedia untuk penghalaan.", + "modelId": "ID model", + "customModelPlaceholder": "cth. gpt-4.5-turbo", + "loading": "Memuatkan...", + "removeCustomModel": "Alih keluar model tersuai", + "noCustomModels": "Tiada model tersuai ditambahkan lagi.", + "allSuggestedAliasesExist": "Semua alias yang dicadangkan sudah wujud. Sila pilih model lain atau alih keluar alias bercanggah.", + "failedSaveCustomModel": "Gagal menyimpan model tersuai", + "modelAddedSuccess": "Model {modelId} berjaya ditambahkan", + "failedAddModelTryAgain": "Gagal menambah model. Sila cuba lagi.", + "failedSaveImportedModel": "Gagal menyimpan model yang diimport ke pangkalan data tersuai", + "failedImportModelsTryAgain": "Gagal mengimport model. Sila cuba lagi.", + "failedRemoveModelFromDatabase": "Gagal mengalih keluar model daripada pangkalan data", + "modelRemovedSuccess": "Model berjaya dialih keluar", + "failedDeleteModelTryAgain": "Gagal memadamkan model. Sila cuba lagi.", + "compatibleModelsDescription": "Tambah {type}-model yang serasi secara manual atau importnya dari titik akhir /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Pengesahan kunci API gagal. Sila semak kunci anda dan cuba lagi.", + "addProviderApiKeyTitle": "Tambahkan {provider} Kunci API", + "checking": "Menyemak...", + "check": "Semak", + "valid": "sah", + "invalid": "Tidak sah", + "creating": "Mencipta...", + "validationChecksAnthropicCompatible": "Pengesahan menyemak {provider} dengan mengesahkan kunci API.", + "validationChecksOpenAiCompatible": "Semakan pengesahan {provider} melalui /models pada URL asas anda.", + "priorityLabel": "Keutamaan", + "saving": "Menyimpan...", + "save": "Jimat", + "editConnection": "Edit Sambungan", + "accountName": "Nama akaun", + "email": "E-mel", + "healthCheckMinutes": "Pemeriksaan Kesihatan (min)", + "healthCheckHint": "Selang penyegaran token proaktif. 0 = kurang upaya.", + "failedTestConnection": "Gagal menguji sambungan", + "failed": "gagal", + "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mengekalkan kunci API semasa.", + "editCompatibleTitle": "Edit {type} Serasi", + "compatibleBaseUrlHint": "Gunakan URL asas (berakhir dengan /v1) untuk API serasi {type} anda.", + "apiKeyForCheck": "Kunci API (untuk Semakan)", + "compatibleProdPlaceholder": "{type} Serasi (Prod)" + }, + "settings": { + "title": "tetapan", + "general": "Umum", + "security": "Keselamatan", + "appearance": "Penampilan", + "routing": "Penghalaan", + "cache": "Cache", + "resilience": "Ketahanan", + "systemPrompt": "Gesaan Sistem", + "thinkingBudget": "Belanjawan Berfikir", + "proxy": "proksi", + "pricing": "penentuan harga", + "storage": "Penyimpanan", + "policies": "dasar", + "ipFilter": "Penapis IP", + "comboDefaults": "Kombo Lalai", + "fallbackChains": "Rantai Fallback", + "changePassword": "Tukar Kata Laluan", + "enablePassword": "Dayakan Kata Laluan", + "darkMode": "Mod Gelap", + "lightMode": "Mod Cahaya", + "systemTheme": "Tema Sistem", + "enableCache": "Dayakan Cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Saiz Cache Maks", + "clearCache": "Kosongkan Cache", + "cacheHits": "Cache Hits", + "cacheMisses": "Cache Rindu", + "hitRate": "Kadar Hit", + "cacheEntries": "Entri Cache", + "circuitBreaker": "Pemutus Litar", + "retryPolicy": "Dasar Cuba semula", + "maxRetries": "Max Cuba Semula", + "retryDelay": "Cuba Semula Kelewatan", + "timeoutMs": "Tamat masa (ms)", + "enableSystemPrompt": "Dayakan Sistem Prompt", + "systemPromptText": "Teks Gesaan Sistem", + "enableThinking": "Dayakan Berfikir", + "maxThinkingTokens": "Token Pemikiran Maks", + "enableProxy": "Dayakan Proksi", + "proxyUrl": "URL proksi", + "pricingRates": "Format Kadar Harga", + "currentPricing": "Gambaran Keseluruhan Harga Semasa", + "loadingPricing": "Memuatkan data harga...", + "noPricing": "Tiada data harga tersedia", + "input": "Input", + "output": "Keluaran", + "cached": "Dicache", + "reasoning": "Penaakulan", + "cacheCreation": "Penciptaan Cache", + "customPricing": "Harga Tersuai", + "databaseSize": "Saiz Pangkalan Data", + "backupDb": "Pangkalan Data Sandaran", + "restoreDb": "Pulihkan Pangkalan Data", + "exportData": "Eksport Data", + "importData": "Import Data", + "clearData": "Kosongkan Semua Data", + "clearDataConfirm": "Ini akan memadamkan semua data secara kekal. Adakah anda pasti?", + "enableRequestLogs": "Dayakan Log Permintaan", + "logRetention": "Pengekalan Log", + "ipWhitelist": "Senarai Putih IP", + "ipBlacklist": "Senarai Hitam IP", + "addIP": "Tambah IP", + "savedSuccessfully": "Tetapan berjaya disimpan", + "ai": "AI", + "advanced": "Maju", + "localMode": "Mod Setempat — Semua data yang disimpan pada mesin anda", + "settingsSectionsAria": "Bahagian tetapan", + "switchThemes": "Beralih antara tema terang dan gelap", + "themeSelectionAria": "Pemilihan tema", + "themeLight": "Cahaya", + "themeDark": "Gelap", + "themeSystem": "Sistem", + "hideHealthLogs": "Sembunyikan Log Pemeriksaan Kesihatan", + "hideHealthLogsDesc": "Apabila HIDUP, sekat mesej [HealthCheck] dalam konsol pelayan", + "promptCache": "Cache Prompt", + "flushCache": "Flush Cache", + "flushing": "Membilas…", + "size": "Saiz", + "hits": "Hits", + "evictions": "Pengusiran", + "loadingCacheStats": "Memuatkan statistik cache…", + "globalProxy": "Proksi Global", + "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Pembekal individu, kombo dan kunci boleh mengatasi perkara ini.", + "noGlobalProxy": "Tiada proksi global dikonfigurasikan", + "globalLabel": "Global", + "configure": "Konfigurasikan", + "globalSystemPrompt": "Gesaan Sistem Global", + "systemPromptDesc": "Disuntik ke dalam semua permintaan di peringkat proksi", + "saved": "Disimpan", + "systemPromptPlaceholder": "Masukkan gesaan sistem untuk memasukkan semua permintaan...", + "systemPromptHint": "Gesaan ini disertakan pada mesej sistem setiap permintaan. Gunakan untuk arahan global, garis panduan keselamatan atau peraturan pemformatan respons.", + "chars": "{count} aksara", + "thinkingBudgetTitle": "Belanjawan Berfikir", + "thinkingBudgetDesc": "Kawal penggunaan token penaakulan AI merentas semua permintaan", + "passthrough": "Laluan", + "passthroughDesc": "Tiada perubahan — pelanggan mengawal belanjawan berfikir", + "auto": "Auto", + "autoDesc": "Keluarkan semua konfigurasi pemikiran — biarkan pembekal memutuskan", + "custom": "Adat", + "customDesc": "Tetapkan belanjawan token tetap untuk semua permintaan", + "adaptive": "Adaptif", + "adaptiveDesc": "Skala belanjawan berdasarkan kerumitan permintaan", + "effortNone": "Tiada (0 token)", + "effortLow": "Rendah (1K token)", + "effortMedium": "Sederhana (10K token)", + "effortHigh": "Tinggi (128K token)", + "tokenBudget": "Belanjawan Token", + "tokens": "token", + "baseEffortLevel": "Tahap Usaha Asas", + "adaptiveHint": "Skala mod penyesuaian dari tahap asas ini berdasarkan kiraan mesej, penggunaan alat dan panjang segera.", + "requireLogin": "Memerlukan log masuk", + "requireLoginDesc": "Apabila HIDUP, papan pemuka memerlukan kata laluan. Apabila MATI, akses tanpa log masuk.", + "currentPassword": "Kata Laluan Semasa", + "enterCurrentPassword": "Masukkan kata laluan semasa", + "newPassword": "Kata Laluan Baharu", + "enterNewPassword": "Masukkan kata laluan baharu", + "confirmPassword": "Sahkan Kata Laluan Baharu", + "confirmPasswordPlaceholder": "Sahkan kata laluan baharu", + "passwordsNoMatch": "Kata laluan tidak sepadan", + "passwordUpdated": "Kata laluan berjaya dikemas kini", + "failedUpdatePassword": "Gagal mengemas kini kata laluan", + "errorOccurred": "Ralat berlaku", + "updatePassword": "Kemas kini Kata Laluan", + "setPassword": "Tetapkan Kata Laluan", + "apiEndpointProtection": "Perlindungan Titik Akhir API", + "requireAuthModels": "Memerlukan kunci API untuk /models", + "requireAuthModelsDesc": "Apabila HIDUP, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak disahkan. Menghalang penemuan model oleh pengguna yang tidak dibenarkan.", + "blockedProviders": "Penyedia yang disekat", + "blockedProvidersDesc": "Sembunyikan pembekal tertentu daripada respons /v1/models. Penyedia yang disekat tidak akan muncul dalam penyenaraian model.", + "providersBlocked": "{count} pembekal disekat daripada /models", + "blockProviderTitle": "Sekat {provider}", + "unblockProviderTitle": "Nyahsekat {provider}", + "routingStrategy": "Strategi Penghalaan", + "fillFirst": "Isi dahulu", + "fillFirstDesc": "Gunakan akaun dalam susunan keutamaan", + "roundRobin": "Round Robin", + "roundRobinDesc": "Kitaran melalui semua akaun", + "p2c": "P2C", + "p2cDesc": "Pilih 2 secara rawak, gunakan yang lebih sihat", + "random": "rawak", + "randomDesc": "Akaun rawak setiap permintaan", + "leastUsed": "Paling Kurang Digunakan", + "leastUsedDesc": "Pilih akaun yang paling kurang digunakan baru-baru ini", + "costOpt": "Pilihan Kos", + "costOptDesc": "Pilih akaun termurah yang tersedia", + "stickyLimit": "Had Melekit", + "stickyLimitDesc": "Panggilan setiap akaun sebelum bertukar", + "modelAliases": "Alias Model", + "modelAliasesDesc": "Corak kad liar untuk memetakan semula nama model • Gunakan * dan ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Corak", + "targetModel": "Model Sasaran", + "add": "+ Tambah", + "session": "Sesi", + "sessionDetailsAria": "Butiran sesi", + "status": "Status", + "authenticated": "Disahkan", + "guest": "tetamu", + "loginTime": "Masa Log Masuk", + "sessionAge": "Umur Sesi", + "browser": "pelayar", + "clearLocalData": "Kosongkan Data Tempatan", + "logout": "Log keluar", + "clearLocalDataConfirm": "Kosongkan semua data setempat? Ini akan menetapkan semula pilihan anda.", + "unknown": "Tidak diketahui", + "systemActor": "sistem", + "ipAccessControl": "Kawalan Capaian IP", + "ipAccessControlDesc": "Sekat atau benarkan alamat IP tertentu", + "ipModeDisabled": "Dilumpuhkan", + "ipModeBlacklist": "Senarai hitam", + "ipModeWhitelist": "Senarai putih", + "ipModeWhitelistPriority": "Keutamaan WL", + "addIpAddress": "Tambah Alamat IP", + "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*", + "block": "+ Sekat", + "allow": "+ Benarkan", + "blocked": "Disekat ({count})", + "allowed": "Dibenarkan ({count})", + "temporaryBans": "Larangan Sementara ({count})", + "minLeft": "{min}m lagi", + "auditLog": "Log Audit", + "searchAuditLogs": "Cari log audit...", + "failedLoadAuditLog": "Gagal memuatkan log audit", + "noAuditEvents": "Tiada acara audit ditemui", + "action": "Tindakan", + "actor": "pelakon", + "details": "Butiran", + "time": "Masa", + "fallbackChainsTitle": "Rantai Fallback", + "fallbackChainsDesc": "Tentukan pesanan sandaran pembekal bagi setiap model", + "addChain": "+ Tambah Rantaian", + "modelName": "Nama Model", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam susunan keutamaan)", + "providersCommaSeparatedPlaceholder": "antropik, openai, gemini", + "createChain": "Buat Rantaian", + "noFallbackChains": "Tiada Rantai Fallback", + "noFallbackChainsDesc": "Buat rantaian untuk menentukan pesanan sandaran pembekal untuk model.", + "loadingFallbackChains": "Memuatkan rantaian sandaran...", + "deleteChainConfirm": "Padamkan rantaian sandaran untuk \"{model}\"?", + "chainCreated": "Rantaian dibuat untuk {model}", + "chainDeleted": "Rantaian dipadamkan untuk {model}", + "failedCreateChain": "Gagal membuat rantaian", + "failedDeleteChain": "Gagal memadamkan rantai", + "deleteChain": "Padamkan rantai", + "fillModelAndProviders": "Sila isi nama model dan pembekal", + "addAtLeastOneProvider": "Tambah sekurang-kurangnya satu pembekal", + "comboDefaultsTitle": "Kombo Lalai", + "globalComboConfig": "Konfigurasi kombo global", + "defaultStrategy": "Strategi Lalai", + "defaultStrategyDesc": "Digunakan pada kombo baharu tanpa strategi yang jelas", + "comboStrategyAria": "Strategi kombo", + "priority": "Keutamaan", + "weighted": "Ditimbang", + "maxRetriesLabel": "Max Cuba Semula", + "retryDelayLabel": "Cuba Semula Kelewatan (ms)", + "timeoutLabel": "Tamat masa (ms)", + "healthCheck": "Pemeriksaan Kesihatan", + "healthCheckDesc": "Prasemak ketersediaan pembekal", + "trackMetrics": "Metrik Jejak", + "trackMetricsDesc": "Catatkan metrik permintaan setiap kombo", + "providerOverrides": "Penggantian Pembekal", + "providerOverridesDesc": "Gantikan tamat masa dan cuba semula setiap pembekal. Tetapan pembekal mengatasi lalai global.", + "providerMaxRetriesAria": "{provider} percubaan semula maks", + "providerTimeoutAria": "{provider} tamat masa ms", + "removeProviderOverrideAria": "Alih keluar {provider} override", + "newProviderNamePlaceholder": "cth. google, openai...", + "newProviderNameAria": "Nama pembekal baharu", + "retries": "mencuba semula", + "ms": "ms", + "saveComboDefaults": "Simpan Combo Lalai", + "maxNestingDepth": "Kedalaman Bersarang Maks", + "concurrencyPerModel": "Concurrency / Model", + "queueTimeout": "Waktu Beratur (ms)", + "providerProfiles": "Profil Pembekal", + "providerProfilesDesc": "Tetapan daya tahan yang berasingan untuk pembekal OAuth (berasaskan sesi) dan Kunci API (bermeter). Pembekal OAuth mempunyai ambang yang lebih ketat disebabkan oleh had kadar yang lebih rendah.", + "oauthProviders": "Pembekal OAuth", + "apiKeyProviders": "Pembekal Kunci API", + "transientCooldown": "Cooldown Sementara", + "rateLimitCooldown": "Sejuk Had Kadar", + "maxBackoffLevel": "Tahap Backoff Maks", + "cbThreshold": "Ambang CB", + "cbResetTime": "Masa Tetapan Semula CB", + "rateLimiting": "Mengehadkan Kadar", + "rateLimitingDesc": "Pembekal Kunci API dihadkan kadar secara automatik dengan lalai yang selamat. Had dipelajari daripada pengepala respons dan menyesuaikan diri dari semasa ke semasa.", + "defaultSafetyNet": "Jaringan Keselamatan Lalai", + "rpm": "RPM", + "minGap": "Jurang Min", + "maxConcurrent": "Serentak Maks", + "activeLimiters": "Penghad Aktif", + "noActiveLimiters": "Tiada pengehad kadar aktif lagi.", + "reservoir": "takungan", + "running": "Berlari", + "queued": "Beratur", + "circuitBreakers": "Pemutus Litar", + "breakerStateClosed": "tertutup", + "breakerStateOpen": "Buka", + "breakerStateHalfOpen": "Separuh Terbuka", + "tripped": "{count} tersandung", + "healthy": "{count} sihat", + "resetAll": "Tetapkan Semula Semua", + "noCircuitBreakers": "Tiada pemutus litar aktif lagi. Ia dicipta secara automatik apabila permintaan mengalir melalui saluran paip kombo.", + "failures": "{count} kegagalan", + "policiesLocked": "Dasar & Pengecam Terkunci", + "allOperational": "Semua sistem beroperasi — tiada penguncian atau pemutus tersandung", + "loadingPolicies": "Memuatkan dasar...", + "lockedIdentifiers": "Pengecam Terkunci", + "unlockedIdentifier": "Dibuka kunci: {identifier}", + "sinceDate": "sejak {date}", + "forceUnlock": "Paksa Buka Kunci", + "unlocking": "Membuka kunci...", + "failedUnlock": "Gagal membuka kunci", + "failedLoadWithStatus": "Gagal memuatkan: {status}", + "failedLoadResilience": "Gagal memuatkan status daya tahan", + "saveFailed": "Simpan gagal", + "resetFailed": "Tetapan semula gagal", + "loadingResilience": "Memuatkan status daya tahan...", + "retry": "Cuba semula", + "systemStorage": "Sistem & Storan", + "allDataLocal": "Semua data disimpan secara setempat pada mesin anda", + "databasePath": "Laluan Pangkalan Data", + "exportDatabase": "Eksport Pangkalan Data", + "exportAll": "Eksport Semua (.tar.gz)", + "importDatabase": "Import Pangkalan Data", + "confirmDbImport": "Sahkan Import Pangkalan Data", + "confirmDbImportDesc": "Ini akan menggantikan semua data semasa dengan kandungan daripada {file}. Sandaran akan dibuat secara automatik sebelum import.", + "yesImport": "Ya, Import", + "lastBackup": "Sandaran Terakhir", + "noBackupYet": "Tiada sandaran lagi", + "backupNow": "Sandaran Sekarang", + "backupRestore": "Sandaran & Pulihkan", + "viewBackups": "Lihat Sandaran", + "hide": "Sembunyi", + "backupRetentionDesc": "Syot kilat pangkalan data dibuat secara automatik sebelum dipulihkan dan setiap 15 minit apabila data berubah. Pengekalan: 24 jam + 30 sandaran harian dengan putaran pintar.", + "loadingBackups": "Memuatkan sandaran...", + "noBackupsYet": "Tiada sandaran tersedia lagi. Sandaran akan dibuat secara automatik apabila data berubah.", + "backupsAvailable": "{count} sandaran tersedia", + "refresh": "Segarkan semula", + "confirm": "Sahkan?", + "yes": "ya", + "no": "Tidak", + "restore": "Pulihkan", + "invalidFileType": "Jenis fail tidak sah. Hanya fail .sqlite diterima.", + "exportFailed": "Eksport gagal", + "exportFailedWithError": "Eksport gagal: {error}", + "fullExportFailedWithError": "Eksport penuh gagal: {error}", + "backupCreated": "Sandaran dibuat: {file}", + "restoreSuccess": "Dipulihkan! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.", + "importSuccess": "Pangkalan data diimport! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.", + "justNow": "tadi", + "minutesAgo": "{count}m yang lalu", + "hoursAgo": "{count}j lalu", + "daysAgo": "{count}h yang lalu", + "backupReasonManual": "manual", + "backupReasonPreRestore": "pra-pemulihan", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Tiada perubahan sejak sandaran terakhir", + "backupFailed": "Sandaran gagal", + "restoreFailed": "Pemulihan gagal", + "importFailed": "Import gagal", + "errorDuringRestore": "Ralat berlaku semasa pemulihan", + "errorDuringImport": "Ralat berlaku semasa import", + "modelPricing": "Harga Model", + "modelPricingDesc": "Konfigurasikan kadar kos setiap model • Semua kadar dalam token $/1J", + "providers": "Pembekal", + "registry": "Pendaftaran", + "priced": "Berharga", + "searchProvidersModels": "Cari pembekal atau model...", + "showAll": "Tunjukkan Semua", + "noProvidersMatch": "Tiada pembekal yang sepadan dengan carian anda.", + "howPricingWorks": "Cara Harga Berfungsi", + "cacheWrite": "Tulis Cache", + "unsaved": "belum disimpan", + "resetDefaults": "Tetapkan Semula Lalai", + "saveProvider": "Simpan Penyedia", + "saving": "Menyimpan...", + "model": "Model", + "models": "model", + "moreProviders": "{count} lagi pembekal", + "withPricing": "dengan penetapan harga dikonfigurasikan", + "policiesCircuitBreakers": "Polisi & Pemutus Litar", + "activeIssuesDetected": "Isu aktif dikesan", + "off": "Mati", + "resetPricingConfirm": "Tetapkan semula semua harga untuk {provider} kepada lalai?", + "pricingDescInput": "Input: token dihantar kepada model", + "pricingDescOutput": "Output: token dijana", + "pricingDescCached": "Dicache: input yang digunakan semula (~50% daripada kadar input)", + "pricingDescReasoning": "Penaakulan: token pemikiran (kembali kepada Output)", + "pricingDescCacheWrite": "Cache Write: mencipta entri cache (kembali ke Input)", + "pricingDescFormula": "Kos = (input × input_rate) + (output × output_rate) + (cached × cached_rate) setiap juta token.", + "pricingSettingsTitle": "Tetapan Harga", + "totalModels": "Jumlah Model", + "active": "Aktif", + "costCalculation": "Pengiraan Kos", + "costCalculationDesc": "Kos dikira berdasarkan penggunaan token dan kadar harga yang dikonfigurasikan untuk setiap model.", + "pricingFormat": "Format Harga", + "pricingFormatDesc": "Semua kadar adalah dalam token $/1J (dolar per juta token).", + "tokenTypes": "Jenis Token", + "inputTokenDesc": "Token gesaan standard", + "outputTokenDesc": "Token penyiapan/tindak balas", + "cachedTokenDesc": "Token input dicache (biasanya 50% daripada kadar input)", + "reasoningTokenDesc": "Token penaakulan/pemikiran khas (sandaran kepada kadar keluaran)", + "cacheCreationTokenDesc": "Token yang digunakan untuk mencipta entri cache (sandar kepada kadar input)", + "customPricingNote": "Anda boleh mengatasi harga lalai untuk model tertentu. Penggantian tersuai diutamakan berbanding harga yang dikesan secara automatik.", + "editPricing": "Edit Harga", + "viewFullDetails": "Lihat Butiran Penuh" + }, + "translator": { + "title": "Penterjemah", + "metaTitle": "Taman Permainan Penterjemah | OmniRoute", + "metaDescription": "Nyahpepijat, menguji dan memvisualisasikan terjemahan format API antara pembekal", + "playgroundTitle": "Taman Permainan Penterjemah", + "playground": "Taman permainan", + "realtime": "Aktiviti Terjemahan Masa Nyata", + "chatTester": "Penguji Sembang", + "testBench": "Bangku Ujian", + "liveMonitor": "Monitor Langsung", + "modeDescriptionPlayground": "Tampal sebarang badan permintaan API dan lihat cara OmniRoute menterjemahkannya antara format pembekal (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Hantar permintaan sembang sebenar melalui OmniRoute dan periksa perjalanan pergi balik penuh: input, permintaan terjemahan, respons pembekal dan output terjemahan.", + "modeDescriptionTestBench": "Jalankan senario yang dipratentukan dan bandingkan keserasian merentas pembekal dan model.", + "modeDescriptionLiveMonitor": "Tonton acara terjemahan dalam masa nyata apabila permintaan mengalir melalui OmniRoute.", + "modeDescriptionFallback": "Nyahpepijat, uji dan gambarkan cara OmniRoute menterjemah permintaan API antara pembekal.", + "recentTranslations": "Terjemahan Terkini", + "noTranslations": "Tiada terjemahan lagi", + "source": "Sumber", + "target": "Sasaran", + "time": "Masa", + "model": "Model", + "status": "Status", + "latency": "Latensi", + "totalTranslations": "Jumlah Terjemahan", + "successful": "Berjaya", + "errors": "Kesilapan", + "avgLatency": "Purata Latensi", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Langsung — Auto muat semula", + "paused": "Dijeda", + "eventsAppearHint": "Peristiwa terjemahan muncul di sini apabila permintaan mengalir melalui OmniRoute. Gunakan mana-mana kaedah ini untuk menjana acara:", + "chatTesterTab": "Tab Penguji Sembang", + "testBenchTab": "Tab Ujian Bangku", + "externalApiCalls": "Panggilan API luaran", + "ideCliIntegrations": "Penyepaduan IDE/CLI", + "inMemoryNote": "Nota: Peristiwa disimpan dalam memori dan ditetapkan semula apabila pelayan dimulakan semula.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Penukar Format", + "formatConverterDescription": "Tampal atau taip badan permintaan JSON. Penterjemah akan mengesan format sumber secara automatik dan menukarnya kepada format sasaran. Gunakan ini untuk nyahpepijat cara OmniRoute menterjemah permintaan antara format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Input", + "output": "Keluaran", + "auto": "Auto", + "swapFormats": "Tukar format", + "translateAction": "Terjemah", + "clear": "Jelas", + "inputPlaceholder": "Tampalkan badan permintaan di sini atau pilih templat di bawah...", + "exampleTemplates": "Contoh Templat", + "exampleTemplatesHint": "— Klik untuk memuatkan", + "templateLoadHint": "Templat memuatkan permintaan dalam format {format}. Tukar Format Sumber untuk memuatkan dalam format yang berbeza.", + "compatibilityTester": "Penguji Keserasian", + "compatibilityReport": "Laporan Keserasian", + "testBenchDescription": "Jalankan senario yang dipratentukan (Sembang Mudah, Panggilan Alat, dll.) untuk mengesahkan keserasian terjemahan dan pembekal. Pilih format sumber dan pembekal sasaran, kemudian jalankan semua ujian untuk melihat peratusan keserasian. Gunakan ini untuk mencari ciri yang berfungsi merentas penyedia.", + "targetProvider": "Pembekal Sasaran", + "runAllTests": "Jalankan Semua Ujian", + "runTest": "Jalankan Ujian", + "reRun": "Jalankan semula", + "running": "Berlari...", + "passed": "lulus", + "failed": "gagal", + "passedIconLabel": "✅ Lulus", + "chunks": "ketulan", + "scenarioSimpleChat": "Sembang Mudah", + "scenarioToolCalling": "Alat Panggilan", + "scenarioMultiTurn": "Pelbagai pusingan", + "scenarioThinking": "Berfikir", + "scenarioSystemPrompt": "Gesaan Sistem", + "scenarioStreaming": "Penstriman", + "templateNames": { + "simple-chat": "Sembang Mudah", + "tool-calling": "Alat Panggilan", + "multi-turn": "Pelbagai pusingan", + "thinking": "Berfikir", + "system-prompt": "Gesaan Sistem", + "streaming": "Penstriman" + }, + "templateDescriptions": { + "simple-chat": "Mesej teks asas", + "tool-calling": "Seruan fungsi/alat", + "multi-turn": "Perbualan dengan sejarah", + "thinking": "Memanjangkan pemikiran / penaakulan", + "system-prompt": "Arahan sistem yang kompleks", + "streaming": "Permintaan penstriman SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Anda seorang pembantu yang membantu.", + "userGreeting": "hello! Apa khabar hari ini?" + }, + "toolCalling": { + "userWeather": "Bagaimanakah cuaca di São Paulo?", + "toolDescription": "Dapatkan cuaca semasa untuk lokasi", + "cityNameDescription": "nama bandar" + }, + "multiTurn": { + "system": "Anda seorang pembantu pengekodan.", + "userInitial": "Tulis fungsi untuk mengisih tatasusunan dalam Python.", + "assistantExample": "Berikut ialah fungsi isihan mudah:\n\n```python\ndef sort_array(arr):\n pulangan disusun(arr)\n```", + "userFollowUp": "Sekarang buat ia disusun mengikut tertib menurun." + }, + "thinking": { + "question": "Apakah hasil tambah bagi 100 nombor perdana pertama?" + }, + "systemPrompt": { + "systemInstruction": "Anda seorang jurutera perisian kanan yang pakar dalam sistem teragih. Jawab soalan dengan ringkas menggunakan amalan terbaik industri. Sentiasa berikan contoh kod apabila berkaitan. Formatkan jawapan anda menggunakan penurunan nilai.", + "question": "Bagaimanakah saya melaksanakan corak pemutus litar?" + }, + "streaming": { + "prompt": "Beritahu saya cerita pendek tentang robot yang belajar melukis." + } + }, + "openaiCompatibleLabel": "Serasi OpenAI", + "anthropicCompatibleLabel": "Serasi Anthropic", + "noTemplateForFormat": "Tiada templat untuk format ini", + "translationFailed": "Terjemahan gagal: {error}", + "pipelineDebugger": "Penyahpepijat Saluran Paip", + "translationPipeline": "Saluran Paip Terjemahan", + "pipelineVisualization": "Visualisasi saluran paip", + "pipelineVisualizationHint": "Hantar mesej untuk melihat bagaimana permintaan anda mengalir melalui pengesanan → terjemahan → panggilan pembekal.", + "chatTesterDescription": "Hantar mesej sebagai format pelanggan tertentu dan periksa setiap langkah saluran paip terjemahan.", + "chatTesterFlow": "Permintaan Pelanggan → Pengesanan Format → OpenAI Intermediate → Format Pembekal → Respons", + "clickStepToInspect": "Klik mana-mana langkah untuk memeriksa data pada peringkat itu.", + "clientFormat": "Format Pelanggan", + "provider": "Pembekal", + "modelPlaceholder": "Pilih atau taip nama model...", + "sendMessageToSeePipeline": "Hantar mesej untuk melihat saluran terjemahan", + "chatMessageHintPrefix": "Mesej anda akan diformatkan sebagai a", + "chatMessageHintSuffix": "permintaan, diterjemahkan melalui saluran paip, dan dihantar kepada pembekal yang dipilih.", + "youWithFormat": "Anda ({format})", + "assistant": "Penolong", + "typeMessage": "Taip mesej...", + "send": "Hantar", + "clientRequest": "Permintaan Pelanggan", + "clientRequestDescription": "Badan permintaan sebagai pelanggan anda akan menghantarnya", + "formatDetected": "Format Dikesan", + "formatDetectedDescription": "OmniRoute mengesan secara automatik format API daripada struktur permintaan", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Semua format mula-mula dinormalkan kepada format OpenAI (jambatan universal)", + "providerFormat": "Format Pembekal", + "providerFormatDescription": "Format OpenAI diterjemahkan kepada format asal pembekal", + "providerResponse": "Respon Pembekal", + "providerResponseRawDescription": "Sambutan mentah daripada API pembekal", + "providerResponseSseDescription": "Strim SSE mentah daripada API pembekal", + "unexpectedError": "Ralat yang tidak dijangka berlaku", + "error": "ralat", + "errorMessage": "Ralat: {message}", + "requestFailed": "Permintaan gagal", + "noTextExtracted": "(Tiada teks diekstrak)", + "liveMonitorDescriptionPrefix": "Menunjukkan peristiwa terjemahan semasa panggilan API mengalir melalui OmniRoute. Peristiwa datang daripada penimbal dalam memori (ditetapkan semula semasa dimulakan semula). guna", + "liveMonitorDescriptionSuffix": ", atau panggilan API luaran untuk menjana acara." + }, + "usage": { + "title": "Penggunaan", + "loggerTab": "Pembalak", + "proxyTab": "proksi", + "budgetManagement": "Pengurusan Belanjawan", + "budgetSaved": "Had belanjawan disimpan", + "budgetSaveFailed": "Gagal menyimpan belanjawan", + "loadingBudgetData": "Memuatkan data belanjawan...", + "noApiKeysTitle": "Tiada Kunci API", + "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyediakan had belanjawan.", + "apiKey": "Kunci API", + "todaysSpend": "Perbelanjaan Hari Ini", + "thisMonth": "Bulan ini", + "setLimits": "Tetapkan Had", + "dailyLimitUsd": "Had Harian (USD)", + "monthlyLimitUsd": "Had Bulanan (USD)", + "warningThresholdPercent": "Ambang Amaran (%)", + "dailyLimitPlaceholder": "cth. 5.00", + "monthlyLimitPlaceholder": "cth. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Simpan Had", + "budgetOk": "Belanjawan OK — {remaining} tinggal", + "budgetExceeded": "Belanjawan melebihi — permintaan mungkin disekat", + "totalRequests": "Jumlah permintaan", + "noDataYet": "Tiada data lagi", + "latency": "Latensi", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Cache Prompt", + "systemHealth": "Kesihatan Sistem", + "entries": "entri", + "activeCount": "{count} aktif", + "openCircuitBreakersDetected": "Pemutus litar terbuka dikesan", + "hitRate": "Kadar Hit", + "hitsMisses": "Hit / Rindu", + "circuitBreakers": "Pemutus Litar", + "lockedIPs": "IP berkunci", + "lockoutsAutoRefreshHint": "Kunci had kadar setiap model • Muat semula automatik 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} tinggal", + "howItWorks": "Bagaimana Ia Berfungsi", + "howItWorksSubtitle": "Ketahui cara penilaian mengesahkan respons LLM anda", + "define": "takrifkan", + "defineStepDescription": "Buat kes ujian dengan gesaan input dan kriteria output yang dijangka menggunakan strategi seperti kandungan, regex atau padanan tepat.", + "run": "Lari", + "runStepDescription": "Laksanakan kes ujian terhadap titik akhir LLM anda melalui OmniRoute. Setiap kes dihantar sebagai permintaan API sebenar.", + "evaluate": "nilaikan", + "evaluateStepDescription": "Jawapan dibandingkan dengan kriteria yang dijangkakan. Lihat lulus/gagal untuk setiap kes dengan metrik kependaman dan maklum balas terperinci.", + "evalSuites": "Suite Penilaian", + "evalSuitesHint": "Klik suite untuk melihat kes ujian, kemudian jalankan untuk menilai titik akhir LLM anda", + "evalsLoading": "Memuatkan suite eval...", + "noEvalSuitesFound": "Tiada Suite Eval Ditemui", + "noEvalSuitesDescription": "Suite Eval boleh ditakrifkan melalui API atau dalam kod. Mereka menguji output model terhadap hasil yang dijangka menggunakan strategi seperti kandungan, regex, padanan tepat dan fungsi tersuai.", + "columnCase": "Kes", + "columnStatus": "Status", + "columnLatency": "Latensi", + "columnDetails": "Butiran", + "columnModel": "Model", + "columnStrategy": "Strategi", + "columnExpected": "Dijangka", + "statsSuites": "Suite", + "statsTestCases": "Kes Ujian", + "statsModels": "model", + "statsCoverage": "Liputan", + "statsStrategiesCount": "{count} strategi", + "evaluationStrategies": "Strategi Penilaian", + "modelsUnderTest": "Model Dalam Ujian", + "searchSuitesPlaceholder": "Cari suite...", + "passSuffix": "lulus", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Lari Eval", + "runningProgress": "Menjalankan {current}/{total}...", + "passRate": "kadar lulus", + "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} jumlah", + "passedIconLabel": "✅ Lulus", + "failedIconLabel": "❌ Gagal", + "detailsContains": "Mengandungi: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Dijangka: \"{expected}\"", + "noResultsYet": "Tiada keputusan lagi", + "testCasesCount": "Kes Ujian ({count})", + "noTestCasesDefined": "Tiada kes ujian ditentukan", + "runEvalHint": "Klik \"Jalankan Eval\" untuk melaksanakan semua kes terhadap titik akhir LLM anda. Setiap ujian menghantar permintaan sebenar melalui OmniRoute.", + "notifyNoTestCases": "Tiada kes ujian ditentukan untuk suite ini", + "notifyAllCasesPassed": "Semua kes {total} lulus ✅", + "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal", + "notifyEvalRunFailed": "Larian Eval gagal", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "Penilaian Model", + "evalsHeroDescription": "Uji dan sahkan titik akhir LLM anda dengan menjalankan suite penilaian yang telah ditetapkan. Setiap suite mengandungi kes ujian yang menghantar gesaan sebenar melalui OmniRoute dan membandingkan respons dengan kriteria yang dijangkakan — membantu anda mengesan regresi, membandingkan model dan memastikan kualiti respons merentas penyedia.", + "qualityValidation": "Pengesahan Kualiti", + "modelComparison": "Perbandingan Model", + "regressionDetection": "Pengesanan Regresi", + "latencyBenchmarks": "Penanda Aras Latensi", + "modelLockouts": "Model Lockout", + "noLockouts": "Tiada model dikunci pada masa ini", + "activeSessions": "Sesi Aktif", + "noSessions": "Tiada sesi aktif", + "sessionsHint": "Sesi muncul semasa permintaan mengalir melalui proksi", + "sessionsTrackedHint": "Dijejaki melalui cap jari permintaan • Muat semula automatik 5s", + "session": "Sesi", + "age": "Umur", + "requests": "Permintaan", + "connection": "Sambungan", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}j", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Had Pembekal", + "noProviders": "Tiada Pembekal Disambungkan", + "connectProvidersForQuota": "Sambung kepada pembekal dengan OAuth untuk menjejak had kuota dan penggunaan API anda.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(ditapis daripada {count})", + "autoRefresh": "Muat semula automatik", + "refreshAll": "Muat semula Semua", + "loadingQuotas": "Memuatkan...", + "account": "Akaun", + "modelQuotas": "Kuota Model", + "lastUsed": "Terakhir Digunakan", + "actions": "Tindakan", + "refreshQuota": "Muat semula kuota", + "today": "Hari ini", + "tomorrow": "Esok", + "dayTimeFormat": "{day}, {time}", + "inDuration": "dalam {duration}", + "notApplicable": "T/A", + "rawPlanWithValue": "Pelan mentah: {plan}", + "noPlanFromProvider": "Tiada pelan daripada pembekal", + "noQuotaData": "Tiada data kuota", + "noQuotaDataAvailable": "Tiada data kuota tersedia", + "noAccountsForTierFilter": "Tiada akaun ditemui untuk penapis peringkat", + "tierAll": "Semua", + "tierEnterprise": "Perusahaan", + "tierTeam": "Pasukan", + "tierBusiness": "Perniagaan", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Tambahan pula", + "tierFree": "Percuma", + "tierUnknown": "Tidak diketahui" + }, + "modals": { + "waitingAuth": "Menunggu Keizinan", + "verificationUrl": "URL pengesahan", + "yourCode": "Kod Anda", + "remoteAccess": "Akses jauh:", + "connectedSuccess": "Berjaya Bersambung!", + "connectionFailed": "Sambungan Gagal", + "chooseAuthMethod": "Pilih kaedah pengesahan anda:", + "awsBuilderId": "ID Pembina AWS", + "awsIamIdentity": "Pusat Identiti AWS IAM", + "googleAccount": "Akaun Google", + "githubAccount": "Akaun GitHub", + "importToken": "Import Token", + "pasteToken": "Tampalkan token muat semula daripada Kiro IDE.", + "awsRegion": "Wilayah AWS", + "autoDetecting": "Token pengesan automatik...", + "readingFromCache": "Membaca daripada cache AWS SSO", + "readingFromCursor": "Membaca daripada pangkalan data Cursor IDE", + "initializing": "Memulakan...", + "pricingConfig": "Konfigurasi Harga", + "loadingPricing": "Memuatkan data harga...", + "pricingRatesFormat": "Format Kadar Harga", + "noPricingData": "Tiada data harga tersedia", + "noModelsFound": "Tiada model ditemui" + }, + "loggers": { + "allProviders": "Semua Penyedia", + "allModels": "Semua Model", + "allAccounts": "Semua Akaun", + "allApiKeys": "Semua Kunci API", + "allTypes": "Semua Jenis", + "allLevels": "Semua Peringkat", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Memuatkan log...", + "loadingProxyLogs": "Memuatkan log proksi...", + "noLogEntries": "Tiada entri log ditemui", + "noPayloadData": "Tiada data muatan tersedia untuk entri log ini.", + "proxyEvent": "Acara Proksi", + "proxy": "proksi", + "level": "Tahap", + "directNative": "Langsung (asli)", + "combo": "Kombo", + "inputTokens": "saya:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Gambaran Keseluruhan Penggunaan", + "outputTokens": "Token Keluaran", + "totalCost": "Jumlah Kos", + "usageByModel": "Penggunaan mengikut Model", + "usageByAccount": "Penggunaan mengikut Akaun", + "failedToLoad": "Gagal memuatkan statistik penggunaan.", + "tokenHealth": "Kesihatan Token", + "totalOAuth": "Jumlah OAuth", + "healthy": "Sihat", + "warning": "Amaran", + "errored": "Ralat", + "lastCheck": "Semakan terakhir", + "noData": "Tiada data", + "share": "Kongsi", + "unableToLoad": "Tidak dapat memuatkan metrik sistem", + "product": "produk", + "resources": "Sumber", + "company": "Syarikat" + }, + "auth": { + "welcome": "Selamat datang", + "signIn": "Log masuk", + "enterPassword": "Masukkan kata laluan anda untuk meneruskan", + "password": "Kata laluan", + "unifiedProxy": "Proksi API AI Bersatu", + "unifiedAiApiProxy": "Proksi API AI Bersatu", + "unifiedAiApiProxyDesc": "Halakan permintaan kepada berbilang pembekal AI melalui satu titik akhir. Pengimbangan beban, failover dan penjejakan penggunaan terbina dalam.", + "passwordNotEnabled": "Perlindungan kata laluan tidak didayakan", + "loading": "Memuatkan...", + "invalidPassword": "Kata laluan tidak sah", + "errorOccurredRetry": "Ralat berlaku. Sila cuba lagi.", + "configureInstance": "Mari kita konfigurasikan tika OmniRoute anda", + "runOnboardingWizard": "Jalankan wizard onboarding untuk menyediakan kata laluan anda dan sambungkan pembekal AI pertama anda.", + "startOnboarding": "Mulakan Onboarding", + "secureYourInstance": "Lindungi Instance Anda", + "setPasswordDescription": "Tetapkan kata laluan untuk melindungi papan pemuka anda dan selamatkan titik akhir API anda daripada akses tanpa kebenaran.", + "configurePassword": "Konfigurasi Kata Laluan", + "continue": "teruskan", + "windowWillClose": "Tetingkap ini akan ditutup secara automatik...", + "closeTabNow": "Anda boleh menutup tab ini sekarang.", + "copyUrlManual": "Sila salin URL dari bar alamat dan tampalkannya dalam aplikasi.", + "accessDeniedDescription": "Anda tidak mempunyai kebenaran untuk mengakses sumber ini. Semak kunci API anda atau hubungi pentadbir.", + "goToDashboard": "Pergi ke Papan Pemuka", + "featureMultiProviderTitle": "Pelbagai Pembekal", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google dan banyak lagi", + "featureLoadBalancingTitle": "Pengimbangan Beban", + "featureLoadBalancingDesc": "Sebarkan permintaan secara bijak", + "featureUsageTrackingTitle": "Penjejakan Penggunaan", + "featureUsageTrackingDesc": "Pantau kos dan token", + "resetPassword": "Tetapkan Semula Kata Laluan", + "resetDescription": "Pilih kaedah untuk memulihkan akses kepada papan pemuka anda", + "stopServer": "Hentikan pelayan OmniRoute", + "processing": "Memproses...", + "pleaseWait": "Sila tunggu sementara kami melengkapkan kebenaran.", + "authSuccess": "Keizinan Berjaya!", + "copyUrl": "Salin URL Ini", + "accessDenied": "Akses Ditolak", + "methodCliTitle": "Kaedah 1: Tetapkan Semula CLI", + "methodCliDescription": "Jalankan arahan berikut pada pelayan tempat OmniRoute sedang berjalan:", + "methodCliHint": "Ini akan menggesa anda untuk menetapkan kata laluan baharu. Pelayan mesti dihentikan dahulu.", + "methodManualTitle": "Kaedah 2: Tetapan Semula Manual", + "methodManualDescription": "Padamkan kata laluan daripada pangkalan data dan tetapkan yang baharu pada permulaan:", + "setPasswordInYour": "Tetapkan kata laluan baharu dalam anda", + "fileLabelSuffix": "fail:", + "newPasswordPlaceholder": "kata laluan_baru_anda", + "deleteSettingsFile": "Padam", + "orRemovePasswordHashField": "atau alih keluar medan passwordHash", + "restartServerWithNewPassword": "Mulakan semula pelayan - ia akan menggunakan kata laluan baharu", + "backToLogin": "Kembali ke Log Masuk", + "forgotPassword": "Lupa kata laluan?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navigasi ke rumah", + "toggleMenu": "Togol menu", + "featuresLink": "Ciri-ciri", + "docsLink": "Dokumen", + "github": "GitHub", + "versionLive": "v1.0 kini disiarkan", + "oneEndpoint": "Satu Titik Akhir untuk", + "allProviders": "Semua Pembekal AI", + "heroDescription": "Proksi titik akhir AI dengan papan pemuka web - Port JavaScript CLIProxyAPI. Berfungsi dengan lancar dengan Claude Code, OpenAI Codex, Cline, RooCode dan alatan CLI yang lain.", + "getStarted": "Mulakan", + "viewOnGithub": "Lihat di GitHub", + "powerfulFeatures": "Ciri Berkuasa", + "featuresSubtitle": "Semua yang anda perlukan untuk mengurus infrastruktur AI anda di satu tempat, dibina mengikut skala.", + "featureUnifiedEndpointTitle": "Titik Akhir Bersatu", + "featureUnifiedEndpointDesc": "Akses semua pembekal melalui URL API standard tunggal.", + "featureEasySetupTitle": "Persediaan Mudah", + "featureEasySetupDesc": "Bangun dan jalankan dalam beberapa minit dengan arahan npx.", + "featureModelFallbackTitle": "Model Fallback", + "featureModelFallbackDesc": "Tukar pembekal secara automatik pada kegagalan atau kependaman tinggi.", + "featureUsageTrackingTitle": "Penjejakan Penggunaan", + "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan kos merentas semua model.", + "featureOAuthApiKeysTitle": "OAuth & Kunci API", + "featureOAuthApiKeysDesc": "Urus bukti kelayakan dengan selamat dalam satu peti besi.", + "featureCloudSyncTitle": "Penyegerakan Awan", + "featureCloudSyncDesc": "Segerakkan konfigurasi anda merentas peranti dengan serta-merta.", + "featureCliSupportTitle": "Sokongan CLI", + "featureCliSupportDesc": "Berfungsi dengan Claude Code, Codex, Cline, Cursor dan banyak lagi.", + "featureDashboardTitle": "Papan pemuka", + "featureDashboardDesc": "Papan pemuka visual untuk analisis trafik masa nyata.", + "howItWorks": "Cara OmniRoute Berfungsi", + "howItWorksDescription": "Data mengalir dengan lancar daripada aplikasi anda melalui lapisan penghalaan pintar kami kepada penyedia terbaik untuk tugas itu.", + "howItWorksStep1Title": "1. CLI & SDK", + "howItWorksStep1Description": "Permintaan anda bermula daripada alatan kegemaran anda atau SDK bersatu kami. Hanya tukar URL asas.", + "howItWorksStep2Title": "2. Hab OmniRoute", + "howItWorksStep2Description": "Enjin kami menganalisis gesaan, memeriksa kesihatan pembekal dan laluan untuk kependaman atau kos terendah.", + "howItWorksStep3Title": "3. Pembekal AI", + "howItWorksStep3Description": "Permintaan dipenuhi oleh OpenAI, Anthropic, Gemini atau yang lain serta-merta.", + "getStartedIn30Seconds": "Bermula dalam 30 Saat", + "getStartedDescription": "Pasang OmniRoute, konfigurasikan pembekal anda melalui papan pemuka web dan mulakan penghalaan permintaan AI.", + "installOmniRoute": "Pasang OmniRoute", + "installStepDescription": "Jalankan arahan npx untuk memulakan pelayan dengan serta-merta", + "openDashboard": "Buka Papan Pemuka", + "openDashboardStepDescription": "Konfigurasikan pembekal dan kunci API melalui antara muka web", + "routeRequests": "Permintaan Laluan", + "routeRequestsStepDescription": "Halakan alatan CLI anda ke {endpoint}", + "terminal": "terminal", + "copy": "salin", + "copied": "✓ Disalin", + "startingOmniRoute": "Memulakan OmniRoute...", + "serverRunningOnLabel": "Pelayan berjalan", + "dashboardLabel": "Papan pemuka", + "readyToRoute": "Sedia untuk laluan! ✓", + "configureProvidersNote": "📝 Konfigurasikan penyedia dalam papan pemuka atau gunakan pembolehubah persekitaran", + "dataLocation": "Lokasi Data:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "produk", + "dashboardLink": "Papan pemuka", + "changelog": "Changelog", + "resources": "Sumber", + "documentation": "Dokumentasi", + "npm": "NPM", + "legal": "sah", + "mitLicense": "Lesen MIT", + "footerTagline": "Titik akhir bersatu untuk penjanaan AI. Sambung, halakan dan urus pembekal AI anda dengan mudah.", + "copyright": "© {year} OmniRoute. Semua hak terpelihara.", + "flowToolClaudeCode": "Kod Claude", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Kursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropik", + "flowProviderGemini": "Gemini", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "Gambar rajah interaktif kelihatan pada desktop", + "ctaTitle": "Bersedia untuk Memudahkan Infrastruktur AI Anda?", + "ctaDescription": "Sertai pembangun yang memperkemas penyepaduan AI mereka dengan OmniRoute. Sumber terbuka dan percuma untuk bermula.", + "startFree": "Mula Percuma", + "readDocumentation": "Baca Dokumentasi" + }, + "docs": { + "title": "Dokumentasi", + "quickStart": "Mula Pantas", + "features": "Ciri-ciri", + "supportedProviders": "Pembekal yang Disokong", + "supportedProvidersToc": "Pembekal", + "commonUseCases": "Kes Penggunaan Biasa", + "clientCompatibility": "Keserasian Pelanggan", + "apiReference": "Rujukan API", + "method": "Kaedah", + "path": "Laluan", + "notes": "Nota", + "modelPrefixes": "Awalan Model", + "prefix": "Awalan", + "troubleshooting": "Menyelesaikan masalah", + "supportsChat": "Menyokong kedua-dua titik akhir sembang dan respons.", + "oauthAutoRefresh": "Sambungan OAuth dengan muat semula token automatik.", + "fullStreaming": "Sokongan penstriman penuh untuk semua model.", + "docsLabel": "Dokumen", + "docsHeroDescription": "Gerbang AI untuk LLM berbilang pembekal. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor dan 20+ lagi pembekal.", + "openDashboard": "Buka Papan Pemuka", + "endpointPage": "Halaman Akhir", + "github": "GitHub", + "reportIssue": "Laporan Isu", + "onThisPage": "Pada halaman ini", + "documentationVersion": "Dokumentasi - v{version}", + "quickStartStep1Title": "1. Pasang dan jalankan", + "quickStartStep1Prefix": "Lari", + "quickStartStep1Middle": "atau klon daripada GitHub dan jalankan", + "quickStartStep2Title": "2. Cipta kunci API", + "quickStartStep2Text": "Pergi ke Titik Akhir -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.", + "quickStartStep3Title": "3. Sambungkan pembekal", + "quickStartStep3Text": "Tambahkan akaun pembekal melalui log masuk OAuth, kunci API atau sambung automatik peringkat percuma.", + "quickStartStep4Title": "4. Tetapkan URL asas pelanggan", + "quickStartStep4Prefix": "Halakan klien IDE atau API anda", + "quickStartStep4Suffix": "Gunakan awalan pembekal, sebagai contoh", + "featureRoutingTitle": "Penghalaan Berbilang Penyedia", + "featureRoutingText": "Halakan permintaan kepada 30+ pembekal AI melalui satu titik akhir serasi OpenAI. Menyokong sembang, respons, audio dan API imej.", + "featureCombosTitle": "Kombo dan Pengimbangan", + "featureCombosText": "Cipta gabungan model dengan rantaian mundur dan strategi pengimbangan: round-robin, keutamaan, rawak, paling kurang digunakan dan dioptimumkan kos.", + "featureUsageTitle": "Penjejakan Penggunaan dan Kos", + "featureUsageText": "Pengiraan token masa nyata, pengiraan kos setiap pembekal/model, dan pecahan penggunaan terperinci mengikut kunci dan akaun API.", + "featureAnalyticsTitle": "Papan Pemuka Analitis", + "featureAnalyticsText": "Analitis visual dengan carta untuk permintaan, token, ralat, kependaman, kos dan populariti model dari semasa ke semasa.", + "featureHealthTitle": "Pemantauan Kesihatan", + "featureHealthText": "Pemeriksaan kesihatan secara langsung, status pembekal, keadaan pemutus litar dan pengesanan had kadar automatik dengan pengunduran eksponen.", + "featureCliTitle": "Alat CLI", + "featureCliText": "Urus konfigurasi IDE, eksport/import sandaran, temui profil codex dan konfigurasikan tetapan daripada papan pemuka.", + "featureSecurityTitle": "Keselamatan dan Dasar", + "featureSecurityText": "Pengesahan kunci API, penapisan IP, pengawal suntikan segera, dasar domain, pengurusan sesi dan pengelogan audit.", + "featureCloudSyncTitle": "Penyegerakan Awan", + "featureCloudSyncText": "Segerakkan konfigurasi anda ke Cloudflare Workers untuk akses jauh dengan kelayakan yang disulitkan dan failover automatik.", + "providersAcrossConnectionTypes": "{count} pembekal merentas tiga jenis sambungan.", + "manageProviders": "Uruskan Pembekal", + "providersCount": "{count} pembekal", + "providerTypeFree": "Peringkat Percuma", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Kunci API", + "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak pembekal", + "useCaseSingleEndpointText": "Halakan pelanggan ke satu URL asas dan laluan mengikut awalan model (contohnya: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback dan penukaran model dengan kombo", + "useCaseFallbackText": "Cipta model kombo dalam Papan Pemuka dan pastikan konfigurasi pelanggan stabil sementara pembekal berputar secara dalaman.", + "useCaseUsageVisibilityTitle": "Keterlihatan penggunaan, kos dan nyahpepijat", + "useCaseUsageVisibilityText": "Jejaki token dan kos mengikut pembekal, akaun dan kunci API dalam tab Penggunaan dan Analitis.", + "clientCherryStudioTitle": "Studio Ceri", + "baseUrlLabel": "URL asas", + "chatEndpointLabel": "Titik akhir sembang", + "modelRecommendationLabel": "Cadangan model: awalan eksplisit", + "clientCodexTitle": "Model Copilot Codex / GitHub", + "clientCodexBullet1": "Gunakan ID model dengan", + "clientCodexBullet2": "Laluan automatik model keluarga Codex ke", + "clientCodexBullet3": "Model bukan Codex diteruskan", + "clientCursorTitle": "IDE kursor", + "clientCursorBullet1": "guna", + "clientCursorBullet1Suffix": "awalan untuk model Kursor.", + "clientCursorBullet2": "Sambungan OAuth - log masuk dari halaman Penyedia.", + "clientClaudeTitle": "Kod Claude / Antigraviti", + "clientClaudeBullet1Prefix": "guna", + "clientClaudeBullet1Middle": "(Claude) atau", + "clientClaudeBullet1Suffix": "(Antigraviti) awalan.", + "endpointChatNote": "Titik akhir sembang serasi OpenAI (lalai).", + "endpointResponsesNote": "Titik akhir API Respons (Codex, o-siri).", + "endpointModelsNote": "Katalog model untuk semua pembekal yang disambungkan.", + "endpointAudioNote": "Transkripsi audio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Penjanaan imej (NanoBanana).", + "endpointRewriteChatNote": "Tulis semula pembantu untuk pelanggan tanpa /v1.", + "endpointRewriteResponsesNote": "Tulis semula pembantu untuk Respons tanpa /v1.", + "endpointRewriteModelsNote": "Tulis semula pembantu untuk penemuan model tanpa /v1.", + "modelPrefixesDescriptionStart": "Gunakan awalan pembekal sebelum nama model untuk menghala ke pembekal tertentu. Contoh:", + "modelPrefixesDescriptionEnd": "laluan ke GitHub Copilot.", + "provider": "Pembekal", + "type": "taip", + "troubleshootingModelRouting": "Jika pelanggan gagal dengan penghalaan model, gunakan pembekal/model eksplisit (contohnya: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Jika anda menerima ralat model yang tidak jelas, pilih awalan pembekal dan bukannya ID model kosong.", + "troubleshootingCodexFamily": "Untuk model keluarga Codex GitHub, kekalkan model sebagai gh/; penghala memilih /membalas secara automatik.", + "troubleshootingTestConnection": "Gunakan Papan Pemuka > Pembekal > Uji Sambungan sebelum menguji daripada IDE atau pelanggan luaran.", + "troubleshootingCircuitBreaker": "Jika pembekal menunjukkan pemutus litar terbuka, tunggu masa bertenang atau semak halaman Kesihatan untuk mendapatkan butiran.", + "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal." + }, + "legal": { + "privacyPolicy": "Dasar Privasi", + "termsOfService": "Syarat Perkhidmatan", + "providerConfigurations": "Konfigurasi pembekal", + "apiKeys": "kunci API", + "usageLogs": "Log penggunaan", + "applicationSettings": "Tetapan aplikasi", + "viewExportAnalytics": "Lihat dan eksport analitis penggunaan", + "clearHistory": "Kosongkan sejarah penggunaan pada bila-bila masa", + "configureRetention": "Konfigurasikan dasar pengekalan log", + "backupRestore": "Sandarkan dan pulihkan pangkalan data anda", + "privacyMetadataTitle": "Dasar Privasi | OmniRoute", + "privacyMetadataDescription": "Dasar privasi untuk penghala proksi API OmniRoute AI.", + "termsMetadataTitle": "Syarat Perkhidmatan | OmniRoute", + "termsMetadataDescription": "Syarat perkhidmatan untuk penghala proksi API OmniRoute AI.", + "backToHome": "Balik rumah", + "lastUpdated": "Kemas kini terakhir: {date}", + "policyLastUpdatedDate": "13 Februari 2026", + "listSeparator": "-", + "questionsVisit": "Soalan? Lawati kami", + "githubRepository": "repositori GitHub", + "privacySection1Title": "1. Seni Bina Tempatan-Pertama", + "privacySection1Text": "OmniRoute direka sebagai aplikasi tempatan pertama. Semua pemprosesan dan penyimpanan data berlaku sepenuhnya pada mesin anda. Tiada pelayan berpusat yang mengumpul maklumat anda.", + "privacySection2Title": "2. Data Kami Simpan", + "privacyDataStoredIn": "Data berikut disimpan secara setempat dalam", + "privacyDataProviderConfigurationsDesc": "URL sambungan, jenis pembekal dan tetapan keutamaan", + "privacyDataApiKeysDesc": "disulitkan dan disimpan secara tempatan untuk pengesahan dengan pembekal AI", + "privacyDataUsageLogsDesc": "kiraan permintaan, penggunaan token, nama model, cap masa dan masa tindak balas", + "privacyDataApplicationSettingsDesc": "keutamaan tema, strategi penghalaan dan konfigurasi kombo", + "privacySection3Title": "3. Tiada Telemetri", + "privacySection3Text": "OmniRoute tidak mengumpul laporan telemetri, analitik atau ranap sistem. Tiada data dihantar kepada kami atau mana-mana pihak ketiga. Corak penggunaan, panggilan API dan konfigurasi anda kekal peribadi sepenuhnya.", + "privacySection4Title": "4. Pembekal AI Pihak Ketiga", + "privacySection4Text": "Apabila anda membuat panggilan API melalui OmniRoute, permintaan anda dimajukan kepada penyedia AI yang telah anda konfigurasikan (contohnya: OpenAI, Anthropic, Google). Pembekal ini mempunyai dasar privasi mereka sendiri yang mengawal cara mereka mengendalikan data anda. Sila semak semula:", + "privacyOpenAiPolicy": "Dasar Privasi OpenAI", + "privacyAnthropicPolicy": "Dasar Privasi Anthropic", + "privacyGooglePolicy": "Dasar Privasi Google", + "privacySection5Title": "5. Penyegerakan Awan (Pilihan)", + "privacySection5Text": "Jika anda mendayakan ciri penyegerakan awan pilihan, konfigurasi pembekal dan kunci API mungkin dihantar ke titik akhir awan yang dikonfigurasikan. Ciri ini dilumpuhkan secara lalai dan memerlukan ikut serta secara eksplisit.", + "privacySection6Title": "6. Pembalakan", + "privacyLoggingIntro": "Log permintaan boleh dikonfigurasikan melalui tetapan papan pemuka. Anda boleh:", + "privacySection7Title": "7. Hak Anda", + "privacySection7TextStart": "Memandangkan semua data disimpan secara setempat, anda mempunyai kawalan penuh. Anda boleh memadam data anda pada bila-bila masa dengan mengalih keluar", + "privacySection7TextEnd": "direktori atau menggunakan ciri sandaran pangkalan data dan memulihkan dalam papan pemuka.", + "termsSection1Title": "1. Gambaran keseluruhan", + "termsSection1Text": "OmniRoute ialah penghala proksi API AI tempatan pertama yang beroperasi sepenuhnya pada mesin anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.", + "termsSection2Title": "2. Tanggungjawab Pengguna", + "termsResponsibilityApiKeys": "Anda bertanggungjawab sepenuhnya untuk mengurus kunci API dan bukti kelayakan anda sendiri untuk pembekal AI pihak ketiga (OpenAI, Anthropic, Google, dll.).", + "termsResponsibilityCompliance": "Anda mesti mematuhi syarat perkhidmatan setiap pembekal AI yang APInya anda akses melalui OmniRoute.", + "termsResponsibilitySecurity": "Anda bertanggungjawab untuk keselamatan pemasangan OmniRoute setempat anda, termasuk menetapkan kata laluan dan menyekat akses rangkaian.", + "termsSection3Title": "3. Bagaimana Ia Berfungsi", + "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dihantar ke OmniRoute diterjemahkan dan dimajukan kepada pembekal AI yang dikonfigurasikan anda. OmniRoute tidak mengubah suai kandungan permintaan atau respons anda melebihi terjemahan protokol yang diperlukan.", + "termsSection4Title": "4. Pengendalian Data", + "termsDataStoredLocally": "Semua data disimpan secara setempat pada mesin anda dalam pangkalan data SQLite.", + "termsNoTransmission": "OmniRoute tidak menghantar sebarang data ke pelayan luaran melainkan anda mendayakan ciri penyegerakan awan secara eksplisit.", + "termsDataLocationText": "Log penggunaan, kunci API dan konfigurasi disimpan dalam", + "termsSection5Title": "5. Penafian", + "termsSection5Text": "OmniRoute disediakan \"seadanya\" tanpa sebarang jenis waranti. Kami tidak bertanggungjawab untuk sebarang kos yang ditanggung melalui penggunaan API, gangguan perkhidmatan atau kehilangan data. Sentiasa kekalkan sandaran konfigurasi anda.", + "termsSection6Title": "6. Sumber Terbuka", + "termsSection6Text": "OmniRoute ialah perisian sumber terbuka. Anda bebas untuk memeriksa, mengubah suai dan mengedarkannya di bawah syarat lesennya." + } +} diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json new file mode 100644 index 0000000000..ff120158c1 --- /dev/null +++ b/src/i18n/messages/nl.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Opslaan", + "cancel": "Annuleer", + "delete": "Verwijderen", + "loading": "Laden...", + "error": "Er is een fout opgetreden", + "success": "Succes", + "confirm": "Weet je het zeker?", + "refresh": "Vernieuwen", + "close": "Sluiten", + "add": "Toevoegen", + "edit": "Bewerken", + "search": "Zoeken", + "back": "Terug", + "next": "Volgende", + "submit": "Verzenden", + "reset": "Opnieuw instellen", + "copy": "Kopieer", + "copied": "Gekopieerd!", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "active": "Actief", + "inactive": "Inactief", + "noData": "Geen gegevens beschikbaar", + "configure": "Configureer", + "manage": "Beheer", + "name": "Naam", + "actions": "Acties", + "status": "Status", + "type": "Typ", + "model": "Model", + "models": "modellen", + "provider": "Aanbieder", + "account": "Rekening", + "time": "Tijd", + "details": "Details", + "created": "Gemaakt", + "lastUsed": "Laatst gebruikt", + "loadMore": "Laad meer", + "noResults": "Geen resultaten gevonden", + "reloadPage": "Pagina opnieuw laden", + "connected": "Verbonden", + "disconnected": "Verbinding verbroken", + "notConfigured": "Niet geconfigureerd", + "testConnection": "Verbinding testen", + "enable": "Inschakelen", + "disable": "Uitschakelen", + "columns": "Kolommen", + "newest": "Nieuwste", + "oldest": "Oudste", + "all": "Allemaal", + "none": "Geen", + "yes": "Ja", + "no": "Nee", + "warning": "Waarschuwing", + "note": "Let op", + "free": "Gratis", + "skipToContent": "Ga naar de inhoud" + }, + "sidebar": { + "home": "Thuis", + "dashboard": "Dashboard", + "providers": "Aanbieders", + "combos": "Combo's", + "usage": "Gebruik", + "analytics": "Analyses", + "costs": "Kosten", + "health": "Gezondheid", + "limits": "Limieten en quota's", + "cliTools": "CLI-hulpmiddelen", + "settings": "Instellingen", + "translator": "Vertaler", + "docs": "Documenten", + "issues": "Problemen", + "endpoint": "Eindpunt", + "apiManager": "API-beheerder", + "logs": "Logboeken", + "auditLog": "Auditlogboek", + "shutdown": "Afsluiten", + "restart": "Opnieuw opstarten", + "shutdownConfirm": "OmniRoute afsluiten?", + "restartConfirm": "OmniRoute opnieuw starten?", + "version": "v{version}", + "debug": "Foutopsporing", + "system": "Systeem", + "help": "Hulp", + "serverDisconnected": "Serververbinding verbroken", + "serverDisconnectedMsg": "De proxyserver is gestopt of wordt opnieuw opgestart.", + "expandSidebar": "Vouw zijbalk uit", + "collapseSidebar": "Zijbalk samenvouwen" + }, + "header": { + "logout": "Uitloggen", + "language": "Taal", + "providers": "Aanbieders", + "providerDescription": "Beheer uw AI-providerverbindingen", + "combos": "Combo's", + "comboDescription": "Modelcombo's met fallback", + "usage": "Gebruik en analyse", + "usageDescription": "Bewaak uw API-gebruik, tokenverbruik en verzoeklogboeken", + "analytics": "Analyses", + "analyticsDescription": "Grafieken, trends en evaluatie-inzichten", + "cliTools": "CLI-hulpmiddelen", + "cliToolsDescription": "Configureer CLI-tools", + "home": "Thuis", + "homeDescription": "Welkom bij OmniRoute", + "endpoint": "Eindpunt", + "endpointDescription": "API-eindpuntconfiguratie", + "settings": "Instellingen", + "settingsDescription": "Beheer uw voorkeuren", + "openaiCompatible": "OpenAI-compatibel", + "anthropicCompatible": "Antropisch compatibel" + }, + "home": { + "quickStart": "Snel beginnen", + "quickStartDesc": "In 4 stappen aan de slag. Verbind providers, routemodellen, monitor alles.", + "fullDocs": "Volledige documenten", + "step1Title": "1. Maak een API-sleutel", + "step1Desc": "Ga naar Eindpunt -> Geregistreerde sleutels. Genereer één sleutel per omgeving.", + "step2Title": "2. Verbind aanbieders", + "step2Desc": "Voeg accounts toe in Providers. Ondersteunt OAuth, API Key en gratis lagen.", + "step3Title": "3. Wijs uw klant aan", + "step3Desc": "Stel de basis-URL in op {url} in uw IDE- of API-client.", + "step4Title": "4. Monitoren en optimaliseren", + "step4Desc": "Houd tokens, kosten en fouten bij in Aanvraaglogboeken en Analytics.", + "providersOverview": "Overzicht aanbieders", + "configuredOf": "{configured} geconfigureerd van {total} beschikbare providers", + "noModelsAvailable": "Er zijn geen modellen beschikbaar voor deze aanbieder.", + "configureFirst": "Configureer eerst een verbinding in {providers}", + "configureProvider": "Configureer aanbieder", + "modelAvailable": "{count} model beschikbaar", + "modelsAvailable": "{count} modellen beschikbaar", + "connectionsActive": "{count} verbinding actief", + "connectionsActivePlural": "{count} verbindingen actief", + "copyModelName": "Kopieer de modelnaam", + "documentation": "Documentatie", + "healthMonitor": "Gezondheidsmonitor", + "reportIssue": "Probleem melden", + "activeError": "{active} actief · {errors} fout", + "oauthLabel": "OAuth", + "apiKeyLabel": "API-sleutel", + "requestsShort": "{count} vereisten", + "providerModelsTitle": "{provider} - Modellen", + "copiedModel": "Gekopieerd: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analyses", + "overviewDescription": "Houd toezicht op uw API-gebruikspatronen, tokenverbruik, kosten en activiteitstrends voor alle providers en modellen.", + "evalsDescription": "Voer evaluatiesuites uit om uw LLM-eindpunten te testen en te valideren. Vergelijk de modelkwaliteit, detecteer regressies en benchmark de latentie.", + "overview": "Overzicht", + "evals": "Evals" + }, + "apiManager": { + "title": "API-sleutels", + "createKey": "Maak een API-sleutel", + "key": "Sleutel", + "revokeKey": "Sleutel intrekken", + "revokeConfirm": "Weet u zeker dat u deze API-sleutel wilt intrekken?", + "noKeys": "Nog geen API-sleutels", + "noKeysDesc": "Maak uw eerste API-sleutel om verzoeken aan uw eindpunt te verifiëren", + "keyLabel": "Sleutellabel", + "permissions": "Machtigingen", + "expiresAt": "Verloopt", + "never": "Nooit", + "revoke": "Intrekken", + "showKey": "Toon sleutel", + "hideKey": "Sleutel verbergen", + "copyKey": "Kopieer API-sleutel", + "allModels": "Alle modellen", + "selectedModels": "Geselecteerde modellen", + "readOnly": "Alleen lezen", + "fullAccess": "Volledige toegang", + "keyManagement": "API-sleutelbeheer", + "keyManagementDesc": "Maak en beheer API-sleutels voor het verifiëren van verzoeken aan uw eindpunt", + "totalKeys": "Totaal aantal sleutels", + "restricted": "Beperkt", + "totalRequests": "Totaal aantal verzoeken", + "modelsAvailable": "Modellen beschikbaar", + "registeredKeys": "Geregistreerde sleutels", + "keysRegistered": "{count} sleutels geregistreerd", + "keyRegistered": "{count} sleutel geregistreerd", + "keysSecurityNote": "Elke sleutel isoleert het volgen van het gebruik en kan onafhankelijk worden ingetrokken. Om veiligheidsredenen worden sleutels na het aanmaken gemaskeerd.", + "createFirstKey": "Maak uw eerste sleutel", + "name": "Naam", + "usage": "Gebruik", + "created": "Gemaakt", + "actions": "Acties", + "reqs": "verzoek", + "neverUsed": "Nooit gebruikt", + "deleteConfirm": "Deze API-sleutel verwijderen?", + "usageTips": "Gebruikstips", + "tipAuth": "Gebruik API-sleutels in de Authorization-header als Bearer YOUR_KEY", + "tipSecure": "Sleutels worden tijdens het aanmaken slechts één keer getoond. Bewaar ze veilig", + "tipSeparate": "Maak afzonderlijke sleutels voor verschillende klanten of omgevingen", + "tipRestrict": "Beperk sleutels tot specifieke modellen voor betere beveiliging en kostenbeheersing", + "keyName": "Sleutelnaam", + "keyNamePlaceholder": "bijvoorbeeld productiesleutel, ontwikkelingssleutel", + "keyNameDesc": "Kies een beschrijvende naam om het doel van deze sleutel te identificeren", + "keyCreated": "API-sleutel gemaakt", + "keyCreatedSuccess": "Sleutel succesvol aangemaakt!", + "keyCreatedNote": "Kopieer en bewaar deze sleutel nu. Deze wordt niet meer weergegeven.", + "done": "Klaar", + "savePermissions": "Bewaar machtigingen", + "allowAll": "Alles toestaan", + "restrict": "Beperken", + "allowAllInfo": "Met deze sleutel heeft u toegang tot alle beschikbare modellen.", + "restrictInfo": "Deze sleutel heeft toegang tot {selected} van {total} modellen.", + "selected": "{count} geselecteerd", + "all": "Allemaal", + "clear": "Duidelijk", + "searchModels": "Zoek modellen op naam of aanbieder...", + "noModelsFound": "Geen modellen gevonden", + "keyNameRequired": "Sleutelnaam is vereist", + "keyNameTooLong": "De sleutelnaam mag maximaal {max} tekens bevatten", + "keyNameInvalid": "De sleutelnaam mag alleen letters, cijfers, spaties, koppeltekens en onderstrepingstekens bevatten", + "invalidKeyName": "Ongeldige sleutelnaam", + "failedCreateKey": "Kan sleutel niet maken", + "failedCreateKeyRetry": "Kan sleutel niet maken. Probeer het opnieuw.", + "invalidKeyId": "Ongeldige sleutel-ID", + "failedDeleteKey": "Kan de sleutel niet verwijderen", + "failedDeleteKeyRetry": "Kan de sleutel niet verwijderen. Probeer het opnieuw.", + "invalidModelsSelection": "Ongeldige modellenselectie", + "cannotSelectMoreThanModels": "Kan niet meer dan {max} modellen selecteren", + "failedUpdatePermissions": "Kan rechten niet updaten", + "failedUpdatePermissionsRetry": "Kan rechten niet updaten. Probeer het opnieuw.", + "unknownProvider": "onbekend", + "copyMaskedKey": "Kopieer gemaskeerde sleutel", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Laatste: {date}", + "editPermissions": "Machtigingen bewerken", + "deleteKey": "Sleutel verwijderen", + "model": "{count}-model", + "models": "{count} modellen", + "permissionsTitle": "Machtigingen: {name}", + "allowAllDesc": "Met deze sleutel heeft u toegang tot alle beschikbare modellen.", + "restrictDesc": "Deze sleutel heeft toegang tot {selectedCount} van {totalModels} modellen.", + "selectedCount": "{count} geselecteerd" + }, + "auditLog": { + "title": "Auditlogboek", + "searchPlaceholder": "Zoekacties...", + "action": "Actie", + "actor": "Acteur", + "target": "Doel", + "ipAddress": "IP-adres", + "timestamp": "Tijdstempel", + "noEntries": "Geen auditgegevens gevonden", + "filterByAction": "Filter op actie...", + "filterByActor": "Filter op acteur...", + "filterEntriesAria": "Filter auditlogboekvermeldingen", + "filterByActionTypeAria": "Filter op actietype", + "filterByActorAria": "Filter op acteur", + "refreshAuditLogAria": "Vernieuw het auditlogboek", + "tableAria": "Auditlogboekvermeldingen", + "failedFetchAuditLog": "Kan het auditlogboek niet ophalen", + "notAvailable": "—", + "description": "Administratieve acties en beveiligingsgebeurtenissen", + "showing": "{count} items tonen (offset {offset})", + "previous": "Vorige" + }, + "cliTools": { + "title": "CLI-hulpmiddelen", + "noActiveProviders": "Geen actieve aanbieders", + "noActiveProvidersDesc": "Voeg eerst providers toe en verbind ze om CLI-tools te configureren.", + "mapModels": "Kaartmodellen", + "testConnection": "Verbinding testen", + "connectionStatus": "Verbindingsstatus", + "configureEndpoint": "Eindpunt configureren", + "instructions": "Instructies", + "modelMapping": "Modeltoewijzing", + "baseUrl": "Basis-URL", + "apiKey": "API-sleutel", + "configured": "Geconfigureerd", + "notConfigured": "Niet geconfigureerd", + "notInstalled": "Niet geïnstalleerd", + "custom": "Aangepast", + "unknown": "Onbekend", + "lastSavedAt": "Laatst opgeslagen: {date}", + "never": "Nooit", + "justNow": "zojuist", + "minutesAgoShort": "{count}m geleden", + "hoursAgoShort": "{count}u geleden", + "daysAgoShort": "{count}d geleden", + "monthsAgoShort": "{count}mo geleden", + "yearsAgoShort": "{count}y geleden", + "runtimeCheckFailed": "Runtimecontrole is mislukt", + "yourApiKeyPlaceholder": "jouw-api-sleutel", + "modelPlaceholder": "provider/model-id", + "configurationSaved": "Configuratie succesvol opgeslagen.", + "failedToSave": "Kan configuratie niet opslaan.", + "noApiKeysCreateOne": "Geen API-sleutels - Maak er een op de pagina Sleutels", + "defaultOmnirouteKey": "sk_omniroute (standaard)", + "selectModel": "Selecteer Model", + "selectModelForAlias": "Selecteer model voor {alias}", + "selectModelForTool": "Selecteer model voor {tool}", + "select": "Selecteer", + "clear": "Duidelijk", + "comingSoon": "Binnenkort beschikbaar", + "checkingRuntime": "Runtimestatus controleren...", + "guideOnlyIntegration": "Alleen-gids-integratie (geen lokale runtime vereist)", + "cliRuntimeDetected": "CLI-runtime gedetecteerd en gereed", + "cliFoundNotRunnable": "CLI gevonden maar niet uitvoerbaar{reason}", + "cliRuntimeNotDetected": "CLI-runtime niet gedetecteerd", + "binary": "Binair", + "configPath": "Configuratiepad", + "configPathShort": "Configuratie", + "failedCheckRuntimeStatus": "Kan de runtimestatus niet controleren.", + "copy": "Kopieer", + "copied": "Gekopieerd", + "copyConfig": "Kopieer configuratie", + "saveConfig": "Configuratie opslaan", + "selectionSaved": "Selectie opgeslagen", + "guide": "Gids", + "detected": "Gedetecteerd", + "notReady": "Niet klaar", + "active": "Actief", + "inactive": "Inactief", + "startMitm": "MITM starten", + "stopMitm": "Stop MITM", + "mitmStarted": "MITM is succesvol gestart!", + "mitmStopped": "MITM is succesvol gestopt!", + "failedStart": "Kan MITM niet starten", + "failedStop": "Kan MITM niet stoppen", + "saveMappings": "Bewaar toewijzingen", + "mappingsSaved": "Kaarten opgeslagen!", + "failedSaveMappings": "Kan toewijzingen niet opslaan", + "howItWorks": "Hoe het werkt:", + "antigravityHowWorksDesc": "Antigravity stuurt verzoeken naar het eindpunt van Google. MITM onderschept ze en stuurt ze door naar OmniRoute.", + "antigravityStep1": "1. Start MITM om aanvragen via OmniRoute te routeren.", + "antigravityStep2Prefix": "2. Toevoegen", + "antigravityStep2Suffix": "naar uw hosts-bestand als 127.0.0.1.", + "antigravityStep3": "3. Open Antigravity en verzoeken zullen worden geproxyd.", + "sudoPasswordRequiredTitle": "Sudo-wachtwoord vereist", + "sudoPasswordHint": "Het beheerderswachtwoord is vereist om de hosts-bestand- en systeemproxy-instellingen te wijzigen.", + "enterSudoPassword": "Voer het sudo-wachtwoord in", + "sudoPasswordRequiredError": "Sudo-wachtwoord is vereist.", + "cancel": "Annuleer", + "confirm": "Bevestig", + "settingsApplied": "Instellingen succesvol toegepast!", + "failedApplySettings": "Kan instellingen niet toepassen", + "settingsReset": "Instellingen opnieuw ingesteld!", + "failedResetSettings": "Kan de instellingen niet resetten", + "backupRestored": "Back-up hersteld!", + "failedRestore": "Herstellen is mislukt", + "checkingCli": "{tool} CLI controleren...", + "cliNotRunnable": "{tool} CLI geïnstalleerd maar kan niet worden uitgevoerd", + "cliNotInstalled": "{tool} CLI niet geïnstalleerd", + "cliNotDetected": "{tool} CLI niet gedetecteerd", + "cliDetectedReady": "{tool} CLI gedetecteerd en gereed", + "cliFoundFailedHealthcheck": "{tool} CLI is gevonden, maar de runtime-gezondheidscontrole{reason} is mislukt.", + "installCliPrompt": "Installeer {tool} CLI om deze functie te gebruiken.", + "installCodexPrompt": "Installeer Codex CLI om de functie voor automatisch toepassen te gebruiken.", + "hide": "Verbergen", + "howToInstall": "Hoe te installeren", + "installationGuide": "Installatiehandleiding", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "Na de installatie uitvoeren", + "toVerify": "verifiëren.", + "current": "Huidig", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Resetten naar standaard", + "providerModelPlaceholder": "provider/model-id", + "apply": "Toepassen", + "reset": "Opnieuw instellen", + "manualConfig": "Handmatige configuratie", + "backups": "Back-ups", + "configBackups": "Back-ups configureren", + "noBackupsYet": "Nog geen back-ups. Er worden automatisch back-ups gemaakt vóór elke toepassing of reset.", + "restore": "Herstellen", + "backupRestoredReloading": "Back-up hersteld! Status herladen...", + "failedRestoreBackup": "Kan back-up niet herstellen", + "applied": "Toegepast!", + "failed": "Mislukt", + "resetDone": "Opnieuw instellen!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute is geconfigureerd als OpenAI-compatibele provider", + "provider": "Aanbieder", + "model": "Model", + "providers": "Aanbieders", + "auth": "Aut", + "noApiKeysAvailable": "Geen API-sleutels beschikbaar", + "usingDefaultOmniroute": "Standaard gebruiken: sk_omniroute", + "updateConfig": "Configuratie bijwerken", + "applyConfig": "Configuratie toepassen", + "noBackupsAvailable": "Geen back-ups beschikbaar.", + "profileSaved": "Profiel \"{name}\" opgeslagen!", + "failedSaveProfile": "Kan profiel niet opslaan", + "profileActivated": "Profiel geactiveerd!", + "failedActivateProfile": "Kan profiel niet activeren", + "profiles": "Profielen", + "savedProfiles": "Opgeslagen profielen", + "noProfilesYet": "Nog geen profielen opgeslagen. Sla de huidige configuratie op als profiel hieronder.", + "activate": "Activeer", + "deleteProfile": "Profiel verwijderen", + "profileNamePlaceholder": "Profielnaam (bijv. Persoonlijk account)", + "saveCurrent": "Bewaar huidige", + "codexAuthNotePrefix": "Codex-gebruik", + "codexAuthNoteMiddle": "met", + "codexAuthNoteSuffix": "Klik op \"Toepassen\" om automatisch te configureren.", + "claudeManualConfiguration": "Claude CLI - Handmatige configuratie", + "codexManualConfiguration": "Codex CLI - Handmatige configuratie", + "droidManualConfiguration": "Factory Droid - Handmatige configuratie", + "openClawManualConfiguration": "Open Claw - Handmatige configuratie", + "clineManualConfiguration": "Cline handmatige configuratie", + "kiloManualConfiguration": "Kilocode handmatige configuratie", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE met MITM", + "claude": "Antropische Claude Code CLI", + "codex": "OpenAI Codex-CLI", + "droid": "Factory Droid AI-assistent", + "openclaw": "Open Claw AI-assistent", + "cline": "Cline AI Coderingsassistent CLI", + "kilo": "Kilocode AI Assistent CLI", + "cursor": "Cursor AI-code-editor", + "continue": "Ga door met AI-assistent" + }, + "guides": { + "cursor": { + "notes": { + "0": "Vereist Cursor Pro-account om deze functie te gebruiken.", + "1": "Cursor routeert verzoeken via zijn eigen server, dus lokaal eindpunt wordt niet ondersteund. Schakel Cloud Endpoint in via Instellingen." + }, + "steps": { + "1": { + "title": "Instellingen openen", + "desc": "Ga naar Instellingen -> Modellen" + }, + "2": { + "title": "Schakel de OpenAI-API in", + "desc": "Schakel de optie \"OpenAI API-sleutel\" in" + }, + "3": { + "title": "Basis-URL" + }, + "4": { + "title": "API-sleutel" + }, + "5": { + "title": "Aangepast model toevoegen", + "desc": "Klik op 'Alle modellen bekijken' -> 'Aangepast model toevoegen'" + }, + "6": { + "title": "Selecteer Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Configuratie openen", + "desc": "Open het configuratiebestand Doorgaan" + }, + "2": { + "title": "API-sleutel" + }, + "3": { + "title": "Selecteer Model" + }, + "4": { + "title": "Modelconfiguratie toevoegen", + "desc": "Voeg de volgende configuratie toe aan uw modellenarray:" + } + } + } + } + }, + "combos": { + "title": "Combo's", + "description": "Creëer modelcombinaties met gewogen routing en fallback-ondersteuning", + "createCombo": "Combinatie maken", + "editCombo": "Combinatie bewerken", + "deleteCombo": "Combinatie verwijderen", + "noModels": "Geen modellen", + "noModelsYet": "Er zijn nog geen modellen toegevoegd", + "addModel": "Model toevoegen", + "addModelToCombo": "Model toevoegen aan combo", + "routingStrategy": "Routeringsstrategie", + "maxRetries": "Maximaal aantal nieuwe pogingen", + "timeout": "Time-out (ms)", + "healthcheck": "Gezondheidscontrole", + "priority": "Prioriteit", + "fallback": "Terugval", + "roundRobin": "Ronde Robin", + "random": "Willekeurig", + "leastLatency": "Minste latentie", + "comboName": "Combinatienaam", + "comboNamePlaceholder": "mijn-combo", + "deleteConfirm": "Deze combinatie verwijderen?", + "noCombosYet": "Nog geen combo's", + "comboCreated": "Combinatie is succesvol aangemaakt", + "comboUpdated": "Combo is succesvol bijgewerkt", + "comboDeleted": "Combinatie verwijderd", + "failedCreate": "Kan combo niet maken", + "failedUpdate": "Kan combo niet updaten", + "errorCreating": "Fout bij maken van combo", + "errorUpdating": "Fout bij updaten van combo", + "errorDeleting": "Fout bij verwijderen van combo", + "testFailed": "Testverzoek is mislukt", + "failedToggle": "Kan combo niet schakelen", + "testResults": "Testresultaten — {name}", + "resolvedBy": "Opgelost door:", + "more": "+{count} meer", + "reqs": "verzoek", + "success": "succes", + "proxyConfigured": "Proxy geconfigureerd", + "copyComboName": "Kopieer de combonaam", + "enableCombo": "Combinatie inschakelen", + "disableCombo": "Combinatie uitschakelen", + "testCombo": "Combinatie testen", + "duplicate": "Duplicaat", + "proxyConfig": "Proxy-configuratie", + "nameRequired": "Naam is vereist", + "nameInvalid": "Alleen letters, cijfers, -, _, / en . toegestaan", + "nameHint": "Letters, cijfers, -, _, / en . toegestaan", + "priorityDesc": "Sequentiële fallback: probeert eerst model 1, dan 2, etc.", + "weightedDesc": "Verdeelt verkeer op basis van gewichtspercentage met terugval", + "roundRobinDesc": "Circulaire distributie: elke aanvraag gaat roulerend naar het volgende model", + "randomDesc": "Uniforme willekeurige selectie en vervolgens terugvallen op de resterende modellen", + "leastUsedDesc": "Kiest het model met de minste verzoeken, waarbij de belasting in de loop van de tijd wordt verdeeld", + "costOptimizedDesc": "Routes eerst naar het goedkoopste model op basis van prijzen", + "models": "Modellen", + "autoBalance": "Automatische balans", + "advancedSettings": "Geavanceerde instellingen", + "retryDelay": "Vertraging opnieuw proberen (ms)", + "concurrencyPerModel": "Gelijktijdigheid / model", + "queueTimeout": "Wachtrijtime-out (ms)", + "advancedHint": "Laat leeg om globale standaardwaarden te gebruiken. Deze overschrijven de instellingen per provider.", + "moveUp": "Ga omhoog", + "moveDown": "Ga naar beneden", + "removeModel": "Verwijderen", + "saving": "Opslaan...", + "weighted": "Gewogen", + "leastUsed": "Minst gebruikt", + "costOpt": "Kosten-opt" + }, + "costs": { + "title": "Kosten", + "budget": "Begroting", + "totalCost": "Totale kosten", + "breakdown": "Kostenverdeling", + "noData": "Geen kostengegevens", + "byModel": "Per model", + "byProvider": "Door aanbieder" + }, + "endpoint": { + "title": "API-eindpunt", + "available": "Beschikbare eindpunten", + "cloudProxy": "Cloud-proxy", + "disableConfirm": "Weet u zeker dat u cloudproxy wilt uitschakelen?", + "baseUrl": "Basis-URL", + "apiKeyLabel": "API-sleutel", + "registeredKeys": "Geregistreerde sleutels", + "chatCompletions": "Chat-voltooiingen", + "responses": "Reacties", + "listModels": "Lijstmodellen", + "usingCloudProxy": "Cloudproxy gebruiken", + "usingLocalServer": "Lokale server gebruiken", + "machineId": "Machine-ID: {id}...", + "disableCloud": "Schakel Cloud uit", + "enableCloud": "Schakel Cloud in", + "modelsAcrossEndpoints": "{models} modellen voor {endpoints} eindpunten", + "chatDesc": "Streaming & non-streaming chat met alle providers", + "embeddings": "Inbedding", + "embeddingsDesc": "Tekstinsluitingen voor zoek- en RAG-pijplijnen", + "imageGeneration": "Beeld genereren", + "imageDesc": "Genereer afbeeldingen op basis van tekstprompts", + "rerank": "Herschikken", + "rerankDesc": "Herschik documenten op relevantie voor een zoekopdracht", + "audioTranscription": "Audiotranscriptie", + "audioTranscriptionDesc": "Audiobestanden omzetten naar tekst (Whisper)", + "textToSpeech": "Tekst naar spraak", + "textToSpeechDesc": "Converteer tekst naar natuurlijk klinkende spraak", + "moderations": "Moderaties", + "moderationsDesc": "Contentmoderatie en veiligheidsclassificatie", + "enableCloudTitle": "Schakel Cloudproxy in", + "whatYouGet": "Wat je krijgt", + "cloudBenefitAccess": "Krijg overal ter wereld toegang tot uw API", + "cloudBenefitShare": "Deel het eindpunt eenvoudig met uw team", + "cloudBenefitPorts": "U hoeft geen poorten te openen of een firewall te configureren", + "cloudBenefitEdge": "Snel wereldwijd edge-netwerk", + "cloudSessionNote": "Cloud bewaart uw authentificatiesessie gedurende 1 dag. Als het niet wordt gebruikt, wordt het automatisch verwijderd.", + "cloudUnstableNote": "De cloud is momenteel in sommige gevallen instabiel met Claude Code OAuth.", + "cloudConnected": "Cloudproxy verbonden!", + "connectingToCloud": "Verbinding maken met de cloud...", + "verifyingConnection": "Verbinding verifiëren...", + "connecting": "Verbinden...", + "verifying": "Verifiëren...", + "connected": "Verbonden!", + "disableCloudTitle": "Schakel Cloudproxy uit", + "disableWarning": "Alle authentificatiesessies worden uit de cloud verwijderd.", + "syncingData": "Laatste gegevens synchroniseren...", + "disablingCloud": "Cloud uitschakelen...", + "syncing": "Synchroniseren...", + "disabling": "Uitschakelen...", + "cloudConnectedVerified": "Cloud Proxy verbonden en geverifieerd!", + "connectedVerificationPending": "Verbonden - verificatie in behandeling", + "connectedVerificationPendingWithError": "Verbonden — verificatie in behandeling: {error}", + "cloudDisabledSuccess": "Cloud is succesvol uitgeschakeld", + "syncedSuccess": "Gesynchroniseerd", + "failedDisable": "Kan de cloud niet uitschakelen", + "failedEnable": "Kan cloud niet inschakelen", + "cloudRequestTimeout": "Time-out van cloudverzoek", + "cloudRequestFailed": "Cloudverzoek mislukt", + "cloudWorkerUnreachable": "Kon de cloudwerker niet bereiken. Zorg ervoor dat de cloudservice actief is (npm run dev in /cloud).", + "connectionFailed": "Verbinding mislukt", + "syncFailed": "Synchroniseren van cloudgegevens is mislukt", + "providerModelsTitle": "{provider} — Modellen", + "noModelsForProvider": "Er zijn geen modellen beschikbaar voor deze aanbieder.", + "chat": "Chatten", + "embedding": "Inbedding", + "image": "Afbeelding", + "custom": "gewoonte", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Systeemgezondheid", + "description": "Realtime monitoring van uw OmniRoute-instantie", + "healthy": "Gezond", + "degraded": "Gedegradeerd", + "down": "Naar beneden", + "uptime": "Uptime", + "memory": "Geheugen", + "memoryRss": "Geheugen (RSS)", + "heap": "Hoop", + "cpu": "CPU", + "database": "Database", + "version": "Versie", + "lastCheck": "Laatste controle", + "providerHealth": "Gezondheid van de aanbieder", + "systemMetrics": "Systeemstatistieken", + "tokenHealth": "Tokengezondheid", + "refreshAll": "Alles vernieuwen", + "checkNow": "Controleer nu", + "loadingHealth": "Gezondheidsgegevens laden...", + "failedToLoad": "Kan gezondheidsgegevens niet laden: {error}", + "retry": "Opnieuw proberen", + "allOperational": "Alle systemen operationeel", + "issuesDetected": "Systeemproblemen gedetecteerd", + "updatedAt": "{time} bijgewerkt", + "latency": "Latentie", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Totaal aantal verzoeken", + "noDataYet": "Nog geen gegevens", + "promptCache": "Snelle cache", + "entries": "Inzendingen", + "hitRate": "Hitpercentage", + "hitsMisses": "Hits / missers", + "signatureCache": "Handtekeningcache", + "signatureDefaults": "Standaardwaarden", + "signatureTool": "Gereedschap", + "signatureFamily": "Familie", + "signatureSession": "Sessie", + "recovering": "Herstellend", + "noCBData": "Er zijn geen stroomonderbrekergegevens beschikbaar. Doe eerst een aantal verzoeken.", + "providerHealthStatusAria": "Gezondheidsstatus van de provider", + "issuesLabel": "Problemen gedetecteerd", + "operational": "Operationeel", + "providers": "Aanbieders", + "healthyCount": "{count} gezond", + "nodeVersion": "Knooppunt {version}", + "failures": "{count} fout", + "failuresPlural": "{count} fouten", + "lastFailure": "Laatste", + "rateLimitStatus": "Status van tarieflimiet", + "activeLimiters": "{count} actieve limiter", + "activeLimitersPlural": "{count} actieve limiters", + "queued": "In de wachtrij", + "queuedCount": "{count} staat in de wachtrij", + "running": "rennen", + "runningCount": "{count} actief", + "ok": "Oké", + "activeLockouts": "Actieve vergrendelingen", + "resetConfirm": "Alle stroomonderbrekers resetten naar een gezonde status? Hiermee worden alle foutaantallen gewist en worden alle providers teruggezet naar de operationele status.", + "resetAllTitle": "Reset alle stroomonderbrekers naar de gezonde status", + "resetting": "Resetten...", + "resetAll": "Alles resetten", + "until": "Tot {time}" + }, + "limits": { + "title": "Limieten en quota's", + "rateLimit": "Tarieflimiet", + "remaining": "Resterend", + "requestsPerMinute": "Verzoeken/min", + "tokensPerMinute": "Munten/min", + "dailyLimit": "Dagelijkse limiet" + }, + "logs": { + "title": "Logboeken", + "requestLogs": "Logboeken aanvragen", + "proxyLogs": "Proxylogboeken", + "auditLog": "Auditlogboek", + "console": "Console", + "auditLogDesc": "Administratieve acties en beveiligingsgebeurtenissen", + "loading": "Laden...", + "refresh": "Vernieuwen", + "filterByAction": "Filter op actie...", + "filterByActor": "Filter op acteur...", + "filterEntriesAria": "Filter auditlogboekvermeldingen", + "filterByActionTypeAria": "Filter op actietype", + "filterByActorAria": "Filter op acteur", + "refreshAuditLogAria": "Vernieuw het auditlogboek", + "tableAria": "Auditlogboekvermeldingen", + "failedFetchAuditLog": "Kan het auditlogboek niet ophalen", + "showing": "{count} items tonen (offset {offset})", + "search": "Zoeken", + "timestamp": "Tijdstempel", + "action": "Actie", + "actor": "Acteur", + "target": "Doel", + "details": "Details", + "ipAddress": "IP-adres", + "notAvailable": "—", + "noEntries": "Geen auditlogboekvermeldingen gevonden", + "previous": "Vorige", + "next": "Volgende" + }, + "onboarding": { + "welcome": "Welkom", + "security": "Beveiliging", + "test": "Testen", + "ready": "Klaar!", + "setPassword": "Wachtwoord instellen", + "addProvider": "Voeg uw eerste provider toe", + "getStarted": "Aan de slag", + "skip": "Overslaan", + "skipWizard": "Sla de wizard geheel over", + "skipPassword": "Wachtwoordconfiguratie overslaan", + "skipAndContinue": "Overslaan en doorgaan", + "passwordLabel": "Wachtwoord", + "confirmPassword": "Bevestig wachtwoord", + "enterPassword": "Voer wachtwoord in", + "confirmPasswordPlaceholder": "Bevestig wachtwoord", + "passwordsMismatch": "Wachtwoorden komen niet overeen", + "setupComplete": "Installatie voltooid!", + "goToDashboard": "Ga naar Dashboard →", + "welcomeDesc": "OmniRoute is uw lokale AI API-proxy. Het stuurt verzoeken door naar meerdere AI-providers met taakverdeling, failover en gebruiksregistratie.", + "multiProvider": "Meerdere aanbieders", + "usageTracking": "Gebruik volgen", + "apiKeyMgmt": "API-sleutelbeheer", + "securityDesc": "Stel een wachtwoord in om uw dashboard te beschermen, of sla dit voorlopig over.", + "providerDesc": "Sluit uw eerste AI-provider aan. Je kunt later meer toevoegen.", + "apiKeyRequired": "API-sleutel (vereist)", + "customUrlOptional": "Aangepaste URL (optioneel)", + "testDesc": "Laten we controleren of uw providerverbinding werkt.", + "runTest": "Voer de verbindingstest uit", + "testingConnection": "Verbinding testen...", + "connectionSuccessful": "Verbinding succesvol! Uw provider is er klaar voor.", + "noProviderFound": "Geen aanbieder gevonden. U kunt er later een toevoegen via het dashboard.", + "testFailed": "Test mislukt, maar u kunt dit later configureren.", + "couldNotTest": "Kon nu niet testen. U kunt testen vanaf het dashboard.", + "doneDesc": "Je bent helemaal klaar! Uw OmniRoute-instantie is geconfigureerd en klaar om AI-verzoeken te proxyeren.", + "yourEndpoint": "Uw eindpunt:", + "continue": "Ga door", + "retry": "Opnieuw proberen", + "failedSetPassword": "Kan wachtwoord niet instellen. Probeer het opnieuw.", + "failedAddProvider": "Kan provider niet toevoegen. Probeer het opnieuw.", + "connectionError": "Verbindingsfout. Probeer het opnieuw.", + "provider": "Aanbieder" + }, + "providers": { + "title": "Aanbieders", + "addProvider": "Aanbieder toevoegen", + "editProvider": "Aanbieder bewerken", + "deleteProvider": "Aanbieder verwijderen", + "noProviders": "Geen providers geconfigureerd", + "modelAvailability": "Beschikbaarheid van modellen", + "accounts": "Rekeningen", + "newAccount": "Nieuw account", + "deleteConfirm": "Weet u zeker dat u deze aanbieder wilt verwijderen?", + "testing": "Testen...", + "testConnection": "Verbinding testen", + "testSuccess": "Verbinding succesvol", + "testFailed": "Verbinding mislukt", + "available": "Beschikbaar", + "cooldown": "Afkoelen", + "unavailable": "Niet beschikbaar", + "unknown": "Onbekend", + "oauthLabel": "OAuth", + "compatibleLabel": "Compatibel", + "chat": "Chatten", + "responses": "Reacties", + "messages": "Berichten", + "oauthProviders": "OAuth-providers", + "freeProviders": "Gratis aanbieders", + "apiKeyProviders": "API-sleutelproviders", + "compatibleProviders": "API-sleutel-compatibele providers", + "testAll": "Alles testen", + "testAllOAuth": "Test alle OAuth-verbindingen", + "testAllFree": "Test alle vrije verbindingen", + "testAllApiKey": "Test alle API Key-verbindingen", + "testAllCompatible": "Test alle compatibele verbindingen", + "connected": "{count} Verbonden", + "errorCount": "{count} Fout ({code})", + "errorCountNoCode": "{count} Fout", + "noConnections": "Geen verbindingen", + "disabled": "Uitgeschakeld", + "enableProvider": "Aanbieder inschakelen", + "disableProvider": "Schakel aanbieder uit", + "testResults": "Testresultaten", + "noCompatibleYet": "Er zijn nog geen compatibele providers toegevoegd", + "compatibleHint": "Gebruik de knoppen hierboven om OpenAI- of Anthropic-compatibele eindpunten toe te voegen", + "addOpenAICompatible": "Voeg OpenAI-compatibel toe", + "addAnthropicCompatible": "Antropisch compatibel toevoegen", + "addNewProvider": "Nieuwe aanbieder toevoegen", + "backToProviders": "Terug naar Aanbieders", + "configureNewProvider": "Configureer een nieuwe AI-provider voor gebruik met uw toepassingen.", + "providerLabel": "Aanbieder", + "selectProvider": "Selecteer een aanbieder", + "selectedProvider": "Geselecteerde aanbieder", + "authMethod": "Authenticatiemethode", + "apiKeyLabel": "API-sleutel", + "apiKeyRequired": "API-sleutel is vereist", + "selectProviderRequired": "Selecteer een aanbieder", + "enterApiKey": "Voer uw API-sleutel in", + "apiKeySecure": "Uw API-sleutel wordt gecodeerd en veilig opgeslagen.", + "oauth2Connect": "Maak verbinding met OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Verbind uw account met OAuth2-authenticatie.", + "displayName": "Weergavenaam", + "displayNamePlaceholder": "bijvoorbeeld productie-API, ontwikkelomgeving", + "displayNameHint": "Optioneel. Een beschrijvende naam om deze configuratie te identificeren.", + "active": "Actief", + "activeDescription": "Schakel deze provider in voor gebruik in uw applicaties", + "cancel": "Annuleer", + "createProvider": "Aanbieder maken", + "failedCreate": "Kan provider niet maken", + "errorOccurred": "Er is een fout opgetreden. Probeer het opnieuw.", + "modelStatus": "Modelstatus", + "allModelsOperational": "Alle modellen operationeel", + "modelsWithIssues": "{count} model(len) met problemen", + "allModelsNormal": "Alle modellen reageren normaal.", + "cooldownCleared": "Afkoelperiode gewist voor {model}", + "failedClearCooldown": "Kan de cooldown niet wissen", + "loadingAvailability": "Beschikbaarheid van modellen laden...", + "clearCooldown": "Duidelijk", + "clearing": "Wissen...", + "until": "Tot {time}", + "providerTestFailed": "Providertest mislukt", + "modeTest": "{mode} Testen", + "passedCount": "{count} geslaagd", + "failedCount": "{count} mislukt", + "testedCount": "{count} getest", + "millisecondsAbbr": "{value}ms", + "okShort": "Oké", + "errorShort": "FOUT", + "noActiveConnectionsInGroup": "Er zijn geen actieve verbindingen gevonden voor deze groep.", + "allTestsPassed": "Alle {total} tests zijn geslaagd", + "testSummary": "{passed}/{total} geslaagd, {failed} mislukt", + "nameLabel": "Naam", + "prefixLabel": "Voorvoegsel", + "baseUrlLabel": "Basis-URL", + "apiTypeLabel": "API-type", + "prefixHint": "Vereist. Uniek voorvoegsel voor modelnamen.", + "nameHint": "Vereist. Een vriendelijk label voor dit knooppunt.", + "baseUrlHint": "Vereist.  Basis-URL van de provider-API.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Valideer verbinding", + "validating": "Valideren...", + "connectionValid": "Verbinding is geldig!", + "connectionFailed": "Verbinding mislukt. Controleer URL en sleutel.", + "testKeyLabel": "API-sleutel testen", + "testKeyPlaceholder": "sk-... (alleen ter validatie)", + "providerNotFound": "Aanbieder niet gevonden", + "deleteConnectionConfirm": "Deze verbinding verwijderen?", + "failedSetAlias": "Kan alias niet instellen", + "failedSaveConnection": "Kan de verbinding niet opslaan", + "failedSaveConnectionRetry": "Kan de verbinding niet opslaan. Probeer het opnieuw.", + "failedRetestConnection": "Kan de verbinding niet opnieuw testen", + "deleteCompatibleNodeConfirm": "Dit {type} compatibele knooppunt verwijderen?", + "anthropicCompatibleDetails": "Antropische compatibele details", + "openaiCompatibleDetails": "OpenAI-compatibele details", + "messagesApi": "Berichten-API", + "responsesApi": "Reacties-API", + "chatCompletions": "Chat-voltooiingen", + "importingModels": "Importeren...", + "importFromModels": "Importeren uit /modellen", + "addConnectionToImport": "Voeg een verbinding toe om importeren mogelijk te maken.", + "noModelsConfigured": "Geen modellen geconfigureerd", + "connectionCount": "{count} verbinding(en)", + "fetchingModels": "Beschikbare modellen ophalen...", + "failedFetchModels": "Kan modellen niet ophalen", + "noModelsFound": "Geen modellen gevonden", + "importFailed": "Importeren is mislukt", + "noNewModelsAdded": "Er zijn geen nieuwe modellen toegevoegd.", + "adding": "Toevoegen...", + "importingModelsTitle": "Modellen importeren", + "copyModel": "Kopieermodel", + "removeModel": "Model verwijderen", + "rateLimitProtected": "Beschermd", + "rateLimitUnprotected": "Onbeschermd", + "enableRateLimitProtection": "Klik om de snelheidslimietbescherming in te schakelen", + "disableRateLimitProtection": "Klik om de snelheidslimietbescherming uit te schakelen", + "productionKey": "Productie sleutel", + "enterNewApiKey": "Voer een nieuwe API-sleutel in", + "optional": "Optioneel", + "anthropicCompatibleName": "Antropisch compatibel", + "openaiCompatibleName": "OpenAI-compatibel", + "failedImportModels": "Kan modellen niet importeren", + "noModelsReturnedFromEndpoint": "Er zijn geen modellen geretourneerd door het /models-eindpunt.", + "importingModelsProgress": "Importeren van {current} van {total} modellen...", + "foundModelsStartingImport": "{count} modellen gevonden. Importeren starten...", + "importingModelById": "{modelId} importeren...", + "importSuccessCount": "Succesvol geïmporteerd {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Er zijn geen nieuwe modellen toegevoegd (ze bestaan allemaal al).", + "importDoneCount": "✓ Klaar! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Er is een onverwachte fout opgetreden", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "berichten", + "responsesPath": "reacties", + "chatCompletionsPath": "chat/voltooiingen", + "add": "Toevoegen", + "edit": "Bewerken", + "delete": "Verwijderen", + "anthropic": "Antropisch", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Per compatibel knooppunt is slechts één verbinding toegestaan. Voeg nog een knooppunt toe als u meer verbindingen nodig heeft.", + "connections": "Verbindingen", + "providerProxyTitleConfigured": "Providerproxy: {host}", + "configured": "geconfigureerd", + "providerProxyConfigureHint": "Configureer proxy voor alle verbindingen van deze provider", + "providerProxy": "Proxy van aanbieder", + "noConnectionsYet": "Nog geen verbindingen", + "addFirstConnectionHint": "Voeg uw eerste verbinding toe om aan de slag te gaan", + "addConnection": "Verbinding toevoegen", + "availableModels": "Beschikbare modellen", + "pageAutoRefresh": "Pagina wordt automatisch vernieuwd...", + "statusDisabled": "uitgeschakeld", + "statusConnected": "verbonden", + "statusRuntimeIssue": "runtime-probleem", + "statusAuthFailed": "verificatie is mislukt", + "statusRateLimited": "tarief beperkt", + "statusNetworkIssue": "netwerk probleem", + "statusTestUnsupported": "test niet ondersteund", + "statusUnavailable": "niet beschikbaar", + "statusFailed": "mislukt", + "statusError": "fout", + "oauthAccount": "OAuth-account", + "errorTypeRuntime": "Lokale looptijd", + "errorTypeUpstreamAuth": "Upstream-auth", + "errorTypeMissingCredential": "Ontbrekende legitimatie", + "errorTypeRefreshFailed": "Vernieuwen mislukt", + "errorTypeTokenExpired": "Token verlopen", + "errorTypeRateLimited": "Tarief beperkt", + "errorTypeUpstreamUnavailable": "Stroomopwaarts niet beschikbaar", + "errorTypeNetworkError": "Netwerkfout", + "errorTypeTestUnsupported": "Test niet ondersteund", + "errorTypeUpstreamError": "Stroomopwaartse fout", + "proxySourceGlobal": "Globaal", + "proxySourceProvider": "Aanbieder", + "proxySourceKey": "Sleutel", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Automatisch: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Test de authenticatie opnieuw", + "retest": "Opnieuw testen", + "disableConnection": "Verbinding uitschakelen", + "enableConnection": "Verbinding inschakelen", + "reauthenticateConnection": "Authenticeer deze verbinding opnieuw", + "proxyConfig": "Proxy-configuratie", + "aliasExistsAlert": "Alias \"{alias}\" bestaat al. Gebruik een ander model of bewerk de bestaande alias.", + "openRouterAnyModelHint": "OpenRouter ondersteunt elk model. Voeg modellen toe en maak aliassen voor snelle toegang.", + "modelIdFromOpenRouter": "Model-ID (van OpenRouter)", + "openRouterModelPlaceholder": "antropisch/claude-3-opus", + "customModels": "Aangepaste modellen", + "customModelsHint": "Voeg model-ID's toe die niet in de standaardlijst staan. Deze zullen beschikbaar zijn voor routering.", + "modelId": "Model-ID", + "customModelPlaceholder": "bijv. gpt-4.5-turbo", + "loading": "Laden...", + "removeCustomModel": "Aangepast model verwijderen", + "noCustomModels": "Er zijn nog geen aangepaste modellen toegevoegd.", + "allSuggestedAliasesExist": "Alle voorgestelde aliassen bestaan al. Kies een ander model of verwijder conflicterende aliassen.", + "failedSaveCustomModel": "Kan aangepast model niet opslaan", + "modelAddedSuccess": "Model {modelId} is succesvol toegevoegd", + "failedAddModelTryAgain": "Kan model niet toevoegen. Probeer het opnieuw.", + "failedSaveImportedModel": "Kan het geïmporteerde model niet opslaan in de aangepaste database", + "failedImportModelsTryAgain": "Kan modellen niet importeren. Probeer het opnieuw.", + "failedRemoveModelFromDatabase": "Kan het model niet uit de database verwijderen", + "modelRemovedSuccess": "Model succesvol verwijderd", + "failedDeleteModelTryAgain": "Kan model niet verwijderen. Probeer het opnieuw.", + "compatibleModelsDescription": "Voeg {type}-compatibele modellen handmatig toe of importeer ze vanaf het /models-eindpunt.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Validatie van API-sleutel mislukt. Controleer uw sleutel en probeer het opnieuw.", + "addProviderApiKeyTitle": "Voeg {provider} API-sleutel toe", + "checking": "Controleren...", + "check": "Controleer", + "valid": "Geldig", + "invalid": "Ongeldig", + "creating": "Creëren...", + "validationChecksAnthropicCompatible": "Validatiecontroles {provider} door de API-sleutel te verifiëren.", + "validationChecksOpenAiCompatible": "Validatiecontroles {provider} via /models op uw basis-URL.", + "priorityLabel": "Prioriteit", + "saving": "Opslaan...", + "save": "Opslaan", + "editConnection": "Verbinding bewerken", + "accountName": "Accountnaam", + "email": "E-mail", + "healthCheckMinutes": "Gezondheidscontrole (min)", + "healthCheckHint": "Proactief tokenvernieuwingsinterval. 0 = uitgeschakeld.", + "failedTestConnection": "Kan de verbinding niet testen", + "failed": "Mislukt", + "leaveBlankKeepCurrentApiKey": "Laat dit leeg om de huidige API-sleutel te behouden.", + "editCompatibleTitle": "Bewerk {type} Compatibel", + "compatibleBaseUrlHint": "Gebruik de basis-URL (eindigend op /v1) voor uw {type}-compatibele API.", + "apiKeyForCheck": "API-sleutel (ter controle)", + "compatibleProdPlaceholder": "{type} Compatibel (product)" + }, + "settings": { + "title": "Instellingen", + "general": "Algemeen", + "security": "Beveiliging", + "appearance": "Uiterlijk", + "routing": "Routering", + "cache": "Cache", + "resilience": "Veerkracht", + "systemPrompt": "Systeemprompt", + "thinkingBudget": "Denkbudget", + "proxy": "Proxy", + "pricing": "Prijzen", + "storage": "Opslag", + "policies": "Beleid", + "ipFilter": "IP-filter", + "comboDefaults": "Combo-standaardinstellingen", + "fallbackChains": "Terugvalketens", + "changePassword": "Wachtwoord wijzigen", + "enablePassword": "Wachtwoord inschakelen", + "darkMode": "Donkere modus", + "lightMode": "Lichtmodus", + "systemTheme": "Systeem Thema", + "enableCache": "Cache inschakelen", + "cacheTTL": "TTL cachen", + "maxCacheSize": "Maximale cachegrootte", + "clearCache": "Cache wissen", + "cacheHits": "Cache-hits", + "cacheMisses": "Cache-missers", + "hitRate": "Hitpercentage", + "cacheEntries": "Cache-invoer", + "circuitBreaker": "Stroomonderbreker", + "retryPolicy": "Beleid voor opnieuw proberen", + "maxRetries": "Maximaal aantal nieuwe pogingen", + "retryDelay": "Vertraging opnieuw proberen", + "timeoutMs": "Time-out (ms)", + "enableSystemPrompt": "Systeemprompt inschakelen", + "systemPromptText": "Systeemprompttekst", + "enableThinking": "Maak het denken mogelijk", + "maxThinkingTokens": "Max Thinking-tokens", + "enableProxy": "Schakel proxy in", + "proxyUrl": "Proxy-URL", + "pricingRates": "Formaat prijstarieven", + "currentPricing": "Actueel prijsoverzicht", + "loadingPricing": "Prijsgegevens laden...", + "noPricing": "Geen prijsgegevens beschikbaar", + "input": "Invoer", + "output": "Uitvoer", + "cached": "In cache opgeslagen", + "reasoning": "Redenering", + "cacheCreation": "Cache-creatie", + "customPricing": "Aangepaste prijzen", + "databaseSize": "Databasegrootte", + "backupDb": "Back-updatabase", + "restoreDb": "Database herstellen", + "exportData": "Gegevens exporteren", + "importData": "Gegevens importeren", + "clearData": "Wis alle gegevens", + "clearDataConfirm": "Hierdoor worden alle gegevens definitief verwijderd. Weet je het zeker?", + "enableRequestLogs": "Schakel aanvraaglogboeken in", + "logRetention": "Logboekbehoud", + "ipWhitelist": "IP-witte lijst", + "ipBlacklist": "IP-zwarte lijst", + "addIP": "IP toevoegen", + "savedSuccessfully": "Instellingen succesvol opgeslagen", + "ai": "AI", + "advanced": "Geavanceerd", + "localMode": "Lokale modus — Alle gegevens die op uw machine zijn opgeslagen", + "settingsSectionsAria": "Instellingensecties", + "switchThemes": "Wissel tussen lichte en donkere thema's", + "themeSelectionAria": "Thema selectie", + "themeLight": "Licht", + "themeDark": "Donker", + "themeSystem": "Systeem", + "hideHealthLogs": "Statuschecklogboeken verbergen", + "hideHealthLogsDesc": "Indien AAN: onderdruk [HealthCheck]-berichten in de serverconsole", + "promptCache": "Snelle cache", + "flushCache": "Cache leegmaken", + "flushing": "Doorspoelen…", + "size": "Grootte", + "hits": "Hits", + "evictions": "Uitzettingen", + "loadingCacheStats": "Cachestatistieken laden…", + "globalProxy": "Mondiale proxy", + "globalProxyDesc": "Configureer een globale uitgaande proxy voor alle API-aanroepen. Individuele providers, combo's en sleutels kunnen dit overschrijven.", + "noGlobalProxy": "Geen globale proxy geconfigureerd", + "globalLabel": "Globaal", + "configure": "Configureer", + "globalSystemPrompt": "Globale systeemprompt", + "systemPromptDesc": "Geïnjecteerd in alle verzoeken op proxyniveau", + "saved": "Opgeslagen", + "systemPromptPlaceholder": "Voer de systeemprompt in om in alle verzoeken te injecteren...", + "systemPromptHint": "Deze prompt wordt toegevoegd aan het systeembericht van elk verzoek. Gebruik voor algemene instructies, veiligheidsrichtlijnen of regels voor de opmaak van antwoorden.", + "chars": "{count} tekens", + "thinkingBudgetTitle": "Denkbudget", + "thinkingBudgetDesc": "Beheer het gebruik van AI-redeneringstokens voor alle verzoeken", + "passthrough": "Doorvoer", + "passthroughDesc": "Geen wijzigingen – de klant bepaalt het denkbudget", + "auto": "Automatisch", + "autoDesc": "Verwijder alle denkconfiguraties – laat de provider beslissen", + "custom": "Aangepast", + "customDesc": "Stel een vast tokenbudget in voor alle verzoeken", + "adaptive": "Adaptief", + "adaptiveDesc": "Schaal het budget op basis van de complexiteit van de aanvraag", + "effortNone": "Geen (0 tokens)", + "effortLow": "Laag (1K-tokens)", + "effortMedium": "Medium (10K-tokens)", + "effortHigh": "Hoog (128K tokens)", + "tokenBudget": "Tokenbudget", + "tokens": "tokens", + "baseEffortLevel": "Basisinspanningsniveau", + "adaptiveHint": "De adaptieve modus schaalt vanaf dit basisniveau op basis van het aantal berichten, het gebruik van tools en de lengte van de prompt.", + "requireLogin": "Inloggen vereisen", + "requireLoginDesc": "Indien AAN vereist het dashboard een wachtwoord. Wanneer UIT: toegang zonder inloggen.", + "currentPassword": "Huidig wachtwoord", + "enterCurrentPassword": "Voer het huidige wachtwoord in", + "newPassword": "Nieuw wachtwoord", + "enterNewPassword": "Voer een nieuw wachtwoord in", + "confirmPassword": "Bevestig nieuw wachtwoord", + "confirmPasswordPlaceholder": "Bevestig nieuw wachtwoord", + "passwordsNoMatch": "Wachtwoorden komen niet overeen", + "passwordUpdated": "Wachtwoord succesvol bijgewerkt", + "failedUpdatePassword": "Kan wachtwoord niet updaten", + "errorOccurred": "Er is een fout opgetreden", + "updatePassword": "Wachtwoord bijwerken", + "setPassword": "Wachtwoord instellen", + "apiEndpointProtection": "API-eindpuntbeveiliging", + "requireAuthModels": "API-sleutel vereisen voor /models", + "requireAuthModelsDesc": "Indien AAN, retourneert het /v1/models eindpunt 404 voor niet-geverifieerde verzoeken. Voorkomt modeldetectie door ongeautoriseerde gebruikers.", + "blockedProviders": "Geblokkeerde aanbieders", + "blockedProvidersDesc": "Verberg specifieke providers in het antwoord /v1/models. Geblokkeerde aanbieders verschijnen niet in modeloverzichten.", + "providersBlocked": "{count} provider(s) geblokkeerd voor /models", + "blockProviderTitle": "Blokkeer {provider}", + "unblockProviderTitle": "Deblokkeer {provider}", + "routingStrategy": "Routeringsstrategie", + "fillFirst": "Vul eerst", + "fillFirstDesc": "Gebruik accounts in prioriteitsvolgorde", + "roundRobin": "Ronde Robin", + "roundRobinDesc": "Blader door alle accounts", + "p2c": "P2C", + "p2cDesc": "Kies er 2 willekeurig, gebruik de gezondere", + "random": "Willekeurig", + "randomDesc": "Willekeurig account bij elk verzoek", + "leastUsed": "Minst gebruikt", + "leastUsedDesc": "Kies het minst recent gebruikte account", + "costOpt": "Kosten opt", + "costOptDesc": "Geef de voorkeur aan het goedkoopste beschikbare account", + "stickyLimit": "Kleverige limiet", + "stickyLimitDesc": "Gesprekken per account voordat u overstapt", + "modelAliases": "Modelaliassen", + "modelAliasesDesc": "Jokertekenpatronen om modelnamen opnieuw toe te wijzen • Gebruik * en ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Patroon", + "targetModel": "Doelmodel", + "add": "+ Toevoegen", + "session": "Sessie", + "sessionDetailsAria": "Sessiedetails", + "status": "Status", + "authenticated": "Geauthenticeerd", + "guest": "Gast", + "loginTime": "Inlogtijd", + "sessionAge": "Sessie leeftijd", + "browser": "Browser", + "clearLocalData": "Lokale gegevens wissen", + "logout": "Uitloggen", + "clearLocalDataConfirm": "Alle lokale gegevens wissen? Hiermee worden uw voorkeuren opnieuw ingesteld.", + "unknown": "Onbekend", + "systemActor": "systeem", + "ipAccessControl": "IP-toegangscontrole", + "ipAccessControlDesc": "Blokkeer of sta specifieke IP-adressen toe", + "ipModeDisabled": "Uitgeschakeld", + "ipModeBlacklist": "Zwarte lijst", + "ipModeWhitelist": "Witte lijst", + "ipModeWhitelistPriority": "WL-prioriteit", + "addIpAddress": "IP-adres toevoegen", + "ipAddressPlaceholder": "192.168.1.0/24 of 10.0.*.*", + "block": "+ Blok", + "allow": "+ Toestaan", + "blocked": "Geblokkeerd ({count})", + "allowed": "Toegestaan ({count})", + "temporaryBans": "Tijdelijke verbanningen ({count})", + "minLeft": "{min}m over", + "auditLog": "Auditlogboek", + "searchAuditLogs": "Auditlogboeken zoeken...", + "failedLoadAuditLog": "Kan het auditlogboek niet laden", + "noAuditEvents": "Geen auditgebeurtenissen gevonden", + "action": "Actie", + "actor": "Acteur", + "details": "Details", + "time": "Tijd", + "fallbackChainsTitle": "Terugvalketens", + "fallbackChainsDesc": "Definieer de terugvalvolgorde van de provider per model", + "addChain": "+ Ketting toevoegen", + "modelName": "Modelnaam", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Providers (door komma's gescheiden, in prioriteitsvolgorde)", + "providersCommaSeparatedPlaceholder": "antropisch, openai, gemini", + "createChain": "Creëer keten", + "noFallbackChains": "Geen terugvalketens", + "noFallbackChainsDesc": "Maak een keten om de terugvalvolgorde van de provider voor een model te definiëren.", + "loadingFallbackChains": "Terugvalketens laden...", + "deleteChainConfirm": "Terugvalketen voor \"{model}\" verwijderen?", + "chainCreated": "Keten gemaakt voor {model}", + "chainDeleted": "Keten verwijderd voor {model}", + "failedCreateChain": "Kan keten niet maken", + "failedDeleteChain": "Kan keten niet verwijderen", + "deleteChain": "Ketting verwijderen", + "fillModelAndProviders": "Vul de modelnaam en leveranciers in", + "addAtLeastOneProvider": "Voeg ten minste één aanbieder toe", + "comboDefaultsTitle": "Combo-standaardinstellingen", + "globalComboConfig": "Globale combo-configuratie", + "defaultStrategy": "Standaardstrategie", + "defaultStrategyDesc": "Toegepast op nieuwe combo's zonder expliciete strategie", + "comboStrategyAria": "Combinatiestrategie", + "priority": "Prioriteit", + "weighted": "Gewogen", + "maxRetriesLabel": "Maximaal aantal nieuwe pogingen", + "retryDelayLabel": "Vertraging opnieuw proberen (ms)", + "timeoutLabel": "Time-out (ms)", + "healthCheck": "Gezondheidscontrole", + "healthCheckDesc": "Controleer vooraf de beschikbaarheid van de provider", + "trackMetrics": "Houd statistieken bij", + "trackMetricsDesc": "Registreer verzoekstatistieken per combinatie", + "providerOverrides": "Provideroverschrijvingen", + "providerOverridesDesc": "Time-out en nieuwe pogingen per provider negeren. Providerinstellingen overschrijven de algemene standaardwaarden.", + "providerMaxRetriesAria": "{provider} max. nieuwe pogingen", + "providerTimeoutAria": "{provider} time-out ms", + "removeProviderOverrideAria": "Verwijder de overschrijving van {provider}", + "newProviderNamePlaceholder": "bijv. google, open...", + "newProviderNameAria": "Nieuwe providernaam", + "retries": "nieuwe pogingen", + "ms": "mevrouw", + "saveComboDefaults": "Bewaar combo-standaardinstellingen", + "maxNestingDepth": "Maximale nestdiepte", + "concurrencyPerModel": "Gelijktijdigheid / model", + "queueTimeout": "Wachtrijtime-out (ms)", + "providerProfiles": "Providerprofielen", + "providerProfilesDesc": "Afzonderlijke veerkrachtinstellingen voor OAuth (sessiegebaseerd) en API Key (gemeten) providers. OAuth-providers hanteren strengere drempels vanwege lagere tarieflimieten.", + "oauthProviders": "OAuth-providers", + "apiKeyProviders": "API-sleutelproviders", + "transientCooldown": "Tijdelijke afkoeling", + "rateLimitCooldown": "Afkoelperiode van snelheidslimiet", + "maxBackoffLevel": "Maximaal uitstelniveau", + "cbThreshold": "CB-drempel", + "cbResetTime": "CB-resettijd", + "rateLimiting": "Tariefbeperking", + "rateLimitingDesc": "API-sleutelproviders zijn automatisch beperkt in snelheid met veilige standaardinstellingen. Limieten worden geleerd uit antwoordheaders en worden in de loop van de tijd aangepast.", + "defaultSafetyNet": "Standaard veiligheidsnet", + "rpm": "toerental", + "minGap": "Min. kloof", + "maxConcurrent": "Maximaal gelijktijdig", + "activeLimiters": "Actieve begrenzers", + "noActiveLimiters": "Nog geen actieve snelheidsbegrenzers.", + "reservoir": "Reservoir", + "running": "Rennen", + "queued": "In de wachtrij", + "circuitBreakers": "Stroomonderbrekers", + "breakerStateClosed": "Gesloten", + "breakerStateOpen": "Openen", + "breakerStateHalfOpen": "Halfopen", + "tripped": "{count} is geactiveerd", + "healthy": "{count} gezond", + "resetAll": "Alles resetten", + "noCircuitBreakers": "Er zijn nog geen stroomonderbrekers actief. Ze worden automatisch gemaakt wanneer aanvragen via de combo-pijplijn stromen.", + "failures": "{count} fout(en)", + "policiesLocked": "Beleid en vergrendelde identificatiegegevens", + "allOperational": "Alle systemen operationeel — geen vergrendelingen of geactiveerde onderbrekers", + "loadingPolicies": "Beleid laden...", + "lockedIdentifiers": "Vergrendelde identificatiegegevens", + "unlockedIdentifier": "Ontgrendeld: {identifier}", + "sinceDate": "sinds {date}", + "forceUnlock": "Forceer ontgrendeling", + "unlocking": "Ontgrendelen...", + "failedUnlock": "Ontgrendelen is mislukt", + "failedLoadWithStatus": "Kan niet laden: {status}", + "failedLoadResilience": "Kan de veerkrachtstatus niet laden", + "saveFailed": "Opslaan mislukt", + "resetFailed": "Resetten mislukt", + "loadingResilience": "Veerkrachtstatus laden...", + "retry": "Opnieuw proberen", + "systemStorage": "Systeem en opslag", + "allDataLocal": "Alle gegevens lokaal opgeslagen op uw machine", + "databasePath": "Databasepad", + "exportDatabase": "Database exporteren", + "exportAll": "Alles exporteren (.tar.gz)", + "importDatabase": "Database importeren", + "confirmDbImport": "Bevestig database-import", + "confirmDbImportDesc": "Hierdoor worden alle huidige gegevens vervangen door de inhoud van {file}. Er wordt automatisch een back-up gemaakt vóór de import.", + "yesImport": "Ja, importeren", + "lastBackup": "Laatste back-up", + "noBackupYet": "Nog geen back-up", + "backupNow": "Maak nu een back-up", + "backupRestore": "Back-up en herstel", + "viewBackups": "Back-ups bekijken", + "hide": "Verbergen", + "backupRetentionDesc": "Database-snapshots worden automatisch gemaakt vóór herstel en elke 15 minuten wanneer gegevens veranderen. Retentie: 24 uur per dag + 30 dagelijkse back-ups met slimme rotatie.", + "loadingBackups": "Back-ups laden...", + "noBackupsYet": "Er zijn nog geen back-ups beschikbaar. Er worden automatisch back-ups gemaakt als gegevens veranderen.", + "backupsAvailable": "{count} back-up(s) beschikbaar", + "refresh": "Vernieuwen", + "confirm": "Bevestigen?", + "yes": "Ja", + "no": "Nee", + "restore": "Herstellen", + "invalidFileType": "Ongeldig bestandstype. Alleen .sqlite-bestanden worden geaccepteerd.", + "exportFailed": "Exporteren is mislukt", + "exportFailedWithError": "Exporteren mislukt: {error}", + "fullExportFailedWithError": "Volledige export mislukt: {error}", + "backupCreated": "Back-up gemaakt: {file}", + "restoreSuccess": "Hersteld! {connections} verbindingen, {nodes} knooppunten, {combos} combo's, {apiKeys} API-sleutels.", + "importSuccess": "Database geïmporteerd! {connections} verbindingen, {nodes} knooppunten, {combos} combo's, {apiKeys} API-sleutels.", + "justNow": "zojuist", + "minutesAgo": "{count}m geleden", + "hoursAgo": "{count}u geleden", + "daysAgo": "{count}d geleden", + "backupReasonManual": "handleiding", + "backupReasonPreRestore": "vooraf herstellen", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Geen wijzigingen sinds de laatste back-up", + "backupFailed": "Back-up mislukt", + "restoreFailed": "Herstellen mislukt", + "importFailed": "Importeren is mislukt", + "errorDuringRestore": "Er is een fout opgetreden tijdens het herstellen", + "errorDuringImport": "Er is een fout opgetreden tijdens het importeren", + "modelPricing": "Modelprijzen", + "modelPricingDesc": "Kostentarieven per model configureren • Alle tarieven in $/1M tokens", + "providers": "Aanbieders", + "registry": "Register", + "priced": "Geprijsd", + "searchProvidersModels": "Zoekaanbieders of modellen...", + "showAll": "Toon alles", + "noProvidersMatch": "Er zijn geen aanbieders die overeenkomen met uw zoekopdracht.", + "howPricingWorks": "Hoe prijzen werken", + "cacheWrite": "Cache schrijven", + "unsaved": "niet opgeslagen", + "resetDefaults": "Standaardwaarden opnieuw instellen", + "saveProvider": "Aanbieder opslaan", + "saving": "Opslaan...", + "model": "Model", + "models": "modellen", + "moreProviders": "{count} meer aanbieders", + "withPricing": "met geconfigureerde prijzen", + "policiesCircuitBreakers": "Beleid en stroomonderbrekers", + "activeIssuesDetected": "Actieve problemen gedetecteerd", + "off": "Uit", + "resetPricingConfirm": "Alle prijzen voor {provider} terugzetten naar de standaardwaarden?", + "pricingDescInput": "Invoer: tokens verzonden naar het model", + "pricingDescOutput": "Uitvoer: tokens gegenereerd", + "pricingDescCached": "In cache opgeslagen: hergebruikte invoer (~50% van invoersnelheid)", + "pricingDescReasoning": "Redeneren: denktokens (valt terug naar Output)", + "pricingDescCacheWrite": "Cache Write: cache-items maken (valt terug naar Input)", + "pricingDescFormula": "Kosten = (invoer × invoer_snelheid) + (uitvoer × uitvoer_snelheid) + (in cache opgeslagen × in cache opgeslagen_snelheid) per miljoen tokens.", + "pricingSettingsTitle": "Prijsinstellingen", + "totalModels": "Totaal modellen", + "active": "Actief", + "costCalculation": "Kostenberekening", + "costCalculationDesc": "De kosten worden berekend op basis van tokengebruik en prijstarieven die voor elk model zijn geconfigureerd.", + "pricingFormat": "Prijsformaat", + "pricingFormatDesc": "Alle tarieven zijn in $/1 miljoen tokens (dollars per miljoen tokens).", + "tokenTypes": "Tokentypen", + "inputTokenDesc": "Standaard prompttokens", + "outputTokenDesc": "Voltooiing/antwoordtokens", + "cachedTokenDesc": "Invoertokens in cache (meestal 50% van invoersnelheid)", + "reasoningTokenDesc": "Speciale redeneer-/denkfiches (terugval op uitvoersnelheid)", + "cacheCreationTokenDesc": "Tokens die worden gebruikt om cache-items te maken (terugval op invoersnelheid)", + "customPricingNote": "U kunt de standaardprijzen voor specifieke modellen overschrijven. Aangepaste overschrijvingen hebben voorrang op automatisch gedetecteerde prijzen.", + "editPricing": "Prijzen bewerken", + "viewFullDetails": "Bekijk volledige details" + }, + "translator": { + "title": "Vertaler", + "metaTitle": "Vertaler Speeltuin | OmniRoute", + "metaDescription": "Debug, test en visualiseer vertalingen van API-indelingen tussen providers", + "playgroundTitle": "Vertaler Speeltuin", + "playground": "Speeltuin", + "realtime": "Realtime vertaalactiviteit", + "chatTester": "Chattester", + "testBench": "Testbank", + "liveMonitor": "Live-monitor", + "modeDescriptionPlayground": "Plak de hoofdtekst van een API-verzoek en kijk hoe OmniRoute deze vertaalt tussen providerformaten (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Stuur echte chatverzoeken via OmniRoute en inspecteer de volledige retour: invoer, vertaalde aanvraag, respons van de provider en vertaalde uitvoer.", + "modeDescriptionTestBench": "Voer vooraf gedefinieerde scenario's uit en vergelijk de compatibiliteit tussen providers en modellen.", + "modeDescriptionLiveMonitor": "Bekijk vertaalgebeurtenissen in realtime terwijl verzoeken via OmniRoute stromen.", + "modeDescriptionFallback": "Debug, test en visualiseer hoe OmniRoute API-verzoeken tussen providers vertaalt.", + "recentTranslations": "Recente vertalingen", + "noTranslations": "Nog geen vertalingen", + "source": "Bron", + "target": "Doel", + "time": "Tijd", + "model": "Model", + "status": "Status", + "latency": "Latentie", + "totalTranslations": "Totaal aantal vertalingen", + "successful": "Succesvol", + "errors": "Fouten", + "avgLatency": "Gem. latentie", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live - Automatisch vernieuwen", + "paused": "Gepauzeerd", + "eventsAppearHint": "Vertaalgebeurtenissen verschijnen hier terwijl verzoeken door OmniRoute stromen. Gebruik een van deze methoden om gebeurtenissen te genereren:", + "chatTesterTab": "Tabblad Chattester", + "testBenchTab": "Tabblad Testbank", + "externalApiCalls": "Externe API-aanroepen", + "ideCliIntegrations": "IDE/CLI-integraties", + "inMemoryNote": "Opmerking: Gebeurtenissen worden in het geheugen opgeslagen en opnieuw ingesteld wanneer de server opnieuw opstart.", + "ok": "Oké", + "errorShort": "ERR", + "formatConverter": "Formaatconverter", + "formatConverterDescription": "Plak of typ een JSON-aanvraagtekst. De vertaler detecteert automatisch het bronformaat en converteert dit naar het doelformaat. Gebruik dit om fouten op te sporen in de manier waarop OmniRoute verzoeken tussen formaten vertaalt (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Invoer", + "output": "Uitvoer", + "auto": "Automatisch", + "swapFormats": "Wissel formaten", + "translateAction": "Vertalen", + "clear": "Duidelijk", + "inputPlaceholder": "Plak hier een verzoektekst of selecteer hieronder een sjabloon...", + "exampleTemplates": "Voorbeeldsjablonen", + "exampleTemplatesHint": "— Klik om te laden", + "templateLoadHint": "Sjabloon laadt het verzoek in {format} formaat. Wijzig het bronformaat om in een ander formaat te laden.", + "compatibilityTester": "Compatibiliteitstester", + "compatibilityReport": "Compatibiliteitsrapport", + "testBenchDescription": "Voer vooraf gedefinieerde scenario's uit (Simple Chat, Tool Calling, enz.) om de vertaling en compatibiliteit van providers te verifiëren. Selecteer een bronformaat en doelprovider en voer vervolgens alle tests uit om een ​​compatibiliteitspercentage te zien. Gebruik dit om te ontdekken welke functies bij verschillende providers werken.", + "targetProvider": "Doelaanbieder", + "runAllTests": "Voer alle tests uit", + "runTest": "Test uitvoeren", + "reRun": "Opnieuw uitvoeren", + "running": "Rennen...", + "passed": "voorbij", + "failed": "mislukt", + "passedIconLabel": "✅Geslaagd", + "chunks": "brokken", + "scenarioSimpleChat": "Eenvoudig chatten", + "scenarioToolCalling": "Gereedschap bellen", + "scenarioMultiTurn": "Multi-turn", + "scenarioThinking": "Denken", + "scenarioSystemPrompt": "Systeemprompt", + "scenarioStreaming": "Streamen", + "templateNames": { + "simple-chat": "Eenvoudig chatten", + "tool-calling": "Gereedschap bellen", + "multi-turn": "Multi-turn", + "thinking": "Denken", + "system-prompt": "Systeemprompt", + "streaming": "Streamen" + }, + "templateDescriptions": { + "simple-chat": "Basis sms-bericht", + "tool-calling": "Functie-/toolaanroep", + "multi-turn": "Gesprek met de geschiedenis", + "thinking": "Uitgebreid nadenken/redeneren", + "system-prompt": "Complexe systeeminstructies", + "streaming": "SSE-streamingverzoek" + }, + "templatePayloads": { + "simpleChat": { + "system": "Je bent een behulpzame assistent.", + "userGreeting": "Hallo! Hoe gaat het vandaag met je?" + }, + "toolCalling": { + "userWeather": "Hoe is het weer in Sao Paulo?", + "toolDescription": "Ontvang het huidige weer voor een locatie", + "cityNameDescription": "Naam van de stad" + }, + "multiTurn": { + "system": "Je bent codeerassistent.", + "userInitial": "Schrijf een functie om een array in Python te sorteren.", + "assistantExample": "Hier is een eenvoudige sorteerfunctie:\n\n```python\ndef sort_array(arr):\n retour gesorteerd(arr)\n```", + "userFollowUp": "Sorteer het nu in aflopende volgorde." + }, + "thinking": { + "question": "Wat is de som van de eerste 100 priemgetallen?" + }, + "systemPrompt": { + "systemInstruction": "Je bent een senior software engineer, gespecialiseerd in gedistribueerde systemen. Beantwoord vragen beknopt met behulp van best practices uit de branche. Geef altijd codevoorbeelden wanneer dit relevant is. Formatteer uw antwoorden met behulp van markdown.", + "question": "Hoe implementeer ik een stroomonderbrekerpatroon?" + }, + "streaming": { + "prompt": "Vertel me een kort verhaal over een robot die leert schilderen." + } + }, + "openaiCompatibleLabel": "OpenAI-compatibel", + "anthropicCompatibleLabel": "Antropisch compatibel", + "noTemplateForFormat": "Geen sjabloon voor dit formaat", + "translationFailed": "Vertaling mislukt: {error}", + "pipelineDebugger": "Pijplijn-foutopsporing", + "translationPipeline": "Vertaalpijplijn", + "pipelineVisualization": "Visualisatie van pijpleidingen", + "pipelineVisualizationHint": "Stuur een bericht om te zien hoe uw verzoek via detectie → vertaling → provideroproep verloopt.", + "chatTesterDescription": "Verzend berichten in een specifiek klantformaat en inspecteer elke stap van de vertaalpijplijn.", + "chatTesterFlow": "Klantverzoek → Formaatdetectie → OpenAI Intermediate → Providerformaat → Reactie", + "clickStepToInspect": "Klik op een willekeurige stap om de gegevens in dat stadium te inspecteren.", + "clientFormat": "Klantformaat", + "provider": "Aanbieder", + "modelPlaceholder": "Selecteer of typ een modelnaam...", + "sendMessageToSeePipeline": "Stuur een bericht om de vertaalpijplijn te bekijken", + "chatMessageHintPrefix": "Uw bericht wordt opgemaakt als een", + "chatMessageHintSuffix": "verzoek, vertaald via de pijplijn en verzonden naar de geselecteerde provider.", + "youWithFormat": "Jij ({format})", + "assistant": "Assistent", + "typeMessage": "Typ een bericht...", + "send": "Verzenden", + "clientRequest": "Klantverzoek", + "clientRequestDescription": "De verzoektekst zoals uw klant deze zou verzenden", + "formatDetected": "Formaat gedetecteerd", + "formatDetectedDescription": "OmniRoute detecteert automatisch het API-formaat uit de aanvraagstructuur", + "openaiIntermediate": "OpenAI gemiddeld", + "openaiIntermediateDescription": "Alle formaten worden eerst genormaliseerd naar OpenAI-formaat (de universele bridge)", + "providerFormat": "Provider-formaat", + "providerFormatDescription": "Het OpenAI-formaat wordt vertaald naar het oorspronkelijke formaat van de provider", + "providerResponse": "Reactie van de leverancier", + "providerResponseRawDescription": "Het onbewerkte antwoord van de provider-API", + "providerResponseSseDescription": "De onbewerkte SSE-stream van de provider-API", + "unexpectedError": "Er is een onverwachte fout opgetreden", + "error": "Fout", + "errorMessage": "Fout: {message}", + "requestFailed": "Verzoek mislukt", + "noTextExtracted": "(Geen tekst geëxtraheerd)", + "liveMonitorDescriptionPrefix": "Toont vertaalgebeurtenissen terwijl API-aanroepen door OmniRoute stromen. Gebeurtenissen komen uit de buffer in het geheugen (wordt gereset bij opnieuw opstarten). Gebruik", + "liveMonitorDescriptionSuffix": "of externe API-aanroepen om gebeurtenissen te genereren." + }, + "usage": { + "title": "Gebruik", + "loggerTab": "Logger", + "proxyTab": "Proxy", + "budgetManagement": "Budgetbeheer", + "budgetSaved": "Budgetlimieten opgeslagen", + "budgetSaveFailed": "Het is niet gelukt om budget op te slaan", + "loadingBudgetData": "Budgetgegevens laden...", + "noApiKeysTitle": "Geen API-sleutels", + "noApiKeysDescription": "Voeg eerst API-sleutels toe om budgetlimieten in te stellen.", + "apiKey": "API-sleutel", + "todaysSpend": "De uitgaven van vandaag", + "thisMonth": "Deze maand", + "setLimits": "Stel grenzen", + "dailyLimitUsd": "Dagelijkse limiet (USD)", + "monthlyLimitUsd": "Maandelijkse limiet (USD)", + "warningThresholdPercent": "Waarschuwingsdrempel (%)", + "dailyLimitPlaceholder": "bijv. 5.00 uur", + "monthlyLimitPlaceholder": "bijv. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Bewaar grenzen", + "budgetOk": "Budget OK — {remaining} resterend", + "budgetExceeded": "Budget overschreden: verzoeken kunnen worden geblokkeerd", + "totalRequests": "Totaal aantal verzoeken", + "noDataYet": "Nog geen gegevens", + "latency": "Latentie", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Snelle cache", + "systemHealth": "Systeemgezondheid", + "entries": "Inzendingen", + "activeCount": "{count} actief", + "openCircuitBreakersDetected": "Open stroomonderbrekers gedetecteerd", + "hitRate": "Hitpercentage", + "hitsMisses": "Hits / missers", + "circuitBreakers": "Stroomonderbrekers", + "lockedIPs": "Vergrendelde IP's", + "lockoutsAutoRefreshHint": "Tarieflimietvergrendelingen per model • Automatisch vernieuwen 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} over", + "howItWorks": "Hoe het werkt", + "howItWorksSubtitle": "Ontdek hoe evaluaties uw LLM-reacties valideren", + "define": "Definieer", + "defineStepDescription": "Maak testcases met invoerprompts en verwachte uitvoercriteria met behulp van strategieën zoals contain, regex of exacte match.", + "run": "Rennen", + "runStepDescription": "Voer testcases uit op uw LLM-eindpunten via OmniRoute. Elke case wordt verzonden als een echt API-verzoek.", + "evaluate": "Evalueer", + "evaluateStepDescription": "De antwoorden worden vergeleken met de verwachte criteria. Bekijk voor elk geval de geslaagde/mislukte resultaten met latentiestatistieken en gedetailleerde feedback.", + "evalSuites": "Evaluatiesuites", + "evalSuitesHint": "Klik op een suite om testcases te bekijken en voer deze vervolgens uit om uw LLM-eindpunten te evalueren", + "evalsLoading": "Evaluatiesuites laden...", + "noEvalSuitesFound": "Geen Eval-suites gevonden", + "noEvalSuitesDescription": "Eval-suites kunnen worden gedefinieerd via de API of in code. Ze testen de modeluitvoer tegen de verwachte resultaten met behulp van strategieën zoals contain, regex, exacte match en aangepaste functies.", + "columnCase": "Geval", + "columnStatus": "Status", + "columnLatency": "Latentie", + "columnDetails": "Details", + "columnModel": "Model", + "columnStrategy": "Strategie", + "columnExpected": "Verwacht", + "statsSuites": "Suites", + "statsTestCases": "Testgevallen", + "statsModels": "Modellen", + "statsCoverage": "Dekking", + "statsStrategiesCount": "{count} strategieën", + "evaluationStrategies": "Evaluatiestrategieën", + "modelsUnderTest": "Modellen die worden getest", + "searchSuitesPlaceholder": "Zoek suites...", + "passSuffix": "passeren", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Voer Eval uit", + "runningProgress": "{current}/{total} wordt uitgevoerd...", + "passRate": "slagingspercentage", + "summaryBreakdown": "{passed} geslaagd · {failed} mislukt · {total} totaal", + "passedIconLabel": "✅Geslaagd", + "failedIconLabel": "❌ Mislukt", + "detailsContains": "Bevat: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Verwacht: \"{expected}\"", + "noResultsYet": "Nog geen resultaten", + "testCasesCount": "Testgevallen ({count})", + "noTestCasesDefined": "Geen testgevallen gedefinieerd", + "runEvalHint": "Klik op 'Eval uitvoeren' om alle cases tegen uw LLM-eindpunt uit te voeren. Elke test verzendt een echt verzoek via OmniRoute.", + "notifyNoTestCases": "Er zijn geen testgevallen gedefinieerd voor deze suite", + "notifyAllCasesPassed": "Alle {total} cases zijn geslaagd ✅", + "notifySomeCasesFailed": "{passed}/{total} geslaagd, {failed} mislukt", + "notifyEvalRunFailed": "Evaluatierun mislukt", + "notifyEvalTitle": "Evaluatie: {name}", + "modelEvals": "Modelevaluaties", + "evalsHeroDescription": "Test en valideer uw LLM-eindpunten door vooraf gedefinieerde evaluatiesuites uit te voeren. Elke suite bevat testcases die echte aanwijzingen sturen via OmniRoute en de antwoorden vergelijken met de verwachte criteria, zodat u regressies kunt detecteren, modellen kunt vergelijken en de responskwaliteit van alle providers kunt garanderen.", + "qualityValidation": "Kwaliteitsvalidatie", + "modelComparison": "Modelvergelijking", + "regressionDetection": "Regressiedetectie", + "latencyBenchmarks": "Latentiebenchmarks", + "modelLockouts": "Modelvergrendelingen", + "noLockouts": "Er zijn momenteel geen modellen vergrendeld", + "activeSessions": "Actieve sessies", + "noSessions": "Geen actieve sessies", + "sessionsHint": "Sessies verschijnen terwijl verzoeken door de proxy stromen", + "sessionsTrackedHint": "Bijgehouden via verzoek om vingerafdrukken • Automatisch vernieuwen 5s", + "session": "Sessie", + "age": "Leeftijd", + "requests": "Verzoeken", + "connection": "Verbinding", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}u", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limieten van aanbieders", + "noProviders": "Geen providers aangesloten", + "connectProvidersForQuota": "Maak verbinding met providers met OAuth om uw API-quotumlimieten en -gebruik bij te houden.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(gefilterd van {count})", + "autoRefresh": "Automatisch vernieuwen", + "refreshAll": "Alles vernieuwen", + "loadingQuotas": "Laden...", + "account": "Rekening", + "modelQuotas": "Modelquota", + "lastUsed": "Laatst gebruikt", + "actions": "Acties", + "refreshQuota": "Quota vernieuwen", + "today": "Vandaag", + "tomorrow": "Morgen", + "dayTimeFormat": "{day}, {time}", + "inDuration": "in {duration}", + "notApplicable": "N.v.t", + "rawPlanWithValue": "Ruw plan: {plan}", + "noPlanFromProvider": "Geen abonnement van aanbieder", + "noQuotaData": "Geen quotagegevens", + "noQuotaDataAvailable": "Geen quotagegevens beschikbaar", + "noAccountsForTierFilter": "Er zijn geen accounts gevonden voor niveaufilter", + "tierAll": "Allemaal", + "tierEnterprise": "Onderneming", + "tierTeam": "Team", + "tierBusiness": "Zakelijk", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Plus", + "tierFree": "Gratis", + "tierUnknown": "Onbekend" + }, + "modals": { + "waitingAuth": "Wachten op toestemming", + "verificationUrl": "Verificatie-URL", + "yourCode": "Jouw code", + "remoteAccess": "Toegang op afstand:", + "connectedSuccess": "Succesvol verbonden!", + "connectionFailed": "Verbinding mislukt", + "chooseAuthMethod": "Kies uw authenticatiemethode:", + "awsBuilderId": "AWS Builder-ID", + "awsIamIdentity": "AWS IAM Identiteitscentrum", + "googleAccount": "Google-account", + "githubAccount": "GitHub-account", + "importToken": "Token importeren", + "pasteToken": "Plak het vernieuwingstoken uit Kiro IDE.", + "awsRegion": "AWS-regio", + "autoDetecting": "Tokens automatisch detecteren...", + "readingFromCache": "Lezen uit AWS SSO-cache", + "readingFromCursor": "Lezen uit de Cursor IDE-database", + "initializing": "Initialiseren...", + "pricingConfig": "Prijsconfiguratie", + "loadingPricing": "Prijsgegevens laden...", + "pricingRatesFormat": "Formaat prijstarieven", + "noPricingData": "Geen prijsgegevens beschikbaar", + "noModelsFound": "Geen modellen gevonden" + }, + "loggers": { + "allProviders": "Alle aanbieders", + "allModels": "Alle modellen", + "allAccounts": "Alle rekeningen", + "allApiKeys": "Alle API-sleutels", + "allTypes": "Alle soorten", + "allLevels": "Alle niveaus", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Logboeken laden...", + "loadingProxyLogs": "Proxylogboeken laden...", + "noLogEntries": "Geen logvermeldingen gevonden", + "noPayloadData": "Er zijn geen payloadgegevens beschikbaar voor deze logvermelding.", + "proxyEvent": "Proxy-evenement", + "proxy": "Proxy", + "level": "Niveau", + "directNative": "Direct (native)", + "combo": "Combinatie", + "inputTokens": "ik:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Gebruiksoverzicht", + "outputTokens": "Uitvoertokens", + "totalCost": "Totale kosten", + "usageByModel": "Gebruik per model", + "usageByAccount": "Gebruik per account", + "failedToLoad": "Kan gebruiksstatistieken niet laden.", + "tokenHealth": "Tokengezondheid", + "totalOAuth": "Totaal OAuth", + "healthy": "Gezond", + "warning": "Waarschuwing", + "errored": "Fout", + "lastCheck": "Laatste controle", + "noData": "Geen gegevens", + "share": "Deel", + "unableToLoad": "Kan systeemstatistieken niet laden", + "product": "Product", + "resources": "Hulpbronnen", + "company": "Bedrijf" + }, + "auth": { + "welcome": "Welkom", + "signIn": "Log in", + "enterPassword": "Voer uw wachtwoord in om door te gaan", + "password": "Wachtwoord", + "unifiedProxy": "Uniforme AI API-proxy", + "unifiedAiApiProxy": "Uniforme AI API-proxy", + "unifiedAiApiProxyDesc": "Routeer verzoeken naar meerdere AI-providers via één eindpunt. Load-balancing, failover en gebruiksregistratie zijn ingebouwd.", + "passwordNotEnabled": "Wachtwoordbeveiliging is niet ingeschakeld", + "loading": "Laden...", + "invalidPassword": "Ongeldig wachtwoord", + "errorOccurredRetry": "Er is een fout opgetreden. Probeer het opnieuw.", + "configureInstance": "Laten we uw OmniRoute-instantie configureren", + "runOnboardingWizard": "Voer de onboardingwizard uit om uw wachtwoord in te stellen en verbinding te maken met uw eerste AI-provider.", + "startOnboarding": "Begin met onboarden", + "secureYourInstance": "Beveilig uw exemplaar", + "setPasswordDescription": "Stel een wachtwoord in om uw dashboard te beschermen en uw API-eindpunten te beveiligen tegen ongeautoriseerde toegang.", + "configurePassword": "Wachtwoord configureren", + "continue": "Ga door", + "windowWillClose": "Dit venster wordt automatisch gesloten...", + "closeTabNow": "U kunt dit tabblad nu sluiten.", + "copyUrlManual": "Kopieer de URL uit de adresbalk en plak deze in de applicatie.", + "accessDeniedDescription": "U heeft geen toegang tot deze bron. Controleer uw API-sleutel of neem contact op met de beheerder.", + "goToDashboard": "Ga naar Dashboard", + "featureMultiProviderTitle": "Meerdere aanbieders", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google en meer", + "featureLoadBalancingTitle": "Load-balancering", + "featureLoadBalancingDesc": "Verdeel verzoeken op een intelligente manier", + "featureUsageTrackingTitle": "Gebruik volgen", + "featureUsageTrackingDesc": "Houd de kosten en tokens in de gaten", + "resetPassword": "Wachtwoord opnieuw instellen", + "resetDescription": "Kies een methode om de toegang tot uw dashboard te herstellen", + "stopServer": "Stop de OmniRoute-server", + "processing": "Verwerken...", + "pleaseWait": "Een ogenblik geduld terwijl we de autorisatie voltooien.", + "authSuccess": "Autorisatie succesvol!", + "copyUrl": "Kopieer deze URL", + "accessDenied": "Toegang geweigerd", + "methodCliTitle": "Methode 1: CLI-reset", + "methodCliDescription": "Voer de volgende opdracht uit op de server waarop OmniRoute draait:", + "methodCliHint": "Hierdoor wordt u gevraagd een nieuw wachtwoord in te stellen. De server moet eerst worden gestopt.", + "methodManualTitle": "Methode 2: Handmatige reset", + "methodManualDescription": "Verwijder het wachtwoord uit de database en stel bij het opstarten een nieuw wachtwoord in:", + "setPasswordInYour": "Stel een nieuw wachtwoord in in uw", + "fileLabelSuffix": "bestand:", + "newPasswordPlaceholder": "uw_nieuwe_wachtwoord", + "deleteSettingsFile": "Verwijderen", + "orRemovePasswordHashField": "of verwijder het wachtwoordHash-veld", + "restartServerWithNewPassword": "Start de server opnieuw op. Deze gebruikt het nieuwe wachtwoord", + "backToLogin": "Terug naar Inloggen", + "forgotPassword": "Wachtwoord vergeten?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navigeer naar huis", + "toggleMenu": "Schakelmenu", + "featuresLink": "Kenmerken", + "docsLink": "Documenten", + "github": "GitHub", + "versionLive": "v1.0 is nu live", + "oneEndpoint": "Eén eindpunt voor", + "allProviders": "Alle AI-providers", + "heroDescription": "AI-eindpuntproxy met webdashboard - Een JavaScript-poort van CLIProxyAPI. Werkt naadloos samen met Claude Code, OpenAI Codex, Cline, RooCode en andere CLI-tools.", + "getStarted": "Aan de slag", + "viewOnGithub": "Bekijk op GitHub", + "powerfulFeatures": "Krachtige functies", + "featuresSubtitle": "Alles wat u nodig heeft om uw AI-infrastructuur op één plek te beheren, gebouwd voor schaal.", + "featureUnifiedEndpointTitle": "Uniform eindpunt", + "featureUnifiedEndpointDesc": "Toegang tot alle providers via één standaard API-URL.", + "featureEasySetupTitle": "Eenvoudige installatie", + "featureEasySetupDesc": "Ga binnen enkele minuten aan de slag met de opdracht npx.", + "featureModelFallbackTitle": "Modelterugval", + "featureModelFallbackDesc": "Schakel automatisch over naar providers bij storingen of hoge latentie.", + "featureUsageTrackingTitle": "Gebruik volgen", + "featureUsageTrackingDesc": "Gedetailleerde analyses en kostenmonitoring voor alle modellen.", + "featureOAuthApiKeysTitle": "OAuth- en API-sleutels", + "featureOAuthApiKeysDesc": "Beheer inloggegevens veilig in één kluis.", + "featureCloudSyncTitle": "Cloudsynchronisatie", + "featureCloudSyncDesc": "Synchroniseer uw configuraties direct op verschillende apparaten.", + "featureCliSupportTitle": "CLI-ondersteuning", + "featureCliSupportDesc": "Werkt met Claude Code, Codex, Cline, Cursor en meer.", + "featureDashboardTitle": "Dashboard", + "featureDashboardDesc": "Visueel dashboard voor realtime verkeersanalyse.", + "howItWorks": "Hoe OmniRoute werkt", + "howItWorksDescription": "Gegevens stromen naadloos van uw applicatie via onze intelligente routeringslaag naar de beste provider voor de taak.", + "howItWorksStep1Title": "1. CLI en SDK's", + "howItWorksStep1Description": "Uw verzoeken beginnen vanuit uw favoriete tools of onze uniforme SDK. Wijzig gewoon de basis-URL.", + "howItWorksStep2Title": "2. OmniRoute-hub", + "howItWorksStep2Description": "Onze engine analyseert de prompt, controleert de status van de provider en routeert voor de laagste latentie of kosten.", + "howItWorksStep3Title": "3. AI-aanbieders", + "howItWorksStep3Description": "Aan het verzoek wordt onmiddellijk voldaan door OpenAI, Anthropic, Gemini of anderen.", + "getStartedIn30Seconds": "Ga binnen 30 seconden aan de slag", + "getStartedDescription": "Installeer OmniRoute, configureer uw providers via een webdashboard en begin met het routeren van AI-verzoeken.", + "installOmniRoute": "Installeer OmniRoute", + "installStepDescription": "Voer de npx-opdracht uit om de server onmiddellijk te starten", + "openDashboard": "Dashboard openen", + "openDashboardStepDescription": "Configureer providers en API-sleutels via de webinterface", + "routeRequests": "Routeverzoeken", + "routeRequestsStepDescription": "Verwijs uw CLI-tools naar {endpoint}", + "terminal": "terminaal", + "copy": "Kopieer", + "copied": "✓ Gekopieerd", + "startingOmniRoute": "OmniRoute starten...", + "serverRunningOnLabel": "Server draait aan", + "dashboardLabel": "Dashboard", + "readyToRoute": "Klaar om te routen! ✓", + "configureProvidersNote": "📝 Configureer providers in het dashboard of gebruik omgevingsvariabelen", + "dataLocation": "Gegevenslocatie:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Ramen:", + "product": "Product", + "dashboardLink": "Dashboard", + "changelog": "Wijzigingslog", + "resources": "Hulpbronnen", + "documentation": "Documentatie", + "npm": "NPM", + "legal": "Legaal", + "mitLicense": "MIT-licentie", + "footerTagline": "Het uniforme eindpunt voor het genereren van AI. Verbind, routeer en beheer uw AI-providers eenvoudig.", + "copyright": "© {year} OmniRoute. Alle rechten voorbehouden.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI-codex", + "flowToolCline": "Klijn", + "flowToolCursor": "Cursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropisch", + "flowProviderGemini": "Tweeling", + "flowProviderGithubCopilot": "GitHub-copiloot", + "interactiveDiagram": "Interactief diagram zichtbaar op het bureaublad", + "ctaTitle": "Klaar om uw AI-infrastructuur te vereenvoudigen?", + "ctaDescription": "Sluit u aan bij ontwikkelaars die hun AI-integraties stroomlijnen met OmniRoute. Open source en gratis om te beginnen.", + "startFree": "Begin gratis", + "readDocumentation": "Documentatie lezen" + }, + "docs": { + "title": "Documentatie", + "quickStart": "Snel beginnen", + "features": "Kenmerken", + "supportedProviders": "Ondersteunde providers", + "supportedProvidersToc": "Aanbieders", + "commonUseCases": "Veelvoorkomende gebruiksscenario's", + "clientCompatibility": "Compatibiliteit met klanten", + "apiReference": "API-referentie", + "method": "Methode", + "path": "Pad", + "notes": "Opmerkingen", + "modelPrefixes": "Modelvoorvoegsels", + "prefix": "Voorvoegsel", + "troubleshooting": "Problemen oplossen", + "supportsChat": "Ondersteunt zowel chat- als reacties-eindpunten.", + "oauthAutoRefresh": "OAuth-verbinding met automatische tokenvernieuwing.", + "fullStreaming": "Volledige streamingondersteuning voor alle modellen.", + "docsLabel": "Documenten", + "docsHeroDescription": "AI-gateway voor LLM's met meerdere providers. Eén eindpunt voor OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor en nog meer dan 20 providers.", + "openDashboard": "Dashboard openen", + "endpointPage": "Eindpuntpagina", + "github": "GitHub", + "reportIssue": "Rapporteer probleem", + "onThisPage": "Op deze pagina", + "documentationVersion": "Documentatie - v{version}", + "quickStartStep1Title": "1. Installeren en uitvoeren", + "quickStartStep1Prefix": "Rennen", + "quickStartStep1Middle": "of kloon van GitHub en voer het uit", + "quickStartStep2Title": "2. Maak een API-sleutel", + "quickStartStep2Text": "Ga naar Eindpunt -> Geregistreerde sleutels. Genereer één sleutel per omgeving.", + "quickStartStep3Title": "3. Verbind aanbieders", + "quickStartStep3Text": "Voeg provideraccounts toe via OAuth-aanmelding, API-sleutel of gratis automatische verbinding.", + "quickStartStep4Title": "4. Stel de clientbasis-URL in", + "quickStartStep4Prefix": "Verwijs naar uw IDE- of API-client", + "quickStartStep4Suffix": "Gebruik bijvoorbeeld het providervoorvoegsel", + "featureRoutingTitle": "Routering door meerdere providers", + "featureRoutingText": "Routeer verzoeken naar meer dan 30 AI-providers via één enkel OpenAI-compatibel eindpunt. Ondersteunt API's voor chat, reacties, audio en afbeeldingen.", + "featureCombosTitle": "Combo's en balanceren", + "featureCombosText": "Creëer modelcombinaties met fallback-ketens en balanceringsstrategieën: round-robin, prioriteit, willekeurig, minst gebruikt en kostengeoptimaliseerd.", + "featureUsageTitle": "Gebruik en kosten bijhouden", + "featureUsageText": "Realtime tokentelling, kostenberekening per provider/model en gedetailleerd gebruiksoverzicht per API-sleutel en account.", + "featureAnalyticsTitle": "Analytics-dashboard", + "featureAnalyticsText": "Visuele analyses met grafieken voor verzoeken, tokens, fouten, latentie, kosten en modelpopulariteit in de loop van de tijd.", + "featureHealthTitle": "Gezondheidsmonitoring", + "featureHealthText": "Live statuscontroles, providerstatus, status van stroomonderbrekers en automatische detectie van snelheidslimieten met exponentiële uitstel.", + "featureCliTitle": "CLI-hulpmiddelen", + "featureCliText": "Beheer IDE-configuraties, exporteer/importeer back-ups, ontdek codexprofielen en configureer instellingen vanaf het dashboard.", + "featureSecurityTitle": "Beveiliging en beleid", + "featureSecurityText": "API-sleutelverificatie, IP-filtering, prompt injection guard, domeinbeleid, sessiebeheer en auditlogboekregistratie.", + "featureCloudSyncTitle": "Cloudsynchronisatie", + "featureCloudSyncText": "Synchroniseer uw configuratie met Cloudflare Workers voor externe toegang met gecodeerde inloggegevens en automatische failover.", + "providersAcrossConnectionTypes": "{count} providers in drie verbindingstypen.", + "manageProviders": "Beheer aanbieders", + "providersCount": "{count} aanbieders", + "providerTypeFree": "Gratis niveau", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API-sleutel", + "useCaseSingleEndpointTitle": "Eén eindpunt voor veel providers", + "useCaseSingleEndpointText": "Verwijs clients naar één basis-URL en routeer op modelvoorvoegsel (bijvoorbeeld: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback en modelwisseling met combo's", + "useCaseFallbackText": "Creëer combomodellen in Dashboard en houd de clientconfiguratie stabiel terwijl providers intern roteren.", + "useCaseUsageVisibilityTitle": "Zichtbaarheid van gebruik, kosten en foutopsporing", + "useCaseUsageVisibilityText": "Houd tokens en kosten bij per provider, account en API-sleutel op de tabbladen Gebruik en Analyse.", + "clientCherryStudioTitle": "Kersenstudio", + "baseUrlLabel": "Basis-URL", + "chatEndpointLabel": "Chat-eindpunt", + "modelRecommendationLabel": "Modelaanbeveling: expliciet voorvoegsel", + "clientCodexTitle": "Codex / GitHub Copilot-modellen", + "clientCodexBullet1": "Gebruik model-ID's met", + "clientCodexBullet2": "Modellen uit de Codex-familie routeren automatisch naar", + "clientCodexBullet3": "Niet-Codex-modellen gaan door", + "clientCursorTitle": "Cursor-IDE", + "clientCursorBullet1": "Gebruik", + "clientCursorBullet1Suffix": "voorvoegsel voor Cursor-modellen.", + "clientCursorBullet2": "OAuth-verbinding - log in vanaf de pagina Providers.", + "clientClaudeTitle": "Claude Code / Antizwaartekracht", + "clientClaudeBullet1Prefix": "Gebruik", + "clientClaudeBullet1Middle": "(Claude) of", + "clientClaudeBullet1Suffix": "(Antizwaartekracht) voorvoegsel.", + "endpointChatNote": "OpenAI-compatibel chat-eindpunt (standaard).", + "endpointResponsesNote": "Reacties API-eindpunt (Codex, o-serie).", + "endpointModelsNote": "Modelcatalogus voor alle aangesloten providers.", + "endpointAudioNote": "Audiotranscriptie (Deepgram, AssemblyAI).", + "endpointImagesNote": "Beeldgeneratie (NanoBanana).", + "endpointRewriteChatNote": "Herschrijfhulp voor clients zonder /v1.", + "endpointRewriteResponsesNote": "Herschrijfhulp voor reacties zonder /v1.", + "endpointRewriteModelsNote": "Herschrijfhulp voor modeldetectie zonder /v1.", + "modelPrefixesDescriptionStart": "Gebruik het providervoorvoegsel vóór de modelnaam om naar een specifieke provider te routeren. Voorbeeld:", + "modelPrefixesDescriptionEnd": "routes naar GitHub Copilot.", + "provider": "Aanbieder", + "type": "Typ", + "troubleshootingModelRouting": "Als de client faalt met modelrouting, gebruik dan een expliciete provider/model (bijvoorbeeld: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Als u dubbelzinnige modelfouten ontvangt, kiest u een providervoorvoegsel in plaats van een kale model-ID.", + "troubleshootingCodexFamily": "Voor modellen uit de GitHub Codex-familie behoudt u het model als gh/; router selecteert /responses automatisch.", + "troubleshootingTestConnection": "Gebruik Dashboard > Providers > Verbinding testen voordat u gaat testen vanaf IDE's of externe clients.", + "troubleshootingCircuitBreaker": "Als een provider aangeeft dat de stroomonderbreker open is, wacht dan op de cooldown of kijk op de Gezondheidspagina voor meer informatie.", + "troubleshootingOAuth": "Voor OAuth-providers geldt dat u opnieuw moet verifiëren als tokens verlopen. Controleer de statusindicator van de providerkaart." + }, + "legal": { + "privacyPolicy": "Privacybeleid", + "termsOfService": "Servicevoorwaarden", + "providerConfigurations": "Providerconfiguraties", + "apiKeys": "API-sleutels", + "usageLogs": "Gebruikslogboeken", + "applicationSettings": "Applicatie-instellingen", + "viewExportAnalytics": "Gebruiksanalyses bekijken en exporteren", + "clearHistory": "Wis de gebruiksgeschiedenis op elk gewenst moment", + "configureRetention": "Configureer het bewaarbeleid voor logboeken", + "backupRestore": "Maak een back-up van uw database en herstel deze", + "privacyMetadataTitle": "Privacybeleid | OmniRoute", + "privacyMetadataDescription": "Privacybeleid voor de OmniRoute AI API-proxyrouter.", + "termsMetadataTitle": "Servicevoorwaarden | OmniRoute", + "termsMetadataDescription": "Servicevoorwaarden voor de OmniRoute AI API-proxyrouter.", + "backToHome": "Terug naar huis", + "lastUpdated": "Laatst bijgewerkt: {date}", + "policyLastUpdatedDate": "13 februari 2026", + "listSeparator": "-", + "questionsVisit": "Vragen? Bezoek onze", + "githubRepository": "GitHub-opslagplaats", + "privacySection1Title": "1. Lokaal-eerste architectuur", + "privacySection1Text": "OmniRoute is ontworpen als een local-first applicatie. Alle gegevensverwerking en opslag vindt volledig op uw machine plaats. Er is geen gecentraliseerde server die uw gegevens verzamelt.", + "privacySection2Title": "2. Gegevens die we opslaan", + "privacyDataStoredIn": "De volgende gegevens worden lokaal opgeslagen in", + "privacyDataProviderConfigurationsDesc": "verbindings-URL's, providertypen en prioriteitsinstellingen", + "privacyDataApiKeysDesc": "gecodeerd en lokaal opgeslagen voor authenticatie bij AI-providers", + "privacyDataUsageLogsDesc": "aantal verzoeken, tokengebruik, modelnamen, tijdstempels en responstijden", + "privacyDataApplicationSettingsDesc": "themavoorkeuren, routeringsstrategie en combo-configuraties", + "privacySection3Title": "3. Geen telemetrie", + "privacySection3Text": "OmniRoute verzamelt geen telemetrie-, analyse- of crashrapporten. Er worden geen gegevens naar ons of een derde partij verzonden. Uw gebruikspatronen, API-aanroepen en configuraties blijven volledig privé.", + "privacySection4Title": "4. Externe AI-aanbieders", + "privacySection4Text": "Wanneer u API-aanroepen doet via OmniRoute, worden uw verzoeken doorgestuurd naar de AI-providers die u heeft geconfigureerd (bijvoorbeeld: OpenAI, Anthropic, Google). Deze providers hebben hun eigen privacybeleid waarin wordt bepaald hoe zij met uw gegevens omgaan. Controleer alstublieft:", + "privacyOpenAiPolicy": "OpenAI-privacybeleid", + "privacyAnthropicPolicy": "Antropisch privacybeleid", + "privacyGooglePolicy": "Google-privacybeleid", + "privacySection5Title": "5. Cloudsynchronisatie (optioneel)", + "privacySection5Text": "Als u de optionele cloudsynchronisatiefunctie inschakelt, kunnen providerconfiguraties en API-sleutels worden verzonden naar een geconfigureerd cloudeindpunt. Deze functie is standaard uitgeschakeld en vereist expliciete aanmelding.", + "privacySection6Title": "6. Loggen", + "privacyLoggingIntro": "Verzoeklogboeken kunnen worden geconfigureerd via de dashboardinstellingen. U kunt:", + "privacySection7Title": "7. Uw rechten", + "privacySection7TextStart": "Omdat alle gegevens lokaal worden opgeslagen, heeft u volledige controle. U kunt uw gegevens op elk gewenst moment verwijderen door de", + "privacySection7TextEnd": "map of met behulp van de databaseback-up- en -herstelfuncties in het dashboard.", + "termsSection1Title": "1. Overzicht", + "termsSection1Text": "OmniRoute is een local-first AI API-proxyrouter die volledig op uw machine werkt. Het stuurt verzoeken door naar meerdere AI-providers met taakverdeling, failover en gebruiksregistratie.", + "termsSection2Title": "2. Verantwoordelijkheden van gebruikers", + "termsResponsibilityApiKeys": "U bent als enige verantwoordelijk voor het beheer van uw eigen API-sleutels en inloggegevens voor externe AI-providers (OpenAI, Anthropic, Google, enz.).", + "termsResponsibilityCompliance": "U moet voldoen aan de servicevoorwaarden van elke AI-provider waarvan u via OmniRoute toegang krijgt tot de API.", + "termsResponsibilitySecurity": "U bent verantwoordelijk voor de beveiliging van uw lokale OmniRoute-installatie, inclusief het instellen van een wachtwoord en het beperken van netwerktoegang.", + "termsSection3Title": "3. Hoe het werkt", + "termsSection3Text": "OmniRoute fungeert als intermediaire proxy. API-aanroepen die naar OmniRoute worden verzonden, worden vertaald en doorgestuurd naar uw geconfigureerde AI-providers. OmniRoute wijzigt de inhoud van uw verzoeken of antwoorden niet behalve de noodzakelijke protocolvertaling.", + "termsSection4Title": "4. Gegevensverwerking", + "termsDataStoredLocally": "Alle gegevens worden lokaal op uw machine opgeslagen in een SQLite-database.", + "termsNoTransmission": "OmniRoute verzendt geen gegevens naar externe servers, tenzij u expliciet cloudsynchronisatiefuncties inschakelt.", + "termsDataLocationText": "Gebruikslogboeken, API-sleutels en configuratie worden opgeslagen in", + "termsSection5Title": "5. Disclaimer", + "termsSection5Text": "OmniRoute wordt geleverd \"zoals het is\" zonder enige vorm van garantie. Wij zijn niet verantwoordelijk voor eventuele kosten die voortvloeien uit API-gebruik, serviceonderbrekingen of gegevensverlies. Zorg altijd voor back-ups van uw configuratie.", + "termsSection6Title": "6. Open-source", + "termsSection6Text": "OmniRoute is open source-software. U bent vrij om het te inspecteren, wijzigen en distribueren onder de voorwaarden van de licentie." + } +} diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json new file mode 100644 index 0000000000..62e08cedb0 --- /dev/null +++ b/src/i18n/messages/no.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Lagre", + "cancel": "Avbryt", + "delete": "Slett", + "loading": "Laster inn...", + "error": "Det oppsto en feil", + "success": "Suksess", + "confirm": "Er du sikker?", + "refresh": "Oppdater", + "close": "Lukk", + "add": "Legg til", + "edit": "Rediger", + "search": "Søk", + "back": "Tilbake", + "next": "Neste", + "submit": "Send inn", + "reset": "Tilbakestill", + "copy": "Kopier", + "copied": "Kopiert!", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "active": "Aktiv", + "inactive": "Inaktiv", + "noData": "Ingen data tilgjengelig", + "configure": "Konfigurer", + "manage": "Administrer", + "name": "Navn", + "actions": "Handlinger", + "status": "Status", + "type": "Type", + "model": "Modell", + "models": "modeller", + "provider": "Leverandør", + "account": "Konto", + "time": "Tid", + "details": "Detaljer", + "created": "Opprettet", + "lastUsed": "Sist brukt", + "loadMore": "Last inn mer", + "noResults": "Ingen resultater funnet", + "reloadPage": "Last inn siden på nytt", + "connected": "Tilkoblet", + "disconnected": "Koblet fra", + "notConfigured": "Ikke konfigurert", + "testConnection": "Test tilkobling", + "enable": "Aktiver", + "disable": "Deaktiver", + "columns": "Kolonner", + "newest": "Nyeste", + "oldest": "Eldst", + "all": "Alle", + "none": "Ingen", + "yes": "Ja", + "no": "Nei", + "warning": "Advarsel", + "note": "Merk", + "free": "Gratis", + "skipToContent": "Gå til innhold" + }, + "sidebar": { + "home": "Hjem", + "dashboard": "Dashbord", + "providers": "Leverandører", + "combos": "Combos", + "usage": "Bruk", + "analytics": "Analytics", + "costs": "Kostnader", + "health": "Helse", + "limits": "Grenser og kvoter", + "cliTools": "CLI-verktøy", + "settings": "Innstillinger", + "translator": "Oversetter", + "docs": "Dokumenter", + "issues": "Problemer", + "endpoint": "Endepunkt", + "apiManager": "API-behandler", + "logs": "Logger", + "auditLog": "Revisjonslogg", + "shutdown": "Avslutning", + "restart": "Start på nytt", + "shutdownConfirm": "Slå av OmniRoute?", + "restartConfirm": "Starte OmniRoute på nytt?", + "version": "v{version}", + "debug": "Feilsøk", + "system": "System", + "help": "Hjelp", + "serverDisconnected": "Server frakoblet", + "serverDisconnectedMsg": "Proxy-serveren er stoppet eller starter på nytt.", + "expandSidebar": "Utvid sidefeltet", + "collapseSidebar": "Skjul sidefeltet" + }, + "header": { + "logout": "Logg ut", + "language": "Språk", + "providers": "Leverandører", + "providerDescription": "Administrer AI-leverandørtilkoblingene dine", + "combos": "Combos", + "comboDescription": "Modellkombinasjoner med fallback", + "usage": "Bruk og analyse", + "usageDescription": "Overvåk API-bruken din, tokenforbruk og forespørselslogger", + "analytics": "Analytics", + "analyticsDescription": "Diagrammer, trender og evalueringsinnsikt", + "cliTools": "CLI-verktøy", + "cliToolsDescription": "Konfigurer CLI-verktøy", + "home": "Hjem", + "homeDescription": "Velkommen til OmniRoute", + "endpoint": "Endepunkt", + "endpointDescription": "API-endepunktkonfigurasjon", + "settings": "Innstillinger", + "settingsDescription": "Administrer dine preferanser", + "openaiCompatible": "OpenAI-kompatibel", + "anthropicCompatible": "Antropisk kompatibel" + }, + "home": { + "quickStart": "Rask start", + "quickStartDesc": "Kom i gang i 4 trinn. Koble til leverandører, rutemodeller, overvåk alt.", + "fullDocs": "Fulle dokumenter", + "step1Title": "1. Opprett API-nøkkel", + "step1Desc": "Gå til Endpoint -> Registrerte nøkler. Generer én nøkkel per miljø.", + "step2Title": "2. Koble til leverandører", + "step2Desc": "Legg til kontoer i Providers. Støtter OAuth, API Key og gratis nivåer.", + "step3Title": "3. Pek klienten din", + "step3Desc": "Angi basis-URL til {url} i IDE- eller API-klienten.", + "step4Title": "4. Overvåk og optimaliser", + "step4Desc": "Spor tokens, kostnader og feil i Request Logs og Analytics.", + "providersOverview": "Oversikt over leverandører", + "configuredOf": "{configured} konfigurert av {total} tilgjengelige leverandører", + "noModelsAvailable": "Ingen modeller tilgjengelig for denne leverandøren.", + "configureFirst": "Konfigurer en tilkobling først i {providers}", + "configureProvider": "Konfigurer leverandør", + "modelAvailable": "{count} modell tilgjengelig", + "modelsAvailable": "{count} modeller tilgjengelig", + "connectionsActive": "{count} tilkobling aktiv", + "connectionsActivePlural": "{count} tilkoblinger aktive", + "copyModelName": "Kopier modellnavnet", + "documentation": "Dokumentasjon", + "healthMonitor": "Helsemonitor", + "reportIssue": "Rapporter problem", + "activeError": "{active} aktiv · {errors} feil", + "oauthLabel": "OAuth", + "apiKeyLabel": "API-nøkkel", + "requestsShort": "{count} req", + "providerModelsTitle": "{provider} - Modeller", + "copiedModel": "Kopiert: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Overvåk API-bruksmønstre, tokenforbruk, kostnader og aktivitetstrender på tvers av alle leverandører og modeller.", + "evalsDescription": "Kjør evalueringspakker for å teste og validere LLM-endepunktene dine. Sammenlign modellkvalitet, registrer regresjoner og benchmark latens.", + "overview": "Oversikt", + "evals": "Evals" + }, + "apiManager": { + "title": "API-nøkler", + "createKey": "Opprett API-nøkkel", + "key": "Nøkkel", + "revokeKey": "Tilbakekall nøkkel", + "revokeConfirm": "Er du sikker på at du vil tilbakekalle denne API-nøkkelen?", + "noKeys": "Ingen API-nøkler ennå", + "noKeysDesc": "Lag din første API-nøkkel for å autentisere forespørsler til endepunktet ditt", + "keyLabel": "Nøkkeletikett", + "permissions": "Tillatelser", + "expiresAt": "Utløper", + "never": "Aldri", + "revoke": "Oppheve", + "showKey": "Vis nøkkel", + "hideKey": "Skjul nøkkel", + "copyKey": "Kopier API-nøkkel", + "allModels": "Alle modeller", + "selectedModels": "Utvalgte modeller", + "readOnly": "Kun lesetilgang", + "fullAccess": "Full tilgang", + "keyManagement": "API Key Management", + "keyManagementDesc": "Opprett og administrer API-nøkler for autentisering av forespørsler til endepunktet ditt", + "totalKeys": "Totalnøkler", + "restricted": "Begrenset", + "totalRequests": "Totalt antall forespørsler", + "modelsAvailable": "Modeller tilgjengelig", + "registeredKeys": "Registrerte nøkler", + "keysRegistered": "{count} nøkler registrert", + "keyRegistered": "{count} nøkkel registrert", + "keysSecurityNote": "Hver nøkkel isolerer brukssporing og kan trekkes tilbake uavhengig. Nøkler er maskert etter opprettelse for sikkerhet.", + "createFirstKey": "Lag din første nøkkel", + "name": "Navn", + "usage": "Bruk", + "created": "Opprettet", + "actions": "Handlinger", + "reqs": "krav", + "neverUsed": "Aldri brukt", + "deleteConfirm": "Vil du slette denne API-nøkkelen?", + "usageTips": "Brukstips", + "tipAuth": "Bruk API-nøkler i autorisasjonsoverskriften som bærer DIN_KEY", + "tipSecure": "Nøkler vises bare én gang under opprettelsen – oppbevar dem sikkert", + "tipSeparate": "Lag separate nøkler for forskjellige klienter eller miljøer", + "tipRestrict": "Begrens nøkler til spesifikke modeller for bedre sikkerhet og kostnadskontroll", + "keyName": "Nøkkelnavn", + "keyNamePlaceholder": "f.eks. produksjonsnøkkel, utviklingsnøkkel", + "keyNameDesc": "Velg et beskrivende navn for å identifisere formålet med denne nøkkelen", + "keyCreated": "API-nøkkel opprettet", + "keyCreatedSuccess": "Nøkkel ble opprettet!", + "keyCreatedNote": "Kopier og lagre denne nøkkelen nå – den vises ikke igjen.", + "done": "Ferdig", + "savePermissions": "Lagre tillatelser", + "allowAll": "Tillat alle", + "restrict": "Begrens", + "allowAllInfo": "Denne nøkkelen har tilgang til alle tilgjengelige modeller.", + "restrictInfo": "Denne nøkkelen har tilgang til {selected} av {total}-modeller.", + "selected": "{count} valgt", + "all": "Alle", + "clear": "Klart", + "searchModels": "Søk etter modeller etter navn eller leverandør...", + "noModelsFound": "Ingen modeller funnet", + "keyNameRequired": "Nøkkelnavn er påkrevd", + "keyNameTooLong": "Nøkkelnavnet må være {max} tegn eller mindre", + "keyNameInvalid": "Nøkkelnavn kan bare inneholde bokstaver, tall, mellomrom, bindestreker og understreker", + "invalidKeyName": "Ugyldig nøkkelnavn", + "failedCreateKey": "Kunne ikke opprette nøkkel", + "failedCreateKeyRetry": "Kunne ikke opprette nøkkel. Vennligst prøv igjen.", + "invalidKeyId": "Ugyldig nøkkel-ID", + "failedDeleteKey": "Kunne ikke slette nøkkelen", + "failedDeleteKeyRetry": "Kunne ikke slette nøkkelen. Vennligst prøv igjen.", + "invalidModelsSelection": "Ugyldig modellvalg", + "cannotSelectMoreThanModels": "Kan ikke velge mer enn {max} modeller", + "failedUpdatePermissions": "Kunne ikke oppdatere tillatelser", + "failedUpdatePermissionsRetry": "Kunne ikke oppdatere tillatelser. Vennligst prøv igjen.", + "unknownProvider": "ukjent", + "copyMaskedKey": "Kopier maskert nøkkel", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Siste: {date}", + "editPermissions": "Rediger tillatelser", + "deleteKey": "Slett nøkkel", + "model": "{count} modell", + "models": "{count} modeller", + "permissionsTitle": "Tillatelser: {name}", + "allowAllDesc": "Denne nøkkelen har tilgang til alle tilgjengelige modeller.", + "restrictDesc": "Denne nøkkelen har tilgang til {selectedCount} av {totalModels}-modeller.", + "selectedCount": "{count} valgt" + }, + "auditLog": { + "title": "Revisjonslogg", + "searchPlaceholder": "Søkehandlinger...", + "action": "Handling", + "actor": "Skuespiller", + "target": "Mål", + "ipAddress": "IP-adresse", + "timestamp": "Tidsstempel", + "noEntries": "Ingen revisjonsoppføringer funnet", + "filterByAction": "Filtrer etter handling...", + "filterByActor": "Filtrer etter skuespiller...", + "filterEntriesAria": "Filtrer revisjonsloggoppføringer", + "filterByActionTypeAria": "Filtrer etter handlingstype", + "filterByActorAria": "Filtrer etter skuespiller", + "refreshAuditLogAria": "Oppdater revisjonslogg", + "tableAria": "Revisjonsloggoppføringer", + "failedFetchAuditLog": "Kunne ikke hente revisjonsloggen", + "notAvailable": "—", + "description": "Administrative handlinger og sikkerhetshendelser", + "showing": "Viser {count} oppføringer (offset {offset})", + "previous": "Forrige" + }, + "cliTools": { + "title": "CLI-verktøy", + "noActiveProviders": "Ingen aktive tilbydere", + "noActiveProvidersDesc": "Vennligst legg til og koble til leverandører først for å konfigurere CLI-verktøy.", + "mapModels": "Kartmodeller", + "testConnection": "Test tilkobling", + "connectionStatus": "Tilkoblingsstatus", + "configureEndpoint": "Konfigurer endepunkt", + "instructions": "Instruksjoner", + "modelMapping": "Modellkartlegging", + "baseUrl": "Base URL", + "apiKey": "API-nøkkel", + "configured": "Konfigurert", + "notConfigured": "Ikke konfigurert", + "notInstalled": "Ikke installert", + "custom": "Egendefinert", + "unknown": "Ukjent", + "lastSavedAt": "Sist lagret: {date}", + "never": "Aldri", + "justNow": "akkurat nå", + "minutesAgoShort": "{count}m siden", + "hoursAgoShort": "{count}t siden", + "daysAgoShort": "{count}d siden", + "monthsAgoShort": "{count}mnd siden", + "yearsAgoShort": "{count}y siden", + "runtimeCheckFailed": "Kjøretidssjekk mislyktes", + "yourApiKeyPlaceholder": "din-api-nøkkelen", + "modelPlaceholder": "leverandør/modell-id", + "configurationSaved": "Konfigurasjonen er lagret.", + "failedToSave": "Kunne ikke lagre konfigurasjonen.", + "noApiKeysCreateOne": "Ingen API-nøkler – Opprett en på Nøkler-siden", + "defaultOmnirouteKey": "sk_omniroute (standard)", + "selectModel": "Velg modell", + "selectModelForAlias": "Velg modell for {alias}", + "selectModelForTool": "Velg modell for {tool}", + "select": "Velg", + "clear": "Klart", + "comingSoon": "Kommer snart", + "checkingRuntime": "Sjekker kjøretidsstatus ...", + "guideOnlyIntegration": "Integrasjon kun for guide (ingen lokal kjøretid kreves)", + "cliRuntimeDetected": "CLI kjøretid oppdaget og klar", + "cliFoundNotRunnable": "CLI funnet, men ikke kjørbar{reason}", + "cliRuntimeNotDetected": "CLI kjøretid ikke oppdaget", + "binary": "Binær", + "configPath": "Konfigurasjonsbane", + "configPathShort": "Konfig", + "failedCheckRuntimeStatus": "Kunne ikke sjekke kjøretidsstatus.", + "copy": "Kopier", + "copied": "Kopiert", + "copyConfig": "Kopier konfig", + "saveConfig": "Lagre konfig", + "selectionSaved": "Utvalget lagret", + "guide": "Veiledning", + "detected": "Oppdaget", + "notReady": "Ikke klar", + "active": "Aktiv", + "inactive": "Inaktiv", + "startMitm": "Start MITM", + "stopMitm": "Stopp MITM", + "mitmStarted": "MITM startet vellykket!", + "mitmStopped": "MITM stoppet vellykket!", + "failedStart": "Kunne ikke starte MITM", + "failedStop": "Kunne ikke stoppe MITM", + "saveMappings": "Lagre tilordninger", + "mappingsSaved": "Kartene er lagret!", + "failedSaveMappings": "Kunne ikke lagre tilordninger", + "howItWorks": "Slik fungerer det:", + "antigravityHowWorksDesc": "Antigravity sender forespørsler til Googles endepunkt. MITM avskjærer og omdirigerer dem til OmniRoute.", + "antigravityStep1": "1. Start MITM for å rute forespørsler gjennom OmniRoute.", + "antigravityStep2Prefix": "2. Legg til", + "antigravityStep2Suffix": "til vertsfilen din som 127.0.0.1.", + "antigravityStep3": "3. Åpne Antigravity og forespørsler vil bli fullført.", + "sudoPasswordRequiredTitle": "Sudo-passord kreves", + "sudoPasswordHint": "Administratorpassord kreves for å endre vertsfil og systemproxyinnstillinger.", + "enterSudoPassword": "Skriv inn sudo-passord", + "sudoPasswordRequiredError": "Sudo-passord kreves.", + "cancel": "Avbryt", + "confirm": "Bekreft", + "settingsApplied": "Innstillingene ble brukt!", + "failedApplySettings": "Kunne ikke bruke innstillingene", + "settingsReset": "Innstillinger tilbakestilt!", + "failedResetSettings": "Kunne ikke tilbakestille innstillingene", + "backupRestored": "Sikkerhetskopien gjenopprettet!", + "failedRestore": "Kunne ikke gjenopprette", + "checkingCli": "Sjekker {tool} CLI...", + "cliNotRunnable": "{tool} CLI installert, men ikke kjørbar", + "cliNotInstalled": "{tool} CLI ikke installert", + "cliNotDetected": "{tool} CLI ikke oppdaget", + "cliDetectedReady": "{tool} CLI oppdaget og klar", + "cliFoundFailedHealthcheck": "{tool} CLI ble funnet, men mislyktes med kjøretidshelsesjekk{reason}.", + "installCliPrompt": "Installer {tool} CLI for å bruke denne funksjonen.", + "installCodexPrompt": "Installer Codex CLI for å bruke funksjonen for automatisk bruk.", + "hide": "Skjul", + "howToInstall": "Hvordan installere", + "installationGuide": "Installasjonsveiledning", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Etter installasjon, kjør", + "toVerify": "å verifisere.", + "current": "Gjeldende", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Tilbakestill til standard", + "providerModelPlaceholder": "leverandør/modell-id", + "apply": "Søk", + "reset": "Tilbakestill", + "manualConfig": "Manuell konfig", + "backups": "Sikkerhetskopier", + "configBackups": "Konfigurer sikkerhetskopier", + "noBackupsYet": "Ingen sikkerhetskopier ennå. Sikkerhetskopier opprettes automatisk før hver bruk eller tilbakestilling.", + "restore": "Gjenopprett", + "backupRestoredReloading": "Sikkerhetskopien gjenopprettet! Laster inn status på nytt ...", + "failedRestoreBackup": "Kunne ikke gjenopprette sikkerhetskopien", + "applied": "Søkt!", + "failed": "Mislyktes", + "resetDone": "Tilbakestill!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute er konfigurert som OpenAI-kompatibel leverandør", + "provider": "Leverandør", + "model": "Modell", + "providers": "Leverandører", + "auth": "Auth", + "noApiKeysAvailable": "Ingen API-nøkler tilgjengelig", + "usingDefaultOmniroute": "Bruker standard: sk_omniroute", + "updateConfig": "Oppdater konfig", + "applyConfig": "Bruk Config", + "noBackupsAvailable": "Ingen sikkerhetskopier tilgjengelig.", + "profileSaved": "Profilen \"{name}\" er lagret!", + "failedSaveProfile": "Kunne ikke lagre profilen", + "profileActivated": "Profil aktivert!", + "failedActivateProfile": "Kunne ikke aktivere profilen", + "profiles": "Profiler", + "savedProfiles": "Lagrede profiler", + "noProfilesYet": "Ingen profiler er lagret ennå. Lagre gjeldende konfigurasjon som en profil nedenfor.", + "activate": "Aktiver", + "deleteProfile": "Slett profil", + "profileNamePlaceholder": "Profilnavn (f.eks. personlig konto)", + "saveCurrent": "Lagre gjeldende", + "codexAuthNotePrefix": "Codex bruker", + "codexAuthNoteMiddle": "med", + "codexAuthNoteSuffix": "Klikk \"Bruk\" for å konfigurere automatisk.", + "claudeManualConfiguration": "Claude CLI - Manuell konfigurasjon", + "codexManualConfiguration": "Codex CLI - Manual Configuration", + "droidManualConfiguration": "Factory Droid - Manuell konfigurasjon", + "openClawManualConfiguration": "Åpne Claw - Manuell konfigurasjon", + "clineManualConfiguration": "Cline manuell konfigurasjon", + "kiloManualConfiguration": "Kilokode manuell konfigurasjon", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE med MITM", + "claude": "Antropisk Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Åpne Claw AI Assistant", + "cline": "Cline AI-kodingsassistent CLI", + "kilo": "Kilokode AI Assistant CLI", + "cursor": "Cursor AI Code Editor", + "continue": "Fortsett AI Assistant" + }, + "guides": { + "cursor": { + "notes": { + "0": "Krever Cursor Pro-konto for å bruke denne funksjonen.", + "1": "Markøren ruter forespørsler gjennom sin egen server, så lokalt endepunkt støttes ikke. Aktiver Cloud Endpoint i Innstillinger." + }, + "steps": { + "1": { + "title": "Åpne Innstillinger", + "desc": "Gå til Innstillinger -> Modeller" + }, + "2": { + "title": "Aktiver OpenAI API", + "desc": "Aktiver alternativet \"OpenAI API-nøkkel\"." + }, + "3": { + "title": "Base URL" + }, + "4": { + "title": "API-nøkkel" + }, + "5": { + "title": "Legg til egendefinert modell", + "desc": "Klikk \"Vis alle modeller\" -> \"Legg til egendefinert modell\"" + }, + "6": { + "title": "Velg modell" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Åpne Config", + "desc": "Åpne Fortsett konfigurasjonsfil" + }, + "2": { + "title": "API-nøkkel" + }, + "3": { + "title": "Velg modell" + }, + "4": { + "title": "Legg til modellkonfig", + "desc": "Legg til følgende konfigurasjon til modellarrayet ditt:" + } + } + } + } + }, + "combos": { + "title": "Combos", + "description": "Lag modellkombinasjoner med vektet ruting og reservestøtte", + "createCombo": "Opprett kombinasjon", + "editCombo": "Rediger kombinasjon", + "deleteCombo": "Slett kombinasjon", + "noModels": "Ingen modeller", + "noModelsYet": "Ingen modeller lagt til ennå", + "addModel": "Legg til modell", + "addModelToCombo": "Legg til modell i kombinasjon", + "routingStrategy": "Rutingstrategi", + "maxRetries": "Max prøver på nytt", + "timeout": "Tidsavbrudd (ms)", + "healthcheck": "Helsesjekk", + "priority": "Prioritet", + "fallback": "Tilbakeslag", + "roundRobin": "Round Robin", + "random": "Tilfeldig", + "leastLatency": "Minste ventetid", + "comboName": "Kombinasjonsnavn", + "comboNamePlaceholder": "min-kombo", + "deleteConfirm": "Vil du slette denne kombinasjonen?", + "noCombosYet": "Ingen kombinasjoner ennå", + "comboCreated": "Kombinasjonen ble opprettet", + "comboUpdated": "Kombinasjonen ble oppdatert", + "comboDeleted": "Combo slettet", + "failedCreate": "Kunne ikke opprette kombinasjon", + "failedUpdate": "Kunne ikke oppdatere kombinasjonen", + "errorCreating": "Feil ved opprettelse av kombinasjon", + "errorUpdating": "Feil ved oppdatering av kombinasjon", + "errorDeleting": "Feil ved sletting av kombinasjon", + "testFailed": "Testforespørsel mislyktes", + "failedToggle": "Kunne ikke bytte kombinasjon", + "testResults": "Testresultater — {name}", + "resolvedBy": "Løst av:", + "more": "+{count} til", + "reqs": "krav", + "success": "suksess", + "proxyConfigured": "Proxy konfigurert", + "copyComboName": "Kopier kombinasjonsnavnet", + "enableCombo": "Aktiver kombinasjon", + "disableCombo": "Deaktiver kombinasjon", + "testCombo": "Testkombo", + "duplicate": "Duplikat", + "proxyConfig": "Proxy-konfigurasjon", + "nameRequired": "Navn er påkrevd", + "nameInvalid": "Bare bokstaver, tall, -, _, / og . tillatt", + "nameHint": "Bokstaver, tall, -, _, / og . tillatt", + "priorityDesc": "Sekvensiell fallback: prøver modell 1 først, deretter 2 osv.", + "weightedDesc": "Fordeler trafikk etter vektprosent med reserve", + "roundRobinDesc": "Sirkulær fordeling: hver forespørsel går til neste modell i rotasjon", + "randomDesc": "Ensartet tilfeldig valg, deretter fallback til gjenværende modeller", + "leastUsedDesc": "Velger modellen med færrest forespørsler, og balanserer belastningen over tid", + "costOptimizedDesc": "Ruter til den billigste modellen først basert på priser", + "models": "Modeller", + "autoBalance": "Autobalanse", + "advancedSettings": "Avanserte innstillinger", + "retryDelay": "Forsinkelse på nytt (ms)", + "concurrencyPerModel": "Samtidighet / modell", + "queueTimeout": "Tidsavbrudd for kø (ms)", + "advancedHint": "La stå tomt for å bruke globale standardinnstillinger. Disse overstyrer innstillingene per leverandør.", + "moveUp": "Flytt opp", + "moveDown": "Flytt ned", + "removeModel": "Fjern", + "saving": "Lagrer...", + "weighted": "Vektet", + "leastUsed": "Minst brukt", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Kostnader", + "budget": "Budsjett", + "totalCost": "Total kostnad", + "breakdown": "Kostnadsfordeling", + "noData": "Ingen kostnadsdata", + "byModel": "Etter modell", + "byProvider": "Av leverandør" + }, + "endpoint": { + "title": "API-endepunkt", + "available": "Tilgjengelige endepunkter", + "cloudProxy": "Cloud Proxy", + "disableConfirm": "Er du sikker på at du vil deaktivere skyproxy?", + "baseUrl": "Base URL", + "apiKeyLabel": "API-nøkkel", + "registeredKeys": "Registrerte nøkler", + "chatCompletions": "Chatfullføringer", + "responses": "Svar", + "listModels": "Liste over modeller", + "usingCloudProxy": "Bruker Cloud Proxy", + "usingLocalServer": "Bruker lokal server", + "machineId": "Maskin-ID: {id}...", + "disableCloud": "Deaktiver Cloud", + "enableCloud": "Aktiver Cloud", + "modelsAcrossEndpoints": "{models} modeller på tvers av {endpoints} endepunkter", + "chatDesc": "Streaming og ikke-streaming chat med alle leverandører", + "embeddings": "Innstøpinger", + "embeddingsDesc": "Tekstinnbygging for søk og RAG-rørledninger", + "imageGeneration": "Bildegenerering", + "imageDesc": "Generer bilder fra tekstmeldinger", + "rerank": "Ranger på nytt", + "rerankDesc": "Ranger dokumenter på nytt etter relevans for en spørring", + "audioTranscription": "Lydtranskripsjon", + "audioTranscriptionDesc": "Transkribere lydfiler til tekst (Whisper)", + "textToSpeech": "Tekst til tale", + "textToSpeechDesc": "Konverter tekst til tale med naturlig lyd", + "moderations": "Moderasjoner", + "moderationsDesc": "Innholdsmoderering og sikkerhetsklassifisering", + "enableCloudTitle": "Aktiver Cloud Proxy", + "whatYouGet": "Hva du vil få", + "cloudBenefitAccess": "Få tilgang til API-en din fra hvor som helst i verden", + "cloudBenefitShare": "Del enkelt endepunkt med teamet ditt", + "cloudBenefitPorts": "Du trenger ikke å åpne porter eller konfigurere brannmur", + "cloudBenefitEdge": "Rask globalt kantnettverk", + "cloudSessionNote": "Cloud vil beholde godkjenningsøkten din i 1 dag. Hvis den ikke brukes, slettes den automatisk.", + "cloudUnstableNote": "Cloud er for øyeblikket ustabil med Claude Code OAuth i noen tilfeller.", + "cloudConnected": "Cloud Proxy tilkoblet!", + "connectingToCloud": "Kobler til skyen ...", + "verifyingConnection": "Bekrefter tilkoblingen …", + "connecting": "Kobler til...", + "verifying": "Bekrefter...", + "connected": "Tilkoblet!", + "disableCloudTitle": "Deaktiver Cloud Proxy", + "disableWarning": "Alle autentiseringsøkter vil bli slettet fra skyen.", + "syncingData": "Synkroniserer siste data ...", + "disablingCloud": "Deaktiverer skyen …", + "syncing": "Synkroniserer...", + "disabling": "Deaktiverer...", + "cloudConnectedVerified": "Cloud Proxy tilkoblet og bekreftet!", + "connectedVerificationPending": "Tilkoblet — bekreftelse venter", + "connectedVerificationPendingWithError": "Tilkoblet — bekreftelse venter: {error}", + "cloudDisabledSuccess": "Cloud deaktivert", + "syncedSuccess": "Synkronisert vellykket", + "failedDisable": "Kunne ikke deaktivere skyen", + "failedEnable": "Kunne ikke aktivere skyen", + "cloudRequestTimeout": "Tidsavbrudd for skyforespørsel", + "cloudRequestFailed": "Skyforespørsel mislyktes", + "cloudWorkerUnreachable": "Kunne ikke nå skyarbeideren. Sørg for at skytjenesten kjører (npm kjør dev in /cloud).", + "connectionFailed": "Tilkobling mislyktes", + "syncFailed": "Kunne ikke synkronisere skydata", + "providerModelsTitle": "{provider} — Modeller", + "noModelsForProvider": "Ingen modeller tilgjengelig for denne leverandøren.", + "chat": "Chat", + "embedding": "Innebygging", + "image": "Bilde", + "custom": "tilpasset", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Systemhelse", + "description": "Sanntidsovervåking av din OmniRoute-forekomst", + "healthy": "Sunn", + "degraded": "Degradert", + "down": "Ned", + "uptime": "Oppetid", + "memory": "Minne", + "memoryRss": "Minne (RSS)", + "heap": "Heap", + "cpu": "CPU", + "database": "Database", + "version": "Versjon", + "lastCheck": "Siste sjekk", + "providerHealth": "Leverandørhelse", + "systemMetrics": "Systemmålinger", + "tokenHealth": "Token Health", + "refreshAll": "Oppdater alle", + "checkNow": "Sjekk nå", + "loadingHealth": "Laster inn helsedata ...", + "failedToLoad": "Kunne ikke laste inn helsedata: {error}", + "retry": "Prøv på nytt", + "allOperational": "Alle systemer i drift", + "issuesDetected": "Systemproblemer oppdaget", + "updatedAt": "Oppdatert {time}", + "latency": "Latens", + "latencyP50": "p50", + "latencyP95": "s95", + "latencyP99": "s99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Totalt antall forespørsler", + "noDataYet": "Ingen data ennå", + "promptCache": "Spør Cache", + "entries": "Oppføringer", + "hitRate": "Trefffrekvens", + "hitsMisses": "Treffer / savner", + "signatureCache": "Signaturbuffer", + "signatureDefaults": "Standarder", + "signatureTool": "Verktøy", + "signatureFamily": "Familie", + "signatureSession": "Sesjon", + "recovering": "Gjenoppretter", + "noCBData": "Ingen strømbryterdata tilgjengelig. Kom med noen forespørsler først.", + "providerHealthStatusAria": "Leverandørens helsestatus", + "issuesLabel": "Problemer oppdaget", + "operational": "Operasjonell", + "providers": "Leverandører", + "healthyCount": "{count} sunn", + "nodeVersion": "Node {version}", + "failures": "{count} feil", + "failuresPlural": "{count} feil", + "lastFailure": "Sist", + "rateLimitStatus": "Takstgrensestatus", + "activeLimiters": "{count} aktiv begrenser", + "activeLimitersPlural": "{count} aktive begrensere", + "queued": "I kø", + "queuedCount": "{count} i kø", + "running": "løping", + "runningCount": "{count} kjører", + "ok": "OK", + "activeLockouts": "Aktive lockouter", + "resetConfirm": "Tilbakestille alle effektbrytere til sunn tilstand? Dette vil slette alle feiltellinger og gjenopprette alle leverandører til driftsstatus.", + "resetAllTitle": "Tilbakestill alle effektbrytere til sunn tilstand", + "resetting": "Tilbakestiller...", + "resetAll": "Tilbakestill alle", + "until": "Inntil {time}" + }, + "limits": { + "title": "Grenser og kvoter", + "rateLimit": "Satsgrense", + "remaining": "Gjenværende", + "requestsPerMinute": "Forespørsler/min", + "tokensPerMinute": "Poletter/min", + "dailyLimit": "Daglig grense" + }, + "logs": { + "title": "Logger", + "requestLogs": "Be om logger", + "proxyLogs": "Proxy-logger", + "auditLog": "Revisjonslogg", + "console": "Konsoll", + "auditLogDesc": "Administrative handlinger og sikkerhetshendelser", + "loading": "Laster inn...", + "refresh": "Oppdater", + "filterByAction": "Filtrer etter handling...", + "filterByActor": "Filtrer etter skuespiller...", + "filterEntriesAria": "Filtrer revisjonsloggoppføringer", + "filterByActionTypeAria": "Filtrer etter handlingstype", + "filterByActorAria": "Filtrer etter skuespiller", + "refreshAuditLogAria": "Oppdater revisjonslogg", + "tableAria": "Revisjonsloggoppføringer", + "failedFetchAuditLog": "Kunne ikke hente revisjonsloggen", + "showing": "Viser {count} oppføringer (offset {offset})", + "search": "Søk", + "timestamp": "Tidsstempel", + "action": "Handling", + "actor": "Skuespiller", + "target": "Mål", + "details": "Detaljer", + "ipAddress": "IP-adresse", + "notAvailable": "—", + "noEntries": "Ingen revisjonsloggoppføringer funnet", + "previous": "Forrige", + "next": "Neste" + }, + "onboarding": { + "welcome": "Velkommen", + "security": "Sikkerhet", + "test": "Test", + "ready": "Klar!", + "setPassword": "Angi passord", + "addProvider": "Legg til din første leverandør", + "getStarted": "Kom i gang", + "skip": "Hopp over", + "skipWizard": "Hopp over veiviseren helt", + "skipPassword": "Hopp over passordoppsett", + "skipAndContinue": "Hopp over og fortsett", + "passwordLabel": "Passord", + "confirmPassword": "Bekreft passord", + "enterPassword": "Skriv inn passord", + "confirmPasswordPlaceholder": "Bekreft passord", + "passwordsMismatch": "Passord stemmer ikke", + "setupComplete": "Oppsettet er fullført!", + "goToDashboard": "Gå til Dashboard →", + "welcomeDesc": "OmniRoute er din lokale AI API-proxy. Den ruter forespørsler til flere AI-leverandører med lastbalansering, failover og brukssporing.", + "multiProvider": "Multileverandør", + "usageTracking": "Brukssporing", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "Angi et passord for å beskytte dashbordet ditt, eller hopp over nå.", + "providerDesc": "Koble til din første AI-leverandør. Du kan legge til flere senere.", + "apiKeyRequired": "API-nøkkel (påkrevd)", + "customUrlOptional": "Egendefinert URL (valgfritt)", + "testDesc": "La oss kontrollere at leverandørtilkoblingen din fungerer.", + "runTest": "Kjør tilkoblingstest", + "testingConnection": "Tester tilkoblingen...", + "connectionSuccessful": "Tilkoblingen var vellykket! Leverandøren din er klar.", + "noProviderFound": "Ingen leverandør funnet. Du kan legge til en fra dashbordet senere.", + "testFailed": "Testen mislyktes, men du kan konfigurere dette senere.", + "couldNotTest": "Kunne ikke teste akkurat nå. Du kan teste fra dashbordet.", + "doneDesc": "Du er klar! OmniRoute-forekomsten din er konfigurert og klar til å fullføre AI-forespørsler.", + "yourEndpoint": "Ditt endepunkt:", + "continue": "Fortsett", + "retry": "Prøv på nytt", + "failedSetPassword": "Kunne ikke angi passord. Prøv igjen.", + "failedAddProvider": "Kunne ikke legge til leverandør. Prøv igjen.", + "connectionError": "Tilkoblingsfeil. Vennligst prøv igjen.", + "provider": "Leverandør" + }, + "providers": { + "title": "Leverandører", + "addProvider": "Legg til leverandør", + "editProvider": "Rediger leverandør", + "deleteProvider": "Slett leverandør", + "noProviders": "Ingen leverandører er konfigurert", + "modelAvailability": "Modelltilgjengelighet", + "accounts": "Kontoer", + "newAccount": "Ny konto", + "deleteConfirm": "Er du sikker på at du vil slette denne leverandøren?", + "testing": "Tester...", + "testConnection": "Test tilkobling", + "testSuccess": "Tilkoblingen var vellykket", + "testFailed": "Tilkobling mislyktes", + "available": "Tilgjengelig", + "cooldown": "Nedkjøling", + "unavailable": "Utilgjengelig", + "unknown": "Ukjent", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatibel", + "chat": "Chat", + "responses": "Svar", + "messages": "Meldinger", + "oauthProviders": "OAuth-leverandører", + "freeProviders": "Gratis leverandører", + "apiKeyProviders": "API-nøkkelleverandører", + "compatibleProviders": "API-nøkkel-kompatible leverandører", + "testAll": "Test alle", + "testAllOAuth": "Test alle OAuth-tilkoblinger", + "testAllFree": "Test alle gratis tilkoblinger", + "testAllApiKey": "Test alle API-nøkkeltilkoblinger", + "testAllCompatible": "Test alle kompatible tilkoblinger", + "connected": "{count} Tilkoblet", + "errorCount": "{count} Feil ({code})", + "errorCountNoCode": "{count} Feil", + "noConnections": "Ingen tilkoblinger", + "disabled": "Deaktivert", + "enableProvider": "Aktiver leverandør", + "disableProvider": "Deaktiver leverandør", + "testResults": "Testresultater", + "noCompatibleYet": "Ingen kompatible leverandører lagt til ennå", + "compatibleHint": "Bruk knappene ovenfor for å legge til OpenAI eller Anthropic-kompatible endepunkter", + "addOpenAICompatible": "Legg til OpenAI-kompatibel", + "addAnthropicCompatible": "Legg til Antropisk kompatibel", + "addNewProvider": "Legg til ny leverandør", + "backToProviders": "Tilbake til Leverandører", + "configureNewProvider": "Konfigurer en ny AI-leverandør som skal brukes med applikasjonene dine.", + "providerLabel": "Leverandør", + "selectProvider": "Velg en leverandør", + "selectedProvider": "Valgt leverandør", + "authMethod": "Autentiseringsmetode", + "apiKeyLabel": "API-nøkkel", + "apiKeyRequired": "API-nøkkel kreves", + "selectProviderRequired": "Velg en leverandør", + "enterApiKey": "Skriv inn API-nøkkelen din", + "apiKeySecure": "API-nøkkelen din vil bli kryptert og lagret sikkert.", + "oauth2Connect": "Koble til OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Koble til kontoen din med OAuth2-autentisering.", + "displayName": "Vist navn", + "displayNamePlaceholder": "f.eks. Production API, Dev Environment", + "displayNameHint": "Valgfritt. Et vennlig navn for å identifisere denne konfigurasjonen.", + "active": "Aktiv", + "activeDescription": "Aktiver denne leverandøren for bruk i appene dine", + "cancel": "Avbryt", + "createProvider": "Opprett leverandør", + "failedCreate": "Kunne ikke opprette leverandør", + "errorOccurred": "Det oppsto en feil. Vennligst prøv igjen.", + "modelStatus": "Modellstatus", + "allModelsOperational": "Alle modeller i drift", + "modelsWithIssues": "{count} modell(er) med problemer", + "allModelsNormal": "Alle modellene reagerer normalt.", + "cooldownCleared": "Nedkjøling ryddet for {model}", + "failedClearCooldown": "Kunne ikke fjerne nedkjøling", + "loadingAvailability": "Laster modelltilgjengelighet ...", + "clearCooldown": "Klart", + "clearing": "Rydder...", + "until": "Inntil {time}", + "providerTestFailed": "Providertesten mislyktes", + "modeTest": "{mode} Test", + "passedCount": "{count} bestått", + "failedCount": "{count} mislyktes", + "testedCount": "{count} testet", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "FEIL", + "noActiveConnectionsInGroup": "Fant ingen aktive tilkoblinger for denne gruppen.", + "allTestsPassed": "Alle {total} tester bestått", + "testSummary": "{passed}/{total} bestått, {failed} mislyktes", + "nameLabel": "Navn", + "prefixLabel": "Prefiks", + "baseUrlLabel": "Base URL", + "apiTypeLabel": "API-type", + "prefixHint": "Obligatorisk. Unikt prefiks for modellnavn.", + "nameHint": "Obligatorisk. En vennlig etikett for denne noden.", + "baseUrlHint": "Obligatorisk.  Leverandørens API-base-URL.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Bekreft tilkoblingen", + "validating": "Validerer...", + "connectionValid": "Tilkoblingen er gyldig!", + "connectionFailed": "Tilkobling mislyktes. Sjekk URL og nøkkel.", + "testKeyLabel": "Test API-nøkkel", + "testKeyPlaceholder": "sk-... (kun for validering)", + "providerNotFound": "Finner ikke leverandør", + "deleteConnectionConfirm": "Vil du slette denne tilkoblingen?", + "failedSetAlias": "Kunne ikke angi alias", + "failedSaveConnection": "Kunne ikke lagre tilkoblingen", + "failedSaveConnectionRetry": "Kunne ikke lagre tilkoblingen. Vennligst prøv igjen.", + "failedRetestConnection": "Kunne ikke teste tilkoblingen på nytt", + "deleteCompatibleNodeConfirm": "Vil du slette denne {type}-kompatible noden?", + "anthropicCompatibleDetails": "Antropisk kompatible detaljer", + "openaiCompatibleDetails": "OpenAI-kompatible detaljer", + "messagesApi": "Messages API", + "responsesApi": "Responses API", + "chatCompletions": "Chatfullføringer", + "importingModels": "Importerer...", + "importFromModels": "Importer fra /models", + "addConnectionToImport": "Legg til en tilkobling for å aktivere import.", + "noModelsConfigured": "Ingen modeller er konfigurert", + "connectionCount": "{count} tilkobling(er)", + "fetchingModels": "Henter tilgjengelige modeller...", + "failedFetchModels": "Kunne ikke hente modellene", + "noModelsFound": "Ingen modeller funnet", + "importFailed": "Import mislyktes", + "noNewModelsAdded": "Ingen nye modeller ble lagt til.", + "adding": "Legger til...", + "importingModelsTitle": "Importere modeller", + "copyModel": "Kopier modell", + "removeModel": "Fjern modellen", + "rateLimitProtected": "Beskyttet", + "rateLimitUnprotected": "Ubeskyttet", + "enableRateLimitProtection": "Klikk for å aktivere satsgrensebeskyttelse", + "disableRateLimitProtection": "Klikk for å deaktivere satsgrensebeskyttelse", + "productionKey": "Produksjonsnøkkel", + "enterNewApiKey": "Skriv inn ny API-nøkkel", + "optional": "Valgfritt", + "anthropicCompatibleName": "Antropisk kompatibel", + "openaiCompatibleName": "OpenAI-kompatibel", + "failedImportModels": "Kunne ikke importere modeller", + "noModelsReturnedFromEndpoint": "Ingen modeller returnert fra /models endepunkt.", + "importingModelsProgress": "Importerer {current} av {total} modeller ...", + "foundModelsStartingImport": "Fant {count} modeller. Starter import...", + "importingModelById": "Importerer {modelId}...", + "importSuccessCount": "Vellykket importert {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Ingen nye modeller ble lagt til (alle finnes allerede).", + "importDoneCount": "✓ Ferdig! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Det oppstod en uventet feil", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "meldinger", + "responsesPath": "svar", + "chatCompletionsPath": "chat/fullføringer", + "add": "Legg til", + "edit": "Rediger", + "delete": "Slett", + "anthropic": "Antropisk", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Bare én tilkobling er tillatt per kompatibel node. Legg til en annen node hvis du trenger flere tilkoblinger.", + "connections": "Tilkoblinger", + "providerProxyTitleConfigured": "Leverandørproxy: {host}", + "configured": "konfigurert", + "providerProxyConfigureHint": "Konfigurer proxy for alle tilkoblinger til denne leverandøren", + "providerProxy": "Leverandørfullmakt", + "noConnectionsYet": "Ingen tilkoblinger ennå", + "addFirstConnectionHint": "Legg til din første tilkobling for å komme i gang", + "addConnection": "Legg til tilkobling", + "availableModels": "Tilgjengelige modeller", + "pageAutoRefresh": "Siden oppdateres automatisk...", + "statusDisabled": "deaktivert", + "statusConnected": "tilkoblet", + "statusRuntimeIssue": "kjøretidsproblem", + "statusAuthFailed": "auth mislyktes", + "statusRateLimited": "sats begrenset", + "statusNetworkIssue": "nettverksproblem", + "statusTestUnsupported": "test støttes ikke", + "statusUnavailable": "utilgjengelig", + "statusFailed": "mislyktes", + "statusError": "feil", + "oauthAccount": "OAuth-konto", + "errorTypeRuntime": "Lokal kjøretid", + "errorTypeUpstreamAuth": "Oppstrøms auth", + "errorTypeMissingCredential": "Mangler legitimasjon", + "errorTypeRefreshFailed": "Oppdatering mislyktes", + "errorTypeTokenExpired": "Token utløpt", + "errorTypeRateLimited": "Begrenset pris", + "errorTypeUpstreamUnavailable": "Oppstrøms utilgjengelig", + "errorTypeNetworkError": "Nettverksfeil", + "errorTypeTestUnsupported": "Testen støttes ikke", + "errorTypeUpstreamError": "Oppstrøms feil", + "proxySourceGlobal": "Globalt", + "proxySourceProvider": "Leverandør", + "proxySourceKey": "Nøkkel", + "proxyConfiguredBySource": "Fullmakt ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "Fullmakt", + "retestAuthentication": "Test autentisering på nytt", + "retest": "Test på nytt", + "disableConnection": "Deaktiver tilkobling", + "enableConnection": "Aktiver tilkobling", + "reauthenticateConnection": "Autentiser denne tilkoblingen på nytt", + "proxyConfig": "Proxy konfig", + "aliasExistsAlert": "Aliaset \"{alias}\" eksisterer allerede. Bruk en annen modell eller rediger eksisterende alias.", + "openRouterAnyModelHint": "OpenRouter støtter alle modeller. Legg til modeller og lag aliaser for rask tilgang.", + "modelIdFromOpenRouter": "Modell-ID (fra OpenRouter)", + "openRouterModelPlaceholder": "antropisk/claude-3-opus", + "customModels": "Egendefinerte modeller", + "customModelsHint": "Legg til modell-ID-er som ikke er i standardlisten. Disse vil være tilgjengelige for ruting.", + "modelId": "Modell-ID", + "customModelPlaceholder": "f.eks. gpt-4.5-turbo", + "loading": "Laster inn...", + "removeCustomModel": "Fjern tilpasset modell", + "noCustomModels": "Ingen tilpassede modeller lagt til ennå.", + "allSuggestedAliasesExist": "Alle foreslåtte aliaser finnes allerede. Velg en annen modell eller fjern motstridende aliaser.", + "failedSaveCustomModel": "Kunne ikke lagre egendefinert modell", + "modelAddedSuccess": "Modell {modelId} ble lagt til", + "failedAddModelTryAgain": "Kunne ikke legge til modell. Vennligst prøv igjen.", + "failedSaveImportedModel": "Kunne ikke lagre importert modell til egendefinert database", + "failedImportModelsTryAgain": "Kunne ikke importere modeller. Vennligst prøv igjen.", + "failedRemoveModelFromDatabase": "Kunne ikke fjerne modellen fra databasen", + "modelRemovedSuccess": "Modellen ble fjernet", + "failedDeleteModelTryAgain": "Kunne ikke slette modellen. Vennligst prøv igjen.", + "compatibleModelsDescription": "Legg til {type}-kompatible modeller manuelt eller importer dem fra /models-endepunktet.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "API-nøkkelvalidering mislyktes. Sjekk nøkkelen din og prøv igjen.", + "addProviderApiKeyTitle": "Legg til {provider} API-nøkkel", + "checking": "Sjekker...", + "check": "Sjekk", + "valid": "Gyldig", + "invalid": "Ugyldig", + "creating": "Oppretter...", + "validationChecksAnthropicCompatible": "Valideringssjekker {provider} ved å bekrefte API-nøkkelen.", + "validationChecksOpenAiCompatible": "Valideringssjekker {provider} via /models på din basis-URL.", + "priorityLabel": "Prioritet", + "saving": "Lagrer...", + "save": "Lagre", + "editConnection": "Rediger tilkobling", + "accountName": "Kontonavn", + "email": "E-post", + "healthCheckMinutes": "Helsesjekk (min)", + "healthCheckHint": "Proaktivt token-oppdateringsintervall. 0 = deaktivert.", + "failedTestConnection": "Kunne ikke teste tilkoblingen", + "failed": "Mislyktes", + "leaveBlankKeepCurrentApiKey": "La stå tomt for å beholde gjeldende API-nøkkel.", + "editCompatibleTitle": "Rediger {type} Kompatibel", + "compatibleBaseUrlHint": "Bruk basis-URLen (som slutter på /v1) for din {type}-kompatible API.", + "apiKeyForCheck": "API-nøkkel (for sjekk)", + "compatibleProdPlaceholder": "{type} Kompatibel (Prod)" + }, + "settings": { + "title": "Innstillinger", + "general": "Generelt", + "security": "Sikkerhet", + "appearance": "Utseende", + "routing": "Ruting", + "cache": "Cache", + "resilience": "Spenst", + "systemPrompt": "Systemmelding", + "thinkingBudget": "Tenker budsjett", + "proxy": "Fullmakt", + "pricing": "Prissetting", + "storage": "Oppbevaring", + "policies": "Retningslinjer", + "ipFilter": "IP-filter", + "comboDefaults": "Combo standarder", + "fallbackChains": "Reservekjeder", + "changePassword": "Endre passord", + "enablePassword": "Aktiver passord", + "darkMode": "Mørk modus", + "lightMode": "Lysmodus", + "systemTheme": "Systemtema", + "enableCache": "Aktiver cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Maks cachestørrelse", + "clearCache": "Tøm buffer", + "cacheHits": "Cache-treff", + "cacheMisses": "Cache Misses", + "hitRate": "Trefffrekvens", + "cacheEntries": "Bufferoppføringer", + "circuitBreaker": "Strømbryter", + "retryPolicy": "Retningslinjer for forsøk", + "maxRetries": "Max prøver på nytt", + "retryDelay": "Forsinkelse på nytt", + "timeoutMs": "Tidsavbrudd (ms)", + "enableSystemPrompt": "Aktiver systemforespørsel", + "systemPromptText": "Systemmeldingstekst", + "enableThinking": "Aktiver tenkning", + "maxThinkingTokens": "Max Thinking Tokens", + "enableProxy": "Aktiver proxy", + "proxyUrl": "Proxy URL", + "pricingRates": "Prisformat", + "currentPricing": "Gjeldende prisoversikt", + "loadingPricing": "Laster inn prisdata ...", + "noPricing": "Ingen prisdata tilgjengelig", + "input": "Inndata", + "output": "Utgang", + "cached": "Bufret", + "reasoning": "Resonnement", + "cacheCreation": "Oppretting av cache", + "customPricing": "Egendefinerte priser", + "databaseSize": "Databasestørrelse", + "backupDb": "Sikkerhetskopier database", + "restoreDb": "Gjenopprett database", + "exportData": "Eksporter data", + "importData": "Importer data", + "clearData": "Fjern alle data", + "clearDataConfirm": "Dette vil slette alle data permanent. Er du sikker?", + "enableRequestLogs": "Aktiver forespørselslogger", + "logRetention": "Loggoppbevaring", + "ipWhitelist": "IP-hviteliste", + "ipBlacklist": "IP svarteliste", + "addIP": "Legg til IP", + "savedSuccessfully": "Innstillingene er lagret", + "ai": "AI", + "advanced": "Avansert", + "localMode": "Lokal modus — Alle data som er lagret på maskinen din", + "settingsSectionsAria": "Innstillinger-seksjoner", + "switchThemes": "Bytt mellom lyse og mørke temaer", + "themeSelectionAria": "Temavalg", + "themeLight": "Lys", + "themeDark": "Mørkt", + "themeSystem": "System", + "hideHealthLogs": "Skjul helsesjekklogger", + "hideHealthLogsDesc": "Når PÅ, undertrykk [HealthCheck]-meldinger i serverkonsollen", + "promptCache": "Spør Cache", + "flushCache": "Skyll cache", + "flushing": "Skyller …", + "size": "Størrelse", + "hits": "Treffer", + "evictions": "Utkastelser", + "loadingCacheStats": "Laster cachestatistikk …", + "globalProxy": "Global proxy", + "globalProxyDesc": "Konfigurer en global utgående proxy for alle API-kall. Individuelle leverandører, kombinasjoner og nøkler kan overstyre dette.", + "noGlobalProxy": "Ingen global proxy er konfigurert", + "globalLabel": "Globalt", + "configure": "Konfigurer", + "globalSystemPrompt": "Global systemforespørsel", + "systemPromptDesc": "Injisert i alle forespørsler på proxy-nivå", + "saved": "Lagret", + "systemPromptPlaceholder": "Skriv inn systemforespørselen for å injisere i alle forespørsler...", + "systemPromptHint": "Denne ledeteksten vises foran systemmeldingen for hver forespørsel. Bruk for globale instruksjoner, sikkerhetsretningslinjer eller regler for responsformatering.", + "chars": "{count} tegn", + "thinkingBudgetTitle": "Tenker budsjett", + "thinkingBudgetDesc": "Kontroller bruk av AI-resonnementstoken på tvers av alle forespørsler", + "passthrough": "Gjennomgang", + "passthroughDesc": "Ingen endringer – klienten kontrollerer tenkebudsjettet", + "auto": "Auto", + "autoDesc": "Fjern all tenkekonfigurasjon – la leverandøren bestemme", + "custom": "Egendefinert", + "customDesc": "Angi et fast tokenbudsjett for alle forespørsler", + "adaptive": "Adaptiv", + "adaptiveDesc": "Skaler budsjett basert på forespørselskompleksitet", + "effortNone": "Ingen (0 tokens)", + "effortLow": "Lav (1K tokens)", + "effortMedium": "Medium (10 000 tokens)", + "effortHigh": "Høy (128 000 tokens)", + "tokenBudget": "Tokenbudsjett", + "tokens": "tokens", + "baseEffortLevel": "Grunninnsatsnivå", + "adaptiveHint": "Adaptiv modus skalerer fra dette basisnivået basert på antall meldinger, verktøybruk og forespørselslengde.", + "requireLogin": "Krev innlogging", + "requireLoginDesc": "Når PÅ, krever dashbordet passord. Når AV, tilgang uten pålogging.", + "currentPassword": "Gjeldende passord", + "enterCurrentPassword": "Skriv inn gjeldende passord", + "newPassword": "Nytt passord", + "enterNewPassword": "Skriv inn nytt passord", + "confirmPassword": "Bekreft nytt passord", + "confirmPasswordPlaceholder": "Bekreft nytt passord", + "passwordsNoMatch": "Passord stemmer ikke", + "passwordUpdated": "Passordet ble oppdatert", + "failedUpdatePassword": "Kunne ikke oppdatere passordet", + "errorOccurred": "Det oppsto en feil", + "updatePassword": "Oppdater passord", + "setPassword": "Angi passord", + "apiEndpointProtection": "API-endepunktbeskyttelse", + "requireAuthModels": "Krev API-nøkkel for /modeller", + "requireAuthModelsDesc": "Når PÅ, returnerer /v1/models-endepunktet 404 for uautentiserte forespørsler. Forhindrer modelloppdagelse av uautoriserte brukere.", + "blockedProviders": "Blokkerte leverandører", + "blockedProvidersDesc": "Skjul spesifikke leverandører fra /v1/models-svaret. Blokkerte leverandører vil ikke vises i modelloppføringer.", + "providersBlocked": "{count} leverandør(er) blokkert fra /modeller", + "blockProviderTitle": "Blokkér {provider}", + "unblockProviderTitle": "Fjern blokkering av {provider}", + "routingStrategy": "Rutingstrategi", + "fillFirst": "Fyll først", + "fillFirstDesc": "Bruk kontoer i prioritert rekkefølge", + "roundRobin": "Round Robin", + "roundRobinDesc": "Bla gjennom alle kontoer", + "p2c": "P2C", + "p2cDesc": "Velg 2 tilfeldig, bruk den sunnere", + "random": "Tilfeldig", + "randomDesc": "Tilfeldig konto hver forespørsel", + "leastUsed": "Minst brukt", + "leastUsedDesc": "Velg minst nylig brukte konto", + "costOpt": "Kostnad Opt", + "costOptDesc": "Foretrekker den billigste tilgjengelige kontoen", + "stickyLimit": "Sticky Limit", + "stickyLimitDesc": "Anrop per konto før bytte", + "modelAliases": "Modellaliaser", + "modelAliasesDesc": "Jokertegnmønstre for å tilordne modellnavn på nytt • Bruk * og ?", + "aliasPatternPlaceholder": "claude-sonnett-*", + "aliasTargetPlaceholder": "claude-sonnett-4-20250514", + "pattern": "Mønster", + "targetModel": "Målmodell", + "add": "+ Legg til", + "session": "Sesjon", + "sessionDetailsAria": "Sesjonsdetaljer", + "status": "Status", + "authenticated": "Autentisert", + "guest": "Gjest", + "loginTime": "Påloggingstid", + "sessionAge": "Sesjonsalder", + "browser": "Nettleser", + "clearLocalData": "Fjern lokale data", + "logout": "Logg ut", + "clearLocalDataConfirm": "Vil du slette alle lokale data? Dette vil tilbakestille innstillingene dine.", + "unknown": "Ukjent", + "systemActor": "systemet", + "ipAccessControl": "IP-tilgangskontroll", + "ipAccessControlDesc": "Blokker eller tillat bestemte IP-adresser", + "ipModeDisabled": "Deaktivert", + "ipModeBlacklist": "Svarteliste", + "ipModeWhitelist": "Hviteliste", + "ipModeWhitelistPriority": "WL prioritet", + "addIpAddress": "Legg til IP-adresse", + "ipAddressPlaceholder": "192.168.1.0/24 eller 10.0.*.*", + "block": "+ Blokker", + "allow": "+ Tillat", + "blocked": "Blokkert ({count})", + "allowed": "Tillatt ({count})", + "temporaryBans": "Midlertidig utestengelse ({count})", + "minLeft": "{min}m igjen", + "auditLog": "Revisjonslogg", + "searchAuditLogs": "Søk i revisjonslogger...", + "failedLoadAuditLog": "Kunne ikke laste inn revisjonsloggen", + "noAuditEvents": "Ingen revisjonshendelser funnet", + "action": "Handling", + "actor": "Skuespiller", + "details": "Detaljer", + "time": "Tid", + "fallbackChainsTitle": "Reservekjeder", + "fallbackChainsDesc": "Definer leverandørens reserveordre per modell", + "addChain": "+ Legg til kjede", + "modelName": "Modellnavn", + "modelNamePlaceholder": "claude-sonnett-4-20250514", + "providersCommaSeparated": "Leverandører (kommaseparert, i prioritert rekkefølge)", + "providersCommaSeparatedPlaceholder": "antropisk, openai, gemini", + "createChain": "Lag kjede", + "noFallbackChains": "Ingen reservekjeder", + "noFallbackChainsDesc": "Opprett en kjede for å definere leverandørens reserveordre for en modell.", + "loadingFallbackChains": "Laster inn reservekjeder...", + "deleteChainConfirm": "Vil du slette reservekjeden for «{model}»?", + "chainCreated": "Kjede opprettet for {model}", + "chainDeleted": "Kjede slettet for {model}", + "failedCreateChain": "Kunne ikke opprette kjede", + "failedDeleteChain": "Kunne ikke slette kjeden", + "deleteChain": "Slett kjede", + "fillModelAndProviders": "Fyll ut modellnavn og leverandører", + "addAtLeastOneProvider": "Legg til minst én leverandør", + "comboDefaultsTitle": "Combo standarder", + "globalComboConfig": "Global kombinasjonskonfigurasjon", + "defaultStrategy": "Standardstrategi", + "defaultStrategyDesc": "Brukes på nye kombinasjoner uten eksplisitt strategi", + "comboStrategyAria": "Kombinasjonsstrategi", + "priority": "Prioritet", + "weighted": "Vektet", + "maxRetriesLabel": "Max prøver på nytt", + "retryDelayLabel": "Forsinkelse på nytt (ms)", + "timeoutLabel": "Tidsavbrudd (ms)", + "healthCheck": "Helsesjekk", + "healthCheckDesc": "Forhåndssjekk leverandørens tilgjengelighet", + "trackMetrics": "Spor beregninger", + "trackMetricsDesc": "Registrer beregninger for forespørsel per kombinasjon", + "providerOverrides": "Leverandøroverstyringer", + "providerOverridesDesc": "Overstyr tidsavbrudd og forsøk på nytt per leverandør. Leverandørinnstillinger overstyrer globale standardinnstillinger.", + "providerMaxRetriesAria": "{provider} maksimalt forsøk", + "providerTimeoutAria": "{provider} tidsavbrudd ms", + "removeProviderOverrideAria": "Fjern {provider} overstyring", + "newProviderNamePlaceholder": "f.eks. google, åpne...", + "newProviderNameAria": "Nytt leverandørnavn", + "retries": "prøver på nytt", + "ms": "ms", + "saveComboDefaults": "Lagre Combo-standarder", + "maxNestingDepth": "Maks hekkedybde", + "concurrencyPerModel": "Samtidighet / modell", + "queueTimeout": "Tidsavbrudd for kø (ms)", + "providerProfiles": "Leverandørprofiler", + "providerProfilesDesc": "Separate innstillinger for motstandskraft for OAuth (øktbasert) og API Key (målt) leverandører. OAuth-leverandører har strengere terskler på grunn av lavere takstgrenser.", + "oauthProviders": "OAuth-leverandører", + "apiKeyProviders": "API-nøkkelleverandører", + "transientCooldown": "Forbigående nedkjøling", + "rateLimitCooldown": "Rate Limit Cooldown", + "maxBackoffLevel": "Maks Backoff Level", + "cbThreshold": "CB-terskel", + "cbResetTime": "CB-tilbakestillingstid", + "rateLimiting": "Satsbegrensende", + "rateLimitingDesc": "API-nøkkelleverandører er automatisk hastighetsbegrenset med sikre standardinnstillinger. Grenser læres fra responsoverskrifter og tilpasses over tid.", + "defaultSafetyNet": "Standard sikkerhetsnett", + "rpm": "RPM", + "minGap": "Min Gap", + "maxConcurrent": "Maks samtidig", + "activeLimiters": "Aktive begrensere", + "noActiveLimiters": "Ingen aktive ratebegrensere ennå.", + "reservoir": "Reservoar", + "running": "Løper", + "queued": "I kø", + "circuitBreakers": "Strømbrytere", + "breakerStateClosed": "Stengt", + "breakerStateOpen": "Åpne", + "breakerStateHalfOpen": "Halvåpent", + "tripped": "{count} utløste", + "healthy": "{count} sunn", + "resetAll": "Tilbakestill alle", + "noCircuitBreakers": "Ingen effektbrytere aktive ennå. De opprettes automatisk når forespørsler strømmer gjennom kombinasjonsrørledningen.", + "failures": "{count} feil(er)", + "policiesLocked": "Retningslinjer og låste identifikatorer", + "allOperational": "Alle systemer er i drift - ingen sperringer eller utløste brytere", + "loadingPolicies": "Laster inn retningslinjer ...", + "lockedIdentifiers": "Låste identifikatorer", + "unlockedIdentifier": "Ulåst: {identifier}", + "sinceDate": "siden {date}", + "forceUnlock": "Tving opplåsing", + "unlocking": "Låser opp ...", + "failedUnlock": "Kunne ikke låse opp", + "failedLoadWithStatus": "Kunne ikke laste inn: {status}", + "failedLoadResilience": "Kunne ikke laste inn resiliensstatus", + "saveFailed": "Lagring mislyktes", + "resetFailed": "Tilbakestilling mislyktes", + "loadingResilience": "Laster motstandsstatus ...", + "retry": "Prøv på nytt", + "systemStorage": "System og lagring", + "allDataLocal": "Alle data lagret lokalt på maskinen din", + "databasePath": "Databasebane", + "exportDatabase": "Eksporter database", + "exportAll": "Eksporter alle (.tar.gz)", + "importDatabase": "Importer database", + "confirmDbImport": "Bekreft databaseimport", + "confirmDbImportDesc": "Dette vil erstatte alle gjeldende data med innholdet fra {file}. En sikkerhetskopi opprettes automatisk før importen.", + "yesImport": "Ja, import", + "lastBackup": "Siste sikkerhetskopi", + "noBackupYet": "Ingen sikkerhetskopi ennå", + "backupNow": "Sikkerhetskopier nå", + "backupRestore": "Sikkerhetskopiering og gjenoppretting", + "viewBackups": "Se sikkerhetskopier", + "hide": "Skjul", + "backupRetentionDesc": "Database-øyeblikksbilder opprettes automatisk før gjenoppretting og hvert 15. minutt når data endres. Oppbevaring: 24 timer i timen + 30 daglige sikkerhetskopier med smart rotasjon.", + "loadingBackups": "Laster inn sikkerhetskopier...", + "noBackupsYet": "Ingen sikkerhetskopier tilgjengelig ennå. Sikkerhetskopier opprettes automatisk når data endres.", + "backupsAvailable": "{count} sikkerhetskopi(er) tilgjengelig", + "refresh": "Oppdater", + "confirm": "Bekrefte?", + "yes": "Ja", + "no": "Nei", + "restore": "Gjenopprett", + "invalidFileType": "Ugyldig filtype. Bare .sqlite-filer godtas.", + "exportFailed": "Eksporten mislyktes", + "exportFailedWithError": "Eksport mislyktes: {error}", + "fullExportFailedWithError": "Full eksport mislyktes: {error}", + "backupCreated": "Sikkerhetskopi opprettet: {file}", + "restoreSuccess": "Gjenopprettet! {connections} tilkoblinger, {nodes} noder, {combos} kombinasjoner, {apiKeys} API-nøkler.", + "importSuccess": "Database importert! {connections} tilkoblinger, {nodes} noder, {combos} kombinasjoner, {apiKeys} API-nøkler.", + "justNow": "akkurat nå", + "minutesAgo": "{count}m siden", + "hoursAgo": "{count}t siden", + "daysAgo": "{count}d siden", + "backupReasonManual": "manuell", + "backupReasonPreRestore": "forhåndsgjenoppretting", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Ingen endringer siden siste sikkerhetskopiering", + "backupFailed": "Sikkerhetskopiering mislyktes", + "restoreFailed": "Gjenoppretting mislyktes", + "importFailed": "Import mislyktes", + "errorDuringRestore": "Det oppstod en feil under gjenoppretting", + "errorDuringImport": "Det oppstod en feil under import", + "modelPricing": "Modellprising", + "modelPricingDesc": "Konfigurer kostnadssatser per modell • Alle priser i $/1M tokens", + "providers": "Leverandører", + "registry": "Register", + "priced": "Priset", + "searchProvidersModels": "Søk etter leverandører eller modeller...", + "showAll": "Vis alle", + "noProvidersMatch": "Ingen leverandører samsvarer med søket ditt.", + "howPricingWorks": "Hvordan prissetting fungerer", + "cacheWrite": "Cache-skriving", + "unsaved": "ikke lagret", + "resetDefaults": "Tilbakestill standarder", + "saveProvider": "Lagre leverandør", + "saving": "Lagrer...", + "model": "Modell", + "models": "modeller", + "moreProviders": "{count} flere leverandører", + "withPricing": "med konfigurert pris", + "policiesCircuitBreakers": "Retningslinjer og effektbrytere", + "activeIssuesDetected": "Aktive problemer oppdaget", + "off": "Av", + "resetPricingConfirm": "Vil du tilbakestille all prissetting for {provider} til standardverdiene?", + "pricingDescInput": "Inndata: tokens sendt til modellen", + "pricingDescOutput": "Utgang: tokens generert", + "pricingDescCached": "Bufret: gjenbrukt inndata (~50 % av inndatahastigheten)", + "pricingDescReasoning": "Begrunnelse: tenketegn (faller tilbake til utgang)", + "pricingDescCacheWrite": "Cache Write: lage cache-oppføringer (faller tilbake til Input)", + "pricingDescFormula": "Kostnad = (input × input_rate) + (output × output_rate) + (cached × cached_rate) per million tokens.", + "pricingSettingsTitle": "Prisinnstillinger", + "totalModels": "Totalt antall modeller", + "active": "Aktiv", + "costCalculation": "Kostnadsberegning", + "costCalculationDesc": "Kostnadene beregnes basert på tokenbruk og prissatser som er konfigurert for hver modell.", + "pricingFormat": "Prisformat", + "pricingFormatDesc": "Alle priser er i $/1M tokens (dollar per million tokens).", + "tokenTypes": "Tokentyper", + "inputTokenDesc": "Standard prompt-tokens", + "outputTokenDesc": "Fullførings-/svarbrikke", + "cachedTokenDesc": "Bufret inndatatoken (vanligvis 50 % av inndatahastigheten)", + "reasoningTokenDesc": "Spesielle resonnement-/tenkesymboler (tilbakeslag til produksjonshastighet)", + "cacheCreationTokenDesc": "Tokens som brukes til å lage cache-oppføringer (tilbake til inngangshastighet)", + "customPricingNote": "Du kan overstyre standardpriser for spesifikke modeller. Egendefinerte overstyringer prioriteres fremfor automatisk oppdagede priser.", + "editPricing": "Rediger priser", + "viewFullDetails": "Se alle detaljer" + }, + "translator": { + "title": "Oversetter", + "metaTitle": "Oversetter Lekeplass | OmniRoute", + "metaDescription": "Feilsøk, test og visualiser API-formatoversettelser mellom leverandører", + "playgroundTitle": "Oversetter Lekeplass", + "playground": "Lekeplass", + "realtime": "Oversettelsesaktivitet i sanntid", + "chatTester": "Chat Tester", + "testBench": "Testbenk", + "liveMonitor": "Live Monitor", + "modeDescriptionPlayground": "Lim inn en hvilken som helst API-forespørselstekst og se hvordan OmniRoute oversetter den mellom leverandørformater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Send ekte chatteforespørsler gjennom OmniRoute og inspiser hele rundturen: inndata, oversatt forespørsel, leverandørsvar og oversatt utdata.", + "modeDescriptionTestBench": "Kjør forhåndsdefinerte scenarier og sammenlign kompatibilitet på tvers av leverandører og modeller.", + "modeDescriptionLiveMonitor": "Se oversettelsesbegivenheter i sanntid mens forespørsler strømmer gjennom OmniRoute.", + "modeDescriptionFallback": "Feilsøk, test og visualiser hvordan OmniRoute oversetter API-forespørsler mellom leverandører.", + "recentTranslations": "Nylige oversettelser", + "noTranslations": "Ingen oversettelser ennå", + "source": "Kilde", + "target": "Mål", + "time": "Tid", + "model": "Modell", + "status": "Status", + "latency": "Latens", + "totalTranslations": "Totale oversettelser", + "successful": "Vellykket", + "errors": "Feil", + "avgLatency": "Gj.sn. ventetid", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live — Automatisk oppdatering", + "paused": "Pause", + "eventsAppearHint": "Oversettelseshendelser vises her når forespørsler strømmer gjennom OmniRoute. Bruk en av disse metodene for å generere hendelser:", + "chatTesterTab": "Chat Tester-fanen", + "testBenchTab": "Testbenk-fanen", + "externalApiCalls": "Eksterne API-anrop", + "ideCliIntegrations": "IDE/CLI-integrasjoner", + "inMemoryNote": "Merk: Hendelser lagres i minnet og tilbakestilles når serveren starter på nytt.", + "ok": "OK", + "errorShort": "FEIL", + "formatConverter": "Formatkonvertering", + "formatConverterDescription": "Lim inn eller skriv inn en JSON-forespørselstekst. Oversetteren vil automatisk oppdage kildeformatet og konvertere det til målformatet. Bruk denne til å feilsøke hvordan OmniRoute oversetter forespørsler mellom formater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Inndata", + "output": "Utgang", + "auto": "Auto", + "swapFormats": "Bytt formater", + "translateAction": "Oversett", + "clear": "Klart", + "inputPlaceholder": "Lim inn en forespørselstekst her eller velg en mal nedenfor...", + "exampleTemplates": "Eksempelmaler", + "exampleTemplatesHint": "— Klikk for å laste", + "templateLoadHint": "Malen laster forespørselen i {format}-format. Endre kildeformat for å laste inn i et annet format.", + "compatibilityTester": "Kompatibilitetstester", + "compatibilityReport": "Kompatibilitetsrapport", + "testBenchDescription": "Kjør forhåndsdefinerte scenarier (Simple Chat, Tool Calling, etc.) for å bekrefte oversettelse og leverandørkompatibilitet. Velg et kildeformat og målleverandør, og kjør deretter alle testene for å se en kompatibilitetsprosent. Bruk denne for å finne hvilke funksjoner som fungerer på tvers av leverandører.", + "targetProvider": "Målleverandør", + "runAllTests": "Kjør alle tester", + "runTest": "Kjør test", + "reRun": "Kjør på nytt", + "running": "Kjører...", + "passed": "bestått", + "failed": "mislyktes", + "passedIconLabel": "✅ Bestått", + "chunks": "biter", + "scenarioSimpleChat": "Enkel chat", + "scenarioToolCalling": "Verktøyanrop", + "scenarioMultiTurn": "Multisving", + "scenarioThinking": "Tenker", + "scenarioSystemPrompt": "Systemmelding", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Enkel chat", + "tool-calling": "Verktøyanrop", + "multi-turn": "Multisving", + "thinking": "Tenker", + "system-prompt": "Systemmelding", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Grunnleggende tekstmelding", + "tool-calling": "Funksjon/verktøy-påkalling", + "multi-turn": "Samtale med historien", + "thinking": "Utvidet tenkning / resonnement", + "system-prompt": "Komplekse systeminstruksjoner", + "streaming": "SSE-strømforespørsel" + }, + "templatePayloads": { + "simpleChat": { + "system": "Du er en hjelpsom assistent.", + "userGreeting": "Hei! Hvordan har du det i dag?" + }, + "toolCalling": { + "userWeather": "Hvordan er været i São Paulo?", + "toolDescription": "Få gjeldende vær for et sted", + "cityNameDescription": "Bynavn" + }, + "multiTurn": { + "system": "Du er en kodeassistent.", + "userInitial": "Skriv en funksjon for å sortere en matrise i Python.", + "assistantExample": "Her er en enkel sorteringsfunksjon:\n\n``` python\ndef sort_array(arr):\n return sortert(arr)\n```", + "userFollowUp": "Gjør det nå sortert i synkende rekkefølge." + }, + "thinking": { + "question": "Hva er summen av de første 100 primtallene?" + }, + "systemPrompt": { + "systemInstruction": "Du er en senior programvareingeniør med spesialisering i distribuerte systemer. Svar konsist på spørsmål ved å bruke bransjens beste praksis. Gi alltid kodeeksempler når det er relevant. Formater svarene dine med markdown.", + "question": "Hvordan implementerer jeg et strømbrytermønster?" + }, + "streaming": { + "prompt": "Fortell meg en kort historie om en robot som lærer å male." + } + }, + "openaiCompatibleLabel": "OpenAI-kompatibel", + "anthropicCompatibleLabel": "Antropisk kompatibel", + "noTemplateForFormat": "Ingen mal for dette formatet", + "translationFailed": "Oversettelse mislyktes: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Oversettelsesrørledning", + "pipelineVisualization": "Visualisering av pipeline", + "pipelineVisualizationHint": "Send en melding for å se hvordan forespørselen din flyter gjennom gjenkjenning → oversettelse → leverandøranrop.", + "chatTesterDescription": "Send meldinger som et spesifikt klientformat og inspiser hvert trinn i oversettelsespipelinen.", + "chatTesterFlow": "Klientforespørsel → Formatdeteksjon → OpenAI Intermediate → Leverandørformat → Svar", + "clickStepToInspect": "Klikk på et hvilket som helst trinn for å inspisere dataene på det stadiet.", + "clientFormat": "Klientformat", + "provider": "Leverandør", + "modelPlaceholder": "Velg eller skriv inn et modellnavn...", + "sendMessageToSeePipeline": "Send en melding for å se oversettelsespipeline", + "chatMessageHintPrefix": "Meldingen din vil bli formatert som en", + "chatMessageHintSuffix": "forespørsel, oversatt gjennom rørledningen og sendt til den valgte leverandøren.", + "youWithFormat": "Du ({format})", + "assistant": "Assistent", + "typeMessage": "Skriv inn en melding...", + "send": "Send", + "clientRequest": "Kundeforespørsel", + "clientRequestDescription": "Forespørselsteksten slik klienten din ville sende den", + "formatDetected": "Format oppdaget", + "formatDetectedDescription": "OmniRoute oppdager automatisk API-formatet fra forespørselsstrukturen", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Alle formater normaliseres først til OpenAI-format (den universelle broen)", + "providerFormat": "Leverandørformat", + "providerFormatDescription": "OpenAI-formatet er oversatt til leverandørens opprinnelige format", + "providerResponse": "Leverandørens svar", + "providerResponseRawDescription": "Råsvaret fra leverandørens API", + "providerResponseSseDescription": "Den rå SSE-strømmen fra leverandørens API", + "unexpectedError": "Det oppstod en uventet feil", + "error": "Feil", + "errorMessage": "Feil: {message}", + "requestFailed": "Forespørselen mislyktes", + "noTextExtracted": "(Ingen tekst er trukket ut)", + "liveMonitorDescriptionPrefix": "Viser oversettelseshendelser når API-anrop flyter gjennom OmniRoute. Hendelser kommer fra bufferen i minnet (tilbakestilles ved omstart). Bruk", + "liveMonitorDescriptionSuffix": ", eller eksterne API-kall for å generere hendelser." + }, + "usage": { + "title": "Bruk", + "loggerTab": "Logger", + "proxyTab": "Fullmakt", + "budgetManagement": "Budsjettstyring", + "budgetSaved": "Budsjettgrenser lagret", + "budgetSaveFailed": "Kunne ikke lagre budsjettet", + "loadingBudgetData": "Laster inn budsjettdata ...", + "noApiKeysTitle": "Ingen API-nøkler", + "noApiKeysDescription": "Legg til API-nøkler først for å sette opp budsjettgrenser.", + "apiKey": "API-nøkkel", + "todaysSpend": "Dagens forbruk", + "thisMonth": "Denne måneden", + "setLimits": "Sett grenser", + "dailyLimitUsd": "Daglig grense (USD)", + "monthlyLimitUsd": "Månedlig grense (USD)", + "warningThresholdPercent": "Advarselsterskel (%)", + "dailyLimitPlaceholder": "f.eks. 5.00", + "monthlyLimitPlaceholder": "f.eks. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Lagre grenser", + "budgetOk": "Budsjett OK — {remaining} gjenstår", + "budgetExceeded": "Budsjettet overskredet – forespørsler kan bli blokkert", + "totalRequests": "Totalt antall forespørsler", + "noDataYet": "Ingen data ennå", + "latency": "Latens", + "latencyP50": "p50", + "latencyP95": "s95", + "latencyP99": "s99", + "promptCache": "Spør Cache", + "systemHealth": "Systemhelse", + "entries": "Oppføringer", + "activeCount": "{count} aktiv", + "openCircuitBreakersDetected": "Åpne strømbrytere oppdaget", + "hitRate": "Trefffrekvens", + "hitsMisses": "Treffer / savner", + "circuitBreakers": "Strømbrytere", + "lockedIPs": "Låste IP-er", + "lockoutsAutoRefreshHint": "Per-modell hastighetsgrense låser • Auto-refresh 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} igjen", + "howItWorks": "Hvordan det fungerer", + "howItWorksSubtitle": "Finn ut hvordan evalueringer validerer LLM-svarene dine", + "define": "Definer", + "defineStepDescription": "Opprett testtilfeller med inndatameldinger og forventede utdatakriterier ved å bruke strategier som inneholder, regulært uttrykk eller eksakt samsvar.", + "run": "Løp", + "runStepDescription": "Utfør testsaker mot LLM-endepunktene dine gjennom OmniRoute. Hver sak sendes som en ekte API-forespørsel.", + "evaluate": "Vurder", + "evaluateStepDescription": "Svar sammenlignes mot forventede kriterier. Se bestått/ikke bestått for hver sak med ventetid og detaljert tilbakemelding.", + "evalSuites": "Evalueringssuiter", + "evalSuitesHint": "Klikk på en suite for å se testtilfeller, og kjør deretter for å evaluere LLM-endepunktene dine", + "evalsLoading": "Laster inn eval suiter...", + "noEvalSuitesFound": "Ingen Eval-suiter funnet", + "noEvalSuitesDescription": "Eval-suiter kan defineres via API eller i kode. De tester modellutdata mot forventede resultater ved å bruke strategier som inneholder, regulært uttrykk, eksakt samsvar og tilpassede funksjoner.", + "columnCase": "Sak", + "columnStatus": "Status", + "columnLatency": "Latens", + "columnDetails": "Detaljer", + "columnModel": "Modell", + "columnStrategy": "Strategi", + "columnExpected": "Forventet", + "statsSuites": "Suiter", + "statsTestCases": "Testtilfeller", + "statsModels": "Modeller", + "statsCoverage": "Dekning", + "statsStrategiesCount": "{count} strategier", + "evaluationStrategies": "Evalueringsstrategier", + "modelsUnderTest": "Modeller under test", + "searchSuitesPlaceholder": "Søk etter suiter...", + "passSuffix": "pass", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Kjør Eval", + "runningProgress": "Kjører {current}/{total}...", + "passRate": "bestått rate", + "summaryBreakdown": "{passed} bestått · {failed} mislyktes · {total} totalt", + "passedIconLabel": "✅ Bestått", + "failedIconLabel": "❌ Mislyktes", + "detailsContains": "Inneholder: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Forventet: \"{expected}\"", + "noResultsYet": "Ingen resultater ennå", + "testCasesCount": "Testtilfeller ({count})", + "noTestCasesDefined": "Ingen testtilfeller definert", + "runEvalHint": "Klikk \"Run Eval\" for å utføre alle saker mot ditt LLM-endepunkt. Hver test sender en reell forespørsel gjennom OmniRoute.", + "notifyNoTestCases": "Ingen testtilfeller definert for denne suiten", + "notifyAllCasesPassed": "Alle {total} saker bestått ✅", + "notifySomeCasesFailed": "{passed}/{total} bestått, {failed} mislyktes", + "notifyEvalRunFailed": "Evalkjøring mislyktes", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "Modellvurderinger", + "evalsHeroDescription": "Test og valider LLM-endepunktene dine ved å kjøre forhåndsdefinerte evalueringspakker. Hver suite inneholder testtilfeller som sender reelle spørsmål gjennom OmniRoute og sammenligner svar med forventede kriterier – som hjelper deg med å oppdage regresjoner, sammenligne modeller og sikre svarkvalitet på tvers av leverandører.", + "qualityValidation": "Kvalitetsvalidering", + "modelComparison": "Modellsammenligning", + "regressionDetection": "Regresjonsdeteksjon", + "latencyBenchmarks": "Latency Benchmarks", + "modelLockouts": "Modellsperringer", + "noLockouts": "Ingen modeller er for øyeblikket låst", + "activeSessions": "Aktive økter", + "noSessions": "Ingen aktive økter", + "sessionsHint": "Økter vises når forespørsler flyter gjennom proxyen", + "sessionsTrackedHint": "Spores via forespørsel om fingeravtrykk • Auto-refresh 5s", + "session": "Sesjon", + "age": "Alder", + "requests": "Forespørsler", + "connection": "Tilkobling", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}t", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Leverandørgrenser", + "noProviders": "Ingen leverandører tilkoblet", + "connectProvidersForQuota": "Koble til leverandører med OAuth for å spore API-kvotegrenser og bruk.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrert fra {count})", + "autoRefresh": "Automatisk oppdatering", + "refreshAll": "Oppdater alle", + "loadingQuotas": "Laster inn...", + "account": "Konto", + "modelQuotas": "Modellkvoter", + "lastUsed": "Sist brukt", + "actions": "Handlinger", + "refreshQuota": "Oppdater kvote", + "today": "I dag", + "tomorrow": "I morgen", + "dayTimeFormat": "{day}, {time}", + "inDuration": "i {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Rå plan: {plan}", + "noPlanFromProvider": "Ingen plan fra leverandøren", + "noQuotaData": "Ingen kvotedata", + "noQuotaDataAvailable": "Ingen kvotedata tilgjengelig", + "noAccountsForTierFilter": "Fant ingen kontoer for nivåfilter", + "tierAll": "Alle", + "tierEnterprise": "Enterprise", + "tierTeam": "Team", + "tierBusiness": "Business", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Pluss", + "tierFree": "Gratis", + "tierUnknown": "Ukjent" + }, + "modals": { + "waitingAuth": "Venter på autorisasjon", + "verificationUrl": "Verifiserings-URL", + "yourCode": "Din kode", + "remoteAccess": "Fjerntilgang:", + "connectedSuccess": "Tilkoblet vellykket!", + "connectionFailed": "Tilkobling mislyktes", + "chooseAuthMethod": "Velg autentiseringsmetode:", + "awsBuilderId": "AWS Builder ID", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "Google-konto", + "githubAccount": "GitHub-konto", + "importToken": "Importer token", + "pasteToken": "Lim inn oppdateringstoken fra Kiro IDE.", + "awsRegion": "AWS-regionen", + "autoDetecting": "Automatisk oppdager tokens...", + "readingFromCache": "Leser fra AWS SSO-cache", + "readingFromCursor": "Leser fra Cursor IDE-databasen", + "initializing": "Initialiserer...", + "pricingConfig": "Priskonfigurasjon", + "loadingPricing": "Laster inn prisdata ...", + "pricingRatesFormat": "Prisformat", + "noPricingData": "Ingen prisdata tilgjengelig", + "noModelsFound": "Ingen modeller funnet" + }, + "loggers": { + "allProviders": "Alle leverandører", + "allModels": "Alle modeller", + "allAccounts": "Alle kontoer", + "allApiKeys": "Alle API-nøkler", + "allTypes": "Alle typer", + "allLevels": "Alle nivåer", + "modelAZ": "Modell A-Z", + "modelZA": "Modell Z-A", + "loadingLogs": "Laster inn logger...", + "loadingProxyLogs": "Laster inn proxy-logger ...", + "noLogEntries": "Ingen loggoppføringer funnet", + "noPayloadData": "Ingen nyttelastdata tilgjengelig for denne loggoppføringen.", + "proxyEvent": "Proxy-hendelse", + "proxy": "Fullmakt", + "level": "Nivå", + "directNative": "Direkte (innfødt)", + "combo": "Combo", + "inputTokens": "jeg:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Bruksoversikt", + "outputTokens": "Output tokens", + "totalCost": "Total kostnad", + "usageByModel": "Bruk etter modell", + "usageByAccount": "Bruk etter konto", + "failedToLoad": "Kunne ikke laste inn bruksstatistikk.", + "tokenHealth": "Token Health", + "totalOAuth": "Totalt OAuth", + "healthy": "Sunn", + "warning": "Advarsel", + "errored": "Feil", + "lastCheck": "Siste sjekk", + "noData": "Ingen data", + "share": "Del", + "unableToLoad": "Kan ikke laste inn systemberegninger", + "product": "Produkt", + "resources": "Ressurser", + "company": "Selskapet" + }, + "auth": { + "welcome": "Velkommen", + "signIn": "Logg på", + "enterPassword": "Skriv inn passordet ditt for å fortsette", + "password": "Passord", + "unifiedProxy": "Unified AI API Proxy", + "unifiedAiApiProxy": "Unified AI API Proxy", + "unifiedAiApiProxyDesc": "Rut forespørsler til flere AI-leverandører gjennom ett enkelt endepunkt. Lastbalansering, failover og brukssporing innebygd.", + "passwordNotEnabled": "Passordbeskyttelse er ikke aktivert", + "loading": "Laster inn...", + "invalidPassword": "Ugyldig passord", + "errorOccurredRetry": "Det oppsto en feil. Vennligst prøv igjen.", + "configureInstance": "La oss få konfigurert OmniRoute-forekomsten", + "runOnboardingWizard": "Kjør onboarding-veiviseren for å sette opp passordet ditt og koble til din første AI-leverandør.", + "startOnboarding": "Start onboarding", + "secureYourInstance": "Sikre din forekomst", + "setPasswordDescription": "Angi et passord for å beskytte dashbordet og sikre API-endepunktene dine mot uautorisert tilgang.", + "configurePassword": "Konfigurer passord", + "continue": "Fortsett", + "windowWillClose": "Dette vinduet lukkes automatisk...", + "closeTabNow": "Du kan lukke denne fanen nå.", + "copyUrlManual": "Vennligst kopier URL-en fra adressefeltet og lim den inn i applikasjonen.", + "accessDeniedDescription": "Du har ikke tillatelse til å få tilgang til denne ressursen. Sjekk API-nøkkelen din eller kontakt administratoren.", + "goToDashboard": "Gå til Dashboard", + "featureMultiProviderTitle": "Multileverandør", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google og mer", + "featureLoadBalancingTitle": "Lastbalansering", + "featureLoadBalancingDesc": "Distribuer forespørsler intelligent", + "featureUsageTrackingTitle": "Brukssporing", + "featureUsageTrackingDesc": "Overvåk kostnader og tokens", + "resetPassword": "Tilbakestill passord", + "resetDescription": "Velg en metode for å gjenopprette tilgangen til dashbordet", + "stopServer": "Stopp OmniRoute-serveren", + "processing": "Behandler...", + "pleaseWait": "Vennligst vent mens vi fullfører autorisasjonen.", + "authSuccess": "Godkjenning vellykket!", + "copyUrl": "Kopier denne nettadressen", + "accessDenied": "Tilgang nektet", + "methodCliTitle": "Metode 1: CLI-tilbakestilling", + "methodCliDescription": "Kjør følgende kommando på serveren der OmniRoute kjører:", + "methodCliHint": "Dette vil be deg om å angi et nytt passord. Serveren må stoppes først.", + "methodManualTitle": "Metode 2: Manuell tilbakestilling", + "methodManualDescription": "Slett passordet fra databasen og sett et nytt ved oppstart:", + "setPasswordInYour": "Sett et nytt passord i din", + "fileLabelSuffix": "fil:", + "newPasswordPlaceholder": "ditt_nye_passord", + "deleteSettingsFile": "Slett", + "orRemovePasswordHashField": "eller fjern passordHash-feltet", + "restartServerWithNewPassword": "Start serveren på nytt - den vil bruke det nye passordet", + "backToLogin": "Tilbake til pålogging", + "forgotPassword": "Glemt passord?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Naviger til hjem", + "toggleMenu": "Bytt meny", + "featuresLink": "Funksjoner", + "docsLink": "Dokumenter", + "github": "GitHub", + "versionLive": "v1.0 er nå live", + "oneEndpoint": "Ett endepunkt for", + "allProviders": "Alle AI-leverandører", + "heroDescription": "AI-endepunktproxy med web-dashboard - En JavaScript-port av CLIProxyAPI. Fungerer sømløst med Claude Code, OpenAI Codex, Cline, RooCode og andre CLI-verktøy.", + "getStarted": "Kom i gang", + "viewOnGithub": "Se på GitHub", + "powerfulFeatures": "Kraftige funksjoner", + "featuresSubtitle": "Alt du trenger for å administrere AI-infrastrukturen din på ett sted, bygget for skala.", + "featureUnifiedEndpointTitle": "Samlet endepunkt", + "featureUnifiedEndpointDesc": "Få tilgang til alle leverandører via en enkelt standard API-URL.", + "featureEasySetupTitle": "Enkelt oppsett", + "featureEasySetupDesc": "Kom i gang på få minutter med npx-kommandoen.", + "featureModelFallbackTitle": "Modell Fallback", + "featureModelFallbackDesc": "Bytt leverandør automatisk ved feil eller høy ventetid.", + "featureUsageTrackingTitle": "Brukssporing", + "featureUsageTrackingDesc": "Detaljert analyse og kostnadsovervåking på tvers av alle modeller.", + "featureOAuthApiKeysTitle": "OAuth- og API-nøkler", + "featureOAuthApiKeysDesc": "Administrer legitimasjon på en sikker måte i ett hvelv.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncDesc": "Synkroniser konfigurasjonene dine på tvers av enheter umiddelbart.", + "featureCliSupportTitle": "CLI-støtte", + "featureCliSupportDesc": "Fungerer med Claude Code, Codex, Cline, Cursor og mer.", + "featureDashboardTitle": "Dashbord", + "featureDashboardDesc": "Visuelt dashbord for trafikkanalyse i sanntid.", + "howItWorks": "Hvordan OmniRoute fungerer", + "howItWorksDescription": "Data flyter sømløst fra applikasjonen din gjennom vårt intelligente rutinglag til den beste leverandøren for jobben.", + "howItWorksStep1Title": "1. CLI og SDK-er", + "howItWorksStep1Description": "Forespørslene dine starter fra favorittverktøyene dine eller vår enhetlige SDK. Bare endre basis-URLen.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Motoren vår analyserer forespørselen, sjekker leverandørens helse og ruter for lavest ventetid eller kostnad.", + "howItWorksStep3Title": "3. AI-leverandører", + "howItWorksStep3Description": "Forespørselen oppfylles av OpenAI, Anthropic, Gemini eller andre umiddelbart.", + "getStartedIn30Seconds": "Kom i gang på 30 sekunder", + "getStartedDescription": "Installer OmniRoute, konfigurer leverandørene dine via nettdashbordet, og begynn å rute AI-forespørsler.", + "installOmniRoute": "Installer OmniRoute", + "installStepDescription": "Kjør npx-kommandoen for å starte serveren umiddelbart", + "openDashboard": "Åpne Dashboard", + "openDashboardStepDescription": "Konfigurer leverandører og API-nøkler via webgrensesnitt", + "routeRequests": "Ruteforespørsler", + "routeRequestsStepDescription": "Pek CLI-verktøyene dine til {endpoint}", + "terminal": "terminal", + "copy": "Kopier", + "copied": "✓ Kopiert", + "startingOmniRoute": "Starter OmniRoute...", + "serverRunningOnLabel": "Server kjører på", + "dashboardLabel": "Dashbord", + "readyToRoute": "Klar til rute! ✓", + "configureProvidersNote": "📝 Konfigurer leverandører i dashbordet eller bruk miljøvariabler", + "dataLocation": "Dataplassering:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Produkt", + "dashboardLink": "Dashbord", + "changelog": "Endringslogg", + "resources": "Ressurser", + "documentation": "Dokumentasjon", + "npm": "NPM", + "legal": "Lovlig", + "mitLicense": "MIT-lisens", + "footerTagline": "Det enhetlige endepunktet for AI-generering. Koble til, rute og administrer AI-leverandørene dine på en enkel måte.", + "copyright": "© {year} OmniRoute. Alle rettigheter forbeholdt.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Markør", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropisk", + "flowProviderGemini": "Tvillingene", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "Interaktivt diagram synlig på skrivebordet", + "ctaTitle": "Klar til å forenkle AI-infrastrukturen din?", + "ctaDescription": "Bli med utviklere som strømlinjeformer AI-integrasjonene sine med OmniRoute. Åpen kildekode og gratis å starte.", + "startFree": "Start gratis", + "readDocumentation": "Les dokumentasjon" + }, + "docs": { + "title": "Dokumentasjon", + "quickStart": "Rask start", + "features": "Funksjoner", + "supportedProviders": "Støttede leverandører", + "supportedProvidersToc": "Leverandører", + "commonUseCases": "Vanlige brukstilfeller", + "clientCompatibility": "Klientkompatibilitet", + "apiReference": "API-referanse", + "method": "Metode", + "path": "Sti", + "notes": "Notater", + "modelPrefixes": "Modellprefikser", + "prefix": "Prefiks", + "troubleshooting": "Feilsøking", + "supportsChat": "Støtter både chat- og svarendepunkter.", + "oauthAutoRefresh": "OAuth-tilkobling med automatisk tokenoppdatering.", + "fullStreaming": "Full streamingstøtte for alle modeller.", + "docsLabel": "Dokumenter", + "docsHeroDescription": "AI-gateway for LLM-er med flere leverandører. Ett endepunkt for OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor og mer enn 20 leverandører.", + "openDashboard": "Åpne Dashboard", + "endpointPage": "Sluttpunktside", + "github": "GitHub", + "reportIssue": "Rapporter problem", + "onThisPage": "På denne siden", + "documentationVersion": "Dokumentasjon - v{version}", + "quickStartStep1Title": "1. Installer og kjør", + "quickStartStep1Prefix": "Løp", + "quickStartStep1Middle": "eller klone fra GitHub og kjøre", + "quickStartStep2Title": "2. Opprett API-nøkkel", + "quickStartStep2Text": "Gå til endepunkt -> Registrerte nøkler. Generer én nøkkel per miljø.", + "quickStartStep3Title": "3. Koble til leverandører", + "quickStartStep3Text": "Legg til leverandørkontoer via OAuth-pålogging, API-nøkkel eller gratis-lags automatisk tilkobling.", + "quickStartStep4Title": "4. Angi klientbase-URL", + "quickStartStep4Prefix": "Pek IDE- eller API-klienten din til", + "quickStartStep4Suffix": "Bruk for eksempel leverandørprefiks", + "featureRoutingTitle": "Ruting for flere leverandører", + "featureRoutingText": "Rut forespørsler til 30+ AI-leverandører gjennom ett enkelt OpenAI-kompatibelt endepunkt. Støtter chat, svar, lyd og bilde-APIer.", + "featureCombosTitle": "Kombinasjoner og balansering", + "featureCombosText": "Lag modellkombinasjoner med reservekjeder og balanseringsstrategier: round-robin, prioritet, tilfeldig, minst brukt og kostnadsoptimalisert.", + "featureUsageTitle": "Bruk og kostnadssporing", + "featureUsageText": "Sanntids-tokentelling, kostnadsberegning per leverandør/modell og detaljert bruksoppdeling etter API-nøkkel og konto.", + "featureAnalyticsTitle": "Analytics Dashboard", + "featureAnalyticsText": "Visuell analyse med diagrammer for forespørsler, tokens, feil, ventetid, kostnader og modellpopularitet over tid.", + "featureHealthTitle": "Helseovervåking", + "featureHealthText": "Live helsesjekker, leverandørstatus, strømbrytertilstander og automatisk hastighetsgrensedeteksjon med eksponentiell tilbakekobling.", + "featureCliTitle": "CLI-verktøy", + "featureCliText": "Administrer IDE-konfigurasjoner, eksporter/importer sikkerhetskopier, oppdag kodex-profiler og konfigurer innstillinger fra dashbordet.", + "featureSecurityTitle": "Sikkerhet og retningslinjer", + "featureSecurityText": "API-nøkkelautentisering, IP-filtrering, prompt-injeksjonsvakt, domenepolicyer, øktadministrasjon og revisjonslogging.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncText": "Synkroniser konfigurasjonen din med Cloudflare Workers for ekstern tilgang med kryptert legitimasjon og automatisk failover.", + "providersAcrossConnectionTypes": "{count}-leverandører på tvers av tre tilkoblingstyper.", + "manageProviders": "Administrer leverandører", + "providersCount": "{count} leverandører", + "providerTypeFree": "Gratis lag", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API-nøkkel", + "useCaseSingleEndpointTitle": "Enkelt endepunkt for mange leverandører", + "useCaseSingleEndpointText": "Pek klienter til én basis-URL og rute etter modellprefiks (for eksempel: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback og modellbytte med kombinasjoner", + "useCaseFallbackText": "Lag kombinasjonsmodeller i Dashboard og hold klientkonfigurasjonen stabil mens leverandørene roterer internt.", + "useCaseUsageVisibilityTitle": "Bruk, kostnader og feilsøkingssynlighet", + "useCaseUsageVisibilityText": "Spor tokens og kostnader etter leverandør, konto og API-nøkkel i fanene Bruk og Analytics.", + "clientCherryStudioTitle": "Cherry Studio", + "baseUrlLabel": "Base URL", + "chatEndpointLabel": "Chat-endepunkt", + "modelRecommendationLabel": "Modellanbefaling: eksplisitt prefiks", + "clientCodexTitle": "Codex / GitHub Copilot-modeller", + "clientCodexBullet1": "Bruk modell-ID-er med", + "clientCodexBullet2": "Codex-familiemodeller rutes automatisk til", + "clientCodexBullet3": "Ikke-Codex-modeller fortsetter", + "clientCursorTitle": "Markør IDE", + "clientCursorBullet1": "Bruk", + "clientCursorBullet1Suffix": "prefiks for Cursor-modeller.", + "clientCursorBullet2": "OAuth-tilkobling - logg på fra siden Leverandører.", + "clientClaudeTitle": "Claude Code / Antigravity", + "clientClaudeBullet1Prefix": "Bruk", + "clientClaudeBullet1Middle": "(Claude) eller", + "clientClaudeBullet1Suffix": "(Antigravity) prefiks.", + "endpointChatNote": "OpenAI-kompatibelt chat-endepunkt (standard).", + "endpointResponsesNote": "Responses API-endepunkt (Codex, o-serien).", + "endpointModelsNote": "Modellkatalog for alle tilkoblede leverandører.", + "endpointAudioNote": "Lydtranskripsjon (Deepgram, AssemblyAI).", + "endpointImagesNote": "Bildegenerering (NanoBanana).", + "endpointRewriteChatNote": "Omskrivehjelper for klienter uten /v1.", + "endpointRewriteResponsesNote": "Omskriv hjelper for svar uten /v1.", + "endpointRewriteModelsNote": "Omskrivehjelper for modelloppdagelse uten /v1.", + "modelPrefixesDescriptionStart": "Bruk leverandørprefikset før modellnavnet for å rute til en bestemt leverandør. Eksempel:", + "modelPrefixesDescriptionEnd": "ruter til GitHub Copilot.", + "provider": "Leverandør", + "type": "Type", + "troubleshootingModelRouting": "Hvis klienten mislykkes med modellruting, bruk eksplisitt leverandør/modell (for eksempel: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Hvis du får tvetydige modellfeil, velger du et leverandørprefiks i stedet for en bare modell-ID.", + "troubleshootingCodexFamily": "For GitHub Codex-familiemodeller, behold modellen som gh/; ruteren velger /responser automatisk.", + "troubleshootingTestConnection": "Bruk Dashboard > Leverandører > Test tilkobling før du tester fra IDE-er eller eksterne klienter.", + "troubleshootingCircuitBreaker": "Hvis en leverandør viser at strømbryteren er åpen, vent på nedkjøling eller sjekk helsesiden for detaljer.", + "troubleshootingOAuth": "For OAuth-leverandører, autentiser på nytt hvis tokens utløper. Sjekk leverandørkortets statusindikator." + }, + "legal": { + "privacyPolicy": "Personvernerklæring", + "termsOfService": "Vilkår for bruk", + "providerConfigurations": "Leverandørkonfigurasjoner", + "apiKeys": "API-nøkler", + "usageLogs": "Brukslogger", + "applicationSettings": "Applikasjonsinnstillinger", + "viewExportAnalytics": "Se og eksporter bruksanalyse", + "clearHistory": "Tøm brukshistorikken når som helst", + "configureRetention": "Konfigurer retningslinjer for loggoppbevaring", + "backupRestore": "Sikkerhetskopier og gjenopprett databasen", + "privacyMetadataTitle": "Personvernerklæring | OmniRoute", + "privacyMetadataDescription": "Personvernregler for OmniRoute AI API-proxy-ruteren.", + "termsMetadataTitle": "Vilkår for bruk | OmniRoute", + "termsMetadataDescription": "Vilkår for bruk for OmniRoute AI API-proxy-ruteren.", + "backToHome": "Tilbake til hjemmet", + "lastUpdated": "Sist oppdatert: {date}", + "policyLastUpdatedDate": "13. februar 2026", + "listSeparator": "-", + "questionsVisit": "Spørsmål? Besøk vår", + "githubRepository": "GitHub-depot", + "privacySection1Title": "1. Lokal-først arkitektur", + "privacySection1Text": "OmniRoute er designet som en lokal først-applikasjon. All databehandling og lagring skjer utelukkende på maskinen din. Det er ingen sentralisert server som samler inn informasjonen din.", + "privacySection2Title": "2. Data vi lagrer", + "privacyDataStoredIn": "Følgende data lagres lokalt i", + "privacyDataProviderConfigurationsDesc": "tilkoblings-URLer, leverandørtyper og prioritetsinnstillinger", + "privacyDataApiKeysDesc": "kryptert og lagret lokalt for autentisering med AI-leverandører", + "privacyDataUsageLogsDesc": "antall forespørsler, tokenbruk, modellnavn, tidsstempler og responstider", + "privacyDataApplicationSettingsDesc": "temapreferanser, rutingstrategi og kombinasjonskonfigurasjoner", + "privacySection3Title": "3. Ingen telemetri", + "privacySection3Text": "OmniRoute samler ikke inn telemetri, analyser eller krasjrapporter. Ingen data sendes til oss eller noen tredjepart. Dine bruksmønstre, API-kall og konfigurasjoner forblir helt private.", + "privacySection4Title": "4. Tredjeparts AI-leverandører", + "privacySection4Text": "Når du foretar API-anrop gjennom OmniRoute, blir forespørslene dine videresendt til AI-leverandørene du har konfigurert (for eksempel: OpenAI, Anthropic, Google). Disse leverandørene har sine egne retningslinjer for personvern som styrer hvordan de håndterer dataene dine. Vennligst se gjennom:", + "privacyOpenAiPolicy": "OpenAI personvernerklæring", + "privacyAnthropicPolicy": "Antropiske retningslinjer for personvern", + "privacyGooglePolicy": "Googles personvernregler", + "privacySection5Title": "5. Cloud Sync (valgfritt)", + "privacySection5Text": "Hvis du aktiverer den valgfrie skysynkroniseringsfunksjonen, kan leverandørkonfigurasjoner og API-nøkler overføres til et konfigurert skyendepunkt. Denne funksjonen er deaktivert som standard og krever eksplisitt opt-in.", + "privacySection6Title": "6. Logging", + "privacyLoggingIntro": "Forespørselslogger kan konfigureres gjennom dashbordinnstillingene. Du kan:", + "privacySection7Title": "7. Dine rettigheter", + "privacySection7TextStart": "Siden all data er lagret lokalt, har du full kontroll. Du kan slette dataene dine når som helst ved å fjerne", + "privacySection7TextEnd": "katalogen eller bruke funksjonene for sikkerhetskopiering og gjenoppretting av databasen i dashbordet.", + "termsSection1Title": "1. Oversikt", + "termsSection1Text": "OmniRoute er en lokal-første AI API-proxy-ruter som fungerer utelukkende på maskinen din. Den ruter forespørsler til flere AI-leverandører med lastbalansering, failover og brukssporing.", + "termsSection2Title": "2. Brukeransvar", + "termsResponsibilityApiKeys": "Du er alene ansvarlig for å administrere dine egne API-nøkler og legitimasjon for tredjeparts AI-leverandører (OpenAI, Anthropic, Google, etc.).", + "termsResponsibilityCompliance": "Du må overholde vilkårene for bruk for hver AI-leverandør hvis API du får tilgang til gjennom OmniRoute.", + "termsResponsibilitySecurity": "Du er ansvarlig for sikkerheten til din lokale OmniRoute-installasjon, inkludert å angi et passord og begrense nettverkstilgang.", + "termsSection3Title": "3. Hvordan det fungerer", + "termsSection3Text": "OmniRoute fungerer som en mellomfullmektig. API-anrop som sendes til OmniRoute, oversettes og videresendes til dine konfigurerte AI-leverandører. OmniRoute endrer ikke innholdet i dine forespørsler eller svar utover den nødvendige protokolloversettelsen.", + "termsSection4Title": "4. Datahåndtering", + "termsDataStoredLocally": "Alle data lagres lokalt på din maskin i en SQLite-database.", + "termsNoTransmission": "OmniRoute overfører ingen data til eksterne servere med mindre du eksplisitt aktiverer skysynkroniseringsfunksjoner.", + "termsDataLocationText": "Brukslogger, API-nøkler og konfigurasjon lagres i", + "termsSection5Title": "5. Ansvarsfraskrivelse", + "termsSection5Text": "OmniRoute leveres \"som den er\" uten garanti av noe slag. Vi er ikke ansvarlige for kostnader som påløper gjennom API-bruk, tjenesteavbrudd eller tap av data. Oppretthold alltid sikkerhetskopier av konfigurasjonen din.", + "termsSection6Title": "6. Åpen kildekode", + "termsSection6Text": "OmniRoute er åpen kildekode-programvare. Du står fritt til å inspisere, modifisere og distribuere den under lisensvilkårene." + } +} diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json new file mode 100644 index 0000000000..27c66a7a2e --- /dev/null +++ b/src/i18n/messages/phi.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "I-save", + "cancel": "Kanselahin", + "delete": "Tanggalin", + "loading": "Naglo-load...", + "error": "May naganap na error", + "success": "Tagumpay", + "confirm": "Sigurado ka ba?", + "refresh": "I-refresh", + "close": "Isara", + "add": "Idagdag", + "edit": "I-edit", + "search": "Maghanap", + "back": "Bumalik", + "next": "Susunod", + "submit": "Isumite", + "reset": "I-reset", + "copy": "Kopyahin", + "copied": "Kinopya!", + "enabled": "Pinagana", + "disabled": "Hindi pinagana", + "active": "Aktibo", + "inactive": "Hindi aktibo", + "noData": "Walang available na data", + "configure": "I-configure", + "manage": "Pamahalaan", + "name": "Pangalan", + "actions": "Mga aksyon", + "status": "Katayuan", + "type": "Uri", + "model": "Modelo", + "models": "mga modelo", + "provider": "Provider", + "account": "Account", + "time": "Oras", + "details": "Mga Detalye", + "created": "Nilikha", + "lastUsed": "Huling Ginamit", + "loadMore": "Mag-load ng Higit Pa", + "noResults": "Walang nakitang resulta", + "reloadPage": "I-reload ang Pahina", + "connected": "Nakakonekta", + "disconnected": "Nadiskonekta", + "notConfigured": "Hindi naka-configure", + "testConnection": "Subukan ang Koneksyon", + "enable": "Paganahin", + "disable": "Huwag paganahin", + "columns": "Mga hanay", + "newest": "Pinakabago", + "oldest": "Pinakamatanda", + "all": "Lahat", + "none": "wala", + "yes": "Oo", + "no": "Hindi", + "warning": "Babala", + "note": "Tandaan", + "free": "Libre", + "skipToContent": "Lumaktaw sa nilalaman" + }, + "sidebar": { + "home": "Bahay", + "dashboard": "Dashboard", + "providers": "Mga provider", + "combos": "Mga combo", + "usage": "Paggamit", + "analytics": "Analytics", + "costs": "Mga gastos", + "health": "Kalusugan", + "limits": "Mga Limitasyon at Quota", + "cliTools": "CLI Tools", + "settings": "Mga setting", + "translator": "Tagasalin", + "docs": "Docs", + "issues": "Mga isyu", + "endpoint": "Endpoint", + "apiManager": "Tagapamahala ng API", + "logs": "Mga log", + "auditLog": "Log ng Audit", + "shutdown": "Pagsara", + "restart": "I-restart", + "shutdownConfirm": "I-shut down ang OmniRoute?", + "restartConfirm": "I-restart ang OmniRoute?", + "version": "v{version}", + "debug": "I-debug", + "system": "Sistema", + "help": "Tulong", + "serverDisconnected": "Nadiskonekta ang Server", + "serverDisconnectedMsg": "Ang proxy server ay itinigil o nagre-restart.", + "expandSidebar": "Palawakin ang sidebar", + "collapseSidebar": "I-collapse ang sidebar" + }, + "header": { + "logout": "Mag-logout", + "language": "Wika", + "providers": "Mga provider", + "providerDescription": "Pamahalaan ang iyong mga koneksyon sa AI provider", + "combos": "Mga combo", + "comboDescription": "Mga kumbinasyon ng modelo na may fallback", + "usage": "Paggamit at Analytics", + "usageDescription": "Subaybayan ang iyong paggamit ng API, pagkonsumo ng token, at mga log ng kahilingan", + "analytics": "Analytics", + "analyticsDescription": "Mga chart, trend, at insight sa pagsusuri", + "cliTools": "CLI Tools", + "cliToolsDescription": "I-configure ang mga tool sa CLI", + "home": "Bahay", + "homeDescription": "Maligayang pagdating sa OmniRoute", + "endpoint": "Endpoint", + "endpointDescription": "Configuration ng endpoint ng API", + "settings": "Mga setting", + "settingsDescription": "Pamahalaan ang iyong mga kagustuhan", + "openaiCompatible": "OpenAI Compatible", + "anthropicCompatible": "Anthropic Compatible" + }, + "home": { + "quickStart": "Mabilis na Pagsisimula", + "quickStartDesc": "Bumangon at tumakbo sa 4 na hakbang. Ikonekta ang mga provider, mga modelo ng ruta, subaybayan ang lahat.", + "fullDocs": "Buong Docs", + "step1Title": "1. Lumikha ng API key", + "step1Desc": "Pumunta sa Endpoint -> Mga Rehistradong Key. Bumuo ng isang susi sa bawat kapaligiran.", + "step2Title": "2. Ikonekta ang mga provider", + "step2Desc": "Magdagdag ng mga account sa Providers. Sinusuportahan ang OAuth, API Key, at mga libreng tier.", + "step3Title": "3. Ituro ang iyong kliyente", + "step3Desc": "Itakda ang base URL sa {url} sa iyong IDE o API client.", + "step4Title": "4. Subaybayan at i-optimize", + "step4Desc": "Subaybayan ang mga token, gastos at mga error sa Mga Log ng Kahilingan at Analytics.", + "providersOverview": "Pangkalahatang-ideya ng Mga Provider", + "configuredOf": "{configured} na-configure ng {total} available na provider", + "noModelsAvailable": "Walang available na mga modelo para sa provider na ito.", + "configureFirst": "Mag-configure muna ng koneksyon sa {providers}", + "configureProvider": "I-configure ang Provider", + "modelAvailable": "Available ang {count} modelo", + "modelsAvailable": "Available ang {count} na mga modelo", + "connectionsActive": "Aktibo ang {count} koneksyon", + "connectionsActivePlural": "Aktibo ang {count} na mga koneksyon", + "copyModelName": "Kopyahin ang pangalan ng modelo", + "documentation": "Dokumentasyon", + "healthMonitor": "Monitor ng Kalusugan", + "reportIssue": "Iulat ang isyu", + "activeError": "{active} aktibo · {errors} error", + "oauthLabel": "OAuth", + "apiKeyLabel": "API Key", + "requestsShort": "{count} mga kahilingan", + "providerModelsTitle": "{provider} - Mga Modelo", + "copiedModel": "Nakopya: {model}", + "aliasLabel": "alyas" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Subaybayan ang iyong mga pattern ng paggamit ng API, pagkonsumo ng token, gastos, at mga trend ng aktibidad sa lahat ng provider at modelo.", + "evalsDescription": "Magpatakbo ng mga evaluation suite para subukan at patunayan ang iyong mga LLM endpoint. Ihambing ang kalidad ng modelo, tuklasin ang mga regression, at benchmark na latency.", + "overview": "Pangkalahatang-ideya", + "evals": "Evals" + }, + "apiManager": { + "title": "Mga API Key", + "createKey": "Lumikha ng API Key", + "key": "Susi", + "revokeKey": "Bawiin ang Susi", + "revokeConfirm": "Sigurado ka bang gusto mong bawiin ang API key na ito?", + "noKeys": "Wala pang API key", + "noKeysDesc": "Gawin ang iyong unang API key upang patotohanan ang mga kahilingan sa iyong endpoint", + "keyLabel": "Key Label", + "permissions": "Mga Pahintulot", + "expiresAt": "Mag-e-expire", + "never": "Hindi kailanman", + "revoke": "Bawiin", + "showKey": "Ipakita ang Susi", + "hideKey": "Itago ang Susi", + "copyKey": "Kopyahin ang API Key", + "allModels": "Lahat ng mga modelo", + "selectedModels": "Mga Napiling Modelo", + "readOnly": "Read Only", + "fullAccess": "Buong Access", + "keyManagement": "Pamamahala ng Key ng API", + "keyManagementDesc": "Gumawa at mamahala ng mga API key para sa pag-authenticate ng mga kahilingan sa iyong endpoint", + "totalKeys": "Kabuuang Mga Susi", + "restricted": "Pinaghihigpitan", + "totalRequests": "Kabuuang Mga Kahilingan", + "modelsAvailable": "Available ang mga Modelo", + "registeredKeys": "Mga Rehistradong Susi", + "keysRegistered": "{count} na mga susi ang nakarehistro", + "keyRegistered": "{count} key na nakarehistro", + "keysSecurityNote": "Ang bawat key ay naghihiwalay sa pagsubaybay sa paggamit at maaaring bawiin nang nakapag-iisa. Nakamaskara ang mga susi pagkatapos gawin para sa seguridad.", + "createFirstKey": "Lumikha ng Iyong Unang Susi", + "name": "Pangalan", + "usage": "Paggamit", + "created": "Nilikha", + "actions": "Mga aksyon", + "reqs": "reqs", + "neverUsed": "Hindi kailanman ginamit", + "deleteConfirm": "Tanggalin ang API key na ito?", + "usageTips": "Mga Tip sa Paggamit", + "tipAuth": "Gumamit ng mga API key sa Authorization header bilang Bearer YOUR_KEY", + "tipSecure": "Isang beses lang ipinapakita ang mga susi sa panahon ng paggawa — secure na iimbak ang mga ito", + "tipSeparate": "Gumawa ng hiwalay na mga key para sa iba't ibang kliyente o kapaligiran", + "tipRestrict": "Limitahan ang mga susi sa mga partikular na modelo para sa mas mahusay na seguridad at kontrol sa gastos", + "keyName": "Pangalan ng Susing", + "keyNamePlaceholder": "hal., Production Key, Development Key", + "keyNameDesc": "Pumili ng mapaglarawang pangalan para matukoy ang layunin ng susi na ito", + "keyCreated": "Nagawa ang API Key", + "keyCreatedSuccess": "Matagumpay na nagawa ang susi!", + "keyCreatedNote": "Kopyahin at iimbak ang key na ito ngayon — hindi na ito muling ipapakita.", + "done": "Tapos na", + "savePermissions": "I-save ang Mga Pahintulot", + "allowAll": "Payagan ang Lahat", + "restrict": "Paghigpitan", + "allowAllInfo": "Maa-access ng key na ito ang lahat ng available na modelo.", + "restrictInfo": "Maa-access ng key na ito ang {selected} ng {total} na mga modelo.", + "selected": "{count} ang napili", + "all": "Lahat", + "clear": "Maaliwalas", + "searchModels": "Maghanap ng mga modelo ayon sa pangalan o provider...", + "noModelsFound": "Walang nakitang mga modelo", + "keyNameRequired": "Kinakailangan ang pangalan ng susi", + "keyNameTooLong": "Dapat na {max} character o mas kaunti ang pangalan ng key", + "keyNameInvalid": "Ang pangalan ng key ay maaari lamang maglaman ng mga titik, numero, puwang, gitling, at salungguhit", + "invalidKeyName": "Di-wastong pangalan ng key", + "failedCreateKey": "Nabigong gumawa ng susi", + "failedCreateKeyRetry": "Nabigong gumawa ng susi. Pakisubukang muli.", + "invalidKeyId": "Di-wastong key ID", + "failedDeleteKey": "Nabigong tanggalin ang susi", + "failedDeleteKeyRetry": "Nabigong tanggalin ang susi. Pakisubukang muli.", + "invalidModelsSelection": "Di-wastong pagpili ng mga modelo", + "cannotSelectMoreThanModels": "Hindi maaaring pumili ng higit sa {max} na mga modelo", + "failedUpdatePermissions": "Nabigong i-update ang mga pahintulot", + "failedUpdatePermissionsRetry": "Nabigong i-update ang mga pahintulot. Pakisubukang muli.", + "unknownProvider": "hindi kilala", + "copyMaskedKey": "Kopyahin ang nakamaskara na susi", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Huli: {date}", + "editPermissions": "I-edit ang mga pahintulot", + "deleteKey": "Tanggalin ang susi", + "model": "{count} modelo", + "models": "{count} na mga modelo", + "permissionsTitle": "Mga Pahintulot: {name}", + "allowAllDesc": "Maa-access ng key na ito ang lahat ng available na modelo.", + "restrictDesc": "Maa-access ng key na ito ang {selectedCount} ng {totalModels} na mga modelo.", + "selectedCount": "{count} ang napili" + }, + "auditLog": { + "title": "Log ng Audit", + "searchPlaceholder": "Mga aksyon sa paghahanap...", + "action": "Aksyon", + "actor": "artista", + "target": "Target", + "ipAddress": "IP Address", + "timestamp": "Timestamp", + "noEntries": "Walang nakitang audit entry", + "filterByAction": "I-filter ayon sa pagkilos...", + "filterByActor": "Salain ayon sa aktor...", + "filterEntriesAria": "I-filter ang mga entry sa log ng pag-audit", + "filterByActionTypeAria": "I-filter ayon sa uri ng pagkilos", + "filterByActorAria": "Salain ayon sa aktor", + "refreshAuditLogAria": "I-refresh ang audit log", + "tableAria": "Mga entry sa log ng audit", + "failedFetchAuditLog": "Nabigong makuha ang audit log", + "notAvailable": "—", + "description": "Mga aksyong pang-administratibo at mga kaganapang panseguridad", + "showing": "Ipinapakita ang {count} entry (offset {offset})", + "previous": "Nakaraang" + }, + "cliTools": { + "title": "CLI Tools", + "noActiveProviders": "Walang aktibong provider", + "noActiveProvidersDesc": "Pakidagdag at ikonekta muna ang mga provider upang i-configure ang mga tool ng CLI.", + "mapModels": "Mga Modelo ng Mapa", + "testConnection": "Subukan ang Koneksyon", + "connectionStatus": "Katayuan ng Koneksyon", + "configureEndpoint": "I-configure ang Endpoint", + "instructions": "Mga tagubilin", + "modelMapping": "Pagmamapa ng Modelo", + "baseUrl": "Base URL", + "apiKey": "API Key", + "configured": "Na-configure", + "notConfigured": "Hindi naka-configure", + "notInstalled": "Hindi naka-install", + "custom": "Custom", + "unknown": "Hindi alam", + "lastSavedAt": "Huling na-save: {date}", + "never": "Hindi kailanman", + "justNow": "ngayon lang", + "minutesAgoShort": "{count}m ang nakalipas", + "hoursAgoShort": "{count}h ang nakalipas", + "daysAgoShort": "{count}d ang nakalipas", + "monthsAgoShort": "{count}mo ang nakalipas", + "yearsAgoShort": "{count}y ang nakalipas", + "runtimeCheckFailed": "Nabigo ang pagsusuri sa runtime", + "yourApiKeyPlaceholder": "iyong-api-key", + "modelPlaceholder": "provider/model-id", + "configurationSaved": "Matagumpay na na-save ang configuration.", + "failedToSave": "Nabigong i-save ang configuration.", + "noApiKeysCreateOne": "Walang mga API key - Gumawa ng isa sa pahina ng Keys", + "defaultOmnirouteKey": "sk_omniroute (default)", + "selectModel": "Piliin ang Modelo", + "selectModelForAlias": "Pumili ng modelo para sa {alias}", + "selectModelForTool": "Pumili ng Modelo para sa {tool}", + "select": "Pumili", + "clear": "Maaliwalas", + "comingSoon": "Malapit na", + "checkingRuntime": "Sinusuri ang katayuan ng runtime...", + "guideOnlyIntegration": "Gabay lamang na pagsasama (walang lokal na runtime na kinakailangan)", + "cliRuntimeDetected": "Nakita at handa na ang runtime ng CLI", + "cliFoundNotRunnable": "Natagpuan ang CLI ngunit hindi mapapatakbo{reason}", + "cliRuntimeNotDetected": "Hindi nakita ang runtime ng CLI", + "binary": "Binary", + "configPath": "I-configure ang landas", + "configPathShort": "Config", + "failedCheckRuntimeStatus": "Nabigong suriin ang katayuan ng runtime.", + "copy": "Kopyahin", + "copied": "Kinopya", + "copyConfig": "Kopyahin ang Config", + "saveConfig": "I-save ang Config", + "selectionSaved": "Na-save ang pinili", + "guide": "Patnubay", + "detected": "Natukoy", + "notReady": "Hindi handa", + "active": "Aktibo", + "inactive": "Hindi aktibo", + "startMitm": "Simulan ang MITM", + "stopMitm": "Itigil ang MITM", + "mitmStarted": "Matagumpay na nagsimula ang MITM!", + "mitmStopped": "Matagumpay na huminto ang MITM!", + "failedStart": "Nabigong simulan ang MITM", + "failedStop": "Nabigong ihinto ang MITM", + "saveMappings": "I-save ang Mappings", + "mappingsSaved": "Na-save ang mga pagmamapa!", + "failedSaveMappings": "Nabigong i-save ang mga pagmamapa", + "howItWorks": "Paano ito gumagana:", + "antigravityHowWorksDesc": "Nagpapadala ang antigravity ng mga kahilingan sa endpoint ng Google. Ang MITM ay humarang at nagre-redirect sa kanila sa OmniRoute.", + "antigravityStep1": "1. Simulan ang MITM upang iruta ang mga kahilingan sa pamamagitan ng OmniRoute.", + "antigravityStep2Prefix": "2. Idagdag", + "antigravityStep2Suffix": "sa iyong host file bilang 127.0.0.1.", + "antigravityStep3": "3. Buksan ang Antigravity at ang mga kahilingan ay i-proxy.", + "sudoPasswordRequiredTitle": "Kinakailangan ang Sudo Password", + "sudoPasswordHint": "Kinakailangan ang password ng administrator upang baguhin ang mga host file at mga setting ng proxy ng system.", + "enterSudoPassword": "Ipasok ang sudo password", + "sudoPasswordRequiredError": "Kinakailangan ang Sudo password.", + "cancel": "Kanselahin", + "confirm": "Kumpirmahin", + "settingsApplied": "Matagumpay na nailapat ang mga setting!", + "failedApplySettings": "Nabigong ilapat ang mga setting", + "settingsReset": "Matagumpay na na-reset ang mga setting!", + "failedResetSettings": "Nabigong i-reset ang mga setting", + "backupRestored": "Na-restore ang backup!", + "failedRestore": "Nabigong i-restore", + "checkingCli": "Sinusuri ang {tool} CLI...", + "cliNotRunnable": "{tool} Naka-install ang CLI ngunit hindi runnable", + "cliNotInstalled": "{tool} Hindi naka-install ang CLI", + "cliNotDetected": "{tool} Hindi natukoy ang CLI", + "cliDetectedReady": "{tool} Nakita at handa na ang CLI", + "cliFoundFailedHealthcheck": "{tool} Natagpuan ang CLI ngunit nabigo ang runtime healthcheck{reason}.", + "installCliPrompt": "Paki-install ang {tool} CLI para magamit ang feature na ito.", + "installCodexPrompt": "Mangyaring i-install ang Codex CLI upang magamit ang tampok na auto-apply.", + "hide": "Magtago", + "howToInstall": "Paano Mag-install", + "installationGuide": "Gabay sa Pag-install", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Pagkatapos ng pag-install, tumakbo", + "toVerify": "para ma-verify.", + "current": "Kasalukuyan", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "I-reset sa default", + "providerModelPlaceholder": "provider/model-id", + "apply": "Mag-apply", + "reset": "I-reset", + "manualConfig": "Manu-manong Config", + "backups": "Mga backup", + "configBackups": "I-configure ang Mga Backup", + "noBackupsYet": "Wala pang backup. Awtomatikong ginagawa ang mga backup bago ang bawat Mag-apply o I-reset.", + "restore": "Ibalik", + "backupRestoredReloading": "Na-restore ang backup! Nire-reload ang status...", + "failedRestoreBackup": "Nabigong ibalik ang backup", + "applied": "Inilapat!", + "failed": "Nabigo", + "resetDone": "I-reset!", + "omnirouteConfiguredOpenAiCompatible": "Ang OmniRoute ay na-configure bilang OpenAI-compatible na provider", + "provider": "Provider", + "model": "Modelo", + "providers": "Mga provider", + "auth": "Awth", + "noApiKeysAvailable": "Walang available na API key", + "usingDefaultOmniroute": "Gamit ang default: sk_omniroute", + "updateConfig": "I-update ang Config", + "applyConfig": "Ilapat ang Config", + "noBackupsAvailable": "Walang available na backup.", + "profileSaved": "Na-save ang profile na \"{name}\"!", + "failedSaveProfile": "Nabigong i-save ang profile", + "profileActivated": "Na-activate ang profile!", + "failedActivateProfile": "Nabigong i-activate ang profile", + "profiles": "Mga profile", + "savedProfiles": "Mga Naka-save na Profile", + "noProfilesYet": "Wala pang naka-save na profile. I-save ang kasalukuyang config bilang isang profile sa ibaba.", + "activate": "I-activate", + "deleteProfile": "Tanggalin ang profile", + "profileNamePlaceholder": "Pangalan ng profile (hal. Personal na Account)", + "saveCurrent": "I-save ang Kasalukuyan", + "codexAuthNotePrefix": "Ginagamit ang Codex", + "codexAuthNoteMiddle": "kasama", + "codexAuthNoteSuffix": "I-click ang \"Ilapat\" upang awtomatikong i-configure.", + "claudeManualConfiguration": "Claude CLI - Manu-manong Configuration", + "codexManualConfiguration": "Codex CLI - Manu-manong Configuration", + "droidManualConfiguration": "Factory Droid - Manu-manong Configuration", + "openClawManualConfiguration": "Open Claw - Manu-manong Configuration", + "clineManualConfiguration": "Manu-manong Configuration ng Cline", + "kiloManualConfiguration": "Manu-manong Configuration ng Kilo Code", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE na may MITM", + "claude": "Anthropic Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Buksan ang Claw AI Assistant", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Cursor AI Code Editor", + "continue": "Ipagpatuloy ang AI Assistant" + }, + "guides": { + "cursor": { + "notes": { + "0": "Nangangailangan ng Cursor Pro account upang magamit ang feature na ito.", + "1": "Humihiling ang mga ruta ng cursor sa pamamagitan ng sarili nitong server, kaya hindi sinusuportahan ang lokal na endpoint. Paki-enable ang Cloud Endpoint sa Mga Setting." + }, + "steps": { + "1": { + "title": "Buksan ang Mga Setting", + "desc": "Pumunta sa Mga Setting -> Mga Modelo" + }, + "2": { + "title": "Paganahin ang OpenAI API", + "desc": "Paganahin ang opsyong \"OpenAI API key\"." + }, + "3": { + "title": "Base URL" + }, + "4": { + "title": "API Key" + }, + "5": { + "title": "Magdagdag ng Custom na Modelo", + "desc": "I-click ang \"Tingnan ang Lahat ng Modelo\" -> \"Magdagdag ng Custom na Modelo\"" + }, + "6": { + "title": "Piliin ang Modelo" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Buksan ang Config", + "desc": "Buksan ang Continue configuration file" + }, + "2": { + "title": "API Key" + }, + "3": { + "title": "Piliin ang Modelo" + }, + "4": { + "title": "Magdagdag ng Model Config", + "desc": "Idagdag ang sumusunod na configuration sa iyong array ng mga modelo:" + } + } + } + } + }, + "combos": { + "title": "Mga combo", + "description": "Gumawa ng mga combo ng modelo na may weighted routing at fallback support", + "createCombo": "Lumikha ng Combo", + "editCombo": "I-edit ang Combo", + "deleteCombo": "Tanggalin ang Combo", + "noModels": "Walang mga modelo", + "noModelsYet": "Wala pang naidagdag na mga modelo", + "addModel": "Magdagdag ng Modelo", + "addModelToCombo": "Magdagdag ng Modelo sa Combo", + "routingStrategy": "Diskarte sa Pagruruta", + "maxRetries": "Max na muling sumusubok", + "timeout": "Timeout (ms)", + "healthcheck": "Healthcheck", + "priority": "Priyoridad", + "fallback": "Fallback", + "roundRobin": "Round Robin", + "random": "Random", + "leastLatency": "Pinakamababang Latency", + "comboName": "Pangalan ng Combo", + "comboNamePlaceholder": "my-combo", + "deleteConfirm": "I-delete ang combo na ito?", + "noCombosYet": "Wala pang combos", + "comboCreated": "Matagumpay na nagawa ang combo", + "comboUpdated": "Matagumpay na na-update ang Combo", + "comboDeleted": "Tinanggal ang combo", + "failedCreate": "Nabigong gumawa ng combo", + "failedUpdate": "Nabigong i-update ang combo", + "errorCreating": "Error sa paggawa ng combo", + "errorUpdating": "Error sa pag-update ng combo", + "errorDeleting": "Error sa pagtanggal ng combo", + "testFailed": "Nabigo ang kahilingan sa pagsubok", + "failedToggle": "Nabigong i-toggle ang combo", + "testResults": "Mga Resulta ng Pagsubok — {name}", + "resolvedBy": "Nalutas ni:", + "more": "+{count} higit pa", + "reqs": "reqs", + "success": "tagumpay", + "proxyConfigured": "Na-configure ang proxy", + "copyComboName": "Kopyahin ang pangalan ng combo", + "enableCombo": "Paganahin ang combo", + "disableCombo": "Huwag paganahin ang combo", + "testCombo": "Test combo", + "duplicate": "Duplicate", + "proxyConfig": "Configuration ng proxy", + "nameRequired": "Pangalan ang kailangan", + "nameInvalid": "Tanging mga titik, numero, -, _, / at . pinapayagan", + "nameHint": "Mga titik, numero, -, _, / at . pinapayagan", + "priorityDesc": "Sequential fallback: subukan muna ang modelo 1, pagkatapos ay 2, atbp.", + "weightedDesc": "Namamahagi ng trapiko ayon sa porsyento ng timbang na may fallback", + "roundRobinDesc": "Paikot na pamamahagi: ang bawat kahilingan ay mapupunta sa susunod na modelo sa pag-ikot", + "randomDesc": "Uniform random selection, pagkatapos ay fallback sa natitirang mga modelo", + "leastUsedDesc": "Pinipili ang modelo na may kaunting mga kahilingan, binabalanse ang pagkarga sa paglipas ng panahon", + "costOptimizedDesc": "Mga ruta muna sa pinakamurang modelo batay sa pagpepresyo", + "models": "Mga modelo", + "autoBalance": "Awtomatikong balanse", + "advancedSettings": "Mga Advanced na Setting", + "retryDelay": "Subukan muli ang Pagkaantala (ms)", + "concurrencyPerModel": "Concurrency / Modelo", + "queueTimeout": "Queue Timeout (ms)", + "advancedHint": "Iwanang walang laman upang gumamit ng mga pandaigdigang default. Ino-override ng mga ito ang mga setting ng bawat provider.", + "moveUp": "Umakyat", + "moveDown": "Ilipat pababa", + "removeModel": "Alisin", + "saving": "Nagse-save...", + "weighted": "Natimbang", + "leastUsed": "Hindi gaanong nagamit", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Mga gastos", + "budget": "Badyet", + "totalCost": "Kabuuang Gastos", + "breakdown": "Pagkakasira ng Gastos", + "noData": "Walang data ng gastos", + "byModel": "Sa pamamagitan ng Modelo", + "byProvider": "Sa pamamagitan ng Provider" + }, + "endpoint": { + "title": "Endpoint ng API", + "available": "Magagamit na Mga Endpoint", + "cloudProxy": "Cloud Proxy", + "disableConfirm": "Sigurado ka bang gusto mong i-disable ang cloud proxy?", + "baseUrl": "Base URL", + "apiKeyLabel": "API Key", + "registeredKeys": "Mga Rehistradong Susi", + "chatCompletions": "Mga Pagkumpleto ng Chat", + "responses": "Mga tugon", + "listModels": "Listahan ng mga Modelo", + "usingCloudProxy": "Gamit ang Cloud Proxy", + "usingLocalServer": "Gamit ang Lokal na Server", + "machineId": "Machine ID: {id}...", + "disableCloud": "Huwag paganahin ang Cloud", + "enableCloud": "Paganahin ang Cloud", + "modelsAcrossEndpoints": "{models} na mga modelo sa {endpoints} na mga endpoint", + "chatDesc": "Streaming at non-streaming na chat sa lahat ng provider", + "embeddings": "Mga pag-embed", + "embeddingsDesc": "Mga text embed para sa paghahanap at RAG pipeline", + "imageGeneration": "Pagbuo ng Larawan", + "imageDesc": "Bumuo ng mga larawan mula sa mga text prompt", + "rerank": "Muling ranggo", + "rerankDesc": "I-rerank ang mga dokumento ayon sa kaugnayan sa isang query", + "audioTranscription": "Transkripsyon ng Audio", + "audioTranscriptionDesc": "I-transcribe ang mga audio file sa text (Bulong)", + "textToSpeech": "Text to Speech", + "textToSpeechDesc": "I-convert ang teksto sa natural na tunog na pananalita", + "moderations": "Mga moderation", + "moderationsDesc": "Pag-moderate ng nilalaman at pag-uuri ng kaligtasan", + "enableCloudTitle": "Paganahin ang Cloud Proxy", + "whatYouGet": "Kung ano ang makukuha mo", + "cloudBenefitAccess": "I-access ang iyong API mula saanman sa mundo", + "cloudBenefitShare": "Ibahagi ang endpoint sa iyong team nang madali", + "cloudBenefitPorts": "Hindi na kailangang buksan ang mga port o i-configure ang firewall", + "cloudBenefitEdge": "Mabilis na pandaigdigang gilid ng network", + "cloudSessionNote": "Papanatilihin ng Cloud ang iyong auth session sa loob ng 1 araw. Kung hindi ginamit, awtomatiko itong matatanggal.", + "cloudUnstableNote": "Kasalukuyang hindi stable ang Cloud sa Claude Code OAuth sa ilang mga kaso.", + "cloudConnected": "Nakakonekta ang Cloud Proxy!", + "connectingToCloud": "Kumokonekta sa cloud...", + "verifyingConnection": "Bine-verify ang koneksyon...", + "connecting": "Kumokonekta...", + "verifying": "Bine-verify...", + "connected": "Konektado!", + "disableCloudTitle": "Huwag paganahin ang Cloud Proxy", + "disableWarning": "Made-delete ang lahat ng auth session sa cloud.", + "syncingData": "Sini-sync ang pinakabagong data...", + "disablingCloud": "Hindi pinapagana ang cloud...", + "syncing": "Sini-sync...", + "disabling": "Hindi pinapagana...", + "cloudConnectedVerified": "Nakakonekta at na-verify ang Cloud Proxy!", + "connectedVerificationPending": "Konektado — nakabinbin ang pagpapatunay", + "connectedVerificationPendingWithError": "Nakakonekta — nakabinbin ang pag-verify: {error}", + "cloudDisabledSuccess": "Matagumpay na na-disable ang Cloud", + "syncedSuccess": "Matagumpay na na-sync", + "failedDisable": "Nabigong i-disable ang cloud", + "failedEnable": "Nabigong paganahin ang cloud", + "cloudRequestTimeout": "Timeout ng kahilingan sa cloud", + "cloudRequestFailed": "Nabigo ang kahilingan sa cloud", + "cloudWorkerUnreachable": "Hindi maabot ang cloud worker. Tiyaking tumatakbo ang serbisyo sa cloud (npm run dev sa /cloud).", + "connectionFailed": "Nabigo ang koneksyon", + "syncFailed": "Nabigong i-sync ang cloud data", + "providerModelsTitle": "{provider} — Mga modelo", + "noModelsForProvider": "Walang available na mga modelo para sa provider na ito.", + "chat": "Chat", + "embedding": "Pag-embed", + "image": "Imahe", + "custom": "kaugalian", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Kalusugan ng System", + "description": "Real-time na pagsubaybay sa iyong OmniRoute instance", + "healthy": "Malusog", + "degraded": "Degraded", + "down": "Pababa", + "uptime": "Uptime", + "memory": "Alaala", + "memoryRss": "Memorya (RSS)", + "heap": "Bunton", + "cpu": "CPU", + "database": "Database", + "version": "Bersyon", + "lastCheck": "Huling Pagsusuri", + "providerHealth": "Kalusugan ng Provider", + "systemMetrics": "Mga Sukatan ng System", + "tokenHealth": "Token Health", + "refreshAll": "I-refresh Lahat", + "checkNow": "Suriin Ngayon", + "loadingHealth": "Nilo-load ang data ng kalusugan...", + "failedToLoad": "Nabigong i-load ang data ng kalusugan: {error}", + "retry": "Subukan muli", + "allOperational": "Ang lahat ng mga sistema ay gumagana", + "issuesDetected": "May nakitang mga isyu sa system", + "updatedAt": "Na-update {time}", + "latency": "Latency", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Kabuuang mga kahilingan", + "noDataYet": "Wala pang data", + "promptCache": "Prompt Cache", + "entries": "Mga entry", + "hitRate": "Hit Rate", + "hitsMisses": "Mga Hit / Miss", + "signatureCache": "Signature Cache", + "signatureDefaults": "Mga Default", + "signatureTool": "Tool", + "signatureFamily": "Pamilya", + "signatureSession": "Sesyon", + "recovering": "Nagpapagaling", + "noCBData": "Walang available na data ng circuit breaker. Gumawa muna ng ilang kahilingan.", + "providerHealthStatusAria": "Katayuan ng kalusugan ng provider", + "issuesLabel": "Natukoy ang mga Isyu", + "operational": "Operasyon", + "providers": "Mga provider", + "healthyCount": "{count} malusog", + "nodeVersion": "Node {version}", + "failures": "{count} pagkabigo", + "failuresPlural": "{count} mga pagkabigo", + "lastFailure": "Huli", + "rateLimitStatus": "Katayuan ng Hangganan ng Rate", + "activeLimiters": "{count} aktibong limiter", + "activeLimitersPlural": "{count} mga aktibong limiter", + "queued": "Nakapila", + "queuedCount": "{count} nakapila", + "running": "tumatakbo", + "runningCount": "{count} tumatakbo", + "ok": "OK", + "activeLockouts": "Mga Aktibong Lockout", + "resetConfirm": "I-reset ang lahat ng mga circuit breaker sa malusog na estado? Tatanggalin nito ang lahat ng bilang ng pagkabigo at ibabalik ang lahat ng provider sa katayuan sa pagpapatakbo.", + "resetAllTitle": "I-reset ang lahat ng mga circuit breaker sa malusog na estado", + "resetting": "Nire-reset...", + "resetAll": "I-reset Lahat", + "until": "Hanggang {time}" + }, + "limits": { + "title": "Mga Limitasyon at Quota", + "rateLimit": "Hangganan ng Rate", + "remaining": "Natitira", + "requestsPerMinute": "Mga kahilingan/min", + "tokensPerMinute": "Mga token/min", + "dailyLimit": "Pang-araw-araw na Limitasyon" + }, + "logs": { + "title": "Mga log", + "requestLogs": "Mga Log ng Kahilingan", + "proxyLogs": "Mga Proxy Log", + "auditLog": "Log ng Audit", + "console": "Console", + "auditLogDesc": "Mga aksyong pang-administratibo at mga kaganapang panseguridad", + "loading": "Naglo-load...", + "refresh": "I-refresh", + "filterByAction": "I-filter ayon sa pagkilos...", + "filterByActor": "Salain ayon sa aktor...", + "filterEntriesAria": "I-filter ang mga entry sa log ng pag-audit", + "filterByActionTypeAria": "I-filter ayon sa uri ng pagkilos", + "filterByActorAria": "Salain ayon sa aktor", + "refreshAuditLogAria": "I-refresh ang audit log", + "tableAria": "Mga entry sa log ng audit", + "failedFetchAuditLog": "Nabigong makuha ang audit log", + "showing": "Ipinapakita ang {count} entry (offset {offset})", + "search": "Maghanap", + "timestamp": "Timestamp", + "action": "Aksyon", + "actor": "artista", + "target": "Target", + "details": "Mga Detalye", + "ipAddress": "IP Address", + "notAvailable": "—", + "noEntries": "Walang nakitang audit log entries", + "previous": "Nakaraang", + "next": "Susunod" + }, + "onboarding": { + "welcome": "Maligayang pagdating", + "security": "Seguridad", + "test": "Pagsubok", + "ready": "handa na!", + "setPassword": "Itakda ang Password", + "addProvider": "Idagdag ang iyong unang provider", + "getStarted": "Magsimula", + "skip": "Laktawan", + "skipWizard": "Laktawan ang wizard nang buo", + "skipPassword": "Laktawan ang pag-setup ng password", + "skipAndContinue": "Laktawan at Magpatuloy", + "passwordLabel": "Password", + "confirmPassword": "Kumpirmahin ang Password", + "enterPassword": "Ipasok ang password", + "confirmPasswordPlaceholder": "Kumpirmahin ang password", + "passwordsMismatch": "Hindi tugma ang mga password", + "setupComplete": "Kumpleto na ang Setup!", + "goToDashboard": "Pumunta sa Dashboard →", + "welcomeDesc": "Ang OmniRoute ay ang iyong lokal na AI API proxy. Nagruruta ito ng mga kahilingan sa maraming AI provider na may load balancing, failover, at pagsubaybay sa paggamit.", + "multiProvider": "Multi-Provider", + "usageTracking": "Pagsubaybay sa Paggamit", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "Magtakda ng password para protektahan ang iyong dashboard, o laktawan muna.", + "providerDesc": "Ikonekta ang iyong unang AI provider. Maaari kang magdagdag ng higit pa sa ibang pagkakataon.", + "apiKeyRequired": "API Key (kinakailangan)", + "customUrlOptional": "Custom na URL (opsyonal)", + "testDesc": "I-verify natin na gumagana ang iyong koneksyon sa provider.", + "runTest": "Patakbuhin ang Pagsubok sa Koneksyon", + "testingConnection": "Sinusuri ang koneksyon...", + "connectionSuccessful": "Matagumpay ang koneksyon! Ang iyong provider ay handa na.", + "noProviderFound": "Walang nahanap na provider. Maaari kang magdagdag ng isa mula sa dashboard sa ibang pagkakataon.", + "testFailed": "Nabigo ang pagsubok, ngunit maaari mo itong i-configure sa ibang pagkakataon.", + "couldNotTest": "Hindi makapagsubok ngayon. Maaari mong subukan mula sa dashboard.", + "doneDesc": "Handa ka na! Ang iyong OmniRoute instance ay naka-configure at handang i-proxy ang mga kahilingan sa AI.", + "yourEndpoint": "Ang iyong endpoint:", + "continue": "Magpatuloy", + "retry": "Subukan muli", + "failedSetPassword": "Nabigong itakda ang password. Subukan muli.", + "failedAddProvider": "Nabigong magdagdag ng provider. Subukan muli.", + "connectionError": "Error sa koneksyon. Pakisubukang muli.", + "provider": "Provider" + }, + "providers": { + "title": "Mga provider", + "addProvider": "Magdagdag ng Provider", + "editProvider": "I-edit ang Provider", + "deleteProvider": "Tanggalin ang Provider", + "noProviders": "Walang mga provider na na-configure", + "modelAvailability": "Availability ng Modelo", + "accounts": "Mga account", + "newAccount": "Bagong Account", + "deleteConfirm": "Sigurado ka bang gusto mong tanggalin ang provider na ito?", + "testing": "Pagsubok...", + "testConnection": "Subukan ang Koneksyon", + "testSuccess": "Matagumpay ang koneksyon", + "testFailed": "Nabigo ang koneksyon", + "available": "Available", + "cooldown": "Cooldown", + "unavailable": "Hindi magagamit", + "unknown": "Hindi alam", + "oauthLabel": "OAuth", + "compatibleLabel": "Magkatugma", + "chat": "Chat", + "responses": "Mga tugon", + "messages": "Mga mensahe", + "oauthProviders": "Mga Provider ng OAuth", + "freeProviders": "Mga Libreng Provider", + "apiKeyProviders": "Mga API Key Provider", + "compatibleProviders": "Mga Katugmang Provider ng API Key", + "testAll": "Subukan ang Lahat", + "testAllOAuth": "Subukan ang lahat ng OAuth na koneksyon", + "testAllFree": "Subukan ang lahat ng Libreng koneksyon", + "testAllApiKey": "Subukan ang lahat ng koneksyon sa API Key", + "testAllCompatible": "Subukan ang lahat ng Mga katugmang koneksyon", + "connected": "{count} Nakakonekta", + "errorCount": "{count} Error ({code})", + "errorCountNoCode": "{count} Error", + "noConnections": "Walang koneksyon", + "disabled": "Hindi pinagana", + "enableProvider": "Paganahin ang provider", + "disableProvider": "Huwag paganahin ang provider", + "testResults": "Mga Resulta ng Pagsusulit", + "noCompatibleYet": "Wala pang naidagdag na mga katugmang provider", + "compatibleHint": "Gamitin ang mga button sa itaas para magdagdag ng OpenAI o Anthropic compatible na mga endpoint", + "addOpenAICompatible": "Magdagdag ng OpenAI Compatible", + "addAnthropicCompatible": "Magdagdag ng Anthropic Compatible", + "addNewProvider": "Magdagdag ng Bagong Provider", + "backToProviders": "Bumalik sa Provider", + "configureNewProvider": "Mag-configure ng bagong AI provider na gagamitin sa iyong mga application.", + "providerLabel": "Provider", + "selectProvider": "Pumili ng provider", + "selectedProvider": "Napiling provider", + "authMethod": "Paraan ng Pagpapatunay", + "apiKeyLabel": "API Key", + "apiKeyRequired": "Kinakailangan ang API Key", + "selectProviderRequired": "Mangyaring pumili ng provider", + "enterApiKey": "Ilagay ang iyong API key", + "apiKeySecure": "Ie-encrypt at secure na maiimbak ang iyong API key.", + "oauth2Connect": "Kumonekta sa OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Ikonekta ang iyong account gamit ang OAuth2 authentication.", + "displayName": "Display Name", + "displayNamePlaceholder": "hal., Production API, Dev Environment", + "displayNameHint": "Opsyonal. Isang friendly na pangalan para matukoy ang configuration na ito.", + "active": "Aktibo", + "activeDescription": "Paganahin ang provider na ito para magamit sa iyong mga application", + "cancel": "Kanselahin", + "createProvider": "Lumikha ng Provider", + "failedCreate": "Nabigong gumawa ng provider", + "errorOccurred": "May naganap na error. Pakisubukang muli.", + "modelStatus": "Katayuan ng Modelo", + "allModelsOperational": "Ang lahat ng mga modelo ay gumagana", + "modelsWithIssues": "{count} (mga) modelong may mga isyu", + "allModelsNormal": "Ang lahat ng mga modelo ay tumutugon nang normal.", + "cooldownCleared": "Na-clear ang cooldown para sa {model}", + "failedClearCooldown": "Nabigong i-clear ang cooldown", + "loadingAvailability": "Nilo-load ang availability ng modelo...", + "clearCooldown": "Maaliwalas", + "clearing": "Nililinis...", + "until": "Hanggang {time}", + "providerTestFailed": "Nabigo ang pagsubok ng provider", + "modeTest": "{mode} Pagsubok", + "passedCount": "{count} pumasa", + "failedCount": "Nabigo ang {count}", + "testedCount": "{count} sinubukan", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "ERROR", + "noActiveConnectionsInGroup": "Walang nakitang aktibong koneksyon para sa grupong ito.", + "allTestsPassed": "Naipasa ang lahat ng {total} na pagsubok", + "testSummary": "{passed}/{total} nakapasa, {failed} nabigo", + "nameLabel": "Pangalan", + "prefixLabel": "Prefix", + "baseUrlLabel": "Base URL", + "apiTypeLabel": "Uri ng API", + "prefixHint": "Kinakailangan. Natatanging prefix para sa mga pangalan ng modelo.", + "nameHint": "Kinakailangan. Isang friendly na label para sa node na ito.", + "baseUrlHint": "Kinakailangan.  URL base ng Provider API.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Patunayan ang Koneksyon", + "validating": "Pinapatunayan...", + "connectionValid": "May bisa ang koneksyon!", + "connectionFailed": "Nabigo ang koneksyon. Suriin ang URL at susi.", + "testKeyLabel": "Subukan ang API Key", + "testKeyPlaceholder": "sk-... (para sa pagpapatunay lamang)", + "providerNotFound": "Hindi nahanap ang provider", + "deleteConnectionConfirm": "Tanggalin ang koneksyon na ito?", + "failedSetAlias": "Nabigong itakda ang alias", + "failedSaveConnection": "Nabigong i-save ang koneksyon", + "failedSaveConnectionRetry": "Nabigong i-save ang koneksyon. Pakisubukang muli.", + "failedRetestConnection": "Nabigong subukang muli ang koneksyon", + "deleteCompatibleNodeConfirm": "I-delete itong {type} Compatible node?", + "anthropicCompatibleDetails": "Mga Detalye ng Anthropic Compatible", + "openaiCompatibleDetails": "Mga Detalye ng Tugma sa OpenAI", + "messagesApi": "Messages API", + "responsesApi": "Responses API", + "chatCompletions": "Mga Pagkumpleto ng Chat", + "importingModels": "Ini-import...", + "importFromModels": "Mag-import mula sa /models", + "addConnectionToImport": "Magdagdag ng koneksyon upang paganahin ang pag-import.", + "noModelsConfigured": "Walang mga modelong na-configure", + "connectionCount": "{count} (mga) koneksyon", + "fetchingModels": "Kinukuha ang mga available na modelo...", + "failedFetchModels": "Nabigong kumuha ng mga modelo", + "noModelsFound": "Walang nakitang mga modelo", + "importFailed": "Nabigo ang pag-import", + "noNewModelsAdded": "Walang naidagdag na mga bagong modelo.", + "adding": "Idinaragdag...", + "importingModelsTitle": "Pag-import ng mga Modelo", + "copyModel": "Kopyahin ang modelo", + "removeModel": "Alisin ang modelo", + "rateLimitProtected": "Pinoprotektahan", + "rateLimitUnprotected": "Hindi protektado", + "enableRateLimitProtection": "I-click upang paganahin ang proteksyon sa limitasyon ng rate", + "disableRateLimitProtection": "I-click upang huwag paganahin ang proteksyon sa limitasyon ng rate", + "productionKey": "Susi ng Produksyon", + "enterNewApiKey": "Maglagay ng bagong API key", + "optional": "Opsyonal", + "anthropicCompatibleName": "Anthropic Compatible", + "openaiCompatibleName": "OpenAI Compatible", + "failedImportModels": "Nabigong mag-import ng mga modelo", + "noModelsReturnedFromEndpoint": "Walang mga modelong ibinalik mula sa /models endpoint.", + "importingModelsProgress": "Ini-import ang {current} ng {total} na mga modelo...", + "foundModelsStartingImport": "Nakakita ng {count} na mga modelo. Sinisimulan ang pag-import...", + "importingModelById": "Ini-import ang {modelId}...", + "importSuccessCount": "Matagumpay na na-import ang {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Walang mga bagong modelo ang naidagdag (lahat ay mayroon na).", + "importDoneCount": "✓ Tapos na! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "May naganap na hindi inaasahang error", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "mga mensahe", + "responsesPath": "mga tugon", + "chatCompletionsPath": "chat/pagkumpleto", + "add": "Idagdag", + "edit": "I-edit", + "delete": "Tanggalin", + "anthropic": "Antropiko", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Isang koneksyon lang ang pinapayagan sa bawat katugmang node. Magdagdag ng isa pang node kung kailangan mo ng higit pang mga koneksyon.", + "connections": "Mga koneksyon", + "providerProxyTitleConfigured": "Proxy ng provider: {host}", + "configured": "naka-configure", + "providerProxyConfigureHint": "I-configure ang proxy para sa lahat ng koneksyon ng provider na ito", + "providerProxy": "Proxy ng Provider", + "noConnectionsYet": "Wala pang koneksyon", + "addFirstConnectionHint": "Idagdag ang iyong unang koneksyon upang makapagsimula", + "addConnection": "Magdagdag ng Koneksyon", + "availableModels": "Mga Magagamit na Modelo", + "pageAutoRefresh": "Awtomatikong magre-refresh ang page...", + "statusDisabled": "may kapansanan", + "statusConnected": "konektado", + "statusRuntimeIssue": "isyu sa runtime", + "statusAuthFailed": "nabigo ang auth", + "statusRateLimited": "limitado ang rate", + "statusNetworkIssue": "isyu sa network", + "statusTestUnsupported": "hindi suportado ang pagsubok", + "statusUnavailable": "hindi magagamit", + "statusFailed": "nabigo", + "statusError": "pagkakamali", + "oauthAccount": "OAuth Account", + "errorTypeRuntime": "Lokal na runtime", + "errorTypeUpstreamAuth": "Upstream na auth", + "errorTypeMissingCredential": "Nawawalang kredensyal", + "errorTypeRefreshFailed": "Nabigo ang pag-refresh", + "errorTypeTokenExpired": "Nag-expire ang token", + "errorTypeRateLimited": "Limitado ang rate", + "errorTypeUpstreamUnavailable": "Upstream ay hindi magagamit", + "errorTypeNetworkError": "Error sa network", + "errorTypeTestUnsupported": "Hindi sinusuportahan ang pagsubok", + "errorTypeUpstreamError": "Upstream error", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Provider", + "proxySourceKey": "Susi", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Retest authentication", + "retest": "Retest", + "disableConnection": "Huwag paganahin ang koneksyon", + "enableConnection": "Paganahin ang koneksyon", + "reauthenticateConnection": "Muling patotohanan ang koneksyong ito", + "proxyConfig": "Proxy config", + "aliasExistsAlert": "Umiiral na ang alyas na \"{alias}\". Mangyaring gumamit ng ibang modelo o i-edit ang kasalukuyang alias.", + "openRouterAnyModelHint": "Sinusuportahan ng OpenRouter ang anumang modelo. Magdagdag ng mga modelo at lumikha ng mga alias para sa mabilis na pag-access.", + "modelIdFromOpenRouter": "Model ID (mula sa OpenRouter)", + "openRouterModelPlaceholder": "anthropic/claude-3-opus", + "customModels": "Mga Custom na Modelo", + "customModelsHint": "Magdagdag ng mga model ID na wala sa default na listahan. Magiging available ang mga ito para sa pagruruta.", + "modelId": "Model ID", + "customModelPlaceholder": "hal. gpt-4.5-turbo", + "loading": "Naglo-load...", + "removeCustomModel": "Alisin ang custom na modelo", + "noCustomModels": "Wala pang naidagdag na custom na mga modelo.", + "allSuggestedAliasesExist": "Umiiral na ang lahat ng iminungkahing alias. Mangyaring pumili ng ibang modelo o alisin ang mga magkasalungat na alias.", + "failedSaveCustomModel": "Nabigong i-save ang custom na modelo", + "modelAddedSuccess": "Matagumpay na naidagdag ang modelong {modelId}", + "failedAddModelTryAgain": "Nabigong magdagdag ng modelo. Pakisubukang muli.", + "failedSaveImportedModel": "Nabigong i-save ang na-import na modelo sa custom na database", + "failedImportModelsTryAgain": "Nabigong mag-import ng mga modelo. Pakisubukang muli.", + "failedRemoveModelFromDatabase": "Nabigong alisin ang modelo mula sa database", + "modelRemovedSuccess": "Matagumpay na naalis ang modelo", + "failedDeleteModelTryAgain": "Nabigong tanggalin ang modelo. Pakisubukang muli.", + "compatibleModelsDescription": "Magdagdag ng {type}-compatible na mga modelo nang manu-mano o i-import ang mga ito mula sa /models endpoint.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Nabigo ang pagpapatunay ng API key. Pakisuri ang iyong susi at subukang muli.", + "addProviderApiKeyTitle": "Magdagdag ng {provider} API Key", + "checking": "Sinusuri...", + "check": "Suriin", + "valid": "Wasto", + "invalid": "Di-wasto", + "creating": "Ginagawa...", + "validationChecksAnthropicCompatible": "Sinusuri ng validation ang {provider} sa pamamagitan ng pag-verify sa API key.", + "validationChecksOpenAiCompatible": "Sinusuri ng validation ang {provider} sa pamamagitan ng /models sa iyong base URL.", + "priorityLabel": "Priyoridad", + "saving": "Nagse-save...", + "save": "I-save", + "editConnection": "I-edit ang Koneksyon", + "accountName": "Pangalan ng account", + "email": "Email", + "healthCheckMinutes": "Health Check (min)", + "healthCheckHint": "Proactive token refresh interval. 0 = hindi pinagana.", + "failedTestConnection": "Nabigong subukan ang koneksyon", + "failed": "Nabigo", + "leaveBlankKeepCurrentApiKey": "Iwanang blangko upang mapanatili ang kasalukuyang API key.", + "editCompatibleTitle": "I-edit ang {type} Compatible", + "compatibleBaseUrlHint": "Gamitin ang base URL (nagtatapos sa /v1) para sa iyong {type}-compatible na API.", + "apiKeyForCheck": "API Key (para sa Pagsusuri)", + "compatibleProdPlaceholder": "{type} Compatible (Prod)" + }, + "settings": { + "title": "Mga setting", + "general": "Heneral", + "security": "Seguridad", + "appearance": "Hitsura", + "routing": "Pagruruta", + "cache": "Cache", + "resilience": "Katatagan", + "systemPrompt": "System Prompt", + "thinkingBudget": "Pag-iisip na Badyet", + "proxy": "Proxy", + "pricing": "Pagpepresyo", + "storage": "Imbakan", + "policies": "Mga patakaran", + "ipFilter": "IP Filter", + "comboDefaults": "Combo Default", + "fallbackChains": "Fallback Chain", + "changePassword": "Baguhin ang Password", + "enablePassword": "Paganahin ang Password", + "darkMode": "Dark Mode", + "lightMode": "Light Mode", + "systemTheme": "Tema ng System", + "enableCache": "Paganahin ang Cache", + "cacheTTL": "I-cache ang TTL", + "maxCacheSize": "Max na Laki ng Cache", + "clearCache": "I-clear ang Cache", + "cacheHits": "Mga Cache Hit", + "cacheMisses": "Nakakamiss ang cache", + "hitRate": "Hit Rate", + "cacheEntries": "Mga Cache Entry", + "circuitBreaker": "Circuit Breaker", + "retryPolicy": "Subukang muli ang Patakaran", + "maxRetries": "Max na muling sumusubok", + "retryDelay": "Subukan muli ang Pagkaantala", + "timeoutMs": "Timeout (ms)", + "enableSystemPrompt": "Paganahin ang System Prompt", + "systemPromptText": "System Prompt Text", + "enableThinking": "Paganahin ang Pag-iisip", + "maxThinkingTokens": "Max Thinking Token", + "enableProxy": "Paganahin ang Proxy", + "proxyUrl": "URL ng proxy", + "pricingRates": "Format ng Mga Rate ng Pagpepresyo", + "currentPricing": "Pangkalahatang-ideya ng Kasalukuyang Pagpepresyo", + "loadingPricing": "Nilo-load ang data ng pagpepresyo...", + "noPricing": "Walang available na data ng pagpepresyo", + "input": "Input", + "output": "Output", + "cached": "Naka-cache", + "reasoning": "Pangangatwiran", + "cacheCreation": "Paglikha ng Cache", + "customPricing": "Custom na Pagpepresyo", + "databaseSize": "Laki ng Database", + "backupDb": "Backup na Database", + "restoreDb": "Ibalik ang Database", + "exportData": "I-export ang Data", + "importData": "Mag-import ng Data", + "clearData": "I-clear ang Lahat ng Data", + "clearDataConfirm": "Permanente nitong tatanggalin ang lahat ng data. Sigurado ka ba?", + "enableRequestLogs": "Paganahin ang Mga Log ng Kahilingan", + "logRetention": "Pagpapanatili ng Log", + "ipWhitelist": "IP Whitelist", + "ipBlacklist": "IP Blacklist", + "addIP": "Magdagdag ng IP", + "savedSuccessfully": "Matagumpay na na-save ang mga setting", + "ai": "AI", + "advanced": "Advanced", + "localMode": "Lokal na Mode — Lahat ng data na nakaimbak sa iyong makina", + "settingsSectionsAria": "Mga seksyon ng mga setting", + "switchThemes": "Lumipat sa pagitan ng maliwanag at madilim na tema", + "themeSelectionAria": "Pagpili ng tema", + "themeLight": "Liwanag", + "themeDark": "Madilim", + "themeSystem": "Sistema", + "hideHealthLogs": "Itago ang Health Check Logs", + "hideHealthLogsDesc": "Kapag NAKA-ON, sugpuin ang mga mensahe ng [HealthCheck] sa server console", + "promptCache": "Prompt Cache", + "flushCache": "Flush Cache", + "flushing": "Nag-flush...", + "size": "Sukat", + "hits": "Mga hit", + "evictions": "Mga pagpapalayas", + "loadingCacheStats": "Nilo-load ang mga istatistika ng cache…", + "globalProxy": "Pandaigdigang Proxy", + "globalProxyDesc": "Mag-configure ng pandaigdigang papalabas na proxy para sa lahat ng tawag sa API. Maaaring i-override ito ng mga indibidwal na provider, combo, at key.", + "noGlobalProxy": "Walang na-configure na pandaigdigang proxy", + "globalLabel": "Global", + "configure": "I-configure", + "globalSystemPrompt": "Global System Prompt", + "systemPromptDesc": "Iniksyon sa lahat ng kahilingan sa antas ng proxy", + "saved": "Nai-save", + "systemPromptPlaceholder": "Ipasok ang prompt ng system para mag-inject sa lahat ng kahilingan...", + "systemPromptHint": "Ang prompt na ito ay inilalagay sa mensahe ng system ng bawat kahilingan. Gamitin para sa mga pandaigdigang tagubilin, mga alituntunin sa kaligtasan, o mga panuntunan sa pag-format ng tugon.", + "chars": "{count} character", + "thinkingBudgetTitle": "Pag-iisip na Badyet", + "thinkingBudgetDesc": "Kontrolin ang paggamit ng token ng pangangatwiran ng AI sa lahat ng kahilingan", + "passthrough": "Passthrough", + "passthroughDesc": "Walang pagbabago — kinokontrol ng kliyente ang pag-iisip na badyet", + "auto": "Auto", + "autoDesc": "I-strip ang lahat ng thinking config — hayaan ang provider na magpasya", + "custom": "Custom", + "customDesc": "Magtakda ng nakapirming token na badyet para sa lahat ng kahilingan", + "adaptive": "Adaptive", + "adaptiveDesc": "I-scale ang badyet batay sa pagiging kumplikado ng kahilingan", + "effortNone": "Wala (0 token)", + "effortLow": "Mababa (1K token)", + "effortMedium": "Katamtaman (10K token)", + "effortHigh": "Mataas (128K token)", + "tokenBudget": "Token Budget", + "tokens": "mga token", + "baseEffortLevel": "Batayang Antas ng Pagsisikap", + "adaptiveHint": "Ang adaptive mode ay sumusukat mula sa base level na ito batay sa bilang ng mensahe, paggamit ng tool, at haba ng prompt.", + "requireLogin": "Nangangailangan ng pag-login", + "requireLoginDesc": "Kapag NAKA-ON, nangangailangan ng password ang dashboard. Kapag NAKA-OFF, i-access nang walang login.", + "currentPassword": "Kasalukuyang Password", + "enterCurrentPassword": "Ipasok ang kasalukuyang password", + "newPassword": "Bagong Password", + "enterNewPassword": "Maglagay ng bagong password", + "confirmPassword": "Kumpirmahin ang Bagong Password", + "confirmPasswordPlaceholder": "Kumpirmahin ang bagong password", + "passwordsNoMatch": "Hindi tugma ang mga password", + "passwordUpdated": "Matagumpay na na-update ang password", + "failedUpdatePassword": "Nabigong i-update ang password", + "errorOccurred": "May naganap na error", + "updatePassword": "I-update ang Password", + "setPassword": "Itakda ang Password", + "apiEndpointProtection": "Proteksyon ng Endpoint ng API", + "requireAuthModels": "Mangailangan ng API key para sa /models", + "requireAuthModelsDesc": "Kapag NAKA-ON, ang /v1/models endpoint ay nagbabalik ng 404 para sa mga hindi napatotohanang kahilingan. Pinipigilan ang pagtuklas ng modelo ng mga hindi awtorisadong user.", + "blockedProviders": "Mga Naka-block na Provider", + "blockedProvidersDesc": "Itago ang mga partikular na provider mula sa tugon ng /v1/models. Hindi lalabas ang mga naka-block na provider sa mga listahan ng modelo.", + "providersBlocked": "{count} provider (mga) na-block mula sa /models", + "blockProviderTitle": "I-block ang {provider}", + "unblockProviderTitle": "I-unblock ang {provider}", + "routingStrategy": "Diskarte sa Pagruruta", + "fillFirst": "Punan muna", + "fillFirstDesc": "Gamitin ang mga account sa priority order", + "roundRobin": "Round Robin", + "roundRobinDesc": "Ikot sa lahat ng account", + "p2c": "P2C", + "p2cDesc": "Pumili ng 2 random, gamitin ang mas malusog", + "random": "Random", + "randomDesc": "Random na account ang bawat kahilingan", + "leastUsed": "Hindi gaanong nagamit", + "leastUsedDesc": "Pumili ng hindi bababa sa kamakailang ginamit na account", + "costOpt": "Cost Opt", + "costOptDesc": "Mas gusto ang pinakamurang available na account", + "stickyLimit": "Malagkit na Limitasyon", + "stickyLimitDesc": "Mga tawag sa bawat account bago lumipat", + "modelAliases": "Mga Alyas ng Modelo", + "modelAliasesDesc": "Mga pattern ng wildcard para i-remap ang mga pangalan ng modelo • Gamitin ang * at ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Pattern", + "targetModel": "Target na Modelo", + "add": "+ Idagdag", + "session": "Sesyon", + "sessionDetailsAria": "Mga detalye ng session", + "status": "Katayuan", + "authenticated": "Napatotohanan", + "guest": "panauhin", + "loginTime": "Oras ng Pag-login", + "sessionAge": "Edad ng Sesyon", + "browser": "Browser", + "clearLocalData": "I-clear ang Lokal na Data", + "logout": "Mag-logout", + "clearLocalDataConfirm": "I-clear ang lahat ng lokal na data? Ire-reset nito ang iyong mga kagustuhan.", + "unknown": "Hindi alam", + "systemActor": "sistema", + "ipAccessControl": "IP Access Control", + "ipAccessControlDesc": "I-block o payagan ang mga partikular na IP address", + "ipModeDisabled": "Hindi pinagana", + "ipModeBlacklist": "Blacklist", + "ipModeWhitelist": "Whitelist", + "ipModeWhitelistPriority": "WL Priyoridad", + "addIpAddress": "Magdagdag ng IP Address", + "ipAddressPlaceholder": "192.168.1.0/24 o 10.0.*.*", + "block": "+ Harangan", + "allow": "+ Payagan", + "blocked": "Naka-block ({count})", + "allowed": "Pinapayagan ({count})", + "temporaryBans": "Mga Pansamantalang Pagbawal ({count})", + "minLeft": "{min}m ang natitira", + "auditLog": "Log ng Audit", + "searchAuditLogs": "Maghanap ng mga audit log...", + "failedLoadAuditLog": "Nabigong i-load ang audit log", + "noAuditEvents": "Walang nakitang audit event", + "action": "Aksyon", + "actor": "artista", + "details": "Mga Detalye", + "time": "Oras", + "fallbackChainsTitle": "Fallback Chain", + "fallbackChainsDesc": "Tukuyin ang fallback order ng provider sa bawat modelo", + "addChain": "+ Magdagdag ng Chain", + "modelName": "Pangalan ng Modelo", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Mga Provider (pinaghihiwalay ng kuwit, sa priority order)", + "providersCommaSeparatedPlaceholder": "anthropic, openai, Gemini", + "createChain": "Lumikha ng Chain", + "noFallbackChains": "Walang Fallback Chain", + "noFallbackChainsDesc": "Gumawa ng chain para tukuyin ang fallback order ng provider para sa isang modelo.", + "loadingFallbackChains": "Nilo-load ang mga fallback chain...", + "deleteChainConfirm": "Tanggalin ang fallback chain para sa \"{model}\"?", + "chainCreated": "Ginawa ang chain para sa {model}", + "chainDeleted": "Tinanggal ang chain para sa {model}", + "failedCreateChain": "Nabigong gumawa ng chain", + "failedDeleteChain": "Nabigong tanggalin ang chain", + "deleteChain": "Tanggalin ang chain", + "fillModelAndProviders": "Mangyaring punan ang pangalan ng modelo at mga provider", + "addAtLeastOneProvider": "Magdagdag ng kahit isang provider", + "comboDefaultsTitle": "Combo Default", + "globalComboConfig": "Pandaigdigang pagsasaayos ng combo", + "defaultStrategy": "Default na Diskarte", + "defaultStrategyDesc": "Inilapat sa mga bagong combo nang walang tahasang diskarte", + "comboStrategyAria": "Diskarte ng combo", + "priority": "Priyoridad", + "weighted": "Natimbang", + "maxRetriesLabel": "Max na muling sumusubok", + "retryDelayLabel": "Subukan muli ang Pagkaantala (ms)", + "timeoutLabel": "Timeout (ms)", + "healthCheck": "Health Check", + "healthCheckDesc": "Paunang suriin ang availability ng provider", + "trackMetrics": "Subaybayan ang Sukatan", + "trackMetricsDesc": "Magtala ng mga sukatan ng bawat-combo na kahilingan", + "providerOverrides": "Mga Override ng Provider", + "providerOverridesDesc": "I-override ang timeout at subukang muli bawat provider. Ino-override ng mga setting ng provider ang mga pandaigdigang default.", + "providerMaxRetriesAria": "{provider} max na muling pagsubok", + "providerTimeoutAria": "{provider} timeout ms", + "removeProviderOverrideAria": "Alisin ang {provider} override", + "newProviderNamePlaceholder": "hal. google, openai...", + "newProviderNameAria": "Bagong pangalan ng provider", + "retries": "muling sumusubok", + "ms": "ms", + "saveComboDefaults": "I-save ang Mga Default ng Combo", + "maxNestingDepth": "Max Nesting Depth", + "concurrencyPerModel": "Concurrency / Modelo", + "queueTimeout": "Queue Timeout (ms)", + "providerProfiles": "Mga Profile ng Provider", + "providerProfilesDesc": "Paghiwalayin ang mga setting ng resilience para sa OAuth (session-based) at API Key (metered) provider. Ang mga provider ng OAuth ay may mas mahigpit na mga limitasyon dahil sa mas mababang mga limitasyon sa rate.", + "oauthProviders": "Mga Provider ng OAuth", + "apiKeyProviders": "Mga API Key Provider", + "transientCooldown": "Pansamantalang Cooldown", + "rateLimitCooldown": "Rate Limit Cooldown", + "maxBackoffLevel": "Max na Antas ng Backoff", + "cbThreshold": "CB Threshold", + "cbResetTime": "Oras ng Pag-reset ng CB", + "rateLimiting": "Paglilimita sa Rate", + "rateLimitingDesc": "Awtomatikong nililimitahan ng rate ang mga provider ng API Key na may mga ligtas na default. Ang mga limitasyon ay natutunan mula sa mga header ng tugon at umaangkop sa paglipas ng panahon.", + "defaultSafetyNet": "Default na Safety Net", + "rpm": "RPM", + "minGap": "Min Gap", + "maxConcurrent": "Max Kasabay", + "activeLimiters": "Mga Aktibong Limitasyon", + "noActiveLimiters": "Wala pang aktibong mga limiter ng rate.", + "reservoir": "Reservoir", + "running": "Tumatakbo", + "queued": "Nakapila", + "circuitBreakers": "Mga Circuit Breaker", + "breakerStateClosed": "sarado", + "breakerStateOpen": "Bukas", + "breakerStateHalfOpen": "Half-Open", + "tripped": "{count} nabadtrip", + "healthy": "{count} malusog", + "resetAll": "I-reset Lahat", + "noCircuitBreakers": "Wala pang mga circuit breaker na aktibo. Awtomatikong nilikha ang mga ito kapag dumaloy ang mga kahilingan sa combo pipeline.", + "failures": "{count} (mga) kabiguan", + "policiesLocked": "Mga Patakaran at Mga Naka-lock na Identifier", + "allOperational": "Lahat ng system ay gumagana — walang lockout o tripped breaker", + "loadingPolicies": "Nilo-load ang mga patakaran...", + "lockedIdentifiers": "Mga Naka-lock na Identifier", + "unlockedIdentifier": "Na-unlock: {identifier}", + "sinceDate": "mula noong {date}", + "forceUnlock": "Force Unlock", + "unlocking": "Ina-unlock...", + "failedUnlock": "Nabigong i-unlock", + "failedLoadWithStatus": "Nabigong mag-load: {status}", + "failedLoadResilience": "Nabigong i-load ang katayuan ng katatagan", + "saveFailed": "Nabigo ang pag-save", + "resetFailed": "Nabigo ang pag-reset", + "loadingResilience": "Nilo-load ang katayuan ng katatagan...", + "retry": "Subukan muli", + "systemStorage": "System at Imbakan", + "allDataLocal": "Lahat ng data na lokal na nakaimbak sa iyong makina", + "databasePath": "Landas ng Database", + "exportDatabase": "I-export ang Database", + "exportAll": "I-export Lahat (.tar.gz)", + "importDatabase": "Mag-import ng Database", + "confirmDbImport": "Kumpirmahin ang Pag-import ng Database", + "confirmDbImportDesc": "Papalitan nito ang lahat ng kasalukuyang data ng nilalaman mula sa {file}. Awtomatikong gagawin ang isang backup bago ang pag-import.", + "yesImport": "Oo, Import", + "lastBackup": "Huling Backup", + "noBackupYet": "Wala pang backup", + "backupNow": "I-backup Ngayon", + "backupRestore": "I-backup at I-restore", + "viewBackups": "Tingnan ang Mga Backup", + "hide": "Magtago", + "backupRetentionDesc": "Ang mga snapshot ng database ay awtomatikong nilikha bago ibalik at bawat 15 minuto kapag nagbabago ang data. Pagpapanatili: 24 oras-oras + 30 araw-araw na pag-backup na may matalinong pag-ikot.", + "loadingBackups": "Nilo-load ang mga backup...", + "noBackupsYet": "Wala pang available na backup. Awtomatikong gagawin ang mga backup kapag nagbago ang data.", + "backupsAvailable": "{count} (mga) backup na available", + "refresh": "I-refresh", + "confirm": "Kumpirmahin?", + "yes": "Oo", + "no": "Hindi", + "restore": "Ibalik", + "invalidFileType": "Di-wastong uri ng file. Tanging mga .sqlite na file ang tinatanggap.", + "exportFailed": "Nabigo ang pag-export", + "exportFailedWithError": "Nabigo ang pag-export: {error}", + "fullExportFailedWithError": "Nabigo ang buong pag-export: {error}", + "backupCreated": "Nagawa ang backup: {file}", + "restoreSuccess": "Naibalik! {connections} na mga koneksyon, {nodes} node, {combos} combo, {apiKeys} API key.", + "importSuccess": "Na-import ang database! {connections} na mga koneksyon, {nodes} node, {combos} combo, {apiKeys} API key.", + "justNow": "ngayon lang", + "minutesAgo": "{count}m ang nakalipas", + "hoursAgo": "{count}h ang nakalipas", + "daysAgo": "{count}d ang nakalipas", + "backupReasonManual": "manwal", + "backupReasonPreRestore": "pre-restore", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Walang mga pagbabago mula noong huling backup", + "backupFailed": "Nabigo ang backup", + "restoreFailed": "Nabigo ang pag-restore", + "importFailed": "Nabigo ang pag-import", + "errorDuringRestore": "Nagkaroon ng error habang nagre-restore", + "errorDuringImport": "Nagkaroon ng error habang nag-import", + "modelPricing": "Pagpepresyo ng Modelo", + "modelPricingDesc": "I-configure ang mga rate ng gastos sa bawat modelo • Lahat ng mga rate sa $/1M token", + "providers": "Mga provider", + "registry": "Pagpapatala", + "priced": "Napresyohan", + "searchProvidersModels": "Maghanap ng mga provider o modelo...", + "showAll": "Ipakita ang Lahat", + "noProvidersMatch": "Walang provider na tumutugma sa iyong paghahanap.", + "howPricingWorks": "Paano Gumagana ang Pagpepresyo", + "cacheWrite": "Cache Write", + "unsaved": "hindi naligtas", + "resetDefaults": "I-reset ang Mga Default", + "saveProvider": "I-save ang Provider", + "saving": "Nagse-save...", + "model": "Modelo", + "models": "mga modelo", + "moreProviders": "{count} higit pang mga provider", + "withPricing": "na may naka-configure na pagpepresyo", + "policiesCircuitBreakers": "Mga Patakaran at Circuit Breaker", + "activeIssuesDetected": "Natukoy ang mga aktibong isyu", + "off": "Naka-off", + "resetPricingConfirm": "I-reset ang lahat ng pagpepresyo para sa {provider} sa mga default?", + "pricingDescInput": "Input: mga token na ipinadala sa modelo", + "pricingDescOutput": "Output: nabuong mga token", + "pricingDescCached": "Naka-cache: muling ginamit na input (~50% ng input rate)", + "pricingDescReasoning": "Pangangatwiran: mga token sa pag-iisip (bumabalik sa Output)", + "pricingDescCacheWrite": "Pagsulat ng Cache: paglikha ng mga entry sa cache (bumabalik sa Input)", + "pricingDescFormula": "Gastos = (input × input_rate) + (output × output_rate) + (cached × cached_rate) bawat milyong token.", + "pricingSettingsTitle": "Mga Setting ng Pagpepresyo", + "totalModels": "Kabuuang Mga Modelo", + "active": "Aktibo", + "costCalculation": "Pagkalkula ng Gastos", + "costCalculationDesc": "Kinakalkula ang mga gastos batay sa paggamit ng token at mga rate ng pagpepresyo na na-configure para sa bawat modelo.", + "pricingFormat": "Format ng Pagpepresyo", + "pricingFormatDesc": "Ang lahat ng mga rate ay nasa $/1M token (dollars per million token).", + "tokenTypes": "Mga Uri ng Token", + "inputTokenDesc": "Mga karaniwang prompt token", + "outputTokenDesc": "Mga token ng pagkumpleto/pagtugon", + "cachedTokenDesc": "Mga naka-cache na input token (karaniwang 50% ng input rate)", + "reasoningTokenDesc": "Espesyal na mga token sa pangangatwiran/pag-iisip (fallback sa rate ng output)", + "cacheCreationTokenDesc": "Mga token na ginamit upang lumikha ng mga entry sa cache (fallback sa rate ng pag-input)", + "customPricingNote": "Maaari mong i-override ang default na pagpepresyo para sa mga partikular na modelo. Mas inuuna ang mga custom na override kaysa sa awtomatikong natukoy na pagpepresyo.", + "editPricing": "I-edit ang Pagpepresyo", + "viewFullDetails": "Tingnan ang Buong Detalye" + }, + "translator": { + "title": "Tagasalin", + "metaTitle": "Palaruan ng Tagasalin | OmniRoute", + "metaDescription": "I-debug, subukan, at i-visualize ang mga pagsasalin ng format ng API sa pagitan ng mga provider", + "playgroundTitle": "Palaruan ng Tagasalin", + "playground": "Palaruan", + "realtime": "Real-Time na Aktibidad sa Pagsasalin", + "chatTester": "Chat Tester", + "testBench": "Test Bench", + "liveMonitor": "Live na Monitor", + "modeDescriptionPlayground": "I-paste ang anumang nilalaman ng kahilingan sa API at tingnan kung paano ito isinasalin ng OmniRoute sa pagitan ng mga format ng provider (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Magpadala ng mga totoong kahilingan sa chat sa pamamagitan ng OmniRoute at siyasatin ang buong round-trip: input, isinaling kahilingan, tugon ng provider, at isinalin na output.", + "modeDescriptionTestBench": "Magpatakbo ng mga paunang natukoy na sitwasyon at ihambing ang pagiging tugma sa mga provider at modelo.", + "modeDescriptionLiveMonitor": "Panoorin ang mga kaganapan sa pagsasalin sa real time habang dumadaloy ang mga kahilingan sa pamamagitan ng OmniRoute.", + "modeDescriptionFallback": "I-debug, subukan, at i-visualize kung paano isinasalin ng OmniRoute ang mga kahilingan ng API sa pagitan ng mga provider.", + "recentTranslations": "Mga Kamakailang Pagsasalin", + "noTranslations": "Wala pang pagsasalin", + "source": "Pinagmulan", + "target": "Target", + "time": "Oras", + "model": "Modelo", + "status": "Katayuan", + "latency": "Latency", + "totalTranslations": "Kabuuang Pagsasalin", + "successful": "Matagumpay", + "errors": "Mga pagkakamali", + "avgLatency": "Avg Latency", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live — Auto-refresh", + "paused": "Naka-pause", + "eventsAppearHint": "Lumalabas dito ang mga kaganapan sa pagsasalin habang dumadaloy ang mga kahilingan sa pamamagitan ng OmniRoute. Gamitin ang alinman sa mga paraang ito upang bumuo ng mga kaganapan:", + "chatTesterTab": "Tab ng Chat Tester", + "testBenchTab": "Tab ng Test Bench", + "externalApiCalls": "Panlabas na mga tawag sa API", + "ideCliIntegrations": "Mga pagsasama ng IDE/CLI", + "inMemoryNote": "Tandaan: Ang mga kaganapan ay iniimbak sa memorya at nire-reset kapag nag-restart ang server.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Converter ng Format", + "formatConverterDescription": "Mag-paste o mag-type ng JSON request body. Awtomatikong ide-detect ng translator ang source format at iko-convert ito sa target na format. Gamitin ito para i-debug kung paano isinasalin ng OmniRoute ang mga kahilingan sa pagitan ng mga format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Input", + "output": "Output", + "auto": "Auto", + "swapFormats": "Magpalit ng mga format", + "translateAction": "Isalin", + "clear": "Maaliwalas", + "inputPlaceholder": "Mag-paste ng katawan ng kahilingan dito o pumili ng template sa ibaba...", + "exampleTemplates": "Mga Halimbawang Template", + "exampleTemplatesHint": "— I-click para mag-load", + "templateLoadHint": "Nilo-load ng template ang kahilingan sa {format} na format. Baguhin ang Source Format upang mag-load sa ibang format.", + "compatibilityTester": "Compatibility Tester", + "compatibilityReport": "Ulat sa Pagkakatugma", + "testBenchDescription": "Magpatakbo ng mga paunang natukoy na sitwasyon (Simple Chat, Tool Calling, atbp.) upang i-verify ang pagsasalin at pagiging tugma ng provider. Pumili ng source format at target na provider, pagkatapos ay patakbuhin ang lahat ng pagsubok para makakita ng porsyento ng compatibility. Gamitin ito para malaman kung aling mga feature ang gumagana sa mga provider.", + "targetProvider": "Target na Provider", + "runAllTests": "Patakbuhin ang Lahat ng Pagsusulit", + "runTest": "Patakbuhin ang Pagsusulit", + "reRun": "Muling tumakbo", + "running": "Tumatakbo...", + "passed": "pumasa", + "failed": "nabigo", + "passedIconLabel": "✅ Nakapasa", + "chunks": "mga tipak", + "scenarioSimpleChat": "Simpleng Chat", + "scenarioToolCalling": "Tool Calling", + "scenarioMultiTurn": "Multi-turn", + "scenarioThinking": "Nag-iisip", + "scenarioSystemPrompt": "System Prompt", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Simpleng Chat", + "tool-calling": "Tool Calling", + "multi-turn": "Multi-turn", + "thinking": "Nag-iisip", + "system-prompt": "System Prompt", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Pangunahing text message", + "tool-calling": "Function/tool invocation", + "multi-turn": "Pag-uusap sa kasaysayan", + "thinking": "Pinalawak na pag-iisip / pangangatwiran", + "system-prompt": "Mga kumplikadong tagubilin sa system", + "streaming": "kahilingan sa streaming ng SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Isa kang matulunging katulong.", + "userGreeting": "Hello! Kumusta ka ngayon?" + }, + "toolCalling": { + "userWeather": "Ano ang lagay ng panahon sa São Paulo?", + "toolDescription": "Kunin ang kasalukuyang panahon para sa isang lokasyon", + "cityNameDescription": "Pangalan ng lungsod" + }, + "multiTurn": { + "system": "Isa kang coding assistant.", + "userInitial": "Sumulat ng isang function upang ayusin ang isang array sa Python.", + "assistantExample": "Narito ang isang simpleng function ng pag-uuri:\n\n```python\ndef sort_array(arr):\n bumalik pinagsunod-sunod (arr)\n```", + "userFollowUp": "Ngayon gawin itong pag-uri-uriin sa pababang pagkakasunud-sunod." + }, + "thinking": { + "question": "Ano ang kabuuan ng unang 100 prime number?" + }, + "systemPrompt": { + "systemInstruction": "Isa kang senior software engineer na dalubhasa sa mga distributed system. Sagutin ang mga tanong nang maigsi gamit ang mga pinakamahuhusay na kagawian sa industriya. Palaging magbigay ng mga halimbawa ng code kapag may kaugnayan. I-format ang iyong mga tugon gamit ang markdown.", + "question": "Paano ako magpapatupad ng pattern ng circuit breaker?" + }, + "streaming": { + "prompt": "Sabihin sa akin ang isang maikling kuwento tungkol sa isang robot na natutong magpinta." + } + }, + "openaiCompatibleLabel": "OpenAI Compatible", + "anthropicCompatibleLabel": "Anthropic Compatible", + "noTemplateForFormat": "Walang template para sa format na ito", + "translationFailed": "Nabigo ang pagsasalin: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Pipeline ng Pagsasalin", + "pipelineVisualization": "Visualization ng pipeline", + "pipelineVisualizationHint": "Magpadala ng mensahe upang makita kung paano dumadaloy ang iyong kahilingan sa pamamagitan ng pagtuklas → pagsasalin → tawag sa provider.", + "chatTesterDescription": "Magpadala ng mga mensahe bilang isang partikular na format ng kliyente at siyasatin ang bawat hakbang ng pipeline ng pagsasalin.", + "chatTesterFlow": "Kahilingan ng Kliyente → Format Detection → OpenAI Intermediate → Format ng Provider → Tugon", + "clickStepToInspect": "I-click ang anumang hakbang upang siyasatin ang data sa yugtong iyon.", + "clientFormat": "Format ng Kliyente", + "provider": "Provider", + "modelPlaceholder": "Pumili o mag-type ng pangalan ng modelo...", + "sendMessageToSeePipeline": "Magpadala ng mensahe upang makita ang pipeline ng pagsasalin", + "chatMessageHintPrefix": "Ipo-format ang iyong mensahe bilang a", + "chatMessageHintSuffix": "kahilingan, isinalin sa pipeline, at ipinadala sa napiling provider.", + "youWithFormat": "Ikaw ({format})", + "assistant": "Katulong", + "typeMessage": "Mag-type ng mensahe...", + "send": "Ipadala", + "clientRequest": "Kahilingan ng Kliyente", + "clientRequestDescription": "Ang katawan ng kahilingan bilang iyong kliyente ang magpapadala nito", + "formatDetected": "Natukoy ang Format", + "formatDetectedDescription": "Awtomatikong nade-detect ng OmniRoute ang format ng API mula sa istraktura ng kahilingan", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Ang lahat ng mga format ay unang na-normalize sa OpenAI na format (ang unibersal na tulay)", + "providerFormat": "Format ng Provider", + "providerFormatDescription": "Ang format ng OpenAI ay isinalin sa katutubong format ng provider", + "providerResponse": "Tugon ng Provider", + "providerResponseRawDescription": "Ang raw na tugon mula sa provider API", + "providerResponseSseDescription": "Ang raw SSE stream mula sa provider API", + "unexpectedError": "May naganap na hindi inaasahang error", + "error": "Error", + "errorMessage": "Error: {message}", + "requestFailed": "Nabigo ang kahilingan", + "noTextExtracted": "(Walang na-extract na text)", + "liveMonitorDescriptionPrefix": "Nagpapakita ng mga kaganapan sa pagsasalin habang dumadaloy ang mga tawag sa API sa pamamagitan ng OmniRoute. Ang mga kaganapan ay nagmumula sa in-memory na buffer (nagre-reset sa pag-restart). Gamitin", + "liveMonitorDescriptionSuffix": ", o mga external na API call para makabuo ng mga event." + }, + "usage": { + "title": "Paggamit", + "loggerTab": "Magtotroso", + "proxyTab": "Proxy", + "budgetManagement": "Pamamahala ng Badyet", + "budgetSaved": "Na-save ang mga limitasyon sa badyet", + "budgetSaveFailed": "Nabigong i-save ang badyet", + "loadingBudgetData": "Nilo-load ang data ng badyet...", + "noApiKeysTitle": "Walang API Keys", + "noApiKeysDescription": "Magdagdag muna ng mga API key para mag-set up ng mga limitasyon sa badyet.", + "apiKey": "API Key", + "todaysSpend": "Gastos Ngayon", + "thisMonth": "Ngayong Buwan", + "setLimits": "Itakda ang mga Limitasyon", + "dailyLimitUsd": "Pang-araw-araw na Limitasyon (USD)", + "monthlyLimitUsd": "Buwanang Limitasyon (USD)", + "warningThresholdPercent": "Threshold ng Babala (%)", + "dailyLimitPlaceholder": "hal. 5.00", + "monthlyLimitPlaceholder": "hal. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "I-save ang Mga Limitasyon", + "budgetOk": "OK ang Badyet — {remaining} ang natitira", + "budgetExceeded": "Lumampas sa badyet — maaaring ma-block ang mga kahilingan", + "totalRequests": "Kabuuang mga kahilingan", + "noDataYet": "Wala pang data", + "latency": "Latency", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Prompt Cache", + "systemHealth": "Kalusugan ng System", + "entries": "Mga entry", + "activeCount": "{count} aktibo", + "openCircuitBreakersDetected": "May nakitang mga bukas na circuit breaker", + "hitRate": "Hit Rate", + "hitsMisses": "Mga Hit / Miss", + "circuitBreakers": "Mga Circuit Breaker", + "lockedIPs": "Mga naka-lock na IP", + "lockoutsAutoRefreshHint": "Mga lock ng limitasyon sa rate ng bawat modelo • Auto-refresh ng 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} ang natitira", + "howItWorks": "Paano Ito Gumagana", + "howItWorksSubtitle": "Alamin kung paano pinapatunayan ng mga pagsusuri ang iyong mga tugon sa LLM", + "define": "Tukuyin", + "defineStepDescription": "Gumawa ng mga test case na may mga input prompt at inaasahang output na pamantayan gamit ang mga diskarte tulad ng contains, regex, o eksaktong tugma.", + "run": "Takbo", + "runStepDescription": "Magsagawa ng mga pagsubok na kaso laban sa iyong mga LLM na endpoint sa pamamagitan ng OmniRoute. Ang bawat kaso ay ipinadala bilang isang tunay na kahilingan sa API.", + "evaluate": "Suriin", + "evaluateStepDescription": "Inihahambing ang mga tugon ayon sa inaasahang pamantayan. Tingnan ang pass/fail para sa bawat kaso na may mga sukatan ng latency at detalyadong feedback.", + "evalSuites": "Mga Suite sa Pagsusuri", + "evalSuitesHint": "Mag-click ng suite para tingnan ang mga test case, pagkatapos ay tumakbo para suriin ang iyong mga LLM endpoint", + "evalsLoading": "Nilo-load ang mga eval suite...", + "noEvalSuitesFound": "Walang Nahanap na Eval Suites", + "noEvalSuitesDescription": "Maaaring tukuyin ang mga Eval suite sa pamamagitan ng API o sa code. Sinusubukan nila ang mga output ng modelo laban sa mga inaasahang resulta gamit ang mga diskarte tulad ng contains, regex, eksaktong tugma, at mga custom na function.", + "columnCase": "Kaso", + "columnStatus": "Katayuan", + "columnLatency": "Latency", + "columnDetails": "Mga Detalye", + "columnModel": "Modelo", + "columnStrategy": "Diskarte", + "columnExpected": "Inaasahan", + "statsSuites": "Mga suite", + "statsTestCases": "Mga Test Case", + "statsModels": "Mga modelo", + "statsCoverage": "Saklaw", + "statsStrategiesCount": "{count} diskarte", + "evaluationStrategies": "Mga Istratehiya sa Pagsusuri", + "modelsUnderTest": "Mga Modelong Sinusuri", + "searchSuitesPlaceholder": "Maghanap ng mga suite...", + "passSuffix": "pumasa", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Patakbuhin mo si Eval", + "runningProgress": "Tumatakbo {current}/{total}...", + "passRate": "rate ng pagpasa", + "summaryBreakdown": "{passed} nakapasa · {failed} nabigo · {total} kabuuan", + "passedIconLabel": "✅ Nakapasa", + "failedIconLabel": "❌ Nabigo", + "detailsContains": "Naglalaman ng: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Inaasahan: \"{expected}\"", + "noResultsYet": "Wala pang resulta", + "testCasesCount": "Mga Test Case ({count})", + "noTestCasesDefined": "Walang tinukoy na mga kaso ng pagsubok", + "runEvalHint": "I-click ang \"Run Eval\" para isagawa ang lahat ng kaso laban sa iyong LLM endpoint. Ang bawat pagsubok ay nagpapadala ng isang tunay na kahilingan sa pamamagitan ng OmniRoute.", + "notifyNoTestCases": "Walang tinukoy na kaso ng pagsubok para sa suite na ito", + "notifyAllCasesPassed": "Lahat ng {total} kaso ay pumasa ✅", + "notifySomeCasesFailed": "{passed}/{total} nakapasa, {failed} nabigo", + "notifyEvalRunFailed": "Nabigo si Eval run", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "Mga Pagsusuri ng Modelo", + "evalsHeroDescription": "Subukan at patunayan ang iyong mga LLM na endpoint sa pamamagitan ng pagpapatakbo ng mga paunang natukoy na evaluation suite. Naglalaman ang bawat suite ng mga test case na nagpapadala ng mga totoong prompt sa pamamagitan ng OmniRoute at naghahambing ng mga tugon sa inaasahang pamantayan — tumutulong sa iyong makakita ng mga regression, maghambing ng mga modelo, at matiyak ang kalidad ng pagtugon sa mga provider.", + "qualityValidation": "Pagpapatunay ng Kalidad", + "modelComparison": "Paghahambing ng Modelo", + "regressionDetection": "Regression Detection", + "latencyBenchmarks": "Mga Latency Benchmark", + "modelLockouts": "Mga Modelong Lockout", + "noLockouts": "Walang mga modelo na kasalukuyang naka-lock", + "activeSessions": "Mga Aktibong Sesyon", + "noSessions": "Walang aktibong session", + "sessionsHint": "Lumilitaw ang mga session habang dumadaloy ang mga kahilingan sa proxy", + "sessionsTrackedHint": "Sinusubaybayan sa pamamagitan ng paghiling ng fingerprinting • Auto-refresh 5s", + "session": "Sesyon", + "age": "Edad", + "requests": "Mga kahilingan", + "connection": "Koneksyon", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Mga Limitasyon ng Provider", + "noProviders": "Walang Nakakonektang Provider", + "connectProvidersForQuota": "Kumonekta sa mga provider gamit ang OAuth upang subaybayan ang iyong mga limitasyon sa quota ng API at paggamit.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(na-filter mula sa {count})", + "autoRefresh": "Auto-refresh", + "refreshAll": "I-refresh Lahat", + "loadingQuotas": "Naglo-load...", + "account": "Account", + "modelQuotas": "Mga Modelong Quota", + "lastUsed": "Huling Ginamit", + "actions": "Mga aksyon", + "refreshQuota": "I-refresh ang quota", + "today": "Ngayong araw", + "tomorrow": "Bukas", + "dayTimeFormat": "{day}, {time}", + "inDuration": "sa {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Raw plan: {plan}", + "noPlanFromProvider": "Walang plano mula sa provider", + "noQuotaData": "Walang data ng quota", + "noQuotaDataAvailable": "Walang available na data ng quota", + "noAccountsForTierFilter": "Walang nahanap na account para sa tier filter", + "tierAll": "Lahat", + "tierEnterprise": "Enterprise", + "tierTeam": "Koponan", + "tierBusiness": "negosyo", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Dagdag pa", + "tierFree": "Libre", + "tierUnknown": "Hindi alam" + }, + "modals": { + "waitingAuth": "Naghihintay ng Awtorisasyon", + "verificationUrl": "URL ng pagpapatunay", + "yourCode": "Ang iyong Code", + "remoteAccess": "Malayong pag-access:", + "connectedSuccess": "Matagumpay na Nakakonekta!", + "connectionFailed": "Nabigo ang Koneksyon", + "chooseAuthMethod": "Piliin ang iyong paraan ng pagpapatunay:", + "awsBuilderId": "AWS Builder ID", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "Google Account", + "githubAccount": "GitHub Account", + "importToken": "Mag-import ng Token", + "pasteToken": "I-paste ang refresh token mula sa Kiro IDE.", + "awsRegion": "Rehiyon ng AWS", + "autoDetecting": "Awtomatikong pagtukoy ng mga token...", + "readingFromCache": "Pagbabasa mula sa AWS SSO cache", + "readingFromCursor": "Pagbabasa mula sa database ng Cursor IDE", + "initializing": "Sinisimulan...", + "pricingConfig": "Configuration ng Pagpepresyo", + "loadingPricing": "Nilo-load ang data ng pagpepresyo...", + "pricingRatesFormat": "Format ng Mga Rate ng Pagpepresyo", + "noPricingData": "Walang available na data ng pagpepresyo", + "noModelsFound": "Walang nakitang mga modelo" + }, + "loggers": { + "allProviders": "Lahat ng Provider", + "allModels": "Lahat ng Modelo", + "allAccounts": "Lahat ng Account", + "allApiKeys": "Lahat ng API Keys", + "allTypes": "Lahat ng Uri", + "allLevels": "Lahat ng Antas", + "modelAZ": "Model A-Z", + "modelZA": "Modelo Z-A", + "loadingLogs": "Naglo-load ng mga log...", + "loadingProxyLogs": "Nilo-load ang mga proxy log...", + "noLogEntries": "Walang nakitang mga entry sa log", + "noPayloadData": "Walang available na data ng payload para sa log entry na ito.", + "proxyEvent": "Kaganapan ng Proxy", + "proxy": "Proxy", + "level": "Antas", + "directNative": "Direkta (katutubo)", + "combo": "Combo", + "inputTokens": "ako:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Pangkalahatang-ideya ng Paggamit", + "outputTokens": "Mga Token ng Output", + "totalCost": "Kabuuang Gastos", + "usageByModel": "Paggamit ayon sa Modelo", + "usageByAccount": "Paggamit ayon sa Account", + "failedToLoad": "Nabigong i-load ang mga istatistika ng paggamit.", + "tokenHealth": "Token Health", + "totalOAuth": "Kabuuang OAuth", + "healthy": "Malusog", + "warning": "Babala", + "errored": "Nagkamali", + "lastCheck": "Huling tseke", + "noData": "Walang data", + "share": "Ibahagi", + "unableToLoad": "Hindi ma-load ang mga sukatan ng system", + "product": "produkto", + "resources": "Mga mapagkukunan", + "company": "kumpanya" + }, + "auth": { + "welcome": "Maligayang pagdating", + "signIn": "Mag-sign in", + "enterPassword": "Ilagay ang iyong password upang magpatuloy", + "password": "Password", + "unifiedProxy": "Pinag-isang AI API Proxy", + "unifiedAiApiProxy": "Pinag-isang AI API Proxy", + "unifiedAiApiProxyDesc": "Iruta ang mga kahilingan sa maraming AI provider sa pamamagitan ng iisang endpoint. Naka-built in ang load balancing, failover, at pagsubaybay sa paggamit.", + "passwordNotEnabled": "Hindi pinagana ang proteksyon ng password", + "loading": "Naglo-load...", + "invalidPassword": "Di-wastong password", + "errorOccurredRetry": "May naganap na error. Pakisubukang muli.", + "configureInstance": "I-configure natin ang iyong OmniRoute instance", + "runOnboardingWizard": "Patakbuhin ang onboarding wizard upang i-set up ang iyong password at ikonekta ang iyong unang AI provider.", + "startOnboarding": "Simulan ang Onboarding", + "secureYourInstance": "I-secure ang Iyong Instance", + "setPasswordDescription": "Magtakda ng password upang protektahan ang iyong dashboard at i-secure ang iyong mga endpoint ng API mula sa hindi awtorisadong pag-access.", + "configurePassword": "I-configure ang Password", + "continue": "Magpatuloy", + "windowWillClose": "Awtomatikong magsasara ang window na ito...", + "closeTabNow": "Maaari mong isara ang tab na ito ngayon.", + "copyUrlManual": "Mangyaring kopyahin ang URL mula sa address bar at i-paste ito sa application.", + "accessDeniedDescription": "Wala kang pahintulot na i-access ang mapagkukunang ito. Suriin ang iyong API key o makipag-ugnayan sa administrator.", + "goToDashboard": "Pumunta sa Dashboard", + "featureMultiProviderTitle": "Multi-Provider", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google, at higit pa", + "featureLoadBalancingTitle": "Pagbabalanse ng Load", + "featureLoadBalancingDesc": "Ipamahagi ang mga kahilingan nang matalino", + "featureUsageTrackingTitle": "Pagsubaybay sa Paggamit", + "featureUsageTrackingDesc": "Subaybayan ang mga gastos at token", + "resetPassword": "I-reset ang Password", + "resetDescription": "Pumili ng paraan para mabawi ang access sa iyong dashboard", + "stopServer": "Itigil ang OmniRoute server", + "processing": "Pinoproseso...", + "pleaseWait": "Mangyaring maghintay habang kinukumpleto namin ang pahintulot.", + "authSuccess": "Tagumpay ang Awtorisasyon!", + "copyUrl": "Kopyahin ang URL na ito", + "accessDenied": "Tinanggihan ang Access", + "methodCliTitle": "Paraan 1: I-reset ang CLI", + "methodCliDescription": "Patakbuhin ang sumusunod na command sa server kung saan tumatakbo ang OmniRoute:", + "methodCliHint": "Ipo-prompt ka nitong magtakda ng bagong password. Dapat ihinto muna ang server.", + "methodManualTitle": "Paraan 2: Manu-manong Pag-reset", + "methodManualDescription": "Tanggalin ang password mula sa database at magtakda ng bago sa startup:", + "setPasswordInYour": "Magtakda ng bagong password sa iyong", + "fileLabelSuffix": "file:", + "newPasswordPlaceholder": "your_new_password", + "deleteSettingsFile": "Tanggalin", + "orRemovePasswordHashField": "o alisin ang field ng passwordHash", + "restartServerWithNewPassword": "I-restart ang server - gagamitin nito ang bagong password", + "backToLogin": "Bumalik sa Login", + "forgotPassword": "Nakalimutan ang password?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Mag-navigate sa bahay", + "toggleMenu": "I-toggle ang menu", + "featuresLink": "Mga tampok", + "docsLink": "Docs", + "github": "GitHub", + "versionLive": "v1.0 ay live na ngayon", + "oneEndpoint": "Isang Endpoint para sa", + "allProviders": "Lahat ng AI Provider", + "heroDescription": "AI endpoint proxy na may web dashboard - Isang JavaScript port ng CLIProxyAPI. Gumagana nang walang putol sa Claude Code, OpenAI Codex, Cline, RooCode, at iba pang mga tool sa CLI.", + "getStarted": "Magsimula", + "viewOnGithub": "Tingnan sa GitHub", + "powerfulFeatures": "Napakahusay na Mga Tampok", + "featuresSubtitle": "Lahat ng kailangan mo para pamahalaan ang iyong imprastraktura ng AI sa isang lugar, na binuo para sa sukat.", + "featureUnifiedEndpointTitle": "Pinag-isang Endpoint", + "featureUnifiedEndpointDesc": "I-access ang lahat ng provider sa pamamagitan ng iisang standard API URL.", + "featureEasySetupTitle": "Madaling Setup", + "featureEasySetupDesc": "Bumangon at tumakbo sa loob ng ilang minuto gamit ang npx command.", + "featureModelFallbackTitle": "Model Fallback", + "featureModelFallbackDesc": "Awtomatikong ilipat ang mga provider sa pagkabigo o mataas na latency.", + "featureUsageTrackingTitle": "Pagsubaybay sa Paggamit", + "featureUsageTrackingDesc": "Detalyadong analytics at pagsubaybay sa gastos sa lahat ng modelo.", + "featureOAuthApiKeysTitle": "Mga OAuth at API Key", + "featureOAuthApiKeysDesc": "Ligtas na pamahalaan ang mga kredensyal sa isang vault.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncDesc": "I-sync kaagad ang iyong mga configuration sa mga device.", + "featureCliSupportTitle": "Suporta sa CLI", + "featureCliSupportDesc": "Gumagana sa Claude Code, Codex, Cline, Cursor, at higit pa.", + "featureDashboardTitle": "Dashboard", + "featureDashboardDesc": "Visual dashboard para sa real-time na pagsusuri sa trapiko.", + "howItWorks": "Paano Gumagana ang OmniRoute", + "howItWorksDescription": "Walang putol na dumadaloy ang data mula sa iyong aplikasyon sa pamamagitan ng aming intelligent na layer ng pagruruta patungo sa pinakamahusay na provider para sa trabaho.", + "howItWorksStep1Title": "1. Mga CLI at SDK", + "howItWorksStep1Description": "Magsisimula ang iyong mga kahilingan sa iyong mga paboritong tool o sa aming pinag-isang SDK. Baguhin lang ang base URL.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Sinusuri ng aming engine ang prompt, sinusuri ang kalusugan ng provider, at mga ruta para sa pinakamababang latency o gastos.", + "howItWorksStep3Title": "3. Mga Tagabigay ng AI", + "howItWorksStep3Description": "Ang kahilingan ay agad na tinutupad ng OpenAI, Anthropic, Gemini, o iba pa.", + "getStartedIn30Seconds": "Magsimula sa 30 Segundo", + "getStartedDescription": "I-install ang OmniRoute, i-configure ang iyong mga provider sa pamamagitan ng web dashboard, at simulan ang pagruruta ng mga kahilingan sa AI.", + "installOmniRoute": "I-install ang OmniRoute", + "installStepDescription": "Patakbuhin ang npx command upang masimulan agad ang server", + "openDashboard": "Buksan ang Dashboard", + "openDashboardStepDescription": "I-configure ang mga provider at API key sa pamamagitan ng web interface", + "routeRequests": "Mga Kahilingan sa Ruta", + "routeRequestsStepDescription": "Ituro ang iyong mga tool sa CLI sa {endpoint}", + "terminal": "terminal", + "copy": "Kopyahin", + "copied": "✓ Kinopya", + "startingOmniRoute": "Sinisimulan ang OmniRoute...", + "serverRunningOnLabel": "Tumatakbo ang server", + "dashboardLabel": "Dashboard", + "readyToRoute": "Handa nang ruta! ✓", + "configureProvidersNote": "📝 I-configure ang mga provider sa dashboard o gumamit ng mga variable ng kapaligiran", + "dataLocation": "Lokasyon ng Data:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "produkto", + "dashboardLink": "Dashboard", + "changelog": "Changelog", + "resources": "Mga mapagkukunan", + "documentation": "Dokumentasyon", + "npm": "NPM", + "legal": "Legal", + "mitLicense": "Lisensya ng MIT", + "footerTagline": "Ang pinag-isang endpoint para sa pagbuo ng AI. Ikonekta, iruta, at pamahalaan ang iyong mga AI provider nang madali.", + "copyright": "© {year} OmniRoute. Lahat ng karapatan ay nakalaan.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Cursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropiko", + "flowProviderGemini": "Gemini", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "Ang interactive na diagram ay makikita sa desktop", + "ctaTitle": "Handa nang Pasimplehin ang Iyong AI Infrastructure?", + "ctaDescription": "Sumali sa mga developer na nag-streamline ng kanilang mga pagsasama ng AI sa OmniRoute. Open source at malayang magsimula.", + "startFree": "Magsimula nang Libre", + "readDocumentation": "Basahin ang Dokumentasyon" + }, + "docs": { + "title": "Dokumentasyon", + "quickStart": "Mabilis na Pagsisimula", + "features": "Mga tampok", + "supportedProviders": "Mga Sinusuportahang Provider", + "supportedProvidersToc": "Mga provider", + "commonUseCases": "Mga Karaniwang Paggamit", + "clientCompatibility": "Pagkakatugma ng Kliyente", + "apiReference": "Sanggunian ng API", + "method": "Pamamaraan", + "path": "Daan", + "notes": "Mga Tala", + "modelPrefixes": "Mga Prefix ng Modelo", + "prefix": "Prefix", + "troubleshooting": "Pag-troubleshoot", + "supportsChat": "Sinusuportahan ang parehong chat at mga tugon na endpoint.", + "oauthAutoRefresh": "OAuth na koneksyon na may awtomatikong pag-refresh ng token.", + "fullStreaming": "Buong suporta sa streaming para sa lahat ng mga modelo.", + "docsLabel": "Docs", + "docsHeroDescription": "AI gateway para sa mga multi-provider na LLM. Isang endpoint para sa OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, at 20+ pang provider.", + "openDashboard": "Buksan ang Dashboard", + "endpointPage": "Pahina ng Endpoint", + "github": "GitHub", + "reportIssue": "Iulat ang Isyu", + "onThisPage": "Sa pahinang ito", + "documentationVersion": "Dokumentasyon - v{version}", + "quickStartStep1Title": "1. I-install at patakbuhin", + "quickStartStep1Prefix": "Takbo", + "quickStartStep1Middle": "o i-clone mula sa GitHub at patakbuhin", + "quickStartStep2Title": "2. Lumikha ng API key", + "quickStartStep2Text": "Pumunta sa Endpoint -> Registered Keys. Bumuo ng isang susi sa bawat kapaligiran.", + "quickStartStep3Title": "3. Ikonekta ang mga provider", + "quickStartStep3Text": "Magdagdag ng mga provider account sa pamamagitan ng OAuth login, API key, o free-tier na auto-connect.", + "quickStartStep4Title": "4. Itakda ang client base URL", + "quickStartStep4Prefix": "Ituro ang iyong IDE o API client sa", + "quickStartStep4Suffix": "Gamitin ang prefix ng provider, halimbawa", + "featureRoutingTitle": "Pagruruta ng Multi-Provider", + "featureRoutingText": "Iruta ang mga kahilingan sa 30+ AI provider sa pamamagitan ng isang endpoint na katugma sa OpenAI. Sinusuportahan ang chat, mga tugon, audio, at image API.", + "featureCombosTitle": "Combos at Balanse", + "featureCombosText": "Gumawa ng mga combo ng modelo na may mga fallback chain at mga diskarte sa pagbabalanse: round-robin, priority, random, hindi gaanong ginagamit, at cost-optimized.", + "featureUsageTitle": "Paggamit at Pagsubaybay sa Gastos", + "featureUsageText": "Real-time na pagbibilang ng token, pagkalkula ng gastos sa bawat provider/modelo, at detalyadong breakdown ng paggamit ayon sa API key at account.", + "featureAnalyticsTitle": "Dashboard ng Analytics", + "featureAnalyticsText": "Visual analytics na may mga chart para sa mga kahilingan, token, error, latency, gastos, at kasikatan ng modelo sa paglipas ng panahon.", + "featureHealthTitle": "Pagsubaybay sa Kalusugan", + "featureHealthText": "Mga live na pagsusuri sa kalusugan, status ng provider, mga estado ng circuit breaker, at awtomatikong pagtukoy ng limitasyon sa rate na may exponential backoff.", + "featureCliTitle": "CLI Tools", + "featureCliText": "Pamahalaan ang mga configuration ng IDE, pag-export/pag-import ng mga backup, pagtuklas ng mga profile ng codex, at pag-configure ng mga setting mula sa dashboard.", + "featureSecurityTitle": "Seguridad at Mga Patakaran", + "featureSecurityText": "Pagpapatotoo ng key ng API, pag-filter ng IP, agarang pagbabantay sa iniksyon, mga patakaran sa domain, pamamahala ng session, at pag-log ng audit.", + "featureCloudSyncTitle": "Cloud Sync", + "featureCloudSyncText": "I-sync ang iyong configuration sa Cloudflare Workers para sa malayuang pag-access gamit ang mga naka-encrypt na kredensyal at awtomatikong failover.", + "providersAcrossConnectionTypes": "{count} provider sa tatlong uri ng koneksyon.", + "manageProviders": "Pamahalaan ang mga Provider", + "providersCount": "{count} provider", + "providerTypeFree": "Libreng Tier", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API Key", + "useCaseSingleEndpointTitle": "Isang endpoint para sa maraming provider", + "useCaseSingleEndpointText": "Ituro ang mga kliyente sa isang base URL at ruta ayon sa prefix ng modelo (halimbawa: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback at paglipat ng modelo na may mga combo", + "useCaseFallbackText": "Gumawa ng mga combo model sa Dashboard at panatilihing stable ang config ng kliyente habang ang mga provider ay umiikot sa loob.", + "useCaseUsageVisibilityTitle": "Pagpapakita ng paggamit, gastos at pag-debug", + "useCaseUsageVisibilityText": "Subaybayan ang mga token at gastos ayon sa provider, account, at API key sa mga tab na Paggamit at Analytics.", + "clientCherryStudioTitle": "Cherry Studio", + "baseUrlLabel": "Base URL", + "chatEndpointLabel": "Endpoint ng chat", + "modelRecommendationLabel": "Rekomendasyon ng modelo: tahasang prefix", + "clientCodexTitle": "Mga Modelong Copilot ng Codex / GitHub", + "clientCodexBullet1": "Gumamit ng mga model ID na may", + "clientCodexBullet2": "Ang mga modelo ng Codex-family ay nag-auto-route sa", + "clientCodexBullet3": "Nagpapatuloy ang mga modelong hindi Codex", + "clientCursorTitle": "Cursor IDE", + "clientCursorBullet1": "Gamitin", + "clientCursorBullet1Suffix": "prefix para sa mga modelo ng Cursor.", + "clientCursorBullet2": "Koneksyon sa OAuth - mag-login mula sa pahina ng Mga Provider.", + "clientClaudeTitle": "Claude Code / Antigravity", + "clientClaudeBullet1Prefix": "Gamitin", + "clientClaudeBullet1Middle": "(Claude) o", + "clientClaudeBullet1Suffix": "(Antigravity) prefix.", + "endpointChatNote": "OpenAI-compatible chat endpoint (default).", + "endpointResponsesNote": "Endpoint ng Responses API (Codex, o-series).", + "endpointModelsNote": "Catalog ng modelo para sa lahat ng konektadong provider.", + "endpointAudioNote": "Audio transcription (Deepgram, AssemblyAI).", + "endpointImagesNote": "Pagbuo ng larawan (NanoBanana).", + "endpointRewriteChatNote": "Isulat muli ang helper para sa mga kliyenteng walang /v1.", + "endpointRewriteResponsesNote": "Isulat muli ang helper para sa Mga Tugon na walang /v1.", + "endpointRewriteModelsNote": "Isulat muli ang helper para sa pagtuklas ng modelo nang walang /v1.", + "modelPrefixesDescriptionStart": "Gamitin ang prefix ng provider bago ang pangalan ng modelo para mag-ruta sa isang partikular na provider. Halimbawa:", + "modelPrefixesDescriptionEnd": "mga ruta sa GitHub Copilot.", + "provider": "Provider", + "type": "Uri", + "troubleshootingModelRouting": "Kung nabigo ang kliyente sa pagruruta ng modelo, gumamit ng tahasang provider/modelo (halimbawa: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Kung nakatanggap ka ng hindi malinaw na mga error sa modelo, pumili ng prefix ng provider sa halip na isang hubad na ID ng modelo.", + "troubleshootingCodexFamily": "Para sa mga modelo ng pamilya ng GitHub Codex, panatilihing gh/ ang modelo; awtomatikong pinipili /tugon ng router.", + "troubleshootingTestConnection": "Gamitin ang Dashboard > Mga Provider > Subukan ang Koneksyon bago subukan mula sa mga IDE o external na kliyente.", + "troubleshootingCircuitBreaker": "Kung ipinapakita ng provider na bukas ang circuit breaker, hintayin ang cooldown o tingnan ang page ng Health para sa mga detalye.", + "troubleshootingOAuth": "Para sa mga provider ng OAuth, muling i-authenticate kung mag-e-expire ang mga token. Suriin ang tagapagpahiwatig ng katayuan ng provider card." + }, + "legal": { + "privacyPolicy": "Patakaran sa Privacy", + "termsOfService": "Mga Tuntunin ng Serbisyo", + "providerConfigurations": "Mga pagsasaayos ng provider", + "apiKeys": "Mga API key", + "usageLogs": "Mga log ng paggamit", + "applicationSettings": "Mga setting ng application", + "viewExportAnalytics": "Tingnan at i-export ang analytics ng paggamit", + "clearHistory": "I-clear ang kasaysayan ng paggamit anumang oras", + "configureRetention": "I-configure ang mga patakaran sa pagpapanatili ng log", + "backupRestore": "I-back up at i-restore ang iyong database", + "privacyMetadataTitle": "Patakaran sa Privacy | OmniRoute", + "privacyMetadataDescription": "Patakaran sa privacy para sa proxy router ng OmniRoute AI API.", + "termsMetadataTitle": "Mga Tuntunin ng Serbisyo | OmniRoute", + "termsMetadataDescription": "Mga tuntunin ng serbisyo para sa proxy router ng OmniRoute AI API.", + "backToHome": "Bumalik sa bahay", + "lastUpdated": "Huling na-update: {date}", + "policyLastUpdatedDate": "Pebrero 13, 2026", + "listSeparator": "-", + "questionsVisit": "Mga tanong? Bisitahin ang aming", + "githubRepository": "GitHub repository", + "privacySection1Title": "1. Lokal-Unang Arkitektura", + "privacySection1Text": "Ang OmniRoute ay idinisenyo bilang isang local-first application. Ang lahat ng pagproseso at pag-iimbak ng data ay ganap na nangyayari sa iyong makina. Walang sentralisadong server na kumukolekta ng iyong impormasyon.", + "privacySection2Title": "2. Data na Iniimbak Namin", + "privacyDataStoredIn": "Ang sumusunod na data ay lokal na nakaimbak sa", + "privacyDataProviderConfigurationsDesc": "mga URL ng koneksyon, mga uri ng provider, at mga setting ng priyoridad", + "privacyDataApiKeysDesc": "naka-encrypt at lokal na nakaimbak para sa pagpapatotoo sa mga tagapagbigay ng AI", + "privacyDataUsageLogsDesc": "bilang ng kahilingan, paggamit ng token, pangalan ng modelo, timestamp, at oras ng pagtugon", + "privacyDataApplicationSettingsDesc": "mga kagustuhan sa tema, diskarte sa pagruruta, at mga pagsasaayos ng combo", + "privacySection3Title": "3. Walang Telemetry", + "privacySection3Text": "Ang OmniRoute ay hindi nangongolekta ng telemetry, analytics, o mga ulat ng pag-crash. Walang data na ipinapadala sa amin o anumang third party. Ang iyong mga pattern ng paggamit, mga tawag sa API, at mga configuration ay nananatiling ganap na pribado.", + "privacySection4Title": "4. Mga Third-Party na AI Provider", + "privacySection4Text": "Kapag gumawa ka ng mga tawag sa API sa pamamagitan ng OmniRoute, ipapasa ang iyong mga kahilingan sa mga AI provider na iyong na-configure (halimbawa: OpenAI, Anthropic, Google). Ang mga provider na ito ay may sariling mga patakaran sa privacy na namamahala sa kung paano nila pinangangasiwaan ang iyong data. Mangyaring suriin:", + "privacyOpenAiPolicy": "Patakaran sa Privacy ng OpenAI", + "privacyAnthropicPolicy": "Patakaran sa Privacy ng Anthropic", + "privacyGooglePolicy": "Patakaran sa Privacy ng Google", + "privacySection5Title": "5. Cloud Sync (Opsyonal)", + "privacySection5Text": "Kung ie-enable mo ang opsyonal na feature ng cloud sync, maaaring mailipat ang mga configuration ng provider at API key sa isang naka-configure na cloud endpoint. Ang tampok na ito ay hindi pinagana bilang default at nangangailangan ng tahasang pag-opt-in.", + "privacySection6Title": "6. Pag-log", + "privacyLoggingIntro": "Maaaring i-configure ang mga log ng kahilingan sa pamamagitan ng mga setting ng dashboard. Maaari mong:", + "privacySection7Title": "7. Ang iyong mga Karapatan", + "privacySection7TextStart": "Dahil ang lahat ng data ay lokal na nakaimbak, mayroon kang ganap na kontrol. Maaari mong tanggalin ang iyong data anumang oras sa pamamagitan ng pag-alis ng", + "privacySection7TextEnd": "direktoryo o gamit ang database backup at restore na mga feature sa dashboard.", + "termsSection1Title": "1. Pangkalahatang-ideya", + "termsSection1Text": "Ang OmniRoute ay isang local-first AI API proxy router na ganap na gumagana sa iyong makina. Nagruruta ito ng mga kahilingan sa maraming AI provider na may load balancing, failover, at pagsubaybay sa paggamit.", + "termsSection2Title": "2. Mga Responsibilidad ng Gumagamit", + "termsResponsibilityApiKeys": "Ikaw ang tanging responsable para sa pamamahala ng iyong sariling mga API key at kredensyal para sa mga third-party na tagapagbigay ng AI (OpenAI, Anthropic, Google, atbp.).", + "termsResponsibilityCompliance": "Dapat kang sumunod sa mga tuntunin ng serbisyo ng bawat tagapagbigay ng AI na ang API ay ina-access mo sa pamamagitan ng OmniRoute.", + "termsResponsibilitySecurity": "Responsable ka para sa seguridad ng iyong lokal na pag-install ng OmniRoute, kabilang ang pagtatakda ng password at paghihigpit sa pag-access sa network.", + "termsSection3Title": "3. Paano Ito Gumagana", + "termsSection3Text": "Ang OmniRoute ay gumaganap bilang isang intermediary proxy. Ang mga tawag sa API na ipinadala sa OmniRoute ay isinalin at ipinapasa sa iyong na-configure na mga provider ng AI. Hindi binabago ng OmniRoute ang nilalaman ng iyong mga kahilingan o tugon sa kabila ng kinakailangang pagsasalin ng protocol.", + "termsSection4Title": "4. Pangangasiwa ng Data", + "termsDataStoredLocally": "Ang lahat ng data ay lokal na nakaimbak sa iyong makina sa isang database ng SQLite.", + "termsNoTransmission": "Ang OmniRoute ay hindi nagpapadala ng anumang data sa mga panlabas na server maliban kung tahasan mong pinagana ang mga feature ng cloud sync.", + "termsDataLocationText": "Ang mga log ng paggamit, API key, at configuration ay naka-store sa", + "termsSection5Title": "5. Disclaimer", + "termsSection5Text": "Ang OmniRoute ay ibinigay \"as is\" nang walang anumang uri ng warranty. Hindi kami mananagot para sa anumang mga gastos na natamo sa pamamagitan ng paggamit ng API, pagkaantala ng serbisyo, o pagkawala ng data. Palaging panatilihin ang mga backup ng iyong configuration.", + "termsSection6Title": "6. Open Source", + "termsSection6Text": "Ang OmniRoute ay open-source na software. Malaya kang suriin, baguhin, at ipamahagi ito sa ilalim ng mga tuntunin ng lisensya nito." + } +} diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json new file mode 100644 index 0000000000..a2ca287b77 --- /dev/null +++ b/src/i18n/messages/pl.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Zapisz", + "cancel": "Anuluj", + "delete": "Usuń", + "loading": "Ładowanie...", + "error": "Wystąpił błąd", + "success": "Sukces", + "confirm": "Czy jesteś pewien?", + "refresh": "Odśwież", + "close": "Zamknij", + "add": "Dodaj", + "edit": "Edytuj", + "search": "Szukaj", + "back": "Powrót", + "next": "Następny", + "submit": "Prześlij", + "reset": "Zresetuj", + "copy": "Kopiuj", + "copied": "Skopiowano!", + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "active": "Aktywny", + "inactive": "Nieaktywny", + "noData": "Brak dostępnych danych", + "configure": "Skonfiguruj", + "manage": "Zarządzaj", + "name": "Imię", + "actions": "Działania", + "status": "Stan", + "type": "Wpisz", + "model": "Modelka", + "models": "modele", + "provider": "Dostawca", + "account": "Konto", + "time": "Czas", + "details": "Szczegóły", + "created": "Utworzono", + "lastUsed": "Ostatnio używany", + "loadMore": "Załaduj więcej", + "noResults": "Nie znaleziono żadnych wyników", + "reloadPage": "Załaduj ponownie stronę", + "connected": "Połączono", + "disconnected": "Rozłączony", + "notConfigured": "Nie skonfigurowano", + "testConnection": "Połączenie testowe", + "enable": "Włącz", + "disable": "Wyłącz", + "columns": "Kolumny", + "newest": "Najnowszy", + "oldest": "Najstarszy", + "all": "Wszystko", + "none": "Żadne", + "yes": "Tak", + "no": "Nie", + "warning": "Ostrzeżenie", + "note": "Uwaga", + "free": "Bezpłatny", + "skipToContent": "Przejdź do treści" + }, + "sidebar": { + "home": "Dom", + "dashboard": "Pulpit nawigacyjny", + "providers": "Dostawcy", + "combos": "Kombinacje", + "usage": "Użycie", + "analytics": "Analityka", + "costs": "Koszty", + "health": "Zdrowie", + "limits": "Limity i kwoty", + "cliTools": "Narzędzia interfejsu wiersza polecenia", + "settings": "Ustawienia", + "translator": "Tłumacz", + "docs": "Dokumenty", + "issues": "Problemy", + "endpoint": "Punkt końcowy", + "apiManager": "Menedżer API", + "logs": "Dzienniki", + "auditLog": "Dziennik audytu", + "shutdown": "Wyłączenie", + "restart": "Uruchom ponownie", + "shutdownConfirm": "Wyłączyć OmniRoute?", + "restartConfirm": "Zrestartować OmniRoute?", + "version": "v{version}", + "debug": "Debuguj", + "system": "Systemu", + "help": "Pomoc", + "serverDisconnected": "Serwer odłączony", + "serverDisconnectedMsg": "Serwer proxy został zatrzymany lub uruchamia się ponownie.", + "expandSidebar": "Rozwiń pasek boczny", + "collapseSidebar": "Zwiń pasek boczny" + }, + "header": { + "logout": "Wyloguj się", + "language": "Język", + "providers": "Dostawcy", + "providerDescription": "Zarządzaj połączeniami dostawców AI", + "combos": "Kombinacje", + "comboDescription": "Kombinacje modeli z rezerwą", + "usage": "Wykorzystanie i analityka", + "usageDescription": "Monitoruj wykorzystanie interfejsu API, zużycie tokenów i dzienniki żądań", + "analytics": "Analityka", + "analyticsDescription": "Wykresy, trendy i spostrzeżenia dotyczące ocen", + "cliTools": "Narzędzia interfejsu wiersza polecenia", + "cliToolsDescription": "Skonfiguruj narzędzia CLI", + "home": "Dom", + "homeDescription": "Witamy w OmniRoute", + "endpoint": "Punkt końcowy", + "endpointDescription": "Konfiguracja punktu końcowego interfejsu API", + "settings": "Ustawienia", + "settingsDescription": "Zarządzaj swoimi preferencjami", + "openaiCompatible": "Kompatybilny z OpenAI", + "anthropicCompatible": "Kompatybilny z antropią" + }, + "home": { + "quickStart": "Szybki start", + "quickStartDesc": "Zacznij działać w 4 krokach. Łącz dostawców, kieruj modele, monitoruj wszystko.", + "fullDocs": "Pełna dokumentacja", + "step1Title": "1. Utwórz klucz API", + "step1Desc": "Przejdź do Endpoint -> Zarejestrowane klucze. Wygeneruj jeden klucz na środowisko.", + "step2Title": "2. Połącz dostawców", + "step2Desc": "Dodaj konta w Providers. Obsługuje OAuth, klucz API i bezpłatne poziomy.", + "step3Title": "3. Wskaż swojego klienta", + "step3Desc": "Ustaw podstawowy adres URL na {url} w swoim kliencie IDE lub API.", + "step4Title": "4. Monitoruj i optymalizuj", + "step4Desc": "Śledź tokeny, koszty i błędy w Dziennikach żądań i Analytics.", + "providersOverview": "Przegląd dostawców", + "configuredOf": "{configured} skonfigurowany z {total} dostępnych dostawców", + "noModelsAvailable": "Brak dostępnych modeli tego dostawcy.", + "configureFirst": "Najpierw skonfiguruj połączenie w {providers}", + "configureProvider": "Skonfiguruj dostawcę", + "modelAvailable": "Dostępny model {count}", + "modelsAvailable": "Dostępne modele {count}", + "connectionsActive": "{count} połączenie aktywne", + "connectionsActivePlural": "{count} aktywne połączenia", + "copyModelName": "Skopiuj nazwę modelu", + "documentation": "Dokumentacja", + "healthMonitor": "Monitor zdrowia", + "reportIssue": "Zgłoś problem", + "activeError": "{active} aktywny · {errors} błąd", + "oauthLabel": "OAuth", + "apiKeyLabel": "Klucz API", + "requestsShort": "{count} wymagania", + "providerModelsTitle": "{provider} - Modele", + "copiedModel": "Skopiowano: {model}", + "aliasLabel": "pseudonim" + }, + "analytics": { + "title": "Analityka", + "overviewDescription": "Monitoruj wzorce wykorzystania interfejsu API, zużycie tokenów, koszty i trendy aktywności u wszystkich dostawców i modeli.", + "evalsDescription": "Uruchom pakiety ewaluacyjne, aby przetestować i zweryfikować punkty końcowe LLM. Porównaj jakość modelu, wykryj regresje i porównaj opóźnienia.", + "overview": "Przegląd", + "evals": "Ewaluacje" + }, + "apiManager": { + "title": "Klucze API", + "createKey": "Utwórz klucz API", + "key": "Klucz", + "revokeKey": "Unieważnij klucz", + "revokeConfirm": "Czy na pewno chcesz unieważnić ten klucz API?", + "noKeys": "Nie ma jeszcze kluczy API", + "noKeysDesc": "Utwórz swój pierwszy klucz API, aby uwierzytelniać żądania kierowane do punktu końcowego", + "keyLabel": "Etykieta klucza", + "permissions": "Uprawnienia", + "expiresAt": "Wygasa", + "never": "Nigdy", + "revoke": "Odwołaj", + "showKey": "Pokaż klucz", + "hideKey": "Ukryj klucz", + "copyKey": "Skopiuj klucz API", + "allModels": "Wszystkie modele", + "selectedModels": "Wybrane modele", + "readOnly": "Tylko do odczytu", + "fullAccess": "Pełny dostęp", + "keyManagement": "Zarządzanie kluczami API", + "keyManagementDesc": "Twórz klucze API i zarządzaj nimi w celu uwierzytelniania żądań kierowanych do punktu końcowego", + "totalKeys": "Razem klucze", + "restricted": "Ograniczone", + "totalRequests": "Łączna liczba żądań", + "modelsAvailable": "Dostępne modele", + "registeredKeys": "Zarejestrowane klucze", + "keysRegistered": "Zarejestrowano {count} kluczy", + "keyRegistered": "Zarejestrowano klucz {count}", + "keysSecurityNote": "Każdy klucz izoluje śledzenie użycia i może zostać odwołany niezależnie. Klucze są maskowane po utworzeniu ze względów bezpieczeństwa.", + "createFirstKey": "Utwórz swój pierwszy klucz", + "name": "Imię", + "usage": "Użycie", + "created": "Utworzono", + "actions": "Działania", + "reqs": "wymagania", + "neverUsed": "Nigdy nie używany", + "deleteConfirm": "Usunąć ten klucz API?", + "usageTips": "Wskazówki dotyczące użytkowania", + "tipAuth": "Użyj kluczy API w nagłówku autoryzacji jako Nośnik YOUR_KEY", + "tipSecure": "Klucze są wyświetlane tylko raz podczas tworzenia — przechowuj je bezpiecznie", + "tipSeparate": "Utwórz osobne klucze dla różnych klientów lub środowisk", + "tipRestrict": "Ogranicz klucze do określonych modeli, aby zapewnić większe bezpieczeństwo i kontrolę kosztów", + "keyName": "Nazwa klucza", + "keyNamePlaceholder": "np. klucz produkcyjny, klucz rozwojowy", + "keyNameDesc": "Wybierz opisową nazwę identyfikującą przeznaczenie tego klucza", + "keyCreated": "Utworzono klucz API", + "keyCreatedSuccess": "Klucz został utworzony pomyślnie!", + "keyCreatedNote": "Skopiuj i zapisz ten klucz teraz — nie będzie on więcej wyświetlany.", + "done": "Gotowe", + "savePermissions": "Zapisz uprawnienia", + "allowAll": "Zezwalaj na wszystko", + "restrict": "Ogranicz", + "allowAllInfo": "Ten klucz umożliwia dostęp do wszystkich dostępnych modeli.", + "restrictInfo": "Ten klucz umożliwia dostęp do {selected} z {total} modeli.", + "selected": "Wybrano {count}", + "all": "Wszystko", + "clear": "Jasne", + "searchModels": "Wyszukaj modele według nazwy lub dostawcy...", + "noModelsFound": "Nie znaleziono żadnych modeli", + "keyNameRequired": "Nazwa klucza jest wymagana", + "keyNameTooLong": "Nazwa klucza musi mieć maksymalnie {max} znaków", + "keyNameInvalid": "Nazwa klucza może zawierać tylko litery, cyfry, spacje, łączniki i podkreślenia", + "invalidKeyName": "Nieprawidłowa nazwa klucza", + "failedCreateKey": "Nie udało się utworzyć klucza", + "failedCreateKeyRetry": "Nie udało się utworzyć klucza. Spróbuj ponownie.", + "invalidKeyId": "Nieprawidłowy identyfikator klucza", + "failedDeleteKey": "Nie udało się usunąć klucza", + "failedDeleteKeyRetry": "Nie udało się usunąć klucza. Spróbuj ponownie.", + "invalidModelsSelection": "Nieprawidłowy wybór modeli", + "cannotSelectMoreThanModels": "Nie można wybrać więcej niż {max} modeli", + "failedUpdatePermissions": "Nie udało się zaktualizować uprawnień", + "failedUpdatePermissionsRetry": "Nie udało się zaktualizować uprawnień. Spróbuj ponownie.", + "unknownProvider": "nieznany", + "copyMaskedKey": "Skopiuj zamaskowany klucz", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Ostatni: {date}", + "editPermissions": "Edytuj uprawnienia", + "deleteKey": "Usuń klucz", + "model": "Model {count}", + "models": "{count} modele", + "permissionsTitle": "Uprawnienia: {name}", + "allowAllDesc": "Ten klucz umożliwia dostęp do wszystkich dostępnych modeli.", + "restrictDesc": "Ten klucz umożliwia dostęp do {selectedCount} z {totalModels} modeli.", + "selectedCount": "Wybrano {count}" + }, + "auditLog": { + "title": "Dziennik audytu", + "searchPlaceholder": "Wyszukaj działania...", + "action": "Akcja", + "actor": "Aktor", + "target": "Cel", + "ipAddress": "Adres IP", + "timestamp": "Znacznik czasu", + "noEntries": "Nie znaleziono wpisów audytu", + "filterByAction": "Filtruj według działania...", + "filterByActor": "Filtruj według aktora...", + "filterEntriesAria": "Filtruj wpisy dziennika audytu", + "filterByActionTypeAria": "Filtruj według typu akcji", + "filterByActorAria": "Filtruj według aktora", + "refreshAuditLogAria": "Odśwież dziennik audytu", + "tableAria": "Wpisy dziennika audytu", + "failedFetchAuditLog": "Nie udało się pobrać dziennika kontroli", + "notAvailable": "—", + "description": "Działania administracyjne i zdarzenia związane z bezpieczeństwem", + "showing": "Wyświetlanie wpisów {count} (przesunięcie {offset})", + "previous": "Poprzedni" + }, + "cliTools": { + "title": "Narzędzia interfejsu wiersza polecenia", + "noActiveProviders": "Brak aktywnych dostawców", + "noActiveProvidersDesc": "Najpierw dodaj i połącz dostawców, aby skonfigurować narzędzia CLI.", + "mapModels": "Modele map", + "testConnection": "Połączenie testowe", + "connectionStatus": "Stan połączenia", + "configureEndpoint": "Skonfiguruj punkt końcowy", + "instructions": "Instrukcje", + "modelMapping": "Mapowanie modelu", + "baseUrl": "Bazowy adres URL", + "apiKey": "Klucz API", + "configured": "Skonfigurowane", + "notConfigured": "Nie skonfigurowano", + "notInstalled": "Nie zainstalowano", + "custom": "Niestandardowe", + "unknown": "Nieznany", + "lastSavedAt": "Ostatnio zapisany: {date}", + "never": "Nigdy", + "justNow": "właśnie teraz", + "minutesAgoShort": "{count}m temu", + "hoursAgoShort": "{count}h temu", + "daysAgoShort": "{count}d temu", + "monthsAgoShort": "{count}miesiące temu", + "yearsAgoShort": "{count}y temu", + "runtimeCheckFailed": "Kontrola czasu wykonania nie powiodła się", + "yourApiKeyPlaceholder": "twój-api-key", + "modelPlaceholder": "dostawca/identyfikator modelu", + "configurationSaved": "Konfiguracja została zapisana pomyślnie.", + "failedToSave": "Nie udało się zapisać konfiguracji.", + "noApiKeysCreateOne": "Brak kluczy API — utwórz je na stronie Klucze", + "defaultOmnirouteKey": "sk_omniroute (domyślnie)", + "selectModel": "Wybierz Model", + "selectModelForAlias": "Wybierz model dla {alias}", + "selectModelForTool": "Wybierz model dla {tool}", + "select": "Wybierz", + "clear": "Jasne", + "comingSoon": "Już wkrótce", + "checkingRuntime": "Sprawdzam stan środowiska wykonawczego...", + "guideOnlyIntegration": "Integracja wyłącznie w trybie przewodnika (nie jest wymagane lokalne środowisko wykonawcze)", + "cliRuntimeDetected": "Środowisko wykonawcze CLI zostało wykryte i gotowe", + "cliFoundNotRunnable": "Znaleziono interfejs CLI, ale nie można go uruchomić{reason}", + "cliRuntimeNotDetected": "Nie wykryto środowiska wykonawczego CLI", + "binary": "Binarny", + "configPath": "Ścieżka konfiguracji", + "configPathShort": "Konfig", + "failedCheckRuntimeStatus": "Nie udało się sprawdzić stanu środowiska wykonawczego.", + "copy": "Kopiuj", + "copied": "Skopiowano", + "copyConfig": "Kopiuj konfigurację", + "saveConfig": "Zapisz konfigurację", + "selectionSaved": "Wybór został zapisany", + "guide": "Przewodnik", + "detected": "Wykryto", + "notReady": "Nie gotowy", + "active": "Aktywny", + "inactive": "Nieaktywny", + "startMitm": "Uruchom MITM", + "stopMitm": "Zatrzymaj MITM", + "mitmStarted": "MITM rozpoczęło się pomyślnie!", + "mitmStopped": "MITM został zatrzymany pomyślnie!", + "failedStart": "Nie udało się uruchomić MITM", + "failedStop": "Nie udało się zatrzymać MITM", + "saveMappings": "Zapisz mapowania", + "mappingsSaved": "Mapowania zapisane!", + "failedSaveMappings": "Nie udało się zapisać mapowań", + "howItWorks": "Jak to działa:", + "antigravityHowWorksDesc": "Antygrawitacja wysyła żądania do punktu końcowego Google. MITM przechwytuje i przekierowuje je do OmniRoute.", + "antigravityStep1": "1. Uruchom MITM, aby kierować żądania przez OmniRoute.", + "antigravityStep2Prefix": "2. Dodaj", + "antigravityStep2Suffix": "do pliku hosts jako 127.0.0.1.", + "antigravityStep3": "3. Otwórz Antygrawitację i żądania zostaną przesłane przez serwer proxy.", + "sudoPasswordRequiredTitle": "Wymagane hasło Sudo", + "sudoPasswordHint": "Aby zmodyfikować ustawienia pliku hosts i systemowego serwera proxy, wymagane jest hasło administratora.", + "enterSudoPassword": "Wprowadź hasło sudo", + "sudoPasswordRequiredError": "Wymagane jest hasło Sudo.", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "settingsApplied": "Ustawienia zostały zastosowane pomyślnie!", + "failedApplySettings": "Nie udało się zastosować ustawień", + "settingsReset": "Ustawienia zostały zresetowane pomyślnie!", + "failedResetSettings": "Nie udało się zresetować ustawień", + "backupRestored": "Kopia zapasowa przywrócona!", + "failedRestore": "Nie udało się przywrócić", + "checkingCli": "Sprawdzam {tool} CLI...", + "cliNotRunnable": "{tool} Zainstalowano CLI, ale nie można go uruchomić", + "cliNotInstalled": "{tool} Interfejs CLI nie jest zainstalowany", + "cliNotDetected": "{tool} Nie wykryto interfejsu CLI", + "cliDetectedReady": "{tool} Wykryto interfejs CLI i jest on gotowy", + "cliFoundFailedHealthcheck": "{tool} Znaleziono interfejs CLI, ale kontrola stanu środowiska wykonawczego nie powiodła się{reason}.", + "installCliPrompt": "Aby móc korzystać z tej funkcji, zainstaluj {tool} CLI.", + "installCodexPrompt": "Aby skorzystać z funkcji automatycznego stosowania, zainstaluj Codex CLI.", + "hide": "Ukryj", + "howToInstall": "Jak zainstalować", + "installationGuide": "Przewodnik instalacji", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "Po instalacji uruchom", + "toVerify": "zweryfikować.", + "current": "Aktualny", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Przywróć ustawienia domyślne", + "providerModelPlaceholder": "dostawca/identyfikator modelu", + "apply": "Zastosuj", + "reset": "Zresetuj", + "manualConfig": "Konfiguracja ręczna", + "backups": "Kopie zapasowe", + "configBackups": "Skonfiguruj kopie zapasowe", + "noBackupsYet": "Nie ma jeszcze kopii zapasowych. Kopie zapasowe są tworzone automatycznie przed każdym Zastosowaniem lub Resetem.", + "restore": "Przywróć", + "backupRestoredReloading": "Kopia zapasowa przywrócona! Stan ponownego ładowania...", + "failedRestoreBackup": "Nie udało się przywrócić kopii zapasowej", + "applied": "Zastosowano!", + "failed": "Nie udało się", + "resetDone": "Zresetuj!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute jest skonfigurowany jako dostawca zgodny z OpenAI", + "provider": "Dostawca", + "model": "Modelka", + "providers": "Dostawcy", + "auth": "Autoryt", + "noApiKeysAvailable": "Brak dostępnych kluczy API", + "usingDefaultOmniroute": "Używam domyślnego: sk_omniroute", + "updateConfig": "Zaktualizuj konfigurację", + "applyConfig": "Zastosuj konfigurację", + "noBackupsAvailable": "Brak dostępnych kopii zapasowych.", + "profileSaved": "Profil „{name}” został zapisany!", + "failedSaveProfile": "Nie udało się zapisać profilu", + "profileActivated": "Profil aktywowany!", + "failedActivateProfile": "Nie udało się aktywować profilu", + "profiles": "Profile", + "savedProfiles": "Zapisane profile", + "noProfilesYet": "Nie zapisano jeszcze żadnych profili. Zapisz bieżącą konfigurację jako profil poniżej.", + "activate": "Aktywuj", + "deleteProfile": "Usuń profil", + "profileNamePlaceholder": "Nazwa profilu (np. Konto Osobiste)", + "saveCurrent": "Zapisz bieżący", + "codexAuthNotePrefix": "Kodeks używa", + "codexAuthNoteMiddle": "z", + "codexAuthNoteSuffix": "Kliknij „Zastosuj”, aby przeprowadzić automatyczną konfigurację.", + "claudeManualConfiguration": "Claude CLI - Konfiguracja ręczna", + "codexManualConfiguration": "Codex CLI — konfiguracja ręczna", + "droidManualConfiguration": "Droid fabryczny – konfiguracja ręczna", + "openClawManualConfiguration": "Otwarty pazur - konfiguracja ręczna", + "clineManualConfiguration": "Konfiguracja ręczna Cline", + "kiloManualConfiguration": "Konfiguracja ręczna kodu Kilo", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE z MITM", + "claude": "Antropiczny kod Claude'a CLI", + "codex": "Interfejs wiersza polecenia OpenAI Codex", + "droid": "Asystent sztucznej inteligencji droida fabrycznego", + "openclaw": "Otwórz asystenta AI Claw", + "cline": "Cline AI Asystent kodowania CLI", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Edytor kodu AI kursora", + "continue": "Kontynuuj Asystenta AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Aby korzystać z tej funkcji, wymagane jest konto Cursor Pro.", + "1": "Kursor kieruje żądania przez własny serwer, więc lokalny punkt końcowy nie jest obsługiwany. Włącz punkt końcowy Cloud w Ustawieniach." + }, + "steps": { + "1": { + "title": "Otwórz Ustawienia", + "desc": "Przejdź do Ustawienia -> Modele" + }, + "2": { + "title": "Włącz interfejs API OpenAI", + "desc": "Włącz opcję „Klucz API OpenAI”." + }, + "3": { + "title": "Bazowy adres URL" + }, + "4": { + "title": "Klucz API" + }, + "5": { + "title": "Dodaj model niestandardowy", + "desc": "Kliknij „Wyświetl wszystkie modele” -> „Dodaj model niestandardowy”" + }, + "6": { + "title": "Wybierz Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Otwórz konfigurację", + "desc": "Otwórz plik konfiguracyjny Kontynuuj" + }, + "2": { + "title": "Klucz API" + }, + "3": { + "title": "Wybierz Model" + }, + "4": { + "title": "Dodaj konfigurację modelu", + "desc": "Dodaj następującą konfigurację do tablicy modeli:" + } + } + } + } + }, + "combos": { + "title": "Kombinacje", + "description": "Twórz kombinacje modeli z obsługą routingu ważonego i obsługi rezerwowej", + "createCombo": "Utwórz kombinację", + "editCombo": "Edytuj kombinację", + "deleteCombo": "Usuń kombinację", + "noModels": "Żadnych modeli", + "noModelsYet": "Nie dodano jeszcze żadnych modeli", + "addModel": "Dodaj model", + "addModelToCombo": "Dodaj model do kombinacji", + "routingStrategy": "Strategia routingu", + "maxRetries": "Maksymalna liczba ponownych prób", + "timeout": "Limit czasu (ms)", + "healthcheck": "Kontrola stanu", + "priority": "Priorytet", + "fallback": "Powrót", + "roundRobin": "Okrągły Robin", + "random": "Losowe", + "leastLatency": "Najmniejsze opóźnienie", + "comboName": "Nazwa kombinacji", + "comboNamePlaceholder": "moja kombinacja", + "deleteConfirm": "Usunąć tę kombinację?", + "noCombosYet": "Nie ma jeszcze żadnych kombinacji", + "comboCreated": "Kombinacja utworzona pomyślnie", + "comboUpdated": "Kombinacja została pomyślnie zaktualizowana", + "comboDeleted": "Kombinacja usunięta", + "failedCreate": "Nie udało się utworzyć kombinacji", + "failedUpdate": "Nie udało się zaktualizować kombinacji", + "errorCreating": "Błąd podczas tworzenia kombinacji", + "errorUpdating": "Błąd aktualizacji kombinacji", + "errorDeleting": "Błąd podczas usuwania kombinacji", + "testFailed": "Żądanie testowe nie powiodło się", + "failedToggle": "Nie udało się przełączyć kombinacji", + "testResults": "Wyniki testu — {name}", + "resolvedBy": "Rozwiązane przez:", + "more": "+{count} więcej", + "reqs": "wymagania", + "success": "sukces", + "proxyConfigured": "Serwer proxy skonfigurowany", + "copyComboName": "Skopiuj nazwę kombinacji", + "enableCombo": "Włącz kombinację", + "disableCombo": "Wyłącz kombinację", + "testCombo": "Kombinacja testowa", + "duplicate": "Duplikat", + "proxyConfig": "Konfiguracja proxy", + "nameRequired": "Imię i nazwisko jest wymagane", + "nameInvalid": "Tylko litery, cyfry, -, _, / i . dozwolone", + "nameHint": "Litery, cyfry, -, _, / i . dozwolone", + "priorityDesc": "Sekwencyjne działanie awaryjne: najpierw wypróbowuje model 1, potem 2 itd.", + "weightedDesc": "Rozdziela ruch według procentu wagi z rezerwą", + "roundRobinDesc": "Dystrybucja kołowa: każde żądanie trafia do następnego modelu w rotacji", + "randomDesc": "Jednolity wybór losowy, a następnie powrót do pozostałych modeli", + "leastUsedDesc": "Wybiera model z najmniejszą liczbą żądań, równoważąc obciążenie w czasie", + "costOptimizedDesc": "Najpierw wybiera najtańszy model na podstawie ceny", + "models": "Modele", + "autoBalance": "Automatyczne balansowanie", + "advancedSettings": "Ustawienia zaawansowane", + "retryDelay": "Opóźnienie ponownej próby (ms)", + "concurrencyPerModel": "Współbieżność/model", + "queueTimeout": "Limit czasu kolejki (ms)", + "advancedHint": "Pozostaw puste, aby użyć globalnych ustawień domyślnych. Zastępują one ustawienia poszczególnych dostawców.", + "moveUp": "Przesuń się w górę", + "moveDown": "Przesuń w dół", + "removeModel": "Usuń", + "saving": "Zapisywanie...", + "weighted": "Ważona", + "leastUsed": "Najrzadziej używany", + "costOpt": "Opcja kosztowa" + }, + "costs": { + "title": "Koszty", + "budget": "Budżet", + "totalCost": "Całkowity koszt", + "breakdown": "Podział kosztów", + "noData": "Brak danych o kosztach", + "byModel": "Według modelu", + "byProvider": "Przez Dostawcę" + }, + "endpoint": { + "title": "Punkt końcowy interfejsu API", + "available": "Dostępne punkty końcowe", + "cloudProxy": "Serwer proxy w chmurze", + "disableConfirm": "Czy na pewno chcesz wyłączyć serwer proxy w chmurze?", + "baseUrl": "Bazowy adres URL", + "apiKeyLabel": "Klucz API", + "registeredKeys": "Zarejestrowane klucze", + "chatCompletions": "Zakończenia czatu", + "responses": "Odpowiedzi", + "listModels": "Lista modeli", + "usingCloudProxy": "Korzystanie z serwera proxy w chmurze", + "usingLocalServer": "Korzystanie z serwera lokalnego", + "machineId": "Identyfikator maszyny: {id}...", + "disableCloud": "Wyłącz chmurę", + "enableCloud": "Włącz chmurę", + "modelsAcrossEndpoints": "{models} modele w {endpoints} punktach końcowych", + "chatDesc": "Czat strumieniowy i niestreamingowy ze wszystkimi dostawcami", + "embeddings": "Osadzenia", + "embeddingsDesc": "Osadzanie tekstu dla potoków wyszukiwania i RAG", + "imageGeneration": "Generowanie obrazu", + "imageDesc": "Generuj obrazy na podstawie podpowiedzi tekstowych", + "rerank": "Zmień rangę", + "rerankDesc": "Zmień rangę dokumentów według trafności dla zapytania", + "audioTranscription": "Transkrypcja dźwięku", + "audioTranscriptionDesc": "Transkrypcja plików audio na tekst (szeptem)", + "textToSpeech": "Tekst na mowę", + "textToSpeechDesc": "Konwertuj tekst na naturalnie brzmiącą mowę", + "moderations": "Moderacje", + "moderationsDesc": "Moderowanie treści i klasyfikacja bezpieczeństwa", + "enableCloudTitle": "Włącz serwer proxy w chmurze", + "whatYouGet": "Co otrzymasz", + "cloudBenefitAccess": "Uzyskaj dostęp do swojego API z dowolnego miejsca na świecie", + "cloudBenefitShare": "Z łatwością udostępniaj punkt końcowy swojemu zespołowi", + "cloudBenefitPorts": "Nie ma potrzeby otwierania portów ani konfigurowania zapory ogniowej", + "cloudBenefitEdge": "Szybka globalna sieć brzegowa", + "cloudSessionNote": "Cloud będzie przechowywać Twoją sesję uwierzytelniania przez 1 dzień. Jeśli nie zostanie użyty, zostanie automatycznie usunięty.", + "cloudUnstableNote": "Chmura jest obecnie niestabilna z Claude Code OAuth w niektórych przypadkach.", + "cloudConnected": "Serwer proxy chmury podłączony!", + "connectingToCloud": "Łączę z chmurą...", + "verifyingConnection": "Weryfikacja połączenia...", + "connecting": "Łączenie...", + "verifying": "Weryfikuję...", + "connected": "Połączono!", + "disableCloudTitle": "Wyłącz serwer proxy w chmurze", + "disableWarning": "Wszystkie sesje autoryzacji zostaną usunięte z chmury.", + "syncingData": "Synchronizowanie najnowszych danych...", + "disablingCloud": "Wyłączam chmurę...", + "syncing": "Synchronizowanie...", + "disabling": "Wyłączam...", + "cloudConnectedVerified": "Cloud Proxy podłączony i zweryfikowany!", + "connectedVerificationPending": "Połączono — weryfikacja w toku", + "connectedVerificationPendingWithError": "Połączono — weryfikacja w toku: {error}", + "cloudDisabledSuccess": "Chmura została pomyślnie wyłączona", + "syncedSuccess": "Zsynchronizowano pomyślnie", + "failedDisable": "Nie udało się wyłączyć chmury", + "failedEnable": "Nie udało się włączyć chmury", + "cloudRequestTimeout": "Upłynął limit czasu żądania w chmurze", + "cloudRequestFailed": "Żądanie w chmurze nie powiodło się", + "cloudWorkerUnreachable": "Nie udało się połączyć z pracownikiem chmury. Upewnij się, że usługa w chmurze jest uruchomiona (npm run dev w /cloud).", + "connectionFailed": "Połączenie nie powiodło się", + "syncFailed": "Nie udało się zsynchronizować danych w chmurze", + "providerModelsTitle": "{provider} — Modele", + "noModelsForProvider": "Brak dostępnych modeli tego dostawcy.", + "chat": "Czat", + "embedding": "Osadzanie", + "image": "Obraz", + "custom": "niestandardowe", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Stan systemu", + "description": "Monitorowanie w czasie rzeczywistym Twojej instancji OmniRoute", + "healthy": "Zdrowy", + "degraded": "Zdegradowany", + "down": "W dół", + "uptime": "Czas pracy", + "memory": "Pamięć", + "memoryRss": "Pamięć (RSS)", + "heap": "Kupa", + "cpu": "Procesor", + "database": "Baza danych", + "version": "Wersja", + "lastCheck": "Ostatnia kontrola", + "providerHealth": "Zdrowie dostawcy", + "systemMetrics": "Metryki systemu", + "tokenHealth": "Tokenowe zdrowie", + "refreshAll": "Odśwież wszystko", + "checkNow": "Sprawdź teraz", + "loadingHealth": "Ładowanie danych zdrowotnych...", + "failedToLoad": "Nie udało się załadować danych o stanie zdrowia: {error}", + "retry": "Spróbuj ponownie", + "allOperational": "Wszystkie systemy sprawne", + "issuesDetected": "Wykryto problemy systemowe", + "updatedAt": "Zaktualizowano {time}", + "latency": "Opóźnienie", + "latencyP50": "p50", + "latencyP95": "s. 95", + "latencyP99": "str. 99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Łączna liczba żądań", + "noDataYet": "Brak danych", + "promptCache": "Natychmiastowa pamięć podręczna", + "entries": "Wpisy", + "hitRate": "Współczynnik trafień", + "hitsMisses": "Trafienia/chybienia", + "signatureCache": "Pamięć podręczna podpisów", + "signatureDefaults": "Domyślne", + "signatureTool": "Narzędzie", + "signatureFamily": "Rodzina", + "signatureSession": "Sesja", + "recovering": "Odzyskiwanie", + "noCBData": "Brak dostępnych danych dotyczących wyłącznika automatycznego. Najpierw złóż kilka próśb.", + "providerHealthStatusAria": "Stan zdrowia dostawcy", + "issuesLabel": "Wykryto problemy", + "operational": "Operacyjny", + "providers": "Dostawcy", + "healthyCount": "{count} zdrowy", + "nodeVersion": "Węzeł {version}", + "failures": "{count} błąd", + "failuresPlural": "{count} niepowodzenia", + "lastFailure": "Ostatni", + "rateLimitStatus": "Stan limitu stawki", + "activeLimiters": "{count} aktywny ogranicznik", + "activeLimitersPlural": "{count} aktywne limitery", + "queued": "W kolejce", + "queuedCount": "{count} w kolejce", + "running": "bieganie", + "runningCount": "{count} działa", + "ok": "OK", + "activeLockouts": "Aktywne blokady", + "resetConfirm": "Zresetować wszystkie wyłączniki automatyczne do stanu prawidłowego? Spowoduje to wyczyszczenie wszystkich liczników błędów i przywrócenie wszystkich dostawców do stanu operacyjnego.", + "resetAllTitle": "Zresetuj wszystkie wyłączniki automatyczne do stanu prawidłowego", + "resetting": "Resetuję...", + "resetAll": "Zresetuj wszystko", + "until": "Do {time}" + }, + "limits": { + "title": "Limity i kwoty", + "rateLimit": "Limit stawki", + "remaining": "Pozostało", + "requestsPerMinute": "Żądania/min", + "tokensPerMinute": "Tokeny/min", + "dailyLimit": "Limit dzienny" + }, + "logs": { + "title": "Dzienniki", + "requestLogs": "Poproś o logi", + "proxyLogs": "Dzienniki proxy", + "auditLog": "Dziennik audytu", + "console": "Konsola", + "auditLogDesc": "Działania administracyjne i zdarzenia związane z bezpieczeństwem", + "loading": "Ładowanie...", + "refresh": "Odśwież", + "filterByAction": "Filtruj według działania...", + "filterByActor": "Filtruj według aktora...", + "filterEntriesAria": "Filtruj wpisy dziennika audytu", + "filterByActionTypeAria": "Filtruj według typu akcji", + "filterByActorAria": "Filtruj według aktora", + "refreshAuditLogAria": "Odśwież dziennik audytu", + "tableAria": "Wpisy dziennika audytu", + "failedFetchAuditLog": "Nie udało się pobrać dziennika kontroli", + "showing": "Wyświetlanie wpisów {count} (przesunięcie {offset})", + "search": "Szukaj", + "timestamp": "Znacznik czasu", + "action": "Akcja", + "actor": "Aktor", + "target": "Cel", + "details": "Szczegóły", + "ipAddress": "Adres IP", + "notAvailable": "—", + "noEntries": "Nie znaleziono wpisów w dzienniku kontroli", + "previous": "Poprzedni", + "next": "Następny" + }, + "onboarding": { + "welcome": "Witamy", + "security": "Bezpieczeństwo", + "test": "Testuj", + "ready": "Gotowy!", + "setPassword": "Ustaw hasło", + "addProvider": "Dodaj swojego pierwszego dostawcę", + "getStarted": "Rozpocznij", + "skip": "Pomiń", + "skipWizard": "Całkowicie pomiń kreatora", + "skipPassword": "Pomiń konfigurację hasła", + "skipAndContinue": "Pomiń i kontynuuj", + "passwordLabel": "Hasło", + "confirmPassword": "Potwierdź hasło", + "enterPassword": "Wprowadź hasło", + "confirmPasswordPlaceholder": "Potwierdź hasło", + "passwordsMismatch": "Hasła nie pasują", + "setupComplete": "Konfiguracja ukończona!", + "goToDashboard": "Przejdź do Panelu →", + "welcomeDesc": "OmniRoute to lokalny serwer proxy API AI. Kieruje żądania do wielu dostawców AI z równoważeniem obciążenia, przełączaniem awaryjnym i śledzeniem użycia.", + "multiProvider": "Wielu dostawców", + "usageTracking": "Śledzenie użycia", + "apiKeyMgmt": "Zarządzanie kluczami API", + "securityDesc": "Ustaw hasło, aby chronić swój pulpit nawigacyjny, lub na razie pomiń.", + "providerDesc": "Połącz swojego pierwszego dostawcę AI. Możesz dodać więcej później.", + "apiKeyRequired": "Klucz API (wymagany)", + "customUrlOptional": "Niestandardowy adres URL (opcjonalnie)", + "testDesc": "Sprawdźmy, czy połączenie Twojego dostawcy działa.", + "runTest": "Uruchom test połączenia", + "testingConnection": "Testowanie połączenia...", + "connectionSuccessful": "Połączenie pomyślne! Twój dostawca jest gotowy.", + "noProviderFound": "Nie znaleziono dostawcy. Możesz dodać je później z poziomu panelu kontrolnego.", + "testFailed": "Test nie powiódł się, ale możesz to skonfigurować później.", + "couldNotTest": "Nie można teraz przetestować. Możesz przetestować z poziomu pulpitu nawigacyjnego.", + "doneDesc": "Wszystko gotowe! Twoja instancja OmniRoute jest skonfigurowana i gotowa do zastępowania żądań AI.", + "yourEndpoint": "Twój punkt końcowy:", + "continue": "Kontynuuj", + "retry": "Spróbuj ponownie", + "failedSetPassword": "Nie udało się ustawić hasła. Spróbuj ponownie.", + "failedAddProvider": "Nie udało się dodać dostawcy. Spróbuj ponownie.", + "connectionError": "Błąd połączenia. Spróbuj ponownie.", + "provider": "Dostawca" + }, + "providers": { + "title": "Dostawcy", + "addProvider": "Dodaj dostawcę", + "editProvider": "Edytuj dostawcę", + "deleteProvider": "Usuń dostawcę", + "noProviders": "Nie skonfigurowano żadnych dostawców", + "modelAvailability": "Dostępność modelu", + "accounts": "Konta", + "newAccount": "Nowe konto", + "deleteConfirm": "Czy na pewno chcesz usunąć tego dostawcę?", + "testing": "Testowanie...", + "testConnection": "Połączenie testowe", + "testSuccess": "Połączenie pomyślne", + "testFailed": "Połączenie nie powiodło się", + "available": "Dostępne", + "cooldown": "Czas odnowienia", + "unavailable": "Niedostępne", + "unknown": "Nieznany", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatybilny", + "chat": "Czat", + "responses": "Odpowiedzi", + "messages": "Wiadomości", + "oauthProviders": "Dostawcy protokołu OAuth", + "freeProviders": "Bezpłatni dostawcy", + "apiKeyProviders": "Dostawcy kluczy API", + "compatibleProviders": "Dostawcy obsługujący klucz API", + "testAll": "Przetestuj wszystko", + "testAllOAuth": "Przetestuj wszystkie połączenia OAuth", + "testAllFree": "Przetestuj wszystkie bezpłatne połączenia", + "testAllApiKey": "Przetestuj wszystkie połączenia klucza API", + "testAllCompatible": "Przetestuj wszystkie kompatybilne połączenia", + "connected": "{count} Połączono", + "errorCount": "{count} Błąd ({code})", + "errorCountNoCode": "{count} Błąd", + "noConnections": "Brak połączeń", + "disabled": "Niepełnosprawny", + "enableProvider": "Włącz dostawcę", + "disableProvider": "Wyłącz dostawcę", + "testResults": "Wyniki testu", + "noCompatibleYet": "Nie dodano jeszcze żadnych kompatybilnych dostawców", + "compatibleHint": "Użyj powyższych przycisków, aby dodać punkty końcowe kompatybilne z OpenAI lub Anthropic", + "addOpenAICompatible": "Dodaj kompatybilność z OpenAI", + "addAnthropicCompatible": "Dodaj kompatybilność antropiczną", + "addNewProvider": "Dodaj nowego dostawcę", + "backToProviders": "Powrót do dostawców", + "configureNewProvider": "Skonfiguruj nowego dostawcę AI do użycia z aplikacjami.", + "providerLabel": "Dostawca", + "selectProvider": "Wybierz dostawcę", + "selectedProvider": "Wybrany dostawca", + "authMethod": "Metoda uwierzytelniania", + "apiKeyLabel": "Klucz API", + "apiKeyRequired": "Wymagany jest klucz API", + "selectProviderRequired": "Wybierz dostawcę", + "enterApiKey": "Wprowadź swój klucz API", + "apiKeySecure": "Twój klucz API zostanie zaszyfrowany i bezpiecznie przechowywany.", + "oauth2Connect": "Połącz się z OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Połącz swoje konto za pomocą uwierzytelniania OAuth2.", + "displayName": "Nazwa wyświetlana", + "displayNamePlaceholder": "np. produkcyjne API, środowisko deweloperskie", + "displayNameHint": "Opcjonalne. Przyjazna nazwa identyfikująca tę konfigurację.", + "active": "Aktywny", + "activeDescription": "Włącz tego dostawcę do użytku w swoich aplikacjach", + "cancel": "Anuluj", + "createProvider": "Utwórz dostawcę", + "failedCreate": "Nie udało się utworzyć dostawcy", + "errorOccurred": "Wystąpił błąd. Spróbuj ponownie.", + "modelStatus": "Stan modelu", + "allModelsOperational": "Wszystkie modele sprawne", + "modelsWithIssues": "{count} modele z problemami", + "allModelsNormal": "Wszystkie modele reagują normalnie.", + "cooldownCleared": "Czas odnowienia usunięty dla {model}", + "failedClearCooldown": "Nie udało się wyczyścić czasu odnowienia", + "loadingAvailability": "Ładowanie dostępności modelu...", + "clearCooldown": "Jasne", + "clearing": "Czyszczenie...", + "until": "Do {time}", + "providerTestFailed": "Test dostawcy nie powiódł się", + "modeTest": "{mode} Test", + "passedCount": "{count} zaliczone", + "failedCount": "{count} nie powiodło się", + "testedCount": "{count} przetestowane", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "BŁĄD", + "noActiveConnectionsInGroup": "Nie znaleziono aktywnych połączeń dla tej grupy.", + "allTestsPassed": "Wszystkie {total} testy zaliczone", + "testSummary": "{passed}/{total} zaliczone, {failed} nie powiodło się", + "nameLabel": "Imię", + "prefixLabel": "Przedrostek", + "baseUrlLabel": "Bazowy adres URL", + "apiTypeLabel": "Typ interfejsu API", + "prefixHint": "Wymagane. Unikalny przedrostek nazw modeli.", + "nameHint": "Wymagane. Przyjazna etykieta dla tego węzła.", + "baseUrlHint": "Wymagane.  Podstawowy adres URL interfejsu API dostawcy.", + "anthropicPrefixPlaceholder": "AC-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Sprawdź połączenie", + "validating": "Sprawdzanie poprawności...", + "connectionValid": "Połączenie jest ważne!", + "connectionFailed": "Połączenie nie powiodło się. Sprawdź adres URL i klucz.", + "testKeyLabel": "Testuj klucz API", + "testKeyPlaceholder": "sk-... (tylko do sprawdzenia)", + "providerNotFound": "Nie znaleziono dostawcy", + "deleteConnectionConfirm": "Usunąć to połączenie?", + "failedSetAlias": "Nie udało się ustawić aliasu", + "failedSaveConnection": "Nie udało się zapisać połączenia", + "failedSaveConnectionRetry": "Nie udało się zapisać połączenia. Spróbuj ponownie.", + "failedRetestConnection": "Nie udało się ponownie przetestować połączenia", + "deleteCompatibleNodeConfirm": "Usunąć ten {type} Zgodny węzeł?", + "anthropicCompatibleDetails": "Szczegóły zgodności antropicznej", + "openaiCompatibleDetails": "Szczegóły zgodności z OpenAI", + "messagesApi": "Interfejs API wiadomości", + "responsesApi": "API odpowiedzi", + "chatCompletions": "Zakończenia czatu", + "importingModels": "Importowanie...", + "importFromModels": "Importuj z /modele", + "addConnectionToImport": "Dodaj połączenie, aby umożliwić importowanie.", + "noModelsConfigured": "Nie skonfigurowano żadnych modeli", + "connectionCount": "{count} połączenia", + "fetchingModels": "Pobieram dostępne modele...", + "failedFetchModels": "Nie udało się pobrać modeli", + "noModelsFound": "Nie znaleziono żadnych modeli", + "importFailed": "Import nie powiódł się", + "noNewModelsAdded": "Nie dodano żadnych nowych modeli.", + "adding": "Dodawanie...", + "importingModelsTitle": "Importowanie modeli", + "copyModel": "Skopiuj model", + "removeModel": "Usuń model", + "rateLimitProtected": "Chronione", + "rateLimitUnprotected": "Niechroniony", + "enableRateLimitProtection": "Kliknij, aby włączyć ochronę limitu szybkości", + "disableRateLimitProtection": "Kliknij, aby wyłączyć ochronę limitu szybkości", + "productionKey": "Klucz produkcyjny", + "enterNewApiKey": "Wprowadź nowy klucz API", + "optional": "Opcjonalne", + "anthropicCompatibleName": "Kompatybilny z antropią", + "openaiCompatibleName": "Kompatybilny z OpenAI", + "failedImportModels": "Nie udało się zaimportować modeli", + "noModelsReturnedFromEndpoint": "Z punktu końcowego /models nie zwrócono żadnych modeli.", + "importingModelsProgress": "Importowanie {current} z {total} modeli...", + "foundModelsStartingImport": "Znaleziono {count} modeli. Rozpoczynam importowanie...", + "importingModelById": "Importowanie {modelId}...", + "importSuccessCount": "Pomyślnie zaimportowano {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Nie dodano żadnych nowych modeli (wszystkie już istnieją).", + "importDoneCount": "✓ Gotowe! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Wystąpił nieoczekiwany błąd", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "wiadomości", + "responsesPath": "odpowiedzi", + "chatCompletionsPath": "czat/uzupełnienia", + "add": "Dodaj", + "edit": "Edytuj", + "delete": "Usuń", + "anthropic": "Antropiczny", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Dozwolone jest tylko jedno połączenie na kompatybilny węzeł. Dodaj kolejny węzeł, jeśli potrzebujesz więcej połączeń.", + "connections": "Połączenia", + "providerProxyTitleConfigured": "Serwer proxy dostawcy: {host}", + "configured": "skonfigurowany", + "providerProxyConfigureHint": "Skonfiguruj serwer proxy dla wszystkich połączeń tego dostawcy", + "providerProxy": "Pełnomocnik dostawcy", + "noConnectionsYet": "Nie ma jeszcze żadnych połączeń", + "addFirstConnectionHint": "Aby rozpocząć, dodaj swoje pierwsze połączenie", + "addConnection": "Dodaj połączenie", + "availableModels": "Dostępne modele", + "pageAutoRefresh": "Strona odświeży się automatycznie...", + "statusDisabled": "wyłączone", + "statusConnected": "podłączony", + "statusRuntimeIssue": "problem z czasem wykonania", + "statusAuthFailed": "autoryzacja nie powiodła się", + "statusRateLimited": "stawka ograniczona", + "statusNetworkIssue": "problem z siecią", + "statusTestUnsupported": "test nieobsługiwany", + "statusUnavailable": "niedostępne", + "statusFailed": "nie powiodło się", + "statusError": "błąd", + "oauthAccount": "Konto OAuth", + "errorTypeRuntime": "Lokalny czas wykonania", + "errorTypeUpstreamAuth": "Autoryzacja nadrzędna", + "errorTypeMissingCredential": "Brakujące poświadczenie", + "errorTypeRefreshFailed": "Odświeżanie nie powiodło się", + "errorTypeTokenExpired": "Token wygasł", + "errorTypeRateLimited": "Cena ograniczona", + "errorTypeUpstreamUnavailable": "Upstream niedostępny", + "errorTypeNetworkError": "Błąd sieci", + "errorTypeTestUnsupported": "Test nieobsługiwany", + "errorTypeUpstreamError": "Błąd w górę", + "proxySourceGlobal": "Globalny", + "proxySourceProvider": "Dostawca", + "proxySourceKey": "Klucz", + "proxyConfiguredBySource": "Pełnomocnik ({source}): {host}", + "autoPriority": "Automatycznie: {priority}", + "proxy": "Pełnomocnik", + "retestAuthentication": "Przetestuj ponownie uwierzytelnianie", + "retest": "Przetestuj ponownie", + "disableConnection": "Wyłącz połączenie", + "enableConnection": "Włącz połączenie", + "reauthenticateConnection": "Ponownie uwierzytelnij to połączenie", + "proxyConfig": "Konfiguracja proxy", + "aliasExistsAlert": "Alias „{alias}” już istnieje. Użyj innego modelu lub edytuj istniejący alias.", + "openRouterAnyModelHint": "OpenRouter obsługuje każdy model. Dodawaj modele i twórz aliasy, aby uzyskać szybki dostęp.", + "modelIdFromOpenRouter": "Identyfikator modelu (z OpenRouter)", + "openRouterModelPlaceholder": "antropiczny/claude-3-opus", + "customModels": "Modele niestandardowe", + "customModelsHint": "Dodaj identyfikatory modeli, których nie ma na liście domyślnej. Będą one dostępne do routingu.", + "modelId": "Identyfikator modelu", + "customModelPlaceholder": "np. gpt-4.5-turbo", + "loading": "Ładowanie...", + "removeCustomModel": "Usuń model niestandardowy", + "noCustomModels": "Nie dodano jeszcze żadnych modeli niestandardowych.", + "allSuggestedAliasesExist": "Wszystkie sugerowane aliasy już istnieją. Wybierz inny model lub usuń sprzeczne aliasy.", + "failedSaveCustomModel": "Nie udało się zapisać modelu niestandardowego", + "modelAddedSuccess": "Model {modelId} został pomyślnie dodany", + "failedAddModelTryAgain": "Nie udało się dodać modelu. Spróbuj ponownie.", + "failedSaveImportedModel": "Nie udało się zapisać zaimportowanego modelu w niestandardowej bazie danych", + "failedImportModelsTryAgain": "Nie udało się zaimportować modeli. Spróbuj ponownie.", + "failedRemoveModelFromDatabase": "Nie udało się usunąć modelu z bazy danych", + "modelRemovedSuccess": "Model został pomyślnie usunięty", + "failedDeleteModelTryAgain": "Nie udało się usunąć modelu. Spróbuj ponownie.", + "compatibleModelsDescription": "Dodaj ręcznie modele kompatybilne z {type} lub zaimportuj je z punktu końcowego /models.", + "anthropicCompatibleModelPlaceholder": "klauzula-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Weryfikacja klucza API nie powiodła się. Sprawdź swój klucz i spróbuj ponownie.", + "addProviderApiKeyTitle": "Dodaj klucz API {provider}", + "checking": "Sprawdzam...", + "check": "Sprawdź", + "valid": "Ważne", + "invalid": "Nieprawidłowe", + "creating": "Tworzenie...", + "validationChecksAnthropicCompatible": "Walidacja sprawdza {provider} poprzez weryfikację klucza API.", + "validationChecksOpenAiCompatible": "Walidacja sprawdza {provider} poprzez /models na podstawowym adresie URL.", + "priorityLabel": "Priorytet", + "saving": "Zapisywanie...", + "save": "Zapisz", + "editConnection": "Edytuj połączenie", + "accountName": "Nazwa konta", + "email": "E-mail", + "healthCheckMinutes": "Kontrola stanu (min)", + "healthCheckHint": "Proaktywny interwał odświeżania tokenu. 0 = wyłączone.", + "failedTestConnection": "Nie udało się przetestować połączenia", + "failed": "Nie udało się", + "leaveBlankKeepCurrentApiKey": "Pozostaw puste, aby zachować bieżący klucz API.", + "editCompatibleTitle": "Edytuj {type} Kompatybilny", + "compatibleBaseUrlHint": "Użyj podstawowego adresu URL (kończącego się na /v1) dla interfejsu API zgodnego z {type}.", + "apiKeyForCheck": "Klucz API (do sprawdzenia)", + "compatibleProdPlaceholder": "{type} Kompatybilny (Prod)" + }, + "settings": { + "title": "Ustawienia", + "general": "Generał", + "security": "Bezpieczeństwo", + "appearance": "Wygląd", + "routing": "Trasowanie", + "cache": "Pamięć podręczna", + "resilience": "Odporność", + "systemPrompt": "Monit systemowy", + "thinkingBudget": "Myślący budżet", + "proxy": "Pełnomocnik", + "pricing": "Ceny", + "storage": "Przechowywanie", + "policies": "Zasady", + "ipFilter": "Filtr IP", + "comboDefaults": "Domyślne ustawienia kombinacji", + "fallbackChains": "Łańcuchy rezerwowe", + "changePassword": "Zmień hasło", + "enablePassword": "Włącz hasło", + "darkMode": "Tryb ciemny", + "lightMode": "Tryb światła", + "systemTheme": "Temat systemu", + "enableCache": "Włącz pamięć podręczną", + "cacheTTL": "Pamięć podręczna TTL", + "maxCacheSize": "Maksymalny rozmiar pamięci podręcznej", + "clearCache": "Wyczyść pamięć podręczną", + "cacheHits": "Trafienia w pamięci podręcznej", + "cacheMisses": "Brak pamięci podręcznej", + "hitRate": "Współczynnik trafień", + "cacheEntries": "Wpisy w pamięci podręcznej", + "circuitBreaker": "Wyłącznik automatyczny", + "retryPolicy": "Zasady ponawiania prób", + "maxRetries": "Maksymalna liczba ponownych prób", + "retryDelay": "Opóźnienie ponownej próby", + "timeoutMs": "Limit czasu (ms)", + "enableSystemPrompt": "Włącz monit systemowy", + "systemPromptText": "Tekst monitu systemowego", + "enableThinking": "Włącz myślenie", + "maxThinkingTokens": "Żetony Max Thinking", + "enableProxy": "Włącz serwer proxy", + "proxyUrl": "Adres URL serwera proxy", + "pricingRates": "Format stawek cenowych", + "currentPricing": "Aktualny przegląd cen", + "loadingPricing": "Ładowanie danych cenowych...", + "noPricing": "Brak danych o cenach", + "input": "Wejście", + "output": "Wyjście", + "cached": "Buforowane", + "reasoning": "Rozumowanie", + "cacheCreation": "Tworzenie pamięci podręcznej", + "customPricing": "Ceny niestandardowe", + "databaseSize": "Rozmiar bazy danych", + "backupDb": "Kopia zapasowa bazy danych", + "restoreDb": "Przywróć bazę danych", + "exportData": "Eksportuj dane", + "importData": "Importuj dane", + "clearData": "Wyczyść wszystkie dane", + "clearDataConfirm": "Spowoduje to trwałe usunięcie wszystkich danych. Czy jesteś pewien?", + "enableRequestLogs": "Włącz dzienniki żądań", + "logRetention": "Przechowywanie dziennika", + "ipWhitelist": "Biała lista adresów IP", + "ipBlacklist": "Czarna lista adresów IP", + "addIP": "Dodaj adres IP", + "savedSuccessfully": "Ustawienia zostały zapisane pomyślnie", + "ai": "sztuczna inteligencja", + "advanced": "Zaawansowane", + "localMode": "Tryb lokalny — wszystkie dane przechowywane na Twoim komputerze", + "settingsSectionsAria": "Sekcje ustawień", + "switchThemes": "Przełączaj między jasnymi i ciemnymi motywami", + "themeSelectionAria": "Wybór tematu", + "themeLight": "Światło", + "themeDark": "Ciemny", + "themeSystem": "Systemu", + "hideHealthLogs": "Ukryj dzienniki kontroli stanu", + "hideHealthLogsDesc": "Gdy opcja jest włączona, pomiń komunikaty [HealthCheck] w konsoli serwera", + "promptCache": "Natychmiastowa pamięć podręczna", + "flushCache": "Opróżnij pamięć podręczną", + "flushing": "Płukanie…", + "size": "Rozmiar", + "hits": "Hity", + "evictions": "Eksmisje", + "loadingCacheStats": "Ładowanie statystyk pamięci podręcznej…", + "globalProxy": "Globalny pełnomocnik", + "globalProxyDesc": "Skonfiguruj globalny wychodzący serwer proxy dla wszystkich wywołań API. Poszczególni dostawcy, kombinacje i klucze mogą to zastąpić.", + "noGlobalProxy": "Nie skonfigurowano globalnego serwera proxy", + "globalLabel": "Globalny", + "configure": "Skonfiguruj", + "globalSystemPrompt": "Monit systemu globalnego", + "systemPromptDesc": "Wstrzykiwany do wszystkich żądań na poziomie serwera proxy", + "saved": "Zapisano", + "systemPromptPlaceholder": "Wprowadź monit systemowy, aby wprowadzić do wszystkich żądań...", + "systemPromptHint": "Ten monit jest dołączany do komunikatu systemowego każdego żądania. Używaj w przypadku instrukcji globalnych, wskazówek dotyczących bezpieczeństwa lub reguł formatowania odpowiedzi.", + "chars": "{count} znaków", + "thinkingBudgetTitle": "Myślący budżet", + "thinkingBudgetDesc": "Kontroluj użycie tokenu wnioskowania AI we wszystkich żądaniach", + "passthrough": "Przejście", + "passthroughDesc": "Żadnych zmian – klient kontroluje myślenie o budżecie", + "auto": "Automat", + "autoDesc": "Pozbądź się całej konfiguracji myślenia — pozwól dostawcy zdecydować", + "custom": "Niestandardowe", + "customDesc": "Ustaw stały budżet tokenów dla wszystkich żądań", + "adaptive": "Adaptacyjny", + "adaptiveDesc": "Skaluj budżet w oparciu o złożoność żądania", + "effortNone": "Brak (0 tokenów)", + "effortLow": "Niski (1 tys. tokenów)", + "effortMedium": "Średni (10 tys. tokenów)", + "effortHigh": "Wysoki (128 tys. tokenów)", + "tokenBudget": "Budżet tokenowy", + "tokens": "żetony", + "baseEffortLevel": "Podstawowy poziom wysiłku", + "adaptiveHint": "Tryb adaptacyjny skaluje się od tego poziomu podstawowego w oparciu o liczbę komunikatów, użycie narzędzia i długość podpowiedzi.", + "requireLogin": "Wymagaj logowania", + "requireLoginDesc": "Po włączeniu pulpit nawigacyjny wymaga hasła. Gdy WYŁ., dostęp bez logowania.", + "currentPassword": "Aktualne hasło", + "enterCurrentPassword": "Wprowadź aktualne hasło", + "newPassword": "Nowe hasło", + "enterNewPassword": "Wprowadź nowe hasło", + "confirmPassword": "Potwierdź nowe hasło", + "confirmPasswordPlaceholder": "Potwierdź nowe hasło", + "passwordsNoMatch": "Hasła nie pasują", + "passwordUpdated": "Hasło zostało pomyślnie zaktualizowane", + "failedUpdatePassword": "Nie udało się zaktualizować hasła", + "errorOccurred": "Wystąpił błąd", + "updatePassword": "Zaktualizuj hasło", + "setPassword": "Ustaw hasło", + "apiEndpointProtection": "Ochrona punktów końcowych API", + "requireAuthModels": "Wymagaj klucza API dla /models", + "requireAuthModelsDesc": "Po włączeniu punkt końcowy /v1/models zwraca 404 dla nieuwierzytelnionych żądań. Zapobiega odkrywaniu modelu przez nieautoryzowanych użytkowników.", + "blockedProviders": "Zablokowani dostawcy", + "blockedProvidersDesc": "Ukryj określonych dostawców w odpowiedzi /v1/models. Zablokowani dostawcy nie będą wyświetlani na listach modeli.", + "providersBlocked": "{count} dostawcy zablokowani w /models", + "blockProviderTitle": "Zablokuj {provider}", + "unblockProviderTitle": "Odblokuj {provider}", + "routingStrategy": "Strategia routingu", + "fillFirst": "Najpierw wypełnij", + "fillFirstDesc": "Korzystaj z kont w kolejności priorytetów", + "roundRobin": "Okrągły Robin", + "roundRobinDesc": "Przeglądaj wszystkie konta", + "p2c": "P2C", + "p2cDesc": "Wybierz 2 losowo i użyj zdrowszego", + "random": "Losowe", + "randomDesc": "Losowe konto na każde żądanie", + "leastUsed": "Najrzadziej używany", + "leastUsedDesc": "Wybierz ostatnio używane konto", + "costOpt": "Opcja kosztowa", + "costOptDesc": "Preferuj najtańsze dostępne konto", + "stickyLimit": "Lepki limit", + "stickyLimitDesc": "Połączenia na konto przed zmianą", + "modelAliases": "Aliasy modeli", + "modelAliasesDesc": "Wzorce wieloznaczne do zmiany nazw modeli • Użyj * i ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Wzór", + "targetModel": "Model docelowy", + "add": "+ Dodaj", + "session": "Sesja", + "sessionDetailsAria": "Szczegóły sesji", + "status": "Stan", + "authenticated": "Uwierzytelnione", + "guest": "Gość", + "loginTime": "Czas logowania", + "sessionAge": "Wiek sesji", + "browser": "Przeglądarka", + "clearLocalData": "Wyczyść dane lokalne", + "logout": "Wyloguj się", + "clearLocalDataConfirm": "Wyczyścić wszystkie dane lokalne? Spowoduje to zresetowanie Twoich preferencji.", + "unknown": "Nieznany", + "systemActor": "systemu", + "ipAccessControl": "Kontrola dostępu IP", + "ipAccessControlDesc": "Blokuj lub zezwalaj na określone adresy IP", + "ipModeDisabled": "Niepełnosprawny", + "ipModeBlacklist": "Czarna lista", + "ipModeWhitelist": "Biała lista", + "ipModeWhitelistPriority": "Priorytet WL", + "addIpAddress": "Dodaj adres IP", + "ipAddressPlaceholder": "192.168.1.0/24 lub 10.0.*.*", + "block": "+ Blok", + "allow": "+ Zezwól", + "blocked": "Zablokowano ({count})", + "allowed": "Dozwolone ({count})", + "temporaryBans": "Tymczasowe bany ({count})", + "minLeft": "Pozostało {min}m", + "auditLog": "Dziennik audytu", + "searchAuditLogs": "Przeszukaj dzienniki kontrolne...", + "failedLoadAuditLog": "Nie udało się załadować dziennika kontroli", + "noAuditEvents": "Nie znaleziono żadnych zdarzeń kontrolnych", + "action": "Akcja", + "actor": "Aktor", + "details": "Szczegóły", + "time": "Czas", + "fallbackChainsTitle": "Łańcuchy rezerwowe", + "fallbackChainsDesc": "Zdefiniuj kolejność zastępczą dostawcy dla każdego modelu", + "addChain": "+ Dodaj łańcuch", + "modelName": "Nazwa modelu", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Dostawcy (oddzieleni przecinkami, w kolejności priorytetów)", + "providersCommaSeparatedPlaceholder": "antropiczny, openai, bliźnięta", + "createChain": "Utwórz łańcuch", + "noFallbackChains": "Żadnych łańcuchów awaryjnych", + "noFallbackChainsDesc": "Utwórz łańcuch, aby zdefiniować kolejność zastępczą dostawcy dla modelu.", + "loadingFallbackChains": "Ładuję łańcuchy zastępcze...", + "deleteChainConfirm": "Usunąć łańcuch zastępczy dla „{model}”?", + "chainCreated": "Łańcuch stworzony dla {model}", + "chainDeleted": "Łańcuch usunięty dla {model}", + "failedCreateChain": "Nie udało się utworzyć łańcucha", + "failedDeleteChain": "Nie udało się usunąć łańcucha", + "deleteChain": "Usuń łańcuch", + "fillModelAndProviders": "Podaj nazwę modelu i dostawców", + "addAtLeastOneProvider": "Dodaj co najmniej jednego dostawcę", + "comboDefaultsTitle": "Domyślne ustawienia kombinacji", + "globalComboConfig": "Globalna konfiguracja combo", + "defaultStrategy": "Domyślna strategia", + "defaultStrategyDesc": "Stosowane do nowych kombinacji bez wyraźnej strategii", + "comboStrategyAria": "Strategia kombinacji", + "priority": "Priorytet", + "weighted": "Ważona", + "maxRetriesLabel": "Maksymalna liczba ponownych prób", + "retryDelayLabel": "Opóźnienie ponownej próby (ms)", + "timeoutLabel": "Limit czasu (ms)", + "healthCheck": "Kontrola stanu zdrowia", + "healthCheckDesc": "Wstępnie sprawdź dostępność dostawcy", + "trackMetrics": "Śledź metryki", + "trackMetricsDesc": "Rejestruj metryki żądań kombinacji", + "providerOverrides": "Zastąpienia dostawcy", + "providerOverridesDesc": "Zastąp limit czasu i liczbę ponownych prób na dostawcę. Ustawienia dostawcy zastępują globalne ustawienia domyślne.", + "providerMaxRetriesAria": "{provider} maksymalna liczba ponownych prób", + "providerTimeoutAria": "{provider} przekroczenie limitu czasu ms", + "removeProviderOverrideAria": "Usuń zastąpienie {provider}", + "newProviderNamePlaceholder": "np. google, otwórz...", + "newProviderNameAria": "Nowa nazwa dostawcy", + "retries": "ponawia próby", + "ms": "pani", + "saveComboDefaults": "Zapisz domyślne ustawienia kombinacji", + "maxNestingDepth": "Maksymalna głębokość zagnieżdżenia", + "concurrencyPerModel": "Współbieżność/model", + "queueTimeout": "Limit czasu kolejki (ms)", + "providerProfiles": "Profile dostawców", + "providerProfilesDesc": "Oddzielne ustawienia odporności dla dostawców OAuth (opartych na sesji) i kluczy API (mierzonych). Dostawcy protokołu OAuth mają bardziej rygorystyczne progi ze względu na niższe limity stawek.", + "oauthProviders": "Dostawcy protokołu OAuth", + "apiKeyProviders": "Dostawcy kluczy API", + "transientCooldown": "Przejściowe odnowienie", + "rateLimitCooldown": "Czas odnowienia limitu szybkości", + "maxBackoffLevel": "Maksymalny poziom wycofania", + "cbThreshold": "Próg CB", + "cbResetTime": "Czas resetowania CB", + "rateLimiting": "Ograniczanie szybkości", + "rateLimitingDesc": "Dostawcy kluczy API mają automatycznie ograniczone stawki z bezpiecznymi ustawieniami domyślnymi. Limity są pobierane z nagłówków odpowiedzi i dostosowują się z czasem.", + "defaultSafetyNet": "Domyślna siatka bezpieczeństwa", + "rpm": "obr./min", + "minGap": "Minimalna przerwa", + "maxConcurrent": "Maksymalna liczba współbieżnych", + "activeLimiters": "Aktywne ograniczniki", + "noActiveLimiters": "Nie ma jeszcze aktywnych ograniczników szybkości.", + "reservoir": "Zbiornik", + "running": "Bieganie", + "queued": "W kolejce", + "circuitBreakers": "Wyłączniki automatyczne", + "breakerStateClosed": "Zamknięte", + "breakerStateOpen": "Otwórz", + "breakerStateHalfOpen": "Półotwarte", + "tripped": "{count} potknął się", + "healthy": "{count} zdrowy", + "resetAll": "Zresetuj wszystko", + "noCircuitBreakers": "Żadne wyłączniki automatyczne nie są jeszcze aktywne. Są tworzone automatycznie, gdy żądania przepływają przez potok kombi.", + "failures": "{count} awarie", + "policiesLocked": "Zasady i zablokowane identyfikatory", + "allOperational": "Wszystkie systemy działają — brak blokad i zadziałań wyłączników", + "loadingPolicies": "Ładowanie zasad...", + "lockedIdentifiers": "Zablokowane identyfikatory", + "unlockedIdentifier": "Odblokowano: {identifier}", + "sinceDate": "od {date}", + "forceUnlock": "Wymuś odblokowanie", + "unlocking": "Odblokowywanie...", + "failedUnlock": "Nie udało się odblokować", + "failedLoadWithStatus": "Nie udało się załadować: {status}", + "failedLoadResilience": "Nie udało się wczytać stanu odporności", + "saveFailed": "Zapisywanie nie powiodło się", + "resetFailed": "Resetowanie nie powiodło się", + "loadingResilience": "Ładowanie stanu odporności...", + "retry": "Spróbuj ponownie", + "systemStorage": "System i pamięć masowa", + "allDataLocal": "Wszystkie dane przechowywane lokalnie na Twoim komputerze", + "databasePath": "Ścieżka bazy danych", + "exportDatabase": "Eksportuj bazę danych", + "exportAll": "Eksportuj wszystko (.tar.gz)", + "importDatabase": "Importuj bazę danych", + "confirmDbImport": "Potwierdź import bazy danych", + "confirmDbImportDesc": "Spowoduje to zastąpienie wszystkich bieżących danych treścią z {file}. Kopia zapasowa zostanie utworzona automatycznie przed importem.", + "yesImport": "Tak, importuj", + "lastBackup": "Ostatnia kopia zapasowa", + "noBackupYet": "Nie ma jeszcze kopii zapasowej", + "backupNow": "Utwórz kopię zapasową teraz", + "backupRestore": "Kopia zapasowa i przywracanie", + "viewBackups": "Zobacz kopie zapasowe", + "hide": "Ukryj", + "backupRetentionDesc": "Migawki bazy danych są tworzone automatycznie przed przywróceniem i co 15 minut w przypadku zmiany danych. Przechowywanie: 24 godziny na dobę + 30 codziennych kopii zapasowych z inteligentną rotacją.", + "loadingBackups": "Ładowanie kopii zapasowych...", + "noBackupsYet": "Nie są jeszcze dostępne żadne kopie zapasowe. Kopie zapasowe zostaną utworzone automatycznie w przypadku zmiany danych.", + "backupsAvailable": "Dostępne są {count} kopie zapasowe", + "refresh": "Odśwież", + "confirm": "Potwierdzić?", + "yes": "Tak", + "no": "Nie", + "restore": "Przywróć", + "invalidFileType": "Nieprawidłowy typ pliku. Akceptowane są tylko pliki .sqlite.", + "exportFailed": "Eksport nie powiódł się", + "exportFailedWithError": "Eksport nie powiódł się: {error}", + "fullExportFailedWithError": "Pełny eksport nie powiódł się: {error}", + "backupCreated": "Utworzono kopię zapasową: {file}", + "restoreSuccess": "Przywrócony! {connections} połączenia, {nodes} węzły, {combos} kombinacje, {apiKeys} klucze API.", + "importSuccess": "Baza danych zaimportowana! {connections} połączenia, {nodes} węzły, {combos} kombinacje, {apiKeys} klucze API.", + "justNow": "właśnie teraz", + "minutesAgo": "{count}m temu", + "hoursAgo": "{count}h temu", + "daysAgo": "{count}d temu", + "backupReasonManual": "instrukcja", + "backupReasonPreRestore": "wstępne przywrócenie", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Żadnych zmian od ostatniej kopii zapasowej", + "backupFailed": "Tworzenie kopii zapasowej nie powiodło się", + "restoreFailed": "Przywracanie nie powiodło się", + "importFailed": "Import nie powiódł się", + "errorDuringRestore": "Podczas przywracania wystąpił błąd", + "errorDuringImport": "Wystąpił błąd podczas importu", + "modelPricing": "Ceny modeli", + "modelPricingDesc": "Konfiguruj stawki kosztów dla każdego modelu • Wszystkie stawki w tokenach $/1M", + "providers": "Dostawcy", + "registry": "Rejestr", + "priced": "Wyceniony", + "searchProvidersModels": "Wyszukaj dostawców lub modele...", + "showAll": "Pokaż wszystko", + "noProvidersMatch": "Żaden dostawca nie pasuje do Twojego wyszukiwania.", + "howPricingWorks": "Jak działa cena", + "cacheWrite": "Zapis w pamięci podręcznej", + "unsaved": "niezapisany", + "resetDefaults": "Zresetuj ustawienia domyślne", + "saveProvider": "Zapisz dostawcę", + "saving": "Zapisywanie...", + "model": "Modelka", + "models": "modele", + "moreProviders": "{count} więcej dostawców", + "withPricing": "ze skonfigurowaną ceną", + "policiesCircuitBreakers": "Zasady i wyłączniki automatyczne", + "activeIssuesDetected": "Wykryto aktywne problemy", + "off": "Wyłączone", + "resetPricingConfirm": "Zresetować wszystkie ceny {provider} do wartości domyślnych?", + "pricingDescInput": "Wejście: tokeny wysłane do modelu", + "pricingDescOutput": "Dane wyjściowe: wygenerowano tokeny", + "pricingDescCached": "Buforowane: ponownie wykorzystane dane wejściowe (~50% szybkości wprowadzania)", + "pricingDescReasoning": "Rozumowanie: żetony myślenia (wraca do Wyjścia)", + "pricingDescCacheWrite": "Zapis w pamięci podręcznej: tworzenie wpisów w pamięci podręcznej (powraca do opcji Wejście)", + "pricingDescFormula": "Koszt = (wejście × współczynnik_wejściowy) + (wyjście × współczynnik_wyjściowy) + (pamięć podręczna × szybkość_pamięci) na milion tokenów.", + "pricingSettingsTitle": "Ustawienia cenowe", + "totalModels": "Wszystkie modele", + "active": "Aktywny", + "costCalculation": "Kalkulacja kosztów", + "costCalculationDesc": "Koszty są obliczane na podstawie użycia tokena i stawek cenowych skonfigurowanych dla każdego modelu.", + "pricingFormat": "Formularz cenowy", + "pricingFormatDesc": "Wszystkie stawki podane są w tokenach $/1 milion (dolary na milion tokenów).", + "tokenTypes": "Typy tokenów", + "inputTokenDesc": "Standardowe tokeny zachęty", + "outputTokenDesc": "Żetony ukończenia/odpowiedzi", + "cachedTokenDesc": "Tokeny wejściowe w pamięci podręcznej (zwykle 50% szybkości wprowadzania)", + "reasoningTokenDesc": "Specjalne żetony rozumowania/myślenia (awaryjne tempo produkcji)", + "cacheCreationTokenDesc": "Tokeny używane do tworzenia wpisów w pamięci podręcznej (powrót do szybkości wprowadzania)", + "customPricingNote": "Możesz zastąpić domyślne ceny dla określonych modeli. Zastąpienia niestandardowe mają pierwszeństwo przed automatycznie wykrytymi cenami.", + "editPricing": "Edytuj ceny", + "viewFullDetails": "Zobacz pełne szczegóły" + }, + "translator": { + "title": "Tłumacz", + "metaTitle": "Plac zabaw dla tłumaczy | OmniRoute", + "metaDescription": "Debuguj, testuj i wizualizuj tłumaczenia formatów API między dostawcami", + "playgroundTitle": "Plac zabaw dla tłumaczy", + "playground": "Plac zabaw", + "realtime": "Działalność tłumaczeniowa w czasie rzeczywistym", + "chatTester": "Tester czatu", + "testBench": "Stanowisko testowe", + "liveMonitor": "Monitor na żywo", + "modeDescriptionPlayground": "Wklej treść żądania API i zobacz, jak OmniRoute tłumaczy ją pomiędzy formatami dostawców (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Wysyłaj prawdziwe prośby o czat za pośrednictwem OmniRoute i sprawdzaj cały proces w obie strony: dane wejściowe, przetłumaczone żądanie, odpowiedź dostawcy i przetłumaczone dane wyjściowe.", + "modeDescriptionTestBench": "Uruchamiaj predefiniowane scenariusze i porównuj kompatybilność między dostawcami i modelami.", + "modeDescriptionLiveMonitor": "Oglądaj wydarzenia związane z tłumaczeniami w czasie rzeczywistym, gdy żądania przepływają przez OmniRoute.", + "modeDescriptionFallback": "Debuguj, testuj i wizualizuj, jak OmniRoute tłumaczy żądania API między dostawcami.", + "recentTranslations": "Najnowsze tłumaczenia", + "noTranslations": "Nie ma jeszcze żadnych tłumaczeń", + "source": "Źródło", + "target": "Cel", + "time": "Czas", + "model": "Modelka", + "status": "Stan", + "latency": "Opóźnienie", + "totalTranslations": "Całkowita liczba tłumaczeń", + "successful": "Pomyślne", + "errors": "Błędy", + "avgLatency": "Średnie opóźnienie", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Na żywo — automatyczne odświeżanie", + "paused": "Wstrzymano", + "eventsAppearHint": "Zdarzenia związane z tłumaczeniem pojawiają się tutaj, gdy żądania przepływają przez OmniRoute. Aby wygenerować zdarzenia, użyj dowolnej z poniższych metod:", + "chatTesterTab": "Zakładka Tester czatu", + "testBenchTab": "Zakładka Stanowisko testowe", + "externalApiCalls": "Zewnętrzne wywołania API", + "ideCliIntegrations": "Integracje IDE/CLI", + "inMemoryNote": "Uwaga: Zdarzenia są przechowywane w pamięci i resetowane po ponownym uruchomieniu serwera.", + "ok": "OK", + "errorShort": "BŁĄD", + "formatConverter": "Konwerter formatów", + "formatConverterDescription": "Wklej lub wpisz treść żądania JSON. Tłumacz automatycznie wykryje format źródłowy i przekonwertuje go na format docelowy. Użyj tego, aby debugować sposób, w jaki OmniRoute tłumaczy żądania między formatami (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Wejście", + "output": "Wyjście", + "auto": "Automat", + "swapFormats": "Zamień formaty", + "translateAction": "Przetłumacz", + "clear": "Jasne", + "inputPlaceholder": "Wklej tutaj treść żądania lub wybierz szablon poniżej...", + "exampleTemplates": "Przykładowe szablony", + "exampleTemplatesHint": "— Kliknij, aby załadować", + "templateLoadHint": "Szablon ładuje żądanie w formacie {format}. Zmień format źródłowy, aby załadować w innym formacie.", + "compatibilityTester": "Tester kompatybilności", + "compatibilityReport": "Raport zgodności", + "testBenchDescription": "Uruchamiaj predefiniowane scenariusze (prosty czat, wywoływanie narzędzi itp.), aby zweryfikować tłumaczenie i zgodność dostawcy. Wybierz format źródłowy i dostawcę docelowego, a następnie uruchom wszystkie testy, aby sprawdzić procent zgodności. Użyj tego, aby dowiedzieć się, które funkcje działają u różnych dostawców.", + "targetProvider": "Dostawca docelowy", + "runAllTests": "Uruchom wszystkie testy", + "runTest": "Uruchom test", + "reRun": "Uruchom ponownie", + "running": "Bieganie...", + "passed": "minęło", + "failed": "nie powiodło się", + "passedIconLabel": "✅ Zdane", + "chunks": "kawałki", + "scenarioSimpleChat": "Prosty czat", + "scenarioToolCalling": "Wywołanie narzędzia", + "scenarioMultiTurn": "Wieloobrotowy", + "scenarioThinking": "Myślenie", + "scenarioSystemPrompt": "Monit systemowy", + "scenarioStreaming": "Transmisja strumieniowa", + "templateNames": { + "simple-chat": "Prosty czat", + "tool-calling": "Wywołanie narzędzia", + "multi-turn": "Wieloobrotowy", + "thinking": "Myślenie", + "system-prompt": "Monit systemowy", + "streaming": "Transmisja strumieniowa" + }, + "templateDescriptions": { + "simple-chat": "Podstawowy SMS", + "tool-calling": "Wywołanie funkcji/narzędzia", + "multi-turn": "Rozmowa z historią", + "thinking": "Rozszerzone myślenie/rozumowanie", + "system-prompt": "Złożone instrukcje systemowe", + "streaming": "Żądanie przesyłania strumieniowego SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Jesteś pomocnym asystentem.", + "userGreeting": "Witam! Jak się dzisiaj masz?" + }, + "toolCalling": { + "userWeather": "Jaka jest pogoda w São Paulo?", + "toolDescription": "Uzyskaj aktualną pogodę dla danej lokalizacji", + "cityNameDescription": "Nazwa miasta" + }, + "multiTurn": { + "system": "Jesteś asystentem kodowania.", + "userInitial": "Napisz funkcję sortującą tablicę w Pythonie.", + "assistantExample": "Oto prosta funkcja sortowania:\n\n```pyton\ndef sort_array(arr):\n zwróć posortowane (arr)\n```", + "userFollowUp": "Teraz posortuj w kolejności malejącej." + }, + "thinking": { + "question": "Jaka jest suma pierwszych 100 liczb pierwszych?" + }, + "systemPrompt": { + "systemInstruction": "Jesteś starszym inżynierem oprogramowania specjalizującym się w systemach rozproszonych. Odpowiadaj na pytania zwięźle, korzystając z najlepszych praktyk branżowych. W stosownych przypadkach zawsze podawaj przykłady kodu. Sformatuj swoje odpowiedzi, korzystając z przecen.", + "question": "Jak zaimplementować wzór wyłącznika?" + }, + "streaming": { + "prompt": "Opowiedz mi krótką historię o robocie uczącym się malować." + } + }, + "openaiCompatibleLabel": "Kompatybilny z OpenAI", + "anthropicCompatibleLabel": "Kompatybilny z antropią", + "noTemplateForFormat": "Brak szablonu dla tego formatu", + "translationFailed": "Tłumaczenie nie powiodło się: {error}", + "pipelineDebugger": "Debuger potoku", + "translationPipeline": "Potok tłumaczeń", + "pipelineVisualization": "Wizualizacja rurociągu", + "pipelineVisualizationHint": "Wyślij wiadomość, aby zobaczyć, jak Twoje żądanie przechodzi przez wykrywanie → tłumaczenie → połączenie z dostawcą.", + "chatTesterDescription": "Wysyłaj wiadomości w określonym formacie klienta i sprawdzaj każdy etap procesu tłumaczenia.", + "chatTesterFlow": "Żądanie klienta → Wykrywanie formatu → Średniozaawansowany OpenAI → Format dostawcy → Odpowiedź", + "clickStepToInspect": "Kliknij dowolny krok, aby sprawdzić dane na tym etapie.", + "clientFormat": "Format klienta", + "provider": "Dostawca", + "modelPlaceholder": "Wybierz lub wpisz nazwę modelu...", + "sendMessageToSeePipeline": "Wyślij wiadomość, aby zobaczyć proces tłumaczenia", + "chatMessageHintPrefix": "Twoja wiadomość zostanie sformatowana jako", + "chatMessageHintSuffix": "żądanie, przetłumaczone w potoku i wysłane do wybranego dostawcy.", + "youWithFormat": "Ty ({format})", + "assistant": "Asystent", + "typeMessage": "Wpisz wiadomość...", + "send": "Wyślij", + "clientRequest": "Żądanie klienta", + "clientRequestDescription": "Treść żądania, jaką wysłałby Twój klient", + "formatDetected": "Wykryto format", + "formatDetectedDescription": "OmniRoute automatycznie wykrywa format API na podstawie struktury żądania", + "openaiIntermediate": "Średniozaawansowany OpenAI", + "openaiIntermediateDescription": "Wszystkie formaty są najpierw normalizowane do formatu OpenAI (uniwersalny most)", + "providerFormat": "Format dostawcy", + "providerFormatDescription": "Format OpenAI jest tłumaczony na natywny format dostawcy", + "providerResponse": "Odpowiedź dostawcy", + "providerResponseRawDescription": "Surowa odpowiedź z interfejsu API dostawcy", + "providerResponseSseDescription": "Surowy strumień SSE z interfejsu API dostawcy", + "unexpectedError": "Wystąpił nieoczekiwany błąd", + "error": "Błąd", + "errorMessage": "Błąd: {message}", + "requestFailed": "Żądanie nie powiodło się", + "noTextExtracted": "(Nie wyodrębniono tekstu)", + "liveMonitorDescriptionPrefix": "Pokazuje zdarzenia związane z tłumaczeniem podczas przepływu wywołań API przez OmniRoute. Zdarzenia pochodzą z bufora w pamięci (resetują się przy ponownym uruchomieniu). Użyj", + "liveMonitorDescriptionSuffix": "lub zewnętrzne wywołania API w celu wygenerowania zdarzeń." + }, + "usage": { + "title": "Użycie", + "loggerTab": "Rejestrator", + "proxyTab": "Pełnomocnik", + "budgetManagement": "Zarządzanie budżetem", + "budgetSaved": "Limity budżetu zostały zapisane", + "budgetSaveFailed": "Nie udało się zapisać budżetu", + "loadingBudgetData": "Ładowanie danych budżetu...", + "noApiKeysTitle": "Brak kluczy API", + "noApiKeysDescription": "Najpierw dodaj klucze API, aby skonfigurować limity budżetu.", + "apiKey": "Klucz API", + "todaysSpend": "Dzisiejsze wydatki", + "thisMonth": "W tym miesiącu", + "setLimits": "Ustaw limity", + "dailyLimitUsd": "Limit dzienny (USD)", + "monthlyLimitUsd": "Limit miesięczny (USD)", + "warningThresholdPercent": "Próg ostrzegawczy (%)", + "dailyLimitPlaceholder": "np. 5.00", + "monthlyLimitPlaceholder": "np. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Zapisz limity", + "budgetOk": "Budżet OK — pozostało {remaining}", + "budgetExceeded": "Przekroczono budżet — żądania mogą zostać zablokowane", + "totalRequests": "Łączna liczba żądań", + "noDataYet": "Brak danych", + "latency": "Opóźnienie", + "latencyP50": "p50", + "latencyP95": "s. 95", + "latencyP99": "str. 99", + "promptCache": "Natychmiastowa pamięć podręczna", + "systemHealth": "Stan systemu", + "entries": "Wpisy", + "activeCount": "{count} aktywny", + "openCircuitBreakersDetected": "Wykryto otwarte wyłączniki automatyczne", + "hitRate": "Współczynnik trafień", + "hitsMisses": "Trafienia/chybienia", + "circuitBreakers": "Wyłączniki automatyczne", + "lockedIPs": "Zablokowane adresy IP", + "lockoutsAutoRefreshHint": "Blokady limitów prędkości dla poszczególnych modeli • Automatyczne odświeżanie 10 s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "Pozostało {time}", + "howItWorks": "Jak to działa", + "howItWorksSubtitle": "Dowiedz się, jak oceny weryfikują Twoje odpowiedzi LLM", + "define": "Zdefiniuj", + "defineStepDescription": "Twórz przypadki testowe z podpowiedziami wejściowymi i oczekiwanymi kryteriami wyjściowymi, korzystając ze strategii takich jak zawiera, wyrażenie regularne lub dopasowanie dokładne.", + "run": "Biegnij", + "runStepDescription": "Wykonuj przypadki testowe na punktach końcowych LLM za pośrednictwem OmniRoute. Każdy przypadek wysyłany jest jako prawdziwe żądanie API.", + "evaluate": "Oceń", + "evaluateStepDescription": "Odpowiedzi porównuje się z oczekiwanymi kryteriami. Zobacz wynik pozytywny/nieudany dla każdego przypadku ze wskaźnikami opóźnień i szczegółowymi informacjami zwrotnymi.", + "evalSuites": "Zestawy ewaluacyjne", + "evalSuitesHint": "Kliknij zestaw, aby wyświetlić przypadki testowe, a następnie uruchom, aby ocenić punkty końcowe LLM", + "evalsLoading": "Ładowanie pakietów eval...", + "noEvalSuitesFound": "Nie znaleziono apartamentów Eval", + "noEvalSuitesDescription": "Zestawy Eval można definiować za pomocą interfejsu API lub w kodzie. Testują wyniki modelu pod kątem oczekiwanych wyników, korzystając ze strategii takich jak zawiera, wyrażenie regularne, dopasowanie dokładne i funkcje niestandardowe.", + "columnCase": "Sprawa", + "columnStatus": "Stan", + "columnLatency": "Opóźnienie", + "columnDetails": "Szczegóły", + "columnModel": "Modelka", + "columnStrategy": "Strategia", + "columnExpected": "Oczekiwane", + "statsSuites": "Apartamenty", + "statsTestCases": "Przypadki testowe", + "statsModels": "Modele", + "statsCoverage": "Zasięg", + "statsStrategiesCount": "{count} strategie", + "evaluationStrategies": "Strategie ewaluacji", + "modelsUnderTest": "Modele w fazie testów", + "searchSuitesPlaceholder": "Wyszukaj apartamenty...", + "passSuffix": "przejść", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Uruchom Eval", + "runningProgress": "Uruchamiam {current}/{total}...", + "passRate": "wskaźnik zdawalności", + "summaryBreakdown": "{passed} zaliczony · {failed} nieudany · {total} łącznie", + "passedIconLabel": "✅ Zdane", + "failedIconLabel": "❌ Nie udało się", + "detailsContains": "Zawiera: „{term}”", + "detailsRegex": "Wyrażenie regularne: {pattern}", + "detailsExpected": "Oczekiwano: „{expected}”", + "noResultsYet": "Jeszcze żadnych wyników", + "testCasesCount": "Przypadki testowe ({count})", + "noTestCasesDefined": "Nie zdefiniowano przypadków testowych", + "runEvalHint": "Kliknij „Uruchom ocenę”, aby wykonać wszystkie przypadki w punkcie końcowym LLM. Każdy test wysyła prawdziwe żądanie poprzez OmniRoute.", + "notifyNoTestCases": "Dla tego pakietu nie zdefiniowano żadnych przypadków testowych", + "notifyAllCasesPassed": "Wszystkie {total} sprawy zaliczone ✅", + "notifySomeCasesFailed": "{passed}/{total} zaliczone, {failed} nie powiodło się", + "notifyEvalRunFailed": "Próba ewaluacyjna nie powiodła się", + "notifyEvalTitle": "Wartość: {name}", + "modelEvals": "Oceny modeli", + "evalsHeroDescription": "Przetestuj i zweryfikuj punkty końcowe LLM, uruchamiając predefiniowane zestawy ewaluacyjne. Każdy pakiet zawiera przypadki testowe, które wysyłają rzeczywiste podpowiedzi za pośrednictwem OmniRoute i porównują odpowiedzi z oczekiwanymi kryteriami — pomagając wykrywać regresje, porównywać modele i zapewniać jakość odpowiedzi u różnych dostawców.", + "qualityValidation": "Walidacja jakości", + "modelComparison": "Porównanie modeli", + "regressionDetection": "Wykrywanie regresji", + "latencyBenchmarks": "Testy porównawcze opóźnień", + "modelLockouts": "Blokady modeli", + "noLockouts": "Żaden model nie jest obecnie zablokowany", + "activeSessions": "Aktywne sesje", + "noSessions": "Brak aktywnych sesji", + "sessionsHint": "Sesje pojawiają się, gdy żądania przepływają przez serwer proxy", + "sessionsTrackedHint": "Śledzone poprzez odcisk palca na żądanie • Automatyczne odświeżanie 5 s", + "session": "Sesja", + "age": "Wiek", + "requests": "Żądania", + "connection": "Połączenie", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limity dostawcy", + "noProviders": "Brak podłączonych dostawców", + "connectProvidersForQuota": "Połącz się z dostawcami za pomocą protokołu OAuth, aby śledzić limity przydziału interfejsu API i wykorzystanie.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(odfiltrowano z {count})", + "autoRefresh": "Automatyczne odświeżanie", + "refreshAll": "Odśwież wszystko", + "loadingQuotas": "Ładowanie...", + "account": "Konto", + "modelQuotas": "Kwoty modelowe", + "lastUsed": "Ostatnio używany", + "actions": "Działania", + "refreshQuota": "Odśwież limit", + "today": "Dzisiaj", + "tomorrow": "Jutro", + "dayTimeFormat": "{day}, {time}", + "inDuration": "w {duration}", + "notApplicable": "Nie dotyczy", + "rawPlanWithValue": "Surowy plan: {plan}", + "noPlanFromProvider": "Brak planu od dostawcy", + "noQuotaData": "Brak danych dotyczących kwot", + "noQuotaDataAvailable": "Brak dostępnych danych dotyczących kwot", + "noAccountsForTierFilter": "Nie znaleziono kont dla filtra poziomów", + "tierAll": "Wszystko", + "tierEnterprise": "Przedsiębiorstwo", + "tierTeam": "Zespół", + "tierBusiness": "Biznes", + "tierUltra": "Ultra", + "tierPro": "Zawodowiec", + "tierPlus": "Dodatkowo", + "tierFree": "Bezpłatny", + "tierUnknown": "Nieznany" + }, + "modals": { + "waitingAuth": "Oczekiwanie na autoryzację", + "verificationUrl": "Adres URL weryfikacji", + "yourCode": "Twój kod", + "remoteAccess": "Zdalny dostęp:", + "connectedSuccess": "Połączono pomyślnie!", + "connectionFailed": "Połączenie nie powiodło się", + "chooseAuthMethod": "Wybierz metodę uwierzytelniania:", + "awsBuilderId": "Identyfikator konstruktora AWS", + "awsIamIdentity": "Centrum tożsamości AWS IAM", + "googleAccount": "Konto Google", + "githubAccount": "Konto GitHuba", + "importToken": "Importuj token", + "pasteToken": "Wklej token odświeżania z Kiro IDE.", + "awsRegion": "Regionu AWS", + "autoDetecting": "Automatyczne wykrywanie tokenów...", + "readingFromCache": "Odczyt z pamięci podręcznej AWS SSO", + "readingFromCursor": "Odczyt z bazy danych Cursor IDE", + "initializing": "Inicjowanie...", + "pricingConfig": "Konfiguracja cen", + "loadingPricing": "Ładowanie danych cenowych...", + "pricingRatesFormat": "Format stawek cenowych", + "noPricingData": "Brak danych o cenach", + "noModelsFound": "Nie znaleziono żadnych modeli" + }, + "loggers": { + "allProviders": "Wszyscy dostawcy", + "allModels": "Wszystkie modele", + "allAccounts": "Wszystkie konta", + "allApiKeys": "Wszystkie klucze API", + "allTypes": "Wszystkie typy", + "allLevels": "Wszystkie poziomy", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Ładowanie dzienników...", + "loadingProxyLogs": "Ładowanie dzienników proxy...", + "noLogEntries": "Nie znaleziono wpisów w dzienniku", + "noPayloadData": "Brak danych ładunku dla tego wpisu dziennika.", + "proxyEvent": "Wydarzenie proxy", + "proxy": "Pełnomocnik", + "level": "Poziom", + "directNative": "Bezpośrednie (natywne)", + "combo": "Kombinacja", + "inputTokens": "ja:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Przegląd użycia", + "outputTokens": "Tokeny wyjściowe", + "totalCost": "Całkowity koszt", + "usageByModel": "Użycie według modelu", + "usageByAccount": "Użycie według konta", + "failedToLoad": "Nie udało się załadować statystyk użytkowania.", + "tokenHealth": "Tokenowe zdrowie", + "totalOAuth": "Całkowite uwierzytelnienie OAuth", + "healthy": "Zdrowy", + "warning": "Ostrzeżenie", + "errored": "Błąd", + "lastCheck": "Ostatnia kontrola", + "noData": "Brak danych", + "share": "Udostępnij", + "unableToLoad": "Nie można załadować wskaźników systemowych", + "product": "Produkt", + "resources": "Zasoby", + "company": "Firma" + }, + "auth": { + "welcome": "Witamy", + "signIn": "Zaloguj się", + "enterPassword": "Wprowadź hasło, aby kontynuować", + "password": "Hasło", + "unifiedProxy": "Ujednolicony serwer proxy API AI", + "unifiedAiApiProxy": "Ujednolicony serwer proxy API AI", + "unifiedAiApiProxyDesc": "Kieruj żądania do wielu dostawców AI za pośrednictwem jednego punktu końcowego. Wbudowane równoważenie obciążenia, przełączanie awaryjne i śledzenie użycia.", + "passwordNotEnabled": "Ochrona hasłem nie jest włączona", + "loading": "Ładowanie...", + "invalidPassword": "Nieprawidłowe hasło", + "errorOccurredRetry": "Wystąpił błąd. Spróbuj ponownie.", + "configureInstance": "Skonfigurujmy Twoją instancję OmniRoute", + "runOnboardingWizard": "Uruchom kreatora wdrażania, aby ustawić hasło i połączyć się z pierwszym dostawcą AI.", + "startOnboarding": "Rozpocznij wdrażanie", + "secureYourInstance": "Zabezpiecz swoją instancję", + "setPasswordDescription": "Ustaw hasło, aby chronić swój pulpit nawigacyjny i zabezpieczyć punkty końcowe API przed nieautoryzowanym dostępem.", + "configurePassword": "Skonfiguruj hasło", + "continue": "Kontynuuj", + "windowWillClose": "To okno zamknie się automatycznie...", + "closeTabNow": "Możesz już zamknąć tę zakładkę.", + "copyUrlManual": "Skopiuj adres URL z paska adresu i wklej go w aplikacji.", + "accessDeniedDescription": "Nie masz uprawnień dostępu do tego zasobu. Sprawdź swój klucz API lub skontaktuj się z administratorem.", + "goToDashboard": "Przejdź do Panelu", + "featureMultiProviderTitle": "Wielu dostawców", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google i nie tylko", + "featureLoadBalancingTitle": "Równoważenie obciążenia", + "featureLoadBalancingDesc": "Rozpowszechniaj żądania inteligentnie", + "featureUsageTrackingTitle": "Śledzenie użycia", + "featureUsageTrackingDesc": "Monitoruj koszty i tokeny", + "resetPassword": "Zresetuj hasło", + "resetDescription": "Wybierz metodę odzyskania dostępu do pulpitu nawigacyjnego", + "stopServer": "Zatrzymaj serwer OmniRoute", + "processing": "Przetwarzanie...", + "pleaseWait": "Poczekaj, aż zakończymy autoryzację.", + "authSuccess": "Autoryzacja pomyślna!", + "copyUrl": "Skopiuj ten adres URL", + "accessDenied": "Odmowa dostępu", + "methodCliTitle": "Metoda 1: Reset CLI", + "methodCliDescription": "Uruchom następującą komendę na serwerze, na którym działa OmniRoute:", + "methodCliHint": "Spowoduje to wyświetlenie monitu o ustawienie nowego hasła. Najpierw należy zatrzymać serwer.", + "methodManualTitle": "Metoda 2: Reset ręczny", + "methodManualDescription": "Usuń hasło z bazy danych i przy uruchomieniu ustaw nowe:", + "setPasswordInYour": "Ustaw nowe hasło w swoim", + "fileLabelSuffix": "plik:", + "newPasswordPlaceholder": "twoje_nowe_hasło", + "deleteSettingsFile": "Usuń", + "orRemovePasswordHashField": "lub usuń pole hasłoHash", + "restartServerWithNewPassword": "Zrestartuj serwer - będzie używał nowego hasła", + "backToLogin": "Powrót do logowania", + "forgotPassword": "Zapomniałeś hasła?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Przejdź do domu", + "toggleMenu": "Przełącz menu", + "featuresLink": "Funkcje", + "docsLink": "Dokumenty", + "github": "GitHub", + "versionLive": "wersja 1.0 jest już dostępna", + "oneEndpoint": "Jeden punkt końcowy dla", + "allProviders": "Wszyscy dostawcy sztucznej inteligencji", + "heroDescription": "Serwer proxy punktu końcowego AI z panelem WWW — port JavaScript CLIProxyAPI. Bezproblemowo współpracuje z Claude Code, OpenAI Codex, Cline, RooCode i innymi narzędziami CLI.", + "getStarted": "Rozpocznij", + "viewOnGithub": "Zobacz na GitHubie", + "powerfulFeatures": "Potężne funkcje", + "featuresSubtitle": "Wszystko, czego potrzebujesz do zarządzania infrastrukturą AI w jednym miejscu, stworzonym z myślą o skali.", + "featureUnifiedEndpointTitle": "Ujednolicony punkt końcowy", + "featureUnifiedEndpointDesc": "Uzyskaj dostęp do wszystkich dostawców za pośrednictwem jednego standardowego adresu URL interfejsu API.", + "featureEasySetupTitle": "Łatwa konfiguracja", + "featureEasySetupDesc": "Rozpocznij pracę w ciągu kilku minut za pomocą polecenia npx.", + "featureModelFallbackTitle": "Model zastępczy", + "featureModelFallbackDesc": "Automatycznie przełączaj dostawców w przypadku awarii lub dużych opóźnień.", + "featureUsageTrackingTitle": "Śledzenie użycia", + "featureUsageTrackingDesc": "Szczegółowa analiza i monitorowanie kosztów we wszystkich modelach.", + "featureOAuthApiKeysTitle": "Klucze OAuth i API", + "featureOAuthApiKeysDesc": "Bezpiecznie zarządzaj danymi uwierzytelniającymi w jednym skarbcu.", + "featureCloudSyncTitle": "Synchronizacja w chmurze", + "featureCloudSyncDesc": "Błyskawicznie synchronizuj konfiguracje na różnych urządzeniach.", + "featureCliSupportTitle": "Wsparcie CLI", + "featureCliSupportDesc": "Współpracuje z Claude Code, Codex, Cline, Cursor i nie tylko.", + "featureDashboardTitle": "Pulpit nawigacyjny", + "featureDashboardDesc": "Wizualny pulpit nawigacyjny do analizy ruchu w czasie rzeczywistym.", + "howItWorks": "Jak działa OmniRoute", + "howItWorksDescription": "Dane płynnie przepływają z Twojej aplikacji przez naszą inteligentną warstwę routingu do najlepszego dostawcy dla danego zadania.", + "howItWorksStep1Title": "1. CLI i SDK", + "howItWorksStep1Description": "Twoje żądania zaczynają się od ulubionych narzędzi lub naszego ujednoliconego pakietu SDK. Po prostu zmień podstawowy adres URL.", + "howItWorksStep2Title": "2. Koncentrator OmniRoute", + "howItWorksStep2Description": "Nasz silnik analizuje monity, sprawdza stan dostawcy i trasy pod kątem najniższych opóźnień lub kosztów.", + "howItWorksStep3Title": "3. Dostawcy sztucznej inteligencji", + "howItWorksStep3Description": "Żądanie jest natychmiast spełniane przez OpenAI, Anthropic, Gemini lub inne.", + "getStartedIn30Seconds": "Rozpocznij w 30 sekund", + "getStartedDescription": "Zainstaluj OmniRoute, skonfiguruj dostawców za pomocą panelu internetowego i rozpocznij przekierowywanie żądań AI.", + "installOmniRoute": "Zainstaluj OmniRoute", + "installStepDescription": "Uruchom polecenie npx, aby natychmiast uruchomić serwer", + "openDashboard": "Otwórz Panel", + "openDashboardStepDescription": "Skonfiguruj dostawców i klucze API za pośrednictwem interfejsu internetowego", + "routeRequests": "Żądania dotyczące trasy", + "routeRequestsStepDescription": "Skieruj swoje narzędzia CLI na {endpoint}", + "terminal": "terminala", + "copy": "Kopiuj", + "copied": "✓ Skopiowano", + "startingOmniRoute": "Uruchamiam OmniRoute...", + "serverRunningOnLabel": "Serwer działa", + "dashboardLabel": "Pulpit nawigacyjny", + "readyToRoute": "Gotowy do trasy! ✓", + "configureProvidersNote": "📝 Skonfiguruj dostawców w panelu kontrolnym lub użyj zmiennych środowiskowych", + "dataLocation": "Lokalizacja danych:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Okna:", + "product": "Produkt", + "dashboardLink": "Pulpit nawigacyjny", + "changelog": "Dziennik zmian", + "resources": "Zasoby", + "documentation": "Dokumentacja", + "npm": "NPM", + "legal": "Legalne", + "mitLicense": "Licencja MIT", + "footerTagline": "Ujednolicony punkt końcowy do generowania sztucznej inteligencji. Z łatwością łącz się, kieruj i zarządzaj dostawcami sztucznej inteligencji.", + "copyright": "© {year} OmniRoute. Wszelkie prawa zastrzeżone.", + "flowToolClaudeCode": "Claude'a Koda", + "flowToolOpenAICodex": "Kodeks OpenAI", + "flowToolCline": "Cline", + "flowToolCursor": "Kursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropiczny", + "flowProviderGemini": "Bliźnięta", + "flowProviderGithubCopilot": "Drugi pilot GitHuba", + "interactiveDiagram": "Interaktywny diagram widoczny na pulpicie", + "ctaTitle": "Chcesz uprościć swoją infrastrukturę AI?", + "ctaDescription": "Dołącz do programistów, którzy usprawniają integrację sztucznej inteligencji za pomocą OmniRoute. Oprogramowanie typu open source i na początek bezpłatne.", + "startFree": "Zacznij za darmo", + "readDocumentation": "Przeczytaj dokumentację" + }, + "docs": { + "title": "Dokumentacja", + "quickStart": "Szybki start", + "features": "Funkcje", + "supportedProviders": "Obsługiwani dostawcy", + "supportedProvidersToc": "Dostawcy", + "commonUseCases": "Typowe przypadki użycia", + "clientCompatibility": "Zgodność klienta", + "apiReference": "Dokumentacja API", + "method": "Metoda", + "path": "Ścieżka", + "notes": "Notatki", + "modelPrefixes": "Przedrostki modeli", + "prefix": "Przedrostek", + "troubleshooting": "Rozwiązywanie problemów", + "supportsChat": "Obsługuje punkty końcowe czatu i odpowiedzi.", + "oauthAutoRefresh": "Połączenie OAuth z automatycznym odświeżaniem tokena.", + "fullStreaming": "Pełna obsługa transmisji strumieniowej dla wszystkich modeli.", + "docsLabel": "Dokumenty", + "docsHeroDescription": "Brama AI dla LLM wielu dostawców. Jeden punkt końcowy dla OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor i ponad 20 innych dostawców.", + "openDashboard": "Otwórz Panel", + "endpointPage": "Strona punktu końcowego", + "github": "GitHub", + "reportIssue": "Zgłoś problem", + "onThisPage": "Na tej stronie", + "documentationVersion": "Dokumentacja - v{version}", + "quickStartStep1Title": "1. Zainstaluj i uruchom", + "quickStartStep1Prefix": "Biegnij", + "quickStartStep1Middle": "lub sklonuj z GitHub i uruchom", + "quickStartStep2Title": "2. Utwórz klucz API", + "quickStartStep2Text": "Przejdź do Punkt końcowy -> Zarejestrowane klucze. Wygeneruj jeden klucz na środowisko.", + "quickStartStep3Title": "3. Połącz dostawców", + "quickStartStep3Text": "Dodaj konta dostawców za pomocą loginu OAuth, klucza API lub automatycznego łączenia w warstwie bezpłatnej.", + "quickStartStep4Title": "4. Ustaw podstawowy adres URL klienta", + "quickStartStep4Prefix": "Wskaż klienta IDE lub API", + "quickStartStep4Suffix": "Użyj na przykład prefiksu dostawcy", + "featureRoutingTitle": "Routing wielu dostawców", + "featureRoutingText": "Kieruj żądania do ponad 30 dostawców AI za pośrednictwem jednego punktu końcowego kompatybilnego z OpenAI. Obsługuje interfejsy API czatu, odpowiedzi, dźwięku i obrazu.", + "featureCombosTitle": "Kombinacje i balansowanie", + "featureCombosText": "Twórz kombinacje modeli z łańcuchami awaryjnymi i strategiami równoważenia: okrężne, priorytetowe, losowe, najrzadziej używane i zoptymalizowane pod względem kosztów.", + "featureUsageTitle": "Śledzenie wykorzystania i kosztów", + "featureUsageText": "Liczenie tokenów w czasie rzeczywistym, kalkulacja kosztów dla każdego dostawcy/modelu oraz szczegółowy podział wykorzystania według klucza API i konta.", + "featureAnalyticsTitle": "Panel analityczny", + "featureAnalyticsText": "Analityka wizualna z wykresami żądań, tokenów, błędów, opóźnień, kosztów i popularności modelu w czasie.", + "featureHealthTitle": "Monitorowanie zdrowia", + "featureHealthText": "Kontrole stanu na żywo, status dostawcy, stany wyłączników i automatyczne wykrywanie limitów szybkości z wykładniczym wycofywaniem.", + "featureCliTitle": "Narzędzia interfejsu wiersza polecenia", + "featureCliText": "Zarządzaj konfiguracjami IDE, eksportuj/importuj kopie zapasowe, odkrywaj profile Codexu i konfiguruj ustawienia z poziomu pulpitu nawigacyjnego.", + "featureSecurityTitle": "Bezpieczeństwo i zasady", + "featureSecurityText": "Uwierzytelnianie kluczem API, filtrowanie IP, ochrona przed wtryskiem, zasady domeny, zarządzanie sesjami i rejestrowanie audytu.", + "featureCloudSyncTitle": "Synchronizacja w chmurze", + "featureCloudSyncText": "Zsynchronizuj swoją konfigurację z Cloudflare Workers, aby uzyskać zdalny dostęp za pomocą szyfrowanych poświadczeń i automatycznego przełączania awaryjnego.", + "providersAcrossConnectionTypes": "{count} dostawców dla trzech typów połączeń.", + "manageProviders": "Zarządzaj dostawcami", + "providersCount": "{count} dostawców", + "providerTypeFree": "Poziom bezpłatny", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Klucz API", + "useCaseSingleEndpointTitle": "Jeden punkt końcowy dla wielu dostawców", + "useCaseSingleEndpointText": "Wskaż klientom jeden podstawowy adres URL i trasę według prefiksu modelu (na przykład: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Przełączanie awaryjne i modelowe za pomocą kombinacji", + "useCaseFallbackText": "Twórz modele łączone w panelu kontrolnym i utrzymuj stabilną konfigurację klienta, podczas gdy dostawcy zmieniają się wewnętrznie.", + "useCaseUsageVisibilityTitle": "Widoczność użycia, kosztów i debugowania", + "useCaseUsageVisibilityText": "Śledź tokeny i koszty według dostawcy, konta i klucza API na kartach Użycie i Analityka.", + "clientCherryStudioTitle": "Wiśniowe Studio", + "baseUrlLabel": "Bazowy adres URL", + "chatEndpointLabel": "Punkt końcowy czatu", + "modelRecommendationLabel": "Rekomendacja modelu: wyraźny przedrostek", + "clientCodexTitle": "Modele drugiego pilota w Kodeksie/GitHub", + "clientCodexBullet1": "Użyj identyfikatorów modeli z", + "clientCodexBullet2": "Modele z rodziny Codex automatycznie kierują się do", + "clientCodexBullet3": "Modele inne niż Kodeks są kontynuowane", + "clientCursorTitle": "Kursor IDE", + "clientCursorBullet1": "Użyj", + "clientCursorBullet1Suffix": "przedrostek dla modeli kursora.", + "clientCursorBullet2": "Połączenie OAuth - zaloguj się ze strony Dostawcy.", + "clientClaudeTitle": "Kod Claude'a / Antygrawitacja", + "clientClaudeBullet1Prefix": "Użyj", + "clientClaudeBullet1Middle": "(Claude) lub", + "clientClaudeBullet1Suffix": "Przedrostek (Antygrawitacja).", + "endpointChatNote": "Punkt końcowy czatu zgodny z OpenAI (domyślnie).", + "endpointResponsesNote": "Punkt końcowy interfejsu API odpowiedzi (Kodeks, seria o).", + "endpointModelsNote": "Katalog modeli dla wszystkich podłączonych dostawców.", + "endpointAudioNote": "Transkrypcja audio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Generowanie obrazu (NanoBanana).", + "endpointRewriteChatNote": "Przepisz pomocnika dla klientów bez /v1.", + "endpointRewriteResponsesNote": "Przepisz pomocnika dla odpowiedzi bez /v1.", + "endpointRewriteModelsNote": "Przepisz pomocnika do wykrywania modelu bez /v1.", + "modelPrefixesDescriptionStart": "Użyj prefiksu dostawcy przed nazwą modelu, aby przekierować do określonego dostawcy. Przykład:", + "modelPrefixesDescriptionEnd": "trasy do GitHub Copilot.", + "provider": "Dostawca", + "type": "Wpisz", + "troubleshootingModelRouting": "Jeśli klientowi nie powiedzie się routing modelu, użyj jawnego dostawcy/modelu (na przykład: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Jeśli otrzymujesz niejednoznaczne błędy modelu, wybierz prefiks dostawcy zamiast samego identyfikatora modelu.", + "troubleshootingCodexFamily": "W przypadku modeli z rodziny GitHub Codex zachowaj model jako gh/; router wybiera opcję /odpowiada automatycznie.", + "troubleshootingTestConnection": "Użyj Panelu sterowania > Dostawcy > Testuj połączenie przed testowaniem z IDE lub klientów zewnętrznych.", + "troubleshootingCircuitBreaker": "Jeśli dostawca pokazuje, że wyłącznik jest otwarty, poczekaj na ochłodzenie lub sprawdź stronę Zdrowie, aby uzyskać szczegółowe informacje.", + "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy." + }, + "legal": { + "privacyPolicy": "Polityka prywatności", + "termsOfService": "Warunki świadczenia usług", + "providerConfigurations": "Konfiguracje dostawców", + "apiKeys": "Klucze API", + "usageLogs": "Dzienniki użytkowania", + "applicationSettings": "Ustawienia aplikacji", + "viewExportAnalytics": "Przeglądaj i eksportuj analizy użytkowania", + "clearHistory": "Wyczyść historię użytkowania w dowolnym momencie", + "configureRetention": "Skonfiguruj zasady przechowywania dzienników", + "backupRestore": "Utwórz kopię zapasową i przywróć bazę danych", + "privacyMetadataTitle": "Polityka prywatności | OmniRoute", + "privacyMetadataDescription": "Polityka prywatności routera proxy OmniRoute AI API.", + "termsMetadataTitle": "Warunki świadczenia usług | OmniRoute", + "termsMetadataDescription": "Warunki korzystania z routera proxy OmniRoute AI API.", + "backToHome": "Powrót do domu", + "lastUpdated": "Ostatnia aktualizacja: {date}", + "policyLastUpdatedDate": "13 lutego 2026 r", + "listSeparator": "-", + "questionsVisit": "Pytania? Odwiedź nasze", + "githubRepository": "Repozytorium GitHuba", + "privacySection1Title": "1. Architektura lokalna", + "privacySection1Text": "OmniRoute zaprojektowano jako aplikację działającą lokalnie. Całe przetwarzanie i przechowywanie danych odbywa się wyłącznie na Twoim komputerze. Nie ma scentralizowanego serwera gromadzącego Twoje dane.", + "privacySection2Title": "2. Dane, które przechowujemy", + "privacyDataStoredIn": "Następujące dane są przechowywane lokalnie w", + "privacyDataProviderConfigurationsDesc": "adresy URL połączeń, typy dostawców i ustawienia priorytetów", + "privacyDataApiKeysDesc": "szyfrowane i przechowywane lokalnie w celu uwierzytelniania u dostawców sztucznej inteligencji", + "privacyDataUsageLogsDesc": "liczba żądań, użycie tokena, nazwy modeli, znaczniki czasu i czasy odpowiedzi", + "privacyDataApplicationSettingsDesc": "preferencje tematyczne, strategia routingu i konfiguracje kombinacji", + "privacySection3Title": "3. Brak telemetrii", + "privacySection3Text": "OmniRoute nie zbiera danych telemetrycznych, analiz ani raportów o awariach. Żadne dane nie są przesyłane do nas ani do osób trzecich. Twoje wzorce użytkowania, wywołania API i konfiguracje pozostają całkowicie prywatne.", + "privacySection4Title": "4. Zewnętrzni dostawcy AI", + "privacySection4Text": "Gdy wykonujesz wywołania API za pośrednictwem OmniRoute, Twoje żądania są przekazywane do skonfigurowanych dostawców AI (na przykład: OpenAI, Anthropic, Google). Dostawcy ci mają własne zasady ochrony prywatności, które regulują sposób postępowania z Twoimi danymi. Proszę przejrzeć:", + "privacyOpenAiPolicy": "Polityka prywatności OpenAI", + "privacyAnthropicPolicy": "Antropiczna polityka prywatności", + "privacyGooglePolicy": "Polityka prywatności Google", + "privacySection5Title": "5. Synchronizacja z chmurą (opcjonalnie)", + "privacySection5Text": "Jeśli włączysz opcjonalną funkcję synchronizacji z chmurą, konfiguracje dostawców i klucze API mogą zostać przesłane do skonfigurowanego punktu końcowego chmury. Ta funkcja jest domyślnie wyłączona i wymaga wyraźnej zgody.", + "privacySection6Title": "6. Rejestrowanie", + "privacyLoggingIntro": "Dzienniki żądań można skonfigurować w ustawieniach panelu kontrolnego. Możesz:", + "privacySection7Title": "7. Twoje prawa", + "privacySection7TextStart": "Ponieważ wszystkie dane są przechowywane lokalnie, masz pełną kontrolę. W każdej chwili możesz usunąć swoje dane usuwając plik", + "privacySection7TextEnd": "katalogu lub korzystając z funkcji tworzenia kopii zapasowych i przywracania bazy danych na pulpicie nawigacyjnym.", + "termsSection1Title": "1. Przegląd", + "termsSection1Text": "OmniRoute to lokalny router proxy AI API, który działa całkowicie na Twoim komputerze. Kieruje żądania do wielu dostawców AI z równoważeniem obciążenia, przełączaniem awaryjnym i śledzeniem użycia.", + "termsSection2Title": "2. Obowiązki użytkownika", + "termsResponsibilityApiKeys": "Ponosisz wyłączną odpowiedzialność za zarządzanie własnymi kluczami API i danymi uwierzytelniającymi dla zewnętrznych dostawców sztucznej inteligencji (OpenAI, Anthropic, Google itp.).", + "termsResponsibilityCompliance": "Musisz przestrzegać warunków świadczenia usług każdego dostawcy AI, do którego API uzyskujesz dostęp za pośrednictwem OmniRoute.", + "termsResponsibilitySecurity": "Jesteś odpowiedzialny za bezpieczeństwo swojej lokalnej instalacji OmniRoute, w tym za ustawienie hasła i ograniczenie dostępu do sieci.", + "termsSection3Title": "3. Jak to działa", + "termsSection3Text": "OmniRoute działa jako pośrednik proxy. Wywołania API wysyłane do OmniRoute są tłumaczone i przekazywane do skonfigurowanych dostawców AI. OmniRoute nie modyfikuje treści Twoich żądań ani odpowiedzi poza niezbędnym tłumaczeniem protokołu.", + "termsSection4Title": "4. Przetwarzanie danych", + "termsDataStoredLocally": "Wszystkie dane są przechowywane lokalnie na Twoim komputerze w bazie danych SQLite.", + "termsNoTransmission": "OmniRoute nie przesyła żadnych danych do serwerów zewnętrznych, chyba że wyraźnie włączysz funkcje synchronizacji w chmurze.", + "termsDataLocationText": "Dzienniki użytkowania, klucze API i konfiguracja są przechowywane w", + "termsSection5Title": "5. Zastrzeżenie", + "termsSection5Text": "Usługa OmniRoute jest dostarczana w stanie takim, w jakim jest, bez jakiejkolwiek gwarancji. Nie ponosimy odpowiedzialności za jakiekolwiek koszty powstałe w wyniku korzystania z API, zakłóceń w świadczeniu usług lub utraty danych. Zawsze twórz kopie zapasowe swojej konfiguracji.", + "termsSection6Title": "6. Otwarte źródło", + "termsSection6Text": "OmniRoute jest oprogramowaniem typu open source. Możesz go przeglądać, modyfikować i rozpowszechniać zgodnie z warunkami licencji." + } +} diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 47d4dde010..b50fcdb015 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -192,7 +192,7 @@ "deleteConfirm": "Excluir esta chave de API?", "usageTips": "Dicas de Uso", "tipAuth": "Use chaves de API no cabeçalho Authorization como Bearer SUA_CHAVE", - "tipSecure": "As chaves são mostradas apenas uma vez durante a criação \u2014 armazene-as com segurança", + "tipSecure": "As chaves são mostradas apenas uma vez durante a criação — armazene-as com segurança", "tipSeparate": "Crie chaves separadas para diferentes clientes ou ambientes", "tipRestrict": "Restrinja chaves a modelos específicos para maior segurança e controle de custos", "keyName": "Nome da Chave", @@ -200,7 +200,7 @@ "keyNameDesc": "Escolha um nome descritivo para identificar o propósito desta chave", "keyCreated": "Chave de API Criada", "keyCreatedSuccess": "Chave criada com sucesso!", - "keyCreatedNote": "Copie e armazene esta chave agora \u2014 ela não será mostrada novamente.", + "keyCreatedNote": "Copie e armazene esta chave agora — ela não será mostrada novamente.", "done": "Pronto", "savePermissions": "Salvar Permissões", "allowAll": "Permitir Tudo", @@ -498,7 +498,7 @@ "errorDeleting": "Erro ao excluir combo", "testFailed": "Requisição de teste falhou", "failedToggle": "Falha ao alternar combo", - "testResults": "Resultados do Teste \u2014 {name}", + "testResults": "Resultados do Teste — {name}", "resolvedBy": "Resolvido por:", "more": "+{count} mais", "reqs": "reqs", @@ -737,7 +737,7 @@ "confirmPasswordPlaceholder": "Confirme a senha", "passwordsMismatch": "As senhas não coincidem", "setupComplete": "Configuração Concluída!", - "goToDashboard": "Ir para o Painel \u2192", + "goToDashboard": "Ir para o Painel →", "welcomeDesc": "OmniRoute é seu proxy local de API de IA. Ele roteia requisições para múltiplos provedores de IA com balanceamento de carga, failover e rastreamento de uso.", "multiProvider": "Multi-Provedor", "usageTracking": "Rastreamento de Uso", @@ -759,7 +759,8 @@ "retry": "Tentar Novamente", "failedSetPassword": "Falha ao definir senha. Tente novamente.", "failedAddProvider": "Falha ao adicionar provedor. Tente novamente.", - "connectionError": "Erro de conexão. Tente novamente." + "connectionError": "Erro de conexão. Tente novamente.", + "provider": "Provedor" }, "providers": { "title": "Provedores", @@ -989,7 +990,6 @@ "openaiCompatibleModelPlaceholder": "gpt-4o", "apiKeyValidationFailed": "A validação da chave de API falhou. Verifique sua chave e tente novamente.", "addProviderApiKeyTitle": "Adicionar Chave de API de {provider}", - "apiKeyLabel": "Chave de API", "checking": "Verificando...", "check": "Verificar", "valid": "Válido", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json new file mode 100644 index 0000000000..8f4faed07c --- /dev/null +++ b/src/i18n/messages/pt.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Salvar", + "cancel": "Cancelar", + "delete": "Excluir", + "loading": "Carregando...", + "error": "Ocorreu um erro", + "success": "Sucesso", + "confirm": "Você tem certeza?", + "refresh": "Atualizar", + "close": "Fechar", + "add": "Adicionar", + "edit": "Editar", + "search": "Pesquisar", + "back": "Voltar", + "next": "Próximo", + "submit": "Enviar", + "reset": "Redefinir", + "copy": "Copiar", + "copied": "Copiado!", + "enabled": "Habilitado", + "disabled": "Desativado", + "active": "Ativo", + "inactive": "Inativo", + "noData": "Não há dados disponíveis", + "configure": "Configurar", + "manage": "Gerenciar", + "name": "Nome", + "actions": "Ações", + "status": "Estado", + "type": "Tipo", + "model": "Modelo", + "models": "modelos", + "provider": "Provedor", + "account": "Conta", + "time": "Hora", + "details": "Detalhes", + "created": "Criado", + "lastUsed": "Último uso", + "loadMore": "Carregar mais", + "noResults": "Nenhum resultado encontrado", + "reloadPage": "Recarregar página", + "connected": "Conectado", + "disconnected": "Desconectado", + "notConfigured": "Não configurado", + "testConnection": "Conexão de teste", + "enable": "Habilitar", + "disable": "Desativar", + "columns": "Colunas", + "newest": "Mais recente", + "oldest": "Mais antigo", + "all": "Todos", + "none": "Nenhum", + "yes": "Sim", + "no": "Não", + "warning": "Aviso", + "note": "Nota", + "free": "Grátis", + "skipToContent": "Pular para o conteúdo" + }, + "sidebar": { + "home": "Página inicial", + "dashboard": "Painel", + "providers": "Provedores", + "combos": "Combos", + "usage": "Uso", + "analytics": "Análise", + "costs": "Custos", + "health": "Saúde", + "limits": "Limites e cotas", + "cliTools": "Ferramentas CLI", + "settings": "Configurações", + "translator": "Tradutor", + "docs": "Documentos", + "issues": "Problemas", + "endpoint": "Ponto final", + "apiManager": "Gerenciador de APIs", + "logs": "Registros", + "auditLog": "Registro de auditoria", + "shutdown": "Desligamento", + "restart": "Reiniciar", + "shutdownConfirm": "Desligar o OmniRoute?", + "restartConfirm": "Reiniciar o OmniRoute?", + "version": "v{version}", + "debug": "Depurar", + "system": "Sistema", + "help": "Ajuda", + "serverDisconnected": "Servidor desconectado", + "serverDisconnectedMsg": "O servidor proxy foi interrompido ou está reiniciando.", + "expandSidebar": "Expandir barra lateral", + "collapseSidebar": "Recolher barra lateral" + }, + "header": { + "logout": "Sair", + "language": "Idioma", + "providers": "Provedores", + "providerDescription": "Gerencie suas conexões de provedor de IA", + "combos": "Combos", + "comboDescription": "Combinações de modelos com substituto", + "usage": "Uso e análise", + "usageDescription": "Monitore o uso da API, o consumo de tokens e os registros de solicitação", + "analytics": "Análise", + "analyticsDescription": "Gráficos, tendências e insights de avaliação", + "cliTools": "Ferramentas CLI", + "cliToolsDescription": "Configurar ferramentas CLI", + "home": "Página inicial", + "homeDescription": "Bem-vindo ao OmniRoute", + "endpoint": "Ponto final", + "endpointDescription": "Configuração de endpoint de API", + "settings": "Configurações", + "settingsDescription": "Gerencie suas preferências", + "openaiCompatible": "Compatível com OpenAI", + "anthropicCompatible": "Compatível Antrópico" + }, + "home": { + "quickStart": "Início rápido", + "quickStartDesc": "Comece a trabalhar em 4 etapas. Conecte provedores, encaminhe modelos, monitore tudo.", + "fullDocs": "Documentos completos", + "step1Title": "1. Crie uma chave API", + "step1Desc": "Vá para Endpoint -> Chaves registradas. Gere uma chave por ambiente.", + "step2Title": "2. Conecte provedores", + "step2Desc": "Adicione contas em Providers. Suporta OAuth, chave de API e níveis gratuitos.", + "step3Title": "3. Aponte seu cliente", + "step3Desc": "Defina o URL base como {url} em seu IDE ou cliente API.", + "step4Title": "4. Monitore e otimize", + "step4Desc": "Rastreie tokens, custos e erros em Logs de solicitação e Analytics.", + "providersOverview": "Visão geral dos provedores", + "configuredOf": "{configured} configurado de {total} provedores disponíveis", + "noModelsAvailable": "Nenhum modelo disponível para este fornecedor.", + "configureFirst": "Configure uma conexão primeiro em {providers}", + "configureProvider": "Configurar provedor", + "modelAvailable": "Modelo {count} disponível", + "modelsAvailable": "{count} modelos disponíveis", + "connectionsActive": "{count} conexão ativa", + "connectionsActivePlural": "{count} conexões ativas", + "copyModelName": "Copiar nome do modelo", + "documentation": "Documentação", + "healthMonitor": "Monitor de Saúde", + "reportIssue": "Informar problema", + "activeError": "{active} ativo · Erro {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "Chave de API", + "requestsShort": "{count} requisitos", + "providerModelsTitle": "{provider} - Modelos", + "copiedModel": "Copiado: {model}", + "aliasLabel": "apelido" + }, + "analytics": { + "title": "Análise", + "overviewDescription": "Monitore seus padrões de uso de API, consumo de tokens, custos e tendências de atividades em todos os provedores e modelos.", + "evalsDescription": "Execute conjuntos de avaliação para testar e validar seus endpoints LLM. Compare a qualidade do modelo, detecte regressões e compare a latência.", + "overview": "Visão geral", + "evals": "Avaliações" + }, + "apiManager": { + "title": "Chaves de API", + "createKey": "Criar chave de API", + "key": "Chave", + "revokeKey": "Revogar chave", + "revokeConfirm": "Tem certeza de que deseja revogar esta chave de API?", + "noKeys": "Ainda não há chaves de API", + "noKeysDesc": "Crie sua primeira chave de API para autenticar solicitações em seu endpoint", + "keyLabel": "Etiqueta-chave", + "permissions": "Permissões", + "expiresAt": "Expira", + "never": "Nunca", + "revoke": "Revogar", + "showKey": "Mostrar chave", + "hideKey": "Ocultar chave", + "copyKey": "Copiar chave de API", + "allModels": "Todos os modelos", + "selectedModels": "Modelos Selecionados", + "readOnly": "Somente leitura", + "fullAccess": "Acesso total", + "keyManagement": "Gerenciamento de chaves de API", + "keyManagementDesc": "Crie e gerencie chaves de API para autenticar solicitações em seu endpoint", + "totalKeys": "Total de chaves", + "restricted": "Restrito", + "totalRequests": "Total de solicitações", + "modelsAvailable": "Modelos Disponíveis", + "registeredKeys": "Chaves Registradas", + "keysRegistered": "{count} chaves registradas", + "keyRegistered": "{count} chave registrada", + "keysSecurityNote": "Cada chave isola o rastreamento de uso e pode ser revogada de forma independente. As chaves são mascaradas após a criação por segurança.", + "createFirstKey": "Crie sua primeira chave", + "name": "Nome", + "usage": "Uso", + "created": "Criado", + "actions": "Ações", + "reqs": "requisitos", + "neverUsed": "Nunca usado", + "deleteConfirm": "Excluir esta chave de API?", + "usageTips": "Dicas de uso", + "tipAuth": "Use chaves de API no cabeçalho de autorização como portador YOUR_KEY", + "tipSecure": "As chaves são mostradas apenas uma vez durante a criação – armazene-as com segurança", + "tipSeparate": "Crie chaves separadas para diferentes clientes ou ambientes", + "tipRestrict": "Restrinja chaves a modelos específicos para melhor segurança e controle de custos", + "keyName": "Nome da chave", + "keyNamePlaceholder": "por exemplo, chave de produção, chave de desenvolvimento", + "keyNameDesc": "Escolha um nome descritivo para identificar a finalidade desta chave", + "keyCreated": "Chave de API criada", + "keyCreatedSuccess": "Chave criada com sucesso!", + "keyCreatedNote": "Copie e armazene esta chave agora — ela não será mostrada novamente.", + "done": "Concluído", + "savePermissions": "Salvar permissões", + "allowAll": "Permitir tudo", + "restrict": "Restringir", + "allowAllInfo": "Esta chave pode acessar todos os modelos disponíveis.", + "restrictInfo": "Esta chave pode acessar {selected} de modelos {total}.", + "selected": "{count} selecionado", + "all": "Todos", + "clear": "Limpar", + "searchModels": "Pesquise modelos por nome ou fornecedor...", + "noModelsFound": "Nenhum modelo encontrado", + "keyNameRequired": "O nome da chave é obrigatório", + "keyNameTooLong": "O nome da chave deve ter {max} caracteres ou menos", + "keyNameInvalid": "O nome da chave só pode conter letras, números, espaços, hifens e sublinhados", + "invalidKeyName": "Nome de chave inválido", + "failedCreateKey": "Falha ao criar chave", + "failedCreateKeyRetry": "Falha ao criar chave. Por favor, tente novamente.", + "invalidKeyId": "ID de chave inválido", + "failedDeleteKey": "Falha ao excluir a chave", + "failedDeleteKeyRetry": "Falha ao excluir a chave. Por favor, tente novamente.", + "invalidModelsSelection": "Seleção de modelos inválidos", + "cannotSelectMoreThanModels": "Não é possível selecionar mais de {max} modelos", + "failedUpdatePermissions": "Falha ao atualizar as permissões", + "failedUpdatePermissionsRetry": "Falha ao atualizar as permissões. Por favor, tente novamente.", + "unknownProvider": "desconhecido", + "copyMaskedKey": "Copiar chave mascarada", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Último: {date}", + "editPermissions": "Editar permissões", + "deleteKey": "Excluir chave", + "model": "Modelo {count}", + "models": "{count} modelos", + "permissionsTitle": "Permissões: {name}", + "allowAllDesc": "Esta chave pode acessar todos os modelos disponíveis.", + "restrictDesc": "Esta chave pode acessar {selectedCount} de modelos {totalModels}.", + "selectedCount": "{count} selecionado" + }, + "auditLog": { + "title": "Registro de auditoria", + "searchPlaceholder": "Ações de pesquisa...", + "action": "Ação", + "actor": "Ator", + "target": "Alvo", + "ipAddress": "Endereço IP", + "timestamp": "Carimbo de data e hora", + "noEntries": "Nenhuma entrada de auditoria encontrada", + "filterByAction": "Filtrar por ação...", + "filterByActor": "Filtrar por ator...", + "filterEntriesAria": "Filtrar entradas de log de auditoria", + "filterByActionTypeAria": "Filtrar por tipo de ação", + "filterByActorAria": "Filtrar por ator", + "refreshAuditLogAria": "Atualizar registro de auditoria", + "tableAria": "Entradas de registro de auditoria", + "failedFetchAuditLog": "Falha ao buscar o log de auditoria", + "notAvailable": "—", + "description": "Ações administrativas e eventos de segurança", + "showing": "Mostrando entradas {count} (deslocamento {offset})", + "previous": "Anterior" + }, + "cliTools": { + "title": "Ferramentas CLI", + "noActiveProviders": "Nenhum provedor ativo", + "noActiveProvidersDesc": "Adicione e conecte provedores primeiro para configurar as ferramentas CLI.", + "mapModels": "Modelos de mapas", + "testConnection": "Conexão de teste", + "connectionStatus": "Status da conexão", + "configureEndpoint": "Configurar ponto final", + "instructions": "Instruções", + "modelMapping": "Mapeamento de modelo", + "baseUrl": "URL base", + "apiKey": "Chave de API", + "configured": "Configurado", + "notConfigured": "Não configurado", + "notInstalled": "Não instalado", + "custom": "Personalizado", + "unknown": "Desconhecido", + "lastSavedAt": "Último salvo: {date}", + "never": "Nunca", + "justNow": "agora mesmo", + "minutesAgoShort": "{count}m atrás", + "hoursAgoShort": "{count}h atrás", + "daysAgoShort": "{count}d atrás", + "monthsAgoShort": "{count}mo atrás", + "yearsAgoShort": "{count}anos atrás", + "runtimeCheckFailed": "Falha na verificação de tempo de execução", + "yourApiKeyPlaceholder": "sua chave de API", + "modelPlaceholder": "provedor/id do modelo", + "configurationSaved": "Configuração salva com sucesso.", + "failedToSave": "Falha ao salvar a configuração.", + "noApiKeysCreateOne": "Nenhuma chave de API – Crie uma na página Chaves", + "defaultOmnirouteKey": "sk_omniroute (padrão)", + "selectModel": "Selecione o modelo", + "selectModelForAlias": "Selecione o modelo para {alias}", + "selectModelForTool": "Selecione o modelo para {tool}", + "select": "Selecione", + "clear": "Limpar", + "comingSoon": "Em breve", + "checkingRuntime": "Verificando o status do tempo de execução...", + "guideOnlyIntegration": "Integração somente guia (sem necessidade de tempo de execução local)", + "cliRuntimeDetected": "Tempo de execução CLI detectado e pronto", + "cliFoundNotRunnable": "CLI encontrada, mas não executável{reason}", + "cliRuntimeNotDetected": "Tempo de execução da CLI não detectado", + "binary": "Binário", + "configPath": "Caminho de configuração", + "configPathShort": "Configuração", + "failedCheckRuntimeStatus": "Falha ao verificar o status do tempo de execução.", + "copy": "Copiar", + "copied": "Copiado", + "copyConfig": "Copiar configuração", + "saveConfig": "Salvar configuração", + "selectionSaved": "Seleção salva", + "guide": "Guia", + "detected": "Detectado", + "notReady": "Não está pronto", + "active": "Ativo", + "inactive": "Inativo", + "startMitm": "Iniciar MITM", + "stopMitm": "Pare o MITM", + "mitmStarted": "MITM iniciado com sucesso!", + "mitmStopped": "MITM parou com sucesso!", + "failedStart": "Falha ao iniciar o MITM", + "failedStop": "Falha ao parar o MITM", + "saveMappings": "Salvar mapeamentos", + "mappingsSaved": "Mapeamentos salvos!", + "failedSaveMappings": "Falha ao salvar mapeamentos", + "howItWorks": "Como funciona:", + "antigravityHowWorksDesc": "A antigravidade envia solicitações ao endpoint do Google. O MITM os intercepta e os redireciona para o OmniRoute.", + "antigravityStep1": "1. Inicie o MITM para rotear solicitações por meio do OmniRoute.", + "antigravityStep2Prefix": "2. Adicionar", + "antigravityStep2Suffix": "ao seu arquivo hosts como 127.0.0.1.", + "antigravityStep3": "3. Abra o Antigravity e as solicitações serão proxy.", + "sudoPasswordRequiredTitle": "Senha Sudo obrigatória", + "sudoPasswordHint": "A senha do administrador é necessária para modificar o arquivo hosts e as configurações de proxy do sistema.", + "enterSudoPassword": "Digite a senha do sudo", + "sudoPasswordRequiredError": "A senha Sudo é necessária.", + "cancel": "Cancelar", + "confirm": "Confirmar", + "settingsApplied": "Configurações aplicadas com sucesso!", + "failedApplySettings": "Falha ao aplicar configurações", + "settingsReset": "Configurações redefinidas com sucesso!", + "failedResetSettings": "Falha ao redefinir as configurações", + "backupRestored": "Cópia de segurança restaurada!", + "failedRestore": "Falha ao restaurar", + "checkingCli": "Verificando {tool} CLI...", + "cliNotRunnable": "{tool} CLI instalada, mas não executável", + "cliNotInstalled": "{tool} CLI não instalada", + "cliNotDetected": "{tool} CLI não detectada", + "cliDetectedReady": "{tool} CLI detectada e pronta", + "cliFoundFailedHealthcheck": "{tool} CLI foi encontrada, mas falhou na verificação de integridade do tempo de execução{reason}.", + "installCliPrompt": "Instale {tool} CLI para usar este recurso.", + "installCodexPrompt": "Instale o Codex CLI para usar o recurso de aplicação automática.", + "hide": "Esconder", + "howToInstall": "Como instalar", + "installationGuide": "Guia de instalação", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "Após a instalação, execute", + "toVerify": "para verificar.", + "current": "Atual", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Redefinir para o padrão", + "providerModelPlaceholder": "provedor/id do modelo", + "apply": "Aplicar", + "reset": "Redefinir", + "manualConfig": "Configuração manual", + "backups": "Cópias de segurança", + "configBackups": "Backups de configuração", + "noBackupsYet": "Ainda não há backups. Os backups são criados automaticamente antes de cada aplicação ou redefinição.", + "restore": "Restaurar", + "backupRestoredReloading": "Cópia de segurança restaurada! Recarregando status...", + "failedRestoreBackup": "Falha ao restaurar o backup", + "applied": "Aplicado!", + "failed": "Falha", + "resetDone": "Redefinir!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute está configurado como provedor compatível com OpenAI", + "provider": "Provedor", + "model": "Modelo", + "providers": "Provedores", + "auth": "Autenticação", + "noApiKeysAvailable": "Nenhuma chave de API disponível", + "usingDefaultOmniroute": "Usando o padrão: sk_omniroute", + "updateConfig": "Atualizar configuração", + "applyConfig": "Aplicar configuração", + "noBackupsAvailable": "Nenhum backup disponível.", + "profileSaved": "Perfil \"{name}\" salvo!", + "failedSaveProfile": "Falha ao salvar o perfil", + "profileActivated": "Perfil ativado!", + "failedActivateProfile": "Falha ao ativar o perfil", + "profiles": "Perfis", + "savedProfiles": "Perfis salvos", + "noProfilesYet": "Nenhum perfil salvo ainda. Salve a configuração atual como um perfil abaixo.", + "activate": "Ativar", + "deleteProfile": "Excluir perfil", + "profileNamePlaceholder": "Nome do perfil (por exemplo, conta pessoal)", + "saveCurrent": "Salvar atual", + "codexAuthNotePrefix": "Usos do Codex", + "codexAuthNoteMiddle": "com", + "codexAuthNoteSuffix": "Clique em \"Aplicar\" para configurar automaticamente.", + "claudeManualConfiguration": "Claude CLI - Configuração manual", + "codexManualConfiguration": "Codex CLI - Configuração manual", + "droidManualConfiguration": "Droid de fábrica - configuração manual", + "openClawManualConfiguration": "Garra Aberta - Configuração Manual", + "clineManualConfiguration": "Configuração Manual do Cline", + "kiloManualConfiguration": "Configuração Manual do Código Kilo", + "toolDescriptions": { + "antigravity": "IDE antigravidade do Google com MITM", + "claude": "CLI do Código Claude Antrópico", + "codex": "CLI do OpenAI Codex", + "droid": "Assistente de IA Droid de fábrica", + "openclaw": "Assistente de IA de garra aberta", + "cline": "CLI do assistente de codificação Cline AI", + "kilo": "CLI do assistente de IA do Kilo Code", + "cursor": "Editor de código do cursor AI", + "continue": "Continuar Assistente de IA" + }, + "guides": { + "cursor": { + "notes": { + "0": "Requer conta Cursor Pro para usar este recurso.", + "1": "O cursor roteia solicitações por meio de seu próprio servidor, portanto, o endpoint local não é compatível. Ative o Cloud Endpoint nas configurações." + }, + "steps": { + "1": { + "title": "Abra Configurações", + "desc": "Vá para Configurações -> Modelos" + }, + "2": { + "title": "Habilitar API OpenAI", + "desc": "Habilite a opção \"chave de API OpenAI\"" + }, + "3": { + "title": "URL base" + }, + "4": { + "title": "Chave de API" + }, + "5": { + "title": "Adicionar modelo personalizado", + "desc": "Clique em \"Ver todos os modelos\" -> \"Adicionar modelo personalizado\"" + }, + "6": { + "title": "Selecione o modelo" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Abrir configuração", + "desc": "Abra o arquivo de configuração Continuar" + }, + "2": { + "title": "Chave de API" + }, + "3": { + "title": "Selecione o modelo" + }, + "4": { + "title": "Adicionar configuração de modelo", + "desc": "Adicione a seguinte configuração ao seu array de modelos:" + } + } + } + } + }, + "combos": { + "title": "Combos", + "description": "Crie combinações de modelos com roteamento ponderado e suporte substituto", + "createCombo": "Criar combinação", + "editCombo": "Editar combinação", + "deleteCombo": "Excluir combinação", + "noModels": "Nenhum modelo", + "noModelsYet": "Nenhum modelo adicionado ainda", + "addModel": "Adicionar modelo", + "addModelToCombo": "Adicionar modelo ao combo", + "routingStrategy": "Estratégia de Roteamento", + "maxRetries": "Máximo de tentativas", + "timeout": "Tempo limite (ms)", + "healthcheck": "Verificação de integridade", + "priority": "Prioridade", + "fallback": "Alternativa", + "roundRobin": "Rodada Robin", + "random": "Aleatório", + "leastLatency": "Menor latência", + "comboName": "Nome do combo", + "comboNamePlaceholder": "meu-combo", + "deleteConfirm": "Excluir este combo?", + "noCombosYet": "Ainda não há combos", + "comboCreated": "Combo criado com sucesso", + "comboUpdated": "Combo atualizado com sucesso", + "comboDeleted": "Combinação excluída", + "failedCreate": "Falha ao criar combinação", + "failedUpdate": "Falha ao atualizar o combo", + "errorCreating": "Erro ao criar o combo", + "errorUpdating": "Erro ao atualizar o combo", + "errorDeleting": "Erro ao excluir o combo", + "testFailed": "Falha na solicitação de teste", + "failedToggle": "Falha ao alternar combinação", + "testResults": "Resultados do teste — {name}", + "resolvedBy": "Resolvido por:", + "more": "+{count} mais", + "reqs": "requisitos", + "success": "sucesso", + "proxyConfigured": "Proxy configurado", + "copyComboName": "Copiar nome do combo", + "enableCombo": "Ativar combinação", + "disableCombo": "Desativar combinação", + "testCombo": "Combinação de teste", + "duplicate": "Duplicar", + "proxyConfig": "Configuração de proxy", + "nameRequired": "O nome é obrigatório", + "nameInvalid": "Apenas letras, números, -, _, / e . permitido", + "nameHint": "Letras, números, -, _, / e . permitido", + "priorityDesc": "Fallback sequencial: tenta primeiro o modelo 1, depois o 2, etc.", + "weightedDesc": "Distribui o tráfego por porcentagem de peso com substituto", + "roundRobinDesc": "Distribuição circular: cada solicitação vai para o próximo modelo em rotação", + "randomDesc": "Seleção aleatória uniforme e, em seguida, retorno aos modelos restantes", + "leastUsedDesc": "Escolhe o modelo com menos solicitações, equilibrando a carga ao longo do tempo", + "costOptimizedDesc": "Rotas para o modelo mais barato primeiro com base no preço", + "models": "Modelos", + "autoBalance": "Equilíbrio automático", + "advancedSettings": "Configurações avançadas", + "retryDelay": "Atraso de nova tentativa (ms)", + "concurrencyPerModel": "Simultaneidade/Modelo", + "queueTimeout": "Tempo limite da fila (ms)", + "advancedHint": "Deixe em branco para usar padrões globais. Eles substituem as configurações por provedor.", + "moveUp": "Subir", + "moveDown": "Mover para baixo", + "removeModel": "Remover", + "saving": "Salvando...", + "weighted": "Ponderado", + "leastUsed": "Menos usado", + "costOpt": "Opção de custo" + }, + "costs": { + "title": "Custos", + "budget": "Orçamento", + "totalCost": "Custo total", + "breakdown": "Divisão de custos", + "noData": "Sem dados de custo", + "byModel": "Por modelo", + "byProvider": "Por provedor" + }, + "endpoint": { + "title": "Ponto final da API", + "available": "Terminais disponíveis", + "cloudProxy": "Proxy de nuvem", + "disableConfirm": "Tem certeza de que deseja desativar o proxy na nuvem?", + "baseUrl": "URL base", + "apiKeyLabel": "Chave de API", + "registeredKeys": "Chaves Registradas", + "chatCompletions": "Conclusões de bate-papo", + "responses": "Respostas", + "listModels": "Listar modelos", + "usingCloudProxy": "Usando o Cloud Proxy", + "usingLocalServer": "Usando servidor local", + "machineId": "ID da máquina: {id}...", + "disableCloud": "Desativar nuvem", + "enableCloud": "Habilitar nuvem", + "modelsAcrossEndpoints": "Modelos {models} em endpoints {endpoints}", + "chatDesc": "Bate-papo com e sem streaming com todos os provedores", + "embeddings": "Incorporações", + "embeddingsDesc": "Incorporações de texto para pipelines de pesquisa e RAG", + "imageGeneration": "Geração de imagem", + "imageDesc": "Gere imagens a partir de prompts de texto", + "rerank": "Reclassificar", + "rerankDesc": "Reclassificar documentos por relevância para uma consulta", + "audioTranscription": "Transcrição de áudio", + "audioTranscriptionDesc": "Transcrever arquivos de áudio para texto (Whisper)", + "textToSpeech": "Texto para fala", + "textToSpeechDesc": "Converta texto em fala com som natural", + "moderations": "Moderações", + "moderationsDesc": "Moderação de conteúdo e classificação de segurança", + "enableCloudTitle": "Ativar proxy de nuvem", + "whatYouGet": "O que você receberá", + "cloudBenefitAccess": "Acesse sua API de qualquer lugar do mundo", + "cloudBenefitShare": "Compartilhe endpoint com sua equipe facilmente", + "cloudBenefitPorts": "Não há necessidade de abrir portas ou configurar firewall", + "cloudBenefitEdge": "Rede de borda global rápida", + "cloudSessionNote": "A nuvem manterá sua sessão de autenticação por 1 dia. Se não for usado, ele será excluído automaticamente.", + "cloudUnstableNote": "A nuvem está atualmente instável com Claude Code OAuth em alguns casos.", + "cloudConnected": "Cloud Proxy conectado!", + "connectingToCloud": "Conectando à nuvem...", + "verifyingConnection": "Verificando conexão...", + "connecting": "Conectando...", + "verifying": "Verificando...", + "connected": "Conectado!", + "disableCloudTitle": "Desativar proxy de nuvem", + "disableWarning": "Todas as sessões de autenticação serão excluídas da nuvem.", + "syncingData": "Sincronizando os dados mais recentes...", + "disablingCloud": "Desativando nuvem...", + "syncing": "Sincronizando...", + "disabling": "Desativando...", + "cloudConnectedVerified": "Cloud Proxy conectado e verificado!", + "connectedVerificationPending": "Conectado – verificação pendente", + "connectedVerificationPendingWithError": "Conectado – verificação pendente: {error}", + "cloudDisabledSuccess": "Nuvem desativada com sucesso", + "syncedSuccess": "Sincronizado com sucesso", + "failedDisable": "Falha ao desativar a nuvem", + "failedEnable": "Falha ao ativar a nuvem", + "cloudRequestTimeout": "Tempo limite de solicitação na nuvem", + "cloudRequestFailed": "Falha na solicitação de nuvem", + "cloudWorkerUnreachable": "Não foi possível entrar em contato com o trabalhador da nuvem. Certifique-se de que o serviço de nuvem esteja em execução (npm run dev in/cloud).", + "connectionFailed": "Falha na conexão", + "syncFailed": "Falha ao sincronizar dados na nuvem", + "providerModelsTitle": "{provider} — Modelos", + "noModelsForProvider": "Nenhum modelo disponível para este fornecedor.", + "chat": "Bate-papo", + "embedding": "Incorporação", + "image": "Imagem", + "custom": "personalizado", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Saúde do sistema", + "description": "Monitoramento em tempo real da sua instância OmniRoute", + "healthy": "Saudável", + "degraded": "Degradado", + "down": "Para baixo", + "uptime": "Tempo de atividade", + "memory": "Memória", + "memoryRss": "Memória (RSS)", + "heap": "Pilha", + "cpu": "CPU", + "database": "Banco de dados", + "version": "Versão", + "lastCheck": "Última verificação", + "providerHealth": "Saúde do Provedor", + "systemMetrics": "Métricas do sistema", + "tokenHealth": "Saúde do token", + "refreshAll": "Atualizar tudo", + "checkNow": "Verifique agora", + "loadingHealth": "Carregando dados de saúde...", + "failedToLoad": "Falha ao carregar dados de integridade: {error}", + "retry": "Tentar novamente", + "allOperational": "Todos os sistemas operacionais", + "issuesDetected": "Problemas de sistema detectados", + "updatedAt": "{time} atualizado", + "latency": "Latência", + "latencyP50": "p50", + "latencyP95": "pág.95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Total de solicitações", + "noDataYet": "Ainda não há dados", + "promptCache": "Cache de prompt", + "entries": "Entradas", + "hitRate": "Taxa de acerto", + "hitsMisses": "Acertos / Erros", + "signatureCache": "Cache de Assinatura", + "signatureDefaults": "Padrões", + "signatureTool": "Ferramenta", + "signatureFamily": "Família", + "signatureSession": "Sessão", + "recovering": "Recuperando", + "noCBData": "Não há dados disponíveis sobre disjuntores. Faça alguns pedidos primeiro.", + "providerHealthStatusAria": "Estado de saúde do provedor", + "issuesLabel": "Problemas detectados", + "operational": "Operacional", + "providers": "Provedores", + "healthyCount": "{count} íntegro", + "nodeVersion": "Nó {version}", + "failures": "{count} falha", + "failuresPlural": "{count} falhas", + "lastFailure": "Último", + "rateLimitStatus": "Status do limite de taxa", + "activeLimiters": "{count} limitador ativo", + "activeLimitersPlural": "{count} limitadores ativos", + "queued": "Na fila", + "queuedCount": "{count} na fila", + "running": "correndo", + "runningCount": "{count} em execução", + "ok": "OK", + "activeLockouts": "Bloqueios ativos", + "resetConfirm": "Redefinir todos os disjuntores para um estado íntegro? Isto limpará todas as contagens de falhas e restaurará todos os provedores ao status operacional.", + "resetAllTitle": "Reinicialize todos os disjuntores para um estado saudável", + "resetting": "Redefinindo...", + "resetAll": "Redefinir tudo", + "until": "Até {time}" + }, + "limits": { + "title": "Limites e cotas", + "rateLimit": "Limite de taxa", + "remaining": "Restante", + "requestsPerMinute": "Solicitações/min", + "tokensPerMinute": "Tokens/min", + "dailyLimit": "Limite Diário" + }, + "logs": { + "title": "Registros", + "requestLogs": "Solicitar registros", + "proxyLogs": "Registros de proxy", + "auditLog": "Registro de auditoria", + "console": "Consola", + "auditLogDesc": "Ações administrativas e eventos de segurança", + "loading": "Carregando...", + "refresh": "Atualizar", + "filterByAction": "Filtrar por ação...", + "filterByActor": "Filtrar por ator...", + "filterEntriesAria": "Filtrar entradas de log de auditoria", + "filterByActionTypeAria": "Filtrar por tipo de ação", + "filterByActorAria": "Filtrar por ator", + "refreshAuditLogAria": "Atualizar registro de auditoria", + "tableAria": "Entradas de registro de auditoria", + "failedFetchAuditLog": "Falha ao buscar o log de auditoria", + "showing": "Mostrando entradas {count} (deslocamento {offset})", + "search": "Pesquisar", + "timestamp": "Carimbo de data e hora", + "action": "Ação", + "actor": "Ator", + "target": "Alvo", + "details": "Detalhes", + "ipAddress": "Endereço IP", + "notAvailable": "—", + "noEntries": "Nenhuma entrada de registro de auditoria encontrada", + "previous": "Anterior", + "next": "Próximo" + }, + "onboarding": { + "welcome": "Bem vindo", + "security": "Segurança", + "test": "Teste", + "ready": "Pronto!", + "setPassword": "Definir senha", + "addProvider": "Adicione seu primeiro provedor", + "getStarted": "Comece", + "skip": "Pular", + "skipWizard": "Ignorar totalmente o assistente", + "skipPassword": "Ignorar configuração de senha", + "skipAndContinue": "Pular e continuar", + "passwordLabel": "Senha", + "confirmPassword": "Confirmar senha", + "enterPassword": "Digite a senha", + "confirmPasswordPlaceholder": "Confirmar senha", + "passwordsMismatch": "As senhas não coincidem", + "setupComplete": "Configuração concluída!", + "goToDashboard": "Vá para Painel →", + "welcomeDesc": "OmniRoute é o seu proxy local da API AI. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.", + "multiProvider": "Multi-Provedor", + "usageTracking": "Rastreamento de uso", + "apiKeyMgmt": "Gerenciamento de chave de API", + "securityDesc": "Defina uma senha para proteger seu painel ou pule por enquanto.", + "providerDesc": "Conecte seu primeiro provedor de IA. Você pode adicionar mais posteriormente.", + "apiKeyRequired": "Chave API (obrigatória)", + "customUrlOptional": "URL personalizado (opcional)", + "testDesc": "Vamos verificar se a conexão do seu provedor funciona.", + "runTest": "Execute o teste de conexão", + "testingConnection": "Testando conexão...", + "connectionSuccessful": "Conexão bem-sucedida! Seu provedor está pronto.", + "noProviderFound": "Nenhum provedor encontrado. Você pode adicionar um do painel posteriormente.", + "testFailed": "O teste falhou, mas você pode configurar isso mais tarde.", + "couldNotTest": "Não foi possível testar agora. Você pode testar no painel.", + "doneDesc": "Está tudo pronto! Sua instância do OmniRoute está configurada e pronta para fazer proxy de solicitações de IA.", + "yourEndpoint": "Seu ponto final:", + "continue": "Continuar", + "retry": "Tentar novamente", + "failedSetPassword": "Falha ao definir a senha. Tente novamente.", + "failedAddProvider": "Falha ao adicionar provedor. Tente novamente.", + "connectionError": "Erro de conexão. Por favor, tente novamente.", + "provider": "Provedor" + }, + "providers": { + "title": "Provedores", + "addProvider": "Adicionar provedor", + "editProvider": "Editar provedor", + "deleteProvider": "Excluir provedor", + "noProviders": "Nenhum provedor configurado", + "modelAvailability": "Disponibilidade do modelo", + "accounts": "Contas", + "newAccount": "Nova conta", + "deleteConfirm": "Tem certeza de que deseja excluir este provedor?", + "testing": "Testando...", + "testConnection": "Conexão de teste", + "testSuccess": "Conexão bem-sucedida", + "testFailed": "Falha na conexão", + "available": "Disponível", + "cooldown": "Recarga", + "unavailable": "Indisponível", + "unknown": "Desconhecido", + "oauthLabel": "OAuth", + "compatibleLabel": "Compatível", + "chat": "Bate-papo", + "responses": "Respostas", + "messages": "Mensagens", + "oauthProviders": "Provedores OAuth", + "freeProviders": "Provedores Gratuitos", + "apiKeyProviders": "Provedores de chaves de API", + "compatibleProviders": "Provedores compatíveis com chave de API", + "testAll": "Teste tudo", + "testAllOAuth": "Teste todas as conexões OAuth", + "testAllFree": "Teste todas as conexões gratuitas", + "testAllApiKey": "Teste todas as conexões de chave de API", + "testAllCompatible": "Teste todas as conexões compatíveis", + "connected": "{count} Conectado", + "errorCount": "{count} Erro ({code})", + "errorCountNoCode": "{count} Erro", + "noConnections": "Sem conexões", + "disabled": "Desativado", + "enableProvider": "Habilitar provedor", + "disableProvider": "Desativar provedor", + "testResults": "Resultados do teste", + "noCompatibleYet": "Nenhum provedor compatível adicionado ainda", + "compatibleHint": "Use os botões acima para adicionar endpoints compatíveis com OpenAI ou Antrópico", + "addOpenAICompatible": "Adicionar compatível com OpenAI", + "addAnthropicCompatible": "Adicionar Compatível Antrópico", + "addNewProvider": "Adicionar novo provedor", + "backToProviders": "Voltar para Provedores", + "configureNewProvider": "Configure um novo provedor de IA para usar com seus aplicativos.", + "providerLabel": "Provedor", + "selectProvider": "Selecione um provedor", + "selectedProvider": "Provedor selecionado", + "authMethod": "Método de autenticação", + "apiKeyLabel": "Chave de API", + "apiKeyRequired": "A chave de API é obrigatória", + "selectProviderRequired": "Selecione um provedor", + "enterApiKey": "Insira sua chave API", + "apiKeySecure": "Sua chave API será criptografada e armazenada com segurança.", + "oauth2Connect": "Conecte-se com OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Conecte sua conta usando autenticação OAuth2.", + "displayName": "Nome de exibição", + "displayNamePlaceholder": "por exemplo, API de produção, ambiente de desenvolvimento", + "displayNameHint": "Opcional. Um nome amigável para identificar esta configuração.", + "active": "Ativo", + "activeDescription": "Habilite este provedor para uso em seus aplicativos", + "cancel": "Cancelar", + "createProvider": "Criar provedor", + "failedCreate": "Falha ao criar provedor", + "errorOccurred": "Ocorreu um erro. Por favor, tente novamente.", + "modelStatus": "Status do modelo", + "allModelsOperational": "Todos os modelos operacionais", + "modelsWithIssues": "{count} modelo(s) com problemas", + "allModelsNormal": "Todos os modelos estão respondendo normalmente.", + "cooldownCleared": "Tempo de espera liberado para {model}", + "failedClearCooldown": "Falha ao limpar o tempo de espera", + "loadingAvailability": "Carregando disponibilidade do modelo...", + "clearCooldown": "Limpar", + "clearing": "Limpando...", + "until": "Até {time}", + "providerTestFailed": "Falha no teste do provedor", + "modeTest": "{mode} Teste", + "passedCount": "{count} aprovado", + "failedCount": "{count} falhou", + "testedCount": "{count} testado", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "ERRO", + "noActiveConnectionsInGroup": "Nenhuma conexão ativa encontrada para este grupo.", + "allTestsPassed": "Todos os testes {total} foram aprovados", + "testSummary": "{passed}/{total} aprovado, {failed} falhou", + "nameLabel": "Nome", + "prefixLabel": "Prefixo", + "baseUrlLabel": "URL base", + "apiTypeLabel": "Tipo de API", + "prefixHint": "Obrigatório. Prefixo exclusivo para nomes de modelos.", + "nameHint": "Obrigatório. Um rótulo amigável para este nó.", + "baseUrlHint": "Obrigatório.  URL base da API do provedor.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Validar conexão", + "validating": "Validando...", + "connectionValid": "A conexão é válida!", + "connectionFailed": "Falha na conexão. Verifique o URL e a chave.", + "testKeyLabel": "Chave de API de teste", + "testKeyPlaceholder": "sk-... (apenas para validação)", + "providerNotFound": "Provedor não encontrado", + "deleteConnectionConfirm": "Excluir esta conexão?", + "failedSetAlias": "Falha ao definir o alias", + "failedSaveConnection": "Falha ao salvar conexão", + "failedSaveConnectionRetry": "Falha ao salvar a conexão. Por favor, tente novamente.", + "failedRetestConnection": "Falha ao testar novamente a conexão", + "deleteCompatibleNodeConfirm": "Excluir este nó compatível com {type}?", + "anthropicCompatibleDetails": "Detalhes compatíveis com antrópicos", + "openaiCompatibleDetails": "Detalhes compatíveis com OpenAI", + "messagesApi": "API de mensagens", + "responsesApi": "API de respostas", + "chatCompletions": "Conclusões de bate-papo", + "importingModels": "Importando...", + "importFromModels": "Importar de /modelos", + "addConnectionToImport": "Adicione uma conexão para permitir a importação.", + "noModelsConfigured": "Nenhum modelo configurado", + "connectionCount": "{count} conexões", + "fetchingModels": "Buscando modelos disponíveis...", + "failedFetchModels": "Falha ao buscar modelos", + "noModelsFound": "Nenhum modelo encontrado", + "importFailed": "Falha na importação", + "noNewModelsAdded": "Nenhum novo modelo foi adicionado.", + "adding": "Adicionando...", + "importingModelsTitle": "Importando Modelos", + "copyModel": "Copiar modelo", + "removeModel": "Remover modelo", + "rateLimitProtected": "Protegido", + "rateLimitUnprotected": "Desprotegido", + "enableRateLimitProtection": "Clique para ativar a proteção de limite de taxa", + "disableRateLimitProtection": "Clique para desativar a proteção de limite de taxa", + "productionKey": "Chave de produção", + "enterNewApiKey": "Insira a nova chave de API", + "optional": "Opcional", + "anthropicCompatibleName": "Compatível Antrópico", + "openaiCompatibleName": "Compatível com OpenAI", + "failedImportModels": "Falha ao importar modelos", + "noModelsReturnedFromEndpoint": "Nenhum modelo foi retornado do endpoint /models.", + "importingModelsProgress": "Importando {current} de modelos {total}...", + "foundModelsStartingImport": "Modelos {count} encontrados. Iniciando importação...", + "importingModelById": "Importando {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} importado com sucesso!", + "noNewModelsAddedExisting": "Nenhum novo modelo foi adicionado (todos já existem).", + "importDoneCount": "✓ Pronto! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Ocorreu um erro inesperado", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "mensagens", + "responsesPath": "respostas", + "chatCompletionsPath": "bate-papo/conclusões", + "add": "Adicionar", + "edit": "Editar", + "delete": "Excluir", + "anthropic": "Antrópico", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Somente uma conexão é permitida por nó compatível. Adicione outro nó se precisar de mais conexões.", + "connections": "Conexões", + "providerProxyTitleConfigured": "Proxy do provedor: {host}", + "configured": "configurado", + "providerProxyConfigureHint": "Configure o proxy para todas as conexões deste provedor", + "providerProxy": "Proxy do provedor", + "noConnectionsYet": "Ainda não há conexões", + "addFirstConnectionHint": "Adicione sua primeira conexão para começar", + "addConnection": "Adicionar conexão", + "availableModels": "Modelos Disponíveis", + "pageAutoRefresh": "A página será atualizada automaticamente...", + "statusDisabled": "desativado", + "statusConnected": "conectado", + "statusRuntimeIssue": "problema de tempo de execução", + "statusAuthFailed": "falha na autenticação", + "statusRateLimited": "taxa limitada", + "statusNetworkIssue": "problema de rede", + "statusTestUnsupported": "teste sem suporte", + "statusUnavailable": "indisponível", + "statusFailed": "falhou", + "statusError": "erro", + "oauthAccount": "Conta OAuth", + "errorTypeRuntime": "Tempo de execução local", + "errorTypeUpstreamAuth": "Autenticação upstream", + "errorTypeMissingCredential": "Credencial ausente", + "errorTypeRefreshFailed": "Falha na atualização", + "errorTypeTokenExpired": "O token expirou", + "errorTypeRateLimited": "Taxa limitada", + "errorTypeUpstreamUnavailable": "Upstream indisponível", + "errorTypeNetworkError": "Erro de rede", + "errorTypeTestUnsupported": "Teste sem suporte", + "errorTypeUpstreamError": "Erro de envio", + "proxySourceGlobal": "Globais", + "proxySourceProvider": "Provedor", + "proxySourceKey": "Chave", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Automático: {priority}", + "proxy": "Procurador", + "retestAuthentication": "Testar novamente a autenticação", + "retest": "Teste novamente", + "disableConnection": "Desativar conexão", + "enableConnection": "Habilitar conexão", + "reauthenticateConnection": "Autentique novamente esta conexão", + "proxyConfig": "Configuração de proxy", + "aliasExistsAlert": "O alias \"{alias}\" já existe. Use um modelo diferente ou edite o alias existente.", + "openRouterAnyModelHint": "OpenRouter suporta qualquer modelo. Adicione modelos e crie aliases para acesso rápido.", + "modelIdFromOpenRouter": "ID do modelo (do OpenRouter)", + "openRouterModelPlaceholder": "antrópico/claude-3-opus", + "customModels": "Modelos personalizados", + "customModelsHint": "Adicione IDs de modelo que não estão na lista padrão. Eles estarão disponíveis para roteamento.", + "modelId": "ID do modelo", + "customModelPlaceholder": "por exemplo gpt-4.5-turbo", + "loading": "Carregando...", + "removeCustomModel": "Remover modelo personalizado", + "noCustomModels": "Nenhum modelo personalizado adicionado ainda.", + "allSuggestedAliasesExist": "Todos os aliases sugeridos já existem. Escolha um modelo diferente ou remova aliases conflitantes.", + "failedSaveCustomModel": "Falha ao salvar o modelo personalizado", + "modelAddedSuccess": "Modelo {modelId} adicionado com sucesso", + "failedAddModelTryAgain": "Falha ao adicionar modelo. Por favor, tente novamente.", + "failedSaveImportedModel": "Falha ao salvar o modelo importado no banco de dados personalizado", + "failedImportModelsTryAgain": "Falha ao importar modelos. Por favor, tente novamente.", + "failedRemoveModelFromDatabase": "Falha ao remover o modelo do banco de dados", + "modelRemovedSuccess": "Modelo removido com sucesso", + "failedDeleteModelTryAgain": "Falha ao excluir modelo. Por favor, tente novamente.", + "compatibleModelsDescription": "Adicione modelos compatíveis com {type} manualmente ou importe-os do endpoint /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Falha na validação da chave de API. Verifique sua chave e tente novamente.", + "addProviderApiKeyTitle": "Adicionar chave de API {provider}", + "checking": "Verificando...", + "check": "Verifique", + "valid": "Válido", + "invalid": "Inválido", + "creating": "Criando...", + "validationChecksAnthropicCompatible": "A validação verifica {provider} verificando a chave de API.", + "validationChecksOpenAiCompatible": "A validação verifica {provider} via /models em seu URL base.", + "priorityLabel": "Prioridade", + "saving": "Salvando...", + "save": "Salvar", + "editConnection": "Editar conexão", + "accountName": "Nome da conta", + "email": "E-mail", + "healthCheckMinutes": "Verificação de integridade (min)", + "healthCheckHint": "Intervalo de atualização de token proativo. 0 = desabilitado.", + "failedTestConnection": "Falha ao testar a conexão", + "failed": "Falha", + "leaveBlankKeepCurrentApiKey": "Deixe em branco para manter a chave API atual.", + "editCompatibleTitle": "Editar {type} Compatível", + "compatibleBaseUrlHint": "Use o URL base (terminando em /v1) para sua API compatível com {type}.", + "apiKeyForCheck": "Chave API (para verificação)", + "compatibleProdPlaceholder": "{type} Compatível (Produção)" + }, + "settings": { + "title": "Configurações", + "general": "Geral", + "security": "Segurança", + "appearance": "Aparência", + "routing": "Roteamento", + "cache": "Cache", + "resilience": "Resiliência", + "systemPrompt": "Alerta do sistema", + "thinkingBudget": "Pensando no orçamento", + "proxy": "Procurador", + "pricing": "Preços", + "storage": "Armazenamento", + "policies": "Políticas", + "ipFilter": "Filtro IP", + "comboDefaults": "Padrões de combinação", + "fallbackChains": "Cadeias substitutas", + "changePassword": "Alterar senha", + "enablePassword": "Habilitar senha", + "darkMode": "Modo escuro", + "lightMode": "Modo claro", + "systemTheme": "Tema do sistema", + "enableCache": "Habilitar cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Tamanho máximo do cache", + "clearCache": "Limpar Cache", + "cacheHits": "Acessos de cache", + "cacheMisses": "Perdas de cache", + "hitRate": "Taxa de acerto", + "cacheEntries": "Entradas de cache", + "circuitBreaker": "Disjuntor", + "retryPolicy": "Política de Nova Tentativa", + "maxRetries": "Máximo de tentativas", + "retryDelay": "Atraso na nova tentativa", + "timeoutMs": "Tempo limite (ms)", + "enableSystemPrompt": "Habilitar prompt do sistema", + "systemPromptText": "Texto de prompt do sistema", + "enableThinking": "Habilite o pensamento", + "maxThinkingTokens": "Tokens de pensamento máximo", + "enableProxy": "Habilitar proxy", + "proxyUrl": "URL proxy", + "pricingRates": "Formato de taxas de preços", + "currentPricing": "Visão geral de preços atuais", + "loadingPricing": "Carregando dados de preços...", + "noPricing": "Não há dados de preços disponíveis", + "input": "Entrada", + "output": "Saída", + "cached": "Em cache", + "reasoning": "Raciocínio", + "cacheCreation": "Criação de Cache", + "customPricing": "Preço personalizado", + "databaseSize": "Tamanho do banco de dados", + "backupDb": "Banco de dados de backup", + "restoreDb": "Restaurar banco de dados", + "exportData": "Exportar dados", + "importData": "Importar dados", + "clearData": "Limpar todos os dados", + "clearDataConfirm": "Isso excluirá permanentemente todos os dados. Tem certeza?", + "enableRequestLogs": "Habilitar registros de solicitação", + "logRetention": "Retenção de registros", + "ipWhitelist": "Lista de permissões de IP", + "ipBlacklist": "Lista negra de IP", + "addIP": "Adicionar IP", + "savedSuccessfully": "Configurações salvas com sucesso", + "ai": "IA", + "advanced": "Avançado", + "localMode": "Modo Local — Todos os dados armazenados em sua máquina", + "settingsSectionsAria": "Seções de configurações", + "switchThemes": "Alternar entre temas claros e escuros", + "themeSelectionAria": "Seleção de tema", + "themeLight": "Luz", + "themeDark": "Escuro", + "themeSystem": "Sistema", + "hideHealthLogs": "Ocultar registros de verificação de integridade", + "hideHealthLogsDesc": "Quando ativado, suprime mensagens [HealthCheck] no console do servidor", + "promptCache": "Cache de prompt", + "flushCache": "Liberar cache", + "flushing": "Rubor…", + "size": "Tamanho", + "hits": "Acessos", + "evictions": "Despejos", + "loadingCacheStats": "Carregando estatísticas de cache…", + "globalProxy": "Procurador global", + "globalProxyDesc": "Configure um proxy de saída global para todas as chamadas de API. Provedores individuais, combos e chaves podem substituir isso.", + "noGlobalProxy": "Nenhum proxy global configurado", + "globalLabel": "Globais", + "configure": "Configurar", + "globalSystemPrompt": "Alerta do sistema global", + "systemPromptDesc": "Injetado em todas as solicitações no nível do proxy", + "saved": "Salvo", + "systemPromptPlaceholder": "Digite o prompt do sistema para injetar em todas as solicitações...", + "systemPromptHint": "Este prompt é anexado à mensagem do sistema de cada solicitação. Use para instruções globais, diretrizes de segurança ou regras de formatação de resposta.", + "chars": "{count} caracteres", + "thinkingBudgetTitle": "Pensando no orçamento", + "thinkingBudgetDesc": "Controle o uso do token de raciocínio de IA em todas as solicitações", + "passthrough": "Passagem", + "passthroughDesc": "Sem alterações – o cliente controla o orçamento pensado", + "auto": "Automático", + "autoDesc": "Remova todas as configurações de pensamento – deixe o provedor decidir", + "custom": "Personalizado", + "customDesc": "Defina um orçamento fixo de tokens para todas as solicitações", + "adaptive": "Adaptativo", + "adaptiveDesc": "Dimensione o orçamento com base na complexidade da solicitação", + "effortNone": "Nenhum (0 tokens)", + "effortLow": "Baixo (tokens de 1K)", + "effortMedium": "Médio (10 mil tokens)", + "effortHigh": "Alto (128 mil tokens)", + "tokenBudget": "Orçamento de token", + "tokens": "fichas", + "baseEffortLevel": "Nível de esforço básico", + "adaptiveHint": "O modo adaptativo é dimensionado a partir desse nível básico com base na contagem de mensagens, no uso da ferramenta e no comprimento do prompt.", + "requireLogin": "Exigir login", + "requireLoginDesc": "Quando LIGADO, o painel requer senha. Quando DESLIGADO, acesse sem login.", + "currentPassword": "Senha atual", + "enterCurrentPassword": "Digite a senha atual", + "newPassword": "Nova senha", + "enterNewPassword": "Digite a nova senha", + "confirmPassword": "Confirme a nova senha", + "confirmPasswordPlaceholder": "Confirme a nova senha", + "passwordsNoMatch": "As senhas não coincidem", + "passwordUpdated": "Senha atualizada com sucesso", + "failedUpdatePassword": "Falha ao atualizar a senha", + "errorOccurred": "Ocorreu um erro", + "updatePassword": "Atualizar senha", + "setPassword": "Definir senha", + "apiEndpointProtection": "Proteção de endpoint de API", + "requireAuthModels": "Exigir chave de API para /models", + "requireAuthModelsDesc": "Quando ativado, o endpoint /v1/models retorna 404 para solicitações não autenticadas. Impede a descoberta de modelos por usuários não autorizados.", + "blockedProviders": "Provedores bloqueados", + "blockedProvidersDesc": "Oculte provedores específicos da resposta /v1/models. Os provedores bloqueados não aparecerão nas listagens de modelos.", + "providersBlocked": "{count} provedor(es) bloqueado(s) em /models", + "blockProviderTitle": "Bloquear {provider}", + "unblockProviderTitle": "Desbloquear {provider}", + "routingStrategy": "Estratégia de Roteamento", + "fillFirst": "Preencha primeiro", + "fillFirstDesc": "Use contas em ordem de prioridade", + "roundRobin": "Rodada Robin", + "roundRobinDesc": "Percorrer todas as contas", + "p2c": "P2C", + "p2cDesc": "Escolha 2 aleatoriamente, use o mais saudável", + "random": "Aleatório", + "randomDesc": "Conta aleatória a cada solicitação", + "leastUsed": "Menos usado", + "leastUsedDesc": "Escolha a conta usada menos recentemente", + "costOpt": "Opção de custo", + "costOptDesc": "Prefira a conta mais barata disponível", + "stickyLimit": "Limite pegajoso", + "stickyLimitDesc": "Chamadas por conta antes de mudar", + "modelAliases": "Aliases de modelo", + "modelAliasesDesc": "Padrões curinga para remapear nomes de modelos • Use * e ?", + "aliasPatternPlaceholder": "claude-soneto-*", + "aliasTargetPlaceholder": "claude-soneto-4-20250514", + "pattern": "Padrão", + "targetModel": "Modelo alvo", + "add": "+ Adicionar", + "session": "Sessão", + "sessionDetailsAria": "Detalhes da sessão", + "status": "Estado", + "authenticated": "Autenticado", + "guest": "Convidado", + "loginTime": "Hora de login", + "sessionAge": "Idade da sessão", + "browser": "Navegador", + "clearLocalData": "Limpar dados locais", + "logout": "Sair", + "clearLocalDataConfirm": "Limpar todos os dados locais? Isso redefinirá suas preferências.", + "unknown": "Desconhecido", + "systemActor": "sistema", + "ipAccessControl": "Controle de acesso IP", + "ipAccessControlDesc": "Bloquear ou permitir endereços IP específicos", + "ipModeDisabled": "Desativado", + "ipModeBlacklist": "Lista negra", + "ipModeWhitelist": "Lista de permissões", + "ipModeWhitelistPriority": "Prioridade WL", + "addIpAddress": "Adicionar endereço IP", + "ipAddressPlaceholder": "192.168.1.0/24 ou 10.0.*.*", + "block": "+ Bloquear", + "allow": "+ Permitir", + "blocked": "Bloqueado ({count})", + "allowed": "Permitido ({count})", + "temporaryBans": "Banimentos temporários ({count})", + "minLeft": "{min}m restantes", + "auditLog": "Registro de auditoria", + "searchAuditLogs": "Pesquisar registros de auditoria...", + "failedLoadAuditLog": "Falha ao carregar o log de auditoria", + "noAuditEvents": "Nenhum evento de auditoria encontrado", + "action": "Ação", + "actor": "Ator", + "details": "Detalhes", + "time": "Hora", + "fallbackChainsTitle": "Cadeias substitutas", + "fallbackChainsDesc": "Definir ordem de fallback do provedor por modelo", + "addChain": "+ Adicionar corrente", + "modelName": "Nome do modelo", + "modelNamePlaceholder": "claude-soneto-4-20250514", + "providersCommaSeparated": "Provedores (separados por vírgula, em ordem de prioridade)", + "providersCommaSeparatedPlaceholder": "antrópico, openai, gêmeos", + "createChain": "Criar cadeia", + "noFallbackChains": "Sem cadeias de fallback", + "noFallbackChainsDesc": "Crie uma cadeia para definir a ordem de fallback do provedor para um modelo.", + "loadingFallbackChains": "Carregando cadeias de fallback...", + "deleteChainConfirm": "Excluir cadeia substituta para \"{model}\"?", + "chainCreated": "Cadeia criada para {model}", + "chainDeleted": "Cadeia excluída para {model}", + "failedCreateChain": "Falha ao criar cadeia", + "failedDeleteChain": "Falha ao excluir a cadeia", + "deleteChain": "Excluir cadeia", + "fillModelAndProviders": "Preencha o nome do modelo e os fornecedores", + "addAtLeastOneProvider": "Adicione pelo menos um provedor", + "comboDefaultsTitle": "Padrões de combinação", + "globalComboConfig": "Configuração de combinação global", + "defaultStrategy": "Estratégia padrão", + "defaultStrategyDesc": "Aplicado a novos combos sem estratégia explícita", + "comboStrategyAria": "Estratégia combinada", + "priority": "Prioridade", + "weighted": "Ponderado", + "maxRetriesLabel": "Máximo de tentativas", + "retryDelayLabel": "Atraso de nova tentativa (ms)", + "timeoutLabel": "Tempo limite (ms)", + "healthCheck": "Verificação de saúde", + "healthCheckDesc": "Verifique previamente a disponibilidade do provedor", + "trackMetrics": "Rastrear métricas", + "trackMetricsDesc": "Registrar métricas de solicitação por combinação", + "providerOverrides": "Substituições de provedor", + "providerOverridesDesc": "Substitua o tempo limite e novas tentativas por provedor. As configurações do provedor substituem os padrões globais.", + "providerMaxRetriesAria": "{provider} máximo de novas tentativas", + "providerTimeoutAria": "{provider} tempo limite ms", + "removeProviderOverrideAria": "Remover substituição de {provider}", + "newProviderNamePlaceholder": "por exemplo google, abraai...", + "newProviderNameAria": "Novo nome do provedor", + "retries": "novas tentativas", + "ms": "senhora", + "saveComboDefaults": "Salvar padrões de combinação", + "maxNestingDepth": "Profundidade máxima de aninhamento", + "concurrencyPerModel": "Simultaneidade/Modelo", + "queueTimeout": "Tempo limite da fila (ms)", + "providerProfiles": "Perfis de Provedores", + "providerProfilesDesc": "Configurações de resiliência separadas para provedores OAuth (baseado em sessão) e chave de API (medida). Os provedores OAuth têm limites mais rígidos devido aos limites de taxas mais baixos.", + "oauthProviders": "Provedores OAuth", + "apiKeyProviders": "Provedores de chaves de API", + "transientCooldown": "Recarga transitória", + "rateLimitCooldown": "Recarga do Limite de Taxa", + "maxBackoffLevel": "Nível máximo de espera", + "cbThreshold": "Limite CB", + "cbResetTime": "Tempo de reinicialização do CB", + "rateLimiting": "Limitação de taxa", + "rateLimitingDesc": "Os provedores de chaves de API são automaticamente limitados por taxas com padrões seguros. Os limites são aprendidos nos cabeçalhos de resposta e se adaptam ao longo do tempo.", + "defaultSafetyNet": "Rede de segurança padrão", + "rpm": "RPM", + "minGap": "Intervalo mínimo", + "maxConcurrent": "Máximo simultâneo", + "activeLimiters": "Limitadores Ativos", + "noActiveLimiters": "Ainda não há limitadores de taxa ativos.", + "reservoir": "Reservatório", + "running": "Correndo", + "queued": "Na fila", + "circuitBreakers": "Disjuntores", + "breakerStateClosed": "Fechado", + "breakerStateOpen": "Abrir", + "breakerStateHalfOpen": "Meio aberto", + "tripped": "{count} tropeçou", + "healthy": "{count} íntegro", + "resetAll": "Redefinir tudo", + "noCircuitBreakers": "Nenhum disjuntor ativo ainda. Eles são criados automaticamente quando as solicitações fluem pelo pipeline combinado.", + "failures": "{count} falha(s)", + "policiesLocked": "Políticas e identificadores bloqueados", + "allOperational": "Todos os sistemas operacionais – sem bloqueios ou disjuntores desarmados", + "loadingPolicies": "Carregando políticas...", + "lockedIdentifiers": "Identificadores bloqueados", + "unlockedIdentifier": "Desbloqueado: {identifier}", + "sinceDate": "desde {date}", + "forceUnlock": "Forçar desbloqueio", + "unlocking": "Desbloqueando...", + "failedUnlock": "Falha ao desbloquear", + "failedLoadWithStatus": "Falha ao carregar: {status}", + "failedLoadResilience": "Falha ao carregar o status de resiliência", + "saveFailed": "Falha ao salvar", + "resetFailed": "Falha na redefinição", + "loadingResilience": "Carregando status de resiliência...", + "retry": "Tentar novamente", + "systemStorage": "Sistema e armazenamento", + "allDataLocal": "Todos os dados armazenados localmente em sua máquina", + "databasePath": "Caminho do banco de dados", + "exportDatabase": "Exportar banco de dados", + "exportAll": "Exportar tudo (.tar.gz)", + "importDatabase": "Importar banco de dados", + "confirmDbImport": "Confirmar importação do banco de dados", + "confirmDbImportDesc": "Isso substituirá todos os dados atuais pelo conteúdo de {file}. Um backup será criado automaticamente antes da importação.", + "yesImport": "Sim, importar", + "lastBackup": "Último backup", + "noBackupYet": "Ainda não há backup", + "backupNow": "Faça backup agora", + "backupRestore": "Backup e restauração", + "viewBackups": "Ver backups", + "hide": "Esconder", + "backupRetentionDesc": "Os instantâneos do banco de dados são criados automaticamente antes da restauração e a cada 15 minutos quando os dados são alterados. Retenção: 24 horas + 30 backups diários com rotação inteligente.", + "loadingBackups": "Carregando backups...", + "noBackupsYet": "Nenhum backup disponível ainda. Os backups serão criados automaticamente quando os dados forem alterados.", + "backupsAvailable": "{count} backup(s) disponíveis", + "refresh": "Atualizar", + "confirm": "Confirmar?", + "yes": "Sim", + "no": "Não", + "restore": "Restaurar", + "invalidFileType": "Tipo de arquivo inválido. Somente arquivos .sqlite são aceitos.", + "exportFailed": "Falha na exportação", + "exportFailedWithError": "Falha na exportação: {error}", + "fullExportFailedWithError": "Falha na exportação completa: {error}", + "backupCreated": "Backup criado: {file}", + "restoreSuccess": "Restaurado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.", + "importSuccess": "Banco de dados importado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.", + "justNow": "agora mesmo", + "minutesAgo": "{count}m atrás", + "hoursAgo": "{count}h atrás", + "daysAgo": "{count}d atrás", + "backupReasonManual": "manual", + "backupReasonPreRestore": "pré-restauração", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Nenhuma alteração desde o último backup", + "backupFailed": "Falha no backup", + "restoreFailed": "Falha na restauração", + "importFailed": "Falha na importação", + "errorDuringRestore": "Ocorreu um erro durante a restauração", + "errorDuringImport": "Ocorreu um erro durante a importação", + "modelPricing": "Preço do modelo", + "modelPricingDesc": "Configurar taxas de custo por modelo • Todas as taxas em tokens de US$/1 milhão", + "providers": "Provedores", + "registry": "Registro", + "priced": "Preço", + "searchProvidersModels": "Pesquise fornecedores ou modelos...", + "showAll": "Mostrar tudo", + "noProvidersMatch": "Nenhum provedor corresponde à sua pesquisa.", + "howPricingWorks": "Como funciona o preço", + "cacheWrite": "Gravação em cache", + "unsaved": "não salvo", + "resetDefaults": "Redefinir padrões", + "saveProvider": "Salvar provedor", + "saving": "Salvando...", + "model": "Modelo", + "models": "modelos", + "moreProviders": "{count} mais provedores", + "withPricing": "com preços configurados", + "policiesCircuitBreakers": "Políticas e disjuntores", + "activeIssuesDetected": "Problemas ativos detectados", + "off": "Desligado", + "resetPricingConfirm": "Redefinir todos os preços de {provider} para os padrões?", + "pricingDescInput": "Entrada: tokens enviados ao modelo", + "pricingDescOutput": "Saída: tokens gerados", + "pricingDescCached": "Armazenado em cache: entrada reutilizada (~50% da taxa de entrada)", + "pricingDescReasoning": "Raciocínio: tokens de pensamento (volta para Saída)", + "pricingDescCacheWrite": "Cache Write: criando entradas de cache (volta para Input)", + "pricingDescFormula": "Custo = (entrada × taxa_de_entrada) + (saída × taxa_de_saída) + (em cache × taxa_de_cache) por milhão de tokens.", + "pricingSettingsTitle": "Configurações de preços", + "totalModels": "Modelos totais", + "active": "Ativo", + "costCalculation": "Cálculo de custos", + "costCalculationDesc": "Os custos são calculados com base no uso do token e nas taxas de preços configuradas para cada modelo.", + "pricingFormat": "Formato de preços", + "pricingFormatDesc": "Todas as taxas são em tokens de US$/1 milhão (dólares por milhão de tokens).", + "tokenTypes": "Tipos de token", + "inputTokenDesc": "Tokens de prompt padrão", + "outputTokenDesc": "Tokens de conclusão/resposta", + "cachedTokenDesc": "Tokens de entrada armazenados em cache (normalmente 50% da taxa de entrada)", + "reasoningTokenDesc": "Tokens especiais de raciocínio/pensamento (substituição para taxa de produção)", + "cacheCreationTokenDesc": "Tokens usados para criar entradas de cache (fallback para taxa de entrada)", + "customPricingNote": "Você pode substituir o preço padrão de modelos específicos. As substituições personalizadas têm prioridade sobre os preços detectados automaticamente.", + "editPricing": "Editar preços", + "viewFullDetails": "Ver detalhes completos" + }, + "translator": { + "title": "Tradutor", + "metaTitle": "Parque do Tradutor | OmniRoute", + "metaDescription": "Depure, teste e visualize traduções de formatos de API entre provedores", + "playgroundTitle": "Parque do Tradutor", + "playground": "Parque infantil", + "realtime": "Atividade de tradução em tempo real", + "chatTester": "Testador de bate-papo", + "testBench": "Bancada de testes", + "liveMonitor": "Monitoramento ao vivo", + "modeDescriptionPlayground": "Cole qualquer corpo de solicitação de API e veja como o OmniRoute o traduz entre formatos de provedor (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas)", + "modeDescriptionChatTester": "Envie solicitações de chat reais por meio do OmniRoute e inspecione todo o percurso: entrada, solicitação traduzida, resposta do provedor e saída traduzida.", + "modeDescriptionTestBench": "Execute cenários predefinidos e compare a compatibilidade entre provedores e modelos.", + "modeDescriptionLiveMonitor": "Assista a eventos de tradução em tempo real à medida que as solicitações fluem pelo OmniRoute.", + "modeDescriptionFallback": "Depure, teste e visualize como o OmniRoute traduz solicitações de API entre provedores.", + "recentTranslations": "Traduções recentes", + "noTranslations": "Ainda não há traduções", + "source": "Fonte", + "target": "Alvo", + "time": "Hora", + "model": "Modelo", + "status": "Estado", + "latency": "Latência", + "totalTranslations": "Total de traduções", + "successful": "Bem sucedido", + "errors": "Erros", + "avgLatency": "Latência média", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Ao vivo – atualização automática", + "paused": "Pausado", + "eventsAppearHint": "Os eventos de tradução aparecem aqui conforme as solicitações fluem pelo OmniRoute. Use qualquer um destes métodos para gerar eventos:", + "chatTesterTab": "Guia Testador de bate-papo", + "testBenchTab": "Aba Bancada de Teste", + "externalApiCalls": "Chamadas de API externas", + "ideCliIntegrations": "Integrações IDE/CLI", + "inMemoryNote": "Nota: Os eventos são armazenados na memória e redefinidos quando o servidor é reiniciado.", + "ok": "OK", + "errorShort": "ERRO", + "formatConverter": "Conversor de formato", + "formatConverterDescription": "Cole ou digite um corpo de solicitação JSON. O tradutor detectará automaticamente o formato de origem e o converterá para o formato de destino. Use isto para depurar como o OmniRoute traduz solicitações entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas).", + "input": "Entrada", + "output": "Saída", + "auto": "Automático", + "swapFormats": "Trocar formatos", + "translateAction": "Traduzir", + "clear": "Limpar", + "inputPlaceholder": "Cole o corpo da solicitação aqui ou selecione um modelo abaixo...", + "exampleTemplates": "Modelos de exemplo", + "exampleTemplatesHint": "- Clique para carregar", + "templateLoadHint": "O modelo carrega a solicitação no formato {format}. Altere o formato de origem para carregar em um formato diferente.", + "compatibilityTester": "Testador de compatibilidade", + "compatibilityReport": "Relatório de compatibilidade", + "testBenchDescription": "Execute cenários predefinidos (Simple Chat, Tool Calling, etc.) para verificar a tradução e a compatibilidade do provedor. Selecione um formato de origem e um provedor de destino e execute todos os testes para ver uma porcentagem de compatibilidade. Use isso para descobrir quais recursos funcionam entre os provedores.", + "targetProvider": "Provedor de destino", + "runAllTests": "Execute todos os testes", + "runTest": "Executar teste", + "reRun": "Executar novamente", + "running": "Correndo...", + "passed": "passou", + "failed": "falhou", + "passedIconLabel": "✅ Aprovado", + "chunks": "pedaços", + "scenarioSimpleChat": "Bate-papo simples", + "scenarioToolCalling": "Chamada de ferramenta", + "scenarioMultiTurn": "Multivoltas", + "scenarioThinking": "Pensando", + "scenarioSystemPrompt": "Alerta do sistema", + "scenarioStreaming": "Transmissão", + "templateNames": { + "simple-chat": "Bate-papo simples", + "tool-calling": "Chamada de ferramenta", + "multi-turn": "Multivoltas", + "thinking": "Pensando", + "system-prompt": "Alerta do sistema", + "streaming": "Transmissão" + }, + "templateDescriptions": { + "simple-chat": "Mensagem de texto básica", + "tool-calling": "Invocação de função/ferramenta", + "multi-turn": "Conversa com história", + "thinking": "Pensamento/raciocínio estendido", + "system-prompt": "Instruções complexas do sistema", + "streaming": "Solicitação de streaming SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Você é um assistente útil.", + "userGreeting": "Olá! Como você está hoje?" + }, + "toolCalling": { + "userWeather": "Como está o clima em São Paulo?", + "toolDescription": "Obtenha o clima atual para um local", + "cityNameDescription": "Nome da cidade" + }, + "multiTurn": { + "system": "Você é um assistente de codificação.", + "userInitial": "Escreva uma função para classificar um array em Python.", + "assistantExample": "Aqui está uma função de classificação simples:\n\n```píton\ndef sort_array(arr):\n retornar classificado (arr)\n```", + "userFollowUp": "Agora classifique em ordem decrescente." + }, + "thinking": { + "question": "Qual é a soma dos primeiros 100 números primos?" + }, + "systemPrompt": { + "systemInstruction": "Você é um engenheiro de software sênior especializado em sistemas distribuídos. Responda às perguntas de forma concisa usando as melhores práticas do setor. Sempre forneça exemplos de código quando relevante. Formate suas respostas usando markdown.", + "question": "Como faço para implementar um padrão de disjuntor?" + }, + "streaming": { + "prompt": "Conte-me uma pequena história sobre um robô aprendendo a pintar." + } + }, + "openaiCompatibleLabel": "Compatível com OpenAI", + "anthropicCompatibleLabel": "Compatível Antrópico", + "noTemplateForFormat": "Nenhum modelo para este formato", + "translationFailed": "Falha na tradução: {error}", + "pipelineDebugger": "Depurador de pipeline", + "translationPipeline": "Pipeline de Tradução", + "pipelineVisualization": "Visualização de pipeline", + "pipelineVisualizationHint": "Envie uma mensagem para ver como sua solicitação flui através de detecção → tradução → chamada do provedor.", + "chatTesterDescription": "Envie mensagens em um formato de cliente específico e inspecione cada etapa do pipeline de tradução.", + "chatTesterFlow": "Solicitação do cliente → Detecção de formato → OpenAI Intermediário → Formato do provedor → Resposta", + "clickStepToInspect": "Clique em qualquer etapa para inspecionar os dados nessa fase.", + "clientFormat": "Formato do cliente", + "provider": "Provedor", + "modelPlaceholder": "Selecione ou digite um nome de modelo...", + "sendMessageToSeePipeline": "Envie uma mensagem para ver o pipeline de tradução", + "chatMessageHintPrefix": "Sua mensagem será formatada como um", + "chatMessageHintSuffix": "solicitação, traduzida por meio do pipeline e enviada ao provedor selecionado.", + "youWithFormat": "Você ({format})", + "assistant": "Assistente", + "typeMessage": "Digite uma mensagem...", + "send": "Enviar", + "clientRequest": "Solicitação do cliente", + "clientRequestDescription": "O corpo da solicitação que seu cliente enviaria", + "formatDetected": "Formato detectado", + "formatDetectedDescription": "OmniRoute detecta automaticamente o formato da API na estrutura da solicitação", + "openaiIntermediate": "OpenAI intermediário", + "openaiIntermediateDescription": "Todos os formatos são primeiro normalizados para o formato OpenAI (a ponte universal)", + "providerFormat": "Formato do provedor", + "providerFormatDescription": "O formato OpenAI é traduzido para o formato nativo do provedor", + "providerResponse": "Resposta do provedor", + "providerResponseRawDescription": "A resposta bruta da API do provedor", + "providerResponseSseDescription": "O fluxo SSE bruto da API do provedor", + "unexpectedError": "Ocorreu um erro inesperado", + "error": "Erro", + "errorMessage": "Erro: {message}", + "requestFailed": "Falha na solicitação", + "noTextExtracted": "(Nenhum texto extraído)", + "liveMonitorDescriptionPrefix": "Mostra eventos de tradução à medida que as chamadas de API fluem pelo OmniRoute. Os eventos vêm do buffer na memória (redefinições na reinicialização). Usar", + "liveMonitorDescriptionSuffix": "ou chamadas de API externas para gerar eventos." + }, + "usage": { + "title": "Uso", + "loggerTab": "Registrador", + "proxyTab": "Procurador", + "budgetManagement": "Gestão Orçamentária", + "budgetSaved": "Limites de orçamento salvos", + "budgetSaveFailed": "Falha ao salvar o orçamento", + "loadingBudgetData": "Carregando dados do orçamento...", + "noApiKeysTitle": "Sem chaves de API", + "noApiKeysDescription": "Adicione chaves de API primeiro para configurar limites de orçamento.", + "apiKey": "Chave de API", + "todaysSpend": "Gasto de hoje", + "thisMonth": "Este mês", + "setLimits": "Definir limites", + "dailyLimitUsd": "Limite Diário (USD)", + "monthlyLimitUsd": "Limite Mensal (USD)", + "warningThresholdPercent": "Limite de aviso (%)", + "dailyLimitPlaceholder": "por exemplo 5h00", + "monthlyLimitPlaceholder": "por exemplo 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Salvar Limites", + "budgetOk": "Orçamento OK — {remaining} restantes", + "budgetExceeded": "Orçamento excedido — solicitações podem ser bloqueadas", + "totalRequests": "Total de solicitações", + "noDataYet": "Ainda não há dados", + "latency": "Latência", + "latencyP50": "p50", + "latencyP95": "pág.95", + "latencyP99": "p99", + "promptCache": "Cache de prompt", + "systemHealth": "Saúde do sistema", + "entries": "Entradas", + "activeCount": "{count} ativo", + "openCircuitBreakersDetected": "Disjuntores abertos detectados", + "hitRate": "Taxa de acerto", + "hitsMisses": "Acertos / Erros", + "circuitBreakers": "Disjuntores", + "lockedIPs": "IPs bloqueados", + "lockoutsAutoRefreshHint": "Bloqueios de limite de taxa por modelo • Atualização automática de 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} restantes", + "howItWorks": "Como funciona", + "howItWorksSubtitle": "Saiba como as avaliações validam suas respostas do LLM", + "define": "Definir", + "defineStepDescription": "Crie casos de teste com prompts de entrada e critérios de saída esperados usando estratégias como contém, regex ou correspondência exata.", + "run": "Corre", + "runStepDescription": "Execute casos de teste em seus endpoints LLM por meio do OmniRoute. Cada caso é enviado como uma solicitação de API real.", + "evaluate": "Avaliar", + "evaluateStepDescription": "As respostas são comparadas com os critérios esperados. Veja aprovação/reprovação para cada caso com métricas de latência e feedback detalhado.", + "evalSuites": "Suítes de avaliação", + "evalSuitesHint": "Clique em um conjunto para visualizar casos de teste e execute para avaliar seus endpoints LLM", + "evalsLoading": "Carregando suítes de avaliação...", + "noEvalSuitesFound": "Nenhuma suíte Eval encontrada", + "noEvalSuitesDescription": "Os conjuntos de avaliação podem ser definidos por meio da API ou em código. Eles testam os resultados do modelo em relação aos resultados esperados usando estratégias como contém, regex, correspondência exata e funções personalizadas.", + "columnCase": "Caso", + "columnStatus": "Estado", + "columnLatency": "Latência", + "columnDetails": "Detalhes", + "columnModel": "Modelo", + "columnStrategy": "Estratégia", + "columnExpected": "Esperado", + "statsSuites": "Suítes", + "statsTestCases": "Casos de teste", + "statsModels": "Modelos", + "statsCoverage": "Cobertura", + "statsStrategiesCount": "{count} estratégias", + "evaluationStrategies": "Estratégias de Avaliação", + "modelsUnderTest": "Modelos em teste", + "searchSuitesPlaceholder": "Pesquisar suítes...", + "passSuffix": "passar", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Executar avaliação", + "runningProgress": "Executando {current}/{total}...", + "passRate": "taxa de aprovação", + "summaryBreakdown": "{passed} aprovado · {failed} reprovado · {total} total", + "passedIconLabel": "✅ Aprovado", + "failedIconLabel": "❌ Falhou", + "detailsContains": "Contém: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Esperado: \"{expected}\"", + "noResultsYet": "Ainda não há resultados", + "testCasesCount": "Casos de teste ({count})", + "noTestCasesDefined": "Nenhum caso de teste definido", + "runEvalHint": "Clique em \"Executar avaliação\" para executar todos os casos em seu endpoint LLM. Cada teste envia uma solicitação real através do OmniRoute.", + "notifyNoTestCases": "Nenhum caso de teste definido para este pacote", + "notifyAllCasesPassed": "Todos os casos {total} foram aprovados ✅", + "notifySomeCasesFailed": "{passed}/{total} aprovado, {failed} falhou", + "notifyEvalRunFailed": "Falha na execução da avaliação", + "notifyEvalTitle": "Avaliação: {name}", + "modelEvals": "Avaliações de modelos", + "evalsHeroDescription": "Teste e valide seus endpoints LLM executando conjuntos de avaliação predefinidos. Cada conjunto contém casos de teste que enviam prompts reais por meio do OmniRoute e comparam as respostas com os critérios esperados, ajudando você a detectar regressões, comparar modelos e garantir a qualidade da resposta entre os provedores.", + "qualityValidation": "Validação de Qualidade", + "modelComparison": "Comparação de modelos", + "regressionDetection": "Detecção de regressão", + "latencyBenchmarks": "Benchmarks de latência", + "modelLockouts": "Bloqueios de modelo", + "noLockouts": "Nenhum modelo atualmente bloqueado", + "activeSessions": "Sessões ativas", + "noSessions": "Nenhuma sessão ativa", + "sessionsHint": "As sessões aparecem conforme as solicitações fluem pelo proxy", + "sessionsTrackedHint": "Rastreado por solicitação de impressão digital • Atualização automática 5s", + "session": "Sessão", + "age": "Idade", + "requests": "Solicitações", + "connection": "Conexão", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limites do provedor", + "noProviders": "Nenhum provedor conectado", + "connectProvidersForQuota": "Conecte-se a provedores com OAuth para rastrear o uso e os limites de cota de API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrado de {count})", + "autoRefresh": "Atualização automática", + "refreshAll": "Atualizar tudo", + "loadingQuotas": "Carregando...", + "account": "Conta", + "modelQuotas": "Cotas de modelo", + "lastUsed": "Último uso", + "actions": "Ações", + "refreshQuota": "Atualizar cota", + "today": "Hoje", + "tomorrow": "Amanhã", + "dayTimeFormat": "{day}, {time}", + "inDuration": "em {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Plano bruto: {plan}", + "noPlanFromProvider": "Nenhum plano do provedor", + "noQuotaData": "Sem dados de cota", + "noQuotaDataAvailable": "Não há dados de cota disponíveis", + "noAccountsForTierFilter": "Nenhuma conta encontrada para filtro de nível", + "tierAll": "Todos", + "tierEnterprise": "Empresa", + "tierTeam": "Equipe", + "tierBusiness": "Negócios", + "tierUltra": "Ultra", + "tierPro": "Pró", + "tierPlus": "Mais", + "tierFree": "Grátis", + "tierUnknown": "Desconhecido" + }, + "modals": { + "waitingAuth": "Aguardando autorização", + "verificationUrl": "URL de verificação", + "yourCode": "Seu código", + "remoteAccess": "Acesso remoto:", + "connectedSuccess": "Conectado com sucesso!", + "connectionFailed": "Falha na conexão", + "chooseAuthMethod": "Escolha seu método de autenticação:", + "awsBuilderId": "ID do construtor AWS", + "awsIamIdentity": "Centro de identidade AWS IAM", + "googleAccount": "Conta do Google", + "githubAccount": "Conta GitHub", + "importToken": "Token de importação", + "pasteToken": "Cole o token de atualização do Kiro IDE.", + "awsRegion": "Região AWS", + "autoDetecting": "Detecção automática de tokens...", + "readingFromCache": "Lendo do cache SSO da AWS", + "readingFromCursor": "Lendo do banco de dados Cursor IDE", + "initializing": "Inicializando...", + "pricingConfig": "Configuração de preços", + "loadingPricing": "Carregando dados de preços...", + "pricingRatesFormat": "Formato de taxas de preços", + "noPricingData": "Não há dados de preços disponíveis", + "noModelsFound": "Nenhum modelo encontrado" + }, + "loggers": { + "allProviders": "Todos os provedores", + "allModels": "Todos os modelos", + "allAccounts": "Todas as contas", + "allApiKeys": "Todas as chaves de API", + "allTypes": "Todos os tipos", + "allLevels": "Todos os níveis", + "modelAZ": "Modelo A-Z", + "modelZA": "Modelo Z-A", + "loadingLogs": "Carregando registros...", + "loadingProxyLogs": "Carregando registros de proxy...", + "noLogEntries": "Nenhuma entrada de registro encontrada", + "noPayloadData": "Não há dados de carga disponíveis para esta entrada de log.", + "proxyEvent": "Evento proxy", + "proxy": "Procurador", + "level": "Nível", + "directNative": "Direto (nativo)", + "combo": "Combinação", + "inputTokens": "Eu:", + "outputTokens": "Ó:" + }, + "stats": { + "usageOverview": "Visão geral do uso", + "outputTokens": "Tokens de saída", + "totalCost": "Custo total", + "usageByModel": "Uso por modelo", + "usageByAccount": "Uso por conta", + "failedToLoad": "Falha ao carregar estatísticas de uso.", + "tokenHealth": "Saúde do token", + "totalOAuth": "OAuth total", + "healthy": "Saudável", + "warning": "Aviso", + "errored": "Erro", + "lastCheck": "Última verificação", + "noData": "Sem dados", + "share": "Compartilhar", + "unableToLoad": "Não foi possível carregar as métricas do sistema", + "product": "Produto", + "resources": "Recursos", + "company": "Empresa" + }, + "auth": { + "welcome": "Bem vindo", + "signIn": "Faça login", + "enterPassword": "Digite sua senha para continuar", + "password": "Senha", + "unifiedProxy": "Proxy de API de IA unificado", + "unifiedAiApiProxy": "Proxy de API de IA unificado", + "unifiedAiApiProxyDesc": "Encaminhe solicitações para vários provedores de IA por meio de um único endpoint. Balanceamento de carga, failover e rastreamento de uso integrados.", + "passwordNotEnabled": "A proteção por senha não está ativada", + "loading": "Carregando...", + "invalidPassword": "Senha inválida", + "errorOccurredRetry": "Ocorreu um erro. Por favor, tente novamente.", + "configureInstance": "Vamos configurar sua instância do OmniRoute", + "runOnboardingWizard": "Execute o assistente de integração para configurar sua senha e conectar seu primeiro provedor de IA.", + "startOnboarding": "Comece a integração", + "secureYourInstance": "Proteja sua instância", + "setPasswordDescription": "Defina uma senha para proteger seu painel e proteger seus endpoints de API contra acesso não autorizado.", + "configurePassword": "Configurar senha", + "continue": "Continuar", + "windowWillClose": "Esta janela fechará automaticamente...", + "closeTabNow": "Você pode fechar esta guia agora.", + "copyUrlManual": "Copie o URL da barra de endereço e cole-o no aplicativo.", + "accessDeniedDescription": "Você não tem permissão para acessar este recurso. Verifique sua chave API ou entre em contato com o administrador.", + "goToDashboard": "Vá para o painel", + "featureMultiProviderTitle": "Multi-Provedor", + "featureMultiProviderDesc": "OpenAI, Antrópico, Google e muito mais", + "featureLoadBalancingTitle": "Balanceamento de carga", + "featureLoadBalancingDesc": "Distribua solicitações de forma inteligente", + "featureUsageTrackingTitle": "Rastreamento de uso", + "featureUsageTrackingDesc": "Monitore custos e tokens", + "resetPassword": "Redefinir senha", + "resetDescription": "Escolha um método para recuperar o acesso ao seu painel", + "stopServer": "Pare o servidor OmniRoute", + "processing": "Processando...", + "pleaseWait": "Aguarde enquanto concluímos a autorização.", + "authSuccess": "Autorização bem-sucedida!", + "copyUrl": "Copie este URL", + "accessDenied": "Acesso negado", + "methodCliTitle": "Método 1: redefinição CLI", + "methodCliDescription": "Execute o seguinte comando no servidor onde o OmniRoute está sendo executado:", + "methodCliHint": "Isso solicitará que você defina uma nova senha. O servidor deve ser parado primeiro.", + "methodManualTitle": "Método 2: reinicialização manual", + "methodManualDescription": "Exclua a senha do banco de dados e defina uma nova na inicialização:", + "setPasswordInYour": "Defina uma nova senha em seu", + "fileLabelSuffix": "arquivo:", + "newPasswordPlaceholder": "sua_nova_senha", + "deleteSettingsFile": "Excluir", + "orRemovePasswordHashField": "ou remova o campo passwordHash", + "restartServerWithNewPassword": "Reinicie o servidor - ele usará a nova senha", + "backToLogin": "Voltar ao login", + "forgotPassword": "Esqueceu a senha?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navegue até a casa", + "toggleMenu": "Alternar menu", + "featuresLink": "Recursos", + "docsLink": "Documentos", + "github": "GitHub", + "versionLive": "v1.0 agora está ativo", + "oneEndpoint": "Um ponto final para", + "allProviders": "Todos os provedores de IA", + "heroDescription": "Proxy de endpoint de IA com painel da web – uma porta JavaScript do CLIProxyAPI. Funciona perfeitamente com Claude Code, OpenAI Codex, Cline, RooCode e outras ferramentas CLI.", + "getStarted": "Comece", + "viewOnGithub": "Ver no GitHub", + "powerfulFeatures": "Recursos poderosos", + "featuresSubtitle": "Tudo o que você precisa para gerenciar sua infraestrutura de IA em um só lugar, desenvolvida para escalar.", + "featureUnifiedEndpointTitle": "Ponto final unificado", + "featureUnifiedEndpointDesc": "Acesse todos os provedores por meio de um único URL de API padrão.", + "featureEasySetupTitle": "Configuração fácil", + "featureEasySetupDesc": "Comece a trabalhar em minutos com o comando npx.", + "featureModelFallbackTitle": "Modelo substituto", + "featureModelFallbackDesc": "Alterne automaticamente os provedores em caso de falha ou alta latência.", + "featureUsageTrackingTitle": "Rastreamento de uso", + "featureUsageTrackingDesc": "Análise detalhada e monitoramento de custos em todos os modelos.", + "featureOAuthApiKeysTitle": "Chaves OAuth e API", + "featureOAuthApiKeysDesc": "Gerencie credenciais com segurança em um cofre.", + "featureCloudSyncTitle": "Sincronização na nuvem", + "featureCloudSyncDesc": "Sincronize suas configurações entre dispositivos instantaneamente.", + "featureCliSupportTitle": "Suporte CLI", + "featureCliSupportDesc": "Funciona com Claude Code, Codex, Cline, Cursor e muito mais.", + "featureDashboardTitle": "Painel", + "featureDashboardDesc": "Painel visual para análise de tráfego em tempo real.", + "howItWorks": "Como funciona o OmniRoute", + "howItWorksDescription": "Os dados fluem perfeitamente da sua aplicação através da nossa camada de roteamento inteligente até o melhor fornecedor para o trabalho.", + "howItWorksStep1Title": "1. CLI e SDKs", + "howItWorksStep1Description": "Suas solicitações partem de suas ferramentas favoritas ou de nosso SDK unificado. Basta alterar o URL base.", + "howItWorksStep2Title": "2. Hub OmniRoute", + "howItWorksStep2Description": "Nosso mecanismo analisa o prompt, verifica a integridade do provedor e encaminha para obter menor latência ou custo.", + "howItWorksStep3Title": "3. Provedores de IA", + "howItWorksStep3Description": "A solicitação é atendida por OpenAI, Anthropic, Gemini ou outros instantaneamente.", + "getStartedIn30Seconds": "Comece em 30 segundos", + "getStartedDescription": "Instale o OmniRoute, configure seus provedores por meio do painel da web e comece a rotear solicitações de IA.", + "installOmniRoute": "Instalar OmniRoute", + "installStepDescription": "Execute o comando npx para iniciar o servidor instantaneamente", + "openDashboard": "Abra o painel", + "openDashboardStepDescription": "Configure provedores e chaves de API via interface web", + "routeRequests": "Solicitações de rota", + "routeRequestsStepDescription": "Aponte suas ferramentas CLI para {endpoint}", + "terminal": "terminal", + "copy": "Copiar", + "copied": "✓ Copiado", + "startingOmniRoute": "Iniciando o OmniRoute...", + "serverRunningOnLabel": "Servidor em execução", + "dashboardLabel": "Painel", + "readyToRoute": "Pronto para rota! ✓", + "configureProvidersNote": "📝 Configure provedores no painel ou use variáveis de ambiente", + "dataLocation": "Localização dos dados:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Janelas:", + "product": "Produto", + "dashboardLink": "Painel", + "changelog": "Registro de alterações", + "resources": "Recursos", + "documentation": "Documentação", + "npm": "NPM", + "legal": "Jurídico", + "mitLicense": "Licença MIT", + "footerTagline": "O endpoint unificado para geração de IA. Conecte, encaminhe e gerencie seus provedores de IA com facilidade.", + "copyright": "© {year} OmniRoute. Todos os direitos reservados.", + "flowToolClaudeCode": "Código Claude", + "flowToolOpenAICodex": "Códice OpenAI", + "flowToolCline": "Cline", + "flowToolCursor": "Cursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antrópico", + "flowProviderGemini": "Gêmeos", + "flowProviderGithubCopilot": "Copiloto GitHub", + "interactiveDiagram": "Diagrama interativo visível na área de trabalho", + "ctaTitle": "Pronto para simplificar sua infraestrutura de IA?", + "ctaDescription": "Junte-se aos desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Código aberto e gratuito para começar.", + "startFree": "Comece grátis", + "readDocumentation": "Leia a documentação" + }, + "docs": { + "title": "Documentação", + "quickStart": "Início rápido", + "features": "Recursos", + "supportedProviders": "Provedores Suportados", + "supportedProvidersToc": "Provedores", + "commonUseCases": "Casos de uso comuns", + "clientCompatibility": "Compatibilidade do cliente", + "apiReference": "Referência de API", + "method": "Método", + "path": "Caminho", + "notes": "Notas", + "modelPrefixes": "Prefixos de modelo", + "prefix": "Prefixo", + "troubleshooting": "Solução de problemas", + "supportsChat": "Suporta endpoints de chat e respostas.", + "oauthAutoRefresh": "Conexão OAuth com atualização automática de token.", + "fullStreaming": "Suporte completo de streaming para todos os modelos.", + "docsLabel": "Documentos", + "docsHeroDescription": "Gateway de IA para LLMs de vários provedores. Um endpoint para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e mais de 20 provedores.", + "openDashboard": "Abra o painel", + "endpointPage": "Página de ponto final", + "github": "GitHub", + "reportIssue": "Reportar problema", + "onThisPage": "Nesta página", + "documentationVersion": "Documentação - v{version}", + "quickStartStep1Title": "1. Instale e execute", + "quickStartStep1Prefix": "Corre", + "quickStartStep1Middle": "ou clone do GitHub e execute", + "quickStartStep2Title": "2. Crie uma chave API", + "quickStartStep2Text": "Vá para Endpoint -> Chaves Registradas. Gere uma chave por ambiente.", + "quickStartStep3Title": "3. Conecte provedores", + "quickStartStep3Text": "Adicione contas de provedor por meio de login OAuth, chave de API ou conexão automática de nível gratuito.", + "quickStartStep4Title": "4. Defina o URL da base do cliente", + "quickStartStep4Prefix": "Aponte seu cliente IDE ou API para", + "quickStartStep4Suffix": "Use o prefixo do provedor, por exemplo", + "featureRoutingTitle": "Roteamento multiprovedor", + "featureRoutingText": "Encaminhe solicitações para mais de 30 provedores de IA por meio de um único endpoint compatível com OpenAI. Suporta APIs de chat, respostas, áudio e imagem.", + "featureCombosTitle": "Combos e Balanceamento", + "featureCombosText": "Crie combinações de modelos com cadeias de fallback e estratégias de balanceamento: round-robin, prioridade, aleatório, menos usado e com custo otimizado.", + "featureUsageTitle": "Uso e rastreamento de custos", + "featureUsageText": "Contagem de tokens em tempo real, cálculo de custos por provedor/modelo e detalhamento de uso por chave de API e conta.", + "featureAnalyticsTitle": "Painel analítico", + "featureAnalyticsText": "Análise visual com gráficos de solicitações, tokens, erros, latência, custos e popularidade do modelo ao longo do tempo.", + "featureHealthTitle": "Monitoramento de Saúde", + "featureHealthText": "Verificações de integridade em tempo real, status do provedor, estados de disjuntores e detecção automática de limite de taxa com espera exponencial.", + "featureCliTitle": "Ferramentas CLI", + "featureCliText": "Gerencie configurações de IDE, exporte/importe backups, descubra perfis de codex e defina configurações no painel.", + "featureSecurityTitle": "Segurança e Políticas", + "featureSecurityText": "Autenticação de chave de API, filtragem de IP, proteção contra injeção de prompt, políticas de domínio, gerenciamento de sessão e registro de auditoria.", + "featureCloudSyncTitle": "Sincronização na nuvem", + "featureCloudSyncText": "Sincronize sua configuração com Cloudflare Workers para acesso remoto com credenciais criptografadas e failover automático.", + "providersAcrossConnectionTypes": "{count} provedores em três tipos de conexão.", + "manageProviders": "Gerenciar provedores", + "providersCount": "{count} provedores", + "providerTypeFree": "Nível gratuito", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Chave de API", + "useCaseSingleEndpointTitle": "Endpoint único para muitos provedores", + "useCaseSingleEndpointText": "Aponte os clientes para uma URL base e roteie por prefixo de modelo (por exemplo: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback e troca de modelo com combos", + "useCaseFallbackText": "Crie modelos combinados no Dashboard e mantenha a configuração do cliente estável enquanto os provedores alternam internamente.", + "useCaseUsageVisibilityTitle": "Visibilidade de uso, custo e depuração", + "useCaseUsageVisibilityText": "Rastreie tokens e custos por provedor, conta e chave de API nas guias Uso e Análise.", + "clientCherryStudioTitle": "Estúdio Cereja", + "baseUrlLabel": "URL base", + "chatEndpointLabel": "Ponto de extremidade do bate-papo", + "modelRecommendationLabel": "Recomendação de modelo: prefixo explícito", + "clientCodexTitle": "Modelos de copiloto Codex/GitHub", + "clientCodexBullet1": "Use IDs de modelo com", + "clientCodexBullet2": "Os modelos da família Codex roteiam automaticamente para", + "clientCodexBullet3": "Os modelos não-Codex continuam", + "clientCursorTitle": "Cursor IDE", + "clientCursorBullet1": "Usar", + "clientCursorBullet1Suffix": "prefixo para modelos Cursor.", + "clientCursorBullet2": "Conexão OAuth - faça login na página Provedores.", + "clientClaudeTitle": "Código Claude / Antigravidade", + "clientClaudeBullet1Prefix": "Usar", + "clientClaudeBullet1Middle": "(Cláudio) ou", + "clientClaudeBullet1Suffix": "Prefixo (antigravidade).", + "endpointChatNote": "Endpoint de chat compatível com OpenAI (padrão).", + "endpointResponsesNote": "Endpoint da API de respostas (Codex, série o).", + "endpointModelsNote": "Catálogo de modelos para todos os provedores conectados.", + "endpointAudioNote": "Transcrição de áudio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Geração de imagens (NanoBanana).", + "endpointRewriteChatNote": "Auxiliar de reescrita para clientes sem /v1.", + "endpointRewriteResponsesNote": "Reescreva o auxiliar para respostas sem /v1.", + "endpointRewriteModelsNote": "Reescreva o auxiliar para descoberta de modelo sem /v1.", + "modelPrefixesDescriptionStart": "Use o prefixo do provedor antes do nome do modelo para rotear para um provedor específico. Exemplo:", + "modelPrefixesDescriptionEnd": "rotas para GitHub Copilot.", + "provider": "Provedor", + "type": "Tipo", + "troubleshootingModelRouting": "Se o cliente falhar com o roteamento do modelo, use provedor/modelo explícito (por exemplo: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Se você receber erros de modelo ambíguos, escolha um prefixo de provedor em vez de um ID de modelo simples.", + "troubleshootingCodexFamily": "Para modelos da família GitHub Codex, mantenha o modelo como gh/; roteador seleciona /respostas automaticamente.", + "troubleshootingTestConnection": "Use Painel > Provedores > Testar conexão antes de testar em IDEs ou clientes externos.", + "troubleshootingCircuitBreaker": "Se um provedor mostrar o disjuntor aberto, aguarde o resfriamento ou verifique a página de integridade para obter detalhes.", + "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor." + }, + "legal": { + "privacyPolicy": "Política de Privacidade", + "termsOfService": "Termos de Serviço", + "providerConfigurations": "Configurações do provedor", + "apiKeys": "Chaves de API", + "usageLogs": "Registros de uso", + "applicationSettings": "Configurações do aplicativo", + "viewExportAnalytics": "Visualize e exporte análises de uso", + "clearHistory": "Limpe o histórico de uso a qualquer momento", + "configureRetention": "Configurar políticas de retenção de log", + "backupRestore": "Faça backup e restaure seu banco de dados", + "privacyMetadataTitle": "Política de Privacidade | OmniRoute", + "privacyMetadataDescription": "Política de privacidade para o roteador proxy OmniRoute AI API.", + "termsMetadataTitle": "Termos de Serviço | OmniRoute", + "termsMetadataDescription": "Termos de serviço do roteador proxy OmniRoute AI API.", + "backToHome": "De volta para casa", + "lastUpdated": "Última atualização: {date}", + "policyLastUpdatedDate": "13 de fevereiro de 2026", + "listSeparator": "-", + "questionsVisit": "Perguntas? Visite nosso", + "githubRepository": "Repositório GitHub", + "privacySection1Title": "1. Arquitetura local primeiro", + "privacySection1Text": "OmniRoute foi projetado como um aplicativo local. Todo o processamento e armazenamento de dados ocorre inteiramente em sua máquina. Não existe um servidor centralizado que coleta suas informações.", + "privacySection2Title": "2. Dados que armazenamos", + "privacyDataStoredIn": "Os seguintes dados são armazenados localmente em", + "privacyDataProviderConfigurationsDesc": "URLs de conexão, tipos de provedores e configurações de prioridade", + "privacyDataApiKeysDesc": "criptografado e armazenado localmente para autenticação com provedores de IA", + "privacyDataUsageLogsDesc": "contagens de solicitações, uso de token, nomes de modelos, carimbos de data/hora e tempos de resposta", + "privacyDataApplicationSettingsDesc": "preferências de tema, estratégia de roteamento e configurações combinadas", + "privacySection3Title": "3. Sem telemetria", + "privacySection3Text": "OmniRoute não coleta telemetria, análises ou relatórios de falhas. Nenhum dado é enviado para nós ou para terceiros. Seus padrões de uso, chamadas de API e configurações permanecem totalmente privados.", + "privacySection4Title": "4. Provedores terceirizados de IA", + "privacySection4Text": "Ao fazer chamadas de API por meio do OmniRoute, suas solicitações são encaminhadas para os provedores de IA que você configurou (por exemplo: OpenAI, Anthropic, Google). Esses provedores têm suas próprias políticas de privacidade que regem a forma como lidam com seus dados. Por favor, revise:", + "privacyOpenAiPolicy": "Política de privacidade da OpenAI", + "privacyAnthropicPolicy": "Política de Privacidade Antrópica", + "privacyGooglePolicy": "Política de privacidade do Google", + "privacySection5Title": "5. Sincronização na nuvem (opcional)", + "privacySection5Text": "Se você ativar o recurso opcional de sincronização em nuvem, as configurações do provedor e as chaves de API poderão ser transmitidas para um endpoint de nuvem configurado. Este recurso está desabilitado por padrão e requer aceitação explícita.", + "privacySection6Title": "6. Registro", + "privacyLoggingIntro": "Os logs de solicitação podem ser configurados nas configurações do painel. Você pode:", + "privacySection7Title": "7. Seus direitos", + "privacySection7TextStart": "Como todos os dados são armazenados localmente, você tem controle total. Você pode excluir seus dados a qualquer momento, removendo o", + "privacySection7TextEnd": "diretório ou usando os recursos de backup e restauração do banco de dados no painel.", + "termsSection1Title": "1. Visão geral", + "termsSection1Text": "OmniRoute é um roteador proxy API AI local que opera inteiramente em sua máquina. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.", + "termsSection2Title": "2. Responsabilidades do usuário", + "termsResponsibilityApiKeys": "Você é o único responsável por gerenciar suas próprias chaves de API e credenciais para provedores de IA terceirizados (OpenAI, Anthropic, Google, etc.).", + "termsResponsibilityCompliance": "Você deve cumprir os termos de serviço de cada provedor de IA cuja API você acessa por meio do OmniRoute.", + "termsResponsibilitySecurity": "Você é responsável pela segurança da instalação local do OmniRoute, incluindo a definição de uma senha e a restrição do acesso à rede.", + "termsSection3Title": "3. Como funciona", + "termsSection3Text": "OmniRoute atua como um proxy intermediário. As chamadas de API enviadas ao OmniRoute são traduzidas e encaminhadas para seus provedores de IA configurados. OmniRoute não modifica o conteúdo de suas solicitações ou respostas além da tradução de protocolo necessária.", + "termsSection4Title": "4. Tratamento de dados", + "termsDataStoredLocally": "Todos os dados são armazenados localmente na sua máquina em um banco de dados SQLite.", + "termsNoTransmission": "O OmniRoute não transmite nenhum dado para servidores externos, a menos que você habilite explicitamente os recursos de sincronização na nuvem.", + "termsDataLocationText": "Logs de uso, chaves de API e configuração são armazenados em", + "termsSection5Title": "5. Isenção de responsabilidade", + "termsSection5Text": "OmniRoute é fornecido \"como está\" sem qualquer tipo de garantia. Não somos responsáveis ​​por quaisquer custos incorridos através do uso da API, interrupções de serviço ou perda de dados. Sempre mantenha backups de sua configuração.", + "termsSection6Title": "6. Código aberto", + "termsSection6Text": "OmniRoute é um software de código aberto. Você é livre para inspecioná-lo, modificá-lo e distribuí-lo sob os termos de sua licença." + } +} diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json new file mode 100644 index 0000000000..dedbd04232 --- /dev/null +++ b/src/i18n/messages/ro.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Salvați", + "cancel": "Anulează", + "delete": "Ștergeți", + "loading": "Se încarcă...", + "error": "A apărut o eroare", + "success": "Succes", + "confirm": "esti sigur?", + "refresh": "Reîmprospătați", + "close": "Închide", + "add": "Adăugați", + "edit": "Editați", + "search": "Caută", + "back": "Înapoi", + "next": "În continuare", + "submit": "Trimiteți", + "reset": "Resetați", + "copy": "Copiere", + "copied": "Copiat!", + "enabled": "Activat", + "disabled": "Dezactivat", + "active": "Activ", + "inactive": "Inactiv", + "noData": "Nu există date disponibile", + "configure": "Configurați", + "manage": "Gestionează", + "name": "Nume", + "actions": "Acțiuni", + "status": "Stare", + "type": "Tip", + "model": "Model", + "models": "modele", + "provider": "Furnizor", + "account": "Cont", + "time": "timpul", + "details": "Detalii", + "created": "Creat", + "lastUsed": "Ultima utilizare", + "loadMore": "Încărcați mai multe", + "noResults": "Nu s-au găsit rezultate", + "reloadPage": "Reîncărcați pagina", + "connected": "Conectat", + "disconnected": "Deconectat", + "notConfigured": "Neconfigurat", + "testConnection": "Testează conexiunea", + "enable": "Activați", + "disable": "Dezactivați", + "columns": "Coloane", + "newest": "Cel mai nou", + "oldest": "Cel mai vechi", + "all": "Toate", + "none": "Niciuna", + "yes": "Da", + "no": "Nu", + "warning": "Avertisment", + "note": "Notă", + "free": "Gratuit", + "skipToContent": "Treci la conținut" + }, + "sidebar": { + "home": "Acasă", + "dashboard": "Tabloul de bord", + "providers": "Furnizorii", + "combos": "Combo-uri", + "usage": "Utilizare", + "analytics": "Analytics", + "costs": "Costuri", + "health": "Sănătate", + "limits": "Limite și cote", + "cliTools": "Instrumente CLI", + "settings": "Setări", + "translator": "Traducător", + "docs": "Docs", + "issues": "Probleme", + "endpoint": "Punct final", + "apiManager": "Manager API", + "logs": "Bușteni", + "auditLog": "Jurnal de audit", + "shutdown": "Închidere", + "restart": "Reporniți", + "shutdownConfirm": "Închideți OmniRoute?", + "restartConfirm": "Reporniți OmniRoute?", + "version": "v{version}", + "debug": "Depanați", + "system": "Sistem", + "help": "Ajutor", + "serverDisconnected": "Server deconectat", + "serverDisconnectedMsg": "Serverul proxy a fost oprit sau repornește.", + "expandSidebar": "Extinde bara laterală", + "collapseSidebar": "Restrângeți bara laterală" + }, + "header": { + "logout": "Deconectare", + "language": "Limba", + "providers": "Furnizorii", + "providerDescription": "Gestionați-vă conexiunile furnizorului dvs. de AI", + "combos": "Combo-uri", + "comboDescription": "Combo de modele cu rezervă", + "usage": "Utilizare și analiză", + "usageDescription": "Monitorizați-vă utilizarea API-ului, consumul de token-uri și jurnalele de solicitări", + "analytics": "Analytics", + "analyticsDescription": "Diagrame, tendințe și perspective de evaluare", + "cliTools": "Instrumente CLI", + "cliToolsDescription": "Configurați instrumentele CLI", + "home": "Acasă", + "homeDescription": "Bun venit la OmniRoute", + "endpoint": "Punct final", + "endpointDescription": "Configurarea punctului final API", + "settings": "Setări", + "settingsDescription": "Gestionați-vă preferințele", + "openaiCompatible": "Compatibil cu OpenAI", + "anthropicCompatible": "Compatibil antropic" + }, + "home": { + "quickStart": "Pornire rapidă", + "quickStartDesc": "Pune-te în funcțiune în 4 pași. Conectați furnizorii, modelele de traseu, monitorizați totul.", + "fullDocs": "Documente complete", + "step1Title": "1. Creați cheia API", + "step1Desc": "Accesați Endpoint -> Chei înregistrate. Generați o cheie pentru fiecare mediu.", + "step2Title": "2. Conectați furnizorii", + "step2Desc": "Adăugați conturi în Providers. Acceptă OAuth, cheie API și niveluri gratuite.", + "step3Title": "3. Indicați-vă clientul", + "step3Desc": "Setați adresa URL de bază la {url} în clientul dvs. IDE sau API.", + "step4Title": "4. Monitorizați și optimizați", + "step4Desc": "Urmăriți jetoanele, costurile și erorile în Request Logs și Analytics.", + "providersOverview": "Prezentare generală a furnizorilor", + "configuredOf": "{configured} configurat din {total} furnizori disponibili", + "noModelsAvailable": "Nu există modele disponibile pentru acest furnizor.", + "configureFirst": "Configurați mai întâi o conexiune în {providers}", + "configureProvider": "Configurați furnizorul", + "modelAvailable": "{count} model disponibil", + "modelsAvailable": "{count} modele disponibile", + "connectionsActive": "{count} conexiune activă", + "connectionsActivePlural": "{count} conexiuni active", + "copyModelName": "Copiați numele modelului", + "documentation": "Documentare", + "healthMonitor": "Monitor de sănătate", + "reportIssue": "Raportați problema", + "activeError": "{active} activ · {errors} eroare", + "oauthLabel": "OAuth", + "apiKeyLabel": "Cheia API", + "requestsShort": "{count} solicită", + "providerModelsTitle": "{provider} - Modele", + "copiedModel": "Copiat: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Monitorizați-vă modelele de utilizare a API-ului, consumul de simboluri, costurile și tendințele activității la toți furnizorii și modelele.", + "evalsDescription": "Rulați suite de evaluare pentru a testa și valida punctele finale LLM. Comparați calitatea modelului, detectați regresiile și evaluați latența.", + "overview": "Prezentare generală", + "evals": "Evaluări" + }, + "apiManager": { + "title": "Chei API", + "createKey": "Creați cheia API", + "key": "cheie", + "revokeKey": "Revocați cheia", + "revokeConfirm": "Sigur doriți să revocați această cheie API?", + "noKeys": "Încă nu există chei API", + "noKeysDesc": "Creați prima cheie API pentru a autentifica solicitările către punctul final", + "keyLabel": "Eticheta cheii", + "permissions": "Permisiuni", + "expiresAt": "Expiră", + "never": "Niciodată", + "revoke": "Revocați", + "showKey": "Afișați cheia", + "hideKey": "Ascunde cheia", + "copyKey": "Copiați cheia API", + "allModels": "Toate modelele", + "selectedModels": "Modele Selectate", + "readOnly": "Numai citire", + "fullAccess": "Acces complet", + "keyManagement": "Managementul cheilor API", + "keyManagementDesc": "Creați și gestionați cheile API pentru autentificarea solicitărilor către punctul dvs. final", + "totalKeys": "Total chei", + "restricted": "Restricţionat", + "totalRequests": "Total cereri", + "modelsAvailable": "Modele disponibile", + "registeredKeys": "Chei înregistrate", + "keysRegistered": "{count} chei înregistrate", + "keyRegistered": "{count} cheie înregistrată", + "keysSecurityNote": "Fiecare cheie izolează urmărirea utilizării și poate fi revocată independent. Cheile sunt mascate după creare pentru securitate.", + "createFirstKey": "Creați-vă prima cheie", + "name": "Nume", + "usage": "Utilizare", + "created": "Creat", + "actions": "Acțiuni", + "reqs": "solicită", + "neverUsed": "Nu a fost folosit niciodată", + "deleteConfirm": "Ștergeți această cheie API?", + "usageTips": "Sfaturi de utilizare", + "tipAuth": "Folosiți cheile API în antetul de autorizare ca purtător YOUR_KEY", + "tipSecure": "Cheile sunt afișate o singură dată în timpul creării - stocați-le în siguranță", + "tipSeparate": "Creați chei separate pentru diferiți clienți sau medii", + "tipRestrict": "Limitați cheile la anumite modele pentru o mai bună securitate și control al costurilor", + "keyName": "Nume cheie", + "keyNamePlaceholder": "de exemplu, cheie de producție, cheie de dezvoltare", + "keyNameDesc": "Alegeți un nume descriptiv pentru a identifica scopul acestei chei", + "keyCreated": "Cheia API creată", + "keyCreatedSuccess": "Cheie creată cu succes!", + "keyCreatedNote": "Copiați și stocați această cheie acum - nu va fi afișată din nou.", + "done": "Gata", + "savePermissions": "Salvare permisiuni", + "allowAll": "Permite Toate", + "restrict": "Restricționați", + "allowAllInfo": "Această cheie poate accesa toate modelele disponibile.", + "restrictInfo": "Această cheie poate accesa {selected} din {total} modele.", + "selected": "{count} selectat", + "all": "Toate", + "clear": "Clar", + "searchModels": "Căutați modele după nume sau furnizor...", + "noModelsFound": "Nu s-au găsit modele", + "keyNameRequired": "Numele cheii este obligatoriu", + "keyNameTooLong": "Numele cheii trebuie să aibă maximum {max} caractere", + "keyNameInvalid": "Numele cheii poate conține numai litere, cifre, spații, cratime și liniuțe de subliniere", + "invalidKeyName": "Nume cheie nevalid", + "failedCreateKey": "Nu s-a putut crea cheia", + "failedCreateKeyRetry": "Nu s-a putut crea cheia. Vă rugăm să încercați din nou.", + "invalidKeyId": "ID cheie nevalid", + "failedDeleteKey": "Cheia nu s-a șters", + "failedDeleteKeyRetry": "Cheia nu s-a șters. Vă rugăm să încercați din nou.", + "invalidModelsSelection": "Selecție nevalidă de modele", + "cannotSelectMoreThanModels": "Nu se pot selecta mai mult de {max} modele", + "failedUpdatePermissions": "Nu s-au actualizat permisiunile", + "failedUpdatePermissionsRetry": "Nu s-au actualizat permisiunile. Vă rugăm să încercați din nou.", + "unknownProvider": "necunoscut", + "copyMaskedKey": "Copiați cheia mascată", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Ultima: {date}", + "editPermissions": "Editați permisiunile", + "deleteKey": "Șterge cheia", + "model": "{count} model", + "models": "{count} modele", + "permissionsTitle": "Permisiuni: {name}", + "allowAllDesc": "Această cheie poate accesa toate modelele disponibile.", + "restrictDesc": "Această cheie poate accesa {selectedCount} din {totalModels} modele.", + "selectedCount": "{count} selectat" + }, + "auditLog": { + "title": "Jurnal de audit", + "searchPlaceholder": "Acțiuni de căutare...", + "action": "Acțiune", + "actor": "actor", + "target": "țintă", + "ipAddress": "Adresa IP", + "timestamp": "Marca temporală", + "noEntries": "Nu au fost găsite intrări de audit", + "filterByAction": "Filtrați după acțiune...", + "filterByActor": "Filtrați după actor...", + "filterEntriesAria": "Filtrați intrările din jurnalul de audit", + "filterByActionTypeAria": "Filtrați după tipul de acțiune", + "filterByActorAria": "Filtrați după actor", + "refreshAuditLogAria": "Actualizează jurnalul de audit", + "tableAria": "Intrări din jurnalul de audit", + "failedFetchAuditLog": "Nu s-a putut prelua jurnalul de audit", + "notAvailable": "—", + "description": "Acțiuni administrative și evenimente de securitate", + "showing": "Se afișează {count} intrări (offset {offset})", + "previous": "Anterior" + }, + "cliTools": { + "title": "Instrumente CLI", + "noActiveProviders": "Nu există furnizori activi", + "noActiveProvidersDesc": "Vă rugăm să adăugați și conectați mai întâi furnizorii pentru a configura instrumentele CLI.", + "mapModels": "Modele de hartă", + "testConnection": "Testează conexiunea", + "connectionStatus": "Starea conexiunii", + "configureEndpoint": "Configurați punctul final", + "instructions": "Instrucțiuni", + "modelMapping": "Maparea modelului", + "baseUrl": "Adresa URL de bază", + "apiKey": "Cheia API", + "configured": "Configurat", + "notConfigured": "Neconfigurat", + "notInstalled": "Neinstalat", + "custom": "Personalizat", + "unknown": "Necunoscut", + "lastSavedAt": "Ultima salvare: {date}", + "never": "Niciodată", + "justNow": "tocmai acum", + "minutesAgoShort": "{count}m în urmă", + "hoursAgoShort": "acum {count}h", + "daysAgoShort": "acum {count}d", + "monthsAgoShort": "{count}lună în urmă", + "yearsAgoShort": "{count}y în urmă", + "runtimeCheckFailed": "Verificarea timpului de execuție a eșuat", + "yourApiKeyPlaceholder": "cheia-api", + "modelPlaceholder": "provider/model-id", + "configurationSaved": "Configurația a fost salvată cu succes.", + "failedToSave": "Nu s-a putut salva configurația.", + "noApiKeysCreateOne": "Fără chei API - Creați una în pagina Chei", + "defaultOmnirouteKey": "sk_omniroute (implicit)", + "selectModel": "Selectați Model", + "selectModelForAlias": "Selectați modelul pentru {alias}", + "selectModelForTool": "Selectați modelul pentru {tool}", + "select": "Selectați", + "clear": "Clar", + "comingSoon": "În curând", + "checkingRuntime": "Se verifică starea de rulare...", + "guideOnlyIntegration": "Integrare numai cu ghid (nu este necesar un timp de rulare local)", + "cliRuntimeDetected": "Runtime CLI detectat și gata", + "cliFoundNotRunnable": "CLI găsit, dar nu poate fi executat{reason}", + "cliRuntimeNotDetected": "Runtime CLI nu a fost detectat", + "binary": "Binar", + "configPath": "Calea de configurare", + "configPathShort": "Config", + "failedCheckRuntimeStatus": "Nu s-a putut verifica starea de rulare.", + "copy": "Copiere", + "copied": "Copiat", + "copyConfig": "Copiați config", + "saveConfig": "Salvați configurația", + "selectionSaved": "Selecția a fost salvată", + "guide": "Ghid", + "detected": "Detectat", + "notReady": "Nu este gata", + "active": "Activ", + "inactive": "Inactiv", + "startMitm": "Porniți MITM", + "stopMitm": "Opriți MITM", + "mitmStarted": "MITM a început cu succes!", + "mitmStopped": "MITM sa oprit cu succes!", + "failedStart": "Nu s-a pornit MITM", + "failedStop": "Nu s-a oprit MITM", + "saveMappings": "Salvați mapările", + "mappingsSaved": "Mapări salvate!", + "failedSaveMappings": "Nu s-au salvat mapările", + "howItWorks": "Cum funcționează:", + "antigravityHowWorksDesc": "Antigravitația trimite solicitări către punctul final al Google. MITM le interceptează și le redirecționează către OmniRoute.", + "antigravityStep1": "1. Porniți MITM pentru a direcționa cererile prin OmniRoute.", + "antigravityStep2Prefix": "2. Adăugați", + "antigravityStep2Suffix": "în fișierul hosts ca 127.0.0.1.", + "antigravityStep3": "3. Deschideți Antigravity și cererile vor fi trimise prin proxy.", + "sudoPasswordRequiredTitle": "Parola Sudo este necesară", + "sudoPasswordHint": "Parola de administrator este necesară pentru a modifica setările de fișiere gazdă și proxy de sistem.", + "enterSudoPassword": "Introdu parola sudo", + "sudoPasswordRequiredError": "Este necesară parola Sudo.", + "cancel": "Anulează", + "confirm": "Confirmați", + "settingsApplied": "Setările aplicate cu succes!", + "failedApplySettings": "Nu s-au putut aplica setările", + "settingsReset": "Setările sunt resetate cu succes!", + "failedResetSettings": "Nu s-au resetat setările", + "backupRestored": "Backup restaurat!", + "failedRestore": "Restabilirea eșuată", + "checkingCli": "Se verifică {tool} CLI...", + "cliNotRunnable": "{tool} CLI instalat, dar nu poate fi executat", + "cliNotInstalled": "{tool} CLI nu este instalat", + "cliNotDetected": "{tool} CLI nu a fost detectat", + "cliDetectedReady": "{tool} CLI a fost detectat și gata", + "cliFoundFailedHealthcheck": "{tool} CLI a fost găsit, dar a eșuat verificarea stării de funcționare{reason}.", + "installCliPrompt": "Instalați {tool} CLI pentru a utiliza această funcție.", + "installCodexPrompt": "Instalați Codex CLI pentru a utiliza funcția de aplicare automată.", + "hide": "Ascunde", + "howToInstall": "Cum se instalează", + "installationGuide": "Ghid de instalare", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "După instalare, rulați", + "toVerify": "a verifica.", + "current": "Curent", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Resetați la valoarea implicită", + "providerModelPlaceholder": "provider/model-id", + "apply": "Aplicați", + "reset": "Resetați", + "manualConfig": "Configurare manuală", + "backups": "Backup-uri", + "configBackups": "Backup-uri de configurare", + "noBackupsYet": "Încă nu există copii de rezervă. Backup-urile sunt create automat înainte de fiecare Aplicare sau Resetare.", + "restore": "Restaurați", + "backupRestoredReloading": "Backup restaurat! Starea reîncărcării...", + "failedRestoreBackup": "Nu s-a restabilit backupul", + "applied": "Aplicat!", + "failed": "A eșuat", + "resetDone": "Resetați!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute este configurat ca furnizor compatibil cu OpenAI", + "provider": "Furnizor", + "model": "Model", + "providers": "Furnizorii", + "auth": "Auth", + "noApiKeysAvailable": "Nu există chei API disponibile", + "usingDefaultOmniroute": "Folosind implicit: sk_omniroute", + "updateConfig": "Actualizați configurația", + "applyConfig": "Aplicați Config", + "noBackupsAvailable": "Nu există copii de rezervă disponibile.", + "profileSaved": "Profilul „{name}” a fost salvat!", + "failedSaveProfile": "Nu s-a salvat profilul", + "profileActivated": "Profil activat!", + "failedActivateProfile": "Nu s-a activat profilul", + "profiles": "Profiluri", + "savedProfiles": "Profiluri salvate", + "noProfilesYet": "Niciun profil nu a fost salvat încă. Salvați configurația curentă ca profil de mai jos.", + "activate": "Activați", + "deleteProfile": "Ștergeți profilul", + "profileNamePlaceholder": "Numele profilului (de ex., Cont personal)", + "saveCurrent": "Salvați curent", + "codexAuthNotePrefix": "Codex folosește", + "codexAuthNoteMiddle": "cu", + "codexAuthNoteSuffix": "Faceți clic pe „Aplicați” pentru a configura automat.", + "claudeManualConfiguration": "Claude CLI - Configurare manuală", + "codexManualConfiguration": "Codex CLI - Configurare manuală", + "droidManualConfiguration": "Factory Droid - Configurare manuală", + "openClawManualConfiguration": "Open Claw - Configurare manuală", + "clineManualConfiguration": "Configurare manuală a liniei", + "kiloManualConfiguration": "Configurare manuală a codului Kilo", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE cu MITM", + "claude": "Codul antropic Claude CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Deschideți Asistentul Claw AI", + "cline": "CLI Cline AI Coding Assistant", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Cursor AI Code Editor", + "continue": "Continuați Asistentul AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Este necesar un cont Cursor Pro pentru a utiliza această funcție.", + "1": "Cursorul direcționează cererile prin propriul server, astfel încât punctul final local nu este acceptat. Vă rugăm să activați Cloud Endpoint în Setări." + }, + "steps": { + "1": { + "title": "Deschide Setări", + "desc": "Accesați Setări -> Modele" + }, + "2": { + "title": "Activați API-ul OpenAI", + "desc": "Activați opțiunea „Cheie API OpenAI”." + }, + "3": { + "title": "Adresa URL de bază" + }, + "4": { + "title": "Cheia API" + }, + "5": { + "title": "Adăugați model personalizat", + "desc": "Faceți clic pe „Vedeți toate modelele” -> „Adăugați modelul personalizat”" + }, + "6": { + "title": "Selectați Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Deschideți Config", + "desc": "Deschideți Continuați fișierul de configurare" + }, + "2": { + "title": "Cheia API" + }, + "3": { + "title": "Selectați Model" + }, + "4": { + "title": "Adăugați configurația modelului", + "desc": "Adăugați următoarea configurație la matricea dvs. de modele:" + } + } + } + } + }, + "combos": { + "title": "Combo-uri", + "description": "Creați combinații de modele cu rutare ponderată și suport alternativ", + "createCombo": "Creați Combo", + "editCombo": "Editează Combo", + "deleteCombo": "Ștergeți Combo", + "noModels": "Fara modele", + "noModelsYet": "Nu au fost adăugate modele încă", + "addModel": "Adăugați modelul", + "addModelToCombo": "Adăugați modelul la Combo", + "routingStrategy": "Strategia de rutare", + "maxRetries": "Reîncercări maxime", + "timeout": "Timeout (ms)", + "healthcheck": "Controlul de sănătate", + "priority": "Prioritate", + "fallback": "Revenire", + "roundRobin": "Round Robin", + "random": "Aleatoriu", + "leastLatency": "Latență minimă", + "comboName": "Nume combinat", + "comboNamePlaceholder": "combo-ul meu", + "deleteConfirm": "Ștergeți această combinație?", + "noCombosYet": "Nicio combinație încă", + "comboCreated": "Combo creat cu succes", + "comboUpdated": "Combo actualizat cu succes", + "comboDeleted": "Combo a fost șters", + "failedCreate": "Nu s-a putut crea combo", + "failedUpdate": "Nu s-a putut actualiza combo", + "errorCreating": "Eroare la crearea comboiului", + "errorUpdating": "Eroare la actualizarea comboiului", + "errorDeleting": "Eroare la ștergerea combinației", + "testFailed": "Solicitarea de testare a eșuat", + "failedToggle": "Combo nu a putut fi comutat", + "testResults": "Rezultatele testului — {name}", + "resolvedBy": "Rezolvată de:", + "more": "+{count} mai mult", + "reqs": "solicită", + "success": "succes", + "proxyConfigured": "Proxy configurat", + "copyComboName": "Copiați numele combinației", + "enableCombo": "Activați combo", + "disableCombo": "Dezactivează combo", + "testCombo": "Test combo", + "duplicate": "Duplicat", + "proxyConfig": "Configurare proxy", + "nameRequired": "Numele este obligatoriu", + "nameInvalid": "Doar litere, cifre, -, _, / și . permis", + "nameHint": "Litere, cifre, -, _, / și . permis", + "priorityDesc": "Secvenţială alternativă: încearcă mai întâi modelul 1, apoi 2 etc.", + "weightedDesc": "Distribuie traficul în procente de greutate cu rezervă", + "roundRobinDesc": "Distribuție circulară: fiecare cerere trece la următorul model în rotație", + "randomDesc": "Selectare aleatorie uniformă, apoi revenire la modelele rămase", + "leastUsedDesc": "Alege modelul cu cele mai puține solicitări, echilibrând sarcina în timp", + "costOptimizedDesc": "Rute către cel mai ieftin model mai întâi pe baza prețului", + "models": "Modele", + "autoBalance": "Auto-echilibrare", + "advancedSettings": "Setări avansate", + "retryDelay": "Întârziere reîncercare (ms)", + "concurrencyPerModel": "Concurență / Model", + "queueTimeout": "Timp de așteptare la coadă (ms)", + "advancedHint": "Lăsați gol pentru a utiliza setările implicite globale. Acestea înlocuiesc setările pentru fiecare furnizor.", + "moveUp": "Mișcă-te în sus", + "moveDown": "Deplasați-vă în jos", + "removeModel": "Eliminați", + "saving": "Se salvează...", + "weighted": "ponderat", + "leastUsed": "Cel mai puțin folosit", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Costuri", + "budget": "Buget", + "totalCost": "Costul total", + "breakdown": "Defalcarea costurilor", + "noData": "Fără date de cost", + "byModel": "După model", + "byProvider": "Prin Furnizor" + }, + "endpoint": { + "title": "API Endpoint", + "available": "Puncte finale disponibile", + "cloudProxy": "Cloud Proxy", + "disableConfirm": "Sigur doriți să dezactivați proxy-ul cloud?", + "baseUrl": "Adresa URL de bază", + "apiKeyLabel": "Cheia API", + "registeredKeys": "Chei înregistrate", + "chatCompletions": "Finalizări de chat", + "responses": "Răspunsuri", + "listModels": "Lista modele", + "usingCloudProxy": "Folosind Cloud Proxy", + "usingLocalServer": "Utilizarea serverului local", + "machineId": "ID mașină: {id}...", + "disableCloud": "Dezactivați Cloud", + "enableCloud": "Activați Cloud", + "modelsAcrossEndpoints": "{models} modele în {endpoints} puncte finale", + "chatDesc": "Chat în flux și non-stream cu toți furnizorii", + "embeddings": "Înglobări", + "embeddingsDesc": "Încorporare de text pentru conductele de căutare și RAG", + "imageGeneration": "Generare de imagini", + "imageDesc": "Generați imagini din solicitări de text", + "rerank": "Reclasează", + "rerankDesc": "Reglați documentele în funcție de relevanța pentru o interogare", + "audioTranscription": "Transcriere audio", + "audioTranscriptionDesc": "Transcrie fișiere audio în text (Șoaptă)", + "textToSpeech": "Text to Speech", + "textToSpeechDesc": "Transformați textul în vorbire cu sunet natural", + "moderations": "Moderații", + "moderationsDesc": "Moderarea conținutului și clasificarea siguranței", + "enableCloudTitle": "Activați Cloud Proxy", + "whatYouGet": "Ce vei primi", + "cloudBenefitAccess": "Accesați-vă API-ul de oriunde în lume", + "cloudBenefitShare": "Partajați cu ușurință punctul final cu echipa dvs", + "cloudBenefitPorts": "Nu este nevoie să deschideți porturi sau să configurați firewall", + "cloudBenefitEdge": "Rețea de vârf globală rapidă", + "cloudSessionNote": "Cloud vă va păstra sesiunea de autentificare timp de 1 zi. Dacă nu este utilizat, acesta va fi șters automat.", + "cloudUnstableNote": "Cloud este în prezent instabil cu Claude Code OAuth în unele cazuri.", + "cloudConnected": "Cloud Proxy conectat!", + "connectingToCloud": "Se conectează la cloud...", + "verifyingConnection": "Se verifică conexiunea...", + "connecting": "Se conectează...", + "verifying": "Se verifică...", + "connected": "Conectat!", + "disableCloudTitle": "Dezactivați Cloud Proxy", + "disableWarning": "Toate sesiunile de autentificare vor fi șterse din cloud.", + "syncingData": "Se sincronizează cele mai recente date...", + "disablingCloud": "Se dezactivează cloud...", + "syncing": "Se sincronizează...", + "disabling": "Se dezactivează...", + "cloudConnectedVerified": "Cloud Proxy conectat și verificat!", + "connectedVerificationPending": "Conectat — verificare în așteptare", + "connectedVerificationPendingWithError": "Conectat — verificare în așteptare: {error}", + "cloudDisabledSuccess": "Cloud a fost dezactivat cu succes", + "syncedSuccess": "Sincronizat cu succes", + "failedDisable": "Nu s-a putut dezactiva cloud", + "failedEnable": "Nu s-a activat cloud", + "cloudRequestTimeout": "Timeout cerere cloud", + "cloudRequestFailed": "Solicitarea cloud a eșuat", + "cloudWorkerUnreachable": "Nu s-a putut contacta lucrătorul cloud. Asigurați-vă că serviciul cloud rulează (npm run dev în /cloud).", + "connectionFailed": "Conexiunea a eșuat", + "syncFailed": "Nu s-au putut sincroniza datele din cloud", + "providerModelsTitle": "{provider} — Modele", + "noModelsForProvider": "Nu există modele disponibile pentru acest furnizor.", + "chat": "Chat", + "embedding": "Încorporarea", + "image": "Imagine", + "custom": "personalizat", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Sănătatea sistemului", + "description": "Monitorizarea în timp real a instanței dvs. OmniRoute", + "healthy": "Sănătos", + "degraded": "Degradat", + "down": "Jos", + "uptime": "Timp de funcționare", + "memory": "Memorie", + "memoryRss": "Memorie (RSS)", + "heap": "grămada", + "cpu": "CPU", + "database": "Baza de date", + "version": "Versiune", + "lastCheck": "Ultima verificare", + "providerHealth": "Sanatatea furnizorului", + "systemMetrics": "Metrici de sistem", + "tokenHealth": "Token Health", + "refreshAll": "Reîmprospătați toate", + "checkNow": "Verificați acum", + "loadingHealth": "Se încarcă datele de sănătate...", + "failedToLoad": "Nu s-au încărcat datele de sănătate: {error}", + "retry": "Reîncercați", + "allOperational": "Toate sistemele sunt operaționale", + "issuesDetected": "Au fost detectate probleme de sistem", + "updatedAt": "Actualizat {time}", + "latency": "Latența", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Total cereri", + "noDataYet": "Nu există date încă", + "promptCache": "Prompt Cache", + "entries": "Intrări", + "hitRate": "Rata de lovituri", + "hitsMisses": "Hits / Misses", + "signatureCache": "Cache pentru semnături", + "signatureDefaults": "Valori implicite", + "signatureTool": "Instrument", + "signatureFamily": "Familie", + "signatureSession": "Sesiune", + "recovering": "Recuperarea", + "noCBData": "Nu sunt disponibile date despre întrerupător. Mai întâi faceți niște cereri.", + "providerHealthStatusAria": "Starea de sănătate a furnizorului", + "issuesLabel": "Probleme detectate", + "operational": "Operațional", + "providers": "Furnizorii", + "healthyCount": "{count} sănătos", + "nodeVersion": "Nodul {version}", + "failures": "{count} eșec", + "failuresPlural": "{count} eșecuri", + "lastFailure": "Ultimul", + "rateLimitStatus": "Starea limitei ratei", + "activeLimiters": "{count} limitator activ", + "activeLimitersPlural": "{count} limitatoare active", + "queued": "În coadă", + "queuedCount": "{count} pus în coadă", + "running": "alergând", + "runningCount": "{count} rulează", + "ok": "OK", + "activeLockouts": "Blocări active", + "resetConfirm": "Resetați toate întreruptoarele la starea sănătoasă? Acest lucru va șterge toate numărul de eșecuri și va restabili toți furnizorii la starea operațională.", + "resetAllTitle": "Resetați toate întreruptoarele la starea sănătoasă", + "resetting": "Se resetează...", + "resetAll": "Resetați toate", + "until": "Până la {time}" + }, + "limits": { + "title": "Limite și cote", + "rateLimit": "Limită de rată", + "remaining": "Rămânând", + "requestsPerMinute": "Cereri/min", + "tokensPerMinute": "Jetoane/min", + "dailyLimit": "Limită zilnică" + }, + "logs": { + "title": "Bușteni", + "requestLogs": "Cereți jurnalele", + "proxyLogs": "Jurnalele proxy", + "auditLog": "Jurnal de audit", + "console": "Consolă", + "auditLogDesc": "Acțiuni administrative și evenimente de securitate", + "loading": "Se încarcă...", + "refresh": "Reîmprospătați", + "filterByAction": "Filtrați după acțiune...", + "filterByActor": "Filtrați după actor...", + "filterEntriesAria": "Filtrați intrările din jurnalul de audit", + "filterByActionTypeAria": "Filtrați după tipul de acțiune", + "filterByActorAria": "Filtrați după actor", + "refreshAuditLogAria": "Actualizează jurnalul de audit", + "tableAria": "Intrări din jurnalul de audit", + "failedFetchAuditLog": "Nu s-a putut prelua jurnalul de audit", + "showing": "Se afișează {count} intrări (offset {offset})", + "search": "Caută", + "timestamp": "Marca temporală", + "action": "Acțiune", + "actor": "actor", + "target": "țintă", + "details": "Detalii", + "ipAddress": "Adresa IP", + "notAvailable": "—", + "noEntries": "Nu au fost găsite intrări în jurnalul de audit", + "previous": "Anterior", + "next": "În continuare" + }, + "onboarding": { + "welcome": "Bun venit", + "security": "Securitate", + "test": "Testează", + "ready": "Gata!", + "setPassword": "Setați parola", + "addProvider": "Adăugați primul dvs. furnizor", + "getStarted": "Începeți", + "skip": "Sari peste", + "skipWizard": "Skip wizard complet", + "skipPassword": "Omiteți configurarea parolei", + "skipAndContinue": "Sariți și continuați", + "passwordLabel": "Parolă", + "confirmPassword": "Confirmați parola", + "enterPassword": "Introduceți parola", + "confirmPasswordPlaceholder": "Confirmați parola", + "passwordsMismatch": "Parolele nu se potrivesc", + "setupComplete": "Configurare finalizată!", + "goToDashboard": "Accesați Tabloul de bord →", + "welcomeDesc": "OmniRoute este proxy-ul local AI API. Acesta direcționează cererile către mai mulți furnizori de AI cu echilibrare a sarcinii, failover și urmărire a utilizării.", + "multiProvider": "Multi-furnizor", + "usageTracking": "Urmărirea utilizării", + "apiKeyMgmt": "Gestiunea cheii API", + "securityDesc": "Setați o parolă pentru a vă proteja tabloul de bord sau omiteți pentru moment.", + "providerDesc": "Conectați-vă primul furnizor de AI. Puteți adăuga mai multe mai târziu.", + "apiKeyRequired": "Cheie API (obligatorie)", + "customUrlOptional": "Adresă URL personalizată (opțional)", + "testDesc": "Să verificăm că conexiunea la furnizor funcționează.", + "runTest": "Rulați Testul de conexiune", + "testingConnection": "Se testează conexiunea...", + "connectionSuccessful": "Conexiune reușită! Furnizorul dvs. este pregătit.", + "noProviderFound": "Nu a fost găsit niciun furnizor. Puteți adăuga unul din tabloul de bord mai târziu.", + "testFailed": "Testul a eșuat, dar îl puteți configura mai târziu.", + "couldNotTest": "Nu am putut testa acum. Puteți testa din tabloul de bord.", + "doneDesc": "Sunteți gata! Instanța dvs. OmniRoute este configurată și pregătită pentru a trimite solicitări AI.", + "yourEndpoint": "Punctul final:", + "continue": "Continuă", + "retry": "Reîncercați", + "failedSetPassword": "Nu s-a putut seta parola. Încearcă din nou.", + "failedAddProvider": "Nu s-a putut adăuga furnizorul. Încearcă din nou.", + "connectionError": "Eroare de conectare. Vă rugăm să încercați din nou.", + "provider": "Furnizor" + }, + "providers": { + "title": "Furnizorii", + "addProvider": "Adăugați furnizorul", + "editProvider": "Editați furnizorul", + "deleteProvider": "Ștergeți furnizorul", + "noProviders": "Nu au fost configurați furnizori", + "modelAvailability": "Disponibilitatea modelului", + "accounts": "Conturi", + "newAccount": "Cont nou", + "deleteConfirm": "Sigur doriți să ștergeți acest furnizor?", + "testing": "Testare...", + "testConnection": "Testează conexiunea", + "testSuccess": "Conexiune reușită", + "testFailed": "Conexiunea a eșuat", + "available": "Disponibil", + "cooldown": "Cooldown", + "unavailable": "Indisponibil", + "unknown": "Necunoscut", + "oauthLabel": "OAuth", + "compatibleLabel": "Compatibil", + "chat": "Chat", + "responses": "Răspunsuri", + "messages": "Mesaje", + "oauthProviders": "Furnizori OAuth", + "freeProviders": "Furnizori gratuiti", + "apiKeyProviders": "Furnizori de chei API", + "compatibleProviders": "Furnizori compatibili cu cheile API", + "testAll": "Testează toate", + "testAllOAuth": "Testați toate conexiunile OAuth", + "testAllFree": "Testați toate conexiunile gratuite", + "testAllApiKey": "Testați toate conexiunile API Key", + "testAllCompatible": "Testați toate conexiunile compatibile", + "connected": "{count} Conectat", + "errorCount": "{count} Eroare ({code})", + "errorCountNoCode": "{count} Eroare", + "noConnections": "Fără conexiuni", + "disabled": "Dezactivat", + "enableProvider": "Activați furnizorul", + "disableProvider": "Dezactivați furnizorul", + "testResults": "Rezultatele testelor", + "noCompatibleYet": "Nu a fost adăugat încă niciun furnizor compatibil", + "compatibleHint": "Utilizați butoanele de mai sus pentru a adăuga puncte finale compatibile OpenAI sau Anthropic", + "addOpenAICompatible": "Adăugați compatibil OpenAI", + "addAnthropicCompatible": "Adăugați compatibil antropic", + "addNewProvider": "Adăugați un furnizor nou", + "backToProviders": "Înapoi la Furnizori", + "configureNewProvider": "Configurați un nou furnizor de inteligență artificială pe care să îl utilizați cu aplicațiile dvs.", + "providerLabel": "Furnizor", + "selectProvider": "Selectați un furnizor", + "selectedProvider": "Furnizorul selectat", + "authMethod": "Metoda de autentificare", + "apiKeyLabel": "Cheia API", + "apiKeyRequired": "Cheia API este necesară", + "selectProviderRequired": "Vă rugăm să selectați un furnizor", + "enterApiKey": "Introduceți cheia dvs. API", + "apiKeySecure": "Cheia dvs. API va fi criptată și stocată în siguranță.", + "oauth2Connect": "Conectați-vă cu OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Conectați-vă contul utilizând autentificarea OAuth2.", + "displayName": "Nume afișat", + "displayNamePlaceholder": "de exemplu, API de producție, mediu de dezvoltare", + "displayNameHint": "Opțional. Un nume prietenos pentru a identifica această configurație.", + "active": "Activ", + "activeDescription": "Activați acest furnizor pentru utilizare în aplicațiile dvs", + "cancel": "Anulează", + "createProvider": "Creați furnizor", + "failedCreate": "Nu s-a putut crea furnizorul", + "errorOccurred": "A apărut o eroare. Vă rugăm să încercați din nou.", + "modelStatus": "Stare model", + "allModelsOperational": "Toate modelele sunt operaționale", + "modelsWithIssues": "{count} model(e) cu probleme", + "allModelsNormal": "Toate modelele răspund normal.", + "cooldownCleared": "Timpul de răcire a fost eliminat pentru {model}", + "failedClearCooldown": "Nu s-a șters timpul de răcire", + "loadingAvailability": "Se încarcă disponibilitatea modelului...", + "clearCooldown": "Clar", + "clearing": "Se șterge...", + "until": "Până la {time}", + "providerTestFailed": "Testul furnizorului a eșuat", + "modeTest": "{mode} Test", + "passedCount": "{count} a trecut", + "failedCount": "{count} a eșuat", + "testedCount": "{count} testat", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "EROARE", + "noActiveConnectionsInGroup": "Nu s-au găsit conexiuni active pentru acest grup.", + "allTestsPassed": "Toate testele {total} au trecut", + "testSummary": "{passed}/{total} a trecut, {failed} a eșuat", + "nameLabel": "Nume", + "prefixLabel": "Prefix", + "baseUrlLabel": "Adresa URL de bază", + "apiTypeLabel": "Tip API", + "prefixHint": "Obligatoriu. Prefix unic pentru numele modelelor.", + "nameHint": "Obligatoriu. O etichetă prietenoasă pentru acest nod.", + "baseUrlHint": "Obligatoriu.  Adresa URL de bază a API-ului furnizorului.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Validați conexiunea", + "validating": "Se validează...", + "connectionValid": "Conexiunea este valabilă!", + "connectionFailed": "Conexiunea a eșuat. Verificați adresa URL și cheia.", + "testKeyLabel": "Testați cheia API", + "testKeyPlaceholder": "sk-... (doar pentru validare)", + "providerNotFound": "Furnizorul nu a fost găsit", + "deleteConnectionConfirm": "Ștergeți această conexiune?", + "failedSetAlias": "Nu s-a putut seta aliasul", + "failedSaveConnection": "Nu s-a putut salva conexiunea", + "failedSaveConnectionRetry": "Nu s-a putut salva conexiunea. Vă rugăm să încercați din nou.", + "failedRetestConnection": "Nu s-a retestat conexiunea", + "deleteCompatibleNodeConfirm": "Ștergeți acest nod {type} compatibil?", + "anthropicCompatibleDetails": "Detalii compatibile antropice", + "openaiCompatibleDetails": "Detalii compatibile cu OpenAI", + "messagesApi": "Messages API", + "responsesApi": "API de răspunsuri", + "chatCompletions": "Finalizări de chat", + "importingModels": "Se importă...", + "importFromModels": "Import din /modele", + "addConnectionToImport": "Adăugați o conexiune pentru a activa importul.", + "noModelsConfigured": "Nu au fost configurate modele", + "connectionCount": "{count} conexiuni", + "fetchingModels": "Se preiau modelele disponibile...", + "failedFetchModels": "Nu s-au putut prelua modelele", + "noModelsFound": "Nu s-au găsit modele", + "importFailed": "Importul nu a reușit", + "noNewModelsAdded": "Nu au fost adăugate modele noi.", + "adding": "Se adaugă...", + "importingModelsTitle": "Importul modelelor", + "copyModel": "Copiați modelul", + "removeModel": "Eliminați modelul", + "rateLimitProtected": "Protejat", + "rateLimitUnprotected": "Neprotejat", + "enableRateLimitProtection": "Faceți clic pentru a activa protecția limitei ratei", + "disableRateLimitProtection": "Faceți clic pentru a dezactiva protecția limitei ratei", + "productionKey": "Cheia de producție", + "enterNewApiKey": "Introduceți o nouă cheie API", + "optional": "Opțional", + "anthropicCompatibleName": "Compatibil antropic", + "openaiCompatibleName": "Compatibil cu OpenAI", + "failedImportModels": "Nu s-au putut importa modele", + "noModelsReturnedFromEndpoint": "Niciun model nu a fost returnat de la punctul final /models.", + "importingModelsProgress": "Se importă {current} din {total} modele...", + "foundModelsStartingImport": "S-au găsit {count} modele. Se începe importul...", + "importingModelById": "Se importă {modelId}...", + "importSuccessCount": "Importat cu succes {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Nu au fost adăugate modele noi (toate există deja).", + "importDoneCount": "✓ Gata! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "A apărut o eroare neașteptată", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "mesaje", + "responsesPath": "răspunsuri", + "chatCompletionsPath": "chat/completari", + "add": "Adăugați", + "edit": "Editați", + "delete": "Ștergeți", + "anthropic": "antropică", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Este permisă o singură conexiune pentru fiecare nod compatibil. Adăugați un alt nod dacă aveți nevoie de mai multe conexiuni.", + "connections": "Conexiuni", + "providerProxyTitleConfigured": "Proxy furnizor: {host}", + "configured": "configurat", + "providerProxyConfigureHint": "Configurați proxy pentru toate conexiunile acestui furnizor", + "providerProxy": "Proxy de furnizor", + "noConnectionsYet": "Încă nu există conexiuni", + "addFirstConnectionHint": "Adăugați prima conexiune pentru a începe", + "addConnection": "Adăugați o conexiune", + "availableModels": "Modele disponibile", + "pageAutoRefresh": "Pagina se va reîmprospăta automat...", + "statusDisabled": "dezactivat", + "statusConnected": "conectat", + "statusRuntimeIssue": "problemă de rulare", + "statusAuthFailed": "auth a eșuat", + "statusRateLimited": "rata limitată", + "statusNetworkIssue": "problema rețelei", + "statusTestUnsupported": "test neacceptat", + "statusUnavailable": "indisponibil", + "statusFailed": "a eșuat", + "statusError": "eroare", + "oauthAccount": "Cont OAuth", + "errorTypeRuntime": "Timp de rulare local", + "errorTypeUpstreamAuth": "Autentificare în amonte", + "errorTypeMissingCredential": "Lipsește acreditarea", + "errorTypeRefreshFailed": "Reîmprospătarea a eșuat", + "errorTypeTokenExpired": "Tokenul a expirat", + "errorTypeRateLimited": "Tarif limitat", + "errorTypeUpstreamUnavailable": "În amonte indisponibil", + "errorTypeNetworkError": "Eroare de rețea", + "errorTypeTestUnsupported": "Testul nu este acceptat", + "errorTypeUpstreamError": "Eroare în amonte", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Furnizor", + "proxySourceKey": "cheie", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Retestați autentificarea", + "retest": "Retestați", + "disableConnection": "Dezactivați conexiunea", + "enableConnection": "Activați conexiunea", + "reauthenticateConnection": "Re-autentificați această conexiune", + "proxyConfig": "Configurare proxy", + "aliasExistsAlert": "Aliasul „{alias}” există deja. Vă rugăm să utilizați un alt model sau să editați alias-ul existent.", + "openRouterAnyModelHint": "OpenRouter acceptă orice model. Adăugați modele și creați aliasuri pentru acces rapid.", + "modelIdFromOpenRouter": "ID model (de la OpenRouter)", + "openRouterModelPlaceholder": "antropic/claude-3-opus", + "customModels": "Modele personalizate", + "customModelsHint": "Adăugați ID-uri de model care nu sunt în lista implicită. Acestea vor fi disponibile pentru rutare.", + "modelId": "ID model", + "customModelPlaceholder": "de ex. gpt-4.5-turbo", + "loading": "Se încarcă...", + "removeCustomModel": "Eliminați modelul personalizat", + "noCustomModels": "Nu s-au adăugat încă modele personalizate.", + "allSuggestedAliasesExist": "Toate pseudonimele sugerate există deja. Vă rugăm să alegeți un alt model sau să eliminați aliasurile aflate în conflict.", + "failedSaveCustomModel": "Nu s-a salvat modelul personalizat", + "modelAddedSuccess": "Modelul {modelId} a fost adăugat cu succes", + "failedAddModelTryAgain": "Nu s-a putut adăuga modelul. Vă rugăm să încercați din nou.", + "failedSaveImportedModel": "Nu s-a salvat modelul importat în baza de date personalizată", + "failedImportModelsTryAgain": "Nu s-au putut importa modele. Vă rugăm să încercați din nou.", + "failedRemoveModelFromDatabase": "Nu s-a putut elimina modelul din baza de date", + "modelRemovedSuccess": "Modelul a fost eliminat cu succes", + "failedDeleteModelTryAgain": "Nu s-a șters modelul. Vă rugăm să încercați din nou.", + "compatibleModelsDescription": "Adăugați manual modele compatibile cu {type} sau importați-le din punctul final /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Validarea cheii API nu a reușit. Vă rugăm să vă verificați cheia și să încercați din nou.", + "addProviderApiKeyTitle": "Adăugați {provider} cheia API", + "checking": "Se verifică...", + "check": "Verificați", + "valid": "Valabil", + "invalid": "Invalid", + "creating": "Se creează...", + "validationChecksAnthropicCompatible": "Validarea verifică {provider} prin verificarea cheii API.", + "validationChecksOpenAiCompatible": "Verificări de validare {provider} prin /models pe adresa URL de bază.", + "priorityLabel": "Prioritate", + "saving": "Se salvează...", + "save": "Salvați", + "editConnection": "Editați conexiunea", + "accountName": "Numele contului", + "email": "E-mail", + "healthCheckMinutes": "Verificare de sănătate (min)", + "healthCheckHint": "Interval proactiv de reîmprospătare a simbolului. 0 = dezactivat.", + "failedTestConnection": "Nu s-a testat conexiunea", + "failed": "A eșuat", + "leaveBlankKeepCurrentApiKey": "Lăsați necompletat pentru a păstra cheia API curentă.", + "editCompatibleTitle": "Editați {type} Compatibil", + "compatibleBaseUrlHint": "Utilizați adresa URL de bază (se termină în /v1) pentru API-ul dvs. compatibil {type}.", + "apiKeyForCheck": "Cheie API (pentru verificare)", + "compatibleProdPlaceholder": "{type} Compatibil (Prod)" + }, + "settings": { + "title": "Setări", + "general": "general", + "security": "Securitate", + "appearance": "Aspectul", + "routing": "Dirijare", + "cache": "Cache", + "resilience": "Reziliență", + "systemPrompt": "Prompt de sistem", + "thinkingBudget": "Gândirea bugetului", + "proxy": "Proxy", + "pricing": "Prețuri", + "storage": "Depozitare", + "policies": "Politici", + "ipFilter": "Filtru IP", + "comboDefaults": "Setări implicite combinate", + "fallbackChains": "Lanțuri de rezervă", + "changePassword": "Schimbați parola", + "enablePassword": "Activați parola", + "darkMode": "Modul întunecat", + "lightMode": "Modul de lumină", + "systemTheme": "Tema sistemului", + "enableCache": "Activați memoria cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Dimensiunea maximă a memoriei cache", + "clearCache": "Goliți memoria cache", + "cacheHits": "Hits în cache", + "cacheMisses": "Cache Misses", + "hitRate": "Rata de lovituri", + "cacheEntries": "Intrări în cache", + "circuitBreaker": "Întrerupător", + "retryPolicy": "Reîncercați Politica", + "maxRetries": "Reîncercări maxime", + "retryDelay": "Reîncercați Întârziere", + "timeoutMs": "Timeout (ms)", + "enableSystemPrompt": "Activați promptul de sistem", + "systemPromptText": "Text prompt de sistem", + "enableThinking": "Activați gândirea", + "maxThinkingTokens": "Max Thinking Tokens", + "enableProxy": "Activați proxy", + "proxyUrl": "Adresa URL proxy", + "pricingRates": "Formatul tarifelor de preț", + "currentPricing": "Prezentare generală a prețurilor actuale", + "loadingPricing": "Se încarcă datele de preț...", + "noPricing": "Nu sunt disponibile date de preț", + "input": "Intrare", + "output": "Ieșire", + "cached": "În cache", + "reasoning": "Raționamentul", + "cacheCreation": "Creare cache", + "customPricing": "Prețuri personalizate", + "databaseSize": "Dimensiunea bazei de date", + "backupDb": "Backup baze de date", + "restoreDb": "Restaurați baza de date", + "exportData": "Exportați date", + "importData": "Importați date", + "clearData": "Ștergeți toate datele", + "clearDataConfirm": "Aceasta va șterge definitiv toate datele. esti sigur?", + "enableRequestLogs": "Activați jurnalele de solicitări", + "logRetention": "Păstrarea jurnalelor", + "ipWhitelist": "Lista albă IP", + "ipBlacklist": "Lista neagră de IP", + "addIP": "Adăugați IP", + "savedSuccessfully": "Setările au fost salvate cu succes", + "ai": "AI", + "advanced": "Avansat", + "localMode": "Mod local — Toate datele stocate pe aparat", + "settingsSectionsAria": "Secțiunile de setări", + "switchThemes": "Comutați între temele deschise și cele întunecate", + "themeSelectionAria": "Selectarea temei", + "themeLight": "Lumină", + "themeDark": "Întuneric", + "themeSystem": "Sistem", + "hideHealthLogs": "Ascundeți jurnalele de verificare a stării de sănătate", + "hideHealthLogsDesc": "Când este ACTIVAT, suprimați mesajele [HealthCheck] din consola serverului", + "promptCache": "Prompt Cache", + "flushCache": "Spălați memoria cache", + "flushing": "Spălare…", + "size": "Dimensiune", + "hits": "Hituri", + "evictions": "Evacuări", + "loadingCacheStats": "Se încarcă statisticile cache...", + "globalProxy": "Proxy global", + "globalProxyDesc": "Configurați un proxy global de ieșire pentru toate apelurile API. Furnizorii individuali, combo-urile și cheile pot suprascrie acest lucru.", + "noGlobalProxy": "Nu a fost configurat niciun proxy global", + "globalLabel": "Global", + "configure": "Configurați", + "globalSystemPrompt": "Global System Prompt", + "systemPromptDesc": "Injectat în toate solicitările la nivel de proxy", + "saved": "Salvat", + "systemPromptPlaceholder": "Introduceți promptul de sistem pentru a injecta în toate solicitările...", + "systemPromptHint": "Această solicitare este adăugată mesajului de sistem al fiecărei solicitări. Utilizați pentru instrucțiuni globale, ghiduri de siguranță sau reguli de formatare a răspunsurilor.", + "chars": "{count} caractere", + "thinkingBudgetTitle": "Gândirea bugetului", + "thinkingBudgetDesc": "Controlați utilizarea simbolurilor de raționament AI pentru toate solicitările", + "passthrough": "trecere", + "passthroughDesc": "Fără modificări — clientul controlează bugetul de gândire", + "auto": "Auto", + "autoDesc": "Eliminați toate configurațiile de gândire - lăsați furnizorul să decidă", + "custom": "Personalizat", + "customDesc": "Setați un buget fix pentru token pentru toate solicitările", + "adaptive": "Adaptiv", + "adaptiveDesc": "Scalați bugetul în funcție de complexitatea cererii", + "effortNone": "Niciunul (0 jetoane)", + "effortLow": "Scăzut (1K jetoane)", + "effortMedium": "Mediu (10.000 jetoane)", + "effortHigh": "Ridicat (128.000 jetoane)", + "tokenBudget": "Buget simbol", + "tokens": "jetoane", + "baseEffortLevel": "Nivelul de efort de bază", + "adaptiveHint": "Modul adaptiv crește de la acest nivel de bază în funcție de numărul de mesaje, utilizarea instrumentului și lungimea promptului.", + "requireLogin": "Necesită autentificare", + "requireLoginDesc": "Când este pornit, tabloul de bord necesită o parolă. Când este OFF, accesați fără autentificare.", + "currentPassword": "Parola curentă", + "enterCurrentPassword": "Introduceți parola curentă", + "newPassword": "Parolă nouă", + "enterNewPassword": "Introduceți o nouă parolă", + "confirmPassword": "Confirmați parola nouă", + "confirmPasswordPlaceholder": "Confirmați noua parolă", + "passwordsNoMatch": "Parolele nu se potrivesc", + "passwordUpdated": "Parola a fost actualizată cu succes", + "failedUpdatePassword": "Nu s-a putut actualiza parola", + "errorOccurred": "A apărut o eroare", + "updatePassword": "Actualizați parola", + "setPassword": "Setați parola", + "apiEndpointProtection": "API Endpoint Protection", + "requireAuthModels": "Necesită cheia API pentru /models", + "requireAuthModelsDesc": "Când este ACTIVAT, punctul final /v1/models returnează 404 pentru solicitările neautentificate. Previne descoperirea modelului de către utilizatori neautorizați.", + "blockedProviders": "Furnizori blocați", + "blockedProvidersDesc": "Ascundeți anumiți furnizori din răspunsul /v1/models. Furnizorii blocați nu vor apărea în listele de modele.", + "providersBlocked": "{count} furnizor(i) blocat(i) de la /modele", + "blockProviderTitle": "Blocați {provider}", + "unblockProviderTitle": "Deblocați {provider}", + "routingStrategy": "Strategia de rutare", + "fillFirst": "Umpleți mai întâi", + "fillFirstDesc": "Utilizați conturile în ordine de prioritate", + "roundRobin": "Round Robin", + "roundRobinDesc": "Parcurgeți toate conturile", + "p2c": "P2C", + "p2cDesc": "Alegeți 2 la întâmplare, folosiți-l pe cel mai sănătos", + "random": "Aleatoriu", + "randomDesc": "Cont aleatoriu pentru fiecare cerere", + "leastUsed": "Cel mai puțin folosit", + "leastUsedDesc": "Alegeți contul cel mai puțin utilizat recent", + "costOpt": "Cost Opt", + "costOptDesc": "Prefer cel mai ieftin cont disponibil", + "stickyLimit": "Limită lipicioasă", + "stickyLimitDesc": "Apeluri pe cont înainte de a comuta", + "modelAliases": "Aliasuri de model", + "modelAliasesDesc": "Modele wildcard pentru a remapa numele modelelor • Utilizați * și ?", + "aliasPatternPlaceholder": "claude-sonet-*", + "aliasTargetPlaceholder": "claude-sonet-4-20250514", + "pattern": "Model", + "targetModel": "Model țintă", + "add": "+ Adăugați", + "session": "Sesiune", + "sessionDetailsAria": "Detalii sesiune", + "status": "Stare", + "authenticated": "Autentificat", + "guest": "Oaspete", + "loginTime": "Ora de conectare", + "sessionAge": "Vârsta sesiunii", + "browser": "Browser", + "clearLocalData": "Ștergeți datele locale", + "logout": "Deconectare", + "clearLocalDataConfirm": "Ștergeți toate datele locale? Aceasta vă va reseta preferințele.", + "unknown": "Necunoscut", + "systemActor": "sistem", + "ipAccessControl": "Control acces IP", + "ipAccessControlDesc": "Blocați sau permiteți anumite adrese IP", + "ipModeDisabled": "Dezactivat", + "ipModeBlacklist": "Lista neagră", + "ipModeWhitelist": "Lista albă", + "ipModeWhitelistPriority": "Prioritate WL", + "addIpAddress": "Adăugați adresa IP", + "ipAddressPlaceholder": "192.168.1.0/24 sau 10.0.*.*", + "block": "+ Blocare", + "allow": "+ Permite", + "blocked": "Blocat ({count})", + "allowed": "Permis ({count})", + "temporaryBans": "Interdicții temporare ({count})", + "minLeft": "Au mai rămas {min}m", + "auditLog": "Jurnal de audit", + "searchAuditLogs": "Căutați jurnalele de audit...", + "failedLoadAuditLog": "Nu s-a încărcat jurnalul de audit", + "noAuditEvents": "Nu au fost găsite evenimente de audit", + "action": "Acțiune", + "actor": "actor", + "details": "Detalii", + "time": "timpul", + "fallbackChainsTitle": "Lanțuri de rezervă", + "fallbackChainsDesc": "Definiți ordinea de rezervă a furnizorului pentru fiecare model", + "addChain": "+ Adăugați lanț", + "modelName": "Numele modelului", + "modelNamePlaceholder": "claude-sonet-4-20250514", + "providersCommaSeparated": "Furnizori (separați prin virgulă, în ordine de prioritate)", + "providersCommaSeparatedPlaceholder": "antropic, openai, gemeni", + "createChain": "Creați lanț", + "noFallbackChains": "Fără lanțuri de rezervă", + "noFallbackChainsDesc": "Creați un lanț pentru a defini ordinea de rezervă a furnizorului pentru un model.", + "loadingFallbackChains": "Se încarcă lanțurile alternative...", + "deleteChainConfirm": "Ștergeți lanțul alternativ pentru „{model}”?", + "chainCreated": "Lanț creat pentru {model}", + "chainDeleted": "Lanțul a fost șters pentru {model}", + "failedCreateChain": "Nu s-a putut crea lanțul", + "failedDeleteChain": "Lanțul nu a putut fi șters", + "deleteChain": "Ștergeți lanțul", + "fillModelAndProviders": "Vă rugăm să completați numele modelului și furnizorii", + "addAtLeastOneProvider": "Adăugați cel puțin un furnizor", + "comboDefaultsTitle": "Setări implicite combinate", + "globalComboConfig": "Configurație globală combo", + "defaultStrategy": "Strategia implicită", + "defaultStrategyDesc": "Aplicat combo-urilor noi fără strategie explicită", + "comboStrategyAria": "Strategie combinată", + "priority": "Prioritate", + "weighted": "ponderat", + "maxRetriesLabel": "Reîncercări maxime", + "retryDelayLabel": "Întârziere reîncercare (ms)", + "timeoutLabel": "Timeout (ms)", + "healthCheck": "Verificare de sănătate", + "healthCheckDesc": "Verificați prealabil disponibilitatea furnizorului", + "trackMetrics": "Urmăriți valorile", + "trackMetricsDesc": "Înregistrați valorile pentru fiecare cerere combinată", + "providerOverrides": "Suprascrierea furnizorului", + "providerOverridesDesc": "Suprascrierea timpului de expirare și reîncercări pentru fiecare furnizor. Setările furnizorului înlocuiesc valorile prestabilite globale.", + "providerMaxRetriesAria": "{provider} max. reîncercări", + "providerTimeoutAria": "{provider} timeout ms", + "removeProviderOverrideAria": "Eliminați anularea {provider}", + "newProviderNamePlaceholder": "de ex. google, deschide...", + "newProviderNameAria": "Numele furnizorului nou", + "retries": "reîncercări", + "ms": "ms", + "saveComboDefaults": "Salvați setările implicite de combo", + "maxNestingDepth": "Adâncimea maximă de cuibărire", + "concurrencyPerModel": "Concurență / Model", + "queueTimeout": "Timp de așteptare la coadă (ms)", + "providerProfiles": "Profiluri de furnizor", + "providerProfilesDesc": "Setări separate de rezistență pentru furnizorii OAuth (bazat pe sesiune) și API Key (contorizat). Furnizorii OAuth au praguri mai stricte din cauza limitelor mai mici ale ratei.", + "oauthProviders": "Furnizori OAuth", + "apiKeyProviders": "Furnizori de chei API", + "transientCooldown": "Răcire tranzitorie", + "rateLimitCooldown": "Rate de răcire limită", + "maxBackoffLevel": "Nivel maxim de retragere", + "cbThreshold": "Pragul CB", + "cbResetTime": "Timp de resetare CB", + "rateLimiting": "Limitarea ratei", + "rateLimitingDesc": "Furnizorii de chei API sunt limitate automat la rate cu valori implicite sigure. Limitele sunt învățate din anteturile de răspuns și se adaptează în timp.", + "defaultSafetyNet": "Rețea de siguranță implicită", + "rpm": "RPM", + "minGap": "Gap min", + "maxConcurrent": "Concurență maximă", + "activeLimiters": "Limitatoare active", + "noActiveLimiters": "Încă nu există limitatoare de rată active.", + "reservoir": "Rezervor", + "running": "Alergarea", + "queued": "În coadă", + "circuitBreakers": "Întreruptoare", + "breakerStateClosed": "Închis", + "breakerStateOpen": "Deschide", + "breakerStateHalfOpen": "Pe jumătate deschis", + "tripped": "{count} sa declanșat", + "healthy": "{count} sănătos", + "resetAll": "Resetați toate", + "noCircuitBreakers": "Niciun întrerupător de circuit activ încă. Acestea sunt create automat atunci când cererile trec prin conducta combinată.", + "failures": "{count} eșec(e)", + "policiesLocked": "Politici și identificatori blocați", + "allOperational": "Toate sistemele sunt operaționale — fără blocaje sau întrerupătoare declanșate", + "loadingPolicies": "Se încarcă politicile...", + "lockedIdentifiers": "Identificatori blocați", + "unlockedIdentifier": "Deblocat: {identifier}", + "sinceDate": "din {date}", + "forceUnlock": "Deblocare forțată", + "unlocking": "Se deblochează...", + "failedUnlock": "Deblocarea eșuată", + "failedLoadWithStatus": "Nu s-a încărcat: {status}", + "failedLoadResilience": "Nu s-a încărcat starea de rezistență", + "saveFailed": "Salvarea nu a reușit", + "resetFailed": "Resetarea a eșuat", + "loadingResilience": "Se încarcă starea rezistenței...", + "retry": "Reîncercați", + "systemStorage": "Sistem și stocare", + "allDataLocal": "Toate datele stocate local pe aparatul dvs", + "databasePath": "Calea bazei de date", + "exportDatabase": "Exportați baza de date", + "exportAll": "Exportați toate (.tar.gz)", + "importDatabase": "Importă baza de date", + "confirmDbImport": "Confirmați importul bazei de date", + "confirmDbImportDesc": "Aceasta va înlocui toate datele curente cu conținutul din {file}. O copie de rezervă va fi creată automat înainte de import.", + "yesImport": "Da, import", + "lastBackup": "Ultima copie de rezervă", + "noBackupYet": "Nicio rezervă încă", + "backupNow": "Faceți backup acum", + "backupRestore": "Backup și restaurare", + "viewBackups": "Vizualizați copii de rezervă", + "hide": "Ascunde", + "backupRetentionDesc": "Instantaneele bazei de date sunt create automat înainte de restaurare și la fiecare 15 minute când datele se modifică. Reținere: 24 de ore din 24 + 30 de backup-uri zilnice cu rotație inteligentă.", + "loadingBackups": "Se încarcă copii de rezervă...", + "noBackupsYet": "Nu există copii de rezervă disponibile încă. Backup-urile vor fi create automat când datele se schimbă.", + "backupsAvailable": "{count} backup(uri) disponibil(e).", + "refresh": "Reîmprospătați", + "confirm": "Confirm?", + "yes": "Da", + "no": "Nu", + "restore": "Restaurați", + "invalidFileType": "Tip de fișier nevalid. Sunt acceptate numai fișierele .sqlite.", + "exportFailed": "Exportul nu a reușit", + "exportFailedWithError": "Export eșuat: {error}", + "fullExportFailedWithError": "Exportul complet eșuat: {error}", + "backupCreated": "Backup creat: {file}", + "restoreSuccess": "Restaurat! {connections} conexiuni, {nodes} noduri, {combos} combo, {apiKeys} chei API.", + "importSuccess": "Baza de date importată! {connections} conexiuni, {nodes} noduri, {combos} combo, {apiKeys} chei API.", + "justNow": "tocmai acum", + "minutesAgo": "{count}m în urmă", + "hoursAgo": "acum {count}h", + "daysAgo": "acum {count}d", + "backupReasonManual": "manual", + "backupReasonPreRestore": "pre-restaurare", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Nicio modificare de la ultima copie de rezervă", + "backupFailed": "Copierea de rezervă a eșuat", + "restoreFailed": "Restaurarea a eșuat", + "importFailed": "Importul nu a reușit", + "errorDuringRestore": "A apărut o eroare în timpul restaurării", + "errorDuringImport": "A apărut o eroare în timpul importului", + "modelPricing": "Prețul modelului", + "modelPricingDesc": "Configurați tarifele de cost pe model • Toate tarifele în jetoane $/1M", + "providers": "Furnizorii", + "registry": "Registrul", + "priced": "Preț", + "searchProvidersModels": "Căutați furnizori sau modele...", + "showAll": "Arată toate", + "noProvidersMatch": "Niciun furnizor nu corespunde căutării dvs.", + "howPricingWorks": "Cum funcționează prețurile", + "cacheWrite": "Scriere în cache", + "unsaved": "nesalvat", + "resetDefaults": "Resetează setările implicite", + "saveProvider": "Salvați furnizorul", + "saving": "Se salvează...", + "model": "Model", + "models": "modele", + "moreProviders": "{count} mai mulți furnizori", + "withPricing": "cu prețul configurat", + "policiesCircuitBreakers": "Politici și întrerupătoare de circuit", + "activeIssuesDetected": "Au fost detectate probleme active", + "off": "Oprit", + "resetPricingConfirm": "Resetați toate prețurile pentru {provider} la valorile prestabilite?", + "pricingDescInput": "Intrare: jetoane trimise modelului", + "pricingDescOutput": "Ieșire: jetoane generate", + "pricingDescCached": "În cache: intrare reutilizată (~50% din rata de intrare)", + "pricingDescReasoning": "Raționament: jetoane de gândire (se întoarce la Ieșire)", + "pricingDescCacheWrite": "Scriere în cache: crearea de intrări în cache (revine la Intrare)", + "pricingDescFormula": "Cost = (input × input_rate) + (output × output_rate) + (cached × cached_rate) per milion de jetoane.", + "pricingSettingsTitle": "Setări de preț", + "totalModels": "Total Modele", + "active": "Activ", + "costCalculation": "Calculul costurilor", + "costCalculationDesc": "Costurile sunt calculate pe baza utilizării simbolurilor și a tarifelor de preț configurate pentru fiecare model.", + "pricingFormat": "Format de preț", + "pricingFormatDesc": "Toate tarifele sunt în jetoane/1 milion USD (dolari per milion de jetoane).", + "tokenTypes": "Tipuri de jetoane", + "inputTokenDesc": "Jetoane standard de prompt", + "outputTokenDesc": "Jetoane de completare/răspuns", + "cachedTokenDesc": "Jetoane de intrare stocate în cache (de obicei 50% din rata de intrare)", + "reasoningTokenDesc": "Indicative speciale de raționament/gândire (retracție la rata de ieșire)", + "cacheCreationTokenDesc": "Jetoane utilizate pentru a crea intrări în cache (retur la rata de intrare)", + "customPricingNote": "Puteți suprascrie prețurile implicite pentru anumite modele. Anulările personalizate au prioritate față de prețurile detectate automat.", + "editPricing": "Editați prețul", + "viewFullDetails": "Vezi detalii complete" + }, + "translator": { + "title": "Traducător", + "metaTitle": "Translator Playground | OmniRoute", + "metaDescription": "Depanați, testați și vizualizați traducerile în format API între furnizori", + "playgroundTitle": "Loc de joacă pentru traducător", + "playground": "Loc de joacă", + "realtime": "Activitate de traducere în timp real", + "chatTester": "Tester de chat", + "testBench": "Banc de testare", + "liveMonitor": "Monitor live", + "modeDescriptionPlayground": "Lipiți orice corp de solicitare API și vedeți cum îl traduce OmniRoute între formatele de furnizor (OpenAI ↔ Claude ↔ Gemini ↔ API-ul de răspunsuri)", + "modeDescriptionChatTester": "Trimiteți cereri reale de chat prin OmniRoute și inspectați întreaga călătorie dus-întors: intrare, cerere tradusă, răspuns furnizor și ieșire tradusă.", + "modeDescriptionTestBench": "Rulați scenarii predefinite și comparați compatibilitatea între furnizori și modele.", + "modeDescriptionLiveMonitor": "Urmărește evenimentele de traducere în timp real, pe măsură ce solicitările circulă prin OmniRoute.", + "modeDescriptionFallback": "Depanați, testați și vizualizați modul în care OmniRoute traduce cererile API între furnizori.", + "recentTranslations": "Traduceri recente", + "noTranslations": "Nicio traducere încă", + "source": "Sursa", + "target": "țintă", + "time": "timpul", + "model": "Model", + "status": "Stare", + "latency": "Latența", + "totalTranslations": "Traduceri totale", + "successful": "De succes", + "errors": "Erori", + "avgLatency": "Latență medie", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live — Auto-împrospătare", + "paused": "Întrerupt", + "eventsAppearHint": "Evenimentele de traducere apar aici pe măsură ce solicitările circulă prin OmniRoute. Utilizați oricare dintre aceste metode pentru a genera evenimente:", + "chatTesterTab": "Fila Tester de chat", + "testBenchTab": "Fila Banc de testare", + "externalApiCalls": "Apeluri API externe", + "ideCliIntegrations": "Integrari IDE/CLI", + "inMemoryNote": "Notă: Evenimentele sunt stocate în memorie și resetate atunci când serverul repornește.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Convertor de format", + "formatConverterDescription": "Lipiți sau introduceți un corp de solicitare JSON. Traducătorul va detecta automat formatul sursă și îl va converti în formatul țintă. Utilizați aceasta pentru a depana modul în care OmniRoute traduce cererile între formate (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Intrare", + "output": "Ieșire", + "auto": "Auto", + "swapFormats": "Schimbați formatele", + "translateAction": "Traduceți", + "clear": "Clar", + "inputPlaceholder": "Lipiți un corp de solicitare aici sau selectați un șablon de mai jos...", + "exampleTemplates": "Exemple de șabloane", + "exampleTemplatesHint": "— Faceți clic pentru a încărca", + "templateLoadHint": "Șablonul încarcă solicitarea în format {format}. Modificați formatul sursă pentru a încărca într-un alt format.", + "compatibilityTester": "Tester de compatibilitate", + "compatibilityReport": "Raport de compatibilitate", + "testBenchDescription": "Rulați scenarii predefinite (Simple Chat, Tool Calling etc.) pentru a verifica traducerea și compatibilitatea furnizorilor. Selectați un format sursă și un furnizor țintă, apoi rulați toate testele pentru a vedea un procent de compatibilitate. Folosiți acest lucru pentru a afla ce caracteristici funcționează între furnizori.", + "targetProvider": "Furnizor țintă", + "runAllTests": "Rulați toate testele", + "runTest": "Run Test", + "reRun": "Reluați", + "running": "Alergare...", + "passed": "a trecut", + "failed": "a eșuat", + "passedIconLabel": "✅ A trecut", + "chunks": "bucăți", + "scenarioSimpleChat": "Chat simplu", + "scenarioToolCalling": "Apelarea instrumentului", + "scenarioMultiTurn": "Multi-turn", + "scenarioThinking": "Gândirea", + "scenarioSystemPrompt": "Prompt de sistem", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Chat simplu", + "tool-calling": "Apelarea instrumentului", + "multi-turn": "Multi-turn", + "thinking": "Gândirea", + "system-prompt": "Prompt de sistem", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Mesaj text de bază", + "tool-calling": "Invocarea funcției/uneltei", + "multi-turn": "Conversație cu istoria", + "thinking": "Gândire extinsă / raționament", + "system-prompt": "Instrucțiuni de sistem complexe", + "streaming": "Solicitare de streaming SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Ești un asistent util.", + "userGreeting": "Bună ziua! Cum te simți azi?" + }, + "toolCalling": { + "userWeather": "Care este vremea în São Paulo?", + "toolDescription": "Obțineți vremea actuală pentru o locație", + "cityNameDescription": "Numele orașului" + }, + "multiTurn": { + "system": "Sunteți un asistent de codare.", + "userInitial": "Scrieți o funcție pentru a sorta o matrice în Python.", + "assistantExample": "Iată o funcție simplă de sortare:\n\n```python\ndef sort_array(arr):\n return sortat(arr)\n```", + "userFollowUp": "Acum sortați în ordine descrescătoare." + }, + "thinking": { + "question": "Care este suma primelor 100 de numere prime?" + }, + "systemPrompt": { + "systemInstruction": "Sunteți un inginer de software senior specializat în sisteme distribuite. Răspundeți concis la întrebări folosind cele mai bune practici din industrie. Furnizați întotdeauna exemple de cod atunci când este relevant. Formatați răspunsurile folosind markdown.", + "question": "Cum implementez un model de întrerupător?" + }, + "streaming": { + "prompt": "Spune-mi o scurtă poveste despre un robot care învață să picteze." + } + }, + "openaiCompatibleLabel": "Compatibil cu OpenAI", + "anthropicCompatibleLabel": "Compatibil antropic", + "noTemplateForFormat": "Nu există șablon pentru acest format", + "translationFailed": "Traducerea a eșuat: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Conducta de traduceri", + "pipelineVisualization": "Vizualizarea conductei", + "pipelineVisualizationHint": "Trimiteți un mesaj pentru a vedea cum decurge cererea dvs. prin detectare → traducere → apel de la furnizor.", + "chatTesterDescription": "Trimiteți mesaje ca un anumit format de client și inspectați fiecare pas al conductei de traducere.", + "chatTesterFlow": "Solicitare client → Detectare format → Intermediar OpenAI → Format furnizor → Răspuns", + "clickStepToInspect": "Faceți clic pe orice pas pentru a inspecta datele în acea etapă.", + "clientFormat": "Format client", + "provider": "Furnizor", + "modelPlaceholder": "Selectați sau introduceți un nume de model...", + "sendMessageToSeePipeline": "Trimiteți un mesaj pentru a vedea canalul de traducere", + "chatMessageHintPrefix": "Mesajul dvs. va fi formatat ca a", + "chatMessageHintSuffix": "cerere, tradusă prin conductă și trimisă furnizorului selectat.", + "youWithFormat": "Tu ({format})", + "assistant": "Asistent", + "typeMessage": "Tastați un mesaj...", + "send": "Trimite", + "clientRequest": "Solicitarea clientului", + "clientRequestDescription": "Corpul solicitării pe care l-ar trimite clientul dvs", + "formatDetected": "Format detectat", + "formatDetectedDescription": "OmniRoute detectează automat formatul API din structura cererii", + "openaiIntermediate": "OpenAI Intermediar", + "openaiIntermediateDescription": "Toate formatele sunt mai întâi normalizate la formatul OpenAI (puntea universală)", + "providerFormat": "Format de furnizor", + "providerFormatDescription": "Formatul OpenAI este tradus în formatul nativ al furnizorului", + "providerResponse": "Răspunsul furnizorului", + "providerResponseRawDescription": "Răspunsul brut de la API-ul furnizorului", + "providerResponseSseDescription": "Fluxul SSE brut de la API-ul furnizorului", + "unexpectedError": "A apărut o eroare neașteptată", + "error": "Eroare", + "errorMessage": "Eroare: {message}", + "requestFailed": "Solicitarea a eșuat", + "noTextExtracted": "(Niciun text extras)", + "liveMonitorDescriptionPrefix": "Afișează evenimentele de traducere pe măsură ce apelurile API circulă prin OmniRoute. Evenimentele provin din buffer-ul din memorie (resetează la repornire). Utilizați", + "liveMonitorDescriptionSuffix": ", sau apeluri API externe pentru a genera evenimente." + }, + "usage": { + "title": "Utilizare", + "loggerTab": "Logger", + "proxyTab": "Proxy", + "budgetManagement": "Managementul bugetului", + "budgetSaved": "Limitele bugetare au fost salvate", + "budgetSaveFailed": "Nu s-a salvat bugetul", + "loadingBudgetData": "Se încarcă datele bugetare...", + "noApiKeysTitle": "Fără chei API", + "noApiKeysDescription": "Adăugați mai întâi cheile API pentru a configura limite de buget.", + "apiKey": "Cheia API", + "todaysSpend": "Cheltuielile de azi", + "thisMonth": "Luna aceasta", + "setLimits": "Setați limite", + "dailyLimitUsd": "Limită zilnică (USD)", + "monthlyLimitUsd": "Limită lunară (USD)", + "warningThresholdPercent": "Pragul de avertizare (%)", + "dailyLimitPlaceholder": "de ex. 5.00", + "monthlyLimitPlaceholder": "de ex. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Salvați limite", + "budgetOk": "Buget OK — {remaining} rămas", + "budgetExceeded": "Buget depășit — solicitările pot fi blocate", + "totalRequests": "Total cereri", + "noDataYet": "Nu există date încă", + "latency": "Latența", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Prompt Cache", + "systemHealth": "Sănătatea sistemului", + "entries": "Intrări", + "activeCount": "{count} activ", + "openCircuitBreakersDetected": "Întreruptoare deschise detectate", + "hitRate": "Rata de lovituri", + "hitsMisses": "Hits / Misses", + "circuitBreakers": "Întreruptoare", + "lockedIPs": "IP-uri blocate", + "lockoutsAutoRefreshHint": "Blocări ale limitei ratei per model • Reîmprospătare automată 10 secunde", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} a rămas", + "howItWorks": "Cum funcționează", + "howItWorksSubtitle": "Aflați cum evaluările vă validează răspunsurile LLM", + "define": "Definiți", + "defineStepDescription": "Creați cazuri de testare cu solicitări de intrare și criterii de ieșire așteptate, folosind strategii precum conține, expresii regex sau potrivire exactă.", + "run": "Fugi", + "runStepDescription": "Execută cazuri de testare împotriva punctelor finale LLM prin OmniRoute. Fiecare caz este trimis ca o cerere API reală.", + "evaluate": "Evaluează", + "evaluateStepDescription": "Răspunsurile sunt comparate cu criteriile așteptate. Vedeți succes/eșec pentru fiecare caz cu valori de latență și feedback detaliat.", + "evalSuites": "Suite de evaluare", + "evalSuitesHint": "Faceți clic pe o suită pentru a vedea cazurile de testare, apoi rulați pentru a evalua punctele finale LLM", + "evalsLoading": "Se încarcă apartamentele de evaluare...", + "noEvalSuitesFound": "Nu au fost găsite suite Eval", + "noEvalSuitesDescription": "Suitele de evaluare pot fi definite prin API sau în cod. Ei testează ieșirile modelului în raport cu rezultatele așteptate folosind strategii precum conține, regex, potrivire exactă și funcții personalizate.", + "columnCase": "Caz", + "columnStatus": "Stare", + "columnLatency": "Latența", + "columnDetails": "Detalii", + "columnModel": "Model", + "columnStrategy": "Strategie", + "columnExpected": "Așteptată", + "statsSuites": "Suite", + "statsTestCases": "Cazuri de testare", + "statsModels": "Modele", + "statsCoverage": "Acoperire", + "statsStrategiesCount": "{count} strategii", + "evaluationStrategies": "Strategii de evaluare", + "modelsUnderTest": "Modele în curs de testare", + "searchSuitesPlaceholder": "Căutați apartamente...", + "passSuffix": "trece", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Rulați Eval", + "runningProgress": "Se rulează {current}/{total}...", + "passRate": "rata de promovare", + "summaryBreakdown": "{passed} a trecut · {failed} a eșuat · {total} total", + "passedIconLabel": "✅ A trecut", + "failedIconLabel": "❌ A eșuat", + "detailsContains": "Conține: „{term}”", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Așteptată: „{expected}”", + "noResultsYet": "Niciun rezultat încă", + "testCasesCount": "Cazuri de testare ({count})", + "noTestCasesDefined": "Nu au fost definite cazuri de testare", + "runEvalHint": "Faceți clic pe „Run Eval” pentru a executa toate cazurile împotriva punctului final LLM. Fiecare test trimite o cerere reală prin OmniRoute.", + "notifyNoTestCases": "Nu au fost definite cazuri de testare pentru această suită", + "notifyAllCasesPassed": "Toate {total} cazuri au trecut ✅", + "notifySomeCasesFailed": "{passed}/{total} a trecut, {failed} a eșuat", + "notifyEvalRunFailed": "Evaluarea a eșuat", + "notifyEvalTitle": "Evaluare: {name}", + "modelEvals": "Evaluări de model", + "evalsHeroDescription": "Testați și validați punctele finale LLM rulând suite de evaluare predefinite. Fiecare suită conține cazuri de testare care trimit solicitări reale prin OmniRoute și compară răspunsurile cu criteriile așteptate - ajutându-vă să detectați regresiile, să comparați modele și să asigurați calitatea răspunsului între furnizori.", + "qualityValidation": "Validarea calității", + "modelComparison": "Comparație de modele", + "regressionDetection": "Detectarea regresiei", + "latencyBenchmarks": "Benchmark-uri de latență", + "modelLockouts": "Blocarea modelelor", + "noLockouts": "Nu există modele blocate momentan", + "activeSessions": "Sesiuni active", + "noSessions": "Fără sesiuni active", + "sessionsHint": "Sesiunile apar pe măsură ce solicitările circulă prin proxy", + "sessionsTrackedHint": "Urmărit prin amprenta la cerere • Reîmprospătare automată 5s", + "session": "Sesiune", + "age": "Vârsta", + "requests": "Cereri", + "connection": "Conexiune", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limitele furnizorului", + "noProviders": "Niciun furnizor conectat", + "connectProvidersForQuota": "Conectați-vă la furnizori cu OAuth pentru a urmări limitele și utilizarea cotelor API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrat din {count})", + "autoRefresh": "Reîmprospătare automată", + "refreshAll": "Reîmprospătați toate", + "loadingQuotas": "Se încarcă...", + "account": "Cont", + "modelQuotas": "Cote model", + "lastUsed": "Ultima utilizare", + "actions": "Acțiuni", + "refreshQuota": "Actualizează cota", + "today": "Astăzi", + "tomorrow": "Mâine", + "dayTimeFormat": "{day}, {time}", + "inDuration": "în {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Plan brut: {plan}", + "noPlanFromProvider": "Niciun plan de la furnizor", + "noQuotaData": "Fără date de cotă", + "noQuotaDataAvailable": "Nu sunt disponibile date privind cotele", + "noAccountsForTierFilter": "Nu s-au găsit conturi pentru filtrul de nivel", + "tierAll": "Toate", + "tierEnterprise": "Întreprindere", + "tierTeam": "Echipa", + "tierBusiness": "Afaceri", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Plus", + "tierFree": "Gratuit", + "tierUnknown": "Necunoscut" + }, + "modals": { + "waitingAuth": "În așteptarea autorizației", + "verificationUrl": "Adresa URL de verificare", + "yourCode": "Codul dvs", + "remoteAccess": "Acces de la distanță:", + "connectedSuccess": "Conectat cu succes!", + "connectionFailed": "Conexiune a eșuat", + "chooseAuthMethod": "Alegeți metoda de autentificare:", + "awsBuilderId": "ID AWS Builder", + "awsIamIdentity": "Centrul de identitate AWS IAM", + "googleAccount": "Cont Google", + "githubAccount": "Cont GitHub", + "importToken": "Import Token", + "pasteToken": "Lipiți indicativul de reîmprospătare din Kiro IDE.", + "awsRegion": "Regiunea AWS", + "autoDetecting": "Se detectează automat jetoanele...", + "readingFromCache": "Citirea din memoria cache AWS SSO", + "readingFromCursor": "Citirea din baza de date Cursor IDE", + "initializing": "Se inițializează...", + "pricingConfig": "Configurarea prețurilor", + "loadingPricing": "Se încarcă datele de preț...", + "pricingRatesFormat": "Formatul tarifelor de preț", + "noPricingData": "Nu sunt disponibile date de preț", + "noModelsFound": "Nu s-au găsit modele" + }, + "loggers": { + "allProviders": "Toți Furnizorii", + "allModels": "Toate modelele", + "allAccounts": "Toate Conturile", + "allApiKeys": "Toate cheile API", + "allTypes": "Toate Tipurile", + "allLevels": "Toate Nivelurile", + "modelAZ": "Modelul A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Se încarcă jurnalele...", + "loadingProxyLogs": "Se încarcă jurnalele proxy...", + "noLogEntries": "Nu au fost găsite intrări de jurnal", + "noPayloadData": "Nu există date disponibile pentru această intrare în jurnal.", + "proxyEvent": "Eveniment proxy", + "proxy": "Proxy", + "level": "Nivel", + "directNative": "Direct (nativ)", + "combo": "Combo", + "inputTokens": "eu:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Prezentare generală a utilizării", + "outputTokens": "Jetoane de ieșire", + "totalCost": "Costul total", + "usageByModel": "Utilizare după model", + "usageByAccount": "Utilizare după Cont", + "failedToLoad": "Nu s-au încărcat statisticile de utilizare.", + "tokenHealth": "Token Health", + "totalOAuth": "OAuth totală", + "healthy": "Sănătos", + "warning": "Avertisment", + "errored": "Eroare", + "lastCheck": "Ultima verificare", + "noData": "Fără date", + "share": "Distribuie", + "unableToLoad": "Nu se pot încărca valorile sistemului", + "product": "Produs", + "resources": "Resurse", + "company": "Compania" + }, + "auth": { + "welcome": "Bun venit", + "signIn": "Conectați-vă", + "enterPassword": "Introduceți parola pentru a continua", + "password": "Parolă", + "unifiedProxy": "Proxy API AI unificat", + "unifiedAiApiProxy": "Proxy API AI unificat", + "unifiedAiApiProxyDesc": "Dirijați cererile către mai mulți furnizori de AI printr-un singur punct final. Echilibrarea încărcăturii, failoverul și urmărirea utilizării încorporate.", + "passwordNotEnabled": "Protecția prin parolă nu este activată", + "loading": "Se încarcă...", + "invalidPassword": "Parolă nevalidă", + "errorOccurredRetry": "A apărut o eroare. Vă rugăm să încercați din nou.", + "configureInstance": "Haideți să vă configurați instanța OmniRoute", + "runOnboardingWizard": "Rulați expertul de onboarding pentru a vă configura parola și pentru a vă conecta primul furnizor de AI.", + "startOnboarding": "Începeți integrarea", + "secureYourInstance": "Asigurați-vă instanța", + "setPasswordDescription": "Setați o parolă pentru a vă proteja tabloul de bord și pentru a vă asigura punctele finale API împotriva accesului neautorizat.", + "configurePassword": "Configurați parola", + "continue": "Continuă", + "windowWillClose": "Această fereastră se va închide automat...", + "closeTabNow": "Puteți închide această filă acum.", + "copyUrlManual": "Vă rugăm să copiați adresa URL din bara de adrese și să o inserați în aplicație.", + "accessDeniedDescription": "Nu aveți permisiunea de a accesa această resursă. Verificați cheia API sau contactați administratorul.", + "goToDashboard": "Accesați tabloul de bord", + "featureMultiProviderTitle": "Multi-furnizor", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google și multe altele", + "featureLoadBalancingTitle": "Echilibrarea sarcinii", + "featureLoadBalancingDesc": "Distribuiți cererile în mod inteligent", + "featureUsageTrackingTitle": "Urmărirea utilizării", + "featureUsageTrackingDesc": "Monitorizați costurile și jetoanele", + "resetPassword": "Resetează parola", + "resetDescription": "Alegeți o metodă pentru a recupera accesul la tabloul de bord", + "stopServer": "Opriți serverul OmniRoute", + "processing": "Se procesează...", + "pleaseWait": "Vă rugăm să așteptați până când completăm autorizarea.", + "authSuccess": "Autorizare reușită!", + "copyUrl": "Copiați această adresă URL", + "accessDenied": "Acces refuzat", + "methodCliTitle": "Metoda 1: Resetarea CLI", + "methodCliDescription": "Rulați următoarea comandă pe serverul pe care rulează OmniRoute:", + "methodCliHint": "Acest lucru vă va solicita să setați o nouă parolă. Serverul trebuie oprit mai întâi.", + "methodManualTitle": "Metoda 2: Resetare manuală", + "methodManualDescription": "Ștergeți parola din baza de date și setați una nouă la pornire:", + "setPasswordInYour": "Setați o nouă parolă în dvs", + "fileLabelSuffix": "fisier:", + "newPasswordPlaceholder": "dvs._noua_parolă", + "deleteSettingsFile": "Ștergeți", + "orRemovePasswordHashField": "sau eliminați câmpul passwordHash", + "restartServerWithNewPassword": "Reporniți serverul - va folosi noua parolă", + "backToLogin": "Înapoi la Logare", + "forgotPassword": "Ai uitat parola?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navigați la acasă", + "toggleMenu": "Comutați meniul", + "featuresLink": "Caracteristici", + "docsLink": "Docs", + "github": "GitHub", + "versionLive": "v1.0 este acum live", + "oneEndpoint": "Un punct final pentru", + "allProviders": "Toți furnizorii de AI", + "heroDescription": "Proxy AI endpoint cu tablou de bord web - Un port JavaScript al CLIProxyAPI. Funcționează perfect cu Claude Code, OpenAI Codex, Cline, RooCode și alte instrumente CLI.", + "getStarted": "Începeți", + "viewOnGithub": "Vizualizați pe GitHub", + "powerfulFeatures": "Caracteristici puternice", + "featuresSubtitle": "Tot ce aveți nevoie pentru a vă gestiona infrastructura AI într-un singur loc, construit pentru scară.", + "featureUnifiedEndpointTitle": "Punct final unificat", + "featureUnifiedEndpointDesc": "Accesați toți furnizorii printr-o singură adresă URL API standard.", + "featureEasySetupTitle": "Configurare ușoară", + "featureEasySetupDesc": "Începeți să rulați în câteva minute cu comanda npx.", + "featureModelFallbackTitle": "Model de rezervă", + "featureModelFallbackDesc": "Comutați automat furnizorii în caz de eșec sau latență ridicată.", + "featureUsageTrackingTitle": "Urmărirea utilizării", + "featureUsageTrackingDesc": "Analiză detaliată și monitorizare a costurilor pentru toate modelele.", + "featureOAuthApiKeysTitle": "Chei OAuth și API", + "featureOAuthApiKeysDesc": "Gestionați în siguranță acreditările într-un singur seif.", + "featureCloudSyncTitle": "Sincronizare în cloud", + "featureCloudSyncDesc": "Sincronizați-vă configurațiile pe dispozitive instantaneu.", + "featureCliSupportTitle": "Suport CLI", + "featureCliSupportDesc": "Funcționează cu Claude Code, Codex, Cline, Cursor și multe altele.", + "featureDashboardTitle": "Tabloul de bord", + "featureDashboardDesc": "Tablou de bord vizual pentru analiza traficului în timp real.", + "howItWorks": "Cum funcționează OmniRoute", + "howItWorksDescription": "Datele circulă fără probleme de la aplicația dvs. prin stratul nostru inteligent de rutare către cel mai bun furnizor pentru job.", + "howItWorksStep1Title": "1. CLI și SDK-uri", + "howItWorksStep1Description": "Solicitările tale pornesc de la instrumentele tale preferate sau SDK-ul nostru unificat. Doar schimbați adresa URL de bază.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Motorul nostru analizează promptul, verifică starea furnizorului și rutele pentru cea mai mică latență sau cost.", + "howItWorksStep3Title": "3. Furnizori AI", + "howItWorksStep3Description": "Solicitarea este îndeplinită instantaneu de OpenAI, Anthropic, Gemini sau altele.", + "getStartedIn30Seconds": "Începeți în 30 de secunde", + "getStartedDescription": "Instalați OmniRoute, configurați-vă furnizorii prin intermediul tabloului de bord web și începeți să direcționați cererile AI.", + "installOmniRoute": "Instalați OmniRoute", + "installStepDescription": "Rulați comanda npx pentru a porni serverul instantaneu", + "openDashboard": "Deschideți tabloul de bord", + "openDashboardStepDescription": "Configurați furnizorii și cheile API prin interfața web", + "routeRequests": "Cereri de traseu", + "routeRequestsStepDescription": "Îndreptați instrumentele CLI către {endpoint}", + "terminal": "terminal", + "copy": "Copiere", + "copied": "✓ Copiat", + "startingOmniRoute": "Se pornește OmniRoute...", + "serverRunningOnLabel": "Serverul rulează", + "dashboardLabel": "Tabloul de bord", + "readyToRoute": "Gata de traseu! ✓", + "configureProvidersNote": "📝 Configurați furnizorii în tabloul de bord sau utilizați variabile de mediu", + "dataLocation": "Locația datelor:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Produs", + "dashboardLink": "Tabloul de bord", + "changelog": "Jurnalul modificărilor", + "resources": "Resurse", + "documentation": "Documentare", + "npm": "NPM", + "legal": "Legal", + "mitLicense": "Licență MIT", + "footerTagline": "Punctul final unificat pentru generarea AI. Conectați-vă, direcționați și gestionați cu ușurință furnizorii dvs. de AI.", + "copyright": "© {year} OmniRoute. Toate drepturile rezervate.", + "flowToolClaudeCode": "Claude Cod", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Cursorul", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "antropică", + "flowProviderGemini": "Gemeni", + "flowProviderGithubCopilot": "Copilotul GitHub", + "interactiveDiagram": "Diagrama interactivă vizibilă pe desktop", + "ctaTitle": "Sunteți gata să vă simplificați infrastructura AI?", + "ctaDescription": "Alăturați-vă dezvoltatorilor care își eficientizează integrările AI cu OmniRoute. Open source și liber pentru a începe.", + "startFree": "Începe gratuit", + "readDocumentation": "Citiți documentația" + }, + "docs": { + "title": "Documentare", + "quickStart": "Pornire rapidă", + "features": "Caracteristici", + "supportedProviders": "Furnizori acceptați", + "supportedProvidersToc": "Furnizorii", + "commonUseCases": "Cazuri comune de utilizare", + "clientCompatibility": "Compatibilitate client", + "apiReference": "Referință API", + "method": "Metoda", + "path": "Calea", + "notes": "Note", + "modelPrefixes": "Prefixe de model", + "prefix": "Prefix", + "troubleshooting": "Depanare", + "supportsChat": "Acceptă atât punctele finale de chat, cât și cele de răspuns.", + "oauthAutoRefresh": "Conexiune OAuth cu reîmprospătare automată a simbolului.", + "fullStreaming": "Suport complet pentru streaming pentru toate modelele.", + "docsLabel": "Docs", + "docsHeroDescription": "Gateway AI pentru LLM cu mai mulți furnizori. Un punct final pentru OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor și peste 20 de furnizori.", + "openDashboard": "Deschideți tabloul de bord", + "endpointPage": "Pagina finală", + "github": "GitHub", + "reportIssue": "Raportați o problemă", + "onThisPage": "Pe această pagină", + "documentationVersion": "Documentație - v{version}", + "quickStartStep1Title": "1. Instalați și rulați", + "quickStartStep1Prefix": "Fugi", + "quickStartStep1Middle": "sau clonează din GitHub și rulează", + "quickStartStep2Title": "2. Creați cheia API", + "quickStartStep2Text": "Accesați Endpoint -> Chei înregistrate. Generați o cheie pentru fiecare mediu.", + "quickStartStep3Title": "3. Conectați furnizorii", + "quickStartStep3Text": "Adăugați conturi de furnizor prin autentificare OAuth, cheie API sau conexiune automată gratuită.", + "quickStartStep4Title": "4. Setați adresa URL a bazei de clienți", + "quickStartStep4Prefix": "Îndreptați-vă clientul IDE sau API către", + "quickStartStep4Suffix": "Utilizați prefixul furnizorului, de exemplu", + "featureRoutingTitle": "Rutare cu mai mulți furnizori", + "featureRoutingText": "Dirijați cererile către peste 30 de furnizori de AI printr-un singur punct final compatibil cu OpenAI. Acceptă API-uri de chat, răspunsuri, audio și imagine.", + "featureCombosTitle": "Combo și echilibrare", + "featureCombosText": "Creați combinații de modele cu lanțuri de rezervă și strategii de echilibrare: round-robin, prioritare, aleatorii, cel mai puțin utilizate și optimizate pentru costuri.", + "featureUsageTitle": "Urmărirea utilizării și a costurilor", + "featureUsageText": "Numărarea jetonelor în timp real, calculul costurilor pe furnizor/model și detalierea utilizării în funcție de cheie API și cont.", + "featureAnalyticsTitle": "Tabloul de bord Analytics", + "featureAnalyticsText": "Analiză vizuală cu diagrame pentru solicitări, jetoane, erori, latență, costuri și popularitatea modelului de-a lungul timpului.", + "featureHealthTitle": "Monitorizarea sănătății", + "featureHealthText": "Verificări live ale stării de sănătate, starea furnizorului, stările întrerupătoarelor de circuit și detectarea automată a limitei ratei cu retragere exponențială.", + "featureCliTitle": "Instrumente CLI", + "featureCliText": "Gestionați configurațiile IDE, exportați/importați copii de siguranță, descoperiți profiluri de codex și configurați setările din tabloul de bord.", + "featureSecurityTitle": "Securitate și politici", + "featureSecurityText": "Autentificare cu cheie API, filtrare IP, protectie pentru injectare promptă, politici de domeniu, gestionare a sesiunilor și înregistrare de audit.", + "featureCloudSyncTitle": "Sincronizare în cloud", + "featureCloudSyncText": "Sincronizați-vă configurația cu Cloudflare Workers pentru acces de la distanță cu acreditări criptate și failover automat.", + "providersAcrossConnectionTypes": "{count} furnizori din trei tipuri de conexiune.", + "manageProviders": "Gestionați furnizorii", + "providersCount": "{count} furnizori", + "providerTypeFree": "Nivel gratuit", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Cheia API", + "useCaseSingleEndpointTitle": "Punct final unic pentru mulți furnizori", + "useCaseSingleEndpointText": "Indicați clienții către o adresă URL de bază și rutați după prefix de model (de exemplu: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Fallback și schimbare de model cu combo", + "useCaseFallbackText": "Creați modele combinate în Dashboard și mențineți stabilă configurația clientului în timp ce furnizorii se rotesc intern.", + "useCaseUsageVisibilityTitle": "Utilizare, cost și vizibilitate depanare", + "useCaseUsageVisibilityText": "Urmăriți jetoanele și costul în funcție de furnizor, cont și cheie API în filele Utilizare și Analytics.", + "clientCherryStudioTitle": "Studioul Cherry", + "baseUrlLabel": "Adresa URL de bază", + "chatEndpointLabel": "Punct final de chat", + "modelRecommendationLabel": "Recomandare model: prefix explicit", + "clientCodexTitle": "Modele Codex / GitHub Copilot", + "clientCodexBullet1": "Utilizați ID-uri de model cu", + "clientCodexBullet2": "Modelele din familia Codex au traseu automat către", + "clientCodexBullet3": "Modelele non-Codex continuă", + "clientCursorTitle": "Cursor IDE", + "clientCursorBullet1": "Utilizați", + "clientCursorBullet1Suffix": "prefix pentru modelele Cursor.", + "clientCursorBullet2": "Conexiune OAuth - conectați-vă din pagina Furnizori.", + "clientClaudeTitle": "Claude Code / Antigravitație", + "clientClaudeBullet1Prefix": "Utilizați", + "clientClaudeBullet1Middle": "(Claude) sau", + "clientClaudeBullet1Suffix": "(antigravitație) prefix.", + "endpointChatNote": "Punct final de chat compatibil cu OpenAI (implicit).", + "endpointResponsesNote": "Punct final API pentru răspunsuri (Codex, serie o).", + "endpointModelsNote": "Catalog model pentru toți furnizorii conectați.", + "endpointAudioNote": "Transcriere audio (Deepgram, AssemblyAI).", + "endpointImagesNote": "Generarea imaginii (NanoBanana).", + "endpointRewriteChatNote": "Rescrie ajutor pentru clienți fără /v1.", + "endpointRewriteResponsesNote": "Rescrie ajutor pentru răspunsuri fără /v1.", + "endpointRewriteModelsNote": "Rescrierea de ajutor pentru descoperirea modelului fără /v1.", + "modelPrefixesDescriptionStart": "Utilizați prefixul furnizorului înainte de numele modelului pentru a direcționa către un anumit furnizor. Exemplu:", + "modelPrefixesDescriptionEnd": "rute către GitHub Copilot.", + "provider": "Furnizor", + "type": "Tip", + "troubleshootingModelRouting": "Dacă clientul eșuează cu rutarea modelului, utilizați furnizorul/modelul explicit (de exemplu: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Dacă primiți erori de model ambigue, alegeți un prefix de furnizor în loc de un ID de model simplu.", + "troubleshootingCodexFamily": "Pentru modelele din familia GitHub Codex, păstrați modelul ca gh/; routerul selectează/răspunde automat.", + "troubleshootingTestConnection": "Utilizați Tabloul de bord > Furnizori > Testați conexiunea înainte de a testa de la IDE-uri sau clienți externi.", + "troubleshootingCircuitBreaker": "Dacă un furnizor arată întrerupătorul deschis, așteptați răcirea sau verificați pagina Sănătate pentru detalii.", + "troubleshootingOAuth": "Pentru furnizorii OAuth, re-autentificați-vă dacă tokenurile expiră. Verificați indicatorul de stare a cardului furnizorului." + }, + "legal": { + "privacyPolicy": "Politica de confidențialitate", + "termsOfService": "Termeni și condiții", + "providerConfigurations": "Configurațiile furnizorului", + "apiKeys": "Chei API", + "usageLogs": "Jurnalele de utilizare", + "applicationSettings": "Setările aplicației", + "viewExportAnalytics": "Vizualizați și exportați analizele de utilizare", + "clearHistory": "Ștergeți istoricul utilizării în orice moment", + "configureRetention": "Configurați politicile de păstrare a jurnalelor", + "backupRestore": "Faceți backup și restaurați baza de date", + "privacyMetadataTitle": "Politica de confidențialitate | OmniRoute", + "privacyMetadataDescription": "Politica de confidențialitate pentru routerul proxy API OmniRoute AI.", + "termsMetadataTitle": "Termeni și condiții | OmniRoute", + "termsMetadataDescription": "Termenii și condițiile pentru routerul proxy API OmniRoute AI.", + "backToHome": "Înapoi acasă", + "lastUpdated": "Ultima actualizare: {date}", + "policyLastUpdatedDate": "13 februarie 2026", + "listSeparator": "-", + "questionsVisit": "Întrebări? Vizitează-ne", + "githubRepository": "Depozitul GitHub", + "privacySection1Title": "1. Local-First Architecture", + "privacySection1Text": "OmniRoute este proiectat ca o aplicație mai întâi locală. Toate procesarea și stocarea datelor au loc în întregime pe mașina dvs. Nu există un server centralizat care să vă colecteze informațiile.", + "privacySection2Title": "2. Datele pe care le stocăm", + "privacyDataStoredIn": "Următoarele date sunt stocate local în", + "privacyDataProviderConfigurationsDesc": "adrese URL de conexiune, tipuri de furnizori și setări de prioritate", + "privacyDataApiKeysDesc": "criptat și stocat local pentru autentificare cu furnizorii de AI", + "privacyDataUsageLogsDesc": "numărul de solicitări, utilizarea token-ului, numele modelelor, marcajele de timp și timpii de răspuns", + "privacyDataApplicationSettingsDesc": "preferințele temei, strategia de rutare și configurațiile combinate", + "privacySection3Title": "3. Fără telemetrie", + "privacySection3Text": "OmniRoute nu colectează telemetrie, analize sau rapoarte de blocare. Nicio dată nu ne sunt trimise nouă sau unei terțe părți. Tiparele dvs. de utilizare, apelurile API și configurațiile rămân în întregime private.", + "privacySection4Title": "4. Furnizori AI terți", + "privacySection4Text": "Când efectuați apeluri API prin OmniRoute, solicitările dvs. sunt redirecționate către furnizorii de AI pe care i-ați configurat (de exemplu: OpenAI, Anthropic, Google). Acești furnizori au propriile lor politici de confidențialitate care guvernează modul în care vă gestionează datele. Vă rugăm să revizuiți:", + "privacyOpenAiPolicy": "Politica de confidențialitate OpenAI", + "privacyAnthropicPolicy": "Politica de confidențialitate antropică", + "privacyGooglePolicy": "Politica de confidențialitate Google", + "privacySection5Title": "5. Cloud Sync (Opțional)", + "privacySection5Text": "Dacă activați caracteristica opțională de sincronizare în cloud, configurațiile furnizorului și cheile API pot fi transmise la un punct final de cloud configurat. Această funcție este dezactivată în mod implicit și necesită înscriere explicită.", + "privacySection6Title": "6. Înregistrare", + "privacyLoggingIntro": "Jurnalele de solicitări pot fi configurate prin setările tabloului de bord. Puteți:", + "privacySection7Title": "7. Drepturile tale", + "privacySection7TextStart": "Deoarece toate datele sunt stocate local, aveți control deplin. Vă puteți șterge datele oricând prin eliminarea", + "privacySection7TextEnd": "director sau folosind funcțiile de backup și restaurare a bazei de date din tabloul de bord.", + "termsSection1Title": "1. Prezentare generală", + "termsSection1Text": "OmniRoute este un router proxy API AI care funcționează în întregime pe mașina dumneavoastră. Acesta direcționează cererile către mai mulți furnizori de AI cu echilibrare a sarcinii, failover și urmărire a utilizării.", + "termsSection2Title": "2. Responsabilitățile utilizatorului", + "termsResponsibilityApiKeys": "Sunteți singurul responsabil pentru gestionarea propriilor chei și acreditări API pentru furnizorii terți de AI (OpenAI, Anthropic, Google etc.).", + "termsResponsibilityCompliance": "Trebuie să respectați termenii și condițiile fiecărui furnizor de AI al cărui API îl accesați prin OmniRoute.", + "termsResponsibilitySecurity": "Sunteți responsabil pentru securitatea instalării locale OmniRoute, inclusiv setarea unei parole și restricționarea accesului la rețea.", + "termsSection3Title": "3. Cum funcționează", + "termsSection3Text": "OmniRoute acționează ca un proxy intermediar. Apelurile API trimise către OmniRoute sunt traduse și redirecționate către furnizorii dvs. de AI configurați. OmniRoute nu modifică conținutul solicitărilor sau răspunsurilor dumneavoastră dincolo de traducerea protocolului necesară.", + "termsSection4Title": "4. Manipularea datelor", + "termsDataStoredLocally": "Toate datele sunt stocate local pe mașina dvs. într-o bază de date SQLite.", + "termsNoTransmission": "OmniRoute nu transmite date către servere externe decât dacă activați în mod explicit funcțiile de sincronizare în cloud.", + "termsDataLocationText": "Jurnalele de utilizare, cheile API și configurația sunt stocate în", + "termsSection5Title": "5. Exonerare de responsabilitate", + "termsSection5Text": "OmniRoute este furnizat „ca atare”, fără garanții de niciun fel. Nu suntem responsabili pentru costurile suportate prin utilizarea API-ului, întreruperile serviciilor sau pierderea datelor. Păstrați întotdeauna copii de siguranță ale configurației dvs.", + "termsSection6Title": "6. Open Source", + "termsSection6Text": "OmniRoute este un software open-source. Sunteți liber să îl inspectați, să modificați și să îl distribuiți în conformitate cu termenii licenței sale." + } +} diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json new file mode 100644 index 0000000000..8be5470188 --- /dev/null +++ b/src/i18n/messages/ru.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Сохранить", + "cancel": "Отмена", + "delete": "Удалить", + "loading": "Загрузка...", + "error": "Произошла ошибка", + "success": "Успех", + "confirm": "Вы уверены?", + "refresh": "Обновить", + "close": "Закрыть", + "add": "Добавить", + "edit": "Редактировать", + "search": "Поиск", + "back": "Назад", + "next": "Далее", + "submit": "Отправить", + "reset": "Сброс", + "copy": "Копировать", + "copied": "Скопировано!", + "enabled": "Включено", + "disabled": "Отключено", + "active": "Активный", + "inactive": "Неактивный", + "noData": "Нет доступных данных", + "configure": "Настроить", + "manage": "Управление", + "name": "Имя", + "actions": "Действия", + "status": "Статус", + "type": "Тип", + "model": "Модель", + "models": "модели", + "provider": "Поставщик", + "account": "Аккаунт", + "time": "Время", + "details": "Подробности", + "created": "Создано", + "lastUsed": "Последнее использование", + "loadMore": "Загрузить больше", + "noResults": "Результаты не найдены", + "reloadPage": "Обновить страницу", + "connected": "Подключено", + "disconnected": "Отключено", + "notConfigured": "Не настроено", + "testConnection": "Тестовое соединение", + "enable": "Включить", + "disable": "Отключить", + "columns": "Столбцы", + "newest": "Новейший", + "oldest": "Самый старый", + "all": "Все", + "none": "Нет", + "yes": "Да", + "no": "Нет", + "warning": "Предупреждение", + "note": "Примечание", + "free": "Бесплатно", + "skipToContent": "Перейти к содержимому" + }, + "sidebar": { + "home": "Главная", + "dashboard": "Панель управления", + "providers": "Провайдеры", + "combos": "Комбо", + "usage": "Использование", + "analytics": "Аналитика", + "costs": "Затраты", + "health": "Здоровье", + "limits": "Лимиты и квоты", + "cliTools": "Инструменты интерфейса командной строки", + "settings": "Настройки", + "translator": "Переводчик", + "docs": "Документы", + "issues": "Проблемы", + "endpoint": "Конечная точка", + "apiManager": "Менеджер API", + "logs": "Журналы", + "auditLog": "Журнал аудита", + "shutdown": "Выключение", + "restart": "Перезапустить", + "shutdownConfirm": "Выключить OmniRoute?", + "restartConfirm": "Перезапустить OmniRoute?", + "version": "v{version}", + "debug": "Отладка", + "system": "Система", + "help": "Помощь", + "serverDisconnected": "Сервер отключен", + "serverDisconnectedMsg": "Прокси-сервер остановлен или перезагружается.", + "expandSidebar": "Развернуть боковую панель", + "collapseSidebar": "Свернуть боковую панель" + }, + "header": { + "logout": "Выход из системы", + "language": "Язык", + "providers": "Провайдеры", + "providerDescription": "Управляйте подключениями к поставщикам ИИ", + "combos": "Комбо", + "comboDescription": "Комбинации моделей с резервным вариантом", + "usage": "Использование и аналитика", + "usageDescription": "Отслеживайте использование API, потребление токенов и журналы запросов.", + "analytics": "Аналитика", + "analyticsDescription": "Диаграммы, тенденции и аналитические сведения об оценках", + "cliTools": "Инструменты интерфейса командной строки", + "cliToolsDescription": "Настройка инструментов CLI", + "home": "Главная", + "homeDescription": "Добро пожаловать в OmniRoute", + "endpoint": "Конечная точка", + "endpointDescription": "Конфигурация конечной точки API", + "settings": "Настройки", + "settingsDescription": "Управляйте своими предпочтениями", + "openaiCompatible": "Совместимость с OpenAI", + "anthropicCompatible": "Антропная совместимость" + }, + "home": { + "quickStart": "Быстрый старт", + "quickStartDesc": "Приступайте к работе в 4 шага. Подключайте провайдеров, маршрутизируйте модели, контролируйте все.", + "fullDocs": "Полная документация", + "step1Title": "1. Создайте ключ API.", + "step1Desc": "Перейдите к Endpoint -> Зарегистрированные ключи. Создайте один ключ для каждой среды.", + "step2Title": "2. Подключите провайдеров", + "step2Desc": "Добавьте учетные записи в Providers. Поддерживает OAuth, ключ API и уровни бесплатного пользования.", + "step3Title": "3. Укажите своего клиента", + "step3Desc": "Установите базовый URL-адрес {url} в клиенте IDE или API.", + "step4Title": "4. Мониторинг и оптимизация", + "step4Desc": "Отслеживайте токены, стоимость и ошибки в Журналы запросов и Analytics.", + "providersOverview": "Обзор провайдеров", + "configuredOf": "{configured} настроен из {total} доступных поставщиков", + "noModelsAvailable": "Нет доступных моделей для этого поставщика.", + "configureFirst": "Сначала настройте соединение в {providers}.", + "configureProvider": "Настроить поставщика", + "modelAvailable": "Доступна модель {count}", + "modelsAvailable": "Доступно {count} моделей", + "connectionsActive": "Соединение {count} активно", + "connectionsActivePlural": "{count} активных соединений", + "copyModelName": "Скопировать название модели", + "documentation": "Документация", + "healthMonitor": "Монитор здоровья", + "reportIssue": "Сообщить о проблеме", + "activeError": "{active} активен · {errors} ошибка", + "oauthLabel": "OAuth", + "apiKeyLabel": "API-ключ", + "requestsShort": "{count} требуется", + "providerModelsTitle": "{provider} — Модели", + "copiedModel": "Скопировано: {model}", + "aliasLabel": "псевдоним" + }, + "analytics": { + "title": "Аналитика", + "overviewDescription": "Отслеживайте шаблоны использования API, потребление токенов, затраты и тенденции активности среди всех поставщиков и моделей.", + "evalsDescription": "Запустите оценочные пакеты для тестирования и проверки конечных точек LLM. Сравнивайте качество модели, обнаруживайте регрессии и измеряйте задержку тестирования.", + "overview": "Обзор", + "evals": "Оценки" + }, + "apiManager": { + "title": "API-ключи", + "createKey": "Создать ключ API", + "key": "Ключ", + "revokeKey": "Отозвать ключ", + "revokeConfirm": "Вы уверены, что хотите отозвать этот ключ API?", + "noKeys": "Ключей API пока нет", + "noKeysDesc": "Создайте свой первый ключ API для аутентификации запросов к вашей конечной точке.", + "keyLabel": "Ключевая этикетка", + "permissions": "Разрешения", + "expiresAt": "Срок действия истекает", + "never": "Никогда", + "revoke": "Отозвать", + "showKey": "Показать ключ", + "hideKey": "Скрыть ключ", + "copyKey": "Копировать ключ API", + "allModels": "Все модели", + "selectedModels": "Выбранные модели", + "readOnly": "Только чтение", + "fullAccess": "Полный доступ", + "keyManagement": "Управление ключами API", + "keyManagementDesc": "Создавайте ключи API для аутентификации запросов к вашей конечной точке и управляйте ими.", + "totalKeys": "Всего ключей", + "restricted": "Ограниченный", + "totalRequests": "Всего запросов", + "modelsAvailable": "Доступные модели", + "registeredKeys": "Зарегистрированные ключи", + "keysRegistered": "Зарегистрировано {count} ключей", + "keyRegistered": "Ключ {count} зарегистрирован", + "keysSecurityNote": "Каждый ключ изолирует отслеживание использования и может быть отозван независимо. Ключи маскируются после создания в целях безопасности.", + "createFirstKey": "Создайте свой первый ключ", + "name": "Имя", + "usage": "Использование", + "created": "Создано", + "actions": "Действия", + "reqs": "требования", + "neverUsed": "Никогда не использовался", + "deleteConfirm": "Удалить этот ключ API?", + "usageTips": "Советы по использованию", + "tipAuth": "Используйте ключи API в заголовке авторизации в качестве носителя YOUR_KEY.", + "tipSecure": "Ключи отображаются только один раз во время создания — храните их в надежном месте.", + "tipSeparate": "Создавайте отдельные ключи для разных клиентов или сред.", + "tipRestrict": "Ограничьте ключи определенными моделями для повышения безопасности и контроля затрат.", + "keyName": "Имя ключа", + "keyNamePlaceholder": "например, Ключ производства, Ключ разработки", + "keyNameDesc": "Выберите описательное имя, чтобы определить назначение этого ключа.", + "keyCreated": "Ключ API создан", + "keyCreatedSuccess": "Ключ успешно создан!", + "keyCreatedNote": "Скопируйте и сохраните этот ключ сейчас — он больше не будет отображаться.", + "done": "Готово", + "savePermissions": "Сохранить разрешения", + "allowAll": "Разрешить все", + "restrict": "Ограничить", + "allowAllInfo": "Этот ключ дает доступ ко всем доступным моделям.", + "restrictInfo": "Этот ключ может получить доступ к {selected} из моделей {total}.", + "selected": "{count} выбрано", + "all": "Все", + "clear": "Очистить", + "searchModels": "Поиск моделей по названию или поставщику...", + "noModelsFound": "Модели не найдены", + "keyNameRequired": "Укажите имя ключа.", + "keyNameTooLong": "Имя ключа должно содержать не более {max} символов.", + "keyNameInvalid": "Имя ключа может содержать только буквы, цифры, пробелы, дефисы и подчеркивания.", + "invalidKeyName": "Неверное имя ключа", + "failedCreateKey": "Не удалось создать ключ", + "failedCreateKeyRetry": "Не удалось создать ключ. Пожалуйста, попробуйте еще раз.", + "invalidKeyId": "Неверный идентификатор ключа", + "failedDeleteKey": "Не удалось удалить ключ", + "failedDeleteKeyRetry": "Не удалось удалить ключ. Пожалуйста, попробуйте еще раз.", + "invalidModelsSelection": "Неверный выбор моделей", + "cannotSelectMoreThanModels": "Невозможно выбрать более {max} моделей.", + "failedUpdatePermissions": "Не удалось обновить разрешения.", + "failedUpdatePermissionsRetry": "Не удалось обновить разрешения. Пожалуйста, попробуйте еще раз.", + "unknownProvider": "неизвестно", + "copyMaskedKey": "Копировать замаскированный ключ", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Последний: {date}", + "editPermissions": "Редактировать разрешения", + "deleteKey": "Удалить ключ", + "model": "{count} модель", + "models": "{count} модели", + "permissionsTitle": "Разрешения: {name}", + "allowAllDesc": "Этот ключ дает доступ ко всем доступным моделям.", + "restrictDesc": "Этот ключ может получить доступ к {selectedCount} из моделей {totalModels}.", + "selectedCount": "{count} выбрано" + }, + "auditLog": { + "title": "Журнал аудита", + "searchPlaceholder": "Поиск действий...", + "action": "Действие", + "actor": "Актер", + "target": "Цель", + "ipAddress": "IP-адрес", + "timestamp": "Временная метка", + "noEntries": "Записи аудита не найдены", + "filterByAction": "Фильтровать по действию...", + "filterByActor": "Фильтровать по актеру...", + "filterEntriesAria": "Фильтрация записей журнала аудита", + "filterByActionTypeAria": "Фильтровать по типу действия", + "filterByActorAria": "Фильтровать по актеру", + "refreshAuditLogAria": "Обновить журнал аудита", + "tableAria": "Записи журнала аудита", + "failedFetchAuditLog": "Не удалось получить журнал аудита.", + "notAvailable": "—", + "description": "Административные действия и события безопасности", + "showing": "Показаны записи {count} (смещение {offset})", + "previous": "Предыдущий" + }, + "cliTools": { + "title": "Инструменты интерфейса командной строки", + "noActiveProviders": "Нет активных провайдеров", + "noActiveProvidersDesc": "Сначала добавьте и подключите поставщиков, чтобы настроить инструменты CLI.", + "mapModels": "Модели карт", + "testConnection": "Тестовое соединение", + "connectionStatus": "Статус соединения", + "configureEndpoint": "Настроить конечную точку", + "instructions": "Инструкции", + "modelMapping": "Сопоставление модели", + "baseUrl": "Базовый URL", + "apiKey": "API-ключ", + "configured": "Настроен", + "notConfigured": "Не настроено", + "notInstalled": "Не установлено", + "custom": "Пользовательский", + "unknown": "Неизвестно", + "lastSavedAt": "Последнее сохранение: {date}", + "never": "Никогда", + "justNow": "только что", + "minutesAgoShort": "{count} мин назад", + "hoursAgoShort": "{count}ч назад", + "daysAgoShort": "{count}дн назад", + "monthsAgoShort": "{count}мес. назад", + "yearsAgoShort": "{count}г назад", + "runtimeCheckFailed": "Проверка времени выполнения не удалась", + "yourApiKeyPlaceholder": "ваш-API-ключ", + "modelPlaceholder": "поставщик/идентификатор модели", + "configurationSaved": "Конфигурация успешно сохранена.", + "failedToSave": "Не удалось сохранить конфигурацию.", + "noApiKeysCreateOne": "Нет ключей API — создайте их на странице «Ключи».", + "defaultOmnirouteKey": "sk_omniroute (по умолчанию)", + "selectModel": "Выберите модель", + "selectModelForAlias": "Выберите модель для {alias}", + "selectModelForTool": "Выберите модель для {tool}", + "select": "Выбрать", + "clear": "Очистить", + "comingSoon": "Скоро", + "checkingRuntime": "Проверка статуса выполнения...", + "guideOnlyIntegration": "Интеграция только для руководства (локальная среда выполнения не требуется)", + "cliRuntimeDetected": "Среда выполнения CLI обнаружена и готова", + "cliFoundNotRunnable": "CLI найден, но не работает{reason}", + "cliRuntimeNotDetected": "Среда выполнения CLI не обнаружена", + "binary": "Двоичный", + "configPath": "Путь конфигурации", + "configPathShort": "Конфигурация", + "failedCheckRuntimeStatus": "Не удалось проверить статус выполнения.", + "copy": "Копировать", + "copied": "Скопировано", + "copyConfig": "Копировать конфигурацию", + "saveConfig": "Сохранить конфигурацию", + "selectionSaved": "Выбор сохранен.", + "guide": "Руководство", + "detected": "Обнаружено", + "notReady": "Не готов", + "active": "Активный", + "inactive": "Неактивный", + "startMitm": "Запустить МИТМ", + "stopMitm": "Остановить МИТМ", + "mitmStarted": "MITM стартовал успешно!", + "mitmStopped": "MITM успешно остановлен!", + "failedStart": "Не удалось запустить MITM", + "failedStop": "Не удалось остановить MITM", + "saveMappings": "Сохранить сопоставления", + "mappingsSaved": "Сопоставления сохранены!", + "failedSaveMappings": "Не удалось сохранить сопоставления.", + "howItWorks": "Как это работает:", + "antigravityHowWorksDesc": "Антигравитация отправляет запросы на конечную точку Google. MITM перехватывает и перенаправляет их в OmniRoute.", + "antigravityStep1": "1. Запустите MITM для маршрутизации запросов через OmniRoute.", + "antigravityStep2Prefix": "2. Добавить", + "antigravityStep2Suffix": "в файл хостов как 127.0.0.1.", + "antigravityStep3": "3. Откройте Антигравитацию и запросы будут проксироваться.", + "sudoPasswordRequiredTitle": "Требуется пароль Sudo", + "sudoPasswordHint": "Пароль администратора необходим для изменения файлов хостов и настроек системного прокси.", + "enterSudoPassword": "Введите пароль sudo", + "sudoPasswordRequiredError": "Требуется пароль Sudo.", + "cancel": "Отмена", + "confirm": "Подтвердить", + "settingsApplied": "Настройки успешно применены!", + "failedApplySettings": "Не удалось применить настройки.", + "settingsReset": "Настройки успешно сброшены!", + "failedResetSettings": "Не удалось сбросить настройки", + "backupRestored": "Бэкап восстановлен!", + "failedRestore": "Не удалось восстановить", + "checkingCli": "Проверка {tool} CLI...", + "cliNotRunnable": "{tool} CLI установлен, но не запускается", + "cliNotInstalled": "{tool} CLI не установлен", + "cliNotDetected": "{tool} CLI не обнаружен", + "cliDetectedReady": "{tool} CLI обнаружен и готов", + "cliFoundFailedHealthcheck": "{tool} CLI найден, но проверка работоспособности во время выполнения не выполнена {reason}.", + "installCliPrompt": "Чтобы использовать эту функцию, установите {tool} CLI.", + "installCodexPrompt": "Установите Codex CLI, чтобы использовать функцию автоматического применения.", + "hide": "Скрыть", + "howToInstall": "Как установить", + "installationGuide": "Руководство по установке", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "После установки запустите", + "toVerify": "чтобы проверить.", + "current": "Текущий", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Сбросить настройки по умолчанию", + "providerModelPlaceholder": "поставщик/идентификатор модели", + "apply": "Применить", + "reset": "Сброс", + "manualConfig": "Ручная настройка", + "backups": "Резервные копии", + "configBackups": "Резервные копии конфигурации", + "noBackupsYet": "Резервных копий пока нет. Резервные копии создаются автоматически перед каждым применением или сбросом.", + "restore": "Восстановить", + "backupRestoredReloading": "Бэкап восстановлен! Статус перезагрузки...", + "failedRestoreBackup": "Не удалось восстановить резервную копию", + "applied": "Применено!", + "failed": "Не удалось", + "resetDone": "Сбросить!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute настроен как поставщик, совместимый с OpenAI.", + "provider": "Поставщик", + "model": "Модель", + "providers": "Провайдеры", + "auth": "Авторизация", + "noApiKeysAvailable": "Нет доступных ключей API", + "usingDefaultOmniroute": "Использование по умолчанию: sk_omniroute", + "updateConfig": "Обновить конфигурацию", + "applyConfig": "Применить конфигурацию", + "noBackupsAvailable": "Резервные копии отсутствуют.", + "profileSaved": "Профиль «{name}» сохранен!", + "failedSaveProfile": "Не удалось сохранить профиль", + "profileActivated": "Профиль активирован!", + "failedActivateProfile": "Не удалось активировать профиль", + "profiles": "Профили", + "savedProfiles": "Сохраненные профили", + "noProfilesYet": "Ни один профиль еще не сохранен. Сохраните текущую конфигурацию как профиль ниже.", + "activate": "Активировать", + "deleteProfile": "Удалить профиль", + "profileNamePlaceholder": "Имя профиля (например, Личный кабинет)", + "saveCurrent": "Сохранить текущий", + "codexAuthNotePrefix": "Кодекс использует", + "codexAuthNoteMiddle": "с", + "codexAuthNoteSuffix": "Нажмите «Применить» для автоматической настройки.", + "claudeManualConfiguration": "Клод CLI — ручная настройка", + "codexManualConfiguration": "Интерфейс командной строки Codex — ручная настройка", + "droidManualConfiguration": "Заводской дроид – ручная настройка", + "openClawManualConfiguration": "Открытый коготь — ручная настройка", + "clineManualConfiguration": "Ручная настройка Cline", + "kiloManualConfiguration": "Ручная настройка кода Kilo", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE с MITM", + "claude": "Антропный код Клода CLI", + "codex": "Интерфейс командной строки Кодекса OpenAI", + "droid": "Искусственный интеллект заводского дроида", + "openclaw": "Открытый ИИ-помощник когтя", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Интерфейс командной строки Kilo Code AI Assistant", + "cursor": "Редактор кода курсора AI", + "continue": "Продолжить AI-помощник" + }, + "guides": { + "cursor": { + "notes": { + "0": "Для использования этой функции требуется учетная запись Cursor Pro.", + "1": "Курсор маршрутизирует запросы через собственный сервер, поэтому локальная конечная точка не поддерживается. Пожалуйста, включите Cloud Endpoint в настройках." + }, + "steps": { + "1": { + "title": "Открыть настройки", + "desc": "Зайдите в Настройки -> Модели." + }, + "2": { + "title": "Включить API OpenAI", + "desc": "Включите опцию «Ключ OpenAI API»." + }, + "3": { + "title": "Базовый URL" + }, + "4": { + "title": "API-ключ" + }, + "5": { + "title": "Добавить пользовательскую модель", + "desc": "Нажмите «Просмотреть всю модель» -> «Добавить пользовательскую модель»." + }, + "6": { + "title": "Выберите модель" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Открыть конфигурацию", + "desc": "Открыть файл конфигурации «Продолжить»" + }, + "2": { + "title": "API-ключ" + }, + "3": { + "title": "Выберите модель" + }, + "4": { + "title": "Добавить конфигурацию модели", + "desc": "Добавьте следующую конфигурацию в массив моделей:" + } + } + } + } + }, + "combos": { + "title": "Комбо", + "description": "Создавайте комбинации моделей с взвешенной маршрутизацией и поддержкой резервного варианта.", + "createCombo": "Создать комбо", + "editCombo": "Редактировать комбо", + "deleteCombo": "Удалить комбо", + "noModels": "Нет моделей", + "noModelsYet": "Модели еще не добавлены", + "addModel": "Добавить модель", + "addModelToCombo": "Добавить модель в комбинацию", + "routingStrategy": "Стратегия маршрутизации", + "maxRetries": "Макс. повторов", + "timeout": "Тайм-аут (мс)", + "healthcheck": "Проверка здоровья", + "priority": "Приоритет", + "fallback": "Резервный вариант", + "roundRobin": "Круговая система", + "random": "Случайный", + "leastLatency": "Наименьшая задержка", + "comboName": "Имя комбинации", + "comboNamePlaceholder": "мое комбо", + "deleteConfirm": "Удалить это комбо?", + "noCombosYet": "Комбинаций пока нет", + "comboCreated": "Комбо успешно создано", + "comboUpdated": "Комбо успешно обновлено", + "comboDeleted": "Комбо удалено.", + "failedCreate": "Не удалось создать комбо", + "failedUpdate": "Не удалось обновить комбо.", + "errorCreating": "Ошибка создания комбо", + "errorUpdating": "Ошибка обновления комбо", + "errorDeleting": "Ошибка удаления комбо.", + "testFailed": "Тестовый запрос не выполнен", + "failedToggle": "Не удалось переключить комбо.", + "testResults": "Результаты теста — {name}", + "resolvedBy": "Решено:", + "more": "+{count} подробнее", + "reqs": "требования", + "success": "успех", + "proxyConfigured": "Прокси настроен", + "copyComboName": "Скопировать название комбинации", + "enableCombo": "Включить комбо", + "disableCombo": "Отключить комбо", + "testCombo": "Тестовое комбо", + "duplicate": "Дублировать", + "proxyConfig": "Конфигурация прокси", + "nameRequired": "Требуется имя", + "nameInvalid": "Только буквы, цифры, -, _, / и . разрешено", + "nameHint": "Буквы, цифры, -, _, / и . разрешено", + "priorityDesc": "Последовательный откат: сначала пробуется модель 1, затем 2 и т. д.", + "weightedDesc": "Распределяет трафик по весовому проценту с резервным вариантом", + "roundRobinDesc": "Круговое распределение: каждый запрос переходит к следующей модели по очереди.", + "randomDesc": "Равномерный случайный выбор, затем возврат к оставшимся моделям", + "leastUsedDesc": "Выбирает модель с наименьшим количеством запросов, балансируя нагрузку с течением времени.", + "costOptimizedDesc": "Маршруты к самой дешевой модели в первую очередь на основе цены", + "models": "Модели", + "autoBalance": "Автобаланс", + "advancedSettings": "Расширенные настройки", + "retryDelay": "Задержка повтора (мс)", + "concurrencyPerModel": "Параллелизм/модель", + "queueTimeout": "Тайм-аут очереди (мс)", + "advancedHint": "Оставьте пустым, чтобы использовать глобальные значения по умолчанию. Они переопределяют настройки каждого провайдера.", + "moveUp": "Вверх", + "moveDown": "Двигаться вниз", + "removeModel": "Удалить", + "saving": "Сохранение...", + "weighted": "Взвешенный", + "leastUsed": "Наименее используемый", + "costOpt": "Цена-опция" + }, + "costs": { + "title": "Затраты", + "budget": "Бюджет", + "totalCost": "Общая стоимость", + "breakdown": "Распределение затрат", + "noData": "Нет данных о стоимости", + "byModel": "По модели", + "byProvider": "По поставщику" + }, + "endpoint": { + "title": "Конечная точка API", + "available": "Доступные конечные точки", + "cloudProxy": "Облачный прокси", + "disableConfirm": "Вы уверены, что хотите отключить облачный прокси?", + "baseUrl": "Базовый URL", + "apiKeyLabel": "API-ключ", + "registeredKeys": "Зарегистрированные ключи", + "chatCompletions": "Завершения чата", + "responses": "Ответы", + "listModels": "Получение списка моделей", + "usingCloudProxy": "Использование облачного прокси", + "usingLocalServer": "Использование локального сервера", + "machineId": "Идентификатор машины: {id}...", + "disableCloud": "Отключить облако", + "enableCloud": "Включить облако", + "modelsAcrossEndpoints": "{models} модели на {endpoints} конечных точках", + "chatDesc": "Потоковое и непотоковое чат со всеми провайдерами", + "embeddings": "Вложения", + "embeddingsDesc": "Встраивание текста для конвейеров поиска и RAG", + "imageGeneration": "Генерация изображений", + "imageDesc": "Генерация изображений из текстовых подсказок", + "rerank": "Изменить рейтинг", + "rerankDesc": "Изменение ранжирования документов по релевантности запросу", + "audioTranscription": "Аудио транскрипция", + "audioTranscriptionDesc": "Транскрипция аудиофайлов в текст (шепотом)", + "textToSpeech": "Преобразование текста в речь", + "textToSpeechDesc": "Преобразование текста в естественно звучащую речь", + "moderations": "Модерации", + "moderationsDesc": "Модерация контента и классификация безопасности", + "enableCloudTitle": "Включить облачный прокси", + "whatYouGet": "Что вы получите", + "cloudBenefitAccess": "Доступ к вашему API из любой точки мира", + "cloudBenefitShare": "Легко делитесь конечной точкой со своей командой", + "cloudBenefitPorts": "Нет необходимости открывать порты или настраивать брандмауэр", + "cloudBenefitEdge": "Быстрая глобальная периферийная сеть", + "cloudSessionNote": "Cloud сохранит ваш сеанс аутентификации в течение 1 дня. Если он не используется, он будет автоматически удален.", + "cloudUnstableNote": "Cloud в настоящее время нестабильно работает с Claude Code OAuth в некоторых случаях.", + "cloudConnected": "Облачный прокси подключен!", + "connectingToCloud": "Подключение к облаку...", + "verifyingConnection": "Проверка соединения...", + "connecting": "Подключение...", + "verifying": "Проверка...", + "connected": "Подключено!", + "disableCloudTitle": "Отключить облачный прокси", + "disableWarning": "Все сеансы аутентификации будут удалены из облака.", + "syncingData": "Синхронизация последних данных...", + "disablingCloud": "Отключение облака...", + "syncing": "Синхронизация...", + "disabling": "Отключение...", + "cloudConnectedVerified": "Облачный прокси подключен и проверен!", + "connectedVerificationPending": "Подключено — ожидается проверка", + "connectedVerificationPendingWithError": "Подключено — ожидается проверка: {error}", + "cloudDisabledSuccess": "Облако успешно отключено", + "syncedSuccess": "Синхронизировано успешно", + "failedDisable": "Не удалось отключить облако.", + "failedEnable": "Не удалось включить облако", + "cloudRequestTimeout": "Тайм-аут запроса облака", + "cloudRequestFailed": "Запрос в облако не выполнен.", + "cloudWorkerUnreachable": "Не удалось связаться с облачным работником. Убедитесь, что облачная служба запущена (npm run dev в /cloud).", + "connectionFailed": "Соединение не удалось", + "syncFailed": "Не удалось синхронизировать облачные данные.", + "providerModelsTitle": "{provider} — Модели", + "noModelsForProvider": "Нет доступных моделей для этого поставщика.", + "chat": "Чат", + "embedding": "Встраивание", + "image": "Изображение", + "custom": "обычай", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Здоровье системы", + "description": "Мониторинг вашего экземпляра OmniRoute в режиме реального времени", + "healthy": "Здоровый", + "degraded": "Деградированный", + "down": "Вниз", + "uptime": "Время работы", + "memory": "Память", + "memoryRss": "Память (RSS)", + "heap": "Куча", + "cpu": "ЦП", + "database": "База данных", + "version": "Версия", + "lastCheck": "Последняя проверка", + "providerHealth": "Здоровье поставщика", + "systemMetrics": "Системные метрики", + "tokenHealth": "Здоровье токена", + "refreshAll": "Обновить все", + "checkNow": "Проверьте сейчас", + "loadingHealth": "Загрузка данных о состоянии здоровья...", + "failedToLoad": "Не удалось загрузить данные о состоянии: {error}.", + "retry": "Повторить попытку", + "allOperational": "Все системы в рабочем состоянии", + "issuesDetected": "Обнаружены системные проблемы", + "updatedAt": "Обновлен {time}", + "latency": "Задержка", + "latencyP50": "стр50", + "latencyP95": "стр.95", + "latencyP99": "стр.99", + "millisecondsShort": "{value}мс", + "notAvailable": "—", + "totalRequests": "Всего запросов", + "noDataYet": "Данных пока нет", + "promptCache": "Подскажите кэш", + "entries": "Записи", + "hitRate": "Скорость попадания", + "hitsMisses": "Попадания/промахи", + "signatureCache": "Кэш подписей", + "signatureDefaults": "По умолчанию", + "signatureTool": "Инструмент", + "signatureFamily": "Семья", + "signatureSession": "Сессия", + "recovering": "Восстановление", + "noCBData": "Данные по автоматическому выключателю отсутствуют. Сначала сделайте несколько запросов.", + "providerHealthStatusAria": "Состояние здоровья поставщика", + "issuesLabel": "Обнаружены проблемы", + "operational": "Оперативный", + "providers": "Провайдеры", + "healthyCount": "{count} здоров", + "nodeVersion": "Узел {version}", + "failures": "{count} сбой", + "failuresPlural": "{count} сбоев", + "lastFailure": "Последний", + "rateLimitStatus": "Статус ограничения скорости", + "activeLimiters": "{count} активный ограничитель", + "activeLimitersPlural": "{count} активные ограничители", + "queued": "В очереди", + "queuedCount": "{count} поставлен в очередь", + "running": "бег", + "runningCount": "{count} работает", + "ok": "ОК", + "activeLockouts": "Активные блокировки", + "resetConfirm": "Вернуть все автоматические выключатели в исправное состояние? Это очистит все счетчики сбоев и вернет всех поставщиков в рабочее состояние.", + "resetAllTitle": "Верните все автоматические выключатели в исправное состояние.", + "resetting": "Сброс...", + "resetAll": "Сбросить все", + "until": "До {time}" + }, + "limits": { + "title": "Лимиты и квоты", + "rateLimit": "Ограничение скорости", + "remaining": "Осталось", + "requestsPerMinute": "Запросов/мин", + "tokensPerMinute": "Токенов/мин", + "dailyLimit": "Дневной лимит" + }, + "logs": { + "title": "Журналы", + "requestLogs": "Запрос журналов", + "proxyLogs": "Журналы прокси", + "auditLog": "Журнал аудита", + "console": "Консоль", + "auditLogDesc": "Административные действия и события безопасности", + "loading": "Загрузка...", + "refresh": "Обновить", + "filterByAction": "Фильтровать по действию...", + "filterByActor": "Фильтровать по актеру...", + "filterEntriesAria": "Фильтрация записей журнала аудита", + "filterByActionTypeAria": "Фильтровать по типу действия", + "filterByActorAria": "Фильтровать по актеру", + "refreshAuditLogAria": "Обновить журнал аудита", + "tableAria": "Записи журнала аудита", + "failedFetchAuditLog": "Не удалось получить журнал аудита.", + "showing": "Показаны записи {count} (смещение {offset})", + "search": "Поиск", + "timestamp": "Временная метка", + "action": "Действие", + "actor": "Актер", + "target": "Цель", + "details": "Подробности", + "ipAddress": "IP-адрес", + "notAvailable": "—", + "noEntries": "Записи журнала аудита не найдены", + "previous": "Предыдущий", + "next": "Далее" + }, + "onboarding": { + "welcome": "Добро пожаловать", + "security": "Безопасность", + "test": "Тест", + "ready": "Готово!", + "setPassword": "Установить пароль", + "addProvider": "Добавьте своего первого провайдера", + "getStarted": "Начать", + "skip": "Пропустить", + "skipWizard": "Полностью пропустить мастер", + "skipPassword": "Пропустить установку пароля", + "skipAndContinue": "Пропустить и продолжить", + "passwordLabel": "Пароль", + "confirmPassword": "Подтвердите пароль", + "enterPassword": "Введите пароль", + "confirmPasswordPlaceholder": "Подтвердите пароль", + "passwordsMismatch": "Пароли не совпадают", + "setupComplete": "Настройка завершена!", + "goToDashboard": "Перейти в личный кабинет →", + "welcomeDesc": "OmniRoute — это ваш локальный прокси-сервер AI API. Он направляет запросы нескольким поставщикам искусственного интеллекта с балансировкой нагрузки, аварийным переключением и отслеживанием использования.", + "multiProvider": "Мультипровайдер", + "usageTracking": "Отслеживание использования", + "apiKeyMgmt": "Управление ключами API", + "securityDesc": "Установите пароль для защиты вашей панели управления или пропустите этот шаг.", + "providerDesc": "Подключите своего первого поставщика искусственного интеллекта. Вы можете добавить больше позже.", + "apiKeyRequired": "Ключ API (обязательно)", + "customUrlOptional": "Пользовательский URL-адрес (необязательно)", + "testDesc": "Давайте проверим, работает ли подключение к вашему провайдеру.", + "runTest": "Запустить тест соединения", + "testingConnection": "Тестирование соединения...", + "connectionSuccessful": "Подключение успешно! Ваш провайдер готов.", + "noProviderFound": "Поставщик не найден. Вы можете добавить его из панели управления позже.", + "testFailed": "Тест не пройден, но вы можете настроить это позже.", + "couldNotTest": "Не удалось проверить сейчас. Вы можете протестировать с панели управления.", + "doneDesc": "Все готово! Ваш экземпляр OmniRoute настроен и готов к прокси-запросам AI.", + "yourEndpoint": "Ваша конечная точка:", + "continue": "Продолжить", + "retry": "Повторить попытку", + "failedSetPassword": "Не удалось установить пароль. Попробуйте еще раз.", + "failedAddProvider": "Не удалось добавить поставщика. Попробуйте еще раз.", + "connectionError": "Ошибка подключения. Пожалуйста, попробуйте еще раз.", + "provider": "Поставщик" + }, + "providers": { + "title": "Провайдеры", + "addProvider": "Добавить поставщика", + "editProvider": "Изменить поставщика", + "deleteProvider": "Удалить поставщика", + "noProviders": "Поставщики не настроены", + "modelAvailability": "Доступность модели", + "accounts": "Счета", + "newAccount": "Новая учетная запись", + "deleteConfirm": "Вы уверены, что хотите удалить этого провайдера?", + "testing": "Тестирование...", + "testConnection": "Тестовое соединение", + "testSuccess": "Соединение успешно", + "testFailed": "Соединение не удалось", + "available": "Доступно", + "cooldown": "Перезарядка", + "unavailable": "Недоступно", + "unknown": "Неизвестно", + "oauthLabel": "OAuth", + "compatibleLabel": "Совместимый", + "chat": "Чат", + "responses": "Ответы", + "messages": "Сообщения", + "oauthProviders": "Поставщики OAuth", + "freeProviders": "Бесплатные провайдеры", + "apiKeyProviders": "Поставщики ключей API", + "compatibleProviders": "Поставщики, совместимые с ключами API", + "testAll": "Проверить все", + "testAllOAuth": "Проверьте все соединения OAuth", + "testAllFree": "Проверьте все бесплатные соединения", + "testAllApiKey": "Проверьте все соединения API-ключей", + "testAllCompatible": "Проверьте все совместимые соединения", + "connected": "{count} подключено", + "errorCount": "{count} Ошибка ({code})", + "errorCountNoCode": "{count} Ошибка", + "noConnections": "Нет соединений", + "disabled": "Отключено", + "enableProvider": "Включить провайдера", + "disableProvider": "Отключить провайдера", + "testResults": "Результаты испытаний", + "noCompatibleYet": "Совместимых поставщиков пока не добавлено", + "compatibleHint": "Используйте кнопки выше, чтобы добавить конечные точки, совместимые с OpenAI или Anthropic.", + "addOpenAICompatible": "Добавить совместимость с OpenAI", + "addAnthropicCompatible": "Добавить антропную совместимость", + "addNewProvider": "Добавить нового провайдера", + "backToProviders": "Вернуться к Провайдерам", + "configureNewProvider": "Настройте нового поставщика ИИ для использования с вашими приложениями.", + "providerLabel": "Поставщик", + "selectProvider": "Выберите провайдера", + "selectedProvider": "Выбранный провайдер", + "authMethod": "Метод аутентификации", + "apiKeyLabel": "API-ключ", + "apiKeyRequired": "Требуется ключ API", + "selectProviderRequired": "Пожалуйста, выберите провайдера", + "enterApiKey": "Введите свой ключ API", + "apiKeySecure": "Ваш ключ API будет зашифрован и надежно сохранен.", + "oauth2Connect": "Подключиться с помощью OAuth2", + "oauth2Label": "ОАут2", + "oauth2Desc": "Подключите свою учетную запись, используя аутентификацию OAuth2.", + "displayName": "Отображаемое имя", + "displayNamePlaceholder": "например, Production API, среда разработки", + "displayNameHint": "Необязательно. Понятное имя для идентификации этой конфигурации.", + "active": "Активный", + "activeDescription": "Включите этого поставщика для использования в ваших приложениях.", + "cancel": "Отмена", + "createProvider": "Создать поставщика", + "failedCreate": "Не удалось создать поставщика", + "errorOccurred": "Произошла ошибка. Пожалуйста, попробуйте еще раз.", + "modelStatus": "Статус модели", + "allModelsOperational": "Все модели в рабочем состоянии", + "modelsWithIssues": "{count} модели с проблемами", + "allModelsNormal": "Все модели реагируют нормально.", + "cooldownCleared": "Время восстановления для {model} очищено.", + "failedClearCooldown": "Не удалось очистить время восстановления", + "loadingAvailability": "Загрузка доступности модели...", + "clearCooldown": "Очистить", + "clearing": "Очистка...", + "until": "До {time}", + "providerTestFailed": "Тест провайдера не пройден", + "modeTest": "{mode} Тест", + "passedCount": "{count} пройден", + "failedCount": "{count} не удалось", + "testedCount": "{count} проверено", + "millisecondsAbbr": "{value}мс", + "okShort": "ОК", + "errorShort": "ОШИБКА", + "noActiveConnectionsInGroup": "Для этой группы не найдено активных соединений.", + "allTestsPassed": "Все тесты {total} пройдены", + "testSummary": "{passed}/{total} пройден, {failed} не выполнен", + "nameLabel": "Имя", + "prefixLabel": "Префикс", + "baseUrlLabel": "Базовый URL", + "apiTypeLabel": "Тип API", + "prefixHint": "Обязательно. Уникальный префикс для названий моделей.", + "nameHint": "Обязательно. Дружественная метка для этого узла.", + "baseUrlHint": "Обязательно.  Базовый URL-адрес API поставщика.", + "anthropicPrefixPlaceholder": "ac-прод", + "openaiPrefixPlaceholder": "oc-прод", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Подтвердить соединение", + "validating": "Проверка...", + "connectionValid": "Соединение действительно!", + "connectionFailed": "Соединение не удалось. Проверьте URL и ключ.", + "testKeyLabel": "Тестовый ключ API", + "testKeyPlaceholder": "sk-... (только для проверки)", + "providerNotFound": "Провайдер не найден", + "deleteConnectionConfirm": "Удалить это соединение?", + "failedSetAlias": "Не удалось установить псевдоним", + "failedSaveConnection": "Не удалось сохранить соединение.", + "failedSaveConnectionRetry": "Не удалось сохранить соединение. Пожалуйста, попробуйте еще раз.", + "failedRetestConnection": "Не удалось повторно проверить соединение", + "deleteCompatibleNodeConfirm": "Удалить этот {type} Совместимый узел?", + "anthropicCompatibleDetails": "Антропные совместимые детали", + "openaiCompatibleDetails": "Подробности совместимости с OpenAI", + "messagesApi": "API сообщений", + "responsesApi": "API ответов", + "chatCompletions": "Завершения чата", + "importingModels": "Импорт...", + "importFromModels": "Импорт из /модели", + "addConnectionToImport": "Добавьте соединение, чтобы включить импорт.", + "noModelsConfigured": "Ни одна модель не настроена", + "connectionCount": "{count} соединение(я)", + "fetchingModels": "Загрузка доступных моделей...", + "failedFetchModels": "Не удалось получить модели.", + "noModelsFound": "Модели не найдены", + "importFailed": "Импорт не удался", + "noNewModelsAdded": "Новых моделей не добавлялось.", + "adding": "Добавление...", + "importingModelsTitle": "Импорт моделей", + "copyModel": "Копировать модель", + "removeModel": "Удалить модель", + "rateLimitProtected": "Защищено", + "rateLimitUnprotected": "незащищенный", + "enableRateLimitProtection": "Нажмите, чтобы включить защиту от ограничения скорости", + "disableRateLimitProtection": "Нажмите, чтобы отключить защиту ограничения скорости", + "productionKey": "Производственный ключ", + "enterNewApiKey": "Введите новый ключ API", + "optional": "Необязательно", + "anthropicCompatibleName": "Антропная совместимость", + "openaiCompatibleName": "Совместимость с OpenAI", + "failedImportModels": "Не удалось импортировать модели.", + "noModelsReturnedFromEndpoint": "Ни одна модель не возвращена из конечной точки /models.", + "importingModelsProgress": "Импорт {current} из {total} моделей...", + "foundModelsStartingImport": "Найдено {count} моделей. Начинаем импорт...", + "importingModelById": "Импорт {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} успешно импортирован!", + "noNewModelsAddedExisting": "Новых моделей не добавлялось (все уже есть).", + "importDoneCount": "✓ Готово! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Произошла непредвиденная ошибка", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "сообщения", + "responsesPath": "ответы", + "chatCompletionsPath": "чат/дополнения", + "add": "Добавить", + "edit": "Редактировать", + "delete": "Удалить", + "anthropic": "антропный", + "openai": "ОпенАИ", + "singleConnectionPerCompatible": "Для каждого совместимого узла разрешено только одно соединение. Добавьте еще один узел, если вам нужно больше соединений.", + "connections": "Соединения", + "providerProxyTitleConfigured": "Прокси-сервер провайдера: {host}", + "configured": "настроен", + "providerProxyConfigureHint": "Настроить прокси для всех подключений этого провайдера", + "providerProxy": "Прокси-сервер провайдера", + "noConnectionsYet": "Пока нет подключений", + "addFirstConnectionHint": "Добавьте первое соединение, чтобы начать", + "addConnection": "Добавить соединение", + "availableModels": "Доступные модели", + "pageAutoRefresh": "Страница обновится автоматически...", + "statusDisabled": "отключен", + "statusConnected": "подключен", + "statusRuntimeIssue": "проблема во время выполнения", + "statusAuthFailed": "аутентификация не удалась", + "statusRateLimited": "ставка ограничена", + "statusNetworkIssue": "проблема с сетью", + "statusTestUnsupported": "тест не поддерживается", + "statusUnavailable": "недоступен", + "statusFailed": "не удалось", + "statusError": "ошибка", + "oauthAccount": "Учетная запись OAuth", + "errorTypeRuntime": "Локальная среда выполнения", + "errorTypeUpstreamAuth": "Авторизация восходящего потока", + "errorTypeMissingCredential": "Отсутствуют учетные данные", + "errorTypeRefreshFailed": "Обновить не удалось", + "errorTypeTokenExpired": "Срок действия токена истек", + "errorTypeRateLimited": "Скорость ограничена", + "errorTypeUpstreamUnavailable": "Восходящий поток недоступен", + "errorTypeNetworkError": "Ошибка сети", + "errorTypeTestUnsupported": "Тест не поддерживается", + "errorTypeUpstreamError": "Ошибка восходящего потока", + "proxySourceGlobal": "Глобальный", + "proxySourceProvider": "Поставщик", + "proxySourceKey": "Ключ", + "proxyConfiguredBySource": "Прокси ({source}): {host}", + "autoPriority": "Авто: {priority}", + "proxy": "Прокси", + "retestAuthentication": "Повторная проверка подлинности", + "retest": "Повторное тестирование", + "disableConnection": "Отключить соединение", + "enableConnection": "Включить соединение", + "reauthenticateConnection": "Повторно аутентифицировать это соединение", + "proxyConfig": "Конфигурация прокси", + "aliasExistsAlert": "Псевдоним «{alias}» уже существует. Используйте другую модель или измените существующий псевдоним.", + "openRouterAnyModelHint": "OpenRouter поддерживает любую модель. Добавляйте модели и создавайте псевдонимы для быстрого доступа.", + "modelIdFromOpenRouter": "Идентификатор модели (из OpenRouter)", + "openRouterModelPlaceholder": "антропный/Клод-3-опус", + "customModels": "Пользовательские модели", + "customModelsHint": "Добавьте идентификаторы моделей, которых нет в списке по умолчанию. Они будут доступны для маршрутизации.", + "modelId": "Идентификатор модели", + "customModelPlaceholder": "например gpt-4.5-турбо", + "loading": "Загрузка...", + "removeCustomModel": "Удалить пользовательскую модель", + "noCustomModels": "Пользовательские модели пока не добавлены.", + "allSuggestedAliasesExist": "Все предложенные псевдонимы уже существуют. Пожалуйста, выберите другую модель или удалите конфликтующие псевдонимы.", + "failedSaveCustomModel": "Не удалось сохранить пользовательскую модель.", + "modelAddedSuccess": "Модель {modelId} успешно добавлена", + "failedAddModelTryAgain": "Не удалось добавить модель. Пожалуйста, попробуйте еще раз.", + "failedSaveImportedModel": "Не удалось сохранить импортированную модель в пользовательскую базу данных.", + "failedImportModelsTryAgain": "Не удалось импортировать модели. Пожалуйста, попробуйте еще раз.", + "failedRemoveModelFromDatabase": "Не удалось удалить модель из базы данных.", + "modelRemovedSuccess": "Модель успешно удалена", + "failedDeleteModelTryAgain": "Не удалось удалить модель. Пожалуйста, попробуйте еще раз.", + "compatibleModelsDescription": "Добавьте модели, совместимые с {type}, вручную или импортируйте их из конечной точки /models.", + "anthropicCompatibleModelPlaceholder": "Клод-3-опус-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Проверка ключа API не удалась. Пожалуйста, проверьте свой ключ и повторите попытку.", + "addProviderApiKeyTitle": "Добавьте ключ API {provider}", + "checking": "Проверка...", + "check": "Проверить", + "valid": "Действителен", + "invalid": "Недействительный", + "creating": "Создание...", + "validationChecksAnthropicCompatible": "Проверка проверяет {provider} путем проверки ключа API.", + "validationChecksOpenAiCompatible": "Проверка проверяет {provider} через /models по вашему базовому URL-адресу.", + "priorityLabel": "Приоритет", + "saving": "Сохранение...", + "save": "Сохранить", + "editConnection": "Изменить соединение", + "accountName": "Имя учетной записи", + "email": "электронная почта", + "healthCheckMinutes": "Проверка здоровья (мин)", + "healthCheckHint": "Интервал обновления упреждающего токена. 0 = отключено.", + "failedTestConnection": "Не удалось проверить соединение", + "failed": "Не удалось", + "leaveBlankKeepCurrentApiKey": "Оставьте пустым, чтобы сохранить текущий ключ API.", + "editCompatibleTitle": "Изменить совместимость {type}", + "compatibleBaseUrlHint": "Используйте базовый URL-адрес (оканчивающийся на /v1) для вашего {type}-совместимого API.", + "apiKeyForCheck": "API-ключ (для проверки)", + "compatibleProdPlaceholder": "{type} Совместимость (Прод.)" + }, + "settings": { + "title": "Настройки", + "general": "Общий", + "security": "Безопасность", + "appearance": "Внешний вид", + "routing": "Маршрутизация", + "cache": "Кэш", + "resilience": "Устойчивость", + "systemPrompt": "Системная подсказка", + "thinkingBudget": "Думая о бюджете", + "proxy": "Прокси", + "pricing": "Цены", + "storage": "Хранение", + "policies": "Политика", + "ipFilter": "IP-фильтр", + "comboDefaults": "Комбинированные значения по умолчанию", + "fallbackChains": "Резервные цепочки", + "changePassword": "Изменить пароль", + "enablePassword": "Включить пароль", + "darkMode": "Темный режим", + "lightMode": "Светлый режим", + "systemTheme": "Системная тема", + "enableCache": "Включить кеш", + "cacheTTL": "Срок жизни кэша", + "maxCacheSize": "Максимальный размер кэша", + "clearCache": "Очистить кэш", + "cacheHits": "Попадания в кэш", + "cacheMisses": "Промахи в кэше", + "hitRate": "Скорость попадания", + "cacheEntries": "Записи кэша", + "circuitBreaker": "Автоматический выключатель", + "retryPolicy": "Политика повтора", + "maxRetries": "Макс. повторов", + "retryDelay": "Задержка повтора", + "timeoutMs": "Тайм-аут (мс)", + "enableSystemPrompt": "Включить системную подсказку", + "systemPromptText": "Текст системной подсказки", + "enableThinking": "Включить мышление", + "maxThinkingTokens": "Максимальное количество жетонов мышления", + "enableProxy": "Включить прокси", + "proxyUrl": "URL-адрес прокси-сервера", + "pricingRates": "Формат ценообразования", + "currentPricing": "Текущий обзор цен", + "loadingPricing": "Загрузка данных о ценах...", + "noPricing": "Нет данных о ценах", + "input": "Ввод", + "output": "Выход", + "cached": "Кэшированный", + "reasoning": "Рассуждение", + "cacheCreation": "Создание кэша", + "customPricing": "Индивидуальные цены", + "databaseSize": "Размер базы данных", + "backupDb": "Резервное копирование базы данных", + "restoreDb": "Восстановить базу данных", + "exportData": "Экспортировать данные", + "importData": "Импортировать данные", + "clearData": "Очистить все данные", + "clearDataConfirm": "Это приведет к безвозвратному удалению всех данных. Вы уверены?", + "enableRequestLogs": "Включить журналы запросов", + "logRetention": "Хранение журнала", + "ipWhitelist": "Белый список IP-адресов", + "ipBlacklist": "Черный список IP-адресов", + "addIP": "Добавить IP", + "savedSuccessfully": "Настройки успешно сохранены", + "ai": "ИИ", + "advanced": "Расширенный", + "localMode": "Локальный режим — все данные хранятся на вашем компьютере.", + "settingsSectionsAria": "Разделы настроек", + "switchThemes": "Переключение между светлой и темной темами", + "themeSelectionAria": "Выбор темы", + "themeLight": "Свет", + "themeDark": "Темный", + "themeSystem": "Система", + "hideHealthLogs": "Скрыть журналы проверки работоспособности", + "hideHealthLogsDesc": "Если включено, подавлять сообщения [HealthCheck] в консоли сервера.", + "promptCache": "Подскажите кэш", + "flushCache": "Очистить кэш", + "flushing": "Промывка…", + "size": "Размер", + "hits": "Хиты", + "evictions": "Выселения", + "loadingCacheStats": "Загрузка статистики кеша…", + "globalProxy": "Глобальный прокси", + "globalProxyDesc": "Настройте глобальный исходящий прокси-сервер для всех вызовов API. Отдельные поставщики, комбинации и ключи могут переопределить это.", + "noGlobalProxy": "Глобальный прокси не настроен", + "globalLabel": "Глобальный", + "configure": "Настроить", + "globalSystemPrompt": "Глобальная системная подсказка", + "systemPromptDesc": "Внедряется во все запросы на уровне прокси.", + "saved": "Сохранено", + "systemPromptPlaceholder": "Введите системное приглашение для внедрения во все запросы...", + "systemPromptHint": "Это приглашение добавляется к системному сообщению каждого запроса. Используйте для глобальных инструкций, рекомендаций по безопасности или правил форматирования ответов.", + "chars": "{count} символов", + "thinkingBudgetTitle": "Думая о бюджете", + "thinkingBudgetDesc": "Контролируйте использование токенов рассуждения ИИ во всех запросах", + "passthrough": "Сквозное прохождение", + "passthroughDesc": "Никаких изменений — клиент контролирует продуманный бюджет", + "auto": "Авто", + "autoDesc": "Удалите всю конфигурацию мышления — пусть решает провайдер", + "custom": "Пользовательский", + "customDesc": "Установите фиксированный бюджет токенов для всех запросов.", + "adaptive": "Адаптивный", + "adaptiveDesc": "Масштабируйте бюджет в зависимости от сложности запроса", + "effortNone": "Нет (0 токенов)", + "effortLow": "Низкий (1 тыс. токенов)", + "effortMedium": "Средний (10 тыс. токенов)", + "effortHigh": "Высокий (128 тыс. токенов)", + "tokenBudget": "Бюджет токена", + "tokens": "жетоны", + "baseEffortLevel": "Базовый уровень усилий", + "adaptiveHint": "Адаптивный режим масштабируется от этого базового уровня в зависимости от количества сообщений, использования инструмента и длины подсказки.", + "requireLogin": "Требовать вход", + "requireLoginDesc": "При включении приборная панель требует пароль. Когда ВЫКЛ, доступ без входа в систему.", + "currentPassword": "Текущий пароль", + "enterCurrentPassword": "Введите текущий пароль", + "newPassword": "Новый пароль", + "enterNewPassword": "Введите новый пароль", + "confirmPassword": "Подтвердите новый пароль", + "confirmPasswordPlaceholder": "Подтвердите новый пароль", + "passwordsNoMatch": "Пароли не совпадают", + "passwordUpdated": "Пароль успешно обновлен", + "failedUpdatePassword": "Не удалось обновить пароль", + "errorOccurred": "Произошла ошибка", + "updatePassword": "Обновить пароль", + "setPassword": "Установить пароль", + "apiEndpointProtection": "Защита конечных точек API", + "requireAuthModels": "Требовать ключ API для /models", + "requireAuthModelsDesc": "Если включено, конечная точка /v1/models возвращает 404 для неаутентифицированных запросов. Предотвращает обнаружение модели неавторизованными пользователями.", + "blockedProviders": "Заблокированные провайдеры", + "blockedProvidersDesc": "Скройте конкретных поставщиков из ответа /v1/models. Заблокированные поставщики не будут отображаться в списках моделей.", + "providersBlocked": "Поставщик(и) {count} заблокирован в /models", + "blockProviderTitle": "Блок {provider}", + "unblockProviderTitle": "Разблокировать {provider}", + "routingStrategy": "Стратегия маршрутизации", + "fillFirst": "Сначала заполните", + "fillFirstDesc": "Используйте учетные записи в порядке приоритета", + "roundRobin": "Круговая система", + "roundRobinDesc": "Перебирать все аккаунты", + "p2c": "P2C", + "p2cDesc": "Выберите 2 случайных, используйте более здоровый", + "random": "Случайный", + "randomDesc": "Случайный аккаунт для каждого запроса", + "leastUsed": "Наименее используемый", + "leastUsedDesc": "Выберите наименее использованную учетную запись", + "costOpt": "Опция стоимости", + "costOptDesc": "Предпочитаю самый дешевый доступный аккаунт", + "stickyLimit": "Липкий лимит", + "stickyLimitDesc": "Звонки на аккаунт до переключения", + "modelAliases": "Псевдонимы моделей", + "modelAliasesDesc": "Шаблоны подстановочных знаков для переназначения названий моделей • Используйте * и ?", + "aliasPatternPlaceholder": "Клод-сонет-*", + "aliasTargetPlaceholder": "Клод-сонет-4-20250514", + "pattern": "Узор", + "targetModel": "Целевая модель", + "add": "+ Добавить", + "session": "Сессия", + "sessionDetailsAria": "Детали сеанса", + "status": "Статус", + "authenticated": "Аутентифицированный", + "guest": "Гость", + "loginTime": "Время входа в систему", + "sessionAge": "Возраст сессии", + "browser": "Браузер", + "clearLocalData": "Очистить локальные данные", + "logout": "Выход из системы", + "clearLocalDataConfirm": "Удалить все локальные данные? Это сбросит ваши настройки.", + "unknown": "Неизвестно", + "systemActor": "система", + "ipAccessControl": "IP-контроль доступа", + "ipAccessControlDesc": "Блокировать или разрешать определенные IP-адреса", + "ipModeDisabled": "Отключено", + "ipModeBlacklist": "Черный список", + "ipModeWhitelist": "Белый список", + "ipModeWhitelistPriority": "Приоритет ВЛ", + "addIpAddress": "Добавить IP-адрес", + "ipAddressPlaceholder": "192.168.1.0/24 или 10.0.*.*", + "block": "+ Блокировать", + "allow": "+ Разрешить", + "blocked": "Заблокировано ({count})", + "allowed": "Разрешено ({count})", + "temporaryBans": "Временные баны ({count})", + "minLeft": "Осталось {min} м", + "auditLog": "Журнал аудита", + "searchAuditLogs": "Поиск в журналах аудита...", + "failedLoadAuditLog": "Не удалось загрузить журнал аудита.", + "noAuditEvents": "События аудита не найдены", + "action": "Действие", + "actor": "Актер", + "details": "Подробности", + "time": "Время", + "fallbackChainsTitle": "Резервные цепочки", + "fallbackChainsDesc": "Определить резервный порядок поставщика для каждой модели", + "addChain": "+ Добавить цепочку", + "modelName": "Название модели", + "modelNamePlaceholder": "Клод-сонет-4-20250514", + "providersCommaSeparated": "Поставщики (через запятую, в порядке приоритета)", + "providersCommaSeparatedPlaceholder": "антропный, опенай, близнецы", + "createChain": "Создать цепочку", + "noFallbackChains": "Никаких резервных цепочек", + "noFallbackChainsDesc": "Создайте цепочку, чтобы определить резервный порядок поставщика для модели.", + "loadingFallbackChains": "Загрузка резервных цепочек...", + "deleteChainConfirm": "Удалить резервную цепочку для \"{model}\"?", + "chainCreated": "Цепочка создана для {model}", + "chainDeleted": "Цепочка удалена для {model}.", + "failedCreateChain": "Не удалось создать цепочку.", + "failedDeleteChain": "Не удалось удалить цепочку.", + "deleteChain": "Удалить цепочку", + "fillModelAndProviders": "Пожалуйста, укажите название модели и поставщиков", + "addAtLeastOneProvider": "Добавьте хотя бы одного провайдера", + "comboDefaultsTitle": "Комбинированные значения по умолчанию", + "globalComboConfig": "Глобальная комбинированная конфигурация", + "defaultStrategy": "Стратегия по умолчанию", + "defaultStrategyDesc": "Применяется к новым комбинациям без явной стратегии.", + "comboStrategyAria": "Комбо-стратегия", + "priority": "Приоритет", + "weighted": "Взвешенный", + "maxRetriesLabel": "Макс. повторов", + "retryDelayLabel": "Задержка повтора (мс)", + "timeoutLabel": "Тайм-аут (мс)", + "healthCheck": "Проверка здоровья", + "healthCheckDesc": "Предварительная проверка доступности провайдера", + "trackMetrics": "Отслеживание показателей", + "trackMetricsDesc": "Запись показателей для каждого комбо-запроса", + "providerOverrides": "Переопределения поставщика", + "providerOverridesDesc": "Переопределить тайм-аут и повторные попытки для каждого поставщика. Настройки поставщика переопределяют глобальные настройки по умолчанию.", + "providerMaxRetriesAria": "{provider} максимальное количество повторов", + "providerTimeoutAria": "{provider} таймаут мс", + "removeProviderOverrideAria": "Удалить переопределение {provider}", + "newProviderNamePlaceholder": "например гугл, опенай...", + "newProviderNameAria": "Новое имя провайдера", + "retries": "повторные попытки", + "ms": "мс", + "saveComboDefaults": "Сохранить настройки комбинации по умолчанию", + "maxNestingDepth": "Максимальная глубина вложения", + "concurrencyPerModel": "Параллелизм/модель", + "queueTimeout": "Тайм-аут очереди (мс)", + "providerProfiles": "Профили поставщиков", + "providerProfilesDesc": "Отдельные настройки устойчивости для поставщиков OAuth (на основе сеанса) и API-ключей (измеренного). Поставщики OAuth имеют более строгие пороговые значения из-за более низких ограничений скорости.", + "oauthProviders": "Поставщики OAuth", + "apiKeyProviders": "Поставщики ключей API", + "transientCooldown": "Временное восстановление", + "rateLimitCooldown": "Время восстановления лимита скорости", + "maxBackoffLevel": "Максимальный уровень отсрочки", + "cbThreshold": "Порог CB", + "cbResetTime": "Время сброса выключателя", + "rateLimiting": "Ограничение скорости", + "rateLimitingDesc": "Поставщики ключей API автоматически ограничиваются по скорости безопасными значениями по умолчанию. Ограничения извлекаются из заголовков ответов и со временем адаптируются.", + "defaultSafetyNet": "Сеть безопасности по умолчанию", + "rpm": "об/мин", + "minGap": "Мин. разрыв", + "maxConcurrent": "Макс. одновременность", + "activeLimiters": "Активные лимитеры", + "noActiveLimiters": "Активных ограничителей скорости пока нет.", + "reservoir": "водохранилище", + "running": "Бег", + "queued": "В очереди", + "circuitBreakers": "Автоматические выключатели", + "breakerStateClosed": "Закрыто", + "breakerStateOpen": "Открыть", + "breakerStateHalfOpen": "Полуоткрытый", + "tripped": "{count} сработал", + "healthy": "{count} здоров", + "resetAll": "Сбросить все", + "noCircuitBreakers": "Автоматические выключатели пока не активны. Они создаются автоматически, когда запросы проходят через комбинированный конвейер.", + "failures": "{count} сбой(и)", + "policiesLocked": "Политики и заблокированные идентификаторы", + "allOperational": "Все системы в рабочем состоянии — никаких блокировок или срабатываний выключателей.", + "loadingPolicies": "Загрузка политик...", + "lockedIdentifiers": "Заблокированные идентификаторы", + "unlockedIdentifier": "Разблокировано: {identifier}", + "sinceDate": "с {date}", + "forceUnlock": "Принудительная разблокировка", + "unlocking": "Разблокировка...", + "failedUnlock": "Не удалось разблокировать", + "failedLoadWithStatus": "Не удалось загрузить: {status}.", + "failedLoadResilience": "Не удалось загрузить статус устойчивости.", + "saveFailed": "Сохранить не удалось", + "resetFailed": "Сбросить не удалось", + "loadingResilience": "Загрузка состояния устойчивости...", + "retry": "Повторить попытку", + "systemStorage": "Система и хранилище", + "allDataLocal": "Все данные хранятся локально на вашем компьютере.", + "databasePath": "Путь к базе данных", + "exportDatabase": "Экспорт базы данных", + "exportAll": "Экспортировать все (.tar.gz)", + "importDatabase": "Импортировать базу данных", + "confirmDbImport": "Подтвердить импорт базы данных", + "confirmDbImportDesc": "Это заменит все текущие данные содержимым из {file}. Резервная копия будет создана автоматически перед импортом.", + "yesImport": "Да, импорт", + "lastBackup": "Последняя резервная копия", + "noBackupYet": "Резервной копии пока нет", + "backupNow": "Резервное копирование сейчас", + "backupRestore": "Резервное копирование и восстановление", + "viewBackups": "Просмотр резервных копий", + "hide": "Скрыть", + "backupRetentionDesc": "Снимки базы данных создаются автоматически перед восстановлением и каждые 15 минут при изменении данных. Хранение: 24 часа в час + 30 ежедневных резервных копий с умной ротацией.", + "loadingBackups": "Загрузка резервных копий...", + "noBackupsYet": "Резервных копий пока нет. Резервные копии будут создаваться автоматически при изменении данных.", + "backupsAvailable": "Доступно {count} резервных копий", + "refresh": "Обновить", + "confirm": "Подтвердить?", + "yes": "Да", + "no": "Нет", + "restore": "Восстановить", + "invalidFileType": "Неверный тип файла. Принимаются только файлы .sqlite.", + "exportFailed": "Экспорт не удался", + "exportFailedWithError": "Не удалось экспортировать: {error}.", + "fullExportFailedWithError": "Не удалось выполнить полный экспорт: {error}.", + "backupCreated": "Резервная копия создана: {file}", + "restoreSuccess": "Восстановлено! {connections} соединений, {nodes} узлов, {combos} комбинаций, {apiKeys} ключей API.", + "importSuccess": "База данных импортирована! {connections} соединений, {nodes} узлов, {combos} комбинаций, {apiKeys} ключей API.", + "justNow": "только что", + "minutesAgo": "{count} мин назад", + "hoursAgo": "{count}ч назад", + "daysAgo": "{count}дн назад", + "backupReasonManual": "руководство", + "backupReasonPreRestore": "предварительное восстановление", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Никаких изменений с момента последнего резервного копирования", + "backupFailed": "Резервное копирование не выполнено", + "restoreFailed": "Восстановление не удалось", + "importFailed": "Импорт не удался", + "errorDuringRestore": "Произошла ошибка во время восстановления", + "errorDuringImport": "Во время импорта произошла ошибка", + "modelPricing": "Цены на модели", + "modelPricingDesc": "Настройка ставок стоимости для каждой модели • Все ставки указаны в токенах $/1 млн.", + "providers": "Провайдеры", + "registry": "Реестр", + "priced": "Цена", + "searchProvidersModels": "Поиск поставщиков или моделей...", + "showAll": "Показать все", + "noProvidersMatch": "Ни один поставщик не соответствует вашему запросу.", + "howPricingWorks": "Как работает ценообразование", + "cacheWrite": "Запись в кэш", + "unsaved": "несохраненный", + "resetDefaults": "Сбросить настройки по умолчанию", + "saveProvider": "Сохранить поставщика", + "saving": "Сохранение...", + "model": "Модель", + "models": "модели", + "moreProviders": "{count} больше поставщиков", + "withPricing": "с настроенной ценой", + "policiesCircuitBreakers": "Политики и автоматические выключатели", + "activeIssuesDetected": "Обнаружены активные проблемы", + "off": "Выкл.", + "resetPricingConfirm": "Сбросить все цены для {provider} до значений по умолчанию?", + "pricingDescInput": "Входные данные: токены, отправленные в модель.", + "pricingDescOutput": "Результат: сгенерированы токены", + "pricingDescCached": "Кэшировано: повторно используемый ввод (~ 50 % от частоты ввода)", + "pricingDescReasoning": "Рассуждение: жетоны мышления (возврат к выходу)", + "pricingDescCacheWrite": "Запись в кэш: создание записей в кэше (возврат к вводу)", + "pricingDescFormula": "Стоимость = (вход × входная_ставка) + (выход × выходная_ставка) + (кэширование × кэшированная_ставка) за миллион токенов.", + "pricingSettingsTitle": "Настройки цен", + "totalModels": "Всего моделей", + "active": "Активный", + "costCalculation": "Расчет стоимости", + "costCalculationDesc": "Затраты рассчитываются на основе использования токенов и ценовых ставок, настроенных для каждой модели.", + "pricingFormat": "Формат цен", + "pricingFormatDesc": "Все ставки указаны в токенах $/1M (долларов за миллион токенов).", + "tokenTypes": "Типы токенов", + "inputTokenDesc": "Стандартные токены подсказок", + "outputTokenDesc": "Жетоны завершения/ответа", + "cachedTokenDesc": "Кэшированные входные токены (обычно 50 % от скорости ввода)", + "reasoningTokenDesc": "Специальные жетоны рассуждения/мышления (возврат к скорости вывода)", + "cacheCreationTokenDesc": "Токены, используемые для создания записей в кэше (возврат к скорости ввода)", + "customPricingNote": "Вы можете переопределить цены по умолчанию для определенных моделей. Пользовательские переопределения имеют приоритет над ценами, определяемыми автоматически.", + "editPricing": "Изменить цену", + "viewFullDetails": "Посмотреть полную информацию" + }, + "translator": { + "title": "Переводчик", + "metaTitle": "Детская площадка для переводчиков | ОмниРоут", + "metaDescription": "Отладка, тестирование и визуализация преобразований форматов API между поставщиками.", + "playgroundTitle": "Площадка для переводчиков", + "playground": "Детская площадка", + "realtime": "Переводческая деятельность в режиме реального времени", + "chatTester": "Тестер чата", + "testBench": "Испытательный стенд", + "liveMonitor": "Живой монитор", + "modeDescriptionPlayground": "Вставьте любое тело запроса API и посмотрите, как OmniRoute преобразует его между форматами поставщика (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "modeDescriptionChatTester": "Отправляйте реальные запросы чата через OmniRoute и проверяйте полный цикл обработки: входные данные, переведенный запрос, ответ поставщика и переведенный вывод.", + "modeDescriptionTestBench": "Запускайте заранее определенные сценарии и сравнивайте совместимость поставщиков и моделей.", + "modeDescriptionLiveMonitor": "Наблюдайте за событиями перевода в режиме реального времени по мере прохождения запросов через OmniRoute.", + "modeDescriptionFallback": "Отлаживайте, тестируйте и визуализируйте, как OmniRoute преобразует запросы API между поставщиками.", + "recentTranslations": "Недавние переводы", + "noTranslations": "Переводов пока нет", + "source": "Источник", + "target": "Цель", + "time": "Время", + "model": "Модель", + "status": "Статус", + "latency": "Задержка", + "totalTranslations": "Всего переводов", + "successful": "Успешный", + "errors": "Ошибки", + "avgLatency": "Средняя задержка", + "millisecondsShort": "{value}мс", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Прямой эфир — автоматическое обновление", + "paused": "Приостановлено", + "eventsAppearHint": "События перевода появляются здесь по мере прохождения запросов через OmniRoute. Используйте любой из этих методов для генерации событий:", + "chatTesterTab": "Вкладка «Тестер чата»", + "testBenchTab": "Вкладка «Тестовый стенд»", + "externalApiCalls": "Внешние вызовы API", + "ideCliIntegrations": "Интеграция IDE/CLI", + "inMemoryNote": "Примечание. События сохраняются в памяти и сбрасываются при перезапуске сервера.", + "ok": "ОК", + "errorShort": "ОШИБКА", + "formatConverter": "Конвертер форматов", + "formatConverterDescription": "Вставьте или введите тело запроса JSON. Переводчик автоматически определит исходный формат и преобразует его в целевой формат. Используйте это для отладки того, как OmniRoute преобразует запросы между форматами (OpenAI ↔ Claude ↔ Gemini ↔ API ответов).", + "input": "Ввод", + "output": "Выход", + "auto": "Авто", + "swapFormats": "Форматы обмена", + "translateAction": "Перевести", + "clear": "Очистить", + "inputPlaceholder": "Вставьте сюда текст запроса или выберите шаблон ниже...", + "exampleTemplates": "Примеры шаблонов", + "exampleTemplatesHint": "— Нажмите, чтобы загрузить", + "templateLoadHint": "Шаблон загружает запрос в формате {format}. Измените исходный формат, чтобы загрузить его в другом формате.", + "compatibilityTester": "Тестер совместимости", + "compatibilityReport": "Отчет о совместимости", + "testBenchDescription": "Запустите предопределенные сценарии (простой чат, вызов инструментов и т. д.), чтобы проверить совместимость перевода и поставщика. Выберите исходный формат и целевого поставщика, затем запустите все тесты, чтобы увидеть процент совместимости. Используйте это, чтобы узнать, какие функции работают у разных поставщиков.", + "targetProvider": "Целевой поставщик", + "runAllTests": "Запустить все тесты", + "runTest": "Запустить тест", + "reRun": "Повторный запуск", + "running": "Бег...", + "passed": "прошло", + "failed": "не удалось", + "passedIconLabel": "✅ Пройдено", + "chunks": "куски", + "scenarioSimpleChat": "Простой чат", + "scenarioToolCalling": "Вызов инструмента", + "scenarioMultiTurn": "Многооборотный", + "scenarioThinking": "мышление", + "scenarioSystemPrompt": "Системная подсказка", + "scenarioStreaming": "Потоковое вещание", + "templateNames": { + "simple-chat": "Простой чат", + "tool-calling": "Вызов инструмента", + "multi-turn": "Многооборотный", + "thinking": "мышление", + "system-prompt": "Системная подсказка", + "streaming": "Потоковое вещание" + }, + "templateDescriptions": { + "simple-chat": "Основное текстовое сообщение", + "tool-calling": "Вызов функции/инструмента", + "multi-turn": "Разговор с историей", + "thinking": "Расширенное мышление/рассуждение", + "system-prompt": "Сложные системные инструкции", + "streaming": "Запрос потоковой передачи SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Вы полезный помощник.", + "userGreeting": "Здравствуйте! Как вы сегодня?" + }, + "toolCalling": { + "userWeather": "Какая погода в Сан-Паулу?", + "toolDescription": "Получить текущую погоду для местоположения", + "cityNameDescription": "Название города" + }, + "multiTurn": { + "system": "Вы помощник кодировщика.", + "userInitial": "Напишите функцию для сортировки массива на Python.", + "assistantExample": "Вот простая функция сортировки:\n\n``` питон\nЗащиту sort_array (обр):\n возврат отсортированный (прибытие)\n```", + "userFollowUp": "Теперь отсортируйте его по убыванию." + }, + "thinking": { + "question": "Какова сумма первых 100 простых чисел?" + }, + "systemPrompt": { + "systemInstruction": "Вы старший инженер-программист, специализирующийся на распределенных системах. Кратко отвечайте на вопросы, используя лучшие отраслевые практики. Всегда предоставляйте примеры кода, когда это уместно. Отформатируйте свои ответы, используя уценку.", + "question": "Как реализовать шаблон автоматического выключателя?" + }, + "streaming": { + "prompt": "Расскажите мне короткую историю о роботе, который учится рисовать." + } + }, + "openaiCompatibleLabel": "Совместимость с OpenAI", + "anthropicCompatibleLabel": "Антропная совместимость", + "noTemplateForFormat": "Нет шаблона для этого формата", + "translationFailed": "Не удалось выполнить перевод: {error}.", + "pipelineDebugger": "Отладчик конвейеров", + "translationPipeline": "Конвейер перевода", + "pipelineVisualization": "Визуализация трубопровода", + "pipelineVisualizationHint": "Отправьте сообщение, чтобы узнать, как ваш запрос проходит через обнаружение → перевод → звонок поставщику.", + "chatTesterDescription": "Отправляйте сообщения в определенном клиентском формате и проверяйте каждый этап конвейера перевода.", + "chatTesterFlow": "Запрос клиента → Обнаружение формата → OpenAI Intermediate → Формат поставщика → Ответ", + "clickStepToInspect": "Щелкните любой шаг, чтобы проверить данные на этом этапе.", + "clientFormat": "Формат клиента", + "provider": "Поставщик", + "modelPlaceholder": "Выберите или введите название модели...", + "sendMessageToSeePipeline": "Отправьте сообщение, чтобы увидеть процесс перевода", + "chatMessageHintPrefix": "Ваше сообщение будет отформатировано как", + "chatMessageHintSuffix": "запрос, транслируемый через конвейер и отправляемый выбранному провайдеру.", + "youWithFormat": "Вы ({format})", + "assistant": "Ассистент", + "typeMessage": "Введите сообщение...", + "send": "Отправить", + "clientRequest": "Запрос клиента", + "clientRequestDescription": "Тело запроса в том виде, в каком его отправил бы ваш клиент.", + "formatDetected": "Обнаружен формат", + "formatDetectedDescription": "OmniRoute автоматически определяет формат API по структуре запроса.", + "openaiIntermediate": "OpenAI Средний уровень", + "openaiIntermediateDescription": "Все форматы сначала нормализуются до формата OpenAI (универсальный мост).", + "providerFormat": "Формат поставщика", + "providerFormatDescription": "Формат OpenAI транслируется в собственный формат провайдера.", + "providerResponse": "Ответ поставщика", + "providerResponseRawDescription": "Необработанный ответ от API провайдера", + "providerResponseSseDescription": "Необработанный поток SSE из API провайдера", + "unexpectedError": "Произошла непредвиденная ошибка", + "error": "Ошибка", + "errorMessage": "Ошибка: {message}", + "requestFailed": "Запрос не выполнен", + "noTextExtracted": "(текст не извлечен)", + "liveMonitorDescriptionPrefix": "Показывает события перевода, когда вызовы API проходят через OmniRoute. События поступают из буфера в памяти (сбрасывается при перезапуске). Использование", + "liveMonitorDescriptionSuffix": "или внешние вызовы API для генерации событий." + }, + "usage": { + "title": "Использование", + "loggerTab": "Регистратор", + "proxyTab": "Прокси", + "budgetManagement": "Управление бюджетом", + "budgetSaved": "Ограничения бюджета сохранены.", + "budgetSaveFailed": "Не удалось сохранить бюджет.", + "loadingBudgetData": "Загрузка данных бюджета...", + "noApiKeysTitle": "Нет ключей API", + "noApiKeysDescription": "Сначала добавьте ключи API, чтобы настроить ограничения бюджета.", + "apiKey": "API-ключ", + "todaysSpend": "Сегодняшние расходы", + "thisMonth": "В этом месяце", + "setLimits": "Установить ограничения", + "dailyLimitUsd": "Дневной лимит (доллар США)", + "monthlyLimitUsd": "Месячный лимит (долл. США)", + "warningThresholdPercent": "Порог предупреждения (%)", + "dailyLimitPlaceholder": "например 5.00", + "monthlyLimitPlaceholder": "например 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Сохранить лимиты", + "budgetOk": "Бюджет в порядке — осталось {remaining}", + "budgetExceeded": "Бюджет превышен — запросы могут быть заблокированы", + "totalRequests": "Всего запросов", + "noDataYet": "Данных пока нет", + "latency": "Задержка", + "latencyP50": "стр50", + "latencyP95": "стр.95", + "latencyP99": "стр.99", + "promptCache": "Подскажите кэш", + "systemHealth": "Здоровье системы", + "entries": "Записи", + "activeCount": "{count} активен", + "openCircuitBreakersDetected": "Обнаружены разомкнутые автоматические выключатели", + "hitRate": "Скорость попадания", + "hitsMisses": "Попадания/промахи", + "circuitBreakers": "Автоматические выключатели", + "lockedIPs": "Заблокированные IP-адреса", + "lockoutsAutoRefreshHint": "Блокировка ограничения скорости для каждой модели • Автоматическое обновление 10 с.", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} осталось", + "howItWorks": "Как это работает", + "howItWorksSubtitle": "Узнайте, как оценки подтверждают ваши ответы LLM", + "define": "Определить", + "defineStepDescription": "Создавайте тестовые примеры с подсказками для ввода и ожидаемыми критериями вывода, используя такие стратегии, как «содержит», регулярное выражение или точное соответствие.", + "run": "Беги", + "runStepDescription": "Выполняйте тестовые сценарии для конечных точек LLM через OmniRoute. Каждый случай отправляется как реальный запрос API.", + "evaluate": "Оценить", + "evaluateStepDescription": "Ответы сравниваются с ожидаемыми критериями. См. «Годен/не годен» для каждого случая с показателями задержки и подробной обратной связью.", + "evalSuites": "Оценочные пакеты", + "evalSuitesHint": "Щелкните пакет, чтобы просмотреть тестовые примеры, а затем запустите его для оценки конечных точек LLM.", + "evalsLoading": "Загрузка тестовых пакетов...", + "noEvalSuitesFound": "Eval Suites не найдено", + "noEvalSuitesDescription": "Пакеты Eval можно определить через API или в коде. Они проверяют результаты модели на соответствие ожидаемым результатам, используя такие стратегии, как содержание, регулярное выражение, точное соответствие и пользовательские функции.", + "columnCase": "Дело", + "columnStatus": "Статус", + "columnLatency": "Задержка", + "columnDetails": "Подробности", + "columnModel": "Модель", + "columnStrategy": "Стратегия", + "columnExpected": "Ожидается", + "statsSuites": "Люксы", + "statsTestCases": "Тестовые случаи", + "statsModels": "Модели", + "statsCoverage": "Покрытие", + "statsStrategiesCount": "{count} стратегии", + "evaluationStrategies": "Стратегии оценки", + "modelsUnderTest": "Тестируемые модели", + "searchSuitesPlaceholder": "Искать апартаменты...", + "passSuffix": "пройти", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Запустить оценку", + "runningProgress": "Запуск {current}/{total}...", + "passRate": "проходной балл", + "summaryBreakdown": "{passed} пройден · {failed} не пройден · всего {total}", + "passedIconLabel": "✅ Пройдено", + "failedIconLabel": "❌ Не удалось", + "detailsContains": "Содержит: «{term}»", + "detailsRegex": "Регулярное выражение: {pattern}", + "detailsExpected": "Ожидается: \"{expected}\"", + "noResultsYet": "Пока нет результатов", + "testCasesCount": "Тестовые примеры ({count})", + "noTestCasesDefined": "Тестовые примеры не определены", + "runEvalHint": "Нажмите «Запустить оценку», чтобы выполнить все случаи для вашей конечной точки LLM. Каждый тест отправляет реальный запрос через OmniRoute.", + "notifyNoTestCases": "Для этого набора тестовых примеров не определено.", + "notifyAllCasesPassed": "Все дела {total} пройдены ✅", + "notifySomeCasesFailed": "{passed}/{total} пройден, {failed} не выполнен", + "notifyEvalRunFailed": "Оценочный запуск не удался", + "notifyEvalTitle": "Оценка: {name}", + "modelEvals": "Модельные оценки", + "evalsHeroDescription": "Протестируйте и подтвердите свои конечные точки LLM, запустив предварительно определенные пакеты оценки. Каждый пакет содержит тестовые примеры, которые отправляют реальные запросы через OmniRoute и сравнивают ответы с ожидаемыми критериями, что помогает выявлять регрессии, сравнивать модели и обеспечивать качество ответов между поставщиками.", + "qualityValidation": "Проверка качества", + "modelComparison": "Сравнение моделей", + "regressionDetection": "Обнаружение регрессии", + "latencyBenchmarks": "Тесты задержки", + "modelLockouts": "Модельные локауты", + "noLockouts": "Ни одна модель в настоящее время не заблокирована", + "activeSessions": "Активные сессии", + "noSessions": "Нет активных сессий", + "sessionsHint": "Сеансы появляются по мере прохождения запросов через прокси.", + "sessionsTrackedHint": "Отслеживается с помощью снятия отпечатков пальцев • Автоматическое обновление в течение 5 секунд.", + "session": "Сессия", + "age": "Возраст", + "requests": "Запросы", + "connection": "Подключение", + "durationMillisecondsShort": "{value}мс", + "durationSecondsShort": "{value}с", + "durationMinutesShort": "{value}м", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Ограничения поставщика", + "noProviders": "Ни один провайдер не подключен", + "connectProvidersForQuota": "Подключайтесь к поставщикам с помощью OAuth, чтобы отслеживать ограничения и использование квот API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(отфильтровано из {count})", + "autoRefresh": "Автообновление", + "refreshAll": "Обновить все", + "loadingQuotas": "Загрузка...", + "account": "Аккаунт", + "modelQuotas": "Модельные квоты", + "lastUsed": "Последнее использование", + "actions": "Действия", + "refreshQuota": "Обновить квоту", + "today": "Сегодня", + "tomorrow": "Завтра", + "dayTimeFormat": "{day}, {time}", + "inDuration": "в {duration}", + "notApplicable": "Н/Д", + "rawPlanWithValue": "Необработанный план: {plan}", + "noPlanFromProvider": "Нет плана от провайдера", + "noQuotaData": "Нет данных о квотах", + "noQuotaDataAvailable": "Нет данных о квотах", + "noAccountsForTierFilter": "Аккаунты для фильтра уровня не найдены", + "tierAll": "Все", + "tierEnterprise": "Предприятие", + "tierTeam": "Команда", + "tierBusiness": "Бизнес", + "tierUltra": "Ультра", + "tierPro": "Про", + "tierPlus": "Плюс", + "tierFree": "Бесплатно", + "tierUnknown": "Неизвестно" + }, + "modals": { + "waitingAuth": "Ожидание авторизации", + "verificationUrl": "URL-адрес подтверждения", + "yourCode": "Ваш код", + "remoteAccess": "Удаленный доступ:", + "connectedSuccess": "Подключено успешно!", + "connectionFailed": "Соединение не удалось", + "chooseAuthMethod": "Выберите метод аутентификации:", + "awsBuilderId": "Идентификатор строителя AWS", + "awsIamIdentity": "Центр идентификации AWS IAM", + "googleAccount": "Аккаунт Google", + "githubAccount": "Аккаунт GitHub", + "importToken": "Импортировать токен", + "pasteToken": "Вставьте токен обновления из Kiro IDE.", + "awsRegion": "Регион AWS", + "autoDetecting": "Автоматическое обнаружение токенов...", + "readingFromCache": "Чтение из кэша AWS SSO", + "readingFromCursor": "Чтение из базы данных Cursor IDE", + "initializing": "Инициализация...", + "pricingConfig": "Конфигурация цен", + "loadingPricing": "Загрузка данных о ценах...", + "pricingRatesFormat": "Формат ценообразования", + "noPricingData": "Нет данных о ценах", + "noModelsFound": "Модели не найдены" + }, + "loggers": { + "allProviders": "Все провайдеры", + "allModels": "Все модели", + "allAccounts": "Все аккаунты", + "allApiKeys": "Все ключи API", + "allTypes": "Все типы", + "allLevels": "Все уровни", + "modelAZ": "Модель А-Я", + "modelZA": "Модель Z-A", + "loadingLogs": "Загрузка журналов...", + "loadingProxyLogs": "Загрузка журналов прокси...", + "noLogEntries": "Записи журнала не найдены", + "noPayloadData": "Для этой записи журнала отсутствуют данные полезной нагрузки.", + "proxyEvent": "Прокси-событие", + "proxy": "Прокси", + "level": "Уровень", + "directNative": "Прямой (родной)", + "combo": "Комбо", + "inputTokens": "Я:", + "outputTokens": "О:" + }, + "stats": { + "usageOverview": "Обзор использования", + "outputTokens": "Выходные токены", + "totalCost": "Общая стоимость", + "usageByModel": "Использование по модели", + "usageByAccount": "Использование по учетной записи", + "failedToLoad": "Не удалось загрузить статистику использования.", + "tokenHealth": "Здоровье токена", + "totalOAuth": "Всего OAuth", + "healthy": "Здоровый", + "warning": "Предупреждение", + "errored": "Ошибка", + "lastCheck": "Последняя проверка", + "noData": "Нет данных", + "share": "Поделиться", + "unableToLoad": "Невозможно загрузить системные метрики", + "product": "Продукт", + "resources": "Ресурсы", + "company": "Компания" + }, + "auth": { + "welcome": "Добро пожаловать", + "signIn": "Войти", + "enterPassword": "Введите свой пароль, чтобы продолжить", + "password": "Пароль", + "unifiedProxy": "Единый прокси-сервер AI API", + "unifiedAiApiProxy": "Единый прокси-сервер AI API", + "unifiedAiApiProxyDesc": "Направляйте запросы к нескольким поставщикам ИИ через одну конечную точку. Встроенные функции балансировки нагрузки, аварийного переключения и отслеживания использования.", + "passwordNotEnabled": "Защита паролем не включена", + "loading": "Загрузка...", + "invalidPassword": "Неверный пароль", + "errorOccurredRetry": "Произошла ошибка. Пожалуйста, попробуйте еще раз.", + "configureInstance": "Давайте настроим ваш экземпляр OmniRoute.", + "runOnboardingWizard": "Запустите мастер регистрации, чтобы настроить пароль и подключить первого поставщика ИИ.", + "startOnboarding": "Начать регистрацию", + "secureYourInstance": "Защитите свой экземпляр", + "setPasswordDescription": "Установите пароль, чтобы защитить свою панель управления и защитить конечные точки API от несанкционированного доступа.", + "configurePassword": "Настроить пароль", + "continue": "Продолжить", + "windowWillClose": "Это окно закроется автоматически...", + "closeTabNow": "Вы можете закрыть эту вкладку сейчас.", + "copyUrlManual": "Скопируйте URL-адрес из адресной строки и вставьте его в приложение.", + "accessDeniedDescription": "У вас нет разрешения на доступ к этому ресурсу. Проверьте свой API-ключ или свяжитесь с администратором.", + "goToDashboard": "Перейти на панель управления", + "featureMultiProviderTitle": "Мультипровайдер", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google и другие", + "featureLoadBalancingTitle": "Балансировка нагрузки", + "featureLoadBalancingDesc": "Распределяйте запросы разумно", + "featureUsageTrackingTitle": "Отслеживание использования", + "featureUsageTrackingDesc": "Мониторинг затрат и токенов", + "resetPassword": "Сбросить пароль", + "resetDescription": "Выберите способ восстановления доступа к панели управления", + "stopServer": "Остановите сервер OmniRoute.", + "processing": "Обработка...", + "pleaseWait": "Пожалуйста, подождите, пока мы завершим авторизацию.", + "authSuccess": "Авторизация прошла успешно!", + "copyUrl": "Скопировать этот URL", + "accessDenied": "Доступ запрещен", + "methodCliTitle": "Способ 1: сброс CLI", + "methodCliDescription": "Выполните следующую команду на сервере, где работает OmniRoute:", + "methodCliHint": "Это предложит вам установить новый пароль. Сначала сервер должен быть остановлен.", + "methodManualTitle": "Способ 2: Ручной сброс", + "methodManualDescription": "Удалим пароль из базы данных и установим новый при запуске:", + "setPasswordInYour": "Установите новый пароль в своем", + "fileLabelSuffix": "файл:", + "newPasswordPlaceholder": "ваш_новый_пароль", + "deleteSettingsFile": "Удалить", + "orRemovePasswordHashField": "или удалите поле пароляHash", + "restartServerWithNewPassword": "Перезагрузите сервер - он будет использовать новый пароль.", + "backToLogin": "Вернуться к входу", + "forgotPassword": "Забыли пароль?" + }, + "landing": { + "brandName": "ОмниРоут", + "navigateHome": "Перейти домой", + "toggleMenu": "Переключить меню", + "featuresLink": "Особенности", + "docsLink": "Документы", + "github": "GitHub", + "versionLive": "v1.0 уже доступен", + "oneEndpoint": "Одна конечная точка для", + "allProviders": "Все поставщики ИИ", + "heroDescription": "Прокси-сервер конечной точки AI с веб-панелью — порт CLIProxyAPI на JavaScript. Беспрепятственно работает с Claude Code, OpenAI Codex, Cline, RooCode и другими инструментами CLI.", + "getStarted": "Начать", + "viewOnGithub": "Посмотреть на GitHub", + "powerfulFeatures": "Мощные функции", + "featuresSubtitle": "Все, что вам нужно для управления инфраструктурой искусственного интеллекта, собрано в одном месте и рассчитано на масштабирование.", + "featureUnifiedEndpointTitle": "Единая конечная точка", + "featureUnifiedEndpointDesc": "Доступ ко всем поставщикам через единый стандартный URL-адрес API.", + "featureEasySetupTitle": "Простая настройка", + "featureEasySetupDesc": "Приступайте к работе за считанные минуты с помощью команды npx.", + "featureModelFallbackTitle": "Резервная модель", + "featureModelFallbackDesc": "Автоматически переключайте поставщиков в случае сбоя или высокой задержки.", + "featureUsageTrackingTitle": "Отслеживание использования", + "featureUsageTrackingDesc": "Подробная аналитика и мониторинг затрат по всем моделям.", + "featureOAuthApiKeysTitle": "OAuth и ключи API", + "featureOAuthApiKeysDesc": "Безопасно управляйте учетными данными в одном хранилище.", + "featureCloudSyncTitle": "Облачная синхронизация", + "featureCloudSyncDesc": "Мгновенно синхронизируйте свои конфигурации между устройствами.", + "featureCliSupportTitle": "Поддержка интерфейса командной строки", + "featureCliSupportDesc": "Работает с Claude Code, Codex, Cline, Cursor и другими.", + "featureDashboardTitle": "Панель управления", + "featureDashboardDesc": "Визуальная панель для анализа трафика в реальном времени.", + "howItWorks": "Как работает OmniRoute", + "howItWorksDescription": "Данные беспрепятственно передаются из вашего приложения через наш уровень интеллектуальной маршрутизации к лучшему поставщику для выполнения этой работы.", + "howItWorksStep1Title": "1. Интерфейс командной строки и SDK", + "howItWorksStep1Description": "Ваши запросы начинаются с ваших любимых инструментов или нашего единого SDK. Просто измените базовый URL.", + "howItWorksStep2Title": "2. Хаб OmniRoute", + "howItWorksStep2Description": "Наш механизм анализирует приглашение, проверяет работоспособность провайдера и маршрутизирует с наименьшей задержкой или стоимостью.", + "howItWorksStep3Title": "3. Поставщики ИИ", + "howItWorksStep3Description": "Запрос мгновенно выполняется OpenAI, Anthropic, Gemini или другими.", + "getStartedIn30Seconds": "Начните за 30 секунд", + "getStartedDescription": "Установите OmniRoute, настройте своих провайдеров через веб-панель и начните маршрутизировать запросы AI.", + "installOmniRoute": "Установите OmniRoute", + "installStepDescription": "Запустите команду npx, чтобы мгновенно запустить сервер.", + "openDashboard": "Открыть панель управления", + "openDashboardStepDescription": "Настройка поставщиков и ключей API через веб-интерфейс", + "routeRequests": "Запросы маршрутов", + "routeRequestsStepDescription": "Направьте свои инструменты CLI на {endpoint}.", + "terminal": "терминал", + "copy": "Копировать", + "copied": "✓ Скопировано", + "startingOmniRoute": "Запускаем OmniRoute...", + "serverRunningOnLabel": "Сервер работает на", + "dashboardLabel": "Панель управления", + "readyToRoute": "Готов к маршруту! ✓", + "configureProvidersNote": "📝 Настройте поставщиков на панели управления или используйте переменные среды.", + "dataLocation": "Местоположение данных:", + "dataLocationMacLinux": " macOS/Линукс:", + "dataLocationWindows": " Окна:", + "product": "Продукт", + "dashboardLink": "Панель управления", + "changelog": "Журнал изменений", + "resources": "Ресурсы", + "documentation": "Документация", + "npm": "НПМ", + "legal": "Юридический", + "mitLicense": "Лицензия MIT", + "footerTagline": "Единая конечная точка для создания ИИ. С легкостью подключайтесь, маршрутизируйте и управляйте своими поставщиками ИИ.", + "copyright": "© {year} OmniRoute. Все права защищены.", + "flowToolClaudeCode": "Клод Код", + "flowToolOpenAICodex": "Кодекс OpenAI", + "flowToolCline": "Клайн", + "flowToolCursor": "Курсор", + "flowProviderOpenAI": "ОпенАИ", + "flowProviderAnthropic": "антропный", + "flowProviderGemini": "Близнецы", + "flowProviderGithubCopilot": "GitHub второй пилот", + "interactiveDiagram": "Интерактивная диаграмма видна на рабочем столе", + "ctaTitle": "Готовы упростить свою инфраструктуру искусственного интеллекта?", + "ctaDescription": "Присоединяйтесь к разработчикам, которые оптимизируют интеграцию искусственного интеллекта с помощью OmniRoute. Открытый исходный код и бесплатный запуск.", + "startFree": "Начать бесплатно", + "readDocumentation": "Читать документацию" + }, + "docs": { + "title": "Документация", + "quickStart": "Быстрый старт", + "features": "Особенности", + "supportedProviders": "Поддерживаемые провайдеры", + "supportedProvidersToc": "Провайдеры", + "commonUseCases": "Общие случаи использования", + "clientCompatibility": "Совместимость клиентов", + "apiReference": "Справочник по API", + "method": "Метод", + "path": "Путь", + "notes": "Примечания", + "modelPrefixes": "Префиксы моделей", + "prefix": "Префикс", + "troubleshooting": "Устранение неполадок", + "supportsChat": "Поддерживает конечные точки чата и ответов.", + "oauthAutoRefresh": "Соединение OAuth с автоматическим обновлением токена.", + "fullStreaming": "Полная поддержка потоковой передачи для всех моделей.", + "docsLabel": "Документы", + "docsHeroDescription": "AI-шлюз для LLM с несколькими поставщиками. Одна конечная точка для OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor и еще более 20 провайдеров.", + "openDashboard": "Открыть панель управления", + "endpointPage": "Страница конечной точки", + "github": "GitHub", + "reportIssue": "Сообщить о проблеме", + "onThisPage": "На этой странице", + "documentationVersion": "Документация — v{version}", + "quickStartStep1Title": "1. Установите и запустите", + "quickStartStep1Prefix": "Беги", + "quickStartStep1Middle": "или клонируйте с GitHub и запустите", + "quickStartStep2Title": "2. Создайте ключ API.", + "quickStartStep2Text": "Перейдите в Конечная точка -> Зарегистрированные ключи. Создайте один ключ для каждой среды.", + "quickStartStep3Title": "3. Подключите провайдеров", + "quickStartStep3Text": "Добавляйте учетные записи поставщиков с помощью входа в систему OAuth, ключа API или автоматического подключения на бесплатном уровне.", + "quickStartStep4Title": "4. Установите URL-адрес клиентской базы.", + "quickStartStep4Prefix": "Направьте свой клиент IDE или API на", + "quickStartStep4Suffix": "Используйте префикс провайдера, например", + "featureRoutingTitle": "Маршрутизация между несколькими провайдерами", + "featureRoutingText": "Направляйте запросы более чем 30 поставщикам ИИ через единую конечную точку, совместимую с OpenAI. Поддерживает API чата, ответов, аудио и изображений.", + "featureCombosTitle": "Комбинации и балансировка", + "featureCombosText": "Создавайте комбинации моделей с резервными цепочками и стратегиями балансировки: циклическим, приоритетным, случайным, наименее используемым и оптимизированным по затратам.", + "featureUsageTitle": "Отслеживание использования и затрат", + "featureUsageText": "Подсчет токенов в реальном времени, расчет стоимости для каждого поставщика/модели и подробная разбивка использования по ключам API и учетным записям.", + "featureAnalyticsTitle": "Аналитическая панель", + "featureAnalyticsText": "Визуальная аналитика с диаграммами запросов, токенов, ошибок, задержек, затрат и популярности модели с течением времени.", + "featureHealthTitle": "Мониторинг здоровья", + "featureHealthText": "Проверки работоспособности в реальном времени, статус поставщика услуг, состояния автоматических выключателей и автоматическое определение ограничения скорости с экспоненциальным замедлением.", + "featureCliTitle": "Инструменты интерфейса командной строки", + "featureCliText": "Управляйте конфигурациями IDE, экспортируйте/импортируйте резервные копии, находите профили кодекса и настраивайте параметры с панели управления.", + "featureSecurityTitle": "Безопасность и политики", + "featureSecurityText": "Аутентификация по ключу API, фильтрация IP-адресов, защита от внедрения подсказок, политики домена, управление сеансами и ведение журнала аудита.", + "featureCloudSyncTitle": "Облачная синхронизация", + "featureCloudSyncText": "Синхронизируйте свою конфигурацию с Cloudflare Workers для удаленного доступа с зашифрованными учетными данными и автоматического переключения при сбое.", + "providersAcrossConnectionTypes": "Поставщики {count} для трех типов подключения.", + "manageProviders": "Управление поставщиками", + "providersCount": "{count} поставщиков", + "providerTypeFree": "Уровень бесплатного пользования", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API-ключ", + "useCaseSingleEndpointTitle": "Единая конечная точка для многих провайдеров", + "useCaseSingleEndpointText": "Направьте клиентов на один базовый URL-адрес и выполните маршрутизацию по префиксу модели (например: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Откат и переключение модели с помощью комбинаций", + "useCaseFallbackText": "Создавайте комбинированные модели в Dashboard и сохраняйте стабильную конфигурацию клиента, пока поставщики меняются внутри компании.", + "useCaseUsageVisibilityTitle": "Видимость использования, стоимости и отладки", + "useCaseUsageVisibilityText": "Отслеживайте токены и стоимость по поставщикам, учетным записям и ключам API на вкладках «Использование» и «Аналитика».", + "clientCherryStudioTitle": "Черри Студия", + "baseUrlLabel": "Базовый URL", + "chatEndpointLabel": "Конечная точка чата", + "modelRecommendationLabel": "Рекомендация модели: явный префикс", + "clientCodexTitle": "Модели второго пилотного проекта Codex/GitHub", + "clientCodexBullet1": "Используйте идентификаторы моделей с", + "clientCodexBullet2": "Модели семейства Codex автоматически перенаправляются к", + "clientCodexBullet3": "Модели, не относящиеся к Кодексу, продолжают действовать", + "clientCursorTitle": "Курсор IDE", + "clientCursorBullet1": "Использование", + "clientCursorBullet1Suffix": "префикс для моделей Cursor.", + "clientCursorBullet2": "Соединение OAuth — вход со страницы «Провайдеры».", + "clientClaudeTitle": "Клод Код / Антигравитация", + "clientClaudeBullet1Prefix": "Использование", + "clientClaudeBullet1Middle": "(Клод) или", + "clientClaudeBullet1Suffix": "(Антигравитация) приставка.", + "endpointChatNote": "Конечная точка чата, совместимая с OpenAI (по умолчанию).", + "endpointResponsesNote": "Конечная точка API ответов (Кодекс, серия o).", + "endpointModelsNote": "Каталог моделей для всех подключенных провайдеров.", + "endpointAudioNote": "Транскрипция аудио (Deepgram, AssemblyAI).", + "endpointImagesNote": "Генерация изображений (NanoBanana).", + "endpointRewriteChatNote": "Переписать помощник для клиентов без /v1.", + "endpointRewriteResponsesNote": "Переписать помощник для ответов без /v1.", + "endpointRewriteModelsNote": "Переписать помощник для обнаружения моделей без /v1.", + "modelPrefixesDescriptionStart": "Используйте префикс поставщика перед названием модели для маршрутизации к определенному поставщику. Пример:", + "modelPrefixesDescriptionEnd": "маршруты к GitHub Copilot.", + "provider": "Поставщик", + "type": "Тип", + "troubleshootingModelRouting": "Если клиенту не удается выполнить маршрутизацию модели, используйте явный поставщик/модель (например: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Если вы получаете неоднозначные ошибки модели, выберите префикс поставщика вместо простого идентификатора модели.", + "troubleshootingCodexFamily": "Для моделей семейства GitHub Codex сохраните модель как gh/; Маршрутизатор выбирает / отвечает автоматически.", + "troubleshootingTestConnection": "Используйте «Панель мониторинга» > «Поставщики» > «Проверить соединение» перед тестированием из IDE или внешних клиентов.", + "troubleshootingCircuitBreaker": "Если поставщик услуг показывает, что автоматический выключатель разомкнут, дождитесь охлаждения или посетите страницу «Здоровье» для получения подробной информации.", + "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера." + }, + "legal": { + "privacyPolicy": "Политика конфиденциальности", + "termsOfService": "Условия использования", + "providerConfigurations": "Конфигурации провайдера", + "apiKeys": "Ключи API", + "usageLogs": "Журналы использования", + "applicationSettings": "Настройки приложения", + "viewExportAnalytics": "Просмотр и экспорт аналитики использования", + "clearHistory": "Очистить историю использования в любое время", + "configureRetention": "Настройка политик хранения журналов", + "backupRestore": "Резервное копирование и восстановление базы данных", + "privacyMetadataTitle": "Политика конфиденциальности | ОмниРоут", + "privacyMetadataDescription": "Политика конфиденциальности для прокси-маршрутизатора OmniRoute AI API.", + "termsMetadataTitle": "Условия обслуживания | ОмниРоут", + "termsMetadataDescription": "Условия использования прокси-маршрутизатора OmniRoute AI API.", + "backToHome": "Вернуться домой", + "lastUpdated": "Последнее обновление: {date}.", + "policyLastUpdatedDate": "13 февраля 2026 г.", + "listSeparator": "-", + "questionsVisit": "Вопросы? Посетите наш", + "githubRepository": "Репозиторий GitHub", + "privacySection1Title": "1. Архитектура, ориентированная на локальность", + "privacySection1Text": "OmniRoute спроектирован как локальное приложение. Вся обработка и хранение данных происходит полностью на вашем компьютере. Не существует централизованного сервера, собирающего вашу информацию.", + "privacySection2Title": "2. Данные, которые мы храним", + "privacyDataStoredIn": "Следующие данные хранятся локально в", + "privacyDataProviderConfigurationsDesc": "URL-адреса подключения, типы провайдеров и настройки приоритета", + "privacyDataApiKeysDesc": "шифруется и хранится локально для аутентификации у поставщиков ИИ.", + "privacyDataUsageLogsDesc": "количество запросов, использование токенов, названия моделей, временные метки и время ответа.", + "privacyDataApplicationSettingsDesc": "настройки темы, стратегия маршрутизации и комбинированные конфигурации", + "privacySection3Title": "3. Нет телеметрии", + "privacySection3Text": "OmniRoute не собирает телеметрию, аналитику или отчеты о сбоях. Никакие данные не передаются нам или третьим лицам. Ваши шаблоны использования, вызовы API и конфигурации остаются полностью конфиденциальными.", + "privacySection4Title": "4. Сторонние поставщики ИИ", + "privacySection4Text": "Когда вы выполняете вызовы API через OmniRoute, ваши запросы перенаправляются настроенным вами поставщикам искусственного интеллекта (например: OpenAI, Anthropic, Google). У этих провайдеров есть свои собственные политики конфиденциальности, которые определяют, как они обрабатывают ваши данные. Пожалуйста, просмотрите:", + "privacyOpenAiPolicy": "Политика конфиденциальности OpenAI", + "privacyAnthropicPolicy": "Антропная политика конфиденциальности", + "privacyGooglePolicy": "Политика конфиденциальности Google", + "privacySection5Title": "5. Облачная синхронизация (необязательно)", + "privacySection5Text": "Если вы включите дополнительную функцию облачной синхронизации, конфигурации поставщика и ключи API могут быть переданы в настроенную конечную точку облака. Эта функция отключена по умолчанию и требует явного согласия.", + "privacySection6Title": "6. Ведение журнала", + "privacyLoggingIntro": "Журналы запросов можно настроить через настройки панели управления. Вы можете:", + "privacySection7Title": "7. Ваши права", + "privacySection7TextStart": "Поскольку все данные хранятся локально, у вас есть полный контроль. Вы можете удалить свои данные в любое время, удалив", + "privacySection7TextEnd": "каталог или с помощью функций резервного копирования и восстановления базы данных на панели управления.", + "termsSection1Title": "1. Обзор", + "termsSection1Text": "OmniRoute — это локальный прокси-маршрутизатор AI API, который полностью работает на вашем компьютере. Он направляет запросы нескольким поставщикам искусственного интеллекта с балансировкой нагрузки, аварийным переключением и отслеживанием использования.", + "termsSection2Title": "2. Обязанности пользователя", + "termsResponsibilityApiKeys": "Вы несете единоличную ответственность за управление своими собственными ключами API и учетными данными для сторонних поставщиков ИИ (OpenAI, Anthropic, Google и т. д.).", + "termsResponsibilityCompliance": "Вы должны соблюдать условия обслуживания каждого поставщика ИИ, к API которого вы получаете доступ через OmniRoute.", + "termsResponsibilitySecurity": "Вы несете ответственность за безопасность вашей локальной установки OmniRoute, включая установку пароля и ограничение доступа к сети.", + "termsSection3Title": "3. Как это работает", + "termsSection3Text": "OmniRoute действует как промежуточный прокси. Вызовы API, отправленные в OmniRoute, преобразуются и пересылаются настроенным вами поставщикам искусственного интеллекта. OmniRoute не изменяет содержимое ваших запросов или ответов за пределами необходимой трансляции протокола.", + "termsSection4Title": "4. Обработка данных", + "termsDataStoredLocally": "Все данные хранятся локально на вашем компьютере в базе данных SQLite.", + "termsNoTransmission": "OmniRoute не передает данные на внешние серверы, если вы явно не включили функции облачной синхронизации.", + "termsDataLocationText": "Журналы использования, ключи API и конфигурация хранятся в", + "termsSection5Title": "5. Отказ от ответственности", + "termsSection5Text": "OmniRoute предоставляется «как есть» без каких-либо гарантий. Мы не несем ответственности за любые расходы, понесенные в результате использования API, перебоев в обслуживании или потери данных. Всегда сохраняйте резервные копии вашей конфигурации.", + "termsSection6Title": "6. Открытый исходный код", + "termsSection6Text": "OmniRoute — это программное обеспечение с открытым исходным кодом. Вы можете свободно просматривать, изменять и распространять его в соответствии с условиями лицензии." + } +} diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json new file mode 100644 index 0000000000..cb34c27918 --- /dev/null +++ b/src/i18n/messages/sk.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Uložiť", + "cancel": "Zrušiť", + "delete": "Odstrániť", + "loading": "Načítava sa...", + "error": "Vyskytla sa chyba", + "success": "Úspech", + "confirm": "si si istý?", + "refresh": "Obnoviť", + "close": "Zavrieť", + "add": "Pridať", + "edit": "Upraviť", + "search": "Hľadať", + "back": "Späť", + "next": "Ďalej", + "submit": "Odoslať", + "reset": "Resetovať", + "copy": "Kopírovať", + "copied": "Skopírované!", + "enabled": "Povolené", + "disabled": "Zakázané", + "active": "Aktívne", + "inactive": "Neaktívne", + "noData": "Nie sú k dispozícii žiadne údaje", + "configure": "Konfigurovať", + "manage": "Spravovať", + "name": "Meno", + "actions": "Akcie", + "status": "Stav", + "type": "Typ", + "model": "Model", + "models": "modelov", + "provider": "Poskytovateľ", + "account": "účtu", + "time": "Čas", + "details": "Podrobnosti", + "created": "Vytvorené", + "lastUsed": "Naposledy použité", + "loadMore": "Načítať viac", + "noResults": "Nenašli sa žiadne výsledky", + "reloadPage": "Znovu načítať stránku", + "connected": "Pripojené", + "disconnected": "Odpojené", + "notConfigured": "Nie je nakonfigurované", + "testConnection": "Test pripojenia", + "enable": "Povoliť", + "disable": "Zakázať", + "columns": "Stĺpce", + "newest": "Najnovšie", + "oldest": "Najstaršie", + "all": "Všetky", + "none": "žiadne", + "yes": "áno", + "no": "Nie", + "warning": "Upozornenie", + "note": "Poznámka", + "free": "Zadarmo", + "skipToContent": "Preskočiť na obsah" + }, + "sidebar": { + "home": "Domov", + "dashboard": "Dashboard", + "providers": "Poskytovatelia", + "combos": "kombá", + "usage": "Použitie", + "analytics": "Analytics", + "costs": "náklady", + "health": "Zdravie", + "limits": "Limity a kvóty", + "cliTools": "Nástroje CLI", + "settings": "Nastavenia", + "translator": "Prekladateľ", + "docs": "Docs", + "issues": "Problémy", + "endpoint": "Koncový bod", + "apiManager": "API Manager", + "logs": "Denníky", + "auditLog": "Audit Log", + "shutdown": "Vypnutie", + "restart": "Reštartujte", + "shutdownConfirm": "Vypnúť OmniRoute?", + "restartConfirm": "Reštartovať OmniRoute?", + "version": "v{version}", + "debug": "Debug", + "system": "Systém", + "help": "Pomoc", + "serverDisconnected": "Server odpojený", + "serverDisconnectedMsg": "Proxy server bol zastavený alebo sa reštartuje.", + "expandSidebar": "Rozbaliť bočný panel", + "collapseSidebar": "Zbaliť bočný panel" + }, + "header": { + "logout": "Odhlásiť sa", + "language": "Jazyk", + "providers": "Poskytovatelia", + "providerDescription": "Spravujte pripojenia poskytovateľa AI", + "combos": "kombá", + "comboDescription": "Modelové kombá s rezervou", + "usage": "Použitie a analýza", + "usageDescription": "Monitorujte používanie rozhrania API, spotrebu tokenov a denníky požiadaviek", + "analytics": "Analytics", + "analyticsDescription": "Grafy, trendy a prehľady hodnotení", + "cliTools": "Nástroje CLI", + "cliToolsDescription": "Konfigurácia nástrojov CLI", + "home": "Domov", + "homeDescription": "Vitajte v OmniRoute", + "endpoint": "Koncový bod", + "endpointDescription": "Konfigurácia koncového bodu API", + "settings": "Nastavenia", + "settingsDescription": "Spravujte svoje preferencie", + "openaiCompatible": "Kompatibilné s OpenAI", + "anthropicCompatible": "Antropické kompatibilné" + }, + "home": { + "quickStart": "Rýchly štart", + "quickStartDesc": "Vstaňte a bežte v 4 krokoch. Pripojte poskytovateľov, smerujte modely, sledujte všetko.", + "fullDocs": "Úplné dokumenty", + "step1Title": "1. Vytvorte kľúč API", + "step1Desc": "Prejdite na Endpoint -> Registrované kľúče. Vygenerujte jeden kľúč pre každé prostredie.", + "step2Title": "2. Pripojte poskytovateľov", + "step2Desc": "Pridajte účty v Providers. Podporuje OAuth, kľúč API a bezplatné úrovne.", + "step3Title": "3. Nasmerujte svojho klienta", + "step3Desc": "Nastavte základnú URL na {url} vo svojom IDE alebo API klientovi.", + "step4Title": "4. Monitorujte a optimalizujte", + "step4Desc": "Sledujte tokeny, náklady a chyby v Request Logs a Analytics.", + "providersOverview": "Prehľad poskytovateľov", + "configuredOf": "{configured} nakonfigurovaných z {total} dostupných poskytovateľov", + "noModelsAvailable": "Pre tohto poskytovateľa nie sú dostupné žiadne modely.", + "configureFirst": "Najprv nakonfigurujte pripojenie v {providers}", + "configureProvider": "Konfigurácia poskytovateľa", + "modelAvailable": "K dispozícii je {count} model", + "modelsAvailable": "K dispozícii je {count} modelov", + "connectionsActive": "{count} pripojenie je aktívne", + "connectionsActivePlural": "{count} aktívnych pripojení", + "copyModelName": "Skopírujte názov modelu", + "documentation": "Dokumentácia", + "healthMonitor": "Health Monitor", + "reportIssue": "Nahlásiť problém", + "activeError": "{active} aktívny · {errors} chyba", + "oauthLabel": "OAuth", + "apiKeyLabel": "API kľúč", + "requestsShort": "{count} req", + "providerModelsTitle": "{provider} - Modely", + "copiedModel": "Skopírované: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Monitorujte svoje vzorce používania API, spotrebu tokenov, náklady a trendy aktivity u všetkých poskytovateľov a modelov.", + "evalsDescription": "Spustite vyhodnocovacie súpravy na testovanie a overovanie vašich koncových bodov LLM. Porovnajte kvalitu modelu, zistite regresie a benchmarkovú latenciu.", + "overview": "Prehľad", + "evals": "Evals" + }, + "apiManager": { + "title": "API kľúče", + "createKey": "Vytvorte kľúč API", + "key": "kľúč", + "revokeKey": "Odvolať kľúč", + "revokeConfirm": "Naozaj chcete odvolať tento kľúč API?", + "noKeys": "Zatiaľ žiadne kľúče API", + "noKeysDesc": "Vytvorte svoj prvý kľúč API na overenie požiadaviek na váš koncový bod", + "keyLabel": "Označenie kľúča", + "permissions": "Povolenia", + "expiresAt": "Platnosť vyprší", + "never": "Nikdy", + "revoke": "Odvolať", + "showKey": "Zobraziť kľúč", + "hideKey": "Skryť kľúč", + "copyKey": "Kopírovať kľúč API", + "allModels": "Všetky modely", + "selectedModels": "Vybrané modely", + "readOnly": "Iba na čítanie", + "fullAccess": "Úplný prístup", + "keyManagement": "Správa kľúčov API", + "keyManagementDesc": "Vytvárajte a spravujte kľúče API na autentifikáciu požiadaviek na váš koncový bod", + "totalKeys": "Celkový počet kľúčov", + "restricted": "Obmedzené", + "totalRequests": "Celkový počet žiadostí", + "modelsAvailable": "Dostupné modely", + "registeredKeys": "Registrované kľúče", + "keysRegistered": "{count} zaregistrovaných kľúčov", + "keyRegistered": "{count} zaregistrovaný kľúč", + "keysSecurityNote": "Každý kľúč izoluje sledovanie používania a možno ho nezávisle odvolať. Kľúče sú po vytvorení z bezpečnostných dôvodov maskované.", + "createFirstKey": "Vytvorte si svoj prvý kľúč", + "name": "Meno", + "usage": "Použitie", + "created": "Vytvorené", + "actions": "Akcie", + "reqs": "reqs", + "neverUsed": "Nikdy nepoužité", + "deleteConfirm": "Odstrániť tento kľúč API?", + "usageTips": "Tipy na použitie", + "tipAuth": "Použite kľúče API v hlavičke Autorizácie ako nosič YOUR_KEY", + "tipSecure": "Kľúče sa pri vytváraní zobrazujú iba raz – bezpečne ich uložte", + "tipSeparate": "Vytvorte samostatné kľúče pre rôznych klientov alebo prostredia", + "tipRestrict": "Obmedzte kľúče na konkrétne modely pre lepšiu bezpečnosť a kontrolu nákladov", + "keyName": "Názov kľúča", + "keyNamePlaceholder": "napr. Výrobný kľúč, Vývojový kľúč", + "keyNameDesc": "Vyberte popisný názov na identifikáciu účelu tohto kľúča", + "keyCreated": "Kľúč API bol vytvorený", + "keyCreatedSuccess": "Kľúč bol úspešne vytvorený!", + "keyCreatedNote": "Skopírujte a uložte tento kľúč teraz – už sa nebude zobrazovať.", + "done": "Hotovo", + "savePermissions": "Uložiť povolenia", + "allowAll": "Povoliť všetko", + "restrict": "Obmedziť", + "allowAllInfo": "Tento kľúč umožňuje prístup ku všetkým dostupným modelom.", + "restrictInfo": "Tento kľúč má prístup k {selected} z {total} modelov.", + "selected": "{count} vybraté", + "all": "Všetky", + "clear": "Jasné", + "searchModels": "Vyhľadajte modely podľa názvu alebo poskytovateľa...", + "noModelsFound": "Nenašli sa žiadne modely", + "keyNameRequired": "Vyžaduje sa názov kľúča", + "keyNameTooLong": "Názov kľúča musí mať maximálne {max} znakov", + "keyNameInvalid": "Názov kľúča môže obsahovať iba písmená, čísla, medzery, spojovníky a podčiarkovníky", + "invalidKeyName": "Neplatný názov kľúča", + "failedCreateKey": "Nepodarilo sa vytvoriť kľúč", + "failedCreateKeyRetry": "Nepodarilo sa vytvoriť kľúč. Skúste to znova.", + "invalidKeyId": "Neplatné ID kľúča", + "failedDeleteKey": "Kľúč sa nepodarilo odstrániť", + "failedDeleteKeyRetry": "Kľúč sa nepodarilo odstrániť. Skúste to znova.", + "invalidModelsSelection": "Neplatný výber modelov", + "cannotSelectMoreThanModels": "Nie je možné vybrať viac ako {max} modelov", + "failedUpdatePermissions": "Aktualizácia povolení zlyhala", + "failedUpdatePermissionsRetry": "Aktualizácia povolení zlyhala. Skúste to znova.", + "unknownProvider": "neznámy", + "copyMaskedKey": "Skopírujte maskovaný kľúč", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Naposledy: {date}", + "editPermissions": "Upraviť povolenia", + "deleteKey": "Tlačidlo Delete", + "model": "{count} model", + "models": "{count} modelov", + "permissionsTitle": "Povolenia: {name}", + "allowAllDesc": "Tento kľúč umožňuje prístup ku všetkým dostupným modelom.", + "restrictDesc": "Tento kľúč má prístup k {selectedCount} z {totalModels} modelov.", + "selectedCount": "{count} vybraté" + }, + "auditLog": { + "title": "Audit Log", + "searchPlaceholder": "Akcie vyhľadávania...", + "action": "Akcia", + "actor": "herec", + "target": "Cieľ", + "ipAddress": "IP adresa", + "timestamp": "Časová pečiatka", + "noEntries": "Nenašli sa žiadne záznamy auditu", + "filterByAction": "Filtrovať podľa akcie...", + "filterByActor": "Filtrovať podľa herca...", + "filterEntriesAria": "Filtrujte záznamy denníka auditu", + "filterByActionTypeAria": "Filtrujte podľa typu akcie", + "filterByActorAria": "Filtrujte podľa herca", + "refreshAuditLogAria": "Obnoviť denník auditu", + "tableAria": "Záznamy denníka auditu", + "failedFetchAuditLog": "Nepodarilo sa načítať denník auditu", + "notAvailable": "—", + "description": "Administratívne úkony a bezpečnostné udalosti", + "showing": "Zobrazuje sa {count} záznamov (posun {offset})", + "previous": "Predchádzajúce" + }, + "cliTools": { + "title": "Nástroje CLI", + "noActiveProviders": "Žiadni aktívni poskytovatelia", + "noActiveProvidersDesc": "Ak chcete nakonfigurovať nástroje CLI, najprv pridajte a pripojte poskytovateľov.", + "mapModels": "Modely máp", + "testConnection": "Test pripojenia", + "connectionStatus": "Stav pripojenia", + "configureEndpoint": "Konfigurácia koncového bodu", + "instructions": "Pokyny", + "modelMapping": "Mapovanie modelov", + "baseUrl": "Základná adresa URL", + "apiKey": "API kľúč", + "configured": "Nakonfigurované", + "notConfigured": "Nie je nakonfigurované", + "notInstalled": "Nie je nainštalované", + "custom": "Vlastné", + "unknown": "Neznámy", + "lastSavedAt": "Naposledy uložené: {date}", + "never": "Nikdy", + "justNow": "práve teraz", + "minutesAgoShort": "Pred {count}m", + "hoursAgoShort": "pred {count}h", + "daysAgoShort": "Pred {count}d", + "monthsAgoShort": "pred {count}mesiac", + "yearsAgoShort": "Pred {count}y", + "runtimeCheckFailed": "Kontrola spustenia zlyhala", + "yourApiKeyPlaceholder": "váš-api-key", + "modelPlaceholder": "provider/model-id", + "configurationSaved": "Konfigurácia bola úspešne uložená.", + "failedToSave": "Konfiguráciu sa nepodarilo uložiť.", + "noApiKeysCreateOne": "Žiadne kľúče API – vytvorte si jeden na stránke Kľúče", + "defaultOmnirouteKey": "sk_omniroute (predvolené)", + "selectModel": "Vyberte Model", + "selectModelForAlias": "Vyberte model pre {alias}", + "selectModelForTool": "Vyberte model pre {tool}", + "select": "Vyberte", + "clear": "Jasné", + "comingSoon": "Už čoskoro", + "checkingRuntime": "Kontroluje sa stav spustenia...", + "guideOnlyIntegration": "Integrácia len so sprievodcom (nevyžaduje sa miestne spustenie)", + "cliRuntimeDetected": "CLI runtime detekovaný a pripravený", + "cliFoundNotRunnable": "CLI sa našiel, ale nedá sa spustiť{reason}", + "cliRuntimeNotDetected": "CLI runtime nebolo zistené", + "binary": "Binárne", + "configPath": "Konfiguračná cesta", + "configPathShort": "Konfig", + "failedCheckRuntimeStatus": "Nepodarilo sa skontrolovať stav runtime.", + "copy": "Kopírovať", + "copied": "Skopírované", + "copyConfig": "Kopírovať konfig", + "saveConfig": "Uložiť konfiguráciu", + "selectionSaved": "Výber bol uložený", + "guide": "Sprievodca", + "detected": "Zistené", + "notReady": "Nie som pripravený", + "active": "Aktívne", + "inactive": "Neaktívne", + "startMitm": "Spustite MITM", + "stopMitm": "Zastavte MITM", + "mitmStarted": "MITM sa úspešne rozbehol!", + "mitmStopped": "MITM sa úspešne zastavil!", + "failedStart": "Nepodarilo sa spustiť MITM", + "failedStop": "Nepodarilo sa zastaviť MITM", + "saveMappings": "Uložiť mapovania", + "mappingsSaved": "Mapovania boli uložené!", + "failedSaveMappings": "Mapovania sa nepodarilo uložiť", + "howItWorks": "Ako to funguje:", + "antigravityHowWorksDesc": "Antigravity odosiela požiadavky na koncový bod Google. MITM ich zachytí a presmeruje na OmniRoute.", + "antigravityStep1": "1. Spustite MITM na smerovanie požiadaviek cez OmniRoute.", + "antigravityStep2Prefix": "2. Pridajte", + "antigravityStep2Suffix": "do súboru hosts ako 127.0.0.1.", + "antigravityStep3": "3. Otvorte Antigravity a požiadavky budú proxy.", + "sudoPasswordRequiredTitle": "Vyžaduje sa heslo sudo", + "sudoPasswordHint": "Na úpravu súboru hostiteľov a nastavení servera proxy je potrebné heslo správcu.", + "enterSudoPassword": "Zadajte sudo heslo", + "sudoPasswordRequiredError": "Vyžaduje sa heslo sudo.", + "cancel": "Zrušiť", + "confirm": "Potvrďte", + "settingsApplied": "Nastavenia boli úspešne použité!", + "failedApplySettings": "Nastavenia sa nepodarilo použiť", + "settingsReset": "Nastavenia boli úspešne obnovené!", + "failedResetSettings": "Obnovenie nastavení zlyhalo", + "backupRestored": "Záloha bola obnovená!", + "failedRestore": "Obnovenie zlyhalo", + "checkingCli": "Kontroluje sa {tool} CLI...", + "cliNotRunnable": "{tool} CLI je nainštalované, ale nedá sa spustiť", + "cliNotInstalled": "{tool} CLI nie je nainštalované", + "cliNotDetected": "{tool} CLI nebolo zistené", + "cliDetectedReady": "{tool} CLI rozpoznané a pripravené", + "cliFoundFailedHealthcheck": "{tool} CLI sa našlo, ale zlyhala kontrola stavu pri spustení{reason}.", + "installCliPrompt": "Ak chcete používať túto funkciu, nainštalujte si {tool} CLI.", + "installCodexPrompt": "Ak chcete použiť funkciu automatického použitia, nainštalujte si Codex CLI.", + "hide": "Skryť", + "howToInstall": "Ako nainštalovať", + "installationGuide": "Inštalačná príručka", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Po inštalácii spustite", + "toVerify": "overiť.", + "current": "Aktuálne", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Obnoviť predvolené nastavenie", + "providerModelPlaceholder": "provider/model-id", + "apply": "Použiť", + "reset": "Resetovať", + "manualConfig": "Manuálna konfigurácia", + "backups": "Zálohy", + "configBackups": "Zálohy konfigurácie", + "noBackupsYet": "Zatiaľ žiadne zálohy. Zálohy sa vytvárajú automaticky pred každým použitím alebo resetovaním.", + "restore": "Obnoviť", + "backupRestoredReloading": "Záloha bola obnovená! Stav opätovného načítavania...", + "failedRestoreBackup": "Obnovenie zálohy zlyhalo", + "applied": "Aplikované!", + "failed": "Nepodarilo sa", + "resetDone": "Resetovať!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute je nakonfigurovaný ako poskytovateľ kompatibilný s OpenAI", + "provider": "Poskytovateľ", + "model": "Model", + "providers": "Poskytovatelia", + "auth": "Auth", + "noApiKeysAvailable": "Nie sú k dispozícii žiadne kľúče API", + "usingDefaultOmniroute": "Používa sa predvolené: sk_omniroute", + "updateConfig": "Aktualizovať konfiguráciu", + "applyConfig": "Použiť konfiguráciu", + "noBackupsAvailable": "Nie sú k dispozícii žiadne zálohy.", + "profileSaved": "Profil „{name}“ bol uložený!", + "failedSaveProfile": "Profil sa nepodarilo uložiť", + "profileActivated": "Profil aktivovaný!", + "failedActivateProfile": "Aktivácia profilu zlyhala", + "profiles": "Profily", + "savedProfiles": "Uložené profily", + "noProfilesYet": "Zatiaľ nie sú uložené žiadne profily. Uložte aktuálnu konfiguráciu ako profil nižšie.", + "activate": "Aktivovať", + "deleteProfile": "Odstrániť profil", + "profileNamePlaceholder": "Názov profilu (napr. osobný účet)", + "saveCurrent": "Uložiť aktuálny", + "codexAuthNotePrefix": "Kódex používa", + "codexAuthNoteMiddle": "s", + "codexAuthNoteSuffix": "Kliknite na „Použiť“ pre automatickú konfiguráciu.", + "claudeManualConfiguration": "Claude CLI - Manuálna konfigurácia", + "codexManualConfiguration": "Codex CLI - Manuálna konfigurácia", + "droidManualConfiguration": "Továrenský Droid - Manuálna konfigurácia", + "openClawManualConfiguration": "Open Claw - Manuálna konfigurácia", + "clineManualConfiguration": "Manuálna konfigurácia Cline", + "kiloManualConfiguration": "Manuálna konfigurácia Kilo Code", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE s MITM", + "claude": "Antropický Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Otvorte asistenta Claw AI", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Kilo Code AI Assistant CLI", + "cursor": "Editor kódu AI kurzora", + "continue": "Pokračovať v Asistentovi AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Na používanie tejto funkcie sa vyžaduje účet Cursor Pro.", + "1": "Kurzor smeruje požiadavky cez svoj vlastný server, takže lokálny koncový bod nie je podporovaný. Povoľte Cloud Endpoint v Nastaveniach." + }, + "steps": { + "1": { + "title": "Otvorte Nastavenia", + "desc": "Prejdite do časti Nastavenia -> Modely" + }, + "2": { + "title": "Povoliť OpenAI API", + "desc": "Povoľte možnosť „Kľúč OpenAI API“." + }, + "3": { + "title": "Základná adresa URL" + }, + "4": { + "title": "API kľúč" + }, + "5": { + "title": "Pridať vlastný model", + "desc": "Kliknite na „Zobraziť všetky modely“ -> „Pridať vlastný model“" + }, + "6": { + "title": "Vyberte Model" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Otvorte Config", + "desc": "Otvorte konfiguračný súbor Pokračovať" + }, + "2": { + "title": "API kľúč" + }, + "3": { + "title": "Vyberte Model" + }, + "4": { + "title": "Pridať konfiguráciu modelu", + "desc": "Pridajte do poľa modelov nasledujúcu konfiguráciu:" + } + } + } + } + }, + "combos": { + "title": "kombá", + "description": "Vytvárajte kombinácie modelov s váženým smerovaním a záložnou podporou", + "createCombo": "Vytvorte kombináciu", + "editCombo": "Upraviť Combo", + "deleteCombo": "Odstrániť Combo", + "noModels": "Žiadne modely", + "noModelsYet": "Zatiaľ neboli pridané žiadne modely", + "addModel": "Pridať model", + "addModelToCombo": "Pridať model do Combo", + "routingStrategy": "Stratégia smerovania", + "maxRetries": "Maximálny počet opakovaní", + "timeout": "Časový limit (ms)", + "healthcheck": "Healthcheck", + "priority": "Priorita", + "fallback": "Záložný", + "roundRobin": "Round Robin", + "random": "Náhodný", + "leastLatency": "Najnižšia latencia", + "comboName": "Kombinovaný názov", + "comboNamePlaceholder": "moje-kombo", + "deleteConfirm": "Odstrániť túto kombináciu?", + "noCombosYet": "Zatiaľ žiadne kombá", + "comboCreated": "Kombinácia bola úspešne vytvorená", + "comboUpdated": "Kombinácia bola úspešne aktualizovaná", + "comboDeleted": "Kombinácia bola odstránená", + "failedCreate": "Nepodarilo sa vytvoriť kombináciu", + "failedUpdate": "Nepodarilo sa aktualizovať kombináciu", + "errorCreating": "Chyba pri vytváraní kombinácie", + "errorUpdating": "Chyba pri aktualizácii kombinácie", + "errorDeleting": "Chyba pri odstraňovaní kombinácie", + "testFailed": "Testovacia žiadosť zlyhala", + "failedToggle": "Kombináciu sa nepodarilo prepnúť", + "testResults": "Výsledky testu — {name}", + "resolvedBy": "Vyriešil:", + "more": "+{count} ďalších", + "reqs": "reqs", + "success": "úspech", + "proxyConfigured": "Proxy je nakonfigurovaný", + "copyComboName": "Kopírovať názov kombinácie", + "enableCombo": "Povoliť kombináciu", + "disableCombo": "Zakázať kombináciu", + "testCombo": "Testovacia kombinácia", + "duplicate": "Duplicitné", + "proxyConfig": "Konfigurácia proxy", + "nameRequired": "Meno je povinné", + "nameInvalid": "Iba písmená, čísla, -, _, / a . povolené", + "nameHint": "Písmená, čísla, -, _, / a . povolené", + "priorityDesc": "Sekvenčný núdzový postup: najprv vyskúša model 1, potom 2 atď.", + "weightedDesc": "Rozdeľuje návštevnosť podľa hmotnostného percenta so záložnou možnosťou", + "roundRobinDesc": "Kruhová distribúcia: každá požiadavka prechádza na ďalší model v rotácii", + "randomDesc": "Jednotný náhodný výber, potom návrat k zostávajúcim modelom", + "leastUsedDesc": "Vyberie model s najmenším počtom požiadaviek, čím vyrovná zaťaženie v priebehu času", + "costOptimizedDesc": "Najprv sa presmeruje na najlacnejší model na základe ceny", + "models": "Modelky", + "autoBalance": "Automatické vyváženie", + "advancedSettings": "Rozšírené nastavenia", + "retryDelay": "Oneskorenie opätovného pokusu (ms)", + "concurrencyPerModel": "Súbežnosť / Model", + "queueTimeout": "Časový limit fronty (ms)", + "advancedHint": "Ak chcete použiť globálne predvolené hodnoty, nechajte prázdne. Tieto prepíšu nastavenia jednotlivých poskytovateľov.", + "moveUp": "Posunúť sa hore", + "moveDown": "Presuňte sa nadol", + "removeModel": "Odstrániť", + "saving": "Ukladá sa...", + "weighted": "Vážené", + "leastUsed": "Najmenej používané", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "náklady", + "budget": "Rozpočet", + "totalCost": "Celkové náklady", + "breakdown": "Rozdelenie nákladov", + "noData": "Žiadne údaje o nákladoch", + "byModel": "Podľa modelu", + "byProvider": "Poskytovateľom" + }, + "endpoint": { + "title": "Koncový bod API", + "available": "Dostupné koncové body", + "cloudProxy": "Cloud proxy", + "disableConfirm": "Naozaj chcete zakázať cloud proxy?", + "baseUrl": "Základná adresa URL", + "apiKeyLabel": "API kľúč", + "registeredKeys": "Registrované kľúče", + "chatCompletions": "Dokončenia četu", + "responses": "Odpovede", + "listModels": "Zoznam modelov", + "usingCloudProxy": "Používanie cloudového proxy", + "usingLocalServer": "Použitie lokálneho servera", + "machineId": "ID stroja: {id}...", + "disableCloud": "Zakázať cloud", + "enableCloud": "Povoliť cloud", + "modelsAcrossEndpoints": "{models} modelov v {endpoints} koncových bodoch", + "chatDesc": "Streaming a non-streaming chat so všetkými poskytovateľmi", + "embeddings": "Vloženie", + "embeddingsDesc": "Textové vloženie pre vyhľadávanie a RAG potrubia", + "imageGeneration": "Generovanie obrázkov", + "imageDesc": "Generujte obrázky z textových výziev", + "rerank": "Prehodnotiť", + "rerankDesc": "Zmeňte poradie dokumentov podľa relevantnosti k dotazu", + "audioTranscription": "Zvukový prepis", + "audioTranscriptionDesc": "Prepis zvukových súborov na text (Whisper)", + "textToSpeech": "Text na reč", + "textToSpeechDesc": "Prevod textu na prirodzene znejúcu reč", + "moderations": "Moderovania", + "moderationsDesc": "Moderovanie obsahu a klasifikácia bezpečnosti", + "enableCloudTitle": "Povoliť Cloud Proxy", + "whatYouGet": "Čo získate", + "cloudBenefitAccess": "Získajte prístup k svojmu API odkiaľkoľvek na svete", + "cloudBenefitShare": "Jednoducho zdieľajte koncový bod so svojím tímom", + "cloudBenefitPorts": "Nie je potrebné otvárať porty ani konfigurovať firewall", + "cloudBenefitEdge": "Rýchla globálna okrajová sieť", + "cloudSessionNote": "Cloud ponechá vašu autorizačnú reláciu 1 deň. Ak sa nepoužije, automaticky sa vymaže.", + "cloudUnstableNote": "Cloud je momentálne nestabilný s Claude Code OAuth v niektorých prípadoch.", + "cloudConnected": "Cloud Proxy je pripojený!", + "connectingToCloud": "Pripája sa ku cloudu...", + "verifyingConnection": "Overuje sa pripojenie...", + "connecting": "Pripája sa...", + "verifying": "Overuje sa...", + "connected": "Pripojené!", + "disableCloudTitle": "Zakázať cloud proxy", + "disableWarning": "Všetky overovacie relácie budú z cloudu odstránené.", + "syncingData": "Synchronizujú sa najnovšie údaje...", + "disablingCloud": "Vypína sa cloud...", + "syncing": "Prebieha synchronizácia...", + "disabling": "Zakazuje sa...", + "cloudConnectedVerified": "Cloud Proxy je pripojený a overený!", + "connectedVerificationPending": "Pripojené – čaká sa na overenie", + "connectedVerificationPendingWithError": "Pripojené – čaká sa na overenie: {error}", + "cloudDisabledSuccess": "Cloud bol úspešne deaktivovaný", + "syncedSuccess": "Úspešne synchronizované", + "failedDisable": "Cloud sa nepodarilo zakázať", + "failedEnable": "Nepodarilo sa povoliť cloud", + "cloudRequestTimeout": "Časový limit žiadosti o cloud vypršal", + "cloudRequestFailed": "Požiadavka cloudu zlyhala", + "cloudWorkerUnreachable": "Nepodarilo sa spojiť s pracovníkom cloudu. Uistite sa, že je spustená cloudová služba (npm run dev v /cloud).", + "connectionFailed": "Pripojenie zlyhalo", + "syncFailed": "Synchronizácia cloudových údajov zlyhala", + "providerModelsTitle": "{provider} — Modely", + "noModelsForProvider": "Pre tohto poskytovateľa nie sú dostupné žiadne modely.", + "chat": "Chat", + "embedding": "Vkladanie", + "image": "Obrázok", + "custom": "zvykom", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Zdravie systému", + "description": "Monitorovanie vašej inštancie OmniRoute v reálnom čase", + "healthy": "Zdravý", + "degraded": "Degradovaný", + "down": "Dole", + "uptime": "Uptime", + "memory": "pamäť", + "memoryRss": "Pamäť (RSS)", + "heap": "Hromada", + "cpu": "CPU", + "database": "Databáza", + "version": "Verzia", + "lastCheck": "Posledná kontrola", + "providerHealth": "Zdravie poskytovateľa", + "systemMetrics": "Systémové metriky", + "tokenHealth": "Token Health", + "refreshAll": "Obnoviť všetko", + "checkNow": "Skontrolujte teraz", + "loadingHealth": "Načítavajú sa zdravotné údaje...", + "failedToLoad": "Nepodarilo sa načítať zdravotné údaje: {error}", + "retry": "Skúste to znova", + "allOperational": "Všetky systémy funkčné", + "issuesDetected": "Zistené systémové problémy", + "updatedAt": "Aktualizované {time}", + "latency": "Latencia", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Celkový počet žiadostí", + "noDataYet": "Zatiaľ žiadne údaje", + "promptCache": "Prompt Cache", + "entries": "Príspevky", + "hitRate": "Miera prístupu", + "hitsMisses": "Hity / Misses", + "signatureCache": "Vyrovnávacia pamäť podpisov", + "signatureDefaults": "Predvolené", + "signatureTool": "Nástroj", + "signatureFamily": "Rodina", + "signatureSession": "Relácia", + "recovering": "Zotavovanie", + "noCBData": "Nie sú k dispozícii žiadne údaje o ističi. Najprv urobte nejaké požiadavky.", + "providerHealthStatusAria": "Zdravotný stav poskytovateľa", + "issuesLabel": "Zistené problémy", + "operational": "Operatívne", + "providers": "Poskytovatelia", + "healthyCount": "{count} zdravý", + "nodeVersion": "Uzol {version}", + "failures": "{count} zlyhanie", + "failuresPlural": "{count} zlyhania", + "lastFailure": "Posledný", + "rateLimitStatus": "Stav limitu sadzby", + "activeLimiters": "{count} aktívny obmedzovač", + "activeLimitersPlural": "{count} aktívnych obmedzovačov", + "queued": "Vo fronte", + "queuedCount": "{count} v poradí", + "running": "beh", + "runningCount": "{count} beží", + "ok": "OK", + "activeLockouts": "Aktívne blokovania", + "resetConfirm": "Obnoviť všetky ističe do zdravého stavu? Tým sa vymažú všetky počty porúch a obnovia sa prevádzkový stav všetkých poskytovateľov.", + "resetAllTitle": "Resetujte všetky ističe do zdravého stavu", + "resetting": "Resetovanie...", + "resetAll": "Obnoviť všetko", + "until": "Do {time}" + }, + "limits": { + "title": "Limity a kvóty", + "rateLimit": "Limit sadzby", + "remaining": "Zostávajúce", + "requestsPerMinute": "Žiadosti/min", + "tokensPerMinute": "Tokeny/min", + "dailyLimit": "Denný limit" + }, + "logs": { + "title": "Denníky", + "requestLogs": "Vyžiadať denníky", + "proxyLogs": "Protokoly proxy", + "auditLog": "Audit Log", + "console": "Konzola", + "auditLogDesc": "Administratívne úkony a bezpečnostné udalosti", + "loading": "Načítava sa...", + "refresh": "Obnoviť", + "filterByAction": "Filtrovať podľa akcie...", + "filterByActor": "Filtrovať podľa herca...", + "filterEntriesAria": "Filtrujte záznamy denníka auditu", + "filterByActionTypeAria": "Filtrujte podľa typu akcie", + "filterByActorAria": "Filtrujte podľa herca", + "refreshAuditLogAria": "Obnoviť denník auditu", + "tableAria": "Záznamy denníka auditu", + "failedFetchAuditLog": "Nepodarilo sa načítať denník auditu", + "showing": "Zobrazuje sa {count} záznamov (posun {offset})", + "search": "Hľadať", + "timestamp": "Časová pečiatka", + "action": "Akcia", + "actor": "herec", + "target": "Cieľ", + "details": "Podrobnosti", + "ipAddress": "IP adresa", + "notAvailable": "—", + "noEntries": "Nenašli sa žiadne záznamy denníka auditu", + "previous": "Predchádzajúce", + "next": "Ďalej" + }, + "onboarding": { + "welcome": "Vitajte", + "security": "Bezpečnosť", + "test": "Test", + "ready": "Pripravený!", + "setPassword": "Nastaviť heslo", + "addProvider": "Pridajte svojho prvého poskytovateľa", + "getStarted": "Začíname", + "skip": "Preskočiť", + "skipWizard": "Úplne preskočiť sprievodcu", + "skipPassword": "Preskočiť nastavenie hesla", + "skipAndContinue": "Preskočiť a pokračovať", + "passwordLabel": "heslo", + "confirmPassword": "Potvrďte heslo", + "enterPassword": "Zadajte heslo", + "confirmPasswordPlaceholder": "Potvrďte heslo", + "passwordsMismatch": "Heslá sa nezhodujú", + "setupComplete": "Nastavenie je dokončené!", + "goToDashboard": "Prejdite na Dashboard →", + "welcomeDesc": "OmniRoute je váš lokálny proxy AI API. Smeruje požiadavky k viacerým poskytovateľom AI pomocou vyrovnávania záťaže, prepnutia pri zlyhaní a sledovania používania.", + "multiProvider": "Multi-poskytovateľ", + "usageTracking": "Sledovanie používania", + "apiKeyMgmt": "API kľúč Mgmt", + "securityDesc": "Nastavte si heslo na ochranu svojho informačného panela alebo ho zatiaľ preskočte.", + "providerDesc": "Pripojte svojho prvého poskytovateľa AI. Neskôr môžete pridať ďalšie.", + "apiKeyRequired": "API kľúč (povinné)", + "customUrlOptional": "Vlastná adresa URL (voliteľné)", + "testDesc": "Overte, či pripojenie k vášmu poskytovateľovi funguje.", + "runTest": "Spustite test pripojenia", + "testingConnection": "Testuje sa pripojenie...", + "connectionSuccessful": "Pripojenie úspešné! Váš poskytovateľ je pripravený.", + "noProviderFound": "Nenašiel sa žiadny poskytovateľ. Môžete ho pridať neskôr z hlavného panela.", + "testFailed": "Test zlyhal, ale môžete to nakonfigurovať neskôr.", + "couldNotTest": "Momentálne nie je možné testovať. Testovať môžete z palubnej dosky.", + "doneDesc": "Všetko je pripravené! Vaša inštancia OmniRoute je nakonfigurovaná a pripravená na proxy požiadavky AI.", + "yourEndpoint": "Váš koncový bod:", + "continue": "Pokračovať", + "retry": "Skúste to znova", + "failedSetPassword": "Nepodarilo sa nastaviť heslo. Skúste to znova.", + "failedAddProvider": "Poskytovateľa sa nepodarilo pridať. Skúste to znova.", + "connectionError": "Chyba pripojenia. Skúste to znova.", + "provider": "Poskytovateľ" + }, + "providers": { + "title": "Poskytovatelia", + "addProvider": "Pridať poskytovateľa", + "editProvider": "Upraviť poskytovateľa", + "deleteProvider": "Odstrániť poskytovateľa", + "noProviders": "Nie sú nakonfigurovaní žiadni poskytovatelia", + "modelAvailability": "Dostupnosť modelu", + "accounts": "účty", + "newAccount": "Nový účet", + "deleteConfirm": "Naozaj chcete odstrániť tohto poskytovateľa?", + "testing": "Testuje sa...", + "testConnection": "Test pripojenia", + "testSuccess": "Pripojenie úspešné", + "testFailed": "Pripojenie zlyhalo", + "available": "Dostupné", + "cooldown": "Cooldown", + "unavailable": "nedostupné", + "unknown": "Neznámy", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatibilné", + "chat": "Chat", + "responses": "Odpovede", + "messages": "Správy", + "oauthProviders": "Poskytovatelia OAuth", + "freeProviders": "Bezplatní poskytovatelia", + "apiKeyProviders": "Poskytovatelia kľúčov API", + "compatibleProviders": "Poskytovatelia kompatibilných s kľúčom API", + "testAll": "Testovať všetko", + "testAllOAuth": "Otestujte všetky pripojenia OAuth", + "testAllFree": "Otestujte všetky bezplatné pripojenia", + "testAllApiKey": "Otestujte všetky pripojenia kľúča API", + "testAllCompatible": "Otestujte všetky kompatibilné pripojenia", + "connected": "{count} Pripojené", + "errorCount": "{count} Chyba ({code})", + "errorCountNoCode": "{count} Chyba", + "noConnections": "Žiadne spojenia", + "disabled": "Zakázané", + "enableProvider": "Povoliť poskytovateľa", + "disableProvider": "Zakázať poskytovateľa", + "testResults": "Výsledky testov", + "noCompatibleYet": "Zatiaľ nie sú pridaní žiadni kompatibilní poskytovatelia", + "compatibleHint": "Pomocou tlačidiel vyššie pridajte koncové body kompatibilné s OpenAI alebo Anthropic", + "addOpenAICompatible": "Pridajte kompatibilitu s OpenAI", + "addAnthropicCompatible": "Pridajte Anthropic Compatible", + "addNewProvider": "Pridať nového poskytovateľa", + "backToProviders": "Späť k poskytovateľom", + "configureNewProvider": "Nakonfigurujte nového poskytovateľa AI na použitie s vašimi aplikáciami.", + "providerLabel": "Poskytovateľ", + "selectProvider": "Vyberte poskytovateľa", + "selectedProvider": "Vybraný poskytovateľ", + "authMethod": "Metóda overovania", + "apiKeyLabel": "API kľúč", + "apiKeyRequired": "Vyžaduje sa kľúč API", + "selectProviderRequired": "Vyberte poskytovateľa", + "enterApiKey": "Zadajte kľúč API", + "apiKeySecure": "Váš kľúč API bude zašifrovaný a bezpečne uložený.", + "oauth2Connect": "Pripojte sa pomocou protokolu OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Pripojte svoj účet pomocou overenia OAuth2.", + "displayName": "Zobrazovaný názov", + "displayNamePlaceholder": "napr. Production API, Dev Environment", + "displayNameHint": "Voliteľné. Popisný názov na identifikáciu tejto konfigurácie.", + "active": "Aktívne", + "activeDescription": "Povoľte používanie tohto poskytovateľa vo vašich aplikáciách", + "cancel": "Zrušiť", + "createProvider": "Vytvoriť poskytovateľa", + "failedCreate": "Poskytovateľa sa nepodarilo vytvoriť", + "errorOccurred": "Vyskytla sa chyba. Skúste to znova.", + "modelStatus": "Stav modelu", + "allModelsOperational": "Všetky modely funkčné", + "modelsWithIssues": "{count} modelov s problémami", + "allModelsNormal": "Všetky modely reagujú normálne.", + "cooldownCleared": "Cooldown vymazaný pre {model}", + "failedClearCooldown": "Chladenie sa nepodarilo vymazať", + "loadingAvailability": "Načítava sa dostupnosť modelu...", + "clearCooldown": "Jasné", + "clearing": "Prebieha čistenie...", + "until": "Do {time}", + "providerTestFailed": "Test poskytovateľa zlyhal", + "modeTest": "{mode} Test", + "passedCount": "{count} prešiel", + "failedCount": "{count} zlyhalo", + "testedCount": "{count} testované", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "CHYBA", + "noActiveConnectionsInGroup": "Pre túto skupinu sa nenašli žiadne aktívne pripojenia.", + "allTestsPassed": "Všetky testy {total} prešli úspešne", + "testSummary": "{passed}/{total} úspešné, {failed} neúspešné", + "nameLabel": "Meno", + "prefixLabel": "Predpona", + "baseUrlLabel": "Základná adresa URL", + "apiTypeLabel": "Typ API", + "prefixHint": "Povinné. Jedinečná predpona pre názvy modelov.", + "nameHint": "Povinné. Priateľský štítok pre tento uzol.", + "baseUrlHint": "Povinné.  Základná adresa URL rozhrania API poskytovateľa.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Overte pripojenie", + "validating": "Overuje sa...", + "connectionValid": "Spojenie je platné!", + "connectionFailed": "Pripojenie zlyhalo. Skontrolujte URL a kľúč.", + "testKeyLabel": "Testovací kľúč API", + "testKeyPlaceholder": "sk-... (len na overenie)", + "providerNotFound": "Poskytovateľ sa nenašiel", + "deleteConnectionConfirm": "Odstrániť toto pripojenie?", + "failedSetAlias": "Nepodarilo sa nastaviť alias", + "failedSaveConnection": "Pripojenie sa nepodarilo uložiť", + "failedSaveConnectionRetry": "Pripojenie sa nepodarilo uložiť. Skúste to znova.", + "failedRetestConnection": "Nepodarilo sa znova otestovať pripojenie", + "deleteCompatibleNodeConfirm": "Odstrániť tento {type} kompatibilný uzol?", + "anthropicCompatibleDetails": "Podrobnosti o antropickej kompatibilite", + "openaiCompatibleDetails": "Podrobnosti kompatibilné s OpenAI", + "messagesApi": "Správy API", + "responsesApi": "Responses API", + "chatCompletions": "Dokončenia četu", + "importingModels": "Importuje sa...", + "importFromModels": "Importovať z /models", + "addConnectionToImport": "Ak chcete povoliť import, pridajte pripojenie.", + "noModelsConfigured": "Nie sú nakonfigurované žiadne modely", + "connectionCount": "{count} pripojení", + "fetchingModels": "Načítavajú sa dostupné modely...", + "failedFetchModels": "Nepodarilo sa načítať modely", + "noModelsFound": "Nenašli sa žiadne modely", + "importFailed": "Import zlyhal", + "noNewModelsAdded": "Neboli pridané žiadne nové modely.", + "adding": "Pridáva sa...", + "importingModelsTitle": "Importovanie modelov", + "copyModel": "Kopírovať model", + "removeModel": "Odstráňte model", + "rateLimitProtected": "Chránené", + "rateLimitUnprotected": "Nechránené", + "enableRateLimitProtection": "Kliknutím povolíte ochranu frekvenčného limitu", + "disableRateLimitProtection": "Kliknutím deaktivujete ochranu limitu frekvencie", + "productionKey": "Výrobný kľúč", + "enterNewApiKey": "Zadajte nový kľúč API", + "optional": "Voliteľné", + "anthropicCompatibleName": "Antropické kompatibilné", + "openaiCompatibleName": "Kompatibilné s OpenAI", + "failedImportModels": "Nepodarilo sa importovať modely", + "noModelsReturnedFromEndpoint": "Z koncového bodu /models sa nevrátili žiadne modely.", + "importingModelsProgress": "Importuje sa {current} z {total} modelov...", + "foundModelsStartingImport": "Počet nájdených modelov: {count}. Spúšťa sa import...", + "importingModelById": "Importuje sa {modelId}...", + "importSuccessCount": "Úspešne importované {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Neboli pridané žiadne nové modely (všetky už existujú).", + "importDoneCount": "✓ Hotovo! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Vyskytla sa neočakávaná chyba", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "správy", + "responsesPath": "odozvy", + "chatCompletionsPath": "chat/dokončenia", + "add": "Pridať", + "edit": "Upraviť", + "delete": "Odstrániť", + "anthropic": "Antropický", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Pre každý kompatibilný uzol je povolené len jedno pripojenie. Ak potrebujete viac pripojení, pridajte ďalší uzol.", + "connections": "Spojenia", + "providerProxyTitleConfigured": "Server proxy poskytovateľa: {host}", + "configured": "nakonfigurovaný", + "providerProxyConfigureHint": "Nakonfigurujte proxy pre všetky pripojenia tohto poskytovateľa", + "providerProxy": "Proxy poskytovateľa", + "noConnectionsYet": "Zatiaľ žiadne spojenia", + "addFirstConnectionHint": "Začnite pridaním prvého pripojenia", + "addConnection": "Pridať pripojenie", + "availableModels": "Dostupné modely", + "pageAutoRefresh": "Stránka sa obnoví automaticky...", + "statusDisabled": "zdravotne postihnutých", + "statusConnected": "pripojený", + "statusRuntimeIssue": "problém s runtime", + "statusAuthFailed": "overenie zlyhalo", + "statusRateLimited": "sadzba obmedzená", + "statusNetworkIssue": "problém so sieťou", + "statusTestUnsupported": "test nie je podporovaný", + "statusUnavailable": "nedostupné", + "statusFailed": "nepodarilo", + "statusError": "chyba", + "oauthAccount": "Účet OAuth", + "errorTypeRuntime": "Miestny čas spustenia", + "errorTypeUpstreamAuth": "Upstream auth", + "errorTypeMissingCredential": "Chýba poverenie", + "errorTypeRefreshFailed": "Obnovenie zlyhalo", + "errorTypeTokenExpired": "Platnosť tokenu vypršala", + "errorTypeRateLimited": "Obmedzená sadzba", + "errorTypeUpstreamUnavailable": "Upstream nedostupný", + "errorTypeNetworkError": "Chyba siete", + "errorTypeTestUnsupported": "Test nie je podporovaný", + "errorTypeUpstreamError": "Chyba proti prúdu", + "proxySourceGlobal": "globálne", + "proxySourceProvider": "Poskytovateľ", + "proxySourceKey": "kľúč", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Znova otestujte autentifikáciu", + "retest": "Otestujte znova", + "disableConnection": "Zakázať pripojenie", + "enableConnection": "Povoliť pripojenie", + "reauthenticateConnection": "Znova overte toto pripojenie", + "proxyConfig": "Konfigurácia proxy", + "aliasExistsAlert": "Alias „{alias}“ už existuje. Použite iný model alebo upravte existujúci alias.", + "openRouterAnyModelHint": "OpenRouter podporuje akýkoľvek model. Pridajte modely a vytvorte aliasy pre rýchly prístup.", + "modelIdFromOpenRouter": "ID modelu (z OpenRouter)", + "openRouterModelPlaceholder": "antropický/claude-3-opus", + "customModels": "Vlastné modely", + "customModelsHint": "Pridajte ID modelov, ktoré nie sú v predvolenom zozname. Tieto budú k dispozícii na smerovanie.", + "modelId": "ID modelu", + "customModelPlaceholder": "napr. gpt-4.5-turbo", + "loading": "Načítava sa...", + "removeCustomModel": "Odstráňte vlastný model", + "noCustomModels": "Zatiaľ neboli pridané žiadne vlastné modely.", + "allSuggestedAliasesExist": "Všetky navrhované aliasy už existujú. Vyberte iný model alebo odstráňte konfliktné aliasy.", + "failedSaveCustomModel": "Nepodarilo sa uložiť vlastný model", + "modelAddedSuccess": "Model {modelId} bol úspešne pridaný", + "failedAddModelTryAgain": "Nepodarilo sa pridať model. Skúste to znova.", + "failedSaveImportedModel": "Nepodarilo sa uložiť importovaný model do vlastnej databázy", + "failedImportModelsTryAgain": "Nepodarilo sa importovať modely. Skúste to znova.", + "failedRemoveModelFromDatabase": "Nepodarilo sa odstrániť model z databázy", + "modelRemovedSuccess": "Model bol úspešne odstránený", + "failedDeleteModelTryAgain": "Model sa nepodarilo odstrániť. Skúste to znova.", + "compatibleModelsDescription": "Pridajte {type}-kompatibilné modely manuálne alebo ich importujte z koncového bodu /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Overenie kľúča API zlyhalo. Skontrolujte kľúč a skúste to znova.", + "addProviderApiKeyTitle": "Pridať kľúč API {provider}", + "checking": "Prebieha kontrola...", + "check": "Skontrolujte", + "valid": "Platné", + "invalid": "Neplatné", + "creating": "Vytvára sa...", + "validationChecksAnthropicCompatible": "Overenie overí {provider} overením kľúča API.", + "validationChecksOpenAiCompatible": "Overenie overí {provider} cez /models na vašej základnej adrese URL.", + "priorityLabel": "Priorita", + "saving": "Ukladá sa...", + "save": "Uložiť", + "editConnection": "Upraviť pripojenie", + "accountName": "Názov účtu", + "email": "Email", + "healthCheckMinutes": "Kontrola stavu (min)", + "healthCheckHint": "Interval proaktívneho obnovenia tokenu. 0 = vypnuté.", + "failedTestConnection": "Nepodarilo sa otestovať pripojenie", + "failed": "Nepodarilo sa", + "leaveBlankKeepCurrentApiKey": "Ak chcete zachovať aktuálny kľúč API, nechajte pole prázdne.", + "editCompatibleTitle": "Upraviť {type} kompatibilné", + "compatibleBaseUrlHint": "Pre svoje {type}-kompatibilné API použite základnú webovú adresu (končiacu na /v1).", + "apiKeyForCheck": "API kľúč (na kontrolu)", + "compatibleProdPlaceholder": "{type} Kompatibilné (produkt)" + }, + "settings": { + "title": "Nastavenia", + "general": "generál", + "security": "Bezpečnosť", + "appearance": "Vzhľad", + "routing": "Smerovanie", + "cache": "Cache", + "resilience": "Odolnosť", + "systemPrompt": "Systémová výzva", + "thinkingBudget": "Myslenie na rozpočet", + "proxy": "Proxy", + "pricing": "Stanovenie cien", + "storage": "Skladovanie", + "policies": "zásady", + "ipFilter": "IP filter", + "comboDefaults": "Predvolené nastavenia kombinácie", + "fallbackChains": "Záložné reťazce", + "changePassword": "Zmeniť heslo", + "enablePassword": "Povoliť heslo", + "darkMode": "Tmavý režim", + "lightMode": "Svetelný režim", + "systemTheme": "Téma systému", + "enableCache": "Povoliť vyrovnávaciu pamäť", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Maximálna veľkosť vyrovnávacej pamäte", + "clearCache": "Vymazať vyrovnávaciu pamäť", + "cacheHits": "Zásahy do vyrovnávacej pamäte", + "cacheMisses": "Cache Misses", + "hitRate": "Miera prístupu", + "cacheEntries": "Záznamy vo vyrovnávacej pamäti", + "circuitBreaker": "Istič", + "retryPolicy": "Zásady opätovného pokusu", + "maxRetries": "Maximálny počet opakovaní", + "retryDelay": "Oneskorenie opakovania", + "timeoutMs": "Časový limit (ms)", + "enableSystemPrompt": "Povoliť systémovú výzvu", + "systemPromptText": "Text systémovej výzvy", + "enableThinking": "Povoliť myslenie", + "maxThinkingTokens": "Maximálne žetóny myslenia", + "enableProxy": "Povoliť server proxy", + "proxyUrl": "Adresa URL proxy", + "pricingRates": "Formát cenových sadzieb", + "currentPricing": "Prehľad aktuálnych cien", + "loadingPricing": "Načítavajú sa údaje o cenách...", + "noPricing": "Nie sú k dispozícii žiadne údaje o cenách", + "input": "Vstup", + "output": "Výstup", + "cached": "Vo vyrovnávacej pamäti", + "reasoning": "Zdôvodnenie", + "cacheCreation": "Vytvorenie vyrovnávacej pamäte", + "customPricing": "Vlastné ceny", + "databaseSize": "Veľkosť databázy", + "backupDb": "Zálohovanie databázy", + "restoreDb": "Obnoviť databázu", + "exportData": "Exportovať údaje", + "importData": "Importovať údaje", + "clearData": "Vymazať všetky údaje", + "clearDataConfirm": "Týmto natrvalo odstránite všetky údaje. si si istý?", + "enableRequestLogs": "Povoliť denníky žiadostí", + "logRetention": "Uchovanie denníka", + "ipWhitelist": "Zoznam povolených IP adries", + "ipBlacklist": "IP Blacklist", + "addIP": "Pridajte IP", + "savedSuccessfully": "Nastavenia boli úspešne uložené", + "ai": "AI", + "advanced": "Pokročilé", + "localMode": "Miestny režim — Všetky údaje uložené vo vašom počítači", + "settingsSectionsAria": "Sekcie nastavení", + "switchThemes": "Prepínajte medzi svetlými a tmavými témami", + "themeSelectionAria": "Výber témy", + "themeLight": "Svetlo", + "themeDark": "Tmavý", + "themeSystem": "Systém", + "hideHealthLogs": "Skryť denníky kontroly stavu", + "hideHealthLogsDesc": "Keď je ZAPNUTÉ, potláčajte správy [HealthCheck] v konzole servera", + "promptCache": "Prompt Cache", + "flushCache": "Vyprázdniť vyrovnávaciu pamäť", + "flushing": "Splachovanie…", + "size": "Veľkosť", + "hits": "Hity", + "evictions": "Vysťahovanie", + "loadingCacheStats": "Načítavajú sa štatistiky vyrovnávacej pamäte…", + "globalProxy": "Globálny proxy", + "globalProxyDesc": "Nakonfigurujte globálny výstupný proxy server pre všetky volania API. Jednotliví poskytovatelia, kombá a kľúče to môžu prepísať.", + "noGlobalProxy": "Nie je nakonfigurovaný žiadny globálny server proxy", + "globalLabel": "globálne", + "configure": "Konfigurovať", + "globalSystemPrompt": "Výzva globálneho systému", + "systemPromptDesc": "Vložené do všetkých požiadaviek na úrovni proxy", + "saved": "Uložené", + "systemPromptPlaceholder": "Zadajte systémovú výzvu na vloženie do všetkých požiadaviek...", + "systemPromptHint": "Táto výzva je pripojená k systémovej správe každej požiadavky. Použite pre globálne pokyny, bezpečnostné pokyny alebo pravidlá formátovania odpovede.", + "chars": "{count} znakov", + "thinkingBudgetTitle": "Myslenie na rozpočet", + "thinkingBudgetDesc": "Ovládajte používanie tokenu uvažovania AI vo všetkých požiadavkách", + "passthrough": "Passthrough", + "passthroughDesc": "Žiadne zmeny – klient kontroluje rozpočet", + "auto": "Auto", + "autoDesc": "Odstráňte všetky konfigurácie myslenia - nechajte poskytovateľa rozhodnúť", + "custom": "Vlastné", + "customDesc": "Nastavte pevný rozpočet tokenu pre všetky požiadavky", + "adaptive": "Adaptívny", + "adaptiveDesc": "Škálujte rozpočet na základe zložitosti požiadavky", + "effortNone": "Žiadne (0 tokenov)", + "effortLow": "Nízka (1 000 tokenov)", + "effortMedium": "Stredné (10 000 tokenov)", + "effortHigh": "Vysoká (128 000 tokenov)", + "tokenBudget": "Tokenový rozpočet", + "tokens": "žetóny", + "baseEffortLevel": "Základná úroveň úsilia", + "adaptiveHint": "Adaptívny režim sa mení od tejto základnej úrovne na základe počtu správ, použitia nástroja a dĺžky výzvy.", + "requireLogin": "Vyžadovať prihlásenie", + "requireLoginDesc": "Keď je ZAPNUTÉ, ovládací panel vyžaduje heslo. Keď je OFF, prístup bez prihlásenia.", + "currentPassword": "Aktuálne heslo", + "enterCurrentPassword": "Zadajte aktuálne heslo", + "newPassword": "Nové heslo", + "enterNewPassword": "Zadajte nové heslo", + "confirmPassword": "Potvrďte nové heslo", + "confirmPasswordPlaceholder": "Potvrďte nové heslo", + "passwordsNoMatch": "Heslá sa nezhodujú", + "passwordUpdated": "Heslo bolo úspešne aktualizované", + "failedUpdatePassword": "Aktualizácia hesla zlyhala", + "errorOccurred": "Vyskytla sa chyba", + "updatePassword": "Aktualizovať heslo", + "setPassword": "Nastaviť heslo", + "apiEndpointProtection": "API Endpoint Protection", + "requireAuthModels": "Vyžadovať kľúč API pre /models", + "requireAuthModelsDesc": "Keď je zapnuté, koncový bod /v1/models vráti 404 pre neoverené požiadavky. Zabraňuje objaveniu modelu neoprávnenými používateľmi.", + "blockedProviders": "Blokovaní poskytovatelia", + "blockedProvidersDesc": "Skryť konkrétnych poskytovateľov v odpovedi /v1/models. Blokovaní poskytovatelia sa nezobrazia v zoznamoch modelov.", + "providersBlocked": "{count} poskytovatelia blokovaní z /models", + "blockProviderTitle": "Blokovať {provider}", + "unblockProviderTitle": "Odblokovať {provider}", + "routingStrategy": "Stratégia smerovania", + "fillFirst": "Najprv vyplniť", + "fillFirstDesc": "Používajte účty v poradí podľa priority", + "roundRobin": "Round Robin", + "roundRobinDesc": "Prechádzajte všetkými účtami", + "p2c": "P2C", + "p2cDesc": "Vyberte 2 náhodné, použite zdravší", + "random": "Náhodný", + "randomDesc": "Náhodný účet každej žiadosti", + "leastUsed": "Najmenej používané", + "leastUsedDesc": "Vyberte najmenej nedávno používaný účet", + "costOpt": "Opt", + "costOptDesc": "Uprednostnite najlacnejší dostupný účet", + "stickyLimit": "Sticky Limit", + "stickyLimitDesc": "Hovory na účet pred prepnutím", + "modelAliases": "Aliasy modelov", + "modelAliasesDesc": "Vzory zástupných znakov na premapovanie názvov modelov • Použite * a ?", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Vzor", + "targetModel": "Cieľový model", + "add": "+ Pridať", + "session": "Relácia", + "sessionDetailsAria": "Podrobnosti relácie", + "status": "Stav", + "authenticated": "Overené", + "guest": "hosť", + "loginTime": "Čas prihlásenia", + "sessionAge": "Vek relácie", + "browser": "Prehliadač", + "clearLocalData": "Vymazať miestne údaje", + "logout": "Odhlásiť sa", + "clearLocalDataConfirm": "Vymazať všetky miestne údaje? Týmto obnovíte svoje predvoľby.", + "unknown": "Neznámy", + "systemActor": "systému", + "ipAccessControl": "Kontrola prístupu IP", + "ipAccessControlDesc": "Blokovať alebo povoliť konkrétne adresy IP", + "ipModeDisabled": "Zakázané", + "ipModeBlacklist": "Čierna listina", + "ipModeWhitelist": "Whitelist", + "ipModeWhitelistPriority": "Priorita WL", + "addIpAddress": "Add IP Address", + "ipAddressPlaceholder": "192.168.1.0/24 alebo 10.0.*.*", + "block": "+ Blokovať", + "allow": "+ Povoliť", + "blocked": "Blokované ({count})", + "allowed": "Povolené ({count})", + "temporaryBans": "Dočasné zákazy ({count})", + "minLeft": "Zostáva {min}m", + "auditLog": "Audit Log", + "searchAuditLogs": "Hľadať v denníkoch auditu...", + "failedLoadAuditLog": "Nepodarilo sa načítať denník auditu", + "noAuditEvents": "Nenašli sa žiadne udalosti auditu", + "action": "Akcia", + "actor": "herec", + "details": "Podrobnosti", + "time": "Čas", + "fallbackChainsTitle": "Záložné reťazce", + "fallbackChainsDesc": "Definujte záložnú objednávku poskytovateľa podľa modelu", + "addChain": "+ Pridať reťazec", + "modelName": "Názov modelu", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Poskytovatelia (oddelení čiarkami, v poradí podľa priority)", + "providersCommaSeparatedPlaceholder": "antropický, openai, gemini", + "createChain": "Vytvorte reťazec", + "noFallbackChains": "No Fallback Chains", + "noFallbackChainsDesc": "Vytvorte reťazec na definovanie záložného poradia poskytovateľa pre model.", + "loadingFallbackChains": "Načítavajú sa záložné reťazce...", + "deleteChainConfirm": "Chcete odstrániť záložný reťazec pre „{model}“?", + "chainCreated": "Reťazec vytvorený pre {model}", + "chainDeleted": "Reťazec odstránený pre {model}", + "failedCreateChain": "Nepodarilo sa vytvoriť reťazec", + "failedDeleteChain": "Reťaz sa nepodarilo odstrániť", + "deleteChain": "Odstrániť reťazec", + "fillModelAndProviders": "Vyplňte názov modelu a poskytovateľov", + "addAtLeastOneProvider": "Pridajte aspoň jedného poskytovateľa", + "comboDefaultsTitle": "Predvolené nastavenia kombinácie", + "globalComboConfig": "Globálna kombinovaná konfigurácia", + "defaultStrategy": "Predvolená stratégia", + "defaultStrategyDesc": "Aplikované na nové kombá bez explicitnej stratégie", + "comboStrategyAria": "Kombinovaná stratégia", + "priority": "Priorita", + "weighted": "Vážené", + "maxRetriesLabel": "Maximálny počet opakovaní", + "retryDelayLabel": "Oneskorenie opätovného pokusu (ms)", + "timeoutLabel": "Časový limit (ms)", + "healthCheck": "Kontrola zdravotného stavu", + "healthCheckDesc": "Vopred skontrolujte dostupnosť poskytovateľa", + "trackMetrics": "Sledovať metriky", + "trackMetricsDesc": "Zaznamenajte metriky žiadostí pre jednotlivé kombinácie", + "providerOverrides": "Prepíše poskytovateľa", + "providerOverridesDesc": "Prepísať časový limit a opakované pokusy na poskytovateľa. Nastavenia poskytovateľa prepíšu globálne predvolené nastavenia.", + "providerMaxRetriesAria": "{provider} maximálny počet opakovaní", + "providerTimeoutAria": "{provider} časový limit ms", + "removeProviderOverrideAria": "Odstrániť prepísanie {provider}", + "newProviderNamePlaceholder": "napr. google, openai...", + "newProviderNameAria": "Nový názov poskytovateľa", + "retries": "zopakuje", + "ms": "pani", + "saveComboDefaults": "Uložiť predvolené nastavenia kombinácie", + "maxNestingDepth": "Maximálna hĺbka vnorenia", + "concurrencyPerModel": "Súbežnosť / Model", + "queueTimeout": "Časový limit fronty (ms)", + "providerProfiles": "Profily poskytovateľov", + "providerProfilesDesc": "Samostatné nastavenia odolnosti pre poskytovateľov OAuth (na základe relácie) a kľúča API (merané). Poskytovatelia OAuth majú prísnejšie limity kvôli nižším limitom sadzieb.", + "oauthProviders": "Poskytovatelia OAuth", + "apiKeyProviders": "Poskytovatelia kľúčov API", + "transientCooldown": "Prechodné ochladenie", + "rateLimitCooldown": "Ochladenie limitu rýchlosti", + "maxBackoffLevel": "Maximálna úroveň stiahnutia", + "cbThreshold": "CB prah", + "cbResetTime": "Čas resetovania CB", + "rateLimiting": "Obmedzenie sadzieb", + "rateLimitingDesc": "Poskytovatelia kľúčov API sú automaticky obmedzovaní s bezpečnými predvolenými nastaveniami. Limity sa učia z hlavičiek odpovedí a časom sa prispôsobujú.", + "defaultSafetyNet": "Predvolená bezpečnostná sieť", + "rpm": "RPM", + "minGap": "Min Gap", + "maxConcurrent": "Maximálne súbežné", + "activeLimiters": "Aktívne obmedzovače", + "noActiveLimiters": "Zatiaľ žiadne aktívne obmedzovače rýchlosti.", + "reservoir": "Priehrada", + "running": "Beh", + "queued": "Vo fronte", + "circuitBreakers": "Ističe", + "breakerStateClosed": "Zatvorené", + "breakerStateOpen": "Otvorte", + "breakerStateHalfOpen": "Napoly otvorené", + "tripped": "{count} zakopla", + "healthy": "{count} zdravý", + "resetAll": "Obnoviť všetko", + "noCircuitBreakers": "Zatiaľ nie sú aktívne žiadne ističe. Vytvárajú sa automaticky, keď požiadavky prechádzajú cez kombinovaný kanál.", + "failures": "{count} zlyhania", + "policiesLocked": "Zásady a uzamknuté identifikátory", + "allOperational": "Všetky systémy fungujú – žiadne blokovania alebo vypnuté ističe", + "loadingPolicies": "Načítavajú sa pravidlá...", + "lockedIdentifiers": "Uzamknuté identifikátory", + "unlockedIdentifier": "Odomknuté: {identifier}", + "sinceDate": "od {date}", + "forceUnlock": "Vynútiť odomknutie", + "unlocking": "Odomykanie...", + "failedUnlock": "Nepodarilo sa odomknúť", + "failedLoadWithStatus": "Nepodarilo sa načítať: {status}", + "failedLoadResilience": "Nepodarilo sa načítať stav odolnosti", + "saveFailed": "Uloženie zlyhalo", + "resetFailed": "Obnovenie zlyhalo", + "loadingResilience": "Načítava sa stav odolnosti...", + "retry": "Skúste to znova", + "systemStorage": "Systém a úložisko", + "allDataLocal": "Všetky údaje uložené lokálne vo vašom počítači", + "databasePath": "Cesta k databáze", + "exportDatabase": "Exportovať databázu", + "exportAll": "Exportovať všetko (.tar.gz)", + "importDatabase": "Importovať databázu", + "confirmDbImport": "Potvrďte import databázy", + "confirmDbImportDesc": "Týmto sa všetky aktuálne údaje nahradia obsahom z {file}. Pred importom sa automaticky vytvorí záloha.", + "yesImport": "Áno, import", + "lastBackup": "Posledná záloha", + "noBackupYet": "Zatiaľ žiadna záloha", + "backupNow": "Zálohovať teraz", + "backupRestore": "Zálohovanie a obnovenie", + "viewBackups": "Zobraziť zálohy", + "hide": "Skryť", + "backupRetentionDesc": "Snímky databázy sa vytvárajú automaticky pred obnovením a každých 15 minút pri zmene údajov. Uchovávanie: 24 hodín + 30 denných záloh s inteligentnou rotáciou.", + "loadingBackups": "Načítavajú sa zálohy...", + "noBackupsYet": "Zatiaľ nie sú k dispozícii žiadne zálohy. Pri zmene údajov sa automaticky vytvoria zálohy.", + "backupsAvailable": "K dispozícii sú {count} zálohy", + "refresh": "Obnoviť", + "confirm": "potvrdiť?", + "yes": "áno", + "no": "Nie", + "restore": "Obnoviť", + "invalidFileType": "Neplatný typ súboru. Akceptované sú iba súbory .sqlite.", + "exportFailed": "Export zlyhal", + "exportFailedWithError": "Export zlyhal: {error}", + "fullExportFailedWithError": "Úplný export zlyhal: {error}", + "backupCreated": "Záloha vytvorená: {file}", + "restoreSuccess": "Obnovené! {connections} pripojenia, {nodes} uzly, {combos} kombá, {apiKeys} kľúče API.", + "importSuccess": "Databáza bola importovaná! {connections} pripojenia, {nodes} uzly, {combos} kombá, {apiKeys} kľúče API.", + "justNow": "práve teraz", + "minutesAgo": "Pred {count}m", + "hoursAgo": "pred {count}h", + "daysAgo": "Pred {count}d", + "backupReasonManual": "manuál", + "backupReasonPreRestore": "predbežné obnovenie", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Žiadne zmeny od poslednej zálohy", + "backupFailed": "Zálohovanie zlyhalo", + "restoreFailed": "Obnovenie zlyhalo", + "importFailed": "Import zlyhal", + "errorDuringRestore": "Počas obnovy sa vyskytla chyba", + "errorDuringImport": "Počas importu sa vyskytla chyba", + "modelPricing": "Modelové ceny", + "modelPricingDesc": "Konfigurácia nákladových sadzieb na model • Všetky sadzby v tokenoch $/1 milión", + "providers": "Poskytovatelia", + "registry": "Registratúra", + "priced": "Cena", + "searchProvidersModels": "Hľadať poskytovateľov alebo modely...", + "showAll": "Zobraziť všetko", + "noProvidersMatch": "Vášmu vyhľadávaniu nezodpovedajú žiadni poskytovatelia.", + "howPricingWorks": "Ako funguje tvorba cien", + "cacheWrite": "Zápis do vyrovnávacej pamäte", + "unsaved": "neuložené", + "resetDefaults": "Obnoviť predvolené nastavenia", + "saveProvider": "Uložiť poskytovateľa", + "saving": "Ukladá sa...", + "model": "Model", + "models": "modelov", + "moreProviders": "{count} ďalších poskytovateľov", + "withPricing": "s nastavenou cenou", + "policiesCircuitBreakers": "Zásady a ističe", + "activeIssuesDetected": "Boli zistené aktívne problémy", + "off": "Vypnuté", + "resetPricingConfirm": "Chcete resetovať všetky ceny pre {provider} na predvolené hodnoty?", + "pricingDescInput": "Vstup: tokeny odoslané do modelu", + "pricingDescOutput": "Výstup: vygenerované tokeny", + "pricingDescCached": "Vo vyrovnávacej pamäti: opätovne použitý vstup (~50 % vstupnej rýchlosti)", + "pricingDescReasoning": "Zdôvodnenie: žetóny myslenia (spadajú späť na výstup)", + "pricingDescCacheWrite": "Zápis do vyrovnávacej pamäte: vytváranie záznamov do vyrovnávacej pamäte (späť na Vstup)", + "pricingDescFormula": "Cena = (vstup × rýchlosť_vstupu) + (výstup × rýchlosť_výstupu) + (ukladaná do vyrovnávacej pamäte × rýchlosť_vyrovnávacej pamäte) na milión tokenov.", + "pricingSettingsTitle": "Nastavenia cien", + "totalModels": "Celkový počet modelov", + "active": "Aktívne", + "costCalculation": "Výpočet nákladov", + "costCalculationDesc": "Náklady sa vypočítavajú na základe používania tokenov a cenových sadzieb nakonfigurovaných pre každý model.", + "pricingFormat": "Formát ceny", + "pricingFormatDesc": "Všetky sadzby sú v $/1 milión tokenov (dolárov za milión tokenov).", + "tokenTypes": "Typy tokenov", + "inputTokenDesc": "Štandardné tokeny výzvy", + "outputTokenDesc": "Tokeny dokončenia/odpovede", + "cachedTokenDesc": "Vstupné tokeny uložené vo vyrovnávacej pamäti (zvyčajne 50 % vstupnej sadzby)", + "reasoningTokenDesc": "Špeciálne žetóny uvažovania/myslenia (návrat k výstupnej rýchlosti)", + "cacheCreationTokenDesc": "Tokeny používané na vytváranie záznamov vo vyrovnávacej pamäti (záložná rýchlosť vstupu)", + "customPricingNote": "Predvolené ceny pre konkrétne modely môžete prepísať. Vlastné prepísania majú prednosť pred automaticky zistenými cenami.", + "editPricing": "Upraviť ceny", + "viewFullDetails": "Zobraziť úplné podrobnosti" + }, + "translator": { + "title": "Prekladateľ", + "metaTitle": "Prekladateľské ihrisko | OmniRoute", + "metaDescription": "Laďte, testujte a vizualizujte preklady formátu API medzi poskytovateľmi", + "playgroundTitle": "Ihrisko pre prekladateľov", + "playground": "Ihrisko", + "realtime": "Prekladateľská činnosť v reálnom čase", + "chatTester": "Tester chatu", + "testBench": "Testovacia lavica", + "liveMonitor": "Živý monitor", + "modeDescriptionPlayground": "Prilepte ľubovoľné telo žiadosti API a uvidíte, ako ho OmniRoute preloží medzi formátmi poskytovateľov (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Posielajte skutočné žiadosti o rozhovor cez OmniRoute a skontrolujte celú spiatočnú cestu: vstup, preložená žiadosť, odpoveď poskytovateľa a preložený výstup.", + "modeDescriptionTestBench": "Spustite preddefinované scenáre a porovnajte kompatibilitu medzi poskytovateľmi a modelmi.", + "modeDescriptionLiveMonitor": "Sledujte udalosti prekladu v reálnom čase, keď cez OmniRoute prechádzajú požiadavky.", + "modeDescriptionFallback": "Laďte, testujte a vizualizujte, ako OmniRoute prekladá požiadavky API medzi poskytovateľmi.", + "recentTranslations": "Nedávne preklady", + "noTranslations": "Zatiaľ žiadne preklady", + "source": "Zdroj", + "target": "Cieľ", + "time": "Čas", + "model": "Model", + "status": "Stav", + "latency": "Latencia", + "totalTranslations": "Celkový počet prekladov", + "successful": "Úspešný", + "errors": "Chyby", + "avgLatency": "Priem. latencia", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Naživo – automatické obnovenie", + "paused": "Pozastavené", + "eventsAppearHint": "Udalosti prekladu sa tu zobrazujú, keď žiadosti prechádzajú cez OmniRoute. Na generovanie udalostí použite ktorúkoľvek z týchto metód:", + "chatTesterTab": "Karta Tester rozhovoru", + "testBenchTab": "Záložka Test Bench", + "externalApiCalls": "Externé volania API", + "ideCliIntegrations": "Integrácia IDE/CLI", + "inMemoryNote": "Poznámka: Udalosti sa ukladajú do pamäte a resetujú sa, keď sa server reštartuje.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Prevodník formátov", + "formatConverterDescription": "Prilepte alebo zadajte telo požiadavky JSON. Prekladateľ automaticky rozpozná zdrojový formát a prevedie ho do cieľového formátu. Použite toto na ladenie spôsobu, akým OmniRoute prekladá požiadavky medzi formátmi (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Vstup", + "output": "Výstup", + "auto": "Auto", + "swapFormats": "Vymeňte formáty", + "translateAction": "Preložiť", + "clear": "Jasné", + "inputPlaceholder": "Sem prilepte telo požiadavky alebo vyberte šablónu nižšie...", + "exampleTemplates": "Vzorové šablóny", + "exampleTemplatesHint": "— Kliknutím načítajte", + "templateLoadHint": "Šablóna načíta požiadavku vo formáte {format}. Zmeňte zdrojový formát a načítajte sa v inom formáte.", + "compatibilityTester": "Tester kompatibility", + "compatibilityReport": "Správa o kompatibilite", + "testBenchDescription": "Spustite preddefinované scenáre (Simple Chat, Tool Calling atď.) na overenie kompatibility prekladu a poskytovateľa. Vyberte zdrojový formát a cieľového poskytovateľa a potom spustite všetky testy, aby ste videli percento kompatibility. Pomocou tohto zistíte, ktoré funkcie fungujú u rôznych poskytovateľov.", + "targetProvider": "Cieľový poskytovateľ", + "runAllTests": "Spustite všetky testy", + "runTest": "Spustiť test", + "reRun": "Znovu spustiť", + "running": "Beží...", + "passed": "prešiel", + "failed": "nepodarilo", + "passedIconLabel": "✅ Prešlo", + "chunks": "kúsky", + "scenarioSimpleChat": "Jednoduchý chat", + "scenarioToolCalling": "Vyvolanie nástroja", + "scenarioMultiTurn": "Viacotáčkový", + "scenarioThinking": "Myslenie", + "scenarioSystemPrompt": "Systémová výzva", + "scenarioStreaming": "Streamovanie", + "templateNames": { + "simple-chat": "Jednoduchý chat", + "tool-calling": "Vyvolanie nástroja", + "multi-turn": "Viacotáčkový", + "thinking": "Myslenie", + "system-prompt": "Systémová výzva", + "streaming": "Streamovanie" + }, + "templateDescriptions": { + "simple-chat": "Základná textová správa", + "tool-calling": "Vyvolanie funkcie/nástroja", + "multi-turn": "Rozhovor s históriou", + "thinking": "Rozšírené myslenie / uvažovanie", + "system-prompt": "Komplexné systémové pokyny", + "streaming": "Žiadosť o streamovanie SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Ste užitočný pomocník.", + "userGreeting": "Dobrý deň! ako sa dnes máš?" + }, + "toolCalling": { + "userWeather": "Aké je počasie v São Paule?", + "toolDescription": "Získajte aktuálne počasie pre miesto", + "cityNameDescription": "Názov mesta" + }, + "multiTurn": { + "system": "Ste asistent kódovania.", + "userInitial": "Napíšte funkciu na triedenie poľa v Pythone.", + "assistantExample": "Tu je jednoduchá funkcia triedenia:\n\n```pytón\ndef sort_array(arr):\n návrat zoradený (arr)\n```", + "userFollowUp": "Teraz ho zoraďte v zostupnom poradí." + }, + "thinking": { + "question": "Aký je súčet prvých 100 prvočísel?" + }, + "systemPrompt": { + "systemInstruction": "Ste senior softvérový inžinier so špecializáciou na distribuované systémy. Odpovedzte na otázky stručne pomocou osvedčených postupov v odvetví. Vždy poskytnite príklady kódu, keď je to relevantné. Svoje odpovede naformátujte pomocou markdown.", + "question": "Ako implementujem vzor ističa?" + }, + "streaming": { + "prompt": "Povedz mi krátky príbeh o robotovi, ktorý sa učí maľovať." + } + }, + "openaiCompatibleLabel": "Kompatibilné s OpenAI", + "anthropicCompatibleLabel": "Antropické kompatibilné", + "noTemplateForFormat": "Žiadna šablóna pre tento formát", + "translationFailed": "Preklad zlyhal: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Prekladové potrubie", + "pipelineVisualization": "Vizualizácia potrubia", + "pipelineVisualizationHint": "Odošlite správu a zistite, ako vaša požiadavka prechádza detekciou → preklad → hovor poskytovateľa.", + "chatTesterDescription": "Posielajte správy ako špecifický formát klienta a kontrolujte každý krok prekladového kanála.", + "chatTesterFlow": "Požiadavka klienta → Detekcia formátu → Stredne pokročilý OpenAI → Formát poskytovateľa → Odpoveď", + "clickStepToInspect": "Kliknutím na ľubovoľný krok skontrolujete údaje v danej fáze.", + "clientFormat": "Formát klienta", + "provider": "Poskytovateľ", + "modelPlaceholder": "Vyberte alebo zadajte názov modelu...", + "sendMessageToSeePipeline": "Ak chcete zobraziť kanál prekladov, odošlite správu", + "chatMessageHintPrefix": "Vaša správa bude vo formáte a", + "chatMessageHintSuffix": "žiadosť, preložená cez kanál a odoslaná vybranému poskytovateľovi.", + "youWithFormat": "Vy ({format})", + "assistant": "asistent", + "typeMessage": "Napíšte správu...", + "send": "Odoslať", + "clientRequest": "Žiadosť klienta", + "clientRequestDescription": "Telo požiadavky, ako by ju odoslal váš klient", + "formatDetected": "Zistený formát", + "formatDetectedDescription": "OmniRoute automaticky rozpozná formát API zo štruktúry požiadavky", + "openaiIntermediate": "OpenAI pre stredne pokročilých", + "openaiIntermediateDescription": "Všetky formáty sú najprv normalizované na formát OpenAI (univerzálny most)", + "providerFormat": "Formát poskytovateľa", + "providerFormatDescription": "Formát OpenAI je preložený do natívneho formátu poskytovateľa", + "providerResponse": "Odpoveď poskytovateľa", + "providerResponseRawDescription": "Nespracovaná odpoveď od poskytovateľa API", + "providerResponseSseDescription": "Nespracovaný stream SSE z API poskytovateľa", + "unexpectedError": "Vyskytla sa neočakávaná chyba", + "error": "Chyba", + "errorMessage": "Chyba: {message}", + "requestFailed": "Žiadosť zlyhala", + "noTextExtracted": "(Žiadny extrahovaný text)", + "liveMonitorDescriptionPrefix": "Zobrazuje udalosti prekladu, keď volania rozhrania API prechádzajú cez OmniRoute. Udalosti pochádzajú z vyrovnávacej pamäte v pamäti (resetuje sa pri reštarte). Použite", + "liveMonitorDescriptionSuffix": "alebo externé volania API na generovanie udalostí." + }, + "usage": { + "title": "Použitie", + "loggerTab": "Logger", + "proxyTab": "Proxy", + "budgetManagement": "Správa rozpočtu", + "budgetSaved": "Rozpočtové limity boli uložené", + "budgetSaveFailed": "Rozpočet sa nepodarilo uložiť", + "loadingBudgetData": "Načítavajú sa údaje rozpočtu...", + "noApiKeysTitle": "Žiadne kľúče API", + "noApiKeysDescription": "Najprv pridajte kľúče API, aby ste nastavili limity rozpočtu.", + "apiKey": "API kľúč", + "todaysSpend": "Dnešné výdavky", + "thisMonth": "Tento mesiac", + "setLimits": "Nastaviť limity", + "dailyLimitUsd": "Denný limit (USD)", + "monthlyLimitUsd": "Mesačný limit (USD)", + "warningThresholdPercent": "Prah varovania (%)", + "dailyLimitPlaceholder": "napr. 5,00", + "monthlyLimitPlaceholder": "napr. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Uložiť limity", + "budgetOk": "Rozpočet je v poriadku – zostáva {remaining}", + "budgetExceeded": "Rozpočet bol prekročený – požiadavky môžu byť zablokované", + "totalRequests": "Celkový počet žiadostí", + "noDataYet": "Zatiaľ žiadne údaje", + "latency": "Latencia", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Prompt Cache", + "systemHealth": "Zdravie systému", + "entries": "Príspevky", + "activeCount": "{count} aktívny", + "openCircuitBreakersDetected": "Boli zistené otvorené ističe", + "hitRate": "Miera prístupu", + "hitsMisses": "Hity / Misses", + "circuitBreakers": "Ističe", + "lockedIPs": "Zamknuté adresy IP", + "lockoutsAutoRefreshHint": "Zámky limitu rýchlosti pre model • Automatické obnovenie 10 s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "Zostáva {time}", + "howItWorks": "Ako to funguje", + "howItWorksSubtitle": "Zistite, ako hodnotenia overujú vaše odpovede LLM", + "define": "Definujte", + "defineStepDescription": "Vytvorte testovacie prípady so vstupnými výzvami a očakávanými výstupnými kritériami pomocou stratégií ako obsahuje, regulárny výraz alebo presná zhoda.", + "run": "Bežať", + "runStepDescription": "Vykonajte testovacie prípady na vašich koncových bodoch LLM prostredníctvom OmniRoute. Každý prípad je odoslaný ako skutočná požiadavka API.", + "evaluate": "Vyhodnoťte", + "evaluateStepDescription": "Odpovede sa porovnávajú s očakávanými kritériami. Pozrite si úspešnosť/neúspešnosť pre každý prípad s metrikami latencie a podrobnou spätnou väzbou.", + "evalSuites": "Hodnotiace suity", + "evalSuitesHint": "Kliknutím na sadu zobrazíte testovacie prípady a potom spustite vyhodnotiť svoje koncové body LLM", + "evalsLoading": "Načítavajú sa hodnotné suity...", + "noEvalSuitesFound": "Nenašli sa žiadne suity Eval", + "noEvalSuitesDescription": "Sady Eval je možné definovať cez API alebo v kóde. Testujú výstupy modelu oproti očakávaným výsledkom pomocou stratégií ako obsahuje, regulárny výraz, presná zhoda a vlastné funkcie.", + "columnCase": "Prípad", + "columnStatus": "Stav", + "columnLatency": "Latencia", + "columnDetails": "Podrobnosti", + "columnModel": "Model", + "columnStrategy": "Stratégia", + "columnExpected": "Očakáva sa", + "statsSuites": "Suity", + "statsTestCases": "Testovacie prípady", + "statsModels": "Modelky", + "statsCoverage": "Pokrytie", + "statsStrategiesCount": "{count} stratégií", + "evaluationStrategies": "Stratégie hodnotenia", + "modelsUnderTest": "Testované modely", + "searchSuitesPlaceholder": "Hľadať apartmány...", + "passSuffix": "prejsť", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Spustite Eval", + "runningProgress": "Spustený {current}/{total}...", + "passRate": "úspešnosť", + "summaryBreakdown": "{passed} úspešné · {failed} neúspešné · celkom {total}", + "passedIconLabel": "✅ Prešlo", + "failedIconLabel": "❌ Nepodarilo sa", + "detailsContains": "Obsahuje: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Očakáva sa: „{expected}“", + "noResultsYet": "Zatiaľ žiadne výsledky", + "testCasesCount": "Testovacie prípady ({count})", + "noTestCasesDefined": "Nie sú definované žiadne testovacie prípady", + "runEvalHint": "Kliknutím na „Spustiť hodnotenie“ spustíte všetky prípady proti vášmu koncovému bodu LLM. Každý test odošle skutočnú požiadavku cez OmniRoute.", + "notifyNoTestCases": "Pre túto sadu nie sú definované žiadne testovacie prípady", + "notifyAllCasesPassed": "Všetkých {total} prípadov prešlo ✅", + "notifySomeCasesFailed": "{passed}/{total} úspešné, {failed} neúspešné", + "notifyEvalRunFailed": "Evaluácia zlyhala", + "notifyEvalTitle": "Hodnota: {name}", + "modelEvals": "Modelové hodnotenia", + "evalsHeroDescription": "Otestujte a overte svoje koncové body LLM spustením preddefinovaných vyhodnocovacích balíkov. Každá sada obsahuje testovacie prípady, ktoré posielajú skutočné výzvy cez OmniRoute a porovnávajú odpovede s očakávanými kritériami – čo vám pomôže odhaliť regresie, porovnať modely a zabezpečiť kvalitu odozvy medzi poskytovateľmi.", + "qualityValidation": "Overenie kvality", + "modelComparison": "Porovnanie modelov", + "regressionDetection": "Regresná detekcia", + "latencyBenchmarks": "Latencia Benchmarks", + "modelLockouts": "Uzamknutie modelov", + "noLockouts": "Momentálne nie sú zamknuté žiadne modely", + "activeSessions": "Aktívne relácie", + "noSessions": "Žiadne aktívne relácie", + "sessionsHint": "Relácie sa zobrazujú ako požiadavky prechádzajú cez server proxy", + "sessionsTrackedHint": "Sledované pomocou odtlačkov prstov • Automatické obnovenie 5 s", + "session": "Relácia", + "age": "Vek", + "requests": "Žiadosti", + "connection": "Pripojenie", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Limity poskytovateľa", + "noProviders": "Nie sú pripojení žiadni poskytovatelia", + "connectProvidersForQuota": "Pripojte sa k poskytovateľom pomocou protokolu OAuth, aby ste mohli sledovať limity kvót a využitie rozhrania API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrované z {count})", + "autoRefresh": "Automatické obnovenie", + "refreshAll": "Obnoviť všetko", + "loadingQuotas": "Načítava sa...", + "account": "účtu", + "modelQuotas": "Modelové kvóty", + "lastUsed": "Naposledy použité", + "actions": "Akcie", + "refreshQuota": "Obnoviť kvótu", + "today": "Dnes", + "tomorrow": "zajtra", + "dayTimeFormat": "{day}, {time}", + "inDuration": "v {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Nespracovaný plán: {plan}", + "noPlanFromProvider": "Žiadny plán od poskytovateľa", + "noQuotaData": "Žiadne údaje o kvóte", + "noQuotaDataAvailable": "Nie sú k dispozícii žiadne údaje o kvóte", + "noAccountsForTierFilter": "Pre filter úrovne sa nenašli žiadne účty", + "tierAll": "Všetky", + "tierEnterprise": "Enterprise", + "tierTeam": "Tím", + "tierBusiness": "Podnikanie", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Navyše", + "tierFree": "Zadarmo", + "tierUnknown": "Neznámy" + }, + "modals": { + "waitingAuth": "Čaká sa na autorizáciu", + "verificationUrl": "Overovacia adresa URL", + "yourCode": "Váš kód", + "remoteAccess": "Vzdialený prístup:", + "connectedSuccess": "Úspešne pripojené!", + "connectionFailed": "Pripojenie zlyhalo", + "chooseAuthMethod": "Vyberte spôsob overenia:", + "awsBuilderId": "ID AWS Builder", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "účet Google", + "githubAccount": "Účet GitHub", + "importToken": "Importovať token", + "pasteToken": "Prilepte obnovovací token z Kiro IDE.", + "awsRegion": "Región AWS", + "autoDetecting": "Automatické zisťovanie tokenov...", + "readingFromCache": "Čítanie z vyrovnávacej pamäte AWS SSO", + "readingFromCursor": "Čítanie z databázy Cursor IDE", + "initializing": "Inicializuje sa...", + "pricingConfig": "Konfigurácia cien", + "loadingPricing": "Načítavajú sa údaje o cenách...", + "pricingRatesFormat": "Formát cenových sadzieb", + "noPricingData": "Nie sú k dispozícii žiadne údaje o cenách", + "noModelsFound": "Nenašli sa žiadne modely" + }, + "loggers": { + "allProviders": "Všetci poskytovatelia", + "allModels": "Všetky modely", + "allAccounts": "Všetky účty", + "allApiKeys": "Všetky kľúče API", + "allTypes": "Všetky typy", + "allLevels": "Všetky úrovne", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Načítavajú sa denníky...", + "loadingProxyLogs": "Načítavajú sa protokoly servera proxy...", + "noLogEntries": "Nenašli sa žiadne záznamy denníka", + "noPayloadData": "Pre túto položku denníka nie sú k dispozícii žiadne údaje o užitočnom zaťažení.", + "proxyEvent": "Udalosť proxy", + "proxy": "Proxy", + "level": "úroveň", + "directNative": "Priame (natívne)", + "combo": "Combo", + "inputTokens": "ja:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Prehľad použitia", + "outputTokens": "Výstupné tokeny", + "totalCost": "Celkové náklady", + "usageByModel": "Použitie podľa modelu", + "usageByAccount": "Použitie podľa účtu", + "failedToLoad": "Nepodarilo sa načítať štatistiky používania.", + "tokenHealth": "Token Health", + "totalOAuth": "Celkový počet OAuth", + "healthy": "Zdravý", + "warning": "Upozornenie", + "errored": "Chyba", + "lastCheck": "Posledná kontrola", + "noData": "Žiadne údaje", + "share": "zdieľať", + "unableToLoad": "Nie je možné načítať systémové metriky", + "product": "Produkt", + "resources": "Zdroje", + "company": "Spoločnosť" + }, + "auth": { + "welcome": "Vitajte", + "signIn": "Prihláste sa", + "enterPassword": "Ak chcete pokračovať, zadajte svoje heslo", + "password": "heslo", + "unifiedProxy": "Unified AI API Proxy", + "unifiedAiApiProxy": "Unified AI API Proxy", + "unifiedAiApiProxyDesc": "Smerujte požiadavky k viacerým poskytovateľom AI cez jeden koncový bod. Zabudované vyrovnávanie záťaže, núdzové prepnutie a sledovanie využitia.", + "passwordNotEnabled": "Ochrana heslom nie je povolená", + "loading": "Načítava sa...", + "invalidPassword": "Neplatné heslo", + "errorOccurredRetry": "Vyskytla sa chyba. Skúste to znova.", + "configureInstance": "Poďme nakonfigurovať vašu inštanciu OmniRoute", + "runOnboardingWizard": "Spustite sprievodcu registráciou, nastavte si heslo a pripojte svojho prvého poskytovateľa AI.", + "startOnboarding": "Spustite registráciu", + "secureYourInstance": "Zabezpečte svoju inštanciu", + "setPasswordDescription": "Nastavte si heslo na ochranu svojho dashboardu a zabezpečte svoje koncové body API pred neoprávneným prístupom.", + "configurePassword": "Konfigurácia hesla", + "continue": "Pokračovať", + "windowWillClose": "Toto okno sa automaticky zatvorí...", + "closeTabNow": "Túto kartu teraz môžete zavrieť.", + "copyUrlManual": "Skopírujte adresu URL z panela s adresou a vložte ju do aplikácie.", + "accessDeniedDescription": "Nemáte povolenie na prístup k tomuto zdroju. Skontrolujte svoj kľúč API alebo kontaktujte správcu.", + "goToDashboard": "Prejdite na informačný panel", + "featureMultiProviderTitle": "Multi-poskytovateľ", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google a ďalšie", + "featureLoadBalancingTitle": "Vyvažovanie záťaže", + "featureLoadBalancingDesc": "Inteligentne distribuujte požiadavky", + "featureUsageTrackingTitle": "Sledovanie používania", + "featureUsageTrackingDesc": "Monitorujte náklady a tokeny", + "resetPassword": "Obnoviť heslo", + "resetDescription": "Vyberte spôsob obnovenia prístupu k vášmu informačnému panelu", + "stopServer": "Zastavte server OmniRoute", + "processing": "Spracováva sa...", + "pleaseWait": "Počkajte, kým dokončíme autorizáciu.", + "authSuccess": "Autorizácia bola úspešná!", + "copyUrl": "Skopírujte túto adresu URL", + "accessDenied": "Prístup odmietnutý", + "methodCliTitle": "Metóda 1: CLI Reset", + "methodCliDescription": "Spustite nasledujúci príkaz na serveri, na ktorom beží OmniRoute:", + "methodCliHint": "Zobrazí sa výzva na nastavenie nového hesla. Server musí byť najskôr zastavený.", + "methodManualTitle": "Metóda 2: Manuálny reset", + "methodManualDescription": "Vymažte heslo z databázy a nastavte nové pri spustení:", + "setPasswordInYour": "Nastavte si nové heslo vo svojom", + "fileLabelSuffix": "súbor:", + "newPasswordPlaceholder": "tvoje_nové_heslo", + "deleteSettingsFile": "Odstrániť", + "orRemovePasswordHashField": "alebo odstráňte pole passwordHash", + "restartServerWithNewPassword": "Reštartujte server - použije nové heslo", + "backToLogin": "Späť na Prihlásenie", + "forgotPassword": "Zabudli ste heslo?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Prejdite domov", + "toggleMenu": "Prepnúť ponuku", + "featuresLink": "Vlastnosti", + "docsLink": "Docs", + "github": "GitHub", + "versionLive": "v1.0 je teraz zverejnená", + "oneEndpoint": "Jeden koncový bod pre", + "allProviders": "Všetci poskytovatelia AI", + "heroDescription": "Proxy koncového bodu AI s webovým panelom – JavaScriptový port CLIProxyAPI. Bezproblémovo funguje s Claude Code, OpenAI Codex, Cline, RooCode a ďalšími nástrojmi CLI.", + "getStarted": "Začíname", + "viewOnGithub": "Zobraziť na GitHub", + "powerfulFeatures": "Výkonné funkcie", + "featuresSubtitle": "Všetko, čo potrebujete na správu infraštruktúry AI, na jednom mieste, skonštruované pre škálovateľnosť.", + "featureUnifiedEndpointTitle": "Jednotný koncový bod", + "featureUnifiedEndpointDesc": "Získajte prístup ku všetkým poskytovateľom prostredníctvom jedinej štandardnej adresy URL rozhrania API.", + "featureEasySetupTitle": "Jednoduché nastavenie", + "featureEasySetupDesc": "Začnite pracovať v priebehu niekoľkých minút pomocou príkazu npx.", + "featureModelFallbackTitle": "Model Fallback", + "featureModelFallbackDesc": "Automaticky prepínajte poskytovateľov pri zlyhaní alebo vysokej latencii.", + "featureUsageTrackingTitle": "Sledovanie používania", + "featureUsageTrackingDesc": "Podrobná analýza a sledovanie nákladov naprieč všetkými modelmi.", + "featureOAuthApiKeysTitle": "Kľúče OAuth a API", + "featureOAuthApiKeysDesc": "Bezpečne spravujte poverenia v jednom trezore.", + "featureCloudSyncTitle": "Cloudová synchronizácia", + "featureCloudSyncDesc": "Okamžite synchronizujte svoje konfigurácie medzi zariadeniami.", + "featureCliSupportTitle": "Podpora CLI", + "featureCliSupportDesc": "Funguje s Claude Code, Codex, Cline, Cursor a ďalšími.", + "featureDashboardTitle": "Dashboard", + "featureDashboardDesc": "Vizuálny panel pre analýzu návštevnosti v reálnom čase.", + "howItWorks": "Ako funguje OmniRoute", + "howItWorksDescription": "Dáta plynule prúdia z vašej aplikácie cez našu vrstvu inteligentného smerovania k najlepšiemu poskytovateľovi pre danú úlohu.", + "howItWorksStep1Title": "1. CLI a súpravy SDK", + "howItWorksStep1Description": "Vaše požiadavky začínajú od vašich obľúbených nástrojov alebo našej jednotnej súpravy SDK. Stačí zmeniť základnú adresu URL.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Náš nástroj analyzuje výzvu, kontroluje stav poskytovateľa a smeruje k najnižšej latencii alebo nákladom.", + "howItWorksStep3Title": "3. Poskytovatelia AI", + "howItWorksStep3Description": "Požiadavku splní OpenAI, Anthropic, Gemini alebo iní okamžite.", + "getStartedIn30Seconds": "Začnite za 30 sekúnd", + "getStartedDescription": "Nainštalujte OmniRoute, nakonfigurujte svojich poskytovateľov prostredníctvom webového ovládacieho panela a začnite smerovať požiadavky AI.", + "installOmniRoute": "Nainštalujte OmniRoute", + "installStepDescription": "Spustite príkaz npx na okamžité spustenie servera", + "openDashboard": "Otvorte informačný panel", + "openDashboardStepDescription": "Konfigurácia poskytovateľov a API kľúčov cez webové rozhranie", + "routeRequests": "Žiadosti o trasu", + "routeRequestsStepDescription": "Nasmerujte svoje nástroje CLI na {endpoint}", + "terminal": "terminál", + "copy": "Kopírovať", + "copied": "✓ Skopírované", + "startingOmniRoute": "Spúšťa sa OmniRoute...", + "serverRunningOnLabel": "Server beží", + "dashboardLabel": "Dashboard", + "readyToRoute": "Pripravený na cestu! ✓", + "configureProvidersNote": "📝 Nakonfigurujte poskytovateľov na informačnom paneli alebo použite premenné prostredia", + "dataLocation": "Umiestnenie údajov:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Produkt", + "dashboardLink": "Dashboard", + "changelog": "Denník zmien", + "resources": "Zdroje", + "documentation": "Dokumentácia", + "npm": "NPM", + "legal": "Právne", + "mitLicense": "Licencia MIT", + "footerTagline": "Jednotný koncový bod pre generovanie AI. Ľahko sa pripojte, nasmerujte a spravujte svojich poskytovateľov AI.", + "copyright": "© {year} OmniRoute. Všetky práva vyhradené.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "Kódex OpenAI", + "flowToolCline": "Cline", + "flowToolCursor": "Kurzor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropický", + "flowProviderGemini": "Blíženci", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "Interaktívny diagram viditeľný na pracovnej ploche", + "ctaTitle": "Ste pripravení zjednodušiť svoju infraštruktúru AI?", + "ctaDescription": "Pridajte sa k vývojárom, ktorí zefektívňujú svoje integrácie AI s OmniRoute. Open source a zadarmo začať.", + "startFree": "Začnite zadarmo", + "readDocumentation": "Prečítajte si dokumentáciu" + }, + "docs": { + "title": "Dokumentácia", + "quickStart": "Rýchly štart", + "features": "Vlastnosti", + "supportedProviders": "Podporovaní poskytovatelia", + "supportedProvidersToc": "Poskytovatelia", + "commonUseCases": "Bežné prípady použitia", + "clientCompatibility": "Kompatibilita klienta", + "apiReference": "Referencia API", + "method": "Metóda", + "path": "Cesta", + "notes": "Poznámky", + "modelPrefixes": "Predpony modelov", + "prefix": "Predpona", + "troubleshooting": "Riešenie problémov", + "supportsChat": "Podporuje koncové body chatu aj odpovedí.", + "oauthAutoRefresh": "Pripojenie OAuth s automatickou obnovou tokenu.", + "fullStreaming": "Plná podpora streamovania pre všetky modely.", + "docsLabel": "Docs", + "docsHeroDescription": "Brána AI pre LLM s viacerými poskytovateľmi. Jeden koncový bod pre OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor a 20+ ďalších poskytovateľov.", + "openDashboard": "Otvorte informačný panel", + "endpointPage": "Koncový bod", + "github": "GitHub", + "reportIssue": "Nahlásiť problém", + "onThisPage": "Na tejto stránke", + "documentationVersion": "Dokumentácia – v{version}", + "quickStartStep1Title": "1. Nainštalujte a spustite", + "quickStartStep1Prefix": "Bežať", + "quickStartStep1Middle": "alebo naklonujte z GitHubu a spustite", + "quickStartStep2Title": "2. Vytvorte kľúč API", + "quickStartStep2Text": "Prejdite do časti Koncový bod -> Registrované kľúče. Vygenerujte jeden kľúč pre každé prostredie.", + "quickStartStep3Title": "3. Pripojte poskytovateľov", + "quickStartStep3Text": "Pridajte účty poskytovateľa prostredníctvom prihlásenia OAuth, kľúča API alebo bezplatného automatického pripojenia.", + "quickStartStep4Title": "4. Nastavte adresu URL klientskej základne", + "quickStartStep4Prefix": "Nasmerujte svojho klienta IDE alebo API na", + "quickStartStep4Suffix": "Použite napríklad predponu poskytovateľa", + "featureRoutingTitle": "Smerovanie viacerých poskytovateľov", + "featureRoutingText": "Smerujte požiadavky na 30+ poskytovateľov AI cez jeden koncový bod kompatibilný s OpenAI. Podporuje chat, odpovede, audio a obrazové API.", + "featureCombosTitle": "Kombinácie a vyváženie", + "featureCombosText": "Vytvárajte modelové kombá so záložnými reťazcami a vyvažovacími stratégiami: obojstranné, prioritné, náhodné, najmenej používané a nákladovo optimalizované.", + "featureUsageTitle": "Sledovanie spotreby a nákladov", + "featureUsageText": "Počítanie tokenov v reálnom čase, výpočet nákladov na poskytovateľa/model a podrobný rozpis využitia podľa kľúča API a účtu.", + "featureAnalyticsTitle": "Informačný panel Analytics", + "featureAnalyticsText": "Vizuálna analýza s grafmi požiadaviek, tokenov, chýb, latencie, nákladov a popularity modelov v priebehu času.", + "featureHealthTitle": "Monitorovanie zdravia", + "featureHealthText": "Živé kontroly zdravotného stavu, stav poskytovateľa, stavy ističov a automatická detekcia limitu frekvencie s exponenciálnym sťahovaním.", + "featureCliTitle": "Nástroje CLI", + "featureCliText": "Spravujte konfigurácie IDE, exportujte/importujte zálohy, objavujte kódexové profily a konfigurujte nastavenia z dashboardu.", + "featureSecurityTitle": "Bezpečnosť a zásady", + "featureSecurityText": "Autentifikácia kľúčom API, filtrovanie IP, ochrana promptného vloženia, zásady domény, správa relácií a protokolovanie auditu.", + "featureCloudSyncTitle": "Cloudová synchronizácia", + "featureCloudSyncText": "Synchronizujte svoju konfiguráciu so službou Cloudflare Workers pre vzdialený prístup so zašifrovanými povereniami a automatickým núdzovým prepnutím.", + "providersAcrossConnectionTypes": "{count} poskytovateľov v rámci troch typov pripojenia.", + "manageProviders": "Spravovať poskytovateľov", + "providersCount": "{count} poskytovateľov", + "providerTypeFree": "Voľná úroveň", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API kľúč", + "useCaseSingleEndpointTitle": "Jediný koncový bod pre mnohých poskytovateľov", + "useCaseSingleEndpointText": "Nasmerujte klientov na jednu základnú adresu URL a smerujte podľa predpony modelu (napríklad: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Záložné a prepínanie modelov pomocou komb", + "useCaseFallbackText": "Vytvorte kombinované modely v Dashboarde a udržujte stabilnú konfiguráciu klienta, zatiaľ čo poskytovatelia sa interne otáčajú.", + "useCaseUsageVisibilityTitle": "Využitie, náklady a viditeľnosť ladenia", + "useCaseUsageVisibilityText": "Sledujte tokeny a náklady podľa poskytovateľa, účtu a kľúča API na kartách Používanie a Analytics.", + "clientCherryStudioTitle": "Čerešňové štúdio", + "baseUrlLabel": "Základná adresa URL", + "chatEndpointLabel": "Koncový bod četu", + "modelRecommendationLabel": "Odporúčanie modelu: explicitná predpona", + "clientCodexTitle": "Modely Copilot Codex / GitHub", + "clientCodexBullet1": "Použite ID modelov s", + "clientCodexBullet2": "Modely rodiny Codex automaticky smerujú do", + "clientCodexBullet3": "Modely bez kódexu pokračujú", + "clientCursorTitle": "Kurzor IDE", + "clientCursorBullet1": "Použite", + "clientCursorBullet1Suffix": "prefix pre modely Cursor.", + "clientCursorBullet2": "Pripojenie OAuth – prihláste sa zo stránky Poskytovatelia.", + "clientClaudeTitle": "Claude Code / Antigravitácia", + "clientClaudeBullet1Prefix": "Použite", + "clientClaudeBullet1Middle": "(Claude) alebo", + "clientClaudeBullet1Suffix": "(antigravitačná) predpona.", + "endpointChatNote": "Koncový bod chatu kompatibilný s OpenAI (predvolené).", + "endpointResponsesNote": "Koncový bod API odpovedí (Codex, o-series).", + "endpointModelsNote": "Modelový katalóg pre všetkých pripojených poskytovateľov.", + "endpointAudioNote": "Prepis zvuku (Deepgram, AssemblyAI).", + "endpointImagesNote": "Generovanie obrazu (NanoBanana).", + "endpointRewriteChatNote": "Pomocník na prepísanie pre klientov bez /v1.", + "endpointRewriteResponsesNote": "Pomocník na prepísanie pre odpovede bez /v1.", + "endpointRewriteModelsNote": "Prepísať pomocníka na zisťovanie modelov bez /v1.", + "modelPrefixesDescriptionStart": "Na smerovanie ku konkrétnemu poskytovateľovi použite predponu poskytovateľa pred názvom modelu. Príklad:", + "modelPrefixesDescriptionEnd": "trasy na GitHub Copilot.", + "provider": "Poskytovateľ", + "type": "Typ", + "troubleshootingModelRouting": "Ak klient zlyhá pri smerovaní modelu, použite explicitného poskytovateľa/model (napríklad: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Ak sa vám zobrazia nejednoznačné chyby modelu, namiesto holého ID modelu vyberte predponu poskytovateľa.", + "troubleshootingCodexFamily": "Pre modely rodiny GitHub Codex ponechajte model ako gh/; router vyberá / odpovedá automaticky.", + "troubleshootingTestConnection": "Pred testovaním z IDE alebo externých klientov použite Dashboard > Providers > Test Connection.", + "troubleshootingCircuitBreaker": "Ak poskytovateľ zobrazí istič otvorený, počkajte na vychladnutie alebo skontrolujte stránku Zdravie, kde nájdete podrobnosti.", + "troubleshootingOAuth": "V prípade poskytovateľov OAuth znova overte, ak platnosť tokenov vyprší. Skontrolujte indikátor stavu karty poskytovateľa." + }, + "legal": { + "privacyPolicy": "Zásady ochrany osobných údajov", + "termsOfService": "Zmluvné podmienky", + "providerConfigurations": "Konfigurácie poskytovateľa", + "apiKeys": "API kľúče", + "usageLogs": "Denníky používania", + "applicationSettings": "Nastavenia aplikácie", + "viewExportAnalytics": "Zobrazte a exportujte analýzy používania", + "clearHistory": "Kedykoľvek môžete vymazať históriu používania", + "configureRetention": "Nakonfigurujte zásady uchovávania denníkov", + "backupRestore": "Zálohujte a obnovte svoju databázu", + "privacyMetadataTitle": "Ochrana osobných údajov | OmniRoute", + "privacyMetadataDescription": "Zásady ochrany osobných údajov pre proxy router OmniRoute AI API.", + "termsMetadataTitle": "Podmienky služby | OmniRoute", + "termsMetadataDescription": "Zmluvné podmienky pre proxy router OmniRoute AI API.", + "backToHome": "Späť domov", + "lastUpdated": "Posledná aktualizácia: {date}", + "policyLastUpdatedDate": "13. februára 2026", + "listSeparator": "-", + "questionsVisit": "Otázky? Navštívte našu", + "githubRepository": "úložisko GitHub", + "privacySection1Title": "1. Local-First Architecture", + "privacySection1Text": "OmniRoute je navrhnutý ako lokálna aplikácia. Všetko spracovanie a ukladanie údajov prebieha výlučne na vašom počítači. Neexistuje žiadny centralizovaný server, ktorý by zbieral vaše informácie.", + "privacySection2Title": "2. Údaje, ktoré uchovávame", + "privacyDataStoredIn": "Nasledujúce údaje sú uložené lokálne v", + "privacyDataProviderConfigurationsDesc": "adresy URL pripojenia, typy poskytovateľov a nastavenia priority", + "privacyDataApiKeysDesc": "zašifrované a uložené lokálne na overenie u poskytovateľov AI", + "privacyDataUsageLogsDesc": "počet žiadostí, použitie tokenov, názvy modelov, časové pečiatky a časy odozvy", + "privacyDataApplicationSettingsDesc": "preferencie tém, stratégia smerovania a konfigurácie komb", + "privacySection3Title": "3. Žiadna telemetria", + "privacySection3Text": "OmniRoute nezhromažďuje telemetriu, analýzy ani správy o zlyhaní. Nám ani žiadnej tretej strane sa neposielajú žiadne údaje. Vaše vzory používania, volania API a konfigurácie zostanú úplne súkromné.", + "privacySection4Title": "4. Poskytovatelia umelej inteligencie tretích strán", + "privacySection4Text": "Keď uskutočňujete volania API cez OmniRoute, vaše požiadavky sa preposielajú poskytovateľom AI, ktorých ste nakonfigurovali (napríklad: OpenAI, Anthropic, Google). Títo poskytovatelia majú svoje vlastné zásady ochrany osobných údajov, ktoré upravujú, ako nakladajú s vašimi údajmi. Skontrolujte:", + "privacyOpenAiPolicy": "Zásady ochrany osobných údajov OpenAI", + "privacyAnthropicPolicy": "Antropické zásady ochrany osobných údajov", + "privacyGooglePolicy": "Zásady ochrany osobných údajov Google", + "privacySection5Title": "5. Cloud Sync (voliteľné)", + "privacySection5Text": "Ak povolíte voliteľnú funkciu synchronizácie v cloude, konfigurácie poskytovateľa a kľúče API sa môžu preniesť do nakonfigurovaného koncového bodu cloudu. Táto funkcia je predvolene zakázaná a vyžaduje výslovné prihlásenie.", + "privacySection6Title": "6. Ťažba dreva", + "privacyLoggingIntro": "Protokoly požiadaviek je možné konfigurovať prostredníctvom nastavení ovládacieho panela. Môžete:", + "privacySection7Title": "7. Vaše práva", + "privacySection7TextStart": "Keďže všetky údaje sú uložené lokálne, máte plnú kontrolu. Svoje údaje môžete kedykoľvek vymazať odstránením", + "privacySection7TextEnd": "alebo pomocou funkcií zálohovania a obnovy databázy v dashboarde.", + "termsSection1Title": "1. Prehľad", + "termsSection1Text": "OmniRoute je prvý lokálny proxy router AI API, ktorý funguje výlučne na vašom počítači. Smeruje požiadavky k viacerým poskytovateľom AI pomocou vyrovnávania záťaže, prepnutia pri zlyhaní a sledovania používania.", + "termsSection2Title": "2. Zodpovednosti užívateľa", + "termsResponsibilityApiKeys": "Za správu vlastných kľúčov API a poverení pre poskytovateľov umelej inteligencie tretích strán (OpenAI, Anthropic, Google atď.) nesiete výhradnú zodpovednosť.", + "termsResponsibilityCompliance": "Musíte dodržiavať zmluvné podmienky každého poskytovateľa AI, ktorého API pristupujete cez OmniRoute.", + "termsResponsibilitySecurity": "Zodpovedáte za bezpečnosť vašej lokálnej inštalácie OmniRoute vrátane nastavenia hesla a obmedzenia prístupu k sieti.", + "termsSection3Title": "3. Ako to funguje", + "termsSection3Text": "OmniRoute funguje ako sprostredkovateľ proxy. Volania API odoslané do OmniRoute sa preložia a preposielajú vašim nakonfigurovaným poskytovateľom AI. OmniRoute nemení obsah vašich požiadaviek alebo odpovedí nad rámec nevyhnutného prekladu protokolu.", + "termsSection4Title": "4. Spracovanie údajov", + "termsDataStoredLocally": "Všetky údaje sú uložené lokálne na vašom počítači v databáze SQLite.", + "termsNoTransmission": "OmniRoute neprenáša žiadne údaje na externé servery, pokiaľ výslovne nepovolíte funkcie synchronizácie v cloude.", + "termsDataLocationText": "Ukladajú sa protokoly používania, kľúče API a konfigurácia", + "termsSection5Title": "5. Vylúčenie zodpovednosti", + "termsSection5Text": "OmniRoute sa poskytuje „tak ako je“ bez záruky akéhokoľvek druhu. Nezodpovedáme za žiadne náklady vzniknuté používaním API, prerušením služieb alebo stratou údajov. Vždy si zálohujte svoju konfiguráciu.", + "termsSection6Title": "6. Otvorený zdroj", + "termsSection6Text": "OmniRoute je softvér s otvoreným zdrojovým kódom. Môžete ho voľne kontrolovať, upravovať a distribuovať v súlade s podmienkami jeho licencie." + } +} diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json new file mode 100644 index 0000000000..6d69d89063 --- /dev/null +++ b/src/i18n/messages/sv.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Spara", + "cancel": "Avbryt", + "delete": "Ta bort", + "loading": "Laddar...", + "error": "Ett fel uppstod", + "success": "Framgång", + "confirm": "Är du säker?", + "refresh": "Uppdatera", + "close": "Stäng", + "add": "Lägg till", + "edit": "Redigera", + "search": "Sök", + "back": "Tillbaka", + "next": "Nästa", + "submit": "Skicka in", + "reset": "Återställ", + "copy": "Kopiera", + "copied": "Kopierade!", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "active": "Aktiv", + "inactive": "Inaktiv", + "noData": "Inga data tillgängliga", + "configure": "Konfigurera", + "manage": "Hantera", + "name": "Namn", + "actions": "Åtgärder", + "status": "Status", + "type": "Typ", + "model": "Modell", + "models": "modeller", + "provider": "Leverantör", + "account": "konto", + "time": "Tid", + "details": "Detaljer", + "created": "Skapad", + "lastUsed": "Senast använd", + "loadMore": "Ladda mer", + "noResults": "Inga resultat hittades", + "reloadPage": "Ladda om sidan", + "connected": "Ansluten", + "disconnected": "Frånkopplad", + "notConfigured": "Ej konfigurerad", + "testConnection": "Testa anslutningen", + "enable": "Aktivera", + "disable": "Inaktivera", + "columns": "Kolumner", + "newest": "Nyaste", + "oldest": "Äldst", + "all": "Alla", + "none": "Inga", + "yes": "Ja", + "no": "Nej", + "warning": "Varning", + "note": "Obs", + "free": "Gratis", + "skipToContent": "Hoppa till innehållet" + }, + "sidebar": { + "home": "Hem", + "dashboard": "Instrumentpanel", + "providers": "Leverantörer", + "combos": "Combos", + "usage": "Användning", + "analytics": "Analytics", + "costs": "Kostnader", + "health": "Hälsa", + "limits": "Gränser och kvoter", + "cliTools": "CLI-verktyg", + "settings": "Inställningar", + "translator": "Översättare", + "docs": "Dokument", + "issues": "frågor", + "endpoint": "Slutpunkt", + "apiManager": "API-hanterare", + "logs": "Loggar", + "auditLog": "Revisionslogg", + "shutdown": "Avstängning", + "restart": "Starta om", + "shutdownConfirm": "Stänga av OmniRoute?", + "restartConfirm": "Starta om OmniRoute?", + "version": "v{version}", + "debug": "Felsök", + "system": "System", + "help": "Hjälp", + "serverDisconnected": "Server frånkopplad", + "serverDisconnectedMsg": "Proxyservern har stoppats eller startar om.", + "expandSidebar": "Expandera sidofältet", + "collapseSidebar": "Dölj sidofältet" + }, + "header": { + "logout": "Logga ut", + "language": "Språk", + "providers": "Leverantörer", + "providerDescription": "Hantera dina AI-leverantörsanslutningar", + "combos": "Combos", + "comboDescription": "Modellkombo med reserv", + "usage": "Användning & analys", + "usageDescription": "Övervaka din API-användning, tokenförbrukning och förfrågningsloggar", + "analytics": "Analytics", + "analyticsDescription": "Diagram, trender och utvärderingsinsikter", + "cliTools": "CLI-verktyg", + "cliToolsDescription": "Konfigurera CLI-verktyg", + "home": "Hem", + "homeDescription": "Välkommen till OmniRoute", + "endpoint": "Slutpunkt", + "endpointDescription": "API-slutpunktskonfiguration", + "settings": "Inställningar", + "settingsDescription": "Hantera dina preferenser", + "openaiCompatible": "OpenAI-kompatibel", + "anthropicCompatible": "Antropisk kompatibel" + }, + "home": { + "quickStart": "Snabbstart", + "quickStartDesc": "Kom igång i 4 steg. Anslut leverantörer, ruttmodeller, övervaka allt.", + "fullDocs": "Fullständiga dokument", + "step1Title": "1. Skapa API-nyckel", + "step1Desc": "Gå till Endpoint -> Registrerade nycklar. Generera en nyckel per miljö.", + "step2Title": "2. Anslut leverantörer", + "step2Desc": "Lägg till konton i Providers. Stöder OAuth, API Key och gratis nivåer.", + "step3Title": "3. Peka din klient", + "step3Desc": "Ställ in bas-URL till {url} i din IDE- eller API-klient.", + "step4Title": "4. Övervaka och optimera", + "step4Desc": "Spåra tokens, kostnader och fel i Request Logs och Analytics.", + "providersOverview": "Leverantörsöversikt", + "configuredOf": "{configured} konfigurerad av {total} tillgängliga leverantörer", + "noModelsAvailable": "Inga modeller tillgängliga för denna leverantör.", + "configureFirst": "Konfigurera en anslutning först i {providers}", + "configureProvider": "Konfigurera leverantör", + "modelAvailable": "{count} modell tillgänglig", + "modelsAvailable": "{count} modeller tillgängliga", + "connectionsActive": "{count} anslutning aktiv", + "connectionsActivePlural": "{count} anslutningar aktiva", + "copyModelName": "Kopiera modellnamn", + "documentation": "Dokumentation", + "healthMonitor": "Hälsoövervakare", + "reportIssue": "Rapportera problem", + "activeError": "{active} aktiv · {errors} fel", + "oauthLabel": "OAuth", + "apiKeyLabel": "API-nyckel", + "requestsShort": "{count} krav", + "providerModelsTitle": "{provider} - Modeller", + "copiedModel": "Kopierat: {model}", + "aliasLabel": "alias" + }, + "analytics": { + "title": "Analytics", + "overviewDescription": "Övervaka dina API-användningsmönster, tokenförbrukning, kostnader och aktivitetstrender för alla leverantörer och modeller.", + "evalsDescription": "Kör utvärderingssviter för att testa och validera dina LLM-slutpunkter. Jämför modellkvalitet, upptäck regressioner och benchmark latens.", + "overview": "Översikt", + "evals": "Evals" + }, + "apiManager": { + "title": "API-nycklar", + "createKey": "Skapa API-nyckel", + "key": "Nyckel", + "revokeKey": "Återkalla nyckel", + "revokeConfirm": "Är du säker på att du vill återkalla denna API-nyckel?", + "noKeys": "Inga API-nycklar ännu", + "noKeysDesc": "Skapa din första API-nyckel för att autentisera förfrågningar till din slutpunkt", + "keyLabel": "Nyckeletikett", + "permissions": "Behörigheter", + "expiresAt": "Upphör att gälla", + "never": "Aldrig", + "revoke": "Återkalla", + "showKey": "Visa nyckel", + "hideKey": "Dölj nyckel", + "copyKey": "Kopiera API-nyckel", + "allModels": "Alla modeller", + "selectedModels": "Utvalda modeller", + "readOnly": "Endast läs", + "fullAccess": "Full tillgång", + "keyManagement": "API-nyckelhantering", + "keyManagementDesc": "Skapa och hantera API-nycklar för autentisering av förfrågningar till din slutpunkt", + "totalKeys": "Totalt nycklar", + "restricted": "Begränsad", + "totalRequests": "Totalt antal förfrågningar", + "modelsAvailable": "Tillgängliga modeller", + "registeredKeys": "Registrerade nycklar", + "keysRegistered": "{count} nycklar registrerade", + "keyRegistered": "{count} nyckel registrerad", + "keysSecurityNote": "Varje nyckel isolerar användningsspårning och kan återkallas oberoende. Nycklar är maskerade efter skapande för säkerhet.", + "createFirstKey": "Skapa din första nyckel", + "name": "Namn", + "usage": "Användning", + "created": "Skapad", + "actions": "Åtgärder", + "reqs": "reqs", + "neverUsed": "Aldrig använd", + "deleteConfirm": "Vill du ta bort denna API-nyckel?", + "usageTips": "Användningstips", + "tipAuth": "Använd API-nycklar i auktoriseringshuvudet som Bärare YOUR_KEY", + "tipSecure": "Nycklar visas bara en gång under skapandet – förvara dem säkert", + "tipSeparate": "Skapa separata nycklar för olika klienter eller miljöer", + "tipRestrict": "Begränsa nycklar till specifika modeller för bättre säkerhet och kostnadskontroll", + "keyName": "Nyckelnamn", + "keyNamePlaceholder": "t.ex. produktionsnyckel, utvecklingsnyckel", + "keyNameDesc": "Välj ett beskrivande namn för att identifiera denna nyckels syfte", + "keyCreated": "API-nyckel skapad", + "keyCreatedSuccess": "Nyckel skapad framgångsrikt!", + "keyCreatedNote": "Kopiera och lagra den här nyckeln nu – den kommer inte att visas igen.", + "done": "Klart", + "savePermissions": "Spara behörigheter", + "allowAll": "Tillåt alla", + "restrict": "Begränsa", + "allowAllInfo": "Denna nyckel kan komma åt alla tillgängliga modeller.", + "restrictInfo": "Denna nyckel kan komma åt {selected} av {total} modeller.", + "selected": "{count} har valts", + "all": "Alla", + "clear": "Rensa", + "searchModels": "Sök modeller efter namn eller leverantör...", + "noModelsFound": "Inga modeller hittades", + "keyNameRequired": "Nyckelnamn krävs", + "keyNameTooLong": "Nyckelnamnet måste vara högst {max} tecken", + "keyNameInvalid": "Nyckelnamn kan bara innehålla bokstäver, siffror, mellanslag, bindestreck och understreck", + "invalidKeyName": "Ogiltigt nyckelnamn", + "failedCreateKey": "Det gick inte att skapa nyckel", + "failedCreateKeyRetry": "Det gick inte att skapa nyckel. Försök igen.", + "invalidKeyId": "Ogiltigt nyckel-ID", + "failedDeleteKey": "Det gick inte att radera nyckel", + "failedDeleteKeyRetry": "Det gick inte att radera nyckel. Försök igen.", + "invalidModelsSelection": "Ogiltigt modellval", + "cannotSelectMoreThanModels": "Kan inte välja fler än {max} modeller", + "failedUpdatePermissions": "Det gick inte att uppdatera behörigheter", + "failedUpdatePermissionsRetry": "Det gick inte att uppdatera behörigheter. Försök igen.", + "unknownProvider": "okänt", + "copyMaskedKey": "Kopiera maskerad nyckel", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Senaste: {date}", + "editPermissions": "Redigera behörigheter", + "deleteKey": "Ta bort nyckel", + "model": "{count} modell", + "models": "{count} modeller", + "permissionsTitle": "Behörigheter: {name}", + "allowAllDesc": "Denna nyckel kan komma åt alla tillgängliga modeller.", + "restrictDesc": "Denna nyckel kan komma åt {selectedCount} av {totalModels} modeller.", + "selectedCount": "{count} har valts" + }, + "auditLog": { + "title": "Revisionslogg", + "searchPlaceholder": "Sökåtgärder...", + "action": "Åtgärd", + "actor": "Skådespelare", + "target": "Mål", + "ipAddress": "IP-adress", + "timestamp": "Tidsstämpel", + "noEntries": "Inga revisionsposter hittades", + "filterByAction": "Filtrera efter åtgärd...", + "filterByActor": "Filtrera efter skådespelare...", + "filterEntriesAria": "Filtrera granskningsloggposter", + "filterByActionTypeAria": "Filtrera efter åtgärdstyp", + "filterByActorAria": "Filtrera efter skådespelare", + "refreshAuditLogAria": "Uppdatera granskningsloggen", + "tableAria": "Granskningsloggposter", + "failedFetchAuditLog": "Det gick inte att hämta granskningsloggen", + "notAvailable": "—", + "description": "Administrativa åtgärder och säkerhetshändelser", + "showing": "Visar {count} poster (offset {offset})", + "previous": "Föregående" + }, + "cliTools": { + "title": "CLI-verktyg", + "noActiveProviders": "Inga aktiva leverantörer", + "noActiveProvidersDesc": "Lägg till och anslut först leverantörer för att konfigurera CLI-verktyg.", + "mapModels": "Kartmodeller", + "testConnection": "Testa anslutningen", + "connectionStatus": "Anslutningsstatus", + "configureEndpoint": "Konfigurera slutpunkt", + "instructions": "Instruktioner", + "modelMapping": "Modellkartläggning", + "baseUrl": "Bas-URL", + "apiKey": "API-nyckel", + "configured": "Konfigurerad", + "notConfigured": "Ej konfigurerad", + "notInstalled": "Ej installerad", + "custom": "Anpassad", + "unknown": "Okänd", + "lastSavedAt": "Senast sparad: {date}", + "never": "Aldrig", + "justNow": "just nu", + "minutesAgoShort": "{count}m sedan", + "hoursAgoShort": "{count}h sedan", + "daysAgoShort": "{count}d sedan", + "monthsAgoShort": "{count}mån sedan", + "yearsAgoShort": "{count}y sedan", + "runtimeCheckFailed": "Körtidskontroll misslyckades", + "yourApiKeyPlaceholder": "din-api-nyckel", + "modelPlaceholder": "leverantör/modell-id", + "configurationSaved": "Konfigurationen har sparats.", + "failedToSave": "Det gick inte att spara konfigurationen.", + "noApiKeysCreateOne": "Inga API-nycklar - Skapa en på sidan Nycklar", + "defaultOmnirouteKey": "sk_omniroute (standard)", + "selectModel": "Välj modell", + "selectModelForAlias": "Välj modell för {alias}", + "selectModelForTool": "Välj modell för {tool}", + "select": "Välj", + "clear": "Rensa", + "comingSoon": "Kommer snart", + "checkingRuntime": "Kontrollerar körtidsstatus...", + "guideOnlyIntegration": "Integrering endast guide (ingen lokal körtid krävs)", + "cliRuntimeDetected": "CLI-körtid upptäckt och klar", + "cliFoundNotRunnable": "CLI hittades men inte körbar{reason}", + "cliRuntimeNotDetected": "CLI-körtid har inte upptäckts", + "binary": "Binär", + "configPath": "Konfigurationsväg", + "configPathShort": "Konfig", + "failedCheckRuntimeStatus": "Det gick inte att kontrollera körtidsstatus.", + "copy": "Kopiera", + "copied": "Kopierade", + "copyConfig": "Kopiera Config", + "saveConfig": "Spara konfiguration", + "selectionSaved": "Valet har sparats", + "guide": "Guide", + "detected": "Upptäckt", + "notReady": "Inte redo", + "active": "Aktiv", + "inactive": "Inaktiv", + "startMitm": "Starta MITM", + "stopMitm": "Stoppa MITM", + "mitmStarted": "MITM startade framgångsrikt!", + "mitmStopped": "MITM stoppade framgångsrikt!", + "failedStart": "Det gick inte att starta MITM", + "failedStop": "Det gick inte att stoppa MITM", + "saveMappings": "Spara mappningar", + "mappingsSaved": "Mappningar sparade!", + "failedSaveMappings": "Det gick inte att spara mappningar", + "howItWorks": "Hur det fungerar:", + "antigravityHowWorksDesc": "Antigravity skickar förfrågningar till Googles slutpunkt. MITM fångar upp och omdirigerar dem till OmniRoute.", + "antigravityStep1": "1. Starta MITM för att dirigera förfrågningar genom OmniRoute.", + "antigravityStep2Prefix": "2. Lägg till", + "antigravityStep2Suffix": "till din hosts-fil som 127.0.0.1.", + "antigravityStep3": "3. Öppna Antigravity och förfrågningar kommer att skickas som proxy.", + "sudoPasswordRequiredTitle": "Sudo-lösenord krävs", + "sudoPasswordHint": "Administratörslösenord krävs för att ändra värdens fil- och systemproxyinställningar.", + "enterSudoPassword": "Ange sudo lösenord", + "sudoPasswordRequiredError": "Sudo-lösenord krävs.", + "cancel": "Avbryt", + "confirm": "Bekräfta", + "settingsApplied": "Inställningarna har tillämpats!", + "failedApplySettings": "Det gick inte att tillämpa inställningarna", + "settingsReset": "Inställningarna har återställts!", + "failedResetSettings": "Det gick inte att återställa inställningarna", + "backupRestored": "Säkerhetskopieringen återställd!", + "failedRestore": "Det gick inte att återställa", + "checkingCli": "Kontrollerar {tool} CLI...", + "cliNotRunnable": "{tool} CLI installerat men inte körbart", + "cliNotInstalled": "{tool} CLI inte installerat", + "cliNotDetected": "{tool} CLI inte upptäckt", + "cliDetectedReady": "{tool} CLI upptäckt och redo", + "cliFoundFailedHealthcheck": "{tool} CLI hittades men misslyckades med runtime healthcheck{reason}.", + "installCliPrompt": "Installera {tool} CLI för att använda den här funktionen.", + "installCodexPrompt": "Installera Codex CLI för att använda funktionen för automatisk applicering.", + "hide": "Göm", + "howToInstall": "Hur man installerar", + "installationGuide": "Installationsguide", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Efter installationen, kör", + "toVerify": "att verifiera.", + "current": "Aktuell", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Återställ till standard", + "providerModelPlaceholder": "leverantör/modell-id", + "apply": "Ansök", + "reset": "Återställ", + "manualConfig": "Manuell konfiguration", + "backups": "Säkerhetskopieringar", + "configBackups": "Konfigurera säkerhetskopior", + "noBackupsYet": "Inga säkerhetskopior ännu. Säkerhetskopieringar skapas automatiskt före varje applicering eller återställning.", + "restore": "Återställ", + "backupRestoredReloading": "Säkerhetskopieringen återställd! Laddar om status...", + "failedRestoreBackup": "Det gick inte att återställa säkerhetskopian", + "applied": "Ansökt!", + "failed": "Misslyckades", + "resetDone": "Återställ!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute är konfigurerad som OpenAI-kompatibel leverantör", + "provider": "Leverantör", + "model": "Modell", + "providers": "Leverantörer", + "auth": "Auth", + "noApiKeysAvailable": "Inga API-nycklar tillgängliga", + "usingDefaultOmniroute": "Använder standard: sk_omniroute", + "updateConfig": "Uppdatera Config", + "applyConfig": "Använd Config", + "noBackupsAvailable": "Inga säkerhetskopior tillgängliga.", + "profileSaved": "Profilen \"{name}\" har sparats!", + "failedSaveProfile": "Det gick inte att spara profilen", + "profileActivated": "Profilen aktiverad!", + "failedActivateProfile": "Det gick inte att aktivera profilen", + "profiles": "Profiler", + "savedProfiles": "Sparade profiler", + "noProfilesYet": "Inga profiler sparade ännu. Spara aktuell konfiguration som en profil nedan.", + "activate": "Aktivera", + "deleteProfile": "Ta bort profil", + "profileNamePlaceholder": "Profilnamn (t.ex. personligt konto)", + "saveCurrent": "Spara aktuell", + "codexAuthNotePrefix": "Codex använder", + "codexAuthNoteMiddle": "med", + "codexAuthNoteSuffix": "Klicka på \"Apply\" för att automatiskt konfigurera.", + "claudeManualConfiguration": "Claude CLI - Manuell konfiguration", + "codexManualConfiguration": "Codex CLI - Manuell konfiguration", + "droidManualConfiguration": "Factory Droid - Manuell konfiguration", + "openClawManualConfiguration": "Öppna Claw - Manuell konfiguration", + "clineManualConfiguration": "Cline manuell konfiguration", + "kiloManualConfiguration": "Kilokod manuell konfiguration", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE med MITM", + "claude": "Antropisk Claude Code CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Öppna Claw AI Assistant", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Kilokod AI Assistant CLI", + "cursor": "Cursor AI Code Editor", + "continue": "Fortsätt AI Assistant" + }, + "guides": { + "cursor": { + "notes": { + "0": "Kräver ett Cursor Pro-konto för att använda den här funktionen.", + "1": "Markören dirigerar förfrågningar genom sin egen server, så lokal slutpunkt stöds inte. Vänligen aktivera Cloud Endpoint i Inställningar." + }, + "steps": { + "1": { + "title": "Öppna Inställningar", + "desc": "Gå till Inställningar -> Modeller" + }, + "2": { + "title": "Aktivera OpenAI API", + "desc": "Aktivera alternativet \"OpenAI API-nyckel\"." + }, + "3": { + "title": "Bas-URL" + }, + "4": { + "title": "API-nyckel" + }, + "5": { + "title": "Lägg till anpassad modell", + "desc": "Klicka på \"Visa alla modeller\" -> \"Lägg till anpassad modell\"" + }, + "6": { + "title": "Välj modell" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Öppna Config", + "desc": "Öppna Fortsätt konfigurationsfil" + }, + "2": { + "title": "API-nyckel" + }, + "3": { + "title": "Välj modell" + }, + "4": { + "title": "Lägg till Model Config", + "desc": "Lägg till följande konfiguration till din modellarray:" + } + } + } + } + }, + "combos": { + "title": "Combos", + "description": "Skapa modellkombinationer med viktad routing och reservstöd", + "createCombo": "Skapa Combo", + "editCombo": "Redigera kombination", + "deleteCombo": "Ta bort Combo", + "noModels": "Inga modeller", + "noModelsYet": "Inga modeller har lagts till ännu", + "addModel": "Lägg till modell", + "addModelToCombo": "Lägg till modell till Combo", + "routingStrategy": "Routingstrategi", + "maxRetries": "Max försöker igen", + "timeout": "Timeout (ms)", + "healthcheck": "Hälsokontroll", + "priority": "Prioritet", + "fallback": "Fallback", + "roundRobin": "Round Robin", + "random": "Slumpmässigt", + "leastLatency": "Minsta latens", + "comboName": "Kombinationsnamn", + "comboNamePlaceholder": "min-kombo", + "deleteConfirm": "Vill du ta bort den här kombinationen?", + "noCombosYet": "Inga kombinationer än", + "comboCreated": "Kombinationen skapades framgångsrikt", + "comboUpdated": "Kombinationen har uppdaterats", + "comboDeleted": "Combo raderad", + "failedCreate": "Det gick inte att skapa en kombination", + "failedUpdate": "Det gick inte att uppdatera kombinationen", + "errorCreating": "Det gick inte att skapa kombination", + "errorUpdating": "Fel vid uppdatering av kombination", + "errorDeleting": "Fel vid borttagning av kombination", + "testFailed": "Testbegäran misslyckades", + "failedToggle": "Det gick inte att växla kombination", + "testResults": "Testresultat — {name}", + "resolvedBy": "Löst av:", + "more": "+{count} till", + "reqs": "reqs", + "success": "framgång", + "proxyConfigured": "Proxy konfigurerad", + "copyComboName": "Kopiera kombinationsnamn", + "enableCombo": "Aktivera kombination", + "disableCombo": "Inaktivera kombination", + "testCombo": "Testkombo", + "duplicate": "Duplicera", + "proxyConfig": "Proxykonfiguration", + "nameRequired": "Namn krävs", + "nameInvalid": "Endast bokstäver, siffror, -, _, / och . tillåtet", + "nameHint": "Bokstäver, siffror, -, _, / och . tillåtet", + "priorityDesc": "Sekventiell reserv: provar modell 1 först, sedan 2 osv.", + "weightedDesc": "Fördelar trafik efter viktprocent med reserv", + "roundRobinDesc": "Cirkulär distribution: varje begäran går till nästa modell i rotation", + "randomDesc": "Enhetligt slumpmässigt urval, sedan fallback till återstående modeller", + "leastUsedDesc": "Väljer modellen med minst förfrågningar, balanserar belastningen över tiden", + "costOptimizedDesc": "Rutter till den billigaste modellen först baserat på prissättning", + "models": "Modeller", + "autoBalance": "Automatisk balansering", + "advancedSettings": "Avancerade inställningar", + "retryDelay": "Försök igen fördröjning (ms)", + "concurrencyPerModel": "Samtidighet / Modell", + "queueTimeout": "Timeout för kö (ms)", + "advancedHint": "Lämna tomt om du vill använda globala standardinställningar. Dessa åsidosätter inställningarna per leverantör.", + "moveUp": "Flytta uppåt", + "moveDown": "Flytta ner", + "removeModel": "Ta bort", + "saving": "Sparar...", + "weighted": "Viktad", + "leastUsed": "Minst använda", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Kostnader", + "budget": "Budget", + "totalCost": "Total kostnad", + "breakdown": "Kostnadsfördelning", + "noData": "Inga kostnadsdata", + "byModel": "Efter modell", + "byProvider": "Av leverantör" + }, + "endpoint": { + "title": "API-slutpunkt", + "available": "Tillgängliga slutpunkter", + "cloudProxy": "Molnproxy", + "disableConfirm": "Är du säker på att du vill inaktivera molnproxy?", + "baseUrl": "Bas-URL", + "apiKeyLabel": "API-nyckel", + "registeredKeys": "Registrerade nycklar", + "chatCompletions": "Chattavslut", + "responses": "Svar", + "listModels": "Lista modeller", + "usingCloudProxy": "Använder Cloud Proxy", + "usingLocalServer": "Använder lokal server", + "machineId": "Maskin-ID: {id}...", + "disableCloud": "Inaktivera Cloud", + "enableCloud": "Aktivera Cloud", + "modelsAcrossEndpoints": "{models} modeller över {endpoints} slutpunkter", + "chatDesc": "Strömmande och icke-strömmande chatt med alla leverantörer", + "embeddings": "Inbäddningar", + "embeddingsDesc": "Textinbäddningar för sök- och RAG-pipelines", + "imageGeneration": "Bildgenerering", + "imageDesc": "Generera bilder från textmeddelanden", + "rerank": "Rangordna om", + "rerankDesc": "Rangordna om dokument efter relevans för en fråga", + "audioTranscription": "Ljudtranskription", + "audioTranscriptionDesc": "Transkribera ljudfiler till text (Viska)", + "textToSpeech": "Text till tal", + "textToSpeechDesc": "Konvertera text till naturligt klingande tal", + "moderations": "Moderationer", + "moderationsDesc": "Innehållsmoderering och säkerhetsklassificering", + "enableCloudTitle": "Aktivera Cloud Proxy", + "whatYouGet": "Vad du kommer att få", + "cloudBenefitAccess": "Få åtkomst till ditt API från var som helst i världen", + "cloudBenefitShare": "Dela enkelt slutpunkten med ditt team", + "cloudBenefitPorts": "Inget behov av att öppna portar eller konfigurera brandvägg", + "cloudBenefitEdge": "Snabbt globalt kantnätverk", + "cloudSessionNote": "Cloud kommer att behålla din autentiseringssession i 1 dag. Om den inte används kommer den att raderas automatiskt.", + "cloudUnstableNote": "Cloud är för närvarande instabilt med Claude Code OAuth i vissa fall.", + "cloudConnected": "Cloud Proxy ansluten!", + "connectingToCloud": "Ansluter till molnet...", + "verifyingConnection": "Verifierar anslutning...", + "connecting": "Ansluter...", + "verifying": "Verifierar...", + "connected": "Ansluten!", + "disableCloudTitle": "Inaktivera molnproxy", + "disableWarning": "Alla autentiseringssessioner kommer att raderas från molnet.", + "syncingData": "Synkroniserar senaste data...", + "disablingCloud": "Inaktiverar molnet...", + "syncing": "Synkroniseras...", + "disabling": "Inaktiverar...", + "cloudConnectedVerified": "Cloud Proxy ansluten och verifierad!", + "connectedVerificationPending": "Ansluten — verifiering väntar", + "connectedVerificationPendingWithError": "Ansluten — verifiering väntar: {error}", + "cloudDisabledSuccess": "Molnet har inaktiverats", + "syncedSuccess": "Synkroniserad framgångsrikt", + "failedDisable": "Det gick inte att inaktivera molnet", + "failedEnable": "Det gick inte att aktivera molnet", + "cloudRequestTimeout": "Timeout för molnbegäran", + "cloudRequestFailed": "Molnbegäran misslyckades", + "cloudWorkerUnreachable": "Det gick inte att nå molnarbetaren. Se till att molntjänsten körs (npm kör dev i /moln).", + "connectionFailed": "Anslutning misslyckades", + "syncFailed": "Det gick inte att synkronisera molndata", + "providerModelsTitle": "{provider} — Modeller", + "noModelsForProvider": "Inga modeller tillgängliga för denna leverantör.", + "chat": "Chatta", + "embedding": "Inbäddning", + "image": "Bild", + "custom": "anpassad", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Systemhälsa", + "description": "Realtidsövervakning av din OmniRoute-instans", + "healthy": "Frisk", + "degraded": "Försämrad", + "down": "Ner", + "uptime": "Upptid", + "memory": "Minne", + "memoryRss": "Minne (RSS)", + "heap": "Hög", + "cpu": "CPU", + "database": "Databas", + "version": "Version", + "lastCheck": "Sista kontrollen", + "providerHealth": "Leverantörshälsa", + "systemMetrics": "Systemmått", + "tokenHealth": "Token Health", + "refreshAll": "Uppdatera alla", + "checkNow": "Kontrollera nu", + "loadingHealth": "Läser in hälsodata...", + "failedToLoad": "Det gick inte att läsa in hälsodata: {error}", + "retry": "Försök igen", + "allOperational": "Alla system i drift", + "issuesDetected": "Systemproblem upptäcktes", + "updatedAt": "Uppdaterad {time}", + "latency": "Latens", + "latencyP50": "p50", + "latencyP95": "s 95", + "latencyP99": "s 99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Totalt antal förfrågningar", + "noDataYet": "Inga uppgifter ännu", + "promptCache": "Fråga Cache", + "entries": "Inlägg", + "hitRate": "Träfffrekvens", + "hitsMisses": "Träffar/missar", + "signatureCache": "Signaturcache", + "signatureDefaults": "Standardvärden", + "signatureTool": "Verktyg", + "signatureFamily": "Familj", + "signatureSession": "Session", + "recovering": "Återhämtar sig", + "noCBData": "Inga strömbrytardata tillgängliga. Gör några förfrågningar först.", + "providerHealthStatusAria": "Leverantörens hälsostatus", + "issuesLabel": "Problem upptäckta", + "operational": "Operativt", + "providers": "Leverantörer", + "healthyCount": "{count} frisk", + "nodeVersion": "Nod {version}", + "failures": "{count} fel", + "failuresPlural": "{count} fel", + "lastFailure": "Sist", + "rateLimitStatus": "Beloppsgränsstatus", + "activeLimiters": "{count} aktiv begränsare", + "activeLimitersPlural": "{count} aktiva begränsare", + "queued": "I kö", + "queuedCount": "{count} i kö", + "running": "löpning", + "runningCount": "{count} igång", + "ok": "OK", + "activeLockouts": "Aktiva lockouter", + "resetConfirm": "Återställa alla strömbrytare till friskt tillstånd? Detta kommer att radera alla felräkningar och återställa alla leverantörer till driftstatus.", + "resetAllTitle": "Återställ alla strömbrytare till friskt tillstånd", + "resetting": "Återställer...", + "resetAll": "Återställ alla", + "until": "Tills {time}" + }, + "limits": { + "title": "Gränser och kvoter", + "rateLimit": "Prisgräns", + "remaining": "Kvar", + "requestsPerMinute": "Önskemål/min", + "tokensPerMinute": "Poletter/min", + "dailyLimit": "Daglig gräns" + }, + "logs": { + "title": "Loggar", + "requestLogs": "Begär loggar", + "proxyLogs": "Proxyloggar", + "auditLog": "Revisionslogg", + "console": "Konsol", + "auditLogDesc": "Administrativa åtgärder och säkerhetshändelser", + "loading": "Laddar...", + "refresh": "Uppdatera", + "filterByAction": "Filtrera efter åtgärd...", + "filterByActor": "Filtrera efter skådespelare...", + "filterEntriesAria": "Filtrera granskningsloggposter", + "filterByActionTypeAria": "Filtrera efter åtgärdstyp", + "filterByActorAria": "Filtrera efter skådespelare", + "refreshAuditLogAria": "Uppdatera granskningsloggen", + "tableAria": "Granskningsloggposter", + "failedFetchAuditLog": "Det gick inte att hämta granskningsloggen", + "showing": "Visar {count} poster (offset {offset})", + "search": "Sök", + "timestamp": "Tidsstämpel", + "action": "Åtgärd", + "actor": "Skådespelare", + "target": "Mål", + "details": "Detaljer", + "ipAddress": "IP-adress", + "notAvailable": "—", + "noEntries": "Inga granskningsloggposter hittades", + "previous": "Föregående", + "next": "Nästa" + }, + "onboarding": { + "welcome": "Välkommen", + "security": "Säkerhet", + "test": "Testa", + "ready": "Klart!", + "setPassword": "Ange lösenord", + "addProvider": "Lägg till din första leverantör", + "getStarted": "Kom igång", + "skip": "Hoppa över", + "skipWizard": "Hoppa över guiden helt", + "skipPassword": "Hoppa över lösenordsinställningar", + "skipAndContinue": "Hoppa över och fortsätt", + "passwordLabel": "Lösenord", + "confirmPassword": "Bekräfta lösenord", + "enterPassword": "Ange lösenord", + "confirmPasswordPlaceholder": "Bekräfta lösenord", + "passwordsMismatch": "Lösenord stämmer inte överens", + "setupComplete": "Installationen är klar!", + "goToDashboard": "Gå till Dashboard →", + "welcomeDesc": "OmniRoute är din lokala AI API-proxy. Den dirigerar förfrågningar till flera AI-leverantörer med lastbalansering, failover och användningsspårning.", + "multiProvider": "Flera leverantörer", + "usageTracking": "Användningsspårning", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "Ställ in ett lösenord för att skydda din instrumentpanel, eller hoppa över nu.", + "providerDesc": "Anslut din första AI-leverantör. Du kan lägga till mer senare.", + "apiKeyRequired": "API-nyckel (krävs)", + "customUrlOptional": "Anpassad webbadress (valfritt)", + "testDesc": "Låt oss verifiera att din leverantörsanslutning fungerar.", + "runTest": "Kör anslutningstest", + "testingConnection": "Testar anslutning...", + "connectionSuccessful": "Anslutningen lyckades! Din leverantör är redo.", + "noProviderFound": "Ingen leverantör hittades. Du kan lägga till en från instrumentpanelen senare.", + "testFailed": "Testet misslyckades, men du kan konfigurera detta senare.", + "couldNotTest": "Kunde inte testa just nu. Du kan testa från instrumentpanelen.", + "doneDesc": "Du är redo! Din OmniRoute-instans är konfigurerad och redo att proxy AI-förfrågningar.", + "yourEndpoint": "Din slutpunkt:", + "continue": "Fortsätt", + "retry": "Försök igen", + "failedSetPassword": "Det gick inte att ange lösenord. Försök igen.", + "failedAddProvider": "Det gick inte att lägga till leverantör. Försök igen.", + "connectionError": "Anslutningsfel. Försök igen.", + "provider": "Leverantör" + }, + "providers": { + "title": "Leverantörer", + "addProvider": "Lägg till leverantör", + "editProvider": "Redigera leverantör", + "deleteProvider": "Ta bort leverantör", + "noProviders": "Inga leverantörer har konfigurerats", + "modelAvailability": "Modelltillgänglighet", + "accounts": "konton", + "newAccount": "Nytt konto", + "deleteConfirm": "Är du säker på att du vill ta bort den här leverantören?", + "testing": "Testar...", + "testConnection": "Testa anslutningen", + "testSuccess": "Anslutningen lyckades", + "testFailed": "Anslutning misslyckades", + "available": "Tillgänglig", + "cooldown": "Nedkylning", + "unavailable": "Ej tillgänglig", + "unknown": "Okänd", + "oauthLabel": "OAuth", + "compatibleLabel": "Kompatibel", + "chat": "Chatta", + "responses": "Svar", + "messages": "Meddelanden", + "oauthProviders": "OAuth-leverantörer", + "freeProviders": "Gratis leverantörer", + "apiKeyProviders": "API-nyckelleverantörer", + "compatibleProviders": "API-nyckelkompatibla leverantörer", + "testAll": "Testa alla", + "testAllOAuth": "Testa alla OAuth-anslutningar", + "testAllFree": "Testa alla gratisanslutningar", + "testAllApiKey": "Testa alla API-nyckelanslutningar", + "testAllCompatible": "Testa alla kompatibla anslutningar", + "connected": "{count} Ansluten", + "errorCount": "{count} Fel ({code})", + "errorCountNoCode": "{count} Fel", + "noConnections": "Inga anslutningar", + "disabled": "Inaktiverad", + "enableProvider": "Aktivera leverantör", + "disableProvider": "Inaktivera leverantör", + "testResults": "Testresultat", + "noCompatibleYet": "Inga kompatibla leverantörer har lagts till ännu", + "compatibleHint": "Använd knapparna ovan för att lägga till OpenAI- eller Anthropic-kompatibla slutpunkter", + "addOpenAICompatible": "Lägg till OpenAI-kompatibel", + "addAnthropicCompatible": "Lägg till Antropisk kompatibel", + "addNewProvider": "Lägg till ny leverantör", + "backToProviders": "Tillbaka till leverantörer", + "configureNewProvider": "Konfigurera en ny AI-leverantör att använda med dina applikationer.", + "providerLabel": "Leverantör", + "selectProvider": "Välj en leverantör", + "selectedProvider": "Vald leverantör", + "authMethod": "Autentiseringsmetod", + "apiKeyLabel": "API-nyckel", + "apiKeyRequired": "API-nyckel krävs", + "selectProviderRequired": "Välj en leverantör", + "enterApiKey": "Ange din API-nyckel", + "apiKeySecure": "Din API-nyckel kommer att krypteras och lagras säkert.", + "oauth2Connect": "Anslut med OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Anslut ditt konto med OAuth2-autentisering.", + "displayName": "Visningsnamn", + "displayNamePlaceholder": "t.ex. Production API, Dev Environment", + "displayNameHint": "Valfritt. Ett vänligt namn för att identifiera denna konfiguration.", + "active": "Aktiv", + "activeDescription": "Aktivera denna leverantör för användning i dina applikationer", + "cancel": "Avbryt", + "createProvider": "Skapa leverantör", + "failedCreate": "Det gick inte att skapa leverantör", + "errorOccurred": "Ett fel uppstod. Försök igen.", + "modelStatus": "Modellstatus", + "allModelsOperational": "Alla modeller i drift", + "modelsWithIssues": "{count} modell(er) med problem", + "allModelsNormal": "Alla modeller svarar normalt.", + "cooldownCleared": "Nedkylning rensad för {model}", + "failedClearCooldown": "Det gick inte att rensa nedkylningen", + "loadingAvailability": "Laddar modelltillgänglighet...", + "clearCooldown": "Rensa", + "clearing": "Rensar...", + "until": "Tills {time}", + "providerTestFailed": "Providertestet misslyckades", + "modeTest": "{mode} Test", + "passedCount": "{count} godkänd", + "failedCount": "{count} misslyckades", + "testedCount": "{count} testad", + "millisecondsAbbr": "{value}ms", + "okShort": "OK", + "errorShort": "FEL", + "noActiveConnectionsInGroup": "Inga aktiva anslutningar hittades för den här gruppen.", + "allTestsPassed": "Alla {total} tester godkända", + "testSummary": "{passed}/{total} godkänd, {failed} misslyckades", + "nameLabel": "Namn", + "prefixLabel": "Prefix", + "baseUrlLabel": "Bas-URL", + "apiTypeLabel": "API-typ", + "prefixHint": "Obligatoriskt. Unikt prefix för modellnamn.", + "nameHint": "Obligatoriskt. En vänlig etikett för denna nod.", + "baseUrlHint": "Obligatoriskt.  Providers API-basadress.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Validera anslutning", + "validating": "Validerar...", + "connectionValid": "Anslutningen är giltig!", + "connectionFailed": "Anslutning misslyckades. Kontrollera URL och nyckel.", + "testKeyLabel": "Testa API-nyckel", + "testKeyPlaceholder": "sk-... (endast för validering)", + "providerNotFound": "Det gick inte att hitta leverantören", + "deleteConnectionConfirm": "Vill du ta bort den här anslutningen?", + "failedSetAlias": "Det gick inte att ange alias", + "failedSaveConnection": "Det gick inte att spara anslutningen", + "failedSaveConnectionRetry": "Det gick inte att spara anslutningen. Försök igen.", + "failedRetestConnection": "Det gick inte att testa om anslutningen", + "deleteCompatibleNodeConfirm": "Ta bort denna {type} kompatibla nod?", + "anthropicCompatibleDetails": "Antropiska kompatibla detaljer", + "openaiCompatibleDetails": "OpenAI-kompatibla detaljer", + "messagesApi": "Messages API", + "responsesApi": "Responses API", + "chatCompletions": "Chattavslut", + "importingModels": "Importerar...", + "importFromModels": "Importera från /models", + "addConnectionToImport": "Lägg till en anslutning för att aktivera import.", + "noModelsConfigured": "Inga modeller har konfigurerats", + "connectionCount": "{count} anslutning(ar)", + "fetchingModels": "Hämtar tillgängliga modeller...", + "failedFetchModels": "Det gick inte att hämta modeller", + "noModelsFound": "Inga modeller hittades", + "importFailed": "Importen misslyckades", + "noNewModelsAdded": "Inga nya modeller tillkom.", + "adding": "Lägger till...", + "importingModelsTitle": "Importera modeller", + "copyModel": "Kopiera modell", + "removeModel": "Ta bort modellen", + "rateLimitProtected": "Skyddad", + "rateLimitUnprotected": "Oskyddad", + "enableRateLimitProtection": "Klicka för att aktivera hastighetsgränsskydd", + "disableRateLimitProtection": "Klicka för att inaktivera skyddet för hastighetsgränsen", + "productionKey": "Produktionsnyckel", + "enterNewApiKey": "Ange ny API-nyckel", + "optional": "Valfritt", + "anthropicCompatibleName": "Antropisk kompatibel", + "openaiCompatibleName": "OpenAI-kompatibel", + "failedImportModels": "Det gick inte att importera modeller", + "noModelsReturnedFromEndpoint": "Inga modeller returnerades från /models endpoint.", + "importingModelsProgress": "Importerar {current} av {total} modeller...", + "foundModelsStartingImport": "Hittade {count} modeller. Startar import...", + "importingModelById": "Importerar {modelId}...", + "importSuccessCount": "{count, plural, one {# model} other {# models}} har importerats framgångsrikt!", + "noNewModelsAddedExisting": "Inga nya modeller har lagts till (alla finns redan).", + "importDoneCount": "✓ Klart! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Ett oväntat fel inträffade", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "meddelanden", + "responsesPath": "svar", + "chatCompletionsPath": "chatt/avslut", + "add": "Lägg till", + "edit": "Redigera", + "delete": "Ta bort", + "anthropic": "Antropisk", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Endast en anslutning tillåts per kompatibel nod. Lägg till ytterligare en nod om du behöver fler anslutningar.", + "connections": "Anslutningar", + "providerProxyTitleConfigured": "Leverantörsproxy: {host}", + "configured": "konfigurerad", + "providerProxyConfigureHint": "Konfigurera proxy för alla anslutningar från denna leverantör", + "providerProxy": "Leverantörs proxy", + "noConnectionsYet": "Inga anslutningar än", + "addFirstConnectionHint": "Lägg till din första anslutning för att komma igång", + "addConnection": "Lägg till anslutning", + "availableModels": "Tillgängliga modeller", + "pageAutoRefresh": "Sidan uppdateras automatiskt...", + "statusDisabled": "funktionshindrade", + "statusConnected": "ansluten", + "statusRuntimeIssue": "körtidsproblem", + "statusAuthFailed": "auth misslyckades", + "statusRateLimited": "sats begränsad", + "statusNetworkIssue": "nätverksproblem", + "statusTestUnsupported": "testet stöds inte", + "statusUnavailable": "otillgänglig", + "statusFailed": "misslyckades", + "statusError": "fel", + "oauthAccount": "OAuth-konto", + "errorTypeRuntime": "Lokal körtid", + "errorTypeUpstreamAuth": "Uppströms auth", + "errorTypeMissingCredential": "Saknar legitimation", + "errorTypeRefreshFailed": "Uppdateringen misslyckades", + "errorTypeTokenExpired": "Token har löpt ut", + "errorTypeRateLimited": "Begränsat pris", + "errorTypeUpstreamUnavailable": "Uppströms ej tillgänglig", + "errorTypeNetworkError": "Nätverksfel", + "errorTypeTestUnsupported": "Testet stöds inte", + "errorTypeUpstreamError": "Uppströmsfel", + "proxySourceGlobal": "Global", + "proxySourceProvider": "Leverantör", + "proxySourceKey": "Nyckel", + "proxyConfiguredBySource": "Proxy ({source}): {host}", + "autoPriority": "Auto: {priority}", + "proxy": "Proxy", + "retestAuthentication": "Testa om autentisering", + "retest": "Testa igen", + "disableConnection": "Inaktivera anslutningen", + "enableConnection": "Aktivera anslutning", + "reauthenticateConnection": "Autentisera den här anslutningen igen", + "proxyConfig": "Proxykonfiguration", + "aliasExistsAlert": "Aliaset \"{alias}\" finns redan. Använd en annan modell eller redigera befintligt alias.", + "openRouterAnyModelHint": "OpenRouter stöder alla modeller. Lägg till modeller och skapa alias för snabb åtkomst.", + "modelIdFromOpenRouter": "Modell-ID (från OpenRouter)", + "openRouterModelPlaceholder": "antropisk/claude-3-opus", + "customModels": "Anpassade modeller", + "customModelsHint": "Lägg till modell-ID:n som inte finns i standardlistan. Dessa kommer att vara tillgängliga för routing.", + "modelId": "Modell ID", + "customModelPlaceholder": "t.ex. gpt-4.5-turbo", + "loading": "Laddar...", + "removeCustomModel": "Ta bort anpassad modell", + "noCustomModels": "Inga anpassade modeller har lagts till ännu.", + "allSuggestedAliasesExist": "Alla föreslagna alias finns redan. Välj en annan modell eller ta bort motstridiga alias.", + "failedSaveCustomModel": "Det gick inte att spara anpassad modell", + "modelAddedSuccess": "Modellen {modelId} har lagts till", + "failedAddModelTryAgain": "Det gick inte att lägga till modell. Försök igen.", + "failedSaveImportedModel": "Det gick inte att spara importerad modell till anpassad databas", + "failedImportModelsTryAgain": "Det gick inte att importera modeller. Försök igen.", + "failedRemoveModelFromDatabase": "Det gick inte att ta bort modellen från databasen", + "modelRemovedSuccess": "Modellen har tagits bort", + "failedDeleteModelTryAgain": "Det gick inte att ta bort modellen. Försök igen.", + "compatibleModelsDescription": "Lägg till {type}-kompatibla modeller manuellt eller importera dem från /models-slutpunkten.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "API-nyckelvalidering misslyckades. Kontrollera din nyckel och försök igen.", + "addProviderApiKeyTitle": "Lägg till {provider} API-nyckel", + "checking": "Kontrollerar...", + "check": "Kontrollera", + "valid": "Giltigt", + "invalid": "Ogiltig", + "creating": "Skapar...", + "validationChecksAnthropicCompatible": "Validering kontrollerar {provider} genom att verifiera API-nyckeln.", + "validationChecksOpenAiCompatible": "Valideringskontroller {provider} via /models på din bas-URL.", + "priorityLabel": "Prioritet", + "saving": "Sparar...", + "save": "Spara", + "editConnection": "Redigera anslutning", + "accountName": "Kontonamn", + "email": "E-post", + "healthCheckMinutes": "Hälsokontroll (min)", + "healthCheckHint": "Proaktivt uppdateringsintervall för token. 0 = inaktiverad.", + "failedTestConnection": "Det gick inte att testa anslutningen", + "failed": "Misslyckades", + "leaveBlankKeepCurrentApiKey": "Lämna tomt för att behålla den aktuella API-nyckeln.", + "editCompatibleTitle": "Redigera {type} Kompatibel", + "compatibleBaseUrlHint": "Använd basadressen (som slutar på /v1) för ditt {type}-kompatibla API.", + "apiKeyForCheck": "API-nyckel (för kontroll)", + "compatibleProdPlaceholder": "{type} Kompatibel (Prod)" + }, + "settings": { + "title": "Inställningar", + "general": "Allmänt", + "security": "Säkerhet", + "appearance": "Utseende", + "routing": "Routing", + "cache": "Cache", + "resilience": "Motståndskraft", + "systemPrompt": "Systemprompt", + "thinkingBudget": "Tänkande budget", + "proxy": "Proxy", + "pricing": "Prissättning", + "storage": "Förvaring", + "policies": "Policyer", + "ipFilter": "IP-filter", + "comboDefaults": "Combo standard", + "fallbackChains": "Reservkedjor", + "changePassword": "Ändra lösenord", + "enablePassword": "Aktivera lösenord", + "darkMode": "Mörkt läge", + "lightMode": "Ljusläge", + "systemTheme": "Systemtema", + "enableCache": "Aktivera cache", + "cacheTTL": "Cache TTL", + "maxCacheSize": "Max cachestorlek", + "clearCache": "Rensa cache", + "cacheHits": "Cacheträffar", + "cacheMisses": "Cache missar", + "hitRate": "Träfffrekvens", + "cacheEntries": "Cacheposter", + "circuitBreaker": "Strömbrytare", + "retryPolicy": "Försök igen", + "maxRetries": "Max försöker igen", + "retryDelay": "Försök igen Fördröjning", + "timeoutMs": "Timeout (ms)", + "enableSystemPrompt": "Aktivera System Prompt", + "systemPromptText": "Systemprompttext", + "enableThinking": "Aktivera tänkande", + "maxThinkingTokens": "Max Thinking Tokens", + "enableProxy": "Aktivera proxy", + "proxyUrl": "Proxy-URL", + "pricingRates": "Priser Format", + "currentPricing": "Aktuell prisöversikt", + "loadingPricing": "Laddar prisinformation...", + "noPricing": "Inga prisuppgifter tillgängliga", + "input": "Ingång", + "output": "Utgång", + "cached": "Cachad", + "reasoning": "Resonemang", + "cacheCreation": "Skapande av cache", + "customPricing": "Anpassad prissättning", + "databaseSize": "Databasstorlek", + "backupDb": "Säkerhetskopiera databas", + "restoreDb": "Återställ databas", + "exportData": "Exportera data", + "importData": "Importera data", + "clearData": "Rensa alla data", + "clearDataConfirm": "Detta kommer att radera all data permanent. Är du säker?", + "enableRequestLogs": "Aktivera förfrågningsloggar", + "logRetention": "Logglagring", + "ipWhitelist": "IP vitlista", + "ipBlacklist": "IP Blacklist", + "addIP": "Lägg till IP", + "savedSuccessfully": "Inställningarna har sparats", + "ai": "AI", + "advanced": "Avancerat", + "localMode": "Lokalt läge — All data lagrad på din maskin", + "settingsSectionsAria": "Inställningar", + "switchThemes": "Växla mellan ljusa och mörka teman", + "themeSelectionAria": "Temaval", + "themeLight": "Ljus", + "themeDark": "Mörkt", + "themeSystem": "System", + "hideHealthLogs": "Dölj loggar för hälsokontroll", + "hideHealthLogsDesc": "När PÅ, dämpa [HealthCheck]-meddelanden i serverkonsolen", + "promptCache": "Fråga Cache", + "flushCache": "Spola cachen", + "flushing": "Spolar...", + "size": "Storlek", + "hits": "Träffar", + "evictions": "Vräkningar", + "loadingCacheStats": "Laddar cachestatistik...", + "globalProxy": "Global proxy", + "globalProxyDesc": "Konfigurera en global utgående proxy för alla API-anrop. Enskilda leverantörer, kombinationer och nycklar kan åsidosätta detta.", + "noGlobalProxy": "Ingen global proxy konfigurerad", + "globalLabel": "Global", + "configure": "Konfigurera", + "globalSystemPrompt": "Global System Prompt", + "systemPromptDesc": "Injiceras i alla förfrågningar på proxynivå", + "saved": "Sparad", + "systemPromptPlaceholder": "Ange systemuppmaning för att injicera i alla förfrågningar...", + "systemPromptHint": "Denna prompt läggs till systemmeddelandet för varje begäran. Använd för globala instruktioner, säkerhetsriktlinjer eller regler för svarsformatering.", + "chars": "{count} tecken", + "thinkingBudgetTitle": "Tänkande budget", + "thinkingBudgetDesc": "Kontrollera användningen av AI-resonemangstoken över alla förfrågningar", + "passthrough": "Genomgång", + "passthroughDesc": "Inga förändringar – kunden styr tankebudgeten", + "auto": "Auto", + "autoDesc": "Ta bort alla tankeinställningar – låt leverantören bestämma", + "custom": "Anpassad", + "customDesc": "Ställ in en fast tokenbudget för alla förfrågningar", + "adaptive": "Adaptiv", + "adaptiveDesc": "Skala budget baserat på begärans komplexitet", + "effortNone": "Inga (0 tokens)", + "effortLow": "Låg (1K tokens)", + "effortMedium": "Medium (10 000 tokens)", + "effortHigh": "Hög (128 000 tokens)", + "tokenBudget": "Token budget", + "tokens": "polletter", + "baseEffortLevel": "Basinsatsnivå", + "adaptiveHint": "Adaptivt läge skalas från denna basnivå baserat på antal meddelanden, verktygsanvändning och promptlängd.", + "requireLogin": "Kräv inloggning", + "requireLoginDesc": "När PÅ kräver instrumentpanelen lösenord. När AV, åtkomst utan inloggning.", + "currentPassword": "Aktuellt lösenord", + "enterCurrentPassword": "Ange aktuellt lösenord", + "newPassword": "Nytt lösenord", + "enterNewPassword": "Ange nytt lösenord", + "confirmPassword": "Bekräfta nytt lösenord", + "confirmPasswordPlaceholder": "Bekräfta nytt lösenord", + "passwordsNoMatch": "Lösenord stämmer inte överens", + "passwordUpdated": "Lösenordet har uppdaterats", + "failedUpdatePassword": "Det gick inte att uppdatera lösenordet", + "errorOccurred": "Ett fel uppstod", + "updatePassword": "Uppdatera lösenord", + "setPassword": "Ange lösenord", + "apiEndpointProtection": "API-ändpunktsskydd", + "requireAuthModels": "Kräv API-nyckel för /modeller", + "requireAuthModelsDesc": "När PÅ, returnerar /v1/models-slutpunkten 404 för oautentiserade förfrågningar. Förhindrar modellupptäckt av obehöriga användare.", + "blockedProviders": "Blockerade leverantörer", + "blockedProvidersDesc": "Dölj specifika leverantörer från /v1/models-svaret. Blockerade leverantörer visas inte i modelllistorna.", + "providersBlocked": "{count} leverantör(er) blockerade från /modeller", + "blockProviderTitle": "Blockera {provider}", + "unblockProviderTitle": "Avblockera {provider}", + "routingStrategy": "Routingstrategi", + "fillFirst": "Fyll först", + "fillFirstDesc": "Använd konton i prioritetsordning", + "roundRobin": "Round Robin", + "roundRobinDesc": "Gå igenom alla konton", + "p2c": "P2C", + "p2cDesc": "Välj 2 slumpmässigt, använd den hälsosammare", + "random": "Slumpmässigt", + "randomDesc": "Slumpmässigt konto varje begäran", + "leastUsed": "Minst använda", + "leastUsedDesc": "Välj minst senast använda konto", + "costOpt": "Kostnad Opt", + "costOptDesc": "Föredrar billigaste tillgängliga konto", + "stickyLimit": "Sticky Limit", + "stickyLimitDesc": "Samtal per konto innan byte", + "modelAliases": "Modellalias", + "modelAliasesDesc": "Jokerteckenmönster för att mappa om modellnamn • Använd * och ?", + "aliasPatternPlaceholder": "claude-sonnett-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Mönster", + "targetModel": "Målmodell", + "add": "+ Lägg till", + "session": "Session", + "sessionDetailsAria": "Sessionsdetaljer", + "status": "Status", + "authenticated": "Autentiserad", + "guest": "Gäst", + "loginTime": "Inloggningstid", + "sessionAge": "Sessionsålder", + "browser": "Webbläsare", + "clearLocalData": "Rensa lokal data", + "logout": "Logga ut", + "clearLocalDataConfirm": "Rensa alla lokala data? Detta kommer att återställa dina inställningar.", + "unknown": "Okänd", + "systemActor": "systemet", + "ipAccessControl": "IP-åtkomstkontroll", + "ipAccessControlDesc": "Blockera eller tillåt specifika IP-adresser", + "ipModeDisabled": "Inaktiverad", + "ipModeBlacklist": "Svartlista", + "ipModeWhitelist": "Vitlista", + "ipModeWhitelistPriority": "WL-prioritet", + "addIpAddress": "Lägg till IP-adress", + "ipAddressPlaceholder": "192.168.1.0/24 eller 10.0.*.*", + "block": "+ Blockera", + "allow": "+ Tillåt", + "blocked": "Blockerad ({count})", + "allowed": "Tillåtet ({count})", + "temporaryBans": "Tillfälliga förbud ({count})", + "minLeft": "{min}m kvar", + "auditLog": "Revisionslogg", + "searchAuditLogs": "Sök granskningsloggar...", + "failedLoadAuditLog": "Det gick inte att läsa in granskningsloggen", + "noAuditEvents": "Inga granskningshändelser hittades", + "action": "Åtgärd", + "actor": "Skådespelare", + "details": "Detaljer", + "time": "Tid", + "fallbackChainsTitle": "Reservkedjor", + "fallbackChainsDesc": "Definiera reservorder för leverantörer per modell", + "addChain": "+ Lägg till kedja", + "modelName": "Modellnamn", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Leverantörer (kommaseparerade, i prioriterad ordning)", + "providersCommaSeparatedPlaceholder": "antropisk, openai, gemini", + "createChain": "Skapa kedja", + "noFallbackChains": "Inga reservkedjor", + "noFallbackChainsDesc": "Skapa en kedja för att definiera leverantörs reservorder för en modell.", + "loadingFallbackChains": "Laddar reservkedjor...", + "deleteChainConfirm": "Vill du ta bort reservkedjan för \"{model}\"?", + "chainCreated": "Kedja skapad för {model}", + "chainDeleted": "Kedjan raderad för {model}", + "failedCreateChain": "Det gick inte att skapa kedja", + "failedDeleteChain": "Det gick inte att ta bort kedjan", + "deleteChain": "Ta bort kedja", + "fillModelAndProviders": "Vänligen fyll i modellnamn och leverantörer", + "addAtLeastOneProvider": "Lägg till minst en leverantör", + "comboDefaultsTitle": "Combo standard", + "globalComboConfig": "Global kombinationskonfiguration", + "defaultStrategy": "Standardstrategi", + "defaultStrategyDesc": "Tillämpas på nya kombinationer utan explicit strategi", + "comboStrategyAria": "Kombinationsstrategi", + "priority": "Prioritet", + "weighted": "Viktad", + "maxRetriesLabel": "Max försöker igen", + "retryDelayLabel": "Försök igen fördröjning (ms)", + "timeoutLabel": "Timeout (ms)", + "healthCheck": "Hälsokontroll", + "healthCheckDesc": "Kontrollera leverantörens tillgänglighet i förväg", + "trackMetrics": "Spåra mätvärden", + "trackMetricsDesc": "Spela in mätvärden per kombinationsbegäran", + "providerOverrides": "Provider åsidosätter", + "providerOverridesDesc": "Åsidosätt timeout och försök igen per leverantör. Leverantörsinställningar åsidosätter globala standardinställningar.", + "providerMaxRetriesAria": "{provider} max försök", + "providerTimeoutAria": "{provider} timeout ms", + "removeProviderOverrideAria": "Ta bort åsidosättningen {provider}", + "newProviderNamePlaceholder": "t.ex. google, öppna...", + "newProviderNameAria": "Nytt leverantörsnamn", + "retries": "försök igen", + "ms": "ms", + "saveComboDefaults": "Spara Combo Defaults", + "maxNestingDepth": "Max häckningsdjup", + "concurrencyPerModel": "Samtidighet / Modell", + "queueTimeout": "Timeout för kö (ms)", + "providerProfiles": "Leverantörsprofiler", + "providerProfilesDesc": "Separata inställningar för motståndskraft för OAuth (sessionsbaserad) och API Key (mätad) leverantörer. OAuth-leverantörer har strängare trösklar på grund av lägre prisgränser.", + "oauthProviders": "OAuth-leverantörer", + "apiKeyProviders": "API-nyckelleverantörer", + "transientCooldown": "Övergående nedkylning", + "rateLimitCooldown": "Rate Limit Cooldown", + "maxBackoffLevel": "Max Backoff Level", + "cbThreshold": "CB-tröskel", + "cbResetTime": "CB-återställningstid", + "rateLimiting": "Prisbegränsande", + "rateLimitingDesc": "API-nyckelleverantörer är automatiskt hastighetsbegränsade med säkra standardinställningar. Gränser lärs från svarsrubriker och anpassas över tid.", + "defaultSafetyNet": "Standardsäkerhetsnät", + "rpm": "RPM", + "minGap": "Min Gap", + "maxConcurrent": "Max Samtidigt", + "activeLimiters": "Aktiva begränsningar", + "noActiveLimiters": "Inga aktiva hastighetsbegränsare än.", + "reservoir": "Reservoar", + "running": "Löpning", + "queued": "I kö", + "circuitBreakers": "Strömbrytare", + "breakerStateClosed": "Stängt", + "breakerStateOpen": "Öppna", + "breakerStateHalfOpen": "Halvöppet", + "tripped": "{count} utlöstes", + "healthy": "{count} frisk", + "resetAll": "Återställ alla", + "noCircuitBreakers": "Inga strömbrytare aktiva än. De skapas automatiskt när förfrågningar flödar genom den kombinerade pipelinen.", + "failures": "{count} fel(er)", + "policiesLocked": "Policyer och låsta identifierare", + "allOperational": "Alla system är i drift — inga låsningar eller utlösta brytare", + "loadingPolicies": "Läser in policyer...", + "lockedIdentifiers": "Låsta identifierare", + "unlockedIdentifier": "Upplåst: {identifier}", + "sinceDate": "sedan {date}", + "forceUnlock": "Tvinga upplåsning", + "unlocking": "Låser upp...", + "failedUnlock": "Det gick inte att låsa upp", + "failedLoadWithStatus": "Det gick inte att ladda: {status}", + "failedLoadResilience": "Det gick inte att läsa in resiliensstatus", + "saveFailed": "Det gick inte att spara", + "resetFailed": "Återställningen misslyckades", + "loadingResilience": "Laddar resiliensstatus...", + "retry": "Försök igen", + "systemStorage": "System & lagring", + "allDataLocal": "All data lagrad lokalt på din maskin", + "databasePath": "Databasväg", + "exportDatabase": "Exportera databas", + "exportAll": "Exportera alla (.tar.gz)", + "importDatabase": "Importera databas", + "confirmDbImport": "Bekräfta databasimport", + "confirmDbImportDesc": "Detta kommer att ersätta all aktuell data med innehållet från {file}. En säkerhetskopia skapas automatiskt före importen.", + "yesImport": "Ja, importera", + "lastBackup": "Senaste säkerhetskopieringen", + "noBackupYet": "Ingen backup ännu", + "backupNow": "Säkerhetskopiera nu", + "backupRestore": "Säkerhetskopiera och återställa", + "viewBackups": "Visa säkerhetskopior", + "hide": "Göm", + "backupRetentionDesc": "Databasögonblicksbilder skapas automatiskt före återställning och var 15:e minut när data ändras. Retention: 24 timmar per timme + 30 dagliga backuper med smart rotation.", + "loadingBackups": "Laddar säkerhetskopior...", + "noBackupsYet": "Inga säkerhetskopior tillgängliga ännu. Säkerhetskopieringar skapas automatiskt när data ändras.", + "backupsAvailable": "{count} säkerhetskopior tillgängliga", + "refresh": "Uppdatera", + "confirm": "Bekräfta?", + "yes": "Ja", + "no": "Nej", + "restore": "Återställ", + "invalidFileType": "Ogiltig filtyp. Endast .sqlite-filer accepteras.", + "exportFailed": "Exporten misslyckades", + "exportFailedWithError": "Export misslyckades: {error}", + "fullExportFailedWithError": "Fullständig export misslyckades: {error}", + "backupCreated": "Säkerhetskopiering skapad: {file}", + "restoreSuccess": "Återställd! {connections} anslutningar, {nodes} noder, {combos} kombinationer, {apiKeys} API-nycklar.", + "importSuccess": "Databas importerad! {connections} anslutningar, {nodes} noder, {combos} kombinationer, {apiKeys} API-nycklar.", + "justNow": "just nu", + "minutesAgo": "{count}m sedan", + "hoursAgo": "{count}h sedan", + "daysAgo": "{count}d sedan", + "backupReasonManual": "handbok", + "backupReasonPreRestore": "föråterställning", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Inga ändringar sedan senaste säkerhetskopiering", + "backupFailed": "Säkerhetskopieringen misslyckades", + "restoreFailed": "Återställningen misslyckades", + "importFailed": "Importen misslyckades", + "errorDuringRestore": "Ett fel uppstod under återställning", + "errorDuringImport": "Ett fel uppstod under importen", + "modelPricing": "Modellprissättning", + "modelPricingDesc": "Konfigurera kostnadssatser per modell • Alla priser i $/1M tokens", + "providers": "Leverantörer", + "registry": "Registret", + "priced": "Prissatt", + "searchProvidersModels": "Sök efter leverantörer eller modeller...", + "showAll": "Visa alla", + "noProvidersMatch": "Inga leverantörer matchar din sökning.", + "howPricingWorks": "Hur prissättning fungerar", + "cacheWrite": "Cache Skriv", + "unsaved": "osparade", + "resetDefaults": "Återställ standardvärden", + "saveProvider": "Spara leverantör", + "saving": "Sparar...", + "model": "Modell", + "models": "modeller", + "moreProviders": "{count} fler leverantörer", + "withPricing": "med konfigurerad prissättning", + "policiesCircuitBreakers": "Policyer och strömbrytare", + "activeIssuesDetected": "Aktiva problem upptäcktes", + "off": "Av", + "resetPricingConfirm": "Vill du återställa alla priser för {provider} till standardvärdena?", + "pricingDescInput": "Indata: tokens skickas till modellen", + "pricingDescOutput": "Utdata: tokens genererade", + "pricingDescCached": "Cachad: återanvänd indata (~50 % av inmatningshastighet)", + "pricingDescReasoning": "Resonemang: tänkande tokens (faller tillbaka till Output)", + "pricingDescCacheWrite": "Cache Write: skapa cache-poster (faller tillbaka till Input)", + "pricingDescFormula": "Kostnad = (ingång × input_rate) + (output × output_rate) + (cachad × cached_rate) per miljon tokens.", + "pricingSettingsTitle": "Prisinställningar", + "totalModels": "Totalt antal modeller", + "active": "Aktiv", + "costCalculation": "Kostnadsberäkning", + "costCalculationDesc": "Kostnaderna beräknas baserat på tokenanvändning och prissättning som konfigurerats för varje modell.", + "pricingFormat": "Prisformat", + "pricingFormatDesc": "Alla priser är i $/1M tokens (dollar per miljon tokens).", + "tokenTypes": "Tokentyper", + "inputTokenDesc": "Standard prompt tokens", + "outputTokenDesc": "Kompletterande/svars-tokens", + "cachedTokenDesc": "Cachade indatatokens (vanligtvis 50 % av inmatningshastigheten)", + "reasoningTokenDesc": "Särskilda resonemang/tänketokens (återgång till produktionshastighet)", + "cacheCreationTokenDesc": "Tokens som används för att skapa cacheposter (återgång till inmatningshastighet)", + "customPricingNote": "Du kan åsidosätta standardpriser för specifika modeller. Anpassade åsidosättningar har prioritet framför automatiskt identifierade priser.", + "editPricing": "Redigera prissättning", + "viewFullDetails": "Visa fullständiga detaljer" + }, + "translator": { + "title": "Översättare", + "metaTitle": "Översättare Lekplats | OmniRoute", + "metaDescription": "Felsök, testa och visualisera API-formatöversättningar mellan leverantörer", + "playgroundTitle": "Översättare Lekplats", + "playground": "Lekplats", + "realtime": "Översättningsaktivitet i realtid", + "chatTester": "Chattestare", + "testBench": "Testbänk", + "liveMonitor": "Live Monitor", + "modeDescriptionPlayground": "Klistra in valfri API-begäran och se hur OmniRoute översätter den mellan leverantörsformat (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Skicka riktiga chattförfrågningar via OmniRoute och inspektera hela tur och retur: indata, översatt begäran, leverantörssvar och översatt utdata.", + "modeDescriptionTestBench": "Kör fördefinierade scenarier och jämför kompatibilitet mellan leverantörer och modeller.", + "modeDescriptionLiveMonitor": "Se översättningshändelser i realtid när förfrågningar flödar genom OmniRoute.", + "modeDescriptionFallback": "Felsök, testa och visualisera hur OmniRoute översätter API-förfrågningar mellan leverantörer.", + "recentTranslations": "Nya översättningar", + "noTranslations": "Inga översättningar ännu", + "source": "Källa", + "target": "Mål", + "time": "Tid", + "model": "Modell", + "status": "Status", + "latency": "Latens", + "totalTranslations": "Totala översättningar", + "successful": "Framgångsrik", + "errors": "Fel", + "avgLatency": "Genomsnittlig latens", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live — Automatisk uppdatering", + "paused": "Pausad", + "eventsAppearHint": "Översättningshändelser visas här när förfrågningar flödar genom OmniRoute. Använd någon av dessa metoder för att generera händelser:", + "chatTesterTab": "Fliken Chattestare", + "testBenchTab": "Fliken Testbänk", + "externalApiCalls": "Externa API-anrop", + "ideCliIntegrations": "IDE/CLI-integrationer", + "inMemoryNote": "Obs: Händelser lagras i minnet och återställs när servern startar om.", + "ok": "OK", + "errorShort": "ERR", + "formatConverter": "Formatomvandlare", + "formatConverterDescription": "Klistra in eller skriv en JSON-begäran. Översättaren kommer att automatiskt upptäcka källformatet och konvertera det till målformatet. Använd detta för att felsöka hur OmniRoute översätter förfrågningar mellan format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Ingång", + "output": "Utgång", + "auto": "Auto", + "swapFormats": "Byt format", + "translateAction": "Översätt", + "clear": "Rensa", + "inputPlaceholder": "Klistra in en förfrågningstext här eller välj en mall nedan...", + "exampleTemplates": "Exempel mallar", + "exampleTemplatesHint": "— Klicka för att ladda", + "templateLoadHint": "Mallen laddar begäran i formatet {format}. Ändra källformat för att ladda i ett annat format.", + "compatibilityTester": "Kompatibilitetstestare", + "compatibilityReport": "Kompatibilitetsrapport", + "testBenchDescription": "Kör fördefinierade scenarier (Simple Chat, Tool Calling, etc.) för att verifiera översättning och leverantörskompatibilitet. Välj ett källformat och målleverantör och kör sedan alla tester för att se en kompatibilitetsprocent. Använd det här för att ta reda på vilka funktioner som fungerar mellan olika leverantörer.", + "targetProvider": "Målleverantör", + "runAllTests": "Kör alla tester", + "runTest": "Kör test", + "reRun": "Kör igen", + "running": "Kör...", + "passed": "godkänd", + "failed": "misslyckades", + "passedIconLabel": "✅ Godkänd", + "chunks": "bitar", + "scenarioSimpleChat": "Enkel chatt", + "scenarioToolCalling": "Verktygsanrop", + "scenarioMultiTurn": "Flervarv", + "scenarioThinking": "Tänker", + "scenarioSystemPrompt": "Systemprompt", + "scenarioStreaming": "Streaming", + "templateNames": { + "simple-chat": "Enkel chatt", + "tool-calling": "Verktygsanrop", + "multi-turn": "Flervarv", + "thinking": "Tänker", + "system-prompt": "Systemprompt", + "streaming": "Streaming" + }, + "templateDescriptions": { + "simple-chat": "Grundläggande textmeddelande", + "tool-calling": "Funktion/verktygsanrop", + "multi-turn": "Samtal med historien", + "thinking": "Utökat tänkande/resonemang", + "system-prompt": "Komplexa systeminstruktioner", + "streaming": "SSE-strömningsförfrågan" + }, + "templatePayloads": { + "simpleChat": { + "system": "Du är en hjälpsam assistent.", + "userGreeting": "Hej! Hur mår du idag?" + }, + "toolCalling": { + "userWeather": "Hur är vädret i São Paulo?", + "toolDescription": "Få aktuellt väder för en plats", + "cityNameDescription": "Stadsnamn" + }, + "multiTurn": { + "system": "Du är en kodningsassistent.", + "userInitial": "Skriv en funktion för att sortera en array i Python.", + "assistantExample": "Här är en enkel sorteringsfunktion:\n\n``` python\ndef sort_array(arr):\n return sorterad(arr)\n```", + "userFollowUp": "Sortera det nu i fallande ordning." + }, + "thinking": { + "question": "Vad är summan av de första 100 primtalen?" + }, + "systemPrompt": { + "systemInstruction": "Du är en senior mjukvaruingenjör specialiserad på distribuerade system. Svara på frågor kortfattat med hjälp av branschens bästa praxis. Ge alltid kodexempel när det är relevant. Formatera dina svar med markdown.", + "question": "Hur implementerar jag ett strömbrytarmönster?" + }, + "streaming": { + "prompt": "Berätta en kort historia om en robot som lär sig måla." + } + }, + "openaiCompatibleLabel": "OpenAI-kompatibel", + "anthropicCompatibleLabel": "Antropisk kompatibel", + "noTemplateForFormat": "Ingen mall för detta format", + "translationFailed": "Översättning misslyckades: {error}", + "pipelineDebugger": "Pipeline Debugger", + "translationPipeline": "Översättning pipeline", + "pipelineVisualization": "Visualisering av pipeline", + "pipelineVisualizationHint": "Skicka ett meddelande för att se hur din förfrågan flyter genom upptäckt → översättning → leverantörssamtal.", + "chatTesterDescription": "Skicka meddelanden som ett specifikt klientformat och inspektera varje steg i översättningspipelinen.", + "chatTesterFlow": "Klientförfrågan → Formatdetektion → OpenAI Intermediate → Leverantörsformat → Svar", + "clickStepToInspect": "Klicka på valfritt steg för att inspektera data i det stadiet.", + "clientFormat": "Klientformat", + "provider": "Leverantör", + "modelPlaceholder": "Välj eller skriv ett modellnamn...", + "sendMessageToSeePipeline": "Skicka ett meddelande för att se översättningspipeline", + "chatMessageHintPrefix": "Ditt meddelande kommer att formateras som en", + "chatMessageHintSuffix": "begäran, översatt genom pipelinen och skickad till den valda leverantören.", + "youWithFormat": "Du ({format})", + "assistant": "Assistent", + "typeMessage": "Skriv ett meddelande...", + "send": "Skicka", + "clientRequest": "Kundförfrågan", + "clientRequestDescription": "Begäran som din klient skulle skicka den", + "formatDetected": "Format upptäckt", + "formatDetectedDescription": "OmniRoute upptäcker automatiskt API-formatet från förfrågningsstrukturen", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Alla format normaliseras först till OpenAI-format (den universella bryggan)", + "providerFormat": "Leverantörsformat", + "providerFormatDescription": "OpenAI-formatet översätts till leverantörens ursprungliga format", + "providerResponse": "Leverantörens svar", + "providerResponseRawDescription": "Det råa svaret från leverantörens API", + "providerResponseSseDescription": "Den råa SSE-strömmen från leverantörens API", + "unexpectedError": "Ett oväntat fel inträffade", + "error": "Fel", + "errorMessage": "Fel: {message}", + "requestFailed": "Begäran misslyckades", + "noTextExtracted": "(Ingen text extraherad)", + "liveMonitorDescriptionPrefix": "Visar översättningshändelser när API-anrop flyter genom OmniRoute. Händelser kommer från minnesbufferten (återställs vid omstart). Använd", + "liveMonitorDescriptionSuffix": ", eller externa API-anrop för att generera händelser." + }, + "usage": { + "title": "Användning", + "loggerTab": "Logger", + "proxyTab": "Proxy", + "budgetManagement": "Budgethantering", + "budgetSaved": "Budgetgränser sparade", + "budgetSaveFailed": "Det gick inte att spara budget", + "loadingBudgetData": "Laddar budgetdata...", + "noApiKeysTitle": "Inga API-nycklar", + "noApiKeysDescription": "Lägg först till API-nycklar för att ställa in budgetgränser.", + "apiKey": "API-nyckel", + "todaysSpend": "Dagens utgifter", + "thisMonth": "Denna månad", + "setLimits": "Ställ in gränser", + "dailyLimitUsd": "Daglig gräns (USD)", + "monthlyLimitUsd": "Månadsgräns (USD)", + "warningThresholdPercent": "Varningströskel (%)", + "dailyLimitPlaceholder": "t.ex. 5.00", + "monthlyLimitPlaceholder": "t.ex. 50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Spara gränser", + "budgetOk": "Budget OK — {remaining} kvar", + "budgetExceeded": "Budget överskriden — förfrågningar kan blockeras", + "totalRequests": "Totalt antal förfrågningar", + "noDataYet": "Inga uppgifter ännu", + "latency": "Latens", + "latencyP50": "p50", + "latencyP95": "s 95", + "latencyP99": "s 99", + "promptCache": "Fråga Cache", + "systemHealth": "Systemhälsa", + "entries": "Inlägg", + "activeCount": "{count} aktiv", + "openCircuitBreakersDetected": "Öppen strömbrytare upptäckt", + "hitRate": "Träfffrekvens", + "hitsMisses": "Träffar/missar", + "circuitBreakers": "Strömbrytare", + "lockedIPs": "Låsta IP-adresser", + "lockoutsAutoRefreshHint": "Lås för hastighetsgräns per modell • Automatisk uppdatering 10s", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} kvar", + "howItWorks": "Hur det fungerar", + "howItWorksSubtitle": "Lär dig hur utvärderingar validerar dina LLM-svar", + "define": "Definiera", + "defineStepDescription": "Skapa testfall med indatameddelanden och förväntade utdatakriterier med hjälp av strategier som innehåller, regex eller exakt matchning.", + "run": "Kör", + "runStepDescription": "Utför testfall mot dina LLM-slutpunkter genom OmniRoute. Varje ärende skickas som en riktig API-förfrågan.", + "evaluate": "Utvärdera", + "evaluateStepDescription": "Svar jämförs mot förväntade kriterier. Se godkänt/underkänt för varje fall med latensstatistik och detaljerad feedback.", + "evalSuites": "Utvärderingssviter", + "evalSuitesHint": "Klicka på en svit för att se testfall och kör sedan för att utvärdera dina LLM-slutpunkter", + "evalsLoading": "Laddar eval-sviter...", + "noEvalSuitesFound": "Inga Eval Suites hittades", + "noEvalSuitesDescription": "Eval-sviter kan definieras via API:t eller i kod. De testar modellutdata mot förväntade resultat med hjälp av strategier som innehåller, regex, exakt matchning och anpassade funktioner.", + "columnCase": "Fall", + "columnStatus": "Status", + "columnLatency": "Latens", + "columnDetails": "Detaljer", + "columnModel": "Modell", + "columnStrategy": "Strategi", + "columnExpected": "Förväntat", + "statsSuites": "Sviter", + "statsTestCases": "Testfall", + "statsModels": "Modeller", + "statsCoverage": "Täckning", + "statsStrategiesCount": "{count} strategier", + "evaluationStrategies": "Utvärderingsstrategier", + "modelsUnderTest": "Modeller under test", + "searchSuitesPlaceholder": "Sök efter sviter...", + "passSuffix": "passera", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Kör Eval", + "runningProgress": "Kör {current}/{total}...", + "passRate": "genomslagsfrekvens", + "summaryBreakdown": "{passed} godkänd · {failed} misslyckades · {total} totalt", + "passedIconLabel": "✅ Godkänd", + "failedIconLabel": "❌ Misslyckades", + "detailsContains": "Innehåller: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "Förväntat: \"{expected}\"", + "noResultsYet": "Inga resultat ännu", + "testCasesCount": "Testfall ({count})", + "noTestCasesDefined": "Inga testfall definierade", + "runEvalHint": "Klicka på \"Kör Eval\" för att köra alla ärenden mot din LLM-slutpunkt. Varje test skickar en riktig förfrågan via OmniRoute.", + "notifyNoTestCases": "Inga testfall har definierats för denna svit", + "notifyAllCasesPassed": "Alla {total} fall godkändes ✅", + "notifySomeCasesFailed": "{passed}/{total} godkänd, {failed} misslyckades", + "notifyEvalRunFailed": "Evalkörningen misslyckades", + "notifyEvalTitle": "Eval: {name}", + "modelEvals": "Modellutvärderingar", + "evalsHeroDescription": "Testa och validera dina LLM-slutpunkter genom att köra fördefinierade utvärderingssviter. Varje svit innehåller testfall som skickar riktiga uppmaningar genom OmniRoute och jämför svar mot förväntade kriterier – vilket hjälper dig att upptäcka regressioner, jämföra modeller och säkerställa svarskvalitet mellan leverantörer.", + "qualityValidation": "Kvalitetsvalidering", + "modelComparison": "Modelljämförelse", + "regressionDetection": "Regressionsdetektering", + "latencyBenchmarks": "Latency Benchmarks", + "modelLockouts": "Modell Lockouter", + "noLockouts": "Inga modeller är för närvarande låsta", + "activeSessions": "Aktiva sessioner", + "noSessions": "Inga aktiva sessioner", + "sessionsHint": "Sessioner visas när förfrågningar flödar genom proxyn", + "sessionsTrackedHint": "Spåras via begäran om fingeravtryck • Automatisk uppdatering 5s", + "session": "Session", + "age": "Ålder", + "requests": "Förfrågningar", + "connection": "Anslutning", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Leverantörsgränser", + "noProviders": "Inga leverantörer anslutna", + "connectProvidersForQuota": "Anslut till leverantörer med OAuth för att spåra dina API-kvotgränser och användning.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(filtrerad från {count})", + "autoRefresh": "Automatisk uppdatering", + "refreshAll": "Uppdatera alla", + "loadingQuotas": "Laddar...", + "account": "konto", + "modelQuotas": "Modellkvoter", + "lastUsed": "Senast använd", + "actions": "Åtgärder", + "refreshQuota": "Uppdatera kvoten", + "today": "Idag", + "tomorrow": "Imorgon", + "dayTimeFormat": "{day}, {time}", + "inDuration": "i {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Rå plan: {plan}", + "noPlanFromProvider": "Ingen plan från leverantören", + "noQuotaData": "Inga kvotdata", + "noQuotaDataAvailable": "Inga kvotdata tillgängliga", + "noAccountsForTierFilter": "Inga konton hittades för nivåfilter", + "tierAll": "Alla", + "tierEnterprise": "Företag", + "tierTeam": "Team", + "tierBusiness": "Business", + "tierUltra": "Ultra", + "tierPro": "Pro", + "tierPlus": "Plus", + "tierFree": "Gratis", + "tierUnknown": "Okänd" + }, + "modals": { + "waitingAuth": "Väntar på auktorisering", + "verificationUrl": "Verifierings-URL", + "yourCode": "Din kod", + "remoteAccess": "Fjärråtkomst:", + "connectedSuccess": "Ansluten framgångsrikt!", + "connectionFailed": "Anslutningen misslyckades", + "chooseAuthMethod": "Välj din autentiseringsmetod:", + "awsBuilderId": "AWS Builder ID", + "awsIamIdentity": "AWS IAM Identity Center", + "googleAccount": "Google-konto", + "githubAccount": "GitHub-konto", + "importToken": "Importera token", + "pasteToken": "Klistra in uppdateringstoken från Kiro IDE.", + "awsRegion": "AWS-regionen", + "autoDetecting": "Identifierar tokens automatiskt...", + "readingFromCache": "Läser från AWS SSO-cache", + "readingFromCursor": "Läser från Cursor IDE-databas", + "initializing": "Initierar...", + "pricingConfig": "Priskonfiguration", + "loadingPricing": "Laddar prisinformation...", + "pricingRatesFormat": "Priser Format", + "noPricingData": "Inga prisuppgifter tillgängliga", + "noModelsFound": "Inga modeller hittades" + }, + "loggers": { + "allProviders": "Alla leverantörer", + "allModels": "Alla modeller", + "allAccounts": "Alla konton", + "allApiKeys": "Alla API-nycklar", + "allTypes": "Alla typer", + "allLevels": "Alla nivåer", + "modelAZ": "Modell A-Z", + "modelZA": "Modell Z-A", + "loadingLogs": "Laddar loggar...", + "loadingProxyLogs": "Laddar proxyloggar...", + "noLogEntries": "Inga loggposter hittades", + "noPayloadData": "Ingen nyttolastdata tillgänglig för denna loggpost.", + "proxyEvent": "Proxyhändelse", + "proxy": "Proxy", + "level": "Nivå", + "directNative": "Direkt (infödd)", + "combo": "Combo", + "inputTokens": "jag:", + "outputTokens": "O:" + }, + "stats": { + "usageOverview": "Användningsöversikt", + "outputTokens": "Output Tokens", + "totalCost": "Total kostnad", + "usageByModel": "Användning efter modell", + "usageByAccount": "Användning per konto", + "failedToLoad": "Det gick inte att läsa in användningsstatistik.", + "tokenHealth": "Token Health", + "totalOAuth": "Totalt OAuth", + "healthy": "Frisk", + "warning": "Varning", + "errored": "Fel", + "lastCheck": "Sista kontrollen", + "noData": "Inga data", + "share": "Dela", + "unableToLoad": "Det gick inte att läsa in systemstatistik", + "product": "Produkt", + "resources": "Resurser", + "company": "Företag" + }, + "auth": { + "welcome": "Välkommen", + "signIn": "Logga in", + "enterPassword": "Ange ditt lösenord för att fortsätta", + "password": "Lösenord", + "unifiedProxy": "Unified AI API Proxy", + "unifiedAiApiProxy": "Unified AI API Proxy", + "unifiedAiApiProxyDesc": "Dirigera förfrågningar till flera AI-leverantörer via en enda slutpunkt. Lastbalansering, failover och användningsspårning inbyggd.", + "passwordNotEnabled": "Lösenordsskydd är inte aktiverat", + "loading": "Laddar...", + "invalidPassword": "Ogiltigt lösenord", + "errorOccurredRetry": "Ett fel uppstod. Försök igen.", + "configureInstance": "Låt oss konfigurera din OmniRoute-instans", + "runOnboardingWizard": "Kör introduktionsguiden för att ställa in ditt lösenord och ansluta din första AI-leverantör.", + "startOnboarding": "Börja onboarding", + "secureYourInstance": "Säkra din instans", + "setPasswordDescription": "Ange ett lösenord för att skydda din instrumentpanel och skydda dina API-slutpunkter från obehörig åtkomst.", + "configurePassword": "Konfigurera lösenord", + "continue": "Fortsätt", + "windowWillClose": "Det här fönstret stängs automatiskt...", + "closeTabNow": "Du kan stänga den här fliken nu.", + "copyUrlManual": "Kopiera URL:en från adressfältet och klistra in den i programmet.", + "accessDeniedDescription": "Du har inte behörighet att komma åt den här resursen. Kontrollera din API-nyckel eller kontakta administratören.", + "goToDashboard": "Gå till Dashboard", + "featureMultiProviderTitle": "Flera leverantörer", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google och mer", + "featureLoadBalancingTitle": "Lastbalansering", + "featureLoadBalancingDesc": "Fördela förfrågningar intelligent", + "featureUsageTrackingTitle": "Användningsspårning", + "featureUsageTrackingDesc": "Övervaka kostnader och tokens", + "resetPassword": "Återställ lösenord", + "resetDescription": "Välj en metod för att återställa åtkomst till din instrumentpanel", + "stopServer": "Stoppa OmniRoute-servern", + "processing": "Bearbetar...", + "pleaseWait": "Vänta medan vi slutför auktoriseringen.", + "authSuccess": "Auktoriseringen lyckades!", + "copyUrl": "Kopiera denna URL", + "accessDenied": "Åtkomst nekad", + "methodCliTitle": "Metod 1: CLI-återställning", + "methodCliDescription": "Kör följande kommando på servern där OmniRoute körs:", + "methodCliHint": "Detta kommer att uppmana dig att ange ett nytt lösenord. Servern måste stoppas först.", + "methodManualTitle": "Metod 2: Manuell återställning", + "methodManualDescription": "Ta bort lösenordet från databasen och ställ in ett nytt vid start:", + "setPasswordInYour": "Ange ett nytt lösenord i din", + "fileLabelSuffix": "fil:", + "newPasswordPlaceholder": "ditt_nya_lösenord", + "deleteSettingsFile": "Ta bort", + "orRemovePasswordHashField": "eller ta bort fältet passwordHash", + "restartServerWithNewPassword": "Starta om servern - den kommer att använda det nya lösenordet", + "backToLogin": "Tillbaka till inloggning", + "forgotPassword": "Glömt lösenordet?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Navigera till hem", + "toggleMenu": "Växla meny", + "featuresLink": "Funktioner", + "docsLink": "Dokument", + "github": "GitHub", + "versionLive": "v1.0 är nu live", + "oneEndpoint": "En slutpunkt för", + "allProviders": "Alla AI-leverantörer", + "heroDescription": "AI-slutpunktsproxy med webbinstrumentpanel - En JavaScript-port för CLIProxyAPI. Fungerar sömlöst med Claude Code, OpenAI Codex, Cline, RooCode och andra CLI-verktyg.", + "getStarted": "Kom igång", + "viewOnGithub": "Visa på GitHub", + "powerfulFeatures": "Kraftfulla funktioner", + "featuresSubtitle": "Allt du behöver för att hantera din AI-infrastruktur på ett ställe, byggt för skala.", + "featureUnifiedEndpointTitle": "Unified Endpoint", + "featureUnifiedEndpointDesc": "Få tillgång till alla leverantörer via en enda standard API-URL.", + "featureEasySetupTitle": "Enkel installation", + "featureEasySetupDesc": "Kom igång på några minuter med npx-kommandot.", + "featureModelFallbackTitle": "Modell Fallback", + "featureModelFallbackDesc": "Byt leverantör automatiskt vid fel eller hög latens.", + "featureUsageTrackingTitle": "Användningsspårning", + "featureUsageTrackingDesc": "Detaljerad analys och kostnadsövervakning över alla modeller.", + "featureOAuthApiKeysTitle": "OAuth- och API-nycklar", + "featureOAuthApiKeysDesc": "Hantera autentiseringsuppgifter på ett säkert sätt i ett valv.", + "featureCloudSyncTitle": "Molnsynkronisering", + "featureCloudSyncDesc": "Synkronisera dina konfigurationer mellan enheter direkt.", + "featureCliSupportTitle": "CLI Support", + "featureCliSupportDesc": "Fungerar med Claude Code, Codex, Cline, Cursor och mer.", + "featureDashboardTitle": "Instrumentpanel", + "featureDashboardDesc": "Visuell instrumentpanel för trafikanalys i realtid.", + "howItWorks": "Hur OmniRoute fungerar", + "howItWorksDescription": "Data flödar sömlöst från din applikation genom vårt intelligenta routinglager till den bästa leverantören för jobbet.", + "howItWorksStep1Title": "1. CLI & SDK:er", + "howItWorksStep1Description": "Dina förfrågningar utgår från dina favoritverktyg eller vår enhetliga SDK. Ändra bara webbadressen.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Vår motor analyserar uppmaningen, kontrollerar leverantörens hälsa och rutter för lägsta latens eller kostnad.", + "howItWorksStep3Title": "3. AI-leverantörer", + "howItWorksStep3Description": "Begäran uppfylls av OpenAI, Anthropic, Gemini eller andra omedelbart.", + "getStartedIn30Seconds": "Kom igång på 30 sekunder", + "getStartedDescription": "Installera OmniRoute, konfigurera dina leverantörer via webbinstrumentpanelen och börja dirigera AI-förfrågningar.", + "installOmniRoute": "Installera OmniRoute", + "installStepDescription": "Kör npx-kommandot för att starta servern direkt", + "openDashboard": "Öppna Dashboard", + "openDashboardStepDescription": "Konfigurera leverantörer och API-nycklar via webbgränssnitt", + "routeRequests": "Ruttförfrågningar", + "routeRequestsStepDescription": "Rikta dina CLI-verktyg till {endpoint}", + "terminal": "terminal", + "copy": "Kopiera", + "copied": "✓ Kopierat", + "startingOmniRoute": "Startar OmniRoute...", + "serverRunningOnLabel": "Server körs på", + "dashboardLabel": "Instrumentpanel", + "readyToRoute": "Redo att färdas! ✓", + "configureProvidersNote": "📝 Konfigurera leverantörer i instrumentpanelen eller använd miljövariabler", + "dataLocation": "Dataplats:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Produkt", + "dashboardLink": "Instrumentpanel", + "changelog": "Ändringslogg", + "resources": "Resurser", + "documentation": "Dokumentation", + "npm": "NPM", + "legal": "Lagligt", + "mitLicense": "MIT-licens", + "footerTagline": "Den enhetliga slutpunkten för AI-generering. Anslut, dirigera och hantera dina AI-leverantörer med lätthet.", + "copyright": "© {year} OmniRoute. Alla rättigheter reserverade.", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Markör", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Antropisk", + "flowProviderGemini": "Tvillingarna", + "flowProviderGithubCopilot": "GitHub Copilot", + "interactiveDiagram": "Interaktivt diagram synligt på skrivbordet", + "ctaTitle": "Är du redo att förenkla din AI-infrastruktur?", + "ctaDescription": "Gå med utvecklare som effektiviserar sina AI-integrationer med OmniRoute. Öppen källkod och gratis att starta.", + "startFree": "Börja gratis", + "readDocumentation": "Läs dokumentation" + }, + "docs": { + "title": "Dokumentation", + "quickStart": "Snabbstart", + "features": "Funktioner", + "supportedProviders": "Leverantörer som stöds", + "supportedProvidersToc": "Leverantörer", + "commonUseCases": "Vanliga användningsfall", + "clientCompatibility": "Klientkompatibilitet", + "apiReference": "API-referens", + "method": "Metod", + "path": "Väg", + "notes": "Anteckningar", + "modelPrefixes": "Modellprefix", + "prefix": "Prefix", + "troubleshooting": "Felsökning", + "supportsChat": "Stöder både chatt- och svarsslutpunkter.", + "oauthAutoRefresh": "OAuth-anslutning med automatisk tokenuppdatering.", + "fullStreaming": "Fullständigt streamingstöd för alla modeller.", + "docsLabel": "Dokument", + "docsHeroDescription": "AI-gateway för LLM:er med flera leverantörer. En slutpunkt för OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor och 20+ leverantörer till.", + "openDashboard": "Öppna Dashboard", + "endpointPage": "Slutpunktssida", + "github": "GitHub", + "reportIssue": "Rapportera problem", + "onThisPage": "På den här sidan", + "documentationVersion": "Dokumentation - v{version}", + "quickStartStep1Title": "1. Installera och kör", + "quickStartStep1Prefix": "Kör", + "quickStartStep1Middle": "eller klona från GitHub och kör", + "quickStartStep2Title": "2. Skapa API-nyckel", + "quickStartStep2Text": "Gå till Endpoint -> Registrerade nycklar. Generera en nyckel per miljö.", + "quickStartStep3Title": "3. Anslut leverantörer", + "quickStartStep3Text": "Lägg till leverantörskonton via OAuth-inloggning, API-nyckel eller automatisk anslutning på fri nivå.", + "quickStartStep4Title": "4. Ställ in klientbasens URL", + "quickStartStep4Prefix": "Peka din IDE- eller API-klient till", + "quickStartStep4Suffix": "Använd till exempel leverantörsprefix", + "featureRoutingTitle": "Routing för flera leverantörer", + "featureRoutingText": "Dirigera förfrågningar till 30+ AI-leverantörer via en enda OpenAI-kompatibel slutpunkt. Stöder chatt, svar, ljud och bild-API:er.", + "featureCombosTitle": "Kombinationer och balansering", + "featureCombosText": "Skapa modellkombinationer med reservkedjor och balanseringsstrategier: round-robin, prioritet, slumpmässigt, minst använda och kostnadsoptimerat.", + "featureUsageTitle": "Användnings- och kostnadsspårning", + "featureUsageText": "Tokenräkning i realtid, kostnadsberäkning per leverantör/modell och detaljerad användningsuppdelning efter API-nyckel och konto.", + "featureAnalyticsTitle": "Analysinstrumentpanel", + "featureAnalyticsText": "Visuell analys med diagram för förfrågningar, tokens, fel, latens, kostnader och modellpopularitet över tid.", + "featureHealthTitle": "Hälsoövervakning", + "featureHealthText": "Live hälsokontroller, leverantörsstatus, strömbrytartillstånd och automatisk hastighetsgränsdetektering med exponentiell backoff.", + "featureCliTitle": "CLI-verktyg", + "featureCliText": "Hantera IDE-konfigurationer, exportera/importera säkerhetskopior, upptäck codex-profiler och konfigurera inställningar från instrumentpanelen.", + "featureSecurityTitle": "Säkerhet och policyer", + "featureSecurityText": "API-nyckelautentisering, IP-filtrering, promptinjektionsskydd, domänpolicyer, sessionshantering och granskningsloggning.", + "featureCloudSyncTitle": "Molnsynkronisering", + "featureCloudSyncText": "Synkronisera din konfiguration med Cloudflare Workers för fjärråtkomst med krypterade autentiseringsuppgifter och automatisk failover.", + "providersAcrossConnectionTypes": "{count} leverantörer över tre anslutningstyper.", + "manageProviders": "Hantera leverantörer", + "providersCount": "{count} leverantörer", + "providerTypeFree": "Gratis nivå", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "API-nyckel", + "useCaseSingleEndpointTitle": "En enda slutpunkt för många leverantörer", + "useCaseSingleEndpointText": "Peka klienter till en basadress och dirigera efter modellprefix (till exempel: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Reserv- och modellbyte med kombinationer", + "useCaseFallbackText": "Skapa kombinationsmodeller i Dashboard och håll klientkonfigurationen stabil medan leverantörerna roterar internt.", + "useCaseUsageVisibilityTitle": "Användning, kostnad och felsökningssynlighet", + "useCaseUsageVisibilityText": "Spåra tokens och kostnader efter leverantör, konto och API-nyckel på flikarna Användning och Analytics.", + "clientCherryStudioTitle": "Cherry Studio", + "baseUrlLabel": "Bas-URL", + "chatEndpointLabel": "Chattslutpunkt", + "modelRecommendationLabel": "Modellrekommendation: explicit prefix", + "clientCodexTitle": "Codex / GitHub Copilot-modeller", + "clientCodexBullet1": "Använd modell-ID med", + "clientCodexBullet2": "Codex-familjens modeller dirigeras automatiskt till", + "clientCodexBullet3": "Icke-Codex-modeller fortsätter", + "clientCursorTitle": "Markör IDE", + "clientCursorBullet1": "Använd", + "clientCursorBullet1Suffix": "prefix för Cursor-modeller.", + "clientCursorBullet2": "OAuth-anslutning - logga in från sidan Leverantörer.", + "clientClaudeTitle": "Claude Code / Antigravitation", + "clientClaudeBullet1Prefix": "Använd", + "clientClaudeBullet1Middle": "(Claude) eller", + "clientClaudeBullet1Suffix": "(Antigravitation) prefix.", + "endpointChatNote": "OpenAI-kompatibel chattslutpunkt (standard).", + "endpointResponsesNote": "Responses API-slutpunkt (Codex, o-serien).", + "endpointModelsNote": "Modellkatalog för alla anslutna leverantörer.", + "endpointAudioNote": "Ljudtranskription (Deepgram, AssemblyAI).", + "endpointImagesNote": "Bildgenerering (NanoBanana).", + "endpointRewriteChatNote": "Omskrivningshjälp för klienter utan /v1.", + "endpointRewriteResponsesNote": "Skriv om hjälpare för svar utan /v1.", + "endpointRewriteModelsNote": "Omskrivningshjälp för modellupptäckt utan /v1.", + "modelPrefixesDescriptionStart": "Använd leverantörsprefixet före modellnamnet för att dirigera till en specifik leverantör. Exempel:", + "modelPrefixesDescriptionEnd": "rutter till GitHub Copilot.", + "provider": "Leverantör", + "type": "Typ", + "troubleshootingModelRouting": "Om klienten misslyckas med modellrouting, använd explicit leverantör/modell (till exempel: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Om du får tvetydiga modellfel väljer du ett leverantörsprefix istället för ett blott modell-ID.", + "troubleshootingCodexFamily": "För GitHub Codex-familjens modeller, behåll modellen som gh/; routern väljer /svarar automatiskt.", + "troubleshootingTestConnection": "Använd Dashboard > Leverantörer > Testa anslutning innan du testar från IDE:er eller externa klienter.", + "troubleshootingCircuitBreaker": "Om en leverantör visar att strömbrytaren är öppen, vänta på nedkylning eller kolla Health-sidan för detaljer.", + "troubleshootingOAuth": "För OAuth-leverantörer, autentisera på nytt om tokens löper ut. Kontrollera leverantörskortets statusindikator." + }, + "legal": { + "privacyPolicy": "Sekretesspolicy", + "termsOfService": "Användarvillkor", + "providerConfigurations": "Leverantörskonfigurationer", + "apiKeys": "API-nycklar", + "usageLogs": "Användningsloggar", + "applicationSettings": "Applikationsinställningar", + "viewExportAnalytics": "Visa och exportera användningsanalyser", + "clearHistory": "Rensa användningshistorik när som helst", + "configureRetention": "Konfigurera logglagringspolicyer", + "backupRestore": "Säkerhetskopiera och återställ din databas", + "privacyMetadataTitle": "Sekretesspolicy | OmniRoute", + "privacyMetadataDescription": "Sekretesspolicy för OmniRoute AI API-proxyroutern.", + "termsMetadataTitle": "Användarvillkor | OmniRoute", + "termsMetadataDescription": "Användarvillkor för OmniRoute AI API-proxyroutern.", + "backToHome": "Tillbaka till hemmet", + "lastUpdated": "Senast uppdaterad: {date}", + "policyLastUpdatedDate": "13 februari 2026", + "listSeparator": "-", + "questionsVisit": "Frågor? Besök vår", + "githubRepository": "GitHub-förråd", + "privacySection1Title": "1. Lokal-först arkitektur", + "privacySection1Text": "OmniRoute är designad som en lokal-först-applikation. All databehandling och lagring sker helt och hållet på din maskin. Det finns ingen centraliserad server som samlar in din information.", + "privacySection2Title": "2. Data vi lagrar", + "privacyDataStoredIn": "Följande data lagras lokalt i", + "privacyDataProviderConfigurationsDesc": "anslutningsadresser, leverantörstyper och prioritetsinställningar", + "privacyDataApiKeysDesc": "krypterad och lagrad lokalt för autentisering med AI-leverantörer", + "privacyDataUsageLogsDesc": "antal begäranden, tokenanvändning, modellnamn, tidsstämplar och svarstider", + "privacyDataApplicationSettingsDesc": "temapreferenser, routingstrategi och kombinationskonfigurationer", + "privacySection3Title": "3. Ingen telemetri", + "privacySection3Text": "OmniRoute samlar inte in telemetri-, analys- eller kraschrapporter. Ingen data skickas till oss eller någon tredje part. Dina användningsmönster, API-anrop och konfigurationer förblir helt privata.", + "privacySection4Title": "4. Tredjeparts AI-leverantörer", + "privacySection4Text": "När du gör API-anrop via OmniRoute vidarebefordras dina förfrågningar till de AI-leverantörer du har konfigurerat (till exempel: OpenAI, Anthropic, Google). Dessa leverantörer har sina egna integritetspolicyer som styr hur de hanterar din data. Vänligen granska:", + "privacyOpenAiPolicy": "OpenAI Sekretesspolicy", + "privacyAnthropicPolicy": "Antropisk sekretesspolicy", + "privacyGooglePolicy": "Googles sekretesspolicy", + "privacySection5Title": "5. Molnsynkronisering (valfritt)", + "privacySection5Text": "Om du aktiverar den valfria molnsynkroniseringsfunktionen kan leverantörskonfigurationer och API-nycklar överföras till en konfigurerad molnslutpunkt. Den här funktionen är inaktiverad som standard och kräver explicit opt-in.", + "privacySection6Title": "6. Loggning", + "privacyLoggingIntro": "Begäran loggar kan konfigureras via instrumentpanelens inställningar. Du kan:", + "privacySection7Title": "7. Dina rättigheter", + "privacySection7TextStart": "Eftersom all data lagras lokalt har du full kontroll. Du kan radera dina uppgifter när som helst genom att ta bort", + "privacySection7TextEnd": "katalogen eller använda funktionerna för säkerhetskopiering och återställning av databasen i instrumentpanelen.", + "termsSection1Title": "1. Översikt", + "termsSection1Text": "OmniRoute är en lokalt första AI API-proxyrouter som fungerar helt på din maskin. Den dirigerar förfrågningar till flera AI-leverantörer med lastbalansering, failover och användningsspårning.", + "termsSection2Title": "2. Användaransvar", + "termsResponsibilityApiKeys": "Du är ensam ansvarig för att hantera dina egna API-nycklar och autentiseringsuppgifter för tredjeparts AI-leverantörer (OpenAI, Anthropic, Google, etc.).", + "termsResponsibilityCompliance": "Du måste följa användarvillkoren för varje AI-leverantör vars API du kommer åt via OmniRoute.", + "termsResponsibilitySecurity": "Du ansvarar för säkerheten för din lokala OmniRoute-installation, inklusive att ställa in ett lösenord och begränsa nätverksåtkomst.", + "termsSection3Title": "3. Hur det fungerar", + "termsSection3Text": "OmniRoute fungerar som en förmedlande proxy. API-anrop som skickas till OmniRoute översätts och vidarebefordras till dina konfigurerade AI-leverantörer. OmniRoute ändrar inte innehållet i dina förfrågningar eller svar utöver den nödvändiga protokollöversättningen.", + "termsSection4Title": "4. Datahantering", + "termsDataStoredLocally": "All data lagras lokalt på din maskin i en SQLite-databas.", + "termsNoTransmission": "OmniRoute överför ingen data till externa servrar om du inte uttryckligen aktiverar molnsynkroniseringsfunktioner.", + "termsDataLocationText": "Användningsloggar, API-nycklar och konfiguration lagras i", + "termsSection5Title": "5. Ansvarsfriskrivning", + "termsSection5Text": "OmniRoute tillhandahålls \"i befintligt skick\" utan garanti av något slag. Vi ansvarar inte för några kostnader som uppstår genom API-användning, tjänstavbrott eller dataförlust. Behåll alltid säkerhetskopior av din konfiguration.", + "termsSection6Title": "6. Öppen källkod", + "termsSection6Text": "OmniRoute är programvara med öppen källkod. Du är fri att inspektera, modifiera och distribuera den enligt villkoren i dess licens." + } +} diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json new file mode 100644 index 0000000000..326b5b0c63 --- /dev/null +++ b/src/i18n/messages/th.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "บันทึก", + "cancel": "ยกเลิก", + "delete": "ลบ", + "loading": "กำลังโหลด...", + "error": "เกิดข้อผิดพลาด", + "success": "ความสำเร็จ", + "confirm": "คุณแน่ใจเหรอ?", + "refresh": "รีเฟรช", + "close": "ปิด", + "add": "เพิ่ม", + "edit": "แก้ไข", + "search": "ค้นหา", + "back": "กลับ", + "next": "ถัดไป", + "submit": "ส่ง", + "reset": "รีเซ็ต", + "copy": "คัดลอก", + "copied": "คัดลอก!", + "enabled": "เปิดใช้งานแล้ว", + "disabled": "ปิดการใช้งาน", + "active": "ใช้งานอยู่", + "inactive": "ไม่ได้ใช้งาน", + "noData": "ไม่มีข้อมูล", + "configure": "กำหนดค่า", + "manage": "จัดการ", + "name": "ชื่อ", + "actions": "การดำเนินการ", + "status": "สถานะ", + "type": "ประเภท", + "model": "รุ่น", + "models": "โมเดล", + "provider": "ผู้ให้บริการ", + "account": "บัญชี", + "time": "เวลา", + "details": "รายละเอียด", + "created": "สร้างแล้ว", + "lastUsed": "ใช้ล่าสุด", + "loadMore": "โหลดเพิ่มเติม", + "noResults": "ไม่พบผลลัพธ์", + "reloadPage": "โหลดหน้าซ้ำ", + "connected": "เชื่อมต่อแล้ว", + "disconnected": "ตัดการเชื่อมต่อแล้ว", + "notConfigured": "ไม่ได้กำหนดค่า", + "testConnection": "ทดสอบการเชื่อมต่อ", + "enable": "เปิดใช้งาน", + "disable": "ปิดการใช้งาน", + "columns": "คอลัมน์", + "newest": "ใหม่ล่าสุด", + "oldest": "เก่าแก่ที่สุด", + "all": "ทั้งหมด", + "none": "ไม่มี", + "yes": "ใช่", + "no": "ไม่", + "warning": "คำเตือน", + "note": "หมายเหตุ", + "free": "ฟรี", + "skipToContent": "ข้ามไปที่เนื้อหา" + }, + "sidebar": { + "home": "บ้าน", + "dashboard": "แดชบอร์ด", + "providers": "ผู้ให้บริการ", + "combos": "คอมโบ", + "usage": "การใช้งาน", + "analytics": "การวิเคราะห์", + "costs": "ค่าใช้จ่าย", + "health": "สุขภาพ", + "limits": "ขีดจำกัดและโควต้า", + "cliTools": "เครื่องมือ CLI", + "settings": "การตั้งค่า", + "translator": "นักแปล", + "docs": "เอกสาร", + "issues": "ประเด็นต่างๆ", + "endpoint": "จุดสิ้นสุด", + "apiManager": "ผู้จัดการ API", + "logs": "บันทึก", + "auditLog": "บันทึกการตรวจสอบ", + "shutdown": "ปิดเครื่อง", + "restart": "รีสตาร์ท", + "shutdownConfirm": "ปิด OmniRoute หรือไม่?", + "restartConfirm": "รีสตาร์ท OmniRoute หรือไม่", + "version": "v{version}", + "debug": "ดีบัก", + "system": "ระบบ", + "help": "ช่วยด้วย", + "serverDisconnected": "เซิร์ฟเวอร์ถูกตัดการเชื่อมต่อ", + "serverDisconnectedMsg": "พร็อกซีเซิร์ฟเวอร์ถูกหยุดหรือกำลังรีสตาร์ท", + "expandSidebar": "ขยายแถบด้านข้าง", + "collapseSidebar": "ยุบแถบด้านข้าง" + }, + "header": { + "logout": "ออกจากระบบ", + "language": "ภาษา", + "providers": "ผู้ให้บริการ", + "providerDescription": "จัดการการเชื่อมต่อผู้ให้บริการ AI ของคุณ", + "combos": "คอมโบ", + "comboDescription": "คอมโบโมเดลพร้อมทางเลือกสำรอง", + "usage": "การใช้งานและการวิเคราะห์", + "usageDescription": "ตรวจสอบการใช้งาน API การใช้โทเค็น และบันทึกคำขอของคุณ", + "analytics": "การวิเคราะห์", + "analyticsDescription": "แผนภูมิ แนวโน้ม และข้อมูลเชิงลึกในการประเมิน", + "cliTools": "เครื่องมือ CLI", + "cliToolsDescription": "กำหนดค่าเครื่องมือ CLI", + "home": "บ้าน", + "homeDescription": "ยินดีต้อนรับสู่ OmniRoute", + "endpoint": "จุดสิ้นสุด", + "endpointDescription": "การกำหนดค่าจุดสิ้นสุด API", + "settings": "การตั้งค่า", + "settingsDescription": "จัดการการตั้งค่าของคุณ", + "openaiCompatible": "รองรับ OpenAI", + "anthropicCompatible": "เข้ากันได้กับมานุษยวิทยา" + }, + "home": { + "quickStart": "เริ่มต้นอย่างรวดเร็ว", + "quickStartDesc": "เริ่มต้นใช้งานใน 4 ขั้นตอน เชื่อมต่อผู้ให้บริการ โมเดลเส้นทาง ตรวจสอบทุกอย่าง", + "fullDocs": "เอกสารฉบับเต็ม", + "step1Title": "1. สร้างคีย์ API", + "step1Desc": "ไปที่ Endpoint -> คีย์ที่ลงทะเบียน สร้างหนึ่งคีย์ต่อสภาพแวดล้อม", + "step2Title": "2. เชื่อมต่อผู้ให้บริการ", + "step2Desc": "เพิ่มบัญชีใน Providers รองรับ OAuth, คีย์ API และระดับฟรี", + "step3Title": "3. ชี้แนะลูกค้าของคุณ", + "step3Desc": "ตั้งค่า URL พื้นฐานเป็น {url} ใน IDE หรือไคลเอ็นต์ API ของคุณ", + "step4Title": "4. ตรวจสอบและเพิ่มประสิทธิภาพ", + "step4Desc": "ติดตามโทเค็น ต้นทุน และข้อผิดพลาดใน บันทึกคำขอ และ Analytics", + "providersOverview": "ภาพรวมผู้ให้บริการ", + "configuredOf": "{configured} กำหนดค่าจากผู้ให้บริการที่พร้อมใช้งาน {total}", + "noModelsAvailable": "ไม่มีรุ่นสำหรับผู้ให้บริการรายนี้", + "configureFirst": "กำหนดค่าการเชื่อมต่อก่อนใน {providers}", + "configureProvider": "กำหนดค่าผู้ให้บริการ", + "modelAvailable": "{count} มีโมเดลให้เลือก", + "modelsAvailable": "{count} มีรุ่นให้เลือก", + "connectionsActive": "{count} การเชื่อมต่อทำงานอยู่", + "connectionsActivePlural": "{count} การเชื่อมต่อทำงานอยู่", + "copyModelName": "คัดลอกชื่อรุ่น", + "documentation": "เอกสารประกอบ", + "healthMonitor": "การตรวจสุขภาพ", + "reportIssue": "รายงานปัญหา", + "activeError": "{active} ใช้งานอยู่ · ข้อผิดพลาด {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "คีย์ API", + "requestsShort": "{count} ความต้องการ", + "providerModelsTitle": "{provider} - โมเดล", + "copiedModel": "คัดลอก: {model}", + "aliasLabel": "นามแฝง" + }, + "analytics": { + "title": "การวิเคราะห์", + "overviewDescription": "ตรวจสอบรูปแบบการใช้งาน API การใช้โทเค็น ต้นทุน และแนวโน้มกิจกรรมของผู้ให้บริการและโมเดลทั้งหมด", + "evalsDescription": "เรียกใช้ชุดการประเมินผลเพื่อทดสอบและตรวจสอบความถูกต้องของตำแหน่งข้อมูล LLM ของคุณ เปรียบเทียบคุณภาพของโมเดล ตรวจจับการถดถอย และเวลาแฝงของเกณฑ์มาตรฐาน", + "overview": "ภาพรวม", + "evals": "เอวาลส์" + }, + "apiManager": { + "title": "คีย์ API", + "createKey": "สร้างคีย์ API", + "key": "คีย์", + "revokeKey": "เพิกถอนคีย์", + "revokeConfirm": "คุณแน่ใจหรือไม่ว่าต้องการเพิกถอนคีย์ API นี้", + "noKeys": "ยังไม่มีคีย์ API", + "noKeysDesc": "สร้างคีย์ API แรกของคุณเพื่อตรวจสอบสิทธิ์คำขอไปยังตำแหน่งข้อมูลของคุณ", + "keyLabel": "ป้ายกำกับที่สำคัญ", + "permissions": "สิทธิ์", + "expiresAt": "หมดอายุ", + "never": "ไม่เคย", + "revoke": "เพิกถอน", + "showKey": "แสดงคีย์", + "hideKey": "ซ่อนคีย์", + "copyKey": "คัดลอกคีย์ API", + "allModels": "ทุกรุ่น", + "selectedModels": "รุ่นที่เลือก", + "readOnly": "อ่านอย่างเดียว", + "fullAccess": "การเข้าถึงแบบเต็ม", + "keyManagement": "การจัดการคีย์ API", + "keyManagementDesc": "สร้างและจัดการคีย์ API สำหรับการตรวจสอบคำขอไปยังปลายทางของคุณ", + "totalKeys": "คีย์ทั้งหมด", + "restricted": "ถูกจำกัด", + "totalRequests": "คำขอทั้งหมด", + "modelsAvailable": "รุ่นที่มีจำหน่าย", + "registeredKeys": "คีย์ที่ลงทะเบียน", + "keysRegistered": "ลงทะเบียน {count} คีย์แล้ว", + "keyRegistered": "ลงทะเบียนคีย์ {count} แล้ว", + "keysSecurityNote": "แต่ละคีย์จะแยกการติดตามการใช้งานและสามารถเพิกถอนได้โดยอิสระ คีย์จะถูกปกปิดหลังจากสร้างเพื่อความปลอดภัย", + "createFirstKey": "สร้างคีย์แรกของคุณ", + "name": "ชื่อ", + "usage": "การใช้งาน", + "created": "สร้างแล้ว", + "actions": "การดำเนินการ", + "reqs": "ความต้องการ", + "neverUsed": "ไม่เคยใช้", + "deleteConfirm": "ลบคีย์ API นี้ใช่ไหม", + "usageTips": "เคล็ดลับการใช้งาน", + "tipAuth": "ใช้คีย์ API ในส่วนหัวการอนุญาตเป็น Bearer YOUR_KEY", + "tipSecure": "ในระหว่างการสร้างคีย์จะแสดงเพียงครั้งเดียว — เก็บไว้อย่างปลอดภัย", + "tipSeparate": "สร้างคีย์แยกต่างหากสำหรับไคลเอนต์หรือสภาพแวดล้อมที่แตกต่างกัน", + "tipRestrict": "จำกัดคีย์ไว้ที่รุ่นเฉพาะเพื่อความปลอดภัยและการควบคุมต้นทุนที่ดีขึ้น", + "keyName": "ชื่อคีย์", + "keyNamePlaceholder": "เช่น คีย์การผลิต คีย์การพัฒนา", + "keyNameDesc": "เลือกชื่อที่สื่อความหมายเพื่อระบุวัตถุประสงค์ของคีย์นี้", + "keyCreated": "สร้างคีย์ API แล้ว", + "keyCreatedSuccess": "สร้างคีย์สำเร็จแล้ว!", + "keyCreatedNote": "คัดลอกและจัดเก็บคีย์นี้ทันที ซึ่งจะไม่แสดงอีก", + "done": "เสร็จแล้ว", + "savePermissions": "บันทึกสิทธิ์", + "allowAll": "อนุญาตทั้งหมด", + "restrict": "จำกัด", + "allowAllInfo": "กุญแจนี้เข้าได้ทุกรุ่น", + "restrictInfo": "คีย์นี้สามารถเข้าถึงโมเดล {selected} จาก {total}", + "selected": "{count} เลือกแล้ว", + "all": "ทั้งหมด", + "clear": "ชัดเจน", + "searchModels": "ค้นหารุ่นตามชื่อหรือผู้ให้บริการ...", + "noModelsFound": "ไม่พบรุ่น", + "keyNameRequired": "ต้องระบุชื่อคีย์", + "keyNameTooLong": "ชื่อคีย์ต้องมีอักขระ {max} ตัวหรือน้อยกว่า", + "keyNameInvalid": "ชื่อคีย์มีได้เฉพาะตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง และขีดล่างเท่านั้น", + "invalidKeyName": "ชื่อคีย์ไม่ถูกต้อง", + "failedCreateKey": "ไม่สามารถสร้างคีย์ได้", + "failedCreateKeyRetry": "ไม่สามารถสร้างคีย์ได้ โปรดลองอีกครั้ง", + "invalidKeyId": "รหัสคีย์ไม่ถูกต้อง", + "failedDeleteKey": "ลบคีย์ไม่สำเร็จ", + "failedDeleteKeyRetry": "ลบคีย์ไม่สำเร็จ โปรดลองอีกครั้ง", + "invalidModelsSelection": "การเลือกรุ่นไม่ถูกต้อง", + "cannotSelectMoreThanModels": "ไม่สามารถเลือกมากกว่า {max} รุ่น", + "failedUpdatePermissions": "ไม่สามารถอัปเดตการอนุญาต", + "failedUpdatePermissionsRetry": "ไม่สามารถอัปเดตการอนุญาต โปรดลองอีกครั้ง", + "unknownProvider": "ไม่ทราบ", + "copyMaskedKey": "คัดลอกคีย์ที่ปกปิด", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "ล่าสุด: {date}", + "editPermissions": "แก้ไขสิทธิ์", + "deleteKey": "ลบคีย์", + "model": "{count} โมเดล", + "models": "{count} โมเดล", + "permissionsTitle": "สิทธิ์: {name}", + "allowAllDesc": "กุญแจนี้เข้าได้ทุกรุ่น", + "restrictDesc": "คีย์นี้สามารถเข้าถึงโมเดล {selectedCount} จาก {totalModels}", + "selectedCount": "{count} เลือกแล้ว" + }, + "auditLog": { + "title": "บันทึกการตรวจสอบ", + "searchPlaceholder": "การดำเนินการค้นหา...", + "action": "การดำเนินการ", + "actor": "นักแสดง", + "target": "เป้าหมาย", + "ipAddress": "ที่อยู่ IP", + "timestamp": "การประทับเวลา", + "noEntries": "ไม่พบรายการตรวจสอบ", + "filterByAction": "กรองตามการกระทำ...", + "filterByActor": "กรองตามนักแสดง...", + "filterEntriesAria": "กรองรายการบันทึกการตรวจสอบ", + "filterByActionTypeAria": "กรองตามประเภทการกระทำ", + "filterByActorAria": "กรองตามนักแสดง", + "refreshAuditLogAria": "รีเฟรชบันทึกการตรวจสอบ", + "tableAria": "รายการบันทึกการตรวจสอบ", + "failedFetchAuditLog": "ดึงข้อมูลบันทึกการตรวจสอบไม่สำเร็จ", + "notAvailable": "—", + "description": "การดำเนินการด้านการดูแลระบบและเหตุการณ์ด้านความปลอดภัย", + "showing": "กำลังแสดงรายการ {count} (ออฟเซ็ต {offset})", + "previous": "ก่อนหน้า" + }, + "cliTools": { + "title": "เครื่องมือ CLI", + "noActiveProviders": "ไม่มีผู้ให้บริการที่ใช้งานอยู่", + "noActiveProvidersDesc": "โปรดเพิ่มและเชื่อมต่อผู้ให้บริการก่อนเพื่อกำหนดค่าเครื่องมือ CLI", + "mapModels": "โมเดลแผนที่", + "testConnection": "ทดสอบการเชื่อมต่อ", + "connectionStatus": "สถานะการเชื่อมต่อ", + "configureEndpoint": "กำหนดค่าจุดสิ้นสุด", + "instructions": "คำแนะนำ", + "modelMapping": "การทำแผนที่โมเดล", + "baseUrl": "URL ฐาน", + "apiKey": "คีย์ API", + "configured": "กำหนดค่าแล้ว", + "notConfigured": "ไม่ได้กำหนดค่า", + "notInstalled": "ไม่ได้ติดตั้ง", + "custom": "กำหนดเอง", + "unknown": "ไม่ทราบ", + "lastSavedAt": "บันทึกล่าสุด: {date}", + "never": "ไม่เคย", + "justNow": "แค่ตอนนี้", + "minutesAgoShort": "{count}นาทีที่แล้ว", + "hoursAgoShort": "{count}ชม. ที่แล้ว", + "daysAgoShort": "{count}d ที่แล้ว", + "monthsAgoShort": "{count}เดือนที่แล้ว", + "yearsAgoShort": "{count}ปีที่แล้ว", + "runtimeCheckFailed": "การตรวจสอบรันไทม์ล้มเหลว", + "yourApiKeyPlaceholder": "รหัส API ของคุณ", + "modelPlaceholder": "ผู้ให้บริการ/รหัสรุ่น", + "configurationSaved": "บันทึกการกำหนดค่าเรียบร้อยแล้ว", + "failedToSave": "บันทึกการกำหนดค่าไม่สำเร็จ", + "noApiKeysCreateOne": "ไม่มีคีย์ API - สร้างคีย์ในหน้าคีย์", + "defaultOmnirouteKey": "sk_omniroute (ค่าเริ่มต้น)", + "selectModel": "เลือกรุ่น", + "selectModelForAlias": "เลือกรุ่นสำหรับ {alias}", + "selectModelForTool": "เลือกรุ่นสำหรับ {tool}", + "select": "เลือก", + "clear": "ชัดเจน", + "comingSoon": "เร็วๆ นี้", + "checkingRuntime": "กำลังตรวจสอบสถานะรันไทม์...", + "guideOnlyIntegration": "การบูรณาการเฉพาะคำแนะนำ (ไม่ต้องใช้รันไทม์ในเครื่อง)", + "cliRuntimeDetected": "ตรวจพบรันไทม์ CLI และพร้อมใช้งาน", + "cliFoundNotRunnable": "พบ CLI แต่ไม่สามารถรันได้{reason}", + "cliRuntimeNotDetected": "ตรวจไม่พบรันไทม์ของ CLI", + "binary": "ไบนารี่", + "configPath": "เส้นทางการกำหนดค่า", + "configPathShort": "การกำหนดค่า", + "failedCheckRuntimeStatus": "ไม่สามารถตรวจสอบสถานะรันไทม์ได้", + "copy": "คัดลอก", + "copied": "คัดลอกแล้ว", + "copyConfig": "คัดลอกการกำหนดค่า", + "saveConfig": "บันทึกการกำหนดค่า", + "selectionSaved": "บันทึกการเลือกแล้ว", + "guide": "คู่มือ", + "detected": "ตรวจพบ", + "notReady": "ไม่พร้อม", + "active": "ใช้งานอยู่", + "inactive": "ไม่ได้ใช้งาน", + "startMitm": "เริ่ม MITM", + "stopMitm": "หยุด MITM", + "mitmStarted": "MITM เริ่มต้นได้สำเร็จ!", + "mitmStopped": "MITM หยุดสำเร็จแล้ว!", + "failedStart": "ไม่สามารถเริ่ม MITM", + "failedStop": "ไม่สามารถหยุด MITM", + "saveMappings": "บันทึกการแมป", + "mappingsSaved": "บันทึกการแมปแล้ว!", + "failedSaveMappings": "ไม่สามารถบันทึกการแมป", + "howItWorks": "มันทำงานอย่างไร:", + "antigravityHowWorksDesc": "Antigravity ส่งคำขอไปยังปลายทางของ Google MITM สกัดกั้นและเปลี่ยนเส้นทางไปยัง OmniRoute", + "antigravityStep1": "1. เริ่ม MITM เพื่อกำหนดเส้นทางคำขอผ่าน OmniRoute", + "antigravityStep2Prefix": "2. เพิ่ม", + "antigravityStep2Suffix": "ไปยังไฟล์โฮสต์ของคุณเป็น 127.0.0.1", + "antigravityStep3": "3. เปิด Antigravity และคำขอจะถูกส่งผ่านพรอกซี", + "sudoPasswordRequiredTitle": "ต้องใช้รหัสผ่าน Sudo", + "sudoPasswordHint": "ต้องใช้รหัสผ่านผู้ดูแลระบบเพื่อแก้ไขไฟล์โฮสต์และการตั้งค่าพร็อกซีระบบ", + "enterSudoPassword": "ป้อนรหัสผ่าน sudo", + "sudoPasswordRequiredError": "ต้องใช้รหัสผ่าน Sudo", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "settingsApplied": "ใช้การตั้งค่าเรียบร้อยแล้ว!", + "failedApplySettings": "ล้มเหลวในการใช้การตั้งค่า", + "settingsReset": "รีเซ็ตการตั้งค่าเรียบร้อยแล้ว!", + "failedResetSettings": "ไม่สามารถรีเซ็ตการตั้งค่าได้", + "backupRestored": "กู้คืนข้อมูลสำรองแล้ว!", + "failedRestore": "ไม่สามารถกู้คืนได้", + "checkingCli": "กำลังตรวจสอบ {tool} CLI...", + "cliNotRunnable": "{tool} ติดตั้ง CLI แล้ว แต่ไม่สามารถรันได้", + "cliNotInstalled": "{tool} ไม่ได้ติดตั้ง CLI", + "cliNotDetected": "{tool} ตรวจไม่พบ CLI", + "cliDetectedReady": "{tool} CLI ตรวจพบและพร้อมใช้งาน", + "cliFoundFailedHealthcheck": "{tool} พบ CLI แต่การตรวจสอบสุขภาพรันไทม์ล้มเหลว{reason}", + "installCliPrompt": "โปรดติดตั้ง {tool} CLI เพื่อใช้คุณลักษณะนี้", + "installCodexPrompt": "โปรดติดตั้ง Codex CLI เพื่อใช้คุณสมบัติการใช้งานอัตโนมัติ", + "hide": "ซ่อน", + "howToInstall": "วิธีการติดตั้ง", + "installationGuide": "คู่มือการติดตั้ง", + "platforms": "macOS / ลินุกซ์ / วินโดวส์:", + "afterInstallationRun": "หลังการติดตั้งให้รัน", + "toVerify": "เพื่อตรวจสอบ", + "current": "ปัจจุบัน", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "รีเซ็ตเป็นค่าเริ่มต้น", + "providerModelPlaceholder": "ผู้ให้บริการ/รหัสรุ่น", + "apply": "สมัคร", + "reset": "รีเซ็ต", + "manualConfig": "การกำหนดค่าด้วยตนเอง", + "backups": "การสำรองข้อมูล", + "configBackups": "กำหนดค่าการสำรองข้อมูล", + "noBackupsYet": "ยังไม่มีการสำรองข้อมูล การสำรองข้อมูลจะถูกสร้างขึ้นโดยอัตโนมัติก่อนนำไปใช้หรือรีเซ็ตแต่ละครั้ง", + "restore": "คืนค่า", + "backupRestoredReloading": "กู้คืนข้อมูลสำรองแล้ว! กำลังโหลดสถานะ...", + "failedRestoreBackup": "ไม่สามารถกู้คืนข้อมูลสำรองได้", + "applied": "สมัครแล้ว!", + "failed": "ล้มเหลว", + "resetDone": "รีเซ็ต!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute ได้รับการกำหนดค่าให้เป็นผู้ให้บริการที่รองรับ OpenAI", + "provider": "ผู้ให้บริการ", + "model": "รุ่น", + "providers": "ผู้ให้บริการ", + "auth": "การรับรองความถูกต้อง", + "noApiKeysAvailable": "ไม่มีคีย์ API ที่พร้อมใช้งาน", + "usingDefaultOmniroute": "ใช้ค่าเริ่มต้น: sk_omniroute", + "updateConfig": "อัปเดตการกำหนดค่า", + "applyConfig": "ใช้การกำหนดค่า", + "noBackupsAvailable": "ไม่มีการสำรองข้อมูล", + "profileSaved": "บันทึกโปรไฟล์ \"{name}\" แล้ว!", + "failedSaveProfile": "ไม่สามารถบันทึกโปรไฟล์ได้", + "profileActivated": "เปิดใช้งานโปรไฟล์แล้ว!", + "failedActivateProfile": "ไม่สามารถเปิดใช้งานโปรไฟล์ได้", + "profiles": "โปรไฟล์", + "savedProfiles": "โปรไฟล์ที่บันทึกไว้", + "noProfilesYet": "ยังไม่มีการบันทึกโปรไฟล์ บันทึกการกำหนดค่าปัจจุบันเป็นโปรไฟล์ด้านล่าง", + "activate": "เปิดใช้งาน", + "deleteProfile": "ลบโปรไฟล์", + "profileNamePlaceholder": "ชื่อโปรไฟล์ (เช่น บัญชีส่วนตัว)", + "saveCurrent": "บันทึกปัจจุบัน", + "codexAuthNotePrefix": "การใช้โคเด็กซ์", + "codexAuthNoteMiddle": "ด้วย", + "codexAuthNoteSuffix": "คลิก \"ใช้\" เพื่อกำหนดค่าอัตโนมัติ", + "claudeManualConfiguration": "Claude CLI - การกำหนดค่าด้วยตนเอง", + "codexManualConfiguration": "Codex CLI - การกำหนดค่าด้วยตนเอง", + "droidManualConfiguration": "Factory Droid - การกำหนดค่าด้วยตนเอง", + "openClawManualConfiguration": "Open Claw - การกำหนดค่าด้วยตนเอง", + "clineManualConfiguration": "การกำหนดค่าด้วยตนเองของไคลน์", + "kiloManualConfiguration": "การกำหนดค่าด้วยตนเองของรหัสกิโล", + "toolDescriptions": { + "antigravity": "Google ต้านแรงโน้มถ่วง IDE พร้อม MITM", + "claude": "รหัสมานุษยวิทยา Claude CLI", + "codex": "OpenAI Codex CLI", + "droid": "ผู้ช่วย AI จากโรงงาน Droid", + "openclaw": "เปิดผู้ช่วย AI ของ Claw", + "cline": "Cline AI ผู้ช่วยเข้ารหัส CLI", + "kilo": "กิโลโค้ด AI Assistant CLI", + "cursor": "ตัวแก้ไขรหัสเคอร์เซอร์ AI", + "continue": "ดำเนินการต่อผู้ช่วย AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "ต้องใช้บัญชี Cursor Pro เพื่อใช้คุณสมบัตินี้", + "1": "เคอร์เซอร์กำหนดเส้นทางคำขอผ่านเซิร์ฟเวอร์ของตัวเอง ดังนั้นจึงไม่รองรับจุดสิ้นสุดในเครื่อง โปรดเปิดใช้งาน Cloud Endpoint ในการตั้งค่า" + }, + "steps": { + "1": { + "title": "เปิดการตั้งค่า", + "desc": "ไปที่การตั้งค่า -> โมเดล" + }, + "2": { + "title": "เปิดใช้งาน OpenAI API", + "desc": "เปิดใช้งานตัวเลือก \"คีย์ OpenAI API\"" + }, + "3": { + "title": "URL ฐาน" + }, + "4": { + "title": "คีย์ API" + }, + "5": { + "title": "เพิ่มโมเดลที่กำหนดเอง", + "desc": "คลิก \"ดูโมเดลทั้งหมด\" -> \"เพิ่มโมเดลที่กำหนดเอง\"" + }, + "6": { + "title": "เลือกรุ่น" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "เปิดการกำหนดค่า", + "desc": "เปิดไฟล์การกำหนดค่าดำเนินการต่อ" + }, + "2": { + "title": "คีย์ API" + }, + "3": { + "title": "เลือกรุ่น" + }, + "4": { + "title": "เพิ่มการกำหนดค่าโมเดล", + "desc": "เพิ่มการกำหนดค่าต่อไปนี้ให้กับอาร์เรย์โมเดลของคุณ:" + } + } + } + } + }, + "combos": { + "title": "คอมโบ", + "description": "สร้างโมเดลคอมโบด้วยการกำหนดเส้นทางแบบถ่วงน้ำหนักและการสนับสนุนทางเลือก", + "createCombo": "สร้างคอมโบ", + "editCombo": "แก้ไขคอมโบ", + "deleteCombo": "ลบคอมโบ", + "noModels": "ไม่มีรุ่น", + "noModelsYet": "ยังไม่มีโมเดลเพิ่ม", + "addModel": "เพิ่มรุ่น", + "addModelToCombo": "เพิ่มโมเดลลงในคอมโบ", + "routingStrategy": "กลยุทธ์การกำหนดเส้นทาง", + "maxRetries": "ลองใหม่สูงสุด", + "timeout": "หมดเวลา (มิลลิวินาที)", + "healthcheck": "ตรวจสุขภาพ", + "priority": "ลำดับความสำคัญ", + "fallback": "ทางเลือกสำรอง", + "roundRobin": "ตัวกลม โรบิน", + "random": "สุ่ม", + "leastLatency": "เวลาแฝงน้อยที่สุด", + "comboName": "ชื่อคอมโบ", + "comboNamePlaceholder": "คำสั่งผสมของฉัน", + "deleteConfirm": "ลบคอมโบนี้ใช่ไหม", + "noCombosYet": "ยังไม่มีคอมโบ", + "comboCreated": "สร้างคอมโบสำเร็จแล้ว", + "comboUpdated": "อัปเดตคอมโบเรียบร้อยแล้ว", + "comboDeleted": "ลบคอมโบแล้ว", + "failedCreate": "ไม่สามารถสร้างคอมโบได้", + "failedUpdate": "ไม่สามารถอัปเดตคอมโบได้", + "errorCreating": "เกิดข้อผิดพลาดในการสร้างคอมโบ", + "errorUpdating": "เกิดข้อผิดพลาดในการอัปเดตคอมโบ", + "errorDeleting": "เกิดข้อผิดพลาดในการลบคำสั่งผสม", + "testFailed": "คำขอทดสอบล้มเหลว", + "failedToggle": "ไม่สามารถสลับคำสั่งผสมได้", + "testResults": "ผลการทดสอบ — {name}", + "resolvedBy": "แก้ไขโดย:", + "more": "+{count} เพิ่มเติม", + "reqs": "ความต้องการ", + "success": "ความสำเร็จ", + "proxyConfigured": "กำหนดค่าพร็อกซีแล้ว", + "copyComboName": "คัดลอกชื่อคำสั่งผสม", + "enableCombo": "เปิดใช้งานคอมโบ", + "disableCombo": "ปิดการใช้งานคอมโบ", + "testCombo": "ทดสอบคอมโบ", + "duplicate": "ทำซ้ำ", + "proxyConfig": "การกำหนดค่าพร็อกซี", + "nameRequired": "ต้องระบุชื่อ", + "nameInvalid": "เฉพาะตัวอักษร ตัวเลข -, _, / และ ได้รับอนุญาต", + "nameHint": "ตัวอักษร ตัวเลข -, _, / และ ได้รับอนุญาต", + "priorityDesc": "ทางเลือกสำรองตามลำดับ: ลองใช้โมเดล 1 ก่อน จากนั้นจึงใช้ 2 เป็นต้น", + "weightedDesc": "กระจายการรับส่งข้อมูลตามเปอร์เซ็นต์น้ำหนักพร้อมทางเลือกสำรอง", + "roundRobinDesc": "การกระจายแบบวงกลม: แต่ละคำขอจะส่งไปยังโมเดลถัดไปที่หมุนเวียนกัน", + "randomDesc": "การเลือกแบบสุ่มแบบสม่ำเสมอ จากนั้นจึงย้อนกลับไปยังโมเดลที่เหลือ", + "leastUsedDesc": "เลือกโมเดลที่มีคำขอน้อยที่สุด โดยจะปรับสมดุลการโหลดเมื่อเวลาผ่านไป", + "costOptimizedDesc": "กำหนดเส้นทางไปยังรุ่นที่ถูกที่สุดก่อนตามราคา", + "models": "โมเดล", + "autoBalance": "ปรับสมดุลอัตโนมัติ", + "advancedSettings": "การตั้งค่าขั้นสูง", + "retryDelay": "ความล่าช้าในการลองอีกครั้ง (มิลลิวินาที)", + "concurrencyPerModel": "เห็นพ้องต้องกัน / รุ่น", + "queueTimeout": "คิวหมดเวลา (มิลลิวินาที)", + "advancedHint": "เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นสากล เหล่านี้จะแทนที่การตั้งค่าต่อผู้ให้บริการ", + "moveUp": "เลื่อนขึ้น", + "moveDown": "เลื่อนลง", + "removeModel": "ลบ", + "saving": "กำลังบันทึก...", + "weighted": "ถ่วงน้ำหนัก", + "leastUsed": "ใช้น้อยที่สุด", + "costOpt": "ต้นทุน-การเลือก" + }, + "costs": { + "title": "ค่าใช้จ่าย", + "budget": "งบประมาณ", + "totalCost": "ต้นทุนรวม", + "breakdown": "การแจกแจงต้นทุน", + "noData": "ไม่มีข้อมูลค่าใช้จ่าย", + "byModel": "โดยรุ่น", + "byProvider": "โดยผู้ให้บริการ" + }, + "endpoint": { + "title": "จุดสิ้นสุด API", + "available": "จุดสิ้นสุดที่มีอยู่", + "cloudProxy": "พร็อกซีคลาวด์", + "disableConfirm": "คุณแน่ใจหรือไม่ว่าต้องการปิดใช้งานพร็อกซีระบบคลาวด์", + "baseUrl": "URL ฐาน", + "apiKeyLabel": "คีย์ API", + "registeredKeys": "คีย์ที่ลงทะเบียน", + "chatCompletions": "เสร็จสิ้นการแชท", + "responses": "คำตอบ", + "listModels": "รายการโมเดล", + "usingCloudProxy": "การใช้พร็อกซีคลาวด์", + "usingLocalServer": "การใช้เซิร์ฟเวอร์ท้องถิ่น", + "machineId": "หมายเลขเครื่อง: {id}...", + "disableCloud": "ปิดการใช้งานคลาวด์", + "enableCloud": "เปิดใช้งานคลาวด์", + "modelsAcrossEndpoints": "{models} โมเดลข้ามจุดสิ้นสุด {endpoints}", + "chatDesc": "การแชทแบบสตรีมมิงและไม่สตรีมกับผู้ให้บริการทั้งหมด", + "embeddings": "การฝัง", + "embeddingsDesc": "การฝังข้อความสำหรับการค้นหาและไปป์ไลน์ RAG", + "imageGeneration": "การสร้างภาพ", + "imageDesc": "สร้างภาพจากข้อความแจ้ง", + "rerank": "จัดอันดับใหม่", + "rerankDesc": "จัดอันดับเอกสารใหม่ตามความเกี่ยวข้องกับแบบสอบถาม", + "audioTranscription": "การถอดเสียง", + "audioTranscriptionDesc": "ถอดเสียงไฟล์เสียงเป็นข้อความ (กระซิบ)", + "textToSpeech": "ข้อความเป็นคำพูด", + "textToSpeechDesc": "แปลงข้อความเป็นคำพูดที่ฟังดูเป็นธรรมชาติ", + "moderations": "การกลั่นกรอง", + "moderationsDesc": "การกลั่นกรองเนื้อหาและการจำแนกความปลอดภัย", + "enableCloudTitle": "เปิดใช้งานพร็อกซีคลาวด์", + "whatYouGet": "สิ่งที่คุณจะได้รับ", + "cloudBenefitAccess": "เข้าถึง API ของคุณได้จากทุกที่ในโลก", + "cloudBenefitShare": "แบ่งปันตำแหน่งข้อมูลกับทีมของคุณได้อย่างง่ายดาย", + "cloudBenefitPorts": "ไม่จำเป็นต้องเปิดพอร์ตหรือกำหนดค่าไฟร์วอลล์", + "cloudBenefitEdge": "เครือข่าย Edge ระดับโลกที่รวดเร็ว", + "cloudSessionNote": "คลาวด์จะเก็บเซสชันการตรวจสอบสิทธิ์ของคุณไว้เป็นเวลา 1 วัน หากไม่ได้ใช้ก็จะถูกลบโดยอัตโนมัติ", + "cloudUnstableNote": "ขณะนี้ระบบคลาวด์ไม่เสถียรด้วย Claude Code OAuth ในบางกรณี", + "cloudConnected": "เชื่อมต่อพร็อกซีคลาวด์แล้ว!", + "connectingToCloud": "กำลังเชื่อมต่อกับคลาวด์...", + "verifyingConnection": "กำลังยืนยันการเชื่อมต่อ...", + "connecting": "กำลังเชื่อมต่อ...", + "verifying": "กำลังยืนยัน...", + "connected": "เชื่อมต่อแล้ว!", + "disableCloudTitle": "ปิดการใช้งานพร็อกซีคลาวด์", + "disableWarning": "เซสชันการตรวจสอบสิทธิ์ทั้งหมดจะถูกลบออกจากระบบคลาวด์", + "syncingData": "กำลังซิงค์ข้อมูลล่าสุด...", + "disablingCloud": "กำลังปิดใช้งานระบบคลาวด์...", + "syncing": "กำลังซิงค์...", + "disabling": "กำลังปิดการใช้งาน...", + "cloudConnectedVerified": "เชื่อมต่อและยืนยัน Cloud Proxy แล้ว!", + "connectedVerificationPending": "เชื่อมต่อแล้ว — อยู่ระหว่างการยืนยัน", + "connectedVerificationPendingWithError": "เชื่อมต่อแล้ว — รอการยืนยัน: {error}", + "cloudDisabledSuccess": "ปิดการใช้งานคลาวด์เรียบร้อยแล้ว", + "syncedSuccess": "ซิงค์เรียบร้อยแล้ว", + "failedDisable": "ไม่สามารถปิดการใช้งานระบบคลาวด์", + "failedEnable": "ไม่สามารถเปิดใช้งานระบบคลาวด์", + "cloudRequestTimeout": "หมดเวลาคำขอคลาวด์", + "cloudRequestFailed": "คำขอคลาวด์ล้มเหลว", + "cloudWorkerUnreachable": "ไม่สามารถเข้าถึงผู้ปฏิบัติงานบนคลาวด์ ตรวจสอบให้แน่ใจว่าบริการคลาวด์กำลังทำงานอยู่ (npm run dev in /cloud)", + "connectionFailed": "การเชื่อมต่อล้มเหลว", + "syncFailed": "ไม่สามารถซิงค์ข้อมูลบนคลาวด์", + "providerModelsTitle": "{provider} — โมเดล", + "noModelsForProvider": "ไม่มีรุ่นสำหรับผู้ให้บริการรายนี้", + "chat": "แชท", + "embedding": "การฝัง", + "image": "รูปภาพ", + "custom": "กำหนดเอง", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "สุขภาพของระบบ", + "description": "การตรวจสอบอินสแตนซ์ OmniRoute ของคุณแบบเรียลไทม์", + "healthy": "ดีต่อสุขภาพ", + "degraded": "เสื่อมโทรม", + "down": "ลง", + "uptime": "เวลาทำงาน", + "memory": "หน่วยความจำ", + "memoryRss": "หน่วยความจำ (RSS)", + "heap": "กอง", + "cpu": "ซีพียู", + "database": "ฐานข้อมูล", + "version": "เวอร์ชัน", + "lastCheck": "ตรวจสอบครั้งสุดท้าย", + "providerHealth": "สุขภาพของผู้ให้บริการ", + "systemMetrics": "ตัวชี้วัดของระบบ", + "tokenHealth": "โทเค็นสุขภาพ", + "refreshAll": "รีเฟรชทั้งหมด", + "checkNow": "ตรวจสอบตอนนี้", + "loadingHealth": "กำลังโหลดข้อมูลสุขภาพ...", + "failedToLoad": "ไม่สามารถโหลดข้อมูลสุขภาพ: {error}", + "retry": "ลองอีกครั้ง", + "allOperational": "ใช้งานได้ทุกระบบ", + "issuesDetected": "ตรวจพบปัญหาของระบบ", + "updatedAt": "อัปเดต {time}", + "latency": "เวลาแฝง", + "latencyP50": "หน้า 50", + "latencyP95": "หน้า 95", + "latencyP99": "หน้า 99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "คำขอทั้งหมด", + "noDataYet": "ยังไม่มีข้อมูล", + "promptCache": "แคชพร้อมท์", + "entries": "รายการ", + "hitRate": "อัตราการเข้าชม", + "hitsMisses": "ฮิต / พลาด", + "signatureCache": "แคชลายเซ็น", + "signatureDefaults": "ค่าเริ่มต้น", + "signatureTool": "เครื่องมือ", + "signatureFamily": "ครอบครัว", + "signatureSession": "เซสชัน", + "recovering": "กำลังฟื้นตัว", + "noCBData": "ไม่มีข้อมูลเซอร์กิตเบรกเกอร์ ทำการร้องขอบางอย่างก่อน", + "providerHealthStatusAria": "สถานะสุขภาพของผู้ให้บริการ", + "issuesLabel": "ตรวจพบปัญหา", + "operational": "การดำเนินงาน", + "providers": "ผู้ให้บริการ", + "healthyCount": "{count} สุขภาพแข็งแรง", + "nodeVersion": "โหนด {version}", + "failures": "{count} ล้มเหลว", + "failuresPlural": "{count} ล้มเหลว", + "lastFailure": "สุดท้าย", + "rateLimitStatus": "สถานะการจำกัดอัตรา", + "activeLimiters": "{count} ตัวจำกัดที่ใช้งานอยู่", + "activeLimitersPlural": "{count} ตัวจำกัดที่ใช้งานอยู่", + "queued": "เข้าคิว", + "queuedCount": "{count} เข้าคิวแล้ว", + "running": "วิ่ง", + "runningCount": "{count} กำลังวิ่งอยู่", + "ok": "ตกลง", + "activeLockouts": "การล็อกที่ใช้งานอยู่", + "resetConfirm": "รีเซ็ตเซอร์กิตเบรกเกอร์ทั้งหมดเป็นสถานะปกติหรือไม่ การดำเนินการนี้จะล้างจำนวนความล้มเหลวทั้งหมดและกู้คืนผู้ให้บริการทั้งหมดกลับสู่สถานะการปฏิบัติงาน", + "resetAllTitle": "รีเซ็ตเบรกเกอร์วงจรทั้งหมดให้อยู่ในสถานะปกติ", + "resetting": "กำลังรีเซ็ต...", + "resetAll": "รีเซ็ตทั้งหมด", + "until": "จนถึง {time}" + }, + "limits": { + "title": "ขีดจำกัดและโควต้า", + "rateLimit": "ขีดจำกัดอัตรา", + "remaining": "ที่เหลืออยู่", + "requestsPerMinute": "คำขอ/นาที", + "tokensPerMinute": "โทเค็น/นาที", + "dailyLimit": "ขีดจำกัดรายวัน" + }, + "logs": { + "title": "บันทึก", + "requestLogs": "ขอบันทึก", + "proxyLogs": "บันทึกพร็อกซี", + "auditLog": "บันทึกการตรวจสอบ", + "console": "คอนโซล", + "auditLogDesc": "การดำเนินการด้านการดูแลระบบและเหตุการณ์ด้านความปลอดภัย", + "loading": "กำลังโหลด...", + "refresh": "รีเฟรช", + "filterByAction": "กรองตามการกระทำ...", + "filterByActor": "กรองตามนักแสดง...", + "filterEntriesAria": "กรองรายการบันทึกการตรวจสอบ", + "filterByActionTypeAria": "กรองตามประเภทการกระทำ", + "filterByActorAria": "กรองตามนักแสดง", + "refreshAuditLogAria": "รีเฟรชบันทึกการตรวจสอบ", + "tableAria": "รายการบันทึกการตรวจสอบ", + "failedFetchAuditLog": "ดึงข้อมูลบันทึกการตรวจสอบไม่สำเร็จ", + "showing": "กำลังแสดงรายการ {count} (ออฟเซ็ต {offset})", + "search": "ค้นหา", + "timestamp": "การประทับเวลา", + "action": "การดำเนินการ", + "actor": "นักแสดง", + "target": "เป้าหมาย", + "details": "รายละเอียด", + "ipAddress": "ที่อยู่ IP", + "notAvailable": "—", + "noEntries": "ไม่พบรายการบันทึกการตรวจสอบ", + "previous": "ก่อนหน้า", + "next": "ถัดไป" + }, + "onboarding": { + "welcome": "ยินดีต้อนรับ", + "security": "ความปลอดภัย", + "test": "ทดสอบ", + "ready": "พร้อม!", + "setPassword": "ตั้งรหัสผ่าน", + "addProvider": "เพิ่มผู้ให้บริการรายแรกของคุณ", + "getStarted": "เริ่มต้นเลย", + "skip": "ข้าม", + "skipWizard": "ข้ามวิซาร์ดไปเลย", + "skipPassword": "ข้ามการตั้งค่ารหัสผ่าน", + "skipAndContinue": "ข้ามและดำเนินการต่อ", + "passwordLabel": "รหัสผ่าน", + "confirmPassword": "ยืนยันรหัสผ่าน", + "enterPassword": "ใส่รหัสผ่าน", + "confirmPasswordPlaceholder": "ยืนยันรหัสผ่าน", + "passwordsMismatch": "รหัสผ่านไม่ตรงกัน", + "setupComplete": "ตั้งค่าเสร็จสมบูรณ์!", + "goToDashboard": "ไปที่แดชบอร์ด →", + "welcomeDesc": "OmniRoute คือพร็อกซี AI API ในพื้นที่ของคุณ โดยกำหนดเส้นทางคำขอไปยังผู้ให้บริการ AI หลายรายด้วยการปรับสมดุลโหลด การเฟลโอเวอร์ และการติดตามการใช้งาน", + "multiProvider": "ผู้ให้บริการหลายราย", + "usageTracking": "การติดตามการใช้งาน", + "apiKeyMgmt": "การจัดการคีย์ API", + "securityDesc": "ตั้งรหัสผ่านเพื่อปกป้องแดชบอร์ดของคุณ หรือข้ามไปก่อน", + "providerDesc": "เชื่อมต่อผู้ให้บริการ AI รายแรกของคุณ คุณสามารถเพิ่มมากขึ้นในภายหลัง", + "apiKeyRequired": "คีย์ API (จำเป็น)", + "customUrlOptional": "URL ที่กำหนดเอง (ไม่บังคับ)", + "testDesc": "มาตรวจสอบการเชื่อมต่อผู้ให้บริการของคุณใช้งานได้", + "runTest": "เรียกใช้การทดสอบการเชื่อมต่อ", + "testingConnection": "กำลังทดสอบการเชื่อมต่อ...", + "connectionSuccessful": "การเชื่อมต่อสำเร็จ! ผู้ให้บริการของคุณพร้อมแล้ว", + "noProviderFound": "ไม่พบผู้ให้บริการ คุณสามารถเพิ่มได้จากแดชบอร์ดในภายหลัง", + "testFailed": "การทดสอบล้มเหลว แต่คุณสามารถกำหนดค่าได้ในภายหลัง", + "couldNotTest": "ไม่สามารถทดสอบได้ในขณะนี้ คุณสามารถทดสอบได้จากแดชบอร์ด", + "doneDesc": "คุณพร้อมแล้ว! อินสแตนซ์ OmniRoute ของคุณได้รับการกำหนดค่าและพร้อมที่จะส่งคำขอ AI ของพร็อกซี", + "yourEndpoint": "ปลายทางของคุณ:", + "continue": "ดำเนินการต่อ", + "retry": "ลองอีกครั้ง", + "failedSetPassword": "ไม่สามารถตั้งรหัสผ่านได้ ลองอีกครั้ง", + "failedAddProvider": "ไม่สามารถเพิ่มผู้ให้บริการ ลองอีกครั้ง", + "connectionError": "ข้อผิดพลาดในการเชื่อมต่อ โปรดลองอีกครั้ง", + "provider": "ผู้ให้บริการ" + }, + "providers": { + "title": "ผู้ให้บริการ", + "addProvider": "เพิ่มผู้ให้บริการ", + "editProvider": "แก้ไขผู้ให้บริการ", + "deleteProvider": "ลบผู้ให้บริการ", + "noProviders": "ไม่มีการกำหนดค่าผู้ให้บริการ", + "modelAvailability": "ความพร้อมของรุ่น", + "accounts": "บัญชี", + "newAccount": "บัญชีใหม่", + "deleteConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบผู้ให้บริการรายนี้", + "testing": "กำลังทดสอบ...", + "testConnection": "ทดสอบการเชื่อมต่อ", + "testSuccess": "การเชื่อมต่อสำเร็จ", + "testFailed": "การเชื่อมต่อล้มเหลว", + "available": "มีจำหน่าย", + "cooldown": "คูลดาวน์", + "unavailable": "ไม่พร้อมใช้งาน", + "unknown": "ไม่ทราบ", + "oauthLabel": "OAuth", + "compatibleLabel": "เข้ากันได้", + "chat": "แชท", + "responses": "คำตอบ", + "messages": "ข้อความ", + "oauthProviders": "ผู้ให้บริการ OAuth", + "freeProviders": "ผู้ให้บริการฟรี", + "apiKeyProviders": "ผู้ให้บริการคีย์ API", + "compatibleProviders": "ผู้ให้บริการที่เข้ากันได้กับคีย์ API", + "testAll": "ทดสอบทั้งหมด", + "testAllOAuth": "ทดสอบการเชื่อมต่อ OAuth ทั้งหมด", + "testAllFree": "ทดสอบการเชื่อมต่อฟรีทั้งหมด", + "testAllApiKey": "ทดสอบการเชื่อมต่อคีย์ API ทั้งหมด", + "testAllCompatible": "ทดสอบการเชื่อมต่อที่เข้ากันได้ทั้งหมด", + "connected": "{count} เชื่อมต่อแล้ว", + "errorCount": "{count} ข้อผิดพลาด ({code})", + "errorCountNoCode": "{count} เกิดข้อผิดพลาด", + "noConnections": "ไม่มีการเชื่อมต่อ", + "disabled": "ปิดการใช้งาน", + "enableProvider": "เปิดใช้งานผู้ให้บริการ", + "disableProvider": "ปิดการใช้งานผู้ให้บริการ", + "testResults": "ผลการทดสอบ", + "noCompatibleYet": "ยังไม่มีการเพิ่มผู้ให้บริการที่เข้ากันได้", + "compatibleHint": "ใช้ปุ่มด้านบนเพื่อเพิ่มตำแหน่งข้อมูลที่รองรับ OpenAI หรือ Anthropic", + "addOpenAICompatible": "เพิ่มการรองรับ OpenAI", + "addAnthropicCompatible": "เพิ่มความเข้ากันได้ทางมานุษยวิทยา", + "addNewProvider": "เพิ่มผู้ให้บริการใหม่", + "backToProviders": "กลับไปที่ผู้ให้บริการ", + "configureNewProvider": "กำหนดค่าผู้ให้บริการ AI ใหม่เพื่อใช้กับแอปพลิเคชันของคุณ", + "providerLabel": "ผู้ให้บริการ", + "selectProvider": "เลือกผู้ให้บริการ", + "selectedProvider": "ผู้ให้บริการที่เลือก", + "authMethod": "วิธีการรับรองความถูกต้อง", + "apiKeyLabel": "คีย์ API", + "apiKeyRequired": "จำเป็นต้องมีคีย์ API", + "selectProviderRequired": "โปรดเลือกผู้ให้บริการ", + "enterApiKey": "ป้อนคีย์ API ของคุณ", + "apiKeySecure": "รหัส API ของคุณจะถูกเข้ารหัสและเก็บไว้อย่างปลอดภัย", + "oauth2Connect": "เชื่อมต่อกับ OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "เชื่อมต่อบัญชีของคุณโดยใช้การตรวจสอบสิทธิ์ OAuth2", + "displayName": "ชื่อที่แสดง", + "displayNamePlaceholder": "เช่น Production API, Dev Environment", + "displayNameHint": "ไม่จำเป็น ชื่อที่จำง่ายเพื่อระบุการกำหนดค่านี้", + "active": "ใช้งานอยู่", + "activeDescription": "เปิดใช้งานผู้ให้บริการรายนี้เพื่อใช้ในแอปพลิเคชันของคุณ", + "cancel": "ยกเลิก", + "createProvider": "สร้างผู้ให้บริการ", + "failedCreate": "ไม่สามารถสร้างผู้ให้บริการได้", + "errorOccurred": "เกิดข้อผิดพลาด โปรดลองอีกครั้ง", + "modelStatus": "สถานะโมเดล", + "allModelsOperational": "ใช้งานได้ทุกรุ่น", + "modelsWithIssues": "{count} โมเดลที่มีปัญหา", + "allModelsNormal": "ทุกรุ่นตอบสนองได้ปกติ", + "cooldownCleared": "ล้างคูลดาวน์แล้วสำหรับ {model}", + "failedClearCooldown": "ไม่สามารถล้างคูลดาวน์ได้", + "loadingAvailability": "กำลังโหลดรุ่นที่มีจำหน่าย...", + "clearCooldown": "ชัดเจน", + "clearing": "กำลังล้างข้อมูล...", + "until": "จนถึง {time}", + "providerTestFailed": "การทดสอบผู้ให้บริการล้มเหลว", + "modeTest": "{mode} ทดสอบ", + "passedCount": "{count} ผ่านไป", + "failedCount": "{count} ล้มเหลว", + "testedCount": "{count} ทดสอบแล้ว", + "millisecondsAbbr": "{value}ms", + "okShort": "ตกลง", + "errorShort": "ข้อผิดพลาด", + "noActiveConnectionsInGroup": "ไม่พบการเชื่อมต่อที่ใช้งานอยู่สำหรับกลุ่มนี้", + "allTestsPassed": "ผ่านการทดสอบ {total} ทั้งหมด", + "testSummary": "{passed}/{total} ผ่านไป {failed} ล้มเหลว", + "nameLabel": "ชื่อ", + "prefixLabel": "คำนำหน้า", + "baseUrlLabel": "URL ฐาน", + "apiTypeLabel": "ประเภทเอพีไอ", + "prefixHint": "จำเป็น คำนำหน้าเฉพาะสำหรับชื่อรุ่น", + "nameHint": "จำเป็น ป้ายกำกับที่เป็นมิตรสำหรับโหนดนี้", + "baseUrlHint": "จำเป็น  URL ฐาน API ของผู้ให้บริการ", + "anthropicPrefixPlaceholder": "ac-ผลิตภัณฑ์", + "openaiPrefixPlaceholder": "oc-ผลิตภัณฑ์", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "ตรวจสอบการเชื่อมต่อ", + "validating": "กำลังตรวจสอบ...", + "connectionValid": "การเชื่อมต่อถูกต้อง!", + "connectionFailed": "การเชื่อมต่อล้มเหลว ตรวจสอบ URL และรหัส", + "testKeyLabel": "ทดสอบคีย์ API", + "testKeyPlaceholder": "sk-... (สำหรับการตรวจสอบเท่านั้น)", + "providerNotFound": "ไม่พบผู้ให้บริการ", + "deleteConnectionConfirm": "ลบการเชื่อมต่อนี้ใช่ไหม", + "failedSetAlias": "ไม่สามารถตั้งชื่อแทนได้", + "failedSaveConnection": "ไม่สามารถบันทึกการเชื่อมต่อ", + "failedSaveConnectionRetry": "ไม่สามารถบันทึกการเชื่อมต่อ โปรดลองอีกครั้ง", + "failedRetestConnection": "ล้มเหลวในการทดสอบการเชื่อมต่ออีกครั้ง", + "deleteCompatibleNodeConfirm": "ลบโหนดที่เข้ากันได้ {type} นี้หรือไม่", + "anthropicCompatibleDetails": "รายละเอียดที่เข้ากันได้กับมานุษยวิทยา", + "openaiCompatibleDetails": "รายละเอียดที่เข้ากันได้กับ OpenAI", + "messagesApi": "API ข้อความ", + "responsesApi": "API การตอบสนอง", + "chatCompletions": "เสร็จสิ้นการแชท", + "importingModels": "กำลังนำเข้า...", + "importFromModels": "นำเข้าจาก /models", + "addConnectionToImport": "เพิ่มการเชื่อมต่อเพื่อเปิดใช้งานการนำเข้า", + "noModelsConfigured": "ไม่มีโมเดลที่กำหนดค่าไว้", + "connectionCount": "{count} การเชื่อมต่อ", + "fetchingModels": "กำลังเรียกรุ่นที่มีจำหน่าย...", + "failedFetchModels": "ดึงข้อมูลโมเดลไม่สำเร็จ", + "noModelsFound": "ไม่พบรุ่น", + "importFailed": "การนำเข้าล้มเหลว", + "noNewModelsAdded": "ไม่มีการเพิ่มโมเดลใหม่", + "adding": "กำลังเพิ่ม...", + "importingModelsTitle": "การนำเข้าโมเดล", + "copyModel": "คัดลอกโมเดล", + "removeModel": "ลบโมเดล", + "rateLimitProtected": "ได้รับการคุ้มครอง", + "rateLimitUnprotected": "ไม่มีการป้องกัน", + "enableRateLimitProtection": "คลิกเพื่อเปิดใช้งานการป้องกันขีดจำกัดอัตรา", + "disableRateLimitProtection": "คลิกเพื่อปิดใช้งานการป้องกันขีดจำกัดอัตรา", + "productionKey": "รหัสการผลิต", + "enterNewApiKey": "ป้อนคีย์ API ใหม่", + "optional": "ไม่จำเป็น", + "anthropicCompatibleName": "เข้ากันได้กับมานุษยวิทยา", + "openaiCompatibleName": "รองรับ OpenAI", + "failedImportModels": "ไม่สามารถนำเข้าโมเดลได้", + "noModelsReturnedFromEndpoint": "ไม่มีโมเดลที่ส่งคืนจากปลายทาง /models", + "importingModelsProgress": "กำลังนำเข้าโมเดล {current} จาก {total}...", + "foundModelsStartingImport": "พบ {count} โมเดล กำลังเริ่มนำเข้า...", + "importingModelById": "กำลังนำเข้า {modelId}...", + "importSuccessCount": "นำเข้า {count, plural, one {# model} other {# models}} สำเร็จแล้ว!", + "noNewModelsAddedExisting": "ไม่มีการเพิ่มโมเดลใหม่ (มีอยู่แล้วทั้งหมด)", + "importDoneCount": "✓ เสร็จแล้ว! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "เกิดข้อผิดพลาดที่ไม่คาดคิด", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "ข้อความ", + "responsesPath": "การตอบสนอง", + "chatCompletionsPath": "แชท/เสร็จสิ้น", + "add": "เพิ่ม", + "edit": "แก้ไข", + "delete": "ลบ", + "anthropic": "มานุษยวิทยา", + "openai": "OpenAI", + "singleConnectionPerCompatible": "อนุญาตให้เชื่อมต่อได้เพียงครั้งเดียวต่อโหนดที่เข้ากันได้ เพิ่มโหนดอื่นหากคุณต้องการการเชื่อมต่อเพิ่มเติม", + "connections": "การเชื่อมต่อ", + "providerProxyTitleConfigured": "พร็อกซีผู้ให้บริการ: {host}", + "configured": "กำหนดค่าแล้ว", + "providerProxyConfigureHint": "กำหนดค่าพร็อกซีสำหรับการเชื่อมต่อทั้งหมดของผู้ให้บริการรายนี้", + "providerProxy": "พร็อกซีของผู้ให้บริการ", + "noConnectionsYet": "ยังไม่มีการเชื่อมต่อ", + "addFirstConnectionHint": "เพิ่มการเชื่อมต่อครั้งแรกของคุณเพื่อเริ่มต้น", + "addConnection": "เพิ่มการเชื่อมต่อ", + "availableModels": "รุ่นที่มีจำหน่าย", + "pageAutoRefresh": "หน้าจะรีเฟรชอัตโนมัติ...", + "statusDisabled": "ปิดการใช้งาน", + "statusConnected": "เชื่อมต่อแล้ว", + "statusRuntimeIssue": "ปัญหารันไทม์", + "statusAuthFailed": "การตรวจสอบสิทธิ์ล้มเหลว", + "statusRateLimited": "อัตราจำกัด", + "statusNetworkIssue": "ปัญหาเครือข่าย", + "statusTestUnsupported": "ไม่รองรับการทดสอบ", + "statusUnavailable": "ไม่พร้อมใช้งาน", + "statusFailed": "ล้มเหลว", + "statusError": "ข้อผิดพลาด", + "oauthAccount": "บัญชี OAuth", + "errorTypeRuntime": "รันไทม์ท้องถิ่น", + "errorTypeUpstreamAuth": "การรับรองความถูกต้องต้นน้ำ", + "errorTypeMissingCredential": "ข้อมูลรับรองหายไป", + "errorTypeRefreshFailed": "รีเฟรชล้มเหลว", + "errorTypeTokenExpired": "โทเค็นหมดอายุ", + "errorTypeRateLimited": "อัตราจำกัด", + "errorTypeUpstreamUnavailable": "อัปสตรีมไม่พร้อมใช้งาน", + "errorTypeNetworkError": "ข้อผิดพลาดของเครือข่าย", + "errorTypeTestUnsupported": "ไม่รองรับการทดสอบ", + "errorTypeUpstreamError": "ข้อผิดพลาดต้นน้ำ", + "proxySourceGlobal": "ทั่วโลก", + "proxySourceProvider": "ผู้ให้บริการ", + "proxySourceKey": "คีย์", + "proxyConfiguredBySource": "พร็อกซี ({source}): {host}", + "autoPriority": "อัตโนมัติ: {priority}", + "proxy": "หนังสือมอบฉันทะ", + "retestAuthentication": "ทดสอบการรับรองความถูกต้องอีกครั้ง", + "retest": "ทดสอบซ้ำ", + "disableConnection": "ปิดการใช้งานการเชื่อมต่อ", + "enableConnection": "เปิดใช้งานการเชื่อมต่อ", + "reauthenticateConnection": "ตรวจสอบการเชื่อมต่อนี้อีกครั้ง", + "proxyConfig": "การกำหนดค่าพร็อกซี", + "aliasExistsAlert": "มีนามแฝง \"{alias}\" อยู่แล้ว โปรดใช้โมเดลอื่นหรือแก้ไขนามแฝงที่มีอยู่", + "openRouterAnyModelHint": "OpenRouter รองรับทุกรุ่น เพิ่มโมเดลและสร้างนามแฝงเพื่อการเข้าถึงที่รวดเร็ว", + "modelIdFromOpenRouter": "รหัสรุ่น (จาก OpenRouter)", + "openRouterModelPlaceholder": "มานุษยวิทยา / Claude-3-opus", + "customModels": "โมเดลที่กำหนดเอง", + "customModelsHint": "เพิ่มรหัสรุ่นที่ไม่ได้อยู่ในรายการเริ่มต้น สิ่งเหล่านี้จะพร้อมใช้งานสำหรับการกำหนดเส้นทาง", + "modelId": "รหัสรุ่น", + "customModelPlaceholder": "เช่น gpt-4.5-เทอร์โบ", + "loading": "กำลังโหลด...", + "removeCustomModel": "ลบโมเดลที่กำหนดเอง", + "noCustomModels": "ยังไม่มีการเพิ่มโมเดลที่กำหนดเอง", + "allSuggestedAliasesExist": "มีนามแฝงที่แนะนำทั้งหมดอยู่แล้ว โปรดเลือกรุ่นอื่นหรือลบนามแฝงที่ขัดแย้งกัน", + "failedSaveCustomModel": "บันทึกโมเดลที่กำหนดเองไม่สำเร็จ", + "modelAddedSuccess": "เพิ่มโมเดล {modelId} สำเร็จแล้ว", + "failedAddModelTryAgain": "ไม่สามารถเพิ่มโมเดล โปรดลองอีกครั้ง", + "failedSaveImportedModel": "ไม่สามารถบันทึกแบบจำลองที่นำเข้าไปยังฐานข้อมูลที่กำหนดเอง", + "failedImportModelsTryAgain": "ไม่สามารถนำเข้าโมเดลได้ โปรดลองอีกครั้ง", + "failedRemoveModelFromDatabase": "ไม่สามารถลบโมเดลออกจากฐานข้อมูล", + "modelRemovedSuccess": "ลบโมเดลสำเร็จแล้ว", + "failedDeleteModelTryAgain": "ลบโมเดลไม่สำเร็จ โปรดลองอีกครั้ง", + "compatibleModelsDescription": "เพิ่มโมเดลที่เข้ากันได้กับ {type} ด้วยตนเองหรือนำเข้าจากตำแหน่งข้อมูล /models", + "anthropicCompatibleModelPlaceholder": "คลอด-3-บทประพันธ์-20240229", + "openaiCompatibleModelPlaceholder": "GPT-4o", + "apiKeyValidationFailed": "การตรวจสอบคีย์ API ล้มเหลว โปรดตรวจสอบรหัสของคุณแล้วลองอีกครั้ง", + "addProviderApiKeyTitle": "เพิ่ม {provider} คีย์ API", + "checking": "กำลังตรวจสอบ...", + "check": "ตรวจสอบ", + "valid": "ถูกต้อง", + "invalid": "ไม่ถูกต้อง", + "creating": "กำลังสร้าง...", + "validationChecksAnthropicCompatible": "การตรวจสอบความถูกต้องจะตรวจสอบ {provider} โดยการตรวจสอบคีย์ API", + "validationChecksOpenAiCompatible": "การตรวจสอบความถูกต้องจะตรวจสอบ {provider} ผ่าน /models บน URL ฐานของคุณ", + "priorityLabel": "ลำดับความสำคัญ", + "saving": "กำลังบันทึก...", + "save": "บันทึก", + "editConnection": "แก้ไขการเชื่อมต่อ", + "accountName": "ชื่อบัญชี", + "email": "อีเมล", + "healthCheckMinutes": "ตรวจสุขภาพ (ขั้นต่ำ)", + "healthCheckHint": "ช่วงเวลาการรีเฟรชโทเค็นเชิงรุก 0 = ปิดการใช้งาน", + "failedTestConnection": "ทดสอบการเชื่อมต่อไม่สำเร็จ", + "failed": "ล้มเหลว", + "leaveBlankKeepCurrentApiKey": "เว้นว่างไว้เพื่อเก็บคีย์ API ปัจจุบันไว้", + "editCompatibleTitle": "แก้ไข {type} เข้ากันได้", + "compatibleBaseUrlHint": "ใช้ URL พื้นฐาน (ลงท้ายด้วย /v1) สำหรับ {type}- API ที่เข้ากันได้กับของคุณ", + "apiKeyForCheck": "คีย์ API (สำหรับการตรวจสอบ)", + "compatibleProdPlaceholder": "{type} เข้ากันได้ (ผลิตภัณฑ์)" + }, + "settings": { + "title": "การตั้งค่า", + "general": "ทั่วไป", + "security": "ความปลอดภัย", + "appearance": "ลักษณะที่ปรากฏ", + "routing": "การกำหนดเส้นทาง", + "cache": "แคช", + "resilience": "ความยืดหยุ่น", + "systemPrompt": "พร้อมท์ระบบ", + "thinkingBudget": "คิดงบประมาณ", + "proxy": "หนังสือมอบฉันทะ", + "pricing": "ราคา", + "storage": "ที่เก็บของ", + "policies": "นโยบาย", + "ipFilter": "ตัวกรองไอพี", + "comboDefaults": "ค่าเริ่มต้นคอมโบ", + "fallbackChains": "โซ่สำรอง", + "changePassword": "เปลี่ยนรหัสผ่าน", + "enablePassword": "เปิดใช้งานรหัสผ่าน", + "darkMode": "โหมดมืด", + "lightMode": "โหมดแสง", + "systemTheme": "ธีมของระบบ", + "enableCache": "เปิดใช้งานแคช", + "cacheTTL": "แคช TTL", + "maxCacheSize": "ขนาดแคชสูงสุด", + "clearCache": "ล้างแคช", + "cacheHits": "การเข้าชมแคช", + "cacheMisses": "แคชพลาด", + "hitRate": "อัตราการเข้าชม", + "cacheEntries": "รายการแคช", + "circuitBreaker": "เบรกเกอร์", + "retryPolicy": "นโยบายการลองอีกครั้ง", + "maxRetries": "ลองใหม่สูงสุด", + "retryDelay": "ลองล่าช้าอีกครั้ง", + "timeoutMs": "หมดเวลา (มิลลิวินาที)", + "enableSystemPrompt": "เปิดใช้งานพร้อมท์ระบบ", + "systemPromptText": "ข้อความแจ้งของระบบ", + "enableThinking": "เปิดใช้งานการคิด", + "maxThinkingTokens": "โทเค็นการคิดสูงสุด", + "enableProxy": "เปิดใช้งานพร็อกซี", + "proxyUrl": "URL พร็อกซี", + "pricingRates": "รูปแบบอัตราราคา", + "currentPricing": "ภาพรวมราคาปัจจุบัน", + "loadingPricing": "กำลังโหลดข้อมูลราคา...", + "noPricing": "ไม่มีข้อมูลราคา", + "input": "อินพุต", + "output": "เอาท์พุต", + "cached": "แคช", + "reasoning": "การใช้เหตุผล", + "cacheCreation": "การสร้างแคช", + "customPricing": "ราคาที่กำหนดเอง", + "databaseSize": "ขนาดฐานข้อมูล", + "backupDb": "ฐานข้อมูลสำรอง", + "restoreDb": "กู้คืนฐานข้อมูล", + "exportData": "ส่งออกข้อมูล", + "importData": "นำเข้าข้อมูล", + "clearData": "ล้างข้อมูลทั้งหมด", + "clearDataConfirm": "การดำเนินการนี้จะลบข้อมูลทั้งหมดอย่างถาวร คุณแน่ใจเหรอ?", + "enableRequestLogs": "เปิดใช้งานบันทึกคำขอ", + "logRetention": "การเก็บรักษาบันทึก", + "ipWhitelist": "รายการ IP ที่อนุญาต", + "ipBlacklist": "บัญชีดำไอพี", + "addIP": "เพิ่มไอพี", + "savedSuccessfully": "บันทึกการตั้งค่าเรียบร้อยแล้ว", + "ai": "เอไอ", + "advanced": "ขั้นสูง", + "localMode": "โหมดท้องถิ่น — ข้อมูลทั้งหมดที่จัดเก็บไว้ในเครื่องของคุณ", + "settingsSectionsAria": "ส่วนการตั้งค่า", + "switchThemes": "สลับระหว่างธีมสว่างและธีมมืด", + "themeSelectionAria": "การเลือกธีม", + "themeLight": "เบา", + "themeDark": "มืด", + "themeSystem": "ระบบ", + "hideHealthLogs": "ซ่อนบันทึกการตรวจสุขภาพ", + "hideHealthLogsDesc": "เมื่อเปิด ให้ระงับข้อความ [HealthCheck] ในคอนโซลเซิร์ฟเวอร์", + "promptCache": "แคชพร้อมท์", + "flushCache": "ล้างแคช", + "flushing": "กำลังฟลัชชิง…", + "size": "ขนาด", + "hits": "ฮิต", + "evictions": "การขับไล่", + "loadingCacheStats": "กำลังโหลดสถิติแคช...", + "globalProxy": "พร็อกซีทั่วโลก", + "globalProxyDesc": "กำหนดค่าพร็อกซีขาออกส่วนกลางสำหรับการเรียก API ทั้งหมด ผู้ให้บริการแต่ละราย คอมโบ และคีย์สามารถแทนที่สิ่งนี้ได้", + "noGlobalProxy": "ไม่มีการกำหนดค่าพร็อกซีส่วนกลาง", + "globalLabel": "ทั่วโลก", + "configure": "กำหนดค่า", + "globalSystemPrompt": "พร้อมท์ระบบทั่วโลก", + "systemPromptDesc": "แทรกเข้าไปในคำขอทั้งหมดในระดับพร็อกซี", + "saved": "บันทึกแล้ว", + "systemPromptPlaceholder": "เข้าสู่ระบบพร้อมท์ให้แทรกคำขอทั้งหมด...", + "systemPromptHint": "พรอมต์นี้ถูกเพิ่มไว้หน้าข้อความระบบของทุกคำขอ ใช้สำหรับคำแนะนำสากล หลักเกณฑ์ด้านความปลอดภัย หรือกฎการจัดรูปแบบการตอบกลับ", + "chars": "{count} ตัวอักษร", + "thinkingBudgetTitle": "คิดงบประมาณ", + "thinkingBudgetDesc": "ควบคุมการใช้โทเค็นการให้เหตุผลของ AI ในคำขอทั้งหมด", + "passthrough": "ทะลุผ่าน", + "passthroughDesc": "ไม่มีการเปลี่ยนแปลง — ลูกค้าควบคุมงบประมาณการคิด", + "auto": "อัตโนมัติ", + "autoDesc": "ยกเลิกการกำหนดค่าการคิดทั้งหมด — ให้ผู้ให้บริการตัดสินใจ", + "custom": "กำหนดเอง", + "customDesc": "กำหนดงบประมาณโทเค็นคงที่สำหรับคำขอทั้งหมด", + "adaptive": "ปรับตัวได้", + "adaptiveDesc": "ปรับขนาดงบประมาณตามความซับซ้อนของคำขอ", + "effortNone": "ไม่มี (0 โทเค็น)", + "effortLow": "ต่ำ (โทเค็น 1K)", + "effortMedium": "ปานกลาง (โทเค็น 10,000)", + "effortHigh": "สูง (โทเค็น 128K)", + "tokenBudget": "งบประมาณโทเค็น", + "tokens": "โทเค็น", + "baseEffortLevel": "ระดับความพยายามพื้นฐาน", + "adaptiveHint": "โหมดการปรับเปลี่ยนจะปรับขนาดจากระดับพื้นฐานนี้โดยอิงตามจำนวนข้อความ การใช้เครื่องมือ และความยาวข้อความแจ้ง", + "requireLogin": "จำเป็นต้องเข้าสู่ระบบ", + "requireLoginDesc": "เมื่อเปิด แดชบอร์ดต้องใช้รหัสผ่าน เมื่อปิด ให้เข้าถึงโดยไม่ต้องเข้าสู่ระบบ", + "currentPassword": "รหัสผ่านปัจจุบัน", + "enterCurrentPassword": "ป้อนรหัสผ่านปัจจุบัน", + "newPassword": "รหัสผ่านใหม่", + "enterNewPassword": "ป้อนรหัสผ่านใหม่", + "confirmPassword": "ยืนยันรหัสผ่านใหม่", + "confirmPasswordPlaceholder": "ยืนยันรหัสผ่านใหม่", + "passwordsNoMatch": "รหัสผ่านไม่ตรงกัน", + "passwordUpdated": "อัปเดตรหัสผ่านเรียบร้อยแล้ว", + "failedUpdatePassword": "ไม่สามารถอัปเดตรหัสผ่าน", + "errorOccurred": "เกิดข้อผิดพลาด", + "updatePassword": "อัปเดตรหัสผ่าน", + "setPassword": "ตั้งรหัสผ่าน", + "apiEndpointProtection": "การป้องกันปลายทาง API", + "requireAuthModels": "ต้องใช้คีย์ API สำหรับ /models", + "requireAuthModelsDesc": "เมื่อเปิด ตำแหน่งข้อมูล /v1/models จะส่งคืน 404 สำหรับคำขอที่ไม่ได้รับการรับรองความถูกต้อง ป้องกันการค้นพบโมเดลโดยผู้ใช้ที่ไม่ได้รับอนุญาต", + "blockedProviders": "ผู้ให้บริการที่ถูกบล็อก", + "blockedProvidersDesc": "ซ่อนผู้ให้บริการเฉพาะจากการตอบกลับ /v1/models ผู้ให้บริการที่ถูกบล็อกจะไม่ปรากฏในรายการโมเดล", + "providersBlocked": "__ผู้ให้บริการ OMNI_TOKEN_0__ ถูกบล็อกจาก /models", + "blockProviderTitle": "บล็อก {provider}", + "unblockProviderTitle": "เลิกบล็อก {provider}", + "routingStrategy": "กลยุทธ์การกำหนดเส้นทาง", + "fillFirst": "เติมก่อน", + "fillFirstDesc": "ใช้บัญชีตามลำดับความสำคัญ", + "roundRobin": "ตัวกลม โรบิน", + "roundRobinDesc": "หมุนเวียนไปตามบัญชีทั้งหมด", + "p2c": "พีทูซี", + "p2cDesc": "สุ่มเลือก 2 อัน ใช้อันที่ดีต่อสุขภาพกว่า", + "random": "สุ่ม", + "randomDesc": "บัญชีสุ่มแต่ละคำขอ", + "leastUsed": "ใช้น้อยที่สุด", + "leastUsedDesc": "เลือกบัญชีที่ใช้ล่าสุดน้อยที่สุด", + "costOpt": "การเลือกใช้ต้นทุน", + "costOptDesc": "ต้องการบัญชีที่ถูกที่สุด", + "stickyLimit": "ขีด จำกัด เหนียว", + "stickyLimitDesc": "โทรต่อบัญชีก่อนที่จะเปลี่ยน", + "modelAliases": "นามแฝงของโมเดล", + "modelAliasesDesc": "รูปแบบไวด์การ์ดเพื่อทำการแมปชื่อโมเดลใหม่ • ใช้ * และ ?", + "aliasPatternPlaceholder": "คลอด-โคลง-*", + "aliasTargetPlaceholder": "คลอด-โคลง-4-20250514", + "pattern": "รูปแบบ", + "targetModel": "โมเดลเป้าหมาย", + "add": "+ เพิ่ม", + "session": "เซสชัน", + "sessionDetailsAria": "รายละเอียดเซสชัน", + "status": "สถานะ", + "authenticated": "รับรองความถูกต้อง", + "guest": "แขก", + "loginTime": "เวลาเข้าสู่ระบบ", + "sessionAge": "อายุเซสชัน", + "browser": "เบราว์เซอร์", + "clearLocalData": "ล้างข้อมูลในเครื่อง", + "logout": "ออกจากระบบ", + "clearLocalDataConfirm": "ล้างข้อมูลในเครื่องทั้งหมดไหม นี่จะรีเซ็ตการตั้งค่าของคุณ", + "unknown": "ไม่ทราบ", + "systemActor": "ระบบ", + "ipAccessControl": "การควบคุมการเข้าถึงไอพี", + "ipAccessControlDesc": "บล็อกหรืออนุญาตที่อยู่ IP ที่ระบุ", + "ipModeDisabled": "ปิดการใช้งาน", + "ipModeBlacklist": "บัญชีดำ", + "ipModeWhitelist": "ไวท์ลิสต์", + "ipModeWhitelistPriority": "ลำดับความสำคัญ WL", + "addIpAddress": "เพิ่มที่อยู่ IP", + "ipAddressPlaceholder": "192.168.1.0/24 หรือ 10.0.*.*", + "block": "+ บล็อก", + "allow": "+ อนุญาต", + "blocked": "ถูกบล็อก ({count})", + "allowed": "อนุญาต ({count})", + "temporaryBans": "การแบนชั่วคราว ({count})", + "minLeft": "เหลืออีก {min} นาที", + "auditLog": "บันทึกการตรวจสอบ", + "searchAuditLogs": "ค้นหาบันทึกการตรวจสอบ...", + "failedLoadAuditLog": "โหลดบันทึกการตรวจสอบไม่สำเร็จ", + "noAuditEvents": "ไม่พบกิจกรรมการตรวจสอบ", + "action": "การดำเนินการ", + "actor": "นักแสดง", + "details": "รายละเอียด", + "time": "เวลา", + "fallbackChainsTitle": "โซ่สำรอง", + "fallbackChainsDesc": "กำหนดลำดับสำรองของผู้ให้บริการต่อรุ่น", + "addChain": "+ เพิ่มห่วงโซ่", + "modelName": "ชื่อรุ่น", + "modelNamePlaceholder": "คลอด-โคลง-4-20250514", + "providersCommaSeparated": "ผู้ให้บริการ (คั่นด้วยเครื่องหมายจุลภาค เรียงตามลำดับความสำคัญ)", + "providersCommaSeparatedPlaceholder": "มานุษยวิทยา openai ราศีเมถุน", + "createChain": "สร้างเชน", + "noFallbackChains": "ไม่มีโซ่ทางเลือก", + "noFallbackChainsDesc": "สร้างห่วงโซ่เพื่อกำหนดลำดับทางเลือกของผู้ให้บริการสำหรับโมเดล", + "loadingFallbackChains": "กำลังโหลดเชนสำรอง...", + "deleteChainConfirm": "ลบเชนทางเลือกสำหรับ \"{model}\" หรือไม่", + "chainCreated": "เชนที่สร้างขึ้นสำหรับ {model}", + "chainDeleted": "ลบเชนสำหรับ {model} แล้ว", + "failedCreateChain": "ไม่สามารถสร้างเชนได้", + "failedDeleteChain": "ลบเชนไม่สำเร็จ", + "deleteChain": "ลบห่วงโซ่", + "fillModelAndProviders": "กรุณากรอกชื่อรุ่นและผู้ให้บริการ", + "addAtLeastOneProvider": "เพิ่มผู้ให้บริการอย่างน้อยหนึ่งราย", + "comboDefaultsTitle": "ค่าเริ่มต้นคอมโบ", + "globalComboConfig": "การกำหนดค่าคอมโบทั่วโลก", + "defaultStrategy": "กลยุทธ์เริ่มต้น", + "defaultStrategyDesc": "นำไปใช้กับคอมโบใหม่โดยไม่มีกลยุทธ์ที่ชัดเจน", + "comboStrategyAria": "กลยุทธ์คอมโบ", + "priority": "ลำดับความสำคัญ", + "weighted": "ถ่วงน้ำหนัก", + "maxRetriesLabel": "ลองใหม่สูงสุด", + "retryDelayLabel": "ความล่าช้าในการลองอีกครั้ง (มิลลิวินาที)", + "timeoutLabel": "หมดเวลา (มิลลิวินาที)", + "healthCheck": "ตรวจสุขภาพ", + "healthCheckDesc": "ตรวจสอบความพร้อมของผู้ให้บริการล่วงหน้า", + "trackMetrics": "ติดตามตัวชี้วัด", + "trackMetricsDesc": "บันทึกเมตริกคำขอต่อคอมโบ", + "providerOverrides": "การแทนที่ผู้ให้บริการ", + "providerOverridesDesc": "แทนที่การหมดเวลาและลองใหม่ตามผู้ให้บริการ การตั้งค่าผู้ให้บริการจะแทนที่ค่าเริ่มต้นสากล", + "providerMaxRetriesAria": "{provider} ลองใหม่สูงสุด", + "providerTimeoutAria": "{provider} หมดเวลา มิลลิวินาที", + "removeProviderOverrideAria": "ลบการแทนที่ {provider} ออก", + "newProviderNamePlaceholder": "เช่น google, openai...", + "newProviderNameAria": "ชื่อผู้ให้บริการใหม่", + "retries": "ลองอีกครั้ง", + "ms": "นางสาว", + "saveComboDefaults": "บันทึกค่าเริ่มต้นคอมโบ", + "maxNestingDepth": "ความลึกของการซ้อนสูงสุด", + "concurrencyPerModel": "เห็นพ้องต้องกัน / รุ่น", + "queueTimeout": "คิวหมดเวลา (มิลลิวินาที)", + "providerProfiles": "โปรไฟล์ผู้ให้บริการ", + "providerProfilesDesc": "แยกการตั้งค่าความยืดหยุ่นสำหรับผู้ให้บริการ OAuth (ตามเซสชัน) และคีย์ API (แบบมิเตอร์) ผู้ให้บริการ OAuth มีเกณฑ์ที่เข้มงวดมากขึ้นเนื่องจากมีขีดจำกัดอัตราที่ต่ำกว่า", + "oauthProviders": "ผู้ให้บริการ OAuth", + "apiKeyProviders": "ผู้ให้บริการคีย์ API", + "transientCooldown": "คูลดาวน์ชั่วคราว", + "rateLimitCooldown": "คูลดาวน์จำกัดอัตรา", + "maxBackoffLevel": "ระดับการถอยกลับสูงสุด", + "cbThreshold": "เกณฑ์ CB", + "cbResetTime": "เวลารีเซ็ต CB", + "rateLimiting": "การจำกัดอัตรา", + "rateLimitingDesc": "ผู้ให้บริการคีย์ API จะถูกจำกัดอัตราโดยอัตโนมัติด้วยค่าเริ่มต้นที่ปลอดภัย เรียนรู้ขีดจำกัดจากส่วนหัวการตอบกลับและปรับเปลี่ยนเมื่อเวลาผ่านไป", + "defaultSafetyNet": "เครือข่ายความปลอดภัยเริ่มต้น", + "rpm": "รอบต่อนาที", + "minGap": "มิน กาป", + "maxConcurrent": "แม็กซ์พร้อมกัน", + "activeLimiters": "ตัวจำกัดที่ใช้งานอยู่", + "noActiveLimiters": "ยังไม่มีการจำกัดอัตราที่ใช้งานอยู่", + "reservoir": "อ่างเก็บน้ำ", + "running": "วิ่ง", + "queued": "เข้าคิว", + "circuitBreakers": "เซอร์กิตเบรกเกอร์", + "breakerStateClosed": "ปิดแล้ว", + "breakerStateOpen": "เปิด", + "breakerStateHalfOpen": "ครึ่งเปิด", + "tripped": "{count} สะดุด", + "healthy": "{count} สุขภาพแข็งแรง", + "resetAll": "รีเซ็ตทั้งหมด", + "noCircuitBreakers": "ยังไม่มีเซอร์กิตเบรกเกอร์ทำงาน พวกเขาจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการร้องขอไหลผ่านไปป์ไลน์คำสั่งผสม", + "failures": "{count} ล้มเหลว", + "policiesLocked": "นโยบายและตัวระบุที่ถูกล็อค", + "allOperational": "ใช้งานได้ทุกระบบ — ไม่มีการล็อกหรือเบรกเกอร์สะดุด", + "loadingPolicies": "กำลังโหลดนโยบาย...", + "lockedIdentifiers": "ตัวระบุที่ถูกล็อค", + "unlockedIdentifier": "ปลดล็อคแล้ว: {identifier}", + "sinceDate": "ตั้งแต่ {date}", + "forceUnlock": "บังคับปลดล็อค", + "unlocking": "กำลังปลดล็อค...", + "failedUnlock": "ปลดล็อคไม่สำเร็จ", + "failedLoadWithStatus": "ไม่สามารถโหลด: {status}", + "failedLoadResilience": "ไม่สามารถโหลดสถานะความยืดหยุ่นได้", + "saveFailed": "บันทึกล้มเหลว", + "resetFailed": "การรีเซ็ตล้มเหลว", + "loadingResilience": "กำลังโหลดสถานะความยืดหยุ่น...", + "retry": "ลองอีกครั้ง", + "systemStorage": "ระบบและการจัดเก็บ", + "allDataLocal": "ข้อมูลทั้งหมดที่จัดเก็บไว้ในเครื่องของคุณ", + "databasePath": "เส้นทางฐานข้อมูล", + "exportDatabase": "ส่งออกฐานข้อมูล", + "exportAll": "ส่งออกทั้งหมด (.tar.gz)", + "importDatabase": "นำเข้าฐานข้อมูล", + "confirmDbImport": "ยืนยันการนำเข้าฐานข้อมูล", + "confirmDbImportDesc": "สิ่งนี้จะแทนที่ข้อมูลปัจจุบันทั้งหมดด้วยเนื้อหาจาก {file} ข้อมูลสำรองจะถูกสร้างขึ้นโดยอัตโนมัติก่อนการนำเข้า", + "yesImport": "ใช่ นำเข้า", + "lastBackup": "การสำรองข้อมูลครั้งสุดท้าย", + "noBackupYet": "ยังไม่มีการสำรองข้อมูล", + "backupNow": "สำรองข้อมูลทันที", + "backupRestore": "สำรองและกู้คืน", + "viewBackups": "ดูข้อมูลสำรอง", + "hide": "ซ่อน", + "backupRetentionDesc": "สแน็ปช็อตฐานข้อมูลจะถูกสร้างขึ้นโดยอัตโนมัติก่อนการกู้คืนและทุกๆ 15 นาทีเมื่อข้อมูลเปลี่ยนแปลง การเก็บรักษา: การสำรองข้อมูล 24 ชั่วโมง + 30 รายวันพร้อมการหมุนเวียนอัจฉริยะ", + "loadingBackups": "กำลังโหลดข้อมูลสำรอง...", + "noBackupsYet": "ยังไม่มีข้อมูลสำรอง การสำรองข้อมูลจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อข้อมูลมีการเปลี่ยนแปลง", + "backupsAvailable": "{count} มีการสำรองข้อมูลแล้ว", + "refresh": "รีเฟรช", + "confirm": "ยืนยัน?", + "yes": "ใช่", + "no": "ไม่", + "restore": "คืนค่า", + "invalidFileType": "ประเภทไฟล์ไม่ถูกต้อง ยอมรับเฉพาะไฟล์ .sqlite เท่านั้น", + "exportFailed": "การส่งออกล้มเหลว", + "exportFailedWithError": "การส่งออกล้มเหลว: {error}", + "fullExportFailedWithError": "การส่งออกแบบเต็มล้มเหลว: {error}", + "backupCreated": "สร้างข้อมูลสำรองแล้ว: {file}", + "restoreSuccess": "ฟื้นแล้ว! การเชื่อมต่อ {connections}, โหนด {nodes}, คอมโบ {combos}, คีย์ {apiKeys} API", + "importSuccess": "นำเข้าฐานข้อมูลแล้ว! การเชื่อมต่อ {connections}, โหนด {nodes}, คอมโบ {combos}, คีย์ {apiKeys} API", + "justNow": "แค่ตอนนี้", + "minutesAgo": "{count}นาทีที่แล้ว", + "hoursAgo": "{count}ชม. ที่แล้ว", + "daysAgo": "{count}d ที่แล้ว", + "backupReasonManual": "คู่มือ", + "backupReasonPreRestore": "คืนค่าล่วงหน้า", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "ไม่มีการเปลี่ยนแปลงตั้งแต่การสำรองข้อมูลครั้งล่าสุด", + "backupFailed": "การสำรองข้อมูลล้มเหลว", + "restoreFailed": "การคืนค่าล้มเหลว", + "importFailed": "การนำเข้าล้มเหลว", + "errorDuringRestore": "เกิดข้อผิดพลาดระหว่างการคืนค่า", + "errorDuringImport": "เกิดข้อผิดพลาดระหว่างการนำเข้า", + "modelPricing": "ราคารุ่น", + "modelPricingDesc": "กำหนดอัตราต้นทุนต่อรุ่น • อัตราทั้งหมดในโทเค็น $/1M", + "providers": "ผู้ให้บริการ", + "registry": "ทะเบียน", + "priced": "ราคา", + "searchProvidersModels": "ค้นหาผู้ให้บริการหรือรุ่น...", + "showAll": "แสดงทั้งหมด", + "noProvidersMatch": "ไม่มีผู้ให้บริการที่ตรงกับการค้นหาของคุณ", + "howPricingWorks": "วิธีการทำงานของการกำหนดราคา", + "cacheWrite": "แคชเขียน", + "unsaved": "ไม่ได้บันทึก", + "resetDefaults": "รีเซ็ตค่าเริ่มต้น", + "saveProvider": "บันทึกผู้ให้บริการ", + "saving": "กำลังบันทึก...", + "model": "รุ่น", + "models": "โมเดล", + "moreProviders": "{count} ผู้ให้บริการเพิ่มเติม", + "withPricing": "โดยมีการกำหนดราคาไว้", + "policiesCircuitBreakers": "นโยบายและเซอร์กิตเบรกเกอร์", + "activeIssuesDetected": "ตรวจพบปัญหาที่ทำงานอยู่", + "off": "ปิด", + "resetPricingConfirm": "รีเซ็ตราคาทั้งหมดสำหรับ {provider} เป็นค่าเริ่มต้นหรือไม่", + "pricingDescInput": "อินพุต: โทเค็นที่ส่งไปยังโมเดล", + "pricingDescOutput": "เอาท์พุต: โทเค็นที่สร้างขึ้น", + "pricingDescCached": "แคช: อินพุตที่นำกลับมาใช้ใหม่ (~ 50% ของอัตราการอินพุต)", + "pricingDescReasoning": "การใช้เหตุผล: โทเค็นการคิด (ถอยกลับไปที่เอาต์พุต)", + "pricingDescCacheWrite": "การเขียนแคช: การสร้างรายการแคช (ถอยกลับไปที่อินพุต)", + "pricingDescFormula": "ราคา = (input × input_rate) + (output × output_rate) + (cached × cached_rate) ต่อล้านโทเค็น", + "pricingSettingsTitle": "การตั้งค่าราคา", + "totalModels": "โมเดลทั้งหมด", + "active": "ใช้งานอยู่", + "costCalculation": "การคำนวณต้นทุน", + "costCalculationDesc": "ต้นทุนจะคำนวณตามการใช้โทเค็นและอัตราราคาที่กำหนดค่าไว้สำหรับแต่ละรุ่น", + "pricingFormat": "รูปแบบการตั้งราคา", + "pricingFormatDesc": "อัตราทั้งหมดอยู่ในโทเค็น $/1M (ดอลลาร์ต่อโทเค็นหนึ่งล้าน)", + "tokenTypes": "ประเภทโทเค็น", + "inputTokenDesc": "โทเค็นพร้อมท์มาตรฐาน", + "outputTokenDesc": "โทเค็นการเสร็จสิ้น/การตอบกลับ", + "cachedTokenDesc": "โทเค็นอินพุตที่แคชไว้ (โดยทั่วไปคือ 50% ของอัตราการอินพุต)", + "reasoningTokenDesc": "โทเค็นการใช้เหตุผล/การคิดพิเศษ (ทางเลือกกลับไปยังอัตราผลลัพธ์)", + "cacheCreationTokenDesc": "โทเค็นที่ใช้ในการสร้างรายการแคช (สำรองไปยังอัตราการป้อนข้อมูล)", + "customPricingNote": "คุณสามารถแทนที่ราคาเริ่มต้นสำหรับรุ่นเฉพาะได้ การแทนที่แบบกำหนดเองจะมีลำดับความสำคัญมากกว่าการกำหนดราคาที่ตรวจพบอัตโนมัติ", + "editPricing": "แก้ไขราคา", + "viewFullDetails": "ดูรายละเอียดทั้งหมด" + }, + "translator": { + "title": "นักแปล", + "metaTitle": "สนามเด็กเล่นนักแปล | OmniRoute", + "metaDescription": "ดีบัก ทดสอบ และแสดงภาพการแปลรูปแบบ API ระหว่างผู้ให้บริการ", + "playgroundTitle": "สนามเด็กเล่นนักแปล", + "playground": "สนามเด็กเล่น", + "realtime": "กิจกรรมการแปลแบบเรียลไทม์", + "chatTester": "ผู้ทดสอบการแชท", + "testBench": "ม้านั่งทดสอบ", + "liveMonitor": "การตรวจสอบสด", + "modeDescriptionPlayground": "วางเนื้อหาคำขอ API ใดๆ และดูว่า OmniRoute แปลระหว่างรูปแบบของผู้ให้บริการอย่างไร (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "ส่งคำขอแชทจริงผ่าน OmniRoute และตรวจสอบการเดินทางไปกลับทั้งหมด: อินพุต คำขอที่แปล การตอบกลับของผู้ให้บริการ และเอาต์พุตที่แปล", + "modeDescriptionTestBench": "เรียกใช้สถานการณ์ที่กำหนดไว้ล่วงหน้าและเปรียบเทียบความเข้ากันได้ระหว่างผู้ให้บริการและรุ่นต่างๆ", + "modeDescriptionLiveMonitor": "ดูกิจกรรมการแปลแบบเรียลไทม์เมื่อมีคำขอไหลผ่าน OmniRoute", + "modeDescriptionFallback": "แก้ไขข้อบกพร่อง ทดสอบ และเห็นภาพว่า OmniRoute แปลคำขอ API ระหว่างผู้ให้บริการอย่างไร", + "recentTranslations": "การแปลล่าสุด", + "noTranslations": "ยังไม่มีคำแปล", + "source": "แหล่งที่มา", + "target": "เป้าหมาย", + "time": "เวลา", + "model": "รุ่น", + "status": "สถานะ", + "latency": "เวลาแฝง", + "totalTranslations": "การแปลทั้งหมด", + "successful": "ประสบความสำเร็จ", + "errors": "ข้อผิดพลาด", + "avgLatency": "เวลาแฝงเฉลี่ย", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "ถ่ายทอดสด — รีเฟรชอัตโนมัติ", + "paused": "หยุดชั่วคราว", + "eventsAppearHint": "กิจกรรมการแปลจะปรากฏที่นี่เมื่อมีการร้องขอผ่าน OmniRoute ใช้วิธีใดวิธีหนึ่งเหล่านี้เพื่อสร้างเหตุการณ์:", + "chatTesterTab": "แท็บเครื่องมือทดสอบการแชท", + "testBenchTab": "แท็บม้านั่งทดสอบ", + "externalApiCalls": "การเรียก API ภายนอก", + "ideCliIntegrations": "การบูรณาการ IDE/CLI", + "inMemoryNote": "หมายเหตุ: เหตุการณ์จะถูกจัดเก็บไว้ในหน่วยความจำและรีเซ็ตเมื่อเซิร์ฟเวอร์รีสตาร์ท", + "ok": "ตกลง", + "errorShort": "ผิดพลาด", + "formatConverter": "ตัวแปลงรูปแบบ", + "formatConverterDescription": "วางหรือพิมพ์เนื้อหาคำขอ JSON นักแปลจะตรวจจับรูปแบบต้นฉบับโดยอัตโนมัติและแปลงเป็นรูปแบบเป้าหมาย ใช้สิ่งนี้เพื่อแก้ไขวิธีที่ OmniRoute แปลคำขอระหว่างรูปแบบต่างๆ (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "input": "อินพุต", + "output": "เอาท์พุต", + "auto": "อัตโนมัติ", + "swapFormats": "สลับรูปแบบ", + "translateAction": "แปล", + "clear": "ชัดเจน", + "inputPlaceholder": "วางเนื้อหาคำขอที่นี่หรือเลือกเทมเพลตด้านล่าง...", + "exampleTemplates": "เทมเพลตตัวอย่าง", + "exampleTemplatesHint": "— คลิกเพื่อโหลด", + "templateLoadHint": "เทมเพลตโหลดคำขอในรูปแบบ {format} เปลี่ยนรูปแบบต้นฉบับเพื่อโหลดในรูปแบบอื่น", + "compatibilityTester": "เครื่องทดสอบความเข้ากันได้", + "compatibilityReport": "รายงานความเข้ากันได้", + "testBenchDescription": "เรียกใช้สถานการณ์ที่กำหนดไว้ล่วงหน้า (Simple Chat, Tool Calling ฯลฯ) เพื่อตรวจสอบการแปลและความเข้ากันได้ของผู้ให้บริการ เลือกรูปแบบต้นทางและผู้ให้บริการเป้าหมาย จากนั้นทำการทดสอบทั้งหมดเพื่อดูเปอร์เซ็นต์ความเข้ากันได้ ใช้สิ่งนี้เพื่อค้นหาฟีเจอร์ที่ใช้ได้กับผู้ให้บริการ", + "targetProvider": "ผู้ให้บริการเป้าหมาย", + "runAllTests": "เรียกใช้การทดสอบทั้งหมด", + "runTest": "รันการทดสอบ", + "reRun": "วิ่งอีกครั้ง", + "running": "กำลังวิ่ง...", + "passed": "ผ่านไป", + "failed": "ล้มเหลว", + "passedIconLabel": "✅ผ่าน", + "chunks": "ชิ้น", + "scenarioSimpleChat": "แชทง่ายๆ", + "scenarioToolCalling": "การเรียกเครื่องมือ", + "scenarioMultiTurn": "หลายเลี้ยว", + "scenarioThinking": "กำลังคิด", + "scenarioSystemPrompt": "พร้อมท์ระบบ", + "scenarioStreaming": "สตรีมมิ่ง", + "templateNames": { + "simple-chat": "แชทง่ายๆ", + "tool-calling": "การเรียกเครื่องมือ", + "multi-turn": "หลายเลี้ยว", + "thinking": "กำลังคิด", + "system-prompt": "พร้อมท์ระบบ", + "streaming": "สตรีมมิ่ง" + }, + "templateDescriptions": { + "simple-chat": "ข้อความพื้นฐาน", + "tool-calling": "การเรียกใช้ฟังก์ชัน/เครื่องมือ", + "multi-turn": "การสนทนากับประวัติศาสตร์", + "thinking": "ขยายการคิด/การใช้เหตุผล", + "system-prompt": "คำแนะนำระบบที่ซับซ้อน", + "streaming": "คำขอสตรีม SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "คุณเป็นผู้ช่วยที่เป็นประโยชน์", + "userGreeting": "สวัสดี! วันนี้คุณเป็นอย่างไรบ้าง?" + }, + "toolCalling": { + "userWeather": "สภาพอากาศในเซาเปาโลเป็นอย่างไร?", + "toolDescription": "รับสภาพอากาศปัจจุบันสำหรับสถานที่", + "cityNameDescription": "ชื่อเมือง" + }, + "multiTurn": { + "system": "คุณเป็นผู้ช่วยเขียนโค้ด", + "userInitial": "เขียนฟังก์ชันเพื่อจัดเรียงอาร์เรย์ใน Python", + "assistantExample": "ต่อไปนี้เป็นฟังก์ชันการเรียงลำดับอย่างง่าย:\n\n```หลาม\ndef sort_array(arr):\n กลับเรียงลำดับ(arr)\n```", + "userFollowUp": "ตอนนี้ให้เรียงลำดับจากมากไปน้อย" + }, + "thinking": { + "question": "ผลรวมของจำนวนเฉพาะ 100 ตัวแรกเป็นเท่าใด?" + }, + "systemPrompt": { + "systemInstruction": "คุณเป็นวิศวกรซอฟต์แวร์อาวุโสที่เชี่ยวชาญด้านระบบแบบกระจาย ตอบคำถามอย่างกระชับโดยใช้แนวทางปฏิบัติที่ดีที่สุดในอุตสาหกรรม ให้ตัวอย่างโค้ดเสมอเมื่อเกี่ยวข้อง จัดรูปแบบคำตอบของคุณโดยใช้มาร์กดาวน์", + "question": "ฉันจะใช้รูปแบบเซอร์กิตเบรกเกอร์ได้อย่างไร" + }, + "streaming": { + "prompt": "เล่าเรื่องสั้นเกี่ยวกับหุ่นยนต์ที่หัดวาดภาพให้ฉันฟังหน่อย" + } + }, + "openaiCompatibleLabel": "รองรับ OpenAI", + "anthropicCompatibleLabel": "เข้ากันได้กับมานุษยวิทยา", + "noTemplateForFormat": "ไม่มีเทมเพลตสำหรับรูปแบบนี้", + "translationFailed": "การแปลล้มเหลว: {error}", + "pipelineDebugger": "ไปป์ไลน์ดีบักเกอร์", + "translationPipeline": "ไปป์ไลน์การแปล", + "pipelineVisualization": "การแสดงภาพไปป์ไลน์", + "pipelineVisualizationHint": "ส่งข้อความเพื่อดูว่าคำขอของคุณดำเนินการผ่านการตรวจหา → การแปล → การโทรของผู้ให้บริการอย่างไร", + "chatTesterDescription": "ส่งข้อความเป็นรูปแบบไคลเอนต์เฉพาะและตรวจสอบแต่ละขั้นตอนของไปป์ไลน์การแปล", + "chatTesterFlow": "คำขอของลูกค้า → การตรวจจับรูปแบบ → OpenAI Intermediate → รูปแบบผู้ให้บริการ → การตอบสนอง", + "clickStepToInspect": "คลิกขั้นตอนใดก็ได้เพื่อตรวจสอบข้อมูลในขั้นตอนนั้น", + "clientFormat": "รูปแบบไคลเอนต์", + "provider": "ผู้ให้บริการ", + "modelPlaceholder": "เลือกหรือพิมพ์ชื่อรุ่น...", + "sendMessageToSeePipeline": "ส่งข้อความเพื่อดูไปป์ไลน์การแปล", + "chatMessageHintPrefix": "ข้อความของคุณจะถูกจัดรูปแบบเป็น", + "chatMessageHintSuffix": "คำขอ แปลผ่านไปป์ไลน์ และส่งไปยังผู้ให้บริการที่เลือก", + "youWithFormat": "คุณ ({format})", + "assistant": "ผู้ช่วย", + "typeMessage": "พิมพ์ข้อความ...", + "send": "ส่ง", + "clientRequest": "คำขอของลูกค้า", + "clientRequestDescription": "เนื้อหาคำขอตามที่ลูกค้าของคุณจะส่ง", + "formatDetected": "ตรวจพบรูปแบบ", + "formatDetectedDescription": "OmniRoute ตรวจจับรูปแบบ API จากโครงสร้างคำขอโดยอัตโนมัติ", + "openaiIntermediate": "OpenAI ระดับกลาง", + "openaiIntermediateDescription": "รูปแบบทั้งหมดจะถูกทำให้เป็นมาตรฐานเป็นรูปแบบ OpenAI ก่อน (สะพานสากล)", + "providerFormat": "รูปแบบผู้ให้บริการ", + "providerFormatDescription": "รูปแบบ OpenAI ได้รับการแปลเป็นรูปแบบดั้งเดิมของผู้ให้บริการ", + "providerResponse": "การตอบสนองของผู้ให้บริการ", + "providerResponseRawDescription": "การตอบสนองดิบจาก API ของผู้ให้บริการ", + "providerResponseSseDescription": "สตรีม SSE แบบดิบจาก API ของผู้ให้บริการ", + "unexpectedError": "เกิดข้อผิดพลาดที่ไม่คาดคิด", + "error": "เกิดข้อผิดพลาด", + "errorMessage": "ข้อผิดพลาด: {message}", + "requestFailed": "คำขอล้มเหลว", + "noTextExtracted": "(ไม่มีการแยกข้อความ)", + "liveMonitorDescriptionPrefix": "แสดงเหตุการณ์การแปลเมื่อมีการเรียก API ไหลผ่าน OmniRoute เหตุการณ์มาจากบัฟเฟอร์ในหน่วยความจำ (รีเซ็ตเมื่อรีสตาร์ท) ใช้", + "liveMonitorDescriptionSuffix": "หรือการเรียก API ภายนอกเพื่อสร้างเหตุการณ์" + }, + "usage": { + "title": "การใช้งาน", + "loggerTab": "คนตัดไม้", + "proxyTab": "หนังสือมอบฉันทะ", + "budgetManagement": "การจัดการงบประมาณ", + "budgetSaved": "บันทึกขีดจำกัดงบประมาณแล้ว", + "budgetSaveFailed": "ไม่สามารถบันทึกงบประมาณได้", + "loadingBudgetData": "กำลังโหลดข้อมูลงบประมาณ...", + "noApiKeysTitle": "ไม่มีคีย์ API", + "noApiKeysDescription": "เพิ่มคีย์ API ก่อนเพื่อตั้งค่าขีดจำกัดงบประมาณ", + "apiKey": "คีย์ API", + "todaysSpend": "การใช้จ่ายวันนี้", + "thisMonth": "เดือนนี้", + "setLimits": "ตั้งค่าขีดจำกัด", + "dailyLimitUsd": "ขีดจำกัดรายวัน (USD)", + "monthlyLimitUsd": "ขีดจำกัดรายเดือน (USD)", + "warningThresholdPercent": "เกณฑ์การเตือน (%)", + "dailyLimitPlaceholder": "เช่น 5.00 น", + "monthlyLimitPlaceholder": "เช่น 50.00 น", + "warningThresholdPlaceholder": "80", + "saveLimits": "บันทึกขีดจำกัด", + "budgetOk": "งบประมาณตกลง — เหลือ {remaining}", + "budgetExceeded": "เกินงบประมาณ — คำขออาจถูกบล็อก", + "totalRequests": "คำขอทั้งหมด", + "noDataYet": "ยังไม่มีข้อมูล", + "latency": "เวลาแฝง", + "latencyP50": "หน้า 50", + "latencyP95": "หน้า 95", + "latencyP99": "หน้า 99", + "promptCache": "แคชพร้อมท์", + "systemHealth": "สุขภาพของระบบ", + "entries": "รายการ", + "activeCount": "{count} ใช้งานอยู่", + "openCircuitBreakersDetected": "ตรวจพบเบรกเกอร์วงจรเปิด", + "hitRate": "อัตราการเข้าชม", + "hitsMisses": "ฮิต / พลาด", + "circuitBreakers": "เซอร์กิตเบรกเกอร์", + "lockedIPs": "IP ที่ถูกล็อค", + "lockoutsAutoRefreshHint": "การล็อคขีดจำกัดอัตราต่อรุ่น • รีเฟรชอัตโนมัติ 10 วินาที", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} เหลือแล้ว", + "howItWorks": "มันทำงานอย่างไร", + "howItWorksSubtitle": "เรียนรู้ว่าการประเมินผลตรวจสอบการตอบสนอง LLM ของคุณอย่างไร", + "define": "กำหนด", + "defineStepDescription": "สร้างกรณีทดสอบพร้อมข้อความแจ้งอินพุตและเกณฑ์ผลลัพธ์ที่คาดหวังโดยใช้กลยุทธ์ เช่น ประกอบด้วย regex หรือการจับคู่แบบตรงทั้งหมด", + "run": "วิ่ง", + "runStepDescription": "ดำเนินการกรณีทดสอบกับตำแหน่งข้อมูล LLM ของคุณผ่าน OmniRoute แต่ละกรณีจะถูกส่งเป็นคำขอ API จริง", + "evaluate": "ประเมินผล", + "evaluateStepDescription": "คำตอบจะถูกเปรียบเทียบกับเกณฑ์ที่คาดหวัง ดูผ่าน/ไม่ผ่านสำหรับแต่ละกรณีพร้อมตัววัดเวลาแฝงและข้อเสนอแนะโดยละเอียด", + "evalSuites": "ห้องประเมินผล", + "evalSuitesHint": "คลิกชุดเพื่อดูกรณีทดสอบ จากนั้นเรียกใช้เพื่อประเมินตำแหน่งข้อมูล LLM ของคุณ", + "evalsLoading": "กำลังโหลดห้องสวีท eval...", + "noEvalSuitesFound": "ไม่พบห้องสวีท Eval", + "noEvalSuitesDescription": "ชุด Eval สามารถกำหนดได้ผ่าน API หรือในโค้ด พวกเขาทดสอบผลลัพธ์ของโมเดลกับผลลัพธ์ที่คาดหวังโดยใช้กลยุทธ์ต่างๆ เช่น ประกอบด้วย regex การจับคู่แบบตรงทั้งหมด และฟังก์ชันที่กำหนดเอง", + "columnCase": "กรณี", + "columnStatus": "สถานะ", + "columnLatency": "เวลาแฝง", + "columnDetails": "รายละเอียด", + "columnModel": "รุ่น", + "columnStrategy": "กลยุทธ์", + "columnExpected": "คาดว่า", + "statsSuites": "ห้องสวีท", + "statsTestCases": "กรณีทดสอบ", + "statsModels": "โมเดล", + "statsCoverage": "ความคุ้มครอง", + "statsStrategiesCount": "{count} กลยุทธ์", + "evaluationStrategies": "กลยุทธ์การประเมินผล", + "modelsUnderTest": "รุ่นภายใต้การทดสอบ", + "searchSuitesPlaceholder": "ค้นหาห้องชุด...", + "passSuffix": "ผ่าน", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "วิ่งเอวาล", + "runningProgress": "กำลังรัน {current}/{total}...", + "passRate": "อัตราการผ่าน", + "summaryBreakdown": "{passed} ผ่านไป · {failed} ล้มเหลว · รวม {total}", + "passedIconLabel": "✅ผ่าน", + "failedIconLabel": "❌ล้มเหลว", + "detailsContains": "ประกอบด้วย: \"{term}\"", + "detailsRegex": "Regex: {pattern}", + "detailsExpected": "ต้องการ: \"{expected}\"", + "noResultsYet": "ยังไม่มีผลลัพธ์", + "testCasesCount": "กรณีทดสอบ ({count})", + "noTestCasesDefined": "ไม่มีการกำหนดกรณีทดสอบ", + "runEvalHint": "คลิก \"เรียกใช้การประเมิน\" เพื่อดำเนินการทุกกรณีกับตำแหน่งข้อมูล LLM ของคุณ การทดสอบแต่ละครั้งจะส่งคำขอจริงผ่าน OmniRoute", + "notifyNoTestCases": "ไม่มีกรณีทดสอบที่กำหนดไว้สำหรับชุดนี้", + "notifyAllCasesPassed": "{total} เคสทั้งหมดผ่าน ✅", + "notifySomeCasesFailed": "{passed}/{total} ผ่านไป {failed} ล้มเหลว", + "notifyEvalRunFailed": "การเรียกใช้การประเมินล้มเหลว", + "notifyEvalTitle": "คะแนน: {name}", + "modelEvals": "การประเมินแบบจำลอง", + "evalsHeroDescription": "ทดสอบและตรวจสอบตำแหน่งข้อมูล LLM ของคุณโดยเรียกใช้ชุดการประเมินที่กำหนดไว้ล่วงหน้า แต่ละชุดมีกรณีทดสอบที่ส่งข้อความแจ้งจริงผ่าน OmniRoute และเปรียบเทียบการตอบสนองกับเกณฑ์ที่คาดหวัง — ช่วยให้คุณตรวจจับการถดถอย เปรียบเทียบแบบจำลอง และรับประกันคุณภาพการตอบสนองระหว่างผู้ให้บริการ", + "qualityValidation": "การตรวจสอบคุณภาพ", + "modelComparison": "การเปรียบเทียบแบบจำลอง", + "regressionDetection": "การตรวจจับการถดถอย", + "latencyBenchmarks": "เกณฑ์มาตรฐานความหน่วง", + "modelLockouts": "การล็อคโมเดล", + "noLockouts": "ไม่มีโมเดลที่ถูกล็อคอยู่ในขณะนี้", + "activeSessions": "เซสชันที่ใช้งานอยู่", + "noSessions": "ไม่มีเซสชันที่ใช้งานอยู่", + "sessionsHint": "เซสชันปรากฏเป็นคำขอที่ไหลผ่านพร็อกซี", + "sessionsTrackedHint": "ติดตามผ่านการร้องขอลายนิ้วมือ • รีเฟรชอัตโนมัติ 5 วินาที", + "session": "เซสชัน", + "age": "อายุ", + "requests": "คำขอ", + "connection": "การเชื่อมต่อ", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}วินาที", + "durationMinutesShort": "{value}ม", + "durationHoursShort": "{value}ชม", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "ข้อจำกัดของผู้ให้บริการ", + "noProviders": "ไม่มีผู้ให้บริการที่เชื่อมต่อ", + "connectProvidersForQuota": "เชื่อมต่อกับผู้ให้บริการด้วย OAuth เพื่อติดตามขีดจำกัดโควต้า API และการใช้งานของคุณ", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(กรองจาก {count})", + "autoRefresh": "รีเฟรชอัตโนมัติ", + "refreshAll": "รีเฟรชทั้งหมด", + "loadingQuotas": "กำลังโหลด...", + "account": "บัญชี", + "modelQuotas": "โควต้าโมเดล", + "lastUsed": "ใช้ล่าสุด", + "actions": "การดำเนินการ", + "refreshQuota": "รีเฟรชโควต้า", + "today": "วันนี้", + "tomorrow": "พรุ่งนี้", + "dayTimeFormat": "{day}, {time}", + "inDuration": "ใน {duration}", + "notApplicable": "ไม่มี", + "rawPlanWithValue": "แผนดิบ: {plan}", + "noPlanFromProvider": "ไม่มีแผนจากผู้ให้บริการ", + "noQuotaData": "ไม่มีข้อมูลโควต้า", + "noQuotaDataAvailable": "ไม่มีข้อมูลโควต้า", + "noAccountsForTierFilter": "ไม่พบบัญชีสำหรับตัวกรองระดับ", + "tierAll": "ทั้งหมด", + "tierEnterprise": "องค์กร", + "tierTeam": "ทีม", + "tierBusiness": "ธุรกิจ", + "tierUltra": "อัลตร้า", + "tierPro": "โปร", + "tierPlus": "บวก", + "tierFree": "ฟรี", + "tierUnknown": "ไม่ทราบ" + }, + "modals": { + "waitingAuth": "รอการอนุญาต", + "verificationUrl": "URL การยืนยัน", + "yourCode": "รหัสของคุณ", + "remoteAccess": "การเข้าถึงระยะไกล:", + "connectedSuccess": "เชื่อมต่อสำเร็จ!", + "connectionFailed": "การเชื่อมต่อล้มเหลว", + "chooseAuthMethod": "เลือกวิธีการรับรองความถูกต้องของคุณ:", + "awsBuilderId": "รหัสตัวสร้าง AWS", + "awsIamIdentity": "ศูนย์ข้อมูลประจำตัว AWS IAM", + "googleAccount": "บัญชี Google", + "githubAccount": "บัญชี GitHub", + "importToken": "นำเข้าโทเค็น", + "pasteToken": "วางโทเค็นการรีเฟรชจาก Kiro IDE", + "awsRegion": "ภูมิภาค AWS", + "autoDetecting": "กำลังตรวจจับโทเค็นอัตโนมัติ...", + "readingFromCache": "อ่านจากแคช AWS SSO", + "readingFromCursor": "อ่านจากฐานข้อมูล Cursor IDE", + "initializing": "กำลังเริ่มต้น...", + "pricingConfig": "การกำหนดค่าราคา", + "loadingPricing": "กำลังโหลดข้อมูลราคา...", + "pricingRatesFormat": "รูปแบบอัตราราคา", + "noPricingData": "ไม่มีข้อมูลราคา", + "noModelsFound": "ไม่พบรุ่น" + }, + "loggers": { + "allProviders": "ผู้ให้บริการทั้งหมด", + "allModels": "ทุกรุ่น", + "allAccounts": "บัญชีทั้งหมด", + "allApiKeys": "คีย์ API ทั้งหมด", + "allTypes": "ทุกประเภท", + "allLevels": "ทุกระดับ", + "modelAZ": "รุ่น A-Z", + "modelZA": "รุ่น Z-A", + "loadingLogs": "กำลังโหลดบันทึก...", + "loadingProxyLogs": "กำลังโหลดบันทึกพร็อกซี...", + "noLogEntries": "ไม่พบรายการบันทึก", + "noPayloadData": "ไม่มีข้อมูลเพย์โหลดสำหรับรายการบันทึกนี้", + "proxyEvent": "เหตุการณ์พร็อกซี", + "proxy": "หนังสือมอบฉันทะ", + "level": "ระดับ", + "directNative": "โดยตรง (เนทีฟ)", + "combo": "คอมโบ", + "inputTokens": "ฉัน:", + "outputTokens": "โอ้:" + }, + "stats": { + "usageOverview": "ภาพรวมการใช้งาน", + "outputTokens": "โทเค็นเอาท์พุต", + "totalCost": "ต้นทุนรวม", + "usageByModel": "การใช้งานตามรุ่น", + "usageByAccount": "การใช้งานตามบัญชี", + "failedToLoad": "โหลดสถิติการใช้งานไม่สำเร็จ", + "tokenHealth": "โทเค็นสุขภาพ", + "totalOAuth": "OAuth ทั้งหมด", + "healthy": "ดีต่อสุขภาพ", + "warning": "คำเตือน", + "errored": "เกิดข้อผิดพลาด", + "lastCheck": "ตรวจสอบครั้งสุดท้าย", + "noData": "ไม่มีข้อมูล", + "share": "แบ่งปัน", + "unableToLoad": "ไม่สามารถโหลดเมตริกของระบบได้", + "product": "สินค้า", + "resources": "ทรัพยากร", + "company": "บริษัท" + }, + "auth": { + "welcome": "ยินดีต้อนรับ", + "signIn": "เข้าสู่ระบบ", + "enterPassword": "ป้อนรหัสผ่านของคุณเพื่อดำเนินการต่อ", + "password": "รหัสผ่าน", + "unifiedProxy": "พร็อกซี AI API แบบรวม", + "unifiedAiApiProxy": "พร็อกซี AI API แบบรวม", + "unifiedAiApiProxyDesc": "กำหนดเส้นทางคำขอไปยังผู้ให้บริการ AI หลายรายผ่านจุดสิ้นสุดเดียว โหลดบาลานซ์ การเฟลโอเวอร์ และการติดตามการใช้งานในตัว", + "passwordNotEnabled": "ไม่ได้เปิดใช้งานการป้องกันด้วยรหัสผ่าน", + "loading": "กำลังโหลด...", + "invalidPassword": "รหัสผ่านไม่ถูกต้อง", + "errorOccurredRetry": "เกิดข้อผิดพลาด โปรดลองอีกครั้ง", + "configureInstance": "มากำหนดค่าอินสแตนซ์ OmniRoute ของคุณกันดีกว่า", + "runOnboardingWizard": "เรียกใช้ตัวช่วยสร้างการเริ่มต้นใช้งานเพื่อตั้งค่ารหัสผ่านของคุณและเชื่อมต่อกับผู้ให้บริการ AI รายแรกของคุณ", + "startOnboarding": "เริ่มการเริ่มต้นใช้งาน", + "secureYourInstance": "รักษาความปลอดภัยให้กับอินสแตนซ์ของคุณ", + "setPasswordDescription": "ตั้งรหัสผ่านเพื่อปกป้องแดชบอร์ดของคุณและรักษาความปลอดภัยจุดสิ้นสุด API ของคุณจากการเข้าถึงที่ไม่ได้รับอนุญาต", + "configurePassword": "กำหนดค่ารหัสผ่าน", + "continue": "ดำเนินการต่อ", + "windowWillClose": "หน้าต่างนี้จะปิดโดยอัตโนมัติ...", + "closeTabNow": "คุณสามารถปิดแท็บนี้ได้ทันที", + "copyUrlManual": "โปรดคัดลอก URL จากแถบที่อยู่และวางลงในแอปพลิเคชัน", + "accessDeniedDescription": "คุณไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรนี้ ตรวจสอบคีย์ API ของคุณหรือติดต่อผู้ดูแลระบบ", + "goToDashboard": "ไปที่แดชบอร์ด", + "featureMultiProviderTitle": "ผู้ให้บริการหลายราย", + "featureMultiProviderDesc": "OpenAI, มานุษยวิทยา, Google และอื่นๆ", + "featureLoadBalancingTitle": "โหลดบาลานซ์", + "featureLoadBalancingDesc": "กระจายคำขออย่างชาญฉลาด", + "featureUsageTrackingTitle": "การติดตามการใช้งาน", + "featureUsageTrackingDesc": "ตรวจสอบต้นทุนและโทเค็น", + "resetPassword": "รีเซ็ตรหัสผ่าน", + "resetDescription": "เลือกวิธีในการกู้คืนการเข้าถึงแดชบอร์ดของคุณ", + "stopServer": "หยุดเซิร์ฟเวอร์ OmniRoute", + "processing": "กำลังประมวลผล...", + "pleaseWait": "โปรดรอในขณะที่เราดำเนินการอนุมัติให้เสร็จสิ้น", + "authSuccess": "การอนุญาตสำเร็จ!", + "copyUrl": "คัดลอก URL นี้", + "accessDenied": "การเข้าถึงถูกปฏิเสธ", + "methodCliTitle": "วิธีที่ 1: รีเซ็ต CLI", + "methodCliDescription": "รันคำสั่งต่อไปนี้บนเซิร์ฟเวอร์ที่ OmniRoute กำลังทำงานอยู่:", + "methodCliHint": "สิ่งนี้จะแจ้งให้คุณตั้งรหัสผ่านใหม่ เซิร์ฟเวอร์จะต้องถูกหยุดก่อน", + "methodManualTitle": "วิธีที่ 2: รีเซ็ตด้วยตนเอง", + "methodManualDescription": "ลบรหัสผ่านออกจากฐานข้อมูลและตั้งรหัสผ่านใหม่เมื่อเริ่มต้นระบบ:", + "setPasswordInYour": "ตั้งรหัสผ่านใหม่ในของคุณ", + "fileLabelSuffix": "ไฟล์:", + "newPasswordPlaceholder": "your_new_password", + "deleteSettingsFile": "ลบ", + "orRemovePasswordHashField": "หรือลบฟิลด์รหัสผ่านแฮช", + "restartServerWithNewPassword": "รีสตาร์ทเซิร์ฟเวอร์ - จะใช้รหัสผ่านใหม่", + "backToLogin": "กลับไปที่เข้าสู่ระบบ", + "forgotPassword": "ลืมรหัสผ่าน?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "นำทางไปที่บ้าน", + "toggleMenu": "สลับเมนู", + "featuresLink": "คุณสมบัติ", + "docsLink": "เอกสาร", + "github": "GitHub", + "versionLive": "v1.0 ใช้งานได้แล้ว", + "oneEndpoint": "จุดสิ้นสุดหนึ่งสำหรับ", + "allProviders": "ผู้ให้บริการ AI ทั้งหมด", + "heroDescription": "พร็อกซีปลายทาง AI พร้อมเว็บแดชบอร์ด - พอร์ต JavaScript ของ CLIProxyAPI ทำงานได้อย่างราบรื่นกับ Claude Code, OpenAI Codex, Cline, RooCode และเครื่องมือ CLI อื่นๆ", + "getStarted": "เริ่มต้นเลย", + "viewOnGithub": "ดูบน GitHub", + "powerfulFeatures": "คุณสมบัติอันทรงพลัง", + "featuresSubtitle": "ทุกสิ่งที่คุณต้องการในการจัดการโครงสร้างพื้นฐาน AI ของคุณในที่เดียว สร้างขึ้นเพื่อรองรับขนาด", + "featureUnifiedEndpointTitle": "จุดสิ้นสุดแบบรวม", + "featureUnifiedEndpointDesc": "เข้าถึงผู้ให้บริการทั้งหมดผ่าน URL API มาตรฐานเดียว", + "featureEasySetupTitle": "ติดตั้งง่าย", + "featureEasySetupDesc": "เริ่มต้นใช้งานภายในไม่กี่นาทีด้วยคำสั่ง npx", + "featureModelFallbackTitle": "โมเดลสำรอง", + "featureModelFallbackDesc": "สลับผู้ให้บริการโดยอัตโนมัติเมื่อเกิดความล้มเหลวหรือเวลาแฝงสูง", + "featureUsageTrackingTitle": "การติดตามการใช้งาน", + "featureUsageTrackingDesc": "การวิเคราะห์โดยละเอียดและการตรวจสอบต้นทุนในทุกรุ่น", + "featureOAuthApiKeysTitle": "OAuth และคีย์ API", + "featureOAuthApiKeysDesc": "จัดการข้อมูลรับรองอย่างปลอดภัยในห้องนิรภัยเดียว", + "featureCloudSyncTitle": "การซิงค์บนคลาวด์", + "featureCloudSyncDesc": "ซิงค์การกำหนดค่าของคุณระหว่างอุปกรณ์ต่างๆ ได้ทันที", + "featureCliSupportTitle": "การสนับสนุน CLI", + "featureCliSupportDesc": "ใช้งานได้กับ Claude Code, Codex, Cline, Cursor และอื่นๆ", + "featureDashboardTitle": "แดชบอร์ด", + "featureDashboardDesc": "แดชบอร์ดแบบภาพสำหรับการวิเคราะห์ปริมาณข้อมูลแบบเรียลไทม์", + "howItWorks": "OmniRoute ทำงานอย่างไร", + "howItWorksDescription": "ข้อมูลจะไหลอย่างราบรื่นจากแอปพลิเคชันของคุณผ่านเลเยอร์การกำหนดเส้นทางอัจฉริยะของเราไปยังผู้ให้บริการที่ดีที่สุดสำหรับงาน", + "howItWorksStep1Title": "1. CLI และ SDK", + "howItWorksStep1Description": "คำขอของคุณเริ่มต้นจากเครื่องมือที่คุณชื่นชอบหรือ SDK แบบรวมของเรา เพียงเปลี่ยน URL ฐาน", + "howItWorksStep2Title": "2. ศูนย์กลาง OmniRoute", + "howItWorksStep2Description": "กลไกของเราจะวิเคราะห์พร้อมท์ ตรวจสอบความสมบูรณ์ของผู้ให้บริการ และเส้นทางเพื่อดูเวลาแฝงหรือต้นทุนที่ต่ำที่สุด", + "howItWorksStep3Title": "3. ผู้ให้บริการ AI", + "howItWorksStep3Description": "คำขอนี้ดำเนินการโดย OpenAI, Anthropic, Gemini หรืออื่นๆ ทันที", + "getStartedIn30Seconds": "เริ่มต้นใน 30 วินาที", + "getStartedDescription": "ติดตั้ง OmniRoute กำหนดค่าผู้ให้บริการของคุณผ่านแดชบอร์ดเว็บ และเริ่มกำหนดเส้นทางคำขอ AI", + "installOmniRoute": "ติดตั้ง OmniRoute", + "installStepDescription": "รันคำสั่ง npx เพื่อเริ่มเซิร์ฟเวอร์ทันที", + "openDashboard": "เปิดแดชบอร์ด", + "openDashboardStepDescription": "กำหนดค่าผู้ให้บริการและคีย์ API ผ่านทางเว็บอินเตอร์เฟส", + "routeRequests": "คำขอเส้นทาง", + "routeRequestsStepDescription": "ชี้เครื่องมือ CLI ของคุณไปที่ {endpoint}", + "terminal": "สถานีปลายทาง", + "copy": "คัดลอก", + "copied": "✓ คัดลอกแล้ว", + "startingOmniRoute": "กำลังเริ่ม OmniRoute...", + "serverRunningOnLabel": "เซิร์ฟเวอร์กำลังทำงานอยู่", + "dashboardLabel": "แดชบอร์ด", + "readyToRoute": "พร้อมลุย! ✓", + "configureProvidersNote": "แปลก กำหนดค่าผู้ให้บริการในแดชบอร์ดหรือใช้ตัวแปรสภาพแวดล้อม", + "dataLocation": "ตำแหน่งข้อมูล:", + "dataLocationMacLinux": " macOS/ลินุกซ์:", + "dataLocationWindows": " หน้าต่าง:", + "product": "สินค้า", + "dashboardLink": "แดชบอร์ด", + "changelog": "บันทึกการเปลี่ยนแปลง", + "resources": "ทรัพยากร", + "documentation": "เอกสารประกอบ", + "npm": "เอ็นพีเอ็ม", + "legal": "กฎหมาย", + "mitLicense": "ใบอนุญาตเอ็มไอที", + "footerTagline": "จุดสิ้นสุดแบบรวมสำหรับการสร้าง AI เชื่อมต่อ กำหนดเส้นทาง และจัดการผู้ให้บริการ AI ของคุณได้อย่างง่ายดาย", + "copyright": "© {year} OmniRoute สงวนลิขสิทธิ์.", + "flowToolClaudeCode": "คล็อด โค้ด", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "ไคลน์", + "flowToolCursor": "เคอร์เซอร์", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "มานุษยวิทยา", + "flowProviderGemini": "ราศีเมถุน", + "flowProviderGithubCopilot": "นักบิน GitHub", + "interactiveDiagram": "แผนภาพเชิงโต้ตอบที่มองเห็นได้บนเดสก์ท็อป", + "ctaTitle": "พร้อมที่จะลดความซับซ้อนของโครงสร้างพื้นฐาน AI ของคุณแล้วหรือยัง?", + "ctaDescription": "เข้าร่วมกับนักพัฒนาที่กำลังปรับปรุงการบูรณาการ AI กับ OmniRoute โอเพ่นซอร์สและเริ่มต้นได้ฟรี", + "startFree": "เริ่มฟรี", + "readDocumentation": "อ่านเอกสารประกอบ" + }, + "docs": { + "title": "เอกสารประกอบ", + "quickStart": "เริ่มต้นอย่างรวดเร็ว", + "features": "คุณสมบัติ", + "supportedProviders": "ผู้ให้บริการที่รองรับ", + "supportedProvidersToc": "ผู้ให้บริการ", + "commonUseCases": "กรณีการใช้งานทั่วไป", + "clientCompatibility": "ความเข้ากันได้ของไคลเอ็นต์", + "apiReference": "การอ้างอิง API", + "method": "วิธีการ", + "path": "เส้นทาง", + "notes": "หมายเหตุ", + "modelPrefixes": "คำนำหน้าโมเดล", + "prefix": "คำนำหน้า", + "troubleshooting": "การแก้ไขปัญหา", + "supportsChat": "รองรับทั้งปลายทางการแชทและการตอบกลับ", + "oauthAutoRefresh": "การเชื่อมต่อ OAuth พร้อมการรีเฟรชโทเค็นอัตโนมัติ", + "fullStreaming": "รองรับการสตรีมมิ่งเต็มรูปแบบสำหรับทุกรุ่น", + "docsLabel": "เอกสาร", + "docsHeroDescription": "เกตเวย์ AI สำหรับ LLM ที่มีผู้ให้บริการหลายราย จุดสิ้นสุดเดียวสำหรับ OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor และผู้ให้บริการอีกกว่า 20 ราย", + "openDashboard": "เปิดแดชบอร์ด", + "endpointPage": "หน้าจุดสิ้นสุด", + "github": "GitHub", + "reportIssue": "รายงานปัญหา", + "onThisPage": "บนหน้านี้", + "documentationVersion": "เอกสารประกอบ - v{version}", + "quickStartStep1Title": "1. ติดตั้งและรัน", + "quickStartStep1Prefix": "วิ่ง", + "quickStartStep1Middle": "หรือโคลนจาก GitHub แล้วรัน", + "quickStartStep2Title": "2. สร้างคีย์ API", + "quickStartStep2Text": "ไปที่จุดสิ้นสุด -> คีย์ที่ลงทะเบียน สร้างหนึ่งคีย์ต่อสภาพแวดล้อม", + "quickStartStep3Title": "3. เชื่อมต่อผู้ให้บริการ", + "quickStartStep3Text": "เพิ่มบัญชีผู้ให้บริการผ่านการเข้าสู่ระบบ OAuth, คีย์ API หรือการเชื่อมต่ออัตโนมัติระดับฟรี", + "quickStartStep4Title": "4. ตั้งค่า URL ฐานลูกค้า", + "quickStartStep4Prefix": "ชี้ IDE หรือไคลเอ็นต์ API ของคุณไปที่", + "quickStartStep4Suffix": "ใช้คำนำหน้าผู้ให้บริการ เป็นต้น", + "featureRoutingTitle": "การกำหนดเส้นทางผู้ให้บริการหลายราย", + "featureRoutingText": "กำหนดเส้นทางคำขอไปยังผู้ให้บริการ AI กว่า 30 รายผ่านจุดสิ้นสุดที่เข้ากันได้กับ OpenAI จุดเดียว รองรับ API การแชท การตอบกลับ เสียง และรูปภาพ", + "featureCombosTitle": "คอมโบและการปรับสมดุล", + "featureCombosText": "สร้างโมเดลคอมโบด้วยห่วงโซ่ทางเลือกและกลยุทธ์การปรับสมดุล: การหมุนเวียนแบบวนซ้ำ ลำดับความสำคัญ สุ่ม ใช้น้อยที่สุด และปรับต้นทุนให้เหมาะสม", + "featureUsageTitle": "การใช้งานและการติดตามต้นทุน", + "featureUsageText": "การนับโทเค็นแบบเรียลไทม์ การคำนวณต้นทุนต่อผู้ให้บริการ/โมเดล และรายละเอียดการใช้งานโดยละเอียดตามคีย์ API และบัญชี", + "featureAnalyticsTitle": "แดชบอร์ดการวิเคราะห์", + "featureAnalyticsText": "การวิเคราะห์ด้วยภาพพร้อมแผนภูมิสำหรับคำขอ โทเค็น ข้อผิดพลาด เวลาแฝง ต้นทุน และความนิยมของโมเดลในช่วงเวลาหนึ่ง", + "featureHealthTitle": "การตรวจติดตามสุขภาพ", + "featureHealthText": "การตรวจสอบสุขภาพแบบเรียลไทม์ สถานะของผู้ให้บริการ สถานะเซอร์กิตเบรกเกอร์ และการตรวจจับขีดจำกัดอัตราอัตโนมัติพร้อมการถอยกลับแบบเอ็กซ์โพเนนเชียล", + "featureCliTitle": "เครื่องมือ CLI", + "featureCliText": "จัดการการกำหนดค่า IDE, ส่งออก/นำเข้าข้อมูลสำรอง, ค้นหาโปรไฟล์ Codex และกำหนดการตั้งค่าจากแดชบอร์ด", + "featureSecurityTitle": "ความปลอดภัยและนโยบาย", + "featureSecurityText": "การรับรองความถูกต้องของคีย์ API, การกรอง IP, การป้องกันการแทรกทันที, นโยบายโดเมน, การจัดการเซสชัน และการบันทึกการตรวจสอบ", + "featureCloudSyncTitle": "การซิงค์บนคลาวด์", + "featureCloudSyncText": "ซิงค์การกำหนดค่าของคุณกับ Cloudflare Workers เพื่อการเข้าถึงระยะไกลด้วยข้อมูลประจำตัวที่เข้ารหัสและการเฟลโอเวอร์อัตโนมัติ", + "providersAcrossConnectionTypes": "{count} ผู้ให้บริการผ่านการเชื่อมต่อสามประเภท", + "manageProviders": "จัดการผู้ให้บริการ", + "providersCount": "__ผู้ให้บริการ OMNI_TOKEN_0__", + "providerTypeFree": "ฟรีเทียร์", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "คีย์ API", + "useCaseSingleEndpointTitle": "จุดสิ้นสุดเดียวสำหรับผู้ให้บริการหลายราย", + "useCaseSingleEndpointText": "ชี้ไคลเอ็นต์ไปที่ URL ฐานเดียวและกำหนดเส้นทางตามคำนำหน้าโมเดล (เช่น gh/, cc/, kr/, openai/)", + "useCaseFallbackTitle": "ทางเลือกและการสลับโมเดลด้วยคอมโบ", + "useCaseFallbackText": "สร้างโมเดลคอมโบในแดชบอร์ดและรักษาการกำหนดค่าไคลเอนต์ให้เสถียรในขณะที่ผู้ให้บริการหมุนเวียนภายใน", + "useCaseUsageVisibilityTitle": "การใช้งาน ต้นทุน และการมองเห็นการแก้ไขข้อบกพร่อง", + "useCaseUsageVisibilityText": "ติดตามโทเค็นและค่าใช้จ่ายตามผู้ให้บริการ บัญชี และคีย์ API ในแท็บการใช้งานและการวิเคราะห์", + "clientCherryStudioTitle": "เชอร์รี่ สตูดิโอ", + "baseUrlLabel": "URL ฐาน", + "chatEndpointLabel": "จุดสิ้นสุดการแชท", + "modelRecommendationLabel": "คำแนะนำโมเดล: คำนำหน้าที่ชัดเจน", + "clientCodexTitle": "โมเดล Codex / GitHub Copilot", + "clientCodexBullet1": "ใช้รหัสรุ่นด้วย", + "clientCodexBullet2": "โมเดลตระกูล Codex กำหนดเส้นทางอัตโนมัติไปยัง", + "clientCodexBullet3": "โมเดลที่ไม่ใช่ Codex ยังคงดำเนินต่อไป", + "clientCursorTitle": "เคอร์เซอร์ IDE", + "clientCursorBullet1": "ใช้", + "clientCursorBullet1Suffix": "คำนำหน้าสำหรับโมเดลเคอร์เซอร์", + "clientCursorBullet2": "การเชื่อมต่อ OAuth - เข้าสู่ระบบจากหน้าผู้ให้บริการ", + "clientClaudeTitle": "คล็อดโค้ด/ต้านแรงโน้มถ่วง", + "clientClaudeBullet1Prefix": "ใช้", + "clientClaudeBullet1Middle": "(คลอดด์) หรือ", + "clientClaudeBullet1Suffix": "(ต้านแรงโน้มถ่วง) คำนำหน้า", + "endpointChatNote": "จุดสิ้นสุดการแชทที่เข้ากันได้กับ OpenAI (ค่าเริ่มต้น)", + "endpointResponsesNote": "จุดสิ้นสุด API การตอบกลับ (Codex, o-series)", + "endpointModelsNote": "แค็ตตาล็อกโมเดลสำหรับผู้ให้บริการที่เชื่อมต่อทั้งหมด", + "endpointAudioNote": "การถอดเสียง (Deepgram, AssemblyAI)", + "endpointImagesNote": "การสร้างภาพ (NanoBanana)", + "endpointRewriteChatNote": "เขียนตัวช่วยใหม่สำหรับลูกค้าที่ไม่มี /v1", + "endpointRewriteResponsesNote": "เขียนตัวช่วยใหม่สำหรับการตอบกลับโดยไม่มี /v1", + "endpointRewriteModelsNote": "เขียนตัวช่วยใหม่สำหรับการค้นหาโมเดลโดยไม่มี /v1", + "modelPrefixesDescriptionStart": "ใช้คำนำหน้าผู้ให้บริการก่อนชื่อรุ่นเพื่อกำหนดเส้นทางไปยังผู้ให้บริการเฉพาะ ตัวอย่าง:", + "modelPrefixesDescriptionEnd": "เส้นทางไปยัง GitHub Copilot", + "provider": "ผู้ให้บริการ", + "type": "ประเภท", + "troubleshootingModelRouting": "หากไคลเอ็นต์ล้มเหลวด้วยการกำหนดเส้นทางโมเดล ให้ใช้ผู้ให้บริการ/โมเดลที่ชัดเจน (เช่น gh/gpt-5.1-codex)", + "troubleshootingAmbiguousModels": "หากคุณได้รับข้อผิดพลาดโมเดลที่ไม่ชัดเจน ให้เลือกคำนำหน้าผู้ให้บริการแทนรหัสโมเดลเปล่า", + "troubleshootingCodexFamily": "สำหรับโมเดลตระกูล GitHub Codex ให้เก็บโมเดลเป็น gh/; เราเตอร์เลือก / ตอบสนองโดยอัตโนมัติ", + "troubleshootingTestConnection": "ใช้แดชบอร์ด > ผู้ให้บริการ > ทดสอบการเชื่อมต่อ ก่อนการทดสอบจาก IDE หรือไคลเอนต์ภายนอก", + "troubleshootingCircuitBreaker": "หากผู้ให้บริการแสดงเซอร์กิตเบรกเกอร์เปิดอยู่ ให้รอคูลดาวน์หรือตรวจสอบหน้าสุขภาพเพื่อดูรายละเอียด", + "troubleshootingOAuth": "สำหรับผู้ให้บริการ OAuth ให้ตรวจสอบสิทธิ์อีกครั้งหากโทเค็นหมดอายุ ตรวจสอบตัวบ่งชี้สถานะบัตรผู้ให้บริการ" + }, + "legal": { + "privacyPolicy": "นโยบายความเป็นส่วนตัว", + "termsOfService": "ข้อกำหนดในการให้บริการ", + "providerConfigurations": "การกำหนดค่าของผู้ให้บริการ", + "apiKeys": "คีย์ API", + "usageLogs": "บันทึกการใช้งาน", + "applicationSettings": "การตั้งค่าแอปพลิเคชัน", + "viewExportAnalytics": "ดูและส่งออกการวิเคราะห์การใช้งาน", + "clearHistory": "ล้างประวัติการใช้งานได้ตลอดเวลา", + "configureRetention": "กำหนดค่านโยบายการเก็บรักษาบันทึก", + "backupRestore": "สำรองและกู้คืนฐานข้อมูลของคุณ", + "privacyMetadataTitle": "นโยบายความเป็นส่วนตัว | OmniRoute", + "privacyMetadataDescription": "นโยบายความเป็นส่วนตัวสำหรับเราเตอร์พร็อกซี OmniRoute AI API", + "termsMetadataTitle": "เงื่อนไขการให้บริการ | OmniRoute", + "termsMetadataDescription": "ข้อกำหนดในการให้บริการสำหรับเราเตอร์พร็อกซี OmniRoute AI API", + "backToHome": "กลับบ้าน", + "lastUpdated": "อัปเดตล่าสุด: {date}", + "policyLastUpdatedDate": "13 กุมภาพันธ์ 2569", + "listSeparator": "-", + "questionsVisit": "มีคำถาม? เยี่ยมชมของเรา", + "githubRepository": "พื้นที่เก็บข้อมูล GitHub", + "privacySection1Title": "1. สถาปัตยกรรมท้องถิ่นแห่งแรก", + "privacySection1Text": "OmniRoute ได้รับการออกแบบให้เป็นแอปพลิเคชั่นแรกในท้องถิ่น การประมวลผลและการจัดเก็บข้อมูลทั้งหมดเกิดขึ้นบนเครื่องของคุณทั้งหมด ไม่มีเซิร์ฟเวอร์ส่วนกลางที่รวบรวมข้อมูลของคุณ", + "privacySection2Title": "2. ข้อมูลที่เราจัดเก็บ", + "privacyDataStoredIn": "ข้อมูลต่อไปนี้ถูกจัดเก็บไว้ในเครื่อง", + "privacyDataProviderConfigurationsDesc": "URL การเชื่อมต่อ ประเภทผู้ให้บริการ และการตั้งค่าลำดับความสำคัญ", + "privacyDataApiKeysDesc": "เข้ารหัสและจัดเก็บไว้ในเครื่องเพื่อตรวจสอบสิทธิ์กับผู้ให้บริการ AI", + "privacyDataUsageLogsDesc": "จำนวนคำขอ การใช้โทเค็น ชื่อโมเดล การประทับเวลา และเวลาตอบสนอง", + "privacyDataApplicationSettingsDesc": "การตั้งค่าธีม กลยุทธ์การกำหนดเส้นทาง และการกำหนดค่าคอมโบ", + "privacySection3Title": "3. ไม่มีการวัดและส่งข้อมูลทางไกล", + "privacySection3Text": "OmniRoute ไม่รวบรวมการวัดและส่งข้อมูลทางไกล การวิเคราะห์ หรือรายงานข้อขัดข้อง ไม่มีการส่งข้อมูลถึงเราหรือบุคคลที่สาม รูปแบบการใช้งาน การเรียก API และการกำหนดค่าของคุณยังคงเป็นส่วนตัวโดยสมบูรณ์", + "privacySection4Title": "4. ผู้ให้บริการ AI บุคคลที่สาม", + "privacySection4Text": "เมื่อคุณทำการเรียก API ผ่าน OmniRoute คำขอของคุณจะถูกส่งต่อไปยังผู้ให้บริการ AI ที่คุณกำหนดค่าไว้ (เช่น OpenAI, Anthropic, Google) ผู้ให้บริการเหล่านี้มีนโยบายความเป็นส่วนตัวของตนเองที่ควบคุมวิธีจัดการข้อมูลของคุณ โปรดตรวจสอบ:", + "privacyOpenAiPolicy": "นโยบายความเป็นส่วนตัวของ OpenAI", + "privacyAnthropicPolicy": "นโยบายความเป็นส่วนตัวด้านมานุษยวิทยา", + "privacyGooglePolicy": "นโยบายความเป็นส่วนตัวของ Google", + "privacySection5Title": "5. Cloud Sync (ไม่บังคับ)", + "privacySection5Text": "หากคุณเปิดใช้งานคุณสมบัติเสริมการซิงค์บนคลาวด์ การกำหนดค่าผู้ให้บริการและคีย์ API อาจถูกส่งไปยังจุดสิ้นสุดบนคลาวด์ที่กำหนดค่าไว้ คุณลักษณะนี้ถูกปิดใช้งานโดยค่าเริ่มต้น และจำเป็นต้องเลือกใช้อย่างชัดเจน", + "privacySection6Title": "6. การบันทึก", + "privacyLoggingIntro": "บันทึกคำขอสามารถกำหนดค่าได้ผ่านการตั้งค่าแดชบอร์ด คุณสามารถ:", + "privacySection7Title": "7. สิทธิ์ของคุณ", + "privacySection7TextStart": "เนื่องจากข้อมูลทั้งหมดถูกจัดเก็บไว้ในเครื่อง คุณจึงสามารถควบคุมได้อย่างเต็มที่ คุณสามารถลบข้อมูลของคุณได้ตลอดเวลาโดยการลบ", + "privacySection7TextEnd": "ไดเร็กทอรีหรือใช้คุณสมบัติการสำรองและกู้คืนฐานข้อมูลในแดชบอร์ด", + "termsSection1Title": "1. ภาพรวม", + "termsSection1Text": "OmniRoute เป็นเราเตอร์พร็อกซี AI API ตัวแรกในเครื่องที่ทำงานบนเครื่องของคุณทั้งหมด โดยกำหนดเส้นทางคำขอไปยังผู้ให้บริการ AI หลายรายด้วยการปรับสมดุลโหลด การเฟลโอเวอร์ และการติดตามการใช้งาน", + "termsSection2Title": "2. ความรับผิดชอบของผู้ใช้", + "termsResponsibilityApiKeys": "คุณมีหน้าที่รับผิดชอบแต่เพียงผู้เดียวในการจัดการคีย์ API และข้อมูลรับรองของคุณเองสำหรับผู้ให้บริการ AI บุคคลที่สาม (OpenAI, Anthropic, Google ฯลฯ)", + "termsResponsibilityCompliance": "คุณต้องปฏิบัติตามข้อกำหนดในการให้บริการของผู้ให้บริการ AI แต่ละรายซึ่งมี API ที่คุณเข้าถึงผ่าน OmniRoute", + "termsResponsibilitySecurity": "คุณต้องรับผิดชอบต่อความปลอดภัยของการติดตั้ง OmniRoute ในพื้นที่ของคุณ รวมถึงการตั้งรหัสผ่านและการจำกัดการเข้าถึงเครือข่าย", + "termsSection3Title": "3. มันทำงานอย่างไร", + "termsSection3Text": "OmniRoute ทำหน้าที่เป็นพร็อกซีตัวกลาง การเรียก API ที่ส่งไปยัง OmniRoute จะถูกแปลและส่งต่อไปยังผู้ให้บริการ AI ที่กำหนดค่าไว้ของคุณ OmniRoute จะไม่แก้ไขเนื้อหาคำขอหรือการตอบกลับของคุณนอกเหนือจากการแปลโปรโตคอลที่จำเป็น", + "termsSection4Title": "4. การจัดการข้อมูล", + "termsDataStoredLocally": "ข้อมูลทั้งหมดจะถูกจัดเก็บไว้ในเครื่องของคุณในฐานข้อมูล SQLite", + "termsNoTransmission": "OmniRoute จะไม่ส่งข้อมูลใดๆ ไปยังเซิร์ฟเวอร์ภายนอก เว้นแต่คุณจะเปิดใช้งานคุณสมบัติการซิงค์บนคลาวด์อย่างชัดเจน", + "termsDataLocationText": "บันทึกการใช้งาน คีย์ API และการกำหนดค่าจะถูกจัดเก็บไว้ใน", + "termsSection5Title": "5. ข้อจำกัดความรับผิดชอบ", + "termsSection5Text": "OmniRoute มีให้ \"ตามสภาพ\" โดยไม่มีการรับประกันใดๆ เราจะไม่รับผิดชอบต่อค่าใช้จ่ายใดๆ ที่เกิดขึ้นจากการใช้ API การหยุดชะงักของบริการ หรือการสูญหายของข้อมูล สำรองข้อมูลการกำหนดค่าของคุณไว้เสมอ", + "termsSection6Title": "6. โอเพ่นซอร์ส", + "termsSection6Text": "OmniRoute เป็นซอฟต์แวร์โอเพ่นซอร์ส คุณมีอิสระที่จะตรวจสอบ แก้ไข และแจกจ่ายภายใต้เงื่อนไขของใบอนุญาต" + } +} diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json new file mode 100644 index 0000000000..9c6673ebfe --- /dev/null +++ b/src/i18n/messages/uk-UA.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "зберегти", + "cancel": "Скасувати", + "delete": "Видалити", + "loading": "Завантаження...", + "error": "Сталася помилка", + "success": "Успіх", + "confirm": "Ви впевнені?", + "refresh": "Оновити", + "close": "Закрити", + "add": "додати", + "edit": "Редагувати", + "search": "Пошук", + "back": "Назад", + "next": "Далі", + "submit": "Надіслати", + "reset": "Скинути", + "copy": "Копія", + "copied": "Скопійовано!", + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "active": "Активний", + "inactive": "Неактивний", + "noData": "Немає даних", + "configure": "Налаштувати", + "manage": "Керувати", + "name": "Ім'я", + "actions": "Дії", + "status": "Статус", + "type": "Тип", + "model": "Модель", + "models": "моделі", + "provider": "Провайдер", + "account": "Обліковий запис", + "time": "час", + "details": "Подробиці", + "created": "Створено", + "lastUsed": "Останнє використання", + "loadMore": "Завантажити більше", + "noResults": "Результатів не знайдено", + "reloadPage": "Перезавантажити сторінку", + "connected": "Підключено", + "disconnected": "Відключено", + "notConfigured": "Не налаштовано", + "testConnection": "Тестове підключення", + "enable": "Увімкнути", + "disable": "Вимкнути", + "columns": "Стовпці", + "newest": "Найновіший", + "oldest": "Найстаріший", + "all": "всі", + "none": "Жодного", + "yes": "так", + "no": "немає", + "warning": "Попередження", + "note": "Примітка", + "free": "безкоштовно", + "skipToContent": "Перейти до вмісту" + }, + "sidebar": { + "home": "додому", + "dashboard": "Приладова панель", + "providers": "Провайдери", + "combos": "Комбо", + "usage": "Використання", + "analytics": "Аналітика", + "costs": "Витрати", + "health": "Здоров'я", + "limits": "Ліміти та квоти", + "cliTools": "Інструменти CLI", + "settings": "Налаштування", + "translator": "Перекладач", + "docs": "документи", + "issues": "Питання", + "endpoint": "Кінцева точка", + "apiManager": "Менеджер API", + "logs": "Журнали", + "auditLog": "Журнал аудиту", + "shutdown": "Вимкнення", + "restart": "Перезапустіть", + "shutdownConfirm": "Вимкнути OmniRoute?", + "restartConfirm": "Перезапустити OmniRoute?", + "version": "v{version}", + "debug": "Налагодження", + "system": "система", + "help": "Довідка", + "serverDisconnected": "Сервер відключено", + "serverDisconnectedMsg": "Проксі-сервер зупинено або перезавантажується.", + "expandSidebar": "Розгорнути бічну панель", + "collapseSidebar": "Згорнути бічну панель" + }, + "header": { + "logout": "Вийти", + "language": "Мова", + "providers": "Провайдери", + "providerDescription": "Керуйте з’єднаннями постачальників AI", + "combos": "Комбо", + "comboDescription": "Комбіновані моделі з резервним варіантом", + "usage": "Використання та аналітика", + "usageDescription": "Відстежуйте використання API, використання маркерів і журнали запитів", + "analytics": "Аналітика", + "analyticsDescription": "Діаграми, тенденції та аналізи", + "cliTools": "Інструменти CLI", + "cliToolsDescription": "Налаштувати інструменти CLI", + "home": "додому", + "homeDescription": "Ласкаво просимо до OmniRoute", + "endpoint": "Кінцева точка", + "endpointDescription": "Конфігурація кінцевої точки API", + "settings": "Налаштування", + "settingsDescription": "Керуйте своїми вподобаннями", + "openaiCompatible": "Сумісність з OpenAI", + "anthropicCompatible": "Антропна сумісність" + }, + "home": { + "quickStart": "Швидкий старт", + "quickStartDesc": "Встаньте та побігайте за 4 кроки. Підключити провайдерів, моделі маршрутів, контролювати все.", + "fullDocs": "Повні документи", + "step1Title": "1. Створіть ключ API", + "step1Desc": "Перейдіть до Endpoint -> Зареєстровані ключі. Згенеруйте один ключ для кожного середовища.", + "step2Title": "2. Підключити провайдерів", + "step2Desc": "Додайте облікові записи в Providers. Підтримує OAuth, ключ API та безкоштовні рівні.", + "step3Title": "3. Вкажіть свого клієнта", + "step3Desc": "Установіть базову URL-адресу на {url} у своєму клієнті IDE або API.", + "step4Title": "4. Моніторинг і оптимізація", + "step4Desc": "Відстежуйте токени, вартість і помилки в Request Logs та Analytics.", + "providersOverview": "Огляд постачальників", + "configuredOf": "{configured} налаштовано з {total} доступних постачальників", + "noModelsAvailable": "Для цього постачальника немає доступних моделей.", + "configureFirst": "Спочатку налаштуйте підключення в {providers}", + "configureProvider": "Налаштувати постачальника", + "modelAvailable": "Доступна модель {count}", + "modelsAvailable": "Доступні моделі {count}", + "connectionsActive": "{count} підключення активне", + "connectionsActivePlural": "{count} активних підключень", + "copyModelName": "Скопіюйте назву моделі", + "documentation": "Документація", + "healthMonitor": "Монітор здоров'я", + "reportIssue": "Повідомити про проблему", + "activeError": "{active} активний · {errors} помилка", + "oauthLabel": "OAuth", + "apiKeyLabel": "Ключ API", + "requestsShort": "{count} вимагається", + "providerModelsTitle": "{provider} - Моделі", + "copiedModel": "Скопійовано: {model}", + "aliasLabel": "псевдонім" + }, + "analytics": { + "title": "Аналітика", + "overviewDescription": "Відстежуйте шаблони використання API, споживання маркерів, витрати та тенденції активності в усіх постачальників і моделей.", + "evalsDescription": "Запустіть пакети оцінювання, щоб протестувати та перевірити кінцеві точки LLM. Порівняйте якість моделі, виявіть регресії та порівняйте затримку.", + "overview": "Огляд", + "evals": "Оцінки" + }, + "apiManager": { + "title": "Ключі API", + "createKey": "Створити ключ API", + "key": "ключ", + "revokeKey": "Відкликати ключ", + "revokeConfirm": "Ви впевнені, що бажаєте відкликати цей ключ API?", + "noKeys": "Ключів API ще немає", + "noKeysDesc": "Створіть свій перший ключ API для автентифікації запитів до кінцевої точки", + "keyLabel": "Мітка ключа", + "permissions": "Дозволи", + "expiresAt": "Термін дії закінчується", + "never": "Ніколи", + "revoke": "Відкликати", + "showKey": "Показати ключ", + "hideKey": "Приховати ключ", + "copyKey": "Копіювати ключ API", + "allModels": "Всі моделі", + "selectedModels": "Вибрані моделі", + "readOnly": "Тільки для читання", + "fullAccess": "Повний доступ", + "keyManagement": "Керування ключами API", + "keyManagementDesc": "Створюйте та керуйте ключами API для автентифікації запитів до кінцевої точки", + "totalKeys": "Всього ключів", + "restricted": "Обмежений", + "totalRequests": "Загальна кількість запитів", + "modelsAvailable": "Доступні моделі", + "registeredKeys": "Зареєстровані ключі", + "keysRegistered": "Зареєстровано {count} ключів", + "keyRegistered": "Ключ {count} зареєстровано", + "keysSecurityNote": "Кожен ключ ізолює відстеження використання та може бути відкликаний незалежно. Ключі маскуються після створення для безпеки.", + "createFirstKey": "Створіть свій перший ключ", + "name": "Ім'я", + "usage": "Використання", + "created": "Створено", + "actions": "Дії", + "reqs": "вимоги", + "neverUsed": "Ніколи не використовувався", + "deleteConfirm": "Видалити цей ключ API?", + "usageTips": "Поради щодо використання", + "tipAuth": "Використовуйте ключі API у заголовку авторизації як носій YOUR_KEY", + "tipSecure": "Ключі показуються лише один раз під час створення — зберігайте їх надійно", + "tipSeparate": "Створіть окремі ключі для різних клієнтів або середовищ", + "tipRestrict": "Обмежте ключі певними моделями для кращої безпеки та контролю витрат", + "keyName": "Назва ключа", + "keyNamePlaceholder": "наприклад, ключ виробництва, ключ розробки", + "keyNameDesc": "Виберіть описову назву, щоб визначити призначення цього ключа", + "keyCreated": "Ключ API створено", + "keyCreatedSuccess": "Ключ успішно створено!", + "keyCreatedNote": "Скопіюйте та збережіть цей ключ зараз — він більше не відображатиметься.", + "done": "Готово", + "savePermissions": "Зберегти дозволи", + "allowAll": "Дозволити всім", + "restrict": "Обмежити", + "allowAllInfo": "Цей ключ може отримати доступ до всіх доступних моделей.", + "restrictInfo": "Цей ключ має доступ до {selected} з {total} моделей.", + "selected": "Вибрано {count}", + "all": "всі", + "clear": "ясно", + "searchModels": "Пошук моделей за назвою або постачальником...", + "noModelsFound": "Моделі не знайдено", + "keyNameRequired": "Потрібно вказати назву ключа", + "keyNameTooLong": "Назва ключа має містити не більше {max} символів", + "keyNameInvalid": "Назва ключа може містити лише літери, цифри, пробіли, дефіси та підкреслення", + "invalidKeyName": "Недійсна назва ключа", + "failedCreateKey": "Не вдалося створити ключ", + "failedCreateKeyRetry": "Не вдалося створити ключ. Спробуйте ще раз.", + "invalidKeyId": "Недійсний ідентифікатор ключа", + "failedDeleteKey": "Не вдалося видалити ключ", + "failedDeleteKeyRetry": "Не вдалося видалити ключ. Спробуйте ще раз.", + "invalidModelsSelection": "Недійсний вибір моделей", + "cannotSelectMoreThanModels": "Не можна вибрати більше ніж {max} моделей", + "failedUpdatePermissions": "Не вдалося оновити дозволи", + "failedUpdatePermissionsRetry": "Не вдалося оновити дозволи. Спробуйте ще раз.", + "unknownProvider": "невідомий", + "copyMaskedKey": "Копіювати замаскований ключ", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Останній: {date}", + "editPermissions": "Права на редагування", + "deleteKey": "Видалити ключ", + "model": "Модель {count}", + "models": "{count} моделей", + "permissionsTitle": "Дозволи: {name}", + "allowAllDesc": "Цей ключ може отримати доступ до всіх доступних моделей.", + "restrictDesc": "Цей ключ має доступ до {selectedCount} з {totalModels} моделей.", + "selectedCount": "Вибрано {count}" + }, + "auditLog": { + "title": "Журнал аудиту", + "searchPlaceholder": "Пошукові дії...", + "action": "Дія", + "actor": "Актор", + "target": "Цільова", + "ipAddress": "IP-адреса", + "timestamp": "Мітка часу", + "noEntries": "Записів аудиту не знайдено", + "filterByAction": "Фільтрувати за дією...", + "filterByActor": "Фільтрувати за актором...", + "filterEntriesAria": "Фільтрувати записи журналу аудиту", + "filterByActionTypeAria": "Фільтрувати за типом дії", + "filterByActorAria": "Фільтрувати за актором", + "refreshAuditLogAria": "Оновити журнал аудиту", + "tableAria": "Записи журналу аудиту", + "failedFetchAuditLog": "Не вдалося отримати журнал аудиту", + "notAvailable": "—", + "description": "Адміністративні дії та заходи безпеки", + "showing": "Показано {count} записів (зміщення {offset})", + "previous": "Попередній" + }, + "cliTools": { + "title": "Інструменти CLI", + "noActiveProviders": "Немає активних провайдерів", + "noActiveProvidersDesc": "Спочатку додайте та підключіть постачальників, щоб налаштувати інструменти CLI.", + "mapModels": "Моделі карт", + "testConnection": "Тестове підключення", + "connectionStatus": "Статус підключення", + "configureEndpoint": "Налаштувати кінцеву точку", + "instructions": "Інструкції", + "modelMapping": "Відображення моделі", + "baseUrl": "Базовий URL", + "apiKey": "Ключ API", + "configured": "Налаштовано", + "notConfigured": "Не налаштовано", + "notInstalled": "Не встановлено", + "custom": "Custom", + "unknown": "Невідомий", + "lastSavedAt": "Востаннє збережено: {date}", + "never": "Ніколи", + "justNow": "тільки зараз", + "minutesAgoShort": "{count}хв тому", + "hoursAgoShort": "{count} год тому", + "daysAgoShort": "{count} дн. тому", + "monthsAgoShort": "{count}міс. тому", + "yearsAgoShort": "{count}р тому", + "runtimeCheckFailed": "Помилка перевірки виконання", + "yourApiKeyPlaceholder": "ваш API-ключ", + "modelPlaceholder": "постачальник/ідентифікатор моделі", + "configurationSaved": "Конфігурацію успішно збережено.", + "failedToSave": "Не вдалося зберегти конфігурацію.", + "noApiKeysCreateOne": "Немає ключів API – створіть один на сторінці «Ключі».", + "defaultOmnirouteKey": "sk_omniroute (за замовчуванням)", + "selectModel": "Виберіть Модель", + "selectModelForAlias": "Виберіть модель для {alias}", + "selectModelForTool": "Виберіть модель для {tool}", + "select": "Виберіть", + "clear": "ясно", + "comingSoon": "Скоро буде", + "checkingRuntime": "Перевірка стану виконання...", + "guideOnlyIntegration": "Інтеграція лише з довідниками (не потрібно локальне середовище виконання)", + "cliRuntimeDetected": "Середовище виконання CLI виявлено та готове", + "cliFoundNotRunnable": "CLI знайдено, але не можна запустити{reason}", + "cliRuntimeNotDetected": "Середовище виконання CLI не виявлено", + "binary": "Двійковий", + "configPath": "Шлях конфігурації", + "configPathShort": "Конфігурація", + "failedCheckRuntimeStatus": "Не вдалося перевірити стан виконання.", + "copy": "Копія", + "copied": "Скопійовано", + "copyConfig": "Копіювати конфіг", + "saveConfig": "Зберегти конфігурацію", + "selectionSaved": "Вибір збережено", + "guide": "Гід", + "detected": "Виявлено", + "notReady": "Не готовий", + "active": "Активний", + "inactive": "Неактивний", + "startMitm": "Запустіть MITM", + "stopMitm": "Зупинити MITM", + "mitmStarted": "MITM успішно стартував!", + "mitmStopped": "MITM успішно зупинено!", + "failedStart": "Не вдалося запустити MITM", + "failedStop": "Не вдалося зупинити MITM", + "saveMappings": "Зберегти відображення", + "mappingsSaved": "Карти збережено!", + "failedSaveMappings": "Не вдалося зберегти зіставлення", + "howItWorks": "Як це працює:", + "antigravityHowWorksDesc": "Антигравітація надсилає запити до кінцевої точки Google. MITM перехоплює та перенаправляє їх на OmniRoute.", + "antigravityStep1": "1. Запустіть MITM для маршрутизації запитів через OmniRoute.", + "antigravityStep2Prefix": "2. Додайте", + "antigravityStep2Suffix": "у ваш файл hosts як 127.0.0.1.", + "antigravityStep3": "3. Відкрийте Антигравітацію, і запити будуть надсилатися через проксі.", + "sudoPasswordRequiredTitle": "Потрібен пароль Sudo", + "sudoPasswordHint": "Пароль адміністратора потрібен для зміни параметрів файлу хостів і проксі-сервера системи.", + "enterSudoPassword": "Введіть пароль sudo", + "sudoPasswordRequiredError": "Потрібен пароль Sudo.", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "settingsApplied": "Налаштування успішно застосовано!", + "failedApplySettings": "Не вдалося застосувати налаштування", + "settingsReset": "Налаштування успішно скинуто!", + "failedResetSettings": "Не вдалося скинути налаштування", + "backupRestored": "Резервну копію відновлено!", + "failedRestore": "Не вдалося відновити", + "checkingCli": "Перевірка {tool} CLI...", + "cliNotRunnable": "{tool} CLI встановлено, але не працює", + "cliNotInstalled": "{tool} CLI не встановлено", + "cliNotDetected": "{tool} CLI не виявлено", + "cliDetectedReady": "{tool} CLI виявлено та готово", + "cliFoundFailedHealthcheck": "Знайдено {tool} CLI, але не вдалося перевірити працездатність під час виконання{reason}.", + "installCliPrompt": "Щоб використовувати цю функцію, установіть {tool} CLI.", + "installCodexPrompt": "Будь ласка, встановіть Codex CLI, щоб використовувати функцію автоматичного застосування.", + "hide": "Сховати", + "howToInstall": "Як встановити", + "installationGuide": "Керівництво по установці", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "Після установки запустіть", + "toVerify": "для перевірки.", + "current": "поточний", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Скинути до замовчування", + "providerModelPlaceholder": "постачальник/ідентифікатор моделі", + "apply": "Застосувати", + "reset": "Скинути", + "manualConfig": "Конфігурація вручну", + "backups": "Резервні копії", + "configBackups": "Резервне копіювання конфігурації", + "noBackupsYet": "Резервних копій ще немає. Резервні копії створюються автоматично перед кожним застосуванням або скиданням.", + "restore": "Відновити", + "backupRestoredReloading": "Резервну копію відновлено! Статус перезавантаження...", + "failedRestoreBackup": "Не вдалося відновити резервну копію", + "applied": "Застосовується!", + "failed": "Не вдалося", + "resetDone": "Скинути!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute налаштовано як постачальник, сумісний з OpenAI", + "provider": "Провайдер", + "model": "Модель", + "providers": "Провайдери", + "auth": "Авт", + "noApiKeysAvailable": "Немає доступних ключів API", + "usingDefaultOmniroute": "За замовчуванням: sk_omniroute", + "updateConfig": "Оновити конфігурацію", + "applyConfig": "Застосувати конфігурацію", + "noBackupsAvailable": "Немає резервних копій.", + "profileSaved": "Профіль \"{name}\" збережено!", + "failedSaveProfile": "Не вдалося зберегти профіль", + "profileActivated": "Профіль активований!", + "failedActivateProfile": "Не вдалося активувати профіль", + "profiles": "Профілі", + "savedProfiles": "Збережені профілі", + "noProfilesYet": "Ще немає збережених профілів. Збережіть поточну конфігурацію як профіль нижче.", + "activate": "активувати", + "deleteProfile": "Видалити профіль", + "profileNamePlaceholder": "Назва профілю (наприклад, особистий обліковий запис)", + "saveCurrent": "Зберегти поточне", + "codexAuthNotePrefix": "Codex використовує", + "codexAuthNoteMiddle": "з", + "codexAuthNoteSuffix": "Натисніть «Застосувати», щоб виконати автоматичне налаштування.", + "claudeManualConfiguration": "Claude CLI - Налаштування вручну", + "codexManualConfiguration": "Codex CLI - Ручна конфігурація", + "droidManualConfiguration": "Заводський дроїд - налаштування вручну", + "openClawManualConfiguration": "Open Claw - налаштування вручну", + "clineManualConfiguration": "Ручне налаштування Cline", + "kiloManualConfiguration": "Налаштування коду кіло вручну", + "toolDescriptions": { + "antigravity": "Google Antigravity IDE з MITM", + "claude": "Антропний код Клода CLI", + "codex": "OpenAI Codex CLI", + "droid": "Factory Droid AI Assistant", + "openclaw": "Open Claw AI Assistant", + "cline": "Cline AI Coding Assistant CLI", + "kilo": "Кіло Код AI Assistant CLI", + "cursor": "Редактор коду Cursor AI", + "continue": "Продовжити AI Assistant" + }, + "guides": { + "cursor": { + "notes": { + "0": "Для використання цієї функції потрібен обліковий запис Cursor Pro.", + "1": "Курсор направляє запити через власний сервер, тому локальна кінцева точка не підтримується. Увімкніть Cloud Endpoint у налаштуваннях." + }, + "steps": { + "1": { + "title": "Відкрийте налаштування", + "desc": "Перейдіть до Налаштування -> Моделі" + }, + "2": { + "title": "Увімкнути OpenAI API", + "desc": "Увімкніть параметр «Ключ API OpenAI»." + }, + "3": { + "title": "Базовий URL" + }, + "4": { + "title": "Ключ API" + }, + "5": { + "title": "Додати спеціальну модель", + "desc": "Натисніть «Переглянути всю модель» -> «Додати спеціальну модель»" + }, + "6": { + "title": "Виберіть Модель" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Відкрийте Config", + "desc": "Відкрийте файл конфігурації Продовжити" + }, + "2": { + "title": "Ключ API" + }, + "3": { + "title": "Виберіть Модель" + }, + "4": { + "title": "Додати конфігурацію моделі", + "desc": "Додайте таку конфігурацію до свого масиву моделей:" + } + } + } + } + }, + "combos": { + "title": "Комбо", + "description": "Створюйте комбінації моделей із зваженою маршрутизацією та підтримкою резервного варіанту", + "createCombo": "Створити комбо", + "editCombo": "Редагувати комбінацію", + "deleteCombo": "Видалити комбо", + "noModels": "Немає моделей", + "noModelsYet": "Моделі ще не додано", + "addModel": "Додати модель", + "addModelToCombo": "Додати модель до комбо", + "routingStrategy": "Стратегія маршрутизації", + "maxRetries": "Макс. повторних спроб", + "timeout": "Час очікування (мс)", + "healthcheck": "Healthcheck", + "priority": "Пріоритет", + "fallback": "Запасний варіант", + "roundRobin": "Кругова система", + "random": "Випадковий", + "leastLatency": "Найменша затримка", + "comboName": "Комбінована назва", + "comboNamePlaceholder": "моє комбо", + "deleteConfirm": "Видалити цю комбінацію?", + "noCombosYet": "Комбо ще немає", + "comboCreated": "Комбінацію створено успішно", + "comboUpdated": "Комбо успішно оновлено", + "comboDeleted": "Комбо видалено", + "failedCreate": "Не вдалося створити комбо", + "failedUpdate": "Не вдалося оновити комбінацію", + "errorCreating": "Помилка створення комбо", + "errorUpdating": "Помилка оновлення комбо", + "errorDeleting": "Помилка видалення комбо", + "testFailed": "Помилка тестового запиту", + "failedToggle": "Не вдалося перемкнути комбінацію", + "testResults": "Результати тесту — {name}", + "resolvedBy": "Вирішено:", + "more": "+ ще {count}", + "reqs": "вимоги", + "success": "успіх", + "proxyConfigured": "Проксі налаштовано", + "copyComboName": "Копіювати ім'я комбо", + "enableCombo": "Увімкнути комбо", + "disableCombo": "Вимкнути комбо", + "testCombo": "Тестовий комбо", + "duplicate": "дублікат", + "proxyConfig": "Конфігурація проксі", + "nameRequired": "Необхідно вказати ім'я", + "nameInvalid": "Тільки літери, цифри, -, _, / і . дозволено", + "nameHint": "Букви, цифри, -, _, / і . дозволено", + "priorityDesc": "Послідовний резерв: спочатку пробує модель 1, потім 2 тощо.", + "weightedDesc": "Розподіляє трафік за ваговим відсотком із резервним варіантом", + "roundRobinDesc": "Циркулярний розподіл: кожен запит переходить до наступної моделі по черзі", + "randomDesc": "Рівномірний випадковий вибір, а потім повернення до інших моделей", + "leastUsedDesc": "Вибирає модель із найменшою кількістю запитів, балансуючи навантаження за часом", + "costOptimizedDesc": "Маршрути до найдешевшої моделі на основі ціни", + "models": "Моделі", + "autoBalance": "Автобаланс", + "advancedSettings": "Розширені налаштування", + "retryDelay": "Затримка повтору (мс)", + "concurrencyPerModel": "Одночасність / Модель", + "queueTimeout": "Час очікування черги (мс)", + "advancedHint": "Залиште пустим, щоб використовувати глобальні параметри за умовчанням. Вони замінюють налаштування кожного постачальника.", + "moveUp": "Рухатися вгору", + "moveDown": "Рухатися вниз", + "removeModel": "видалити", + "saving": "Збереження...", + "weighted": "Зважений", + "leastUsed": "Найменш використовуваний", + "costOpt": "Cost-Opt" + }, + "costs": { + "title": "Витрати", + "budget": "Бюджет", + "totalCost": "Загальна вартість", + "breakdown": "Розподіл витрат", + "noData": "Немає даних про вартість", + "byModel": "За моделлю", + "byProvider": "Від постачальника" + }, + "endpoint": { + "title": "Кінцева точка API", + "available": "Доступні кінцеві точки", + "cloudProxy": "Хмарний проксі", + "disableConfirm": "Ви впевнені, що бажаєте вимкнути хмарний проксі?", + "baseUrl": "Базовий URL", + "apiKeyLabel": "Ключ API", + "registeredKeys": "Зареєстровані ключі", + "chatCompletions": "Завершення чату", + "responses": "Відповіді", + "listModels": "Список моделей", + "usingCloudProxy": "Використання Cloud Proxy", + "usingLocalServer": "Використання локального сервера", + "machineId": "Ідентифікатор машини: {id}...", + "disableCloud": "Вимкнути хмару", + "enableCloud": "Увімкнути хмару", + "modelsAcrossEndpoints": "{models} моделей через {endpoints} кінцевих точок", + "chatDesc": "Потоковий і непотоковий чат з усіма провайдерами", + "embeddings": "Вбудовування", + "embeddingsDesc": "Вбудовування тексту для конвеєрів пошуку та RAG", + "imageGeneration": "Генерація зображень", + "imageDesc": "Створення зображень із текстових підказок", + "rerank": "Змінити ранг", + "rerankDesc": "Реранжувати документи за відповідністю запиту", + "audioTranscription": "Транскрипція аудіо", + "audioTranscriptionDesc": "Транскрибувати аудіофайли в текст (Whisper)", + "textToSpeech": "Перетворення тексту в мовлення", + "textToSpeechDesc": "Перетворення тексту на природне мовлення", + "moderations": "Модерації", + "moderationsDesc": "Модерація контенту та класифікація безпеки", + "enableCloudTitle": "Увімкнути Cloud Proxy", + "whatYouGet": "Що ви отримаєте", + "cloudBenefitAccess": "Отримайте доступ до свого API з будь-якої точки світу", + "cloudBenefitShare": "Легко діліться кінцевою точкою зі своєю командою", + "cloudBenefitPorts": "Не потрібно відкривати порти чи налаштовувати брандмауер", + "cloudBenefitEdge": "Швидка глобальна крайова мережа", + "cloudSessionNote": "Хмара зберігатиме ваш сеанс авторизації протягом 1 дня. Якщо не використовувати, воно буде автоматично видалено.", + "cloudUnstableNote": "Хмара зараз нестабільна з Claude Code OAuth у деяких випадках.", + "cloudConnected": "Cloud Proxy підключено!", + "connectingToCloud": "Підключення до хмари...", + "verifyingConnection": "Перевірка підключення...", + "connecting": "Підключення...", + "verifying": "Перевірка...", + "connected": "Підключено!", + "disableCloudTitle": "Вимкнути хмарний проксі", + "disableWarning": "Усі сеанси авторизації буде видалено з хмари.", + "syncingData": "Синхронізація останніх даних...", + "disablingCloud": "Вимкнення хмари...", + "syncing": "Синхронізація...", + "disabling": "Вимкнення...", + "cloudConnectedVerified": "Cloud Proxy підключено та перевірено!", + "connectedVerificationPending": "Підключено — очікується перевірка", + "connectedVerificationPendingWithError": "Підключено — очікується підтвердження: {error}", + "cloudDisabledSuccess": "Хмару успішно вимкнено", + "syncedSuccess": "Успішно синхронізовано", + "failedDisable": "Не вдалося вимкнути хмару", + "failedEnable": "Не вдалося ввімкнути хмару", + "cloudRequestTimeout": "Час очікування хмарного запиту", + "cloudRequestFailed": "Помилка запиту на хмару", + "cloudWorkerUnreachable": "Не вдалося підключитися до хмарного працівника. Переконайтеся, що хмарна служба запущена (npm run dev в /cloud).", + "connectionFailed": "Помилка підключення", + "syncFailed": "Не вдалося синхронізувати хмарні дані", + "providerModelsTitle": "{provider} — Моделі", + "noModelsForProvider": "Для цього постачальника немає доступних моделей.", + "chat": "Чат", + "embedding": "Вбудовування", + "image": "Зображення", + "custom": "звичай", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Здоров'я системи", + "description": "Моніторинг вашого екземпляра OmniRoute у реальному часі", + "healthy": "Здоровий", + "degraded": "Деградували", + "down": "вниз", + "uptime": "Час роботи", + "memory": "Пам'ять", + "memoryRss": "Пам'ять (RSS)", + "heap": "Купа", + "cpu": "ЦП", + "database": "База даних", + "version": "Версія", + "lastCheck": "Остання перевірка", + "providerHealth": "Здоров'я постачальника", + "systemMetrics": "Системні показники", + "tokenHealth": "Токен здоров'я", + "refreshAll": "Оновити все", + "checkNow": "Перевір зараз", + "loadingHealth": "Завантаження даних про стан здоров'я...", + "failedToLoad": "Не вдалося завантажити дані про здоров’я: {error}", + "retry": "Повторіть спробу", + "allOperational": "Всі системи в робочому стані", + "issuesDetected": "Виявлено системні проблеми", + "updatedAt": "Оновлено {time}", + "latency": "Затримка", + "latencyP50": "стор.50", + "latencyP95": "стор.95", + "latencyP99": "стор.99", + "millisecondsShort": "{value}мс", + "notAvailable": "—", + "totalRequests": "Всього запитів", + "noDataYet": "Даних ще немає", + "promptCache": "Кеш підказок", + "entries": "Записи", + "hitRate": "Рейтинг попадань", + "hitsMisses": "Попадання / промахи", + "signatureCache": "Кеш підписів", + "signatureDefaults": "За замовчуванням", + "signatureTool": "Інструмент", + "signatureFamily": "Сім'я", + "signatureSession": "Сесія", + "recovering": "Відновлюється", + "noCBData": "Немає даних про автоматичний вимикач. Спочатку зробіть кілька запитів.", + "providerHealthStatusAria": "Стан здоров'я постачальника", + "issuesLabel": "Виявлені проблеми", + "operational": "Оперативний", + "providers": "Провайдери", + "healthyCount": "{count} здоровий", + "nodeVersion": "Вузол {version}", + "failures": "Помилка {count}", + "failuresPlural": "{count} помилки", + "lastFailure": "Останній", + "rateLimitStatus": "Статус обмеження швидкості", + "activeLimiters": "{count} активний обмежувач", + "activeLimitersPlural": "{count} активні обмежувачі", + "queued": "У черзі", + "queuedCount": "{count} у черзі", + "running": "біг", + "runningCount": "{count} працює", + "ok": "добре", + "activeLockouts": "Активні блокування", + "resetConfirm": "Перевести всі автоматичні вимикачі в справний стан? Це очистить усі підрахунки помилок і відновить усі постачальники до робочого стану.", + "resetAllTitle": "Скиньте всі автоматичні вимикачі в справний стан", + "resetting": "Скидання...", + "resetAll": "Скинути все", + "until": "До {time}" + }, + "limits": { + "title": "Ліміти та квоти", + "rateLimit": "Обмеження швидкості", + "remaining": "Залишилося", + "requestsPerMinute": "Запитів/хв", + "tokensPerMinute": "Токенів/хв", + "dailyLimit": "Денний ліміт" + }, + "logs": { + "title": "Журнали", + "requestLogs": "Журнали запитів", + "proxyLogs": "Журнали проксі", + "auditLog": "Журнал аудиту", + "console": "Консоль", + "auditLogDesc": "Адміністративні дії та заходи безпеки", + "loading": "Завантаження...", + "refresh": "Оновити", + "filterByAction": "Фільтрувати за дією...", + "filterByActor": "Фільтрувати за актором...", + "filterEntriesAria": "Фільтрувати записи журналу аудиту", + "filterByActionTypeAria": "Фільтрувати за типом дії", + "filterByActorAria": "Фільтрувати за актором", + "refreshAuditLogAria": "Оновити журнал аудиту", + "tableAria": "Записи журналу аудиту", + "failedFetchAuditLog": "Не вдалося отримати журнал аудиту", + "showing": "Показано {count} записів (зміщення {offset})", + "search": "Пошук", + "timestamp": "Мітка часу", + "action": "Дія", + "actor": "Актор", + "target": "Цільова", + "details": "Подробиці", + "ipAddress": "IP-адреса", + "notAvailable": "—", + "noEntries": "Записів журналу аудиту не знайдено", + "previous": "Попередній", + "next": "Далі" + }, + "onboarding": { + "welcome": "Ласкаво просимо", + "security": "Безпека", + "test": "Тест", + "ready": "Готовий!", + "setPassword": "Встановити пароль", + "addProvider": "Додайте свого першого постачальника", + "getStarted": "Почніть роботу", + "skip": "Пропустити", + "skipWizard": "Повністю пропустити майстер", + "skipPassword": "Пропустити встановлення пароля", + "skipAndContinue": "Пропустити та продовжити", + "passwordLabel": "Пароль", + "confirmPassword": "Підтвердьте пароль", + "enterPassword": "Введіть пароль", + "confirmPasswordPlaceholder": "Підтвердьте пароль", + "passwordsMismatch": "Паролі не збігаються", + "setupComplete": "Налаштування завершено!", + "goToDashboard": "Перейдіть на інформаційну панель →", + "welcomeDesc": "OmniRoute — це ваш локальний проксі-сервер AI API. Він направляє запити до кількох постачальників штучного інтелекту за допомогою балансування навантаження, відновлення після відмови та відстеження використання.", + "multiProvider": "Багатопровайдер", + "usageTracking": "Відстеження використання", + "apiKeyMgmt": "API Key Mgmt", + "securityDesc": "Встановіть пароль, щоб захистити свою інформаційну панель, або пропустіть наразі.", + "providerDesc": "Підключіть свого першого постачальника AI. Ви можете додати більше пізніше.", + "apiKeyRequired": "Ключ API (обов'язково)", + "customUrlOptional": "Спеціальна URL-адреса (необов'язково)", + "testDesc": "Давайте перевіримо, чи працює підключення до вашого провайдера.", + "runTest": "Запустіть перевірку підключення", + "testingConnection": "Перевірка підключення...", + "connectionSuccessful": "Підключення успішне! Ваш провайдер готовий.", + "noProviderFound": "Постачальника не знайдено. Ви можете додати його з інформаційної панелі пізніше.", + "testFailed": "Тестування не вдалося, але ви можете налаштувати це пізніше.", + "couldNotTest": "Зараз не вдалося перевірити. Тестувати можна з інформаційної панелі.", + "doneDesc": "Усе готово! Ваш екземпляр OmniRoute налаштований і готовий проксі-сервер запитів ШІ.", + "yourEndpoint": "Ваша кінцева точка:", + "continue": "Продовжити", + "retry": "Повторіть спробу", + "failedSetPassword": "Не вдалося встановити пароль. Спробуйте знову.", + "failedAddProvider": "Не вдалося додати постачальника. Спробуйте знову.", + "connectionError": "Помилка підключення. Спробуйте ще раз.", + "provider": "Провайдер" + }, + "providers": { + "title": "Провайдери", + "addProvider": "Додати постачальника", + "editProvider": "Редагувати постачальника", + "deleteProvider": "Видалити постачальника", + "noProviders": "Постачальники не налаштовані", + "modelAvailability": "Наявність моделі", + "accounts": "Облікові записи", + "newAccount": "Новий акаунт", + "deleteConfirm": "Ви впевнені, що хочете видалити цього постачальника?", + "testing": "Тестування...", + "testConnection": "Тестове підключення", + "testSuccess": "Підключення успішне", + "testFailed": "Помилка підключення", + "available": "в наявності", + "cooldown": "Кулдаун", + "unavailable": "Недоступний", + "unknown": "Невідомий", + "oauthLabel": "OAuth", + "compatibleLabel": "сумісний", + "chat": "Чат", + "responses": "Відповіді", + "messages": "Повідомлення", + "oauthProviders": "Постачальники OAuth", + "freeProviders": "Безкоштовні постачальники", + "apiKeyProviders": "Постачальники ключів API", + "compatibleProviders": "Сумісні постачальники ключів API", + "testAll": "Перевірити все", + "testAllOAuth": "Перевірте всі підключення OAuth", + "testAllFree": "Перевірте всі безкоштовні підключення", + "testAllApiKey": "Перевірте всі підключення ключів API", + "testAllCompatible": "Перевірте всі сумісні підключення", + "connected": "{count} Підключено", + "errorCount": "Помилка {count} ({code})", + "errorCountNoCode": "{count} Помилка", + "noConnections": "Жодних зв'язків", + "disabled": "Вимкнено", + "enableProvider": "Увімкнути провайдера", + "disableProvider": "Вимкнути провайдера", + "testResults": "Результати тестування", + "noCompatibleYet": "Сумісних провайдерів ще не додано", + "compatibleHint": "Використовуйте кнопки вище, щоб додати кінцеві точки, сумісні з OpenAI або Anthropic", + "addOpenAICompatible": "Додайте OpenAI Compatible", + "addAnthropicCompatible": "Додати Anthropic Compatible", + "addNewProvider": "Додати нового постачальника", + "backToProviders": "Назад до постачальників", + "configureNewProvider": "Налаштуйте нового постачальника AI для використання з вашими програмами.", + "providerLabel": "Провайдер", + "selectProvider": "Виберіть провайдера", + "selectedProvider": "Вибраний провайдер", + "authMethod": "Метод автентифікації", + "apiKeyLabel": "Ключ API", + "apiKeyRequired": "Потрібен ключ API", + "selectProviderRequired": "Будь ласка, виберіть постачальника", + "enterApiKey": "Введіть свій ключ API", + "apiKeySecure": "Ваш ключ API буде зашифровано та безпечно зберігатиметься.", + "oauth2Connect": "Підключіться за допомогою OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Підключіть свій обліковий запис за допомогою автентифікації OAuth2.", + "displayName": "Відображуване ім'я", + "displayNamePlaceholder": "наприклад, Production API, Dev Environment", + "displayNameHint": "Додатково. Зрозуміле ім’я для ідентифікації цієї конфігурації.", + "active": "Активний", + "activeDescription": "Увімкніть цей провайдер для використання у ваших програмах", + "cancel": "Скасувати", + "createProvider": "Створити постачальника", + "failedCreate": "Не вдалося створити постачальника", + "errorOccurred": "Сталася помилка. Спробуйте ще раз.", + "modelStatus": "Статус моделі", + "allModelsOperational": "Всі моделі робочі", + "modelsWithIssues": "{count} моделі з проблемами", + "allModelsNormal": "Усі моделі реагують нормально.", + "cooldownCleared": "Зарядку для {model} очищено", + "failedClearCooldown": "Не вдалося очистити час відновлення", + "loadingAvailability": "Завантаження доступності моделі...", + "clearCooldown": "ясно", + "clearing": "Очищення...", + "until": "До {time}", + "providerTestFailed": "Тест постачальника не вдався", + "modeTest": "Тест {mode}", + "passedCount": "{count} пройдено", + "failedCount": "{count} не вдалося", + "testedCount": "{count} перевірено", + "millisecondsAbbr": "{value}мс", + "okShort": "добре", + "errorShort": "ПОМИЛКА", + "noActiveConnectionsInGroup": "Для цієї групи не знайдено активних з’єднань.", + "allTestsPassed": "Усі тести {total} пройдено", + "testSummary": "{passed}/{total} пройдено, {failed} не виконано", + "nameLabel": "Ім'я", + "prefixLabel": "Префікс", + "baseUrlLabel": "Базовий URL", + "apiTypeLabel": "Тип API", + "prefixHint": "Обов'язковий. Унікальний префікс для назв моделей.", + "nameHint": "Обов'язковий. Зручна мітка для цього вузла.", + "baseUrlHint": "Обов'язковий.  Основна URL-адреса API постачальника.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Перевірте підключення", + "validating": "Перевірка...", + "connectionValid": "Підключення дійсне!", + "connectionFailed": "Помилка підключення. Перевірте URL-адресу та ключ.", + "testKeyLabel": "Тестовий ключ API", + "testKeyPlaceholder": "sk-... (лише для перевірки)", + "providerNotFound": "Постачальник не знайдено", + "deleteConnectionConfirm": "Видалити це підключення?", + "failedSetAlias": "Не вдалося встановити псевдонім", + "failedSaveConnection": "Не вдалося зберегти з’єднання", + "failedSaveConnectionRetry": "Не вдалося зберегти з’єднання. Спробуйте ще раз.", + "failedRetestConnection": "Не вдалося повторно перевірити з’єднання", + "deleteCompatibleNodeConfirm": "Видалити цей {type} сумісний вузол?", + "anthropicCompatibleDetails": "Antropic Compatible Деталі", + "openaiCompatibleDetails": "Відомості про сумісність з OpenAI", + "messagesApi": "API повідомлень", + "responsesApi": "API відповідей", + "chatCompletions": "Завершення чату", + "importingModels": "Імпорт...", + "importFromModels": "Імпортувати з /models", + "addConnectionToImport": "Додайте підключення, щоб увімкнути імпорт.", + "noModelsConfigured": "Немає налаштованих моделей", + "connectionCount": "{count} підключення(-я)", + "fetchingModels": "Отримання доступних моделей...", + "failedFetchModels": "Не вдалося отримати моделі", + "noModelsFound": "Моделі не знайдено", + "importFailed": "Помилка імпорту", + "noNewModelsAdded": "Нові моделі не додано.", + "adding": "Додавання...", + "importingModelsTitle": "Імпорт моделей", + "copyModel": "Копія моделі", + "removeModel": "Зняти модель", + "rateLimitProtected": "Захищений", + "rateLimitUnprotected": "Незахищений", + "enableRateLimitProtection": "Натисніть, щоб увімкнути захист обмеження швидкості", + "disableRateLimitProtection": "Натисніть, щоб вимкнути захист обмеження швидкості", + "productionKey": "Ключ виробництва", + "enterNewApiKey": "Введіть новий ключ API", + "optional": "Додатково", + "anthropicCompatibleName": "Антропна сумісність", + "openaiCompatibleName": "Сумісність з OpenAI", + "failedImportModels": "Не вдалося імпортувати моделі", + "noModelsReturnedFromEndpoint": "З кінцевої точки /models не повернуто моделей.", + "importingModelsProgress": "Імпорт {current} з {total} моделей...", + "foundModelsStartingImport": "Знайдено {count} моделей. Початок імпорту...", + "importingModelById": "Імпорт {modelId}...", + "importSuccessCount": "Успішно імпортовано {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Нові моделі не додано (усі вже є).", + "importDoneCount": "✓ Готово! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Сталася неочікувана помилка", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "повідомлення", + "responsesPath": "відповіді", + "chatCompletionsPath": "чат/завершення", + "add": "додати", + "edit": "Редагувати", + "delete": "Видалити", + "anthropic": "Антропний", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Дозволяється лише одне з’єднання для сумісного вузла. Додайте інший вузол, якщо вам потрібно більше з’єднань.", + "connections": "Зв'язки", + "providerProxyTitleConfigured": "Проксі-сервер постачальника: {host}", + "configured": "налаштовано", + "providerProxyConfigureHint": "Налаштувати проксі для всіх підключень цього провайдера", + "providerProxy": "Проксі-сервер постачальника", + "noConnectionsYet": "Підключень ще немає", + "addFirstConnectionHint": "Щоб почати, додайте своє перше підключення", + "addConnection": "Додати підключення", + "availableModels": "Доступні моделі", + "pageAutoRefresh": "Сторінка оновиться автоматично...", + "statusDisabled": "вимкнено", + "statusConnected": "підключений", + "statusRuntimeIssue": "проблема виконання", + "statusAuthFailed": "авторизація не вдалася", + "statusRateLimited": "швидкість обмежена", + "statusNetworkIssue": "проблема мережі", + "statusTestUnsupported": "тест не підтримується", + "statusUnavailable": "недоступний", + "statusFailed": "не вдалося", + "statusError": "помилка", + "oauthAccount": "Обліковий запис OAuth", + "errorTypeRuntime": "Локальний час виконання", + "errorTypeUpstreamAuth": "Вихідна авторизація", + "errorTypeMissingCredential": "Відсутні облікові дані", + "errorTypeRefreshFailed": "Не вдалося оновити", + "errorTypeTokenExpired": "Термін дії маркера минув", + "errorTypeRateLimited": "Тариф обмежений", + "errorTypeUpstreamUnavailable": "Вгору недоступний", + "errorTypeNetworkError": "Помилка мережі", + "errorTypeTestUnsupported": "Тест не підтримується", + "errorTypeUpstreamError": "Вихідна помилка", + "proxySourceGlobal": "Глобальний", + "proxySourceProvider": "Провайдер", + "proxySourceKey": "ключ", + "proxyConfiguredBySource": "Проксі ({source}): {host}", + "autoPriority": "Автоматично: {priority}", + "proxy": "Проксі", + "retestAuthentication": "Перевірити автентифікацію", + "retest": "Перетестувати", + "disableConnection": "Відключити підключення", + "enableConnection": "Увімкнути підключення", + "reauthenticateConnection": "Повторно автентифікуйте це підключення", + "proxyConfig": "Конфігурація проксі", + "aliasExistsAlert": "Псевдонім \"{alias}\" вже існує. Використовуйте іншу модель або відредагуйте існуючий псевдонім.", + "openRouterAnyModelHint": "OpenRouter підтримує будь-яку модель. Додайте моделі та створіть псевдоніми для швидкого доступу.", + "modelIdFromOpenRouter": "ID моделі (з OpenRouter)", + "openRouterModelPlaceholder": "антропний/claude-3-opus", + "customModels": "Спеціальні моделі", + "customModelsHint": "Додайте ідентифікатори моделей, яких немає в списку за замовчуванням. Вони будуть доступні для маршрутизації.", + "modelId": "ID моделі", + "customModelPlaceholder": "напр. gpt-4.5-турбо", + "loading": "Завантаження...", + "removeCustomModel": "Видалити спеціальну модель", + "noCustomModels": "Спеціальні моделі ще не додано.", + "allSuggestedAliasesExist": "Усі запропоновані псевдоніми вже існують. Виберіть іншу модель або видаліть конфліктні псевдоніми.", + "failedSaveCustomModel": "Не вдалося зберегти спеціальну модель", + "modelAddedSuccess": "Модель {modelId} успішно додано", + "failedAddModelTryAgain": "Не вдалося додати модель. Спробуйте ще раз.", + "failedSaveImportedModel": "Не вдалося зберегти імпортовану модель до спеціальної бази даних", + "failedImportModelsTryAgain": "Не вдалося імпортувати моделі. Спробуйте ще раз.", + "failedRemoveModelFromDatabase": "Не вдалося видалити модель із бази даних", + "modelRemovedSuccess": "Модель успішно видалено", + "failedDeleteModelTryAgain": "Не вдалося видалити модель. Спробуйте ще раз.", + "compatibleModelsDescription": "Додайте {type}-сумісні моделі вручну або імпортуйте їх із кінцевої точки /models.", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Помилка перевірки ключа API. Перевірте свій ключ і повторіть спробу.", + "addProviderApiKeyTitle": "Додайте ключ API {provider}", + "checking": "Перевірка...", + "check": "Перевірте", + "valid": "Дійсний", + "invalid": "Недійсний", + "creating": "Створення...", + "validationChecksAnthropicCompatible": "Перевірка перевіряє {provider} шляхом підтвердження ключа API.", + "validationChecksOpenAiCompatible": "Перевірка перевірки {provider} через /models на вашій базовій URL-адресі.", + "priorityLabel": "Пріоритет", + "saving": "Збереження...", + "save": "зберегти", + "editConnection": "Редагувати підключення", + "accountName": "Ім'я облікового запису", + "email": "Електронна пошта", + "healthCheckMinutes": "Перевірка стану (хв.)", + "healthCheckHint": "Проактивний інтервал оновлення маркера. 0 = вимкнено.", + "failedTestConnection": "Не вдалося перевірити з’єднання", + "failed": "Не вдалося", + "leaveBlankKeepCurrentApiKey": "Залиште поле порожнім, щоб зберегти поточний ключ API.", + "editCompatibleTitle": "Редагувати {type} Сумісний", + "compatibleBaseUrlHint": "Використовуйте базову URL-адресу (закінчується на /v1) для свого {type}-сумісного API.", + "apiKeyForCheck": "Ключ API (для перевірки)", + "compatibleProdPlaceholder": "{type} Сумісність (Prod)" + }, + "settings": { + "title": "Налаштування", + "general": "Загальний", + "security": "Безпека", + "appearance": "Зовнішній вигляд", + "routing": "Маршрутизація", + "cache": "Кеш", + "resilience": "Стійкість", + "systemPrompt": "Системна підказка", + "thinkingBudget": "Мислення про бюджет", + "proxy": "Проксі", + "pricing": "Ціноутворення", + "storage": "Зберігання", + "policies": "політики", + "ipFilter": "IP-фільтр", + "comboDefaults": "Комбіновані параметри за замовчуванням", + "fallbackChains": "Резервні ланцюги", + "changePassword": "Змінити пароль", + "enablePassword": "Увімкнути пароль", + "darkMode": "Темний режим", + "lightMode": "Світловий режим", + "systemTheme": "Тема системи", + "enableCache": "Увімкнути кеш", + "cacheTTL": "Кеш TTL", + "maxCacheSize": "Максимальний розмір кешу", + "clearCache": "Очистити кеш", + "cacheHits": "Звернення до кешу", + "cacheMisses": "Промахи кешу", + "hitRate": "Рейтинг попадань", + "cacheEntries": "Записи кешу", + "circuitBreaker": "Автоматичний вимикач", + "retryPolicy": "Політика повторних спроб", + "maxRetries": "Макс. повторних спроб", + "retryDelay": "Затримка повтору", + "timeoutMs": "Час очікування (мс)", + "enableSystemPrompt": "Увімкнути системну підказку", + "systemPromptText": "Текст системної підказки", + "enableThinking": "Увімкнути мислення", + "maxThinkingTokens": "Макс жетонів мислення", + "enableProxy": "Увімкнути проксі", + "proxyUrl": "URL проксі", + "pricingRates": "Формат ціноутворення", + "currentPricing": "Огляд поточних цін", + "loadingPricing": "Завантаження даних про ціни...", + "noPricing": "Немає даних про ціни", + "input": "Введення", + "output": "Вихід", + "cached": "Кешовано", + "reasoning": "Міркування", + "cacheCreation": "Створення кешу", + "customPricing": "Спеціальне ціноутворення", + "databaseSize": "Розмір бази даних", + "backupDb": "Резервне копіювання бази даних", + "restoreDb": "Відновити базу даних", + "exportData": "Експорт даних", + "importData": "Імпорт даних", + "clearData": "Очистити всі дані", + "clearDataConfirm": "Це призведе до остаточного видалення всіх даних. Ви впевнені?", + "enableRequestLogs": "Увімкнути журнали запитів", + "logRetention": "Зберігання журналу", + "ipWhitelist": "Білий список IP-адрес", + "ipBlacklist": "Чорний список IP", + "addIP": "Додайте IP", + "savedSuccessfully": "Налаштування успішно збережено", + "ai": "ШІ", + "advanced": "Просунутий", + "localMode": "Локальний режим — усі дані, що зберігаються на вашій машині", + "settingsSectionsAria": "Розділи налаштувань", + "switchThemes": "Перемикання між світлою та темною темами", + "themeSelectionAria": "Вибір теми", + "themeLight": "світло", + "themeDark": "Темний", + "themeSystem": "система", + "hideHealthLogs": "Приховати журнали перевірки справності", + "hideHealthLogsDesc": "Коли ввімкнено, блокувати повідомлення [HealthCheck] на консолі сервера", + "promptCache": "Кеш підказок", + "flushCache": "Очистити кеш", + "flushing": "Промивання…", + "size": "Розмір", + "hits": "Хіти", + "evictions": "Виселення", + "loadingCacheStats": "Завантаження статистики кешу…", + "globalProxy": "Глобальний проксі", + "globalProxyDesc": "Налаштуйте глобальний вихідний проксі для всіх викликів API. Окремі постачальники, комбінації та ключі можуть замінити це.", + "noGlobalProxy": "Глобальний проксі не налаштовано", + "globalLabel": "Глобальний", + "configure": "Налаштувати", + "globalSystemPrompt": "Глобальна системна підказка", + "systemPromptDesc": "Впроваджується в усі запити на рівні проксі", + "saved": "Збережено", + "systemPromptPlaceholder": "Введіть системний запит, щоб додати в усі запити...", + "systemPromptHint": "Ця підказка додається до системного повідомлення кожного запиту. Використовуйте для загальних інструкцій, інструкцій з безпеки або правил форматування відповідей.", + "chars": "{count} символів", + "thinkingBudgetTitle": "Мислення про бюджет", + "thinkingBudgetDesc": "Контролюйте використання маркера міркування AI для всіх запитів", + "passthrough": "Прохідний", + "passthroughDesc": "Без змін — клієнт контролює бюджет мислення", + "auto": "Авто", + "autoDesc": "Видаліть усі конфігурації мислення — дозвольте постачальнику вирішувати", + "custom": "Custom", + "customDesc": "Встановіть фіксований бюджет токенів для всіх запитів", + "adaptive": "Адаптивний", + "adaptiveDesc": "Масштабуйте бюджет на основі складності запиту", + "effortNone": "Жодного (0 токенів)", + "effortLow": "Низький (1 тис. жетонів)", + "effortMedium": "Середній (10 тисяч токенів)", + "effortHigh": "Високий (128 тис. токенів)", + "tokenBudget": "Токен Бюджет", + "tokens": "жетони", + "baseEffortLevel": "Базовий рівень зусиль", + "adaptiveHint": "Адаптивний режим масштабується від цього базового рівня на основі кількості повідомлень, використання інструментів і тривалості запиту.", + "requireLogin": "Вимагати авторизації", + "requireLoginDesc": "Коли УВІМКНЕНО, інформаційна панель вимагає пароля. Коли ВИМКНЕНО, доступ без входу.", + "currentPassword": "Поточний пароль", + "enterCurrentPassword": "Введіть поточний пароль", + "newPassword": "Новий пароль", + "enterNewPassword": "Введіть новий пароль", + "confirmPassword": "Підтвердьте новий пароль", + "confirmPasswordPlaceholder": "Підтвердьте новий пароль", + "passwordsNoMatch": "Паролі не збігаються", + "passwordUpdated": "Пароль успішно оновлено", + "failedUpdatePassword": "Не вдалося оновити пароль", + "errorOccurred": "Сталася помилка", + "updatePassword": "Оновити пароль", + "setPassword": "Встановити пароль", + "apiEndpointProtection": "API Endpoint Protection", + "requireAuthModels": "Вимагати ключ API для /models", + "requireAuthModelsDesc": "Якщо ON, кінцева точка /v1/models повертає 404 для неавтентифікованих запитів. Запобігає виявленню моделі неавторизованими користувачами.", + "blockedProviders": "Заблоковані постачальники", + "blockedProvidersDesc": "Приховати певних постачальників у відповіді /v1/models. Заблоковані постачальники не відображатимуться в списках моделей.", + "providersBlocked": "{count} постачальник(ів) заблоковано для /models", + "blockProviderTitle": "Заблокувати {provider}", + "unblockProviderTitle": "Розблокувати {provider}", + "routingStrategy": "Стратегія маршрутизації", + "fillFirst": "Заповніть спочатку", + "fillFirstDesc": "Використовуйте облікові записи в пріоритетному порядку", + "roundRobin": "Кругова система", + "roundRobinDesc": "Перегляньте всі облікові записи", + "p2c": "P2C", + "p2cDesc": "Виберіть 2 навмання, використовуйте здоровіший", + "random": "Випадковий", + "randomDesc": "Випадковий рахунок для кожного запиту", + "leastUsed": "Найменш використовуваний", + "leastUsedDesc": "Виберіть нещодавно використовуваний обліковий запис", + "costOpt": "Вартість Opt", + "costOptDesc": "Віддайте перевагу найдешевшому доступному обліковому запису", + "stickyLimit": "Sticky Limit", + "stickyLimitDesc": "Дзвінки на обліковий запис перед переходом", + "modelAliases": "Псевдоніми моделі", + "modelAliasesDesc": "Шаблони шаблонів узагальнення для зміни назв моделей • Використовуйте * та ?", + "aliasPatternPlaceholder": "клод-сонет-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", + "pattern": "Візерунок", + "targetModel": "Цільова модель", + "add": "+ Додати", + "session": "Сесія", + "sessionDetailsAria": "Деталі сеансу", + "status": "Статус", + "authenticated": "Автентифіковано", + "guest": "Гість", + "loginTime": "Час входу", + "sessionAge": "Вік сесії", + "browser": "Браузер", + "clearLocalData": "Очистити локальні дані", + "logout": "Вийти", + "clearLocalDataConfirm": "Очистити всі локальні дані? Це скине ваші налаштування.", + "unknown": "Невідомий", + "systemActor": "система", + "ipAccessControl": "Контроль IP доступу", + "ipAccessControlDesc": "Блокувати або дозволяти певні IP-адреси", + "ipModeDisabled": "Вимкнено", + "ipModeBlacklist": "Чорний список", + "ipModeWhitelist": "Білий список", + "ipModeWhitelistPriority": "Пріоритет WL", + "addIpAddress": "Додайте IP-адресу", + "ipAddressPlaceholder": "192.168.1.0/24 або 10.0.*.*", + "block": "+ Блокувати", + "allow": "+ Дозволити", + "blocked": "Заблоковано ({count})", + "allowed": "Дозволено ({count})", + "temporaryBans": "Тимчасові заборони ({count})", + "minLeft": "Залишилося {min}хв", + "auditLog": "Журнал аудиту", + "searchAuditLogs": "Шукати журнали аудиту...", + "failedLoadAuditLog": "Не вдалося завантажити журнал аудиту", + "noAuditEvents": "Подій аудиту не знайдено", + "action": "Дія", + "actor": "Актор", + "details": "Подробиці", + "time": "час", + "fallbackChainsTitle": "Резервні ланцюги", + "fallbackChainsDesc": "Визначте запасний порядок постачальника для кожної моделі", + "addChain": "+ Додати ланцюг", + "modelName": "Назва моделі", + "modelNamePlaceholder": "claude-sonnet-4-20250514", + "providersCommaSeparated": "Постачальники (через кому, у порядку пріоритету)", + "providersCommaSeparatedPlaceholder": "антропний, опенай, геміні", + "createChain": "Створити ланцюжок", + "noFallbackChains": "Без запасних ланцюгів", + "noFallbackChainsDesc": "Створіть ланцюжок, щоб визначити запасний порядок постачальника для моделі.", + "loadingFallbackChains": "Завантаження резервних ланцюжків...", + "deleteChainConfirm": "Видалити резервний ланцюжок для \"{model}\"?", + "chainCreated": "Створено ланцюжок для {model}", + "chainDeleted": "Ланцюжок видалено для {model}", + "failedCreateChain": "Не вдалося створити ланцюжок", + "failedDeleteChain": "Не вдалося видалити ланцюжок", + "deleteChain": "Видалити ланцюжок", + "fillModelAndProviders": "Введіть назву моделі та постачальників", + "addAtLeastOneProvider": "Додайте хоча б одного постачальника", + "comboDefaultsTitle": "Комбіновані параметри за замовчуванням", + "globalComboConfig": "Конфігурація глобального комбо", + "defaultStrategy": "Стратегія за замовчуванням", + "defaultStrategyDesc": "Застосовується до нових комбо без явної стратегії", + "comboStrategyAria": "Комбінована стратегія", + "priority": "Пріоритет", + "weighted": "Зважений", + "maxRetriesLabel": "Макс. повторних спроб", + "retryDelayLabel": "Затримка повтору (мс)", + "timeoutLabel": "Час очікування (мс)", + "healthCheck": "Перевірка стану здоров'я", + "healthCheckDesc": "Попередньо уточнюйте наявність у провайдера", + "trackMetrics": "Відстежувати показники", + "trackMetricsDesc": "Записуйте показники комбінованих запитів", + "providerOverrides": "Перевизначення постачальника", + "providerOverridesDesc": "Перевизначити час очікування та повторити спроби для кожного постачальника. Налаштування постачальника замінюють глобальні налаштування за умовчанням.", + "providerMaxRetriesAria": "Максимальна кількість повторних спроб: {provider}", + "providerTimeoutAria": "{provider} тайм-аут мс", + "removeProviderOverrideAria": "Видалити перевизначення {provider}", + "newProviderNamePlaceholder": "напр. гугли, відкривай...", + "newProviderNameAria": "Нова назва провайдера", + "retries": "повтори", + "ms": "мс", + "saveComboDefaults": "Зберегти комбіновані параметри за замовчуванням", + "maxNestingDepth": "Максимальна глибина вкладення", + "concurrencyPerModel": "Одночасність / Модель", + "queueTimeout": "Час очікування черги (мс)", + "providerProfiles": "Профілі постачальників", + "providerProfilesDesc": "Окремі параметри стійкості для постачальників OAuth (на основі сеансу) і ключа API (з вимірюванням). Постачальники OAuth мають суворіші порогові значення через нижчі обмеження швидкості.", + "oauthProviders": "Постачальники OAuth", + "apiKeyProviders": "Постачальники ключів API", + "transientCooldown": "Перехідний час відновлення", + "rateLimitCooldown": "Обмеження швидкості відновлення", + "maxBackoffLevel": "Максимальний рівень резервування", + "cbThreshold": "Поріг CB", + "cbResetTime": "Час скидання CB", + "rateLimiting": "Обмеження швидкості", + "rateLimitingDesc": "Постачальники ключів API автоматично обмежуються швидкістю з безпечними параметрами за замовчуванням. Обмеження вивчаються із заголовків відповідей і адаптуються з часом.", + "defaultSafetyNet": "Стандартна мережа безпеки", + "rpm": "RPM", + "minGap": "Мінімальний розрив", + "maxConcurrent": "Максимальна одночасність", + "activeLimiters": "Активні обмежувачі", + "noActiveLimiters": "Активних обмежувачів швидкості ще немає.", + "reservoir": "Водосховище", + "running": "Біг", + "queued": "У черзі", + "circuitBreakers": "Автоматичні вимикачі", + "breakerStateClosed": "Закрито", + "breakerStateOpen": "відкритий", + "breakerStateHalfOpen": "Напіввідкритий", + "tripped": "{count} спрацював", + "healthy": "{count} здоровий", + "resetAll": "Скинути все", + "noCircuitBreakers": "Ще немає активних автоматичних вимикачів. Вони створюються автоматично, коли запити проходять через комбінований конвеєр.", + "failures": "{count} помилка(и)", + "policiesLocked": "Політики та заблоковані ідентифікатори", + "allOperational": "Усі системи в робочому стані — жодних блокувань чи спрацьованих вимикачів", + "loadingPolicies": "Завантаження правил...", + "lockedIdentifiers": "Заблоковані ідентифікатори", + "unlockedIdentifier": "Розблоковано: {identifier}", + "sinceDate": "з {date}", + "forceUnlock": "Примусове розблокування", + "unlocking": "Розблокування...", + "failedUnlock": "Не вдалося розблокувати", + "failedLoadWithStatus": "Не вдалося завантажити: {status}", + "failedLoadResilience": "Не вдалося завантажити статус стійкості", + "saveFailed": "Не вдалося зберегти", + "resetFailed": "Помилка скидання", + "loadingResilience": "Завантаження стану стійкості...", + "retry": "Повторіть спробу", + "systemStorage": "Система та зберігання", + "allDataLocal": "Усі дані зберігаються локально на вашій машині", + "databasePath": "Шлях до бази даних", + "exportDatabase": "Експорт бази даних", + "exportAll": "Експортувати все (.tar.gz)", + "importDatabase": "Імпорт бази даних", + "confirmDbImport": "Підтвердьте імпорт бази даних", + "confirmDbImportDesc": "Усі поточні дані буде замінено вмістом із {file}. Резервна копія буде створена автоматично перед імпортом.", + "yesImport": "Так, імпорт", + "lastBackup": "Остання резервна копія", + "noBackupYet": "Резервної копії ще немає", + "backupNow": "Резервне копіювання зараз", + "backupRestore": "Резервне копіювання та відновлення", + "viewBackups": "Переглянути резервні копії", + "hide": "Сховати", + "backupRetentionDesc": "Знімки бази даних створюються автоматично перед відновленням і кожні 15 хвилин, коли дані змінюються. Зберігання: 24 години на годину + 30 щоденних резервних копій із розумною ротацією.", + "loadingBackups": "Завантаження резервних копій...", + "noBackupsYet": "Резервних копій ще немає. Резервні копії створюватимуться автоматично при зміні даних.", + "backupsAvailable": "Доступні резервні копії {count}", + "refresh": "Оновити", + "confirm": "Підтвердити?", + "yes": "так", + "no": "немає", + "restore": "Відновити", + "invalidFileType": "Недійсний тип файлу. Приймаються лише файли .sqlite.", + "exportFailed": "Помилка експорту", + "exportFailedWithError": "Помилка експорту: {error}", + "fullExportFailedWithError": "Помилка повного експорту: {error}", + "backupCreated": "Створено резервну копію: {file}", + "restoreSuccess": "Відновлено! {connections} підключень, {nodes} вузлів, {combos} комбо, {apiKeys} ключів API.", + "importSuccess": "Базу даних імпортовано! {connections} підключень, {nodes} вузлів, {combos} комбо, {apiKeys} ключів API.", + "justNow": "тільки зараз", + "minutesAgo": "{count}хв тому", + "hoursAgo": "{count} год тому", + "daysAgo": "{count} дн. тому", + "backupReasonManual": "посібник", + "backupReasonPreRestore": "попереднє відновлення", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Жодних змін з часу останнього резервного копіювання", + "backupFailed": "Помилка резервного копіювання", + "restoreFailed": "Не вдалося відновити", + "importFailed": "Помилка імпорту", + "errorDuringRestore": "Під час відновлення сталася помилка", + "errorDuringImport": "Під час імпорту сталася помилка", + "modelPricing": "Модель ціноутворення", + "modelPricingDesc": "Налаштуйте ставки витрат для моделі • Усі ставки в токенах $/1 млн", + "providers": "Провайдери", + "registry": "Реєстр", + "priced": "Ціна", + "searchProvidersModels": "Пошук постачальників або моделей...", + "showAll": "Показати все", + "noProvidersMatch": "Жоден провайдер не відповідає вашому запиту.", + "howPricingWorks": "Як працює ціноутворення", + "cacheWrite": "Запис кешу", + "unsaved": "незбережено", + "resetDefaults": "Скинути значення за замовчуванням", + "saveProvider": "Зберегти постачальника", + "saving": "Збереження...", + "model": "Модель", + "models": "моделі", + "moreProviders": "{count} більше постачальників", + "withPricing": "із налаштованим ціноутворенням", + "policiesCircuitBreakers": "Правила та автоматичні вимикачі", + "activeIssuesDetected": "Виявлено активні проблеми", + "off": "Вимкнено", + "resetPricingConfirm": "Відновити всі ціни для {provider} до стандартних?", + "pricingDescInput": "Вхід: токени, надіслані моделі", + "pricingDescOutput": "Результат: згенеровано токени", + "pricingDescCached": "Кешовано: повторно використаний вхід (~50% швидкості введення)", + "pricingDescReasoning": "Міркування: маркери мислення (повертається до результату)", + "pricingDescCacheWrite": "Cache Write: створення записів кешу (повертається до Input)", + "pricingDescFormula": "Вартість = (input × input_rate) + (output × output_rate) + (cached × cached_rate) на мільйон токенів.", + "pricingSettingsTitle": "Налаштування ціни", + "totalModels": "Всього моделей", + "active": "Активний", + "costCalculation": "Розрахунок вартості", + "costCalculationDesc": "Витрати розраховуються на основі використання токенів і ставок ціноутворення, налаштованих для кожної моделі.", + "pricingFormat": "Формат ціноутворення", + "pricingFormatDesc": "Усі ставки вказані в $/1 млн токенів (доларів за мільйон токенів).", + "tokenTypes": "Типи токенів", + "inputTokenDesc": "Стандартні маркери підказок", + "outputTokenDesc": "Жетони завершення/відповіді", + "cachedTokenDesc": "Кешовані маркери введення (зазвичай 50% швидкості введення)", + "reasoningTokenDesc": "Спеціальні маркери міркування/мислення (відкат до швидкості виведення)", + "cacheCreationTokenDesc": "Токени, що використовуються для створення записів кешу (резервний вихід до швидкості введення)", + "customPricingNote": "Ви можете змінити ціни за умовчанням для певних моделей. Спеціальні зміни мають пріоритет над автоматично визначеними цінами.", + "editPricing": "Редагувати ціни", + "viewFullDetails": "Переглянути повну інформацію" + }, + "translator": { + "title": "Перекладач", + "metaTitle": "Ігровий майданчик для перекладачів | OmniRoute", + "metaDescription": "Налагодження, тестування та візуалізація перекладів форматів API між постачальниками", + "playgroundTitle": "Майданчик для перекладачів", + "playground": "Дитячий майданчик", + "realtime": "Переклад в реальному часі", + "chatTester": "Тестер чату", + "testBench": "Випробувальний стенд", + "liveMonitor": "Живий монітор", + "modeDescriptionPlayground": "Вставте будь-яке тіло запиту API та подивіться, як OmniRoute перекладає його між форматами постачальників (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "Надсилайте реальні запити чату через OmniRoute та перевіряйте повний цикл: введення, перекладений запит, відповідь постачальника та перекладений вихід.", + "modeDescriptionTestBench": "Виконуйте попередньо визначені сценарії та порівнюйте сумісність між постачальниками та моделями.", + "modeDescriptionLiveMonitor": "Переглядайте події перекладу в режимі реального часу, коли запити надходять через OmniRoute.", + "modeDescriptionFallback": "Налагоджуйте, тестуйте та візуалізуйте, як OmniRoute перекладає запити API між постачальниками.", + "recentTranslations": "Останні переклади", + "noTranslations": "Перекладів ще немає", + "source": "Джерело", + "target": "Цільова", + "time": "час", + "model": "Модель", + "status": "Статус", + "latency": "Затримка", + "totalTranslations": "Загальні переклади", + "successful": "Успішний", + "errors": "Помилки", + "avgLatency": "Середня затримка", + "millisecondsShort": "{value}мс", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Live — Автоматичне оновлення", + "paused": "Призупинено", + "eventsAppearHint": "Події перекладу з’являються тут, коли запити проходять через OmniRoute. Використовуйте будь-який із цих методів для створення подій:", + "chatTesterTab": "Вкладка Тестер чату", + "testBenchTab": "Вкладка «Випробувальний стенд».", + "externalApiCalls": "Зовнішні виклики API", + "ideCliIntegrations": "Інтеграції IDE/CLI", + "inMemoryNote": "Примітка. Події зберігаються в пам’яті та скидаються під час перезапуску сервера.", + "ok": "добре", + "errorShort": "ERR", + "formatConverter": "Конвертер форматів", + "formatConverterDescription": "Вставте або введіть тіло запиту JSON. Перекладач автоматично визначить вихідний формат і перетворить його на цільовий формат. Використовуйте це, щоб налагодити, як OmniRoute перекладає запити між форматами (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).", + "input": "Введення", + "output": "Вихід", + "auto": "Авто", + "swapFormats": "Поміняти місцями формати", + "translateAction": "Перекласти", + "clear": "ясно", + "inputPlaceholder": "Вставте сюди текст запиту або виберіть шаблон нижче...", + "exampleTemplates": "Приклади шаблонів", + "exampleTemplatesHint": "— Натисніть, щоб завантажити", + "templateLoadHint": "Шаблон завантажує запит у форматі {format}. Змініть вихідний формат для завантаження в іншому форматі.", + "compatibilityTester": "Тестер сумісності", + "compatibilityReport": "Звіт про сумісність", + "testBenchDescription": "Запустіть попередньо визначені сценарії (простий чат, виклик інструментів тощо), щоб перевірити переклад і сумісність постачальника. Виберіть вихідний формат і цільового постачальника, а потім запустіть усі тести, щоб побачити відсоток сумісності. Використовуйте це, щоб дізнатися, які функції працюють у різних постачальників.", + "targetProvider": "Цільовий постачальник", + "runAllTests": "Виконайте всі тести", + "runTest": "Запустити тест", + "reRun": "Повторний запуск", + "running": "Біг...", + "passed": "пройшли", + "failed": "не вдалося", + "passedIconLabel": "✅ Пройшли", + "chunks": "шматки", + "scenarioSimpleChat": "Простий чат", + "scenarioToolCalling": "Виклик інструменту", + "scenarioMultiTurn": "Багатооборотний", + "scenarioThinking": "Мислення", + "scenarioSystemPrompt": "Системна підказка", + "scenarioStreaming": "Потокове передавання", + "templateNames": { + "simple-chat": "Простий чат", + "tool-calling": "Виклик інструменту", + "multi-turn": "Багатооборотний", + "thinking": "Мислення", + "system-prompt": "Системна підказка", + "streaming": "Потокове передавання" + }, + "templateDescriptions": { + "simple-chat": "Основне текстове повідомлення", + "tool-calling": "Виклик функції/інструменту", + "multi-turn": "Розмова з історією", + "thinking": "Розширене мислення / міркування", + "system-prompt": "Комплексна системна інструкція", + "streaming": "Запит потокового передавання SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Ви корисний помічник.", + "userGreeting": "Привіт! Як справи сьогодні?" + }, + "toolCalling": { + "userWeather": "Яка погода в Сан-Паулу?", + "toolDescription": "Отримайте поточну погоду для певного місця", + "cityNameDescription": "Назва міста" + }, + "multiTurn": { + "system": "Ви помічник кодування.", + "userInitial": "Напишіть функцію для сортування масиву в Python.", + "assistantExample": "Ось проста функція сортування:\n\n```пітон\ndef sort_array(arr):\n повернути sorted(arr)\n```", + "userFollowUp": "Тепер відсортуйте його в порядку спадання." + }, + "thinking": { + "question": "Чому дорівнює сума перших 100 простих чисел?" + }, + "systemPrompt": { + "systemInstruction": "Ви старший інженер програмного забезпечення, який спеціалізується на розподілених системах. Дайте короткі відповіді на запитання, використовуючи передовий досвід галузі. Завжди надавайте приклади коду, коли це необхідно. Форматуйте свої відповіді за допомогою розмітки.", + "question": "Як реалізувати шаблон автоматичного вимикача?" + }, + "streaming": { + "prompt": "Розкажіть мені коротку історію про робота, який вчиться малювати." + } + }, + "openaiCompatibleLabel": "Сумісність з OpenAI", + "anthropicCompatibleLabel": "Антропна сумісність", + "noTemplateForFormat": "Немає шаблону для цього формату", + "translationFailed": "Помилка перекладу: {error}", + "pipelineDebugger": "Відладчик конвеєра", + "translationPipeline": "Конвеєр перекладу", + "pipelineVisualization": "Візуалізація трубопроводу", + "pipelineVisualizationHint": "Надішліть повідомлення, щоб побачити, як ваш запит проходить через виявлення → переклад → виклик постачальника.", + "chatTesterDescription": "Надсилайте повідомлення як певний клієнтський формат і перевіряйте кожен крок конвеєра перекладу.", + "chatTesterFlow": "Запит клієнта → Виявлення формату → OpenAI Intermediate → Формат постачальника → Відповідь", + "clickStepToInspect": "Натисніть будь-який крок, щоб перевірити дані на цьому етапі.", + "clientFormat": "Формат клієнта", + "provider": "Провайдер", + "modelPlaceholder": "Виберіть або введіть назву моделі...", + "sendMessageToSeePipeline": "Надішліть повідомлення, щоб побачити конвеєр перекладу", + "chatMessageHintPrefix": "Ваше повідомлення буде відформатовано як a", + "chatMessageHintSuffix": "запит, перекладений через конвеєр і надісланий вибраному постачальнику.", + "youWithFormat": "Ви ({format})", + "assistant": "помічник", + "typeMessage": "Введіть повідомлення...", + "send": "Надіслати", + "clientRequest": "Запит клієнта", + "clientRequestDescription": "Тіло запиту, як його надіслав би ваш клієнт", + "formatDetected": "Виявлено формат", + "formatDetectedDescription": "OmniRoute автоматично визначає формат API зі структури запиту", + "openaiIntermediate": "OpenAI Intermediate", + "openaiIntermediateDescription": "Усі формати спочатку нормалізуються до формату OpenAI (універсальний міст)", + "providerFormat": "Формат постачальника", + "providerFormatDescription": "Формат OpenAI перекладається на рідний формат постачальника", + "providerResponse": "Відповідь постачальника", + "providerResponseRawDescription": "Необроблена відповідь від API постачальника", + "providerResponseSseDescription": "Необроблений потік SSE від API постачальника", + "unexpectedError": "Сталася неочікувана помилка", + "error": "Помилка", + "errorMessage": "Помилка: {message}", + "requestFailed": "Запит не виконано", + "noTextExtracted": "(Текст не витягнуто)", + "liveMonitorDescriptionPrefix": "Показує події перекладу, коли виклики API проходять через OmniRoute. Події надходять із буфера в пам'яті (скидається під час перезавантаження). використання", + "liveMonitorDescriptionSuffix": "або виклики зовнішнього API для створення подій." + }, + "usage": { + "title": "Використання", + "loggerTab": "Лісоруб", + "proxyTab": "Проксі", + "budgetManagement": "Управління бюджетом", + "budgetSaved": "Обмеження бюджету збережено", + "budgetSaveFailed": "Не вдалося зберегти бюджет", + "loadingBudgetData": "Завантаження даних бюджету...", + "noApiKeysTitle": "Немає ключів API", + "noApiKeysDescription": "Спочатку додайте ключі API, щоб установити обмеження бюджету.", + "apiKey": "Ключ API", + "todaysSpend": "Сьогоднішні витрати", + "thisMonth": "Цей місяць", + "setLimits": "Встановити обмеження", + "dailyLimitUsd": "Денний ліміт (USD)", + "monthlyLimitUsd": "Місячний ліміт (USD)", + "warningThresholdPercent": "Порогове значення попередження (%)", + "dailyLimitPlaceholder": "напр. 5.00", + "monthlyLimitPlaceholder": "напр. 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Зберегти обмеження", + "budgetOk": "Бюджет нормальний — залишилося {remaining}", + "budgetExceeded": "Бюджет перевищено — запити можуть бути заблоковані", + "totalRequests": "Всього запитів", + "noDataYet": "Даних ще немає", + "latency": "Затримка", + "latencyP50": "стор.50", + "latencyP95": "стор.95", + "latencyP99": "стор.99", + "promptCache": "Кеш підказок", + "systemHealth": "Здоров'я системи", + "entries": "Записи", + "activeCount": "{count} активний", + "openCircuitBreakersDetected": "Виявлено відкриті вимикачі", + "hitRate": "Рейтинг попадань", + "hitsMisses": "Попадання / промахи", + "circuitBreakers": "Автоматичні вимикачі", + "lockedIPs": "Заблоковані IP-адреси", + "lockoutsAutoRefreshHint": "Блокування обмеження швидкості для кожної моделі • Автоматичне оновлення 10 с", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "Залишилося {time}", + "howItWorks": "Як це працює", + "howItWorksSubtitle": "Дізнайтеся, як оцінки підтверджують ваші відповіді LLM", + "define": "Визначити", + "defineStepDescription": "Створюйте тестові випадки з підказками введення та очікуваними критеріями виводу, використовуючи такі стратегії, як містить, регулярний вираз або точна відповідність.", + "run": "бігти", + "runStepDescription": "Виконуйте тестові випадки на кінцевих точках LLM через OmniRoute. Кожен випадок надсилається як справжній запит API.", + "evaluate": "Оцініть", + "evaluateStepDescription": "Відповіді порівнюються з очікуваними критеріями. Перегляньте відповідність/незадоволення для кожного випадку з показниками затримки та детальним відгуком.", + "evalSuites": "Комплекти оцінювання", + "evalSuitesHint": "Натисніть набір, щоб переглянути тестові випадки, а потім запустіть, щоб оцінити свої кінцеві точки LLM", + "evalsLoading": "Завантаження eval suites...", + "noEvalSuitesFound": "Eval Suites не знайдено", + "noEvalSuitesDescription": "Комплекти Eval можна визначити через API або в коді. Вони перевіряють вихідні дані моделі на очікувані результати, використовуючи такі стратегії, як містять, регулярні вирази, точна відповідність і спеціальні функції.", + "columnCase": "Справа", + "columnStatus": "Статус", + "columnLatency": "Затримка", + "columnDetails": "Подробиці", + "columnModel": "Модель", + "columnStrategy": "Стратегія", + "columnExpected": "Очікуваний", + "statsSuites": "Люкс", + "statsTestCases": "Тестові випадки", + "statsModels": "Моделі", + "statsCoverage": "Покриття", + "statsStrategiesCount": "{count} стратегії", + "evaluationStrategies": "Стратегії оцінювання", + "modelsUnderTest": "Тестуються моделі", + "searchSuitesPlaceholder": "Пошук комплектів...", + "passSuffix": "пропуск", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Запустіть Eval", + "runningProgress": "Виконується {current}/{total}...", + "passRate": "прохідний бал", + "summaryBreakdown": "{passed} пройдено · {failed} не виконано · {total} всього", + "passedIconLabel": "✅ Пройшли", + "failedIconLabel": "❌ Не вдалося", + "detailsContains": "Містить: \"{term}\"", + "detailsRegex": "Регулярний вираз: {pattern}", + "detailsExpected": "Очікується: \"{expected}\"", + "noResultsYet": "Результатів ще немає", + "testCasesCount": "Тестові випадки ({count})", + "noTestCasesDefined": "Тестових випадків не визначено", + "runEvalHint": "Натисніть «Run Eval», щоб виконати всі кейси щодо вашої кінцевої точки LLM. Кожен тест надсилає реальний запит через OmniRoute.", + "notifyNoTestCases": "Для цього набору тестів не визначено", + "notifyAllCasesPassed": "Усі випадки {total} пройдено ✅", + "notifySomeCasesFailed": "{passed}/{total} пройдено, {failed} не виконано", + "notifyEvalRunFailed": "Помилка виконання Eval", + "notifyEvalTitle": "Оцінка: {name}", + "modelEvals": "Модельні оцінки", + "evalsHeroDescription": "Протестуйте та перевірте свої кінцеві точки LLM, запустивши попередньо визначені пакети оцінок. Кожен набір містить тестові випадки, які надсилають реальні підказки через OmniRoute та порівнюють відповіді з очікуваними критеріями, допомагаючи вам виявити регресії, порівняти моделі та забезпечити якість відповіді між провайдерами.", + "qualityValidation": "Перевірка якості", + "modelComparison": "Порівняння моделей", + "regressionDetection": "Виявлення регресії", + "latencyBenchmarks": "Контрольні показники затримки", + "modelLockouts": "Блокування моделі", + "noLockouts": "Наразі немає заблокованих моделей", + "activeSessions": "Активні сесії", + "noSessions": "Немає активних сеансів", + "sessionsHint": "Сеанси з’являються, коли запити надходять через проксі-сервер", + "sessionsTrackedHint": "Відстежується через запит відбитків пальців • Автоматичне оновлення 5 с", + "session": "Сесія", + "age": "Вік", + "requests": "Запити", + "connection": "Підключення", + "durationMillisecondsShort": "{value}мс", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}м", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Обмеження постачальника", + "noProviders": "Немає підключених постачальників", + "connectProvidersForQuota": "Підключайтеся до постачальників за допомогою OAuth, щоб відстежувати обмеження квоти та використання API.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(відфільтровано з {count})", + "autoRefresh": "Автооновлення", + "refreshAll": "Оновити все", + "loadingQuotas": "Завантаження...", + "account": "Обліковий запис", + "modelQuotas": "Модельні квоти", + "lastUsed": "Останнє використання", + "actions": "Дії", + "refreshQuota": "Оновити квоту", + "today": "Сьогодні", + "tomorrow": "завтра", + "dayTimeFormat": "{day}, {time}", + "inDuration": "в {duration}", + "notApplicable": "N/A", + "rawPlanWithValue": "Необроблений план: {plan}", + "noPlanFromProvider": "Без плану від провайдера", + "noQuotaData": "Немає даних про квоти", + "noQuotaDataAvailable": "Немає даних про квоти", + "noAccountsForTierFilter": "Не знайдено облікових записів для фільтра рівня", + "tierAll": "всі", + "tierEnterprise": "підприємство", + "tierTeam": "команда", + "tierBusiness": "Бізнес", + "tierUltra": "Ультра", + "tierPro": "Pro", + "tierPlus": "Плюс", + "tierFree": "безкоштовно", + "tierUnknown": "Невідомий" + }, + "modals": { + "waitingAuth": "Очікування авторизації", + "verificationUrl": "URL перевірки", + "yourCode": "Ваш код", + "remoteAccess": "Віддалений доступ:", + "connectedSuccess": "Підключено успішно!", + "connectionFailed": "Збій підключення", + "chooseAuthMethod": "Виберіть метод автентифікації:", + "awsBuilderId": "Ідентифікатор AWS Builder", + "awsIamIdentity": "Центр ідентифікації AWS IAM", + "googleAccount": "Обліковий запис Google", + "githubAccount": "Обліковий запис GitHub", + "importToken": "Імпорт маркера", + "pasteToken": "Вставте маркер оновлення з Kiro IDE.", + "awsRegion": "Регіон AWS", + "autoDetecting": "Автоматичне визначення токенів...", + "readingFromCache": "Читання з кешу AWS SSO", + "readingFromCursor": "Читання з бази даних Cursor IDE", + "initializing": "Ініціалізація...", + "pricingConfig": "Конфігурація ціни", + "loadingPricing": "Завантаження даних про ціни...", + "pricingRatesFormat": "Формат ціноутворення", + "noPricingData": "Немає даних про ціни", + "noModelsFound": "Моделі не знайдено" + }, + "loggers": { + "allProviders": "Усі постачальники", + "allModels": "Всі моделі", + "allAccounts": "Усі облікові записи", + "allApiKeys": "Усі ключі API", + "allTypes": "Всі типи", + "allLevels": "Всі рівні", + "modelAZ": "Модель A-Z", + "modelZA": "Модель Z-A", + "loadingLogs": "Завантаження журналів...", + "loadingProxyLogs": "Завантаження журналів проксі...", + "noLogEntries": "Записів у журналі не знайдено", + "noPayloadData": "Для цього запису журналу немає даних про корисне навантаження.", + "proxyEvent": "Проксі-подія", + "proxy": "Проксі", + "level": "Рівень", + "directNative": "Прямий (рідний)", + "combo": "комбо", + "inputTokens": "Я:", + "outputTokens": "О:" + }, + "stats": { + "usageOverview": "Огляд використання", + "outputTokens": "Вихідні жетони", + "totalCost": "Загальна вартість", + "usageByModel": "Використання за моделлю", + "usageByAccount": "Використання обліковим записом", + "failedToLoad": "Не вдалося завантажити статистику використання.", + "tokenHealth": "Токен здоров'я", + "totalOAuth": "Загальний OAuth", + "healthy": "Здоровий", + "warning": "Попередження", + "errored": "Помилка", + "lastCheck": "Остання перевірка", + "noData": "Немає даних", + "share": "Поділіться", + "unableToLoad": "Не вдалося завантажити системні показники", + "product": "Продукт", + "resources": "Ресурси", + "company": "Компанія" + }, + "auth": { + "welcome": "Ласкаво просимо", + "signIn": "Увійдіть", + "enterPassword": "Введіть свій пароль, щоб продовжити", + "password": "Пароль", + "unifiedProxy": "Unified AI API Proxy", + "unifiedAiApiProxy": "Unified AI API Proxy", + "unifiedAiApiProxyDesc": "Направляйте запити до кількох постачальників штучного інтелекту через одну кінцеву точку. Вбудоване балансування навантаження, відновлення після відмови та відстеження використання.", + "passwordNotEnabled": "Захист паролем не ввімкнено", + "loading": "Завантаження...", + "invalidPassword": "Недійсний пароль", + "errorOccurredRetry": "Сталася помилка. Спробуйте ще раз.", + "configureInstance": "Давайте налаштуємо ваш екземпляр OmniRoute", + "runOnboardingWizard": "Запустіть майстер адаптації, щоб налаштувати пароль і підключити свого першого постачальника AI.", + "startOnboarding": "Почніть адаптацію", + "secureYourInstance": "Захистіть свій екземпляр", + "setPasswordDescription": "Встановіть пароль, щоб захистити свою інформаційну панель і кінцеві точки API від несанкціонованого доступу.", + "configurePassword": "Налаштувати пароль", + "continue": "Продовжити", + "windowWillClose": "Це вікно закриється автоматично...", + "closeTabNow": "Ви можете закрити цю вкладку зараз.", + "copyUrlManual": "Скопіюйте URL-адресу з адресного рядка та вставте її в додаток.", + "accessDeniedDescription": "Ви не маєте дозволу на доступ до цього ресурсу. Перевірте свій ключ API або зверніться до адміністратора.", + "goToDashboard": "Перейдіть на інформаційну панель", + "featureMultiProviderTitle": "Багатопровайдер", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google тощо", + "featureLoadBalancingTitle": "Балансування навантаження", + "featureLoadBalancingDesc": "Розповсюджуйте запити розумно", + "featureUsageTrackingTitle": "Відстеження використання", + "featureUsageTrackingDesc": "Відстежуйте витрати та токени", + "resetPassword": "Скинути пароль", + "resetDescription": "Виберіть спосіб відновлення доступу до інформаційної панелі", + "stopServer": "Зупиніть роботу сервера OmniRoute", + "processing": "Обробка...", + "pleaseWait": "Зачекайте, поки ми завершимо авторизацію.", + "authSuccess": "Авторизація успішна!", + "copyUrl": "Скопіюйте цей URL", + "accessDenied": "Доступ заборонено", + "methodCliTitle": "Спосіб 1: Скидання CLI", + "methodCliDescription": "Виконайте таку команду на сервері, де запущено OmniRoute:", + "methodCliHint": "Вам буде запропоновано встановити новий пароль. Спочатку потрібно зупинити сервер.", + "methodManualTitle": "Спосіб 2: Ручне скидання", + "methodManualDescription": "Видаліть пароль з бази даних і встановіть новий під час запуску:", + "setPasswordInYour": "Встановіть новий пароль у своєму", + "fileLabelSuffix": "файл:", + "newPasswordPlaceholder": "ваш_новий_пароль", + "deleteSettingsFile": "Видалити", + "orRemovePasswordHashField": "або видаліть поле passwordHash", + "restartServerWithNewPassword": "Перезапустіть сервер - він використовуватиме новий пароль", + "backToLogin": "Назад до входу", + "forgotPassword": "Забули пароль?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Перейти до дому", + "toggleMenu": "Переключити меню", + "featuresLink": "особливості", + "docsLink": "документи", + "github": "GitHub", + "versionLive": "версія 1.0 вже доступна", + "oneEndpoint": "Одна кінцева точка для", + "allProviders": "Усі постачальники AI", + "heroDescription": "Проксі-сервер кінцевої точки штучного інтелекту з веб-панеллю – порт JavaScript для CLIProxyAPI. Бездоганно працює з Claude Code, OpenAI Codex, Cline, RooCode та іншими інструментами CLI.", + "getStarted": "Почніть роботу", + "viewOnGithub": "Переглянути на GitHub", + "powerfulFeatures": "Потужні функції", + "featuresSubtitle": "Все, що вам потрібно для керування інфраструктурою штучного інтелекту в одному місці, створеному для масштабування.", + "featureUnifiedEndpointTitle": "Уніфікована кінцева точка", + "featureUnifiedEndpointDesc": "Доступ до всіх постачальників через єдину стандартну URL-адресу API.", + "featureEasySetupTitle": "Легке налаштування", + "featureEasySetupDesc": "Почніть працювати за лічені хвилини за допомогою команди npx.", + "featureModelFallbackTitle": "Запасна модель", + "featureModelFallbackDesc": "Автоматично перемикайте постачальників у разі збою або великої затримки.", + "featureUsageTrackingTitle": "Відстеження використання", + "featureUsageTrackingDesc": "Детальна аналітика та моніторинг витрат для всіх моделей.", + "featureOAuthApiKeysTitle": "Ключі OAuth і API", + "featureOAuthApiKeysDesc": "Безпечно керуйте обліковими даними в одному сховищі.", + "featureCloudSyncTitle": "Хмарна синхронізація", + "featureCloudSyncDesc": "Миттєво синхронізуйте конфігурації на всіх пристроях.", + "featureCliSupportTitle": "Підтримка CLI", + "featureCliSupportDesc": "Працює з Claude Code, Codex, Cline, Cursor тощо.", + "featureDashboardTitle": "Приладова панель", + "featureDashboardDesc": "Візуальна інформаційна панель для аналізу трафіку в реальному часі.", + "howItWorks": "Як працює OmniRoute", + "howItWorksDescription": "Дані безперешкодно передаються від вашої програми через наш інтелектуальний рівень маршрутизації до найкращого постачальника для роботи.", + "howItWorksStep1Title": "1. CLI & SDK", + "howItWorksStep1Description": "Ваші запити починаються з ваших улюблених інструментів або нашого єдиного SDK. Просто змініть базову URL-адресу.", + "howItWorksStep2Title": "2. OmniRoute Hub", + "howItWorksStep2Description": "Наш механізм аналізує запит, перевіряє працездатність постачальника та маршрути для найменшої затримки або вартості.", + "howItWorksStep3Title": "3. Постачальники AI", + "howItWorksStep3Description": "Запит виконується OpenAI, Anthropic, Gemini або іншими миттєво.", + "getStartedIn30Seconds": "Почніть роботу за 30 секунд", + "getStartedDescription": "Встановіть OmniRoute, налаштуйте своїх провайдерів за допомогою веб-панелі та почніть маршрутизувати запити ШІ.", + "installOmniRoute": "Встановіть OmniRoute", + "installStepDescription": "Виконайте команду npx, щоб миттєво запустити сервер", + "openDashboard": "Відкрийте інформаційну панель", + "openDashboardStepDescription": "Налаштуйте провайдерів і ключі API через веб-інтерфейс", + "routeRequests": "Запити на маршрут", + "routeRequestsStepDescription": "Спрямуйте свої інструменти CLI на {endpoint}", + "terminal": "термінал", + "copy": "Копія", + "copied": "✓ Скопійовано", + "startingOmniRoute": "Запуск OmniRoute...", + "serverRunningOnLabel": "Сервер працює", + "dashboardLabel": "Приладова панель", + "readyToRoute": "Готовий до маршруту! ✓", + "configureProvidersNote": "📝 Налаштуйте постачальників на інформаційній панелі або використовуйте змінні середовища", + "dataLocation": "Розташування даних:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "Продукт", + "dashboardLink": "Приладова панель", + "changelog": "Журнал змін", + "resources": "Ресурси", + "documentation": "Документація", + "npm": "НПМ", + "legal": "юридичний", + "mitLicense": "Ліцензія MIT", + "footerTagline": "Уніфікована кінцева точка для створення ШІ. З легкістю підключайтеся, маршрутизуйте та керуйте своїми постачальниками AI.", + "copyright": "© {year} OmniRoute. Всі права захищені.", + "flowToolClaudeCode": "Клод Код", + "flowToolOpenAICodex": "Кодекс OpenAI", + "flowToolCline": "Клайн", + "flowToolCursor": "Курсор", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Антропний", + "flowProviderGemini": "Близнюки", + "flowProviderGithubCopilot": "Копілот GitHub", + "interactiveDiagram": "Інтерактивна діаграма, видима на робочому столі", + "ctaTitle": "Готові спростити інфраструктуру ШІ?", + "ctaDescription": "Приєднуйтесь до розробників, які оптимізують свою інтеграцію ШІ за допомогою OmniRoute. З відкритим вихідним кодом і безкоштовно.", + "startFree": "Почніть безкоштовно", + "readDocumentation": "Прочитайте документацію" + }, + "docs": { + "title": "Документація", + "quickStart": "Швидкий старт", + "features": "особливості", + "supportedProviders": "Підтримувані постачальники", + "supportedProvidersToc": "Провайдери", + "commonUseCases": "Загальні випадки використання", + "clientCompatibility": "Сумісність клієнта", + "apiReference": "Довідник API", + "method": "метод", + "path": "шлях", + "notes": "Примітки", + "modelPrefixes": "Префікси моделей", + "prefix": "Префікс", + "troubleshooting": "Усунення несправностей", + "supportsChat": "Підтримує кінцеві точки чату та відповідей.", + "oauthAutoRefresh": "З’єднання OAuth із автоматичним оновленням маркера.", + "fullStreaming": "Повна підтримка потокового передавання для всіх моделей.", + "docsLabel": "документи", + "docsHeroDescription": "Штучний шлюз для LLM із кількома постачальниками. Одна кінцева точка для OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor та ще понад 20 постачальників.", + "openDashboard": "Відкрийте інформаційну панель", + "endpointPage": "Сторінка кінцевої точки", + "github": "GitHub", + "reportIssue": "Повідомити про проблему", + "onThisPage": "На цій сторінці", + "documentationVersion": "Документація - v{version}", + "quickStartStep1Title": "1. Встановіть і запустіть", + "quickStartStep1Prefix": "бігти", + "quickStartStep1Middle": "або клонуйте з GitHub і запустіть", + "quickStartStep2Title": "2. Створіть ключ API", + "quickStartStep2Text": "Перейдіть до Кінцева точка -> Зареєстровані ключі. Згенеруйте один ключ для кожного середовища.", + "quickStartStep3Title": "3. Підключити провайдерів", + "quickStartStep3Text": "Додайте облікові записи постачальників за допомогою входу OAuth, ключа API або безкоштовного автоматичного підключення.", + "quickStartStep4Title": "4. Встановіть базову URL-адресу клієнта", + "quickStartStep4Prefix": "Наведіть свій клієнт IDE або API на", + "quickStartStep4Suffix": "Використовуйте, наприклад, префікс провайдера", + "featureRoutingTitle": "Маршрутизація з кількома провайдерами", + "featureRoutingText": "Направляйте запити до 30+ постачальників штучного інтелекту через єдину кінцеву точку, сумісну з OpenAI. Підтримує чат, відповіді, аудіо та API зображень.", + "featureCombosTitle": "Комбо і балансування", + "featureCombosText": "Створюйте комбіновані моделі з резервними ланцюжками та стратегіями балансування: циклічні, пріоритетні, випадкові, найменш використовувані та оптимізовані за витратами.", + "featureUsageTitle": "Відстеження використання та витрат", + "featureUsageText": "Підрахунок токенів у реальному часі, розрахунок вартості для кожного постачальника/моделі та детальна розбивка використання за ключем API та обліковим записом.", + "featureAnalyticsTitle": "Інформаційна панель Analytics", + "featureAnalyticsText": "Візуальна аналітика з діаграмами для запитів, токенів, помилок, затримок, витрат і популярності моделі з часом.", + "featureHealthTitle": "Моніторинг здоров'я", + "featureHealthText": "Перевірки працездатності в реальному часі, статус постачальника, стани автоматичного вимикача та автоматичне виявлення обмеження швидкості з експоненціальним відстрочкою.", + "featureCliTitle": "Інструменти CLI", + "featureCliText": "Керуйте конфігураціями IDE, експортуйте/імпортуйте резервні копії, виявляйте профілі Codex і налаштовуйте параметри з інформаційної панелі.", + "featureSecurityTitle": "Безпека та політика", + "featureSecurityText": "Автентифікація ключа API, IP-фільтрація, захист від оперативного ін’єкції, політики домену, керування сеансами та журнал аудиту.", + "featureCloudSyncTitle": "Хмарна синхронізація", + "featureCloudSyncText": "Синхронізуйте свою конфігурацію з Cloudflare Workers для віддаленого доступу із зашифрованими обліковими даними та автоматичним відновленням після відмови.", + "providersAcrossConnectionTypes": "{count} постачальників у трьох типах підключення.", + "manageProviders": "Керувати постачальниками", + "providersCount": "{count} постачальників", + "providerTypeFree": "Вільний рівень", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Ключ API", + "useCaseSingleEndpointTitle": "Єдина кінцева точка для багатьох постачальників", + "useCaseSingleEndpointText": "Направляйте клієнтам одну базову URL-адресу та маршрут за префіксом моделі (наприклад: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Відкат і перемикання моделей за допомогою комбо", + "useCaseFallbackText": "Створюйте комбіновані моделі на інформаційній панелі та зберігайте конфігурацію клієнта стабільною, поки постачальники змінюють внутрішню ротацію.", + "useCaseUsageVisibilityTitle": "Використання, вартість і видимість налагодження", + "useCaseUsageVisibilityText": "Відстежуйте токени та вартість за постачальником, обліковим записом і ключем API на вкладках «Використання» та «Аналітика».", + "clientCherryStudioTitle": "Вишнева студія", + "baseUrlLabel": "Базовий URL", + "chatEndpointLabel": "Кінцева точка чату", + "modelRecommendationLabel": "Рекомендована модель: явний префікс", + "clientCodexTitle": "Моделі Codex / GitHub Copilot", + "clientCodexBullet1": "Використовуйте ідентифікатори моделі з", + "clientCodexBullet2": "Моделі сімейства Codex авто-маршрут до", + "clientCodexBullet3": "Моделі, що не належать до Codex, продовжуються", + "clientCursorTitle": "Курсор IDE", + "clientCursorBullet1": "використання", + "clientCursorBullet1Suffix": "префікс для моделей Cursor.", + "clientCursorBullet2": "Підключення OAuth - вхід зі сторінки постачальників.", + "clientClaudeTitle": "Клод Код / Антигравітація", + "clientClaudeBullet1Prefix": "використання", + "clientClaudeBullet1Middle": "(Клод) або", + "clientClaudeBullet1Suffix": "(Антигравітація) префікс.", + "endpointChatNote": "Кінцева точка чату, сумісна з OpenAI (за замовчуванням).", + "endpointResponsesNote": "Кінцева точка API відповідей (Codex, o-series).", + "endpointModelsNote": "Каталог моделей для всіх підключених провайдерів.", + "endpointAudioNote": "Транскрипція аудіо (Deepgram, AssemblyAI).", + "endpointImagesNote": "Генерація зображення (NanoBanana).", + "endpointRewriteChatNote": "Помічник перезапису для клієнтів без /v1.", + "endpointRewriteResponsesNote": "Переписати помічник для відповідей без /v1.", + "endpointRewriteModelsNote": "Переписати помічник для виявлення моделі без /v1.", + "modelPrefixesDescriptionStart": "Використовуйте префікс постачальника перед назвою моделі, щоб маршрутизувати до певного постачальника. приклад:", + "modelPrefixesDescriptionEnd": "маршрути до GitHub Copilot.", + "provider": "Провайдер", + "type": "Тип", + "troubleshootingModelRouting": "Якщо клієнту не вдається виконати модель маршрутизації, використовуйте явний постачальник/модель (наприклад: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Якщо ви отримуєте неоднозначні помилки моделі, виберіть префікс постачальника замість простого ідентифікатора моделі.", + "troubleshootingCodexFamily": "Для моделей сімейства GitHub Codex збережіть модель як gh/; маршрутизатор вибирає /відповідає автоматично.", + "troubleshootingTestConnection": "Перед тестуванням із IDE або зовнішніх клієнтів скористайтеся інструментальною панеллю > Постачальники > Перевірити з’єднання.", + "troubleshootingCircuitBreaker": "Якщо постачальник показує, що автоматичний вимикач розімкнуто, дочекайтеся охолодження або подробиці перевірте на сторінці «Стан».", + "troubleshootingOAuth": "Для постачальників OAuth повторна автентифікація, якщо термін дії маркерів закінчився. Перевірте індикатор стану картки провайдера." + }, + "legal": { + "privacyPolicy": "Політика конфіденційності", + "termsOfService": "Умови обслуговування", + "providerConfigurations": "Конфігурації провайдера", + "apiKeys": "Ключі API", + "usageLogs": "Журнали використання", + "applicationSettings": "Налаштування програми", + "viewExportAnalytics": "Перегляд і експорт аналітики використання", + "clearHistory": "Очистити історію використання в будь-який час", + "configureRetention": "Налаштувати політики збереження журналів", + "backupRestore": "Резервне копіювання та відновлення бази даних", + "privacyMetadataTitle": "Політика конфіденційності | OmniRoute", + "privacyMetadataDescription": "Політика конфіденційності для проксі-маршрутизатора OmniRoute AI API.", + "termsMetadataTitle": "Умови надання послуг | OmniRoute", + "termsMetadataDescription": "Умови використання проксі-маршрутизатора OmniRoute AI API.", + "backToHome": "Назад додому", + "lastUpdated": "Останнє оновлення: {date}", + "policyLastUpdatedDate": "13 лютого 2026 р", + "listSeparator": "-", + "questionsVisit": "Запитання? Відвідайте наш", + "githubRepository": "Репозиторій GitHub", + "privacySection1Title": "1. Місцева архітектура", + "privacySection1Text": "OmniRoute створено як локальну програму. Уся обробка та зберігання даних відбувається повністю на вашій машині. Немає централізованого сервера, який би збирав вашу інформацію.", + "privacySection2Title": "2. Дані, які ми зберігаємо", + "privacyDataStoredIn": "Наступні дані зберігаються локально в", + "privacyDataProviderConfigurationsDesc": "URL-адреси підключення, типи провайдерів і налаштування пріоритету", + "privacyDataApiKeysDesc": "зашифровані та зберігаються локально для автентифікації в постачальників AI", + "privacyDataUsageLogsDesc": "кількість запитів, використання маркерів, назви моделей, мітки часу та час відповіді", + "privacyDataApplicationSettingsDesc": "параметри теми, стратегію маршрутизації та комбіновані конфігурації", + "privacySection3Title": "3. Відсутність телеметрії", + "privacySection3Text": "OmniRoute не збирає дані телеметрії, аналітику чи звіти про збої. Жодні дані не надсилаються ні нам, ні будь-якій третій стороні. Ваші моделі використання, виклики API та конфігурації залишаються повністю приватними.", + "privacySection4Title": "4. Сторонні постачальники штучного інтелекту", + "privacySection4Text": "Коли ви здійснюєте виклики API через OmniRoute, ваші запити пересилаються до налаштованих вами постачальників штучного інтелекту (наприклад: OpenAI, Anthropic, Google). Ці постачальники мають власні політики конфіденційності, які визначають, як вони обробляють ваші дані. Будь ласка, перегляньте:", + "privacyOpenAiPolicy": "Політика конфіденційності OpenAI", + "privacyAnthropicPolicy": "Політика конфіденційності Anthropic", + "privacyGooglePolicy": "Політика конфіденційності Google", + "privacySection5Title": "5. Хмарна синхронізація (необов’язково)", + "privacySection5Text": "Якщо ви ввімкнете додаткову функцію хмарної синхронізації, конфігурації постачальника та ключі API можуть передаватися на налаштовану кінцеву точку хмари. Ця функція вимкнена за замовчуванням і вимагає явної згоди.", + "privacySection6Title": "6. Заготівля лісу", + "privacyLoggingIntro": "Журнали запитів можна налаштувати в налаштуваннях інформаційної панелі. Ви можете:", + "privacySection7Title": "7. Ваші права", + "privacySection7TextStart": "Оскільки всі дані зберігаються локально, ви маєте повний контроль. Ви можете будь-коли видалити свої дані, видаливши", + "privacySection7TextEnd": "каталогу або за допомогою функцій резервного копіювання та відновлення бази даних на інформаційній панелі.", + "termsSection1Title": "1. Огляд", + "termsSection1Text": "OmniRoute — це локальний проксі-маршрутизатор API API, який повністю працює на вашому комп’ютері. Він направляє запити до кількох постачальників штучного інтелекту за допомогою балансування навантаження, відновлення після відмови та відстеження використання.", + "termsSection2Title": "2. Обов'язки користувача", + "termsResponsibilityApiKeys": "Ви несете повну відповідальність за керування власними ключами API та обліковими даними для сторонніх постачальників штучного інтелекту (OpenAI, Anthropic, Google тощо).", + "termsResponsibilityCompliance": "Ви повинні дотримуватися умов обслуговування кожного постачальника штучного інтелекту, до API якого ви отримуєте доступ через OmniRoute.", + "termsResponsibilitySecurity": "Ви несете відповідальність за безпеку локальної інсталяції OmniRoute, включаючи встановлення пароля та обмеження доступу до мережі.", + "termsSection3Title": "3. Як це працює", + "termsSection3Text": "OmniRoute діє як проксі-сервер-посередник. Виклики API, надіслані до OmniRoute, перекладаються та пересилаються вашим налаштованим постачальникам AI. OmniRoute не змінює вміст ваших запитів або відповідей крім необхідного перекладу протоколу.", + "termsSection4Title": "4. Обробка даних", + "termsDataStoredLocally": "Усі дані зберігаються локально на вашій машині в базі даних SQLite.", + "termsNoTransmission": "OmniRoute не передає жодних даних на зовнішні сервери, якщо ви явно не активуєте функції хмарної синхронізації.", + "termsDataLocationText": "Журнали використання, ключі API та конфігурація зберігаються в", + "termsSection5Title": "5. Відмова від відповідальності", + "termsSection5Text": "OmniRoute надається «як є» без будь-яких гарантій. Ми не несемо відповідальності за будь-які витрати, пов’язані з використанням API, перебоями в роботі служби або втратою даних. Завжди створюйте резервні копії вашої конфігурації.", + "termsSection6Title": "6. Відкритий код", + "termsSection6Text": "OmniRoute — це програмне забезпечення з відкритим кодом. Ви можете вільно перевіряти, змінювати та поширювати його відповідно до умов його ліцензії." + } +} diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json new file mode 100644 index 0000000000..c5d7a42c90 --- /dev/null +++ b/src/i18n/messages/vi.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "Lưu", + "cancel": "Hủy bỏ", + "delete": "Xóa", + "loading": "Đang tải...", + "error": "Đã xảy ra lỗi", + "success": "thành công", + "confirm": "Bạn có chắc không?", + "refresh": "Làm mới", + "close": "Đóng", + "add": "Thêm", + "edit": "Chỉnh sửa", + "search": "Tìm kiếm", + "back": "Quay lại", + "next": "Tiếp theo", + "submit": "Gửi", + "reset": "Đặt lại", + "copy": "Sao chép", + "copied": "Đã sao chép!", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "active": "Đang hoạt động", + "inactive": "Không hoạt động", + "noData": "Không có sẵn dữ liệu", + "configure": "Cấu hình", + "manage": "Quản lý", + "name": "Tên", + "actions": "hành động", + "status": "Trạng thái", + "type": "loại", + "model": "người mẫu", + "models": "mô hình", + "provider": "nhà cung cấp", + "account": "Tài khoản", + "time": "thời gian", + "details": "Chi tiết", + "created": "Đã tạo", + "lastUsed": "Được sử dụng lần cuối", + "loadMore": "Tải thêm", + "noResults": "Không tìm thấy kết quả nào", + "reloadPage": "Tải lại trang", + "connected": "Đã kết nối", + "disconnected": "Đã ngắt kết nối", + "notConfigured": "Chưa được định cấu hình", + "testConnection": "Kiểm tra kết nối", + "enable": "Kích hoạt", + "disable": "Vô hiệu hóa", + "columns": "Cột", + "newest": "Mới nhất", + "oldest": "Cũ nhất", + "all": "Tất cả", + "none": "không có", + "yes": "Có", + "no": "Không", + "warning": "Cảnh báo", + "note": "Lưu ý", + "free": "miễn phí", + "skipToContent": "Chuyển đến nội dung" + }, + "sidebar": { + "home": "Trang chủ", + "dashboard": "Trang tổng quan", + "providers": "Nhà cung cấp", + "combos": "Combo", + "usage": "Cách sử dụng", + "analytics": "Phân tích", + "costs": "Chi phí", + "health": "sức khỏe", + "limits": "Giới hạn & hạn ngạch", + "cliTools": "Công cụ CLI", + "settings": "Cài đặt", + "translator": "Người phiên dịch", + "docs": "Tài liệu", + "issues": "vấn đề", + "endpoint": "Điểm cuối", + "apiManager": "Trình quản lý API", + "logs": "Nhật ký", + "auditLog": "Nhật ký kiểm tra", + "shutdown": "Tắt máy", + "restart": "Khởi động lại", + "shutdownConfirm": "Tắt OmniRoute?", + "restartConfirm": "Khởi động lại OmniRoute?", + "version": "v{version}", + "debug": "Gỡ lỗi", + "system": "Hệ thống", + "help": "Trợ giúp", + "serverDisconnected": "Máy chủ bị ngắt kết nối", + "serverDisconnectedMsg": "Máy chủ proxy đã bị dừng hoặc đang khởi động lại.", + "expandSidebar": "Mở rộng thanh bên", + "collapseSidebar": "Thu gọn thanh bên" + }, + "header": { + "logout": "Đăng xuất", + "language": "Ngôn ngữ", + "providers": "Nhà cung cấp", + "providerDescription": "Quản lý kết nối nhà cung cấp AI của bạn", + "combos": "Combo", + "comboDescription": "Kết hợp mô hình với dự phòng", + "usage": "Cách sử dụng & phân tích", + "usageDescription": "Giám sát việc sử dụng API, mức tiêu thụ mã thông báo và nhật ký yêu cầu của bạn", + "analytics": "Phân tích", + "analyticsDescription": "Biểu đồ, xu hướng và thông tin đánh giá", + "cliTools": "Công cụ CLI", + "cliToolsDescription": "Định cấu hình công cụ CLI", + "home": "Trang chủ", + "homeDescription": "Chào mừng đến với OmniRoute", + "endpoint": "Điểm cuối", + "endpointDescription": "Cấu hình điểm cuối API", + "settings": "Cài đặt", + "settingsDescription": "Quản lý tùy chọn của bạn", + "openaiCompatible": "Tương thích OpenAI", + "anthropicCompatible": "Tương thích với con người" + }, + "home": { + "quickStart": "Bắt đầu nhanh", + "quickStartDesc": "Hãy đứng dậy và chạy trong 4 bước. Kết nối nhà cung cấp, mô hình định tuyến, giám sát mọi thứ.", + "fullDocs": "Tài liệu đầy đủ", + "step1Title": "1. Tạo khóa API", + "step1Desc": "Đi tới Endpoint -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.", + "step2Title": "2. Kết nối nhà cung cấp", + "step2Desc": "Thêm tài khoản trong Providers. Hỗ trợ OAuth, Khóa API và các cấp miễn phí.", + "step3Title": "3. Chỉ vào khách hàng của bạn", + "step3Desc": "Đặt URL cơ sở thành {url} trong ứng dụng khách IDE hoặc API của bạn.", + "step4Title": "4. Giám sát & tối ưu hóa", + "step4Desc": "Theo dõi mã thông báo, chi phí và lỗi trong Nhật ký yêu cầuAnalytics.", + "providersOverview": "Tổng quan về nhà cung cấp", + "configuredOf": "{configured} được định cấu hình của {total} nhà cung cấp hiện có", + "noModelsAvailable": "Không có mô hình có sẵn cho nhà cung cấp này.", + "configureFirst": "Trước tiên hãy định cấu hình kết nối trong {providers}", + "configureProvider": "Định cấu hình nhà cung cấp", + "modelAvailable": "Có mẫu {count}", + "modelsAvailable": "Có sẵn mẫu {count}", + "connectionsActive": "{count} kết nối đang hoạt động", + "connectionsActivePlural": "{count} kết nối đang hoạt động", + "copyModelName": "Sao chép tên mẫu", + "documentation": "Tài liệu", + "healthMonitor": "Theo dõi sức khỏe", + "reportIssue": "Báo cáo vấn đề", + "activeError": "{active} đang hoạt động · Lỗi {errors}", + "oauthLabel": "OAuth", + "apiKeyLabel": "Khóa API", + "requestsShort": "{count} yêu cầu", + "providerModelsTitle": "{provider} - Người mẫu", + "copiedModel": "Đã sao chép: {model}", + "aliasLabel": "bí danh" + }, + "analytics": { + "title": "Phân tích", + "overviewDescription": "Giám sát mô hình sử dụng API, mức tiêu thụ mã thông báo, chi phí và xu hướng hoạt động của bạn trên tất cả các nhà cung cấp và mô hình.", + "evalsDescription": "Chạy bộ đánh giá để kiểm tra và xác thực điểm cuối LLM của bạn. So sánh chất lượng mô hình, phát hiện hồi quy và độ trễ điểm chuẩn.", + "overview": "Tổng quan", + "evals": "Đánh giá" + }, + "apiManager": { + "title": "Khóa API", + "createKey": "Tạo khóa API", + "key": "Chìa khóa", + "revokeKey": "Thu hồi khóa", + "revokeConfirm": "Bạn có chắc chắn muốn thu hồi khóa API này không?", + "noKeys": "Chưa có khóa API nào", + "noKeysDesc": "Tạo khóa API đầu tiên để xác thực các yêu cầu tới điểm cuối của bạn", + "keyLabel": "Nhãn khóa", + "permissions": "Quyền", + "expiresAt": "Hết hạn", + "never": "không bao giờ", + "revoke": "Thu hồi", + "showKey": "Hiển thị khóa", + "hideKey": "Ẩn phím", + "copyKey": "Sao chép khóa API", + "allModels": "Tất cả các mô hình", + "selectedModels": "Các mẫu đã chọn", + "readOnly": "Chỉ đọc", + "fullAccess": "Toàn quyền truy cập", + "keyManagement": "Quản lý khóa API", + "keyManagementDesc": "Tạo và quản lý khóa API để xác thực các yêu cầu tới điểm cuối của bạn", + "totalKeys": "Tổng số phím", + "restricted": "Bị hạn chế", + "totalRequests": "Tổng số yêu cầu", + "modelsAvailable": "Các mẫu có sẵn", + "registeredKeys": "Khóa đã đăng ký", + "keysRegistered": "{count} khóa đã được đăng ký", + "keyRegistered": "Đã đăng ký khóa {count}", + "keysSecurityNote": "Mỗi khóa tách biệt việc theo dõi việc sử dụng và có thể được thu hồi một cách độc lập. Các khóa được che dấu sau khi tạo để bảo mật.", + "createFirstKey": "Tạo chìa khóa đầu tiên của bạn", + "name": "Tên", + "usage": "Cách sử dụng", + "created": "Đã tạo", + "actions": "hành động", + "reqs": "yêu cầu", + "neverUsed": "Chưa bao giờ sử dụng", + "deleteConfirm": "Xóa khóa API này?", + "usageTips": "Mẹo sử dụng", + "tipAuth": "Sử dụng các khóa API trong tiêu đề Cấp phép làm Người ghi tên YOUR_KEY", + "tipSecure": "Khóa chỉ được hiển thị một lần trong quá trình tạo — hãy lưu trữ chúng một cách an toàn", + "tipSeparate": "Tạo khóa riêng cho các máy khách hoặc môi trường khác nhau", + "tipRestrict": "Hạn chế khóa cho các kiểu máy cụ thể để bảo mật tốt hơn và kiểm soát chi phí", + "keyName": "Tên khóa", + "keyNamePlaceholder": "ví dụ: Khóa sản xuất, Khóa phát triển", + "keyNameDesc": "Chọn tên mô tả để xác định mục đích của khóa này", + "keyCreated": "Đã tạo khóa API", + "keyCreatedSuccess": "Đã tạo khóa thành công!", + "keyCreatedNote": "Sao chép và lưu trữ khóa này ngay bây giờ — nó sẽ không được hiển thị lại.", + "done": "Xong", + "savePermissions": "Lưu quyền", + "allowAll": "Cho phép tất cả", + "restrict": "hạn chế", + "allowAllInfo": "Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.", + "restrictInfo": "Khóa này có thể truy cập {selected} trong số {total} mô hình.", + "selected": "{count} đã chọn", + "all": "Tất cả", + "clear": "Xóa", + "searchModels": "Tìm kiếm mô hình theo tên hoặc nhà cung cấp...", + "noModelsFound": "Không tìm thấy mô hình nào", + "keyNameRequired": "Tên khóa là bắt buộc", + "keyNameTooLong": "Tên khóa phải có {max} ký tự trở xuống", + "keyNameInvalid": "Tên khóa chỉ có thể chứa chữ cái, số, dấu cách, dấu gạch ngang và dấu gạch dưới", + "invalidKeyName": "Tên khóa không hợp lệ", + "failedCreateKey": "Không tạo được khóa", + "failedCreateKeyRetry": "Không tạo được khóa. Vui lòng thử lại.", + "invalidKeyId": "ID khóa không hợp lệ", + "failedDeleteKey": "Không thể xóa khóa", + "failedDeleteKeyRetry": "Không thể xóa khóa. Vui lòng thử lại.", + "invalidModelsSelection": "Lựa chọn mô hình không hợp lệ", + "cannotSelectMoreThanModels": "Không thể chọn nhiều hơn {max} mẫu", + "failedUpdatePermissions": "Không cập nhật được quyền", + "failedUpdatePermissionsRetry": "Không cập nhật được quyền. Vui lòng thử lại.", + "unknownProvider": "không rõ", + "copyMaskedKey": "Sao chép khóa bị che", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "Cuối cùng: {date}", + "editPermissions": "Chỉnh sửa quyền", + "deleteKey": "Xóa phím", + "model": "{count} mô hình", + "models": "{count} mô hình", + "permissionsTitle": "Quyền: {name}", + "allowAllDesc": "Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.", + "restrictDesc": "Khóa này có thể truy cập {selectedCount} trong số {totalModels} mô hình.", + "selectedCount": "{count} đã chọn" + }, + "auditLog": { + "title": "Nhật ký kiểm tra", + "searchPlaceholder": "Hành động tìm kiếm...", + "action": "hành động", + "actor": "diễn viên", + "target": "Mục tiêu", + "ipAddress": "Địa chỉ IP", + "timestamp": "Dấu thời gian", + "noEntries": "Không tìm thấy mục kiểm tra nào", + "filterByAction": "Lọc theo hành động...", + "filterByActor": "Lọc theo diễn viên...", + "filterEntriesAria": "Lọc các mục nhật ký kiểm tra", + "filterByActionTypeAria": "Lọc theo loại hành động", + "filterByActorAria": "Lọc theo diễn viên", + "refreshAuditLogAria": "Làm mới nhật ký kiểm tra", + "tableAria": "Mục nhật ký kiểm tra", + "failedFetchAuditLog": "Không tìm nạp được nhật ký kiểm tra", + "notAvailable": "—", + "description": "Hành động hành chính và sự kiện bảo mật", + "showing": "Hiển thị các mục {count} (bù đắp {offset})", + "previous": "trước đó" + }, + "cliTools": { + "title": "Công cụ CLI", + "noActiveProviders": "Không có nhà cung cấp đang hoạt động", + "noActiveProvidersDesc": "Trước tiên, vui lòng thêm và kết nối nhà cung cấp để định cấu hình công cụ CLI.", + "mapModels": "Mô hình bản đồ", + "testConnection": "Kiểm tra kết nối", + "connectionStatus": "Trạng thái kết nối", + "configureEndpoint": "Định cấu hình điểm cuối", + "instructions": "Hướng dẫn", + "modelMapping": "Ánh xạ mô hình", + "baseUrl": "URL cơ sở", + "apiKey": "Khóa API", + "configured": "Đã định cấu hình", + "notConfigured": "Chưa được định cấu hình", + "notInstalled": "Chưa được cài đặt", + "custom": "tùy chỉnh", + "unknown": "Không xác định", + "lastSavedAt": "Đã lưu lần cuối: {date}", + "never": "không bao giờ", + "justNow": "ngay bây giờ", + "minutesAgoShort": "{count} phút trước", + "hoursAgoShort": "{count} giờ trước", + "daysAgoShort": "{count}ngày trước", + "monthsAgoShort": "{count}tháng trước", + "yearsAgoShort": "{count} năm trước", + "runtimeCheckFailed": "Kiểm tra thời gian chạy không thành công", + "yourApiKeyPlaceholder": "khóa-api-của bạn", + "modelPlaceholder": "nhà cung cấp/id mô hình", + "configurationSaved": "Đã lưu cấu hình thành công.", + "failedToSave": "Không lưu được cấu hình.", + "noApiKeysCreateOne": "Không có khóa API - Tạo một khóa trong trang Khóa", + "defaultOmnirouteKey": "sk_omniroute (mặc định)", + "selectModel": "Chọn mẫu", + "selectModelForAlias": "Chọn kiểu máy cho {alias}", + "selectModelForTool": "Chọn mẫu cho {tool}", + "select": "chọn", + "clear": "Xóa", + "comingSoon": "Sắp có", + "checkingRuntime": "Đang kiểm tra trạng thái thời gian chạy...", + "guideOnlyIntegration": "Tích hợp chỉ có hướng dẫn (không yêu cầu thời gian chạy cục bộ)", + "cliRuntimeDetected": "Đã phát hiện và sẵn sàng thời gian chạy CLI", + "cliFoundNotRunnable": "Đã tìm thấy CLI nhưng không thể chạy được{reason}", + "cliRuntimeNotDetected": "Thời gian chạy CLI không được phát hiện", + "binary": "nhị phân", + "configPath": "Đường dẫn cấu hình", + "configPathShort": "Cấu hình", + "failedCheckRuntimeStatus": "Không thể kiểm tra trạng thái thời gian chạy.", + "copy": "Sao chép", + "copied": "Đã sao chép", + "copyConfig": "Sao chép cấu hình", + "saveConfig": "Lưu cấu hình", + "selectionSaved": "Đã lưu lựa chọn", + "guide": "hướng dẫn", + "detected": "Đã phát hiện", + "notReady": "Chưa sẵn sàng", + "active": "Đang hoạt động", + "inactive": "Không hoạt động", + "startMitm": "Bắt đầu MITM", + "stopMitm": "Dừng MITM", + "mitmStarted": "MITM đã bắt đầu thành công!", + "mitmStopped": "MITM đã dừng thành công!", + "failedStart": "Không khởi động được MITM", + "failedStop": "Không thể dừng MITM", + "saveMappings": "Lưu bản đồ", + "mappingsSaved": "Đã lưu bản đồ!", + "failedSaveMappings": "Không lưu được bản đồ", + "howItWorks": "Nó hoạt động như thế nào:", + "antigravityHowWorksDesc": "Phản trọng lực gửi yêu cầu đến điểm cuối của Google. MITM chặn và chuyển hướng chúng đến OmniRoute.", + "antigravityStep1": "1. Khởi động MITM để định tuyến các yêu cầu thông qua OmniRoute.", + "antigravityStep2Prefix": "2. Thêm", + "antigravityStep2Suffix": "vào tệp máy chủ của bạn dưới dạng 127.0.0.1.", + "antigravityStep3": "3. Mở AntiGravity và các yêu cầu sẽ được ủy quyền.", + "sudoPasswordRequiredTitle": "Yêu cầu mật khẩu Sudo", + "sudoPasswordHint": "Cần có mật khẩu quản trị viên để sửa đổi cài đặt proxy hệ thống và tệp máy chủ.", + "enterSudoPassword": "Nhập mật khẩu sudo", + "sudoPasswordRequiredError": "Mật khẩu Sudo là bắt buộc.", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "settingsApplied": "Cài đặt được áp dụng thành công!", + "failedApplySettings": "Không thể áp dụng cài đặt", + "settingsReset": "Thiết lập lại cài đặt thành công!", + "failedResetSettings": "Không thể đặt lại cài đặt", + "backupRestored": "Đã khôi phục bản sao lưu!", + "failedRestore": "Không thể khôi phục", + "checkingCli": "Đang kiểm tra {tool} CLI...", + "cliNotRunnable": "{tool} CLI đã được cài đặt nhưng không chạy được", + "cliNotInstalled": "{tool} CLI chưa được cài đặt", + "cliNotDetected": "{tool} CLI không được phát hiện", + "cliDetectedReady": "{tool} CLI đã được phát hiện và sẵn sàng", + "cliFoundFailedHealthcheck": "{tool} CLI đã được tìm thấy nhưng quá trình kiểm tra tình trạng thời gian chạy không thành công{reason}.", + "installCliPrompt": "Vui lòng cài đặt {tool} CLI để sử dụng tính năng này.", + "installCodexPrompt": "Vui lòng cài đặt Codex CLI để sử dụng tính năng tự động áp dụng.", + "hide": "Ẩn", + "howToInstall": "Cách cài đặt", + "installationGuide": "Hướng dẫn cài đặt", + "platforms": "macOS/Linux/Windows:", + "afterInstallationRun": "Sau khi cài đặt, hãy chạy", + "toVerify": "để xác minh.", + "current": "hiện tại", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "Đặt lại về mặc định", + "providerModelPlaceholder": "nhà cung cấp/id mô hình", + "apply": "Áp dụng", + "reset": "Đặt lại", + "manualConfig": "Cấu hình thủ công", + "backups": "Sao lưu", + "configBackups": "Cấu hình sao lưu", + "noBackupsYet": "Chưa có bản sao lưu nào. Các bản sao lưu được tạo tự động trước mỗi lần Áp dụng hoặc Đặt lại.", + "restore": "Khôi phục", + "backupRestoredReloading": "Đã khôi phục bản sao lưu! Đang tải lại trạng thái...", + "failedRestoreBackup": "Không thể khôi phục bản sao lưu", + "applied": "Đã áp dụng!", + "failed": "thất bại", + "resetDone": "Đặt lại!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute được định cấu hình là nhà cung cấp tương thích với OpenAI", + "provider": "nhà cung cấp", + "model": "người mẫu", + "providers": "Nhà cung cấp", + "auth": "Xác thực", + "noApiKeysAvailable": "Không có khóa API nào", + "usingDefaultOmniroute": "Sử dụng mặc định: sk_omniroute", + "updateConfig": "Cập nhật cấu hình", + "applyConfig": "Áp dụng cấu hình", + "noBackupsAvailable": "Không có bản sao lưu nào có sẵn.", + "profileSaved": "Đã lưu hồ sơ \"{name}\"!", + "failedSaveProfile": "Không lưu được hồ sơ", + "profileActivated": "Hồ sơ đã được kích hoạt!", + "failedActivateProfile": "Không thể kích hoạt hồ sơ", + "profiles": "Hồ sơ", + "savedProfiles": "Hồ sơ đã lưu", + "noProfilesYet": "Chưa có hồ sơ nào được lưu. Lưu cấu hình hiện tại dưới dạng hồ sơ bên dưới.", + "activate": "Kích hoạt", + "deleteProfile": "Xóa hồ sơ", + "profileNamePlaceholder": "Tên hồ sơ (ví dụ: Tài khoản cá nhân)", + "saveCurrent": "Lưu hiện tại", + "codexAuthNotePrefix": "Công dụng của Codex", + "codexAuthNoteMiddle": "với", + "codexAuthNoteSuffix": "Nhấp vào \"Áp dụng\" để tự động định cấu hình.", + "claudeManualConfiguration": "Claude CLI - Cấu hình thủ công", + "codexManualConfiguration": "Codex CLI - Cấu hình thủ công", + "droidManualConfiguration": "Factory Droid - Cấu hình thủ công", + "openClawManualConfiguration": "Open Claw - Cấu hình thủ công", + "clineManualConfiguration": "Cấu hình thủ công Cline", + "kiloManualConfiguration": "Cấu hình thủ công mã Kilo", + "toolDescriptions": { + "antigravity": "IDE chống trọng lực của Google với MITM", + "claude": "Mã Claude nhân loại CLI", + "codex": "OpenAI Codex CLI", + "droid": "Trợ lý AI Droid của nhà máy", + "openclaw": "Trợ lý AI móng vuốt mở", + "cline": "Trợ lý mã hóa Cline AI CLI", + "kilo": "Trợ lý AI Kilo Code CLI", + "cursor": "Trình chỉnh sửa mã AI con trỏ", + "continue": "Tiếp tục Trợ lý AI" + }, + "guides": { + "cursor": { + "notes": { + "0": "Yêu cầu tài khoản Cursor Pro để sử dụng tính năng này.", + "1": "Con trỏ định tuyến các yêu cầu thông qua máy chủ của chính nó, do đó điểm cuối cục bộ không được hỗ trợ. Vui lòng bật Cloud Endpoint trong Cài đặt." + }, + "steps": { + "1": { + "title": "Mở Cài đặt", + "desc": "Đi tới Cài đặt -> Kiểu máy" + }, + "2": { + "title": "Kích hoạt API OpenAI", + "desc": "Bật tùy chọn \"Khóa API OpenAI\"" + }, + "3": { + "title": "URL cơ sở" + }, + "4": { + "title": "Khóa API" + }, + "5": { + "title": "Thêm mô hình tùy chỉnh", + "desc": "Nhấp vào \"Xem tất cả mẫu\" -> \"Thêm mẫu tùy chỉnh\"" + }, + "6": { + "title": "Chọn mẫu" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "Mở cấu hình", + "desc": "Mở tệp cấu hình Tiếp tục" + }, + "2": { + "title": "Khóa API" + }, + "3": { + "title": "Chọn mẫu" + }, + "4": { + "title": "Thêm cấu hình mô hình", + "desc": "Thêm cấu hình sau vào mảng mô hình của bạn:" + } + } + } + } + }, + "combos": { + "title": "Combo", + "description": "Tạo các tổ hợp mô hình với hỗ trợ định tuyến và dự phòng có trọng số", + "createCombo": "Tạo tổ hợp", + "editCombo": "Chỉnh sửa kết hợp", + "deleteCombo": "Xóa tổ hợp", + "noModels": "Không có mô hình", + "noModelsYet": "Chưa có mô hình nào được thêm vào", + "addModel": "Thêm mô hình", + "addModelToCombo": "Thêm Model vào Combo", + "routingStrategy": "Chiến lược định tuyến", + "maxRetries": "Số lần thử lại tối đa", + "timeout": "Thời gian chờ (ms)", + "healthcheck": "Kiểm tra sức khỏe", + "priority": "Ưu tiên", + "fallback": "Dự phòng", + "roundRobin": "Vòng Robin", + "random": "Ngẫu nhiên", + "leastLatency": "Độ trễ ít nhất", + "comboName": "Tên kết hợp", + "comboNamePlaceholder": "combo của tôi", + "deleteConfirm": "Xóa tổ hợp này?", + "noCombosYet": "Chưa có combo nào", + "comboCreated": "Combo được tạo thành công", + "comboUpdated": "Combo được cập nhật thành công", + "comboDeleted": "Đã xóa kết hợp", + "failedCreate": "Không tạo được kết hợp", + "failedUpdate": "Không thể cập nhật kết hợp", + "errorCreating": "Lỗi tạo combo", + "errorUpdating": "Lỗi cập nhật kết hợp", + "errorDeleting": "Lỗi xóa kết hợp", + "testFailed": "Yêu cầu kiểm tra không thành công", + "failedToggle": "Không thể chuyển đổi kết hợp", + "testResults": "Kết quả kiểm tra — {name}", + "resolvedBy": "Đã giải quyết bởi:", + "more": "+{count} khác", + "reqs": "yêu cầu", + "success": "sự thành công", + "proxyConfigured": "Đã định cấu hình proxy", + "copyComboName": "Sao chép tên tổ hợp", + "enableCombo": "Bật kết hợp", + "disableCombo": "Tắt kết hợp", + "testCombo": "Kết hợp thử nghiệm", + "duplicate": "trùng lặp", + "proxyConfig": "Cấu hình proxy", + "nameRequired": "Tên là bắt buộc", + "nameInvalid": "Chỉ các chữ cái, số, -, _, / và . được phép", + "nameHint": "Các chữ cái, số, -, _, / và . được phép", + "priorityDesc": "Dự phòng tuần tự: thử mô hình 1 trước, sau đó đến mô hình 2, v.v.", + "weightedDesc": "Phân phối lưu lượng truy cập theo phần trăm trọng lượng với dự phòng", + "roundRobinDesc": "Phân phối vòng tròn: mỗi yêu cầu sẽ chuyển sang mô hình tiếp theo trong vòng quay", + "randomDesc": "Lựa chọn ngẫu nhiên thống nhất, sau đó dự phòng cho các mô hình còn lại", + "leastUsedDesc": "Chọn mô hình có ít yêu cầu nhất, cân bằng tải theo thời gian", + "costOptimizedDesc": "Hướng tới mô hình rẻ nhất trước tiên dựa trên giá cả", + "models": "Người mẫu", + "autoBalance": "Tự động cân bằng", + "advancedSettings": "Cài đặt nâng cao", + "retryDelay": "Độ trễ thử lại (ms)", + "concurrencyPerModel": "Đồng thời / Mô hình", + "queueTimeout": "Hết thời gian xếp hàng (ms)", + "advancedHint": "Để trống để sử dụng mặc định chung. Những cài đặt này ghi đè lên mỗi nhà cung cấp.", + "moveUp": "Di chuyển lên", + "moveDown": "Di chuyển xuống", + "removeModel": "Xóa", + "saving": "Đang lưu...", + "weighted": "Có trọng số", + "leastUsed": "Ít được sử dụng nhất", + "costOpt": "Lựa chọn chi phí" + }, + "costs": { + "title": "Chi phí", + "budget": "Ngân sách", + "totalCost": "Tổng chi phí", + "breakdown": "Phân tích chi phí", + "noData": "Không có dữ liệu chi phí", + "byModel": "Theo mẫu", + "byProvider": "Theo nhà cung cấp" + }, + "endpoint": { + "title": "Điểm cuối API", + "available": "Điểm cuối có sẵn", + "cloudProxy": "Proxy đám mây", + "disableConfirm": "Bạn có chắc chắn muốn tắt proxy đám mây không?", + "baseUrl": "URL cơ sở", + "apiKeyLabel": "Khóa API", + "registeredKeys": "Khóa đã đăng ký", + "chatCompletions": "Hoàn thành cuộc trò chuyện", + "responses": "Phản hồi", + "listModels": "Danh sách mô hình", + "usingCloudProxy": "Sử dụng Proxy đám mây", + "usingLocalServer": "Sử dụng máy chủ cục bộ", + "machineId": "ID máy: {id}...", + "disableCloud": "Tắt đám mây", + "enableCloud": "Kích hoạt đám mây", + "modelsAcrossEndpoints": "{models} mô hình trên {endpoints} điểm cuối", + "chatDesc": "Trò chuyện trực tuyến và không phát trực tuyến với tất cả các nhà cung cấp", + "embeddings": "Nhúng", + "embeddingsDesc": "Nhúng văn bản cho đường dẫn tìm kiếm & RAG", + "imageGeneration": "Tạo hình ảnh", + "imageDesc": "Tạo hình ảnh từ lời nhắc văn bản", + "rerank": "Xếp hạng lại", + "rerankDesc": "Sắp xếp lại tài liệu theo mức độ liên quan đến truy vấn", + "audioTranscription": "Phiên âm âm thanh", + "audioTranscriptionDesc": "Phiên âm tập tin âm thanh thành văn bản (Whisper)", + "textToSpeech": "Chuyển văn bản thành giọng nói", + "textToSpeechDesc": "Chuyển đổi văn bản thành giọng nói tự nhiên", + "moderations": "Kiểm duyệt", + "moderationsDesc": "Kiểm duyệt nội dung và phân loại an toàn", + "enableCloudTitle": "Kích hoạt proxy đám mây", + "whatYouGet": "Những gì bạn sẽ nhận được", + "cloudBenefitAccess": "Truy cập API của bạn từ mọi nơi trên thế giới", + "cloudBenefitShare": "Chia sẻ điểm cuối với nhóm của bạn một cách dễ dàng", + "cloudBenefitPorts": "Không cần mở cổng hoặc cấu hình tường lửa", + "cloudBenefitEdge": "Mạng biên toàn cầu nhanh", + "cloudSessionNote": "Cloud sẽ giữ phiên xác thực của bạn trong 1 ngày. Nếu không được sử dụng, nó sẽ tự động bị xóa.", + "cloudUnstableNote": "Cloud hiện tại không ổn định với Claude Code OAuth trong một số trường hợp.", + "cloudConnected": "Đã kết nối Proxy đám mây!", + "connectingToCloud": "Đang kết nối với đám mây...", + "verifyingConnection": "Đang xác minh kết nối...", + "connecting": "Đang kết nối...", + "verifying": "Đang xác minh...", + "connected": "Đã kết nối!", + "disableCloudTitle": "Vô hiệu hóa Proxy đám mây", + "disableWarning": "Tất cả các phiên xác thực sẽ bị xóa khỏi đám mây.", + "syncingData": "Đang đồng bộ hóa dữ liệu mới nhất...", + "disablingCloud": "Đang tắt đám mây...", + "syncing": "Đang đồng bộ hóa...", + "disabling": "Đang tắt...", + "cloudConnectedVerified": "Cloud Proxy đã được kết nối và xác minh!", + "connectedVerificationPending": "Đã kết nối - đang chờ xác minh", + "connectedVerificationPendingWithError": "Đã kết nối — đang chờ xác minh: {error}", + "cloudDisabledSuccess": "Đám mây đã được tắt thành công", + "syncedSuccess": "Đã đồng bộ hóa thành công", + "failedDisable": "Không thể tắt đám mây", + "failedEnable": "Không thể bật đám mây", + "cloudRequestTimeout": "Hết thời gian yêu cầu đám mây", + "cloudRequestFailed": "Yêu cầu đám mây không thành công", + "cloudWorkerUnreachable": "Không thể liên hệ với nhân viên đám mây. Đảm bảo dịch vụ đám mây đang chạy (npm run dev in /cloud).", + "connectionFailed": "Kết nối không thành công", + "syncFailed": "Không thể đồng bộ hóa dữ liệu đám mây", + "providerModelsTitle": "{provider} — Mô hình", + "noModelsForProvider": "Không có mô hình có sẵn cho nhà cung cấp này.", + "chat": "Trò chuyện", + "embedding": "Nhúng", + "image": "Hình ảnh", + "custom": "tùy chỉnh", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "Tình trạng hệ thống", + "description": "Giám sát thời gian thực phiên bản OmniRoute của bạn", + "healthy": "khỏe mạnh", + "degraded": "xuống cấp", + "down": "xuống", + "uptime": "Thời gian hoạt động", + "memory": "Bộ nhớ", + "memoryRss": "Bộ nhớ (RSS)", + "heap": "Đống", + "cpu": "CPU", + "database": "Cơ sở dữ liệu", + "version": "Phiên bản", + "lastCheck": "Kiểm tra lần cuối", + "providerHealth": "Sức khỏe nhà cung cấp", + "systemMetrics": "Số liệu hệ thống", + "tokenHealth": "Tình trạng mã thông báo", + "refreshAll": "Làm mới tất cả", + "checkNow": "Kiểm tra ngay", + "loadingHealth": "Đang tải dữ liệu sức khỏe...", + "failedToLoad": "Không tải được dữ liệu sức khỏe: {error}", + "retry": "Thử lại", + "allOperational": "Tất cả các hệ thống hoạt động", + "issuesDetected": "Đã phát hiện sự cố hệ thống", + "updatedAt": "Đã cập nhật {time}", + "latency": "Độ trễ", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "Tổng số yêu cầu", + "noDataYet": "Chưa có dữ liệu", + "promptCache": "Bộ nhớ đệm nhắc nhở", + "entries": "Bài dự thi", + "hitRate": "Tỷ lệ trúng", + "hitsMisses": "Lượt truy cập / Bỏ lỡ", + "signatureCache": "Bộ đệm chữ ký", + "signatureDefaults": "Mặc định", + "signatureTool": "Công cụ", + "signatureFamily": "gia đình", + "signatureSession": "Phiên", + "recovering": "Đang phục hồi", + "noCBData": "Không có dữ liệu ngắt mạch có sẵn. Thực hiện một số yêu cầu đầu tiên.", + "providerHealthStatusAria": "Tình trạng sức khỏe của nhà cung cấp", + "issuesLabel": "Đã phát hiện sự cố", + "operational": "hoạt động", + "providers": "Nhà cung cấp", + "healthyCount": "{count} khỏe mạnh", + "nodeVersion": "Nút {version}", + "failures": "{count} thất bại", + "failuresPlural": "{count} thất bại", + "lastFailure": "Cuối cùng", + "rateLimitStatus": "Trạng thái giới hạn tỷ lệ", + "activeLimiters": "{count} bộ giới hạn hoạt động", + "activeLimitersPlural": "{count} bộ giới hạn hoạt động", + "queued": "Đã xếp hàng", + "queuedCount": "{count} đã xếp hàng", + "running": "đang chạy", + "runningCount": "{count} đang chạy", + "ok": "được rồi", + "activeLockouts": "Khóa hoạt động", + "resetConfirm": "Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh? Điều này sẽ xóa tất cả số lần lỗi và khôi phục tất cả các nhà cung cấp về trạng thái hoạt động.", + "resetAllTitle": "Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh", + "resetting": "Đang đặt lại...", + "resetAll": "Đặt lại tất cả", + "until": "Cho đến {time}" + }, + "limits": { + "title": "Giới hạn & hạn ngạch", + "rateLimit": "Giới hạn tỷ lệ", + "remaining": "Còn lại", + "requestsPerMinute": "Yêu cầu/phút", + "tokensPerMinute": "Mã thông báo/phút", + "dailyLimit": "Giới hạn hàng ngày" + }, + "logs": { + "title": "Nhật ký", + "requestLogs": "Nhật ký yêu cầu", + "proxyLogs": "Nhật ký proxy", + "auditLog": "Nhật ký kiểm tra", + "console": "Bảng điều khiển", + "auditLogDesc": "Hành động hành chính và sự kiện bảo mật", + "loading": "Đang tải...", + "refresh": "Làm mới", + "filterByAction": "Lọc theo hành động...", + "filterByActor": "Lọc theo diễn viên...", + "filterEntriesAria": "Lọc các mục nhật ký kiểm tra", + "filterByActionTypeAria": "Lọc theo loại hành động", + "filterByActorAria": "Lọc theo diễn viên", + "refreshAuditLogAria": "Làm mới nhật ký kiểm tra", + "tableAria": "Mục nhật ký kiểm tra", + "failedFetchAuditLog": "Không tìm nạp được nhật ký kiểm tra", + "showing": "Hiển thị các mục {count} (bù đắp {offset})", + "search": "Tìm kiếm", + "timestamp": "Dấu thời gian", + "action": "hành động", + "actor": "diễn viên", + "target": "Mục tiêu", + "details": "Chi tiết", + "ipAddress": "Địa chỉ IP", + "notAvailable": "—", + "noEntries": "Không tìm thấy mục nhật ký kiểm tra nào", + "previous": "trước đó", + "next": "Tiếp theo" + }, + "onboarding": { + "welcome": "Chào mừng", + "security": "Bảo mật", + "test": "kiểm tra", + "ready": "Sẵn sàng!", + "setPassword": "Đặt mật khẩu", + "addProvider": "Thêm nhà cung cấp đầu tiên của bạn", + "getStarted": "Bắt đầu", + "skip": "Bỏ qua", + "skipWizard": "Bỏ qua hoàn toàn trình hướng dẫn", + "skipPassword": "Bỏ qua việc thiết lập mật khẩu", + "skipAndContinue": "Bỏ qua & Tiếp tục", + "passwordLabel": "Mật khẩu", + "confirmPassword": "Xác nhận mật khẩu", + "enterPassword": "Nhập mật khẩu", + "confirmPasswordPlaceholder": "Xác nhận mật khẩu", + "passwordsMismatch": "Mật khẩu không khớp", + "setupComplete": "Thiết lập hoàn tất!", + "goToDashboard": "Đi tới Bảng điều khiển →", + "welcomeDesc": "OmniRoute là proxy API AI cục bộ của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.", + "multiProvider": "Đa nhà cung cấp", + "usageTracking": "Theo dõi sử dụng", + "apiKeyMgmt": "Quản lý khóa API", + "securityDesc": "Đặt mật khẩu để bảo vệ trang tổng quan của bạn hoặc bỏ qua ngay bây giờ.", + "providerDesc": "Kết nối nhà cung cấp AI đầu tiên của bạn. Bạn có thể thêm nhiều hơn sau.", + "apiKeyRequired": "Khóa API (bắt buộc)", + "customUrlOptional": "URL tùy chỉnh (tùy chọn)", + "testDesc": "Hãy xác minh kết nối nhà cung cấp của bạn hoạt động.", + "runTest": "Chạy kiểm tra kết nối", + "testingConnection": "Đang kiểm tra kết nối...", + "connectionSuccessful": "Kết nối thành công! Nhà cung cấp của bạn đã sẵn sàng.", + "noProviderFound": "Không tìm thấy nhà cung cấp nào. Bạn có thể thêm một từ bảng điều khiển sau.", + "testFailed": "Thử nghiệm không thành công nhưng bạn có thể định cấu hình điều này sau.", + "couldNotTest": "Không thể kiểm tra ngay bây giờ. Bạn có thể kiểm tra từ bảng điều khiển.", + "doneDesc": "Bạn đã hoàn tất! Phiên bản OmniRoute của bạn đã được định cấu hình và sẵn sàng thực hiện các yêu cầu AI proxy.", + "yourEndpoint": "Điểm cuối của bạn:", + "continue": "Tiếp tục", + "retry": "Thử lại", + "failedSetPassword": "Không thể đặt mật khẩu. Hãy thử lại.", + "failedAddProvider": "Không thể thêm nhà cung cấp. Hãy thử lại.", + "connectionError": "Lỗi kết nối. Vui lòng thử lại.", + "provider": "nhà cung cấp" + }, + "providers": { + "title": "Nhà cung cấp", + "addProvider": "Thêm nhà cung cấp", + "editProvider": "Chỉnh sửa nhà cung cấp", + "deleteProvider": "Xóa nhà cung cấp", + "noProviders": "Không có nhà cung cấp nào được định cấu hình", + "modelAvailability": "Mẫu sẵn có", + "accounts": "Tài khoản", + "newAccount": "Tài khoản mới", + "deleteConfirm": "Bạn có chắc chắn muốn xóa nhà cung cấp này không?", + "testing": "Đang thử nghiệm...", + "testConnection": "Kiểm tra kết nối", + "testSuccess": "Kết nối thành công", + "testFailed": "Kết nối không thành công", + "available": "Có sẵn", + "cooldown": "Thời gian hồi chiêu", + "unavailable": "Không có sẵn", + "unknown": "Không xác định", + "oauthLabel": "OAuth", + "compatibleLabel": "Tương thích", + "chat": "Trò chuyện", + "responses": "Phản hồi", + "messages": "Tin nhắn", + "oauthProviders": "Nhà cung cấp OAuth", + "freeProviders": "Nhà cung cấp miễn phí", + "apiKeyProviders": "Nhà cung cấp khóa API", + "compatibleProviders": "Nhà cung cấp tương thích với khóa API", + "testAll": "Kiểm tra tất cả", + "testAllOAuth": "Kiểm tra tất cả các kết nối OAuth", + "testAllFree": "Kiểm tra tất cả các kết nối miễn phí", + "testAllApiKey": "Kiểm tra tất cả các kết nối Khóa API", + "testAllCompatible": "Kiểm tra tất cả các kết nối tương thích", + "connected": "{count} Đã kết nối", + "errorCount": "{count} Lỗi ({code})", + "errorCountNoCode": "{count} Lỗi", + "noConnections": "Không có kết nối", + "disabled": "Đã tắt", + "enableProvider": "Kích hoạt nhà cung cấp", + "disableProvider": "Vô hiệu hóa nhà cung cấp", + "testResults": "Kết quả kiểm tra", + "noCompatibleYet": "Chưa có nhà cung cấp tương thích nào được thêm vào", + "compatibleHint": "Sử dụng các nút ở trên để thêm điểm cuối tương thích với OpenAI hoặc Anthropic", + "addOpenAICompatible": "Thêm tương thích OpenAI", + "addAnthropicCompatible": "Thêm tính tương thích với con người", + "addNewProvider": "Thêm nhà cung cấp mới", + "backToProviders": "Quay lại Nhà cung cấp", + "configureNewProvider": "Định cấu hình nhà cung cấp AI mới để sử dụng với các ứng dụng của bạn.", + "providerLabel": "nhà cung cấp", + "selectProvider": "Chọn nhà cung cấp", + "selectedProvider": "Nhà cung cấp đã chọn", + "authMethod": "Phương thức xác thực", + "apiKeyLabel": "Khóa API", + "apiKeyRequired": "Cần có khóa API", + "selectProviderRequired": "Vui lòng chọn nhà cung cấp", + "enterApiKey": "Nhập khóa API của bạn", + "apiKeySecure": "Khóa API của bạn sẽ được mã hóa và lưu trữ an toàn.", + "oauth2Connect": "Kết nối với OAuth2", + "oauth2Label": "OAuth2", + "oauth2Desc": "Kết nối tài khoản của bạn bằng xác thực OAuth2.", + "displayName": "Tên hiển thị", + "displayNamePlaceholder": "ví dụ: API sản xuất, Môi trường phát triển", + "displayNameHint": "Tùy chọn. Một cái tên thân thiện để xác định cấu hình này.", + "active": "Đang hoạt động", + "activeDescription": "Cho phép nhà cung cấp này sử dụng trong các ứng dụng của bạn", + "cancel": "Hủy bỏ", + "createProvider": "Tạo nhà cung cấp", + "failedCreate": "Không tạo được nhà cung cấp", + "errorOccurred": "Đã xảy ra lỗi. Vui lòng thử lại.", + "modelStatus": "Tình trạng mẫu", + "allModelsOperational": "Tất cả các mô hình hoạt động", + "modelsWithIssues": "{count} mô hình có vấn đề", + "allModelsNormal": "Tất cả các model đều phản hồi bình thường.", + "cooldownCleared": "Đã xóa thời gian hồi chiêu cho {model}", + "failedClearCooldown": "Không thể xóa thời gian hồi chiêu", + "loadingAvailability": "Đang tải tính khả dụng của mô hình...", + "clearCooldown": "Xóa", + "clearing": "Đang dọn dẹp...", + "until": "Cho đến {time}", + "providerTestFailed": "Kiểm tra nhà cung cấp không thành công", + "modeTest": "{mode} Kiểm tra", + "passedCount": "{count} đã vượt qua", + "failedCount": "{count} không thành công", + "testedCount": "{count} đã kiểm tra", + "millisecondsAbbr": "{value}ms", + "okShort": "được rồi", + "errorShort": "LỖI", + "noActiveConnectionsInGroup": "Không tìm thấy kết nối hoạt động nào cho nhóm này.", + "allTestsPassed": "Tất cả {total} bài kiểm tra đã vượt qua", + "testSummary": "{passed}/{total} đã đạt, {failed} không thành công", + "nameLabel": "Tên", + "prefixLabel": "Tiền tố", + "baseUrlLabel": "URL cơ sở", + "apiTypeLabel": "Loại API", + "prefixHint": "Bắt buộc. Tiền tố duy nhất cho tên model.", + "nameHint": "Bắt buộc. Một nhãn thân thiện cho nút này.", + "baseUrlHint": "Bắt buộc.  URL cơ sở API của nhà cung cấp.", + "anthropicPrefixPlaceholder": "ac-prod", + "openaiPrefixPlaceholder": "oc-prod", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "Xác thực kết nối", + "validating": "Đang xác thực...", + "connectionValid": "Kết nối là hợp lệ!", + "connectionFailed": "Kết nối không thành công. Kiểm tra URL và khóa.", + "testKeyLabel": "Khóa API kiểm tra", + "testKeyPlaceholder": "sk-... (chỉ để xác nhận)", + "providerNotFound": "Không tìm thấy nhà cung cấp", + "deleteConnectionConfirm": "Xóa kết nối này?", + "failedSetAlias": "Không đặt được bí danh", + "failedSaveConnection": "Không lưu được kết nối", + "failedSaveConnectionRetry": "Không lưu được kết nối. Vui lòng thử lại.", + "failedRetestConnection": "Không thể kiểm tra lại kết nối", + "deleteCompatibleNodeConfirm": "Xóa nút tương thích {type} này?", + "anthropicCompatibleDetails": "Chi tiết tương thích nhân loại", + "openaiCompatibleDetails": "Chi tiết tương thích OpenAI", + "messagesApi": "API tin nhắn", + "responsesApi": "API phản hồi", + "chatCompletions": "Hoàn thành cuộc trò chuyện", + "importingModels": "Đang nhập khẩu...", + "importFromModels": "Nhập từ /model", + "addConnectionToImport": "Thêm kết nối để cho phép nhập.", + "noModelsConfigured": "Không có mô hình nào được định cấu hình", + "connectionCount": "{count} kết nối", + "fetchingModels": "Đang tìm nạp các mẫu có sẵn...", + "failedFetchModels": "Không tìm nạp được mô hình", + "noModelsFound": "Không tìm thấy mô hình nào", + "importFailed": "Nhập không thành công", + "noNewModelsAdded": "Không có mô hình mới được thêm vào.", + "adding": "Đang thêm...", + "importingModelsTitle": "Nhập mô hình", + "copyModel": "Sao chép mô hình", + "removeModel": "Xóa mô hình", + "rateLimitProtected": "Được bảo vệ", + "rateLimitUnprotected": "không được bảo vệ", + "enableRateLimitProtection": "Nhấp để bật bảo vệ giới hạn tỷ lệ", + "disableRateLimitProtection": "Nhấp để tắt bảo vệ giới hạn tỷ lệ", + "productionKey": "Khóa sản xuất", + "enterNewApiKey": "Nhập khóa API mới", + "optional": "Tùy chọn", + "anthropicCompatibleName": "Tương thích với con người", + "openaiCompatibleName": "Tương thích OpenAI", + "failedImportModels": "Không thể nhập mô hình", + "noModelsReturnedFromEndpoint": "Không có mô hình nào được trả về từ điểm cuối /models.", + "importingModelsProgress": "Đang nhập {current} trong số {total} mô hình...", + "foundModelsStartingImport": "Đã tìm thấy mô hình {count}. Đang bắt đầu nhập...", + "importingModelById": "Đang nhập {modelId}...", + "importSuccessCount": "Đã nhập thành công {count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "Không có mẫu mới nào được thêm vào (tất cả đều đã tồn tại).", + "importDoneCount": "✓ Xong! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "Đã xảy ra lỗi không mong muốn", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "tin nhắn", + "responsesPath": "phản hồi", + "chatCompletionsPath": "trò chuyện/hoàn thành", + "add": "Thêm", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "anthropic": "nhân loại", + "openai": "OpenAI", + "singleConnectionPerCompatible": "Chỉ có một kết nối được phép cho mỗi nút tương thích. Thêm một nút khác nếu bạn cần thêm kết nối.", + "connections": "Kết nối", + "providerProxyTitleConfigured": "Proxy của nhà cung cấp: {host}", + "configured": "được cấu hình", + "providerProxyConfigureHint": "Định cấu hình proxy cho tất cả các kết nối của nhà cung cấp này", + "providerProxy": "Ủy quyền của nhà cung cấp", + "noConnectionsYet": "Chưa có kết nối nào", + "addFirstConnectionHint": "Thêm kết nối đầu tiên của bạn để bắt đầu", + "addConnection": "Thêm kết nối", + "availableModels": "Các mẫu có sẵn", + "pageAutoRefresh": "Trang sẽ tự động làm mới...", + "statusDisabled": "bị vô hiệu hóa", + "statusConnected": "đã kết nối", + "statusRuntimeIssue": "vấn đề thời gian chạy", + "statusAuthFailed": "xác thực thất bại", + "statusRateLimited": "tỷ lệ giới hạn", + "statusNetworkIssue": "sự cố mạng", + "statusTestUnsupported": "kiểm tra không được hỗ trợ", + "statusUnavailable": "không có sẵn", + "statusFailed": "thất bại", + "statusError": "lỗi", + "oauthAccount": "Tài khoản OAuth", + "errorTypeRuntime": "Thời gian chạy cục bộ", + "errorTypeUpstreamAuth": "Xác thực ngược dòng", + "errorTypeMissingCredential": "Thiếu thông tin xác thực", + "errorTypeRefreshFailed": "Làm mới không thành công", + "errorTypeTokenExpired": "Mã thông báo đã hết hạn", + "errorTypeRateLimited": "Tỷ lệ giới hạn", + "errorTypeUpstreamUnavailable": "Thượng nguồn không có sẵn", + "errorTypeNetworkError": "Lỗi mạng", + "errorTypeTestUnsupported": "Kiểm tra không được hỗ trợ", + "errorTypeUpstreamError": "Lỗi ngược dòng", + "proxySourceGlobal": "Toàn cầu", + "proxySourceProvider": "nhà cung cấp", + "proxySourceKey": "Chìa khóa", + "proxyConfiguredBySource": "Ủy quyền ({source}): {host}", + "autoPriority": "Tự động: {priority}", + "proxy": "ủy nhiệm", + "retestAuthentication": "Kiểm tra lại xác thực", + "retest": "Kiểm tra lại", + "disableConnection": "Tắt kết nối", + "enableConnection": "Kích hoạt kết nối", + "reauthenticateConnection": "Xác thực lại kết nối này", + "proxyConfig": "Cấu hình proxy", + "aliasExistsAlert": "Bí danh \"{alias}\" đã tồn tại. Vui lòng sử dụng một mô hình khác hoặc chỉnh sửa bí danh hiện có.", + "openRouterAnyModelHint": "OpenRouter hỗ trợ mọi mô hình. Thêm mô hình và tạo bí danh để truy cập nhanh.", + "modelIdFromOpenRouter": "ID mẫu (từ OpenRouter)", + "openRouterModelPlaceholder": "nhân chủng/claude-3-opus", + "customModels": "Mô hình tùy chỉnh", + "customModelsHint": "Thêm ID mẫu không có trong danh sách mặc định. Chúng sẽ có sẵn để định tuyến.", + "modelId": "Mã mẫu", + "customModelPlaceholder": "ví dụ: gpt-4.5-turbo", + "loading": "Đang tải...", + "removeCustomModel": "Xóa mô hình tùy chỉnh", + "noCustomModels": "Chưa có mô hình tùy chỉnh nào được thêm vào.", + "allSuggestedAliasesExist": "Tất cả các bí danh được đề xuất đã tồn tại. Vui lòng chọn một mẫu khác hoặc xóa các bí danh xung đột.", + "failedSaveCustomModel": "Không lưu được mô hình tùy chỉnh", + "modelAddedSuccess": "Đã thêm mô hình {modelId} thành công", + "failedAddModelTryAgain": "Không thể thêm mô hình. Vui lòng thử lại.", + "failedSaveImportedModel": "Không lưu được mô hình đã nhập vào cơ sở dữ liệu tùy chỉnh", + "failedImportModelsTryAgain": "Không thể nhập mô hình. Vui lòng thử lại.", + "failedRemoveModelFromDatabase": "Không thể xóa mô hình khỏi cơ sở dữ liệu", + "modelRemovedSuccess": "Đã xóa mô hình thành công", + "failedDeleteModelTryAgain": "Không xóa được mô hình. Vui lòng thử lại.", + "compatibleModelsDescription": "Thêm các mô hình tương thích {type} theo cách thủ công hoặc nhập chúng từ điểm cuối /models.", + "anthropicCompatibleModelPlaceholder": "Claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", + "apiKeyValidationFailed": "Xác thực khóa API không thành công. Vui lòng kiểm tra chìa khóa của bạn và thử lại.", + "addProviderApiKeyTitle": "Thêm khóa API {provider}", + "checking": "Đang kiểm tra...", + "check": "Kiểm tra", + "valid": "hợp lệ", + "invalid": "không hợp lệ", + "creating": "Đang tạo...", + "validationChecksAnthropicCompatible": "Kiểm tra xác thực {provider} bằng cách xác minh khóa API.", + "validationChecksOpenAiCompatible": "Kiểm tra xác thực {provider} thông qua /models trên URL cơ sở của bạn.", + "priorityLabel": "Ưu tiên", + "saving": "Đang lưu...", + "save": "Lưu", + "editConnection": "Chỉnh sửa kết nối", + "accountName": "Tên tài khoản", + "email": "Email", + "healthCheckMinutes": "Kiểm tra sức khỏe (phút)", + "healthCheckHint": "Khoảng thời gian làm mới mã thông báo chủ động. 0 = bị vô hiệu hóa.", + "failedTestConnection": "Không thể kiểm tra kết nối", + "failed": "thất bại", + "leaveBlankKeepCurrentApiKey": "Để trống để giữ khóa API hiện tại.", + "editCompatibleTitle": "Chỉnh sửa {type} Tương thích", + "compatibleBaseUrlHint": "Sử dụng URL cơ sở (kết thúc bằng /v1) cho API tương thích {type} của bạn.", + "apiKeyForCheck": "Khóa API (để kiểm tra)", + "compatibleProdPlaceholder": "{type} Tương thích (Sản phẩm)" + }, + "settings": { + "title": "Cài đặt", + "general": "chung", + "security": "Bảo mật", + "appearance": "Ngoại hình", + "routing": "Định tuyến", + "cache": "Bộ nhớ đệm", + "resilience": "khả năng phục hồi", + "systemPrompt": "Lời nhắc hệ thống", + "thinkingBudget": "Suy nghĩ về ngân sách", + "proxy": "ủy nhiệm", + "pricing": "Định giá", + "storage": "Lưu trữ", + "policies": "Chính sách", + "ipFilter": "Bộ lọc IP", + "comboDefaults": "Mặc định kết hợp", + "fallbackChains": "Chuỗi dự phòng", + "changePassword": "Thay đổi mật khẩu", + "enablePassword": "Kích hoạt mật khẩu", + "darkMode": "Chế độ tối", + "lightMode": "Chế độ ánh sáng", + "systemTheme": "Chủ đề hệ thống", + "enableCache": "Bật bộ đệm", + "cacheTTL": "Bộ nhớ đệm TTL", + "maxCacheSize": "Kích thước bộ đệm tối đa", + "clearCache": "Xóa bộ nhớ đệm", + "cacheHits": "Số lần truy cập bộ đệm", + "cacheMisses": "Thiếu bộ nhớ đệm", + "hitRate": "Tỷ lệ trúng", + "cacheEntries": "Mục nhập bộ nhớ đệm", + "circuitBreaker": "Bộ ngắt mạch", + "retryPolicy": "Chính sách thử lại", + "maxRetries": "Số lần thử lại tối đa", + "retryDelay": "Trì hoãn thử lại", + "timeoutMs": "Thời gian chờ (ms)", + "enableSystemPrompt": "Kích hoạt lời nhắc hệ thống", + "systemPromptText": "Văn bản nhắc nhở hệ thống", + "enableThinking": "Kích hoạt tư duy", + "maxThinkingTokens": "Mã thông báo tư duy tối đa", + "enableProxy": "Kích hoạt proxy", + "proxyUrl": "URL proxy", + "pricingRates": "Định dạng giá cước", + "currentPricing": "Tổng quan về giá hiện tại", + "loadingPricing": "Đang tải dữ liệu giá...", + "noPricing": "Không có dữ liệu giá cả", + "input": "đầu vào", + "output": "đầu ra", + "cached": "Đã lưu vào bộ nhớ đệm", + "reasoning": "Lý luận", + "cacheCreation": "Tạo bộ đệm", + "customPricing": "Giá tùy chỉnh", + "databaseSize": "Kích thước cơ sở dữ liệu", + "backupDb": "Sao lưu cơ sở dữ liệu", + "restoreDb": "Khôi phục cơ sở dữ liệu", + "exportData": "Xuất dữ liệu", + "importData": "Nhập dữ liệu", + "clearData": "Xóa tất cả dữ liệu", + "clearDataConfirm": "Điều này sẽ xóa vĩnh viễn tất cả dữ liệu. Bạn có chắc không?", + "enableRequestLogs": "Bật nhật ký yêu cầu", + "logRetention": "Lưu giữ nhật ký", + "ipWhitelist": "Danh sách trắng IP", + "ipBlacklist": "Danh sách đen IP", + "addIP": "Thêm IP", + "savedSuccessfully": "Đã lưu cài đặt thành công", + "ai": "trí tuệ nhân tạo", + "advanced": "Nâng cao", + "localMode": "Chế độ cục bộ - Tất cả dữ liệu được lưu trữ trên máy của bạn", + "settingsSectionsAria": "Phần cài đặt", + "switchThemes": "Chuyển đổi giữa chủ đề sáng và tối", + "themeSelectionAria": "Lựa chọn chủ đề", + "themeLight": "Ánh sáng", + "themeDark": "Tối", + "themeSystem": "Hệ thống", + "hideHealthLogs": "Ẩn nhật ký kiểm tra sức khỏe", + "hideHealthLogsDesc": "Khi BẬT, hãy chặn thông báo [HealthCheck] trong bảng điều khiển máy chủ", + "promptCache": "Bộ nhớ đệm nhắc nhở", + "flushCache": "Xóa bộ nhớ đệm", + "flushing": "Đang xả…", + "size": "Kích thước", + "hits": "Lượt truy cập", + "evictions": "Trục xuất", + "loadingCacheStats": "Đang tải số liệu thống kê về bộ nhớ đệm…", + "globalProxy": "Proxy toàn cầu", + "globalProxyDesc": "Định cấu hình proxy gửi đi toàn cầu cho tất cả lệnh gọi API. Các nhà cung cấp, tổ hợp và khóa riêng lẻ có thể ghi đè điều này.", + "noGlobalProxy": "Không có proxy toàn cầu nào được định cấu hình", + "globalLabel": "Toàn cầu", + "configure": "Cấu hình", + "globalSystemPrompt": "Lời nhắc hệ thống toàn cầu", + "systemPromptDesc": "Được đưa vào tất cả các yêu cầu ở cấp độ proxy", + "saved": "Đã lưu", + "systemPromptPlaceholder": "Nhập lời nhắc hệ thống để đưa vào tất cả các yêu cầu...", + "systemPromptHint": "Lời nhắc này được thêm vào trước thông báo hệ thống của mọi yêu cầu. Sử dụng cho các hướng dẫn chung, nguyên tắc an toàn hoặc quy tắc định dạng phản hồi.", + "chars": "{count} ký tự", + "thinkingBudgetTitle": "Suy nghĩ về ngân sách", + "thinkingBudgetDesc": "Kiểm soát việc sử dụng mã thông báo lý luận AI trên tất cả các yêu cầu", + "passthrough": "Truyền qua", + "passthroughDesc": "Không có thay đổi - khách hàng kiểm soát ngân sách tư duy", + "auto": "Tự động", + "autoDesc": "Loại bỏ mọi cấu hình suy nghĩ - hãy để nhà cung cấp quyết định", + "custom": "tùy chỉnh", + "customDesc": "Đặt ngân sách mã thông báo cố định cho tất cả các yêu cầu", + "adaptive": "Thích ứng", + "adaptiveDesc": "Mở rộng ngân sách dựa trên độ phức tạp của yêu cầu", + "effortNone": "Không có (0 mã thông báo)", + "effortLow": "Thấp (1K token)", + "effortMedium": "Trung bình (10K token)", + "effortHigh": "Cao (128K token)", + "tokenBudget": "Ngân sách mã thông báo", + "tokens": "mã thông báo", + "baseEffortLevel": "Mức nỗ lực cơ bản", + "adaptiveHint": "Chế độ thích ứng sẽ chia tỷ lệ từ cấp cơ sở này dựa trên số lượng tin nhắn, mức sử dụng công cụ và độ dài lời nhắc.", + "requireLogin": "Yêu cầu đăng nhập", + "requireLoginDesc": "Khi BẬT, bảng điều khiển yêu cầu mật khẩu. Khi TẮT, truy cập mà không cần đăng nhập.", + "currentPassword": "Mật khẩu hiện tại", + "enterCurrentPassword": "Nhập mật khẩu hiện tại", + "newPassword": "Mật khẩu mới", + "enterNewPassword": "Nhập mật khẩu mới", + "confirmPassword": "Xác nhận mật khẩu mới", + "confirmPasswordPlaceholder": "Xác nhận mật khẩu mới", + "passwordsNoMatch": "Mật khẩu không khớp", + "passwordUpdated": "Đã cập nhật mật khẩu thành công", + "failedUpdatePassword": "Không cập nhật được mật khẩu", + "errorOccurred": "Đã xảy ra lỗi", + "updatePassword": "Cập nhật mật khẩu", + "setPassword": "Đặt mật khẩu", + "apiEndpointProtection": "Bảo vệ điểm cuối API", + "requireAuthModels": "Yêu cầu khóa API cho /model", + "requireAuthModelsDesc": "Khi BẬT, điểm cuối /v1/models trả về 404 cho các yêu cầu không được xác thực. Ngăn chặn việc phát hiện mô hình bởi người dùng trái phép.", + "blockedProviders": "Nhà cung cấp bị chặn", + "blockedProvidersDesc": "Ẩn các nhà cung cấp cụ thể khỏi phản hồi /v1/models. Các nhà cung cấp bị chặn sẽ không xuất hiện trong danh sách mô hình.", + "providersBlocked": "{count} nhà cung cấp bị chặn khỏi /models", + "blockProviderTitle": "Chặn {provider}", + "unblockProviderTitle": "Bỏ chặn {provider}", + "routingStrategy": "Chiến lược định tuyến", + "fillFirst": "điền đầu tiên", + "fillFirstDesc": "Sử dụng tài khoản theo thứ tự ưu tiên", + "roundRobin": "Vòng Robin", + "roundRobinDesc": "Duyệt qua tất cả các tài khoản", + "p2c": "P2C", + "p2cDesc": "Chọn ngẫu nhiên 2 cái, chọn cái lành mạnh hơn", + "random": "Ngẫu nhiên", + "randomDesc": "Tài khoản ngẫu nhiên mỗi yêu cầu", + "leastUsed": "Ít được sử dụng nhất", + "leastUsedDesc": "Chọn tài khoản ít được sử dụng gần đây nhất", + "costOpt": "Lựa chọn chi phí", + "costOptDesc": "Ưu tiên tài khoản có sẵn rẻ nhất", + "stickyLimit": "Giới hạn dính", + "stickyLimitDesc": "Cuộc gọi trên mỗi tài khoản trước khi chuyển đổi", + "modelAliases": "Bí danh mẫu", + "modelAliasesDesc": "Các mẫu ký tự đại diện để ánh xạ lại tên mẫu máy • Sử dụng * và ?", + "aliasPatternPlaceholder": "Claude-sonnet-*", + "aliasTargetPlaceholder": "Claude-sonnet-4-20250514", + "pattern": "mẫu", + "targetModel": "Mô hình mục tiêu", + "add": "+ Thêm", + "session": "Phiên", + "sessionDetailsAria": "Chi tiết phiên", + "status": "Trạng thái", + "authenticated": "Đã xác thực", + "guest": "khách", + "loginTime": "Thời gian đăng nhập", + "sessionAge": "Tuổi phiên", + "browser": "Trình duyệt", + "clearLocalData": "Xóa dữ liệu cục bộ", + "logout": "Đăng xuất", + "clearLocalDataConfirm": "Xóa tất cả dữ liệu cục bộ? Điều này sẽ thiết lập lại tùy chọn của bạn.", + "unknown": "Không xác định", + "systemActor": "hệ thống", + "ipAccessControl": "Kiểm soát truy cập IP", + "ipAccessControlDesc": "Chặn hoặc cho phép các địa chỉ IP cụ thể", + "ipModeDisabled": "Đã tắt", + "ipModeBlacklist": "Danh sách đen", + "ipModeWhitelist": "Danh sách trắng", + "ipModeWhitelistPriority": "Ưu tiên WL", + "addIpAddress": "Thêm địa chỉ IP", + "ipAddressPlaceholder": "192.168.1.0/24 hoặc 10.0.*.*", + "block": "+ Chặn", + "allow": "+ Cho phép", + "blocked": "Đã chặn ({count})", + "allowed": "Được phép ({count})", + "temporaryBans": "Lệnh cấm tạm thời ({count})", + "minLeft": "{min} phút còn lại", + "auditLog": "Nhật ký kiểm tra", + "searchAuditLogs": "Tìm kiếm nhật ký kiểm tra...", + "failedLoadAuditLog": "Không tải được nhật ký kiểm tra", + "noAuditEvents": "Không tìm thấy sự kiện kiểm tra nào", + "action": "hành động", + "actor": "diễn viên", + "details": "Chi tiết", + "time": "thời gian", + "fallbackChainsTitle": "Chuỗi dự phòng", + "fallbackChainsDesc": "Xác định thứ tự dự phòng của nhà cung cấp cho mỗi mô hình", + "addChain": "+ Thêm chuỗi", + "modelName": "Tên mẫu", + "modelNamePlaceholder": "Claude-sonnet-4-20250514", + "providersCommaSeparated": "Nhà cung cấp (được phân tách bằng dấu phẩy, theo thứ tự ưu tiên)", + "providersCommaSeparatedPlaceholder": "nhân loại, openai, song tử", + "createChain": "Tạo chuỗi", + "noFallbackChains": "Không có chuỗi dự phòng", + "noFallbackChainsDesc": "Tạo một chuỗi để xác định thứ tự dự phòng của nhà cung cấp cho một mô hình.", + "loadingFallbackChains": "Đang tải chuỗi dự phòng...", + "deleteChainConfirm": "Xóa chuỗi dự phòng cho \"{model}\"?", + "chainCreated": "Đã tạo chuỗi cho {model}", + "chainDeleted": "Đã xóa chuỗi cho {model}", + "failedCreateChain": "Không tạo được chuỗi", + "failedDeleteChain": "Không thể xóa chuỗi", + "deleteChain": "Xóa chuỗi", + "fillModelAndProviders": "Vui lòng điền tên model và nhà cung cấp", + "addAtLeastOneProvider": "Thêm ít nhất một nhà cung cấp", + "comboDefaultsTitle": "Mặc định kết hợp", + "globalComboConfig": "Cấu hình kết hợp toàn cầu", + "defaultStrategy": "Chiến lược mặc định", + "defaultStrategyDesc": "Áp dụng cho các combo mới không có chiến lược rõ ràng", + "comboStrategyAria": "Chiến lược kết hợp", + "priority": "Ưu tiên", + "weighted": "Có trọng số", + "maxRetriesLabel": "Số lần thử lại tối đa", + "retryDelayLabel": "Độ trễ thử lại (ms)", + "timeoutLabel": "Thời gian chờ (ms)", + "healthCheck": "Kiểm tra sức khỏe", + "healthCheckDesc": "Kiểm tra trước tính khả dụng của nhà cung cấp", + "trackMetrics": "Theo dõi số liệu", + "trackMetricsDesc": "Ghi lại số liệu yêu cầu trên mỗi kết hợp", + "providerOverrides": "Ghi đè nhà cung cấp", + "providerOverridesDesc": "Ghi đè thời gian chờ và thử lại trên mỗi nhà cung cấp. Cài đặt nhà cung cấp ghi đè mặc định chung.", + "providerMaxRetriesAria": "{provider} số lần thử lại tối đa", + "providerTimeoutAria": "{provider} hết thời gian chờ mili giây", + "removeProviderOverrideAria": "Xóa ghi đè {provider}", + "newProviderNamePlaceholder": "ví dụ: google, openai...", + "newProviderNameAria": "Tên nhà cung cấp mới", + "retries": "thử lại", + "ms": "cô", + "saveComboDefaults": "Lưu mặc định kết hợp", + "maxNestingDepth": "Độ sâu lồng tối đa", + "concurrencyPerModel": "Đồng thời / Mô hình", + "queueTimeout": "Hết thời gian xếp hàng (ms)", + "providerProfiles": "Hồ sơ nhà cung cấp", + "providerProfilesDesc": "Cài đặt khả năng phục hồi riêng biệt cho các nhà cung cấp OAuth (dựa trên phiên) và Khóa API (được đo lường). Nhà cung cấp OAuth có ngưỡng chặt chẽ hơn do giới hạn tốc độ thấp hơn.", + "oauthProviders": "Nhà cung cấp OAuth", + "apiKeyProviders": "Nhà cung cấp khóa API", + "transientCooldown": "Thời gian hồi chiêu thoáng qua", + "rateLimitCooldown": "Thời gian hồi chiêu giới hạn tốc độ", + "maxBackoffLevel": "Mức chờ đợi tối đa", + "cbThreshold": "Ngưỡng CB", + "cbResetTime": "Thời gian đặt lại CB", + "rateLimiting": "Giới hạn tỷ lệ", + "rateLimitingDesc": "Nhà cung cấp Khóa API được tự động giới hạn tỷ lệ với các giá trị mặc định an toàn. Các giới hạn được học từ tiêu đề phản hồi và điều chỉnh theo thời gian.", + "defaultSafetyNet": "Mạng lưới an toàn mặc định", + "rpm": "vòng/phút", + "minGap": "Khoảng cách tối thiểu", + "maxConcurrent": "Đồng thời tối đa", + "activeLimiters": "Bộ hạn chế hoạt động", + "noActiveLimiters": "Chưa có giới hạn tỷ lệ hoạt động nào.", + "reservoir": "Hồ chứa nước", + "running": "Đang chạy", + "queued": "Đã xếp hàng", + "circuitBreakers": "Bộ ngắt mạch", + "breakerStateClosed": "Đã đóng", + "breakerStateOpen": "Mở", + "breakerStateHalfOpen": "Nửa mở", + "tripped": "{count} bị vấp", + "healthy": "{count} khỏe mạnh", + "resetAll": "Đặt lại tất cả", + "noCircuitBreakers": "Chưa có bộ ngắt mạch nào hoạt động. Chúng được tạo tự động khi các yêu cầu chảy qua đường dẫn kết hợp.", + "failures": "{count} lỗi", + "policiesLocked": "Chính sách & Mã định danh bị khóa", + "allOperational": "Tất cả các hệ thống đều hoạt động - không có khóa hoặc cầu dao bị ngắt", + "loadingPolicies": "Đang tải chính sách...", + "lockedIdentifiers": "Số nhận dạng bị khóa", + "unlockedIdentifier": "Đã mở khóa: {identifier}", + "sinceDate": "kể từ {date}", + "forceUnlock": "Buộc mở khóa", + "unlocking": "Đang mở khóa...", + "failedUnlock": "Không thể mở khóa", + "failedLoadWithStatus": "Không tải được: {status}", + "failedLoadResilience": "Không tải được trạng thái phục hồi", + "saveFailed": "Lưu không thành công", + "resetFailed": "Đặt lại không thành công", + "loadingResilience": "Đang tải trạng thái phục hồi...", + "retry": "Thử lại", + "systemStorage": "Hệ thống & Lưu trữ", + "allDataLocal": "Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn", + "databasePath": "Đường dẫn cơ sở dữ liệu", + "exportDatabase": "Xuất cơ sở dữ liệu", + "exportAll": "Xuất tất cả (.tar.gz)", + "importDatabase": "Nhập cơ sở dữ liệu", + "confirmDbImport": "Xác nhận nhập cơ sở dữ liệu", + "confirmDbImportDesc": "Thao tác này sẽ thay thế tất cả dữ liệu hiện tại bằng nội dung từ {file}. Một bản sao lưu sẽ được tạo tự động trước khi nhập.", + "yesImport": "Có, nhập khẩu", + "lastBackup": "Sao lưu lần cuối", + "noBackupYet": "Chưa có bản sao lưu nào", + "backupNow": "Sao lưu ngay", + "backupRestore": "Sao lưu & Khôi phục", + "viewBackups": "Xem bản sao lưu", + "hide": "Ẩn", + "backupRetentionDesc": "Ảnh chụp nhanh cơ sở dữ liệu được tạo tự động trước khi khôi phục và cứ sau 15 phút khi dữ liệu thay đổi. Lưu giữ: 24 giờ + 30 lần sao lưu hàng ngày với chế độ xoay thông minh.", + "loadingBackups": "Đang tải bản sao lưu...", + "noBackupsYet": "Chưa có bản sao lưu nào. Bản sao lưu sẽ được tạo tự động khi dữ liệu thay đổi.", + "backupsAvailable": "{count} bản sao lưu có sẵn", + "refresh": "Làm mới", + "confirm": "Xác nhận?", + "yes": "Có", + "no": "Không", + "restore": "Khôi phục", + "invalidFileType": "Loại tệp không hợp lệ. Chỉ các tệp .sqlite được chấp nhận.", + "exportFailed": "Xuất không thành công", + "exportFailedWithError": "Xuất không thành công: {error}", + "fullExportFailedWithError": "Xuất toàn bộ không thành công: {error}", + "backupCreated": "Đã tạo bản sao lưu: {file}", + "restoreSuccess": "Đã khôi phục! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.", + "importSuccess": "Cơ sở dữ liệu đã được nhập! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.", + "justNow": "ngay bây giờ", + "minutesAgo": "{count} phút trước", + "hoursAgo": "{count} giờ trước", + "daysAgo": "{count}ngày trước", + "backupReasonManual": "hướng dẫn sử dụng", + "backupReasonPreRestore": "khôi phục trước", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "Không có thay đổi nào kể từ lần sao lưu cuối cùng", + "backupFailed": "Sao lưu không thành công", + "restoreFailed": "Khôi phục không thành công", + "importFailed": "Nhập không thành công", + "errorDuringRestore": "Đã xảy ra lỗi trong quá trình khôi phục", + "errorDuringImport": "Đã xảy ra lỗi trong quá trình nhập", + "modelPricing": "Giá mẫu", + "modelPricingDesc": "Định cấu hình mức chi phí cho mỗi mô hình • Tất cả mức giá bằng mã thông báo $/1 triệu", + "providers": "Nhà cung cấp", + "registry": "Đăng ký", + "priced": "Đã định giá", + "searchProvidersModels": "Tìm kiếm nhà cung cấp hoặc mô hình...", + "showAll": "Hiển thị tất cả", + "noProvidersMatch": "Không có nhà cung cấp nào phù hợp với tìm kiếm của bạn.", + "howPricingWorks": "Cách thức hoạt động của giá", + "cacheWrite": "Ghi bộ nhớ đệm", + "unsaved": "chưa được lưu", + "resetDefaults": "Đặt lại mặc định", + "saveProvider": "Lưu nhà cung cấp", + "saving": "Đang lưu...", + "model": "người mẫu", + "models": "mô hình", + "moreProviders": "{count} nhà cung cấp khác", + "withPricing": "với giá được cấu hình", + "policiesCircuitBreakers": "Chính sách & Bộ ngắt mạch", + "activeIssuesDetected": "Đã phát hiện sự cố đang diễn ra", + "off": "Tắt", + "resetPricingConfirm": "Đặt lại tất cả giá cho {provider} về mặc định?", + "pricingDescInput": "Đầu vào: mã thông báo được gửi đến mô hình", + "pricingDescOutput": "Đầu ra: mã thông báo được tạo", + "pricingDescCached": "Đã lưu vào bộ nhớ đệm: đầu vào được sử dụng lại (~50% tốc độ đầu vào)", + "pricingDescReasoning": "Lý luận: mã thông báo suy nghĩ (quay lại Đầu ra)", + "pricingDescCacheWrite": "Ghi bộ đệm: tạo các mục bộ đệm (quay lại Đầu vào)", + "pricingDescFormula": "Chi phí = (đầu vào × tốc độ đầu vào) + (đầu ra × tốc độ đầu ra) + (được lưu vào bộ nhớ đệm × tốc độ được lưu vào bộ nhớ cache) trên một triệu mã thông báo.", + "pricingSettingsTitle": "Cài đặt giá", + "totalModels": "Tổng số mô hình", + "active": "Đang hoạt động", + "costCalculation": "Tính toán chi phí", + "costCalculationDesc": "Chi phí được tính toán dựa trên mức sử dụng mã thông báo và mức giá được định cấu hình cho từng mô hình.", + "pricingFormat": "Định dạng giá", + "pricingFormatDesc": "Tất cả các mức giá đều tính bằng token $/1 triệu (đô la trên một triệu token).", + "tokenTypes": "Các loại mã thông báo", + "inputTokenDesc": "Mã thông báo nhắc nhở tiêu chuẩn", + "outputTokenDesc": "Mã thông báo hoàn thành/phản hồi", + "cachedTokenDesc": "Mã thông báo đầu vào được lưu trong bộ nhớ đệm (thường là 50% tốc độ đầu vào)", + "reasoningTokenDesc": "Mã thông báo lý luận/suy nghĩ đặc biệt (dự phòng tốc độ đầu ra)", + "cacheCreationTokenDesc": "Mã thông báo được sử dụng để tạo mục nhập bộ đệm (dự phòng tốc độ đầu vào)", + "customPricingNote": "Bạn có thể ghi đè giá mặc định cho các kiểu máy cụ thể. Ghi đè tùy chỉnh được ưu tiên hơn giá được tự động phát hiện.", + "editPricing": "Chỉnh sửa giá", + "viewFullDetails": "Xem chi tiết đầy đủ" + }, + "translator": { + "title": "Người phiên dịch", + "metaTitle": "Sân chơi phiên dịch | OmniRoute", + "metaDescription": "Gỡ lỗi, kiểm tra và trực quan hóa bản dịch định dạng API giữa các nhà cung cấp", + "playgroundTitle": "Sân chơi phiên dịch", + "playground": "Sân chơi", + "realtime": "Hoạt động dịch thời gian thực", + "chatTester": "Trình kiểm tra trò chuyện", + "testBench": "Ghế thử nghiệm", + "liveMonitor": "Màn hình trực tiếp", + "modeDescriptionPlayground": "Dán bất kỳ nội dung yêu cầu API nào và xem cách OmniRoute dịch nó giữa các định dạng nhà cung cấp (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi)", + "modeDescriptionChatTester": "Gửi các yêu cầu trò chuyện thực tế thông qua OmniRoute và kiểm tra toàn bộ hành trình: đầu vào, yêu cầu đã dịch, phản hồi của nhà cung cấp và đầu ra đã dịch.", + "modeDescriptionTestBench": "Chạy các kịch bản được xác định trước và so sánh khả năng tương thích giữa các nhà cung cấp và mô hình.", + "modeDescriptionLiveMonitor": "Xem các sự kiện dịch thuật trong thời gian thực khi các yêu cầu chảy qua OmniRoute.", + "modeDescriptionFallback": "Gỡ lỗi, kiểm tra và trực quan hóa cách OmniRoute dịch các yêu cầu API giữa các nhà cung cấp.", + "recentTranslations": "Bản dịch gần đây", + "noTranslations": "Chưa có bản dịch nào", + "source": "Nguồn", + "target": "Mục tiêu", + "time": "thời gian", + "model": "người mẫu", + "status": "Trạng thái", + "latency": "Độ trễ", + "totalTranslations": "Tổng số bản dịch", + "successful": "thành công", + "errors": "Lỗi", + "avgLatency": "Độ trễ trung bình", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "Trực tiếp - Tự động làm mới", + "paused": "Đã tạm dừng", + "eventsAppearHint": "Các sự kiện dịch xuất hiện ở đây khi các yêu cầu chuyển qua OmniRoute. Sử dụng bất kỳ phương pháp nào sau đây để tạo sự kiện:", + "chatTesterTab": "Tab Trình kiểm tra trò chuyện", + "testBenchTab": "Tab Bench thử nghiệm", + "externalApiCalls": "Lệnh gọi API bên ngoài", + "ideCliIntegrations": "Tích hợp IDE/CLI", + "inMemoryNote": "Lưu ý: Các sự kiện được lưu trong bộ nhớ và được đặt lại khi máy chủ khởi động lại.", + "ok": "được rồi", + "errorShort": "LỖI", + "formatConverter": "Trình chuyển đổi định dạng", + "formatConverterDescription": "Dán hoặc nhập nội dung yêu cầu JSON. Trình dịch sẽ tự động phát hiện định dạng nguồn và chuyển đổi nó sang định dạng đích. Sử dụng tính năng này để gỡ lỗi cách OmniRoute dịch các yêu cầu giữa các định dạng (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi).", + "input": "đầu vào", + "output": "đầu ra", + "auto": "Tự động", + "swapFormats": "Hoán đổi định dạng", + "translateAction": "Dịch", + "clear": "Xóa", + "inputPlaceholder": "Dán nội dung yêu cầu tại đây hoặc chọn mẫu bên dưới...", + "exampleTemplates": "Mẫu ví dụ", + "exampleTemplatesHint": "- Bấm để tải", + "templateLoadHint": "Mẫu tải yêu cầu ở định dạng {format}. Thay đổi định dạng nguồn để tải ở định dạng khác.", + "compatibilityTester": "Trình kiểm tra khả năng tương thích", + "compatibilityReport": "Báo cáo tương thích", + "testBenchDescription": "Chạy các kịch bản được xác định trước (Trò chuyện đơn giản, Gọi công cụ, v.v.) để xác minh khả năng tương thích của bản dịch và nhà cung cấp. Chọn định dạng nguồn và nhà cung cấp mục tiêu, sau đó chạy tất cả các thử nghiệm để xem tỷ lệ phần trăm tương thích. Sử dụng công cụ này để tìm những tính năng nào hoạt động giữa các nhà cung cấp.", + "targetProvider": "Nhà cung cấp mục tiêu", + "runAllTests": "Chạy tất cả các bài kiểm tra", + "runTest": "Chạy thử nghiệm", + "reRun": "Chạy lại", + "running": "Đang chạy...", + "passed": "đã vượt qua", + "failed": "thất bại", + "passedIconLabel": "✅ Đạt", + "chunks": "khối", + "scenarioSimpleChat": "Trò chuyện đơn giản", + "scenarioToolCalling": "Gọi công cụ", + "scenarioMultiTurn": "Nhiều lượt", + "scenarioThinking": "suy nghĩ", + "scenarioSystemPrompt": "Lời nhắc hệ thống", + "scenarioStreaming": "Truyền phát", + "templateNames": { + "simple-chat": "Trò chuyện đơn giản", + "tool-calling": "Gọi công cụ", + "multi-turn": "Nhiều lượt", + "thinking": "suy nghĩ", + "system-prompt": "Lời nhắc hệ thống", + "streaming": "Truyền phát" + }, + "templateDescriptions": { + "simple-chat": "Tin nhắn văn bản cơ bản", + "tool-calling": "Lệnh gọi hàm/công cụ", + "multi-turn": "Đối thoại với lịch sử", + "thinking": "Suy nghĩ/lý luận mở rộng", + "system-prompt": "Hướng dẫn hệ thống phức tạp", + "streaming": "Yêu cầu phát trực tuyến SSE" + }, + "templatePayloads": { + "simpleChat": { + "system": "Bạn là một trợ lý hữu ích.", + "userGreeting": "Xin chào! Bạn hôm nay thế nào?" + }, + "toolCalling": { + "userWeather": "Thời tiết ở São Paulo thế nào?", + "toolDescription": "Nhận thời tiết hiện tại cho một địa điểm", + "cityNameDescription": "Tên thành phố" + }, + "multiTurn": { + "system": "Bạn là một trợ lý mã hóa.", + "userInitial": "Viết hàm sắp xếp một mảng trong Python.", + "assistantExample": "Đây là một chức năng sắp xếp đơn giản:\n\n``` con trăn\ndef sắp xếp_array(arr):\n trả về đã sắp xếp(arr)\n```", + "userFollowUp": "Bây giờ hãy sắp xếp nó theo thứ tự giảm dần." + }, + "thinking": { + "question": "Tổng của 100 số nguyên tố đầu tiên là bao nhiêu?" + }, + "systemPrompt": { + "systemInstruction": "Bạn là một kỹ sư phần mềm cao cấp chuyên về hệ thống phân tán. Trả lời các câu hỏi một cách chính xác bằng cách sử dụng các phương pháp hay nhất trong ngành. Luôn cung cấp các ví dụ về mã khi có liên quan. Định dạng câu trả lời của bạn bằng cách sử dụng markdown.", + "question": "Làm cách nào để triển khai mẫu ngắt mạch?" + }, + "streaming": { + "prompt": "Kể cho tôi nghe một câu chuyện ngắn về một robot học vẽ." + } + }, + "openaiCompatibleLabel": "Tương thích OpenAI", + "anthropicCompatibleLabel": "Tương thích với con người", + "noTemplateForFormat": "Không có mẫu cho định dạng này", + "translationFailed": "Dịch không thành công: {error}", + "pipelineDebugger": "Trình gỡ lỗi đường ống", + "translationPipeline": "Đường dẫn dịch thuật", + "pipelineVisualization": "Trực quan hóa đường ống", + "pipelineVisualizationHint": "Gửi tin nhắn để xem yêu cầu của bạn diễn ra như thế nào thông qua quá trình phát hiện → dịch thuật → cuộc gọi của nhà cung cấp.", + "chatTesterDescription": "Gửi tin nhắn dưới dạng định dạng ứng dụng khách cụ thể và kiểm tra từng bước của quy trình dịch thuật.", + "chatTesterFlow": "Yêu cầu của khách hàng → Phát hiện định dạng → Trung gian OpenAI → Định dạng nhà cung cấp → Phản hồi", + "clickStepToInspect": "Nhấp vào bất kỳ bước nào để kiểm tra dữ liệu ở giai đoạn đó.", + "clientFormat": "Định dạng khách hàng", + "provider": "nhà cung cấp", + "modelPlaceholder": "Chọn hoặc nhập tên mẫu máy...", + "sendMessageToSeePipeline": "Gửi tin nhắn để xem quy trình dịch thuật", + "chatMessageHintPrefix": "Tin nhắn của bạn sẽ được định dạng dưới dạng", + "chatMessageHintSuffix": "yêu cầu, được dịch qua quy trình và gửi đến nhà cung cấp đã chọn.", + "youWithFormat": "Bạn ({format})", + "assistant": "Trợ lý", + "typeMessage": "Nhập tin nhắn...", + "send": "Gửi", + "clientRequest": "Yêu cầu của khách hàng", + "clientRequestDescription": "Nội dung yêu cầu mà khách hàng của bạn sẽ gửi nó", + "formatDetected": "Đã phát hiện định dạng", + "formatDetectedDescription": "OmniRoute tự động phát hiện định dạng API từ cấu trúc yêu cầu", + "openaiIntermediate": "Trung cấp OpenAI", + "openaiIntermediateDescription": "Tất cả các định dạng trước tiên được chuẩn hóa thành định dạng OpenAI (cầu nối phổ quát)", + "providerFormat": "Định dạng nhà cung cấp", + "providerFormatDescription": "Định dạng OpenAI được dịch sang định dạng gốc của nhà cung cấp", + "providerResponse": "Phản hồi của nhà cung cấp", + "providerResponseRawDescription": "Phản hồi thô từ API nhà cung cấp", + "providerResponseSseDescription": "Luồng SSE thô từ API nhà cung cấp", + "unexpectedError": "Đã xảy ra lỗi không mong muốn", + "error": "Lỗi", + "errorMessage": "Lỗi: {message}", + "requestFailed": "Yêu cầu không thành công", + "noTextExtracted": "(Không trích xuất văn bản)", + "liveMonitorDescriptionPrefix": "Hiển thị các sự kiện dịch khi lệnh gọi API đi qua OmniRoute. Các sự kiện đến từ bộ đệm trong bộ nhớ (đặt lại khi khởi động lại). sử dụng", + "liveMonitorDescriptionSuffix": "hoặc lệnh gọi API bên ngoài để tạo sự kiện." + }, + "usage": { + "title": "Cách sử dụng", + "loggerTab": "Trình ghi nhật ký", + "proxyTab": "ủy nhiệm", + "budgetManagement": "Quản lý ngân sách", + "budgetSaved": "Đã lưu giới hạn ngân sách", + "budgetSaveFailed": "Không thể tiết kiệm ngân sách", + "loadingBudgetData": "Đang tải dữ liệu ngân sách...", + "noApiKeysTitle": "Không có khóa API", + "noApiKeysDescription": "Thêm khóa API trước để thiết lập giới hạn ngân sách.", + "apiKey": "Khóa API", + "todaysSpend": "Chi tiêu hôm nay", + "thisMonth": "Tháng này", + "setLimits": "Đặt giới hạn", + "dailyLimitUsd": "Giới hạn hàng ngày (USD)", + "monthlyLimitUsd": "Giới hạn hàng tháng (USD)", + "warningThresholdPercent": "Ngưỡng cảnh báo (%)", + "dailyLimitPlaceholder": "ví dụ: 5 giờ 00", + "monthlyLimitPlaceholder": "ví dụ: 50,00", + "warningThresholdPlaceholder": "80", + "saveLimits": "Lưu giới hạn", + "budgetOk": "Ngân sách ổn — còn lại {remaining}", + "budgetExceeded": "Vượt quá ngân sách — yêu cầu có thể bị chặn", + "totalRequests": "Tổng số yêu cầu", + "noDataYet": "Chưa có dữ liệu", + "latency": "Độ trễ", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "Bộ nhớ đệm nhắc nhở", + "systemHealth": "Tình trạng hệ thống", + "entries": "Bài dự thi", + "activeCount": "{count} đang hoạt động", + "openCircuitBreakersDetected": "Đã phát hiện bộ ngắt mạch hở", + "hitRate": "Tỷ lệ trúng", + "hitsMisses": "Lượt truy cập / Bỏ lỡ", + "circuitBreakers": "Bộ ngắt mạch", + "lockedIPs": "IP bị khóa", + "lockoutsAutoRefreshHint": "Khóa giới hạn tốc độ trên mỗi mô hình • Tự động làm mới 10 giây", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "{time} còn lại", + "howItWorks": "Nó hoạt động như thế nào", + "howItWorksSubtitle": "Tìm hiểu cách đánh giá xác thực phản hồi LLM của bạn", + "define": "Xác định", + "defineStepDescription": "Tạo các trường hợp thử nghiệm với lời nhắc đầu vào và tiêu chí đầu ra dự kiến bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy hoặc đối sánh chính xác.", + "run": "Chạy", + "runStepDescription": "Thực hiện các trường hợp kiểm thử đối với điểm cuối LLM của bạn thông qua OmniRoute. Mỗi trường hợp được gửi dưới dạng một yêu cầu API thực sự.", + "evaluate": "Đánh giá", + "evaluateStepDescription": "Các câu trả lời được so sánh với các tiêu chí dự kiến. Xem đạt/không đạt cho từng trường hợp với số liệu về độ trễ và phản hồi chi tiết.", + "evalSuites": "Bộ đánh giá", + "evalSuitesHint": "Nhấp vào một bộ để xem các trường hợp thử nghiệm, sau đó chạy để đánh giá điểm cuối LLM của bạn", + "evalsLoading": "Đang tải bộ đánh giá...", + "noEvalSuitesFound": "Không tìm thấy bộ đánh giá nào", + "noEvalSuitesDescription": "Bộ đánh giá có thể được xác định thông qua API hoặc bằng mã. Họ kiểm tra kết quả đầu ra của mô hình so với kết quả mong đợi bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy, đối sánh chính xác và các hàm tùy chỉnh.", + "columnCase": "trường hợp", + "columnStatus": "Trạng thái", + "columnLatency": "Độ trễ", + "columnDetails": "Chi tiết", + "columnModel": "người mẫu", + "columnStrategy": "Chiến lược", + "columnExpected": "Dự kiến", + "statsSuites": "dãy phòng", + "statsTestCases": "Trường hợp thử nghiệm", + "statsModels": "Người mẫu", + "statsCoverage": "Bảo hiểm", + "statsStrategiesCount": "{count} chiến lược", + "evaluationStrategies": "Chiến lược đánh giá", + "modelsUnderTest": "Mô hình đang được thử nghiệm", + "searchSuitesPlaceholder": "Bộ tìm kiếm...", + "passSuffix": "vượt qua", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "Chạy đánh giá", + "runningProgress": "Đang chạy {current}/{total}...", + "passRate": "tỷ lệ đậu", + "summaryBreakdown": "{passed} đã đạt · {failed} thất bại · tổng cộng {total}", + "passedIconLabel": "✅ Đạt", + "failedIconLabel": "❌ Thất bại", + "detailsContains": "Chứa: \"{term}\"", + "detailsRegex": "Biểu thức chính quy: {pattern}", + "detailsExpected": "Dự kiến: \"{expected}\"", + "noResultsYet": "Chưa có kết quả", + "testCasesCount": "Các trường hợp thử nghiệm ({count})", + "noTestCasesDefined": "Không có trường hợp thử nghiệm nào được xác định", + "runEvalHint": "Nhấp vào \"Chạy đánh giá\" để thực thi tất cả các trường hợp đối với điểm cuối LLM của bạn. Mỗi bài kiểm tra sẽ gửi một yêu cầu thực sự thông qua OmniRoute.", + "notifyNoTestCases": "Không có trường hợp thử nghiệm nào được xác định cho bộ phần mềm này", + "notifyAllCasesPassed": "Tất cả {total} trường hợp đã thành công ✅", + "notifySomeCasesFailed": "{passed}/{total} đã đạt, {failed} không thành công", + "notifyEvalRunFailed": "Chạy đánh giá không thành công", + "notifyEvalTitle": "Đánh giá: {name}", + "modelEvals": "Đánh giá mô hình", + "evalsHeroDescription": "Kiểm tra và xác thực các điểm cuối LLM của bạn bằng cách chạy các bộ đánh giá được xác định trước. Mỗi bộ chứa các trường hợp thử nghiệm gửi lời nhắc thực sự thông qua OmniRoute và so sánh phản hồi với tiêu chí dự kiến ​​— giúp bạn phát hiện hồi quy, so sánh mô hình và đảm bảo chất lượng phản hồi giữa các nhà cung cấp.", + "qualityValidation": "Xác nhận chất lượng", + "modelComparison": "So sánh mô hình", + "regressionDetection": "Phát hiện hồi quy", + "latencyBenchmarks": "Điểm chuẩn độ trễ", + "modelLockouts": "Khóa mô hình", + "noLockouts": "Hiện không có mẫu nào bị khóa", + "activeSessions": "Phiên hoạt động", + "noSessions": "Không có phiên hoạt động nào", + "sessionsHint": "Phiên xuất hiện khi yêu cầu chảy qua proxy", + "sessionsTrackedHint": "Được theo dõi thông qua dấu vân tay yêu cầu • Tự động làm mới 5 giây", + "session": "Phiên", + "age": "Tuổi", + "requests": "Yêu cầu", + "connection": "Kết nối", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value} phút", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "Giới hạn của nhà cung cấp", + "noProviders": "Không có nhà cung cấp nào được kết nối", + "connectProvidersForQuota": "Kết nối với nhà cung cấp bằng OAuth để theo dõi giới hạn và mức sử dụng hạn ngạch API của bạn.", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(được lọc từ {count})", + "autoRefresh": "Tự động làm mới", + "refreshAll": "Làm mới tất cả", + "loadingQuotas": "Đang tải...", + "account": "Tài khoản", + "modelQuotas": "Hạn ngạch mẫu", + "lastUsed": "Được sử dụng lần cuối", + "actions": "hành động", + "refreshQuota": "Làm mới hạn ngạch", + "today": "hôm nay", + "tomorrow": "Ngày mai", + "dayTimeFormat": "{day}, {time}", + "inDuration": "trong {duration}", + "notApplicable": "không áp dụng", + "rawPlanWithValue": "Gói thô: {plan}", + "noPlanFromProvider": "Không có kế hoạch từ nhà cung cấp", + "noQuotaData": "Không có dữ liệu hạn ngạch", + "noQuotaDataAvailable": "Không có sẵn dữ liệu hạn ngạch", + "noAccountsForTierFilter": "Không tìm thấy tài khoản nào cho bộ lọc cấp độ", + "tierAll": "Tất cả", + "tierEnterprise": "Doanh nghiệp", + "tierTeam": "đội", + "tierBusiness": "Kinh doanh", + "tierUltra": "siêu", + "tierPro": "chuyên nghiệp", + "tierPlus": "Cộng thêm", + "tierFree": "miễn phí", + "tierUnknown": "Không xác định" + }, + "modals": { + "waitingAuth": "Đang chờ cấp phép", + "verificationUrl": "URL xác minh", + "yourCode": "Mã của bạn", + "remoteAccess": "Truy cập từ xa:", + "connectedSuccess": "Đã kết nối thành công!", + "connectionFailed": "Kết nối không thành công", + "chooseAuthMethod": "Chọn phương thức xác thực của bạn:", + "awsBuilderId": "ID trình tạo AWS", + "awsIamIdentity": "Trung tâm nhận dạng AWS IAM", + "googleAccount": "Tài khoản Google", + "githubAccount": "Tài khoản GitHub", + "importToken": "Nhập mã thông báo", + "pasteToken": "Dán mã thông báo làm mới từ Kiro IDE.", + "awsRegion": "Khu vực AWS", + "autoDetecting": "Tự động phát hiện mã thông báo...", + "readingFromCache": "Đọc từ bộ đệm AWS SSO", + "readingFromCursor": "Đọc từ cơ sở dữ liệu Cursor IDE", + "initializing": "Đang khởi tạo...", + "pricingConfig": "Cấu hình giá", + "loadingPricing": "Đang tải dữ liệu giá...", + "pricingRatesFormat": "Định dạng giá cước", + "noPricingData": "Không có dữ liệu giá cả", + "noModelsFound": "Không tìm thấy mô hình nào" + }, + "loggers": { + "allProviders": "Tất cả nhà cung cấp", + "allModels": "Tất cả các mẫu", + "allAccounts": "Tất cả tài khoản", + "allApiKeys": "Tất cả các khóa API", + "allTypes": "Tất cả các loại", + "allLevels": "Tất cả các cấp độ", + "modelAZ": "Mô hình A-Z", + "modelZA": "Model Z-A", + "loadingLogs": "Đang tải nhật ký...", + "loadingProxyLogs": "Đang tải nhật ký proxy...", + "noLogEntries": "Không tìm thấy mục nhật ký nào", + "noPayloadData": "Không có dữ liệu tải trọng cho mục nhập nhật ký này.", + "proxyEvent": "Sự kiện ủy quyền", + "proxy": "ủy nhiệm", + "level": "Cấp độ", + "directNative": "Trực tiếp (gốc)", + "combo": "kết hợp", + "inputTokens": "Tôi:", + "outputTokens": "Ồ:" + }, + "stats": { + "usageOverview": "Tổng quan về cách sử dụng", + "outputTokens": "Mã thông báo đầu ra", + "totalCost": "Tổng chi phí", + "usageByModel": "Cách sử dụng theo mẫu", + "usageByAccount": "Mức sử dụng theo tài khoản", + "failedToLoad": "Không tải được số liệu thống kê sử dụng.", + "tokenHealth": "Tình trạng mã thông báo", + "totalOAuth": "Tổng OAuth", + "healthy": "khỏe mạnh", + "warning": "Cảnh báo", + "errored": "Đã xảy ra lỗi", + "lastCheck": "Kiểm tra lần cuối", + "noData": "Không có dữ liệu", + "share": "Chia sẻ", + "unableToLoad": "Không thể tải số liệu hệ thống", + "product": "sản phẩm", + "resources": "Tài nguyên", + "company": "Công ty" + }, + "auth": { + "welcome": "Chào mừng", + "signIn": "Đăng nhập", + "enterPassword": "Nhập mật khẩu của bạn để tiếp tục", + "password": "Mật khẩu", + "unifiedProxy": "Proxy API AI hợp nhất", + "unifiedAiApiProxy": "Proxy API AI hợp nhất", + "unifiedAiApiProxyDesc": "Định tuyến các yêu cầu đến nhiều nhà cung cấp AI thông qua một điểm cuối duy nhất. Cân bằng tải, chuyển đổi dự phòng và theo dõi sử dụng được tích hợp sẵn.", + "passwordNotEnabled": "Bảo vệ mật khẩu không được kích hoạt", + "loading": "Đang tải...", + "invalidPassword": "Mật khẩu không hợp lệ", + "errorOccurredRetry": "Đã xảy ra lỗi. Vui lòng thử lại.", + "configureInstance": "Hãy cấu hình phiên bản OmniRoute của bạn", + "runOnboardingWizard": "Chạy trình hướng dẫn tích hợp để thiết lập mật khẩu và kết nối với nhà cung cấp AI đầu tiên của bạn.", + "startOnboarding": "Bắt đầu giới thiệu", + "secureYourInstance": "Bảo mật phiên bản của bạn", + "setPasswordDescription": "Đặt mật khẩu để bảo vệ bảng thông tin và bảo mật các điểm cuối API của bạn khỏi bị truy cập trái phép.", + "configurePassword": "Định cấu hình mật khẩu", + "continue": "Tiếp tục", + "windowWillClose": "Cửa sổ này sẽ tự động đóng lại...", + "closeTabNow": "Bạn có thể đóng tab này ngay bây giờ.", + "copyUrlManual": "Vui lòng sao chép URL từ thanh địa chỉ và dán vào ứng dụng.", + "accessDeniedDescription": "Bạn không có quyền truy cập tài nguyên này. Kiểm tra khóa API của bạn hoặc liên hệ với quản trị viên.", + "goToDashboard": "Đi tới Trang tổng quan", + "featureMultiProviderTitle": "Đa nhà cung cấp", + "featureMultiProviderDesc": "OpenAI, Anthropic, Google, v.v.", + "featureLoadBalancingTitle": "Cân bằng tải", + "featureLoadBalancingDesc": "Phân phối yêu cầu một cách thông minh", + "featureUsageTrackingTitle": "Theo dõi sử dụng", + "featureUsageTrackingDesc": "Theo dõi chi phí và mã thông báo", + "resetPassword": "Đặt lại mật khẩu", + "resetDescription": "Chọn một phương pháp để khôi phục quyền truy cập vào trang tổng quan của bạn", + "stopServer": "Dừng máy chủ OmniRoute", + "processing": "Đang xử lý...", + "pleaseWait": "Vui lòng đợi trong khi chúng tôi hoàn tất việc ủy quyền.", + "authSuccess": "Ủy quyền thành công!", + "copyUrl": "Sao chép URL này", + "accessDenied": "Truy cập bị từ chối", + "methodCliTitle": "Phương pháp 1: Đặt lại CLI", + "methodCliDescription": "Chạy lệnh sau trên máy chủ nơi OmniRoute đang chạy:", + "methodCliHint": "Điều này sẽ nhắc bạn đặt mật khẩu mới. Máy chủ phải được dừng trước tiên.", + "methodManualTitle": "Phương pháp 2: Đặt lại thủ công", + "methodManualDescription": "Xóa mật khẩu khỏi cơ sở dữ liệu và đặt mật khẩu mới khi khởi động:", + "setPasswordInYour": "Đặt mật khẩu mới trong", + "fileLabelSuffix": "tập tin:", + "newPasswordPlaceholder": "your_new_password", + "deleteSettingsFile": "Xóa", + "orRemovePasswordHashField": "hoặc xóa trường mật khẩuHash", + "restartServerWithNewPassword": "Khởi động lại máy chủ - nó sẽ sử dụng mật khẩu mới", + "backToLogin": "Quay lại đăng nhập", + "forgotPassword": "Quên mật khẩu?" + }, + "landing": { + "brandName": "OmniRoute", + "navigateHome": "Điều hướng về nhà", + "toggleMenu": "Chuyển đổi menu", + "featuresLink": "Tính năng", + "docsLink": "Tài liệu", + "github": "GitHub", + "versionLive": "v1.0 hiện đang hoạt động", + "oneEndpoint": "Một điểm cuối cho", + "allProviders": "Tất cả các nhà cung cấp AI", + "heroDescription": "Proxy điểm cuối AI với bảng điều khiển web - Cổng JavaScript của CLIProxyAPI. Hoạt động liền mạch với Claude Code, OpenAI Codex, Cline, RooCode và các công cụ CLI khác.", + "getStarted": "Bắt đầu", + "viewOnGithub": "Xem trên GitHub", + "powerfulFeatures": "Tính năng mạnh mẽ", + "featuresSubtitle": "Mọi thứ bạn cần để quản lý cơ sở hạ tầng AI ở một nơi, được xây dựng theo quy mô.", + "featureUnifiedEndpointTitle": "Điểm cuối hợp nhất", + "featureUnifiedEndpointDesc": "Truy cập tất cả các nhà cung cấp thông qua một URL API tiêu chuẩn duy nhất.", + "featureEasySetupTitle": "Thiết lập dễ dàng", + "featureEasySetupDesc": "Thiết lập và chạy trong vài phút với lệnh npx.", + "featureModelFallbackTitle": "Dự phòng mô hình", + "featureModelFallbackDesc": "Tự động chuyển đổi nhà cung cấp khi có lỗi hoặc độ trễ cao.", + "featureUsageTrackingTitle": "Theo dõi sử dụng", + "featureUsageTrackingDesc": "Phân tích chi tiết và giám sát chi phí trên tất cả các mô hình.", + "featureOAuthApiKeysTitle": "Khóa OAuth & API", + "featureOAuthApiKeysDesc": "Quản lý an toàn thông tin xác thực trong một kho tiền.", + "featureCloudSyncTitle": "Đồng bộ đám mây", + "featureCloudSyncDesc": "Đồng bộ hóa cấu hình của bạn trên các thiết bị ngay lập tức.", + "featureCliSupportTitle": "Hỗ trợ CLI", + "featureCliSupportDesc": "Hoạt động với Claude Code, Codex, Cline, Cursor, v.v.", + "featureDashboardTitle": "Trang tổng quan", + "featureDashboardDesc": "Bảng điều khiển trực quan để phân tích lưu lượng truy cập theo thời gian thực.", + "howItWorks": "OmniRoute hoạt động như thế nào", + "howItWorksDescription": "Dữ liệu được truyền liền mạch từ ứng dụng của bạn thông qua lớp định tuyến thông minh của chúng tôi đến nhà cung cấp tốt nhất cho công việc.", + "howItWorksStep1Title": "1. CLI & SDK", + "howItWorksStep1Description": "Yêu cầu của bạn bắt đầu từ các công cụ yêu thích của bạn hoặc SDK hợp nhất của chúng tôi. Chỉ cần thay đổi URL cơ sở.", + "howItWorksStep2Title": "2. Trung tâm OmniRoute", + "howItWorksStep2Description": "Công cụ của chúng tôi phân tích lời nhắc, kiểm tra trạng thái của nhà cung cấp và các lộ trình để có độ trễ hoặc chi phí thấp nhất.", + "howItWorksStep3Title": "3. Nhà cung cấp AI", + "howItWorksStep3Description": "Yêu cầu được OpenAI, Anthropic, Gemini hoặc những người khác thực hiện ngay lập tức.", + "getStartedIn30Seconds": "Bắt đầu sau 30 giây", + "getStartedDescription": "Cài đặt OmniRoute, định cấu hình nhà cung cấp của bạn thông qua bảng điều khiển web và bắt đầu định tuyến các yêu cầu AI.", + "installOmniRoute": "Cài đặt OmniRoute", + "installStepDescription": "Chạy lệnh npx để khởi động máy chủ ngay lập tức", + "openDashboard": "Mở trang tổng quan", + "openDashboardStepDescription": "Định cấu hình nhà cung cấp và khóa API thông qua giao diện web", + "routeRequests": "Yêu cầu lộ trình", + "routeRequestsStepDescription": "Trỏ công cụ CLI của bạn tới {endpoint}", + "terminal": "thiết bị đầu cuối", + "copy": "Sao chép", + "copied": "✓ Sao chép", + "startingOmniRoute": "Đang khởi động OmniRoute...", + "serverRunningOnLabel": "Máy chủ đang chạy", + "dashboardLabel": "Trang tổng quan", + "readyToRoute": "Sẵn sàng lên đường! ✓", + "configureProvidersNote": "📝 Định cấu hình nhà cung cấp trong bảng điều khiển hoặc sử dụng biến môi trường", + "dataLocation": "Vị trí dữ liệu:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " Windows:", + "product": "sản phẩm", + "dashboardLink": "Trang tổng quan", + "changelog": "Nhật ký thay đổi", + "resources": "Tài nguyên", + "documentation": "Tài liệu", + "npm": "NPM", + "legal": "pháp lý", + "mitLicense": "Giấy phép MIT", + "footerTagline": "Điểm cuối thống nhất để tạo AI. Kết nối, định tuyến và quản lý các nhà cung cấp AI của bạn một cách dễ dàng.", + "copyright": "© {year} OmniRoute. Mọi quyền được bảo lưu.", + "flowToolClaudeCode": "Mã Claude", + "flowToolOpenAICodex": "Codex OpenAI", + "flowToolCline": "Cline", + "flowToolCursor": "Con trỏ", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "nhân loại", + "flowProviderGemini": "Song Tử", + "flowProviderGithubCopilot": "Phi công phụ GitHub", + "interactiveDiagram": "Sơ đồ tương tác hiển thị trên màn hình", + "ctaTitle": "Sẵn sàng đơn giản hóa cơ sở hạ tầng AI của bạn?", + "ctaDescription": "Tham gia cùng các nhà phát triển đang hợp lý hóa việc tích hợp AI của họ với OmniRoute. Nguồn mở và miễn phí để bắt đầu.", + "startFree": "Bắt đầu miễn phí", + "readDocumentation": "Đọc tài liệu" + }, + "docs": { + "title": "Tài liệu", + "quickStart": "Bắt đầu nhanh", + "features": "Tính năng", + "supportedProviders": "Nhà cung cấp được hỗ trợ", + "supportedProvidersToc": "Nhà cung cấp", + "commonUseCases": "Các trường hợp sử dụng phổ biến", + "clientCompatibility": "Khả năng tương thích của khách hàng", + "apiReference": "Tham chiếu API", + "method": "phương pháp", + "path": "Đường dẫn", + "notes": "Ghi chú", + "modelPrefixes": "Tiền tố mẫu", + "prefix": "Tiền tố", + "troubleshooting": "Khắc phục sự cố", + "supportsChat": "Hỗ trợ cả điểm cuối trò chuyện và phản hồi.", + "oauthAutoRefresh": "Kết nối OAuth với tính năng làm mới mã thông báo tự động.", + "fullStreaming": "Hỗ trợ phát trực tuyến đầy đủ cho tất cả các kiểu máy.", + "docsLabel": "Tài liệu", + "docsHeroDescription": "Cổng AI cho LLM đa nhà cung cấp. Một điểm cuối cho OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor và hơn 20 nhà cung cấp khác.", + "openDashboard": "Mở trang tổng quan", + "endpointPage": "Trang điểm cuối", + "github": "GitHub", + "reportIssue": "Báo cáo vấn đề", + "onThisPage": "Trên trang này", + "documentationVersion": "Tài liệu - v{version}", + "quickStartStep1Title": "1. Cài đặt và chạy", + "quickStartStep1Prefix": "Chạy", + "quickStartStep1Middle": "hoặc sao chép từ GitHub và chạy", + "quickStartStep2Title": "2. Tạo khóa API", + "quickStartStep2Text": "Đi tới Điểm cuối -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.", + "quickStartStep3Title": "3. Kết nối nhà cung cấp", + "quickStartStep3Text": "Thêm tài khoản nhà cung cấp thông qua thông tin đăng nhập OAuth, khóa API hoặc tự động kết nối bậc miễn phí.", + "quickStartStep4Title": "4. Đặt URL cơ sở khách hàng", + "quickStartStep4Prefix": "Trỏ ứng dụng khách IDE hoặc API của bạn tới", + "quickStartStep4Suffix": "Sử dụng tiền tố nhà cung cấp, ví dụ", + "featureRoutingTitle": "Định tuyến nhiều nhà cung cấp", + "featureRoutingText": "Định tuyến yêu cầu đến hơn 30 nhà cung cấp AI thông qua một điểm cuối tương thích với OpenAI. Hỗ trợ API trò chuyện, phản hồi, âm thanh và hình ảnh.", + "featureCombosTitle": "Combo và cân bằng", + "featureCombosText": "Tạo các tổ hợp mô hình với chuỗi dự phòng và chiến lược cân bằng: luân phiên, ưu tiên, ngẫu nhiên, ít sử dụng nhất và tối ưu hóa chi phí.", + "featureUsageTitle": "Theo dõi việc sử dụng và chi phí", + "featureUsageText": "Đếm mã thông báo theo thời gian thực, tính toán chi phí cho mỗi nhà cung cấp/mô hình và phân tích mức sử dụng chi tiết theo khóa và tài khoản API.", + "featureAnalyticsTitle": "Trang tổng quan phân tích", + "featureAnalyticsText": "Phân tích trực quan với biểu đồ về yêu cầu, mã thông báo, lỗi, độ trễ, chi phí và mức độ phổ biến của mô hình theo thời gian.", + "featureHealthTitle": "Theo dõi sức khỏe", + "featureHealthText": "Kiểm tra tình trạng trực tiếp, trạng thái nhà cung cấp, trạng thái ngắt mạch và phát hiện giới hạn tốc độ tự động với thời gian chờ theo cấp số nhân.", + "featureCliTitle": "Công cụ CLI", + "featureCliText": "Quản lý cấu hình IDE, xuất/nhập bản sao lưu, khám phá cấu hình codex và định cấu hình cài đặt từ bảng điều khiển.", + "featureSecurityTitle": "Bảo mật và chính sách", + "featureSecurityText": "Xác thực khóa API, lọc IP, bảo vệ tiêm nhắc nhở, chính sách miền, quản lý phiên và ghi nhật ký kiểm tra.", + "featureCloudSyncTitle": "Đồng bộ đám mây", + "featureCloudSyncText": "Đồng bộ hóa cấu hình của bạn với Cloudflare Workers để truy cập từ xa bằng thông tin xác thực được mã hóa và chuyển đổi dự phòng tự động.", + "providersAcrossConnectionTypes": "{count} nhà cung cấp trên ba loại kết nối.", + "manageProviders": "Quản lý nhà cung cấp", + "providersCount": "{count} nhà cung cấp", + "providerTypeFree": "Bậc miễn phí", + "providerTypeOAuth": "OAuth", + "providerTypeApiKey": "Khóa API", + "useCaseSingleEndpointTitle": "Điểm cuối duy nhất cho nhiều nhà cung cấp", + "useCaseSingleEndpointText": "Trỏ máy khách đến một URL cơ sở và định tuyến theo tiền tố mô hình (ví dụ: gh/, cc/, kr/, openai/).", + "useCaseFallbackTitle": "Dự phòng và chuyển đổi mô hình bằng combo", + "useCaseFallbackText": "Tạo các mô hình kết hợp trong Bảng điều khiển và giữ cấu hình máy khách ổn định trong khi các nhà cung cấp luân chuyển nội bộ.", + "useCaseUsageVisibilityTitle": "Khả năng hiển thị cách sử dụng, chi phí và gỡ lỗi", + "useCaseUsageVisibilityText": "Theo dõi mã thông báo và chi phí theo nhà cung cấp, tài khoản và khóa API trong tab Sử dụng và Phân tích.", + "clientCherryStudioTitle": "Xưởng Anh Đào", + "baseUrlLabel": "URL cơ sở", + "chatEndpointLabel": "Điểm cuối trò chuyện", + "modelRecommendationLabel": "Đề xuất mô hình: tiền tố rõ ràng", + "clientCodexTitle": "Mô hình phi công phụ Codex / GitHub", + "clientCodexBullet1": "Sử dụng ID mẫu với", + "clientCodexBullet2": "Các mô hình dòng Codex tự động định tuyến tới", + "clientCodexBullet3": "Các mô hình không phải Codex vẫn tiếp tục", + "clientCursorTitle": "IDE con trỏ", + "clientCursorBullet1": "sử dụng", + "clientCursorBullet1Suffix": "tiền tố cho các mô hình Con trỏ.", + "clientCursorBullet2": "Kết nối OAuth - đăng nhập từ trang Nhà cung cấp.", + "clientClaudeTitle": "Mật mã Claude/Phản trọng lực", + "clientClaudeBullet1Prefix": "sử dụng", + "clientClaudeBullet1Middle": "(Claude) hoặc", + "clientClaudeBullet1Suffix": "(Phản trọng lực) tiền tố.", + "endpointChatNote": "Điểm cuối trò chuyện tương thích với OpenAI (mặc định).", + "endpointResponsesNote": "Điểm cuối API phản hồi (Codex, o-series).", + "endpointModelsNote": "Danh mục mô hình cho tất cả các nhà cung cấp được kết nối.", + "endpointAudioNote": "Phiên âm âm thanh (Deepgram, AssemblyAI).", + "endpointImagesNote": "Tạo hình ảnh (NanoBanana).", + "endpointRewriteChatNote": "Viết lại trình trợ giúp cho khách hàng không có /v1.", + "endpointRewriteResponsesNote": "Viết lại trình trợ giúp cho Phản hồi không có /v1.", + "endpointRewriteModelsNote": "Viết lại trình trợ giúp để khám phá mô hình mà không cần /v1.", + "modelPrefixesDescriptionStart": "Sử dụng tiền tố nhà cung cấp trước tên mẫu máy để định tuyến đến một nhà cung cấp cụ thể. Ví dụ:", + "modelPrefixesDescriptionEnd": "định tuyến đến GitHub Copilot.", + "provider": "nhà cung cấp", + "type": "loại", + "troubleshootingModelRouting": "Nếu máy khách không định tuyến được mô hình, hãy sử dụng nhà cung cấp/mô hình rõ ràng (ví dụ: gh/gpt-5.1-codex).", + "troubleshootingAmbiguousModels": "Nếu bạn nhận được lỗi mô hình không rõ ràng, hãy chọn tiền tố nhà cung cấp thay vì ID mô hình trần.", + "troubleshootingCodexFamily": "Đối với các mô hình dòng GitHub Codex, hãy giữ mô hình là gh/; bộ định tuyến chọn/phản hồi tự động.", + "troubleshootingTestConnection": "Sử dụng Trang tổng quan > Nhà cung cấp > Kiểm tra kết nối trước khi thử nghiệm từ IDE hoặc ứng dụng khách bên ngoài.", + "troubleshootingCircuitBreaker": "Nếu nhà cung cấp hiển thị cầu dao đang mở, hãy đợi thời gian hồi chiêu hoặc kiểm tra trang Sức khỏe để biết chi tiết.", + "troubleshootingOAuth": "Đối với nhà cung cấp OAuth, hãy xác thực lại nếu mã thông báo hết hạn. Kiểm tra chỉ báo trạng thái thẻ nhà cung cấp." + }, + "legal": { + "privacyPolicy": "Chính sách bảo mật", + "termsOfService": "Điều khoản dịch vụ", + "providerConfigurations": "Cấu hình nhà cung cấp", + "apiKeys": "Khóa API", + "usageLogs": "Nhật ký sử dụng", + "applicationSettings": "Cài đặt ứng dụng", + "viewExportAnalytics": "Xem và xuất phân tích sử dụng", + "clearHistory": "Xóa lịch sử sử dụng bất cứ lúc nào", + "configureRetention": "Định cấu hình chính sách lưu giữ nhật ký", + "backupRestore": "Sao lưu và khôi phục cơ sở dữ liệu của bạn", + "privacyMetadataTitle": "Chính sách bảo mật | OmniRoute", + "privacyMetadataDescription": "Chính sách quyền riêng tư dành cho bộ định tuyến proxy OmniRoute AI API.", + "termsMetadataTitle": "Điều khoản dịch vụ | OmniRoute", + "termsMetadataDescription": "Điều khoản dịch vụ dành cho bộ định tuyến proxy OmniRoute AI API.", + "backToHome": "Trở về nhà", + "lastUpdated": "Cập nhật lần cuối: {date}", + "policyLastUpdatedDate": "Ngày 13 tháng 2 năm 2026", + "listSeparator": "-", + "questionsVisit": "Câu hỏi? Ghé thăm của chúng tôi", + "githubRepository": "Kho lưu trữ GitHub", + "privacySection1Title": "1. Kiến trúc địa phương đầu tiên", + "privacySection1Text": "OmniRoute được thiết kế như một ứng dụng cục bộ đầu tiên. Tất cả quá trình xử lý và lưu trữ dữ liệu diễn ra hoàn toàn trên máy của bạn. Không có máy chủ tập trung thu thập thông tin của bạn.", + "privacySection2Title": "2. Dữ liệu chúng tôi lưu trữ", + "privacyDataStoredIn": "Dữ liệu sau được lưu trữ cục bộ trong", + "privacyDataProviderConfigurationsDesc": "URL kết nối, loại nhà cung cấp và cài đặt ưu tiên", + "privacyDataApiKeysDesc": "được mã hóa và lưu trữ cục bộ để xác thực với các nhà cung cấp AI", + "privacyDataUsageLogsDesc": "số lượng yêu cầu, mức sử dụng mã thông báo, tên mô hình, dấu thời gian và thời gian phản hồi", + "privacyDataApplicationSettingsDesc": "tùy chọn chủ đề, chiến lược định tuyến và cấu hình kết hợp", + "privacySection3Title": "3. Không đo từ xa", + "privacySection3Text": "OmniRoute không thu thập báo cáo đo từ xa, phân tích hoặc sự cố. Không có dữ liệu nào được gửi cho chúng tôi hoặc bất kỳ bên thứ ba nào. Kiểu sử dụng, lệnh gọi API và cấu hình của bạn vẫn hoàn toàn ở chế độ riêng tư.", + "privacySection4Title": "4. Nhà cung cấp AI bên thứ ba", + "privacySection4Text": "Khi bạn thực hiện lệnh gọi API thông qua OmniRoute, yêu cầu của bạn sẽ được chuyển tiếp đến nhà cung cấp AI mà bạn đã định cấu hình (ví dụ: OpenAI, Anthropic, Google). Các nhà cung cấp này có chính sách bảo mật riêng chi phối cách họ xử lý dữ liệu của bạn. Vui lòng xem lại:", + "privacyOpenAiPolicy": "Chính sách quyền riêng tư của OpenAI", + "privacyAnthropicPolicy": "Chính sách về quyền riêng tư của Anthropic", + "privacyGooglePolicy": "Chính sách bảo mật của Google", + "privacySection5Title": "5. Đồng bộ hóa đám mây (Tùy chọn)", + "privacySection5Text": "Nếu bạn bật tính năng đồng bộ hóa đám mây tùy chọn, cấu hình nhà cung cấp và khóa API có thể được truyền đến điểm cuối đám mây đã định cấu hình. Tính năng này bị tắt theo mặc định và yêu cầu chọn tham gia rõ ràng.", + "privacySection6Title": "6. Ghi nhật ký", + "privacyLoggingIntro": "Nhật ký yêu cầu có thể được cấu hình thông qua cài đặt bảng điều khiển. Bạn có thể:", + "privacySection7Title": "7. Quyền của bạn", + "privacySection7TextStart": "Vì tất cả dữ liệu được lưu trữ cục bộ nên bạn có toàn quyền kiểm soát. Bạn có thể xóa dữ liệu của mình bất kỳ lúc nào bằng cách xóa", + "privacySection7TextEnd": "thư mục hoặc sử dụng tính năng sao lưu và khôi phục cơ sở dữ liệu trong bảng điều khiển.", + "termsSection1Title": "1. Tổng quan", + "termsSection1Text": "OmniRoute là bộ định tuyến proxy AI API cục bộ đầu tiên hoạt động hoàn toàn trên máy của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.", + "termsSection2Title": "2. Trách nhiệm của Người dùng", + "termsResponsibilityApiKeys": "Bạn hoàn toàn chịu trách nhiệm quản lý khóa API và thông tin đăng nhập của riêng mình cho các nhà cung cấp AI bên thứ ba (OpenAI, Anthropic, Google, v.v.).", + "termsResponsibilityCompliance": "Bạn phải tuân thủ các điều khoản dịch vụ của từng nhà cung cấp AI có API mà bạn truy cập thông qua OmniRoute.", + "termsResponsibilitySecurity": "Bạn chịu trách nhiệm về tính bảo mật của cài đặt OmniRoute cục bộ của mình, bao gồm đặt mật khẩu và hạn chế quyền truy cập mạng.", + "termsSection3Title": "3. Nó hoạt động như thế nào", + "termsSection3Text": "OmniRoute hoạt động như một proxy trung gian. Các lệnh gọi API gửi tới OmniRoute sẽ được dịch và chuyển tiếp đến các nhà cung cấp AI đã định cấu hình của bạn. OmniRoute không sửa đổi nội dung yêu cầu hoặc phản hồi của bạn ngoài bản dịch giao thức cần thiết.", + "termsSection4Title": "4. Xử lý dữ liệu", + "termsDataStoredLocally": "Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn trong cơ sở dữ liệu SQLite.", + "termsNoTransmission": "OmniRoute không truyền bất kỳ dữ liệu nào đến các máy chủ bên ngoài trừ khi bạn bật rõ ràng các tính năng đồng bộ hóa trên đám mây.", + "termsDataLocationText": "Nhật ký sử dụng, khóa API và cấu hình được lưu trữ trong", + "termsSection5Title": "5. Tuyên bố từ chối trách nhiệm", + "termsSection5Text": "OmniRoute được cung cấp \"nguyên trạng\" mà không có bất kỳ hình thức bảo hành nào. Chúng tôi không chịu trách nhiệm về bất kỳ chi phí nào phát sinh do sử dụng API, gián đoạn dịch vụ hoặc mất dữ liệu. Luôn duy trì bản sao lưu cấu hình của bạn.", + "termsSection6Title": "6. Nguồn mở", + "termsSection6Text": "OmniRoute là phần mềm mã nguồn mở. Bạn có thể tự do kiểm tra, sửa đổi và phân phối nó theo các điều khoản trong giấy phép." + } +} diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json new file mode 100644 index 0000000000..3d483c53fc --- /dev/null +++ b/src/i18n/messages/zh-CN.json @@ -0,0 +1,2040 @@ +{ + "common": { + "save": "保存", + "cancel": "取消", + "delete": "删除", + "loading": "正在加载...", + "error": "发生错误", + "success": "成功", + "confirm": "你确定吗?", + "refresh": "刷新", + "close": "关闭", + "add": "添加", + "edit": "编辑", + "search": "搜索", + "back": "返回", + "next": "下一页", + "submit": "提交", + "reset": "重置", + "copy": "复制", + "copied": "复制了!", + "enabled": "启用", + "disabled": "残疾人", + "active": "活跃", + "inactive": "不活跃", + "noData": "无可用数据", + "configure": "配置", + "manage": "管理", + "name": "名称", + "actions": "行动", + "status": "状态", + "type": "类型", + "model": "型号", + "models": "型号", + "provider": "提供者", + "account": "账户", + "time": "时间", + "details": "详情", + "created": "已创建", + "lastUsed": "最后使用", + "loadMore": "加载更多", + "noResults": "没有找到结果", + "reloadPage": "重新加载页面", + "connected": "已连接", + "disconnected": "已断开连接", + "notConfigured": "未配置", + "testConnection": "测试连接", + "enable": "启用", + "disable": "禁用", + "columns": "专栏", + "newest": "最新", + "oldest": "最古老的", + "all": "全部", + "none": "无", + "yes": "是的", + "no": "否", + "warning": "警告", + "note": "注意事项", + "free": "免费", + "skipToContent": "跳至内容" + }, + "sidebar": { + "home": "首页", + "dashboard": "仪表板", + "providers": "供应商", + "combos": "组合", + "usage": "用途", + "analytics": "分析", + "costs": "成本", + "health": "健康", + "limits": "限制和配额", + "cliTools": "CLI工具", + "settings": "设置", + "translator": "翻译者", + "docs": "文档", + "issues": "问题", + "endpoint": "端点", + "apiManager": "API管理器", + "logs": "日志", + "auditLog": "审核日志", + "shutdown": "关机", + "restart": "重新启动", + "shutdownConfirm": "关闭 OmniRoute?", + "restartConfirm": "重新启动 OmniRoute?", + "version": "v{version}", + "debug": "调试", + "system": "系统", + "help": "帮助", + "serverDisconnected": "服务器已断开连接", + "serverDisconnectedMsg": "代理服务器已停止或正在重新启动。", + "expandSidebar": "展开侧边栏", + "collapseSidebar": "折叠侧边栏" + }, + "header": { + "logout": "退出", + "language": "语言", + "providers": "供应商", + "providerDescription": "管理您的 AI 提供商连接", + "combos": "组合", + "comboDescription": "具有后备功能的模型组合", + "usage": "使用与分析", + "usageDescription": "监控您的 API 使用情况、令牌消耗和请求日志", + "analytics": "分析", + "analyticsDescription": "图表、趋势和评估见解", + "cliTools": "CLI工具", + "cliToolsDescription": "配置 CLI 工具", + "home": "首页", + "homeDescription": "欢迎来到 OmniRoute", + "endpoint": "端点", + "endpointDescription": "API端点配置", + "settings": "设置", + "settingsDescription": "管理您的偏好", + "openaiCompatible": "兼容 OpenAI", + "anthropicCompatible": "人择兼容" + }, + "home": { + "quickStart": "快速入门", + "quickStartDesc": "只需 4 个步骤即可启动并运行。连接提供商、路线模型、监控一切。", + "fullDocs": "完整文档", + "step1Title": "1. 创建API密钥", + "step1Desc": "转至 Endpoint -> 注册密钥。每个环境生成一个密钥。", + "step2Title": "2. 连接提供商", + "step2Desc": "在 Providers 中添加帐户。支持 OAuth、API 密钥和免费套餐。", + "step3Title": "3. 指出你的客户", + "step3Desc": "在 IDE 或 API 客户端中将基本 URL 设置为 {url}。", + "step4Title": "4. 监控和优化", + "step4Desc": "在请求日志Analytics中跟踪令牌、成本和错误。", + "providersOverview": "供应商概览", + "configuredOf": "{configured} 配置了 {total} 可用提供程序", + "noModelsAvailable": "该提供商没有可用的型号。", + "configureFirst": "首先在 {providers} 中配置连接", + "configureProvider": "配置提供商", + "modelAvailable": "{count} 模型可用", + "modelsAvailable": "{count} 可用型号", + "connectionsActive": "{count} 连接处于活动状态", + "connectionsActivePlural": "{count} 连接处于活动状态", + "copyModelName": "复制型号名称", + "documentation": "文档", + "healthMonitor": "健康监测", + "reportIssue": "报告问题", + "activeError": "{active} 有效 · {errors} 错误", + "oauthLabel": "开放认证", + "apiKeyLabel": "API密钥", + "requestsShort": "{count} 要求", + "providerModelsTitle": "{provider} - 模型", + "copiedModel": "已复制:{model}", + "aliasLabel": "别名" + }, + "analytics": { + "title": "分析", + "overviewDescription": "监控所有提供商和模型的 API 使用模式、令牌消耗、成本和活动趋势。", + "evalsDescription": "运行评估套件来测试和验证您的 LLM 端点。比较模型质量、检测回归和基准延迟。", + "overview": "概述", + "evals": "埃瓦尔斯" + }, + "apiManager": { + "title": "API 密钥", + "createKey": "创建 API 密钥", + "key": "钥匙", + "revokeKey": "撤销密钥", + "revokeConfirm": "您确定要撤销此 API 密钥吗?", + "noKeys": "还没有 API 密钥", + "noKeysDesc": "创建您的第一个 API 密钥以验证对端点的请求", + "keyLabel": "钥匙标签", + "permissions": "权限", + "expiresAt": "过期", + "never": "从来没有", + "revoke": "撤销", + "showKey": "显示密钥", + "hideKey": "隐藏键", + "copyKey": "复制 API 密钥", + "allModels": "所有型号", + "selectedModels": "选定型号", + "readOnly": "只读", + "fullAccess": "完全访问权限", + "keyManagement": "API密钥管理", + "keyManagementDesc": "创建和管理 API 密钥以验证对端点的请求", + "totalKeys": "总按键数", + "restricted": "受限", + "totalRequests": "请求总数", + "modelsAvailable": "可用型号", + "registeredKeys": "注册密钥", + "keysRegistered": "{count} 已注册密钥", + "keyRegistered": "{count} 密钥已注册", + "keysSecurityNote": "每个密钥都隔离使用情况跟踪,并且可以独立撤销。为了安全起见,密钥在创建后会被屏蔽。", + "createFirstKey": "创建你的第一把钥匙", + "name": "名称", + "usage": "用途", + "created": "已创建", + "actions": "行动", + "reqs": "要求", + "neverUsed": "从未使用过", + "deleteConfirm": "删除此 API 密钥吗?", + "usageTips": "使用技巧", + "tipAuth": "使用授权标头中的 API 密钥作为 Bearer YOUR_KEY", + "tipSecure": "密钥在创建过程中仅显示一次 - 安全地存储它们", + "tipSeparate": "为不同的客户端或环境创建单独的密钥", + "tipRestrict": "将密钥限制为特定型号,以实现更好的安全性和成本控制", + "keyName": "按键名称", + "keyNamePlaceholder": "例如,生产密钥、开发密钥", + "keyNameDesc": "选择一个描述性名称来标识此密钥的用途", + "keyCreated": "API 密钥已创建", + "keyCreatedSuccess": "密钥创建成功!", + "keyCreatedNote": "立即复制并存储此密钥 - 它不会再次显示。", + "done": "完成", + "savePermissions": "保存权限", + "allowAll": "允许全部", + "restrict": "限制", + "allowAllInfo": "该键可以访问所有可用的模型。", + "restrictInfo": "此密钥可以访问 {total} 模型中的 {selected}。", + "selected": "已选择 {count}", + "all": "全部", + "clear": "清除", + "searchModels": "按名称或提供商搜索模型...", + "noModelsFound": "没有找到型号", + "keyNameRequired": "密钥名称为必填项", + "keyNameTooLong": "键名不得超过 {max} 个字符", + "keyNameInvalid": "键名只能包含字母、数字、空格、连字符和下划线", + "invalidKeyName": "键名无效", + "failedCreateKey": "创建密钥失败", + "failedCreateKeyRetry": "创建密钥失败。请再试一次。", + "invalidKeyId": "密钥 ID 无效", + "failedDeleteKey": "删除密钥失败", + "failedDeleteKeyRetry": "删除密钥失败。请再试一次。", + "invalidModelsSelection": "型号选择无效", + "cannotSelectMoreThanModels": "无法选择超过 {max} 个型号", + "failedUpdatePermissions": "更新权限失败", + "failedUpdatePermissionsRetry": "更新权限失败。请再试一次。", + "unknownProvider": "未知", + "copyMaskedKey": "复制屏蔽密钥", + "modelsCount": "{count, plural, one {# model} other {# models}}", + "lastUsedOn": "最后:{date}", + "editPermissions": "编辑权限", + "deleteKey": "删除键", + "model": "{count} 模型", + "models": "{count} 模型", + "permissionsTitle": "权限:{name}", + "allowAllDesc": "该键可以访问所有可用的模型。", + "restrictDesc": "此密钥可以访问 {totalModels} 模型中的 {selectedCount}。", + "selectedCount": "已选择 {count}" + }, + "auditLog": { + "title": "审核日志", + "searchPlaceholder": "搜索操作...", + "action": "行动", + "actor": "演员", + "target": "目标", + "ipAddress": "IP地址", + "timestamp": "时间戳", + "noEntries": "未找到审核条目", + "filterByAction": "按操作过滤...", + "filterByActor": "按演员筛选...", + "filterEntriesAria": "过滤审核日志条目", + "filterByActionTypeAria": "按操作类型过滤", + "filterByActorAria": "按演员筛选", + "refreshAuditLogAria": "刷新审核日志", + "tableAria": "审核日志条目", + "failedFetchAuditLog": "无法获取审核日志", + "notAvailable": "—", + "description": "行政行为和安全事件", + "showing": "显示 {count} 条目(偏移量 {offset})", + "previous": "上一页" + }, + "cliTools": { + "title": "CLI工具", + "noActiveProviders": "没有活跃的提供商", + "noActiveProvidersDesc": "请先添加并连接提供商以配置 CLI 工具。", + "mapModels": "地图模型", + "testConnection": "测试连接", + "connectionStatus": "连接状态", + "configureEndpoint": "配置端点", + "instructions": "使用说明", + "modelMapping": "模型映射", + "baseUrl": "基本网址", + "apiKey": "API密钥", + "configured": "已配置", + "notConfigured": "未配置", + "notInstalled": "未安装", + "custom": "定制", + "unknown": "未知", + "lastSavedAt": "最后保存:{date}", + "never": "从来没有", + "justNow": "刚才", + "minutesAgoShort": "{count} 分钟前", + "hoursAgoShort": "{count} 小时前", + "daysAgoShort": "{count} 天前", + "monthsAgoShort": "{count} 个月前", + "yearsAgoShort": "{count}年前", + "runtimeCheckFailed": "运行时检查失败", + "yourApiKeyPlaceholder": "你的 api 密钥", + "modelPlaceholder": "提供商/型号 ID", + "configurationSaved": "配置保存成功。", + "failedToSave": "保存配置失败。", + "noApiKeysCreateOne": "无 API 密钥 - 在“密钥”页面创建一个", + "defaultOmnirouteKey": "sk_omniroute(默认)", + "selectModel": "选择型号", + "selectModelForAlias": "选择 {alias} 的模型", + "selectModelForTool": "选择 {tool} 的模型", + "select": "选择", + "clear": "清除", + "comingSoon": "即将推出", + "checkingRuntime": "正在检查运行时状态...", + "guideOnlyIntegration": "仅指南集成(无需本地运行时)", + "cliRuntimeDetected": "CLI 运行时已检测到并准备就绪", + "cliFoundNotRunnable": "CLI 已找到但无法运行{reason}", + "cliRuntimeNotDetected": "未检测到 CLI 运行时", + "binary": "二进制", + "configPath": "配置路径", + "configPathShort": "配置", + "failedCheckRuntimeStatus": "无法检查运行时状态。", + "copy": "复制", + "copied": "已复制", + "copyConfig": "复制配置", + "saveConfig": "保存配置", + "selectionSaved": "选择已保存", + "guide": "指南", + "detected": "检测到", + "notReady": "还没准备好", + "active": "活跃", + "inactive": "不活跃", + "startMitm": "启动中间人", + "stopMitm": "停止中间人", + "mitmStarted": "MITM启动成功!", + "mitmStopped": "MITM 成功停止!", + "failedStart": "无法启动 MITM", + "failedStop": "未能阻止 MITM", + "saveMappings": "保存映射", + "mappingsSaved": "映射已保存!", + "failedSaveMappings": "保存映射失败", + "howItWorks": "工作原理:", + "antigravityHowWorksDesc": "Antigravity 向 Google 端点发送请求。 MITM 拦截并将它们重定向到 OmniRoute。", + "antigravityStep1": "1. 启动 MITM 通过 OmniRoute 路由请求。", + "antigravityStep2Prefix": "2. 添加", + "antigravityStep2Suffix": "添加到您的主机文件中作为 127.0.0.1。", + "antigravityStep3": "3. 开放Antigravity,请求将被代理。", + "sudoPasswordRequiredTitle": "需要 sudo 密码", + "sudoPasswordHint": "修改主机文件和系统代理设置需要管理员密码。", + "enterSudoPassword": "输入sudo密码", + "sudoPasswordRequiredError": "需要 sudo 密码。", + "cancel": "取消", + "confirm": "确认", + "settingsApplied": "设置应用成功!", + "failedApplySettings": "无法应用设置", + "settingsReset": "设置重置成功!", + "failedResetSettings": "重置设置失败", + "backupRestored": "备份已恢复!", + "failedRestore": "恢复失败", + "checkingCli": "正在检查 {tool} CLI...", + "cliNotRunnable": "{tool} CLI 已安装但无法运行", + "cliNotInstalled": "{tool} CLI 未安装", + "cliNotDetected": "未检测到 {tool} CLI", + "cliDetectedReady": "{tool} CLI 已检测到并准备就绪", + "cliFoundFailedHealthcheck": "找到 {tool} CLI,但运行时运行状况检查失败{reason}。", + "installCliPrompt": "请安装 {tool} CLI 以使用此功能。", + "installCodexPrompt": "请安装 Codex CLI 以使用自动应用功能。", + "hide": "隐藏", + "howToInstall": "如何安装", + "installationGuide": "安装指南", + "platforms": "macOS / Linux / Windows:", + "afterInstallationRun": "安装后,运行", + "toVerify": "来验证。", + "current": "当前", + "baseUrlPlaceholder": "https://.../v1", + "resetToDefault": "重置为默认值", + "providerModelPlaceholder": "提供商/型号 ID", + "apply": "申请", + "reset": "重置", + "manualConfig": "手动配置", + "backups": "备份", + "configBackups": "配置备份", + "noBackupsYet": "还没有备份。每次应用或重置之前都会自动创建备份。", + "restore": "恢复", + "backupRestoredReloading": "备份已恢复!正在重新加载状态...", + "failedRestoreBackup": "恢复备份失败", + "applied": "已应用!", + "failed": "失败", + "resetDone": "重置!", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute 配置为 OpenAI 兼容提供商", + "provider": "提供者", + "model": "型号", + "providers": "供应商", + "auth": "授权", + "noApiKeysAvailable": "没有可用的 API 密钥", + "usingDefaultOmniroute": "使用默认值:sk_omniroute", + "updateConfig": "更新配置", + "applyConfig": "应用配置", + "noBackupsAvailable": "没有可用的备份。", + "profileSaved": "个人资料“{name}”已保存!", + "failedSaveProfile": "保存个人资料失败", + "profileActivated": "个人资料已激活!", + "failedActivateProfile": "无法激活个人资料", + "profiles": "型材", + "savedProfiles": "保存的配置文件", + "noProfilesYet": "尚未保存配置文件。将当前配置保存为下面的配置文件。", + "activate": "激活", + "deleteProfile": "删除个人资料", + "profileNamePlaceholder": "个人资料名称(例如个人帐户)", + "saveCurrent": "保存当前", + "codexAuthNotePrefix": "法典用途", + "codexAuthNoteMiddle": "与", + "codexAuthNoteSuffix": "单击“应用”进行自动配置。", + "claudeManualConfiguration": "Claude CLI - 手动配置", + "codexManualConfiguration": "Codex CLI - 手动配置", + "droidManualConfiguration": "Factory Droid - 手动配置", + "openClawManualConfiguration": "开爪 - 手动配置", + "clineManualConfiguration": "Cline手动配置", + "kiloManualConfiguration": "千码手动配置", + "toolDescriptions": { + "antigravity": "带有 MITM 的 Google 反重力 IDE", + "claude": "人类克劳德代码 CLI", + "codex": "OpenAI Codex CLI", + "droid": "工厂机器人AI助手", + "openclaw": "开爪AI助手", + "cline": "Cline AI 编码助手 CLI", + "kilo": "Kilo Code AI 助手 CLI", + "cursor": "光标AI代码编辑器", + "continue": "继续AI助手" + }, + "guides": { + "cursor": { + "notes": { + "0": "需要 Cursor Pro 帐户才能使用此功能。", + "1": "Cursor 通过自己的服务器路由请求,因此不支持本地端点。请在“设置”中启用云端点。" + }, + "steps": { + "1": { + "title": "打开设置", + "desc": "转到设置 -> 模型" + }, + "2": { + "title": "启用 OpenAI API", + "desc": "启用“OpenAI API 密钥”选项" + }, + "3": { + "title": "基本网址" + }, + "4": { + "title": "API密钥" + }, + "5": { + "title": "添加自定义模型", + "desc": "点击“查看所有模型”->“添加自定义模型”" + }, + "6": { + "title": "选择型号" + } + } + }, + "continue": { + "steps": { + "1": { + "title": "打开配置", + "desc": "打开继续配置文件" + }, + "2": { + "title": "API密钥" + }, + "3": { + "title": "选择型号" + }, + "4": { + "title": "添加模型配置", + "desc": "将以下配置添加到您的模型数组中:" + } + } + } + } + }, + "combos": { + "title": "组合", + "description": "创建具有加权路由和后备支持的模型组合", + "createCombo": "创建组合", + "editCombo": "编辑组合", + "deleteCombo": "删除组合", + "noModels": "没有型号", + "noModelsYet": "尚未添加型号", + "addModel": "添加型号", + "addModelToCombo": "将模型添加到组合", + "routingStrategy": "路由策略", + "maxRetries": "最大重试次数", + "timeout": "超时(毫秒)", + "healthcheck": "健康检查", + "priority": "优先级", + "fallback": "回退", + "roundRobin": "循环赛", + "random": "随机", + "leastLatency": "最低延迟", + "comboName": "组合名称", + "comboNamePlaceholder": "我的组合", + "deleteConfirm": "删除这个组合?", + "noCombosYet": "还没有组合", + "comboCreated": "组合创建成功", + "comboUpdated": "组合更新成功", + "comboDeleted": "组合已删除", + "failedCreate": "创建组合失败", + "failedUpdate": "更新组合失败", + "errorCreating": "创建组合时出错", + "errorUpdating": "更新组合时出错", + "errorDeleting": "删除组合时出错", + "testFailed": "测试请求失败", + "failedToggle": "无法切换组合", + "testResults": "测试结果 — {name}", + "resolvedBy": "解决方法:", + "more": "+{count} 更多", + "reqs": "要求", + "success": "成功", + "proxyConfigured": "代理已配置", + "copyComboName": "复制组合名称", + "enableCombo": "启用组合", + "disableCombo": "禁用组合", + "testCombo": "测试组合", + "duplicate": "重复", + "proxyConfig": "代理配置", + "nameRequired": "姓名为必填项", + "nameInvalid": "仅限字母、数字、-、_、/ 和 。允许", + "nameHint": "字母、数字、-、_、/ 和 。允许", + "priorityDesc": "顺序回退:首先尝试模型 1,然后尝试模型 2,依此类推。", + "weightedDesc": "按权重百分比分配流量并进行回退", + "roundRobinDesc": "循环分发:每个请求轮流转到下一个模型", + "randomDesc": "统一随机选择,然后回退到剩余模型", + "leastUsedDesc": "选择请求最少的模型,随着时间的推移平衡负载", + "costOptimizedDesc": "首先根据定价路由至最便宜的型号", + "models": "型号", + "autoBalance": "自动平衡", + "advancedSettings": "高级设置", + "retryDelay": "重试延迟(毫秒)", + "concurrencyPerModel": "并发/模型", + "queueTimeout": "队列超时(毫秒)", + "advancedHint": "留空以使用全局默认值。这些会覆盖每个提供商的设置。", + "moveUp": "向上移动", + "moveDown": "下移", + "removeModel": "删除", + "saving": "正在保存...", + "weighted": "加权", + "leastUsed": "最少使用的", + "costOpt": "成本选择" + }, + "costs": { + "title": "成本", + "budget": "预算", + "totalCost": "总成本", + "breakdown": "成本明细", + "noData": "无成本数据", + "byModel": "按型号", + "byProvider": "按提供商" + }, + "endpoint": { + "title": "API端点", + "available": "可用端点", + "cloudProxy": "云代理", + "disableConfirm": "您确定要禁用云代理吗?", + "baseUrl": "基本网址", + "apiKeyLabel": "API密钥", + "registeredKeys": "注册密钥", + "chatCompletions": "聊天完成", + "responses": "回应", + "listModels": "列出型号", + "usingCloudProxy": "使用云代理", + "usingLocalServer": "使用本地服务器", + "machineId": "机器 ID:{id}...", + "disableCloud": "禁用云", + "enableCloud": "启用云", + "modelsAcrossEndpoints": "跨 {endpoints} 端点的 {models} 模型", + "chatDesc": "与所有提供商的流式和非流式聊天", + "embeddings": "嵌入", + "embeddingsDesc": "用于搜索和 RAG 管道的文本嵌入", + "imageGeneration": "图像生成", + "imageDesc": "根据文本提示生成图像", + "rerank": "重新排序", + "rerankDesc": "按与查询的相关性对文档重新排序", + "audioTranscription": "音频转录", + "audioTranscriptionDesc": "将音频文件转录为文本(Whisper)", + "textToSpeech": "文字转语音", + "textToSpeechDesc": "将文本转换为听起来自然的语音", + "moderations": "节制", + "moderationsDesc": "内容审核和安全分级", + "enableCloudTitle": "启用云代理", + "whatYouGet": "你会得到什么", + "cloudBenefitAccess": "从世界任何地方访问您的 API", + "cloudBenefitShare": "轻松与您的团队共享端点", + "cloudBenefitPorts": "无需开放端口或配置防火墙", + "cloudBenefitEdge": "快速的全球边缘网络", + "cloudSessionNote": "云会将您的身份验证会话保留 1 天。如果不使用,它将被自动删除。", + "cloudUnstableNote": "目前,云在某些情况下使用 Claude Code OAuth 不稳定。", + "cloudConnected": "云代理已连接!", + "connectingToCloud": "正在连接到云...", + "verifyingConnection": "正在验证连接...", + "connecting": "正在连接...", + "verifying": "正在验证...", + "connected": "已连接!", + "disableCloudTitle": "禁用云代理", + "disableWarning": "所有身份验证会话都将从云中删除。", + "syncingData": "正在同步最新数据...", + "disablingCloud": "禁用云...", + "syncing": "正在同步...", + "disabling": "禁用...", + "cloudConnectedVerified": "云代理已连接并已验证!", + "connectedVerificationPending": "已连接 — 待验证", + "connectedVerificationPendingWithError": "已连接 — 验证待处理:{error}", + "cloudDisabledSuccess": "云禁用成功", + "syncedSuccess": "同步成功", + "failedDisable": "禁用云失败", + "failedEnable": "启用云失败", + "cloudRequestTimeout": "云请求超时", + "cloudRequestFailed": "云请求失败", + "cloudWorkerUnreachable": "无法联系云工作人员。确保云服务正在运行(npm run dev in /cloud)。", + "connectionFailed": "连接失败", + "syncFailed": "云数据同步失败", + "providerModelsTitle": "{provider} — 模型", + "noModelsForProvider": "该提供商没有可用的型号。", + "chat": "聊天", + "embedding": "嵌入", + "image": "图片", + "custom": "定制", + "modelsCount": "{count, plural, one {# model} other {# models}}" + }, + "health": { + "title": "系统健康状况", + "description": "实时监控您的 OmniRoute 实例", + "healthy": "健康", + "degraded": "降级", + "down": "向下", + "uptime": "正常运行时间", + "memory": "内存", + "memoryRss": "记忆 (RSS)", + "heap": "堆", + "cpu": "中央处理器", + "database": "数据库", + "version": "版本", + "lastCheck": "最后检查", + "providerHealth": "提供者健康", + "systemMetrics": "系统指标", + "tokenHealth": "令牌健康", + "refreshAll": "全部刷新", + "checkNow": "立即查看", + "loadingHealth": "正在加载健康数据...", + "failedToLoad": "无法加载健康数据:{error}", + "retry": "重试", + "allOperational": "所有系统均可运行", + "issuesDetected": "检测到系统问题", + "updatedAt": "更新了 {time}", + "latency": "延迟", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "millisecondsShort": "{value}ms", + "notAvailable": "—", + "totalRequests": "请求总数", + "noDataYet": "还没有数据", + "promptCache": "提示缓存", + "entries": "参赛作品", + "hitRate": "命中率", + "hitsMisses": "命中/未命中", + "signatureCache": "签名缓存", + "signatureDefaults": "默认值", + "signatureTool": "工具", + "signatureFamily": "家庭", + "signatureSession": "会议", + "recovering": "正在恢复中", + "noCBData": "没有可用的断路器数据。先提出一些要求。", + "providerHealthStatusAria": "提供者健康状况", + "issuesLabel": "检测到的问题", + "operational": "运营中", + "providers": "供应商", + "healthyCount": "{count} 健康", + "nodeVersion": "节点 {version}", + "failures": "{count} 失败", + "failuresPlural": "{count} 失败", + "lastFailure": "最后", + "rateLimitStatus": "速率限制状态", + "activeLimiters": "{count} 主动限制器", + "activeLimitersPlural": "{count} 主动限制器", + "queued": "排队", + "queuedCount": "{count} 已排队", + "running": "跑步", + "runningCount": "{count} 正在运行", + "ok": "好的", + "activeLockouts": "主动锁定", + "resetConfirm": "将所有断路器重置为正常状态?这将清除所有故障计数并将所有提供程序恢复到运行状态。", + "resetAllTitle": "将所有断路器重置为正常状态", + "resetting": "正在重置...", + "resetAll": "全部重置", + "until": "直到 {time}" + }, + "limits": { + "title": "限制和配额", + "rateLimit": "速率限制", + "remaining": "剩余", + "requestsPerMinute": "请求/分钟", + "tokensPerMinute": "令牌/分钟", + "dailyLimit": "每日限额" + }, + "logs": { + "title": "日志", + "requestLogs": "请求日志", + "proxyLogs": "代理日志", + "auditLog": "审核日志", + "console": "控制台", + "auditLogDesc": "行政行为和安全事件", + "loading": "正在加载...", + "refresh": "刷新", + "filterByAction": "按操作过滤...", + "filterByActor": "按演员筛选...", + "filterEntriesAria": "过滤审核日志条目", + "filterByActionTypeAria": "按操作类型过滤", + "filterByActorAria": "按演员筛选", + "refreshAuditLogAria": "刷新审核日志", + "tableAria": "审核日志条目", + "failedFetchAuditLog": "无法获取审核日志", + "showing": "显示 {count} 条目(偏移量 {offset})", + "search": "搜索", + "timestamp": "时间戳", + "action": "行动", + "actor": "演员", + "target": "目标", + "details": "详情", + "ipAddress": "IP地址", + "notAvailable": "—", + "noEntries": "未找到审核日志条目", + "previous": "上一页", + "next": "下一页" + }, + "onboarding": { + "welcome": "欢迎", + "security": "安全", + "test": "测试", + "ready": "准备好了!", + "setPassword": "设置密码", + "addProvider": "添加您的第一个提供商", + "getStarted": "开始使用", + "skip": "跳过", + "skipWizard": "完全跳过向导", + "skipPassword": "跳过密码设置", + "skipAndContinue": "跳过并继续", + "passwordLabel": "密码", + "confirmPassword": "确认密码", + "enterPassword": "输入密码", + "confirmPasswordPlaceholder": "确认密码", + "passwordsMismatch": "密码不匹配", + "setupComplete": "设置完成!", + "goToDashboard": "转到仪表板→", + "welcomeDesc": "OmniRoute 是您的本地 AI API 代理。它通过负载平衡、故障转移和使用情况跟踪将请求路由到多个 AI 提供商。", + "multiProvider": "多提供商", + "usageTracking": "使用情况追踪", + "apiKeyMgmt": "API密钥管理", + "securityDesc": "设置密码以保护您的仪表板,或暂时跳过。", + "providerDesc": "连接您的第一个人工智能提供商。您可以稍后添加更多。", + "apiKeyRequired": "API 密钥(必填)", + "customUrlOptional": "自定义 URL(可选)", + "testDesc": "让我们验证您的提供商连接是否有效。", + "runTest": "运行连接测试", + "testingConnection": "测试连接...", + "connectionSuccessful": "连接成功!您的提供商已准备就绪。", + "noProviderFound": "未找到提供者。您可以稍后从仪表板添加一个。", + "testFailed": "测试失败,但您可以稍后配置。", + "couldNotTest": "现在无法测试。您可以从仪表板进行测试。", + "doneDesc": "你都准备好了!您的 OmniRoute 实例已配置并准备好代理 AI 请求。", + "yourEndpoint": "您的端点:", + "continue": "继续", + "retry": "重试", + "failedSetPassword": "设置密码失败。再试一次。", + "failedAddProvider": "添加提供商失败。再试一次。", + "connectionError": "连接错误。请再试一次。", + "provider": "提供者" + }, + "providers": { + "title": "供应商", + "addProvider": "添加提供商", + "editProvider": "编辑提供商", + "deleteProvider": "删除提供商", + "noProviders": "没有配置提供商", + "modelAvailability": "型号可供选择", + "accounts": "账户", + "newAccount": "新账户", + "deleteConfirm": "您确定要删除该提供商吗?", + "testing": "测试...", + "testConnection": "测试连接", + "testSuccess": "连接成功", + "testFailed": "连接失败", + "available": "可用", + "cooldown": "冷却时间", + "unavailable": "不可用", + "unknown": "未知", + "oauthLabel": "开放认证", + "compatibleLabel": "兼容", + "chat": "聊天", + "responses": "回应", + "messages": "留言", + "oauthProviders": "OAuth 提供商", + "freeProviders": "免费提供商", + "apiKeyProviders": "API 密钥提供商", + "compatibleProviders": "API 密钥兼容提供商", + "testAll": "测试全部", + "testAllOAuth": "测试所有 OAuth 连接", + "testAllFree": "测试所有免费连接", + "testAllApiKey": "测试所有 API 密钥连接", + "testAllCompatible": "测试所有兼容连接", + "connected": "{count} 已连接", + "errorCount": "{count} 错误 ({code})", + "errorCountNoCode": "{count} 错误", + "noConnections": "无连接", + "disabled": "残疾人", + "enableProvider": "启用提供商", + "disableProvider": "禁用提供商", + "testResults": "测试结果", + "noCompatibleYet": "尚未添加兼容的提供商", + "compatibleHint": "使用上面的按钮添加 OpenAI 或 Anthropic 兼容端点", + "addOpenAICompatible": "添加 OpenAI 兼容", + "addAnthropicCompatible": "添加人择兼容", + "addNewProvider": "添加新提供商", + "backToProviders": "返回提供商", + "configureNewProvider": "配置新的 AI 提供程序以与您的应用程序一起使用。", + "providerLabel": "提供者", + "selectProvider": "选择提供商", + "selectedProvider": "选定的提供商", + "authMethod": "认证方式", + "apiKeyLabel": "API密钥", + "apiKeyRequired": "需要 API 密钥", + "selectProviderRequired": "请选择提供商", + "enterApiKey": "输入您的 API 密钥", + "apiKeySecure": "您的 API 密钥将被加密并安全存储。", + "oauth2Connect": "使用 OAuth2 连接", + "oauth2Label": "OAuth2", + "oauth2Desc": "使用 OAuth2 身份验证连接您的帐户。", + "displayName": "显示名称", + "displayNamePlaceholder": "例如,生产 API、开发环境", + "displayNameHint": "可选。用于标识此配置的友好名称。", + "active": "活跃", + "activeDescription": "启用此提供程序以在您的应用程序中使用", + "cancel": "取消", + "createProvider": "创建提供者", + "failedCreate": "创建提供商失败", + "errorOccurred": "发生错误。请再试一次。", + "modelStatus": "型号状态", + "allModelsOperational": "所有型号均可运行", + "modelsWithIssues": "{count} 有问题的模型", + "allModelsNormal": "所有型号均响应正常。", + "cooldownCleared": "{model} 的冷却时间已清除", + "failedClearCooldown": "无法清除冷却时间", + "loadingAvailability": "正在加载模型可用性...", + "clearCooldown": "清除", + "clearing": "清算...", + "until": "直到 {time}", + "providerTestFailed": "提供商测试失败", + "modeTest": "{mode} 测试", + "passedCount": "{count} 通过", + "failedCount": "{count} 失败", + "testedCount": "{count} 已测试", + "millisecondsAbbr": "{value}ms", + "okShort": "好的", + "errorShort": "错误", + "noActiveConnectionsInGroup": "未找到该组的活动连接。", + "allTestsPassed": "所有 {total} 测试均已通过", + "testSummary": "{passed}/{total} 通过,{failed} 失败", + "nameLabel": "名称", + "prefixLabel": "前缀", + "baseUrlLabel": "基本网址", + "apiTypeLabel": "API类型", + "prefixHint": "必填。型号名称的唯一前缀。", + "nameHint": "必填。该节点的友好标签。", + "baseUrlHint": "必填。  提供商 API 基本 URL。", + "anthropicPrefixPlaceholder": "交流产品", + "openaiPrefixPlaceholder": "OC-产品", + "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", + "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", + "validateConnection": "验证连接", + "validating": "正在验证...", + "connectionValid": "连接有效!", + "connectionFailed": "连接失败。检查 URL 和密钥。", + "testKeyLabel": "测试 API 密钥", + "testKeyPlaceholder": "sk-...(仅用于验证)", + "providerNotFound": "找不到提供者", + "deleteConnectionConfirm": "删除这个连接吗?", + "failedSetAlias": "设置别名失败", + "failedSaveConnection": "保存连接失败", + "failedSaveConnectionRetry": "无法保存连接。请再试一次。", + "failedRetestConnection": "重新测试连接失败", + "deleteCompatibleNodeConfirm": "删除此 {type} 兼容节点?", + "anthropicCompatibleDetails": "人择兼容细节", + "openaiCompatibleDetails": "OpenAI 兼容详细信息", + "messagesApi": "消息API", + "responsesApi": "响应API", + "chatCompletions": "聊天完成", + "importingModels": "正在导入...", + "importFromModels": "从 /models 导入", + "addConnectionToImport": "添加连接以启用导入。", + "noModelsConfigured": "没有配置型号", + "connectionCount": "{count} 连接", + "fetchingModels": "正在获取可用模型...", + "failedFetchModels": "获取模型失败", + "noModelsFound": "没有找到型号", + "importFailed": "导入失败", + "noNewModelsAdded": "没有添加新模型。", + "adding": "添加...", + "importingModelsTitle": "导入模型", + "copyModel": "复制模型", + "removeModel": "删除模型", + "rateLimitProtected": "受保护", + "rateLimitUnprotected": "无保护", + "enableRateLimitProtection": "单击启用速率限制保护", + "disableRateLimitProtection": "单击以禁用速率限制保护", + "productionKey": "生产密钥", + "enterNewApiKey": "输入新的 API 密钥", + "optional": "可选", + "anthropicCompatibleName": "人择兼容", + "openaiCompatibleName": "兼容 OpenAI", + "failedImportModels": "导入模型失败", + "noModelsReturnedFromEndpoint": "/models 端点没有返回任何模型。", + "importingModelsProgress": "正在导入 {current} 个模型(共 {total} 个)...", + "foundModelsStartingImport": "找到 {count} 模型。开始导入...", + "importingModelById": "正在导入 {modelId}...", + "importSuccessCount": "成功导入{count, plural, one {# model} other {# models}}!", + "noNewModelsAddedExisting": "没有添加新模型(全部已存在)。", + "importDoneCount": "✓ 完成! {count, plural, one {# model imported.} other {# models imported.}}", + "unexpectedErrorOccurred": "发生意外错误", + "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "messagesPath": "消息", + "responsesPath": "回应", + "chatCompletionsPath": "聊天/完成", + "add": "添加", + "edit": "编辑", + "delete": "删除", + "anthropic": "人择", + "openai": "开放人工智能", + "singleConnectionPerCompatible": "每个兼容节点仅允许一个连接。如果需要更多连接,请添加另一个节点。", + "connections": "连接", + "providerProxyTitleConfigured": "提供商代理:{host}", + "configured": "配置的", + "providerProxyConfigureHint": "为该提供商的所有连接配置代理", + "providerProxy": "提供商代理", + "noConnectionsYet": "还没有连接", + "addFirstConnectionHint": "添加您的第一个连接以开始使用", + "addConnection": "添加连接", + "availableModels": "可用型号", + "pageAutoRefresh": "页面会自动刷新...", + "statusDisabled": "残疾人", + "statusConnected": "已连接", + "statusRuntimeIssue": "运行时问题", + "statusAuthFailed": "验证失败", + "statusRateLimited": "速率有限", + "statusNetworkIssue": "网络问题", + "statusTestUnsupported": "测试不受支持", + "statusUnavailable": "不可用", + "statusFailed": "失败了", + "statusError": "错误", + "oauthAccount": "OAuth 帐户", + "errorTypeRuntime": "本地运行时", + "errorTypeUpstreamAuth": "上游授权", + "errorTypeMissingCredential": "缺少凭证", + "errorTypeRefreshFailed": "刷新失败", + "errorTypeTokenExpired": "令牌已过期", + "errorTypeRateLimited": "速率有限", + "errorTypeUpstreamUnavailable": "上游不可用", + "errorTypeNetworkError": "网络错误", + "errorTypeTestUnsupported": "测试不支持", + "errorTypeUpstreamError": "上游错误", + "proxySourceGlobal": "全球", + "proxySourceProvider": "提供者", + "proxySourceKey": "钥匙", + "proxyConfiguredBySource": "代理 ({source}):{host}", + "autoPriority": "自动:{priority}", + "proxy": "代理", + "retestAuthentication": "重新测试认证", + "retest": "重新测试", + "disableConnection": "禁用连接", + "enableConnection": "启用连接", + "reauthenticateConnection": "重新验证此连接", + "proxyConfig": "代理配置", + "aliasExistsAlert": "别名“{alias}”已存在。请使用不同的模型或编辑现有别名。", + "openRouterAnyModelHint": "OpenRouter 支持任何型号。添加模型并创建别名以便快速访问。", + "modelIdFromOpenRouter": "型号 ID(来自 OpenRouter)", + "openRouterModelPlaceholder": "人类/claude-3-opus", + "customModels": "定制型号", + "customModelsHint": "添加不在默认列表中的型号 ID。这些将可用于路由。", + "modelId": "型号编号", + "customModelPlaceholder": "例如GPT-4.5-涡轮", + "loading": "正在加载...", + "removeCustomModel": "删除自定义模型", + "noCustomModels": "尚未添加自定义模型。", + "allSuggestedAliasesExist": "所有建议的别名均已存在。请选择不同的型号或删除有冲突的别名。", + "failedSaveCustomModel": "保存自定义模型失败", + "modelAddedSuccess": "模型 {modelId} 添加成功", + "failedAddModelTryAgain": "添加型号失败。请再试一次。", + "failedSaveImportedModel": "无法将导入的模型保存到自定义数据库", + "failedImportModelsTryAgain": "导入模型失败。请再试一次。", + "failedRemoveModelFromDatabase": "无法从数据库中删除模型", + "modelRemovedSuccess": "模型删除成功", + "failedDeleteModelTryAgain": "删除模型失败。请再试一次。", + "compatibleModelsDescription": "手动添加 {type} 兼容模型或从 /models 端点导入它们。", + "anthropicCompatibleModelPlaceholder": "克劳德-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "GPT-4O", + "apiKeyValidationFailed": "API 密钥验证失败。请检查您的密钥并重试。", + "addProviderApiKeyTitle": "添加 {provider} API 密钥", + "checking": "正在检查...", + "check": "检查", + "valid": "有效", + "invalid": "无效", + "creating": "创造...", + "validationChecksAnthropicCompatible": "验证通过验证 API 密钥来检查 {provider}。", + "validationChecksOpenAiCompatible": "验证通过基本 URL 上的 /models 检查 {provider}。", + "priorityLabel": "优先级", + "saving": "正在保存...", + "save": "保存", + "editConnection": "编辑连接", + "accountName": "账户名称", + "email": "电子邮件", + "healthCheckMinutes": "健康检查(分钟)", + "healthCheckHint": "主动令牌刷新间隔。 0 = 禁用。", + "failedTestConnection": "测试连接失败", + "failed": "失败", + "leaveBlankKeepCurrentApiKey": "留空以保留当前的 API 密钥。", + "editCompatibleTitle": "编辑 {type} 兼容", + "compatibleBaseUrlHint": "使用 {type} 兼容 API 的基本 URL(以 /v1 结尾)。", + "apiKeyForCheck": "API 密钥(用于检查)", + "compatibleProdPlaceholder": "{type} 兼容(产品)" + }, + "settings": { + "title": "设置", + "general": "一般", + "security": "安全", + "appearance": "外观", + "routing": "路由", + "cache": "缓存", + "resilience": "韧性", + "systemPrompt": "系统提示", + "thinkingBudget": "思考预算", + "proxy": "代理", + "pricing": "定价", + "storage": "存储", + "policies": "政策", + "ipFilter": "IP过滤器", + "comboDefaults": "组合默认值", + "fallbackChains": "后备链", + "changePassword": "更改密码", + "enablePassword": "启用密码", + "darkMode": "深色模式", + "lightMode": "灯光模式", + "systemTheme": "系统主题", + "enableCache": "启用缓存", + "cacheTTL": "缓存生存时间", + "maxCacheSize": "最大缓存大小", + "clearCache": "清除缓存", + "cacheHits": "缓存命中", + "cacheMisses": "缓存未命中", + "hitRate": "命中率", + "cacheEntries": "缓存条目", + "circuitBreaker": "断路器", + "retryPolicy": "重试政策", + "maxRetries": "最大重试次数", + "retryDelay": "重试延迟", + "timeoutMs": "超时(毫秒)", + "enableSystemPrompt": "启用系统提示", + "systemPromptText": "系统提示文字", + "enableThinking": "激发思考", + "maxThinkingTokens": "最大思考令牌", + "enableProxy": "启用代理", + "proxyUrl": "代理网址", + "pricingRates": "定价格式", + "currentPricing": "当前定价概述", + "loadingPricing": "正在加载定价数据...", + "noPricing": "无可用定价数据", + "input": "输入", + "output": "输出", + "cached": "缓存", + "reasoning": "推理", + "cacheCreation": "缓存创建", + "customPricing": "定制定价", + "databaseSize": "数据库大小", + "backupDb": "备份数据库", + "restoreDb": "恢复数据库", + "exportData": "导出数据", + "importData": "导入数据", + "clearData": "清除所有数据", + "clearDataConfirm": "这将永久删除所有数据。你确定吗?", + "enableRequestLogs": "启用请求日志", + "logRetention": "日志保留", + "ipWhitelist": "IP白名单", + "ipBlacklist": "IP黑名单", + "addIP": "添加IP", + "savedSuccessfully": "设置保存成功", + "ai": "人工智能", + "advanced": "高级", + "localMode": "本地模式 - 所有数据都存储在您的计算机上", + "settingsSectionsAria": "设置部分", + "switchThemes": "在浅色和深色主题之间切换", + "themeSelectionAria": "主题选择", + "themeLight": "光", + "themeDark": "黑暗", + "themeSystem": "系统", + "hideHealthLogs": "隐藏健康检查日志", + "hideHealthLogsDesc": "当打开时,抑制服务器控制台中的 [HealthCheck] 消息", + "promptCache": "提示缓存", + "flushCache": "刷新缓存", + "flushing": "法拉盛…", + "size": "尺寸", + "hits": "点击数", + "evictions": "驱逐", + "loadingCacheStats": "正在加载缓存统计信息...", + "globalProxy": "全球代理", + "globalProxyDesc": "为所有 API 调用配置全局出站代理。单独的提供程序、组合和键可以覆盖此设置。", + "noGlobalProxy": "没有配置全局代理", + "globalLabel": "全球", + "configure": "配置", + "globalSystemPrompt": "全局系统提示", + "systemPromptDesc": "在代理级别注入所有请求", + "saved": "已保存", + "systemPromptPlaceholder": "输入系统提示符注入所有请求...", + "systemPromptHint": "此提示会添加到每个请求的系统消息之前。用于全局说明、安全指南或响应格式规则。", + "chars": "{count} 字符", + "thinkingBudgetTitle": "思考预算", + "thinkingBudgetDesc": "控制所有请求中 AI 推理令牌的使用", + "passthrough": "直通", + "passthroughDesc": "没有变化——客户控制思维预算", + "auto": "汽车", + "autoDesc": "放弃所有思考配置——让提供商决定", + "custom": "定制", + "customDesc": "为所有请求设置固定的令牌预算", + "adaptive": "自适应", + "adaptiveDesc": "根据请求复杂性调整预算", + "effortNone": "无(0 代币)", + "effortLow": "低(1K 代币)", + "effortMedium": "中型(10K 代币)", + "effortHigh": "高(128K 代币)", + "tokenBudget": "代币预算", + "tokens": "代币", + "baseEffortLevel": "基本努力水平", + "adaptiveHint": "自适应模式根据消息计数、工具使用情况和提示长度从此基本级别进行扩展。", + "requireLogin": "需要登录", + "requireLoginDesc": "当打开时,仪表板需要密码。当关闭时,无需登录即可访问。", + "currentPassword": "当前密码", + "enterCurrentPassword": "输入当前密码", + "newPassword": "新密码", + "enterNewPassword": "输入新密码", + "confirmPassword": "确认新密码", + "confirmPasswordPlaceholder": "确认新密码", + "passwordsNoMatch": "密码不匹配", + "passwordUpdated": "密码更新成功", + "failedUpdatePassword": "更新密码失败", + "errorOccurred": "发生错误", + "updatePassword": "更新密码", + "setPassword": "设置密码", + "apiEndpointProtection": "API端点保护", + "requireAuthModels": "/models 需要 API 密钥", + "requireAuthModelsDesc": "当打开时,/v1/models 端点针对未经身份验证的请求返回 404。防止未经授权的用户发现模型。", + "blockedProviders": "被阻止的提供商", + "blockedProvidersDesc": "从 /v1/models 响应中隐藏特定提供程序。被阻止的提供商不会出现在模型列表中。", + "providersBlocked": "{count} 提供商被阻止/模型", + "blockProviderTitle": "区块 {provider}", + "unblockProviderTitle": "解锁 {provider}", + "routingStrategy": "路由策略", + "fillFirst": "先填写", + "fillFirstDesc": "按优先顺序使用帐户", + "roundRobin": "循环赛", + "roundRobinDesc": "循环浏览所有帐户", + "p2c": "P2C", + "p2cDesc": "随机选2个,使用更健康的一个", + "random": "随机", + "randomDesc": "每个请求随机帐户", + "leastUsed": "最少使用", + "leastUsedDesc": "选择最近最少使用的帐户", + "costOpt": "成本选择", + "costOptDesc": "更喜欢最便宜的可用帐户", + "stickyLimit": "粘性限制", + "stickyLimitDesc": "切换前每个账户的通话次数", + "modelAliases": "模型别名", + "modelAliasesDesc": "重新映射模型名称的通配符模式 • 使用 * 和 ?", + "aliasPatternPlaceholder": "克劳德十四行诗-*", + "aliasTargetPlaceholder": "克劳德十四行诗-4-20250514", + "pattern": "图案", + "targetModel": "目标模型", + "add": "+ 添加", + "session": "会议", + "sessionDetailsAria": "会议详情", + "status": "状态", + "authenticated": "已认证", + "guest": "嘉宾", + "loginTime": "登录时间", + "sessionAge": "会话年龄", + "browser": "浏览器", + "clearLocalData": "清除本地数据", + "logout": "退出", + "clearLocalDataConfirm": "清除所有本地数据?这将重置您的首选项。", + "unknown": "未知", + "systemActor": "系统", + "ipAccessControl": "IP访问控制", + "ipAccessControlDesc": "阻止或允许特定 IP 地址", + "ipModeDisabled": "残疾人", + "ipModeBlacklist": "黑名单", + "ipModeWhitelist": "白名单", + "ipModeWhitelistPriority": "WL优先级", + "addIpAddress": "添加IP地址", + "ipAddressPlaceholder": "192.168.1.0/24 或 10.0.*.*", + "block": "+ 块", + "allow": "+ 允许", + "blocked": "已被阻止 ({count})", + "allowed": "允许 ({count})", + "temporaryBans": "临时禁令 ({count})", + "minLeft": "还剩 {min}m", + "auditLog": "审核日志", + "searchAuditLogs": "搜索审核日志...", + "failedLoadAuditLog": "无法加载审核日志", + "noAuditEvents": "未找到审核事件", + "action": "行动", + "actor": "演员", + "details": "详情", + "time": "时间", + "fallbackChainsTitle": "后备链", + "fallbackChainsDesc": "定义每个模型的提供者后备顺序", + "addChain": "+ 添加链", + "modelName": "型号名称", + "modelNamePlaceholder": "克劳德十四行诗-4-20250514", + "providersCommaSeparated": "提供者(以逗号分隔,按优先顺序排列)", + "providersCommaSeparatedPlaceholder": "人类、openai、双子座", + "createChain": "创建链", + "noFallbackChains": "无后备链", + "noFallbackChainsDesc": "创建一个链来定义模型的提供者回退顺序。", + "loadingFallbackChains": "正在加载后备链...", + "deleteChainConfirm": "删除“{model}”的后备链?", + "chainCreated": "为 {model} 创建的链", + "chainDeleted": "已删除 {model} 链", + "failedCreateChain": "创建链失败", + "failedDeleteChain": "删除链失败", + "deleteChain": "删除链", + "fillModelAndProviders": "请填写型号名称和提供商", + "addAtLeastOneProvider": "添加至少一个提供商", + "comboDefaultsTitle": "组合默认值", + "globalComboConfig": "全局组合配置", + "defaultStrategy": "默认策略", + "defaultStrategyDesc": "应用于没有明确策略的新组合", + "comboStrategyAria": "组合策略", + "priority": "优先级", + "weighted": "加权", + "maxRetriesLabel": "最大重试次数", + "retryDelayLabel": "重试延迟(毫秒)", + "timeoutLabel": "超时(毫秒)", + "healthCheck": "健康检查", + "healthCheckDesc": "预先检查提供商的可用性", + "trackMetrics": "跟踪指标", + "trackMetricsDesc": "记录每个组合请求指标", + "providerOverrides": "提供者覆盖", + "providerOverridesDesc": "覆盖每个提供商的超时和重试。提供程序设置会覆盖全局默认设置。", + "providerMaxRetriesAria": "{provider} 最大重试次数", + "providerTimeoutAria": "{provider} 超时毫秒", + "removeProviderOverrideAria": "删除 {provider} 覆盖", + "newProviderNamePlaceholder": "例如谷歌、开放式...", + "newProviderNameAria": "新的提供商名称", + "retries": "重试", + "ms": "女士", + "saveComboDefaults": "保存组合默认值", + "maxNestingDepth": "最大嵌套深度", + "concurrencyPerModel": "并发/模型", + "queueTimeout": "队列超时(毫秒)", + "providerProfiles": "供应商简介", + "providerProfilesDesc": "OAuth(基于会话)和 API 密钥(计量)提供商的单独弹性设置。由于速率限制较低,OAuth 提供商具有更严格的阈值。", + "oauthProviders": "OAuth 提供商", + "apiKeyProviders": "API 密钥提供商", + "transientCooldown": "短暂冷却", + "rateLimitCooldown": "速率限制冷却", + "maxBackoffLevel": "最大退避级别", + "cbThreshold": "CB阈值", + "cbResetTime": "CB 复位时间", + "rateLimiting": "速率限制", + "rateLimitingDesc": "API 密钥提供程序会自动受到安全默认值的速率限制。限制是从响应标头中学习的,并随着时间的推移进行调整。", + "defaultSafetyNet": "默认安全网", + "rpm": "转速", + "minGap": "最小间隙", + "maxConcurrent": "最大并发数", + "activeLimiters": "有源限制器", + "noActiveLimiters": "尚无活动的速率限制器。", + "reservoir": "水库", + "running": "跑步", + "queued": "排队", + "circuitBreakers": "断路器", + "breakerStateClosed": "关闭", + "breakerStateOpen": "打开", + "breakerStateHalfOpen": "半开式", + "tripped": "{count} 已触发", + "healthy": "{count} 健康", + "resetAll": "全部重置", + "noCircuitBreakers": "尚未激活断路器。当请求流经组合管道时,它们会自动创建。", + "failures": "{count} 失败", + "policiesLocked": "策略和锁定标识符", + "allOperational": "所有系统均可运行——无停工或断路器跳闸", + "loadingPolicies": "正在加载政策...", + "lockedIdentifiers": "锁定标识符", + "unlockedIdentifier": "解锁:{identifier}", + "sinceDate": "自 {date} 起", + "forceUnlock": "强制解锁", + "unlocking": "解锁...", + "failedUnlock": "解锁失败", + "failedLoadWithStatus": "加载失败:{status}", + "failedLoadResilience": "无法加载弹性状态", + "saveFailed": "保存失败", + "resetFailed": "重置失败", + "loadingResilience": "正在加载弹性状态...", + "retry": "重试", + "systemStorage": "系统与存储", + "allDataLocal": "所有数据都存储在本地计算机上", + "databasePath": "数据库路径", + "exportDatabase": "导出数据库", + "exportAll": "全部导出 (.tar.gz)", + "importDatabase": "导入数据库", + "confirmDbImport": "确认数据库导入", + "confirmDbImportDesc": "这会将所有当前数据替换为 {file} 中的内容。导入前将自动创建备份。", + "yesImport": "是的,导入", + "lastBackup": "上次备份", + "noBackupYet": "还没有备份", + "backupNow": "立即备份", + "backupRestore": "备份与恢复", + "viewBackups": "查看备份", + "hide": "隐藏", + "backupRetentionDesc": "数据库快照会在还原之前自动创建,并且在数据更改时每 15 分钟自动创建一次。保留:24 小时 + 30 每日备份,智能轮换。", + "loadingBackups": "正在加载备份...", + "noBackupsYet": "尚无可用的备份。当数据发生变化时,将自动创建备份。", + "backupsAvailable": "{count} 可用备份", + "refresh": "刷新", + "confirm": "确认?", + "yes": "是的", + "no": "否", + "restore": "恢复", + "invalidFileType": "文件类型无效。仅接受 .sqlite 文件。", + "exportFailed": "导出失败", + "exportFailedWithError": "导出失败:{error}", + "fullExportFailedWithError": "完全导出失败:{error}", + "backupCreated": "创建备份:{file}", + "restoreSuccess": "恢复了! {connections} 连接、{nodes} 节点、{combos} 组合、{apiKeys} API 密钥。", + "importSuccess": "数据库导入! {connections} 连接、{nodes} 节点、{combos} 组合、{apiKeys} API 密钥。", + "justNow": "刚才", + "minutesAgo": "{count} 分钟前", + "hoursAgo": "{count} 小时前", + "daysAgo": "{count} 天前", + "backupReasonManual": "手册", + "backupReasonPreRestore": "预恢复", + "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "noChangesSinceBackup": "自上次备份以来没有任何变化", + "backupFailed": "备份失败", + "restoreFailed": "恢复失败", + "importFailed": "导入失败", + "errorDuringRestore": "恢复期间发生错误", + "errorDuringImport": "导入时发生错误", + "modelPricing": "型号定价", + "modelPricingDesc": "配置每个模型的成本费率 • 所有费率均以美元/100 万代币为单位", + "providers": "供应商", + "registry": "登记处", + "priced": "定价", + "searchProvidersModels": "搜索供应商或型号...", + "showAll": "显示全部", + "noProvidersMatch": "没有与您的搜索匹配的提供商。", + "howPricingWorks": "定价如何运作", + "cacheWrite": "缓存写入", + "unsaved": "未保存", + "resetDefaults": "重置默认值", + "saveProvider": "保存提供者", + "saving": "正在保存...", + "model": "型号", + "models": "型号", + "moreProviders": "{count} 更多提供商", + "withPricing": "配置定价", + "policiesCircuitBreakers": "政策与断路器", + "activeIssuesDetected": "检测到活跃问题", + "off": "关闭", + "resetPricingConfirm": "将 {provider} 的所有定价重置为默认值?", + "pricingDescInput": "输入:发送到模型的令牌", + "pricingDescOutput": "输出:生成的代币", + "pricingDescCached": "缓存:重用输入(约输入率的 50%)", + "pricingDescReasoning": "推理:思考标记(回到输出)", + "pricingDescCacheWrite": "缓存写入:创建缓存条目(回退到输入)", + "pricingDescFormula": "成本 = (输入 × 输入率) + (输出 × 输出率) + (缓存 × 缓存率) 每百万代币。", + "pricingSettingsTitle": "定价设置", + "totalModels": "型号总数", + "active": "活跃", + "costCalculation": "成本计算", + "costCalculationDesc": "成本是根据为每个模型配置的令牌使用情况和定价费率计算的。", + "pricingFormat": "定价格式", + "pricingFormatDesc": "所有费率均以美元/100 万代币为单位(每百万代币美元)。", + "tokenTypes": "代币类型", + "inputTokenDesc": "标准提示标记", + "outputTokenDesc": "完成/响应标记", + "cachedTokenDesc": "缓存输入令牌(通常为输入速率的 50%)", + "reasoningTokenDesc": "特殊推理/思维标记(回退到输出率)", + "cacheCreationTokenDesc": "用于创建缓存条目的令牌(回退到输入速率)", + "customPricingNote": "您可以覆盖特定型号的默认定价。自定义覆盖优先于自动检测的定价。", + "editPricing": "编辑定价", + "viewFullDetails": "查看完整详情" + }, + "translator": { + "title": "翻译者", + "metaTitle": "翻译游乐场 |全方位路由", + "metaDescription": "调试、测试和可视化提供商之间的 API 格式转换", + "playgroundTitle": "翻译游乐场", + "playground": "游乐场", + "realtime": "实时翻译活动", + "chatTester": "聊天测试仪", + "testBench": "测试台", + "liveMonitor": "实时监控", + "modeDescriptionPlayground": "粘贴任何 API 请求正文,然后查看 OmniRoute 如何在提供程序格式之间进行转换(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", + "modeDescriptionChatTester": "通过 OmniRoute 发送真实的聊天请求并检查完整的往返过程:输入、翻译后的请求、提供商响应和翻译后的输出。", + "modeDescriptionTestBench": "运行预定义的场景并比较提供商和模型之间的兼容性。", + "modeDescriptionLiveMonitor": "当请求流经 OmniRoute 时,实时观看翻译事件。", + "modeDescriptionFallback": "调试、测试和可视化 OmniRoute 如何在提供者之间转换 API 请求。", + "recentTranslations": "最近的翻译", + "noTranslations": "还没有翻译", + "source": "来源", + "target": "目标", + "time": "时间", + "model": "型号", + "status": "状态", + "latency": "延迟", + "totalTranslations": "总翻译数", + "successful": "成功", + "errors": "错误", + "avgLatency": "平均延迟", + "millisecondsShort": "{value}ms", + "notAvailableSymbol": "—", + "liveAutoRefreshing": "直播 — 自动刷新", + "paused": "已暂停", + "eventsAppearHint": "当请求流经 OmniRoute 时,翻译事件会出现在此处。使用以下任意方法生成事件:", + "chatTesterTab": "聊天测试选项卡", + "testBenchTab": "测试台选项卡", + "externalApiCalls": "外部API调用", + "ideCliIntegrations": "IDE/CLI 集成", + "inMemoryNote": "注意:事件存储在内存中,并在服务器重新启动时重置。", + "ok": "好的", + "errorShort": "错误率", + "formatConverter": "格式转换器", + "formatConverterDescription": "粘贴或输入 JSON 请求正文。翻译器将自动检测源格式并将其转换为目标格式。使用它来调试 OmniRoute 如何在格式之间转换请求(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)。", + "input": "输入", + "output": "输出", + "auto": "汽车", + "swapFormats": "交换格式", + "translateAction": "翻译", + "clear": "清除", + "inputPlaceholder": "在此处粘贴请求正文或选择下面的模板...", + "exampleTemplates": "示例模板", + "exampleTemplatesHint": "— 点击加载", + "templateLoadHint": "模板以 {format} 格式加载请求。更改源格式以以不同的格式加载。", + "compatibilityTester": "兼容性测试仪", + "compatibilityReport": "兼容性报告", + "testBenchDescription": "运行预定义的场景(简单聊天、工具调用等)以验证翻译和提供程序兼容性。选择源格式和目标提供程序,然后运行所有测试以查看兼容性百分比。使用它来查找哪些功能可以跨提供商使用。", + "targetProvider": "目标提供商", + "runAllTests": "运行所有测试", + "runTest": "运行测试", + "reRun": "重新运行", + "running": "运行...", + "passed": "通过了", + "failed": "失败了", + "passedIconLabel": "✅ 通过", + "chunks": "块", + "scenarioSimpleChat": "简单聊天", + "scenarioToolCalling": "工具调用", + "scenarioMultiTurn": "多圈", + "scenarioThinking": "思考", + "scenarioSystemPrompt": "系统提示", + "scenarioStreaming": "流媒体", + "templateNames": { + "simple-chat": "简单聊天", + "tool-calling": "工具调用", + "multi-turn": "多圈", + "thinking": "思考", + "system-prompt": "系统提示", + "streaming": "流媒体" + }, + "templateDescriptions": { + "simple-chat": "基本短信", + "tool-calling": "函数/工具调用", + "multi-turn": "与历史对话", + "thinking": "扩展思维/推理", + "system-prompt": "复杂系统指令", + "streaming": "SSE 流请求" + }, + "templatePayloads": { + "simpleChat": { + "system": "你是一个有用的助手。", + "userGreeting": "你好!你今天怎么样?" + }, + "toolCalling": { + "userWeather": "圣保罗 的天气怎么样?", + "toolDescription": "获取某个位置的当前天气", + "cityNameDescription": "城市名称" + }, + "multiTurn": { + "system": "你是一名编码助理。", + "userInitial": "在 Python 中编写一个函数对数组进行排序。", + "assistantExample": "这是一个简单的排序函数:\n\n````蟒蛇\ndef sort_array(arr):\n 返回已排序(arr)\n````", + "userFollowUp": "现在将其按降序排序。" + }, + "thinking": { + "question": "前 100 个质数之和是多少?" + }, + "systemPrompt": { + "systemInstruction": "您是一名专门研究分布式系统的高级软件工程师。使用行业最佳实践简洁地回答问题。始终提供相关的代码示例。使用 Markdown 格式化您的回复。", + "question": "如何实现断路器模式?" + }, + "streaming": { + "prompt": "给我讲一个关于机器人学习绘画的小故事。" + } + }, + "openaiCompatibleLabel": "兼容 OpenAI", + "anthropicCompatibleLabel": "人择兼容", + "noTemplateForFormat": "没有此格式的模板", + "translationFailed": "翻译失败:{error}", + "pipelineDebugger": "管道调试器", + "translationPipeline": "翻译管道", + "pipelineVisualization": "管道可视化", + "pipelineVisualizationHint": "发送消息以查看您的请求如何经过检测 → 翻译 → 提供商调用。", + "chatTesterDescription": "以特定客户端格式发送消息并检查翻译管道的每个步骤。", + "chatTesterFlow": "客户端请求 → 格式检测 → OpenAI Intermediate → 提供者格式 → 响应", + "clickStepToInspect": "单击任意步骤即可检查该阶段的数据。", + "clientFormat": "客户端格式", + "provider": "提供者", + "modelPlaceholder": "选择或输入型号名称...", + "sendMessageToSeePipeline": "发送消息查看翻译管道", + "chatMessageHintPrefix": "您的消息将被格式化为", + "chatMessageHintSuffix": "请求,通过管道进行翻译,然后发送给选定的提供者。", + "youWithFormat": "您 ({format})", + "assistant": "助理", + "typeMessage": "输入消息...", + "send": "发送", + "clientRequest": "客户要求", + "clientRequestDescription": "您的客户端发送的请求正文", + "formatDetected": "检测到格式", + "formatDetectedDescription": "OmniRoute 自动从请求结构中检测 API 格式", + "openaiIntermediate": "OpenAI 中级", + "openaiIntermediateDescription": "所有格式首先标准化为 OpenAI 格式(通用桥)", + "providerFormat": "提供者格式", + "providerFormatDescription": "OpenAI 格式转换为提供商的本机格式", + "providerResponse": "供应商回应", + "providerResponseRawDescription": "来自提供商 API 的原始响应", + "providerResponseSseDescription": "来自提供商 API 的原始 SSE 流", + "unexpectedError": "发生意外错误", + "error": "错误", + "errorMessage": "错误:{message}", + "requestFailed": "请求失败", + "noTextExtracted": "(未提取文字)", + "liveMonitorDescriptionPrefix": "当 API 调用流经 OmniRoute 时显示翻译事件。事件来自内存缓冲区(重新启动时重置)。使用", + "liveMonitorDescriptionSuffix": ",或外部 API 调用来生成事件。" + }, + "usage": { + "title": "用途", + "loggerTab": "记录器", + "proxyTab": "代理", + "budgetManagement": "预算管理", + "budgetSaved": "已保存预算限制", + "budgetSaveFailed": "未能节省预算", + "loadingBudgetData": "正在加载预算数据...", + "noApiKeysTitle": "没有 API 密钥", + "noApiKeysDescription": "首先添加 API 密钥以设置预算限制。", + "apiKey": "API密钥", + "todaysSpend": "今天的花费", + "thisMonth": "本月", + "setLimits": "设定限制", + "dailyLimitUsd": "每日限额(美元)", + "monthlyLimitUsd": "每月限额(美元)", + "warningThresholdPercent": "警告阈值 (%)", + "dailyLimitPlaceholder": "例如5.00", + "monthlyLimitPlaceholder": "例如50.00", + "warningThresholdPlaceholder": "80", + "saveLimits": "保存限制", + "budgetOk": "预算正常 — 剩余 {remaining}", + "budgetExceeded": "超出预算 - 请求可能被阻止", + "totalRequests": "请求总数", + "noDataYet": "还没有数据", + "latency": "延迟", + "latencyP50": "p50", + "latencyP95": "p95", + "latencyP99": "p99", + "promptCache": "提示缓存", + "systemHealth": "系统健康状况", + "entries": "参赛作品", + "activeCount": "{count} 活跃", + "openCircuitBreakersDetected": "检测到断路器开路", + "hitRate": "命中率", + "hitsMisses": "命中/未命中", + "circuitBreakers": "断路器", + "lockedIPs": "锁定IP", + "lockoutsAutoRefreshHint": "每个模型速率限制锁定 • 自动刷新 10 秒", + "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "timeLeft": "剩余 {time}", + "howItWorks": "它是如何运作的", + "howItWorksSubtitle": "了解评估如何验证您的 LLM 回答", + "define": "定义", + "defineStepDescription": "使用包含、正则表达式或完全匹配等策略创建带有输入提示和预期输出标准的测试用例。", + "run": "运行", + "runStepDescription": "通过 OmniRoute 针对您的 LLM 端点执行测试用例。每个案例都作为真实的 API 请求发送。", + "evaluate": "评价", + "evaluateStepDescription": "将响应与预期标准进行比较。查看每种情况的通过/失败情况以及延迟指标和详细反馈。", + "evalSuites": "评估套件", + "evalSuitesHint": "单击套件查看测试用例,然后运行以评估您的 LLM 端点", + "evalsLoading": "正在加载评估套件...", + "noEvalSuitesFound": "未找到评估套件", + "noEvalSuitesDescription": "评估套件可以通过 API 或代码来定义。他们使用包含、正则表达式、精确匹配和自定义函数等策略根据预期结果测试模型输出。", + "columnCase": "案例", + "columnStatus": "状态", + "columnLatency": "延迟", + "columnDetails": "详情", + "columnModel": "型号", + "columnStrategy": "策略", + "columnExpected": "预计", + "statsSuites": "套房", + "statsTestCases": "测试用例", + "statsModels": "型号", + "statsCoverage": "覆盖范围", + "statsStrategiesCount": "{count} 策略", + "evaluationStrategies": "评估策略", + "modelsUnderTest": "测试中的模型", + "searchSuitesPlaceholder": "搜索套房...", + "passSuffix": "通过", + "casesCount": "{count, plural, one {# case} other {# cases}}", + "runEval": "运行评估", + "runningProgress": "正在运行 {current}/{total}...", + "passRate": "通过率", + "summaryBreakdown": "{passed} 通过 · {failed} 失败 · {total} 总计", + "passedIconLabel": "✅ 通过", + "failedIconLabel": "❌ 失败", + "detailsContains": "包含:“{term}”", + "detailsRegex": "正则表达式:{pattern}", + "detailsExpected": "预期:“{expected}”", + "noResultsYet": "还没有结果", + "testCasesCount": "测试用例 ({count})", + "noTestCasesDefined": "没有定义测试用例", + "runEvalHint": "单击“运行评估”以针对您的 LLM 端点执行所有案例。每个测试都通过 OmniRoute 发送真实请求。", + "notifyNoTestCases": "没有为此套件定义测试用例", + "notifyAllCasesPassed": "所有 {total} 案例均已通过 ✅", + "notifySomeCasesFailed": "{passed}/{total} 通过,{failed} 失败", + "notifyEvalRunFailed": "评估运行失败", + "notifyEvalTitle": "评估:{name}", + "modelEvals": "模型评估", + "evalsHeroDescription": "通过运行预定义的评估套件来测试和验证您的 LLM 端点。每个套件都包含测试用例,这些测试用例通过 OmniRoute 发送真实提示并将响应与预期标准进行比较 - 帮助您检测回归、比较模型并确保跨提供商的响应质量。", + "qualityValidation": "质量验证", + "modelComparison": "型号对比", + "regressionDetection": "回归检测", + "latencyBenchmarks": "延迟基准", + "modelLockouts": "模型锁定", + "noLockouts": "目前没有锁定型号", + "activeSessions": "活跃会话", + "noSessions": "没有活动会话", + "sessionsHint": "会话显示为请求流经代理", + "sessionsTrackedHint": "通过请求指纹跟踪 • 自动刷新 5 秒", + "session": "会议", + "age": "年龄", + "requests": "要求", + "connection": "连接方式", + "durationMillisecondsShort": "{value}ms", + "durationSecondsShort": "{value}s", + "durationMinutesShort": "{value}m", + "durationHoursShort": "{value}h", + "reasonSeparator": " - ", + "notAvailableSymbol": "-", + "providerLimits": "提供商限制", + "noProviders": "没有连接提供商", + "connectProvidersForQuota": "使用 OAuth 连接到提供商以跟踪您的 API 配额限制和使用情况。", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "filteredFromCount": "(从 {count} 过滤)", + "autoRefresh": "自动刷新", + "refreshAll": "全部刷新", + "loadingQuotas": "正在加载...", + "account": "账户", + "modelQuotas": "模型配额", + "lastUsed": "最后使用", + "actions": "行动", + "refreshQuota": "刷新配额", + "today": "今天", + "tomorrow": "明天", + "dayTimeFormat": "{day}、{time}", + "inDuration": "在 {duration} 中", + "notApplicable": "不适用", + "rawPlanWithValue": "原始计划:{plan}", + "noPlanFromProvider": "提供商没有计划", + "noQuotaData": "无配额数据", + "noQuotaDataAvailable": "无可用配额数据", + "noAccountsForTierFilter": "未找到适用于层过滤器的帐户", + "tierAll": "全部", + "tierEnterprise": "企业", + "tierTeam": "团队", + "tierBusiness": "商务", + "tierUltra": "超", + "tierPro": "专业版", + "tierPlus": "加号", + "tierFree": "免费", + "tierUnknown": "未知" + }, + "modals": { + "waitingAuth": "等待授权", + "verificationUrl": "验证网址", + "yourCode": "你的代码", + "remoteAccess": "远程访问:", + "connectedSuccess": "连接成功!", + "connectionFailed": "连接失败", + "chooseAuthMethod": "选择您的身份验证方法:", + "awsBuilderId": "AWS 构建器 ID", + "awsIamIdentity": "AWS IAM 身份中心", + "googleAccount": "谷歌帐户", + "githubAccount": "GitHub 帐户", + "importToken": "导入令牌", + "pasteToken": "从 Kiro IDE 粘贴刷新令牌。", + "awsRegion": "AWS 区域", + "autoDetecting": "自动检测令牌...", + "readingFromCache": "从 AWS SSO 缓存中读取", + "readingFromCursor": "从 Cursor IDE 数据库读取", + "initializing": "正在初始化...", + "pricingConfig": "定价配置", + "loadingPricing": "正在加载定价数据...", + "pricingRatesFormat": "定价格式", + "noPricingData": "无可用定价数据", + "noModelsFound": "没有找到型号" + }, + "loggers": { + "allProviders": "所有提供商", + "allModels": "所有型号", + "allAccounts": "所有账户", + "allApiKeys": "所有 API 密钥", + "allTypes": "所有类型", + "allLevels": "所有级别", + "modelAZ": "型号 A-Z", + "modelZA": "Z-A型", + "loadingLogs": "正在加载日志...", + "loadingProxyLogs": "正在加载代理日志...", + "noLogEntries": "未找到日志条目", + "noPayloadData": "此日志条目没有可用的有效负载数据。", + "proxyEvent": "代理事件", + "proxy": "代理", + "level": "等级", + "directNative": "直接(本地)", + "combo": "组合", + "inputTokens": "我:", + "outputTokens": "哦:" + }, + "stats": { + "usageOverview": "使用概述", + "outputTokens": "输出代币", + "totalCost": "总成本", + "usageByModel": "按型号使用", + "usageByAccount": "按帐户使用情况", + "failedToLoad": "无法加载使用情况统计信息。", + "tokenHealth": "令牌健康", + "totalOAuth": "总 OAuth", + "healthy": "健康", + "warning": "警告", + "errored": "出错了", + "lastCheck": "最后检查", + "noData": "无数据", + "share": "分享", + "unableToLoad": "无法加载系统指标", + "product": "产品展示", + "resources": "资源", + "company": "公司简介" + }, + "auth": { + "welcome": "欢迎", + "signIn": "登录", + "enterPassword": "输入您的密码以继续", + "password": "密码", + "unifiedProxy": "统一AI API代理", + "unifiedAiApiProxy": "统一AI API代理", + "unifiedAiApiProxyDesc": "通过单个端点将请求路由到多个 AI 提供商。内置负载平衡、故障转移和使用情况跟踪。", + "passwordNotEnabled": "未启用密码保护", + "loading": "正在加载...", + "invalidPassword": "密码无效", + "errorOccurredRetry": "发生错误。请再试一次。", + "configureInstance": "让我们配置您的 OmniRoute 实例", + "runOnboardingWizard": "运行入门向导来设置您的密码并连接您的第一个 AI 提供商。", + "startOnboarding": "开始入职", + "secureYourInstance": "保护您的实例", + "setPasswordDescription": "设置密码以保护您的仪表板并保护您的 API 端点免遭未经授权的访问。", + "configurePassword": "配置密码", + "continue": "继续", + "windowWillClose": "该窗口将自动关闭...", + "closeTabNow": "您现在可以关闭此选项卡。", + "copyUrlManual": "请复制地址栏中的 URL 并将其粘贴到应用程序中。", + "accessDeniedDescription": "您无权访问此资源。检查您的 API 密钥或联系管理员。", + "goToDashboard": "转到仪表板", + "featureMultiProviderTitle": "多提供商", + "featureMultiProviderDesc": "OpenAI、Anthropic、Google 等", + "featureLoadBalancingTitle": "负载均衡", + "featureLoadBalancingDesc": "智能分配请求", + "featureUsageTrackingTitle": "使用情况追踪", + "featureUsageTrackingDesc": "监控成本和代币", + "resetPassword": "重置密码", + "resetDescription": "选择一种方法来恢复对仪表板的访问权限", + "stopServer": "停止 OmniRoute 服务器", + "processing": "处理中...", + "pleaseWait": "我们正在完成授权,请稍候。", + "authSuccess": "授权成功!", + "copyUrl": "复制此网址", + "accessDenied": "访问被拒绝", + "methodCliTitle": "方法 1:CLI 重置", + "methodCliDescription": "在运行 OmniRoute 的服务器上运行以下命令:", + "methodCliHint": "这将提示您设置新密码。必须首先停止服务器。", + "methodManualTitle": "方法二:手动复位", + "methodManualDescription": "从数据库中删除密码并在启动时设置新密码:", + "setPasswordInYour": "在您的密码中设置一个新密码", + "fileLabelSuffix": "文件:", + "newPasswordPlaceholder": "你的新密码", + "deleteSettingsFile": "删除", + "orRemovePasswordHashField": "或删除passwordHash字段", + "restartServerWithNewPassword": "重新启动服务器 - 它将使用新密码", + "backToLogin": "返回登录", + "forgotPassword": "忘记密码?" + }, + "landing": { + "brandName": "全方位路由", + "navigateHome": "导航至主页", + "toggleMenu": "切换菜单", + "featuresLink": "特点", + "docsLink": "文档", + "github": "GitHub", + "versionLive": "v1.0 现已上线", + "oneEndpoint": "一个端点", + "allProviders": "所有人工智能提供商", + "heroDescription": "带有 Web 仪表板的 AI 端点代理 - CLIProxyAPI 的 JavaScript 端口。与 Claude Code、OpenAI Codex、Cline、RooCode 和其他 CLI 工具无缝协作。", + "getStarted": "开始使用", + "viewOnGithub": "在 GitHub 上查看", + "powerfulFeatures": "强大的功能", + "featuresSubtitle": "在一个地方管理 AI 基础设施所需的一切,专为规模化而构建。", + "featureUnifiedEndpointTitle": "统一端点", + "featureUnifiedEndpointDesc": "通过单一标准 API URL 访问所有提供商。", + "featureEasySetupTitle": "轻松设置", + "featureEasySetupDesc": "使用 npx 命令在几分钟内启动并运行。", + "featureModelFallbackTitle": "模型回退", + "featureModelFallbackDesc": "发生故障或高延迟时自动切换提供商。", + "featureUsageTrackingTitle": "使用情况追踪", + "featureUsageTrackingDesc": "所有模型的详细分析和成本监控。", + "featureOAuthApiKeysTitle": "OAuth 和 API 密钥", + "featureOAuthApiKeysDesc": "在一个保管库中安全地管理凭据。", + "featureCloudSyncTitle": "云同步", + "featureCloudSyncDesc": "立即跨设备同步您的配置。", + "featureCliSupportTitle": "CLI 支持", + "featureCliSupportDesc": "适用于 Claude Code、Codex、Cline、Cursor 等。", + "featureDashboardTitle": "仪表板", + "featureDashboardDesc": "用于实时流量分析的可视化仪表板。", + "howItWorks": "OmniRoute 的工作原理", + "howItWorksDescription": "数据从您的应用程序通过我们的智能路由层无缝流向最适合该工作的提供商。", + "howItWorksStep1Title": "1. CLI 和 SDK", + "howItWorksStep1Description": "您的请求从您最喜欢的工具或我们的统一 SDK 开始。只需更改基本 URL 即可。", + "howItWorksStep2Title": "2.OmniRoute 中心", + "howItWorksStep2Description": "我们的引擎分析提示、检查提供商的运行状况以及最低延迟或成本的路线。", + "howItWorksStep3Title": "3.人工智能提供商", + "howItWorksStep3Description": "OpenAI、Anthropic、Gemini 或其他公司会立即满足该请求。", + "getStartedIn30Seconds": "30 秒内开始", + "getStartedDescription": "安装 OmniRoute,通过 Web 仪表板配置您的提供商,并开始路由 AI 请求。", + "installOmniRoute": "安装 OmniRoute", + "installStepDescription": "运行 npx 命令立即启动服务器", + "openDashboard": "打开仪表板", + "openDashboardStepDescription": "通过 Web 界面配置提供商和 API 密钥", + "routeRequests": "路线请求", + "routeRequestsStepDescription": "将您的 CLI 工具指向 {endpoint}", + "terminal": "终端", + "copy": "复制", + "copied": "✓ 已复制", + "startingOmniRoute": "正在启动 OmniRoute...", + "serverRunningOnLabel": "服务器运行于", + "dashboardLabel": "仪表板", + "readyToRoute": "准备好路线! ✓", + "configureProvidersNote": "📝 在仪表板中配置提供程序或使用环境变量", + "dataLocation": "数据位置:", + "dataLocationMacLinux": " macOS/Linux:", + "dataLocationWindows": " 窗户:", + "product": "产品展示", + "dashboardLink": "仪表板", + "changelog": "变更日志", + "resources": "资源", + "documentation": "文档", + "npm": "国家公共管理", + "legal": "法律", + "mitLicense": "麻省理工学院许可证", + "footerTagline": "AI 生成的统一端点。轻松连接、路由和管理您的 AI 提供商。", + "copyright": "© {year} OmniRoute。版权所有。", + "flowToolClaudeCode": "克劳德·科德", + "flowToolOpenAICodex": "OpenAI 法典", + "flowToolCline": "克莱因", + "flowToolCursor": "光标", + "flowProviderOpenAI": "开放人工智能", + "flowProviderAnthropic": "人择", + "flowProviderGemini": "双子座", + "flowProviderGithubCopilot": "GitHub 副驾驶", + "interactiveDiagram": "桌面上可见的交互式图表", + "ctaTitle": "准备好简化您的人工智能基础设施了吗?", + "ctaDescription": "与开发人员一起简化 AI 与 OmniRoute 的集成。开源且免费启动。", + "startFree": "免费开始", + "readDocumentation": "阅读文档" + }, + "docs": { + "title": "文档", + "quickStart": "快速入门", + "features": "特点", + "supportedProviders": "支持的提供商", + "supportedProvidersToc": "供应商", + "commonUseCases": "常见用例", + "clientCompatibility": "客户端兼容性", + "apiReference": "API参考", + "method": "方法", + "path": "路径", + "notes": "注释", + "modelPrefixes": "型号前缀", + "prefix": "前缀", + "troubleshooting": "故障排除", + "supportsChat": "支持聊天和响应端点。", + "oauthAutoRefresh": "具有自动令牌刷新功能的 OAuth 连接。", + "fullStreaming": "对所有型号的完全流媒体支持。", + "docsLabel": "文档", + "docsHeroDescription": "适用于多提供商法学硕士的人工智能网关。 OpenAI、Anthropic、Gemini、GitHub Copilot、Claude Code、Cursor 以及 20 多个提供商的一个端点。", + "openDashboard": "打开仪表板", + "endpointPage": "端点页面", + "github": "GitHub", + "reportIssue": "报告问题", + "onThisPage": "在此页面上", + "documentationVersion": "文档 - v{version}", + "quickStartStep1Title": "1.安装并运行", + "quickStartStep1Prefix": "运行", + "quickStartStep1Middle": "或者从 GitHub 克隆并运行", + "quickStartStep2Title": "2. 创建API密钥", + "quickStartStep2Text": "转至端点 -> 注册密钥。每个环境生成一个密钥。", + "quickStartStep3Title": "3. 连接提供商", + "quickStartStep3Text": "通过 OAuth 登录、API 密钥或免费层自动连接添加提供商帐户。", + "quickStartStep4Title": "4. 设置客户端基本 URL", + "quickStartStep4Prefix": "将您的 IDE 或 API 客户端指向", + "quickStartStep4Suffix": "例如,使用提供者前缀", + "featureRoutingTitle": "多提供商路由", + "featureRoutingText": "通过单个 OpenAI 兼容端点将请求路由到 30 多个 AI 提供商。支持聊天、响应、音频和图像 API。", + "featureCombosTitle": "组合和平衡", + "featureCombosText": "使用后备链和平衡策略创建模型组合:循环、优先级、随机、最少使用和成本优化。", + "featureUsageTitle": "使用情况和成本跟踪", + "featureUsageText": "实时令牌计数、每个提供商/模型的成本计算以及按 API 密钥和帐户划分的详细使用情况细分。", + "featureAnalyticsTitle": "分析仪表板", + "featureAnalyticsText": "可视化分析,包含随时间变化的请求、令牌、错误、延迟、成本和模型受欢迎程度的图表。", + "featureHealthTitle": "健康监测", + "featureHealthText": "实时健康检查、提供商状态、断路器状态以及具有指数退避功能的自动速率限制检测。", + "featureCliTitle": "CLI工具", + "featureCliText": "管理 IDE 配置、导出/导入备份、发现 Codex 配置文件以及从仪表板配置设置。", + "featureSecurityTitle": "安全和政策", + "featureSecurityText": "API 密钥身份验证、IP 过滤、提示注入防护、域策略、会话管理和审核日志记录。", + "featureCloudSyncTitle": "云同步", + "featureCloudSyncText": "将您的配置同步到 Cloudflare Workers,以便通过加密凭据和自动故障转移进行远程访问。", + "providersAcrossConnectionTypes": "跨三种连接类型的 {count} 提供程序。", + "manageProviders": "管理提供商", + "providersCount": "{count} 提供商", + "providerTypeFree": "免费套餐", + "providerTypeOAuth": "开放认证", + "providerTypeApiKey": "API密钥", + "useCaseSingleEndpointTitle": "许多提供商的单一端点", + "useCaseSingleEndpointText": "将客户端指向一个基本 URL 并按模型前缀进行路由(例如:gh/、cc/、kr/、openai/)。", + "useCaseFallbackTitle": "使用组合进行回退和模型切换", + "useCaseFallbackText": "在仪表板中创建组合模型,并在提供商内部轮换时保持客户端配置稳定。", + "useCaseUsageVisibilityTitle": "使用情况、成本和调试可见性", + "useCaseUsageVisibilityText": "在“使用情况”和“分析”选项卡中按提供商、帐户和 API 密钥跟踪令牌和成本。", + "clientCherryStudioTitle": "樱桃工作室", + "baseUrlLabel": "基本网址", + "chatEndpointLabel": "聊天端点", + "modelRecommendationLabel": "型号推荐:显式前缀", + "clientCodexTitle": "Codex / GitHub 副驾驶模型", + "clientCodexBullet1": "使用模型 ID", + "clientCodexBullet2": "Codex 系列模型自动路由至", + "clientCodexBullet3": "非法典模型继续", + "clientCursorTitle": "光标集成开发环境", + "clientCursorBullet1": "使用", + "clientCursorBullet1Suffix": "光标模型的前缀。", + "clientCursorBullet2": "OAuth 连接 - 从提供商页面登录。", + "clientClaudeTitle": "克劳德·代码 / 反重力", + "clientClaudeBullet1Prefix": "使用", + "clientClaudeBullet1Middle": "(克劳德)或", + "clientClaudeBullet1Suffix": "(反重力)前缀。", + "endpointChatNote": "与 OpenAI 兼容的聊天端点(默认)。", + "endpointResponsesNote": "响应 API 端点(Codex、o 系列)。", + "endpointModelsNote": "所有连接的提供商的模型目录。", + "endpointAudioNote": "音频转录(Deepgram、AssemblyAI)。", + "endpointImagesNote": "图像生成(NanoBanana)。", + "endpointRewriteChatNote": "为没有 /v1 的客户端重写帮助程序。", + "endpointRewriteResponsesNote": "重写不带 /v1 的响应帮助程序。", + "endpointRewriteModelsNote": "重写模型发现助手,无需 /v1。", + "modelPrefixesDescriptionStart": "在模型名称之前使用提供程序前缀可路由到特定提供程序。示例:", + "modelPrefixesDescriptionEnd": "路由至 GitHub Copilot。", + "provider": "提供者", + "type": "类型", + "troubleshootingModelRouting": "如果客户端模型路由失败,请使用显式提供程序/模型(例如:gh/gpt-5.1-codex)。", + "troubleshootingAmbiguousModels": "如果您收到不明确的模型错误,请选择提供程序前缀而不是裸模型 ID。", + "troubleshootingCodexFamily": "对于 GitHub Codex 系列模型,将模型保留为 gh/;路由器自动选择/响应。", + "troubleshootingTestConnection": "在从 IDE 或外部客户端进行测试之前,请使用仪表板 > 提供程序 > 测试连接。", + "troubleshootingCircuitBreaker": "如果提供商显示断路器已打开,请等待冷却或查看运行状况页面以了解详细信息。", + "troubleshootingOAuth": "对于 OAuth 提供商,如果令牌过期,请重新进行身份验证。检查提供商卡状态指示灯。" + }, + "legal": { + "privacyPolicy": "隐私政策", + "termsOfService": "服务条款", + "providerConfigurations": "提供商配置", + "apiKeys": "API 密钥", + "usageLogs": "使用日志", + "applicationSettings": "应用程序设置", + "viewExportAnalytics": "查看和导出使用情况分析", + "clearHistory": "随时清除使用记录", + "configureRetention": "配置日志保留策略", + "backupRestore": "备份和恢复您的数据库", + "privacyMetadataTitle": "隐私政策 |全方位路由", + "privacyMetadataDescription": "OmniRoute AI API 代理路由器的隐私政策。", + "termsMetadataTitle": "服务条款 |全方位路由", + "termsMetadataDescription": "OmniRoute AI API 代理路由器的服务条款。", + "backToHome": "回到家", + "lastUpdated": "最后更新:{date}", + "policyLastUpdatedDate": "2026 年 2 月 13 日", + "listSeparator": "-", + "questionsVisit": "有问题吗?访问我们的", + "githubRepository": "GitHub 存储库", + "privacySection1Title": "1. 本地优先架构", + "privacySection1Text": "OmniRoute 被设计为本地优先的应用程序。所有数据处理和存储完全发生在您的机器上。没有集中服务器收集您的信息。", + "privacySection2Title": "2. 我们存储的数据", + "privacyDataStoredIn": "以下数据存储在本地", + "privacyDataProviderConfigurationsDesc": "连接 URL、提供程序类型和优先级设置", + "privacyDataApiKeysDesc": "加密并存储在本地,以便与人工智能提供商进行身份验证", + "privacyDataUsageLogsDesc": "请求计数、令牌使用情况、模型名称、时间戳和响应时间", + "privacyDataApplicationSettingsDesc": "主题偏好、路由策略和组合配置", + "privacySection3Title": "3. 无遥测", + "privacySection3Text": "OmniRoute 不收集遥测、分析或崩溃报告。不会向我们或任何第三方发送任何数据。您的使用模式、API 调用和配置完全保密。", + "privacySection4Title": "4. 第三方人工智能提供商", + "privacySection4Text": "当您通过 OmniRoute 进行 API 调用时,您的请求将转发到您已配置的 AI 提供商(例如:OpenAI、Anthropic、Google)。这些提供商有自己的隐私政策来管理他们如何处理您的数据。请查看:", + "privacyOpenAiPolicy": "OpenAI 隐私政策", + "privacyAnthropicPolicy": "人择隐私政策", + "privacyGooglePolicy": "谷歌隐私政策", + "privacySection5Title": "5. 云同步(可选)", + "privacySection5Text": "如果您启用可选的云同步功能,提供商配置和 API 密钥可能会传输到配置的云端点。此功能默认处于禁用状态,需要明确选择加入。", + "privacySection6Title": "6. 日志记录", + "privacyLoggingIntro": "可以通过仪表板设置配置请求日志。您可以:", + "privacySection7Title": "7. 您的权利", + "privacySection7TextStart": "由于所有数据都存储在本地,因此您拥有完全的控制权。您可以随时删除您的数据,方法是删除", + "privacySection7TextEnd": "目录或使用仪表板中的数据库备份和恢复功能。", + "termsSection1Title": "1. 概述", + "termsSection1Text": "OmniRoute 是本地优先的 AI API 代理路由器,完全在您的计算机上运行。它通过负载平衡、故障转移和使用情况跟踪将请求路由到多个 AI 提供商。", + "termsSection2Title": "2. 用户的责任", + "termsResponsibilityApiKeys": "您全权负责管理您自己的 API 密钥和第三方 AI 提供商(OpenAI、Anthropic、Google 等)的凭证。", + "termsResponsibilityCompliance": "您必须遵守您通过 OmniRoute 访问其 API 的每个 AI 提供商的服务条款。", + "termsResponsibilitySecurity": "您负责本地 OmniRoute 安装的安全,包括设置密码和限制网络访问。", + "termsSection3Title": "3. 工作原理", + "termsSection3Text": "OmniRoute 充当中间代理。发送到 OmniRoute 的 API 调用将被转换并转发到您配置的 AI 提供商。除了必要的协议转换之外,OmniRoute 不会修改您的请求或响应的内容。", + "termsSection4Title": "4. 数据处理", + "termsDataStoredLocally": "所有数据都存储在您本地计算机上的 SQLite 数据库中。", + "termsNoTransmission": "除非您明确启用云同步功能,否则 OmniRoute 不会将任何数据传输到外部服务器。", + "termsDataLocationText": "使用日志、API 密钥和配置存储在", + "termsSection5Title": "5. 免责声明", + "termsSection5Text": "OmniRoute 按“原样”提供,不提供任何形式的保证。我们不对因 API 使用、服务中断或数据丢失而产生的任何费用负责。始终维护配置的备份。", + "termsSection6Title": "6. 开源", + "termsSection6Text": "OmniRoute 是开源软件。您可以根据其许可条款自由检查、修改和分发它。" + } +}