diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index cc60285114..c960ff4ae0 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -739,8 +739,8 @@ "endpointsSubtitle": "Seus URLs de conexão de IA", "apiManager": "Gerenciador API", "apiManagerSubtitle": "Gerenciar chaves de API e acesso", - "embeddedServices": "__MISSING__:Embedded Services", - "embeddedServicesSubtitle": "__MISSING__:Manage local proxy services", + "embeddedServices": "Serviços Integrados", + "embeddedServicesSubtitle": "Gerenciar serviços de proxy locais", "logs": "Logs", "webhooks": "Webhooks", "webhooksSubtitle": "Seja notificado sobre eventos", @@ -976,93 +976,93 @@ "disable": "Desativar", "noWebhooks": "Nenhum webhooks configurado ainda.", "signatureTitle": "Assinaturas de webhook", - "signatureDescription": "Cada entrega inclui um cabeçalho X-Webhook-Signature assinado com HMAC-SHA256 usando o segredo do webhook. Verifique a assinatura antes de confiar na carga.", + "signatureDescription": "Cada entrega inclui um cabeçalho X-Webhook-Signature assinado com HMAC-SHA256 usando o segredo do webhook. Verifique a assinatura antes de confiar no payload.", "wizard": { - "cancel": "__MISSING__:Cancel", - "step1Title": "__MISSING__:Select Integration", - "step2Title": "__MISSING__:Configure Target", - "step3Title": "__MISSING__:Events & Test", - "back": "__MISSING__:Back", - "next": "__MISSING__:Next", - "finish": "__MISSING__:Finish", - "step1Desc": "__MISSING__:Select the target integration system for this webhook." + "cancel": "Cancelar", + "step1Title": "Selecionar Integração", + "step2Title": "Configurar Destino", + "step3Title": "Eventos e Teste", + "back": "Voltar", + "next": "Próximo", + "finish": "Concluir", + "step1Desc": "Selecione o sistema de integração de destino para este webhook." }, "howItWorks": { - "step1": "__MISSING__:Choose an integration provider (e.g. Slack, Discord, custom webhook) and set up the connection details.", - "step2": "__MISSING__:Configure system events to subscribe to (e.g. completion errors, model fallbacks, or usage limits).", - "step3": "__MISSING__:Verify the configuration by sending a test payload to make sure the endpoint receives it.", - "step4": "__MISSING__:Secure your endpoint by validating the X-Webhook-Signature HMAC-SHA256 header using the webhook's secret.", - "title": "__MISSING__:How Webhooks Work", - "customOnly": "__MISSING__:Only applicable for custom endpoint integrations.", - "hmacRecipeTitle": "__MISSING__:HMAC Verification Recipe", - "hmacRecipe": "__MISSING__:To verify webhook payloads in Node.js, compute the HMAC-SHA256 of the raw request body using your secret key. Compare it to the X-Webhook-Signature header using timingSafeEqual.", - "timeoutNote": "__MISSING__:Webhook deliveries have a timeout of 10 seconds.", - "retryNote": "__MISSING__:Failed deliveries are retried up to 5 times with exponential backoff.", - "docsLink": "__MISSING__:Read the full Webhooks developer guide", - "hmacRecipePython": "__MISSING__:Python HMAC verification: hmac.new(secret, body, hashlib.sha256).hexdigest()", - "hmacRecipeBash": "__MISSING__:Bash HMAC verification: echo -n \"$body\" | openssl dgst -sha256 -hmac \"$secret\"" + "step1": "Escolha um provedor de integração (ex.: Slack, Discord, webhook personalizado) e configure os detalhes da conexão.", + "step2": "Configure os eventos do sistema para se inscrever (ex.: erros de completions, fallbacks de modelo ou limites de uso).", + "step3": "Verifique a configuração enviando um payload de teste para garantir que o endpoint o receba.", + "step4": "Proteja seu endpoint validando o cabeçalho X-Webhook-Signature HMAC-SHA256 usando o segredo do webhook.", + "title": "Como os Webhooks Funcionam", + "customOnly": "Aplicável apenas para integrações de endpoint personalizado.", + "hmacRecipeTitle": "Receita de Verificação HMAC", + "hmacRecipe": "Para verificar payloads de webhook no Node.js, calcule o HMAC-SHA256 do corpo bruto da requisição usando sua chave secreta. Compare-o com o cabeçalho X-Webhook-Signature usando timingSafeEqual.", + "timeoutNote": "As entregas de webhook têm um timeout de 10 segundos.", + "retryNote": "Entregas com falha são reenviadas até 5 vezes com backoff exponencial.", + "docsLink": "Leia o guia completo de desenvolvimento de Webhooks", + "hmacRecipePython": "Verificação HMAC em Python: hmac.new(secret, body, hashlib.sha256).hexdigest()", + "hmacRecipeBash": "Verificação HMAC em Bash: echo -n \"$body\" | openssl dgst -sha256 -hmac \"$secret\"" }, "deliveries": { - "title": "__MISSING__:Delivery Logs", - "loadFailed": "__MISSING__:Failed to load webhook delivery logs.", - "empty": "__MISSING__:No deliveries recorded yet. Trigger an event or send a test payload.", - "status": "__MISSING__:Status", - "event": "__MISSING__:Event", - "latency": "__MISSING__:Latency", - "at": "__MISSING__:Sent At" + "title": "Logs de Entrega", + "loadFailed": "Falha ao carregar logs de entrega de webhook.", + "empty": "Nenhuma entrega registrada ainda. Dispare um evento ou envie um payload de teste.", + "status": "Status", + "event": "Evento", + "latency": "Latência", + "at": "Enviado Em" }, "kinds": { - "comingSoon": "__MISSING__:Coming Soon", - "slack": "__MISSING__:Slack", - "slackDesc": "__MISSING__:Post system events directly into a Slack channel", - "telegram": "__MISSING__:Telegram", - "telegramDesc": "__MISSING__:Send event messages using a Telegram bot", - "discord": "__MISSING__:Discord", - "discordDesc": "__MISSING__:Deliver real-time updates directly to a Discord server", - "custom": "__MISSING__:Custom Webhook", - "customDesc": "__MISSING__:Deliver system event payloads to any HTTPS endpoint", - "email": "__MISSING__:Email Notification", - "emailDesc": "__MISSING__:Receive summary updates via email", - "pagerduty": "__MISSING__:PagerDuty", - "pagerdutyDesc": "__MISSING__:Trigger alerts on PagerDuty for critical system issues", - "teams": "__MISSING__:Microsoft Teams", - "teamsDesc": "__MISSING__:Forward system notifications to Microsoft Teams channels" + "comingSoon": "Em Breve", + "slack": "Slack", + "slackDesc": "Publique eventos do sistema diretamente em um canal do Slack", + "telegram": "Telegram", + "telegramDesc": "Envie mensagens de eventos usando um bot do Telegram", + "discord": "Discord", + "discordDesc": "Entregue atualizações em tempo real diretamente a um servidor Discord", + "custom": "Webhook Personalizado", + "customDesc": "Entregue payloads de eventos do sistema para qualquer endpoint HTTPS", + "email": "Notificação por E-mail", + "emailDesc": "Receba atualizações resumidas por e-mail", + "pagerduty": "PagerDuty", + "pagerdutyDesc": "Dispare alertas no PagerDuty para problemas críticos do sistema", + "teams": "Microsoft Teams", + "teamsDesc": "Encaminhe notificações do sistema para canais do Microsoft Teams" }, - "testPayloadSent": "__MISSING__:Test Payload Sent", - "testResponse": "__MISSING__:Test Response", + "testPayloadSent": "Carga de Teste Enviada", + "testResponse": "Resposta do Teste", "validateUrl": { - "checking": "__MISSING__:Checking URL...", - "ok": "__MISSING__:URL is valid", - "blockedPrivate": "__MISSING__:URL is a blocked private address", - "invalidUrl": "__MISSING__:Invalid URL format" + "checking": "Verificando URL...", + "ok": "URL é válida", + "blockedPrivate": "URL é um endereço privado bloqueado", + "invalidUrl": "Formato de URL inválido" }, "custom": { - "endpointUrl": "__MISSING__:Endpoint URL", - "endpointUrlPlaceholder": "__MISSING__:https://api.yourdomain.com/webhook", - "secretKey": "__MISSING__:Secret Key", - "secretKeyPlaceholder": "__MISSING__:Enter secret key or leave blank to auto-generate", - "secretKeyHint": "__MISSING__:Used to sign the payload header for authentication." + "endpointUrl": "URL do Endpoint", + "endpointUrlPlaceholder": "https://api.seudominio.com/webhook", + "secretKey": "Chave Secreta", + "secretKeyPlaceholder": "Digite a chave secreta ou deixe em branco para gerar automaticamente", + "secretKeyHint": "Usada para assinar o cabeçalho do payload para autenticação." }, "discord": { - "webhookUrl": "__MISSING__:Discord Webhook URL", - "webhookUrlPlaceholder": "__MISSING__:https://discord.com/api/webhooks/...", - "webhookUrlHint": "__MISSING__:The webhook URL copied from your Discord channel integration settings.", - "tutorial": "__MISSING__:How to create a Discord webhook:" + "webhookUrl": "URL do Webhook do Discord", + "webhookUrlPlaceholder": "https://discord.com/api/webhooks/...", + "webhookUrlHint": "A URL do webhook copiada das configurações de integração do seu canal Discord.", + "tutorial": "Como criar um webhook do Discord:" }, "slack": { - "webhookUrl": "__MISSING__:Slack Webhook URL", - "webhookUrlPlaceholder": "__MISSING__:https://hooks.slack.com/services/...", - "webhookUrlHint": "__MISSING__:The webhook URL copied from your Slack Incoming Webhooks integration.", - "tutorial": "__MISSING__:How to create a Slack webhook:" + "webhookUrl": "URL do Webhook do Slack", + "webhookUrlPlaceholder": "https://hooks.slack.com/services/...", + "webhookUrlHint": "A URL do webhook copiada da sua integração Slack Incoming Webhooks.", + "tutorial": "Como criar um webhook do Slack:" }, "telegram": { - "botToken": "__MISSING__:Telegram Bot Token", - "botTokenPlaceholder": "__MISSING__:123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ", - "botTokenHint": "__MISSING__:The HTTP API token received from @BotFather when creating your bot.", - "chatId": "__MISSING__:Telegram Chat ID / Channel", - "chatIdPlaceholder": "__MISSING__:-100123456789 or @channelname", - "chatIdHint": "__MISSING__:The unique numerical identifier or public username of the chat/channel.", - "tutorial": "__MISSING__:How to configure Telegram webhook:" + "botToken": "Token do Bot Telegram", + "botTokenPlaceholder": "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ", + "botTokenHint": "O token da API HTTP recebido do @BotFather ao criar seu bot.", + "chatId": "Chat ID / Canal do Telegram", + "chatIdPlaceholder": "-100123456789 ou @nomedocanal", + "chatIdHint": "O identificador numérico único ou nome de usuário público do chat/canal.", + "tutorial": "Como configurar o webhook do Telegram:" } }, "compliance": { @@ -2570,14 +2570,14 @@ "groupApiKey": "Chave de API", "groupAccount": "Conta", "groupServiceTier": "Nível de serviço", - "serviceTierFast": "__MISSING__:Fast", - "serviceTierFlex": "__MISSING__:Flex", - "serviceTierStandard": "__MISSING__:Standard", - "serviceTierBreakdownTitle": "__MISSING__:Service Tier", - "serviceTierBreakdownSubtitle": "__MISSING__:Fast / Flex / Standard split", - "serviceTierUsageSaved": "__MISSING__:usage saved", - "serviceTierCostSaved": "__MISSING__:saved", - "serviceTierCostShareSuffix": "__MISSING__:of cost", + "serviceTierFast": "Fast", + "serviceTierFlex": "Flex", + "serviceTierStandard": "Standard", + "serviceTierBreakdownTitle": "Nível de Serviço", + "serviceTierBreakdownSubtitle": "Distribuição Fast / Flex / Standard", + "serviceTierUsageSaved": "uso economizado", + "serviceTierCostSaved": "economizado", + "serviceTierCostShareSuffix": "do custo", "dimension": "Dimensão", "share": "Participação", "legacyOrFree": "Legado / gratuito", @@ -2790,16 +2790,16 @@ "localServer": "Servidor local", "cloudOmniroute": "Cloud OmniRoute", "copyUrl": "Copiar URL", - "badgeLoopbackTooltip": "__MISSING__:This endpoint is only accessible locally (loopback only)", - "badgeAlwaysProtectedTooltip": "__MISSING__:This endpoint is always protected and requires authorization", - "badgeInternalTooltip": "__MISSING__:This is an internal system endpoint", - "tierAll": "__MISSING__:All", - "tierAuth": "__MISSING__:Authenticated", - "tierLoopback": "__MISSING__:Loopback", - "tierAlwaysProtected": "__MISSING__:Always Protected", - "tierPublic": "__MISSING__:Public", - "hideInternal": "__MISSING__:Hide Internal", - "showInternal": "__MISSING__:Show Internal" + "badgeLoopbackTooltip": "Este endpoint só é acessível localmente (somente loopback)", + "badgeAlwaysProtectedTooltip": "Este endpoint é sempre protegido e requer autorização", + "badgeInternalTooltip": "Este é um endpoint interno do sistema", + "tierAll": "Todos", + "tierAuth": "Autenticado", + "tierLoopback": "Loopback", + "tierAlwaysProtected": "Sempre Protegido", + "tierPublic": "Público", + "hideInternal": "Ocultar Internos", + "showInternal": "Mostrar Internos" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -3165,35 +3165,35 @@ "noSessionQuotaMonitorsActive": "Nenhum monitor de cota de sessão ativo.", "gracefulDegradationStatus": "Status de degradação elegante", "additionalModels": "+{count} mais modelos", - "providerHealthMatrixTitle": "__MISSING__:Provider Health Matrix", - "providerHealthMatrixDescription": "__MISSING__:Provider × account × model states from breakers, cooldowns, lockouts and logs.", - "healthMatrixRange": "__MISSING__:Health matrix range", - "providerFilter": "__MISSING__:Provider filter", - "onlyIssues": "__MISSING__:Only issues", - "refresh": "__MISSING__:Refresh", - "accounts": "__MISSING__:Accounts", - "models": "__MISSING__:Models", - "issues": "__MISSING__:Issues", - "loadingProviderHealthMatrix": "__MISSING__:Loading provider health matrix...", - "failedProviderHealthMatrix": "__MISSING__:Failed to load Provider Health Matrix: {error}", - "noProvidersMatchedFilters": "__MISSING__:No providers matched the current filters.", - "modelPillSummary": "__MISSING__:{requests} req · {successRate} success · {latency} avg", - "modelLockoutSummary": "__MISSING__:{reason} · {duration} left", - "locked": "__MISSING__:locked", - "inferred": "__MISSING__:inferred", - "inactive": "__MISSING__:Inactive", - "noConnectionId": "__MISSING__:no connection id", - "accountModelSummary": "__MISSING__:{connectionId} · {count} models", - "cooldown": "__MISSING__:cooldown", - "durationRemaining": "__MISSING__:{duration} remaining", - "noSyncedModelsOrTraffic": "__MISSING__:No synced models or recent traffic yet.", - "providerRowSummary": "__MISSING__:{active}/{total} active accounts · {requests} req · {successRate} success · {latency} avg", - "cooldownCount": "__MISSING__:{count} cooldown", - "lockoutCount": "__MISSING__:{count} lockouts", - "issueCount": "__MISSING__:{count} issues", - "score": "__MISSING__:Score", - "lastRequest": "__MISSING__:Last request", - "lastError": "__MISSING__:Last error" + "providerHealthMatrixTitle": "Matriz de Saúde dos Provedores", + "providerHealthMatrixDescription": "Estados de provedor × conta × modelo a partir de circuit breakers, cooldowns, lockouts e logs.", + "healthMatrixRange": "Período da matriz de saúde", + "providerFilter": "Filtro de provedor", + "onlyIssues": "Apenas problemas", + "refresh": "Atualizar", + "accounts": "Contas", + "models": "Modelos", + "issues": "Problemas", + "loadingProviderHealthMatrix": "Carregando matriz de saúde dos provedores...", + "failedProviderHealthMatrix": "Falha ao carregar a Matriz de Saúde dos Provedores: {error}", + "noProvidersMatchedFilters": "Nenhum provedor correspondeu aos filtros atuais.", + "modelPillSummary": "{requests} req · {successRate} sucesso · {latency} média", + "modelLockoutSummary": "{reason} · {duration} restante", + "locked": "bloqueado", + "inferred": "inferido", + "inactive": "Inativo", + "noConnectionId": "sem id de conexão", + "accountModelSummary": "{connectionId} · {count} modelos", + "cooldown": "cooldown", + "durationRemaining": "{duration} restante", + "noSyncedModelsOrTraffic": "Nenhum modelo sincronizado ou tráfego recente ainda.", + "providerRowSummary": "{active}/{total} contas ativas · {requests} req · {successRate} sucesso · {latency} média", + "cooldownCount": "{count} cooldown", + "lockoutCount": "{count} lockouts", + "issueCount": "{count} problemas", + "score": "Pontuação", + "lastRequest": "Última requisição", + "lastError": "Último erro" }, "telemetry": { "title": "Telemetria do Sistema", @@ -3321,15 +3321,15 @@ "provider": "Provedor", "account": "Conta", "elapsed": "Tempo", - "activeStage": "__MISSING__:Stage", - "activeStageUnknown": "__MISSING__:Not sent to upstream yet", - "activeStageRegistered": "__MISSING__:Registered", - "activeStagePayloadPrepared": "__MISSING__:Payload prepared", - "activeStageWaitingAccountSlot": "__MISSING__:Waiting for account slot", - "activeStageWaitingRateLimit": "__MISSING__:Waiting for rate limiter", - "activeStageRateLimitSlotAcquired": "__MISSING__:Rate limit slot acquired", - "activeStageSendingToProvider": "__MISSING__:Sending to upstream", - "activeStageProviderResponseStarted": "__MISSING__:Upstream response started", + "activeStage": "Estágio", + "activeStageUnknown": "Ainda não enviado ao upstream", + "activeStageRegistered": "Registrado", + "activeStagePayloadPrepared": "Payload preparado", + "activeStageWaitingAccountSlot": "Aguardando slot de conta", + "activeStageWaitingRateLimit": "Aguardando rate limiter", + "activeStageRateLimitSlotAcquired": "Slot de rate limit adquirido", + "activeStageSendingToProvider": "Enviando ao upstream", + "activeStageProviderResponseStarted": "Resposta do upstream iniciada", "count": "Qtd.", "payloads": "Payloads", "viewPayloads": "Ver Payloads", @@ -4473,12 +4473,12 @@ "configure": "Configurar", "globalSystemPrompt": "Prompt de Sistema Global", "saved": "Salvo", - "beforePromptLabel": "__MISSING__:Before Prompt", - "beforePromptDesc": "__MISSING__:Injected before agent/provider system instructions", - "beforePromptPlaceholder": "__MISSING__:Instructions inserted before agent/provider prompt...", - "afterPromptLabel": "__MISSING__:After Prompt", - "afterPromptDesc": "__MISSING__:Injected after agent/provider system instructions", - "afterPromptPlaceholder": "__MISSING__:Instructions inserted after agent/provider prompt...", + "beforePromptLabel": "Antes do Prompt", + "beforePromptDesc": "Injetado antes das instruções de sistema do agente/provedor", + "beforePromptPlaceholder": "Instruções inseridas antes do prompt do agente/provedor...", + "afterPromptLabel": "Após o Prompt", + "afterPromptDesc": "Injetado após as instruções de sistema do agente/provedor", + "afterPromptPlaceholder": "Instruções inseridas após o prompt do agente/provedor...", "chars": "{count} caracteres", "thinkingBudgetTitle": "Orçamento de Raciocínio", "thinkingBudgetDesc": "Controle o uso de tokens de raciocínio da IA em todas as requisições", @@ -5270,15 +5270,15 @@ "qdrantCleanupSuccess": "OK: {count} ponto(s) removido(s) (retenção: {days} dias)", "qdrantCleanupFailed": "Falha na limpeza", "qdrantCleanupError": "Erro: {error}", - "vercelRelaySuccess": "__MISSING__:Vercel Relay deployed successfully", - "vercelRelayButton": "__MISSING__:Deploy Vercel Relay", - "vercelRelayModalTitle": "__MISSING__:Deploy Vercel Relay", - "vercelRelayWarning": "__MISSING__:Warning: A Vercel deployment token is required. This token will only be used to create the serverless relay and will never be stored by OmniRoute.", - "vercelRelayTokenLabel": "__MISSING__:Vercel Access Token", - "vercelRelayProjectNameLabel": "__MISSING__:Vercel Project Name", - "vercelRelayFreeTierNote": "__MISSING__:Relays are lightweight proxy endpoints deployed on Vercel's free tier to bypass local network/region limitations.", - "vercelRelayDeploying": "__MISSING__:Deploying...", - "vercelRelayDeploy": "__MISSING__:Deploy" + "vercelRelaySuccess": "Vercel Relay implantado com sucesso", + "vercelRelayButton": "Implantar Vercel Relay", + "vercelRelayModalTitle": "Implantar Vercel Relay", + "vercelRelayWarning": "Aviso: Um token de deploy da Vercel é necessário. Este token será usado apenas para criar o relay serverless e nunca será armazenado pelo OmniRoute.", + "vercelRelayTokenLabel": "Token de Acesso Vercel", + "vercelRelayProjectNameLabel": "Nome do Projeto Vercel", + "vercelRelayFreeTierNote": "Relays são endpoints de proxy leves implantados no plano gratuito da Vercel para contornar limitações de rede local/região.", + "vercelRelayDeploying": "Implantando...", + "vercelRelayDeploy": "Implantar" }, "contextRtk": { "title": "Motor RTK", @@ -5960,8 +5960,8 @@ "noSpendLast30Days": "Nenhum gasto nos últimos 30 dias", "updatedShort": "Atualizado", "lastRefreshed": "Última atualização", - "providerQuota": "__MISSING__:Provider Quota", - "providerQuotaHomeHint": "__MISSING__:Live status across connected accounts" + "providerQuota": "Cota de Provedor", + "providerQuotaHomeHint": "Status em tempo real das contas conectadas" }, "modals": { "waitingAuth": "Aguardando Autorização",