import type { LocaleCatalog } from './types.ts'

// Brazilian Portuguese translation catalog. Registered under `pt` so
// the candidate-locale fallback catches both pt-BR and pt-PT.

const strings: Record<string, string> = {
  'common.save': 'Salvar',
  'common.cancel': 'Cancelar',
  'common.close': 'Fechar',
  'common.delete': 'Excluir',
  'common.remove': 'Remover',
  'common.retry': 'Tentar novamente',
  'common.continue': 'Continuar',
  'common.back': 'Voltar',
  'common.loading': 'Carregando…',
  'common.yes': 'Sim',
  'common.no': 'Não',
  'common.unknown': 'Desconhecido',
  'common.version': 'Versão',

  'login.welcome': 'Bem-vindo ao {{brandName}}',
  'login.signInGoogle': 'Entrar com o Google',
  'login.failed': 'Falha no login',
  'setup.welcomeUser': 'Bem-vindo, {{name}}',
  'setup.welcomeGeneric': 'Bem-vindo ao {{brandName}}',
  'setup.description': 'Escolha o provedor e modelo padrão para esta instância de {{brandName}}.',
  'setup.provider': 'Provedor',
  'setup.model': 'Modelo',
  'setup.continue': 'Continuar',
  'setup.saveFailed': 'Não foi possível salvar as configurações.',
  'setup.runtimeFailed': 'O runtime não pôde iniciar com as credenciais fornecidas. Verifique sua chave de API e tente novamente.',
  'loading.boot': 'Iniciando…',
  'loading.auth': 'Verificando autenticação…',
  'loading.config': 'Carregando configuração…',
  'loading.runtime': 'Iniciando o runtime…',
  'loading.connecting': 'Conectando ao runtime…',
  'loading.almostThere': 'Quase lá…',
  'loading.runtimeNeedsAttention': 'A configuração do runtime precisa de sua atenção.',
  'loading.error.title': '{{brandName}} não conseguiu iniciar o runtime',
  'loading.error.hint': 'Corrija a configuração inválida e reinicie o aplicativo.',

  'sidebar.home': 'Início',
  'sidebar.agents': 'Agentes',
  'sidebar.capabilities': 'Capacidades',
  'sidebar.settings': 'Configurações',
  'sidebar.threads': 'Conversas',
  'sidebar.search': 'Buscar conversa…',
  'sidebar.searchTitle': 'Buscar conversa (⌘K)',
  'sidebar.noThreads': 'Sem conversas ainda',
  'sidebar.noMatches': 'Sem resultados',
  'sidebar.threadFallback': 'Conversa {{id}}',
  'sidebar.newThread': 'Nova conversa',
  'sidebar.newThreadInProject': 'Nova conversa em um projeto…',
  'newThread.blank': 'Conversa em branco',
  'newThread.blankHint': 'Comece com Build e os agentes, ferramentas e habilidades disponíveis',
  'newThread.project': 'Abrir projeto',
  'newThread.projectHint': 'Escolha uma pasta — o agente pode ler e editar arquivos',
  'sidebar.newChat': 'Novo chat',
  'newChat.blankUnavailableReason': 'A criação de chat não está disponível para este espaço de trabalho.',
  'newChat.unavailable': 'Indisponível',
  'newChat.blankHint': 'Espaço de trabalho local - comece com Build e os colegas, ferramentas e habilidades disponíveis',
  'newChat.blankCloudHint': 'Ação segura para Cloud - inicie um chat cloud sincronizado',
  'newChat.localOnlyAction': 'Ação apenas local',
  'newChat.cloudAction': 'Ação Cloud',
  'newChat.projectHint': 'Ação apenas local - escolha um diretório de projeto que o colega possa ler e editar',
  'newChat.cloudProjectHint': 'Ação segura para Cloud - escolha Git ou carregue um snapshot explícito',
  'newChat.projectBlocked': 'A criação de chats de projeto está desativada.',
  'newChat.createFailed': 'Não foi possível criar um novo chat de projeto. Tente novamente.',
  'newChat.blank': 'Chat em branco',
  'newChat.cloudProjectSubtitle': 'Inicie um chat de projeto cloud a partir do Git ou de um snapshot carregado explicitamente.',
  'newChat.createCloudProject': 'Criar chat de projeto',
  'sidebar.busy': 'Ocupado',
  'sidebar.awaitingQuestion': 'Aguardando sua resposta',

  'thread.rename': 'Renomear',
  'thread.exportMarkdown': 'Exportar como Markdown',
  'thread.shareLink': 'Compartilhar link',
  'thread.linkCopied': 'Link copiado!',
  'thread.viewChanges': 'Ver alterações',
  'thread.delete': 'Excluir',
  'thread.deleteConfirm': 'Excluir esta conversa? Isso não pode ser desfeito.',
  'agent.deleteConfirm': 'Excluir o agente «{{name}}»? Isso não pode ser desfeito.',
  'mcp.deleteConfirm': 'Remover o MCP «{{name}}»? Isso não pode ser desfeito.',
  'skill.deleteConfirm': 'Remover a habilidade «{{name}}»? Isso não pode ser desfeito.',

  'statusbar.ready': 'Pronto',
  'statusbar.runtimeError': 'Erro do runtime',
  'statusbar.sessionUsage': 'Uso da sessão',
  'statusbar.inputTokens': 'Tokens de entrada',
  'statusbar.outputTokens': 'Tokens de saída',
  'statusbar.reasoningTokens': 'Tokens de raciocínio',
  'statusbar.cacheTokens': 'Tokens em cache',
  'statusbar.totalTokens': 'Total',
  'statusbar.totalCost': 'Custo total',

  'runtime.offline': 'Runtime indisponível: {{error}}',
  'runtime.offlineLabel': 'Runtime indisponível:',
  'runtime.tryAgain': 'Tentar novamente',
  'runtime.restarting': 'Reiniciando…',

  'homepage.title': 'Estado do workspace, capacidades e saúde da execução em uma visão.',
  'homepage.subtitle': 'Use o início como um painel de observabilidade, não como tela de boas-vindas. Verifique o que está carregado, conectado, o que o OpenCode usa e onde retomar.',
  'homepage.diagnostics': 'Diagnóstico de {{brandName}}',
  'homepage.refresh': 'Atualizar',
  'homepage.refreshing': 'Atualizando…',
  'homepage.range.last7d': 'Últimos 7 dias',
  'homepage.range.last30d': 'Últimos 30 dias',
  'homepage.range.ytd': 'Ano até hoje',
  'homepage.range.all': 'Tudo',

  'homepage.pill.runtime': 'Runtime',
  'homepage.pill.runtimeReady': 'Pronto',
  'homepage.pill.runtimeLoading': 'Carregando diagnóstico',
  'homepage.pill.runtimeNotReady': 'Não pronto',
  'homepage.pill.provider': 'Provedor',
  'homepage.pill.providerNotConfigured': 'Não configurado',
  'homepage.pill.context': 'Contexto',
  'homepage.pill.contextTokens': '{{count}} tokens',
  'homepage.pill.contextUnknown': 'Limite desconhecido',
  'homepage.pill.mcp': 'MCP',
  'homepage.pill.mcpConnected': '{{connected}}/{{total}} conectados',
  'homepage.pill.capabilities': 'Capacidades',
  'homepage.pill.capabilitiesSummary': '{{tools}} ferramentas · {{skills}} habilidades',

  'homepage.card.toolsAndSkills': 'Ferramentas e habilidades',
  'homepage.card.configuredTools': 'Ferramentas configuradas',
  'homepage.card.activeSkills': 'Habilidades ativas',
  'homepage.card.customSkills': 'Habilidades personalizadas',
  'homepage.card.customMcps': 'MCPs personalizados',
  'homepage.card.connectedMcps': 'MCPs conectados',
  'homepage.card.agents': 'Agentes integrados e personalizados',
  'homepage.card.primaryModes': 'Modos primários',
  'homepage.card.builtinAgents': 'Agentes integrados',
  'homepage.card.enabledCustomAgents': 'Personalizados ativos',
  'homepage.card.invalidAgents': 'Precisam de atenção',
  'homepage.card.leadAgent': 'Agente principal',
  'homepage.card.availableSubAgents': 'Sub-agentes disponíveis',
  'homepage.card.usage': 'Conversas, tokens e custo',
  'homepage.card.threads': 'Conversas',
  'homepage.card.totalMessages': 'Mensagens',
  'homepage.card.trackedTokens': 'Tokens rastreados',
  'homepage.card.trackedCost': 'Custo rastreado',
  'homepage.card.userMessages': 'Mensagens do usuário',
  'homepage.card.assistantMessages': 'Mensagens do assistente',
  'homepage.card.toolCalls': 'Chamadas de ferramenta',
  'homepage.card.busySessions': 'Sessões ativas',
  'homepage.card.refreshedAt': 'Atualizado às {{time}}',
  'homepage.card.agentUsage': 'Uso por sub-agente',
  'homepage.card.agentUsageEmpty': 'Sem delegações a sub-agentes em {{window}}.',
  'homepage.card.perf': 'Desempenho de hidratação e patches',
  'homepage.card.noPerfTelemetry': 'Nenhuma telemetria de desempenho capturada ainda.',
  'homepage.card.bundledTools': 'Ferramentas integradas',
  'homepage.card.customTools': 'Ferramentas personalizadas',
  'homepage.card.primaryMode': 'Modo principal',
  'homepage.card.visibleBuiltins': 'Integrados visíveis',
  'homepage.card.noToolsDiscovered': 'Nenhuma ferramenta descoberta ainda.',
  'homepage.card.noBuiltinAgents': 'Nenhum agente integrado disponível.',
  'homepage.card.tokenMix': 'Mix de tokens',
  'homepage.card.window': 'Janela',
  'homepage.card.usageRefreshed': 'Uso atualizado',
  'homepage.card.notLoaded': 'Não carregado',
  'homepage.card.busyRightNow': 'Ativas agora',
  'homepage.card.currentModel': 'Modelo atual',
  'homepage.card.contextWindow': 'Janela de contexto',
  'homepage.card.notSet': 'Não definido',
  'homepage.card.unknownLimit': 'Desconhecido',
  'homepage.card.historicalUsageNote': 'O uso histórico é preservado por conversa e sobreposto ao estado das sessões em vivo; os totais não dependem mais de abrir as conversas antes.',
  'homepage.card.backfillCompleted': ' {{count}} resumo(s) antigos atualizados em segundo plano.',
  'homepage.card.unknownSubAgent': 'Sub-agente desconhecido',
  'homepage.card.tasks': 'tarefa(s)',
  'homepage.card.tokShort': 'tok',
  'homepage.card.historyLoadP95': 'Carga de histórico p95',
  'homepage.card.coldSyncP95': 'Sync a frio p95',
  'homepage.card.flushP95': 'Flush p95',
  'homepage.card.slowEvents': 'Eventos lentos',
  'homepage.card.flushWaitP95': 'Espera de flush p95',
  'homepage.card.patchPublishes': 'Patches publicados',
  'homepage.card.telemetrySamples': 'Amostras de telemetria',
  'homepage.card.perfLiveNote': 'O diagnóstico é ao vivo do motor do processo principal. Os números vêm dos mesmos pipelines de hidratação e patches que a visão do chat usa.',
  'homepage.card.perfEmptyHint': 'Sem telemetria de desempenho ainda. Abra uma conversa, transmita uma resposta e volte aqui para inspecionar os tempos do runtime.',

  'homepage.side.resumeThreads': 'Retomar conversas',
  'homepage.side.resumeEmpty': 'Sem conversas em {{window}}.',
  'homepage.side.recentWork': 'Trabalho recente',
  'homepage.side.actions': 'Ações',
  'homepage.side.openWorkingSurface': 'Abrir uma superfície de trabalho',
  'homepage.side.newThread': 'Nova conversa',
  'homepage.side.newThreadHint': 'Abra uma conversa nova vinculada ao workspace.',
  'homepage.side.openDirectory': 'Abrir pasta',
  'homepage.side.openDirectoryHint': 'Ancore a próxima sessão em uma codebase ou pasta real.',
  'homepage.side.currentInventory': 'Inventário atual',
  'homepage.side.availableTools': 'Ferramentas disponíveis',
  'homepage.side.skillBundles': 'Pacotes de habilidades',
  'homepage.side.runtimeInputs': 'Entradas do runtime',
  'homepage.side.opencodeVersion': 'OpenCode',
  'homepage.side.providerName': 'Provedor',
  'homepage.side.providerSource': 'Origem do provedor',
  'homepage.side.model': 'Modelo',
  'homepage.side.modelSource': 'Origem do modelo',
  'homepage.side.package': 'Pacote',
  'homepage.side.packageFallback': 'Integrado/runtime',
  'homepage.side.providerOptions': 'Opções do provedor',
  'homepage.side.credentialOverrides': 'Sobrescrições de credenciais',
  'homepage.side.noOptions': 'Nenhuma opção não-secreta exposta.',
  'homepage.side.usingDefaults': 'Usando padrões.',

  'homepage.warning.backfillFailed': 'Não foi possível reconstruir {{count}} sessão(ões) — os totais podem estar subestimados.',
  'homepage.warning.backfillPending': 'Carregando {{count}} sessão(ões) antigas em segundo plano. Os totais serão atualizados automaticamente.',

  'tokens.input': 'Entrada',
  'tokens.output': 'Saída',
  'tokens.reasoning': 'Raciocínio',
  'tokens.cache': 'Cache',
  'provider.none': 'Sem provedor',
  'agent.unknown': 'Desconhecido',
  'thread.sandbox': 'Conversa sandbox',
  'runtime.source.settings': 'Sobrescrição de ajustes',
  'runtime.source.default': 'Padrão da config',
  'runtime.source.fallback': 'Reserva',

  'settings.title': 'Configurações',
  'settings.subtitle': 'Ajuste a interface, o runtime do modelo e as permissões locais.',
  'settings.done': 'Concluído',
  'settings.save': 'Salvar',
  'settings.saved': '✓ Salvo',
  'settings.saveChanges': 'Salvar alterações',
  'settings.saveHint': 'Alterações de aparência se aplicam imediatamente. Alterações de provedor e permissões reiniciam o runtime quando necessário.',
  'settings.tab.appearance': 'Aparência',
  'settings.tab.appearanceDescription': 'Tema, esquema de cores e fontes',
  'settings.tab.models': 'Modelos',
  'settings.tab.modelsDescription': 'Provedor, modelo e credenciais',
  'settings.tab.permissions': 'Permissões',
  'settings.tab.permissionsDescription': 'Acesso a ferramentas locais',
  'settings.tab.storage': 'Armazenamento',
  'settings.tab.storageDescription': 'Artefatos sandbox e limpeza',
  'settings.tab.language': 'Idioma',
  'settings.appearance.colorScheme': 'Esquema de cores',
  'settings.appearance.theme': 'Tema',
  'settings.appearance.themeActive': 'Ativo',
  'settings.appearance.uiFont': 'Fonte de interface',
  'settings.appearance.monoFont': 'Fonte monoespaçada',
  'settings.appearance.preview': 'Pré-visualização',
  'settings.appearance.previewHealth': 'Saúde do workspace',
  'settings.appearance.previewHealthDescription': 'Provedor conectado, runtime pronto',
  'settings.appearance.previewActive': 'Ativo',
  'settings.appearance.previewMessage': 'Alterações de tema se aplicam imediatamente.',
  'settings.appearance.previewMessageSecondary': 'Alterações de provedor e permissões usam o botão Salvar abaixo.',
  'settings.models.provider': 'Provedor',
  'settings.models.model': 'Modelo',
  'settings.models.featured': 'Em destaque',
  'settings.models.allModels': 'Todos os modelos',
  'settings.models.refresh': 'Atualizar',
  'settings.models.refreshing': 'Atualizando…',
  'settings.models.refreshTitle': 'Atualizar o catálogo dinâmico de modelos',
  'settings.models.search': 'Buscar entre {{count}} modelos…',
  'settings.models.noMatches': 'Nenhum modelo corresponde.',
  'settings.models.credentialsHeader': 'Credenciais',
  'settings.permissions.header': 'Ferramentas de desenvolvedor',
  'settings.permissions.bashTitle': 'Comandos de shell',
  'settings.permissions.bashDescription': 'Permite que os agentes executem comandos de terminal no workspace ativo.',
  'settings.permissions.fileWriteTitle': 'Edição de arquivos',
  'settings.permissions.fileWriteDescription': 'Permite que os agentes criem e modifiquem arquivos no workspace local.',
  'settings.storage.loading': 'Carregando armazenamento sandbox…',
  'settings.storage.supportDiagnostics': 'Diagnóstico de suporte',
  'settings.storage.supportDescription': 'Copia um relatório em texto plano (configuração, entradas do runtime, linhas de log recentes) para a área de transferência. As credenciais são mascaradas/ocultadas para que seja seguro colar em um relatório de bug.',
  'settings.storage.copyDiagnostics': 'Copiar diagnóstico',
  'settings.storage.preparing': 'Preparando…',
  'settings.storage.copied': 'Copiado',
  'settings.storage.copyFailed': 'Não foi possível gerar o diagnóstico — tente novamente',
  'settings.storage.diagnosticsHint': 'Útil ao abrir um chamado — inclua este pacote no seu relatório.',
  'settings.storage.sandboxStorage': 'Armazenamento sandbox',
  'settings.storage.totalSize': 'Tamanho total',
  'settings.storage.workspaces': 'Workspaces',
  'settings.storage.referenced': 'Referenciados',
  'settings.storage.unreferenced': 'Não referenciados',
  'settings.storage.stale': 'Obsoletos',
  'settings.storage.retention': 'Retenção',
  'settings.storage.retentionDays': '{{days}} dias',
  'settings.storage.cleanup': 'Limpeza',
  'settings.storage.clearOld': 'Apagar artefatos sandbox antigos',
  'settings.storage.clearOldDescription': 'Remove workspaces sandbox não referenciados com mais de {{days}} dias.',
  'settings.storage.clearAll': 'Apagar todos os artefatos sandbox não usados',
  'settings.storage.clearAllDescription': 'Remove todos os workspaces sandbox não referenciados mantendo os das conversas ativas.',
  'settings.storage.cleaning': 'Limpando…',
  'settings.storage.lastCleanup': 'A última limpeza removeu {{count}} workspace(s) e liberou {{size}}.',
  'settings.storage.sandboxNote': 'Conversas sandbox escrevem em um workspace Cowork privado em {{root}}. Workspaces antigos não referenciados são removidos automaticamente; você também pode executar a limpeza manualmente aqui.',
  'settings.updates.header': 'Atualizações',
  'settings.updates.checkForUpdates': 'Verificar atualizações',
  'settings.updates.description': 'Consulta a API pública de GitHub Releases para a última versão publicada. Somente leitura — sem download ou instalação automática.',
  'settings.updates.checking': 'Verificando…',
  'settings.updates.newAvailable': 'Nova versão disponível: {{version}}',
  'settings.updates.upToDate': 'Você está na versão mais recente ({{version}})',
  'settings.updates.unavailable': 'Verificação de atualizações indisponível',
  'settings.updates.failed': 'Não foi possível verificar atualizações',
  'settings.updates.hint': 'Abre a página de release do GitHub se uma build mais nova estiver disponível.',
  'settings.updates.currentHint': 'Você está em {{version}}. Clique abaixo para abrir as notas da versão.',
  'settings.updates.openReleaseNotes': 'Abrir notas da versão',
  'settings.updates.resetFailed': 'Não foi possível redefinir os dados: {{message}}',
  'settings.updates.resetCheckLogs': 'Falha ao redefinir. Verifique os logs.',
  'settings.updates.checkFailedGeneric': 'Falha ao verificar atualizações.',
  'settings.reset.header': 'Redefinir',
  'settings.reset.title': 'Redefinir todos os dados do app',
  'settings.reset.description': 'Apaga toda conversa, credencial, agente personalizado, habilidade e MCP desta máquina. O app reinicia no fluxo de primeiro uso. Útil antes de desinstalar ou para uma demo em branco; destrutivo e irreversível.',
  'settings.reset.button': 'Redefinir dados',
  'settings.reset.resetting': 'Redefinindo…',
  'settings.reset.requiresConfirm': 'Requer confirmação explícita. O app fechará e reiniciará.',
  'settings.reset.confirm': 'Redefinir todos os dados do app?\n\nIsto apaga toda conversa, credencial, agente personalizado, habilidade e MCP desta máquina. O app reiniciará no fluxo de primeiro uso. Irreversível.',
  'settings.language.label': 'Idioma',
  'settings.language.description': 'Escolha o idioma da interface. A seleção é lembrada neste dispositivo. Idiomas parcialmente traduzidos mostrarão textos faltantes em inglês.',
  'settings.language.systemDefault': 'Detecção automática (sistema)',

  'agents.tab.skills': 'Habilidades',
  'agents.tab.tools': 'Ferramentas',
  'agents.tab.instructions': 'Instruções',
  'agents.tab.inference': 'Inferência',
  'agents.new': 'Novo agente',
  'agents.save': 'Salvar alterações',
  'agents.create': 'Criar agente',
  'agents.saving': 'Salvando…',
  'agents.openCapabilities': 'Precisa de mais ferramentas ou habilidades?',
  'agents.openCapabilitiesLink': 'Abrir Ferramentas e habilidades',

  'capabilities.tab.tools': 'Ferramentas',
  'capabilities.tab.skills': 'Habilidades',
  'capabilities.addMcp': 'Adicionar MCP',
  'capabilities.addSkill': 'Adicionar habilidade',
  'capabilities.noTools': 'Sem ferramentas disponíveis. Adicione um MCP na página Capacidades.',
  'capabilities.noSkills': 'Sem habilidades disponíveis. Adicione um pacote na página Capacidades.',

  'chat.placeholder': 'Envie uma mensagem para {{brandName}}…',
  'chat.showContext': 'Mostrar contexto',
  'chat.hideContext': 'Ocultar contexto',
  'chat.thinking': 'Pensando…',

  'error.viewError': 'Erro de visualização',
  'error.viewErrorTitle': 'Esta página não conseguiu renderizar.',
  'error.viewErrorBody': '{{brandName}} recuperou o resto do app. Volte ao início e tente novamente.',
  'error.backToHome': 'Voltar ao início',

  'approval.sendEmail': 'Enviar email',
  'approval.createSpreadsheet': 'Criar planilha',
  'approval.createDocument': 'Criar documento',
  'approval.createPresentation': 'Criar apresentação',
  'approval.delete': 'Excluir',
  'approval.shareFile': 'Compartilhar arquivo',
  'approval.createEvent': 'Criar evento',
  'approval.allowAction': 'Permitir ação',
  'approval.deny': 'Negar',
  'approval.approve': 'Aprovar',

  'messageActions.branchHere': 'Ramificar aqui',
  'messageActions.branchHereDescription': 'Criar uma nova conversa que termina nesta mensagem',
  'messageActions.revertHere': 'Reverter aqui',
  'messageActions.revertHereDescription': 'Reverter estado da sessão para antes desta mensagem',
  'messageActions.viewDiff': 'Ver diff',
  'messageActions.viewDiffDescription': 'Mostrar alterações de arquivo desta mensagem',
  'messageActions.branchFailed': 'Não foi possível ramificar desta mensagem. Tente novamente.',
  'messageActions.revertConfirm': 'Reverter a sessão para esta mensagem? Turnos posteriores serão ocultados até você desfazer.',
  'messageActions.revertFailed': 'Não foi possível reverter para esta mensagem. Tente novamente.',

  'chat.attachFile': 'Anexar arquivo',
  'chat.planMode': 'Plan',
  'chat.buildMode': 'Build',
  'chat.planModeDescription': 'Modo Plan: análise e auditorias somente leitura',
  'chat.buildModeDescription': 'Modo Build: acesso completo e delegação',
  'chat.forkThread': 'Fazer fork da conversa',
  'chat.stopGenerating': 'Parar geração (Esc)',
  'chat.awaitingApproval': 'Aguardando aprovação',
  'chat.awaitingApprovalTitle': 'Aprove ou negue a solicitação pendente para continuar',
  'chat.awaitingAnswer': 'Aguardando resposta',
  'chat.awaitingAnswerTitle': 'Responda à pergunta pendente para continuar',
  'chat.placeholder.answerPending': 'Responda à pergunta acima para continuar…',
  'chat.placeholder.askPlan': 'Peça ao Plan para analisar ou estruturar o trabalho…',
  'chat.placeholder.askBuild': 'Peça ao Build para trabalhar nisso…',
  'chat.placeholder.noThread': 'Inicie uma nova conversa primeiro',

  'diff.changesFromMessage': 'Alterações desta mensagem',
  'diff.changes': 'Alterações',
  'diff.closeChanges': 'Fechar alterações',
  'diff.loading': 'Carregando alterações…',
  'diff.noChanges': 'Sem alterações de arquivo nesta sessão',
  'diff.filesChanged': '{{count}} arquivo(s) alterado(s)',
  'diff.unified': 'Unificado',
  'diff.split': 'Dividido',
  'diff.noTextual': 'Sem diff textual disponível (arquivo binário, renomeação ou apenas espaços).',
  'diff.couldNotLoad': 'Não foi possível carregar o conteúdo do arquivo',
  'diff.couldNotLoadWithError': 'Não foi possível carregar: {{error}}',
  'diff.showHiddenLines': 'Mostrar {{count}} linha(s) inalteradas',
  'diff.collapse': 'Recolher',
  'diff.statusNew': 'Novo',
  'diff.statusDeleted': 'Excluído',
  'diff.statusModified': 'Modificado',

  'thinking.buildCoordinating': 'Build está coordenando',
  'thinking.planning': 'Planejando',
  'thinking.generalWorking': 'General está trabalhando',
  'thinking.exploreWorking': 'Explore está trabalhando',
  'thinking.awaitingApproval': 'Aguardando sua aprovação',
  'thinking.buildCoordinatingCount': 'Build está coordenando {{count}} agente(s)',
  'thinking.buildMerging': 'Build está mesclando os resultados dos agentes',
  'thinking.agentWorking': '{{agent}} está trabalhando',
  'thinking.thinking': 'Pensando',
  'thinking.compacting': 'Compactando a conversa para preservar o contexto…',
  'thinking.agentPlan': 'Plano do agente',
  'thinking.sessionTodos': 'Tarefas da sessão',

  'compaction.running': 'Compactando',
  'compaction.done': 'Compactado',
  'compaction.causeOverflow': 'estouro',
  'compaction.causeAuto': 'auto',
  'compaction.causeManual': 'manual',
  'compaction.runningOverflow': 'Janela de contexto estourou — encurtando turnos antigos para liberar espaço.',
  'compaction.runningAuto': 'Aproximando-se do limite de contexto — compactando proativamente.',
  'compaction.runningManual': 'Resumindo manualmente a sessão para condensar turnos antigos.',
  'compaction.doneOverflow': 'Os turnos antigos foram resumidos porque a janela de contexto estava cheia.',
  'compaction.doneAuto': 'Os turnos antigos foram resumidos automaticamente para liberar espaço para novas respostas.',
  'compaction.doneManual': 'Os turnos antigos foram resumidos manualmente.',

  'taskStatus.running': 'executando',
  'taskStatus.done': 'concluído',
  'taskStatus.errored': 'com erro',
  'taskStatus.queued': 'na fila',

  'taskRun.deeperTitle': 'Este sub-agente disparou {{count}} sub-tarefa(s) adicional(is). Clique na faixa para explorar.',
  'taskDrillIn.backToParent': 'Voltar à tarefa pai',
  'taskDrillIn.abortTask': 'Abortar esta tarefa',
  'taskDrillIn.abortTaskDescription': 'Aborta somente este sub-agente; os irmãos e o primário continuam',
  'taskDrillIn.closeDrawer': 'Fechar painel',
  'questionDock.pendingCount': '{{count}} perguntas pendentes nesta conversa',
  'questionDock.scrollToToolCall': 'Rolar até a chamada de ferramenta desta pergunta',
  'questionDock.typeOwnAnswer': 'Digite sua própria resposta',

  'mermaid.zoomOut': 'Diminuir zoom do diagrama Mermaid',
  'mermaid.resetZoom': 'Redefinir zoom do Mermaid',
  'mermaid.zoomIn': 'Aumentar zoom do diagrama Mermaid',
  'chatModelMenu.selectModel': 'Selecionar modelo',
  'chatModelMenu.search': 'Buscar modelos…',

  'agentsPage.title': 'Agentes',
  'agentsPage.subtitle': 'Componha especialistas a partir de habilidades, ferramentas e instruções. Clique em um cartão para abri-lo no construtor.',
  'agentsPage.backToChat': 'Voltar ao chat',
  'agentsPage.search': 'Buscar agentes, habilidades, ferramentas ou instruções…',
  'agentsPage.importTitle': 'Importar um agente personalizado de um arquivo .cowork-agent.json',
  'agentsPage.import': 'Importar',
  'agentsPage.importFailed': 'Não foi possível importar {{filename}}: {{error}}',
  'agentsPage.importConflict': 'Já existe um agente personalizado chamado «{{name}}». Substituir pelo importado?',
  'studioTeamPage.eyebrow': 'Equipe',
  'studioTeamPage.title': 'Colegas',
  'studioTeamPage.subtitle': 'Componha agentes OpenCode em uma lista de colegas com funções, habilidades, ferramentas e atribuições de chat claras.',
  'studioTeamPage.customCount': 'personalizados',
  'studioTeamPage.builtInCount': 'integrados',
  'studioTeamPage.runtimeCount': 'runtime',
  'studioTeamPage.search': 'Buscar colegas, habilidades, ferramentas ou instruções…',
  'studioTeamPage.filterLabel': 'Filtro de colegas',
  'studioTeamPage.importTitle': 'Importar um colega personalizado de um arquivo .cowork-agent.json',
  'studioTeamPage.importFailed': 'Não foi possível importar {{filename}}: {{error}}',
  'studioTeamPage.importConflict': 'Já existe um colega personalizado chamado «{{name}}». Substituir pelo importado?',
  'studioTeamPage.newCoworker': 'Novo colega',
  'studioTeamPage.customSection': 'Colegas personalizados',
  'studioTeamPage.customSectionHelp': 'Criados por você; edite, habilite, exporte ou exclua pelo cartão.',
  'studioTeamPage.noCustom': 'Ainda não há colegas personalizados. Crie um para empacotar uma função repetível, instruções, habilidades e ferramentas.',
  'studioTeamPage.noCustomMatch': 'Nenhum colega personalizado corresponde à sua busca.',
  'studioTeamPage.builtInSection': 'Colegas integrados',
  'studioTeamPage.builtInSectionHelp': 'Especialistas do Open Cowork criados com habilidades e ferramentas incluídas.',
  'studioTeamPage.noBuiltInMatch': 'Nenhum colega integrado corresponde à sua busca.',
  'studioTeamPage.runtimeSection': 'Colegas registrados pelo runtime',
  'studioTeamPage.runtimeSectionHelp': 'Colegas registrados por um plugin do SDK; OpenCode continua dono do comportamento de execução.',
  'studioTeamPage.noRuntimeMatch': 'Nenhum colega de runtime corresponde à sua busca.',
  'studioTeamPage.noOpenCodeMatch': 'Nenhum padrão do OpenCode corresponde à sua busca.',
  'agentCard.editAvatar': 'Editar avatar do agente',
  'agentCard.idPlaceholder': 'agent-id',
  'agentCard.descriptionPlaceholder': 'No que este agente é especializado?',
  'agentCard.enabledTitle': 'Visível no chat',
  'agentCard.disabledTitle': 'Desativado — não aparecerá no chat',
  'agentCard.removeLabel': 'Remover {{label}}',
  'agentCard.missingTool': 'Ferramenta faltando: {{label}}',
  'avatarEditor.setColor': 'Definir cor como {{label}}',
  'skillLibrary.empty': 'Sem habilidades disponíveis. Adicione um pacote na página Capacidades.',
  'skillLibrary.needsTools': 'Precisa de {{count}} ferramenta(s)',
  'toolLibrary.empty': 'Sem ferramentas disponíveis. Adicione um MCP na página Capacidades.',
  'toolLibrary.writeTooltip': 'Esta ferramenta pode escrever — aumenta a pegada do agente',

  'agentCard.edit': 'Editar',
  'agentCard.export': 'Exportar',
  'agentCard.exportTitle': 'Exportar este agente como um pacote JSON compartilhável',
  'agentCard.noDescription': 'Sem descrição',

  'capabilities.title': 'Ferramentas e habilidades',
  'capabilities.subtitle': 'Inspecione as ferramentas e pacotes de habilidades disponíveis no contexto atual do OpenCode, incluindo adições integradas, de máquina, de projeto e personalizadas.',
  'capabilities.addTool': 'Adicionar ferramenta',
  'capabilities.addSkillButton': 'Adicionar habilidade',
  'capabilities.searchTools': 'Buscar ferramentas, descrições ou colegas…',
  'capabilities.searchSkills': 'Buscar habilidades, descrições ou colegas…',
  'capabilities.details': 'Detalhes',
  'capabilities.connection': 'Conexão',
  'capabilities.linkedAgents': 'Agentes vinculados',
  'capabilities.linkedCoworkers': 'Colegas vinculados',
  'capabilities.linkedTools': 'Ferramentas vinculadas',
  'capabilities.skillContent': 'Conteúdo da habilidade',
  'capabilities.usedByAgents': 'Usada por agentes',
  'capabilities.usedByCoworkers': 'Usada por colegas',
  'capabilities.bundleFiles': 'Arquivos do pacote',
  'capabilities.noToolsDiscovered': 'Nenhuma ferramenta descoberta ainda. Adicione um MCP personalizado para ampliar o runtime.',
  'capabilities.noToolsMatch': 'Nenhuma ferramenta corresponde à sua busca.',
  'capabilities.noSkillsDiscovered': 'Nenhuma habilidade descoberta ainda. Adicione um pacote personalizado para ampliar os agentes.',
  'capabilities.noSkillsMatch': 'Nenhuma habilidade corresponde à sua busca.',
  'capabilities.kindOpencodeTool': 'Ferramenta OpenCode',
  'capabilities.kindCustomMcp': 'MCP personalizado',
  'capabilities.kindBuiltinTool': 'Ferramenta integrada',
  'capabilities.kindMcpTool': 'Ferramenta MCP',
  'capabilities.kindCustomSkill': 'Habilidade personalizada',
  'capabilities.kindBuiltinSkill': 'Habilidade integrada',
  'capabilities.skillSourceBundled': 'Habilidade integrada ao {{brand}}',
  'capabilities.skillSourceProject': 'Habilidade de projeto',
  'capabilities.skillSourceMachine': 'Habilidade de máquina',
  'capabilities.skillSourceBundle': 'Pacote de habilidades',

  'mcpForm.titleAdd': 'Adicionar ferramenta MCP',
  'mcpForm.titleEdit': 'Editar ferramenta MCP — {{name}}',
  'mcpForm.subtitleAdd': 'Conecte um servidor Model Context Protocol e disponibilize seu conjunto de ferramentas dentro do {{brand}} e do OpenCode.',
  'mcpForm.subtitleEdit': 'Atualize a configuração deste MCP. As mudanças surtem efeito após o recarregamento do runtime pelo {{brand}}.',
  'mcpForm.saving': 'Salvando…',
  'mcpForm.saveChanges': 'Salvar alterações',
  'mcpForm.addMcp': 'Adicionar MCP',
  'mcpForm.completeBeforeSave': 'Complete antes de salvar',
  'mcpForm.whereToSave': 'Onde salvar',
  'mcpForm.connectionType': 'Tipo de conexão',
  'mcpForm.connectionDetails': 'Detalhes de conexão',
  'mcpForm.mcpId': 'ID MCP',
  'mcpForm.displayName': 'Nome de exibição',
  'mcpForm.displayNamePlaceholder': 'ex. GitHub, Jira, Slack',
  'mcpForm.description': 'Descrição',
  'mcpForm.descriptionPlaceholder': 'A que este MCP dá acesso.',
  'mcpForm.command': 'Comando',
  'mcpForm.commandPlaceholder': 'ex. npx, node, python',
  'mcpForm.arguments': 'Argumentos',
  'mcpForm.argumentsPlaceholder': 'ex. -y @modelcontextprotocol/server-github',
  'mcpForm.envVars': 'Variáveis de ambiente',
  'mcpForm.envValuePlaceholder': 'valor',
  'mcpForm.url': 'URL',
  'mcpForm.headers': 'Cabeçalhos',
  'mcpForm.allowPrivateNetwork': 'Permitir rede privada',
  'mcpForm.linkedSkills': 'Habilidades vinculadas',
  'mcpForm.preview': 'Pré-visualização do MCP',

  'skillForm.titleAdd': 'Adicionar pacote de habilidades',
  'skillForm.titleEdit': 'Editar pacote — {{name}}',
  'skillForm.subtitle': 'Crie um pacote de habilidades real do OpenCode com `SKILL.md` mais referências, exemplos ou modelos necessários.',
  'skillForm.addSkill': 'Adicionar habilidade',
  'skillForm.importing': 'Importando…',
  'skillForm.importDirectory': 'Importar pasta',
  'skillForm.bundleIdentity': 'Identidade do pacote',
  'skillForm.skillDirectory': 'Pasta da habilidade',
  'skillForm.skillDirectoryPlaceholder': 'ex. code-review, data-pipeline',
  'skillForm.skillDirectoryHint': 'Salvo como pasta do pacote. Mantenha em minúsculas e estável.',
  'skillForm.requiredTools': 'Ferramentas necessárias',
  'skillForm.additionalFiles': 'Arquivos adicionais',
  'skillForm.fileContents': 'Conteúdo do arquivo',
  'skillForm.bundlePreview': 'Pré-visualização do pacote',

  'mcpRestriction.removeRestriction': 'Clique para remover esta restrição',

  'commandPalette.search': 'Buscar ações, agentes e comandos…',
  'commandPalette.noMatches': 'Nenhuma ação corresponde. Tente uma busca mais ampla.',
  'commandPalette.hint': 'Enter para executar. Esc para fechar.',

  'chart.generatedChart': 'Gráfico gerado',

  'chat.composerAriaLabel': 'Compositor de mensagens (solte arquivos para anexar)',
  'chat.revertedSessionTitle': 'Esta sessão está revertida — clique para restaurar as mensagens posteriores',
  'chat.transcriptAriaLabel': 'Transcrição do chat',

  'homepage.card.usageEyebrow': 'Uso',
  'homepage.card.agentUsageEyebrow': 'Uso dos agentes',
  'homepage.card.perfEyebrow': 'Desempenho',
  'homepage.card.selectedWindow': 'a janela selecionada',
  'homepage.side.selectedPeriod': 'o período selecionado',
  'homepage.side.noRecentThreads': 'Sem conversas em {{window}} ainda. Inicie uma pelas ações abaixo e o início vira sua fila.',

  'setup.modelIdPlaceholder': 'ID do modelo',

  'statusbar.thinking': 'Pensando…',
  'statusbar.agentWorking': '{{agent}} trabalhando…',
  'statusbar.compacting': 'Compactando…',
  'statusbar.contextPercent': '{{percent}}% de contexto',
  'statusbar.contextCompactingSoon': '{{percent}}% · compactação em breve',
  'statusbar.contextCompactingDetail': 'Compactando turnos antigos para preservar o contexto',
  'statusbar.contextCompactedDetail': 'Compactado após {{percent}}% de {{limit}}',
  'statusbar.contextNearThreshold': '{{percent}}% de {{limit}} — compactação automática em breve',
  'statusbar.contextOfLimit': '{{percent}}% de {{limit}}',
  'statusbar.tokensCount': '{{count}} tokens',
  'statusbar.cacheRead': 'Leitura de cache',
  'statusbar.cacheWrite': 'Escrita de cache',
  'statusbar.contextWindow': 'Janela de contexto',
  'statusbar.compactions': 'Compactações',
  'statusbar.lastCompacted': 'Última compactação',
  'statusbar.lastMeasuredInput': 'Última entrada medida',
  'statusbar.sessionCost': 'Custo da sessão',
  'statusbar.totalAllSessions': 'Total (todas as sessões)',

  'threadList.waitingForAnswer': 'Aguardando sua resposta',
  'threadList.working': 'Trabalhando',
  'threadList.forked': 'Conversa bifurcada',
  'threadList.forkedFrom': 'Bifurcada de outra conversa',
  'threadList.reverted': 'revertida',
  'threadList.revertedTitle': 'A sessão está revertida para uma mensagem anterior',

  'agentBuilder.saveThisAgentIn': 'Salvar este agente em',
  'agentCard.scope': 'Escopo',

  'agentPreview.title': 'Pré-visualização estática',
  'agentPreview.subtitle': 'Como o OpenCode verá este agente quando for invocado. Sem chamada de rede — apenas a visão compilada.',
  'agentPreview.scopeLabel': 'Escopo {{scope}}',
  'agentPreview.mention': 'Menção',
  'agentPreview.toolsResolved': 'Ferramentas resolvidas',
  'agentPreview.skillsResolved': 'Habilidades resolvidas',
  'agentPreview.nOfM': '{{n}} de {{m}}',
  'agentPreview.missingTools': 'Ferramentas faltando: {{list}}',
  'agentPreview.missingSkills': 'Habilidades faltando: {{list}}',
  'agentPreview.systemPrompt': 'Prompt do sistema',
  'agentPreview.toolPatterns': 'Padrões de ferramenta',
  'agentPreview.skillsAvailable': 'Habilidades disponíveis para carregar',

  'agentTemplate.title': 'Iniciar um novo agente',
  'agentTemplate.subtitle': 'Escolha um modelo para pular a tela em branco — você pode mudar tudo depois.',
  'agentTemplate.startBlank': 'Começar em branco',
  'agentTemplate.startBlankHint': 'Sem ferramentas ou instruções pré-selecionadas — projete o agente do zero.',
  'agentTemplate.temp': 'temp {{value}}',
  'agentTemplate.steps': '{{count}} passos',
  'agentTemplate.toolHints': '{{count}} sugestão(ões) de ferramenta',

  'avatarEditor.avatar': 'Avatar',
  'avatarEditor.color': 'Cor',

  'capabilities.noSkillContent': 'Nenhum conteúdo de pacote de habilidade disponível ainda.',
  'capabilities.skillNotTiedToTool': 'Esta habilidade não está vinculada a uma ferramenta específica.',

  'chart.savedAs': 'Salvo como',

  'chatModelMenu.noMatches': 'Sem correspondências.',

  'instructions.headerHint': 'Molde o tom, as prioridades e o formato de saída. Boas instruções são específicas e operacionais.',
  'instructions.addSnippet': '+ Trecho',
  'instructions.noInstructions': 'Sem instruções.',
  'instructions.placeholderExamples': 'Exemplos:\n- Resuma os achados em 3 pontos com evidências.\n- Prefira docs oficiais a blogs.\n- Nunca envie email; apenas rascunhe.\n- Peça aprovação antes de qualquer escrita externa.',
  'instructions.charCount': '{{count}} caracteres',
  'instructions.longPromptWarning': 'Prompts longos consomem tokens — considere reduzir',
  'instructions.snippet.conciseLabel': 'Seja conciso',
  'instructions.snippet.conciseBody': 'Responda em 3–5 pontos. Mantenha o texto apertado. Corte o que não for essencial.',
  'instructions.snippet.askFirstLabel': 'Faça perguntas esclarecedoras',
  'instructions.snippet.askFirstBody': 'Se a solicitação for ambígua, faça uma pergunta esclarecedora antes de agir.',
  'instructions.snippet.citeLabel': 'Cite fontes',
  'instructions.snippet.citeBody': 'Ao resumir achados, cite cada afirmação contra o documento ou URL de origem.',
  'instructions.snippet.draftOnlyLabel': 'Rascunhar, nunca enviar',
  'instructions.snippet.draftOnlyBody': 'Produza apenas rascunhos. Nunca envie mensagens, emails ou ações externas sem confirmação.',
  'instructions.snippet.structuredLabel': 'Saída estruturada',
  'instructions.snippet.structuredBody': 'Retorne os resultados como um resumo executivo curto, depois um detalhamento numerado.',

  'mcpForm.mcpIdHint': 'Torna-se o namespace do runtime e o prefixo de permissão.',
  'mcpForm.runtimeNamespace': 'Namespace do runtime',
  'mcpForm.permissionPrefix': 'Prefixo de permissão',
  'mcpForm.connectionSummary': 'Resumo da conexão',
  'mcpForm.connectivityTest': 'Teste de conectividade',
  'mcpForm.couldNotConnect': 'Não foi possível conectar a este MCP.',
  'mcpForm.runTestHint': 'Execute um teste antes de salvar para confirmar que o servidor responde e expõe métodos.',
  'mcpForm.reloadsRuntimeNote': 'O {{brand}} recarrega o runtime automaticamente após salvar.',

  'questionDock.question': 'Pergunta',
  'sessionInspector.planFromTaskRuns': 'Derivado de execuções de tarefas ativas',
  'sessionInspector.session': 'Sessão',

  'skillForm.bundleId': 'ID do pacote',
  'skillForm.frontmatterName': 'Nome do frontmatter',
  'skillForm.noExtraBundleFiles': 'Nenhum arquivo adicional no pacote.',
  'skillForm.whatWillBeSaved': 'O que será salvo',

  'todo.untitled': 'Tarefa sem título',

  'toolTrace.artifact': 'Artefato',
  'toolTrace.agent': 'Agente',
  'toolTrace.subAgent': 'Sub-agente',
  'toolTrace.reveal': 'Mostrar',
  'toolTrace.saving': 'Salvando…',
  'toolTrace.saveAs': 'Salvar como…',
  'toolTrace.input': 'Entrada',
  'toolTrace.output': 'Saída',
  'toolTrace.noDetails': 'Sem detalhes disponíveis',
  'toolTrace.generatedInSubAgent': 'Gerado via {{tool}} em trabalho de sub-agente',
  'toolTrace.generatedInThread': 'Gerado via {{tool}} nesta conversa',

  // ────────────────────────────────────────────────────────────
  // Home (welcoming landing)
  // ────────────────────────────────────────────────────────────
  'home.greeting.cowork': 'Em que vamos cotrabalhar hoje?',
  'home.subtitle': '{{brand}} · Pergunta o que quiseres ou @menciona um agente',
  'home.composer.placeholder': 'Pergunta o que quiseres ou @menciona um agente',
  'home.composer.send': 'Enviar',
  'home.composer.dropZone': 'Compositor — larga ficheiros para anexar',
  'studioHome.greeting': 'O que a tua equipa deve enfrentar hoje?',
  'studioHome.subtitle': '{{brand}} · Escolhe um colega líder, @menciona especialistas e revê o trabalho num só lugar',
  'studioHome.composer.placeholder': 'Pergunta o que quiseres ou @menciona um colega',
  'studioHome.coachmark': 'Escreve um prompt, anexa contexto ou @menciona um colega — ⌘K para comandos.',
  'studioHome.agentNudge': '@menciona um colega',
  'home.suggestions.title': 'Tenta',
  'home.recent.title': 'Retoma onde ficaste',
  'home.recent.untitled': 'Conversa sem título',
  'home.statusStrip.ready': 'Pronto',
  'home.statusStrip.mcps': '{{connected}}/{{total}} MCPs',
  'home.statusStrip.viewMore': 'Pulso',

}

export const pt: LocaleCatalog = {
  locale: 'pt',
  nativeLabel: 'Português',
  strings,
}
