Files
apes-sidebar/src/client/locales-pt.ts
T
Menghuan1918 f584b67813 feat(tasks): 图节点改为双段式卡片 + 折叠聚合 + 窄栏可读性
图模式(主显示模式)换成新的卡片语言,树模式保持不变:

- 卡片 = 上段(类型徽章 + 相位徽标 + 名称两行 + mono 元信息 + 团队任务行)
  + 下段小条(状态点 + 状态词 + 主 Agent 同款合并活动 + 完成后的折叠 chevron)。
  类型徽章用页面自己的词汇(主代理 / 子代理 / 成员 / 工作流 / ✓N 已完成)。
- 分组色(层级):按树深度取 4 档令牌色阶(color-mix 混 --dsw-alias-state-business-primary),
  作用于左描边与上段极淡底色;相位徽标走 ink 色族,两套分组不撞色。
  相位虚线框保留但改用同色极淡描边,卡片徽标承担「这是哪个阶段」。
- 执行态:小条 `data-running` + 从左到右扫光(1.5s,末 1/3 停顿,
  prefers-reduced-motion 关闭);合并活动行来自宿主 chat 词条,缺失时回退插件文案。
- 折叠:已完成节点的 chevron 把该节点「收进已完成聚合」(模型新增 foldedIds,
  与全局 folded 走同一组守卫:只在已结算叶子、非当前会话、非团队成员时生效);
  聚合节点点击 = 全部展开(清空手动集 + 关闭全局折叠);控制条仍只管全局规则。
- 布局与窄栏(用户反馈 a–f):卡片高度预算按新行重算(徽章 + 两行标题 + 元信息 +
  小条 = 103px,任务行 +18),宽度 176 → 190;fit 按内容包围盒双轴居中、
  FIT_MAX_SCALE 1.15 → 1.30;缩放范围 0.4–2.0 并归一化 wheel deltaMode;
  平移加边界夹取(至少 72px 内容留在视口内);空画布双击重新适配并恢复自动 fit;
  连线改「垂直出线 stub + 贝塞尔」并加粗到 1.5px。

验证:typecheck / lint 通过;pnpm test 1253 passed / 9 skipped(含新增双段结构、
data-running、chevron → 聚合、聚合 → 全部展开、工作流相位徽标 5 例)。

(cherry picked from commit aee571e50beb5dc979995f0841cffd0a575f2173)
2026-09-27 22:18:35 +08:00

