import type { Translations } from "./types";

export const pt: Translations = {
  common: {
    save: "Guardar",
    saving: "A guardar...",
    cancel: "Cancelar",
    close: "Fechar",
    confirm: "Confirmar",
    delete: "Eliminar",
    refresh: "Atualizar",
    retry: "Tentar novamente",
    search: "Pesquisar...",
    loading: "A carregar...",
    create: "Criar",
    creating: "A criar...",
    set: "Definir",
    replace: "Substituir",
    clear: "Limpar",
    live: "Ativo",
    off: "Desligado",
    enabled: "ativado",
    disabled: "desativado",
    active: "ativo",
    inactive: "inativo",
    unknown: "desconhecido",
    untitled: "Sem título",
    none: "Nenhum",
    form: "Formulário",
    noResults: "Sem resultados",
    of: "de",
    page: "Página",
    msgs: "msgs",
    tools: "ferramentas",
    match: "correspondência",
    other: "Outro",
    configured: "configurado",
    removed: "removido",
    failedToToggle: "Falha ao alternar",
    failedToRemove: "Falha ao remover",
    failedToReveal: "Falha ao revelar",
    collapse: "Recolher",
    expand: "Expandir",
    general: "Geral",
    messaging: "Mensagens",
    pluginLoadFailed:
      "Não foi possível carregar o script deste plugin. Verifique o separador Network (dashboard-plugins/…) e o caminho do plugin no servidor.",
    pluginNotRegistered:
      "O script do plugin não chamou register(), ou o script falhou. Abra a consola do browser para mais detalhes.",
  },

  app: {
    brand: "Hermes Agent",
    brandShort: "HA",
    closeNavigation: "Fechar navegação",
    closeModelTools: "Fechar modelo e ferramentas",
    footer: {
      org: "Nous Research",
    },
    activeSessionsLabel: "Sessões ativas:",
    gatewayStatusLabel: "Estado do gateway:",
    gatewayStrip: {
      failed: "Falha ao iniciar",
      off: "Desligado",
      running: "A executar",
      starting: "A iniciar",
      stopped: "Parado",
    },
    nav: {
      analytics: "Análise",
      chat: "Chat",
      config: "Configuração",
      cron: "Cron",
      documentation: "Documentação",
      keys: "Chaves",
      logs: "Registos",
      models: "Modelos",
      profiles: "perfis: multiagentes",
      plugins: "Plugins",
      sessions: "Sessões",
      skills: "Competências",
    },
    modelToolsSheetSubtitle: "e ferramentas",
    modelToolsSheetTitle: "Modelo",
    navigation: "Navegação",
    openDocumentation: "Abrir documentação num novo separador",
    openNavigation: "Abrir navegação",
    pluginNavSection: "Plugins",
    sessionsActiveCount: "{count} ativa(s)",
    statusOverview: "Visão geral do estado",
    system: "Sistema",
    webUi: "Web UI",
  },

  status: {
    actionFailed: "Ação falhou",
    actionFinished: "Concluído",
    actions: "Ações",
    agent: "Agente",
    activeSessions: "Sessões ativas",
    connected: "Ligado",
    connectedPlatforms: "Plataformas ligadas",
    disconnected: "Desligado",
    error: "Erro",
    failed: "Falhou",
    gateway: "Gateway",
    gatewayFailedToStart: "O gateway falhou ao iniciar",
    lastUpdate: "Última atualização",
    noneRunning: "Nenhum",
    notRunning: "Não está a executar",
    pid: "PID",
    platformDisconnected: "desligado",
    platformError: "erro",
    recentSessions: "Sessões recentes",
    restartGateway: "Reiniciar gateway",
    restartingGateway: "A reiniciar gateway…",
    running: "A executar",
    runningRemote: "A executar (remoto)",
    startFailed: "Falha ao iniciar",
    starting: "A iniciar",
    startedInBackground: "Iniciado em segundo plano — verifique os registos para acompanhar",
    stopped: "Parado",
    updateHermes: "Atualizar Hermes",
    updatingHermes: "A atualizar Hermes…",
    waitingForOutput: "À espera de saída…",
  },

  sessions: {
    title: "Sessões",
    history: "Histórico",
    overview: "Visão geral",
    searchPlaceholder: "Pesquisar conteúdo das mensagens...",
    noSessions: "Ainda não há sessões",
    noMatch: "Nenhuma sessão corresponde à pesquisa",
    startConversation: "Inicie uma conversa para a ver aqui",
    noMessages: "Sem mensagens",
    untitledSession: "Sessão sem título",
    deleteSession: "Eliminar sessão",
    confirmDeleteTitle: "Eliminar sessão?",
    confirmDeleteMessage:
      "Esta ação remove permanentemente a conversa e todas as suas mensagens. Não é possível anular.",
    sessionDeleted: "Sessão eliminada",
    failedToDelete: "Falha ao eliminar a sessão",
    deleteEmpty: "Eliminar vazias",
    deleteEmptyConfirmTitle: "Eliminar sessões vazias?",
    deleteEmptyConfirmMessage:
      "Isto remove permanentemente {count} sessões sem mensagens. As sessões ativas e arquivadas são ignoradas. Esta ação não pode ser desfeita.",
    emptySessionsDeleted: "{count} sessões vazias eliminadas",
    failedToDeleteEmpty: "Falha ao eliminar sessões vazias",
    selectSession: "Selecionar sessão",
    selectAllOnPage: "Selecionar todas nesta página",
    clearSelection: "Limpar seleção",
    selectedCount: "{count} selecionadas",
    deleteSelected: "Eliminar {count}",
    deleteSelectedConfirmTitle: "Eliminar {count} sessões?",
    deleteSelectedConfirmMessage:
      "Isto remove permanentemente {count} sessões selecionadas e todas as suas mensagens. Não pode ser desfeito.",
    selectedSessionsDeleted: "{count} sessões eliminadas",
    failedToDeleteSelected: "Falha ao eliminar as sessões selecionadas",
    resumeInChat: "Retomar no Chat",
    newChat: "Novo chat",
    previousPage: "Página anterior",
    nextPage: "Página seguinte",
    roles: {
      user: "Utilizador",
      assistant: "Assistente",
      system: "Sistema",
      tool: "Ferramenta",
    },
  },

  analytics: {
    period: "Período:",
    totalTokens: "Tokens totais",
    totalSessions: "Sessões totais",
    apiCalls: "Chamadas à API",
    dailyTokenUsage: "Utilização diária de tokens",
    dailyBreakdown: "Detalhe diário",
    perModelBreakdown: "Detalhe por modelo",
    topSkills: "Competências principais",
    skill: "Competência",
    loads: "Carregadas pelo agente",
    edits: "Geridas pelo agente",
    lastUsed: "Última utilização",
    input: "Entrada",
    output: "Saída",
    total: "Total",
    noUsageData: "Sem dados de utilização para este período",
    startSession: "Inicie uma sessão para ver as análises aqui",
    date: "Data",
    model: "Modelo",
    tokens: "Tokens",
    perDayAvg: "/dia (média)",
    acrossModels: "em {count} modelos",
    inOut: "{input} entrada / {output} saída",
  },

  models: {
    modelsUsed: "Modelos utilizados",
    estimatedCost: "Custo est.",
    tokens: "tokens",
    sessions: "sessões",
    avgPerSession: "média/sessão",
    apiCalls: "chamadas à API",
    toolCalls: "chamadas a ferramentas",
    noModelsData: "Sem dados de utilização de modelos para este período",
    startSession: "Inicie uma sessão para ver os dados de modelos aqui",
  },

  logs: {
    title: "Registos",
    autoRefresh: "Atualização automática",
    file: "Ficheiro",
    level: "Nível",
    component: "Componente",
    lines: "Linhas",
    noLogLines: "Não foram encontradas linhas de registo",
  },

  cron: {
    confirmDeleteMessage:
      "Esta ação remove a tarefa do agendamento. Não é possível anular.",
    confirmDeleteTitle: "Eliminar tarefa agendada?",
    newJob: "Nova tarefa cron",
    nameOptional: "Nome (opcional)",
    namePlaceholder: "ex: Resumo diário",
    prompt: "Prompt",
    promptPlaceholder: "O que deve o agente fazer em cada execução?",
    schedule: "Agendamento (expressão cron)",
    schedulePlaceholder: "0 9 * * *",
    scheduleMode: "Agendamento",
    scheduleModes: {
      interval: "Intervalo recorrente",
      daily: "Diariamente",
      weekly: "Semanalmente",
      monthly: "Mensalmente",
      once: "Uma vez",
      custom: "Personalizado (expressão cron)",
      intervalEvery: "A cada",
      intervalUnit: "Unidade",
      unitMinutes: "minutos",
      unitHours: "horas",
      unitDays: "dias",
      timeOfDay: "Hora do dia",
      weekdays: "Dias da semana",
      weekdaysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
      dayOfMonth: "Dia do mês",
      onceAt: "Executar em",
      customLabel: "Expressão cron",
      customPlaceholder: "0 9 * * *",
      customHint:
        "Expressão cron de cinco campos (minuto, hora, dia, mês, dia da semana).",
      preview: "Enviado como",
      previewEmpty: "(incompleta)",
    },
    scheduleDescribe: {
      none: "—",
      everyMinutes: "A cada {n} min",
      everyHours: "A cada {n} h",
      everyDays: "A cada {n} d",
      dailyAt: "Diariamente às {time}",
      weeklyAt: "Semanalmente {days} às {time}",
      monthlyAt: "Mensalmente no dia {day} às {time}",
      onceAt: "Uma vez em {time}",
    },
    deliverTo: "Entregar a",
    scheduledJobs: "Tarefas agendadas",
    noJobs: "Sem tarefas cron configuradas. Crie uma acima.",
    last: "Última",
    next: "Próxima",
    pause: "Pausar",
    resume: "Retomar",
    triggerNow: "Acionar agora",
    delivery: {
      local: "Local",
      telegram: "Telegram",
      discord: "Discord",
      slack: "Slack",
      email: "Email",
    },
  },

  profiles: {
    newProfile: "Novo perfil",
    name: "Nome",
    namePlaceholder: "ex: coder, writer, etc.",
    nameRequired: "O nome é obrigatório",
    nameRule:
      "Apenas letras minúsculas, dígitos, _ e -; deve começar com letra ou dígito; até 64 caracteres.",
    invalidName: "Nome de perfil inválido",
    cloneFrom: "Clonar a partir do perfil",
    cloneFromNone: "Nenhum (vazio)",
    allProfiles: "Perfis",
    noProfiles: "Não foram encontrados perfis.",
    defaultBadge: "predefinido",
    hasEnv: "env",
    model: "Modelo",
    skills: "Competências",
    rename: "Renomear",
    editSoul: "Editar SOUL.md",
    soulSection: "SOUL.md (personalidade / prompt do sistema)",
    soulPlaceholder: "# Como este agente se deve comportar…",
    saveSoul: "Guardar SOUL",
    soulSaved: "SOUL.md guardado",
    openInTerminal: "Copiar comando da CLI",
    commandCopied: "Copiado para a área de transferência",
    copyFailed: "Não foi possível copiar",
    confirmDeleteTitle: "Eliminar perfil?",
    confirmDeleteMessage:
      "Esta ação elimina permanentemente o perfil '{name}' — configuração, chaves, memórias, sessões, competências, tarefas cron. Não é possível anular.",
    created: "Criado",
    deleted: "Eliminado",
    renamed: "Renomeado",
  },

  pluginsPage: {
    contextEngineLabel: "Motor de contexto",
    dashboardSlots: "Slots do dashboard",
    disableRuntime: "Desativar",
    enableAfterInstall: "Ativar após instalação",
    enableRuntime: "Ativar",
    forceReinstall: "Forçar reinstalação (eliminar pasta existente primeiro)",
    headline:
      "Descobrir, instalar, ativar e atualizar plugins Hermes (paridade com `hermes plugins`).",
    identifierLabel: "URL Git ou owner/repo",
    inactive: "inativo",
    installBtn: "Instalar",
    installHeading: "Instalar a partir de GitHub / URL Git",
    installHint: "Use a forma curta owner/repo ou um URL completo de clone https:// ou git@.",
    memoryProviderLabel: "Fornecedor de memória",
    missingEnvWarn: "Defina os seguintes em Chaves antes de o plugin poder executar:",
    noDashboardTab: "Sem separador no dashboard",
    openTab: "Abrir",
    orphanHeading: "Extensões só de dashboard (sem plugin.yaml de agente correspondente)",
    pluginListHeading: "Plugins instalados",
    providerDefaults: "incorporado / predefinido",
    providersHeading: "Plugins de fornecedor em runtime",
    providersHint:
      "Escreve memory.provider (vazio = incorporado) e context.engine no config.yaml. Aplicado na próxima sessão.",
    refreshDashboard: "Re-analisar extensões do dashboard",
    removeConfirm: "Remover este plugin de ~/.hermes/plugins/?",
    removeHint: "Apenas plugins instalados pelo utilizador em ~/.hermes/plugins podem ser removidos.",
    rescanHeading: "Registo de plugins SPA",
    rescanHint: "Re-analise depois de adicionar ficheiros em disco para que a barra lateral detete novos manifestos.",
    runtimeHeading: "Runtime do gateway (plugins YAML)",
    saveProviders: "Guardar definições do fornecedor",
    savedProviders: "Definições do fornecedor guardadas.",
    sourceBadge: "Fonte",
    authRequired: "Autenticação necessária",
    authRequiredHint: "Execute este comando para autenticar:",
    updateGit: "Git pull",
    versionBadge: "Versão",
    showInSidebar: "Mostrar na barra lateral",
    hideFromSidebar: "Ocultar da barra lateral",
  },

  skills: {
    title: "Competências",
    searchPlaceholder: "Pesquisar competências e conjuntos de ferramentas...",
    enabledOf: "{enabled}/{total} ativadas",
    all: "Todas",
    categories: "Categorias",
    filters: "Filtros",
    noSkills: "Nenhuma competência encontrada. As competências são carregadas de ~/.hermes/skills/",
    noSkillsMatch: "Nenhuma competência corresponde à pesquisa ou filtro.",
    skillCount: "{count} competência{s}",
    resultCount: "{count} resultado{s}",
    noDescription: "Sem descrição disponível.",
    toolsets: "Conjuntos de ferramentas",
    toolsetLabel: "conjunto {name}",
    noToolsetsMatch: "Nenhum conjunto de ferramentas corresponde à pesquisa.",
    setupNeeded: "Configuração necessária",
    disabledForCli: "Desativado para CLI",
    more: "+{count} mais",
  },

  config: {
    configPath: "~/.hermes/config.yaml",
    filters: "Filtros",
    sections: "Secções",
    exportConfig: "Exportar configuração como JSON",
    importConfig: "Importar configuração de JSON",
    resetDefaults: "Repor predefinições",
    resetScopeTooltip: "Repor {scope} para predefinições",
    confirmResetScope: "Repor todas as definições de {scope} para os valores predefinidos? Isto apenas atualiza o formulário — as alterações só são escritas em config.yaml quando premir Guardar.",
    resetScopeToast: "{scope} reposto para predefinições — reveja e Guarde para persistir",
    rawYaml: "Configuração YAML em bruto",
    searchResults: "Resultados da pesquisa",
    fields: "campo{s}",
    noFieldsMatch: 'Nenhum campo corresponde a "{query}"',
    configSaved: "Configuração guardada",
    yamlConfigSaved: "Configuração YAML guardada",
    failedToSave: "Falha ao guardar",
    failedToSaveYaml: "Falha ao guardar YAML",
    failedToLoadRaw: "Falha ao carregar configuração em bruto",
    configImported: "Configuração importada — reveja e guarde",
    invalidJson: "Ficheiro JSON inválido",
    categories: {
      general: "Geral",
      agent: "Agente",
      terminal: "Terminal",
      display: "Visualização",
      delegation: "Delegação",
      memory: "Memória",
      compression: "Compressão",
      security: "Segurança",
      browser: "Browser",
      voice: "Voz",
      tts: "Texto para fala",
      stt: "Fala para texto",
      logging: "Registo",
      discord: "Discord",
      auxiliary: "Auxiliar",
    },
  },

  env: {
    changesNote: "As alterações são guardadas em disco imediatamente. As sessões ativas detetam novas chaves automaticamente.",
    confirmClearMessage:
      "O valor armazenado para esta variável será removido do seu ficheiro .env. Esta ação não pode ser anulada a partir da UI.",
    confirmClearTitle: "Limpar esta chave?",
    description: "Gerir chaves de API e segredos armazenados em",
    hideAdvanced: "Ocultar avançadas",
    showAdvanced: "Mostrar avançadas",
    showLess: "Mostrar menos",
    showMore: "Mostrar mais",
    llmProviders: "Fornecedores LLM",
    providersConfigured: "{configured} de {total} fornecedores configurados",
    getKey: "Obter chave",
    notConfigured: "{count} não configurado(s)",
    notSet: "Não definido",
    keysCount: "{count} chave{s}",
    enterValue: "Introduzir valor...",
    replaceCurrentValue: "Substituir valor atual ({preview})",
    showValue: "Mostrar valor real",
    hideValue: "Ocultar valor",
    customTitle: "Chaves personalizadas",
    customHint: "Variáveis de ambiente arbitrárias armazenadas no seu .env que o Hermes não reconhece. Use-as para injetar variáveis de ambiente para skills, servidores MCP ou suas próprias ferramentas.",
    customConfigured: "{count} chave(s) personalizada(s) definida(s)",
    addCustomKey: "Adicionar uma chave personalizada",
    customKeyName: "Nome da variável",
    customKeyNamePlaceholder: "ex. MY_SERVICE_API_KEY",
    add: "Adicionar",
    invalidKeyName: "Use apenas letras, números e sublinhados (deve começar com uma letra ou sublinhado).",
  },

  oauth: {
    title: "Inícios de sessão de fornecedor (OAuth)",
    providerLogins: "Inícios de sessão de fornecedor (OAuth)",
    description:
      "{connected} de {total} fornecedores OAuth ligados. Use Iniciar sessão para fluxos suportados pelo painel; os comandos CLI continuam disponíveis para configuração externa ou de recurso.",
    connected: "Ligado",
    expired: "Expirado",
    notConnected: "Não ligado. Use Iniciar sessão quando disponível, ou execute {command} num terminal.",
    runInTerminal: "num terminal.",
    noProviders: "Não foram detetados fornecedores compatíveis com OAuth.",
    login: "Iniciar sessão",
    disconnect: "Desligar",
    managedExternally: "Gerido externamente",
    copied: "Copiado ✓",
    copyCode: "Copiar código",
    copyFailed: "Não foi possível copiar automaticamente. Selecione o código e copie-o manualmente.",
    cli: "Copiar",
    copyCliCommand: "Copiar comando CLI (para externo / fallback)",
    connect: "Ligar",
    sessionExpires: "A sessão expira em {time}",
    initiatingLogin: "A iniciar fluxo de início de sessão…",
    exchangingCode: "A trocar código por tokens…",
    connectedClosing: "Ligado! A fechar…",
    loginFailed: "Início de sessão falhou.",
    sessionExpired: "Sessão expirada. Clique em Tentar novamente para iniciar um novo início de sessão.",
    reOpenAuth: "Reabrir página de autenticação",
    reOpenVerification: "Reabrir página de verificação",
    submitCode: "Submeter código",
    pasteCode: "Cole o código de autorização (com sufixo #state também é válido)",
    waitingAuth: "À espera que autorize no browser…",
    enterCodePrompt: "Foi aberto um novo separador. Introduza este código se for solicitado:",
    pkceStep1: "Foi aberto um novo separador para claude.ai. Inicie sessão e clique em Authorize.",
    pkceStep2: "Copie o código de autorização mostrado após autorizar.",
    pkceStep3: "Cole-o abaixo e submeta.",
    flowLabels: {
      pkce: "Início de sessão pelo browser (PKCE)",
      device_code: "Código de dispositivo",
      external: "CLI externa",
    },
    expiresIn: "expira em {time}",
  },

  language: {
    switchTo: "Mudar idioma",
  },

  theme: {
    title: "Tema",
    switchTheme: "Mudar tema",
  },

  achievements: {
    hero: {
      kicker: "Agentic Gamerscore",
      title: "Hermes Achievements",
      subtitle:
        "Distintivos colecionáveis do Hermes obtidos a partir do histórico real de sessões. Conquistas conhecidas mas ainda não obtidas aparecem como Descobertas; conquistas Secretas permanecem ocultas até surgir o primeiro comportamento correspondente.",
      scan_subtitle:
        "A analisar o histórico de sessões do Hermes. A primeira análise pode demorar 5–10 segundos em históricos extensos.",
    },
    actions: {
      rescan: "Voltar a analisar",
    },
    stats: {
      unlocked: "Desbloqueadas",
      unlocked_hint: "distintivos obtidos",
      discovered: "Descobertas",
      discovered_hint: "conhecidas, ainda não obtidas",
      secrets: "Secretas",
      secrets_hint: "ocultas até ao primeiro sinal",
      highest_tier: "Nível mais alto",
      highest_tier_hint: "Copper → Silver → Gold → Diamond → Olympian",
      latest: "Mais recente",
      latest_hint_empty: "execute mais o Hermes",
      none_yet: "Ainda nenhuma",
    },
    state: {
      unlocked: "Desbloqueada",
      discovered: "Descoberta",
      secret: "Secreta",
    },
    tier: {
      target: "Objetivo {tier}",
      hidden: "Oculto",
      complete: "Completo",
      objective: "Objetivo",
    },
    progress: {
      hidden: "oculto",
    },
    scan: {
      building_headline: "A construir perfil de conquistas…",
      building_detail:
        "A ler sessões, chamadas de ferramentas, metadados de modelos e estado de desbloqueio.",
      starting_headline: "A iniciar análise de conquistas…",
      progress_detail:
        "Analisadas {scanned} de {total} sessões · {pct}%. Os distintivos são desbloqueados à medida que mais histórico é processado.",
      idle_detail:
        "A ler sessões, chamadas de ferramentas, metadados de modelos e estado de desbloqueio. Os distintivos aparecem aqui à medida que são desbloqueados.",
    },
    guide: {
      tiers_header: "Níveis",
      secret_header: "Conquistas secretas",
      secret_body:
        "As secretas escondem o seu acionador exato. Assim que o Hermes detetar um sinal relacionado, o cartão passa a Descoberta e mostra o requisito.",
      scan_status_header: "Estado da análise",
      scan_status_body:
        "O Hermes analisa o histórico local uma vez e depois os cartões aparecem automaticamente. Nada está bloqueado se isto demorar alguns segundos.",
      what_scanned_header: "O que é analisado",
      what_scanned_body:
        "Sessões, chamadas de ferramentas, metadados de modelos, erros, conquistas e estado de desbloqueio local.",
    },
    card: {
      share_title: "Partilhar esta conquista",
      share_label: "Partilhar {name}",
      share_text: "Partilhar",
      how_to_reveal: "Como revelar",
      what_counts: "O que conta",
      evidence_label: "Evidência",
      evidence_session_fallback: "sessão",
      no_evidence: "Ainda sem evidência",
    },
    latest: {
      header: "Desbloqueios recentes",
    },
    empty: {
      no_secrets_header: "Não restam segredos ocultos nesta análise.",
      no_secrets_body:
        "Pista: as secretas começam normalmente em padrões pouco comuns de falha ou de utilizador avançado — conflitos de portas, barreiras de permissões, variáveis de ambiente em falta, erros de YAML, colisões de Docker, uso de rollback/checkpoint, acertos de cache ou pequenas correções após muito texto a vermelho.",
    },
    filters: {
      all_categories: "Todas",
      visibility_all: "todas",
      visibility_unlocked: "desbloqueadas",
      visibility_discovered: "descobertas",
      visibility_secret: "secretas",
    },
    share: {
      dialog_label: "Partilhar conquista",
      header: "Partilhar: {name}",
      close: "Fechar",
      rendering: "A renderizar…",
      card_alt: "Cartão de partilha de {name}",
      error_generic: "Algo correu mal.",
      x_title: "Abre o X com uma publicação pré-preenchida",
      x_button: "Partilhar no X",
      copy_title: "Copiar a imagem para colar na sua publicação",
      copy_button: "Copiar imagem",
      copied: "Copiado ✓",
      download_button: "Transferir PNG",
      hint:
        "Partilhar no X abre uma publicação pré-preenchida num novo separador. Clique primeiro em Copiar imagem se quiser anexar o distintivo 1200×630 — o X permite colá-lo diretamente no compositor da publicação. Transferir PNG guarda o ficheiro para utilização em qualquer lado.",
      clipboard_unsupported:
        "A cópia de imagens para a área de transferência não é suportada neste navegador — utilize Transferir.",
      tweet_text: "Just unlocked {tier_part}\"{name}\" in Hermes Agent ☤",
    },
  },
  kanban: {
    loading: "A carregar o quadro Kanban…",
    loadFailed: "Falha ao carregar o quadro Kanban: ",
    loadFailedHint:
      "O backend cria automaticamente kanban.db na primeira leitura. Se persistir, consulte os registos do dashboard.",
    board: "Quadro",
    newBoard: "+ Novo quadro",
    newBoardTitle: "Novo quadro",
    newBoardDescription:
      "Os quadros permitem-lhe separar fluxos de trabalho não relacionados — um por projeto, repositório ou domínio. Os workers de um quadro nunca veem as tarefas de outro quadro.",
    slug: "Slug",
    slugHint: "— minúsculas, hífenes, p. ex. atm10-server",
    displayName: "Nome a apresentar",
    displayNameHint: "(opcional)",
    description: "Descrição",
    descriptionHint: "(opcional)",
    icon: "Ícone",
    iconHint: "(carácter único ou emoji)",
    switchAfterCreate: "Mudar para este quadro após o criar",
    cancel: "Cancelar",
    creating: "A criar…",
    createBoard: "Criar quadro",
    search: "Pesquisar",
    filterCards: "Filtrar cartões…",
    tenant: "Tenant",
    allTenants: "Todos os tenants",
    assignee: "Responsável",
    allProfiles: "Todos os perfis",
    showArchived: "Mostrar arquivados",
    lanesByProfile: "Faixas por perfil",
    nudgeDispatcher: "Despertar o dispatcher",
    refresh: "Atualizar",
    selected: "selecionado(s)",
    complete: "Concluir",
    archive: "Arquivar",
    apply: "Aplicar",
    clear: "Limpar",
    createTask: "Criar tarefa nesta coluna",
    noTasks: "— sem tarefas —",
    unassigned: "sem atribuição",
    untitled: "(sem título)",
    loadingDetail: "A carregar…",
    addComment: "Adicionar um comentário… (Enter para submeter)",
    comment: "Comentário",
    status: "Estado",
    workspace: "Espaço de trabalho",
    skills: "Competências",
    createdBy: "Criado por",
    result: "Resultado",
    comments: "Comentários",
    events: "Eventos",
    runHistory: "Histórico de execuções",
    workerLog: "Registo do worker",
    loadingLog: "A carregar registo…",
    noWorkerLog:
      "— ainda não há registo do worker (a tarefa não foi iniciada ou o registo foi rotacionado) —",
    noDescription: "— sem descrição —",
    noComments: "— sem comentários —",
    edit: "editar",
    save: "Guardar",
    dependencies: "Dependências",
    parents: "Pais:",
    children: "Filhos:",
    none: "nenhum",
    addParent: "— adicionar pai —",
    addChild: "— adicionar filho —",
    removeDependency: "Remover dependência",
    block: "Bloquear",
    unblock: "Desbloquear",
    notifyHomeChannels: "Notificar canais principais",
    diagnostics: "Diagnósticos",
    hide: "Ocultar",
    show: "Mostrar",
    attention: "Atenção",
    tasksNeedAttention: "tarefas precisam de atenção",
    taskNeedsAttention: "1 tarefa precisa de atenção",
    diagnostic: "diagnóstico",
    open: "Abrir",
    close: "Fechar (Esc)",
    reassignTo: "Reatribuir a:",
    copied: "Copiado",
    copyCommand: "Copiar comando para a área de transferência",
    reclaim: "Reivindicar",
    reassign: "Reatribuir",
    renderingError: "O separador Kanban encontrou um erro de renderização",
    reloadView: "Recarregar vista",
    wsAuthFailed:
      "Falha de autenticação WebSocket — recarregue a página para atualizar o token de sessão.",
    markDone: "Marcar {n} tarefa(s) como concluídas?",
    markArchived: "Arquivar {n} tarefa(s)?",
    warning: "Aviso",
    phantomIds: "Ids fantasma:",
    active: "ativo",
    ended: "terminado",
    noProfile: "(sem perfil)",
    showAllAttempts: "Mostrar todas as tentativas",
    sendingUpdates: "A enviar atualizações para",
    sendNotifications: "Enviar notificações de completed / blocked / gave_up para",
    archiveBoardConfirm:
      "Arquivar o quadro '{name}'? Será movido para boards/_archived/ para que possa recuperá-lo mais tarde. As tarefas deste quadro deixarão de aparecer em qualquer parte da interface.",
    archiveBoardTitle: "Arquivar este quadro",
    boardSwitcherHint: "Os quadros permitem-lhe separar fluxos de trabalho não relacionados",
    taskCreatedWarning: "Tarefa criada, mas: ",
    moveFailed: "Falha ao mover: ",
    bulkFailed: "Em lote: ",
    completionBlockedHallucination: "⚠ Conclusão bloqueada — ids de cartões fantasma",
    suspectedHallucinatedReferences: "⚠ O texto referenciou ids de cartões fantasma",
    pickProfileFirst: "Escolha primeiro um perfil.",
    unblockedMessage: "{id} desbloqueado. A tarefa está pronta para o próximo tick.",
    unblockFailed: "Falha ao desbloquear: ",
    reclaimedMessage: "{id} reivindicado. A tarefa voltou a ready.",
    reclaimFailed: "Falha ao reivindicar: ",
    reassignedMessage: "{id} reatribuído a {profile}.",
    reassignFailed: "Falha ao reatribuir: ",
    selectForBulk: "Selecionar para ações em lote",
    clickToEdit: "Clique para editar",
    clickToEditAssignee: "Clique para editar responsável",
    emptyAssignee: "(vazio = remover atribuição)",
    columnLabels: {
      triage: "Triagem",
      todo: "A fazer",
      scheduled: "Agendado",
      ready: "Pronto",
      running: "Em curso",
      blocked: "Bloqueado",
      done: "Concluído",
      archived: "Arquivado",
    },
    columnHelp: {
      triage: "Ideias em bruto — um specifier vai detalhar a especificação",
      todo: "À espera de dependências ou sem atribuição",
      scheduled: "À espera de um atraso conhecido ou de um seguimento agendado",
      ready: "Dependências satisfeitas; atribua um perfil para despachar",
      running: "Reivindicado por um worker — em execução",
      blocked: "O worker pediu intervenção humana",
      done: "Concluído",
      archived: "Arquivado",
    },
    confirmDone:
      "Marcar esta tarefa como concluída? A reivindicação do worker é libertada e os filhos dependentes ficam prontos.",
    confirmArchive:
      "Arquivar esta tarefa? Desaparece da vista padrão do quadro.",
    confirmBlocked:
      "Marcar esta tarefa como bloqueada? A reivindicação do worker é libertada.",
    completionSummary:
      "Resumo de conclusão para {label}. Será guardado como o resultado da tarefa.",
    completionSummaryRequired:
      "É necessário um resumo de conclusão antes de marcar uma tarefa como concluída.",
    triagePlaceholder: "Ideia aproximada — a IA irá especificá-la…",
    taskTitlePlaceholder: "Título da nova tarefa…",
    specifier: "specifier",
    assigneePlaceholder: "responsável",
    priority: "Prioridade",
    skillsPlaceholder:
      "competências (opcional, separadas por vírgulas): translation, github-code-review",
    noParent: "— sem pai —",
    workspacePathDir: "caminho do espaço de trabalho (obrigatório, p. ex. ~/projects/my-app)",
    workspacePathOptional:
      "caminho do espaço de trabalho (opcional, derivado do responsável se vazio)",
    logTruncated: "(a mostrar os últimos 100 KB — registo completo em ",
    logAt: ")",
  },
};
