omniroute 3.3.6 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/_global-error.html +2 -2
  42. package/app/.next/server/app/_global-error.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  47. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  48. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  50. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__950558b8._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__9698d25e._.js +1 -1
  67. package/app/.next/server/chunks/[root-of-the-server]__a32d3818._.js +1 -1
  68. package/app/.next/server/chunks/[root-of-the-server]__bc251fbe._.js +1 -1
  69. package/app/.next/server/chunks/[root-of-the-server]__d5a064d5._.js +1 -1
  70. package/app/.next/server/chunks/_05c48915._.js +1 -1
  71. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  72. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  73. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  74. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  75. package/app/.next/server/chunks/_68683848._.js +1 -1
  76. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  77. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  78. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  79. package/app/.next/server/chunks/ssr/src_i18n_messages_ar_json_e1d5145b._.js +1 -1
  80. package/app/.next/server/chunks/ssr/src_i18n_messages_bg_json_34495a0f._.js +1 -1
  81. package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
  82. package/app/.next/server/chunks/ssr/src_i18n_messages_da_json_7500ed02._.js +1 -1
  83. package/app/.next/server/chunks/ssr/src_i18n_messages_de_json_b2a40318._.js +1 -1
  84. package/app/.next/server/chunks/ssr/src_i18n_messages_es_json_82775c4a._.js +1 -1
  85. package/app/.next/server/chunks/ssr/src_i18n_messages_fi_json_dcc6745e._.js +1 -1
  86. package/app/.next/server/chunks/ssr/src_i18n_messages_fr_json_fe904570._.js +1 -1
  87. package/app/.next/server/chunks/ssr/src_i18n_messages_he_json_3e3c1e1b._.js +1 -1
  88. package/app/.next/server/chunks/ssr/src_i18n_messages_hi_json_83a0b9e5._.js +1 -1
  89. package/app/.next/server/chunks/ssr/src_i18n_messages_hu_json_651e00d3._.js +1 -1
  90. package/app/.next/server/chunks/ssr/src_i18n_messages_id_json_725d4a34._.js +1 -1
  91. package/app/.next/server/chunks/ssr/src_i18n_messages_in_json_2d7cd177._.js +1 -1
  92. package/app/.next/server/chunks/ssr/src_i18n_messages_it_json_e23882ae._.js +1 -1
  93. package/app/.next/server/chunks/ssr/src_i18n_messages_ja_json_fc6af4d8._.js +1 -1
  94. package/app/.next/server/chunks/ssr/src_i18n_messages_ko_json_0ffdbdc6._.js +1 -1
  95. package/app/.next/server/chunks/ssr/src_i18n_messages_ms_json_610df819._.js +1 -1
  96. package/app/.next/server/chunks/ssr/src_i18n_messages_nl_json_55ad1507._.js +1 -1
  97. package/app/.next/server/chunks/ssr/src_i18n_messages_no_json_9f484a8c._.js +1 -1
  98. package/app/.next/server/chunks/ssr/src_i18n_messages_phi_json_871ece45._.js +1 -1
  99. package/app/.next/server/chunks/ssr/src_i18n_messages_pl_json_79d0be4b._.js +1 -1
  100. package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_e7b9e8db._.js +1 -1
  101. package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_2fc13a82._.js +1 -1
  102. package/app/.next/server/chunks/ssr/src_i18n_messages_ro_json_d1a5f5ee._.js +1 -1
  103. package/app/.next/server/chunks/ssr/src_i18n_messages_ru_json_9d7a9dfe._.js +1 -1
  104. package/app/.next/server/chunks/ssr/src_i18n_messages_sk_json_1c5bff4a._.js +1 -1
  105. package/app/.next/server/chunks/ssr/src_i18n_messages_sv_json_e8ae9f28._.js +1 -1
  106. package/app/.next/server/chunks/ssr/src_i18n_messages_th_json_6ed546bd._.js +1 -1
  107. package/app/.next/server/chunks/ssr/src_i18n_messages_tr_json_c8d78b01._.js +1 -1
  108. package/app/.next/server/chunks/ssr/src_i18n_messages_uk-UA_json_c72cdf08._.js +1 -1
  109. package/app/.next/server/chunks/ssr/src_i18n_messages_vi_json_03ec9dfd._.js +1 -1
  110. package/app/.next/server/pages/500.html +2 -2
  111. package/app/.next/server/server-reference-manifest.js +1 -1
  112. package/app/.next/server/server-reference-manifest.json +1 -1
  113. package/app/.next/static/chunks/{b9999bd9d2b99bf6.js → d3c3a9266158d9b0.js} +1 -1
  114. package/app/CHANGELOG.md +19 -1
  115. package/app/docs/openapi.yaml +1 -1
  116. package/app/open-sse/handlers/responseTranslator.ts +1 -1
  117. package/app/open-sse/package.json +1 -1
  118. package/app/package-lock.json +3 -3
  119. package/app/package.json +1 -1
  120. package/app/src/i18n/messages/ar.json +2 -1
  121. package/app/src/i18n/messages/bg.json +2 -1
  122. package/app/src/i18n/messages/cs.json +2 -1
  123. package/app/src/i18n/messages/da.json +2 -1
  124. package/app/src/i18n/messages/de.json +2 -1
  125. package/app/src/i18n/messages/es.json +2 -1
  126. package/app/src/i18n/messages/fi.json +2 -1
  127. package/app/src/i18n/messages/fr.json +2 -1
  128. package/app/src/i18n/messages/he.json +2 -1
  129. package/app/src/i18n/messages/hi.json +2 -1
  130. package/app/src/i18n/messages/hu.json +2 -1
  131. package/app/src/i18n/messages/id.json +2 -1
  132. package/app/src/i18n/messages/in.json +2 -1
  133. package/app/src/i18n/messages/it.json +2 -1
  134. package/app/src/i18n/messages/ja.json +2 -1
  135. package/app/src/i18n/messages/ko.json +2 -1
  136. package/app/src/i18n/messages/ms.json +2 -1
  137. package/app/src/i18n/messages/nl.json +2 -1
  138. package/app/src/i18n/messages/no.json +2 -1
  139. package/app/src/i18n/messages/phi.json +2 -1
  140. package/app/src/i18n/messages/pl.json +2 -1
  141. package/app/src/i18n/messages/pt-BR.json +2 -1
  142. package/app/src/i18n/messages/pt.json +2 -1
  143. package/app/src/i18n/messages/ro.json +2 -1
  144. package/app/src/i18n/messages/ru.json +2 -1
  145. package/app/src/i18n/messages/sk.json +2 -1
  146. package/app/src/i18n/messages/sv.json +2 -1
  147. package/app/src/i18n/messages/th.json +2 -1
  148. package/app/src/i18n/messages/tr.json +2 -1
  149. package/app/src/i18n/messages/uk-UA.json +2 -1
  150. package/app/src/i18n/messages/vi.json +2 -1
  151. package/app/src/shared/services/opencodeConfig.ts +14 -13
  152. package/app/tests/unit/t40-opencode-cli-tools-integration.test.mjs +5 -5
  153. package/package.json +1 -1
  154. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_buildManifest.js +0 -0
  155. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_clientMiddlewareManifest.json +0 -0
  156. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[406271,a=>{a.v(JSON.parse('{"common":{"save":"Salvar","cancel":"Cancelar","delete":"Excluir","loading":"Carregando...","error":"Ocorreu um erro","success":"Sucesso","confirm":"Tem certeza?","refresh":"Atualizar","close":"Fechar","add":"Adicionar","edit":"Editar","search":"Pesquisar","back":"Voltar","next":"Próximo","submit":"Enviar","reset":"Resetar","copy":"Copiar","copied":"Copiado!","enabled":"Ativado","disabled":"Desativado","active":"Ativo","inactive":"Inativo","noData":"Nenhum dado disponível","configure":"Configurar","manage":"Gerenciar","name":"Nome","actions":"Ações","status":"Status","type":"Tipo","model":"Modelo","models":"modelos","provider":"Provedor","account":"Conta","time":"Tempo","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":"Testar Conexão","enable":"Ativar","disable":"Desativar","columns":"Colunas","newest":"Mais Recente","oldest":"Mais Antigo","all":"Todos","none":"Nenhum","yes":"Sim","no":"Não","warning":"Aviso","note":"Nota","free":"Gratuito","skipToContent":"Pular para conteúdo","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Aceitar","accountId":"ID da conta","alias":"Alias","apiKeyId":"ID da chave de API","apiKeyName":"Nome da chave de API","apiKeySecret":"Segredo da chave API","authorization":"Autorização","content-type":"Tipo de conteúdo","content-length":"Comprimento do conteúdo","cookie":"Biscoito","file":"Arquivo","host":"Anfitrião","id":"ID","import":"Importar","limit":"Limite","offset":"Deslocamento","open":"Abrir","origin":"Origem","promptTokens":"Tokens de prompt","completionTokens":"Tokens de conclusão","totalTokens":"Total de fichas","rawModel":"Modelo Bruto","scope":"Escopo","skill":"Habilidade","sortBy":"Classificar por","sortOrder":"Ordem de classificação","tab":"Guia","text":"Texto","textarea":"Área de texto","tool":"Ferramenta","toolId":"ID da ferramenta","web":"Rede","whereUsed":"Onde usado","whitelist":"Lista de permissões","blacklist":"Lista negra","resolve":"Resolver","force":"Força","base64url":"URL Base64","hex":"Feitiço","range":"Alcance","component":"Componente","redirect_uri":"Redirecionar URI","idempotency-key":"Chave de Idempotência","error_description":"Descrição do erro","code":"Código","compatible":"Compatível","chat-completions":"Conclusões de bate-papo","oauth":"OAuth","auth_token":"Token de autenticação","crypto":"Criptografia","hours":"Horas","selfsigned":"Autoassinado","proxy_id":"ID do proxy","proxyId":"ID do proxy","connectionId":"ID de conexão","resolveConnectionId":"Resolver ID de conexão","resolve_connection_id":"Resolver ID de conexão","scope_id":"ID do escopo","scopeId":"ID do escopo","jwtSecret":"Segredo JWT","keytar":"Keytar","better-sqlite3":"melhor-sqlite3","undici":"unici","builder-id":"ID do construtor","musicDesc":"Descrição da música","musicGeneration":"Geração Musical","idc":"CDI","cloud-status-changed":"Status da nuvem alterado","where_used":"Onde usado","windowMs":"Janela (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Lista de permissões de ferramentas","TOOL_DENYLIST":"Lista de bloqueios de ferramentas","Failed to save pricing":"Falha ao salvar o preço","Failed to reset pricing":"Falha ao redefinir o preço","apikey":"Chave de API","http":"HTTP"},"sidebar":{"home":"Início","dashboard":"Painel","providers":"Provedores","combos":"Combos","autoCombo":"Auto Combo","usage":"Uso","analytics":"Análises","costs":"Custos","health":"Saúde","limits":"Limites e Cotas","cliTools":"Ferramentas CLI","media":"Mídia","settings":"Configurações","translator":"Tradutor","docs":"Documentação","issues":"Problemas","apiManager":"Gerenciador API","logs":"Logs","auditLog":"Log de Auditoria","shutdown":"Desligar","restart":"Reiniciar","shutdownConfirm":"Desligar o OmniRoute?","restartConfirm":"Reiniciar o OmniRoute?","version":"v{version}","debug":"Depuração","system":"Sistema","help":"Ajuda","serverDisconnected":"Servidor Desconectado","serverDisconnectedMsg":"O servidor proxy foi parado ou está reiniciando.","expandSidebar":"Expandir barra lateral","collapseSidebar":"Recolher barra lateral","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Endpoints","playground":"Playground","agents":"Agentes","cliToolsShort":"Ferramentas","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Sair","language":"Idioma","providers":"Provedores","providerDescription":"Gerencie suas conexões de provedores de IA","combos":"Combos","comboDescription":"Combos de modelos com fallback","usage":"Uso e Análises","usageDescription":"Monitore seu uso de API, consumo de tokens e logs de requisições","analytics":"Análises","analyticsDescription":"Gráficos, tendências e insights de avaliação","cliTools":"Ferramentas CLI","cliToolsDescription":"Configurar ferramentas de linha de comando","home":"Início","homeDescription":"Bem-vindo ao OmniRoute","endpoint":"Endpoints","endpointDescription":"Gerenciar endpoints proxy, MCP, A2A e endpoints de API","settings":"Configurações","settingsDescription":"Gerencie suas preferências","openaiCompatible":"Compatível com OpenAI","anthropicCompatible":"Compatível com Anthropic","media":"Mídia","mediaDescription":"Gerar imagens, vídeos e músicas","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Início Rápido","quickStartDesc":"Comece em 4 passos. Conecte provedores, roteie modelos, monitore tudo.","fullDocs":"Docs Completa","step1Title":"1. Criar chave de API","step1Desc":"Vá em <endpoint>Endpoint</endpoint> -> Chaves Registradas. Gere uma chave por ambiente.","step2Title":"2. Conectar provedores","step2Desc":"Adicione contas em <providers>Provedores</providers>. Suporta OAuth, API Key e planos gratuitos.","step3Title":"3. Apontar seu cliente","step3Desc":"Defina a URL base como {url} no seu IDE ou cliente de API.","step4Title":"4. Monitorar e otimizar","step4Desc":"Acompanhe tokens, custos e erros em <logs>Logs de Requisições</logs> e <analytics>Análises</analytics>.","providersOverview":"Visão Geral dos Provedores","configuredOf":"{configured} configurados de {total} provedores disponíveis","noModelsAvailable":"Nenhum modelo disponível para este provedor.","configureFirst":"Configure uma conexão primeiro em {providers}","configureProvider":"Configurar Provedor","modelAvailable":"{count} modelo 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":"Reportar problema","activeError":"{active} ativo · {errors} erro","oauthLabel":"OAuth","apiKeyLabel":"Chave de API","requestsShort":"{count} reqs","providerModelsTitle":"{provider} - Modelos","copiedModel":"Copiado: {model}","aliasLabel":"alias","updateNow":"Atualizar agora","updating":"Atualizando...","updateAvailableDesc":"Uma nova versão está disponível. Clique para atualizar.","updateStarted":"Atualização iniciada..."},"analytics":{"title":"Análises","overviewDescription":"Monitore padrões de uso da API, consumo de tokens, custos e tendências de atividade em todos os provedores e modelos.","evalsDescription":"Execute suítes de avaliação para testar e validar seus endpoints LLM. Compare qualidade de modelos, detecte regressões e faça benchmarks de 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 que deseja revogar esta chave de API?","noKeys":"Nenhuma chave de API ainda","noKeysDesc":"Crie sua primeira chave de API para autenticar requisições ao seu endpoint","keyLabel":"Rótulo da 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 requisições ao seu endpoint","totalKeys":"Total de Chaves","restricted":"Restrita","totalRequests":"Total de Requisiçõ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 independentemente. 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":"reqs","neverUsed":"Nunca usada","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 — 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","keyNamePlaceholder":"ex: Chave de Produção, Chave de Desenvolvimento","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 — ela não será mostrada novamente.","done":"Pronto","savePermissions":"Salvar Permissões","autoResolve":"Auto-Resolve","autoResolveDesc":"Resolve automaticamente nomes ambíguos de modelo para o provedor nativo desta API key.","keyActive":"Chave Ativa","keyActiveDesc":"Ativa ou desativa esta API key. Chaves desativadas são bloqueadas com 403.","accessSchedule":"Horário de Acesso","accessScheduleDesc":"Restrinja o acesso a horários e dias da semana específicos.","scheduleFrom":"Das","scheduleUntil":"Até","scheduleDays":"Dias","scheduleTimezone":"Fuso Horário","scheduleTimezoneHint":"Use nomes IANA, ex: America/Sao_Paulo","scheduleActive":"Agenda","disabled":"Desativada","daySun":"Dom","dayMon":"Seg","dayTue":"Ter","dayWed":"Qua","dayThu":"Qui","dayFri":"Sex","daySat":"Sáb","allowAll":"Permitir Tudo","restrict":"Restringir","allowAllInfo":"Esta chave pode acessar todos os modelos disponíveis.","restrictInfo":"Esta chave pode acessar {selected} de {total} modelos.","selected":"{count} selecionados","all":"Todos","clear":"Limpar","searchModels":"Buscar modelos por nome ou provedor...","noModelsFound":"Nenhum modelo encontrado","keyNameRequired":"Nome da chave é obrigatório","keyNameTooLong":"Nome da chave deve ter {max} caracteres ou menos","keyNameInvalid":"Nome da chave pode conter apenas letras, números, espaços, hífens e sublinhados","invalidKeyName":"Nome de chave inválido","failedCreateKey":"Falha ao criar chave","failedCreateKeyRetry":"Falha ao criar chave. Tente novamente.","invalidKeyId":"ID de chave inválido","failedDeleteKey":"Falha ao excluir chave","failedDeleteKeyRetry":"Falha ao excluir chave. Tente novamente.","invalidModelsSelection":"Seleção de modelos inválida","cannotSelectMoreThanModels":"Não é possível selecionar mais de {max} modelos","failedUpdatePermissions":"Falha ao atualizar permissões","failedUpdatePermissionsRetry":"Falha ao atualizar permissões. Tente novamente.","unknownProvider":"desconhecido","copyMaskedKey":"Copiar chave mascarada","modelsCount":"{count, plural, one {# modelo} other {# modelos}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permissões","deleteKey":"Excluir chave","model":"{count} modelo","models":"{count} modelos","permissionsTitle":"Permissões: {name}","allowAllDesc":"Esta chave pode acessar todos os modelos disponíveis.","restrictDesc":"Esta chave pode acessar {selectedCount} de {totalModels} modelos.","selectedCount":"{count} selecionados","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Log de Auditoria","searchPlaceholder":"Buscar ações...","action":"Ação","actor":"Autor","target":"Alvo","ipAddress":"Endereço IP","timestamp":"Data/Hora","noEntries":"Nenhum registro de auditoria","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por autor...","filterEntriesAria":"Filtrar entradas do log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por autor","refreshAuditLogAria":"Atualizar log de auditoria","tableAria":"Entradas do log de auditoria","failedFetchAuditLog":"Falha ao carregar log de auditoria","notAvailable":"—","description":"Ações administrativas e eventos de segurança","showing":"Mostrando {count} entradas (offset {offset})","previous":"Anterior"},"media":{"title":"Playground de Mídia","subtitle":"Gere imagens, vídeos e música","model":"Modelo","prompt":"Prompt","generate":"Gerar","generating":"Gerando...","loadingModels":"Carregando modelos disponíveis...","noModels":"Nenhum modelo disponível. Configure provedores com suporte a mídia primeiro.","error":"Falha na Geração","result":"Resultado","imageDescription":"Gere imagens a partir de prompts de texto usando OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI e mais.","videoDescription":"Crie vídeos com AnimateDiff, Stable Video Diffusion via ComfyUI ou SD WebUI.","musicDescription":"Componha músicas usando Stable Audio Open ou MusicGen via ComfyUI."},"cliTools":{"title":"Ferramentas CLI","noActiveProviders":"Nenhum provedor ativo","noActiveProvidersDesc":"Adicione e conecte provedores primeiro para configurar as ferramentas CLI.","mapModels":"Mapear Modelos","testConnection":"Testar Conexão","connectionStatus":"Status da Conexão","configureEndpoint":"Configurar Endpoint","instructions":"Instruções","modelMapping":"Mapeamento de Modelos","baseUrl":"URL Base","apiKey":"Chave de API","configured":"Configurado","notConfigured":"Não configurado","notInstalled":"Não instalado","custom":"Customizado","unknown":"Desconhecido","lastSavedAt":"Último salvamento: {date}","never":"Nunca","justNow":"agora mesmo","minutesAgoShort":"{count} min atrás","hoursAgoShort":"{count} h atrás","daysAgoShort":"{count} d atrás","monthsAgoShort":"{count} mês(es) atrás","yearsAgoShort":"{count} ano(s) atrás","runtimeCheckFailed":"Falha ao verificar runtime","yourApiKeyPlaceholder":"sua-api-key","modelPlaceholder":"provedor/modelo-id","configurationSaved":"Configuração salva com sucesso.","failedToSave":"Falha ao salvar configuração.","noApiKeysCreateOne":"Sem chaves de API - crie uma na página Chaves","defaultOmnirouteKey":"sk_omniroute (padrão)","selectModel":"Selecionar Modelo","selectModelForAlias":"Selecionar modelo para {alias}","selectModelForTool":"Selecionar Modelo para {tool}","select":"Selecionar","clear":"Limpar","comingSoon":"Em breve","checkingRuntime":"Verificando status de runtime...","guideOnlyIntegration":"Integração apenas por guia (não requer runtime local)","cliRuntimeDetected":"Runtime de CLI detectado e pronto","cliFoundNotRunnable":"CLI encontrado, mas não executável{reason}","cliRuntimeNotDetected":"Runtime de CLI não detectado","binary":"Binário","configPath":"Caminho de config","configPathShort":"Config","failedCheckRuntimeStatus":"Falha ao verificar status de runtime.","copy":"Copiar","copied":"Copiado","copyConfig":"Copiar Config","saveConfig":"Salvar Config","selectionSaved":"Seleção salva","guide":"Guia","detected":"Detectado","notReady":"Não pronto","active":"Ativo","inactive":"Inativo","startMitm":"Iniciar MITM","stopMitm":"Parar MITM","mitmStarted":"MITM iniciado com sucesso!","mitmStopped":"MITM parado com sucesso!","failedStart":"Falha ao iniciar MITM","failedStop":"Falha ao parar MITM","saveMappings":"Salvar Mapeamentos","mappingsSaved":"Mapeamentos salvos!","failedSaveMappings":"Falha ao salvar mapeamentos","howItWorks":"Como funciona:","antigravityHowWorksDesc":"O Antigravity envia requisições para o endpoint do Google. O MITM intercepta e redireciona para o OmniRoute.","antigravityStep1":"1. Inicie o MITM para rotear as requisições pelo OmniRoute.","antigravityStep2Prefix":"2. Adicione","antigravityStep2Suffix":"ao arquivo hosts como 127.0.0.1.","antigravityStep3":"3. Abra o Antigravity e as requisições serão proxyadas.","sudoPasswordRequiredTitle":"Senha sudo necessária","sudoPasswordHint":"A senha de administrador é necessária para modificar hosts e configurações de proxy do sistema.","enterSudoPassword":"Digite a senha sudo","sudoPasswordRequiredError":"A senha sudo é obrigatória.","cancel":"Cancelar","confirm":"Confirmar","settingsApplied":"Configurações aplicadas com sucesso!","failedApplySettings":"Falha ao aplicar configurações","settingsReset":"Configurações resetadas com sucesso!","failedResetSettings":"Falha ao resetar configurações","backupRestored":"Backup restaurado!","failedRestore":"Falha ao restaurar","checkingCli":"Verificando CLI {tool}...","cliNotRunnable":"CLI {tool} instalado, mas não executável","cliNotInstalled":"CLI {tool} não instalado","cliNotDetected":"CLI {tool} não detectado","cliDetectedReady":"CLI {tool} detectado e pronto","cliFoundFailedHealthcheck":"CLI {tool} foi encontrado, mas falhou no healthcheck de runtime{reason}.","installCliPrompt":"Instale o CLI {tool} para usar este recurso.","installCodexPrompt":"Instale o Codex CLI para usar a aplicação automática.","hide":"Ocultar","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 padrão","providerModelPlaceholder":"provedor/modelo-id","apply":"Aplicar","reset":"Resetar","manualConfig":"Configuração manual","backups":"Backups","configBackups":"Backups de configuração","noBackupsYet":"Ainda não há backups. Backups são criados automaticamente antes de cada Aplicar ou Resetar.","restore":"Restaurar","backupRestoredReloading":"Backup restaurado! Recarregando status...","failedRestoreBackup":"Falha ao restaurar backup","applied":"Aplicado!","failed":"Falhou","resetDone":"Resetado!","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 padrão: sk_omniroute","updateConfig":"Atualizar config","applyConfig":"Aplicar config","noBackupsAvailable":"Nenhum backup disponível.","profileSaved":"Perfil \\"{name}\\" salvo!","failedSaveProfile":"Falha ao salvar perfil","profileActivated":"Perfil ativado!","failedActivateProfile":"Falha ao ativar perfil","profiles":"Perfis","savedProfiles":"Perfis salvos","noProfilesYet":"Nenhum perfil salvo ainda. Salve a configuração atual como perfil abaixo.","activate":"Ativar","deleteProfile":"Excluir perfil","profileNamePlaceholder":"Nome do perfil (ex: Conta Pessoal)","saveCurrent":"Salvar atual","codexAuthNotePrefix":"Codex usa","codexAuthNoteMiddle":"com","codexAuthNoteSuffix":"Clique em \\"Aplicar\\" para configurar automaticamente.","claudeManualConfiguration":"Claude CLI - Configuração manual","codexManualConfiguration":"Codex CLI - Configuração manual","droidManualConfiguration":"Factory Droid - Configuração manual","openClawManualConfiguration":"Open Claw - Configuração manual","clineManualConfiguration":"Configuração manual do Cline","kiloManualConfiguration":"Configuração manual do Kilo Code","toolDescriptions":{"antigravity":"Google Antigravity IDE com MITM","claude":"CLI Claude Code da Anthropic","codex":"CLI Codex da OpenAI","droid":"Assistente de IA Factory Droid","openclaw":"Assistente de IA Open Claw","cline":"CLI assistente de codificação Cline","kilo":"CLI assistente de IA Kilo Code","cursor":"Editor de código com IA Cursor","continue":"Assistente de IA Continue","opencode":"OpenCode AI coding agent (Terminal)","kiro":"Amazon Kiro — IDE com IA","windsurf":"Windsurf — Editor de Código com IA","copilot":"GitHub Copilot — Assistente de IA"},"guides":{"cursor":{"notes":{"0":"Requer conta Cursor Pro para usar este recurso.","1":"O Cursor roteia requisições pelo próprio servidor, então endpoint local não é suportado. Ative o Cloud Endpoint em Configurações."},"steps":{"1":{"title":"Abrir Configurações","desc":"Vá em Configurações -> Modelos"},"2":{"title":"Ativar OpenAI API","desc":"Ative a opção \\"OpenAI API key\\""},"3":{"title":"URL Base"},"4":{"title":"Chave de API"},"5":{"title":"Adicionar Modelo Customizado","desc":"Clique em \\"View All Model\\" -> \\"Add Custom Model\\""},"6":{"title":"Selecionar Modelo"}}},"continue":{"steps":{"1":{"title":"Abrir Config","desc":"Abra o arquivo de configuração do Continue"},"2":{"title":"Chave de API"},"3":{"title":"Selecionar Modelo"},"4":{"title":"Adicionar Config de Modelo","desc":"Adicione a configuração abaixo ao array de modelos:"}},"notes":{"0":"Continuar usa o arquivo de configuração JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode requer configuração de chave API.","1":"Configure a URL base para seu endpoint do OmniRoute."}},"kiro":{"steps":{"1":{"title":"Open Kiro Settings","desc":"Go to Settings → AI Provider"},"2":{"title":"Base URL","desc":"Paste your OmniRoute endpoint URL"},"3":{"title":"API Key"},"4":{"title":"Select Model"}},"notes":{"0":"Kiro requer uma conta Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Quando usar","openToolDocs":"Abrir documentos de ferramentas","toolUseCases":{"claude":"Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.","codex":"Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.","droid":"Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.","openclaw":"Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.","cline":"Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.","kilo":"Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.","cursor":"Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.","continue":"Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.","opencode":"Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.","kiro":"Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.","antigravity":"Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.","copilot":"Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."}},"combos":{"title":"Combos","description":"Crie combos de modelos com roteamento ponderado e suporte a fallback","createCombo":"Criar Combo","editCombo":"Editar Combo","deleteCombo":"Excluir Combo","noModels":"Sem modelos","noModelsYet":"Nenhum modelo adicionado","addModel":"Adicionar Modelo","addModelToCombo":"Adicionar Modelo ao Combo","routingStrategy":"Estratégia de Roteamento","maxRetries":"Máximo de Tentativas","timeout":"Timeout (ms)","healthcheck":"Verificação de Saúde","priority":"Prioridade","fallback":"Fallback","roundRobin":"Round Robin","random":"Aleatório","leastLatency":"Menor Latência","comboName":"Nome do Combo","comboNamePlaceholder":"meu-combo","deleteConfirm":"Excluir este combo?","noCombosYet":"Nenhum combo ainda","comboCreated":"Combo criado com sucesso","comboUpdated":"Combo atualizado com sucesso","comboDeleted":"Combo excluído","failedCreate":"Falha ao criar combo","failedUpdate":"Falha ao atualizar combo","errorCreating":"Erro ao criar combo","errorUpdating":"Erro ao atualizar combo","errorDeleting":"Erro ao excluir combo","testFailed":"Requisição de teste falhou","failedToggle":"Falha ao alternar combo","testResults":"Resultados do Teste — {name}","resolvedBy":"Resolvido por:","more":"+{count} mais","reqs":"reqs","success":"sucesso","proxyConfigured":"Proxy configurado","copyComboName":"Copiar nome do combo","enableCombo":"Ativar combo","disableCombo":"Desativar combo","testCombo":"Testar combo","duplicate":"Duplicar","proxyConfig":"Configuração de proxy","nameRequired":"Nome é obrigatório","nameInvalid":"Apenas letras, números, -, _, / e . permitidos","nameHint":"Letras, números, -, _, / e . permitidos","priorityDesc":"Fallback sequencial: tenta modelo 1 primeiro, depois 2, etc.","weightedDesc":"Distribui tráfego por porcentagem de peso com fallback","roundRobinDesc":"Distribuição circular: cada requisição vai para o próximo modelo na rotação","randomDesc":"Seleção aleatória uniforme, depois fallback para modelos restantes","leastUsedDesc":"Escolhe o modelo com menos requisições, equilibrando carga ao longo do tempo","costOptimizedDesc":"Roteia para o modelo mais barato primeiro baseado em preços","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar","models":"Modelos","autoBalance":"Auto-balancear","advancedSettings":"Configurações Avançadas","retryDelay":"Intervalo de Tentativa (ms)","concurrencyPerModel":"Concorrência / Modelo","queueTimeout":"Timeout da Fila (ms)","advancedHint":"Deixe vazio para usar padrões globais. Estes substituem configurações por provedor.","moveUp":"Mover para cima","moveDown":"Mover para baixo","removeModel":"Remover","saving":"Salvando...","weighted":"Ponderado","leastUsed":"Menos Usado","costOpt":"Custo-Otim","strategyGuideTitle":"Como usar esta estratégia","strategyGuideWhen":"Quando usar","strategyGuideAvoid":"Evite quando","strategyGuideExample":"Exemplo","strategyGuide":{"priority":{"when":"Você tem um modelo principal e quer fallback apenas em falha.","avoid":"Você precisa distribuir requisições entre modelos.","example":"Modelo principal para código e backup mais barato para indisponibilidade."},"weighted":{"when":"Você precisa dividir tráfego com percentuais controlados.","avoid":"Você não consegue manter os pesos atualizados.","example":"80% modelo estável + 20% modelo canário."},"round-robin":{"when":"Você quer distribuição previsível e equilibrada.","avoid":"Os modelos têm custo ou latência muito diferentes.","example":"Mesmo modelo em múltiplas contas para espalhar throughput."},"random":{"when":"Você quer distribuição simples com baixa configuração.","avoid":"Você precisa de garantias rígidas de distribuição.","example":"Protótipos rápidos com modelos equivalentes."},"least-used":{"when":"Você quer balanceamento adaptativo baseado no uso recente.","avoid":"Seu volume é baixo e não se beneficia dessa adaptação.","example":"Workloads mistos onde um modelo tende a ficar sobrecarregado."},"cost-optimized":{"when":"Redução de custo é a prioridade principal.","avoid":"A base de preços está ausente ou desatualizada.","example":"Jobs em lote ou segundo plano focados em menor custo."},"strict-random":{"when":"Você quer distribuição perfeitamente uniforme — cada modelo é usado uma vez antes de repetir.","avoid":"Os modelos têm qualidade ou latência muito diferentes e a ordem importa.","example":"Múltiplas contas do mesmo modelo para distribuir uso de forma equilibrada."}},"advancedHelp":{"maxRetries":"Quantas tentativas serão feitas antes de falhar a requisição.","retryDelay":"Espera inicial entre tentativas. Valores maiores reduzem picos.","timeout":"Tempo máximo da requisição antes de cancelar.","healthcheck":"Ignora modelos/provedores não saudáveis no roteamento.","concurrencyPerModel":"Máximo de requisições simultâneas por modelo no round-robin.","queueTimeout":"Tempo máximo em fila antes de expirar no round-robin."},"templatesTitle":"Templates rápidos","templatesDescription":"Aplique um perfil inicial e depois ajuste modelos e configuração.","templateApply":"Aplicar template","templateHighAvailability":"Alta disponibilidade","templateHighAvailabilityDesc":"Roteamento por prioridade com healthcheck e retries seguros.","templateCostSaver":"Economia de custo","templateCostSaverDesc":"Roteamento custo-otimizado para workloads com foco em orçamento.","templateBalanced":"Carga balanceada","templateBalancedDesc":"Roteamento por menos uso para distribuir demanda ao longo do tempo.","usageGuideHide":"Ocultar","usageGuideDontShowAgain":"Não mostrar novamente","usageGuideShow":"Mostrar guia","quickTestTitle":"Combo pronto para validar","quickTestDescription":"Rode um teste agora para confirmar fallback e latência.","testNow":"Testar agora","pricingCoverage":"Cobertura de preços","pricingCoverageHint":"Custo-otimizado funciona melhor quando todos os modelos têm preço configurado.","pricingAvailable":"Preço disponível","pricingMissing":"Sem preço","pricingAvailableShort":"com-preço","pricingMissingShort":"sem-preço","warningRoundRobinSingleModel":"Round-robin é mais útil com pelo menos 2 modelos.","warningCostOptimizedPartialPricing":"Apenas {priced} de {total} modelos têm preço. O roteamento pode ficar parcialmente orientado a custo.","warningCostOptimizedNoPricing":"Não há dados de preço para este combo. Custo-otimizado pode rotear de forma inesperada.","readinessTitle":"Pronto para salvar?","readinessDescription":"Revise a lista de verificação antes de criar ou atualizar este combo.","readinessCheckName":"O nome do combo é válido","readinessCheckModels":"Pelo menos um modelo está selecionado","readinessCheckWeights":"O total dos pesos é 100%","readinessCheckWeightsOptional":"Regra de pesos não obrigatória","readinessCheckPricing":"Dados de preços disponíveis","readinessCheckPricingOptional":"Regra de preços não obrigatória","saveBlockedTitle":"O salvamento está bloqueado até corrigir os itens abaixo:","saveBlockName":"Defina um nome para o combo.","saveBlockModels":"Adicione pelo menos um modelo.","saveBlockWeighted":"Ajuste os pesos para 100% (atual: {total}%).","saveBlockPricing":"Adicione preço para pelo menos um modelo ou escolha outra estratégia.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe básico","description":"Use um modelo principal e mantenha a cadeia de fallback curta e confiável.","tip1":"Coloque o modelo mais confiável em primeiro.","tip2":"Mantenha 1-2 modelos de backup com qualidade similar.","tip3":"Use retries seguros para absorver falhas transitórias do provedor."},"weighted":{"title":"Divisão controlada de tráfego","description":"Ótimo para rollouts canário e migração gradual entre modelos.","tip1":"Comece com divisão conservadora tipo 90/10.","tip2":"Mantenha o total em 100% e rebalanceie após mudanças.","tip3":"Monitore sucesso e latência antes de aumentar o peso canário."},"round-robin":{"title":"Distribuição previsível de carga","description":"Melhor quando os modelos são equivalentes e você precisa de distribuição uniforme.","tip1":"Use pelo menos 2 modelos.","tip2":"Configure limites de concorrência para evitar sobrecarga.","tip3":"Use timeout de fila para falhar rápido sob saturação."},"random":{"title":"Distribuição rápida com baixa configuração","description":"Use quando precisar de distribuição simples sem garantias rígidas.","tip1":"Use modelos com perfis de latência semelhantes.","tip2":"Mantenha retries habilitados para absorver falhas aleatórias.","tip3":"Prefira para experimentação, não para SLAs rígidos."},"least-used":{"title":"Balanceamento adaptativo","description":"Roteia para modelos menos usados para reduzir hotspots ao longo do tempo.","tip1":"Funciona melhor sob tráfego contínuo.","tip2":"Combine com health checks para balanceamento mais seguro.","tip3":"Acompanhe uso por modelo para validar ganhos na distribuição."},"cost-optimized":{"title":"Roteamento por orçamento","description":"Roteia para modelos mais baratos quando metadados de preço estão disponíveis.","tip1":"Garanta cobertura de preços para todos os modelos selecionados.","tip2":"Mantenha um fallback de qualidade para prompts difíceis.","tip3":"Use para jobs em lote/background onde custo é o KPI principal."},"strict-random":{"title":"Distribuição estritamente uniforme","description":"Cada modelo é usado exatamente uma vez antes de reembaralhar o baralho.","tip1":"Ideal para múltiplas contas do mesmo modelo.","tip2":"Garante que nenhuma conta é repetida antes de todas serem usadas.","tip3":"Combine com health checks para pular contas indisponíveis sem quebrar o ciclo."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Custos","budget":"Orçamento","totalCost":"Custo Total","breakdown":"Detalhamento de Custos","noData":"Sem dados de custo","byModel":"Por Modelo","byProvider":"Por Provedor"},"endpoint":{"title":"Endpoint da API","available":"Endpoints Disponíveis","cloudProxy":"Proxy na Nuvem","disableConfirm":"Tem certeza que deseja desativar o proxy na nuvem?","baseUrl":"URL Base","apiKeyLabel":"Chave de API","registeredKeys":"Chaves Registradas","chatCompletions":"Chat Completions","responses":"Respostas","listModels":"Listar Modelos","usingCloudProxy":"Usando Proxy na Nuvem","usingLocalServer":"Usando Servidor Local","machineId":"ID da Máquina: {id}...","disableCloud":"Desativar Nuvem","enableCloud":"Ativar Nuvem","modelsAcrossEndpoints":"{models} modelos em {endpoints} endpoints","chatDesc":"Chat streaming e não-streaming com todos os provedores","embeddings":"Embeddings","embeddingsDesc":"Embeddings de texto para busca e pipelines RAG","imageGeneration":"Geração de Imagens","imageDesc":"Gerar imagens a partir de prompts de texto","rerank":"Rerank","rerankDesc":"Reordenar documentos por relevância a uma consulta","audioTranscription":"Transcrição de Áudio","audioTranscriptionDesc":"Transcrever arquivos de áudio para texto (Whisper)","textToSpeech":"Texto para Fala","textToSpeechDesc":"Converter texto em fala natural","moderations":"Moderações","moderationsDesc":"Moderação de conteúdo e classificação de segurança","responsesDesc":"API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados","listModelsDesc":"Listar todos os modelos disponíveis em todos os provedores conectados","settingsApiDesc":"Ler e modificar a configuração do OmniRoute via API","settingsApi":"Settings API","categoryCore":"APIs Principais","categoryMedia":"Mídia e Multi-Modal","categoryUtility":"Utilidades e Gerenciamento","enableCloudTitle":"Ativar Proxy na Nuvem","whatYouGet":"O que você terá","cloudBenefitAccess":"Acesse sua API de qualquer lugar do mundo","cloudBenefitShare":"Compartilhe o endpoint com sua equipe facilmente","cloudBenefitPorts":"Sem 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 usada, será automaticamente excluída.","cloudUnstableNote":"A nuvem está atualmente instável com Claude Code OAuth em alguns casos.","cloudConnected":"Proxy na Nuvem conectado!","connectingToCloud":"Conectando à nuvem...","verifyingConnection":"Verificando conexão...","connecting":"Conectando...","verifying":"Verificando...","connected":"Conectado!","disableCloudTitle":"Desativar Proxy na Nuvem","disableWarning":"Todas as sessões de autenticação serão excluídas da nuvem.","syncingData":"Sincronizando dados mais recentes...","disablingCloud":"Desativando nuvem...","syncing":"Sincronizando...","disabling":"Desativando...","cloudConnectedVerified":"Proxy na Nuvem 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 nuvem","failedEnable":"Falha ao ativar nuvem","cloudRequestTimeout":"Tempo limite da requisição em nuvem","cloudRequestFailed":"Falha na requisição em nuvem","cloudWorkerUnreachable":"Não foi possível alcançar o worker de nuvem. Verifique se o serviço cloud está rodando (npm run dev em /cloud).","connectionFailed":"Falha na conexão","syncFailed":"Falha ao sincronizar dados da nuvem","providerModelsTitle":"{provider} — Modelos","noModelsForProvider":"Nenhum modelo disponível para este provedor.","chat":"Chat","embedding":"Embedding","image":"Imagem","custom":"custom","modelsCount":"{count, plural, one {# modelo} other {# modelos}}","sectionTitle":"Superfície de Integração","sectionDescription":"APIs compatíveis com OpenAI e endpoints operacionais de protocolos","tabApis":"APIs compatíveis com OpenAI","tabProtocols":"Protocolos","tabsAria":"Seções de endpoint","protocolsTitle":"Protocolos","protocolsDescription":"MCP e A2A são endpoints de primeira classe com observabilidade e controles dedicados.","mcpCardTitle":"Servidor MCP","mcpCardDescription":"Model Context Protocol via stdio","a2aCardTitle":"Servidor A2A","a2aCardDescription":"Endpoint Agent2Agent JSON-RPC","protocolToolsLabel":"Ferramentas","protocolTasksLabel":"Tarefas","protocolActiveStreamsLabel":"Streams ativos","protocolLastActivity":"Última atividade","quickStart":"Início rápido","openMcpDashboard":"Abrir gestão MCP","openA2aDashboard":"Abrir gestão A2A","mcpQuickStartTitle":"MCP Início rápido","mcpQuickStartStep1":"Inicie o servidor MCP com `omniroute --mcp`.","mcpQuickStartStep2":"Configure o cliente MCP para conectar por transporte stdio.","mcpQuickStartStep3":"Execute ferramentas como `omniroute_get_health` e `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Início rápido","a2aQuickStartStep1":"Descubra o agent card em `/.well-known/agent.json`.","a2aQuickStartStep2":"Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.","a2aQuickStartStep3":"Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected."},"mcpDashboard":{"loading":"Carregando painel MCP...","activate":"ativar","deactivate":"desativar","confirmSwitchCombo":"Confirmar {action} combo \\"{combo}\\"?","switchComboFailed":"Falha ao alternar estado do combo.","switchComboSuccess":"Combo \\"{combo}\\" atualizado.","confirmApplyProfile":"Aplicar perfil de resiliência \\"{profile}\\"?","applyProfileFailed":"Falha ao aplicar perfil de resiliência.","applyProfileSuccess":"Perfil \\"{profile}\\" aplicado.","confirmResetBreakers":"Resetar todos os circuit breakers?","resetBreakersFailed":"Falha ao resetar circuit breakers.","resetBreakersSuccess":"Circuit breakers resetados.","processStatus":"Status do processo","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Uptime da sessão","lastHeartbeat":"Último heartbeat","activity24h":"Atividade (24h)","totalCalls":"Total de chamadas","successRate":"Taxa de sucesso","avgLatency":"Latência média","topTools":"Top ferramentas","noToolCalls24h":"Sem chamadas de ferramenta nas últimas 24 horas.","runtimeDetails":"Detalhes de runtime","transport":"Transporte","scopesEnforced":"Scopes aplicados","yes":"sim","no":"não","lastCall":"Última chamada","heartbeatPath":"Caminho do heartbeat","operationalControls":"Controles operacionais","switchCombo":"Trocar combo","inactive":"inativo","active":"ativo","activateCombo":"Ativar combo","deactivateCombo":"Desativar combo","applyResilienceProfile":"Aplicar perfil de resiliência","profileAggressive":"agressivo","profileBalanced":"balanceado","profileConservative":"conservador","applyProfile":"Aplicar perfil","resetCircuitBreakers":"Resetar circuit breakers","resetCircuitBreakersHelp":"Limpa o estado atual de breaker e os contadores de falha dos provedores.","resetAllBreakers":"Resetar todos os breakers","toolsAndScopes":"Ferramentas e scopes","tableTool":"Ferramenta","tableScopes":"Scopes","tablePhase":"Fase","tableAudit":"Auditoria","auditLog":"Log de auditoria","auditSummary":"Chamadas: {total} | página {page} de {totalPages}","allTools":"Todas as ferramentas","allResults":"Todos os resultados","success":"Sucesso","failure":"Falha","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Carregando registros de auditoria...","noAuditEntriesForFilters":"Nenhum registro de auditoria para os filtros atuais.","tableTimestamp":"Timestamp","tableDuration":"Duração","tableResult":"Resultado","tableApiKey":"Chave API","failed":"falhou","previous":"Anterior","next":"Próxima"},"a2aDashboard":{"loading":"Carregando painel A2A...","confirmCancelTask":"Cancelar tarefa {taskId}?","cancelTaskFailed":"Falha ao cancelar tarefa.","cancelTaskSuccess":"Tarefa {taskId} cancelada.","smokeSendFailed":"Falha no smoke test de message/send.","smokeSendSuccessWithTask":"message/send ok (tarefa {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"Falha no smoke test de message/stream.","smokeStreamSuccessWithTask":"message/stream ok (tarefa {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finalizado sem task id.","health":"Saúde","ok":"ok","totalTasks":"Total de tarefas","activeStreams":"Streams ativos","lastTask":"Última tarefa","taskStateOverview":"Visão de estados das tarefas","state":{"submitted":"submetida","working":"executando","completed":"concluída","failed":"falhou","cancelled":"cancelada"},"agentCard":"Cartão do agente","version":"Versão","url":"URL","capabilities":"Capacidades","agentCardNotAvailable":"Cartão do agente indisponível.","quickValidation":"Validação rápida","quickValidationDescription":"Executa chamadas de smoke pelo endpoint `/a2a` em produção.","runMessageSend":"Executar message/send","runMessageStream":"Executar message/stream","taskManagement":"Gestão de tarefas","taskSummary":"{total} tarefas | página {page} de {totalPages}","allStates":"todos","allSkills":"todas as skills","loadingTasks":"Carregando tarefas...","noTasksForFilters":"Nenhuma tarefa encontrada para os filtros atuais.","tableTask":"Tarefa","tableSkill":"Skill","tableState":"Estado","tableUpdated":"Atualizada","tableActions":"Ações","view":"Ver","cancel":"Cancelar","previous":"Anterior","next":"Próxima","taskDetail":"Detalhe da tarefa","close":"Fechar","metadata":"Metadados","events":"Eventos","artifacts":"Artefatos"},"health":{"title":"Saúde do Sistema","description":"Monitoramento em tempo real da sua instância OmniRoute","healthy":"Saudável","degraded":"Degradado","down":"Offline","uptime":"Tempo Ativo","memory":"Memória","memoryRss":"Memória (RSS)","heap":"Heap","cpu":"CPU","database":"Banco de Dados","version":"Versão","lastCheck":"Última Verificação","providerHealth":"Saúde dos Provedores","systemMetrics":"Métricas do Sistema","tokenHealth":"Saúde dos Tokens","refreshAll":"Atualizar Tudo","checkNow":"Verificar Agora","loadingHealth":"Carregando dados de saúde...","failedToLoad":"Falha ao carregar dados de saúde: {error}","retry":"Tentar Novamente","allOperational":"Todos os sistemas operacionais","issuesDetected":"Problemas detectados no sistema","updatedAt":"Atualizado {time}","latency":"Latência","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total de requisições","noDataYet":"Sem dados ainda","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":"Nenhum dado de circuit breaker disponível. Faça algumas requisições primeiro.","providerHealthStatusAria":"Status de saúde dos provedores","issuesLabel":"Problemas Detectados","operational":"Operacional","providers":"Provedores","healthyCount":"{count} saudáveis","nodeVersion":"Node {version}","failures":"{count} falha","failuresPlural":"{count} falhas","lastFailure":"Última","rateLimitStatus":"Status de Limite de Taxa","activeLimiters":"{count} limitador ativo","activeLimitersPlural":"{count} limitadores ativos","queued":"Na Fila","queuedCount":"{count} na fila","running":"executando","runningCount":"{count} executando","ok":"OK","activeLockouts":"Bloqueios Ativos","resetConfirm":"Resetar todos os circuit breakers para estado saudável? Isso limpará todos os contadores de falha e restaurará todos os provedores ao status operacional.","resetAllTitle":"Resetar todos os circuit breakers para estado saudável","resetting":"Resetando...","resetAll":"Resetar Tudo","until":"Até {time}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Configurado no painel","configuredProvidersHint":"Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.","activeProvidersHint":"Provedores configurados atualmente habilitados para solicitações de roteamento.","monitoredProvidersHint":"Provedores atualmente monitorados por monitores de integridade dos disjuntores."},"limits":{"title":"Limites e Cotas","rateLimit":"Limite de Taxa","remaining":"Restante","requestsPerMinute":"Requisições/min","tokensPerMinute":"Tokens/min","dailyLimit":"Limite Diário"},"logs":{"title":"Logs","requestLogs":"Logs de Requisições","proxyLogs":"Logs do Proxy","auditLog":"Log de Auditoria","console":"Console","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 do log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar log de auditoria","tableAria":"Entradas do log de auditoria","failedFetchAuditLog":"Falha ao carregar log de auditoria","showing":"Mostrando {count} entradas (offset {offset})","search":"Buscar","timestamp":"Data/Hora","action":"Ação","actor":"Ator","target":"Alvo","details":"Detalhes","ipAddress":"Endereço IP","notAvailable":"—","noEntries":"Nenhuma entrada de log 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":"Começar","skip":"Pular","skipWizard":"Pular assistente completamente","skipPassword":"Pular configuração de senha","skipAndContinue":"Pular e Continuar","passwordLabel":"Senha","confirmPassword":"Confirmar Senha","enterPassword":"Digite a senha","confirmPasswordPlaceholder":"Confirme a senha","passwordsMismatch":"As senhas não coincidem","setupComplete":"Configuração Concluída!","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","apiKeyMgmt":"Ger. de Chaves API","securityDesc":"Defina uma senha para proteger seu painel, ou pule por enquanto.","providerDesc":"Conecte seu primeiro provedor de IA. Você pode adicionar mais depois.","apiKeyRequired":"Chave de API (obrigatório)","customUrlOptional":"URL personalizada (opcional)","testDesc":"Vamos verificar se a conexão com seu provedor funciona.","runTest":"Executar 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 pelo painel depois.","testFailed":"Teste falhou, mas você pode configurar isso depois.","couldNotTest":"Não foi possível testar agora. Você pode testar pelo painel.","doneDesc":"Tudo pronto! Sua instância OmniRoute está configurada e pronta para rotear requisições de IA.","yourEndpoint":"Seu endpoint:","continue":"Continuar","retry":"Tentar Novamente","failedSetPassword":"Falha ao definir senha. Tente novamente.","failedAddProvider":"Falha ao adicionar provedor. Tente novamente.","connectionError":"Erro de conexão. Tente novamente.","provider":"Provedor"},"providers":{"title":"Provedores","addProvider":"Adicionar Provedor","editProvider":"Editar Provedor","deleteProvider":"Excluir Provedor","noProviders":"Nenhum provedor configurado","modelAvailability":"Disponibilidade de Modelos","accounts":"Contas","newAccount":"Nova Conta","deleteConfirm":"Tem certeza que deseja excluir este provedor?","testing":"Testando...","testConnection":"Testar conexão","testSuccess":"Conexão bem-sucedida","testFailed":"Falha na conexão","available":"Disponível","cooldown":"Cooldown","unavailable":"Indisponível","unknown":"Desconhecido","oauthLabel":"OAuth","compatibleLabel":"Compatível","chat":"Chat","responses":"Responses","messages":"Mensagens","oauthProviders":"Provedores OAuth","freeProviders":"Provedores Gratuitos","apiKeyProviders":"Provedores por Chave de API","compatibleProviders":"Provedores Compatíveis por Chave de API","testAll":"Testar Todos","testAllOAuth":"Testar todas as conexões OAuth","testAllFree":"Testar todas as conexões gratuitas","testAllApiKey":"Testar todas as conexões por chave de API","testAllCompatible":"Testar todas as conexões compatíveis","connected":"{count} Conectado(s)","errorCount":"{count} Erro ({code})","errorCountNoCode":"{count} Erro","noConnections":"Sem conexões","disabled":"Desativado","enableProvider":"Ativar provedor","disableProvider":"Desativar provedor","testResults":"Resultados do Teste","noCompatibleYet":"Nenhum provedor compatível adicionado","compatibleHint":"Use os botões acima para adicionar endpoints compatíveis com OpenAI ou Anthropic","addOpenAICompatible":"Adicionar Compatível OpenAI","addAnthropicCompatible":"Adicionar Compatível Anthropic","addNewProvider":"Adicionar Novo Provedor","backToProviders":"Voltar para Provedores","configureNewProvider":"Configure um novo provedor de IA para usar com suas aplicações.","providerLabel":"Provedor","selectProvider":"Selecione um provedor","selectedProvider":"Provedor selecionado","authMethod":"Método de Autenticação","apiKeyLabel":"Chave de API","apiKeyRequired":"Chave de API é obrigatória","selectProviderRequired":"Selecione um provedor","enterApiKey":"Digite sua chave de API","apiKeySecure":"Sua chave de API será criptografada e armazenada com segurança.","oauth2Connect":"Conectar com OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Conecte sua conta usando autenticação OAuth2.","displayName":"Nome de Exibição","displayNamePlaceholder":"ex.: API de Produção, Ambiente Dev","displayNameHint":"Opcional. Um nome amigável para identificar esta configuração.","active":"Ativo","activeDescription":"Habilitar este provedor para uso em suas aplicações","cancel":"Cancelar","createProvider":"Criar Provedor","failedCreate":"Falha ao criar provedor","errorOccurred":"Ocorreu um erro. Tente novamente.","modelStatus":"Status dos Modelos","allModelsOperational":"Todos os modelos operacionais","modelsWithIssues":"{count} modelo(s) com problemas","allModelsNormal":"Todos os modelos estão respondendo normalmente.","cooldownCleared":"Cooldown limpo para {model}","failedClearCooldown":"Falha ao limpar cooldown","loadingAvailability":"Carregando disponibilidade dos modelos...","clearCooldown":"Limpar","clearing":"Limpando...","until":"Até {time}","providerTestFailed":"Teste de provedor falhou","modeTest":"Teste {mode}","passedCount":"{count} passaram","failedCount":"{count} falharam","testedCount":"{count} testados","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERRO","noActiveConnectionsInGroup":"Nenhuma conexão ativa encontrada para este grupo.","allTestsPassed":"Todos os {total} testes passaram","testSummary":"{passed}/{total} passaram, {failed} falharam","nameLabel":"Nome","prefixLabel":"Prefixo","baseUrlLabel":"URL Base","apiTypeLabel":"Tipo de API","prefixHint":"Obrigatório. Prefixo único 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":"Conexão válida!","connectionFailed":"Falha na conexão. Verifique URL e 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 alias","failedSaveConnection":"Falha ao salvar conexão","failedSaveConnectionRetry":"Falha ao salvar conexão. Tente novamente.","failedRetestConnection":"Falha ao retestar conexão","deleteCompatibleNodeConfirm":"Excluir este nó Compatível com {type}?","anthropicCompatibleDetails":"Detalhes Compatível Anthropic","openaiCompatibleDetails":"Detalhes Compatível OpenAI","messagesApi":"API de Mensagens","responsesApi":"API de Respostas","chatCompletions":"Chat Completions","importingModels":"Importando...","importFromModels":"Importar de /models","clearAllModels":"Limpar todos os modelos","clearAllModelsConfirm":"Tem certeza de que deseja remover todos os modelos deste provedor? Isto não pode ser desfeito.","clearAllModelsSuccess":"Todos os modelos foram apagados","clearAllModelsFailed":"Falha ao limpar modelos","addConnectionToImport":"Adicione uma conexão para habilitar importação.","noModelsConfigured":"Nenhum modelo configurado","connectionCount":"{count} conexão(õ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 habilitar proteção de limite de taxa","disableRateLimitProtection":"Clique para desabilitar proteção de limite de taxa","productionKey":"Chave de Produção","enterNewApiKey":"Insira a nova chave API","optional":"Opcional","anthropicCompatibleName":"Compatível Anthropic","openaiCompatibleName":"Compatível OpenAI","failedImportModels":"Falha ao importar modelos","noModelsReturnedFromEndpoint":"Nenhum modelo retornado do endpoint /models.","importingModelsProgress":"Importando {current} de {total} modelos...","foundModelsStartingImport":"{count} modelos encontrados. Iniciando importação...","importingModelById":"Importando {modelId}...","importSuccessCount":"Importação concluída com sucesso: {count, plural, one {# modelo} other {# modelos}}!","noNewModelsAddedExisting":"Nenhum novo modelo foi adicionado (todos já existem).","importDoneCount":"✓ Concluído! {count, plural, one {# modelo importado.} other {# modelos importados.}}","unexpectedErrorOccurred":"Ocorreu um erro inesperado","connectionCountLabel":"{count, plural, one {# conexão} other {# conexões}}","messagesPath":"messages","responsesPath":"responses","chatCompletionsPath":"chat/completions","add":"Adicionar","edit":"Editar","delete":"Excluir","anthropic":"Anthropic","openai":"OpenAI","singleConnectionPerCompatible":"Apenas 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":"Configurar 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 local","statusAuthFailed":"falha de autenticação","statusRateLimited":"limite de taxa atingido","statusNetworkIssue":"problema de rede","statusTestUnsupported":"teste não suportado","statusUnavailable":"indisponível","statusFailed":"falhou","statusError":"erro","oauthAccount":"Conta OAuth","errorTypeRuntime":"Runtime local","errorTypeUpstreamAuth":"Auth upstream","errorTypeMissingCredential":"Credencial ausente","errorTypeRefreshFailed":"Falha ao renovar","errorTypeTokenExpired":"Token expirado","errorTypeRateLimited":"Rate limited","errorTypeUpstreamUnavailable":"Upstream indisponível","errorTypeNetworkError":"Erro de rede","errorTypeTestUnsupported":"Teste não suportado","errorTypeUpstreamError":"Erro upstream","proxySourceGlobal":"Global","proxySourceProvider":"Provedor","proxySourceKey":"Chave","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Auto: {priority}","proxy":"Proxy","retestAuthentication":"Retestar autenticação","retest":"Retestar","disableConnection":"Desativar conexão","enableConnection":"Ativar conexão","reauthenticateConnection":"Reautenticar 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":"anthropic/claude-3-opus","customModels":"Modelos Personalizados","customModelsHint":"Adicione IDs de modelo que não estão na lista padrão. Eles ficarão disponíveis para roteamento.","modelId":"ID do Modelo","customModelPlaceholder":"ex.: 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 modelo personalizado","modelAddedSuccess":"Modelo {modelId} adicionado com sucesso","failedAddModelTryAgain":"Falha ao adicionar modelo. Tente novamente.","failedSaveImportedModel":"Falha ao salvar modelo importado no banco de modelos personalizados","failedImportModelsTryAgain":"Falha ao importar modelos. Tente novamente.","failedRemoveModelFromDatabase":"Falha ao remover modelo do banco de dados","modelRemovedSuccess":"Modelo removido com sucesso","failedDeleteModelTryAgain":"Falha ao excluir modelo. 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":"A validação da chave de API falhou. Verifique sua chave e tente novamente.","addProviderApiKeyTitle":"Adicionar Chave de API de {provider}","checking":"Verificando...","check":"Verificar","valid":"Válido","invalid":"Inválido","creating":"Criando...","validationChecksAnthropicCompatible":"A validação verifica {provider} conferindo a chave de API.","validationChecksOpenAiCompatible":"A validação verifica {provider} via /models na sua URL base.","priorityLabel":"Prioridade","saving":"Salvando...","save":"Salvar","editConnection":"Editar Conexão","accountName":"Nome da conta","email":"Email","healthCheckMinutes":"Health Check (min)","healthCheckHint":"Intervalo proativo de renovação de token. 0 = desativado.","groupLabel":"Ambiente","groupPlaceholder":"ex: eKaizen, Pessoal","failedTestConnection":"Falha ao testar conexão","failed":"Falhou","leaveBlankKeepCurrentApiKey":"Deixe em branco para manter a chave de API atual.","editCompatibleTitle":"Editar Compatível {type}","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Chave de API (para verificação)","compatibleProdPlaceholder":"{type} Compatível (Prod)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","applyCodexAuthLocal":"Aplicar auth","exportCodexAuthFile":"Exportar auth","codexAuthAppliedLocal":"auth.json do Codex aplicado localmente","codexAuthApplyFailed":"Falha ao aplicar o auth.json do Codex localmente","codexAuthExported":"auth.json do Codex exportado","codexAuthExportFailed":"Falha ao exportar o auth.json do Codex","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Sincronização automática","autoSyncTooltip":"Atualize automaticamente a lista de modelos a cada 24h (configurável via MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Sincronização automática habilitada – os modelos serão atualizados periodicamente","autoSyncDisabled":"Sincronização automática desativada","autoSyncToggleFailed":"Falha ao alternar a sincronização automática","allModelsAlreadyImported":"Todos os modelos já foram importados","noNewModelsToImport":"Nenhum modelo novo para importar — todos os modelos já estão no registro ou na lista de modelos personalizados","skippingExistingModels":"Ignorando {count} modelos existentes"},"settings":{"title":"Configurações","general":"Geral","security":"Segurança","appearance":"Aparência","routing":"Roteamento","cache":"Cache","resilience":"Resiliência","systemPrompt":"Prompt do Sistema","thinkingBudget":"Orçamento de Raciocínio","proxy":"Proxy","pricing":"Preços","storage":"Armazenamento","policies":"Políticas","ipFilter":"Filtro de IP","comboDefaults":"Padrões de Combo","fallbackChains":"Cadeias de Fallback","changePassword":"Alterar Senha","enablePassword":"Ativar Senha","darkMode":"Modo Escuro","lightMode":"Modo Claro","systemTheme":"Tema do Sistema","enableCache":"Ativar Cache","cacheTTL":"TTL do Cache","maxCacheSize":"Tamanho Máximo do Cache","clearCache":"Limpar Cache","cacheHits":"Acertos de Cache","cacheMisses":"Erros de Cache","hitRate":"Taxa de Acerto","cacheEntries":"Entradas no Cache","circuitBreaker":"Disjuntor","retryPolicy":"Política de Retentativa","maxRetries":"Máximo de Tentativas","retryDelay":"Intervalo de Retentativa","timeoutMs":"Timeout (ms)","enableSystemPrompt":"Ativar Prompt do Sistema","systemPromptText":"Texto do Prompt do Sistema","enableThinking":"Ativar Raciocínio","maxThinkingTokens":"Máximo de Tokens de Raciocínio","enableProxy":"Ativar Proxy","proxyUrl":"URL do Proxy","pricingRates":"Formato de Taxas de Preço","currentPricing":"Visão Geral de Preços Atual","loadingPricing":"Carregando dados de preços...","noPricing":"Nenhum dado de preço disponível","input":"Entrada","output":"Saída","cached":"Em Cache","reasoning":"Raciocínio","cacheCreation":"Criação de Cache","customPricing":"Preços Personalizados","databaseSize":"Tamanho do Banco de Dados","backupDb":"Backup do Banco de Dados","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":"Ativar Logs de Requisição","logRetention":"Retenção de Logs","ipWhitelist":"Lista de IPs Permitidos","ipBlacklist":"Lista de IPs Bloqueados","addIP":"Adicionar IP","savedSuccessfully":"Configurações salvas com sucesso","ai":"IA","advanced":"Avançado","localMode":"Modo Local — Todos os dados armazenados na sua máquina","settingsSectionsAria":"Seções de configurações","switchThemes":"Alternar entre temas claro e escuro","themeSelectionAria":"Seleção de tema","themeLight":"Claro","themeDark":"Escuro","themeSystem":"Sistema","hideHealthLogs":"Ocultar Logs de Health Check","hideHealthLogsDesc":"Quando ATIVADO, suprime mensagens [HealthCheck] no console do servidor","themeAccent":"Cor do tema","themeAccentDesc":"Escolha uma cor predefinida ou crie seu próprio tema com uma cor","themeCreate":"Criar tema","themeCustom":"Tema personalizado","themeBlue":"Azul","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","promptCache":"Cache de Prompt","flushCache":"Limpar Cache","flushing":"Limpando…","size":"Tamanho","hits":"Acertos","evictions":"Remoções","loadingCacheStats":"Carregando estatísticas do cache…","globalProxy":"Proxy Global","globalProxyDesc":"Configure um proxy de saída global para todas as chamadas de API. Provedores individuais, combos e chaves podem sobrescrever.","noGlobalProxy":"Nenhum proxy global configurado","globalLabel":"Global","configure":"Configurar","globalSystemPrompt":"Prompt de Sistema Global","systemPromptDesc":"Injetado em todas as requisições no nível do proxy","saved":"Salvo","systemPromptPlaceholder":"Digite o prompt de sistema para injetar em todas as requisições...","systemPromptHint":"Este prompt é adicionado antes da mensagem de sistema de cada requisição. Use para instruções globais, diretrizes de segurança ou regras de formatação.","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","passthrough":"Passagem Direta","passthroughDesc":"Sem alterações — cliente controla orçamento de raciocínio","auto":"Automático","autoDesc":"Remove toda configuração de raciocínio — provedor decide","custom":"Personalizado","customDesc":"Define um orçamento fixo de tokens para todas as requisições","adaptive":"Adaptativo","adaptiveDesc":"Escala orçamento baseado na complexidade da requisição","effortNone":"Nenhum (0 tokens)","effortLow":"Baixo (1K tokens)","effortMedium":"Médio (10K tokens)","effortHigh":"Alto (128K tokens)","tokenBudget":"Orçamento de Tokens","tokens":"tokens","baseEffortLevel":"Nível de Esforço Base","adaptiveHint":"Modo adaptativo escala a partir deste nível base baseado na quantidade de mensagens, uso de ferramentas e tamanho do prompt.","requireLogin":"Exigir login","requireLoginDesc":"Quando ATIVADO, dashboard exige senha. Quando DESATIVADO, acesso sem login.","currentPassword":"Senha Atual","enterCurrentPassword":"Digite a senha atual","newPassword":"Nova Senha","enterNewPassword":"Digite a nova senha","confirmPassword":"Confirmar Nova Senha","confirmPasswordPlaceholder":"Confirme a nova senha","passwordsNoMatch":"As senhas não coincidem","passwordUpdated":"Senha atualizada com sucesso","failedUpdatePassword":"Falha ao atualizar senha","errorOccurred":"Ocorreu um erro","updatePassword":"Atualizar Senha","setPassword":"Definir Senha","apiEndpointProtection":"Proteção de Endpoint da API","requireAuthModels":"Exigir chave de API para /models","requireAuthModelsDesc":"Quando ATIVADO, o endpoint /v1/models retorna 404 para requisições não autenticadas. Impede descoberta de modelos por usuários não autorizados.","blockedProviders":"Provedores Bloqueados","blockedProvidersDesc":"Ocultar provedores específicos da resposta /v1/models. Provedores bloqueados não aparecerão nas listagens de modelos.","providersBlocked":"{count} provedor(es) bloqueado(s) do /models","blockProviderTitle":"Bloquear {provider}","unblockProviderTitle":"Desbloquear {provider}","cliFingerprint":"Assinatura Digital CLI","cliFingerprintDesc":"Reproduz a assinatura digital dos CLIs nativos ao fazer proxy. Reorganiza headers e campos do body para parecer idêntico às ferramentas CLI oficiais. O IP do proxy é preservado.","cliFingerprintEnabled":"{count} provider(s) com fingerprint CLI ativo","enableFingerprintTitle":"Ativar fingerprint para {provider}","disableFingerprintTitle":"Desativar fingerprint para {provider}","routingStrategy":"Estratégia de Roteamento","fillFirst":"Preencher Primeiro","fillFirstDesc":"Usar contas em ordem de prioridade","roundRobin":"Round Robin","roundRobinDesc":"Ciclar entre todas as contas","p2c":"P2C","p2cDesc":"Escolher 2 aleatórias, usar a mais saudável","random":"Aleatório","randomDesc":"Conta aleatória em cada requisição","leastUsed":"Menos Usado","leastUsedDesc":"Escolher a conta usada menos recentemente","costOpt":"Custo Otimizado","costOptDesc":"Preferir conta mais barata disponível","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada conta uma vez antes de reembaralhar","stickyLimit":"Limite Fixo","stickyLimitDesc":"Chamadas por conta antes de trocar","modelAliases":"Aliases de Modelo","modelAliasesTitle":"Aliases de Modelo","modelAliasesDesc":"Padrões coringa para remapear nomes de modelos • Use * e ?","addCustomAlias":"Adicionar Alias Personalizado","deprecatedModelId":"ID do modelo depreciado","newModelId":"Novo ID do modelo","customAliases":"Aliases Personalizados","builtInAliases":"Aliases Integrados","backgroundDegradationTitle":"Degradação de Tarefas em Background","backgroundDegradationDesc":"Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos","enableDegradation":"Ativar Degradação em Background","enableDegradationHint":"Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos","tasksDetected":"Tarefas detectadas","degradationMap":"Mapa de Degradação de Modelos","premiumModel":"Modelo premium","cheapModel":"Modelo barato","detectionPatterns":"Padrões de Detecção","newPattern":"ex: \\"gerar um título\\"","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Padrão","targetModel":"Modelo Alvo","add":"+ Adicionar","session":"Sessão","sessionDetailsAria":"Detalhes da sessão","status":"Status","authenticated":"Autenticado","guest":"Visitante","loginTime":"Hora do Login","sessionAge":"Duração 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 por IP","ipAccessControlDesc":"Bloquear ou permitir endereços IP específicos","ipModeDisabled":"Desativado","ipModeBlacklist":"Lista de Bloqueio","ipModeWhitelist":"Lista de Permissão","ipModeWhitelistPriority":"Permissão Prioritária","addIpAddress":"Adicionar Endereço IP","ipAddressPlaceholder":"192.168.1.0/24 ou 10.0.*.*","block":"+ Bloquear","allow":"+ Permitir","blocked":"Bloqueados ({count})","allowed":"Permitidos ({count})","temporaryBans":"Banimentos Temporários ({count})","minLeft":"{min}m restantes","auditLog":"Log de Auditoria","searchAuditLogs":"Buscar logs de auditoria...","failedLoadAuditLog":"Falha ao carregar log de auditoria","noAuditEvents":"Nenhum evento de auditoria encontrado","action":"Ação","actor":"Ator","details":"Detalhes","time":"Hora","fallbackChainsTitle":"Cadeias de Fallback","fallbackChainsDesc":"Definir ordem de fallback de provedores por modelo","addChain":"+ Adicionar Cadeia","modelName":"Nome do Modelo","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Provedores (separados por vírgula, em ordem de prioridade)","providersCommaSeparatedPlaceholder":"anthropic, openai, gemini","createChain":"Criar Cadeia","noFallbackChains":"Sem Cadeias de Fallback","noFallbackChainsDesc":"Crie uma cadeia para definir a ordem de fallback de provedores para um modelo.","loadingFallbackChains":"Carregando cadeias de fallback...","deleteChainConfirm":"Excluir cadeia de fallback para \\"{model}\\"?","chainCreated":"Cadeia criada para {model}","chainDeleted":"Cadeia excluída para {model}","failedCreateChain":"Falha ao criar cadeia","failedDeleteChain":"Falha ao excluir cadeia","deleteChain":"Excluir cadeia","fillModelAndProviders":"Preencha o nome do modelo e os provedores","addAtLeastOneProvider":"Adicione pelo menos um provedor","comboDefaultsTitle":"Padrões de Combo","globalComboConfig":"Configuração global de combos","defaultStrategy":"Estratégia Padrão","defaultStrategyDesc":"Aplicada a novos combos sem estratégia explícita","comboStrategyAria":"Estratégia de combo","priority":"Prioridade","weighted":"Ponderado","maxRetriesLabel":"Máx. Tentativas","retryDelayLabel":"Atraso entre Tentativas (ms)","timeoutLabel":"Timeout (ms)","healthCheck":"Verificação de Saúde","healthCheckDesc":"Verificar disponibilidade do provedor antes","trackMetrics":"Rastrear Métricas","trackMetricsDesc":"Registrar métricas de requisição por combo","providerOverrides":"Sobrescritas por Provedor","providerOverridesDesc":"Substituir timeout e tentativas por provedor. Configurações do provedor substituem os padrões globais.","providerMaxRetriesAria":"{provider} tentativas máximas","providerTimeoutAria":"timeout de {provider} em ms","removeProviderOverrideAria":"Remover sobrescrita de {provider}","newProviderNamePlaceholder":"ex.: google, openai...","newProviderNameAria":"Nome do novo provedor","retries":"tentativas","ms":"ms","saveComboDefaults":"Salvar Padrões de Combo","maxNestingDepth":"Profundidade Máx. de Aninhamento","concurrencyPerModel":"Concorrência / Modelo","queueTimeout":"Timeout da Fila (ms)","providerProfiles":"Perfis de Provedor","providerProfilesDesc":"Configurações de resiliência separadas para provedores OAuth (baseados em sessão) e API Key (medidos). Provedores OAuth têm limites mais rigorosos devido a taxas mais baixas.","oauthProviders":"Provedores OAuth","apiKeyProviders":"Provedores API Key","transientCooldown":"Cooldown Transitório","rateLimitCooldown":"Cooldown de Rate Limit","maxBackoffLevel":"Nível Máx. de Backoff","cbThreshold":"Limiar do CB","cbResetTime":"Tempo de Reset do CB","rateLimiting":"Limitação de Taxa","rateLimitingDesc":"Provedores API Key são automaticamente limitados com padrões seguros. Limites são aprendidos dos cabeçalhos de resposta e se adaptam ao longo do tempo.","defaultSafetyNet":"Rede de Segurança Padrão","rpm":"RPM","minGap":"Intervalo Mín.","maxConcurrent":"Máx. Concorrentes","activeLimiters":"Limitadores Ativos","noActiveLimiters":"Nenhum limitador de taxa ativo ainda.","reservoir":"Reservatório","running":"Em Execução","queued":"Na Fila","circuitBreakers":"Disjuntores","breakerStateClosed":"Fechado","breakerStateOpen":"Aberto","breakerStateHalfOpen":"Semiaberto","tripped":"{count} aberto(s)","healthy":"{count} saudável(is)","resetAll":"Resetar Todos","noCircuitBreakers":"Nenhum disjuntor ativo ainda. Eles são criados automaticamente quando requisições passam pelo pipeline de combos.","failures":"{count} falha(s)","policiesLocked":"Políticas e Identificadores Bloqueados","allOperational":"Todos os sistemas operacionais — sem bloqueios ou disjuntores ativados","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 status de resiliência","saveFailed":"Falha ao salvar","resetFailed":"Falha ao resetar","loadingResilience":"Carregando status de resiliência...","retry":"Tentar Novamente","systemStorage":"Sistema e Armazenamento","allDataLocal":"Todos os dados armazenados localmente na 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","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":"Nenhum backup ainda","backupNow":"Backup Agora","backupRestore":"Backup e Restauração","viewBackups":"Ver Backups","hide":"Ocultar","backupRetentionDesc":"Snapshots do banco são criados automaticamente antes da restauração e a cada 15 minutos quando há alterações. Retenção: 24 horários + 30 diários com rotação inteligente.","loadingBackups":"Carregando backups...","noBackupsYet":"Nenhum backup disponível ainda. Backups serão criados automaticamente quando houver alterações.","backupsAvailable":"{count} backup(s) disponível(is)","refresh":"Atualizar","confirm":"Confirmar?","yes":"Sim","no":"Não","restore":"Restaurar","invalidFileType":"Tipo de arquivo inválido. Apenas 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 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 {# conexão} other {# conexões}}","noChangesSinceBackup":"Sem alterações 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ços de Modelos","modelPricingDesc":"Configure taxas de custo por modelo • Todas as taxas em $/1M tokens","providers":"Provedores","registry":"Registro","priced":"Com Preço","searchProvidersModels":"Buscar provedores ou modelos...","showAll":"Mostrar Todos","noProvidersMatch":"Nenhum provedor corresponde à sua busca.","howPricingWorks":"Como os Preços Funcionam","cacheWrite":"Escrita em Cache","unsaved":"não salvo","resetDefaults":"Restaurar Padrões","saveProvider":"Salvar Provedor","saving":"Salvando...","model":"Modelo","models":"modelos","moreProviders":"{count} provedores adicionais","withPricing":"com preço configurado","policiesCircuitBreakers":"Políticas e Disjuntores","activeIssuesDetected":"Problemas ativos detectados","off":"Desligado","resetPricingConfirm":"Resetar todos os preços de {provider} para os padrões?","pricingDescInput":"Input: tokens enviados ao modelo","pricingDescOutput":"Output: tokens gerados","pricingDescCached":"Cached: input reutilizado (~50% da taxa de input)","pricingDescReasoning":"Reasoning: tokens de raciocínio (fallback para Output)","pricingDescCacheWrite":"Cache Write: criação de entradas de cache (fallback para Input)","pricingDescFormula":"Custo = (input × taxa_input) + (output × taxa_output) + (cached × taxa_cached) por milhão de tokens.","pricingSettingsTitle":"Configurações de Preços","totalModels":"Total de Modelos","active":"Ativo","costCalculation":"Cálculo de Custo","costCalculationDesc":"Custos são calculados com base no uso de tokens e taxas de preço configuradas para cada modelo.","pricingFormat":"Formato de Preços","pricingFormatDesc":"Todas as taxas são em $/1M tokens (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 input em cache (tipicamente 50% da taxa de input)","reasoningTokenDesc":"Tokens especiais de raciocínio (fallback para taxa de output)","cacheCreationTokenDesc":"Tokens usados para criar entradas de cache (fallback para taxa de input)","customPricingNote":"Você pode sobrescrever preços padrão para modelos específicos. Sobrescritas personalizadas têm prioridade sobre preços detectados automaticamente.","editPricing":"Editar Preços","viewFullDetails":"Ver Detalhes Completos","themeCoral":"Coral","routingAdvancedGuideTitle":"Orientação avançada de roteamento","routingAdvancedGuideHint1":"Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.","routingAdvancedGuideHint2":"Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.","comboDefaultsGuideTitle":"Como ajustar os padrões de combinação","comboDefaultsGuideHint1":"Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.","comboDefaultsGuideHint2":"Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais."},"translator":{"title":"Tradutor","metaTitle":"Playground do Tradutor | OmniRoute","metaDescription":"Depure, teste e visualize traduções de formatos de API entre provedores","playgroundTitle":"Playground do Tradutor","playground":"Playground","realtime":"Atividade de Tradução em Tempo Real","chatTester":"Testador de Chat","testBench":"Bancada de Testes","liveMonitor":"Monitor ao Vivo","modeDescriptionPlayground":"Cole qualquer corpo de requisição de API e veja como o OmniRoute traduz entre formatos de provedores (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Envie requisições reais de chat pelo OmniRoute e inspecione o ciclo completo: entrada, requisição traduzida, resposta do provedor e saída traduzida.","modeDescriptionTestBench":"Execute cenários predefinidos e compare compatibilidade entre provedores e modelos.","modeDescriptionLiveMonitor":"Acompanhe eventos de tradução em tempo real conforme as requisições passam pelo OmniRoute.","modeDescriptionFallback":"Depure, teste e visualize como o OmniRoute traduz requisições de API entre provedores.","recentTranslations":"Traduções Recentes","noTranslations":"Nenhuma tradução ainda","source":"Origem","target":"Destino","time":"Hora","model":"Modelo","status":"Status","latency":"Latência","totalTranslations":"Total de Traduções","successful":"Sucesso","errors":"Erros","avgLatency":"Latência Média","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Ao vivo — atualizando automaticamente","paused":"Pausado","eventsAppearHint":"Os eventos de tradução aparecem aqui conforme as requisições passam pelo OmniRoute. Use qualquer um destes métodos para gerar eventos:","chatTesterTab":"Aba Testador de Chat","testBenchTab":"Aba Bancada de Testes","externalApiCalls":"Chamadas de API externas","ideCliIntegrations":"Integrações IDE/CLI","inMemoryNote":"Nota: os eventos são armazenados em memória e reiniciados quando o servidor reinicia.","ok":"OK","errorShort":"ERR","formatConverter":"Conversor de Formato","formatConverterDescription":"Cole ou digite um corpo de requisição JSON. O tradutor detectará automaticamente o formato de origem e converterá para o formato de destino. Use isso para depurar como o OmniRoute traduz requisições entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Entrada","output":"Saída","auto":"Auto","swapFormats":"Trocar formatos","translateAction":"Traduzir","clear":"Limpar","inputPlaceholder":"Cole um corpo de requisição aqui ou selecione um modelo abaixo...","exampleTemplates":"Modelos de Exemplo","exampleTemplatesHint":"— Clique para carregar","templateLoadHint":"O modelo carrega a requisição no formato {format}. Altere o Formato de Origem para carregar em outro formato.","compatibilityTester":"Testador de Compatibilidade","compatibilityReport":"Relatório de Compatibilidade","testBenchDescription":"Execute cenários predefinidos (Chat Simples, Chamada de Ferramenta, etc.) para validar tradução e compatibilidade do provedor. Selecione um formato de origem e o provedor de destino, depois execute todos os testes para ver a porcentagem de compatibilidade.","targetProvider":"Provedor de destino","runAllTests":"Executar todos os testes","runTest":"Executar teste","reRun":"Executar novamente","running":"Executando...","passed":"aprovados","failed":"falharam","passedIconLabel":"✅ Aprovado","chunks":"chunks","scenarioSimpleChat":"Chat Simples","scenarioToolCalling":"Chamada de Ferramenta","scenarioMultiTurn":"Multiturno","scenarioThinking":"Raciocínio","scenarioSystemPrompt":"Prompt de Sistema","scenarioStreaming":"Streaming","templateNames":{"simple-chat":"Chat Simples","tool-calling":"Chamada de Ferramenta","multi-turn":"Multiturno","thinking":"Raciocínio","system-prompt":"Prompt de Sistema","streaming":"Streaming"},"templateDescriptions":{"simple-chat":"Mensagem de texto básica","tool-calling":"Invocação de função/ferramenta","multi-turn":"Conversa com histórico","thinking":"Raciocínio estendido","system-prompt":"Instruções de sistema complexas","streaming":"Requisição de streaming SSE"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente prestativo.","userGreeting":"Olá! Como você está hoje?"},"toolCalling":{"userWeather":"Como está o tempo em São Paulo?","toolDescription":"Obtém o clima atual para uma localidade","cityNameDescription":"Nome da cidade"},"multiTurn":{"system":"Você é um assistente de programação.","userInitial":"Escreva uma função para ordenar um array em Python.","assistantExample":"Aqui está uma função simples de ordenação:\\n\\n```python\\ndef sort_array(arr):\\n return sorted(arr)\\n```","userFollowUp":"Agora faça para ordenar em ordem decrescente."},"thinking":{"question":"Qual é a soma dos 100 primeiros números primos?"},"systemPrompt":{"systemInstruction":"Você é um engenheiro de software sênior especializado em sistemas distribuídos. Responda de forma concisa usando boas práticas de mercado. Sempre forneça exemplos de código quando relevante. Formate suas respostas usando markdown.","question":"Como implemento o padrão circuit breaker?"},"streaming":{"prompt":"Conte uma história curta sobre um robô aprendendo a pintar."}},"openaiCompatibleLabel":"Compatível com OpenAI","anthropicCompatibleLabel":"Compatível com Anthropic","noTemplateForFormat":"Sem modelo para este formato","translationFailed":"Falha na tradução: {error}","pipelineDebugger":"Depurador de Pipeline","translationPipeline":"Pipeline de Tradução","pipelineVisualization":"Visualização do pipeline","pipelineVisualizationHint":"Envie uma mensagem para ver como sua requisição flui por detecção → tradução → chamada ao provedor.","chatTesterDescription":"Envie mensagens em um formato específico de cliente e inspecione cada etapa do pipeline de tradução.","chatTesterFlow":"Requisição do Cliente → Detecção de Formato → Intermediário OpenAI → Formato do Provedor → Resposta","clickStepToInspect":"Clique em qualquer etapa para inspecionar os dados naquele ponto.","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 uma requisição no formato","chatMessageHintSuffix":"traduzida pelo pipeline e enviada ao provedor selecionado.","youWithFormat":"Você ({format})","assistant":"Assistente","typeMessage":"Digite uma mensagem...","send":"Enviar","clientRequest":"Requisição do Cliente","clientRequestDescription":"O corpo de requisição como seu cliente enviaria","formatDetected":"Formato Detectado","formatDetectedDescription":"O OmniRoute detecta automaticamente o formato da API a partir da estrutura da requisição","openaiIntermediate":"Intermediário OpenAI","openaiIntermediateDescription":"Todos os formatos são primeiro normalizados para o formato OpenAI (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 stream SSE bruto da API do provedor","unexpectedError":"Ocorreu um erro inesperado","error":"Erro","errorMessage":"Erro: {message}","requestFailed":"Falha na requisição","noTextExtracted":"(Nenhum texto extraído)","liveMonitorDescriptionPrefix":"Mostra eventos de tradução conforme chamadas de API passam pelo OmniRoute. Os eventos vêm do buffer em memória (reinicia ao reiniciar o servidor). Use","liveMonitorDescriptionSuffix":", ou chamadas de API externas para gerar eventos."},"usage":{"title":"Uso","loggerTab":"Logger","proxyTab":"Proxy","budgetManagement":"Gerenciamento de Orçamento","budgetSaved":"Limites de orçamento salvos","budgetSaveFailed":"Falha ao salvar limites de orçamento","loadingBudgetData":"Carregando dados de orçamento...","noApiKeysTitle":"Nenhuma Chave 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":"ex.: 5.00","monthlyLimitPlaceholder":"ex.: 50.00","warningThresholdPlaceholder":"80","saveLimits":"Salvar limites","budgetOk":"Orçamento OK — {remaining} restantes","budgetExceeded":"Orçamento excedido — requisições podem ser bloqueadas","totalRequests":"Total de requisições","noDataYet":"Sem dados ainda","latency":"Latência","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Cache de Prompt","systemHealth":"Saúde do Sistema","entries":"Entradas","activeCount":"{count, plural, one {# ativo} other {# ativos}}","openCircuitBreakersDetected":"Disjuntores abertos detectados","hitRate":"Taxa de Acerto","hitsMisses":"Acertos / Erros","circuitBreakers":"Disjuntores","lockedIPs":"IPs Bloqueados","lockoutsAutoRefreshHint":"Bloqueios por limite de taxa por modelo • Atualização automática 10s","lockedCount":"{count, plural, one {# bloqueado} other {# bloqueados}}","timeLeft":"{time} restantes","howItWorks":"Como Funciona","howItWorksSubtitle":"Entenda como as avaliações validam as respostas do seu LLM","define":"Definir","defineStepDescription":"Crie casos de teste com prompts de entrada e critérios de saída esperados usando estratégias como contains, regex ou correspondência exata.","run":"Executar","runStepDescription":"Execute casos de teste contra seus endpoints de LLM via OmniRoute. Cada caso é enviado como uma requisição real de API.","evaluate":"Avaliar","evaluateStepDescription":"As respostas são comparadas com os critérios esperados. Veja aprovado/reprovado por caso com métricas de latência e feedback detalhado.","evalSuites":"Suítes de Avaliação","evalSuitesHint":"Clique em uma suíte para ver os casos de teste e execute para avaliar seus endpoints de LLM","evalsLoading":"Carregando suítes de avaliação...","noEvalSuitesFound":"Nenhuma suíte de avaliação encontrada","noEvalSuitesDescription":"As suítes de avaliação podem ser definidas via API ou em código. Elas testam saídas de modelos contra resultados esperados usando estratégias como contains, regex, correspondência exata e funções customizadas.","columnCase":"Caso","columnStatus":"Status","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":"Buscar suítes...","passSuffix":"de aprovação","casesCount":"{count, plural, one {# caso} other {# casos}}","runEval":"Executar avaliação","runningProgress":"Executando {current}/{total}...","passRate":"taxa de aprovação","summaryBreakdown":"{passed} aprovados · {failed} falharam · {total} total","passedIconLabel":"✅ Aprovado","failedIconLabel":"❌ Falhou","detailsContains":"Contém: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Esperado: \\"{expected}\\"","noResultsYet":"Sem resultados ainda","testCasesCount":"Casos de Teste ({count})","noTestCasesDefined":"Nenhum caso de teste definido","runEvalHint":"Clique em \\"Executar avaliação\\" para executar todos os casos contra seu endpoint de LLM. Cada teste envia uma requisição real pelo OmniRoute.","notifyNoTestCases":"Nenhum caso de teste definido para esta suíte","notifyAllCasesPassed":"Todos os {total} casos passaram ✅","notifySomeCasesFailed":"{passed}/{total} passaram, {failed} falharam","notifyEvalRunFailed":"Falha na execução da avaliação","notifyEvalTitle":"Avaliação: {name}","modelEvals":"Avaliações de Modelos","evalsHeroDescription":"Teste e valide seus endpoints de LLM executando suítes de avaliação predefinidas. Cada suíte contém casos de teste que enviam prompts reais pelo OmniRoute e comparam respostas com critérios esperados — ajudando você a detectar regressões, comparar modelos e garantir qualidade de resposta entre 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 bloqueado","activeSessions":"Sessões Ativas","noSessions":"Sem sessões ativas","sessionsHint":"Sessões aparecem conforme requisições passam pelo proxy","sessionsTrackedHint":"Rastreado por fingerprint de requisições • Atualização automática 5s","session":"Sessão","age":"Idade","requests":"Requisiçõ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 provedores com OAuth para acompanhar limites e uso de cota da API.","accountsCount":"{count, plural, one {# conta} other {# contas}}","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/D","rawPlanWithValue":"Plano bruto: {plan}","noPlanFromProvider":"Sem plano do provedor","noQuotaData":"Sem dados de cota","ungrouped":"Sem grupo","viewFlat":"Lista","viewByEnvironment":"Por Ambiente","noQuotaDataAvailable":"Nenhum dado de cota disponível","noAccountsForTierFilter":"Nenhuma conta encontrada para o filtro de plano","tierAll":"Todos","tierEnterprise":"Enterprise","tierTeam":"Team","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Free","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":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Conta Google","githubAccount":"Conta GitHub","importToken":"Importar Token","pasteToken":"Cole o refresh token do Kiro IDE.","awsRegion":"Região AWS","autoDetecting":"Detectando tokens automaticamente...","readingFromCache":"Lendo do cache AWS SSO","readingFromCursor":"Lendo do banco de dados do Cursor IDE","initializing":"Inicializando...","pricingConfig":"Configuração de Preços","loadingPricing":"Carregando dados de preços...","pricingRatesFormat":"Formato de Taxas de Preço","noPricingData":"Nenhum dado de preço disponível","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 logs...","loadingProxyLogs":"Carregando logs do proxy...","noLogEntries":"Nenhuma entrada de log encontrada","noPayloadData":"Nenhum dado de payload disponível para esta entrada.","proxyEvent":"Evento do Proxy","proxy":"Proxy","level":"Nível","directNative":"Direto (nativo)","combo":"Combo","inputTokens":"E:","outputTokens":"S:"},"stats":{"usageOverview":"Visão Geral de 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 dos Tokens","totalOAuth":"Total OAuth","healthy":"Saudável","warning":"Aviso","errored":"Com Erro","lastCheck":"Última verificação","noData":"Sem dados","share":"Compartilhar","unableToLoad":"Não foi possível carregar métricas do sistema","product":"Produto","resources":"Recursos","company":"Empresa"},"auth":{"welcome":"Bem-vindo","signIn":"Entrar","enterPassword":"Digite sua senha para continuar","password":"Senha","unifiedProxy":"Proxy Unificado de API de IA","unifiedAiApiProxy":"Proxy Unificado de API de IA","unifiedAiApiProxyDesc":"Roteie requisições para múltiplos provedores de IA por um único endpoint. Balanceamento de carga, failover e rastreamento de uso integrados.","passwordNotEnabled":"Proteção por senha não está ativada","loading":"Carregando...","invalidPassword":"Senha inválida","errorOccurredRetry":"Ocorreu um erro. Tente novamente.","configureInstance":"Vamos configurar sua instância OmniRoute","runOnboardingWizard":"Execute o assistente de onboarding para definir sua senha e conectar seu primeiro provedor de IA.","startOnboarding":"Iniciar Onboarding","secureYourInstance":"Proteja sua Instância","setPasswordDescription":"Defina uma senha para proteger seu painel e garantir que seus endpoints de API não sejam acessados sem autorização.","configurePassword":"Configurar Senha","continue":"Continuar","windowWillClose":"Esta janela será fechada automaticamente...","closeTabNow":"Você já pode fechar esta aba.","copyUrlManual":"Copie a URL da barra de endereços e cole no aplicativo.","accessDeniedDescription":"Você não tem permissão para acessar este recurso. Verifique sua chave de API ou contate o administrador.","goToDashboard":"Ir para o Painel","featureMultiProviderTitle":"Multi-Provedor","featureMultiProviderDesc":"OpenAI, Anthropic, Google e outros","featureLoadBalancingTitle":"Balanceamento de Carga","featureLoadBalancingDesc":"Distribua requisições de forma inteligente","featureUsageTrackingTitle":"Rastreamento de Uso","featureUsageTrackingDesc":"Monitore custos e tokens","resetPassword":"Redefinir Senha","resetDescription":"Escolha um método para recuperar acesso ao painel","stopServer":"Pare o servidor OmniRoute","processing":"Processando...","pleaseWait":"Aguarde enquanto completamos a autorização.","authSuccess":"Autorização bem-sucedida!","copyUrl":"Copiar esta URL","accessDenied":"Acesso Negado","methodCliTitle":"Método 1: Reset via CLI","methodCliDescription":"Execute o comando abaixo no servidor onde o OmniRoute está em execução:","methodCliHint":"Isso solicitará que você defina uma nova senha. O servidor deve ser parado antes.","methodManualTitle":"Método 2: Reset Manual","methodManualDescription":"Remova a senha do banco de dados e defina uma nova na inicialização:","setPasswordInYour":"Defina uma nova senha no seu","fileLabelSuffix":"arquivo:","newPasswordPlaceholder":"sua_nova_senha","deleteSettingsFile":"Exclua","orRemovePasswordHashField":"ou remova o campo passwordHash","restartServerWithNewPassword":"Reinicie o servidor - ele usará a nova senha","backToLogin":"Voltar para o Login","forgotPassword":"Esqueceu a senha?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Autorização","Content-Disposition":"Disposição de conteúdo","waitingForAuthorization":"Aguardando autorização...","waitingForGoogleAuthorization":"Aguardando autorização do Google...","waitingForOpenAIAuthorization":"Aguardando autorização do OpenAI...","waitingForAntigravityAuthorization":"Aguardando autorização antigravidade...","waitingForIFlowAuthorization":"Aguardando autorização do iFlow...","exchangingCodeForTokens":"Trocando código por tokens..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navegar para a página inicial","toggleMenu":"Alternar menu","featuresLink":"Recursos","docsLink":"Docs","github":"GitHub","versionLive":"v1.0 já está no ar","oneEndpoint":"Um Endpoint para","allProviders":"Todos os Provedores de IA","heroDescription":"Proxy de endpoint de IA com painel web - uma versão em JavaScript do CLIProxyAPI. Funciona perfeitamente com Claude Code, OpenAI Codex, Cline, RooCode e outras ferramentas CLI.","getStarted":"Começar","viewOnGithub":"Ver no GitHub","powerfulFeatures":"Recursos Poderosos","featuresSubtitle":"Tudo que você precisa para gerenciar sua infraestrutura de IA em um só lugar, preparado para escala.","featureUnifiedEndpointTitle":"Endpoint Unificado","featureUnifiedEndpointDesc":"Acesse todos os provedores por uma única URL de API padrão.","featureEasySetupTitle":"Configuração Fácil","featureEasySetupDesc":"Fique pronto em minutos com o comando npx.","featureModelFallbackTitle":"Fallback de Modelo","featureModelFallbackDesc":"Alterne automaticamente entre provedores em caso de falha ou alta latência.","featureUsageTrackingTitle":"Rastreamento de Uso","featureUsageTrackingDesc":"Análises detalhadas e monitoramento de custos em todos os modelos.","featureOAuthApiKeysTitle":"OAuth e Chaves de API","featureOAuthApiKeysDesc":"Gerencie credenciais com segurança em um único cofre.","featureCloudSyncTitle":"Sincronização em Nuvem","featureCloudSyncDesc":"Sincronize suas configurações entre dispositivos instantaneamente.","featureCliSupportTitle":"Suporte a CLI","featureCliSupportDesc":"Funciona com Claude Code, Codex, Cline, Cursor e mais.","featureDashboardTitle":"Painel","featureDashboardDesc":"Painel visual para análise de tráfego em tempo real.","howItWorks":"Como o OmniRoute Funciona","howItWorksDescription":"Os dados fluem de forma contínua da sua aplicação pela nossa camada de roteamento inteligente até o melhor provedor para cada tarefa.","howItWorksStep1Title":"1. CLI e SDKs","howItWorksStep1Description":"Suas requisições começam nas suas ferramentas favoritas ou no nosso SDK unificado. Basta trocar a URL base.","howItWorksStep2Title":"2. Hub OmniRoute","howItWorksStep2Description":"Nosso mecanismo analisa o prompt, verifica a saúde dos provedores e roteia para menor latência ou custo.","howItWorksStep3Title":"3. Provedores de IA","howItWorksStep3Description":"A requisição é atendida por OpenAI, Anthropic, Gemini ou outros provedores instantaneamente.","getStartedIn30Seconds":"Comece em 30 segundos","getStartedDescription":"Instale o OmniRoute, configure seus provedores pelo painel web e comece a rotear requisições de IA.","installOmniRoute":"Instalar o OmniRoute","installStepDescription":"Execute o comando npx para iniciar o servidor instantaneamente","openDashboard":"Abrir Painel","openDashboardStepDescription":"Configure provedores e chaves de API pela interface web","routeRequests":"Rotear Requisições","routeRequestsStepDescription":"Aponte suas ferramentas CLI para {endpoint}","terminal":"terminal","copy":"Copiar","copied":"✓ Copiado","startingOmniRoute":"Iniciando OmniRoute...","serverRunningOnLabel":"Servidor em execução em","dashboardLabel":"Painel","readyToRoute":"Pronto para rotear! ✓","configureProvidersNote":"📝 Configure provedores no painel ou use variáveis de ambiente","dataLocation":"Local dos Dados:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Produto","dashboardLink":"Painel","changelog":"Changelog","resources":"Recursos","documentation":"Documentação","npm":"NPM","legal":"Legal","mitLicense":"Licença MIT","footerTagline":"O endpoint unificado para geração de IA. Conecte, roteie e gerencie seus provedores de IA com facilidade.","copyright":"© {year} OmniRoute. Todos os direitos reservados.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Anthropic","flowProviderGemini":"Gemini","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Diagrama interativo visível no desktop","ctaTitle":"Pronto para simplificar sua infraestrutura de IA?","ctaDescription":"Junte-se a desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Open source e grátis para começar.","startFree":"Começar grátis","readDocumentation":"Ler 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 de Clientes","protocolsToc":"Protocolos","apiReference":"Referência da 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 responses.","oauthAutoRefresh":"Conexão OAuth com atualização automática de token.","fullStreaming":"Suporte completo a streaming para todos os modelos.","docsLabel":"Docs","docsHeroDescription":"Gateway de IA para LLMs multi-provedor. Um endpoint para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e mais de 20 provedores.","openDashboard":"Abrir Painel","endpointPage":"Página de Endpoint","github":"GitHub","reportIssue":"Reportar Problema","onThisPage":"Nesta página","documentationVersion":"Documentação - v{version}","quickStartStep1Title":"1. Instale e execute","quickStartStep1Prefix":"Execute","quickStartStep1Middle":"ou clone do GitHub e execute","quickStartStep2Title":"2. Crie uma chave de API","quickStartStep2Text":"Vá em Endpoint -> Chaves Registradas. Gere uma chave por ambiente.","quickStartStep3Title":"3. Conecte provedores","quickStartStep3Text":"Adicione contas de provedores via login OAuth, chave de API ou conexão automática de plano gratuito.","quickStartStep4Title":"4. Defina a URL base do cliente","quickStartStep4Prefix":"Aponte sua IDE ou cliente de API para","quickStartStep4Suffix":"Use prefixo de provedor, por exemplo","featureRoutingTitle":"Roteamento Multi-Provedor","featureRoutingText":"Roteie requisições para mais de 30 provedores de IA por um único endpoint compatível com OpenAI. Suporta APIs de chat, responses, áudio e imagem.","featureCombosTitle":"Combos e Balanceamento","featureCombosText":"Crie combos de modelos com cadeias de fallback e estratégias de balanceamento: round-robin, prioridade, aleatório, menos usado e otimizado por custo.","featureUsageTitle":"Rastreamento de Uso e Custo","featureUsageText":"Contagem de tokens em tempo real, cálculo de custo por provedor/modelo e detalhamento de uso por chave de API e conta.","featureAnalyticsTitle":"Painel de Analytics","featureAnalyticsText":"Análises visuais com gráficos de requisições, tokens, erros, latência, custos e popularidade de modelos ao longo do tempo.","featureHealthTitle":"Monitoramento de Saúde","featureHealthText":"Health checks em tempo real, status de provedores, estados de circuit breaker e detecção automática de rate limit com backoff exponencial.","featureCliTitle":"Ferramentas CLI","featureCliText":"Gerencie configurações de IDE, exporte/importe backups, descubra perfis de codex e configure opções pelo painel.","featureSecurityTitle":"Segurança e Políticas","featureSecurityText":"Autenticação por chave de API, filtragem de IP, proteção contra prompt injection, políticas de domínio, gerenciamento de sessões e auditoria.","featureCloudSyncTitle":"Sincronização em 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":"Plano Gratuito","providerTypeOAuth":"OAuth","providerTypeApiKey":"Chave de API","useCaseSingleEndpointTitle":"Um endpoint para muitos provedores","useCaseSingleEndpointText":"Aponte clientes para uma única 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 combo no painel e mantenha a configuração do cliente estável enquanto os provedores giram internamente.","useCaseUsageVisibilityTitle":"Visibilidade de uso, custo e debug","useCaseUsageVisibilityText":"Acompanhe tokens e custo por provedor, conta e chave de API nas abas de Uso e Analytics.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"URL Base","chatEndpointLabel":"Endpoint de chat","modelRecommendationLabel":"Recomendação de modelo: prefixo explícito","clientCodexTitle":"Modelos Codex / GitHub Copilot","clientCodexBullet1":"Use IDs de modelo com prefixo","clientCodexBullet2":"Modelos da família Codex são roteados automaticamente para","clientCodexBullet3":"Modelos não-Codex continuam em","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Use o prefixo","clientCursorBullet1Suffix":"para modelos do Cursor.","clientCursorBullet2":"Conexão OAuth - faça login na página de Provedores.","clientClaudeTitle":"Claude Code / Antigravity","clientClaudeBullet1Prefix":"Use","clientClaudeBullet1Middle":"(Claude) ou","clientClaudeBullet1Suffix":"(Antigravity) como prefixo.","protocolsTitle":"Protocolos: MCP e A2A","protocolsDescription":"O OmniRoute expõe dois protocolos operacionais além das APIs compatíveis com OpenAI: MCP para execução de ferramentas e A2A para fluxos agente-para-agente.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP via stdio para permitir descoberta e execução de ferramentas OmniRoute com visibilidade de auditoria.","protocolMcpStep1":"Inicie o transporte MCP com `omniroute --mcp`.","protocolMcpStep2":"Aponte seu cliente MCP para transporte stdio.","protocolMcpStep3":"Chame `omniroute_get_health` e `omniroute_list_combos` para validar conectividade.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC para submeter tarefas de forma síncrona ou via SSE streaming.","protocolA2aStep1":"Leia `/.well-known/agent.json` para descoberta do agente.","protocolA2aStep2":"Envie `message/send` ou `message/stream` para `POST /a2a`.","protocolA2aStep3":"Gerencie ciclo de vida das tarefas com `tasks/get` e `tasks/cancel`.","protocolTroubleshootingTitle":"Troubleshooting de protocolos","protocolTroubleshooting1":"Se o status MCP estiver offline, verifique se o processo stdio está rodando e atualizando o heartbeat.","protocolTroubleshooting2":"Se tarefas A2A ficarem em `working`, inspecione `/api/a2a/tasks/:id` e os eventos de stream até estado terminal.","protocolTroubleshooting3":"Use `/dashboard/mcp` e `/dashboard/a2a` para controles operacionais e visibilidade de auditoria.","endpointChatNote":"Endpoint de chat compatível com OpenAI (padrão).","endpointResponsesNote":"Endpoint da API Responses (Codex, o-series).","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":"Auxiliar de reescrita para Responses sem /v1.","endpointRewriteModelsNote":"Auxiliar de reescrita para descoberta de modelos sem /v1.","modelPrefixesDescriptionStart":"Use o prefixo do provedor antes do nome do modelo para rotear para um provedor específico. Exemplo:","modelPrefixesDescriptionEnd":"roteia para o GitHub Copilot.","provider":"Provedor","type":"Tipo","troubleshootingModelRouting":"Se o cliente falhar no roteamento de modelo, use provedor/modelo explícito (por exemplo: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Se você receber erros de modelo ambíguo, escolha um prefixo de provedor em vez de um ID de modelo sem prefixo.","troubleshootingCodexFamily":"Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; o roteador seleciona /responses automaticamente.","troubleshootingTestConnection":"Use Painel > Provedores > Testar Conexão antes de testar por IDEs ou clientes externos.","troubleshootingCircuitBreaker":"Se um provedor mostrar circuit breaker aberto, aguarde o cooldown ou verifique a página Health para detalhes.","troubleshootingOAuth":"Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Geração de texto para fala (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Geração de incorporação de texto (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Política de Privacidade","termsOfService":"Termos de Serviço","providerConfigurations":"Configurações de provedores","apiKeys":"Chaves de API","usageLogs":"Logs de uso","applicationSettings":"Configurações do aplicativo","viewExportAnalytics":"Visualizar e exportar análises de uso","clearHistory":"Limpar histórico de uso a qualquer momento","configureRetention":"Configurar políticas de retenção de logs","backupRestore":"Fazer backup e restaurar seu banco de dados","privacyMetadataTitle":"Política de Privacidade | OmniRoute","privacyMetadataDescription":"Política de privacidade do roteador proxy de API de IA OmniRoute.","termsMetadataTitle":"Termos de Serviço | OmniRoute","termsMetadataDescription":"Termos de serviço do roteador proxy de API de IA OmniRoute.","backToHome":"Voltar para a home","lastUpdated":"Última atualização: {date}","policyLastUpdatedDate":"13 de fevereiro de 2026","listSeparator":"-","questionsVisit":"Dúvidas? Visite nosso","githubRepository":"repositório no GitHub","privacySection1Title":"1. Arquitetura Local-First","privacySection1Text":"O OmniRoute foi projetado como uma aplicação local-first. Todo processamento e armazenamento de dados ocorre inteiramente na sua máquina. Não existe servidor centralizado coletando suas informações.","privacySection2Title":"2. Dados que Armazenamos","privacyDataStoredIn":"Os dados a seguir são armazenados localmente em","privacyDataProviderConfigurationsDesc":"URLs de conexão, tipos de provedor e configurações de prioridade","privacyDataApiKeysDesc":"criptografadas e armazenadas localmente para autenticar com provedores de IA","privacyDataUsageLogsDesc":"contagem de requisições, uso de tokens, nomes de modelos, timestamps e tempos de resposta","privacyDataApplicationSettingsDesc":"preferências de tema, estratégia de roteamento e configurações de combos","privacySection3Title":"3. Sem Telemetria","privacySection3Text":"O OmniRoute não coleta telemetria, analytics ou relatórios de falha. 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 de IA de Terceiros","privacySection4Text":"Quando você faz chamadas de API pelo OmniRoute, suas requisições são encaminhadas aos provedores de IA configurados (por exemplo: OpenAI, Anthropic, Google). Esses provedores possuem suas próprias políticas de privacidade que regem como tratam seus dados. Consulte:","privacyOpenAiPolicy":"Política de Privacidade da OpenAI","privacyAnthropicPolicy":"Política de Privacidade da Anthropic","privacyGooglePolicy":"Política de Privacidade do Google","privacySection5Title":"5. Sincronização em Nuvem (Opcional)","privacySection5Text":"Se você ativar o recurso opcional de sincronização em nuvem, configurações de provedores e chaves de API podem ser transmitidas para um endpoint de nuvem configurado. Esse recurso vem desativado por padrão e exige opt-in explícito.","privacySection6Title":"6. Logs","privacyLoggingIntro":"Os logs de requisiçã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 diretório","privacySection7TextEnd":"ou usando os recursos de backup e restauração do banco de dados no painel.","termsSection1Title":"1. Visão Geral","termsSection1Text":"O OmniRoute é um roteador proxy de API de IA local-first que roda inteiramente na sua máquina. Ele roteia requisições para múltiplos 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 de terceiros (OpenAI, Anthropic, Google etc.).","termsResponsibilityCompliance":"Você deve cumprir os termos de serviço de cada provedor de IA cuja API acessar através do OmniRoute.","termsResponsibilitySecurity":"Você é responsável pela segurança da sua instalação local do OmniRoute, incluindo definir uma senha e restringir acesso de rede.","termsSection3Title":"3. Como Funciona","termsSection3Text":"O 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. O OmniRoute não modifica o conteúdo das suas requisiçõ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 SQLite.","termsNoTransmission":"O OmniRoute não transmite dados para servidores externos, a menos que você ative explicitamente recursos de sincronização em nuvem.","termsDataLocationText":"Logs de uso, chaves de API e configurações são armazenados em","termsSection5Title":"5. Isenção de Responsabilidade","termsSection5Text":"O OmniRoute é fornecido \\"como está\\", sem garantia de qualquer tipo. Não somos responsáveis por custos incorridos por uso de API, interrupções de serviço ou perda de dados. Sempre mantenha backups da sua configuração.","termsSection6Title":"6. Código Aberto","termsSection6Text":"O OmniRoute é um software de código aberto. Você pode inspecionar, modificar e distribuí-lo de acordo com os termos da licença."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"Endpoints de API","apiEndpointsTitle":"Endpoints de API","apiEndpointsDescription":"Endpoints de API backend que podem ser consumidos por outras aplicações e serviços.","comingSoon":"Em Breve","plannedFeatures":"Funcionalidades Planejadas","featureRestApi":"Catálogo de endpoints REST API com documentação interativa","featureWebhooks":"Configuração de webhooks e assinaturas de eventos","featureSwagger":"Geração automática de specs OpenAPI / Swagger","featureAuth":"Gestão de chaves API e escopos OAuth por endpoint"},"agents":{"title":"Agentes CLI","description":"Descubra agentes CLI instalados no seu sistema. Adicione agentes customizados para auto-detecção.","refresh":"Atualizar","installed":"Instalado","notFound":"Não encontrado","builtIn":"Nativo","custom":"Customizado","remove":"Remover","addCustomAgent":"Adicionar Agente Customizado","addCustomAgentDesc":"Registre qualquer ferramenta CLI para detecção. Ela será verificada automaticamente ao atualizar.","agentName":"Nome do Agente","binaryName":"Nome do Binário","versionCommand":"Comando de Versão","spawnArgs":"Argumentos","addAgent":"Adicionar Agente","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Bate-papo simples","streaming":"Transmissão","system-prompt":"Alerta do sistema","thinking":"Pensando","tool-calling":"Chamada de ferramenta","multi-turn":"Multivoltas"},"templateDescriptions":{"simple-chat":"Modelo básico de chat com mensagem do sistema","streaming":"Modelo para streaming de respostas","system-prompt":"Modelo com prompt de sistema personalizado","thinking":"Modelo com orçamento de raciocínio/pensamento","tool-calling":"Modelo para chamada de ferramenta/função","multi-turn":"Modelo para conversas múltiplas"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente de IA útil.","userGreeting":"Olá! Como posso ajudá-lo hoje?"},"streaming":{"prompt":"Escreva uma história sobre"},"systemPrompt":{"question":"Qual é o sentido da vida?","systemInstruction":"Forneça uma resposta ponderada e filosófica."},"thinking":{"question":"Explique a computação quântica"},"toolCalling":{"cityNameDescription":"O nome da cidade para obter o clima","toolDescription":"Obtenha o clima atual para um local","userWeather":"Qual é o clima em Tóquio?"},"multiTurn":{"system":"Você é um assistente útil.","assistantExample":"Ficarei feliz em ajudá-lo com isso.","userInitial":"preciso de ajuda com","userFollowUp":"Você pode explicar isso?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
1
+ module.exports=[406271,a=>{a.v(JSON.parse('{"common":{"save":"Salvar","cancel":"Cancelar","delete":"Excluir","loading":"Carregando...","error":"Ocorreu um erro","success":"Sucesso","confirm":"Tem certeza?","refresh":"Atualizar","close":"Fechar","add":"Adicionar","edit":"Editar","search":"Pesquisar","back":"Voltar","next":"Próximo","submit":"Enviar","reset":"Resetar","copy":"Copiar","copied":"Copiado!","enabled":"Ativado","disabled":"Desativado","active":"Ativo","inactive":"Inativo","noData":"Nenhum dado disponível","configure":"Configurar","manage":"Gerenciar","name":"Nome","actions":"Ações","status":"Status","type":"Tipo","model":"Modelo","models":"modelos","provider":"Provedor","account":"Conta","time":"Tempo","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":"Testar Conexão","enable":"Ativar","disable":"Desativar","columns":"Colunas","newest":"Mais Recente","oldest":"Mais Antigo","all":"Todos","none":"Nenhum","yes":"Sim","no":"Não","warning":"Aviso","note":"Nota","free":"Gratuito","skipToContent":"Pular para conteúdo","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Aceitar","accountId":"ID da conta","alias":"Alias","apiKeyId":"ID da chave de API","apiKeyName":"Nome da chave de API","apiKeySecret":"Segredo da chave API","authorization":"Autorização","content-type":"Tipo de conteúdo","content-length":"Comprimento do conteúdo","cookie":"Biscoito","file":"Arquivo","host":"Anfitrião","id":"ID","import":"Importar","limit":"Limite","offset":"Deslocamento","open":"Abrir","origin":"Origem","promptTokens":"Tokens de prompt","completionTokens":"Tokens de conclusão","totalTokens":"Total de fichas","rawModel":"Modelo Bruto","scope":"Escopo","skill":"Habilidade","sortBy":"Classificar por","sortOrder":"Ordem de classificação","tab":"Guia","text":"Texto","textarea":"Área de texto","tool":"Ferramenta","toolId":"ID da ferramenta","web":"Rede","whereUsed":"Onde usado","whitelist":"Lista de permissões","blacklist":"Lista negra","resolve":"Resolver","force":"Força","base64url":"URL Base64","hex":"Feitiço","range":"Alcance","component":"Componente","redirect_uri":"Redirecionar URI","idempotency-key":"Chave de Idempotência","error_description":"Descrição do erro","code":"Código","compatible":"Compatível","chat-completions":"Conclusões de bate-papo","oauth":"OAuth","auth_token":"Token de autenticação","crypto":"Criptografia","hours":"Horas","selfsigned":"Autoassinado","proxy_id":"ID do proxy","proxyId":"ID do proxy","connectionId":"ID de conexão","resolveConnectionId":"Resolver ID de conexão","resolve_connection_id":"Resolver ID de conexão","scope_id":"ID do escopo","scopeId":"ID do escopo","jwtSecret":"Segredo JWT","keytar":"Keytar","better-sqlite3":"melhor-sqlite3","undici":"unici","builder-id":"ID do construtor","musicDesc":"Descrição da música","musicGeneration":"Geração Musical","idc":"CDI","cloud-status-changed":"Status da nuvem alterado","where_used":"Onde usado","windowMs":"Janela (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Lista de permissões de ferramentas","TOOL_DENYLIST":"Lista de bloqueios de ferramentas","Failed to save pricing":"Falha ao salvar o preço","Failed to reset pricing":"Falha ao redefinir o preço","apikey":"Chave de API","http":"HTTP"},"sidebar":{"home":"Início","dashboard":"Painel","providers":"Provedores","combos":"Combos","autoCombo":"Auto Combo","usage":"Uso","analytics":"Análises","costs":"Custos","health":"Saúde","limits":"Limites e Cotas","cliTools":"Ferramentas CLI","media":"Mídia","settings":"Configurações","translator":"Tradutor","docs":"Documentação","issues":"Problemas","apiManager":"Gerenciador API","logs":"Logs","auditLog":"Log de Auditoria","shutdown":"Desligar","restart":"Reiniciar","shutdownConfirm":"Desligar o OmniRoute?","restartConfirm":"Reiniciar o OmniRoute?","version":"v{version}","debug":"Depuração","system":"Sistema","help":"Ajuda","serverDisconnected":"Servidor Desconectado","serverDisconnectedMsg":"O servidor proxy foi parado ou está reiniciando.","expandSidebar":"Expandir barra lateral","collapseSidebar":"Recolher barra lateral","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Endpoints","playground":"Playground","agents":"Agentes","cliToolsShort":"Ferramentas","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Sair","language":"Idioma","providers":"Provedores","providerDescription":"Gerencie suas conexões de provedores de IA","combos":"Combos","comboDescription":"Combos de modelos com fallback","usage":"Uso e Análises","usageDescription":"Monitore seu uso de API, consumo de tokens e logs de requisições","analytics":"Análises","analyticsDescription":"Gráficos, tendências e insights de avaliação","cliTools":"Ferramentas CLI","cliToolsDescription":"Configurar ferramentas de linha de comando","home":"Início","homeDescription":"Bem-vindo ao OmniRoute","endpoint":"Endpoints","endpointDescription":"Gerenciar endpoints proxy, MCP, A2A e endpoints de API","settings":"Configurações","settingsDescription":"Gerencie suas preferências","openaiCompatible":"Compatível com OpenAI","anthropicCompatible":"Compatível com Anthropic","media":"Mídia","mediaDescription":"Gerar imagens, vídeos e músicas","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Início Rápido","quickStartDesc":"Comece em 4 passos. Conecte provedores, roteie modelos, monitore tudo.","fullDocs":"Docs Completa","step1Title":"1. Criar chave de API","step1Desc":"Vá em <endpoint>Endpoint</endpoint> -> Chaves Registradas. Gere uma chave por ambiente.","step2Title":"2. Conectar provedores","step2Desc":"Adicione contas em <providers>Provedores</providers>. Suporta OAuth, API Key e planos gratuitos.","step3Title":"3. Apontar seu cliente","step3Desc":"Defina a URL base como {url} no seu IDE ou cliente de API.","step4Title":"4. Monitorar e otimizar","step4Desc":"Acompanhe tokens, custos e erros em <logs>Logs de Requisições</logs> e <analytics>Análises</analytics>.","providersOverview":"Visão Geral dos Provedores","configuredOf":"{configured} configurados de {total} provedores disponíveis","noModelsAvailable":"Nenhum modelo disponível para este provedor.","configureFirst":"Configure uma conexão primeiro em {providers}","configureProvider":"Configurar Provedor","modelAvailable":"{count} modelo 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":"Reportar problema","activeError":"{active} ativo · {errors} erro","oauthLabel":"OAuth","apiKeyLabel":"Chave de API","requestsShort":"{count} reqs","providerModelsTitle":"{provider} - Modelos","copiedModel":"Copiado: {model}","aliasLabel":"alias","updateNow":"Atualizar agora","updating":"Atualizando...","updateAvailableDesc":"Uma nova versão está disponível. Clique para atualizar.","updateStarted":"Atualização iniciada..."},"analytics":{"title":"Análises","overviewDescription":"Monitore padrões de uso da API, consumo de tokens, custos e tendências de atividade em todos os provedores e modelos.","evalsDescription":"Execute suítes de avaliação para testar e validar seus endpoints LLM. Compare qualidade de modelos, detecte regressões e faça benchmarks de 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 que deseja revogar esta chave de API?","noKeys":"Nenhuma chave de API ainda","noKeysDesc":"Crie sua primeira chave de API para autenticar requisições ao seu endpoint","keyLabel":"Rótulo da 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 requisições ao seu endpoint","totalKeys":"Total de Chaves","restricted":"Restrita","totalRequests":"Total de Requisiçõ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 independentemente. 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":"reqs","neverUsed":"Nunca usada","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 — 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","keyNamePlaceholder":"ex: Chave de Produção, Chave de Desenvolvimento","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 — ela não será mostrada novamente.","done":"Pronto","savePermissions":"Salvar Permissões","autoResolve":"Auto-Resolve","autoResolveDesc":"Resolve automaticamente nomes ambíguos de modelo para o provedor nativo desta API key.","keyActive":"Chave Ativa","keyActiveDesc":"Ativa ou desativa esta API key. Chaves desativadas são bloqueadas com 403.","accessSchedule":"Horário de Acesso","accessScheduleDesc":"Restrinja o acesso a horários e dias da semana específicos.","scheduleFrom":"Das","scheduleUntil":"Até","scheduleDays":"Dias","scheduleTimezone":"Fuso Horário","scheduleTimezoneHint":"Use nomes IANA, ex: America/Sao_Paulo","scheduleActive":"Agenda","disabled":"Desativada","daySun":"Dom","dayMon":"Seg","dayTue":"Ter","dayWed":"Qua","dayThu":"Qui","dayFri":"Sex","daySat":"Sáb","allowAll":"Permitir Tudo","restrict":"Restringir","allowAllInfo":"Esta chave pode acessar todos os modelos disponíveis.","restrictInfo":"Esta chave pode acessar {selected} de {total} modelos.","selected":"{count} selecionados","all":"Todos","clear":"Limpar","searchModels":"Buscar modelos por nome ou provedor...","noModelsFound":"Nenhum modelo encontrado","keyNameRequired":"Nome da chave é obrigatório","keyNameTooLong":"Nome da chave deve ter {max} caracteres ou menos","keyNameInvalid":"Nome da chave pode conter apenas letras, números, espaços, hífens e sublinhados","invalidKeyName":"Nome de chave inválido","failedCreateKey":"Falha ao criar chave","failedCreateKeyRetry":"Falha ao criar chave. Tente novamente.","invalidKeyId":"ID de chave inválido","failedDeleteKey":"Falha ao excluir chave","failedDeleteKeyRetry":"Falha ao excluir chave. Tente novamente.","invalidModelsSelection":"Seleção de modelos inválida","cannotSelectMoreThanModels":"Não é possível selecionar mais de {max} modelos","failedUpdatePermissions":"Falha ao atualizar permissões","failedUpdatePermissionsRetry":"Falha ao atualizar permissões. Tente novamente.","unknownProvider":"desconhecido","copyMaskedKey":"Copiar chave mascarada","modelsCount":"{count, plural, one {# modelo} other {# modelos}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permissões","deleteKey":"Excluir chave","model":"{count} modelo","models":"{count} modelos","permissionsTitle":"Permissões: {name}","allowAllDesc":"Esta chave pode acessar todos os modelos disponíveis.","restrictDesc":"Esta chave pode acessar {selectedCount} de {totalModels} modelos.","selectedCount":"{count} selecionados","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Log de Auditoria","searchPlaceholder":"Buscar ações...","action":"Ação","actor":"Autor","target":"Alvo","ipAddress":"Endereço IP","timestamp":"Data/Hora","noEntries":"Nenhum registro de auditoria","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por autor...","filterEntriesAria":"Filtrar entradas do log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por autor","refreshAuditLogAria":"Atualizar log de auditoria","tableAria":"Entradas do log de auditoria","failedFetchAuditLog":"Falha ao carregar log de auditoria","notAvailable":"—","description":"Ações administrativas e eventos de segurança","showing":"Mostrando {count} entradas (offset {offset})","previous":"Anterior"},"media":{"title":"Playground de Mídia","subtitle":"Gere imagens, vídeos e música","model":"Modelo","prompt":"Prompt","generate":"Gerar","generating":"Gerando...","loadingModels":"Carregando modelos disponíveis...","noModels":"Nenhum modelo disponível. Configure provedores com suporte a mídia primeiro.","error":"Falha na Geração","result":"Resultado","imageDescription":"Gere imagens a partir de prompts de texto usando OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI e mais.","videoDescription":"Crie vídeos com AnimateDiff, Stable Video Diffusion via ComfyUI ou SD WebUI.","musicDescription":"Componha músicas usando Stable Audio Open ou MusicGen via ComfyUI."},"cliTools":{"title":"Ferramentas CLI","noActiveProviders":"Nenhum provedor ativo","noActiveProvidersDesc":"Adicione e conecte provedores primeiro para configurar as ferramentas CLI.","mapModels":"Mapear Modelos","testConnection":"Testar Conexão","connectionStatus":"Status da Conexão","configureEndpoint":"Configurar Endpoint","instructions":"Instruções","modelMapping":"Mapeamento de Modelos","baseUrl":"URL Base","apiKey":"Chave de API","configured":"Configurado","notConfigured":"Não configurado","notInstalled":"Não instalado","custom":"Customizado","unknown":"Desconhecido","lastSavedAt":"Último salvamento: {date}","never":"Nunca","justNow":"agora mesmo","minutesAgoShort":"{count} min atrás","hoursAgoShort":"{count} h atrás","daysAgoShort":"{count} d atrás","monthsAgoShort":"{count} mês(es) atrás","yearsAgoShort":"{count} ano(s) atrás","runtimeCheckFailed":"Falha ao verificar runtime","yourApiKeyPlaceholder":"sua-api-key","modelPlaceholder":"provedor/modelo-id","configurationSaved":"Configuração salva com sucesso.","failedToSave":"Falha ao salvar configuração.","noApiKeysCreateOne":"Sem chaves de API - crie uma na página Chaves","defaultOmnirouteKey":"sk_omniroute (padrão)","selectModel":"Selecionar Modelo","selectModelForAlias":"Selecionar modelo para {alias}","selectModelForTool":"Selecionar Modelo para {tool}","select":"Selecionar","clear":"Limpar","comingSoon":"Em breve","checkingRuntime":"Verificando status de runtime...","guideOnlyIntegration":"Integração apenas por guia (não requer runtime local)","cliRuntimeDetected":"Runtime de CLI detectado e pronto","cliFoundNotRunnable":"CLI encontrado, mas não executável{reason}","cliRuntimeNotDetected":"Runtime de CLI não detectado","binary":"Binário","configPath":"Caminho de config","configPathShort":"Config","failedCheckRuntimeStatus":"Falha ao verificar status de runtime.","copy":"Copiar","copied":"Copiado","copyConfig":"Copiar Config","saveConfig":"Salvar Config","selectionSaved":"Seleção salva","guide":"Guia","detected":"Detectado","notReady":"Não pronto","active":"Ativo","inactive":"Inativo","startMitm":"Iniciar MITM","stopMitm":"Parar MITM","mitmStarted":"MITM iniciado com sucesso!","mitmStopped":"MITM parado com sucesso!","failedStart":"Falha ao iniciar MITM","failedStop":"Falha ao parar MITM","saveMappings":"Salvar Mapeamentos","mappingsSaved":"Mapeamentos salvos!","failedSaveMappings":"Falha ao salvar mapeamentos","howItWorks":"Como funciona:","antigravityHowWorksDesc":"O Antigravity envia requisições para o endpoint do Google. O MITM intercepta e redireciona para o OmniRoute.","antigravityStep1":"1. Inicie o MITM para rotear as requisições pelo OmniRoute.","antigravityStep2Prefix":"2. Adicione","antigravityStep2Suffix":"ao arquivo hosts como 127.0.0.1.","antigravityStep3":"3. Abra o Antigravity e as requisições serão proxyadas.","sudoPasswordRequiredTitle":"Senha sudo necessária","sudoPasswordHint":"A senha de administrador é necessária para modificar hosts e configurações de proxy do sistema.","enterSudoPassword":"Digite a senha sudo","sudoPasswordRequiredError":"A senha sudo é obrigatória.","cancel":"Cancelar","confirm":"Confirmar","settingsApplied":"Configurações aplicadas com sucesso!","failedApplySettings":"Falha ao aplicar configurações","settingsReset":"Configurações resetadas com sucesso!","failedResetSettings":"Falha ao resetar configurações","backupRestored":"Backup restaurado!","failedRestore":"Falha ao restaurar","checkingCli":"Verificando CLI {tool}...","cliNotRunnable":"CLI {tool} instalado, mas não executável","cliNotInstalled":"CLI {tool} não instalado","cliNotDetected":"CLI {tool} não detectado","cliDetectedReady":"CLI {tool} detectado e pronto","cliFoundFailedHealthcheck":"CLI {tool} foi encontrado, mas falhou no healthcheck de runtime{reason}.","installCliPrompt":"Instale o CLI {tool} para usar este recurso.","installCodexPrompt":"Instale o Codex CLI para usar a aplicação automática.","hide":"Ocultar","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 padrão","providerModelPlaceholder":"provedor/modelo-id","apply":"Aplicar","reset":"Resetar","manualConfig":"Configuração manual","backups":"Backups","configBackups":"Backups de configuração","noBackupsYet":"Ainda não há backups. Backups são criados automaticamente antes de cada Aplicar ou Resetar.","restore":"Restaurar","backupRestoredReloading":"Backup restaurado! Recarregando status...","failedRestoreBackup":"Falha ao restaurar backup","applied":"Aplicado!","failed":"Falhou","resetDone":"Resetado!","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 padrão: sk_omniroute","updateConfig":"Atualizar config","applyConfig":"Aplicar config","noBackupsAvailable":"Nenhum backup disponível.","profileSaved":"Perfil \\"{name}\\" salvo!","failedSaveProfile":"Falha ao salvar perfil","profileActivated":"Perfil ativado!","failedActivateProfile":"Falha ao ativar perfil","profiles":"Perfis","savedProfiles":"Perfis salvos","noProfilesYet":"Nenhum perfil salvo ainda. Salve a configuração atual como perfil abaixo.","activate":"Ativar","deleteProfile":"Excluir perfil","profileNamePlaceholder":"Nome do perfil (ex: Conta Pessoal)","saveCurrent":"Salvar atual","codexAuthNotePrefix":"Codex usa","codexAuthNoteMiddle":"com","codexAuthNoteSuffix":"Clique em \\"Aplicar\\" para configurar automaticamente.","claudeManualConfiguration":"Claude CLI - Configuração manual","codexManualConfiguration":"Codex CLI - Configuração manual","droidManualConfiguration":"Factory Droid - Configuração manual","openClawManualConfiguration":"Open Claw - Configuração manual","clineManualConfiguration":"Configuração manual do Cline","kiloManualConfiguration":"Configuração manual do Kilo Code","toolDescriptions":{"antigravity":"Google Antigravity IDE com MITM","claude":"CLI Claude Code da Anthropic","codex":"CLI Codex da OpenAI","droid":"Assistente de IA Factory Droid","openclaw":"Assistente de IA Open Claw","cline":"CLI assistente de codificação Cline","kilo":"CLI assistente de IA Kilo Code","cursor":"Editor de código com IA Cursor","continue":"Assistente de IA Continue","opencode":"OpenCode AI coding agent (Terminal)","kiro":"Amazon Kiro — IDE com IA","windsurf":"Windsurf — Editor de Código com IA","copilot":"GitHub Copilot — Assistente de IA"},"guides":{"cursor":{"notes":{"0":"Requer conta Cursor Pro para usar este recurso.","1":"O Cursor roteia requisições pelo próprio servidor, então endpoint local não é suportado. Ative o Cloud Endpoint em Configurações."},"steps":{"1":{"title":"Abrir Configurações","desc":"Vá em Configurações -> Modelos"},"2":{"title":"Ativar OpenAI API","desc":"Ative a opção \\"OpenAI API key\\""},"3":{"title":"URL Base"},"4":{"title":"Chave de API"},"5":{"title":"Adicionar Modelo Customizado","desc":"Clique em \\"View All Model\\" -> \\"Add Custom Model\\""},"6":{"title":"Selecionar Modelo"}}},"continue":{"steps":{"1":{"title":"Abrir Config","desc":"Abra o arquivo de configuração do Continue"},"2":{"title":"Chave de API"},"3":{"title":"Selecionar Modelo"},"4":{"title":"Adicionar Config de Modelo","desc":"Adicione a configuração abaixo ao array de modelos:"}},"notes":{"0":"Continuar usa o arquivo de configuração JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode requer configuração de chave API.","1":"Configure a URL base para seu endpoint do OmniRoute."}},"kiro":{"steps":{"1":{"title":"Open Kiro Settings","desc":"Go to Settings → AI Provider"},"2":{"title":"Base URL","desc":"Paste your OmniRoute endpoint URL"},"3":{"title":"API Key"},"4":{"title":"Select Model"}},"notes":{"0":"Kiro requer uma conta Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Quando usar","openToolDocs":"Abrir documentos de ferramentas","toolUseCases":{"claude":"Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.","codex":"Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.","droid":"Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.","openclaw":"Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.","cline":"Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.","kilo":"Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.","cursor":"Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.","continue":"Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.","opencode":"Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.","kiro":"Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.","antigravity":"Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.","copilot":"Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."}},"combos":{"title":"Combos","description":"Crie combos de modelos com roteamento ponderado e suporte a fallback","createCombo":"Criar Combo","editCombo":"Editar Combo","deleteCombo":"Excluir Combo","noModels":"Sem modelos","noModelsYet":"Nenhum modelo adicionado","addModel":"Adicionar Modelo","addModelToCombo":"Adicionar Modelo ao Combo","routingStrategy":"Estratégia de Roteamento","maxRetries":"Máximo de Tentativas","timeout":"Timeout (ms)","healthcheck":"Verificação de Saúde","priority":"Prioridade","fallback":"Fallback","roundRobin":"Round Robin","random":"Aleatório","leastLatency":"Menor Latência","comboName":"Nome do Combo","comboNamePlaceholder":"meu-combo","deleteConfirm":"Excluir este combo?","noCombosYet":"Nenhum combo ainda","comboCreated":"Combo criado com sucesso","comboUpdated":"Combo atualizado com sucesso","comboDeleted":"Combo excluído","failedCreate":"Falha ao criar combo","failedUpdate":"Falha ao atualizar combo","errorCreating":"Erro ao criar combo","errorUpdating":"Erro ao atualizar combo","errorDeleting":"Erro ao excluir combo","testFailed":"Requisição de teste falhou","failedToggle":"Falha ao alternar combo","testResults":"Resultados do Teste — {name}","resolvedBy":"Resolvido por:","more":"+{count} mais","reqs":"reqs","success":"sucesso","proxyConfigured":"Proxy configurado","copyComboName":"Copiar nome do combo","enableCombo":"Ativar combo","disableCombo":"Desativar combo","testCombo":"Testar combo","duplicate":"Duplicar","proxyConfig":"Configuração de proxy","nameRequired":"Nome é obrigatório","nameInvalid":"Apenas letras, números, -, _, / e . permitidos","nameHint":"Letras, números, -, _, / e . permitidos","priorityDesc":"Fallback sequencial: tenta modelo 1 primeiro, depois 2, etc.","weightedDesc":"Distribui tráfego por porcentagem de peso com fallback","roundRobinDesc":"Distribuição circular: cada requisição vai para o próximo modelo na rotação","randomDesc":"Seleção aleatória uniforme, depois fallback para modelos restantes","leastUsedDesc":"Escolhe o modelo com menos requisições, equilibrando carga ao longo do tempo","costOptimizedDesc":"Roteia para o modelo mais barato primeiro baseado em preços","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar","models":"Modelos","autoBalance":"Auto-balancear","advancedSettings":"Configurações Avançadas","retryDelay":"Intervalo de Tentativa (ms)","concurrencyPerModel":"Concorrência / Modelo","queueTimeout":"Timeout da Fila (ms)","advancedHint":"Deixe vazio para usar padrões globais. Estes substituem configurações por provedor.","moveUp":"Mover para cima","moveDown":"Mover para baixo","removeModel":"Remover","saving":"Salvando...","weighted":"Ponderado","leastUsed":"Menos Usado","costOpt":"Custo-Otim","strategyGuideTitle":"Como usar esta estratégia","strategyGuideWhen":"Quando usar","strategyGuideAvoid":"Evite quando","strategyGuideExample":"Exemplo","strategyGuide":{"priority":{"when":"Você tem um modelo principal e quer fallback apenas em falha.","avoid":"Você precisa distribuir requisições entre modelos.","example":"Modelo principal para código e backup mais barato para indisponibilidade."},"weighted":{"when":"Você precisa dividir tráfego com percentuais controlados.","avoid":"Você não consegue manter os pesos atualizados.","example":"80% modelo estável + 20% modelo canário."},"round-robin":{"when":"Você quer distribuição previsível e equilibrada.","avoid":"Os modelos têm custo ou latência muito diferentes.","example":"Mesmo modelo em múltiplas contas para espalhar throughput."},"random":{"when":"Você quer distribuição simples com baixa configuração.","avoid":"Você precisa de garantias rígidas de distribuição.","example":"Protótipos rápidos com modelos equivalentes."},"least-used":{"when":"Você quer balanceamento adaptativo baseado no uso recente.","avoid":"Seu volume é baixo e não se beneficia dessa adaptação.","example":"Workloads mistos onde um modelo tende a ficar sobrecarregado."},"cost-optimized":{"when":"Redução de custo é a prioridade principal.","avoid":"A base de preços está ausente ou desatualizada.","example":"Jobs em lote ou segundo plano focados em menor custo."},"strict-random":{"when":"Você quer distribuição perfeitamente uniforme — cada modelo é usado uma vez antes de repetir.","avoid":"Os modelos têm qualidade ou latência muito diferentes e a ordem importa.","example":"Múltiplas contas do mesmo modelo para distribuir uso de forma equilibrada."}},"advancedHelp":{"maxRetries":"Quantas tentativas serão feitas antes de falhar a requisição.","retryDelay":"Espera inicial entre tentativas. Valores maiores reduzem picos.","timeout":"Tempo máximo da requisição antes de cancelar.","healthcheck":"Ignora modelos/provedores não saudáveis no roteamento.","concurrencyPerModel":"Máximo de requisições simultâneas por modelo no round-robin.","queueTimeout":"Tempo máximo em fila antes de expirar no round-robin."},"templatesTitle":"Templates rápidos","templatesDescription":"Aplique um perfil inicial e depois ajuste modelos e configuração.","templateApply":"Aplicar template","templateHighAvailability":"Alta disponibilidade","templateHighAvailabilityDesc":"Roteamento por prioridade com healthcheck e retries seguros.","templateCostSaver":"Economia de custo","templateCostSaverDesc":"Roteamento custo-otimizado para workloads com foco em orçamento.","templateBalanced":"Carga balanceada","templateBalancedDesc":"Roteamento por menos uso para distribuir demanda ao longo do tempo.","usageGuideHide":"Ocultar","usageGuideDontShowAgain":"Não mostrar novamente","usageGuideShow":"Mostrar guia","quickTestTitle":"Combo pronto para validar","quickTestDescription":"Rode um teste agora para confirmar fallback e latência.","testNow":"Testar agora","pricingCoverage":"Cobertura de preços","pricingCoverageHint":"Custo-otimizado funciona melhor quando todos os modelos têm preço configurado.","pricingAvailable":"Preço disponível","pricingMissing":"Sem preço","pricingAvailableShort":"com-preço","pricingMissingShort":"sem-preço","warningRoundRobinSingleModel":"Round-robin é mais útil com pelo menos 2 modelos.","warningCostOptimizedPartialPricing":"Apenas {priced} de {total} modelos têm preço. O roteamento pode ficar parcialmente orientado a custo.","warningCostOptimizedNoPricing":"Não há dados de preço para este combo. Custo-otimizado pode rotear de forma inesperada.","readinessTitle":"Pronto para salvar?","readinessDescription":"Revise a lista de verificação antes de criar ou atualizar este combo.","readinessCheckName":"O nome do combo é válido","readinessCheckModels":"Pelo menos um modelo está selecionado","readinessCheckWeights":"O total dos pesos é 100%","readinessCheckWeightsOptional":"Regra de pesos não obrigatória","readinessCheckPricing":"Dados de preços disponíveis","readinessCheckPricingOptional":"Regra de preços não obrigatória","saveBlockedTitle":"O salvamento está bloqueado até corrigir os itens abaixo:","saveBlockName":"Defina um nome para o combo.","saveBlockModels":"Adicione pelo menos um modelo.","saveBlockWeighted":"Ajuste os pesos para 100% (atual: {total}%).","saveBlockPricing":"Adicione preço para pelo menos um modelo ou escolha outra estratégia.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe básico","description":"Use um modelo principal e mantenha a cadeia de fallback curta e confiável.","tip1":"Coloque o modelo mais confiável em primeiro.","tip2":"Mantenha 1-2 modelos de backup com qualidade similar.","tip3":"Use retries seguros para absorver falhas transitórias do provedor."},"weighted":{"title":"Divisão controlada de tráfego","description":"Ótimo para rollouts canário e migração gradual entre modelos.","tip1":"Comece com divisão conservadora tipo 90/10.","tip2":"Mantenha o total em 100% e rebalanceie após mudanças.","tip3":"Monitore sucesso e latência antes de aumentar o peso canário."},"round-robin":{"title":"Distribuição previsível de carga","description":"Melhor quando os modelos são equivalentes e você precisa de distribuição uniforme.","tip1":"Use pelo menos 2 modelos.","tip2":"Configure limites de concorrência para evitar sobrecarga.","tip3":"Use timeout de fila para falhar rápido sob saturação."},"random":{"title":"Distribuição rápida com baixa configuração","description":"Use quando precisar de distribuição simples sem garantias rígidas.","tip1":"Use modelos com perfis de latência semelhantes.","tip2":"Mantenha retries habilitados para absorver falhas aleatórias.","tip3":"Prefira para experimentação, não para SLAs rígidos."},"least-used":{"title":"Balanceamento adaptativo","description":"Roteia para modelos menos usados para reduzir hotspots ao longo do tempo.","tip1":"Funciona melhor sob tráfego contínuo.","tip2":"Combine com health checks para balanceamento mais seguro.","tip3":"Acompanhe uso por modelo para validar ganhos na distribuição."},"cost-optimized":{"title":"Roteamento por orçamento","description":"Roteia para modelos mais baratos quando metadados de preço estão disponíveis.","tip1":"Garanta cobertura de preços para todos os modelos selecionados.","tip2":"Mantenha um fallback de qualidade para prompts difíceis.","tip3":"Use para jobs em lote/background onde custo é o KPI principal."},"strict-random":{"title":"Distribuição estritamente uniforme","description":"Cada modelo é usado exatamente uma vez antes de reembaralhar o baralho.","tip1":"Ideal para múltiplas contas do mesmo modelo.","tip2":"Garante que nenhuma conta é repetida antes de todas serem usadas.","tip3":"Combine com health checks para pular contas indisponíveis sem quebrar o ciclo."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Custos","budget":"Orçamento","totalCost":"Custo Total","breakdown":"Detalhamento de Custos","noData":"Sem dados de custo","byModel":"Por Modelo","byProvider":"Por Provedor"},"endpoint":{"title":"Endpoint da API","available":"Endpoints Disponíveis","cloudProxy":"Proxy na Nuvem","disableConfirm":"Tem certeza que deseja desativar o proxy na nuvem?","baseUrl":"URL Base","apiKeyLabel":"Chave de API","registeredKeys":"Chaves Registradas","chatCompletions":"Chat Completions","responses":"Respostas","listModels":"Listar Modelos","usingCloudProxy":"Usando Proxy na Nuvem","usingLocalServer":"Usando Servidor Local","machineId":"ID da Máquina: {id}...","disableCloud":"Desativar Nuvem","enableCloud":"Ativar Nuvem","modelsAcrossEndpoints":"{models} modelos em {endpoints} endpoints","chatDesc":"Chat streaming e não-streaming com todos os provedores","embeddings":"Embeddings","embeddingsDesc":"Embeddings de texto para busca e pipelines RAG","imageGeneration":"Geração de Imagens","imageDesc":"Gerar imagens a partir de prompts de texto","rerank":"Rerank","rerankDesc":"Reordenar documentos por relevância a uma consulta","audioTranscription":"Transcrição de Áudio","audioTranscriptionDesc":"Transcrever arquivos de áudio para texto (Whisper)","textToSpeech":"Texto para Fala","textToSpeechDesc":"Converter texto em fala natural","moderations":"Moderações","moderationsDesc":"Moderação de conteúdo e classificação de segurança","responsesDesc":"API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados","listModelsDesc":"Listar todos os modelos disponíveis em todos os provedores conectados","settingsApiDesc":"Ler e modificar a configuração do OmniRoute via API","settingsApi":"Settings API","categoryCore":"APIs Principais","categoryMedia":"Mídia e Multi-Modal","categoryUtility":"Utilidades e Gerenciamento","enableCloudTitle":"Ativar Proxy na Nuvem","whatYouGet":"O que você terá","cloudBenefitAccess":"Acesse sua API de qualquer lugar do mundo","cloudBenefitShare":"Compartilhe o endpoint com sua equipe facilmente","cloudBenefitPorts":"Sem 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 usada, será automaticamente excluída.","cloudUnstableNote":"A nuvem está atualmente instável com Claude Code OAuth em alguns casos.","cloudConnected":"Proxy na Nuvem conectado!","connectingToCloud":"Conectando à nuvem...","verifyingConnection":"Verificando conexão...","connecting":"Conectando...","verifying":"Verificando...","connected":"Conectado!","disableCloudTitle":"Desativar Proxy na Nuvem","disableWarning":"Todas as sessões de autenticação serão excluídas da nuvem.","syncingData":"Sincronizando dados mais recentes...","disablingCloud":"Desativando nuvem...","syncing":"Sincronizando...","disabling":"Desativando...","cloudConnectedVerified":"Proxy na Nuvem 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 nuvem","failedEnable":"Falha ao ativar nuvem","cloudRequestTimeout":"Tempo limite da requisição em nuvem","cloudRequestFailed":"Falha na requisição em nuvem","cloudWorkerUnreachable":"Não foi possível alcançar o worker de nuvem. Verifique se o serviço cloud está rodando (npm run dev em /cloud).","connectionFailed":"Falha na conexão","syncFailed":"Falha ao sincronizar dados da nuvem","providerModelsTitle":"{provider} — Modelos","noModelsForProvider":"Nenhum modelo disponível para este provedor.","chat":"Chat","embedding":"Embedding","image":"Imagem","custom":"custom","modelsCount":"{count, plural, one {# modelo} other {# modelos}}","sectionTitle":"Superfície de Integração","sectionDescription":"APIs compatíveis com OpenAI e endpoints operacionais de protocolos","tabApis":"APIs compatíveis com OpenAI","tabProtocols":"Protocolos","tabsAria":"Seções de endpoint","protocolsTitle":"Protocolos","protocolsDescription":"MCP e A2A são endpoints de primeira classe com observabilidade e controles dedicados.","mcpCardTitle":"Servidor MCP","mcpCardDescription":"Model Context Protocol via stdio","a2aCardTitle":"Servidor A2A","a2aCardDescription":"Endpoint Agent2Agent JSON-RPC","protocolToolsLabel":"Ferramentas","protocolTasksLabel":"Tarefas","protocolActiveStreamsLabel":"Streams ativos","protocolLastActivity":"Última atividade","quickStart":"Início rápido","openMcpDashboard":"Abrir gestão MCP","openA2aDashboard":"Abrir gestão A2A","mcpQuickStartTitle":"MCP Início rápido","mcpQuickStartStep1":"Inicie o servidor MCP com `omniroute --mcp`.","mcpQuickStartStep2":"Configure o cliente MCP para conectar por transporte stdio.","mcpQuickStartStep3":"Execute ferramentas como `omniroute_get_health` e `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Início rápido","a2aQuickStartStep1":"Descubra o agent card em `/.well-known/agent.json`.","a2aQuickStartStep2":"Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.","a2aQuickStartStep3":"Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.","cloudflaredUrlNotice":"Cria um Quick Tunnel temporário do Cloudflare. A URL muda a cada reinício."},"mcpDashboard":{"loading":"Carregando painel MCP...","activate":"ativar","deactivate":"desativar","confirmSwitchCombo":"Confirmar {action} combo \\"{combo}\\"?","switchComboFailed":"Falha ao alternar estado do combo.","switchComboSuccess":"Combo \\"{combo}\\" atualizado.","confirmApplyProfile":"Aplicar perfil de resiliência \\"{profile}\\"?","applyProfileFailed":"Falha ao aplicar perfil de resiliência.","applyProfileSuccess":"Perfil \\"{profile}\\" aplicado.","confirmResetBreakers":"Resetar todos os circuit breakers?","resetBreakersFailed":"Falha ao resetar circuit breakers.","resetBreakersSuccess":"Circuit breakers resetados.","processStatus":"Status do processo","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Uptime da sessão","lastHeartbeat":"Último heartbeat","activity24h":"Atividade (24h)","totalCalls":"Total de chamadas","successRate":"Taxa de sucesso","avgLatency":"Latência média","topTools":"Top ferramentas","noToolCalls24h":"Sem chamadas de ferramenta nas últimas 24 horas.","runtimeDetails":"Detalhes de runtime","transport":"Transporte","scopesEnforced":"Scopes aplicados","yes":"sim","no":"não","lastCall":"Última chamada","heartbeatPath":"Caminho do heartbeat","operationalControls":"Controles operacionais","switchCombo":"Trocar combo","inactive":"inativo","active":"ativo","activateCombo":"Ativar combo","deactivateCombo":"Desativar combo","applyResilienceProfile":"Aplicar perfil de resiliência","profileAggressive":"agressivo","profileBalanced":"balanceado","profileConservative":"conservador","applyProfile":"Aplicar perfil","resetCircuitBreakers":"Resetar circuit breakers","resetCircuitBreakersHelp":"Limpa o estado atual de breaker e os contadores de falha dos provedores.","resetAllBreakers":"Resetar todos os breakers","toolsAndScopes":"Ferramentas e scopes","tableTool":"Ferramenta","tableScopes":"Scopes","tablePhase":"Fase","tableAudit":"Auditoria","auditLog":"Log de auditoria","auditSummary":"Chamadas: {total} | página {page} de {totalPages}","allTools":"Todas as ferramentas","allResults":"Todos os resultados","success":"Sucesso","failure":"Falha","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Carregando registros de auditoria...","noAuditEntriesForFilters":"Nenhum registro de auditoria para os filtros atuais.","tableTimestamp":"Timestamp","tableDuration":"Duração","tableResult":"Resultado","tableApiKey":"Chave API","failed":"falhou","previous":"Anterior","next":"Próxima"},"a2aDashboard":{"loading":"Carregando painel A2A...","confirmCancelTask":"Cancelar tarefa {taskId}?","cancelTaskFailed":"Falha ao cancelar tarefa.","cancelTaskSuccess":"Tarefa {taskId} cancelada.","smokeSendFailed":"Falha no smoke test de message/send.","smokeSendSuccessWithTask":"message/send ok (tarefa {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"Falha no smoke test de message/stream.","smokeStreamSuccessWithTask":"message/stream ok (tarefa {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finalizado sem task id.","health":"Saúde","ok":"ok","totalTasks":"Total de tarefas","activeStreams":"Streams ativos","lastTask":"Última tarefa","taskStateOverview":"Visão de estados das tarefas","state":{"submitted":"submetida","working":"executando","completed":"concluída","failed":"falhou","cancelled":"cancelada"},"agentCard":"Cartão do agente","version":"Versão","url":"URL","capabilities":"Capacidades","agentCardNotAvailable":"Cartão do agente indisponível.","quickValidation":"Validação rápida","quickValidationDescription":"Executa chamadas de smoke pelo endpoint `/a2a` em produção.","runMessageSend":"Executar message/send","runMessageStream":"Executar message/stream","taskManagement":"Gestão de tarefas","taskSummary":"{total} tarefas | página {page} de {totalPages}","allStates":"todos","allSkills":"todas as skills","loadingTasks":"Carregando tarefas...","noTasksForFilters":"Nenhuma tarefa encontrada para os filtros atuais.","tableTask":"Tarefa","tableSkill":"Skill","tableState":"Estado","tableUpdated":"Atualizada","tableActions":"Ações","view":"Ver","cancel":"Cancelar","previous":"Anterior","next":"Próxima","taskDetail":"Detalhe da tarefa","close":"Fechar","metadata":"Metadados","events":"Eventos","artifacts":"Artefatos"},"health":{"title":"Saúde do Sistema","description":"Monitoramento em tempo real da sua instância OmniRoute","healthy":"Saudável","degraded":"Degradado","down":"Offline","uptime":"Tempo Ativo","memory":"Memória","memoryRss":"Memória (RSS)","heap":"Heap","cpu":"CPU","database":"Banco de Dados","version":"Versão","lastCheck":"Última Verificação","providerHealth":"Saúde dos Provedores","systemMetrics":"Métricas do Sistema","tokenHealth":"Saúde dos Tokens","refreshAll":"Atualizar Tudo","checkNow":"Verificar Agora","loadingHealth":"Carregando dados de saúde...","failedToLoad":"Falha ao carregar dados de saúde: {error}","retry":"Tentar Novamente","allOperational":"Todos os sistemas operacionais","issuesDetected":"Problemas detectados no sistema","updatedAt":"Atualizado {time}","latency":"Latência","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total de requisições","noDataYet":"Sem dados ainda","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":"Nenhum dado de circuit breaker disponível. Faça algumas requisições primeiro.","providerHealthStatusAria":"Status de saúde dos provedores","issuesLabel":"Problemas Detectados","operational":"Operacional","providers":"Provedores","healthyCount":"{count} saudáveis","nodeVersion":"Node {version}","failures":"{count} falha","failuresPlural":"{count} falhas","lastFailure":"Última","rateLimitStatus":"Status de Limite de Taxa","activeLimiters":"{count} limitador ativo","activeLimitersPlural":"{count} limitadores ativos","queued":"Na Fila","queuedCount":"{count} na fila","running":"executando","runningCount":"{count} executando","ok":"OK","activeLockouts":"Bloqueios Ativos","resetConfirm":"Resetar todos os circuit breakers para estado saudável? Isso limpará todos os contadores de falha e restaurará todos os provedores ao status operacional.","resetAllTitle":"Resetar todos os circuit breakers para estado saudável","resetting":"Resetando...","resetAll":"Resetar Tudo","until":"Até {time}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Configurado no painel","configuredProvidersHint":"Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.","activeProvidersHint":"Provedores configurados atualmente habilitados para solicitações de roteamento.","monitoredProvidersHint":"Provedores atualmente monitorados por monitores de integridade dos disjuntores."},"limits":{"title":"Limites e Cotas","rateLimit":"Limite de Taxa","remaining":"Restante","requestsPerMinute":"Requisições/min","tokensPerMinute":"Tokens/min","dailyLimit":"Limite Diário"},"logs":{"title":"Logs","requestLogs":"Logs de Requisições","proxyLogs":"Logs do Proxy","auditLog":"Log de Auditoria","console":"Console","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 do log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar log de auditoria","tableAria":"Entradas do log de auditoria","failedFetchAuditLog":"Falha ao carregar log de auditoria","showing":"Mostrando {count} entradas (offset {offset})","search":"Buscar","timestamp":"Data/Hora","action":"Ação","actor":"Ator","target":"Alvo","details":"Detalhes","ipAddress":"Endereço IP","notAvailable":"—","noEntries":"Nenhuma entrada de log 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":"Começar","skip":"Pular","skipWizard":"Pular assistente completamente","skipPassword":"Pular configuração de senha","skipAndContinue":"Pular e Continuar","passwordLabel":"Senha","confirmPassword":"Confirmar Senha","enterPassword":"Digite a senha","confirmPasswordPlaceholder":"Confirme a senha","passwordsMismatch":"As senhas não coincidem","setupComplete":"Configuração Concluída!","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","apiKeyMgmt":"Ger. de Chaves API","securityDesc":"Defina uma senha para proteger seu painel, ou pule por enquanto.","providerDesc":"Conecte seu primeiro provedor de IA. Você pode adicionar mais depois.","apiKeyRequired":"Chave de API (obrigatório)","customUrlOptional":"URL personalizada (opcional)","testDesc":"Vamos verificar se a conexão com seu provedor funciona.","runTest":"Executar 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 pelo painel depois.","testFailed":"Teste falhou, mas você pode configurar isso depois.","couldNotTest":"Não foi possível testar agora. Você pode testar pelo painel.","doneDesc":"Tudo pronto! Sua instância OmniRoute está configurada e pronta para rotear requisições de IA.","yourEndpoint":"Seu endpoint:","continue":"Continuar","retry":"Tentar Novamente","failedSetPassword":"Falha ao definir senha. Tente novamente.","failedAddProvider":"Falha ao adicionar provedor. Tente novamente.","connectionError":"Erro de conexão. Tente novamente.","provider":"Provedor"},"providers":{"title":"Provedores","addProvider":"Adicionar Provedor","editProvider":"Editar Provedor","deleteProvider":"Excluir Provedor","noProviders":"Nenhum provedor configurado","modelAvailability":"Disponibilidade de Modelos","accounts":"Contas","newAccount":"Nova Conta","deleteConfirm":"Tem certeza que deseja excluir este provedor?","testing":"Testando...","testConnection":"Testar conexão","testSuccess":"Conexão bem-sucedida","testFailed":"Falha na conexão","available":"Disponível","cooldown":"Cooldown","unavailable":"Indisponível","unknown":"Desconhecido","oauthLabel":"OAuth","compatibleLabel":"Compatível","chat":"Chat","responses":"Responses","messages":"Mensagens","oauthProviders":"Provedores OAuth","freeProviders":"Provedores Gratuitos","apiKeyProviders":"Provedores por Chave de API","compatibleProviders":"Provedores Compatíveis por Chave de API","testAll":"Testar Todos","testAllOAuth":"Testar todas as conexões OAuth","testAllFree":"Testar todas as conexões gratuitas","testAllApiKey":"Testar todas as conexões por chave de API","testAllCompatible":"Testar todas as conexões compatíveis","connected":"{count} Conectado(s)","errorCount":"{count} Erro ({code})","errorCountNoCode":"{count} Erro","noConnections":"Sem conexões","disabled":"Desativado","enableProvider":"Ativar provedor","disableProvider":"Desativar provedor","testResults":"Resultados do Teste","noCompatibleYet":"Nenhum provedor compatível adicionado","compatibleHint":"Use os botões acima para adicionar endpoints compatíveis com OpenAI ou Anthropic","addOpenAICompatible":"Adicionar Compatível OpenAI","addAnthropicCompatible":"Adicionar Compatível Anthropic","addNewProvider":"Adicionar Novo Provedor","backToProviders":"Voltar para Provedores","configureNewProvider":"Configure um novo provedor de IA para usar com suas aplicações.","providerLabel":"Provedor","selectProvider":"Selecione um provedor","selectedProvider":"Provedor selecionado","authMethod":"Método de Autenticação","apiKeyLabel":"Chave de API","apiKeyRequired":"Chave de API é obrigatória","selectProviderRequired":"Selecione um provedor","enterApiKey":"Digite sua chave de API","apiKeySecure":"Sua chave de API será criptografada e armazenada com segurança.","oauth2Connect":"Conectar com OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Conecte sua conta usando autenticação OAuth2.","displayName":"Nome de Exibição","displayNamePlaceholder":"ex.: API de Produção, Ambiente Dev","displayNameHint":"Opcional. Um nome amigável para identificar esta configuração.","active":"Ativo","activeDescription":"Habilitar este provedor para uso em suas aplicações","cancel":"Cancelar","createProvider":"Criar Provedor","failedCreate":"Falha ao criar provedor","errorOccurred":"Ocorreu um erro. Tente novamente.","modelStatus":"Status dos Modelos","allModelsOperational":"Todos os modelos operacionais","modelsWithIssues":"{count} modelo(s) com problemas","allModelsNormal":"Todos os modelos estão respondendo normalmente.","cooldownCleared":"Cooldown limpo para {model}","failedClearCooldown":"Falha ao limpar cooldown","loadingAvailability":"Carregando disponibilidade dos modelos...","clearCooldown":"Limpar","clearing":"Limpando...","until":"Até {time}","providerTestFailed":"Teste de provedor falhou","modeTest":"Teste {mode}","passedCount":"{count} passaram","failedCount":"{count} falharam","testedCount":"{count} testados","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERRO","noActiveConnectionsInGroup":"Nenhuma conexão ativa encontrada para este grupo.","allTestsPassed":"Todos os {total} testes passaram","testSummary":"{passed}/{total} passaram, {failed} falharam","nameLabel":"Nome","prefixLabel":"Prefixo","baseUrlLabel":"URL Base","apiTypeLabel":"Tipo de API","prefixHint":"Obrigatório. Prefixo único 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":"Conexão válida!","connectionFailed":"Falha na conexão. Verifique URL e 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 alias","failedSaveConnection":"Falha ao salvar conexão","failedSaveConnectionRetry":"Falha ao salvar conexão. Tente novamente.","failedRetestConnection":"Falha ao retestar conexão","deleteCompatibleNodeConfirm":"Excluir este nó Compatível com {type}?","anthropicCompatibleDetails":"Detalhes Compatível Anthropic","openaiCompatibleDetails":"Detalhes Compatível OpenAI","messagesApi":"API de Mensagens","responsesApi":"API de Respostas","chatCompletions":"Chat Completions","importingModels":"Importando...","importFromModels":"Importar de /models","clearAllModels":"Limpar todos os modelos","clearAllModelsConfirm":"Tem certeza de que deseja remover todos os modelos deste provedor? Isto não pode ser desfeito.","clearAllModelsSuccess":"Todos os modelos foram apagados","clearAllModelsFailed":"Falha ao limpar modelos","addConnectionToImport":"Adicione uma conexão para habilitar importação.","noModelsConfigured":"Nenhum modelo configurado","connectionCount":"{count} conexão(õ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 habilitar proteção de limite de taxa","disableRateLimitProtection":"Clique para desabilitar proteção de limite de taxa","productionKey":"Chave de Produção","enterNewApiKey":"Insira a nova chave API","optional":"Opcional","anthropicCompatibleName":"Compatível Anthropic","openaiCompatibleName":"Compatível OpenAI","failedImportModels":"Falha ao importar modelos","noModelsReturnedFromEndpoint":"Nenhum modelo retornado do endpoint /models.","importingModelsProgress":"Importando {current} de {total} modelos...","foundModelsStartingImport":"{count} modelos encontrados. Iniciando importação...","importingModelById":"Importando {modelId}...","importSuccessCount":"Importação concluída com sucesso: {count, plural, one {# modelo} other {# modelos}}!","noNewModelsAddedExisting":"Nenhum novo modelo foi adicionado (todos já existem).","importDoneCount":"✓ Concluído! {count, plural, one {# modelo importado.} other {# modelos importados.}}","unexpectedErrorOccurred":"Ocorreu um erro inesperado","connectionCountLabel":"{count, plural, one {# conexão} other {# conexões}}","messagesPath":"messages","responsesPath":"responses","chatCompletionsPath":"chat/completions","add":"Adicionar","edit":"Editar","delete":"Excluir","anthropic":"Anthropic","openai":"OpenAI","singleConnectionPerCompatible":"Apenas 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":"Configurar 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 local","statusAuthFailed":"falha de autenticação","statusRateLimited":"limite de taxa atingido","statusNetworkIssue":"problema de rede","statusTestUnsupported":"teste não suportado","statusUnavailable":"indisponível","statusFailed":"falhou","statusError":"erro","oauthAccount":"Conta OAuth","errorTypeRuntime":"Runtime local","errorTypeUpstreamAuth":"Auth upstream","errorTypeMissingCredential":"Credencial ausente","errorTypeRefreshFailed":"Falha ao renovar","errorTypeTokenExpired":"Token expirado","errorTypeRateLimited":"Rate limited","errorTypeUpstreamUnavailable":"Upstream indisponível","errorTypeNetworkError":"Erro de rede","errorTypeTestUnsupported":"Teste não suportado","errorTypeUpstreamError":"Erro upstream","proxySourceGlobal":"Global","proxySourceProvider":"Provedor","proxySourceKey":"Chave","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Auto: {priority}","proxy":"Proxy","retestAuthentication":"Retestar autenticação","retest":"Retestar","disableConnection":"Desativar conexão","enableConnection":"Ativar conexão","reauthenticateConnection":"Reautenticar 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":"anthropic/claude-3-opus","customModels":"Modelos Personalizados","customModelsHint":"Adicione IDs de modelo que não estão na lista padrão. Eles ficarão disponíveis para roteamento.","modelId":"ID do Modelo","customModelPlaceholder":"ex.: 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 modelo personalizado","modelAddedSuccess":"Modelo {modelId} adicionado com sucesso","failedAddModelTryAgain":"Falha ao adicionar modelo. Tente novamente.","failedSaveImportedModel":"Falha ao salvar modelo importado no banco de modelos personalizados","failedImportModelsTryAgain":"Falha ao importar modelos. Tente novamente.","failedRemoveModelFromDatabase":"Falha ao remover modelo do banco de dados","modelRemovedSuccess":"Modelo removido com sucesso","failedDeleteModelTryAgain":"Falha ao excluir modelo. 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":"A validação da chave de API falhou. Verifique sua chave e tente novamente.","addProviderApiKeyTitle":"Adicionar Chave de API de {provider}","checking":"Verificando...","check":"Verificar","valid":"Válido","invalid":"Inválido","creating":"Criando...","validationChecksAnthropicCompatible":"A validação verifica {provider} conferindo a chave de API.","validationChecksOpenAiCompatible":"A validação verifica {provider} via /models na sua URL base.","priorityLabel":"Prioridade","saving":"Salvando...","save":"Salvar","editConnection":"Editar Conexão","accountName":"Nome da conta","email":"Email","healthCheckMinutes":"Health Check (min)","healthCheckHint":"Intervalo proativo de renovação de token. 0 = desativado.","groupLabel":"Ambiente","groupPlaceholder":"ex: eKaizen, Pessoal","failedTestConnection":"Falha ao testar conexão","failed":"Falhou","leaveBlankKeepCurrentApiKey":"Deixe em branco para manter a chave de API atual.","editCompatibleTitle":"Editar Compatível {type}","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Chave de API (para verificação)","compatibleProdPlaceholder":"{type} Compatível (Prod)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","applyCodexAuthLocal":"Aplicar auth","exportCodexAuthFile":"Exportar auth","codexAuthAppliedLocal":"auth.json do Codex aplicado localmente","codexAuthApplyFailed":"Falha ao aplicar o auth.json do Codex localmente","codexAuthExported":"auth.json do Codex exportado","codexAuthExportFailed":"Falha ao exportar o auth.json do Codex","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Sincronização automática","autoSyncTooltip":"Atualize automaticamente a lista de modelos a cada 24h (configurável via MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Sincronização automática habilitada – os modelos serão atualizados periodicamente","autoSyncDisabled":"Sincronização automática desativada","autoSyncToggleFailed":"Falha ao alternar a sincronização automática","allModelsAlreadyImported":"Todos os modelos já foram importados","noNewModelsToImport":"Nenhum modelo novo para importar — todos os modelos já estão no registro ou na lista de modelos personalizados","skippingExistingModels":"Ignorando {count} modelos existentes"},"settings":{"title":"Configurações","general":"Geral","security":"Segurança","appearance":"Aparência","routing":"Roteamento","cache":"Cache","resilience":"Resiliência","systemPrompt":"Prompt do Sistema","thinkingBudget":"Orçamento de Raciocínio","proxy":"Proxy","pricing":"Preços","storage":"Armazenamento","policies":"Políticas","ipFilter":"Filtro de IP","comboDefaults":"Padrões de Combo","fallbackChains":"Cadeias de Fallback","changePassword":"Alterar Senha","enablePassword":"Ativar Senha","darkMode":"Modo Escuro","lightMode":"Modo Claro","systemTheme":"Tema do Sistema","enableCache":"Ativar Cache","cacheTTL":"TTL do Cache","maxCacheSize":"Tamanho Máximo do Cache","clearCache":"Limpar Cache","cacheHits":"Acertos de Cache","cacheMisses":"Erros de Cache","hitRate":"Taxa de Acerto","cacheEntries":"Entradas no Cache","circuitBreaker":"Disjuntor","retryPolicy":"Política de Retentativa","maxRetries":"Máximo de Tentativas","retryDelay":"Intervalo de Retentativa","timeoutMs":"Timeout (ms)","enableSystemPrompt":"Ativar Prompt do Sistema","systemPromptText":"Texto do Prompt do Sistema","enableThinking":"Ativar Raciocínio","maxThinkingTokens":"Máximo de Tokens de Raciocínio","enableProxy":"Ativar Proxy","proxyUrl":"URL do Proxy","pricingRates":"Formato de Taxas de Preço","currentPricing":"Visão Geral de Preços Atual","loadingPricing":"Carregando dados de preços...","noPricing":"Nenhum dado de preço disponível","input":"Entrada","output":"Saída","cached":"Em Cache","reasoning":"Raciocínio","cacheCreation":"Criação de Cache","customPricing":"Preços Personalizados","databaseSize":"Tamanho do Banco de Dados","backupDb":"Backup do Banco de Dados","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":"Ativar Logs de Requisição","logRetention":"Retenção de Logs","ipWhitelist":"Lista de IPs Permitidos","ipBlacklist":"Lista de IPs Bloqueados","addIP":"Adicionar IP","savedSuccessfully":"Configurações salvas com sucesso","ai":"IA","advanced":"Avançado","localMode":"Modo Local — Todos os dados armazenados na sua máquina","settingsSectionsAria":"Seções de configurações","switchThemes":"Alternar entre temas claro e escuro","themeSelectionAria":"Seleção de tema","themeLight":"Claro","themeDark":"Escuro","themeSystem":"Sistema","hideHealthLogs":"Ocultar Logs de Health Check","hideHealthLogsDesc":"Quando ATIVADO, suprime mensagens [HealthCheck] no console do servidor","themeAccent":"Cor do tema","themeAccentDesc":"Escolha uma cor predefinida ou crie seu próprio tema com uma cor","themeCreate":"Criar tema","themeCustom":"Tema personalizado","themeBlue":"Azul","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","promptCache":"Cache de Prompt","flushCache":"Limpar Cache","flushing":"Limpando…","size":"Tamanho","hits":"Acertos","evictions":"Remoções","loadingCacheStats":"Carregando estatísticas do cache…","globalProxy":"Proxy Global","globalProxyDesc":"Configure um proxy de saída global para todas as chamadas de API. Provedores individuais, combos e chaves podem sobrescrever.","noGlobalProxy":"Nenhum proxy global configurado","globalLabel":"Global","configure":"Configurar","globalSystemPrompt":"Prompt de Sistema Global","systemPromptDesc":"Injetado em todas as requisições no nível do proxy","saved":"Salvo","systemPromptPlaceholder":"Digite o prompt de sistema para injetar em todas as requisições...","systemPromptHint":"Este prompt é adicionado antes da mensagem de sistema de cada requisição. Use para instruções globais, diretrizes de segurança ou regras de formatação.","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","passthrough":"Passagem Direta","passthroughDesc":"Sem alterações — cliente controla orçamento de raciocínio","auto":"Automático","autoDesc":"Remove toda configuração de raciocínio — provedor decide","custom":"Personalizado","customDesc":"Define um orçamento fixo de tokens para todas as requisições","adaptive":"Adaptativo","adaptiveDesc":"Escala orçamento baseado na complexidade da requisição","effortNone":"Nenhum (0 tokens)","effortLow":"Baixo (1K tokens)","effortMedium":"Médio (10K tokens)","effortHigh":"Alto (128K tokens)","tokenBudget":"Orçamento de Tokens","tokens":"tokens","baseEffortLevel":"Nível de Esforço Base","adaptiveHint":"Modo adaptativo escala a partir deste nível base baseado na quantidade de mensagens, uso de ferramentas e tamanho do prompt.","requireLogin":"Exigir login","requireLoginDesc":"Quando ATIVADO, dashboard exige senha. Quando DESATIVADO, acesso sem login.","currentPassword":"Senha Atual","enterCurrentPassword":"Digite a senha atual","newPassword":"Nova Senha","enterNewPassword":"Digite a nova senha","confirmPassword":"Confirmar Nova Senha","confirmPasswordPlaceholder":"Confirme a nova senha","passwordsNoMatch":"As senhas não coincidem","passwordUpdated":"Senha atualizada com sucesso","failedUpdatePassword":"Falha ao atualizar senha","errorOccurred":"Ocorreu um erro","updatePassword":"Atualizar Senha","setPassword":"Definir Senha","apiEndpointProtection":"Proteção de Endpoint da API","requireAuthModels":"Exigir chave de API para /models","requireAuthModelsDesc":"Quando ATIVADO, o endpoint /v1/models retorna 404 para requisições não autenticadas. Impede descoberta de modelos por usuários não autorizados.","blockedProviders":"Provedores Bloqueados","blockedProvidersDesc":"Ocultar provedores específicos da resposta /v1/models. Provedores bloqueados não aparecerão nas listagens de modelos.","providersBlocked":"{count} provedor(es) bloqueado(s) do /models","blockProviderTitle":"Bloquear {provider}","unblockProviderTitle":"Desbloquear {provider}","cliFingerprint":"Assinatura Digital CLI","cliFingerprintDesc":"Reproduz a assinatura digital dos CLIs nativos ao fazer proxy. Reorganiza headers e campos do body para parecer idêntico às ferramentas CLI oficiais. O IP do proxy é preservado.","cliFingerprintEnabled":"{count} provider(s) com fingerprint CLI ativo","enableFingerprintTitle":"Ativar fingerprint para {provider}","disableFingerprintTitle":"Desativar fingerprint para {provider}","routingStrategy":"Estratégia de Roteamento","fillFirst":"Preencher Primeiro","fillFirstDesc":"Usar contas em ordem de prioridade","roundRobin":"Round Robin","roundRobinDesc":"Ciclar entre todas as contas","p2c":"P2C","p2cDesc":"Escolher 2 aleatórias, usar a mais saudável","random":"Aleatório","randomDesc":"Conta aleatória em cada requisição","leastUsed":"Menos Usado","leastUsedDesc":"Escolher a conta usada menos recentemente","costOpt":"Custo Otimizado","costOptDesc":"Preferir conta mais barata disponível","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada conta uma vez antes de reembaralhar","stickyLimit":"Limite Fixo","stickyLimitDesc":"Chamadas por conta antes de trocar","modelAliases":"Aliases de Modelo","modelAliasesTitle":"Aliases de Modelo","modelAliasesDesc":"Padrões coringa para remapear nomes de modelos • Use * e ?","addCustomAlias":"Adicionar Alias Personalizado","deprecatedModelId":"ID do modelo depreciado","newModelId":"Novo ID do modelo","customAliases":"Aliases Personalizados","builtInAliases":"Aliases Integrados","backgroundDegradationTitle":"Degradação de Tarefas em Background","backgroundDegradationDesc":"Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos","enableDegradation":"Ativar Degradação em Background","enableDegradationHint":"Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos","tasksDetected":"Tarefas detectadas","degradationMap":"Mapa de Degradação de Modelos","premiumModel":"Modelo premium","cheapModel":"Modelo barato","detectionPatterns":"Padrões de Detecção","newPattern":"ex: \\"gerar um título\\"","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Padrão","targetModel":"Modelo Alvo","add":"+ Adicionar","session":"Sessão","sessionDetailsAria":"Detalhes da sessão","status":"Status","authenticated":"Autenticado","guest":"Visitante","loginTime":"Hora do Login","sessionAge":"Duração 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 por IP","ipAccessControlDesc":"Bloquear ou permitir endereços IP específicos","ipModeDisabled":"Desativado","ipModeBlacklist":"Lista de Bloqueio","ipModeWhitelist":"Lista de Permissão","ipModeWhitelistPriority":"Permissão Prioritária","addIpAddress":"Adicionar Endereço IP","ipAddressPlaceholder":"192.168.1.0/24 ou 10.0.*.*","block":"+ Bloquear","allow":"+ Permitir","blocked":"Bloqueados ({count})","allowed":"Permitidos ({count})","temporaryBans":"Banimentos Temporários ({count})","minLeft":"{min}m restantes","auditLog":"Log de Auditoria","searchAuditLogs":"Buscar logs de auditoria...","failedLoadAuditLog":"Falha ao carregar log de auditoria","noAuditEvents":"Nenhum evento de auditoria encontrado","action":"Ação","actor":"Ator","details":"Detalhes","time":"Hora","fallbackChainsTitle":"Cadeias de Fallback","fallbackChainsDesc":"Definir ordem de fallback de provedores por modelo","addChain":"+ Adicionar Cadeia","modelName":"Nome do Modelo","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Provedores (separados por vírgula, em ordem de prioridade)","providersCommaSeparatedPlaceholder":"anthropic, openai, gemini","createChain":"Criar Cadeia","noFallbackChains":"Sem Cadeias de Fallback","noFallbackChainsDesc":"Crie uma cadeia para definir a ordem de fallback de provedores para um modelo.","loadingFallbackChains":"Carregando cadeias de fallback...","deleteChainConfirm":"Excluir cadeia de fallback para \\"{model}\\"?","chainCreated":"Cadeia criada para {model}","chainDeleted":"Cadeia excluída para {model}","failedCreateChain":"Falha ao criar cadeia","failedDeleteChain":"Falha ao excluir cadeia","deleteChain":"Excluir cadeia","fillModelAndProviders":"Preencha o nome do modelo e os provedores","addAtLeastOneProvider":"Adicione pelo menos um provedor","comboDefaultsTitle":"Padrões de Combo","globalComboConfig":"Configuração global de combos","defaultStrategy":"Estratégia Padrão","defaultStrategyDesc":"Aplicada a novos combos sem estratégia explícita","comboStrategyAria":"Estratégia de combo","priority":"Prioridade","weighted":"Ponderado","maxRetriesLabel":"Máx. Tentativas","retryDelayLabel":"Atraso entre Tentativas (ms)","timeoutLabel":"Timeout (ms)","healthCheck":"Verificação de Saúde","healthCheckDesc":"Verificar disponibilidade do provedor antes","trackMetrics":"Rastrear Métricas","trackMetricsDesc":"Registrar métricas de requisição por combo","providerOverrides":"Sobrescritas por Provedor","providerOverridesDesc":"Substituir timeout e tentativas por provedor. Configurações do provedor substituem os padrões globais.","providerMaxRetriesAria":"{provider} tentativas máximas","providerTimeoutAria":"timeout de {provider} em ms","removeProviderOverrideAria":"Remover sobrescrita de {provider}","newProviderNamePlaceholder":"ex.: google, openai...","newProviderNameAria":"Nome do novo provedor","retries":"tentativas","ms":"ms","saveComboDefaults":"Salvar Padrões de Combo","maxNestingDepth":"Profundidade Máx. de Aninhamento","concurrencyPerModel":"Concorrência / Modelo","queueTimeout":"Timeout da Fila (ms)","providerProfiles":"Perfis de Provedor","providerProfilesDesc":"Configurações de resiliência separadas para provedores OAuth (baseados em sessão) e API Key (medidos). Provedores OAuth têm limites mais rigorosos devido a taxas mais baixas.","oauthProviders":"Provedores OAuth","apiKeyProviders":"Provedores API Key","transientCooldown":"Cooldown Transitório","rateLimitCooldown":"Cooldown de Rate Limit","maxBackoffLevel":"Nível Máx. de Backoff","cbThreshold":"Limiar do CB","cbResetTime":"Tempo de Reset do CB","rateLimiting":"Limitação de Taxa","rateLimitingDesc":"Provedores API Key são automaticamente limitados com padrões seguros. Limites são aprendidos dos cabeçalhos de resposta e se adaptam ao longo do tempo.","defaultSafetyNet":"Rede de Segurança Padrão","rpm":"RPM","minGap":"Intervalo Mín.","maxConcurrent":"Máx. Concorrentes","activeLimiters":"Limitadores Ativos","noActiveLimiters":"Nenhum limitador de taxa ativo ainda.","reservoir":"Reservatório","running":"Em Execução","queued":"Na Fila","circuitBreakers":"Disjuntores","breakerStateClosed":"Fechado","breakerStateOpen":"Aberto","breakerStateHalfOpen":"Semiaberto","tripped":"{count} aberto(s)","healthy":"{count} saudável(is)","resetAll":"Resetar Todos","noCircuitBreakers":"Nenhum disjuntor ativo ainda. Eles são criados automaticamente quando requisições passam pelo pipeline de combos.","failures":"{count} falha(s)","policiesLocked":"Políticas e Identificadores Bloqueados","allOperational":"Todos os sistemas operacionais — sem bloqueios ou disjuntores ativados","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 status de resiliência","saveFailed":"Falha ao salvar","resetFailed":"Falha ao resetar","loadingResilience":"Carregando status de resiliência...","retry":"Tentar Novamente","systemStorage":"Sistema e Armazenamento","allDataLocal":"Todos os dados armazenados localmente na 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","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":"Nenhum backup ainda","backupNow":"Backup Agora","backupRestore":"Backup e Restauração","viewBackups":"Ver Backups","hide":"Ocultar","backupRetentionDesc":"Snapshots do banco são criados automaticamente antes da restauração e a cada 15 minutos quando há alterações. Retenção: 24 horários + 30 diários com rotação inteligente.","loadingBackups":"Carregando backups...","noBackupsYet":"Nenhum backup disponível ainda. Backups serão criados automaticamente quando houver alterações.","backupsAvailable":"{count} backup(s) disponível(is)","refresh":"Atualizar","confirm":"Confirmar?","yes":"Sim","no":"Não","restore":"Restaurar","invalidFileType":"Tipo de arquivo inválido. Apenas 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 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 {# conexão} other {# conexões}}","noChangesSinceBackup":"Sem alterações 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ços de Modelos","modelPricingDesc":"Configure taxas de custo por modelo • Todas as taxas em $/1M tokens","providers":"Provedores","registry":"Registro","priced":"Com Preço","searchProvidersModels":"Buscar provedores ou modelos...","showAll":"Mostrar Todos","noProvidersMatch":"Nenhum provedor corresponde à sua busca.","howPricingWorks":"Como os Preços Funcionam","cacheWrite":"Escrita em Cache","unsaved":"não salvo","resetDefaults":"Restaurar Padrões","saveProvider":"Salvar Provedor","saving":"Salvando...","model":"Modelo","models":"modelos","moreProviders":"{count} provedores adicionais","withPricing":"com preço configurado","policiesCircuitBreakers":"Políticas e Disjuntores","activeIssuesDetected":"Problemas ativos detectados","off":"Desligado","resetPricingConfirm":"Resetar todos os preços de {provider} para os padrões?","pricingDescInput":"Input: tokens enviados ao modelo","pricingDescOutput":"Output: tokens gerados","pricingDescCached":"Cached: input reutilizado (~50% da taxa de input)","pricingDescReasoning":"Reasoning: tokens de raciocínio (fallback para Output)","pricingDescCacheWrite":"Cache Write: criação de entradas de cache (fallback para Input)","pricingDescFormula":"Custo = (input × taxa_input) + (output × taxa_output) + (cached × taxa_cached) por milhão de tokens.","pricingSettingsTitle":"Configurações de Preços","totalModels":"Total de Modelos","active":"Ativo","costCalculation":"Cálculo de Custo","costCalculationDesc":"Custos são calculados com base no uso de tokens e taxas de preço configuradas para cada modelo.","pricingFormat":"Formato de Preços","pricingFormatDesc":"Todas as taxas são em $/1M tokens (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 input em cache (tipicamente 50% da taxa de input)","reasoningTokenDesc":"Tokens especiais de raciocínio (fallback para taxa de output)","cacheCreationTokenDesc":"Tokens usados para criar entradas de cache (fallback para taxa de input)","customPricingNote":"Você pode sobrescrever preços padrão para modelos específicos. Sobrescritas personalizadas têm prioridade sobre preços detectados automaticamente.","editPricing":"Editar Preços","viewFullDetails":"Ver Detalhes Completos","themeCoral":"Coral","routingAdvancedGuideTitle":"Orientação avançada de roteamento","routingAdvancedGuideHint1":"Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.","routingAdvancedGuideHint2":"Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.","comboDefaultsGuideTitle":"Como ajustar os padrões de combinação","comboDefaultsGuideHint1":"Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.","comboDefaultsGuideHint2":"Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais."},"translator":{"title":"Tradutor","metaTitle":"Playground do Tradutor | OmniRoute","metaDescription":"Depure, teste e visualize traduções de formatos de API entre provedores","playgroundTitle":"Playground do Tradutor","playground":"Playground","realtime":"Atividade de Tradução em Tempo Real","chatTester":"Testador de Chat","testBench":"Bancada de Testes","liveMonitor":"Monitor ao Vivo","modeDescriptionPlayground":"Cole qualquer corpo de requisição de API e veja como o OmniRoute traduz entre formatos de provedores (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Envie requisições reais de chat pelo OmniRoute e inspecione o ciclo completo: entrada, requisição traduzida, resposta do provedor e saída traduzida.","modeDescriptionTestBench":"Execute cenários predefinidos e compare compatibilidade entre provedores e modelos.","modeDescriptionLiveMonitor":"Acompanhe eventos de tradução em tempo real conforme as requisições passam pelo OmniRoute.","modeDescriptionFallback":"Depure, teste e visualize como o OmniRoute traduz requisições de API entre provedores.","recentTranslations":"Traduções Recentes","noTranslations":"Nenhuma tradução ainda","source":"Origem","target":"Destino","time":"Hora","model":"Modelo","status":"Status","latency":"Latência","totalTranslations":"Total de Traduções","successful":"Sucesso","errors":"Erros","avgLatency":"Latência Média","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Ao vivo — atualizando automaticamente","paused":"Pausado","eventsAppearHint":"Os eventos de tradução aparecem aqui conforme as requisições passam pelo OmniRoute. Use qualquer um destes métodos para gerar eventos:","chatTesterTab":"Aba Testador de Chat","testBenchTab":"Aba Bancada de Testes","externalApiCalls":"Chamadas de API externas","ideCliIntegrations":"Integrações IDE/CLI","inMemoryNote":"Nota: os eventos são armazenados em memória e reiniciados quando o servidor reinicia.","ok":"OK","errorShort":"ERR","formatConverter":"Conversor de Formato","formatConverterDescription":"Cole ou digite um corpo de requisição JSON. O tradutor detectará automaticamente o formato de origem e converterá para o formato de destino. Use isso para depurar como o OmniRoute traduz requisições entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Entrada","output":"Saída","auto":"Auto","swapFormats":"Trocar formatos","translateAction":"Traduzir","clear":"Limpar","inputPlaceholder":"Cole um corpo de requisição aqui ou selecione um modelo abaixo...","exampleTemplates":"Modelos de Exemplo","exampleTemplatesHint":"— Clique para carregar","templateLoadHint":"O modelo carrega a requisição no formato {format}. Altere o Formato de Origem para carregar em outro formato.","compatibilityTester":"Testador de Compatibilidade","compatibilityReport":"Relatório de Compatibilidade","testBenchDescription":"Execute cenários predefinidos (Chat Simples, Chamada de Ferramenta, etc.) para validar tradução e compatibilidade do provedor. Selecione um formato de origem e o provedor de destino, depois execute todos os testes para ver a porcentagem de compatibilidade.","targetProvider":"Provedor de destino","runAllTests":"Executar todos os testes","runTest":"Executar teste","reRun":"Executar novamente","running":"Executando...","passed":"aprovados","failed":"falharam","passedIconLabel":"✅ Aprovado","chunks":"chunks","scenarioSimpleChat":"Chat Simples","scenarioToolCalling":"Chamada de Ferramenta","scenarioMultiTurn":"Multiturno","scenarioThinking":"Raciocínio","scenarioSystemPrompt":"Prompt de Sistema","scenarioStreaming":"Streaming","templateNames":{"simple-chat":"Chat Simples","tool-calling":"Chamada de Ferramenta","multi-turn":"Multiturno","thinking":"Raciocínio","system-prompt":"Prompt de Sistema","streaming":"Streaming"},"templateDescriptions":{"simple-chat":"Mensagem de texto básica","tool-calling":"Invocação de função/ferramenta","multi-turn":"Conversa com histórico","thinking":"Raciocínio estendido","system-prompt":"Instruções de sistema complexas","streaming":"Requisição de streaming SSE"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente prestativo.","userGreeting":"Olá! Como você está hoje?"},"toolCalling":{"userWeather":"Como está o tempo em São Paulo?","toolDescription":"Obtém o clima atual para uma localidade","cityNameDescription":"Nome da cidade"},"multiTurn":{"system":"Você é um assistente de programação.","userInitial":"Escreva uma função para ordenar um array em Python.","assistantExample":"Aqui está uma função simples de ordenação:\\n\\n```python\\ndef sort_array(arr):\\n return sorted(arr)\\n```","userFollowUp":"Agora faça para ordenar em ordem decrescente."},"thinking":{"question":"Qual é a soma dos 100 primeiros números primos?"},"systemPrompt":{"systemInstruction":"Você é um engenheiro de software sênior especializado em sistemas distribuídos. Responda de forma concisa usando boas práticas de mercado. Sempre forneça exemplos de código quando relevante. Formate suas respostas usando markdown.","question":"Como implemento o padrão circuit breaker?"},"streaming":{"prompt":"Conte uma história curta sobre um robô aprendendo a pintar."}},"openaiCompatibleLabel":"Compatível com OpenAI","anthropicCompatibleLabel":"Compatível com Anthropic","noTemplateForFormat":"Sem modelo para este formato","translationFailed":"Falha na tradução: {error}","pipelineDebugger":"Depurador de Pipeline","translationPipeline":"Pipeline de Tradução","pipelineVisualization":"Visualização do pipeline","pipelineVisualizationHint":"Envie uma mensagem para ver como sua requisição flui por detecção → tradução → chamada ao provedor.","chatTesterDescription":"Envie mensagens em um formato específico de cliente e inspecione cada etapa do pipeline de tradução.","chatTesterFlow":"Requisição do Cliente → Detecção de Formato → Intermediário OpenAI → Formato do Provedor → Resposta","clickStepToInspect":"Clique em qualquer etapa para inspecionar os dados naquele ponto.","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 uma requisição no formato","chatMessageHintSuffix":"traduzida pelo pipeline e enviada ao provedor selecionado.","youWithFormat":"Você ({format})","assistant":"Assistente","typeMessage":"Digite uma mensagem...","send":"Enviar","clientRequest":"Requisição do Cliente","clientRequestDescription":"O corpo de requisição como seu cliente enviaria","formatDetected":"Formato Detectado","formatDetectedDescription":"O OmniRoute detecta automaticamente o formato da API a partir da estrutura da requisição","openaiIntermediate":"Intermediário OpenAI","openaiIntermediateDescription":"Todos os formatos são primeiro normalizados para o formato OpenAI (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 stream SSE bruto da API do provedor","unexpectedError":"Ocorreu um erro inesperado","error":"Erro","errorMessage":"Erro: {message}","requestFailed":"Falha na requisição","noTextExtracted":"(Nenhum texto extraído)","liveMonitorDescriptionPrefix":"Mostra eventos de tradução conforme chamadas de API passam pelo OmniRoute. Os eventos vêm do buffer em memória (reinicia ao reiniciar o servidor). Use","liveMonitorDescriptionSuffix":", ou chamadas de API externas para gerar eventos."},"usage":{"title":"Uso","loggerTab":"Logger","proxyTab":"Proxy","budgetManagement":"Gerenciamento de Orçamento","budgetSaved":"Limites de orçamento salvos","budgetSaveFailed":"Falha ao salvar limites de orçamento","loadingBudgetData":"Carregando dados de orçamento...","noApiKeysTitle":"Nenhuma Chave 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":"ex.: 5.00","monthlyLimitPlaceholder":"ex.: 50.00","warningThresholdPlaceholder":"80","saveLimits":"Salvar limites","budgetOk":"Orçamento OK — {remaining} restantes","budgetExceeded":"Orçamento excedido — requisições podem ser bloqueadas","totalRequests":"Total de requisições","noDataYet":"Sem dados ainda","latency":"Latência","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Cache de Prompt","systemHealth":"Saúde do Sistema","entries":"Entradas","activeCount":"{count, plural, one {# ativo} other {# ativos}}","openCircuitBreakersDetected":"Disjuntores abertos detectados","hitRate":"Taxa de Acerto","hitsMisses":"Acertos / Erros","circuitBreakers":"Disjuntores","lockedIPs":"IPs Bloqueados","lockoutsAutoRefreshHint":"Bloqueios por limite de taxa por modelo • Atualização automática 10s","lockedCount":"{count, plural, one {# bloqueado} other {# bloqueados}}","timeLeft":"{time} restantes","howItWorks":"Como Funciona","howItWorksSubtitle":"Entenda como as avaliações validam as respostas do seu LLM","define":"Definir","defineStepDescription":"Crie casos de teste com prompts de entrada e critérios de saída esperados usando estratégias como contains, regex ou correspondência exata.","run":"Executar","runStepDescription":"Execute casos de teste contra seus endpoints de LLM via OmniRoute. Cada caso é enviado como uma requisição real de API.","evaluate":"Avaliar","evaluateStepDescription":"As respostas são comparadas com os critérios esperados. Veja aprovado/reprovado por caso com métricas de latência e feedback detalhado.","evalSuites":"Suítes de Avaliação","evalSuitesHint":"Clique em uma suíte para ver os casos de teste e execute para avaliar seus endpoints de LLM","evalsLoading":"Carregando suítes de avaliação...","noEvalSuitesFound":"Nenhuma suíte de avaliação encontrada","noEvalSuitesDescription":"As suítes de avaliação podem ser definidas via API ou em código. Elas testam saídas de modelos contra resultados esperados usando estratégias como contains, regex, correspondência exata e funções customizadas.","columnCase":"Caso","columnStatus":"Status","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":"Buscar suítes...","passSuffix":"de aprovação","casesCount":"{count, plural, one {# caso} other {# casos}}","runEval":"Executar avaliação","runningProgress":"Executando {current}/{total}...","passRate":"taxa de aprovação","summaryBreakdown":"{passed} aprovados · {failed} falharam · {total} total","passedIconLabel":"✅ Aprovado","failedIconLabel":"❌ Falhou","detailsContains":"Contém: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Esperado: \\"{expected}\\"","noResultsYet":"Sem resultados ainda","testCasesCount":"Casos de Teste ({count})","noTestCasesDefined":"Nenhum caso de teste definido","runEvalHint":"Clique em \\"Executar avaliação\\" para executar todos os casos contra seu endpoint de LLM. Cada teste envia uma requisição real pelo OmniRoute.","notifyNoTestCases":"Nenhum caso de teste definido para esta suíte","notifyAllCasesPassed":"Todos os {total} casos passaram ✅","notifySomeCasesFailed":"{passed}/{total} passaram, {failed} falharam","notifyEvalRunFailed":"Falha na execução da avaliação","notifyEvalTitle":"Avaliação: {name}","modelEvals":"Avaliações de Modelos","evalsHeroDescription":"Teste e valide seus endpoints de LLM executando suítes de avaliação predefinidas. Cada suíte contém casos de teste que enviam prompts reais pelo OmniRoute e comparam respostas com critérios esperados — ajudando você a detectar regressões, comparar modelos e garantir qualidade de resposta entre 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 bloqueado","activeSessions":"Sessões Ativas","noSessions":"Sem sessões ativas","sessionsHint":"Sessões aparecem conforme requisições passam pelo proxy","sessionsTrackedHint":"Rastreado por fingerprint de requisições • Atualização automática 5s","session":"Sessão","age":"Idade","requests":"Requisiçõ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 provedores com OAuth para acompanhar limites e uso de cota da API.","accountsCount":"{count, plural, one {# conta} other {# contas}}","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/D","rawPlanWithValue":"Plano bruto: {plan}","noPlanFromProvider":"Sem plano do provedor","noQuotaData":"Sem dados de cota","ungrouped":"Sem grupo","viewFlat":"Lista","viewByEnvironment":"Por Ambiente","noQuotaDataAvailable":"Nenhum dado de cota disponível","noAccountsForTierFilter":"Nenhuma conta encontrada para o filtro de plano","tierAll":"Todos","tierEnterprise":"Enterprise","tierTeam":"Team","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Free","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":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Conta Google","githubAccount":"Conta GitHub","importToken":"Importar Token","pasteToken":"Cole o refresh token do Kiro IDE.","awsRegion":"Região AWS","autoDetecting":"Detectando tokens automaticamente...","readingFromCache":"Lendo do cache AWS SSO","readingFromCursor":"Lendo do banco de dados do Cursor IDE","initializing":"Inicializando...","pricingConfig":"Configuração de Preços","loadingPricing":"Carregando dados de preços...","pricingRatesFormat":"Formato de Taxas de Preço","noPricingData":"Nenhum dado de preço disponível","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 logs...","loadingProxyLogs":"Carregando logs do proxy...","noLogEntries":"Nenhuma entrada de log encontrada","noPayloadData":"Nenhum dado de payload disponível para esta entrada.","proxyEvent":"Evento do Proxy","proxy":"Proxy","level":"Nível","directNative":"Direto (nativo)","combo":"Combo","inputTokens":"E:","outputTokens":"S:"},"stats":{"usageOverview":"Visão Geral de 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 dos Tokens","totalOAuth":"Total OAuth","healthy":"Saudável","warning":"Aviso","errored":"Com Erro","lastCheck":"Última verificação","noData":"Sem dados","share":"Compartilhar","unableToLoad":"Não foi possível carregar métricas do sistema","product":"Produto","resources":"Recursos","company":"Empresa"},"auth":{"welcome":"Bem-vindo","signIn":"Entrar","enterPassword":"Digite sua senha para continuar","password":"Senha","unifiedProxy":"Proxy Unificado de API de IA","unifiedAiApiProxy":"Proxy Unificado de API de IA","unifiedAiApiProxyDesc":"Roteie requisições para múltiplos provedores de IA por um único endpoint. Balanceamento de carga, failover e rastreamento de uso integrados.","passwordNotEnabled":"Proteção por senha não está ativada","loading":"Carregando...","invalidPassword":"Senha inválida","errorOccurredRetry":"Ocorreu um erro. Tente novamente.","configureInstance":"Vamos configurar sua instância OmniRoute","runOnboardingWizard":"Execute o assistente de onboarding para definir sua senha e conectar seu primeiro provedor de IA.","startOnboarding":"Iniciar Onboarding","secureYourInstance":"Proteja sua Instância","setPasswordDescription":"Defina uma senha para proteger seu painel e garantir que seus endpoints de API não sejam acessados sem autorização.","configurePassword":"Configurar Senha","continue":"Continuar","windowWillClose":"Esta janela será fechada automaticamente...","closeTabNow":"Você já pode fechar esta aba.","copyUrlManual":"Copie a URL da barra de endereços e cole no aplicativo.","accessDeniedDescription":"Você não tem permissão para acessar este recurso. Verifique sua chave de API ou contate o administrador.","goToDashboard":"Ir para o Painel","featureMultiProviderTitle":"Multi-Provedor","featureMultiProviderDesc":"OpenAI, Anthropic, Google e outros","featureLoadBalancingTitle":"Balanceamento de Carga","featureLoadBalancingDesc":"Distribua requisições de forma inteligente","featureUsageTrackingTitle":"Rastreamento de Uso","featureUsageTrackingDesc":"Monitore custos e tokens","resetPassword":"Redefinir Senha","resetDescription":"Escolha um método para recuperar acesso ao painel","stopServer":"Pare o servidor OmniRoute","processing":"Processando...","pleaseWait":"Aguarde enquanto completamos a autorização.","authSuccess":"Autorização bem-sucedida!","copyUrl":"Copiar esta URL","accessDenied":"Acesso Negado","methodCliTitle":"Método 1: Reset via CLI","methodCliDescription":"Execute o comando abaixo no servidor onde o OmniRoute está em execução:","methodCliHint":"Isso solicitará que você defina uma nova senha. O servidor deve ser parado antes.","methodManualTitle":"Método 2: Reset Manual","methodManualDescription":"Remova a senha do banco de dados e defina uma nova na inicialização:","setPasswordInYour":"Defina uma nova senha no seu","fileLabelSuffix":"arquivo:","newPasswordPlaceholder":"sua_nova_senha","deleteSettingsFile":"Exclua","orRemovePasswordHashField":"ou remova o campo passwordHash","restartServerWithNewPassword":"Reinicie o servidor - ele usará a nova senha","backToLogin":"Voltar para o Login","forgotPassword":"Esqueceu a senha?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Autorização","Content-Disposition":"Disposição de conteúdo","waitingForAuthorization":"Aguardando autorização...","waitingForGoogleAuthorization":"Aguardando autorização do Google...","waitingForOpenAIAuthorization":"Aguardando autorização do OpenAI...","waitingForAntigravityAuthorization":"Aguardando autorização antigravidade...","waitingForIFlowAuthorization":"Aguardando autorização do iFlow...","exchangingCodeForTokens":"Trocando código por tokens..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navegar para a página inicial","toggleMenu":"Alternar menu","featuresLink":"Recursos","docsLink":"Docs","github":"GitHub","versionLive":"v1.0 já está no ar","oneEndpoint":"Um Endpoint para","allProviders":"Todos os Provedores de IA","heroDescription":"Proxy de endpoint de IA com painel web - uma versão em JavaScript do CLIProxyAPI. Funciona perfeitamente com Claude Code, OpenAI Codex, Cline, RooCode e outras ferramentas CLI.","getStarted":"Começar","viewOnGithub":"Ver no GitHub","powerfulFeatures":"Recursos Poderosos","featuresSubtitle":"Tudo que você precisa para gerenciar sua infraestrutura de IA em um só lugar, preparado para escala.","featureUnifiedEndpointTitle":"Endpoint Unificado","featureUnifiedEndpointDesc":"Acesse todos os provedores por uma única URL de API padrão.","featureEasySetupTitle":"Configuração Fácil","featureEasySetupDesc":"Fique pronto em minutos com o comando npx.","featureModelFallbackTitle":"Fallback de Modelo","featureModelFallbackDesc":"Alterne automaticamente entre provedores em caso de falha ou alta latência.","featureUsageTrackingTitle":"Rastreamento de Uso","featureUsageTrackingDesc":"Análises detalhadas e monitoramento de custos em todos os modelos.","featureOAuthApiKeysTitle":"OAuth e Chaves de API","featureOAuthApiKeysDesc":"Gerencie credenciais com segurança em um único cofre.","featureCloudSyncTitle":"Sincronização em Nuvem","featureCloudSyncDesc":"Sincronize suas configurações entre dispositivos instantaneamente.","featureCliSupportTitle":"Suporte a CLI","featureCliSupportDesc":"Funciona com Claude Code, Codex, Cline, Cursor e mais.","featureDashboardTitle":"Painel","featureDashboardDesc":"Painel visual para análise de tráfego em tempo real.","howItWorks":"Como o OmniRoute Funciona","howItWorksDescription":"Os dados fluem de forma contínua da sua aplicação pela nossa camada de roteamento inteligente até o melhor provedor para cada tarefa.","howItWorksStep1Title":"1. CLI e SDKs","howItWorksStep1Description":"Suas requisições começam nas suas ferramentas favoritas ou no nosso SDK unificado. Basta trocar a URL base.","howItWorksStep2Title":"2. Hub OmniRoute","howItWorksStep2Description":"Nosso mecanismo analisa o prompt, verifica a saúde dos provedores e roteia para menor latência ou custo.","howItWorksStep3Title":"3. Provedores de IA","howItWorksStep3Description":"A requisição é atendida por OpenAI, Anthropic, Gemini ou outros provedores instantaneamente.","getStartedIn30Seconds":"Comece em 30 segundos","getStartedDescription":"Instale o OmniRoute, configure seus provedores pelo painel web e comece a rotear requisições de IA.","installOmniRoute":"Instalar o OmniRoute","installStepDescription":"Execute o comando npx para iniciar o servidor instantaneamente","openDashboard":"Abrir Painel","openDashboardStepDescription":"Configure provedores e chaves de API pela interface web","routeRequests":"Rotear Requisições","routeRequestsStepDescription":"Aponte suas ferramentas CLI para {endpoint}","terminal":"terminal","copy":"Copiar","copied":"✓ Copiado","startingOmniRoute":"Iniciando OmniRoute...","serverRunningOnLabel":"Servidor em execução em","dashboardLabel":"Painel","readyToRoute":"Pronto para rotear! ✓","configureProvidersNote":"📝 Configure provedores no painel ou use variáveis de ambiente","dataLocation":"Local dos Dados:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Produto","dashboardLink":"Painel","changelog":"Changelog","resources":"Recursos","documentation":"Documentação","npm":"NPM","legal":"Legal","mitLicense":"Licença MIT","footerTagline":"O endpoint unificado para geração de IA. Conecte, roteie e gerencie seus provedores de IA com facilidade.","copyright":"© {year} OmniRoute. Todos os direitos reservados.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Anthropic","flowProviderGemini":"Gemini","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Diagrama interativo visível no desktop","ctaTitle":"Pronto para simplificar sua infraestrutura de IA?","ctaDescription":"Junte-se a desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Open source e grátis para começar.","startFree":"Começar grátis","readDocumentation":"Ler 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 de Clientes","protocolsToc":"Protocolos","apiReference":"Referência da 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 responses.","oauthAutoRefresh":"Conexão OAuth com atualização automática de token.","fullStreaming":"Suporte completo a streaming para todos os modelos.","docsLabel":"Docs","docsHeroDescription":"Gateway de IA para LLMs multi-provedor. Um endpoint para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e mais de 20 provedores.","openDashboard":"Abrir Painel","endpointPage":"Página de Endpoint","github":"GitHub","reportIssue":"Reportar Problema","onThisPage":"Nesta página","documentationVersion":"Documentação - v{version}","quickStartStep1Title":"1. Instale e execute","quickStartStep1Prefix":"Execute","quickStartStep1Middle":"ou clone do GitHub e execute","quickStartStep2Title":"2. Crie uma chave de API","quickStartStep2Text":"Vá em Endpoint -> Chaves Registradas. Gere uma chave por ambiente.","quickStartStep3Title":"3. Conecte provedores","quickStartStep3Text":"Adicione contas de provedores via login OAuth, chave de API ou conexão automática de plano gratuito.","quickStartStep4Title":"4. Defina a URL base do cliente","quickStartStep4Prefix":"Aponte sua IDE ou cliente de API para","quickStartStep4Suffix":"Use prefixo de provedor, por exemplo","featureRoutingTitle":"Roteamento Multi-Provedor","featureRoutingText":"Roteie requisições para mais de 30 provedores de IA por um único endpoint compatível com OpenAI. Suporta APIs de chat, responses, áudio e imagem.","featureCombosTitle":"Combos e Balanceamento","featureCombosText":"Crie combos de modelos com cadeias de fallback e estratégias de balanceamento: round-robin, prioridade, aleatório, menos usado e otimizado por custo.","featureUsageTitle":"Rastreamento de Uso e Custo","featureUsageText":"Contagem de tokens em tempo real, cálculo de custo por provedor/modelo e detalhamento de uso por chave de API e conta.","featureAnalyticsTitle":"Painel de Analytics","featureAnalyticsText":"Análises visuais com gráficos de requisições, tokens, erros, latência, custos e popularidade de modelos ao longo do tempo.","featureHealthTitle":"Monitoramento de Saúde","featureHealthText":"Health checks em tempo real, status de provedores, estados de circuit breaker e detecção automática de rate limit com backoff exponencial.","featureCliTitle":"Ferramentas CLI","featureCliText":"Gerencie configurações de IDE, exporte/importe backups, descubra perfis de codex e configure opções pelo painel.","featureSecurityTitle":"Segurança e Políticas","featureSecurityText":"Autenticação por chave de API, filtragem de IP, proteção contra prompt injection, políticas de domínio, gerenciamento de sessões e auditoria.","featureCloudSyncTitle":"Sincronização em 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":"Plano Gratuito","providerTypeOAuth":"OAuth","providerTypeApiKey":"Chave de API","useCaseSingleEndpointTitle":"Um endpoint para muitos provedores","useCaseSingleEndpointText":"Aponte clientes para uma única 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 combo no painel e mantenha a configuração do cliente estável enquanto os provedores giram internamente.","useCaseUsageVisibilityTitle":"Visibilidade de uso, custo e debug","useCaseUsageVisibilityText":"Acompanhe tokens e custo por provedor, conta e chave de API nas abas de Uso e Analytics.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"URL Base","chatEndpointLabel":"Endpoint de chat","modelRecommendationLabel":"Recomendação de modelo: prefixo explícito","clientCodexTitle":"Modelos Codex / GitHub Copilot","clientCodexBullet1":"Use IDs de modelo com prefixo","clientCodexBullet2":"Modelos da família Codex são roteados automaticamente para","clientCodexBullet3":"Modelos não-Codex continuam em","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Use o prefixo","clientCursorBullet1Suffix":"para modelos do Cursor.","clientCursorBullet2":"Conexão OAuth - faça login na página de Provedores.","clientClaudeTitle":"Claude Code / Antigravity","clientClaudeBullet1Prefix":"Use","clientClaudeBullet1Middle":"(Claude) ou","clientClaudeBullet1Suffix":"(Antigravity) como prefixo.","protocolsTitle":"Protocolos: MCP e A2A","protocolsDescription":"O OmniRoute expõe dois protocolos operacionais além das APIs compatíveis com OpenAI: MCP para execução de ferramentas e A2A para fluxos agente-para-agente.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP via stdio para permitir descoberta e execução de ferramentas OmniRoute com visibilidade de auditoria.","protocolMcpStep1":"Inicie o transporte MCP com `omniroute --mcp`.","protocolMcpStep2":"Aponte seu cliente MCP para transporte stdio.","protocolMcpStep3":"Chame `omniroute_get_health` e `omniroute_list_combos` para validar conectividade.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC para submeter tarefas de forma síncrona ou via SSE streaming.","protocolA2aStep1":"Leia `/.well-known/agent.json` para descoberta do agente.","protocolA2aStep2":"Envie `message/send` ou `message/stream` para `POST /a2a`.","protocolA2aStep3":"Gerencie ciclo de vida das tarefas com `tasks/get` e `tasks/cancel`.","protocolTroubleshootingTitle":"Troubleshooting de protocolos","protocolTroubleshooting1":"Se o status MCP estiver offline, verifique se o processo stdio está rodando e atualizando o heartbeat.","protocolTroubleshooting2":"Se tarefas A2A ficarem em `working`, inspecione `/api/a2a/tasks/:id` e os eventos de stream até estado terminal.","protocolTroubleshooting3":"Use `/dashboard/mcp` e `/dashboard/a2a` para controles operacionais e visibilidade de auditoria.","endpointChatNote":"Endpoint de chat compatível com OpenAI (padrão).","endpointResponsesNote":"Endpoint da API Responses (Codex, o-series).","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":"Auxiliar de reescrita para Responses sem /v1.","endpointRewriteModelsNote":"Auxiliar de reescrita para descoberta de modelos sem /v1.","modelPrefixesDescriptionStart":"Use o prefixo do provedor antes do nome do modelo para rotear para um provedor específico. Exemplo:","modelPrefixesDescriptionEnd":"roteia para o GitHub Copilot.","provider":"Provedor","type":"Tipo","troubleshootingModelRouting":"Se o cliente falhar no roteamento de modelo, use provedor/modelo explícito (por exemplo: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Se você receber erros de modelo ambíguo, escolha um prefixo de provedor em vez de um ID de modelo sem prefixo.","troubleshootingCodexFamily":"Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; o roteador seleciona /responses automaticamente.","troubleshootingTestConnection":"Use Painel > Provedores > Testar Conexão antes de testar por IDEs ou clientes externos.","troubleshootingCircuitBreaker":"Se um provedor mostrar circuit breaker aberto, aguarde o cooldown ou verifique a página Health para detalhes.","troubleshootingOAuth":"Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Geração de texto para fala (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Geração de incorporação de texto (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Política de Privacidade","termsOfService":"Termos de Serviço","providerConfigurations":"Configurações de provedores","apiKeys":"Chaves de API","usageLogs":"Logs de uso","applicationSettings":"Configurações do aplicativo","viewExportAnalytics":"Visualizar e exportar análises de uso","clearHistory":"Limpar histórico de uso a qualquer momento","configureRetention":"Configurar políticas de retenção de logs","backupRestore":"Fazer backup e restaurar seu banco de dados","privacyMetadataTitle":"Política de Privacidade | OmniRoute","privacyMetadataDescription":"Política de privacidade do roteador proxy de API de IA OmniRoute.","termsMetadataTitle":"Termos de Serviço | OmniRoute","termsMetadataDescription":"Termos de serviço do roteador proxy de API de IA OmniRoute.","backToHome":"Voltar para a home","lastUpdated":"Última atualização: {date}","policyLastUpdatedDate":"13 de fevereiro de 2026","listSeparator":"-","questionsVisit":"Dúvidas? Visite nosso","githubRepository":"repositório no GitHub","privacySection1Title":"1. Arquitetura Local-First","privacySection1Text":"O OmniRoute foi projetado como uma aplicação local-first. Todo processamento e armazenamento de dados ocorre inteiramente na sua máquina. Não existe servidor centralizado coletando suas informações.","privacySection2Title":"2. Dados que Armazenamos","privacyDataStoredIn":"Os dados a seguir são armazenados localmente em","privacyDataProviderConfigurationsDesc":"URLs de conexão, tipos de provedor e configurações de prioridade","privacyDataApiKeysDesc":"criptografadas e armazenadas localmente para autenticar com provedores de IA","privacyDataUsageLogsDesc":"contagem de requisições, uso de tokens, nomes de modelos, timestamps e tempos de resposta","privacyDataApplicationSettingsDesc":"preferências de tema, estratégia de roteamento e configurações de combos","privacySection3Title":"3. Sem Telemetria","privacySection3Text":"O OmniRoute não coleta telemetria, analytics ou relatórios de falha. 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 de IA de Terceiros","privacySection4Text":"Quando você faz chamadas de API pelo OmniRoute, suas requisições são encaminhadas aos provedores de IA configurados (por exemplo: OpenAI, Anthropic, Google). Esses provedores possuem suas próprias políticas de privacidade que regem como tratam seus dados. Consulte:","privacyOpenAiPolicy":"Política de Privacidade da OpenAI","privacyAnthropicPolicy":"Política de Privacidade da Anthropic","privacyGooglePolicy":"Política de Privacidade do Google","privacySection5Title":"5. Sincronização em Nuvem (Opcional)","privacySection5Text":"Se você ativar o recurso opcional de sincronização em nuvem, configurações de provedores e chaves de API podem ser transmitidas para um endpoint de nuvem configurado. Esse recurso vem desativado por padrão e exige opt-in explícito.","privacySection6Title":"6. Logs","privacyLoggingIntro":"Os logs de requisiçã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 diretório","privacySection7TextEnd":"ou usando os recursos de backup e restauração do banco de dados no painel.","termsSection1Title":"1. Visão Geral","termsSection1Text":"O OmniRoute é um roteador proxy de API de IA local-first que roda inteiramente na sua máquina. Ele roteia requisições para múltiplos 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 de terceiros (OpenAI, Anthropic, Google etc.).","termsResponsibilityCompliance":"Você deve cumprir os termos de serviço de cada provedor de IA cuja API acessar através do OmniRoute.","termsResponsibilitySecurity":"Você é responsável pela segurança da sua instalação local do OmniRoute, incluindo definir uma senha e restringir acesso de rede.","termsSection3Title":"3. Como Funciona","termsSection3Text":"O 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. O OmniRoute não modifica o conteúdo das suas requisiçõ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 SQLite.","termsNoTransmission":"O OmniRoute não transmite dados para servidores externos, a menos que você ative explicitamente recursos de sincronização em nuvem.","termsDataLocationText":"Logs de uso, chaves de API e configurações são armazenados em","termsSection5Title":"5. Isenção de Responsabilidade","termsSection5Text":"O OmniRoute é fornecido \\"como está\\", sem garantia de qualquer tipo. Não somos responsáveis por custos incorridos por uso de API, interrupções de serviço ou perda de dados. Sempre mantenha backups da sua configuração.","termsSection6Title":"6. Código Aberto","termsSection6Text":"O OmniRoute é um software de código aberto. Você pode inspecionar, modificar e distribuí-lo de acordo com os termos da licença."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"Endpoints de API","apiEndpointsTitle":"Endpoints de API","apiEndpointsDescription":"Endpoints de API backend que podem ser consumidos por outras aplicações e serviços.","comingSoon":"Em Breve","plannedFeatures":"Funcionalidades Planejadas","featureRestApi":"Catálogo de endpoints REST API com documentação interativa","featureWebhooks":"Configuração de webhooks e assinaturas de eventos","featureSwagger":"Geração automática de specs OpenAPI / Swagger","featureAuth":"Gestão de chaves API e escopos OAuth por endpoint"},"agents":{"title":"Agentes CLI","description":"Descubra agentes CLI instalados no seu sistema. Adicione agentes customizados para auto-detecção.","refresh":"Atualizar","installed":"Instalado","notFound":"Não encontrado","builtIn":"Nativo","custom":"Customizado","remove":"Remover","addCustomAgent":"Adicionar Agente Customizado","addCustomAgentDesc":"Registre qualquer ferramenta CLI para detecção. Ela será verificada automaticamente ao atualizar.","agentName":"Nome do Agente","binaryName":"Nome do Binário","versionCommand":"Comando de Versão","spawnArgs":"Argumentos","addAgent":"Adicionar Agente","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Bate-papo simples","streaming":"Transmissão","system-prompt":"Alerta do sistema","thinking":"Pensando","tool-calling":"Chamada de ferramenta","multi-turn":"Multivoltas"},"templateDescriptions":{"simple-chat":"Modelo básico de chat com mensagem do sistema","streaming":"Modelo para streaming de respostas","system-prompt":"Modelo com prompt de sistema personalizado","thinking":"Modelo com orçamento de raciocínio/pensamento","tool-calling":"Modelo para chamada de ferramenta/função","multi-turn":"Modelo para conversas múltiplas"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente de IA útil.","userGreeting":"Olá! Como posso ajudá-lo hoje?"},"streaming":{"prompt":"Escreva uma história sobre"},"systemPrompt":{"question":"Qual é o sentido da vida?","systemInstruction":"Forneça uma resposta ponderada e filosófica."},"thinking":{"question":"Explique a computação quântica"},"toolCalling":{"cityNameDescription":"O nome da cidade para obter o clima","toolDescription":"Obtenha o clima atual para um local","userWeather":"Qual é o clima em Tóquio?"},"multiTurn":{"system":"Você é um assistente útil.","assistantExample":"Ficarei feliz em ajudá-lo com isso.","userInitial":"preciso de ajuda com","userFollowUp":"Você pode explicar isso?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
2
2
 
3
3
  //# sourceMappingURL=src_i18n_messages_pt-BR_json_e7b9e8db._.js.map