473 lines
32 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const pt: Record<string, string> = {
files: 'Arquivos',
guideDescFiles: 'Navegue pela árvore do workspace; um clique abre a pré-visualização ou a edição',
guideDescGit: 'Alterações do Git e edições desta sessão em um único separador',
guideDescSubagent: 'Grafo do workflow, quadro de tarefas da equipe e tarefas em segundo plano, ao vivo',
guideDescSidechat: 'Uma conversa paralela independente que herda o contexto desta sessão',
guideDescTerminal: 'Um shell real (xterm + pty) com reconexão',
guideDescBrowser: 'Navegador incorporado, que pode abrir links do chat',
changesSessionEmpty: 'Ainda sem operações de arquivo nesta sessão',
changesRead: 'Leitura',
changesMdReading: 'Leitura',
changesHtmlRender: "Renderizar",
changesHtmlRaw: "Fonte",
changesPdfRender: "Renderizar",
changesPdfRaw: "Fonte",
changesMdRaw: 'Bruto',
changesWrite: 'Escrita',
changesEdit: 'Edição',
changesRunning: 'em execução',
changesError: 'erro',
changesFold: '{count} linhas… clique para expandir',
changesFoldLoading: 'Expandindo…',
changesFoldUnavailable: 'Contexto indisponível',
changesContext: 'contexto',
changesPriorUnknown: 'O conteúdo anterior está fora da janela; mostrado como totalmente adicionado',
explorer: 'Explorador',
terminal: 'Terminal',
editor: 'Editor',
editorExplorer: 'Comportamento de abertura de arquivos',
editorExplorerDesc: 'Controla como os arquivos são abertos',
editorExplorerMerged: 'Mesclado',
editorExplorerMergedDesc: 'Arquivos alternam no mesmo lugar na mesma janela; novas janelas começam com a árvore de arquivos aberta',
editorExplorerSplit: 'Separado',
editorExplorerSplitDesc: 'Janelas sem caminho são o explorador independente (somente árvore de arquivos); cada arquivo abre sua própria janela (com árvore encaixada, fechada por padrão)',
editorTreeToggle: 'Painel da árvore de arquivos',
editorPathPlaceholder: 'Caminho do arquivo (relativo ao diretório da sessão ou absoluto), Enter para abrir',
editorSearchPlaceholder: 'Pesquisar arquivos por nome…',
editorSearchNoResults: 'Nenhum arquivo correspondente',
editorSearchTruncated: 'Resultados demais — exibindo lista parcial',
editorEmptyHint: 'Escolha um arquivo na árvore do painel ou no campo de caminho acima para começar a pré-visualizar',
openFileNewTab: 'Abrir em nova aba',
openFileSide: 'Abrir ao lado',
openWithMenu: 'Abrir com',
openWithSshSuffix: ' (SSH)',
pinOpenWith: 'Fixar no menu',
unpinOpenWith: 'Desafixar',
openWithExplorer: 'Gerenciador de arquivos',
openWithVscode: 'VS Code',
openWithCursor: 'Cursor',
openWithZed: 'Zed',
openWithSettingsSshTitle: 'Host remoto SSH',
openWithSettingsSshDesc: 'Vazio = workspace local; com user@host ou um alias SSH, os abridores da família VSCode passam a usar o protocolo vscode-remote/ssh-remote e o Gerenciador de arquivos / Zed / editores personalizados fora da família VSCode ficam ocultos do menu',
openWithSettingsSshPlaceholder: 'user@host ou alias SSH',
openWithSettingsCustomTitle: 'Editores personalizados',
openWithSettingsCustomDesc: 'Nome + modelo de URL (espaço reservado {path}) + sinalizador de família VSCode; no modo remoto, apenas editores da família VSCode podem abrir um caminho remoto',
openWithSettingsAdd: 'Adicionar',
openWithSettingsName: 'Nome',
openWithSettingsTemplate: 'ex.: cursor://file/{path}',
openWithSettingsFamily: 'Família VSCode',
openWithSettingsFamilyDesc: 'Este editor fala o dialeto de URL do VSCode (suporta aberturas SSH remotas)',
openWithSettingsRemove: 'Remover',
openWithSettingsInvalidHint: 'Editores com nome ausente ou modelo sem {path} / scheme:// não aparecem no menu',
newTab: 'Nova aba',
brokenSymlink: 'Symlink quebrado',
close: 'Fechar',
closeOtherTabs: 'Fechar outras abas',
closeLeftTabs: 'Fechar abas à esquerda',
closeRightTabs: 'Fechar abas à direita',
pinTerminal: 'Fixar Terminal',
pinAgentTerminal: 'Fixar Terminal do Agent',
pinToWorkspace: 'Fixar no Workspace',
pinToGlobal: 'Fixar Globalmente',
unpinTerminal: 'Desafixar',
collapseBottomPanel: 'Recolher painel inferior',
expandBottomPanel: 'Expandir painel inferior',
terminalError: 'Falha na conexão do terminal',
terminalConnectFailed: 'O terminal falhou ao conectar repetidamente',
terminalRetry: 'Tentar novamente',
terminalWaitBanner: 'O agente está aguardando {needle}',
terminalSkipWait: 'Pular espera',
terminalDepsFailed: 'A dependência do terminal node-pty falhou ao carregar',
terminalDepsHint: 'Execute o comando abaixo em um terminal ou cmd na máquina do DSH para reparar e tente novamente (node-pty permanece em sincronia com a versão do núcleo do DSH):',
terminalDepsProfile: ' (perfil detectado: {profile})',
terminalShellNotFound: 'Shell configurado não encontrado: {name} — verifique o caminho do shell em Configurações → Side card → Terminal',
preview: 'Pré-visualizar',
toc: 'Sumário',
edit: 'Editar',
mermaidError: 'Falha ao renderizar o Mermaid',
mermaidZoomIn: 'Ampliar',
mermaidZoomOut: 'Reduzir',
mermaidZoomReset: 'Redefinir',
mermaidZoomHint: 'Rolar para ampliar · arrastar para mover · Esc para fechar',
refresh: 'Atualizar',
showInFolder: 'Mostrar na pasta',
refreshUnsavedConfirm: 'O arquivo mudou no disco. Atualizar descartará edições não salvas. Continuar?',
save: 'Salvar',
saved: 'Salvo',
unsaved: 'Não salvo',
saveFailed: 'Falha ao salvar',
truncation: 'Arquivo grande demais — exibindo os primeiros 512KB',
binary: 'Arquivo binário, pré-visualização indisponível',
loading: 'Carregando…',
error: 'Falha ao carregar',
retry: 'Tentar novamente',
notRepo: 'Este diretório não é um repositório git',
noChanges: 'Sem alterações',
statusTruncated: 'Muitas alterações; exibindo apenas as primeiras 2000 entradas',
stage: 'Preparar (stage)',
unstage: 'Desfazer stage',
stageAll: 'Preparar tudo',
unstageAll: 'Desfazer stage de tudo',
commitPlaceholder: 'Mensagem de commit (Ctrl+Enter)',
commit: 'Commit',
branch: 'Branch',
worktree: 'Worktree',
checkoutError: 'Falha ao alternar de branch',
history: 'Histórico',
changes: 'Alterações',
changesGitLens: 'Git',
changesSessionLens: 'Sessão',
changesFilterAll: 'Tudo',
changesFilterEmpty: 'Nenhuma operação deste tipo',
changesOpenDiffTab: 'Abrir em uma aba de diff',
changesClosePreview: 'Fechar prévia',
changesResizePreview: 'Ajustar altura da prévia',
changesLoadError: 'Os registros de arquivos da sessão estão indisponíveis no momento',
staged: 'Preparadas',
unstaged: 'Não preparadas',
cancel: 'Cancelar',
diffEmpty: 'Sem alterações de texto',
diffLoadError: 'Falha ao carregar o diff',
diffBinary: 'Binário',
diffAdded: 'Adicionado',
diffDeleted: 'Excluído',
diffRenamed: 'Renomeado',
diffExpand: 'Expandir mais {count} linhas',
discard: 'Descartar alterações',
discardTitle: 'Descartar alterações',
discardDesc: 'Isso descarta as alterações do diretório de trabalho de "{path}" (não recuperável).',
viewCommitDiff: 'Ver diff do commit',
copyShortHash: 'Copiar hash curto',
copyFullHash: 'Copiar hash completo',
copySubject: 'Copiar assunto',
revertCommit: 'Reverter commit',
revertTitle: 'Reverter commit',
revertDesc: 'Crie um novo commit no branch atual que reverte "{subject}".',
cherryPickCommit: 'Cherry-pick deste commit',
cherryPickTitle: 'Cherry-pick deste commit',
cherryPickDesc: 'Aplicar as alterações de "{subject}" ao branch atual.',
timeJustNow: 'agora mesmo',
timeMinutesAgo: 'há {n} min',
timeHoursAgo: 'há {n} h',
timeYesterday: 'ontem',
loadMore: 'Carregar mais',
historyLoadError: 'Falha ao carregar mais histórico',
produced: 'Produzidos',
disconnected: 'Terminal desconectado, reconectando…',
exited: 'O processo do terminal saiu',
noSession: 'Selecione uma conversa para usar a barra lateral',
pluginNotLoaded: 'Plugin não carregado; aba indisponível:',
parent: 'Diretório pai',
copied: 'Copiado',
copy: 'Copiar',
openEditor: 'Abrir editor',
referenceFile: '@arquivo',
addToConversation: 'Adicionar à conversa',
copyRelative: 'Copiar caminho relativo',
copyAbsolute: 'Copiar caminho absoluto',
rename: 'Renomear',
renameInvalid: 'O nome não pode ser vazio nem conter separadores de caminho.',
delete: 'Excluir',
deleteTitle: 'Excluir "{name}"?',
deleteDescFile: 'Isso exclui o arquivo permanentemente. Esta ação não pode ser desfeita.',
deleteDescDir: 'Isso exclui o diretório e todo o seu conteúdo permanentemente. Esta ação não pode ser desfeita.',
dismiss: 'Fechar',
download: 'Baixar',
uploadFiles: 'Enviar arquivos',
uploadFolder: 'Enviar pasta',
uploadHere: 'Enviar aqui',
uploadDropHint: 'Solte arquivos/pastas aqui para enviar',
uploadDropChat: 'Solte no chat para adicionar imagens',
uploadTo: 'Enviar para {dir}',
uploadingTo: 'Enviando para {dir}…',
uploadProgress: 'Enviando {done}/{total}: {name}',
uploadDone: '{count} arquivo(s) enviado(s)',
uploadFailed: 'Falha no envio: {error}',
uploadFailedUnknown: 'Erro desconhecido',
uploadTooLarge: 'Arquivo grande demais (acima do limite de envio)',
uploadCancelled: 'Envio cancelado',
settingsNav: 'Cartão lateral',
settingsIntro: 'Gerencie o que o cartão lateral mostra e como ele se comporta',
settingsPopupDesc: 'Configurar opções relacionadas para {feature}',
settingsDone: 'Concluído',
settingsOpenToolsTitle: 'Injetar a ferramenta de abertura na barra lateral para o modelo',
settingsOpenToolsDesc: 'Quando ativado, o modelo pode abrir arquivos, pastas e páginas HTTP(S) na barra lateral pela ferramenta sidebar_open (desativado por padrão)',
settingsTitleBarTitle: 'Modo de compatibilidade de posição',
settingsTitleBarDesc: 'Escolha o esquema de compatibilidade da barra de título: detecção automática (padrão, conservador) / web oficial do DSH / shells de desktop conhecidos / personalizado (distância de deslocamento + CSS personalizado)',
settingsTitleBarStripTitle: 'Distância de deslocamento',
settingsTitleBarStripDesc: 'Altura da faixa da barra de título: quantos pixels os botões e o conteúdo da barra lateral descem (0–120, padrão 40; aplica-se no esquema personalizado)',
settingsSchemeAutoTitle: 'Detecção automática',
settingsSchemeAutoDesc: 'Conservador: somente a API padrão Window Controls Overlay contribui (altura real da sobreposição de título); ambientes web comuns não recebem nenhuma modificação',
settingsSchemeWebTitle: 'Web oficial do DSH',
settingsSchemeWebDesc: 'Declare explicitamente a interface web oficial: nenhuma adaptação (nem mesmo a geometria padrão do WCO)',
settingsSchemeCustomTitle: 'Personalizado',
settingsSchemeCustomDesc: 'Controle total: injete CSS personalizado (pode sobrescrever estilos internos) e defina a distância de deslocamento da barra de título',
settingsSchemeDetectedSuffix: 'detectado',
settingsCustomCssTitle: 'CSS personalizado',
settingsCustomCssPlaceholder: '/* ex.: reserve 36px para um shell com barra de título desenhada por conta própria */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
settingsSaveFailed: 'Falha ao salvar',
settingsConflict: 'A configuração foi alterada em outra janela — tente novamente',
binaryNoPreview: 'Este tipo de arquivo não pode ser pré-visualizado',
downloadToView: 'Baixar para ver',
settingsSubagentTitle: 'Ativar automaticamente a página de Tarefas quando um subagente aparecer',
settingsSubagentDesc: 'Ativar a página de Tarefas quando a conversa atual gerar um novo subagente; em telas largas, expandir também o cartão lateral; em telas estreitas, não forçar a abertura da gaveta em tela cheia; desative para abri-la manualmente',
settingsJobsTitle: 'Ativar automaticamente a página de Tarefas quando houver uma nova tarefa em segundo plano',
settingsJobsDesc: 'Ativar a página de Tarefas sempre que uma nova tarefa em segundo plano aparecer na conversa atual (cada nova tarefa aciona a ativação); em telas largas, expandir também o cartão lateral; em telas estreitas, não forçar a abertura da gaveta em tela cheia; desative para abri-la manualmente',
settingsToolsTitle: 'Injetar ferramentas de terminal para o modelo',
settingsToolsDesc: 'Quando ativado, o modelo pode criar e operar terminais da barra lateral por meio das 8 ferramentas terminal_* (desativado por padrão)',
settingsFenceTitle: 'Controle de caminhos do workspace',
settingsFenceDesc: 'Ativado, os recursos de arquivos da barra lateral só alcançam caminhos dentro do workspace da sessão (padrão); desativado, arquivos de todo o host ficam acessíveis — scripts da página ganham o mesmo alcance enquanto isso',
fenceErrorReason: 'Este caminho está fora do workspace da sessão e foi bloqueado pelo controle',
fenceDisableAction: 'Desativar o controle do workspace',
settingsBottomTerminalTitle: 'Abrir um terminal automaticamente na primeira expansão do painel inferior',
settingsBottomTerminalDesc: 'Quando o painel inferior for expandido pela primeira vez em uma sessão, tente abrir uma nova aba de terminal lá (a cota de terminais ainda se aplica; ativado por padrão)',
settingsFontFamilyTitle: 'Família de fonte do terminal',
settingsFontFamilyDesc: 'Família de fonte personalizada do terminal (uma pilha CSS font-family como "JetBrains Mono", monospace; deixe vazio para seguir a fonte monoespaçada do tema)',
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
settingsFontSizeTitle: 'Tamanho da fonte do terminal',
settingsFontSizeDesc: 'Tamanho da fonte do terminal em px (9–32, padrão 13)',
settingsShellTitle: 'Caminho do shell',
settingsShellDesc: 'Shell iniciado para terminais de UI e do modelo (caminho absoluto ou executável puro). Vazio mantém a ordem legada: config.shell do yaml → $SHELL / shell de login / powershell.exe no Windows. Aplica-se aos terminais abertos depois',
settingsShellPlaceholder: 'ex.: /bin/zsh (vazio = automático)',
settingsShellArgsTitle: 'Argumentos do shell',
settingsShellArgsDesc: 'Argumentos explícitos do shell, separados por espaço; quando não vazios, substituem totalmente os padrões (mesmo contrato do shellArgs do yaml)',
settingsShellArgsPlaceholder: 'ex.: -l (vazio = padrões)',
settingsTabsTitle: 'Conteúdo da barra lateral',
settingsViewersTitle: 'Visualizadores de arquivos',
settingsGeneralTitle: 'Geral',
settingsPopup: 'Configurações do recurso',
settingsViewerCatchAll: 'Curinga: qualquer arquivo',
viewerMarkdown: 'Markdown',
viewerCode: 'Código',
viewerHtml: 'HTML',
browser: 'Navegador',
browserPlaceholder: 'Digite uma URL, ex.: example.com',
browserGo: 'Ir',
browserBack: 'Voltar',
browserForward: 'Avançar',
browserStart: 'Digite uma URL para começar a navegar (modo sandbox)',
browserBlockedScheme: 'Bloqueado: apenas URLs http/https são permitidas',
browserBlockedLoopback: 'Bloqueado: endereços locais e internos não podem ser navegados aqui',
browserInvalid: 'URL inválida',
htmlNoSandboxWarning: 'Sandbox desativado: este HTML roda com privilégios completos da interface (reative nas configurações)',
sandboxStatusOn: 'Modo sandbox: ativado · as páginas não podem acessar os dados da interface nem arquivos locais; logins e cookies de terceiros podem não funcionar',
sandboxUnlock: 'Desativar temporariamente (inseguro)',
sandboxRestore: 'Restaurar sandbox',
settingsHtmlDefaultUnsafeTitle: 'Abrir pré-visualizações de HTML sem sandbox por padrão (inseguro)',
settingsHtmlDefaultUnsafeDesc: 'Quando ativado, toda pré-visualização de HTML recém-aberta começa sem sandbox (mesma origem da interface — pode ler arquivos de sessão e APIs internas); a linha de status ainda oferece restauração em um toque',
settingsHtmlSandboxTitle: 'Desativar o sandbox da pré-visualização de HTML (inseguro)',
settingsHtmlSandboxDesc: 'Com o sandbox desativado, o HTML pré-visualizado roda com a mesma origem da interface: pode ler arquivos de sessão, armazenamento local e chamar APIs internas. Ative apenas para arquivos totalmente confiáveis',
settingsBrowserSandboxTitle: 'Desativar o sandbox do navegador (inseguro)',
settingsBrowserSandboxDesc: 'Com o sandbox desativado, qualquer site visitado roda com a mesma origem da interface: pode ler dados da sessão e agir como sua sessão conectada. Ative apenas para sites totalmente confiáveis',
settingsBrowserLoopbackTitle: 'Endereços locais permitidos',
settingsBrowserLoopbackDesc: 'Lista de permissões separada por vírgulas de endereços de loopback (ex. localhost:5174 ou 127.0.0.1:8080) que o navegador da barra lateral pode visitar; vazio bloqueia todos os endereços locais por padrão. A sandbox ainda se aplica — as páginas não podem ler dados da GUI',
settingsBrowserLoopbackPlaceholder: 'ex. localhost:5174, 127.0.0.1:8080',
browserOpenExternal: 'Abrir no navegador',
browserEmbedBlocked: '{host} se recusou a ser incorporado',
browserEmbedBlockedDesc: 'O site proíbe ser exibido dentro de outras páginas (X-Frame-Options / frame-ancestors), então não pode carregar na barra lateral. Abra-o diretamente no navegador.',
browserEmbedAnyway: 'Carregar mesmo assim',
subagent: 'Tarefas',
subagentMainAgent: 'Agente principal',
subagentEmpty: 'Nenhum subagente',
subagentEmptyDesc: 'Subagentes gerados sob o agente principal aparecerão aqui',
subagentInactive: 'Inativo',
subagentModeOneShot: 'De uso único',
subagentModeContinuable: 'Continuável',
subagentCount: '{count} subagentes',
subagentCountRunning: '{count} subagentes · {running} executando',
subagentThinking: 'Pensando…',
sideChat: 'Chat lateral (beta)',
sideChatNew: 'Novo tópico',
sideChatUntitled: 'Novo tópico',
sideChatEmpty: 'Nenhuma conversa lateral',
sideChatEmptyDesc: 'Cada conversa lateral é uma aba própria na faixa de abas — ela herda o contexto da sessão atual e nunca entra na conversa principal',
sideChatCreating: 'Criando conversa lateral…',
sideChatRetry: 'Tentar novamente',
sideChatThreads: 'Alternar tópico / novo',
sideChatSave: 'Salvar como nova sessão',
sideChatSaveTitle: 'Promover este tópico a uma sessão de nível superior na lista principal de sessões',
sideChatSaved: 'Salvo como nova sessão',
sideChatNoTurn: 'O salvamento está disponível após o primeiro turno concluído',
sideChatPendingDrop: 'A última pergunta não respondida não será incluída na sessão salva',
sideChatFirstPlaceholder: 'Faça a primeira pergunta — contexto herdado…',
sideChatComposerPlaceholder: 'Fazer uma pergunta de acompanhamento…',
sideChatThinking: 'Mergulhando fundo…',
sideChatThink: 'Pensamento',
sideChatInjection: 'Contexto injetado',
sideChatSend: 'Enviar',
sideChatCancelTitle: 'Abortar o turno em execução (o trabalho na fila é mantido)',
sideChatError: 'Erro no chat lateral: {message}',
sideChatTurnUsage: 'Entrada {input} tok · Saída {output} tok',
sideChatBlockCollapse: 'Recolher',
sideChatBlockCollapseAria: 'Recolher',
sideChatBlockExpand: 'Expandir {hidden} linhas',
sideChatBlockExpandAria: 'Expandir mais {hidden} linhas',
sideChatBlockSignal: 'Encerrado por sinal: {signal}',
sideChatBlockExitCode: 'Código de saída {code}',
sideChatBlockNoExitCode: "Terminou sem código de saída",
sideChatBlockRunning: 'Em execução',
sideChatBlockFailed: 'Falhou',
sideChatBlockDone: 'Concluído',
sideChatBlockNoOutput: '(sem saída)',
codeBlockTitle: 'Bloco de código',
codeBlockWrap: 'Quebrar linhas',
codeBlockUnwrap: 'Não quebrar linhas',
sideChatBlockWindow: '{shown} de {total} linhas',
sideChatConnDisconnected: 'Conexão perdida',
sideChatConnConnecting: 'Reconectando…',
sideChatConnRecovered: 'Conexão restabelecida',
sideChatConnReconnectAction: 'Reconectar agora',
sideChatConnRestartAction: 'Reiniciar conexão',
jobs: 'Tarefas em segundo plano',
jobsCount: '{count} tarefas em segundo plano',
jobsCountRunning: '{count} tarefas em segundo plano · {running} executando',
jobStatusRunning: 'Executando',
jobStatusStopping: 'Parando',
jobStatusCompleted: 'Concluída',
jobStatusKilled: 'Encerrada',
jobStatusFailed: 'Falhou',
jobDurationSeconds: '{seconds}s',
jobDurationMinutes: '{minutes}m {seconds}s',
jobDurationHours: '{hours}h {minutes}m',
jobViewOutput: 'Ver saída',
jobNoOutput: 'Sem saída ainda',
jobNotReadYet: 'Aguardando o modelo ler esta tarefa; a saída aparece aqui quando o modelo executa job_output',
jobOutputTruncated: 'Saída truncada',
jobOutputError: 'Falha ao ler a saída',
jobKill: 'Encerrar',
jobKillConfirm: 'Clique novamente para confirmar o encerramento',
jobKillError: 'Falha ao encerrar',
tasksViewGraph: 'Grafo do workflow',
tasksViewTree: 'Árvore',
tasksViewSwitchToGraph: 'Mudar para o grafo do workflow',
tasksViewSwitchToTree: 'Mudar para a árvore',
settingsViewModeTitle: 'Visualização padrão da página de tarefas',
settingsViewModeDesc: 'Como a página de tarefas é exibida ao abrir (o seletor na própria página ainda permite alternar pontualmente)',
settingsViewModeGraph: 'Grafo do workflow',
settingsViewModeGraphDesc: 'Grafo de nós em camadas, com zoom e deslocamento',
settingsViewModeTree: 'Árvore',
settingsViewModeTreeDesc: 'Árvore com indentação clássica, navegável pelo teclado',
tasksFoldCompleted: '✓ {count} concluídos',
tasksFoldOne: 'Dobrar nos concluídos',
tasksFoldExpand: 'Expandir os nós concluídos',
tasksFoldCollapse: 'Recolher os nós concluídos',
tasksZoomIn: 'Aproximar',
tasksZoomOut: 'Afastar',
tasksZoomFit: 'Ajustar à tela',
tasksNodeJump: 'Abrir transcrição',
tasksNodeDetail: 'Detalhes do nó',
workflowRun: 'Workflow',
tasksNodeState: 'Estado',
tasksNodeMode: 'Modo',
tasksNodeModel: 'Modelo',
tasksNodeTeamRole: 'Função na equipe',
tasksNodeActivity: 'Atividade recente',
tasksStateRunning: 'Em execução',
tasksStateIdle: 'Em espera',
tasksStateDone: 'Concluído',
tasksStateError: 'Erro',
tasksKindSubagent: 'Subagente',
tasksKindTeammate: 'Membro da equipe',
tasksKindWorkflow: 'Fluxo de trabalho',
teamBoard: 'Quadro de tarefas da equipe',
teamChip: 'Equipe {members} membros · {tasks} tarefas',
teamTasksEmpty: 'Ainda não há tarefas compartilhadas',
teamTaskCreate: 'Nova tarefa',
teamTaskSubject: 'Assunto',
teamTaskDescription: 'Descrição',
teamTaskOwner: 'Responsável',
teamTaskUnowned: 'Não reivindicada',
teamTaskPending: 'Pendente',
teamTaskInProgress: 'Em andamento',
teamTaskCompleted: 'Concluída',
teamTaskBlocked: 'Bloqueada',
teamTaskComplete: 'Concluir',
teamTaskReopen: 'Reabrir',
teamTaskDelete: 'Excluir',
teamTaskDeleteConfirm: 'Confirmar exclusão',
teamTaskEdit: 'Editar',
teamTaskSave: 'Salvar',
teamTaskCancel: 'Cancelar',
teamTaskConflict: 'A tarefa foi alterada por outra pessoa; atualizada',
teamTaskError: 'Operação falhou: {message}',
teamTaskDeleted: 'Excluída',
teamTaskActions: 'Ações da tarefa',
teamTaskDetail: 'Detalhes da tarefa',
teamTaskNoDescription: 'Ainda sem descrição — clique em “Editar” para adicionar',
teamTaskBlockedBy: 'Bloqueada por',
teamTaskSubjectPlaceholder: 'Descreva o trabalho em uma linha',
teamTaskDescriptionPlaceholder: 'Detalhes adicionais (opcional)',
teamFilterAll: 'Tudo',
tasksNodeTasks: 'Tarefas compartilhadas',
jobCopyOutput: 'Copiar saída',
jobCopied: 'Copiado',
jobFollowTail: 'Acompanhar as últimas linhas',
jobDragHint: 'Arraste para mover',
workflowRunning: 'Em execução',
workflowCompleted: 'Concluído',
workflowCancelled: 'Cancelado',
workflowFailed: 'Falhou',
workflowPhaseUnnamed: 'Fase sem nome',
workflowMembers: '{done}/{total} membros',
jobsAutoCollapsed: 'Recolhido automaticamente (muitos agentes)',
catalogLoadFailed: 'Falha ao carregar {count} branches',
addPluginsTabCard: 'Adicionar plugins de aba',
addPluginsTabCardDesc: 'Registrar uma nova página da barra lateral',
addPluginsViewerCard: 'Adicionar plugins de pré-visualização',
addPluginsViewerCardDesc: 'Registrar uma pré-visualização de tipo de arquivo',
addPluginsTabDesc: 'As páginas da barra lateral (abas) podem ser estendidas por plugins. Os plugins registram pelo serviço ctx.betterSidebar; clicar em Instalar copia o comando de instalação — cole-o em um terminal onde seu perfil do DSH vive e execute.',
addPluginsViewerDesc: 'Os visualizadores de arquivos podem ser estendidos por plugins. Os plugins registram pelo serviço ctx.betterSidebar; clicar em Instalar copia o comando de instalação — cole-o em um terminal onde seu perfil do DSH vive e execute.',
addPluginsBrowseMore: 'Navegue por mais plugins no GitHub (topic: dsh-better-sidebar)',
addPluginsSearch: 'Pesquisar por nome ou descrição do plugin…',
addPluginsNoMatch: 'Nenhum plugin corresponde',
addPluginsRecommended: 'Plugins recomendados',
addPluginsEmpty: 'Nenhum plugin selecionado ainda — publique o seu sob o topic do GitHub',
openPlugin: 'Abrir',
copyInstall: 'Copiar comando de instalação',
pluginOfficeDesc: 'Pré-visualização do pacote Office (.docx / .xlsx / .pptx) para o editor do better-sidebar, mantendo as bibliotecas pesadas de renderização do Office fora do bundle principal',
pluginFlowglassDesc: 'Fluxograma de sessão ao vivo com três faixas para usuário, assistente e chamadas de ferramenta, além de grupos paralelos, ramos de subagentes, drill-down e status ao vivo; registra uma aba nativa "Fluxograma" quando o better-sidebar está instalado e mantém a gaveta independente como fallback',
pluginGitForgeDesc: 'Aba Git Forge: biblioteca de contas GitHub/Gitea (e outras forges) + concessões por projeto + política rígida de push; os tokens ficam em secrets locais (nunca no contexto do modelo); ferramenta GitForge somente leitura e helper de credenciais HTTPS do agente',
pluginGithubWorkbenchDesc: 'Aba GitHub Workbench: árvore do repositório remoto + Issues / Pull requests / Actions com suporte completo de escrita — criar Issue/PR, comentar, editar, fechar/reabrir, merge squash·merge·rebase (confirmação reforçada), reexecutar/cancelar CI; o seletor de repositórios lista automaticamente os repositórios acessíveis e busca nos públicos; sem better-sidebar, faz fallback para um painel lateral direito independente',
pluginMdExportDesc: 'Adiciona um botão «Exportar» à barra de ferramentas do Markdown no better-sidebar: com um clique, renderiza o .md atual em HTML autônomo (tabelas/blocos de código/diagramas Mermaid embutidos, layout seguindo o tema de pré-visualização) e salva na mesma pasta, ou exporta para PDF pela caixa de impressão',
pluginCodeNavDesc: 'Navegação de pré-visualização de código: detecta a linguagem pelo tipo de arquivo e destaca a sintaxe, contorno de símbolos (filtros de classes/métodos/variáveis + salto em um clique) e busca no arquivo (todas as ocorrências destacadas, anterior/próxima, diferenciando maiúsculas) — assume a pré-visualização de arquivos de código no editor do better-sidebar',
pluginSuhuangScrollDesc: 'Conecta o Suhuang Scroll Runtime local às configurações do DSH e ao better-sidebar para configurar o modelo, testar a conexão e controlar a correção contínua; requer Suhuang Scroll Runtime e dsh-better-sidebar',
pluginBetterOverleafDesc: 'Aba Overleaf para better-sidebar: login direto pelo navegador via CDP (compatível com Chromium de terceiros), lista/troca de projetos, espelhos git locais em <workspace>/overleaf/, sincronização git bidirecional com fallback de API somente leitura e pré-visualização de arquivos pela bancada da barra lateral',
pluginGitRemotesDesc: 'Aba de remotos Git: branch/upstream/ahead-behind, fetch (prune opcional), pull ff-only e push apenas após confirmar na aba. Não substitui a aba interna de stage/commit do Git e não oferece force-push nem push automático pelo modelo',
pluginSentinelDesc: 'Despertar de agentes dirigido por condições: sensores de arquivo/processo/porta/HTTP/comando/webhook acordam sessões adormecidas quando as condições disparam; registra uma aba "Sentinelas" com a tabela de monitoramento global do servidor',
pluginServerDeckDesc: 'Painel de cartões de servidores: um cartão por host com status online, SO, tempo de atividade, uso de CPU/memória/disco e latência; clique num cartão para abrir um terminal xterm.js interativo; importação do ~/.ssh/config em um clique (aliases de hospedagem Git são ignorados). Registra a aba nativa «Servidores» quando o better-sidebar está instalado; caso contrário, mantém a gaveta lateral independente',
pluginSidebarQaDesc: 'Selecionar e perguntar: selecione o texto da conversa → pergunte no painel à direita → uma sessão de acompanhamento dedicada (❓acompanhamento) no mesmo workspace; um modelo rápido sem pensamento comprime o contexto principal e o injeta com a citação, sem interromper a conversa principal. Acompanhamentos aninham, continuam e arquivam',
pluginSidenoteDesc: 'Side chat estilo Codex + anotações de seleção: faça fork da sessão atual para um painel lateral persistente (arquivada fora da lista de sessões, várias instâncias, comando /side, sobrevive ao reload, o modelo segue a sessão principal); selecione o texto do assistant → badge numerado + editor de notas → um chip "N anotações" que acompanha a próxima mensagem, ou pergunte direto no side chat',
pluginSshTunnelDesc: 'Aba de túnel SSH: inventário de múltiplos hosts + concessões por projeto + chaves locais; ferramenta SSHManager (exec/SFTP/estratégias de sessão); terminal interativo central e SFTP de dois painéis',
pluginTurnReviewDesc: 'Um portão humano no diff do turno recém-terminado: Approve / Request changes por caminho com comentário opcional; caminhos agrupados por sessão principal / subagente / não atribuído; diff inline de snapshot-vs-atual antes de decidir. Sem fork, sem /rewind',
pluginVideoPreviewDesc: 'Pré-visualização inline de vídeo (.mp4/.webm/.mov/.mkv/.avi etc.) para o editor do better-sidebar, respaldada por uma rota de host /video dedicada com suporte a HTTP Range (206) — a barra de progresso funciona e os arquivos não são limitados pelo mediaLimit de 20MB',
pluginDocsPanelDesc: 'Documentos globais na barra lateral do DSH: leia suas próprias notas Markdown de qualquer workspace — uma lista de arquivos, um sumário, abrir no Chrome / VS Code e botões de copiar; o diretório de documentos é configurável (padrão ~/.dsh/docs)',
pluginEgoBrowserDesc: 'O navegador de agente para o DeepSeek Harness: 32 ferramentas ego_* controlam um Chromium real; uma aba nativa «ego browser» na barra lateral mostra ao vivo cada página visitada pelo agente — você pode clicar, arrastar e digitar para assumir. Registra a aba automaticamente quando o better-sidebar está presente; caso contrário, uma bolha flutuante',
pluginBilingualReaderDesc: 'Leia PDFs na barra lateral do DSH: visualização nativa de PDF, selecione o texto para traduzir com o LLM, com contexto e totalmente isolado da conversa principal',
changesRedactOn: "Máscara ativa: segredos exibidos como [REDACTED]; clique para desativar (por sua conta)",
changesRedactOff: "Máscara desativada: conteúdo exibido como está; clique para ativar",
changesRedactOnLabel: "Máscara",
changesRedactOffLabel: "Sem máscara",
changesRedactBanner: "Mascarado",
pluginSentinelName: 'dsh-sentinel Sistema de despertar',
pluginEgoBrowserName: 'ego-browser Navegador de agentes',
pluginBetterOverleafName: 'dsh-better-overleaf Aba Overleaf',
pluginDocsPanelName: 'dsh-docs-panel Documentos globais',
pluginFlowglassName: 'dsh-flowglass Flowglass',
pluginGitForgeName: 'dsh-git-forge Credenciais Git',
pluginGitRemotesName: 'dsh-git-remotes Remotos Git',
pluginGithubWorkbenchName: 'dsh-github-workbench Bancada GitHub',
pluginSidebarQaName: 'dsh-sidebar-qa Selecionar e perguntar',
pluginSidenoteName: 'dsh-sidenote Chat lateral',
pluginServerDeckName: 'dsh-server-deck Deck de servidores',
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
pluginSshTunnelName: 'dsh-ssh-tunnel Túnel SSH',
pluginTurnReviewName: 'dsh-turn-review Revisão do turno',
pluginBilingualReaderName: 'dsh-bilingual-reader Leitor bilíngue',
pluginOfficeName: 'Pré-visualização Office',
pluginMdExportName: 'Exportação Markdown',
pluginCodeNavName: 'Navegador de pré-visualização de código',
pluginVideoPreviewName: 'Pré-visualização de vídeo',
presetDshDesktopDesc: 'Modo avançado Electron (sem moldura): o macOS reserva 20px no topo; o Windows reserva 32px para a barra de título sem WCO',
}