From b2fc36ad08b5faed38149b072d1e78a0cdf82e9b Mon Sep 17 00:00:00 2001 From: Giacomo Masiero <90463906+Gecky2102@users.noreply.github.com> Date: Thu, 6 Aug 2026 03:45:48 +0300 Subject: [PATCH] feat(i18n): update italian translations (#9280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validated in local merge-train (devbox-vm-06-dev002) @ combined-tip (FAST gates green: static + changed tests + vitest — only pre-existing audit.test.ts flake). Evidence: /home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/merge-train-20260805-213228-suite.log --- src/i18n/messages/it.json | 168 +++++++++++++++++++------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 4d14b8f216..8d1ccb448c 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -937,7 +937,7 @@ "disabled": "Disabilitato", "featureFlagOmnirouteEmergencyFallbackDescription": "Indirizza le richieste con budget esaurito al provider/modello di fallback gratuito di emergenza.", "featureFlagArenaEloSyncEnabledDescription": "Abilita la sincronizzazione periodica dell'ELO della classifica Arena AI per le graduatorie di intelligenza dei modelli.", - "featureFlagExposeCcDiscoveryAliasesDescription": "__MISSING__:Advertise claude/<provider>/<model> mirror ids on /v1/models so Claude Code gateway model discovery lists non-Claude models. Warning: doubles catalog entries for all clients when enabled globally.", + "featureFlagExposeCcDiscoveryAliasesDescription": "Mostra gli id specchio claude// su /v1/models in modo che la scoperta dei modelli gateway di Claude Code elenchi i modelli non-Claude. Attenzione: raddoppia le voci nel catalogo per tutti i client quando abilitato globalmente.", "sidebar": { "home": "Casa", "dashboard": "Pannello di controllo", @@ -1055,7 +1055,7 @@ "combosLive": "Combo Studio", "combosLiveSubtitle": "Cascata di routing in tempo reale", "compressionStudio": "Compression Studio", - "compressionExclusions": "__MISSING__:Exclusions", + "compressionExclusions": "Esclusioni", "contextSettingsSubtitle": "Impostazioni predefinite globali", "contextHeadroomSubtitle": "Compattazione tabellare", "contextSessionDedupSubtitle": "Deduplicazione cross-turn", @@ -1066,7 +1066,7 @@ "contextUltraSubtitle": "Potatura euristica", "contextOmniglyphSubtitle": "Contesto come immagini", "compressionStudioSubtitle": "Cascata del motore in tempo reale", - "compressionExclusionsSubtitle": "__MISSING__:Per-model/endpoint bypass", + "compressionExclusionsSubtitle": "Bypass per-modello/endpoint", "chaosConfigSubtitle": "Esecuzione parallela multi-modello", "routingSection": "Routing", "protocolsSection": "Protocols", @@ -1107,7 +1107,7 @@ "settingsSecurity": "Security", "settingsAccessTokens": "Token di accesso", "settingsFeatureFlags": "Flag di funzionalità", - "settingsCache": "__MISSING__:Cache", + "settingsCache": "Cache", "settingsAuthz": "Authz", "settingsRouting": "Routing", "settingsResilience": "Resilience", @@ -1164,7 +1164,7 @@ "logsSubtitle": "Application logs", "logsProxySubtitle": "Proxy traffic logs", "consoleLogsSubtitle": "Console output", - "logsTimelineSubtitle": "__MISSING__:Visual request timeline", + "logsTimelineSubtitle": "Timeline visiva delle richieste", "logsActivitySubtitle": "User activity log", "healthSubtitle": "System health check", "costsPricingSubtitle": "Per-model pricing rules", @@ -1194,7 +1194,7 @@ "settingsSecuritySubtitle": "Auth and encryption", "settingsAccessTokensSubtitle": "Token CLI con ambito per la modalità remota", "settingsFeatureFlagsSubtitle": "Attiva/disattiva le funzionalità del sistema", - "settingsCacheSubtitle": "__MISSING__:Model catalog and response caching", + "settingsCacheSubtitle": "Catalogo modelli e caching delle risposte", "settingsSidebar": "Sidebar", "settingsSidebarSubtitle": "Customize sidebar layout", "settingsAuthzSubtitle": "Inventario delle route e criteri di bypass", @@ -1557,7 +1557,7 @@ "settingsGeneralDescription": "Storage, database, and general instance configuration", "settingsAppearanceDescription": "Theme, branding, and visual customization", "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings", - "settingsCacheDescription": "__MISSING__:TTL for model catalog cache entries", + "settingsCacheDescription": "TTL per le voci di cache del catalogo modelli", "settingsSecurityDescription": "Authentication, authorization, and access control settings", "featureFlags": "Flag di funzionalità", "featureFlagsDescription": "Capacità del sistema di controllo e caratteristiche sperimentali", @@ -2946,14 +2946,14 @@ "copilotReloadInstruction": "Quindi ricarica VS Code e imposta la chiave API nel prompt di input.", "wireApiChatCompletions": "Completamenti chat (/chat/completamenti)", "wireApiResponses": "API delle risposte (/responses)", - "ccDiscoveryInfoButton": "__MISSING__:How to enable discovery in Claude Code", - "ccDiscoveryInfoTooltip": "__MISSING__:Advertise non-Claude models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Doubles catalog entries for all clients when enabled globally.", - "ccDiscoveryInfoLink": "__MISSING__:Open Feature Flags", - "ccOnboardingTitle": "__MISSING__:settings.json for gateway model discovery", - "ccOnboardingCopy": "__MISSING__:Copy", - "ccOnboardingCopied": "__MISSING__:Copied", - "ccOnboardingKeyPlaceholder": "__MISSING__:", - "ccOnboardingWindowNote": "__MISSING__:Claude Code assumes a 200K context window for any model id it does not recognize. For a model with a different real window, add CLAUDE_CODE_AUTO_COMPACT_WINDOW just under it so auto-compaction does not fire too early." + "ccDiscoveryInfoButton": "Come abilitare la scoperta in Claude Code", + "ccDiscoveryInfoTooltip": "Mostra i modelli non-Claude sotto gli id specchio claude// così la scoperta modelli gateway di Claude Code può elencarli. Raddoppia le voci nel catalogo per tutti i client quando abilitato globalmente.", + "ccDiscoveryInfoLink": "Apri le Flag Funzionalità", + "ccOnboardingTitle": "settings.json per la scoperta modelli gateway", + "ccOnboardingCopy": "Copia", + "ccOnboardingCopied": "Copiato", + "ccOnboardingKeyPlaceholder": "", + "ccOnboardingWindowNote": "Claude Code assume una finestra di contesto di 200K per qualsiasi id modello non riconosciuto. Per un modello con una finestra reale diversa, aggiungi CLAUDE_CODE_AUTO_COMPACT_WINDOW subito sotto in modo che l'auto-compattazione non si attivi troppo presto." }, "combos": { "title": "Combinazioni", @@ -3704,7 +3704,7 @@ "modelsCount": "{count, plural, one {# model} other {# models}}", "sectionTitle": "Integration Surface", "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints", - "tabApis": "__MISSING__:APIs", + "tabApis": "API", "tabProtocols": "Protocols", "tabsAria": "Endpoint sections", "protocolsTitle": "Protocols", @@ -5411,8 +5411,8 @@ "t3ChatWebCookieHint": "Apri t3.chat → DevTools → Applicazione → Archiviazione locale → https://t3.chat, copia 'convex-session-id'. Quindi apri DevTools → Rete, copia l'intestazione completa del cookie da qualsiasi richiesta di chat. Incolla entrambi i valori nei campi sottostanti.", "t3ChatWebCookiePlaceholder": "convex-session-id=abc123...", "grokWebCookieHint": "Grok Web Cookie Hint", - "blockClaudeExtraUsageDescription": "__MISSING__:When enabled, OmniRoute marks this Claude connection unavailable as soon as the usage API reports queued extra usage, so fallback switches to another connection instead of continuing on pay-as-you-go extra billing.", - "blockClaudeExtraUsageLabel": "__MISSING__:Block extra Claude usage", + "blockClaudeExtraUsageDescription": "Se abilitato, OmniRoute segna questa connessione Claude come non disponibile non appena l'API di utilizzo segnala extra usage in coda, in modo che il fallback passi a un'altra connessione invece di continuare con una fatturazione extra pay-as-you-go.", + "blockClaudeExtraUsageLabel": "Blocca l'extra usage di Claude", "disableCoolingDescription": "Salta il cooldown transitorio in modo che questa connessione rimanga idonea anche dopo errori ripristinabili (gli stati terminali come bannato/scaduto si applicano ancora).", "disableCoolingLabel": "Disabilita il cooldown per questa connessione", "bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}", @@ -5591,13 +5591,13 @@ "importGrokAuth": "Importa autenticazione Grok Build", "zedImportTitle": "Importa da Zed Keychain", "zedImportDescription": "Trova le credenziali dei provider AI (OpenAI, Anthropic, Google, Mistral, xAI) memorizzate da Zed IDE nel portachiavi del sistema operativo e importale come connessioni. Zed IDE deve essere installato su questa macchina.", - "zedImportButton": "__MISSING__:Import from Zed", - "zedImportFailed": "__MISSING__:Zed import failed", + "zedImportButton": "Importa da Zed", + "zedImportFailed": "Importazione da Zed fallita", "zedImportHint": "Zed Import Hint", "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", - "zedImportSuccess": "__MISSING__:Imported {credentials} credential(s) from Zed for {providers} provider(s)", - "zedImporting": "__MISSING__:Importing…", + "zedImportSuccess": "Importate {credentials} credenziali da Zed per {providers} provider", + "zedImporting": "Importazione in corso…", "zedNoCredentials": "Nessuna credenziale Zed trovata nel portachiavi", "zedUnsupportedCredentials": "Trovate {count} credenziali nel portachiavi, ma nessuna corrisponde ai provider supportati", "zedManualTitle": "Importazione manuale del token", @@ -5743,7 +5743,7 @@ "bailian-coding-plan": "Connetti Alibaba Coding Plan con una chiave API.", "bedrock": "Integrazione nativa di Bedrock: l'individuazione dei modelli utilizza i modelli di base e i profili di inferenza di Bedrock, mentre la chat utilizza le API regionali Bedrock Runtime Converse/ConverseStream.", "anthropic": "Connetti Anthropic con una chiave API.", - "ant-ling": "__MISSING__:Register and create an API key at the Ant Ling API console (https://chat.ant-ling.com/open), then paste it here. OmniRoute routes chat traffic to https://api.ant-ling.com/v1/chat/completions; the provider is OpenAI-compatible and also exposes an Anthropic-compatible surface.", + "ant-ling": "Registrati e crea una chiave API nella console API di Ant Ling (https://chat.ant-ling.com/open), poi incollala qui. OmniRoute instrada il traffico chat verso https://api.ant-ling.com/v1/chat/completions; il provider è compatibile con OpenAI ed espone anche una superficie compatibile con Anthropic.", "api-airforce": "Ottieni la tua chiave API da https://panel.api.airforce — endpoint compatibile con OpenAI su https://api.airforce/v1", "arcee-ai": "Ottieni la chiave API su arcee.ai", "azure-ai": "Foundry utilizza l'interfaccia OpenAI v1 con i nomi di deployment come modelli. OmniRoute normalizza gli URL delle risorse radice agli endpoint chat v1 e /models.", @@ -5764,7 +5764,7 @@ "chutes": "Chiave API Bearer per il gateway compatibile con OpenAI di Chutes.", "clarifai": "Clarifai espone chat, risposte e /models compatibili con OpenAI su /v2/ext/openai/v1. I modelli pubblici/della community richiedono in genere un PAT; le chiavi con ambito app funzionano solo per le risorse all'interno di quell'app.", "cloudflare-ai": "Richiede un token API E un ID account (disponibile su dash.cloudflare.com)", - "clova-studio": "__MISSING__:CLOVA Studio (HyperCLOVA X) is OpenAI-compatible on /v1/openai. OmniRoute probes /v1/openai/models and routes chat traffic to /v1/openai/chat/completions. Uses the current clovastudio.stream.ntruss.com host — the legacy clovastudio.apigw.ntruss.com endpoint is being deprecated.", + "clova-studio": "CLOVA Studio (HyperCLOVA X) è compatibile con OpenAI su /v1/openai. OmniRoute controlla /v1/openai/models e instrada il traffico chat verso /v1/openai/chat/completions. Usa l'attuale host clovastudio.stream.ntruss.com — il vecchio endpoint clovastudio.apigw.ntruss.com è in fase di deprecazione.", "codestral": "Connetti Codestral con una chiave API.", "cohere": "Prova gratuita: 1.000 chiamate API/mese per i test, nessuna carta di credito richiesta", "command-code": "Crea o copia una chiave API da Command Code, quindi incollala qui come token Bearer.", @@ -5809,9 +5809,9 @@ "watsonx": "Il model gateway watsonx espone /chat/completions e /models compatibili con OpenAI sotto /ml/gateway/v1.", "ideogram": "Ottieni la chiave API su ideogram.ai/docs/api", "iflytek": "Ottieni la chiave API su console.xfyun.cn", - "inception": "__MISSING__:Inception Labs is OpenAI-compatible at https://api.inceptionlabs.ai/v1. mercury-2 is the first diffusion LLM (dLLM) in the catalog — 5-10x faster generation than comparable autoregressive models, with tool calling, json_mode, and structured outputs.", + "inception": "Inception Labs è compatibile con OpenAI all'indirizzo https://api.inceptionlabs.ai/v1. mercury-2 è il primo LLM di diffusione (dLLM) nel catalogo — generazione 5-10x più veloce rispetto ai modelli autoregressivi comparabili, con tool calling, json_mode e structured outputs.", "inference-net": "25 $ di crediti gratuiti alla registrazione più borse di ricerca disponibili", - "internlm": "__MISSING__:Free monthly quota ~1M input / 3M output tokens (~10 RPM)", + "internlm": "Quota mensile gratuita ~1M token input / 3M output (~10 RPM)", "jina-ai": "Chiave API Bearer per l'API di rerank di Jina AI.", "jina-reader": "Connetti Jina Reader con una chiave API.", "kenari": "Kenari espone un endpoint di completamento chat compatibile con OpenAI all'indirizzo https://kenari.id/v1/chat/completions, oltre a un catalogo live /v1/models che copre Claude, GPT, DeepSeek, GLM, Kimi e altri. OmniRoute utilizza il protocollo OpenAI ed elenca i modelli tramite passthrough.", @@ -5858,7 +5858,7 @@ "perplexity": "Connetti Perplexity con una chiave API.", "piapi": "Connetti PiAPI con una chiave API.", "pioneer": "$75 di crediti di utilizzo gratuiti — nessuna carta di credito richiesta", - "plamo": "__MISSING__:PLaMo is OpenAI-compatible at https://api.platform.preferredai.jp/v1. Built by Preferred Networks and optimized for Japanese. Docs are primarily in Japanese.", + "plamo": "PLaMo è compatibile con OpenAI all'indirizzo https://api.platform.preferredai.jp/v1. Sviluppato da Preferred Networks e ottimizzato per il giapponese. La documentazione è principalmente in giapponese.", "poe": "Poe espone chat e risposte compatibili con OpenAI su https://api.poe.com/v1, con controlli del saldo autenticati su /usage/current_balance.", "pollinations": "Livello gratuito senza chiave: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. I modelli premium (claude, gemini, midijourney) richiedono una chiave API Pollinations da enter.pollinations.ai.", "publicai": "Richiede una chiave API — credito di registrazione una tantum, poi a pagamento", @@ -5870,7 +5870,7 @@ "runwayml": "La generazione video di Runway è basata su task. OmniRoute invia lavori text-to-video o image-to-video, interroga /v1/tasks/[id] e normalizza gli output video completati nella risposta simile a OpenAI /v1/videos/generations.", "sambanova": "$5 di crediti gratuiti alla registrazione (validità 30 giorni), nessuna carta di credito richiesta", "sap": "La scoperta dei modelli utilizza /v2/lm/scenarios/foundation-models/models su AI_API_URL. Le richieste di chat utilizzano deploymentUrl/chat/completions e richiedono AI-Resource-Group.", - "sarvam": "__MISSING__:Sarvam AI is OpenAI-compatible on /v1. OmniRoute probes /v1/models and routes chat traffic to /v1/chat/completions. Models are tuned for Indic languages.", + "sarvam": "Sarvam AI è compatibile con OpenAI su /v1. OmniRoute controlla /v1/models e instrada il traffico chat verso /v1/chat/completions. I modelli sono ottimizzati per le lingue indiane.", "scaleway": "1M di token gratuiti per i nuovi account — conforme a UE/GDPR (Parigi), Qwen3 235B & Llama 70B", "sensenova": "Ottieni la chiave API su platform.sensenova.cn", "siliconflow": "$1 di crediti gratuiti più modelli permanentemente gratuiti dopo la verifica dell'identità", @@ -5887,7 +5887,7 @@ "together": "Connetti Together AI con una chiave API.", "tokenrouter": "TokenRouter espone un endpoint di completamento chat compatibile con OpenAI all'indirizzo https://api.tokenrouter.com/v1/chat/completions, oltre a un catalogo /v1/models funzionante. OmniRoute utilizza il protocollo OpenAI.", "topaz": "Connetti Topaz con una chiave API.", - "typhoon": "__MISSING__:Typhoon is OpenAI-compatible on /v1. Built by SCB 10X (Thailand); typhoon-v2.5-30b-a3b-instruct is a thai-first, multilingual model.", + "typhoon": "Typhoon è compatibile con OpenAI su /v1. Creato da SCB 10X (Thailandia); typhoon-v2.5-30b-a3b-instruct è un modello multilingue con priorità al thailandese.", "udio": "Incolla il cookie di sessione da udio.com (autenticazione Supabase)", "uncloseai": "Nessuna autenticazione richiesta. L'API accetta qualsiasi stringa non vuota come chiave per l'identificazione.", "upstage": "Connetti Upstage con una chiave API.", @@ -5900,7 +5900,7 @@ "voyage-ai": "Chiave API Bearer per le API di embedding e rerank di Voyage AI.", "wafer": "Chiave API da https://wafer.ai", "wandb": "Connetti Weights & Biases Inference con una chiave API.", - "writer": "__MISSING__:Writer Palmyra is OpenAI-compatible at https://api.writer.com/v1. palmyra-x5 offers a 1M-token context window.", + "writer": "Writer Palmyra è compatibile con OpenAI all'indirizzo https://api.writer.com/v1. palmyra-x5 offre una finestra di contesto di 1M di token.", "x5lab": "X5Lab espone un endpoint di completamento chat compatibile con OpenAI all'indirizzo https://api.x5lab.dev/v1/chat/completions, oltre a un catalogo live /v1/models. OmniRoute utilizza il protocollo OpenAI ed elenca i modelli tramite passthrough.", "xai": "Connetti xAI (Grok) con una chiave API.", "xiaomi-mimo": "Connetti Xiaomi MiMo con una chiave API.", @@ -5981,18 +5981,18 @@ "cheaperInferenceSupporterBadge": "Amico open source", "cheaperInferenceSupporterTooltip": "Cheaper Inference sostiene OmniRoute come amico open source", "kimiPartnerLinkNote": "Link partner — supporta OmniRoute senza costi aggiuntivi per te", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}" + "ccAliasSectionTitle": "Esponi in Claude Code (claude/…)", + "ccAliasSectionHint": "Mostra i modelli di questo provider sotto gli id specchio claude// così la scoperta modelli gateway di Claude Code può elencarli. Disattivato per impostazione predefinita — abilitarlo raddoppia le voci nel catalogo per tutti i client.", + "ccAliasProviderLevelLabel": "Impostazione predefinita del provider", + "ccAliasModelOverridesLabel": "Sostituzioni per modello", + "ccAliasModelOverrideAriaLabel": "Sostituzione per {modelId}", + "ccAliasStateInherit": "Eredita", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Id modello (es. gpt-4o)", + "ccAliasAddModelButton": "Aggiungi sostituzione", + "ccAliasLoadError": "Impossibile caricare le impostazioni discovery-alias: {error}", + "ccAliasSaveError": "Impossibile salvare l'impostazione discovery-alias: {error}" }, "settings": { "title": "Impostazioni", @@ -6087,18 +6087,18 @@ "requestBodyLimitSaving": "Saving...", "requestBodyLimitSave": "Save", "requestBodyLimitCurrent": "Current: {value}", - "cacheConfigLoadFailed": "__MISSING__:Failed to load cache settings", - "cacheConfigSaveSuccess": "__MISSING__:Cache settings saved", - "cacheConfigSaveFailed": "__MISSING__:Failed to save cache settings", - "modelCatalogTtlWholeNumberError": "__MISSING__:Use a whole number", - "modelCatalogTtlMinimumError": "__MISSING__:Minimum is {min} ms", - "modelCatalogTtlMaximumError": "__MISSING__:Maximum is {max} ms", - "modelCatalogCacheTtl": "__MISSING__:Model Catalog Cache TTL", - "modelCatalogCacheTtlDescription": "__MISSING__:How long model catalog responses are cached before refreshing", - "modelCatalogCacheTtlLabel": "__MISSING__:Model catalog cache TTL in milliseconds", - "modelCatalogCacheTtlSaving": "__MISSING__:Saving...", - "modelCatalogCacheTtlSave": "__MISSING__:Save", - "modelCatalogCacheTtlCurrent": "__MISSING__:Current: {value} ms", + "cacheConfigLoadFailed": "Impossibile caricare le impostazioni della cache", + "cacheConfigSaveSuccess": "Impostazioni della cache salvate", + "cacheConfigSaveFailed": "Impossibile salvare le impostazioni della cache", + "modelCatalogTtlWholeNumberError": "Usa un numero intero", + "modelCatalogTtlMinimumError": "Il minimo è {min} ms", + "modelCatalogTtlMaximumError": "Il massimo è {max} ms", + "modelCatalogCacheTtl": "TTL Cache Catalogo Modelli", + "modelCatalogCacheTtlDescription": "Per quanto tempo le risposte del catalogo modelli vengono memorizzate nella cache prima di essere aggiornate", + "modelCatalogCacheTtlLabel": "TTL cache catalogo modelli in millisecondi", + "modelCatalogCacheTtlSaving": "Salvataggio in corso...", + "modelCatalogCacheTtlSave": "Salva", + "modelCatalogCacheTtlCurrent": "Attuale: {value} ms", "mitmProxy": "Procura MITM", "pricing": "Prezzi", "storage": "Magazzinaggio", @@ -6752,7 +6752,7 @@ "howPricingWorks": "Come funzionano i prezzi", "cacheWrite": "Scrittura nella cache", "unsaved": "non salvato", - "resetDefaults": "__MISSING__:Reset defaults", + "resetDefaults": "Ripristina impostazioni predefinite", "saveProvider": "Salva fornitore", "model": "Modello", "models": "modelli", @@ -6806,7 +6806,7 @@ "purgeLogsFailed": "Failed to purge logs", "logsDeleted": "{count, plural, =0 {Nessun log scaduto eliminato} one {Eliminato # log scaduto} other {Eliminati # log scaduti}}", "resetUsageData": "Ripristina Dati di Utilizzo", - "resetUsageDataDesc": "__MISSING__:Select how far back you want to delete usage, request logs, and analytics data. Provider configuration, connections, API keys, combos, and settings are preserved. This action cannot be undone.", + "resetUsageDataDesc": "Scegli da quanto tempo fa vuoi eliminare l'uso, i log delle richieste e i dati di analisi. Configurazione dei provider, connessioni, chiavi API, combo e impostazioni vengono conservati. Questa azione non può essere annullata.", "resetUsagePeriod_5m": "5 minuti", "resetUsagePeriod_1h": "1 ora", "resetUsagePeriod_3h": "3 ore", @@ -6932,13 +6932,13 @@ "compressionPreserveSystemNever": "Mai", "compressionLiveZoneTitle": "Live Zone allineata alla cache", "compressionLiveZoneDesc": "Mantieni stabile il prefisso della conversazione compressa ed elabora solo gli elementi aggiunti di recente.", - "compressionExclusionsTitle": "__MISSING__:Compression Exclusions", - "compressionExclusionsDesc": "__MISSING__:Model ids or provider/model patterns that must never be compressed. `*` is the only wildcard (e.g. `openai/*`, `*embedding*`). A matching request passes through byte-identical — no compression engine runs.", - "compressionExclusionsPlaceholder": "__MISSING__:One pattern per line, e.g.\nopenai/text-embedding-3-large\nanthropic/*", - "compressionExclusionsSave": "__MISSING__:Save", - "compressionExclusionsSaved": "__MISSING__:Saved", - "compressionExclusionsCount": "__MISSING__:{count, plural, one {# exclusion} other {# exclusions}} configured", - "compressionExclusionsEmpty": "__MISSING__:No exclusions configured — every model/endpoint is eligible for compression (default behavior).", + "compressionExclusionsTitle": "Esclusioni Compressione", + "compressionExclusionsDesc": "Id di modelli o pattern provider/modello che non devono mai essere compressi. `*` è l'unico jolly (es. `openai/*`, `*embedding*`). Una richiesta corrispondente passa identica byte per byte — nessun motore di compressione viene eseguito.", + "compressionExclusionsPlaceholder": "Un pattern per riga, es.\nopenai/text-embedding-3-large\nanthropic/*", + "compressionExclusionsSave": "Salva", + "compressionExclusionsSaved": "Salvato", + "compressionExclusionsCount": "{count, plural, one {# esclusione} other {# esclusioni}} configurate", + "compressionExclusionsEmpty": "Nessuna esclusione configurata — ogni modello/endpoint è idoneo alla compressione (comportamento predefinito).", "compressionCavemanConfig": "Caveman Engine Configuration", "compressionCavemanConfigDesc": "Fine-tune the rule-based compression engine", "compressionCavemanPanelHint": "L'attivazione e il livello si impostano nel panel:", @@ -7493,9 +7493,9 @@ "resilienceEnableServerWaitDesc": "Quando abilitato, OmniRoute attende la scadenza del primo tempo di recupero e riprova automaticamente.", "resilienceMaxAttempts": "Tentativi massimi", "resilienceMaxWaitPerAttempt": "Attesa massima per tentativo", - "resilienceComboCooldownWaitTitle": "__MISSING__:Combo cooldown wait", - "resilienceComboCooldownWaitDesc": "__MISSING__:For all combo strategies: wait out a short transient cooldown and re-dispatch instead of returning a 429 immediately. Never waits on quota_exhausted.", - "resilienceComboCooldownWaitToggleDesc": "__MISSING__:All combo strategies; never waits on quota_exhausted.", + "resilienceComboCooldownWaitTitle": "Attesa di cooldown della combo", + "resilienceComboCooldownWaitDesc": "Per tutte le strategie combo: attendi un breve cooldown temporaneo e inoltra nuovamente invece di restituire immediatamente un 429. Non attende mai per quota_exhausted.", + "resilienceComboCooldownWaitToggleDesc": "Tutte le strategie combo; non attende mai per quota_exhausted.", "resilienceComboCooldownMaxWaitMs": "Attesa massima per tentativo", "resilienceComboCooldownBudgetMs": "Budget attesa totale", "resilienceQuotaShareConcurrencyTitle": "Concorrenza per connessione quota-share", @@ -9723,23 +9723,23 @@ "deviceCodeVerificationUrl": "URL di verifica", "deviceCodeYourCode": "Il tuo codice", "deviceCodeWaiting": "In attesa di autorizzazione...", - "googleLoopbackTitle": "__MISSING__:Google sign-in can't complete from this address", - "googleLoopbackWhatHappens": "__MISSING__:Google only releases the authorization code once {redirectUri} is reachable from the browser that approves the sign-in. Here that address points at this computer, not at the OmniRoute server — so the consent screen hangs instead of redirecting, and there is no callback URL to copy.", - "googleLoopbackRecommended": "__MISSING__:Recommended — run this on your own computer, then paste the result below:", - "googleLoopbackHelperNote": "__MISSING__:It opens the Google consent locally (where 127.0.0.1 works) and prints a one-line omniroute-cred-v1.… blob. Paste that blob into the Step 2 field below — it accepts a credential blob as well as a callback URL.", - "googleLoopbackTunnelLabel": "__MISSING__:Or forward the dashboard port over SSH and reload OmniRoute through the tunnel:", - "googleLoopbackTunnelNote": "__MISSING__:Replace {userPlaceholder} with your SSH username, keep the terminal open, then open {localUrl} and connect again from there.", - "googleLoopbackHeadlessAlt": "__MISSING__:For fully headless use with no local callback at all, configure your own Google OAuth credentials plus a public base URL.", + "googleLoopbackTitle": "L'accesso con Google non può essere completato da questo indirizzo", + "googleLoopbackWhatHappens": "Google rilascia il codice di autorizzazione solo una volta che {redirectUri} è raggiungibile dal browser che approva l'accesso. Qui quell'indirizzo punta a questo computer, non al server OmniRoute — quindi la schermata di consenso si blocca invece di reindirizzare, e non c'è nessun URL di callback da copiare.", + "googleLoopbackRecommended": "Consigliato — esegui questo sul tuo computer, poi incolla il risultato qui sotto:", + "googleLoopbackHelperNote": "Apre il consenso di Google localmente (dove 127.0.0.1 funziona) e stampa un blocco omniroute-cred-v1.… su una sola riga. Incolla quel blocco nel campo Step 2 qui sotto — accetta un blocco di credenziali così come un URL di callback.", + "googleLoopbackTunnelLabel": "Oppure inoltra la porta della dashboard tramite SSH e ricarica OmniRoute attraverso il tunnel:", + "googleLoopbackTunnelNote": "Sostituisci {userPlaceholder} con il tuo username SSH, tieni il terminale aperto, quindi apri {localUrl} e connettiti di nuovo da lì.", + "googleLoopbackHeadlessAlt": "Per un uso completamente headless senza alcun callback locale, configura le tue credenziali Google OAuth più un URL di base pubblico.", "remoteAccessInfo": "Accesso remoto: poiché stai accedendo a OmniRoute da remoto, dopo l'autorizzazione vedrai una pagina di errore (localhost non trovato). Questo è normale: basta copiare l'URL completo dalla barra degli indirizzi del browser e incollarlo di seguito.", - "loopbackMismatchTitle": "__MISSING__:Sign-in can't complete from this address", - "loopbackMismatchWhatHappened": "__MISSING__:What's happening", - "loopbackMismatchExplanation": "__MISSING__:After you approve the login, {providerName} always sends the browser back to {redirectUri}. That address points at the computer running this browser, not at the OmniRoute server — so the authorization code never reaches OmniRoute and the provider fails the sign-in without showing an error.", - "loopbackMismatchHowToFix": "__MISSING__:How to fix it", - "loopbackMismatchStep1": "__MISSING__:On this computer, open a terminal and start an SSH tunnel to the OmniRoute server:", - "loopbackMismatchStep1Note": "__MISSING__:Replace {userPlaceholder} with your SSH username. Keep this terminal open until the connection shows as active — both ports are needed: one serves the dashboard, the other receives the callback.", - "loopbackMismatchStep2": "__MISSING__:In this browser, reopen OmniRoute through the tunnel:", - "loopbackMismatchStep3": "__MISSING__:Then connect {providerName} again from the new tab. The callback now reaches the server and the login completes normally.", - "loopbackMismatchAlternative": "__MISSING__:No SSH access? If this provider offers a token import tab, connect with a token instead — that path doesn't use a loopback callback.", + "loopbackMismatchTitle": "L'accesso non può essere completato da questo indirizzo", + "loopbackMismatchWhatHappened": "Cosa sta succedendo", + "loopbackMismatchExplanation": "Dopo che hai approvato l'accesso, {providerName} rimanda sempre il browser a {redirectUri}. Quell'indirizzo punta al computer che esegue questo browser, non al server OmniRoute — quindi il codice di autorizzazione non raggiunge mai OmniRoute e il provider fa fallire l'accesso senza mostrare un errore.", + "loopbackMismatchHowToFix": "Come risolvere", + "loopbackMismatchStep1": "Su questo computer, apri un terminale e avvia un tunnel SSH verso il server OmniRoute:", + "loopbackMismatchStep1Note": "Sostituisci {userPlaceholder} con il tuo username SSH. Tieni questo terminale aperto finché la connessione non risulta attiva — sono necessarie entrambe le porte: una serve la dashboard, l'altra riceve il callback.", + "loopbackMismatchStep2": "In questo browser, riapri OmniRoute attraverso il tunnel:", + "loopbackMismatchStep3": "Quindi connetti di nuovo {providerName} dalla nuova scheda. Il callback ora raggiunge il server e l'accesso si completa normalmente.", + "loopbackMismatchAlternative": "Nessun accesso SSH? Se questo provider offre una scheda per importare un token, connettiti con un token invece — quel percorso non usa un callback loopback.", "step1OpenUrl": "Passaggio 1: apri questo URL nel tuo browser", "copy": "Copia", "step2PasteCallback": "Passaggio 2: incolla qui l'URL di richiamata o il codice di autorizzazione", @@ -11837,7 +11837,7 @@ "description": "Abilita l'accesso alla rete nella sandbox delle skill." } }, - "ccDiscoveryAliasesEnvWarning": "__MISSING__:Active via environment variable (EXPOSE_CC_DISCOVERY_ALIASES) — this overrides any dashboard toggle below." + "ccDiscoveryAliasesEnvWarning": "Attivo tramite variabile d'ambiente (EXPOSE_CC_DISCOVERY_ALIASES) — questo sovrascrive qualsiasi toggle della dashboard qui sotto." }, "comboControl": { "title": "Centro di controllo combo", @@ -12185,5 +12185,5 @@ "partnerLinkNote": "Link partner", "dismissAriaLabel": "Ignora" }, - "featureFlagExposeFunctionalGatewayMirrorsDescription": "__MISSING__:Advertise / mirror ids on /v1/models for models whose canonical owner has no active credential but a passthrough gateway with an active credential routes them. Warning: adds catalog entries for all clients when enabled globally." + "featureFlagExposeFunctionalGatewayMirrorsDescription": "Mostra gli id specchio / su /v1/models per i modelli il cui proprietario canonico non ha credenziali attive ma un gateway di transito con una credenziale attiva li instrada. Attenzione: aggiunge voci nel catalogo per tutti i client quando abilitato globalmente." }