/ frontend / src / app / locales / pt-PT / translation.json
translation.json
   1  {
   2    "common": {
   3      "save": "Guardar",
   4      "cancel": "Cancelar",
   5      "close": "Fechar",
   6      "delete": "Eliminar",
   7      "edit": "Editar",
   8      "add": "Adicionar",
   9      "create": "Criar",
  10      "remove": "Remover",
  11      "confirm": "Confirmar",
  12      "back": "Voltar",
  13      "next": "Seguinte",
  14      "previous": "Anterior",
  15      "search": "Pesquisar",
  16      "searchPlaceholder": "Pesquisar...",
  17      "filter": "Filtrar",
  18      "all": "Todos",
  19      "yes": "Sim",
  20      "no": "Não",
  21      "none": "Nenhum",
  22      "loading": "A carregar...",
  23      "saving": "A guardar...",
  24      "submitting": "A submeter...",
  25      "refresh": "Atualizar",
  26      "retry": "Tentar novamente",
  27      "copy": "Copiar",
  28      "copied": "Copiado para a área de transferência",
  29      "export": "Exportar",
  30      "exportCsv": "Exportar CSV",
  31      "clear": "Limpar",
  32      "clearSearch": "Limpar pesquisa",
  33      "done": "Concluído",
  34      "apply": "Aplicar",
  35      "disable": "Desativar",
  36      "enable": "Ativar",
  37      "enabled": "Ativado",
  38      "disabled": "Desativado",
  39      "name": "Nome",
  40      "description": "Descrição",
  41      "actions": "Ações",
  42      "status": "Estado",
  43      "date": "Data",
  44      "user": "Utilizador",
  45      "username": "Utilizador",
  46      "password": "Palavra-passe",
  47      "role": "Função",
  48      "admin": "Administrador",
  49      "private": "Privado",
  50      "public": "Público",
  51      "team": "Equipa",
  52      "project": "Projeto",
  53      "type": "Tipo",
  54      "pageSize": "Linhas por página",
  55      "noResults": "Nenhum item encontrado",
  56      "noMatches": "Sem resultados para \"{{query}}\"",
  57      "resultCount_one": "{{count}} resultado",
  58      "resultCount_other": "{{count}} resultados",
  59      "errorGeneric": "Algo correu mal. Tente novamente.",
  60      "selectedCount": "{{count}} selecionados",
  61      "keepEditing": "Continuar a editar",
  62      "discard": "Descartar"
  63    },
  64    "nav": {
  65      "home": "Início",
  66      "projects": "Projetos",
  67      "library": "Biblioteca",
  68      "users": "Utilizadores",
  69      "teams": "Equipas",
  70      "llms": "LLMs",
  71      "embeddings": "Embeddings",
  72      "imageGenerators": "Geradores de Imagem",
  73      "speechToText": "Voz para Texto",
  74      "generators": "Geradores",
  75      "admin": "Administração",
  76      "cronLogs": "Registos de Cron",
  77      "auditLog": "Registo de Auditoria",
  78      "permissionMatrix": "Matriz de Permissões",
  79      "settings": "Definições",
  80      "invitations": "Convites",
  81      "tools": "Ferramentas",
  82      "logout": "Terminar sessão",
  83      "profile": "Perfil",
  84      "account": "Conta",
  85      "language": "Idioma",
  86      "switchLanguage": "Mudar idioma",
  87      "showMore": "Ver mais",
  88      "collapse": "Recolher",
  89      "expand": "Expandir",
  90      "openMenu": "Abrir menu",
  91      "classifiers": "Classificadores",
  92      "directAccess": "Acesso direto",
  93      "gpu": "GPU",
  94      "aiProxy": "Proxy de IA",
  95      "swagger": "Swagger",
  96      "adminLabel": "Administração",
  97      "docsLabel": "Documentação"
  98    },
  99    "topbar": {
 100      "exitImpersonation": "Sair da personificação",
 101      "impersonating": "A personificar {{username}}",
 102      "invitationsPending": "{{count}} convites pendentes",
 103      "notifications": "Notificações"
 104    },
 105    "breadcrumb": {
 106      "home": "Início"
 107    },
 108    "sessions": {
 109      "signIn": "Iniciar sessão",
 110      "signInAction": "Entrar",
 111      "signingIn": "A iniciar sessão...",
 112      "welcome": "Bem-vindo de volta",
 113      "subtitle": "Inicie sessão na sua conta RESTai",
 114      "username": "Utilizador",
 115      "password": "Palavra-passe",
 116      "forgotPassword": "Esqueceu-se da palavra-passe?",
 117      "rememberMe": "Lembrar-me",
 118      "loginFailed": "Falha ao iniciar sessão. Verifique as suas credenciais.",
 119      "sessionExpired": "A sua sessão expirou. Inicie sessão novamente.",
 120      "signInWith": "Entrar com {{provider}}",
 121      "or": "ou",
 122      "totpTitle": "Autenticação em dois passos",
 123      "totpSubtitle": "Introduza o código de 6 dígitos da sua aplicação autenticadora.",
 124      "totpCodeLabel": "Código do autenticador",
 125      "totpRecoveryToggle": "Usar um código de recuperação",
 126      "totpRecoveryLabel": "Código de recuperação",
 127      "totpVerify": "Verificar",
 128      "totpVerifying": "A verificar...",
 129      "totpInvalid": "Código inválido.",
 130      "passwordWarningTitle": "Aviso de validade da palavra-passe",
 131      "passwordAgeMessage": "A sua palavra-passe tem {{days}} dias. Considere alterá-la em breve."
 132    },
 133    "dashboard": {
 134      "title": "Início",
 135      "greeting": "Painel",
 136      "subtitle": "Visão geral da sua plataforma RESTai",
 137      "hero": {
 138        "tagline": "RESTai · Plataforma AIaaS",
 139        "subtitle": "Os seus modelos, os seus dados, as suas regras. Visão em tempo real do que se passa na plataforma.",
 140        "operational": "Tudo operacional",
 141        "modelsOnline_one": "{{count}} modelo online",
 142        "modelsOnline_other": "{{count}} modelos online",
 143        "tokensToday": "{{value}} tokens hoje",
 144        "sinceOpen": "+{{value}} desde abertura",
 145        "latency": "{{value}} latência p50",
 146        "totalTokens": "{{value}} no total",
 147        "vsYesterday": "{{pct}}% vs ontem",
 148        "greetMorning": "Bom dia",
 149        "greetAfternoon": "Boa tarde",
 150        "greetEvening": "Boa noite",
 151        "greetLate": "A queimar as pestanas"
 152      },
 153      "fleet": {
 154        "title": "FROTA DE MODELOS",
 155        "subtitle_one": "{{count}} modelo ativo nas suas equipas",
 156        "subtitle_other": "{{count}} modelos ativos nas suas equipas",
 157        "tokens": "Tokens",
 158        "requests": "Pedidos"
 159      },
 160      "stats": {
 161        "projects": "Projetos",
 162        "users": "Utilizadores",
 163        "teams": "Equipas",
 164        "tokens": "Tokens",
 165        "cost": "Custo",
 166        "avgLatency": "Latência média"
 167      },
 168      "activity": "Atividade",
 169      "distribution": "Distribuição",
 170      "projects": "Projetos",
 171      "projectTypes": "Tipos de Projeto",
 172      "llmUsage": "Utilização de LLM",
 173      "topLlms": "LLMs mais usados",
 174      "topProjects": "Projetos mais usados",
 175      "latestProjects": "Projetos recentes",
 176      "noProjectsYet": "Ainda não há projetos",
 177      "noProjectsDesc": "Os projetos são onde vivem os fluxos RAG, de agentes e de blocos. Crie um para começar a acompanhar conversas, custos e qualidade neste painel.",
 178      "createFirstProject": "Crie o seu primeiro projeto",
 179      "authSecretWeak": "Aviso de segurança: a variável de ambiente RESTAI_AUTH_SECRET é fraca ou corresponde a um valor predefinido conhecido. Altere-a para um valor longo e aleatório e reinicie o servidor. As sessões existentes terão de iniciar sessão novamente."
 180    },
 181    "projects": {
 182      "title": "Projetos",
 183      "subtitle": "Os seus projetos RAG, de agente e de bloco",
 184      "new": "Novo Projeto",
 185      "newProject": "Novo Projeto",
 186      "search": "Pesquisar projetos...",
 187      "noProjects": "Ainda não há projetos.",
 188      "emptyTitle": "Ainda não há projetos",
 189      "emptyMessage": "Crie o seu primeiro projeto para começar.",
 190      "type": {
 191        "rag": "RAG",
 192        "agent": "Agente",
 193        "block": "Bloco"
 194      },
 195      "fields": {
 196        "name": "Nome",
 197        "humanName": "Nome apresentado",
 198        "description": "Descrição",
 199        "llm": "LLM",
 200        "embeddings": "Embeddings",
 201        "team": "Equipa",
 202        "vectorstore": "Vectorstore",
 203        "system": "Prompt de sistema"
 204      },
 205      "actions": {
 206        "open": "Abrir",
 207        "edit": "Editar",
 208        "clone": "Clonar",
 209        "delete": "Eliminar",
 210        "playground": "Playground",
 211        "saveAsTemplate": "Guardar como modelo",
 212        "useTemplate": "Usar modelo"
 213      },
 214      "clone": {
 215        "title": "Clonar projeto",
 216        "newName": "Nome do novo projeto",
 217        "helper": "As definições, conjuntos de avaliação e versões de prompt serão clonados."
 218      },
 219      "template": {
 220        "saveTitle": "Guardar como modelo",
 221        "saveIntro": "Capture o prompt de sistema e as opções deste projeto como um modelo reutilizável. O projeto atual não é afetado.",
 222        "name": "Nome do modelo",
 223        "description": "Descrição",
 224        "descHelper": "Apresentado na lista da biblioteca — explique para que serve este modelo.",
 225        "visibility": "Visibilidade",
 226        "private": "Privado — só o próprio pode ver e usar",
 227        "team": "Equipa — membros da equipa deste projeto",
 228        "public": "Público — qualquer utilizador desta instância RESTai",
 229        "publish": "Publicar",
 230        "publishing": "A publicar...",
 231        "published": "Modelo \"{{name}}\" publicado.",
 232        "instantiateTitle": "Usar modelo: {{name}}",
 233        "instantiateNewName": "Nome do novo projeto",
 234        "instantiateNameHelp": "Identificador seguro para URL (letras, números, . _ : -)",
 235        "instantiateTeam": "Equipa alvo",
 236        "instantiateLlm": "LLM",
 237        "instantiateSuggested": "(sugerido: {{name}})",
 238        "instantiateUseSuggested": "(usar sugerido)",
 239        "create": "Criar projeto",
 240        "creating": "A criar..."
 241      },
 242      "library": {
 243        "title": "Biblioteca de projetos",
 244        "subtitle": "Explore projetos partilhados. Clone qualquer projeto para o personalizar.",
 245        "communityTemplates": "Modelos da comunidade",
 246        "communityTemplatesDesc": "Pacotes iniciais reutilizáveis de projetos — instancie um para criar um novo projeto em qualquer uma das suas equipas. Guarde os seus a partir do botão \"Guardar como modelo\" de qualquer projeto.",
 247        "noTemplates": "Ainda não há modelos disponíveis.",
 248        "noSharedProjects": "Nenhum projeto partilhado encontrado.",
 249        "markPublicHint": "Marque um projeto como \"Partilhado\" nas definições para aparecer aqui.",
 250        "by": "por {{author}}",
 251        "uses_one": "{{count}} uso",
 252        "uses_other": "{{count}} usos"
 253      },
 254      "gallery": {
 255        "chooseTemplate": "Escolha um modelo",
 256        "chooseSubtitle": "Comece com um projeto pré-configurado ou crie do zero",
 257        "startFromScratch": "Começar do zero",
 258        "scratchDesc": "Crie um projeto em branco e configure tudo manualmente",
 259        "publishedTitle": "Os seus modelos publicados",
 260        "publishedDesc": "Guardados a partir de projetos existentes. Clicar num cria um novo projeto baseado na captura."
 261      },
 262      "unsavedChanges": {
 263        "title": "Descartar alterações não guardadas?",
 264        "message": "Tem edições por guardar neste projeto. Se sair agora, serão descartadas."
 265      },
 266      "edit": {
 267        "title": "Editar projeto - {{name}}",
 268        "tabs": {
 269          "general": "Geral",
 270          "knowledge": "Conhecimento",
 271          "tools": "Ferramentas",
 272          "secrets": "Segredos",
 273          "security": "Segurança",
 274          "integrations": "Integrações",
 275          "routines": "Rotinas",
 276          "mobile": "Móvel",
 277          "analytics": "Análises",
 278          "comments": "Comentários",
 279          "evals": "Avaliações",
 280          "guards": "Guardas"
 281        },
 282        "general": {
 283          "basicInfo": "Informação básica",
 284          "advanced": "Avançado",
 285          "projectName": "Nome do projeto",
 286          "displayName": "Nome apresentado",
 287          "description": "Descrição",
 288          "team": "Equipa",
 289          "llm": "LLM",
 290          "embeddings": "Embeddings",
 291          "systemPrompt": "Prompt de sistema",
 292          "systemPromptHint": "Instruções que moldam o comportamento do agente",
 293          "generatePrompt": "Gerar com IA",
 294          "promptVersions": "Histórico de versões",
 295          "censorship": "Resposta de reserva",
 296          "censorshipHint": "Devolvida quando o agente não encontra uma boa resposta",
 297          "logging": "Registar inferências",
 298          "redactLogs": "Ocultar PII nos registos",
 299          "cache": "Cache semântica de respostas",
 300          "cacheThreshold": "Limiar da cache",
 301          "memoryBankEnabled": "Banco de memória (contexto do projeto)",
 302          "memoryBankMaxTokens": "Orçamento de tokens do banco de memória",
 303          "memoryBankWarning": "O banco de memória partilha um resumo de todas as conversas deste projeto com todas as outras conversas. Qualquer utilizador com acesso a este projeto verá o agente referir contexto resumido de conversas de outros utilizadores. Não ative esta opção para projetos com dados confidenciais por utilizador.",
 304          "browserSection": "Navegador de agente",
 305          "browserAllowedDomains": "Domínios permitidos",
 306          "browserAllowedHint": "Lista de hosts separados por vírgulas que o navegador pode visitar. Vazio = sem restrição.",
 307          "browserAllowEval": "Permitir browser_eval (perigoso)"
 308        },
 309        "knowledge": {
 310          "retrieval": "Recuperação",
 311          "kHint": "Número de chunks obtidos por consulta",
 312          "scoreHint": "Pontuação mínima de similaridade (0-1). Maior = mais estrito.",
 313          "rerank": "Reordenação",
 314          "llmRerank": "Reordenação por LLM",
 315          "colbertRerank": "Reordenação ColBERT",
 316          "sqlSection": "SQL em linguagem natural",
 317          "connection": "String de ligação à base de dados",
 318          "connectionHint": "URI SQLAlchemy — p. ex. postgresql://user:pwd@host/db",
 319          "tables": "Tabelas permitidas",
 320          "knowledgeGraph": "Grafo de conhecimento",
 321        "evals": {
 322          "datasets": "Conjuntos de dados",
 323          "newDataset": "Novo conjunto",
 324          "clickHint": "Clique num conjunto para gerir os seus casos de teste.",
 325          "noDatasets": "Ainda sem conjuntos. Crie um para começar a avaliar.",
 326          "name": "Nome",
 327          "cases": "Casos",
 328          "actions": "Ações",
 329          "testCases": "{{name}} — Casos de teste",
 330          "addCase": "Adicionar caso",
 331          "noCases": "Ainda sem casos de teste. Adicione perguntas para avaliar o seu projeto.",
 332          "addFirstCase": "Adicionar primeiro caso",
 333          "question": "Pergunta",
 334          "expectedAnswer": "Resposta esperada",
 335          "runs": "Execuções de avaliação",
 336          "noRuns": "Ainda sem execuções. Selecione um conjunto e clique no botão de reprodução para começar.",
 337          "run": "Execução",
 338          "status": "Estado",
 339          "scores": "Pontuações",
 340          "scoreTrend": "Tendência de pontuação",
 341          "runResults": "Resultados da execução #{{id}}",
 342          "answer": "Resposta",
 343          "metric": "Métrica",
 344          "score": "Pontuação",
 345          "reason": "Motivo",
 346          "newDatasetTitle": "Novo conjunto de avaliação",
 347          "description": "Descrição",
 348          "addTestCase": "Adicionar caso de teste",
 349          "expectedOptional": "Resposta esperada (opcional)",
 350          "expectedHelp": "Forneça uma resposta de verdade para ativar a métrica 'correção'",
 351          "runEval": "Executar avaliação",
 352          "selectMetrics": "Selecione as métricas a avaliar. Cada caso de teste terá uma pontuação por métrica.",
 353          "answerRelevancy": "Relevância da resposta — A resposta é relevante para a pergunta?",
 354          "faithfulness": "Fidelidade — A resposta está fundamentada no contexto recuperado? (apenas RAG)",
 355          "correctness": "Correção — A resposta corresponde à resposta esperada?",
 356          "starting": "A iniciar…",
 357          "start": "Iniciar",
 358          "confirmDeleteDataset": "Eliminar este conjunto e todos os casos de teste?",
 359          "confirmDeleteRun": "Eliminar esta execução de avaliação?"
 360        },
 361        "guardAnalytics": {
 362          "title": "Analítica de guards",
 363          "noData": "Sem dados de guards. Configure guards de entrada ou saída neste projeto para começar a acompanhar.",
 364          "totalChecks": "Total de verificações",
 365          "blocked": "Bloqueados",
 366          "blockRate": "Taxa de bloqueio",
 367          "warnings": "Avisos",
 368          "events": "Eventos de guard",
 369          "recentBlocked": "Pedidos bloqueados recentes ({{count}})",
 370          "noBlocked": "Ainda sem pedidos bloqueados.",
 371          "date": "Data",
 372          "phase": "Fase",
 373          "guard": "Guard",
 374          "text": "Texto",
 375          "guardResponse": "Resposta do guard",
 376          "loggingDisabled": "(registo desativado)",
 377          "phaseInput": "entrada",
 378          "phaseOutput": "saída"
 379        },
 380        "infoKnowledge": {
 381          "title": "Definições RAG",
 382          "documents": "Documentos",
 383          "embeddings": "Embeddings",
 384          "vectorStore": "Vector store",
 385          "topK": "Top-K documentos",
 386          "scoreCutoff": "Corte de score",
 387          "colbertRerank": "Rerank ColBERT",
 388          "llmRerank": "Rerank LLM",
 389          "cache": "Cache",
 390          "cacheThreshold": "Limiar de cache",
 391          "sqlConnection": "Ligação SQL",
 392          "sqlTables": "Tabelas SQL",
 393          "knowledgeGraph": "Grafo de conhecimento",
 394          "logging": "Registo",
 395          "rateLimit": "Limite de taxa",
 396          "rateLimitValue": "{{value}} pedidos/min",
 397          "inputGuard": "Guard de entrada",
 398          "outputGuard": "Guard de saída",
 399          "guardMode": "Modo de guard",
 400          "guardWarn": "Avisar",
 401          "guardBlock": "Bloquear",
 402          "censorshipMessage": "Mensagem de censura",
 403          "autoSync": "Sincronização automática",
 404          "autoSyncActive_one": "Ativa ({{count}} fonte)",
 405          "autoSyncActive_other": "Ativa ({{count}} fontes)",
 406          "configured": "Configurado"
 407        },
 408        "kgTabs": {
 409          "entities": "Entidades",
 410          "graph": "Grafo",
 411          "query": "Consulta"
 412        },
 413        "block": {
 414          "config": "Configuração de blocos",
 415          "status": "Estado",
 416          "configured": "Configurado",
 417          "notConfigured": "Não configurado",
 418          "topBlocks": "Blocos de topo",
 419          "variables": "Variáveis"
 420        },
 421        "ide": {
 422          "title": "IDE de blocos",
 423          "subtitleWithAi": "Componha visualmente o seu projeto de blocos. Use \"Gerar com IA\" para obter um espaço de trabalho inicial.",
 424          "subtitle": "Componha visualmente o seu projeto de blocos.",
 425          "generateAi": "Gerar com IA",
 426          "dialogTitle": "Gerar espaço de trabalho com IA",
 427          "dialogHelp": "Descreva em linguagem simples o que este projeto de blocos deve fazer. O LLM do sistema irá gerar um espaço de trabalho inicial que pode editar.",
 428          "placeholder": "ex: \"Classifica mensagens de utilizadores como faturação, técnico, ou vendas e reencaminha cada uma para o sub-projeto certo\"",
 429          "warning": "Isto substitui o espaço de trabalho atual. Guarde os blocos existentes primeiro se precisar deles.",
 430          "generating": "A gerar…",
 431          "generate": "Gerar",
 432          "workspaceSaved": "Espaço de trabalho guardado",
 433          "workspaceGenerated": "Espaço de trabalho gerado — reveja e guarde quando estiver pronto"
 434        },
 435          "sync": "Sincronização externa",
 436          "syncEnabled": "Ativar sincronização agendada",
 437          "syncSources": "Fontes de sincronização",
 438          "addSource": "Adicionar fonte",
 439          "syncNow": "Sincronizar agora",
 440          "bulkIngest": "Ingestão em massa de ficheiros",
 441          "uploadFiles": "Carregar ficheiros",
 442          "uploading": "A carregar...",
 443          "queuedFiles": "{{count}} ficheiro(s) em fila para ingestão.",
 444          "ingestHelp": "PDF / DOCX / CSV / XLSX / TXT. Processado de forma assíncrona pelo cron bulk_ingest."
 445        },
 446        "security": {
 447          "guards": "Guardas de prompt",
 448          "inputGuard": "Guarda de entrada",
 449          "inputGuardHint": "Projeto de guarda que valida perguntas de utilizador antes do projeto principal executar",
 450          "outputGuard": "Guarda de saída",
 451          "guardMode": "Modo da guarda",
 452          "guardModeBlock": "Bloquear",
 453          "guardModeWarn": "Apenas avisar",
 454          "rateLimit": "Limite de taxa (pedidos/min)",
 455          "rateLimitHint": "Máximo de pedidos por minuto. Deixar vazio para ilimitado.",
 456          "redactInferenceLogs": "Ocultar dados sensíveis nos registos de inferência",
 457          "inviteUser": "Convidar utilizador",
 458          "privacy": "Privacidade e acesso"
 459        },
 460        "integrations": {
 461          "telegram": "Telegram",
 462          "slack": "Slack",
 463          "whatsapp": "WhatsApp Business Cloud API",
 464          "email": "Email (SMTP) — usado pela ferramenta send_email",
 465          "sms": "SMS (Twilio) — usado pela ferramenta send_sms",
 466          "webhooks": "Webhooks de eventos de saída",
 467          "telegramToken": "Token do bot Telegram",
 468          "telegramTokenHint": "Cole o token de @BotFather para ligar este projeto ao Telegram",
 469          "telegramDefaultChatId": "ID do chat Telegram predefinido",
 470          "telegramAllowedChatIds": "IDs de chat Telegram permitidos (entrada)",
 471          "slackBotToken": "Token de bot Slack",
 472          "slackAppToken": "Token de aplicação Slack",
 473          "webhookUrl": "URL de webhook",
 474          "webhookUrlHelp": "Configure este URL no Meta Business Suite → WhatsApp → Configuração → Webhooks.",
 475          "phoneNumberId": "ID do número de telefone",
 476          "accessToken": "Token de acesso",
 477          "appSecret": "Segredo da aplicação",
 478          "verifyToken": "Token de verificação",
 479          "defaultRecipient": "Destinatário predefinido",
 480          "allowedPhoneNumbers": "Números de telefone permitidos",
 481          "testConnection": "Testar ligação",
 482          "testing": "A testar…",
 483          "smtpHost": "Servidor SMTP",
 484          "smtpPort": "Porta SMTP",
 485          "smtpUsername": "Utilizador SMTP",
 486          "smtpPassword": "Palavra-passe SMTP",
 487          "fromAddress": "Endereço de remetente",
 488          "twilioSid": "Twilio Account SID",
 489          "twilioToken": "Twilio Auth Token",
 490          "twilioFrom": "Número remetente (E.164)",
 491          "genericWebhookUrl": "URL de webhook",
 492          "signingSecret": "Segredo de assinatura",
 493          "subscribedEvents": "Eventos subscritos (CSV)",
 494          "sendTest": "Enviar evento de teste"
 495        },
 496        "tools": {
 497          "builtinTools": "Ferramentas incorporadas",
 498          "mcpServers": "Servidores MCP",
 499          "addMcp": "Adicionar servidor MCP",
 500          "mcpHost": "URL ou comando",
 501          "mcpArguments": "Argumentos",
 502          "mcpEnvVars": "Variáveis de ambiente",
 503          "mcpHeaders": "Cabeçalhos",
 504          "mcpCheck": "Verificar",
 505          "mcpProbing": "A sondar...",
 506          "customTools": "Ferramentas criadas pelo agente",
 507          "toolEnabled": "Ativada",
 508          "toolDeleteConfirm": "Eliminar esta ferramenta?",
 509          "selectTools": "Selecionar ferramentas"
 510        },
 511        "secrets": {
 512          "title": "Segredos do projeto",
 513          "subtitle": "Credenciais encriptadas que o Navegador de Agente pode usar sem as expor ao LLM",
 514          "add": "Adicionar segredo",
 515          "name": "Nome",
 516          "value": "Valor",
 517          "description": "Descrição",
 518          "created": "Criado"
 519        },
 520        "mobile": {
 521          "title": "Integração móvel",
 522          "subtitle": "Emparelhe clientes Android/iOS com este projeto através de código QR",
 523          "intro": "Leia o código QR com a aplicação móvel RESTai (Android hoje, mais plataformas em breve) para ter uma conversa só de leitura com este projeto. A aplicação usa apenas o modo conversa (streaming). Desative ou regenere para revogar todos os telemóveis emparelhados de uma vez.",
 524          "enable": "Ativar integração móvel",
 525          "disable": "Desativar",
 526          "regenerate": "Regenerar chave",
 527          "regenerating": "A regenerar…",
 528          "copyPayload": "Copiar payload bruto (JSON)",
 529          "keyChip": "chave {{prefix}}…",
 530          "hint": "Mostre este QR aos telemóveis que quiser — todos partilham a mesma chave de leitura. Clique em <1>Regenerar chave</1> para invalidar todos os telemóveis emparelhados de uma só vez.",
 531          "offMessage": "A integração móvel está desligada. Não existe chave de API para aplicações móveis neste projeto.",
 532          "qrHint": "Leia este código QR com a aplicação móvel RESTai."
 533        },
 534        "routines": {
 535          "title": "Rotinas",
 536          "subtitle": "Mensagens agendadas que disparam automaticamente neste projeto",
 537          "new": "Nova rotina",
 538          "name": "Nome",
 539          "message": "Mensagem",
 540          "schedule": "Agendamento",
 541          "fireNow": "Disparar agora",
 542          "history": "Histórico"
 543        },
 544        "analytics": {
 545          "title": "Análise de conversas",
 546          "conversations": "Conversas",
 547          "messages": "Mensagens",
 548          "avgMsgsPerConv": "Msgs/conv. médias",
 549          "avgLatency": "Latência média",
 550          "dailyActivity": "Atividade diária",
 551          "peakHours": "Horas de pico",
 552          "topUsers": "Utilizadores principais",
 553          "outcomeBreakdown": "Resultados",
 554          "latencyDistribution": "Distribuição de latência",
 555          "llmUsage": "Utilização de LLM",
 556          "messagesLabel": "Mensagens",
 557          "conversationsLabel": "Conversas",
 558          "requests": "Pedidos",
 559          "msgs": "Msgs",
 560          "tokens": "Tokens"
 561        }
 562      }
 563    },
 564    "chat": {
 565      "placeholder": "Escreva uma mensagem... (Shift+Enter para nova linha)",
 566      "send": "Enviar",
 567      "stop": "Parar geração",
 568      "clear": "Limpar conversa",
 569      "attachImage": "Anexar imagem",
 570      "attachFiles": "Anexar ficheiros — as imagens vão para o modelo visual, o resto é colocado em /home/user/uploads/ para a ferramenta de terminal",
 571      "thinking": "A pensar...",
 572      "stoppedSuffix": "(parado)",
 573      "getStarted": "Envie uma mensagem para começar.",
 574      "guardHit": "Esta pergunta acionou a guarda de prompt.",
 575      "ragNoSources": "Nenhuma fonte encontrada. Tente diminuir o limiar de pontuação.",
 576      "error": {
 577        "sessionExpired": "A sua sessão expirou. Inicie sessão novamente.",
 578        "budgetExhausted": "Orçamento do projeto esgotado. Contacte um administrador para recarregar.",
 579        "forbidden": "Não tem permissão para usar este projeto.",
 580        "notFound": "Projeto não encontrado ou eliminado.",
 581        "tooLarge": "A sua mensagem ou anexo é demasiado grande.",
 582        "invalid": "O pedido não corresponde ao formato esperado pelo projeto.",
 583        "invalidDetail": "Pedido inválido: {{detail}}",
 584        "rateLimit": "Limite de pedidos excedido — aguarde um momento e tente novamente.",
 585        "quotaReached": "Quota da chave de API atingida. {{detail}}",
 586        "internal": "O projeto encontrou um erro. Consulte os registos do servidor ou tente novamente.",
 587        "overloaded": "O serviço está temporariamente sobrecarregado. Tente novamente num momento.",
 588        "timeout": "O pedido expirou. O LLM demorou demasiado a responder.",
 589        "default": "Erro: {{detail}}",
 590        "generic": "Erro: o pedido falhou. Verifique a ligação e tente novamente."
 591      }
 592    },
 593    "users": {
 594      "title": "Utilizadores",
 595      "subtitle": "Utilizadores da plataforma, funções e acesso a projetos",
 596      "new": "Novo utilizador",
 597      "emptyTitle": "Ainda não há utilizadores",
 598      "emptyMessage": "Os utilizadores da plataforma aparecem aqui. Adicione um primeiro administrador ou membro para começar.",
 599      "roleFilter": "Função",
 600      "accessFilter": "Acesso",
 601      "roleAdmin": "Administrador",
 602      "roleUser": "Utilizador",
 603      "accessReadOnly": "Só leitura",
 604      "accessReadWrite": "Leitura/Escrita",
 605      "bulkDelete": "Eliminar",
 606      "bulkDeleteConfirm": "Eliminar {{count}} utilizador(es)?\n\n{{names}}",
 607      "bulkDeleted": "{{count}} utilizador(es) eliminado(s)",
 608      "bulkFailed": "Falha ao eliminar {{count}} utilizador(es)",
 609      "noUsers": "Ainda não há utilizadores.",
 610      "fields": {
 611        "username": "Utilizador",
 612        "password": "Palavra-passe",
 613        "confirmPassword": "Confirmar palavra-passe",
 614        "isAdmin": "Administrador",
 615        "isRestricted": "Acesso só de leitura",
 616        "isPrivate": "Apenas IA local"
 617      },
 618      "tabs": {
 619        "basic": "Informação básica",
 620        "password": "Palavra-passe",
 621        "twoFactor": "Autenticação em dois passos",
 622        "projects": "Projetos",
 623        "teams": "Equipas",
 624        "apiKeys": "Chaves de API",
 625        "activity": "Atividade",
 626        "delete": "Eliminar conta"
 627      },
 628      "showMore": "Mostrar mais",
 629      "basic": {
 630        "title": "Informação básica",
 631        "projects": "Projetos",
 632        "roleAdmin": "Admin",
 633        "roleRegular": "Regular",
 634        "authSso": "SSO",
 635        "authLocal": "Local",
 636        "impersonate": "Personificar",
 637        "restricted": "Restrito",
 638        "restrictedHelp": "Os utilizadores restritos só podem conversar com projetos existentes. Não podem criar, editar ou eliminar projetos, importar dados ou utilizar endpoints de acesso direto.",
 639        "language": "Idioma",
 640        "languageHelp": "Idioma da interface. Aplicado depois de guardar alterações.",
 641        "saveChanges": "Guardar alterações"
 642      },
 643      "password": {
 644        "title": "Palavra-passe",
 645        "newPassword": "Nova palavra-passe",
 646        "confirmPassword": "Confirmar palavra-passe",
 647        "twoFactorCode": "Código 2FA",
 648        "twoFactorAlert": "A autenticação 2FA está ativa. Introduza um código da sua aplicação autenticadora para confirmar a alteração de palavra-passe.",
 649        "recommendations": "Recomendações para a palavra-passe:",
 650        "recMin": "8 caracteres - quantos mais, melhor",
 651        "recLower": "Pelo menos uma letra minúscula",
 652        "recUpper": "Pelo menos uma letra maiúscula",
 653        "recSymbol": "Pelo menos um número, símbolo ou espaço em branco",
 654        "saveChanges": "Guardar alterações",
 655        "mismatch": "As palavras-passe não coincidem",
 656        "twoFactorRequired": "O código 2FA é obrigatório para alterar a palavra-passe"
 657      },
 658      "twoFactor": {
 659        "title": "Autenticação em dois passos",
 660        "description": "Adicione uma camada adicional de segurança utilizando uma aplicação TOTP (Google Authenticator, Authy, etc.).",
 661        "enforced": "A 2FA é obrigatória pelo administrador para todos os utilizadores locais.",
 662        "enabledChip": "2FA ativa",
 663        "disabledChip": "2FA desativada",
 664        "setup": "Configurar 2FA",
 665        "step1": "1. Leia este código QR com a sua aplicação autenticadora",
 666        "manualKey": "Ou introduza esta chave manualmente:",
 667        "step2": "2. Guarde os seus códigos de recuperação",
 668        "recoveryAlert": "Guarde estes códigos de forma segura. Cada código só pode ser usado uma vez para iniciar sessão caso perca o autenticador.",
 669        "step3": "3. Confirme com um código e a sua palavra-passe",
 670        "code": "Código de 6 dígitos",
 671        "password": "Palavra-passe",
 672        "enable": "Ativar 2FA",
 673        "cannotDisable": "Não é possível desativar (obrigatório)",
 674        "disable": "Desativar 2FA",
 675        "confirmPassword": "Confirmar palavra-passe",
 676        "confirmDisable": "Confirmar desativação",
 677        "setupFailed": "Falha ao configurar 2FA",
 678        "enabledSuccess": "2FA ativada com sucesso",
 679        "disabledSuccess": "2FA desativada"
 680      },
 681      "deleteAccount": {
 682        "title": "Eliminar a sua conta",
 683        "description": "Quando elimina a conta, perde o acesso a tudo,",
 684        "confirm": "Confirmo que quero eliminar a minha conta.",
 685        "delete": "Eliminar"
 686      },
 687      "userActivity": {
 688        "title": "Atividade (últimos 30 dias)",
 689        "requests": "Pedidos",
 690        "tokens": "Tokens",
 691        "cost": "Custo",
 692        "avgLatency": "Latência média",
 693        "conversations": "Conversas",
 694        "dailyActivity": "Atividade diária",
 695        "peakHours": "Horas de pico",
 696        "topProjects": "Principais projetos",
 697        "project": "Projeto"
 698      },
 699      "userProjects": {
 700        "title": "Preferências gerais",
 701        "project": "Projeto",
 702        "associate": "Associar",
 703        "dissociate": "Desassociar"
 704      },
 705      "userTeams": {
 706        "title": "Equipas",
 707        "noTeams": "Este utilizador não é membro de nenhuma equipa.",
 708        "adminOf": "Administrador de",
 709        "noAdmin": "Não é administrador de nenhuma equipa.",
 710        "memberOf": "Membro de",
 711        "noMember": "Sem participações adicionais em equipas.",
 712        "admin": "Admin",
 713        "member": "Membro"
 714      },
 715      "newPage": {
 716        "title": "Criar um novo utilizador",
 717        "subtitle": "Adicione um utilizador à plataforma. Defina as credenciais e o nível de permissão.",
 718        "account": "Conta",
 719        "permissions": "Permissões",
 720        "usernamePlaceholder": "ex. alice",
 721        "adminHelp": "Acesso total a todos os projetos, utilizadores, equipas e definições da plataforma.",
 722        "restrictedHelp": "O utilizador só pode conversar com projetos existentes. Sem criação, edição, ingestão ou acesso direto.",
 723        "privateHelp": "Restringir este utilizador a LLMs e embeddings no local — sem chamadas a fornecedores externos.",
 724        "create": "Criar utilizador",
 725        "creating": "A criar…",
 726        "passwordsMismatch": "As palavras-passe não coincidem",
 727        "passwordMin": "A palavra-passe deve ter pelo menos 8 caracteres",
 728        "usernameRequired": "O utilizador é obrigatório",
 729        "passwordRequired": "A palavra-passe é obrigatória",
 730        "browserTitle": "Novo utilizador"
 731      },
 732      "pwReq": {
 733        "chars": "Pelo menos 8 caracteres",
 734        "lower": "Uma letra minúscula",
 735        "upper": "Uma letra maiúscula",
 736        "digit": "Um número ou símbolo",
 737        "tooWeak": "Muito fraca",
 738        "weak": "Fraca",
 739        "fair": "Razoável",
 740        "good": "Boa",
 741        "strong": "Forte"
 742      },
 743      "apiKeys": {
 744        "title": "Chaves de API",
 745        "new": "Nova chave",
 746        "createNew": "Criar nova chave",
 747        "description": "Descrição",
 748        "descriptionOptional": "Descrição (opcional)",
 749        "keyPrefix": "Prefixo da chave",
 750        "scope": "Âmbito",
 751        "monthlyQuota": "Quota mensal",
 752        "created": "Criada",
 753        "readOnly": "Só leitura",
 754        "allowedProjects": "{{count}} projeto(s)",
 755        "allProjects": "Todos os projetos",
 756        "unlimited": "Ilimitado",
 757        "quotaTokens": "{{used}} / {{cap}} tokens",
 758        "quotaResets": "reinicia {{date}}",
 759        "editQuota": "Editar quota",
 760        "quotaDialogTitle": "Quota mensal de tokens",
 761        "quotaUsedThis": "Chave {{prefix}}... — usou {{used}} tokens neste período.",
 762        "quotaInput": "Quota de tokens (mensal)",
 763        "quotaInputHelper": "Deixe em branco ou coloque 0 para ilimitado. O contador reinicia no dia 1 do próximo mês.",
 764        "resetUsage": "Reiniciar utilização",
 765        "noKeys": "Ainda não tem chaves de API",
 766        "quotaSaved": "Quota atualizada.",
 767        "usageReset": "Utilização reiniciada.",
 768        "actions": "Ações",
 769        "deleteConfirm": "Tem a certeza de que deseja eliminar esta chave de API?",
 770        "createDialog": "Criar chave de API",
 771        "restrictProjects": "Restringir a projetos (opcional)",
 772        "restrictHelp": "Deixe em branco para acesso a todos os seus projetos",
 773        "readOnlyCheckbox": "Só leitura (pode consultar mas não modificar projetos)",
 774        "saveKeyTitle": "Guardar a sua chave de API",
 775        "saveKeyWarn": "Esta é a única vez que a chave completa será mostrada. Copie-a agora.",
 776        "projectLabel": "Projeto {{id}}",
 777        "tokens": "tokens"
 778      }
 779    },
 780    "teams": {
 781      "columns": {
 782        "name": "Nome",
 783        "description": "Descrição",
 784        "users": "Utilizadores",
 785        "projects": "Projetos"
 786      },
 787      "actions": {
 788        "view": "Ver",
 789        "edit": "Editar",
 790        "delete": "Eliminar"
 791      },
 792      "deleteConfirm": "Eliminar a equipa \"{{name}}\"?",
 793      "deleted": "Equipa eliminada",
 794      "edit": {
 795        "newTitle": "Nova equipa",
 796        "editTitle": "Editar equipa",
 797        "name": "Nome da equipa",
 798        "description": "Descrição",
 799        "budget": "Orçamento (-1 = ilimitado)",
 800        "budgetHelp": "Defina para -1 para orçamento ilimitado",
 801        "tabs": {
 802          "users": "Utilizadores",
 803          "projects": "Projetos",
 804          "models": "Modelos",
 805          "branding": "Marca"
 806        },
 807        "members": "Membros da equipa",
 808        "selectUsers": "Selecionar utilizadores",
 809        "admins": "Administradores da equipa",
 810        "selectAdmins": "Selecionar administradores",
 811        "adminsHelp": "Os administradores da equipa podem gerir as definições e os membros",
 812        "invite": "Convidar utilizador",
 813        "inviteHelp": "Envie um convite a um utilizador pelo nome. Poderá aceitar ou recusar.",
 814        "username": "Utilizador",
 815        "sendInvite": "Enviar convite",
 816        "projectsHeading": "Projetos da equipa",
 817        "selectProjects": "Selecionar projetos",
 818        "projectsHelp": "Os projetos atribuídos a esta equipa estarão acessíveis a todos os membros",
 819        "llms": "LLMs da equipa",
 820        "selectLlms": "Selecionar LLMs",
 821        "embeddings": "Modelos de embedding da equipa",
 822        "selectEmbeddings": "Selecionar embeddings",
 823        "imageGen": "Geradores de imagem",
 824        "selectImageGen": "Selecionar geradores de imagem",
 825        "noImageGen": "Não há geradores de imagem disponíveis. O GPU pode não estar ativado nesta instância.",
 826        "audioGen": "Geradores de áudio",
 827        "selectAudioGen": "Selecionar geradores de áudio",
 828        "noAudioGen": "Não há geradores de áudio disponíveis. O GPU pode não estar ativado nesta instância.",
 829        "branding": "Marca personalizada",
 830        "brandingHelp": "Personalize o aspeto da plataforma para os membros da equipa. Deixe os campos vazios para usar os valores por omissão.",
 831        "appName": "Nome da aplicação",
 832        "appNameHelp": "Substitui o nome da plataforma na barra lateral",
 833        "logoUrl": "URL do logótipo",
 834        "logoUrlHelp": "URL ou data:image/... para o logótipo da barra lateral",
 835        "primaryColor": "Cor primária",
 836        "primaryColorHelp": "Cor hexadecimal para o cabeçalho e elementos principais",
 837        "secondaryColor": "Cor secundária",
 838        "secondaryColorHelp": "Cor hexadecimal para acentos e elementos secundários",
 839        "welcomeMessage": "Mensagem de boas-vindas",
 840        "welcomeHelp": "Apresentada na página inicial para os membros da equipa",
 841        "preview": "Pré-visualização",
 842        "createTeam": "Criar equipa",
 843        "saveChanges": "Guardar alterações",
 844        "created": "Equipa criada com sucesso",
 845        "updated": "Equipa atualizada com sucesso"
 846      },
 847      "view": {
 848        "loading": "A carregar detalhes da equipa…",
 849        "notFoundTitle": "Não encontrado",
 850        "notFound": "Equipa não encontrada ou sem permissão para ver.",
 851        "noDescription": "Sem descrição",
 852        "spent": "Gasto (este mês):",
 853        "left": "restante",
 854        "unlimited": "Orçamento ilimitado",
 855        "edit": "Editar equipa",
 856        "tabs": {
 857          "transactions": "Transações"
 858        },
 859        "noMembers": "Sem membros",
 860        "noAdmins": "Sem administradores",
 861        "noProjects": "Sem projetos atribuídos a esta equipa",
 862        "noLlms": "Sem LLMs atribuídos a esta equipa",
 863        "noEmbeddings": "Sem modelos de embedding atribuídos a esta equipa",
 864        "noImageGen": "Sem geradores de imagem atribuídos a esta equipa",
 865        "noAudioGen": "Sem geradores de áudio atribuídos a esta equipa",
 866        "removeUser": "Remover utilizador",
 867        "removeAdmin": "Remover privilégios de administrador",
 868        "removeProject": "Remover projeto",
 869        "removeLlm": "Remover LLM",
 870        "removeEmbedding": "Remover embedding",
 871        "removeImageGen": "Remover gerador de imagem",
 872        "removeAudioGen": "Remover gerador de áudio",
 873        "you": "(Você)",
 874        "transactions": "Transações",
 875        "tx": {
 876          "date": "Data",
 877          "project": "Projeto",
 878          "user": "Utilizador",
 879          "llm": "LLM",
 880          "inTokens": "Tokens entrada",
 881          "outTokens": "Tokens saída",
 882          "cost": "Custo",
 883          "noTransactions": "Sem transações"
 884        },
 885        "confirmRemove": "Tem a certeza de que quer remover {{name}} desta equipa?",
 886        "confirmRemoveAdmin": "Tem a certeza de que quer remover privilégios de administrador de {{name}}?",
 887        "confirmRemoveProject": "Tem a certeza de que quer remover este projeto da equipa?",
 888        "removed": "{{name}} removido da equipa",
 889        "adminRemoved": "Privilégios de administrador removidos de {{name}}",
 890        "projectRemoved": "Projeto removido da equipa"
 891      },
 892      "title": "Equipas",
 893      "subtitle": "Grupos de utilizadores com acesso partilhado a LLMs, embeddings e projetos",
 894      "new": "Nova equipa",
 895      "emptyTitle": "Ainda não há equipas",
 896      "emptyMessage": "As equipas delimitam o acesso a LLMs, orçamentos e membros de projetos. Crie uma para começar a organizar utilizadores.",
 897      "role": {
 898        "label": "A sua função",
 899        "platformAdmin": "Administrador da plataforma",
 900        "teamAdmin": "Administrador da equipa",
 901        "member": "Membro"
 902      },
 903      "noTeams": "Ainda não há equipas."
 904    },
 905    "llms": {
 906      "title": "LLMs",
 907      "subtitle": "Fornecedores de modelos de linguagem disponíveis para as suas equipas",
 908      "new": "Adicionar LLM",
 909      "emptyTitle": "Nenhum LLM configurado",
 910      "emptyMessage": "Registe pelo menos um LLM (OpenAI, Anthropic, Ollama, etc.) antes que as suas equipas possam criar projetos de chat ou RAG.",
 911      "columns": {
 912        "name": "Nome",
 913        "class": "Classe",
 914        "context": "Contexto",
 915        "privacy": "Privacidade"
 916      },
 917      "tooltip": {
 918        "class": "Classe",
 919        "privacy": "Privacidade",
 920        "context": "Contexto",
 921        "cost": "Custo",
 922        "costIn": "entrada",
 923        "costOut": "saída",
 924        "tokens": "tokens"
 925      },
 926      "noLlms": "Nenhum LLM configurado.",
 927      "actions": {
 928        "view": "Ver",
 929        "edit": "Editar",
 930        "delete": "Eliminar"
 931      },
 932      "edit": {
 933        "title": "Editar LLM - {{name}}",
 934        "name": "Nome",
 935        "className": "Nome da classe",
 936        "options": "Opções",
 937        "listModels": "Listar modelos",
 938        "loading": "A carregar…",
 939        "modelsAvailable_one": "{{count}} modelo disponível — clique para selecionar",
 940        "modelsAvailable_other": "{{count}} modelos disponíveis — clique para selecionar",
 941        "modelsNone": "Sem modelos. Verifique o URL base da API e a chave nas opções abaixo.",
 942        "privacy": "Privacidade",
 943        "description": "Descrição",
 944        "inputCost": "Custo de entrada",
 945        "outputCost": "Custo de saída",
 946        "contextWindow": "Janela de contexto",
 947        "contextHelp": "Número máximo de tokens que o LLM consegue processar",
 948        "saveChanges": "Guardar alterações"
 949      },
 950      "info": {
 951        "class": "Classe",
 952        "privacy": "Privacidade",
 953        "options": "Opções",
 954        "description": "Descrição",
 955        "inputCost": "Custo de entrada (por milhão de tokens)",
 956        "outputCost": "Custo de saída (por milhão de tokens)",
 957        "contextWindow": "Janela de contexto",
 958        "tokens": "tokens",
 959        "confirmDelete": "Tem a certeza de que quer eliminar o LLM {{name}}?",
 960        "deleteConfirm": "Eliminar LLM \"{{name}}\"?",
 961        "deleted": "{{name}} eliminado"
 962      },
 963      "chooser": {
 964        "title": "Adicionar um novo LLM",
 965        "subtitle": "Ligue um modelo de linguagem à plataforma. Escolha o caminho mais rápido consoante o alojamento.",
 966        "fastest": "Mais rápido",
 967        "ollama": "Importar do Ollama",
 968        "ollamaDesc": "Ligue-se a uma instância local ou remota do Ollama e importe os modelos instalados num clique.",
 969        "manual": "Adicionar manualmente",
 970        "manualDesc": "Configure qualquer fornecedor suportado — OpenAI, Anthropic, Azure, Bedrock, Gemini, etc.",
 971        "featAutoCtx": "Deteta automaticamente a janela de contexto",
 972        "featVision": "Deteta capacidade de visão",
 973        "featZeroConfig": "Zero configuração manual",
 974        "featBulk": "Importação em massa suportada",
 975        "feat13": "Mais de 13 integrações de fornecedores",
 976        "featCompat": "Endpoints compatíveis com OpenAI",
 977        "featFineGrain": "Opções detalhadas por modelo",
 978        "featCredentials": "Controlo total sobre credenciais"
 979      },
 980      "interactive": {
 981        "title": "Escolha um fornecedor",
 982        "subtitle": "Escolha o fornecedor que aloja o seu modelo. Configuramos automaticamente os campos certos.",
 983        "searchPlaceholder": "Procurar fornecedores…",
 984        "noProviders": "Nenhum fornecedor corresponde à pesquisa.",
 985        "back": "Voltar aos fornecedores",
 986        "newX": "Novo LLM {{provider}}",
 987        "general": "Geral",
 988        "name": "Nome",
 989        "namePlaceholder": "Nome único para este LLM",
 990        "description": "Descrição",
 991        "descPlaceholder": "Descrição curta opcional",
 992        "contextWindow": "Janela de contexto",
 993        "maxTokens": "Tokens máximos",
 994        "providerOptions": "Opções de {{provider}}",
 995        "rawOptions": "Opções em bruto (JSON)",
 996        "rawHelp": "Atualizadas automaticamente a partir dos campos acima. Clique nos valores para editar, ou use +/- para adicionar/remover opções personalizadas.",
 997        "createLlm": "Criar LLM",
 998        "nameRequired": "O nome é obrigatório"
 999      },
1000      "newBreadcrumb": "Novo LLM",
1001      "manualCrumb": "Manual"
1002    },
1003    "embeddings": {
1004      "title": "Embeddings",
1005      "subtitle": "Modelos de embedding usados por projetos RAG",
1006      "new": "Adicionar Embedding",
1007      "emptyTitle": "Nenhum embedding configurado",
1008      "emptyMessage": "Registe um modelo de embedding para ativar projetos RAG. Variantes OpenAI, HuggingFace e Ollama funcionam.",
1009      "columns": {
1010        "name": "Nome",
1011        "class": "Classe",
1012        "privacy": "Privacidade",
1013        "dimensions": "Dimensões"
1014      },
1015      "tooltip": {
1016        "class": "Classe",
1017        "privacy": "Privacidade",
1018        "dimensions": "Dimensões"
1019      },
1020      "noEmbeddings": "Nenhum embedding configurado.",
1021      "actions": {
1022        "view": "Ver",
1023        "edit": "Editar",
1024        "delete": "Eliminar"
1025      },
1026      "edit": {
1027        "title": "Editar embedding - {{name}}",
1028        "name": "Nome",
1029        "className": "Nome da classe",
1030        "options": "Opções",
1031        "privacy": "Privacidade",
1032        "description": "Descrição",
1033        "dimension": "Dimensão",
1034        "saveChanges": "Guardar alterações"
1035      },
1036      "info": {
1037        "class": "Classe",
1038        "privacy": "Privacidade",
1039        "options": "Opções",
1040        "description": "Descrição",
1041        "dimension": "Dimensão",
1042        "confirmDelete": "Tem a certeza de que quer eliminar o embedding {{name}}?",
1043        "deleteConfirm": "Eliminar embedding \"{{name}}\"?",
1044        "deleted": "{{name}} eliminado"
1045      },
1046      "chooser": {
1047        "title": "Adicionar um novo embedding",
1048        "subtitle": "Ligue um modelo de embedding para alimentar a recuperação de conhecimento RAG. Escolha o caminho mais rápido consoante o alojamento.",
1049        "fastest": "Mais rápido",
1050        "ollama": "Importar do Ollama",
1051        "ollamaDesc": "Ligue-se a uma instância local ou remota do Ollama e importe os modelos de embedding instalados num clique.",
1052        "manual": "Adicionar manualmente",
1053        "manualDesc": "Configure qualquer fornecedor de embedding suportado (HuggingFace, OpenAI, LangChain, Ollama, etc.).",
1054        "featAutoDim": "Deteta automaticamente a dimensão do embedding",
1055        "featCapability": "Deteta a capacidade do modelo",
1056        "featZeroConfig": "Zero configuração manual",
1057        "featBulk": "Importação em massa suportada",
1058        "featMulti": "Várias integrações de fornecedores",
1059        "featHf": "HuggingFace, OpenAI, LangChain",
1060        "featFineGrain": "Opções detalhadas por modelo",
1061        "featCredentials": "Controlo total sobre credenciais"
1062      },
1063      "interactive": {
1064        "title": "Escolha um fornecedor",
1065        "subtitle": "Escolha o fornecedor que aloja o seu modelo de embedding. Configuramos automaticamente os campos certos.",
1066        "searchPlaceholder": "Procurar fornecedores…",
1067        "noProviders": "Nenhum fornecedor corresponde à pesquisa.",
1068        "back": "Voltar aos fornecedores",
1069        "newX": "Novo {{provider}}",
1070        "general": "Geral",
1071        "name": "Nome",
1072        "namePlaceholder": "Nome único para este embedding",
1073        "description": "Descrição",
1074        "descPlaceholder": "Descrição curta opcional",
1075        "dimension": "Dimensão",
1076        "vectorSize": "Tamanho do vetor",
1077        "providerOptions": "Opções de {{provider}}",
1078        "rawOptions": "Opções em bruto (JSON)",
1079        "rawHelp": "Atualizadas automaticamente a partir dos campos acima. Clique nos valores para editar, ou use +/- para adicionar/remover opções personalizadas.",
1080        "createEmbedding": "Criar embedding",
1081        "nameRequired": "O nome é obrigatório"
1082      },
1083      "newBreadcrumb": "Novo embedding",
1084      "manualCrumb": "Manual",
1085      "newCardTitle": "Adicionar um novo embedding",
1086      "submit": "Submeter"
1087    },
1088    "audit": {
1089      "title": "Registo de auditoria",
1090      "entries_one": "{{count}} entrada",
1091      "entries_other": "{{count}} entradas",
1092      "filterUser": "Utilizador",
1093      "filterAction": "Ação",
1094      "filterAll": "Todos",
1095      "exportCsv": "Exportar CSV",
1096      "noEntries": "Nenhuma entrada de auditoria encontrada",
1097      "page": "Página {{page}} de {{total}}",
1098      "columns": {
1099        "date": "Data",
1100        "user": "Utilizador",
1101        "action": "Ação",
1102        "resource": "Recurso",
1103        "status": "Estado"
1104      }
1105    },
1106    "proxy": {
1107      "title": "Proxy IA",
1108      "breadcrumb": "Proxy IA",
1109      "info": "Informação do proxy",
1110      "host": "Host do proxy",
1111      "availableModels": "Modelos disponíveis ({{count}})",
1112      "noModels": "Sem modelos disponíveis",
1113      "apiKeys": "Chaves de API",
1114      "keys_one": "{{count}} chave",
1115      "keys_other": "{{count}} chaves",
1116      "newKey": "Nova chave",
1117      "noKeys": "Ainda sem chaves — clique em \"Nova chave\" para criar uma",
1118      "columns": {
1119        "name": "Nome",
1120        "key": "Chave",
1121        "models": "Modelos",
1122        "spend": "Gasto",
1123        "budget": "Orçamento",
1124        "duration": "Duração",
1125        "rpm": "RPM",
1126        "tpm": "TPM",
1127        "actions": "Ações"
1128      },
1129      "deleteTip": "Eliminar",
1130      "cannotDeleteDefault": "Não é possível eliminar a chave por omissão",
1131      "deleteConfirm": "Eliminar a chave \"{{name}}\"?",
1132      "keyDeleted": "Chave eliminada",
1133      "usageExample": "Exemplo de utilização",
1134      "createTitle": "Criar nova chave de API",
1135      "copyReveal": "A sua nova chave foi criada. Copie-a agora — não será mostrada novamente.",
1136      "copyTip": "Copiar",
1137      "fieldName": "Nome",
1138      "fieldNameHelp": "Nome amigável para esta chave (ex. 'produção', 'equipa-dev')",
1139      "fieldModels": "Modelos",
1140      "fieldModelsHelp": "Modelos que esta chave pode invocar",
1141      "fieldMaxBudget": "Orçamento máximo (€)",
1142      "fieldMaxBudgetHelp": "Limite total de gasto",
1143      "fieldBudgetReset": "Reposição de orçamento",
1144      "fieldBudgetResetHelp": "Quando o orçamento é reposto",
1145      "fieldRpm": "Limite RPM",
1146      "fieldRpmHelp": "Pedidos por minuto",
1147      "fieldTpm": "Limite TPM",
1148      "fieldTpmHelp": "Tokens por minuto",
1149      "durations": {
1150        "none": "—",
1151        "hourly": "Horário",
1152        "daily": "Diário",
1153        "weekly": "Semanal",
1154        "monthly": "Mensal"
1155      },
1156      "nameRequired": "O nome é obrigatório",
1157      "modelRequired": "Selecione pelo menos um modelo",
1158      "created": "Chave criada com sucesso",
1159      "creating": "A criar…",
1160      "createKey": "Criar chave",
1161      "done": "Concluído"
1162    },
1163    "direct": {
1164      "title": "Acesso direto",
1165      "breadcrumb": "Acesso direto",
1166      "subtitle": "Aceda a LLMs, embeddings, geradores de imagem e transcrição de áudio diretamente via endpoints de API compatíveis com OpenAI. Use a sua chave de API para autenticação (Bearer token ou Basic auth).",
1167      "baseUrlLine": "URL base: <strong>{{url}}</strong> — faça a gestão das suas chaves API no perfil de utilizador.",
1168      "chat": "Chat Completions",
1169      "chatDesc": "Endpoint de chat completions compatível com OpenAI. Suporta respostas em streaming (stream: true) e não-streaming. Funciona com qualquer LLM ao qual a sua equipa tenha acesso.",
1170      "embeddings": "Embeddings",
1171      "embeddingsDesc": "Endpoint de embeddings compatível com OpenAI. Gera embeddings vetoriais para entradas de texto. Suporta entrada única ou em lote. Funciona com qualquer modelo de embedding ao qual a sua equipa tenha acesso.",
1172      "images": "Geração de imagem",
1173      "imagesDesc": "Endpoint de geração de imagem compatível com OpenAI. Suporta geradores locais baseados em GPU (ex. Stable Diffusion, Flux) e fornecedores externos (DALL-E, Imagen). Devolve imagens em base64 ou data URLs.",
1174      "audio": "Transcrição de áudio",
1175      "audioDesc": "Endpoint de transcrição de áudio compatível com OpenAI. Carregue um ficheiro de áudio (mp3, wav, etc.) e receba o texto transcrito. Ficheiros não-mp3 são convertidos automaticamente com ffmpeg. Suporta especificação de idioma para melhor precisão.",
1176      "availableModels": "Modelos disponíveis:",
1177      "availableGenerators": "Geradores disponíveis:",
1178      "noLlms": "Sem LLMs disponíveis. Peça ao administrador da equipa para conceder acesso a LLMs.",
1179      "noEmbeddings": "Sem modelos de embedding disponíveis. Peça ao administrador da equipa para conceder acesso a modelos de embedding.",
1180      "noImage": "Sem geradores de imagem disponíveis. Peça ao administrador da equipa para conceder acesso, ou o GPU pode não estar ativado nesta instância.",
1181      "noAudio": "Sem geradores de áudio disponíveis. Peça ao administrador da equipa para conceder acesso, ou o GPU pode não estar ativado nesta instância.",
1182      "pythonSdk": "Python (SDK openai):",
1183      "streamingExample": "Exemplo com streaming:",
1184      "batchExample": "Exemplo em lote:",
1185      "curl": "curl:",
1186      "embeddingChip": "{{name}} (dim: {{dim}})"
1187    },
1188    "classifier": {
1189      "title": "Classificador",
1190      "breadcrumb": "Classificador",
1191      "playgroundTitle": "Playground do classificador",
1192      "model": "Modelo",
1193      "modelHelp": "Modelo de classificação zero-shot",
1194      "textLabel": "Texto a classificar",
1195      "textPlaceholder": "Introduza o texto que pretende classificar…",
1196      "labels": "Rótulos",
1197      "labelsPlaceholder": "faturação, técnico, vendas, geral",
1198      "labelsHelp": "Lista de rótulos candidatos separados por vírgulas",
1199      "classify": "Classificar",
1200      "classifying": "A classificar…",
1201      "enterBoth": "Introduza texto e pelo menos um rótulo",
1202      "results": "Resultados",
1203      "input": "Entrada",
1204      "inputHint": "Introduza texto e rótulos, depois clique em Classificar",
1205      "modelLabel": "Modelo: {{model}}",
1206      "bestMatch": "Melhor correspondência: <strong>{{label}}</strong> ({{pct}}%)"
1207    },
1208    "permissions": {
1209      "title": "Permissões",
1210      "failed": "Falha ao carregar a matriz de permissões",
1211      "stats": {
1212        "users": "Utilizadores",
1213        "projects": "Projetos",
1214        "assignments": "Atribuições diretas",
1215        "admins": "Administradores"
1216      },
1217      "team": "Equipa",
1218      "allTeams": "Todas as equipas",
1219      "noTeam": "(Sem equipa)",
1220      "teamFallback": "Equipa #{{id}}",
1221      "searchPlaceholder": "Procurar utilizadores ou projetos…",
1222      "noMatches": "Sem correspondências",
1223      "header": "UTILIZADOR \\ PROJETO",
1224      "platformAdminTip": "Administrador da plataforma (acesso universal)",
1225      "restrictedTip": "Restrito (só leitura)",
1226      "legendDirect": "Acesso direto",
1227      "legendAdmin": "Admin (acesso universal)",
1228      "legendRestricted": "Utilizador restrito",
1229      "adminAccess": "{{user}} → {{project}} (admin)",
1230      "directAccess": "{{user}} → {{project}}"
1231    },
1232    "cron": {
1233      "title": "Registos de Cron",
1234      "runNow": "Executar agora",
1235      "running": "A executar…",
1236      "purge": "Limpar",
1237      "purgeConfirm": "Eliminar todas as entradas de registos de cron?",
1238      "filterJob": "Tarefa",
1239      "filterStatus": "Estado",
1240      "noEntries": "Nenhuma entrada de cron encontrada",
1241      "entries_one": "{{count}} entrada",
1242      "entries_other": "{{count}} entradas",
1243      "exportCsv": "Exportar CSV",
1244      "filterAll": "Todos",
1245      "filterSuccess": "Sucesso",
1246      "filterError": "Erro",
1247      "filterWarning": "Aviso",
1248      "details": "Detalhes",
1249      "noOutput": "Sem saída",
1250      "page": "Página {{page}} de {{total}}",
1251      "columns": {
1252        "date": "Data",
1253        "job": "Tarefa",
1254        "status": "Estado",
1255        "items": "Itens",
1256        "itemsLong": "Itens",
1257        "duration": "Duração",
1258        "durationMs": "Duração (ms)",
1259        "message": "Mensagem"
1260      }
1261    },
1262    "speechGen": {
1263      "title": "Speech-to-Text",
1264      "subtitle": "Workers locais Whisper / WhisperX + fornecedores externos de transcrição (OpenAI, Google, Deepgram, AssemblyAI)",
1265      "breadcrumb": "Speech-to-Text",
1266      "playground": "Playground",
1267      "new": "Novo modelo",
1268      "empty": "Nenhum modelo de speech-to-text configurado.",
1269      "columns": {
1270        "name": "Nome",
1271        "provider": "Fornecedor",
1272        "model": "Modelo",
1273        "privacy": "Privacidade",
1274        "enabled": "Ativado"
1275      },
1276      "actions": {
1277        "edit": "Editar",
1278        "delete": "Eliminar",
1279        "deleteLocal": "Modelos locais não podem ser eliminados"
1280      },
1281      "dialog": {
1282        "newTitle": "Novo modelo Speech-to-Text",
1283        "editTitle": "Editar {{name}}",
1284        "localInfo": "Modelo local de restai/audio/workers/{{name}}.py. Pode ativar/desativar, definir privacidade + descrição, e atribuir a equipas. Fornecedor + opções vêm do módulo do worker.",
1285        "name": "Nome",
1286        "nameHelp": "Identificador URL-safe — letras, números, pontos, hífenes, sublinhados",
1287        "provider": "Fornecedor",
1288        "privacy": "Privacidade",
1289        "privacyPublic": "Público (na nuvem)",
1290        "privacyPrivate": "Privado (auto-alojado / local)",
1291        "description": "Descrição",
1292        "enabled": "Ativado",
1293        "providerOptions": "Opções do fornecedor",
1294        "model": "Modelo",
1295        "modelOptional": "Modelo (opcional)",
1296        "apiKey": "Chave API",
1297        "apiKeyHelp": "Deixe ******** para manter a chave existente",
1298        "baseUrl": "URL base (opcional, para fornecedores compatíveis com OpenAI)",
1299        "baseUrlHelp": "Deixe vazio para OpenAI. Defina para Groq / Together / vLLM / auto-alojado.",
1300        "languageCode": "Código de idioma (padrão)",
1301        "defaultLanguage": "Idioma padrão",
1302        "speechModel": "Modelo de fala",
1303        "speechBest": "best (maior precisão)",
1304        "speechNano": "nano (mais rápido)",
1305        "saving": "A guardar…",
1306        "save": "Guardar",
1307        "create": "Criar",
1308        "saved": "{{name}} guardado",
1309        "created": "{{name}} criado",
1310        "deleteConfirm": "Eliminar modelo speech-to-text \"{{name}}\"?",
1311        "deleted": "{{name}} eliminado",
1312        "localCannotDelete": "Modelos locais não podem ser eliminados. Desative em vez disso.",
1313        "enabledToast": "{{name}} ativado",
1314        "disabledToast": "{{name}} desativado"
1315      }
1316    },
1317    "tools": {
1318      "title": "Ferramentas do agente",
1319      "subtitle": "Ferramentas integradas disponíveis para os projetos de agente usarem durante conversas.",
1320      "breadcrumb": "Ferramentas",
1321      "toolCount": "{{count}} ferramentas",
1322      "info": "Este é o catálogo global de ferramentas integradas incluídas no RESTai. Cada projeto de agente pode estender esta lista com as suas próprias ferramentas — seja ligando-se a servidores MCP (configurados na página de edição do projeto) ou definindo ferramentas criadas por agentes em tempo real através do builtin create_tool. Ferramentas específicas do projeto aparecem apenas no chat desse projeto, não aqui.",
1323      "searchPlaceholder": "Procurar ferramentas…",
1324      "noMatch": "Nenhuma ferramenta corresponde à pesquisa.",
1325      "noTools": "Sem ferramentas disponíveis.",
1326      "requiresDocker": "Requer Docker",
1327      "categories": {
1328        "browser": {
1329          "title": "AUTOMAÇÃO DE NAVEGADOR",
1330          "subtitle": "Controla um contentor Chromium + Playwright por chat. O administrador tem de ativar o Navegador Agente nas Definições."
1331        },
1332        "routines": {
1333          "title": "ROTINAS AGENDADAS",
1334          "subtitle": "Permite ao agente criar, listar e remover mensagens agendadas no próprio projeto."
1335        },
1336        "agentControl": {
1337          "title": "CONTROLO DO AGENTE",
1338          "subtitle": "Terminal isolado e criação de ferramentas em runtime. Ambos requerem Docker."
1339        },
1340        "communication": {
1341          "title": "COMUNICAÇÃO",
1342          "subtitle": "Envio de mensagens: email (SMTP), SMS (Twilio), Telegram, WhatsApp Cloud API."
1343        },
1344        "web": {
1345          "title": "WEB E PESQUISA",
1346          "subtitle": "Obter URLs, pesquisar na web e consultar informação de domínios ou tópicos."
1347        },
1348        "data": {
1349          "title": "DADOS E FICHEIROS",
1350          "subtitle": "Processar documentos carregados e gerar imagens a partir de prompts."
1351        },
1352        "utility": {
1353          "title": "UTILITÁRIOS",
1354          "subtitle": "Auxiliares genéricos: matemática, hora, moderação, aleatoriedade, geolocalização."
1355        }
1356      },
1357      "reqs": {
1358        "requiresDocker": "Requer Docker",
1359        "usesDocker": "Usa Docker",
1360        "usesBrowser": "Requer contentor de navegador",
1361        "adminOptIn": "Opt-in de admin",
1362        "needsSmtp": "Config. SMTP",
1363        "needsTwilio": "Config. Twilio",
1364        "needsTelegram": "Bot Telegram",
1365        "needsWhatsApp": "Config. WhatsApp",
1366        "perProject": "Por projeto"
1367      }
1368    },
1369    "imageGen": {
1370      "title": "Geradores de imagem",
1371      "subtitle": "Workers locais + fornecedores externos (OpenAI, Google) — os administradores gerem credenciais por linha",
1372      "breadcrumb": "Geradores de imagem",
1373      "playground": "Playground",
1374      "new": "Novo gerador",
1375      "empty": "Nenhum gerador de imagem configurado.",
1376      "columns": {
1377        "name": "Nome",
1378        "provider": "Fornecedor",
1379        "model": "Modelo",
1380        "privacy": "Privacidade",
1381        "enabled": "Ativado"
1382      },
1383      "actions": {
1384        "edit": "Editar",
1385        "delete": "Eliminar",
1386        "deleteLocal": "Geradores locais não podem ser eliminados"
1387      },
1388      "dialog": {
1389        "newTitle": "Novo gerador de imagem",
1390        "editTitle": "Editar {{name}}",
1391        "localInfo": "Gerador local de restai/image/workers/{{name}}.py. Pode ativar/desativar, definir privacidade + descrição, e atribuir a equipas. Fornecedor + opções vêm do módulo do worker.",
1392        "name": "Nome",
1393        "nameHelp": "Identificador URL-safe — letras, números, pontos, hífenes, sublinhados",
1394        "provider": "Fornecedor",
1395        "privacy": "Privacidade",
1396        "privacyPublic": "Público (na nuvem)",
1397        "privacyPrivate": "Privado (auto-alojado / local)",
1398        "description": "Descrição",
1399        "enabled": "Ativado",
1400        "providerOptions": "Opções do fornecedor",
1401        "model": "Modelo",
1402        "apiKey": "Chave API",
1403        "apiKeyHelp": "Deixe ******** para manter a chave existente",
1404        "baseUrl": "URL base (opcional, para fornecedores compatíveis com OpenAI)",
1405        "baseUrlHelp": "Deixe vazio para OpenAI. Defina para Together / Groq / vLLM / auto-alojado.",
1406        "saving": "A guardar…",
1407        "save": "Guardar",
1408        "create": "Criar",
1409        "saved": "{{name}} guardado",
1410        "created": "{{name}} criado",
1411        "deleteConfirm": "Eliminar gerador de imagem \"{{name}}\"?",
1412        "deleted": "{{name}} eliminado",
1413        "localCannotDelete": "Geradores locais não podem ser eliminados. Desative em vez disso.",
1414        "enabledToast": "{{name}} ativado",
1415        "disabledToast": "{{name}} desativado"
1416      }
1417    },
1418    "invitations": {
1419      "sent": "Convite enviado",
1420      "title": "Convites",
1421      "subtitle": "Convites pendentes para equipas e projetos",
1422      "noInvitations": "Sem convites pendentes",
1423      "teamSection": "Convites para equipas",
1424      "projectSection": "Convites para projetos",
1425      "invitedBy": "Convidado por {{username}}",
1426      "accept": "Aceitar",
1427      "decline": "Recusar",
1428      "accepted": "Entrou em {{name}}",
1429      "declined": "Recusado {{name}}",
1430      "failed": "Não foi possível {{action}} o convite para {{name}}"
1431    },
1432    "settings": {
1433      "title": "Definições",
1434      "subtitle": "Configuração da plataforma",
1435      "tabs": {
1436        "general": "Geral",
1437        "authentication": "Autenticação"
1438      },
1439      "save": "Guardar",
1440      "saved": "Definições guardadas",
1441      "fields": {
1442        "appName": "Nome da aplicação",
1443        "hideBranding": "Ocultar marca",
1444        "currency": "Moeda",
1445        "systemLlm": "LLM de sistema",
1446        "systemLlmHelp": "Modelo base para os assistentes de IA da plataforma (Pesquisa Inteligente, Gerador de Prompt, Gerador Blockly). Deixar vazio para desativar estas funcionalidades.",
1447        "enableProxy": "Ativar proxy",
1448        "proxyUrl": "URL do proxy",
1449        "proxyKey": "Chave do proxy",
1450        "proxyTeamId": "ID de equipa do proxy",
1451        "maxAudioUploadSize": "Tamanho máximo de áudio (MB)",
1452        "dataRetentionDays": "Retenção de dados (dias)",
1453        "redisHost": "Servidor Redis",
1454        "redisHostPlaceholder": "Deixar vazio para memória interna",
1455        "redisPort": "Porta",
1456        "redisPassword": "Palavra-passe",
1457        "redisDatabase": "Base de dados",
1458        "enableMcp": "Ativar servidor MCP",
1459        "enableDocker": "Ativar terminal Docker",
1460        "dockerUrl": "URL do Docker",
1461        "dockerUrlPlaceholder": "unix:///var/run/docker.sock ou tcp://host:2375",
1462        "containerImage": "Imagem do contentor",
1463        "idleTimeout": "Tempo limite de inatividade (segundos)",
1464        "networkMode": "Modo de rede",
1465        "readOnlyRootfs": "Sistema de ficheiros só de leitura",
1466        "testDocker": "Testar ligação",
1467        "enableBrowser": "Ativar navegador de agente por conversa",
1468        "browserImage": "Imagem do contentor",
1469        "browserNetwork": "Modo de rede",
1470        "browserTimeout": "Tempo limite de inatividade (segundos)",
1471        "disableLocalAuth": "Desativar autenticação local",
1472        "enforce2fa": "Impor 2FA",
1473        "autoCreateUsers": "Criar utilizadores automaticamente",
1474        "allowedDomains": "Domínios permitidos",
1475        "restrictNewUsers": "Restringir novos utilizadores",
1476        "defaultTeam": "Equipa predefinida",
1477        "passwordMaxAgeDays": "Validade máxima da palavra-passe (dias)",
1478        "clientId": "ID de cliente",
1479        "clientSecret": "Segredo do cliente",
1480        "redirectUri": "URI de redirecionamento",
1481        "scope": "Âmbito",
1482        "scopes": "Âmbitos",
1483        "tenantId": "ID do tenant",
1484        "providerUrl": "URL do fornecedor",
1485        "providerName": "Nome do fornecedor",
1486        "emailClaim": "Claim de email"
1487      },
1488      "helpers": {
1489        "systemLlm": "LLM utilizado pela plataforma para tarefas internas (ajudas de prompt, resumos, etc.). Deixe vazio para desativar.",
1490        "retention": "Elimina logs mais antigos que este valor. 0 = manter para sempre.",
1491        "containerImage": "Imagem base para contentores sandbox",
1492        "dockerTimeout": "Remover contentores após este número de segundos de inatividade",
1493        "browserImage": "Imagem Playwright. Precisa de Chromium + playwright.sync_api pré-instalados.",
1494        "browserTimeout": "Contentores sem utilização são removidos após este tempo.",
1495        "allowedDomains": "Domínios de email separados por vírgula, ou * para todos",
1496        "oidcProviderUrl": "URL de descoberta OpenID Connect",
1497        "oidcProviderName": "Nome a mostrar no botão de início de sessão",
1498        "autoTeam": "Os utilizadores SSO criados automaticamente serão adicionados a esta equipa",
1499        "telemetryStatus": "Estado: {{status}}",
1500        "saveSettings": "Guardar definições",
1501        "saving": "A guardar…"
1502      },
1503      "status": {
1504        "enabled": "Ativado",
1505        "disabled": "Desativado"
1506      },
1507      "telemetry": {
1508        "description": "O RESTai envia estatísticas de utilização agregadas e anónimas para ajudar o projeto open-source a compreender a adoção e priorizar o desenvolvimento. Nenhum dado pessoal, prompts, respostas ou chaves de API é enviado — apenas contagens (projetos, utilizadores, LLMs) e sinalizadores de funcionalidades.",
1509        "optOut": "Para optar por não participar, defina a variável de ambiente ANONYMIZED_TELEMETRY=false e reinicie o servidor."
1510      },
1511      "sections": {
1512        "general": "Geral",
1513        "platform": "Plataforma",
1514        "branding": "Marca",
1515        "proxy": "Proxy LLM",
1516        "limits": "Limites",
1517        "redis": "Redis",
1518        "docker": "Sandbox Docker",
1519        "browser": "Navegador de agente",
1520        "mcp": "Servidor MCP",
1521        "systemLlm": "LLM de sistema",
1522        "authentication": "Autenticação",
1523        "localAuth": "Autenticação local",
1524        "sso": "Início de sessão único",
1525        "google": "Google",
1526        "microsoft": "Microsoft",
1527        "github": "GitHub",
1528        "oidc": "OIDC genérico",
1529        "retention": "Retenção de dados",
1530        "twoFactor": "Autenticação em dois passos",
1531        "passwordPolicy": "Política de palavras-passe",
1532        "telemetry": "Telemetria"
1533      }
1534    },
1535    "widgets": {
1536      "notifications": "Notificações"
1537    },
1538    "tabnav": {
1539      "menu": "Menu"
1540    },
1541    "dataList": {
1542      "search": "Pesquisar...",
1543      "noResults": "Nenhum item encontrado",
1544      "noMatches": "Sem resultados para \"{{query}}\"",
1545      "clearSearch": "Limpar pesquisa",
1546      "selected": "{{count}} selecionados",
1547      "clear": "Limpar"
1548    }
1549  }