Files
paseo/packages/app/src/i18n/resources/pt-BR.ts
T
Mohamed BoudraandGitHub c352632b74 Launch a terminal instead of a chat from New workspace (#2941)
* feat(app): launch a terminal from the New workspace screen

New workspace only ever started a chat agent. Empty workspaces existed but
were reachable only by submitting an empty composer, which nothing advertised,
and terminals could not be started from this screen at all. People concluded
Paseo did not support terminals.

Adds a launch chip to the meta row, shaped from the same ComboboxTrigger as
its neighbours, that chooses between Chat and a terminal. Terminal profiles
mark where a typed prompt goes with a {{{prompt}}} sentinel in their command
or args, substituted client-side before create_terminal_request, so the daemon
learns nothing new and the protocol is untouched. A profile without the
sentinel takes no input: the composer goes read-only and shows the exact
command, so there is nothing to type wrong.

Prompt forms come from each CLI's own --help. claude, codex, and pi take a
trailing positional; opencode's positional is the project directory, so it
uses --prompt=. Profiles predating the sentinel adopt the right form on read,
keyed on the command's base name rather than the profile id, because profiles
created in settings get generated ids.

* fix(app): stop existing launchers passing the prompt sentinel literally

Adoption made every caller of resolveTerminalProfiles see sentinel-bearing
args, but only New workspace substituted them. Pinned targets and the
workspace terminal menu forwarded profile.args straight through, so launching
Claude from an existing workspace ran `claude "{{{prompt}}}"` with that text as
the prompt.

Every launcher now goes through resolveTerminalProfileLaunch. Surfaces with
nowhere to type pass an empty prompt, which drops the prompt-only arg and
gives back the bare command they had before.

Also from the same review:

- Adoption skipped when args lead with a subcommand. `opencode run` takes a
  positional message rather than --prompt, and `codex login` takes no prompt at
  all. Only the first arg is checked, so `pi --thinking high` still adopts.
- Settings edits the persisted list again, not the adopted view. It writes the
  whole list back on any change, so resolving first baked read-time adoption
  into the user's config the moment they reordered a row.
- A hidden draft no longer names a workspace. Text typed for a prompt-taking
  profile stayed in state after switching to a read-only one and still seeded
  the generated title and branch.
- Windows .cmd escaping now has a round-trip test: a real cmd.exe runs a real
  .cmd shim that echoes its argv, covering metacharacters, an injection
  attempt, and newlines. The existing tests only asserted the command line we
  generate.
- Fixed an ENOTEMPTY flake in the terminal suite. kill() only signals, so the
  shell was still writing into $ZDOTDIR while its directory was being removed.
  Cleanup waits for exit instead.

* fix(app): keep the host and isolation accessible names stable

Wiring the new tooltips also replaced these two accessible names with the
tooltip copy, which broke `sidebar-project-grouping` at the host picker: its
selector is `getByRole("button", { name: "Host", exact: true })` and the button
had become "Choose the host". It timed out on both attempts in CI.

An accessible name identifies a control; a tooltip explains it. Conflating them
renamed a control that other surfaces address by name. The names go back to
what they were and the tooltips keep the "Choose the ..." copy.

* test(server): stop temp-dir teardown failing unrelated terminal tests

The ENOTEMPTY flake survived both earlier attempts. Waiting for the session to
exit shrank the window; retrying the remove did not close it either. The writes
come from processes zsh forks on the way out, which outlive the pty and answer
to nothing the test holds.

Teardown is now best-effort and logs what it left behind. A temp directory we
cannot remove is not a defect in the terminal code under test, and failing on it
reports the race against whichever assertion ran last, which is exactly how this
surfaced: as a flake in an unrelated zsh title test. 10 consecutive runs green.

Also replaces a cast in the Windows .cmd helper with a real narrow, so a change
to ResolvedTerminalCommand fails loudly there. Test files are excluded from
typecheck (tsconfig.server.json), so a cast in one is never checked at all.

* fix(app): keep terminal launch policy in its owning workflows

Profile adoption now parses known global option values before deciding whether argv already contains a positional. Workspace naming is derived inside the terminal workflow so hidden launch-only drafts cannot affect branch or title generation.

* fix(server): preserve cmd shim arguments through both parses

npm command shims forward %*, so metacharacters lose one escape layer before the target process receives argv. Exercise the production node-pty string command line against a forwarding shim, and only tolerate the known ENOTEMPTY teardown race.

* fix(server): stabilize Windows subprocess tests

* test(server): isolate Windows argv recorder output

* test(server): allow native watcher integration to settle
2026-08-07 14:08:22 +08:00

2382 lines
89 KiB
TypeScript

import type { TranslationResources } from "./en";
export const ptBR: TranslationResources = {
common: {
back: "Voltar",
loading: "Carregando...",
actions: {
back: "Voltar",
cancel: "Cancelar",
close: "Fechar",
copy: "Copiar",
dismiss: "Dispensar",
retry: "Tentar novamente",
search: "Buscar",
select: "Selecionar",
},
placeholders: {
search: "Buscar...",
},
empty: {
noResults: "Nenhum resultado encontrado",
noOptionsMatchSearch: "Nenhuma opção corresponde à sua busca.",
},
states: {
loading: "Carregando...",
starting: "Iniciando...",
copied: "Copiado",
copiedLabel: "{{label}} copiado",
downloadComplete: "Download concluído",
downloadFailed: "Falha no download",
},
errors: {
error: "Erro",
unableToSave: "Não foi possível salvar",
nameRequired: "O nome é obrigatório",
daemonUnavailable: "Daemon indisponível",
daemonClientUnavailable: "Cliente do daemon indisponível",
daemonClientDisconnected: "O cliente do daemon está desconectado",
noFileFound: "Nenhum arquivo encontrado para {{token}}",
unexpectedDictationError: "Ocorreu um erro inesperado ao processar o ditado.",
},
connectionStatus: {
online: "Online",
connecting: "Conectando",
offline: "Offline",
error: "Erro",
idle: "Ocioso",
},
},
shell: {
menu: {
toggleSidebar: "Alternar barra lateral",
open: "Abrir menu",
close: "Fechar menu",
},
commandCenter: {
placeholder: "Buscar comandos, espaços de trabalho e agentes...",
noMatches: "Nenhuma correspondência",
actions: "Ações",
workspaces: "Espaços de trabalho",
agents: "Agentes",
newAgent: "Novo agente",
addProject: "Adicionar projeto",
home: "Início",
modelGroupLabel: "Modelo",
modelSearchKeywords: "trocar modelo mudar modelo definir modelo selecionar modelo",
thinkingGroupLabel: "Raciocínio",
thinkingSearchKeywords: "raciocínio esforço pensamento",
modeGroupLabel: "Modo",
modeSearchKeywords: "acesso permissão aprovação modo",
planModeGroupLabel: "Modo plano",
planModeSearchKeywords: "plano planejamento modo plano",
fastModeGroupLabel: "Rápido",
fastModeSearchKeywords: "rápido velocidade baixa latência",
settingOn: "Ligado",
settingOff: "Desligado",
},
},
composer: {
placeholders: {
desktop: "Envie uma mensagem ao agente, marque @files ou use /commands e /skills",
mobile: "Mensagem, @files, /commands",
fallback: "Mensagem...",
terminal: "Prompt",
},
input: {
accessibilityLabel: "Enviar mensagem ao agente...",
terminalAccessibilityLabel: "Terminal prompt",
focusHint: "{{shortcut}} para focar",
addAttachment: "Adicionar anexo",
interruptAgent: "Interromper agente",
queueMessage: "Enfileirar mensagem",
sendAndInterrupt: "Enviar e interromper",
sendMessage: "Enviar mensagem",
queue: "Fila",
send: "Enviar",
},
cancel: {
cancelingAgent: "Cancelando agente",
stopAgent: "Parar agente",
interrupt: "Interromper",
},
voice: {
enableVoiceMode: "Ativar modo de voz",
voiceMode: "Modo de voz",
unmuteVoiceMode: "Ativar som do modo de voz",
muteVoiceMode: "Silenciar modo de voz",
stopDictation: "Parar ditado",
startDictation: "Iniciar ditado",
unmuteVoice: "Ativar som da voz",
muteVoice: "Silenciar voz",
dictation: "Ditado",
interruptBeforeVoice: "Interrompa o agente antes de iniciar o modo de voz",
},
attachments: {
addImage: "Adicionar imagem",
pasteImage: "Colar imagem",
addFile: "Enviar arquivo",
addIssueOrPr: "Adicionar issue ou PR",
addIssueOrPr_mr: "Adicionar issue ou MR",
dropImagesHere: "Solte imagens aqui",
dropFilesHere: "Solte arquivos aqui",
editQueuedMessage: "Editar mensagem na fila",
sendQueuedMessageNow: "Enviar mensagem da fila agora",
openImage: "Abrir anexo de imagem",
removeImage: "Remover anexo de imagem",
removeFile: "Remover anexo de arquivo",
openGithub: "Abrir {{kind}} {{number}}",
removeGithub: "Remover {{kind}} {{number}}",
element: "Elemento",
openBrowserElement: "Abrir anexo de elemento do navegador",
removeBrowserElement: "Remover anexo de elemento do navegador",
openReview: "Abrir anexo de revisão",
removeReview: "Remover anexo de revisão",
},
errors: {
failedToSend: "Falha ao enviar mensagem",
failedToCreateAgent: "Falha ao criar agente",
noHostSelected: "Nenhum host selecionado",
initialPromptRequired: "O prompt inicial é obrigatório",
alreadyLoading: "Já está carregando",
uploadFailed: "Falha ao enviar arquivo",
noClipboardImage: "Não há imagem na área de transferência",
pasteImageFailed: "Falha ao colar a imagem",
fileTooLarge: "{{fileName}} é grande demais (máximo {{size}})",
},
clientCommands: {
archiveAgent: "Arquivar o agente atual",
freshDraft: "Arquivar este agente e iniciar um novo rascunho",
},
github: {
searching: "Buscando...",
noResults: "Nenhum resultado encontrado.",
searchPlaceholder: "Buscar issues e PRs...",
searchPlaceholder_mr: "Buscar issues e MRs...",
title: "Anexar issue ou PR",
title_mr: "Anexar issue ou MR",
},
},
agentControls: {
provider: {
fallback: "Provedor",
select: "Selecionar provedor do agente",
},
thinking: {
title: "Raciocínio",
unknown: "Desconhecido",
extraHigh: "Extra alto",
select: "Selecionar opção de raciocínio",
selectWithValue: "Selecionar opção de raciocínio ({{value}})",
},
model: {
unknown: "Modelo desconhecido",
},
features: {
title: "Recursos",
open: "Abrir recursos do agente",
on: "Ativado",
off: "Desativado",
},
mode: {
title: "Modo",
searchPlaceholder: "Buscar modos...",
selectWithValue: "Selecionar modo do agente ({{value}})",
},
hints: {
thinking: "Modo de raciocínio",
model: "Alterar modelo",
mode: "Alterar modo de permissão",
},
},
agentStream: {
empty: "Comece a conversar com este agente...",
scrollToBottom: "Rolar para o fim",
historyLoadFailed: "Não foi possível carregar o histórico do agente",
permission: {
plan: "Plano",
required: "Permissão necessária",
deny: "Negar",
accept: "Aceitar",
implement: "Implementar",
question: "Como você quer prosseguir?",
proposedPlan: "Plano proposto",
},
},
agentPanel: {
states: {
notFound: "Agente não encontrado",
failedToLoad: "Falha ao carregar agente",
reconnecting: "Reconectando",
timelineSyncFailed: "Não foi possível atualizar o histórico do agente. Tentando novamente…",
archivingTitle: "Arquivando agente...",
archivingSubtitle: "Aguarde enquanto arquivamos este agente.",
},
unavailable: {
selectedHost: "Host selecionado",
unknownHost:
"Não é possível abrir este agente porque {{serverLabel}} não está configurado neste dispositivo.",
addHost:
"Adicione o host nas Configurações ou abra um agente em um servidor configurado para continuar.",
preparingSession: "Preparando sessão de {{serverLabel}}...",
connecting: "Conectando a {{serverLabel}}...",
showSoon: "Mostraremos este agente em instantes.",
showWhenOnline: "Mostraremos este agente quando o host estiver online.",
reconnectingTo: "Reconectando a {{serverLabel}}...",
showAgainWhenReachable:
"Mostraremos este agente novamente assim que o host estiver acessível.",
},
archived: {
callout: "Este agente está arquivado",
unarchive: "Desarquivar",
},
},
sessions: {
title: "Histórico de agentes",
empty: "Nenhuma sessão ainda",
actions: {
loadMore: "Carregar mais",
},
},
agentList: {
fallbackTitle: "Nova sessão",
dateSections: {
recent: "Recentes",
today: "Hoje",
yesterday: "Ontem",
thisWeek: "Esta semana",
thisMonth: "Este mês",
older: "Mais antigas",
},
status: {
initializing: "Iniciando",
idle: "Ocioso",
running: "Em execução",
error: "Erro",
closed: "Fechada",
},
badges: {
archived: "Arquivado",
pending: "{{count}} pendente(s)",
attention: "Atenção",
},
archiveSheet: {
hostOffline: "Host offline",
runningAgent: "Este agente ainda está em execução. Arquivá-lo interromperá o agente.",
archive: "Arquivar",
},
},
message: {
actions: {
copyCode: "Copiar código",
copyTurn: "Copiar turno",
copyMessage: "Copiar mensagem",
forkMenu: "Bifurcar mensagem",
forkInNewTab: "Bifurcar em uma nova aba",
forkInNewWorkspace: "Bifurcar em um novo workspace",
forkUnavailable: "Atualize o host para usar isto.",
forkMissingWorkspace: "Este agente não está em um workspace.",
forkFailed: "Falha ao bifurcar o chat",
openFile: "Abrir arquivo",
copied: "Copiado",
},
attachments: {
dismissImage: "Dispensar imagem",
closeImage: "Fechar imagem",
imageLoadFailed: "Não foi possível carregar a imagem",
imageUnavailable: "Imagem indisponível",
imagePreviewUnavailable: "Prévia da imagem indisponível.",
imagePreviewLoadFailed: "Não foi possível carregar a prévia da imagem.",
review: "Revisão",
commentsOne: "1 comentário",
commentsMany: "{{count}} comentários",
textAttachment: "Anexo de texto",
text: "Texto",
file: "Arquivo",
},
speak: {
header: "Falou",
},
activity: {
details: "Detalhes",
},
dictation: {
start: "Iniciar ditado por voz",
cancel: "Cancelar ditado",
retry: "Tentar ditado novamente",
insert: "Inserir transcrição",
insertAndSend: "Inserir transcrição e enviar",
failed: "Falha no ditado: {{error}}",
failedRetry: "Falha no ditado. Toque para tentar novamente.",
},
question: {
submit: "Enviar",
next: "Próximo",
answerPlaceholder: "Digite sua resposta...",
otherPlaceholder: "Outro...",
},
todo: {
title: "Tarefas",
empty: "Nenhuma tarefa ainda.",
},
compaction: {
loading: "Compactando...",
auto: "Contexto compactado automaticamente",
manual: "Contexto compactado manualmente",
withTokens: "Contexto compactado ({{tokens}}K tokens)",
completed: "Contexto compactado",
},
},
importSession: {
title: "Importar sessão",
filters: {
all: "Tudo",
},
status: {
connectHost: "Conecte-se a um host para importar sessões",
updateHost: "Atualize o host para importar sessões.",
noProviders: "Nenhum provedor importável está ativado.",
loading: "Carregando sessões recentes...",
failedAll: "Não foi possível carregar sessões recentes.",
failedProviders: "Não foi possível carregar sessões de {{providers}}.",
failedImport: "Não foi possível importar a sessão selecionada.",
},
actions: {
refresh: "Atualizar sessões",
},
preview: {
untitledSession: "Sessão sem título",
noPrompt: "Nenhuma prévia de prompt",
},
empty: {
noRecent: "Nenhuma sessão recente para importar.",
alreadyImported: "Todas as sessões recentes já foram importadas.",
noProviderSessions: "Nenhuma sessão de {{provider}} encontrada.",
},
row: {
importing: "Importando...",
},
},
workspace: {
route: {
loading: "Carregando workspace",
connecting: "Conectando",
hostOffline: "{{hostName}} está offline",
cannotReachHost: "Não é possível acessar {{hostName}}",
hostStatus: "Status do host: {{status}}",
needsHostUpgrade: "Atualize o host para restaurar este workspace",
manageHost: "Gerenciar host",
recovery: {
archivedTitle: "Workspace arquivado",
restoreDescription:
"{{workspaceName}} foi arquivado e sua worktree foi removida. Restaure a branch {{branch}} para abri-lo novamente.",
unarchiveDescription:
"{{workspaceName}} está arquivado. Desarquive-o para abri-lo novamente.",
restoreAction: "Restaurar",
unarchiveAction: "Desarquivar",
restoringTitle: "Restaurando workspace",
restoringAction: "Restaurando...",
unavailableTitle: "Workspace indisponível",
checkFailedTitle: "Não foi possível verificar o workspace",
},
},
hoverCard: {
scriptsAccessibility: "Scripts do workspace",
copyPath: "Copiar caminho",
copyBranchName: "Copiar nome da branch",
copied: "Copiado",
},
fileActions: {
openFile: "Abrir arquivo",
copyPath: "Copiar caminho",
download: "Baixar",
addToChat: "Adicionar ao chat",
moreActions: "Mais ações",
},
fileExplorer: {
sort: {
name: "Nome",
modified: "Modificado",
size: "Tamanho",
},
context: {
size: "Tamanho",
modified: "Modificado",
},
actions: {
back: "Voltar",
retry: "Tentar novamente",
refresh: "Atualizar arquivos",
refreshing: "Atualizando arquivos",
hideHiddenFiles: "Ocultar arquivos ocultos",
showHiddenFiles: "Mostrar arquivos ocultos",
},
empty: {
noFiles: "Nenhum arquivo",
noVisibleFiles: "Nenhum arquivo visível",
},
states: {
unavailable: "Workspace indisponível",
loading: "Carregando arquivos...",
},
errors: {
failedToListDirectory: "Falha ao listar diretório",
},
},
setup: {
descriptor: {
label: "Configuração",
completed: "Configuração concluída",
failed: "Falha na configuração",
workspace: "Configuração do workspace",
},
status: {
running: "Em execução",
completed: "Concluído",
failed: "Falhou",
waiting: "Aguardando saída da configuração",
},
waiting: "Configurando workspace...",
empty: {
noCommands: "Nenhum comando de configuração foi executado para este workspace.",
},
accessibility: {
noCommands: "Nenhum comando de configuração foi executado para este workspace",
log: "Log de configuração do workspace",
},
log: {
noOutput: "Nenhuma saída",
},
},
browser: {
unavailable: {
title: "O navegador é exclusivo do desktop",
subtitle: "Abra este workspace no Electron para usar o navegador integrado.",
},
session: "Sessão do navegador {{browserId}}",
controls: {
back: "Voltar",
forward: "Avançar",
stopLoading: "Parar carregamento",
refresh: "Atualizar",
browserUrl: "URL do navegador",
enterUrl: "Inserir URL",
openDevTools: "Abrir ferramentas de desenvolvedor do navegador",
cancelSelector: "Cancelar seletor de elemento",
annotateElement: "Anotar elemento",
screenshotElement: "Capturar elemento",
screenshotCopied: "Captura copiada para a área de transferência",
elementCopied: "Elemento copiado para a área de transferência",
screenshotFailed: "Não foi possível copiar a captura",
},
annotate: {
title: "Anotar elemento",
placeholder: "Mensagem ao agente sobre este elemento…",
submit: "Anexar",
cancel: "Cancelar",
},
devices: {
label: "Tamanho do dispositivo",
responsive: "Responsivo",
},
errors: {
failedToLoad: "Falha ao carregar página",
invalidUrl: "URL de navegador inválida",
unsupportedProtocol: "URL de navegador sem suporte bloqueada: {{protocol}}",
},
},
terminal: {
hostDisconnected: "Host não está conectado",
updateHost: "Atualize o host para usar o renderizador de terminal nativo.",
unableToSubscribe: "Não foi possível assinar o terminal",
},
tabs: {
loading: "Carregando...",
modified: "Alterações não salvas",
loadingAgentTitle: "Carregando título do agente",
emptyPane: "Nenhuma aba neste painel.",
fallback: {
newAgent: "Novo agente",
setup: "Configuração",
workspaceSetup: "Configuração do workspace",
terminal: "Terminal",
browser: "Navegador",
agent: "Agente",
workspace: "Workspace",
},
switcher: {
trigger: "Alternar abas ({{count}} abertas)",
title: "Alternar aba",
searchPlaceholder: "Buscar abas",
},
menu: {
openFor: "Abrir menu de {{label}}",
copyResumeCommand: "Copiar comando de retomada",
copyAgentId: "Copiar ID do agente",
copyTerminalId: "Copiar ID do terminal",
copyFilePath: "Copiar caminho do arquivo",
rename: "Renomear",
closeAbove: "Fechar abas acima",
closeBelow: "Fechar abas abaixo",
closeLeft: "Fechar à esquerda",
closeRight: "Fechar à direita",
closeOthers: "Fechar outras abas",
reloadAgent: "Recarregar agente",
reloadAgentTooltip: "Recarregue o agente para atualizar skills, MCPs ou status de login.",
close: "Fechar",
renameTerminal: "Renomear terminal",
renameAgent: "Renomear agente",
},
actions: {
newAgent: "Novo agente",
newTerminal: "Novo terminal",
preparingTerminal: "Preparando aba de terminal",
preparingTerminalTooltip: "Preparando terminal...",
newBrowser: "Novo navegador",
exitFocusMode: "Sair do modo de foco",
splitRight: "Dividir painel à direita",
splitDown: "Dividir painel abaixo",
terminalProfilesMenu: "Perfis de terminal",
editTerminalProfiles: "Editar perfis…",
pinTarget: "Fixar",
unpinTarget: "Desafixar",
},
explorer: {
open: "Abrir explorador",
close: "Fechar explorador",
toggle: "Alternar explorador",
changes: "Alterações",
files: "Arquivos",
},
toasts: {
copyFailed: "Falha ao copiar",
agentIdCopiedLabel: "ID do agente",
terminalIdCopiedLabel: "ID do terminal",
resumeCommandCopiedLabel: "comando de retomada",
filePathCopiedLabel: "Caminho do arquivo",
resumeIdUnavailable: "ID de retomada indisponível",
resumeCommandUnavailable: "Comando de retomada indisponível",
reloadingAgent: "Recarregando agente...",
reloadedAgent: "Agente recarregado",
failedToReloadAgent: "Falha ao recarregar agente",
},
confirmations: {
unsavedTitle: "Alterações não salvas",
unsavedMessage: "Esta aba tem alterações não salvas. Fechá-la descartará o rascunho.",
closeWithoutSaving: "Fechar sem salvar",
closePaneTitle: "Fechar painel?",
bulkUnsaved:
"{{count}} aba(s) têm alterações não salvas. Fechar descartará esses rascunhos.",
close: "Fechar",
cancel: "Cancelar",
archive: "Arquivar",
closeTerminalTitle: "Fechar terminal?",
closeTerminalMessage:
"Qualquer processo em execução neste terminal será interrompido imediatamente.",
archiveRunningAgentTitle: "Arquivar agente em execução?",
archiveRunningAgentMessage:
"Este agente ainda está em execução. Arquivá-lo interromperá o agente e fechará a aba.",
closeTabsLeftTitle: "Fechar abas à esquerda?",
closeTabsRightTitle: "Fechar abas à direita?",
closeOtherTabsTitle: "Fechar outras abas?",
bulk: {
all: "Isso vai arquivar {{agents}} agente(s), fechar {{terminals}} terminal(ais) e fechar {{tabs}} aba(s). Qualquer processo em execução em um terminal fechado será interrompido imediatamente.",
agentsAndTerminals:
"Isso vai arquivar {{agents}} agente(s) e fechar {{terminals}} terminal(ais). Qualquer processo em execução em um terminal fechado será interrompido imediatamente.",
terminalsAndTabs:
"Isso vai fechar {{terminals}} terminal(ais) e fechar {{tabs}} aba(s). Qualquer processo em execução em um terminal fechado será interrompido imediatamente.",
agentsAndTabs: "Isso vai arquivar {{agents}} agente(s) e fechar {{tabs}} aba(s).",
terminals:
"Isso vai fechar {{terminals}} terminal(ais). Qualquer processo em execução em um terminal fechado será interrompido imediatamente.",
tabs: "Isso vai fechar {{tabs}} aba(s).",
agents: "Isso vai arquivar {{agents}} agente(s).",
},
},
},
header: {
actions: {
workspaceActions: "Ações do workspace",
newAgent: "Novo agente",
newTerminal: "Novo terminal",
newBrowser: "Nova aba de navegador",
importSession: "Importar sessão",
copyPath: "Copiar caminho do workspace",
copyBranchName: "Copiar nome da branch",
showSetup: "Mostrar configuração",
},
toasts: {
workspacePathUnavailable: "O caminho do workspace ainda não está disponível",
branchNameUnavailable: "Nome da branch indisponível",
terminalQueued: "Preparando workspace, abrindo terminal quando estiver pronto...",
workspacePathCopiedLabel: "Caminho do workspace",
branchNameCopiedLabel: "Nome da branch",
},
},
scripts: {
title: "Scripts",
actions: {
chooseUrl: "Escolher URL",
copyUrl: "Copiar URL",
openService: "Ver serviço",
restart: "Reiniciar",
run: "Executar",
stop: "Parar",
view: "Ver terminal",
},
accessibility: {
trigger: "Scripts do workspace",
openService: "Ver serviço {{scriptName}}",
viewTerminal: "Ver terminal de {{scriptName}}",
runScript: "Executar script {{scriptName}}",
stopScript: "Parar {{scriptName}}",
restartScript: "Reiniciar {{scriptName}}",
copyUrl: "Copiar URL de {{scriptName}}",
chooseUrl: "Escolher URL para {{scriptName}}",
script: "script {{scriptName}}",
},
routes: {
public: "Proxy reverso",
paseo: "Memorable",
direct: "Direta",
},
states: {
exitCode: "saída {{code}}",
startFailed: "Falha ao iniciar {{scriptName}}",
stopFailed: "Falha ao parar {{scriptName}}",
},
},
git: {
actions: {
moreOptions: "Mais opções",
moreActions: "Mais ações",
commit: {
label: "Commit",
pending: "Fazendo commit...",
success: "Commit concluído",
},
pull: {
label: "Pull",
pending: "Fazendo pull...",
success: "Pull concluído",
},
push: {
label: "Push",
pending: "Fazendo push...",
success: "Push concluído",
},
pullAndPush: {
label: "Pull e push",
pending: "Fazendo pull e push...",
success: "Pull e push concluídos",
},
viewPr: "Ver PR",
createPr: {
label: "Criar PR",
pending: "Criando PR...",
success: "PR criada",
label_mr: "Criar MR",
pending_mr: "Criando MR...",
success_mr: "MR criada",
},
mergeBranch: {
label: "Fazer merge localmente",
pending: "Fazendo merge...",
success: "Mergeada",
},
mergeFromBase: {
label: "Atualizar a partir de {{baseRef}}",
pending: "Atualizando...",
success: "Atualizado",
},
archive: {
label: "Arquivar workspace",
pending: "Arquivando...",
success: "Arquivado",
},
mergePr: {
squash: "Merge",
merge: "Merge",
rebase: "Merge",
pending: "Fazendo merge da PR...",
success: "PR mergeada",
squash_mr: "Merge",
merge_mr: "Merge",
rebase_mr: "Merge",
pending_mr: "Fazendo merge da MR...",
success_mr: "MR mergeada",
},
viewPr_mr: "Ver MR",
autoMerge: {
enableSquash: "Merge automático",
enableMerge: "Merge automático",
enableRebase: "Merge automático",
enabled: "Merge automático ativado",
enabling: "Ativando merge automático...",
disabling: "Desativando merge automático...",
disabled: "Merge automático desativado",
},
unavailable: {
viewPrNoForge:
"Ver {{noun}} não está disponível agora porque o {{brand}} não está conectado",
pullNoRemote:
"Pull não está disponível aqui porque esta branch ainda não está conectada a um remoto",
pullDirty:
"Pull não está disponível enquanto há alterações locais. Faça commit ou stash primeiro",
pullUpToDate: "Pull não está disponível porque esta branch já está atualizada",
pushNoRemote:
"Push não está disponível aqui porque esta branch ainda não está conectada a um remoto",
pushBehind:
"Push ainda não está disponível porque há alterações mais recentes para trazer primeiro",
pushNothing: "Push não está disponível porque não há nada novo para enviar",
pullAndPushNoRemote:
"Pull e push não estão disponíveis aqui porque esta branch ainda não está conectada a um remoto",
pullAndPushDirty:
"Pull e push não estão disponíveis enquanto há alterações locais. Faça commit ou stash primeiro",
pullAndPushNoIncoming:
"Pull e push não estão disponíveis porque não há alterações de entrada para puxar primeiro",
pullAndPushInSync:
"Pull e push não estão disponíveis porque esta branch já está sincronizada",
pullAndPushNothingToPush:
"Pull e push não estão disponíveis porque não há nada novo para enviar depois do pull",
createPrNoForge:
"Criar {{noun}} não está disponível agora porque o {{brand}} não está conectado",
createPrNoCommits:
"Criar PR não está disponível porque esta branch ainda não tem commits novos",
mergeNoBase: "Merge não está disponível porque não foi possível determinar a branch base",
mergeDirty:
"Merge não está disponível enquanto há alterações locais. Faça commit ou stash primeiro",
mergeNothing:
"Merge não está disponível porque esta branch ainda não tem nada novo para merge",
updateNoBase:
"Atualizar não está disponível porque não foi possível determinar a branch base",
updateDirty:
"Atualizar não está disponível enquanto há alterações locais. Faça commit ou stash primeiro",
updateCurrent:
"Atualizar não está disponível porque esta branch já está atualizada com {{baseRef}}",
mergePrNoGithub:
"Merge da PR não está disponível agora porque o GitHub não está conectado",
archiveNotWorktree:
"Arquivar não está disponível aqui porque este workspace não foi criado como um worktree do Paseo",
mergePrNoForge:
"Merge da {{noun}} não está disponível agora porque o {{brand}} não está conectado",
mergePrMissing: "Merge da PR não está disponível porque ainda não há uma pull request",
mergePrDraft: "Merge da PR não está disponível porque a pull request ainda é um rascunho",
mergePrMerged: "Merge da PR não está disponível porque a pull request já foi mergeada",
mergePrClosed: "Merge da PR não está disponível porque a pull request está fechada",
mergePrConflicts: "Merge da PR não está disponível porque a pull request tem conflitos",
mergePrQueue:
"Merge da PR não está disponível aqui porque este repositório usa uma merge queue",
mergePrNotReady:
"Merge da {{noun}} não está disponível até o {{brand}} informar que a {{noun}} está pronta para merge",
autoMergeCannotDisable:
"O merge automático está ativado, mas esta conta não pode desativá-lo",
},
toasts: {
failedCommit: "Falha ao fazer commit",
failedPull: "Falha ao fazer pull",
failedPush: "Falha ao fazer push",
failedPullAndPush: "Falha ao fazer pull e push",
failedCreatePr: "Falha ao criar PR",
failedMergePr: "Falha ao fazer merge da PR",
failedEnableAutoMerge: "Falha ao ativar merge automático",
failedDisableAutoMerge: "Falha ao desativar merge automático",
baseRefUnavailable: "Ref base indisponível",
failedMerge: "Falha ao fazer merge",
failedMergeFromBase: "Falha ao fazer merge da base",
},
archiveWarning: {
title: 'Arquivar "{{workspaceName}}"?',
confirm: "Arquivar",
cancel: "Cancelar",
uncommittedChanges: "Alterações sem commit",
uncommittedChangesWithDiff: "Alterações sem commit ({{diffStat}})",
addedLine: "{{count}} linha adicionada",
addedLines: "{{count}} linhas adicionadas",
deletedLine: "{{count}} linha removida",
deletedLines: "{{count}} linhas removidas",
unpushedCommit: "{{count}} commit não enviado",
unpushedCommits: "{{count}} commits não enviados",
},
},
diff: {
openChangesTab: "Abrir a aba Alterações",
closeChangesTab: "Fechar a aba Alterações",
binaryFile: "Arquivo binário",
tooLarge: "Diff grande demais para exibir",
previewTooLargeTitle: "Este diff é grande demais para visualizar",
previewTooLargeDescription: "Reduza a comparação para visualizá-la aqui",
unified: "Diff unificado",
split: "Diff lado a lado",
switchToUnified: "Alternar para diff unificado",
switchToSplit: "Alternar para diff lado a lado",
showTreeView: "Mostrar árvore de pastas",
showFlatView: "Mostrar lista plana de arquivos",
options: "Opções do diff",
hideWhitespace: "Ocultar espaços em branco",
showWhitespace: "Mostrar espaços em branco",
scrollLongLines: "Rolar linhas longas",
wrapLongLines: "Quebrar linhas longas",
collapseAll: "Recolher todos os arquivos",
expandAll: "Expandir todos os arquivos",
collapseAllFolders: "Recolher todas as pastas",
expandAllFolders: "Expandir todas as pastas",
refreshing: "Atualizando",
refresh: "Atualizar",
refreshState: "Atualizar estado do git e do {{brand}}",
failedRefresh: "Falha ao atualizar estado do git.",
emptyHiddenWhitespace: "Nenhuma alteração visível após ocultar espaços em branco",
emptyUncommitted: "Nenhuma alteração sem commit",
emptyAgainstBase: "Nenhuma alteração vs {{baseRef}}",
checkingRepository: "Verificando repositório...",
notRepository: "Não é um repositório git",
diffMode: "Modo de diff",
uncommitted: "Sem commit",
committed: "Com commit",
branchUnknown: "Desconhecido",
base: "base",
newFile: "Novo",
deletedFile: "Excluído",
commits: {
title: "Commits",
countLabel: "{{count}} commits do espaço de trabalho",
noneAhead: "Ainda não há commits à frente de {{baseRef}}",
fileDiffEmpty: "Nenhuma alteração para exibir",
fileDiffError: "Falha ao carregar diff do arquivo",
loading: "Carregando commits…",
loadError: "Falha ao carregar commits",
empty: "Ainda não há commits",
},
},
openInEditor: {
open: "Abrir",
chooseEditor: "Escolher editor",
openIn: "Abrir workspace em {{target}}",
openFileIn: "Abrir {{fileName}} em {{target}}",
failedOpen: "Falha ao abrir workspace",
},
pr: {
actions: {
viewPullRequest: "Ver",
openOn: "Abrir no {{brand}}",
},
checksSummary: {
passedLabel: "passou",
failedLabel: "falhou",
runningLabel: "em andamento",
passedAccessible: "Verificações aprovadas",
failedAccessible: "Verificações com falha",
runningAccessible: "Verificações em andamento",
},
sections: {
checks: "Verificações",
pipeline: "Pipeline",
reviews: "Revisões",
},
empty: {
noJobs: "Sem jobs",
loadingPipeline: "Carregando pipeline...",
pipelineJobsLoadFailed: "Não foi possível carregar os jobs do pipeline",
allowedToFail: "permitido falhar",
},
approvals: "{{given}} de {{required}} aprovações",
accessibility: {
pullRequest: "Pull request #{{number}}",
pullRequest_mr: "Merge request !{{number}}",
},
states: {
draft: "Rascunho",
merged: "Mergeada",
closed: "Fechada",
open: "Aberta",
},
activity: {
commented: "Comentou",
approved: "Aprovado",
requestedChanges: "Solicitou alterações",
reviewed: "Revisado",
},
time: {
justNow: "agora mesmo",
},
thread: {
discussion: "Tópico de discussão",
},
errors: {
statusLoadFailed: "Não foi possível carregar o status da pull request",
activityLoadFailed: "Não foi possível carregar a atividade da pull request",
},
},
forgeSetup: {
installCli: "Instale a CLI {{cli}} para usar os recursos do {{brand}}.",
signIn: "Execute {{command}} para usar os recursos do {{brand}}.",
generic: "Configure o {{brand}} neste host para usar seus recursos.",
},
},
},
sidebar: {
display: {
trigger: "Preferências de exibição",
heading: "Exibição",
grouping: {
label: "Agrupamento",
project: "Projeto",
status: "Status",
},
titleSource: {
label: "Título",
title: "Título",
branch: "Nome da branch",
},
show: {
label: "Mostrar",
host: "Host",
changeRequest: "Pull request",
checks: "Verificações",
services: "Serviços",
diff: "Estatísticas de diff",
timestamp: "Última atividade",
},
checks: {
iconAndText: "Ícone e texto",
icon: "Somente ícone",
none: "Oculto",
},
hostFilter: {
label: "Host",
all: "Todos os hosts",
},
},
pinned: {
title: "Fixados",
},
host: {
noHost: "Nenhum host",
switchTitle: "Trocar host",
searchPlaceholder: "Buscar hosts...",
},
actions: {
addProject: "Adicionar projeto",
newWorkspace: "Novo workspace",
hosts: "Hosts",
home: "Início",
settings: "Configurações",
closeSidebar: "Fechar barra lateral",
},
help: {
trigger: "Ajuda e suporte",
sectionHelp: "Ajuda",
diagnostics: "Executar diagnóstico",
shortcuts: "Atalhos de teclado",
reportIssue: "Relatar um problema",
discord: "Discord",
github: "Criar issue no GitHub",
whatsNew: "Novidades",
version: "Paseo {{version}}",
},
sections: {
sessions: "Histórico",
schedules: "Agendamentos",
},
worktreeSetup: {
title: "Configurar scripts de worktree",
description:
"Adicione comandos de configuração para que novos worktrees instalem dependências e se preparem automaticamente.",
openProjectSettings: "Abrir configurações do projeto",
},
project: {
actions: {
menu: "Ações do projeto",
openSettings: "Abrir configurações do projeto",
openNewWindow: "Abrir em nova janela",
openNewWindowFailed: "Não foi possível abrir uma nova janela",
openFolder: "Open in file manager",
openFolderFailed: "Couldn't open folder",
remove: "Remover projeto",
removing: "Removendo...",
},
confirmations: {
removeTitle: "Remover projeto?",
removeMessage:
'Remover "{{projectName}}" da barra lateral?\n\nOs arquivos no disco não serão alterados.',
removeConfirm: "Remover",
cancel: "Cancelar",
},
toasts: {
hostDisconnected: "Host não está conectado",
removeFailed: "Falha ao remover alguns workspaces",
updateHostToRemove: "Atualize o host para remover projetos.",
},
empty: {
title: "Nenhum projeto ainda",
description: "Adicione um projeto para começar",
},
},
workspace: {
status: {
serviceRunning: "Serviço {{name}} em execução",
serviceUnhealthy: "Serviço {{name}} com falha",
creating: "Criando...",
},
actions: {
menu: "Ações do workspace",
newWorkspace: "Novo workspace",
showMore: "Mostrar mais",
showLess: "Mostrar menos",
createWorkspaceFor: "Criar um novo workspace para {{projectName}}",
copyPath: "Copiar caminho",
copyBranchName: "Copiar nome da branch",
rename: "Renomear workspace",
pin: "Fixar no topo",
unpin: "Desafixar",
archive: "Arquivar",
archiveWorkspace: "Arquivar workspace",
hideFromSidebar: "Ocultar da barra lateral",
archiving: "Arquivando...",
hiding: "Ocultando...",
},
confirmations: {
hideTitle: "Ocultar workspace?",
hideMessage:
'Ocultar "{{workspaceName}}" da barra lateral?\n\nOs arquivos no disco não serão alterados.',
hideConfirm: "Ocultar",
cancel: "Cancelar",
},
rename: {
title: "Renomear workspace",
submit: "Renomear",
invalidBranchName: "Nome de branch inválido",
},
toasts: {
workspacePathUnavailable: "Caminho do workspace indisponível",
pathCopied: "Caminho copiado",
branchNameCopied: "Nome da branch copiado",
hostDisconnected: "Host não está conectado",
hideFailed: "Falha ao ocultar workspace",
archiveFailed: "Falha ao arquivar workspace",
},
},
},
newWorkspace: {
title: "Novo workspace",
create: "Criar",
isolation: {
local: "Local",
worktree: "Novo worktree",
label: "Isolamento",
},
fields: {
project: "Projeto",
base: "Base",
baseNotApplicable: "Não aplicável",
},
titlePlaceholder: "Título (opcional)",
errors: {
hostDisconnected: "Host não está conectado",
createWorktreeFailed: "Falha ao criar worktree",
composerStateRequired: "O estado do composer é obrigatório",
selectModel: "Selecione um modelo",
},
tooltips: {
project: "Choose the project",
host: "Choose the host",
isolation: "Choose the isolation level",
startingRef: "Escolha de onde começar",
launch: "Choose what to launch",
},
refPicker: {
startingRef: "Ref inicial",
intoBase: "em {{baseRef}}",
searching: "Buscando...",
noMatchingRefs: "Nenhuma ref correspondente.",
searchPlaceholder: "Buscar branches e PRs",
title: "Começar de",
},
launch: {
title: "What to launch",
chat: "Chat",
terminal: "Terminal",
manageProfiles: "Manage profiles",
submit: "Launch",
promptPlaceholder: "Prompt {{name}}",
commandPlaceholder: "Run a command, or leave empty for a blank terminal",
},
},
desktop: {
quitting: {
title: "Saindo do Paseo...",
detail: "Parando o daemon local.",
},
daemon: {
title: "Daemon",
status: {
title: "Status",
builtInOnly: "Apenas o daemon desktop integrado é exibido aqui",
running: "em execução",
notRunning: "não está em execução",
pid: "PID {{pid}}",
},
management: {
title: "Gerenciar daemon integrado",
hint: "Permitir que o Paseo inicie e pare o daemon integrado",
pauseTitle: "Pausar daemon integrado",
pauseMessage:
"Isso vai parar o daemon integrado imediatamente. Agentes e terminais em execução conectados ao daemon integrado serão interrompidos.",
pauseAndStop: "Pausar e parar",
registrationFailed:
"O daemon integrado foi iniciado, mas o Paseo não conseguiu salvar a conexão localhost. Desative e reative o gerenciamento do daemon ou adicione localhost manualmente.",
pausedStopFailed:
"O gerenciamento do daemon integrado foi pausado, mas o Paseo não conseguiu parar o daemon.",
updateFailed: "Não foi possível atualizar o gerenciamento do daemon integrado.",
},
keepRunning: {
title: "Manter daemon em execução ao sair",
hint: "O daemon continua em execução quando você sai do Paseo",
},
logs: {
title: "Arquivo de log",
modalTitle: "Logs do daemon",
unavailable: "Caminho do log indisponível",
empty: "(arquivo de log vazio)",
copied: "Caminho do log copiado.",
copyFailed: "Não foi possível copiar o caminho do log.",
open: "Abrir logs",
copyPath: "Copiar caminho",
},
fullStatus: {
title: "Status completo",
modalTitle: "Status do daemon",
hint: "Executa `paseo daemon status` e mostra a saída",
view: "Ver status",
copied: "Status copiado para a área de transferência.",
fetchFailed: "Falha ao buscar status do daemon: {{message}}",
},
advancedSettings: "Configurações avançadas",
openAdvancedSettings: "Abrir configurações avançadas do daemon",
versionMismatch:
"As versões do app e do daemon não coincidem. Atualize ambos para a mesma versão para a melhor experiência.",
loadFailed: "Não foi possível carregar o status do daemon desktop.",
},
updates: {
status: {
checking: "Verificando atualizações do app...",
installing: "Instalando atualização do app...",
upToDate: "O app está atualizado.",
upToDateWithLastChecked: "Atualizado. Última verificação às {{time}}.",
pending: "Avisaremos quando a atualização estiver pronta.",
pendingWithLastChecked:
"Avisaremos quando a atualização estiver pronta. Última verificação às {{time}}.",
pendingWithVersion: "Atualização encontrada: {{version}}. Baixando...",
pendingWithVersionAndLastChecked:
"Atualização encontrada: {{version}}. Baixando... Última verificação às {{time}}.",
availableWithVersion: "Atualização pronta: {{version}}",
availableWithVersionAndLastChecked:
"Atualização pronta: {{version}}. Última verificação às {{time}}.",
available: "Há uma atualização do app pronta para instalar.",
availableWithLastChecked:
"Há uma atualização do app pronta para instalar. Última verificação às {{time}}.",
installed: "Atualização do app instalada. Reinicialização obrigatória.",
failed: "Falha ao atualizar o app.",
idle: "O status de atualização ainda não foi verificado.",
},
installError: "Não foi possível instalar a atualização do app desktop.",
callout: {
installingTitle: "Instalando atualização",
failedTitle: "Falha na atualização",
availableTitle: "Atualização disponível",
genericError: "Algo deu errado.",
whatsNew: "Novidades",
installingAction: "Instalando...",
installAndRestart: "Instalar e reiniciar",
installingDescription: "Instalando e reiniciando...",
versionReady: "{{version}} está pronta para instalar.",
newVersionReady: "Uma nova versão está pronta para instalar.",
restartWarning:
"Atualizar o app vai interromper agentes em execução e fechar sessões de terminal.",
},
},
settings: {
loadFailed: "Não foi possível carregar as configurações do desktop.",
saveFailed: "Não foi possível salvar as configurações do desktop.",
},
rosetta: {
title: "Baixar a build para Apple Silicon",
runningIntel: "Você está executando a build Intel do Paseo pelo Rosetta no Apple Silicon.",
highCpu: "Isso causa alto uso de CPU. Baixe a build para Apple Silicon para corrigir.",
download: "Baixar",
},
permissions: {
notifications: {
allowed: "As notificações são permitidas pelo sistema operacional.",
denied: "As notificações estão negadas nas configurações do sistema.",
notGranted: "As notificações ainda não foram concedidas.",
webOnly: "O status de notificações desktop só está disponível no runtime web.",
supported: "Notificações desktop são compatíveis.",
unsupported: "Notificações desktop não são compatíveis nesta plataforma.",
apiUnavailable: "A Web Notification API não está disponível neste ambiente.",
requestsWebOnly: "Solicitações de notificação desktop só estão disponíveis no runtime web.",
requestUnavailable: "Web Notification API requestPermission() está indisponível.",
requestFailed: "Falha ao solicitar permissão de notificação: {{message}}",
unexpectedState: "Estado inesperado de permissão de notificação: {{state}}",
},
microphone: {
webOnly: "O status do microfone desktop só está disponível no runtime web.",
navigatorUnavailable: "Navigator não está disponível neste ambiente.",
granted: "O acesso ao microfone foi concedido.",
denied: "O acesso ao microfone está negado nas configurações do sistema.",
notGranted: "A permissão do microfone ainda não foi concedida.",
unexpectedState: "Estado inesperado de permissão do microfone: {{state}}",
statusApiUnavailable:
"A API de status do microfone não está disponível neste runtime. Use Solicitar para verificar o acesso.",
queryFailed: "Falha ao consultar o status do microfone: {{message}}",
captureUnavailable: "A captura do microfone não está disponível neste ambiente.",
permissionApiUnavailable:
"A API de status de permissão não está disponível. Use Solicitar para verificar o acesso.",
requestsWebOnly: "Solicitações de microfone desktop só estão disponíveis no runtime web.",
captureApiUnavailable: "A API de captura do microfone não está disponível neste ambiente.",
requestDenied: "A permissão do microfone foi negada pelo usuário ou pelo sistema.",
noDevice: "Nenhum dispositivo de microfone foi encontrado.",
requestFailed: "Falha ao solicitar permissão do microfone: {{message}}",
},
empty: {
notifications: "O status das notificações ainda não foi verificado.",
microphone: "O status do microfone ainda não foi verificado.",
},
testNotification: {
title: "Teste de notificação do Paseo",
body: "Se você consegue ver isto, as notificações desktop funcionam.",
notDelivered:
"A notificação não foi entregue. Verifique Ajustes do Sistema > Notificações.",
failed: "Falha ao enviar notificação.",
},
},
integrations: {
cli: {
statusFailed: "Não foi possível verificar o status de instalação da CLI.",
installFailed: "Não foi possível instalar a CLI do Paseo.",
},
skills: {
statusFailed: "Não foi possível verificar o status das skills de orquestração.",
installFailed: "Não foi possível instalar as skills de orquestração.",
updateFailed: "Não foi possível atualizar as skills de orquestração.",
uninstallFailed: "Não foi possível desinstalar as skills de orquestração.",
saveSelectionFailed: "Não foi possível salvar a seleção de skills de orquestração.",
},
},
},
rootError: {
kicker: "Algo deu errado",
title: "O Paseo encontrou um problema.",
body: "Tente novamente para recarregar o app. Se isso continuar acontecendo, inclua os detalhes abaixo ao relatar o problema.",
details: "Detalhes",
},
startup: {
errorTitle: "Algo deu errado",
errorDescription:
"O servidor local falhou ao iniciar. Se isso continuar acontecendo, reporte o problema no GitHub e inclua os logs abaixo.",
logs: {
loading: "Carregando logs do daemon...",
unavailable: "Nenhum log do daemon disponível.",
loadFailed: "Não foi possível carregar logs do daemon: {{message}}",
},
},
openProject: {
tiles: {
addProject: {
title: "Adicionar um projeto",
description: "Abra uma pasta na sua máquina",
},
importSession: {
title: "Importar sessão",
description: "Importe sessões externas recentes da CLI",
},
setupProviders: {
title: "Configurar provedores",
description: "Configure Claude Code, Codex e outros",
},
pairDevice: {
title: "Parear dispositivo",
description: "Conecte seu celular a este daemon",
},
},
},
projectPicker: {
placeholder: "Digite para pesquisar...",
browse: "Procurar…",
opening: "Abrindo projeto...",
searching: "Buscando...",
empty: "Comece digitando um caminho",
errors: {
directory_not_found: "Diretório não encontrado.",
open_failed: "Não foi possível abrir o projeto.",
},
openPath: "Abrir caminho",
},
branchSwitcher: {
currentBranch: "Branch atual: {{branchName}}. Pressione para trocar de branch.",
placeholder: "Trocar branch...",
searchPlaceholder: "Filtrar branches...",
empty: "Nenhuma branch encontrada.",
title: "Trocar branch",
uncommittedTitle: "Alterações sem commit",
uncommittedMessage: "Você tem alterações sem commit. Fazer stash antes de trocar de branch?",
stashAndSwitch: "Fazer stash e trocar",
failedToStash: "Falha ao fazer stash das alterações",
failedToSwitch: "Falha ao trocar de branch",
restoreStashTitle: "Restaurar alterações em stash?",
restoreStashMessage:
"Esta branch tem alterações em stash de uma sessão anterior. Deseja restaurá-las?",
restore: "Restaurar",
later: "Depois",
stashRestored: "Alterações em stash restauradas",
},
agentAutocomplete: {
searchingWorkspace: "Buscando workspace...",
loadingCommands: "Carregando comandos...",
noFiles: "Nenhum arquivo ou diretório encontrado",
noCommands: "Nenhum comando encontrado",
failedToLoad: "Falha ao carregar",
},
loadOlderHistory: {
failed: "Não foi possível carregar o histórico mais antigo",
},
imageAttachmentPicker: {
permissionTitle: "Permissão obrigatória",
permissionMessage: "Permita acesso à sua biblioteca de fotos para anexar imagens.",
errorTitle: "Erro",
failedToSelect: "Falha ao selecionar imagem",
dialogTitle: "Anexar imagens",
dialogFilterName: "Imagens",
},
workspaceSetup: {
title: "Criar workspace",
errors: {
failedCreateWorktree: "Falha ao criar worktree",
failedOpenProject: "Falha ao abrir projeto",
selectModel: "Selecione um modelo",
hostDisconnected: "Host não está conectado",
pendingRequired: "Nenhuma configuração de workspace está pendente",
composerStateRequired: "O estado do composer da configuração do workspace é obrigatório",
},
},
onboarding: {
title: "Bem-vindo ao Paseo",
subtitle: "Conecte seu computador para começar",
actions: {
settings: "Configurações",
},
},
modelSelector: {
title: "Selecionar provedor",
selectModel: "Selecionar modelo",
selectedModel: "Selecionar modelo ({{model}})",
loading: "Carregando...",
loadingShort: "Carregando",
loadingSelector: "Carregando seletor de modelos...",
error: "Erro",
defaultModel: "Padrão",
favorites: "Favoritos",
favoriteModel: "Favoritar modelo",
unfavoriteModel: "Remover modelo dos favoritos",
modelCount: "{{count}} modelo",
modelCountPlural: "{{count}} modelos",
retry: "Tentar novamente",
retrying: "Tentando novamente...",
noMatches: "Nenhum modelo corresponde à sua busca",
searchPlaceholder: "Buscar modelos...",
openProviderSettings: "Abrir configurações de {{provider}}",
},
providerCatalog: {
title: "Adicionar provedor",
search: "Buscar provedores",
noProviders: "Nenhum provedor encontrado",
actions: {
add: "Adicionar",
adding: "Adicionando",
installed: "Instalado",
cancel: "Cancelar",
installInstructions: "Instruções de instalação",
installInstructionsFor: "Instruções de instalação de {{provider}}",
},
errors: {
unableToInstall: "Não foi possível instalar provedor",
},
},
providerSelection: {
defaultModel: "Padrão",
selectModel: "Selecionar modelo",
loading: "Carregando...",
error: "Erro",
unavailable: "Indisponível",
unknownError: "Erro desconhecido",
readiness: {
initialPromptRequired: "O prompt inicial é obrigatório",
noProviders: "Nenhum provedor disponível no host selecionado",
modelDefaultsLoading: "Os modelos padrão ainda estão carregando",
noModelAvailable: "Nenhum modelo disponível para o provedor selecionado",
workspaceDirectoryNotFound: "Diretório do workspace não encontrado",
hostDisconnected: "Host não está conectado",
},
},
pairing: {
connectionMethods: {
title: "Adicionar conexão",
direct: {
title: "Conexão direta",
description: "Rede local ou VPN.",
},
scanQr: {
title: "Escanear QR code",
description: "Conexão relay criptografada.",
},
pasteLink: {
title: "Colar link de pareamento",
description: "Conexão relay criptografada.",
},
},
direct: {
title: "Conexão direta",
helper: "Informe o endereço de um servidor Paseo.",
fields: {
host: "Host",
port: "Porta",
password: "Senha",
optional: "Opcional",
useSsl: "Usar SSL",
connectionUri: "URI da conexão",
},
advanced: {
label: "Avançado",
show: "Mostrar avançado",
hide: "Ocultar avançado",
},
headers: {
title: "Cabeçalhos personalizados",
add: "Adicionar cabeçalho",
name: "Nome",
value: "Valor",
remove: "Remover cabeçalho",
errors: {
missingName: "Digite um nome para cada cabeçalho",
invalidName: "{{name}} não é um nome de cabeçalho válido",
invalidValue: "{{name}} contém uma quebra de linha inválida",
duplicateName: "{{name}} foi inserido mais de uma vez",
},
},
passwordVisibility: {
show: "Mostrar senha",
hide: "Ocultar senha",
},
actions: {
cancel: "Cancelar",
connect: "Conectar",
connecting: "Conectando...",
},
errors: {
hostRequired: "Host é obrigatório",
invalidPort: "A porta deve estar entre 1 e 65535",
invalidConnection: "Conexão inválida",
failedTitle: "Falha na conexão",
failedToConnect: "Não foi possível conectar a {{endpoint}}.",
noAdditionalDetails: "{{detail}} (nenhum detalhe adicional fornecido)",
timedOut: "A conexão expirou. Verifique o host/porta e sua rede.",
refused: "Conexão recusada. O servidor está em execução neste endereço?",
hostNotFound: "Host não encontrado. Verifique o hostname e tente novamente.",
hostUnreachable: "Host inacessível. Verifique sua rede e firewall.",
tlsError:
"Erro de TLS. Conexões diretas usam SSL apenas quando há um terminador TLS na frente do daemon.",
unableToConnect:
"Não foi possível conectar. Verifique o host/porta e se o daemon está acessível.",
details: "Detalhes: {{detail}}",
},
},
link: {
title: "Colar link de pareamento",
helper: "Cole o link de pareamento do seu servidor.",
label: "Link de pareamento",
errors: {
required: "Cole um link de pareamento (.../#offer=...)",
missingOffer: "O link deve incluir #offer=...",
emptyOffer: "O payload da oferta está vazio",
invalid: "Link de pareamento inválido",
unableToPair: "Não foi possível parear host",
},
alert: {
failedTitle: "Falha no pareamento",
},
actions: {
cancel: "Cancelar",
pair: "Parear",
pairing: "Pareando...",
},
},
scan: {
title: "Escanear QR",
webUnavailableTitle: "Indisponível na web",
webUnavailableBody:
'Escanear QR não é compatível com a build web. Use "Colar link" em vez disso.',
backToSettings: "Voltar para Configurações",
cameraPermissionTitle: "Permissão da câmera",
cameraPermissionBody:
"Permita acesso à câmera para escanear o QR code de pareamento do daemon.",
grantPermission: "Conceder permissão",
pairing: "Pareando...",
unableToPair: "Não foi possível parear host",
errorTitle: "Erro",
},
device: {
loadingOffer: "Carregando oferta de pareamento...",
failedToLoadOffer: "Falha ao carregar oferta de pareamento.",
relayDisabled: "Relay não está ativado. Ative o relay para parear um dispositivo.",
enableTitle: "Ativar o relay?",
enableDescription:
"O relay permite conectar este dispositivo de qualquer lugar. O tráfego de pareamento é criptografado de ponta a ponta.",
relayDocs: "Como o relay funciona",
relayDocsAccessibility: "Leia como o relay do Paseo funciona",
enableRelay: "Ativar relay",
enablingRelay: "Ativando...",
notNow: "Agora não",
directConnectionHint:
"Sem relay, conecte diretamente por TCP, Tailscale ou outra VPN. Nenhum código QR é criado.",
updateRequired: "Atualize o host para ativar o relay pelo Paseo Desktop.",
unavailable: "Oferta de pareamento indisponível.",
hint: "Escaneie este QR code com o Paseo no seu celular ou copie o link abaixo.",
qrUnavailable: "QR code indisponível.",
qrAccessibility: "Código QR de pareamento",
retry: "Tentar novamente",
copy: "Copiar",
copied: "Copiado",
},
},
realtimeVoice: {
actions: {
mute: "Silenciar voz em tempo real",
unmute: "Ativar voz em tempo real",
stop: "Parar voz em tempo real e interromper a resposta",
},
},
rewind: {
tooltip: "Voltar para esta mensagem",
warning: "Esta ação não pode ser desfeita",
actions: {
conversation: "Reverter conversa",
files: "Reverter arquivos",
both: "Reverter conversa e arquivos",
},
errors: {
failed: "Falha ao reverter agente",
},
},
diffViewer: {
empty: "Nenhuma alteração para exibir",
},
serviceUrl: {
title: "Abrir URL do serviço",
message: "Abrir {{url}}?",
inPaseo: "No Paseo",
externalBrowser: "Navegador externo",
dontAskAgain: "Não perguntar novamente",
},
downloads: {
requestTokenFailed: "Falha ao solicitar token de download.",
hostUnavailable: "Host de download indisponível.",
cancelled: "Download cancelado.",
failed: "Falha ao baixar arquivo.",
shareFile: "Compartilhar arquivo",
shareFileNamed: "Compartilhar {{fileName}}",
},
menu: {
backdrop: "Fundo do menu",
},
subagents: {
detachAction: "Desanexar {{label}}",
detachTooltip: "Desanexar subagente",
archiveAction: "Arquivar {{label}}",
archiveTooltip: "Arquivar subagente",
archiveFinishedAction: "Arquivar subagentes concluídos",
archiveFinishedTooltip: "Arquivar concluídos",
},
panels: {
draft: {
newAgent: "Novo Agente",
creatingAgent: "Criando agente",
},
file: {
directoryMissing: "Diretório do workspace não encontrado.",
loading: "Carregando arquivo...",
noPreview: "Nenhuma prévia disponível",
binaryPreviewUnavailable: "Prévia binária indisponível",
failedToLoad: "Falha ao carregar arquivo",
failedToLoadPreview: "Falha ao carregar prévia do arquivo",
editor: {
fileSize: "Tamanho {{size}}",
lines: "{{count}} linhas",
editorStatus: "Status do editor: {{status}}",
unsavedChanges: "Alterações não salvas",
saving: "Salvando...",
saveFailed: "Falha ao salvar",
changedOnDisk: "Alterado no disco",
vimMode: "Modo Vim {{mode}}",
cursor: "Linha {{line}}, coluna {{column}}",
preview: "Prévia",
source: "Fonte",
deletedTitle: "Arquivo excluído do disco",
checkFailedTitle: "Não foi possível verificar o arquivo no disco",
preservedDescription: "A cópia aberta foi preservada.",
conflictDescription: "O conteúdo local foi preservado. Escolha qual versão manter.",
overwrite: "Sobrescrever",
reload: "Recarregar",
reloadTitle: "Recarregar do disco?",
reloadMessage: "Suas alterações locais serão perdidas.",
},
},
diff: {
changesLabel: "Alterações",
changesSubtitle: "Diff da árvore de trabalho",
commitSubtitle: "Diff do commit",
uncommittedSubtitle: "Alterações não commitadas",
baseSubtitle: "Comparado com {{baseRef}}",
directoryMissing: "Diretório do workspace não encontrado.",
empty: "Nenhuma alteração",
loadError: "Falha ao carregar diff",
capabilityMissing: "Atualize o host para ver diffs de commits.",
},
},
toolCallDetails: {
error: "Erro",
empty: "Nenhum detalhe adicional disponível",
subAgentActivity: "Atividade do subagente",
input: "Entrada",
output: "Saída",
},
toolCallGroup: {
editedFiles: {
one: "editou {{count}} arquivo",
other: "editou {{count}} arquivos",
},
commands: {
one: "executou {{count}} comando",
other: "executou {{count}} comandos",
},
readFiles: {
one: "leu {{count}} arquivo",
other: "leu {{count}} arquivos",
},
searches: {
one: "pesquisou {{count}} vez",
other: "pesquisou {{count}} vezes",
},
otherTools: {
one: "usou {{count}} outra ferramenta",
other: "usou {{count}} outras ferramentas",
},
paseoCalls: {
one: "chamou o Paseo {{count}} vez",
other: "chamou o Paseo {{count}} vezes",
},
and: "e",
},
renameModal: {
rename: "Renomear",
saving: "Salvando...",
},
sidebarCallout: {
dismiss: "Dispensar",
},
contextWindow: {
title: "Janela de contexto",
used: "{{percentage}}% usado",
tokens: "{{used}} / {{max}} tokens",
sessionCost: "Custo da sessão {{cost}}",
accessibility: "Janela de contexto {{percentage}}% usada",
},
review: {
comment: {
add: "Adicionar comentário de revisão",
edit: "Editar comentário de revisão",
delete: "Excluir comentário de revisão",
label: "Comentário de revisão",
placeholder: "Deixe um comentário",
cancel: "Cancelar",
cancelAccessibility: "Cancelar comentário de revisão",
save: "Comentar",
saveAccessibility: "Salvar comentário de revisão",
},
},
settings: {
title: "Configurações",
loading: "Carregando configurações...",
groups: {
app: "App",
host: "Host",
},
hostPicker: {
switchHost: "Trocar host",
local: "Local",
},
backToWorkspace: "Voltar",
addHost: "Adicionar host",
enableBuiltInDaemon: "Ativar o daemon integrado",
projects: "Projetos",
projectList: {
hostLoadFailed: "Não foi possível carregar projetos do host {{hostName}}: {{message}}",
editProject: "Editar {{projectName}}",
},
groupInfo: "Sobre {{title}}",
sections: {
general: "Geral",
appearance: "Aparência",
editor: "Editor",
shortcuts: "Atalhos",
integrations: "Integrações",
permissions: "Permissões",
diagnostics: "Diagnósticos",
about: "Sobre",
},
editor: {
title: "Editor",
vimKeybindings: "Atalhos do Vim",
vimHint: "Aplica-se a arquivos-fonte na web e no desktop.",
},
hostSections: {
projects: "Projetos",
connections: "Conexões",
agents: "Agentes",
workspaces: "Workspaces",
providers: "Provedores",
usage: "Uso",
terminals: "Terminais",
host: "Visão geral",
},
general: {
title: "Geral",
browserData: {
title: "Dados do navegador",
siteData: "Cookies e dados de sites",
description: "As abas do navegador compartilham logins e dados de sites no Paseo.",
clear: "Limpar dados do navegador",
clearing: "Limpando...",
confirmTitle: "Limpar dados do navegador?",
confirmMessage:
"Você será desconectado dos sites e as abas abertas do navegador serão recarregadas.",
success: "Dados do navegador limpos.",
error: "Não foi possível limpar os dados do navegador.",
},
defaultSend: {
label: "Envio padrão",
descriptions: {
interrupt:
"Quando o agente está em execução, Enter interrompe. Command/Ctrl+Enter enfileira.",
queue: "Quando o agente está em execução, Enter enfileira. Command/Ctrl+Enter envia.",
},
options: {
interrupt: "Interromper",
queue: "Fila",
},
},
serviceUrls: {
label: "URLs de serviço",
description: "Onde abrir URLs de scripts em execução",
options: {
ask: "Perguntar",
inApp: "No Paseo",
external: "Navegador externo",
},
},
terminalScrollback: {
label: "Scrollback do terminal",
description: "Linhas mantidas no buffer do terminal integrado",
accessibilityLabel: "Linhas do scrollback do terminal",
},
autoExpandReasoning: {
label: "Sempre expandir raciocínio",
description:
"Mostrar os blocos de pensamento e raciocínio do agente totalmente expandidos por padrão",
},
toolCallDetail: {
label: "Exibição de chamadas de ferramentas",
description: "Como as chamadas de ferramentas aparecem na linha do tempo",
accessibilityLabel: "Selecionar exibição de chamadas de ferramentas ({{value}})",
options: {
overview: "Resumo",
detailed: "Detalhes completos",
},
},
language: {
label: "Idioma",
description: "Idioma do app",
options: {
system: "Sistema",
ar: "Árabe",
en: "Inglês",
es: "Espanhol",
fr: "Francês",
ja: "Japonês",
ko: "Coreano",
ptBR: "Português brasileiro",
ru: "Russo",
zhCN: "Chinês simplificado",
},
},
},
diagnostics: {
title: "Diagnósticos",
legacyTerminalRenderer: {
label: "Usar renderizador de terminal anterior",
description: "Usa o terminal WebView anterior após reabrir um terminal",
accessibilityLabel: "Usar renderizador de terminal anterior",
},
testAudio: "Testar áudio",
playTest: "Reproduzir teste",
playing: "Reproduzindo...",
playbackFailed: "Falha na reprodução: {{message}}",
app: {
title: "App diagnostic",
rowTitle: "App diagnostic",
rowHint: "Collect connection, daemon, provider, desktop, and log details",
run: "Run",
running: "Running diagnostic...",
copyLabel: "diagnostic",
copyAccessibility: "Copy diagnostic",
copyFailed: "Failed to copy diagnostic",
refreshAccessibility: "Refresh diagnostic",
refreshingAccessibility: "Refreshing diagnostic",
progress: {
client: "Client",
desktop: "Desktop",
},
},
},
about: {
title: "Sobre",
appVersion: "Versão do app",
thisDevice: "Este dispositivo",
connectedHosts: "Hosts conectados",
offline: "Offline",
versionDiffers: "A versão é diferente da deste dispositivo",
releaseChannel: {
label: "Canal de lançamento",
description: "Troque para Beta para receber atualizações antes e ajudar a moldá-las",
stable: "Stable",
beta: "Beta",
},
updates: {
label: "Atualizações do app",
readyToInstall: "Pronta para instalar: {{version}}",
installTitle: "Instalar atualização desktop",
installMessage: "Isso atualiza o Paseo neste computador",
installConfirm: "Instalar atualização",
update: "Atualizar",
updateTo: "Atualizar para {{version}}",
installing: "Instalando...",
check: "Verificar",
checking: "Verificando...",
alertTitle: "Erro",
alertMessage: "Não foi possível abrir o diálogo de confirmação da atualização.",
},
},
appearance: {
theme: {
title: "Tema",
accessibilityLabel: "Tema: {{value}}",
options: {
light: "Claro",
dark: "Escuro",
zinc: "Zinc",
midnight: "Midnight",
claude: "Claude",
ghostty: "Ghostty",
auto: "Sistema",
},
},
detailLevel: {
title: "Nível de detalhe",
},
chatOutline: {
title: "Estrutura do chat",
description: "Mostrar uma estrutura para navegar entre prompts",
},
fonts: {
title: "Fontes",
systemDefault: "Sistema padrão",
interfaceFont: "Fonte da interface",
interfaceFontHint: "Usada em todo o app. Deixe vazio para usar o padrão do sistema",
interfaceFontAccessibility: "Família da fonte da interface",
interfaceSize: "Tamanho da interface",
interfaceSizeAccessibility: "Tamanho da fonte da interface",
codeFont: "Fonte de código",
codeFontHint:
"Usada em código, diffs e saída do terminal. Deixe vazio para usar o padrão do sistema",
codeFontAccessibility: "Família da fonte de código",
codeSize: "Tamanho do código",
codeSizeAccessibility: "Tamanho da fonte de código",
},
syntax: {
title: "Sintaxe",
highlightTheme: "Tema de destaque",
highlightThemeHint: "Cores para código, independentes do tema do app",
highlightThemeAccessibility: "Tema de destaque: {{value}}",
previewAccessibility: "Prévia ao vivo do tema de sintaxe e da fonte de código",
},
},
shortcuts: {
dialogTitle: "Atalhos",
searchPlaceholder: "Pesquisar atalhos",
unavailableOnMobile: "Atalhos de teclado estão disponíveis apenas no desktop",
capturePrompt: "Pressione o atalho...",
actions: {
done: "Concluído",
cancel: "Cancelar",
rebind: "Reatribuir",
reset: "Redefinir",
resetAll: "Redefinir tudo",
},
sections: {
navigation: "Navegação",
tabsPanes: "Abas e painéis",
projects: "Projetos",
panels: "Painéis",
agentInput: "Entrada do agente",
},
help: {
openProject: "Abrir projeto",
newWorkspace: "Novo workspace",
newWorktree: "Novo worktree",
archiveWorkspace: "Arquivar workspace",
newTab: "Nova aba",
closeCurrentTab: "Fechar aba atual",
jumpToWorkspace: "Ir para workspace",
jumpToTab: "Ir para aba",
previousWorkspace: "Workspace anterior",
nextWorkspace: "Próximo workspace",
previousTab: "Aba anterior",
nextTab: "Próxima aba",
splitPaneRight: "Dividir painel à direita",
splitPaneDown: "Dividir painel abaixo",
focusPaneLeft: "Focar painel à esquerda",
focusPaneRight: "Focar painel à direita",
focusPaneUp: "Focar painel acima",
focusPaneDown: "Focar painel abaixo",
moveTabLeft: "Mover aba para a esquerda",
moveTabRight: "Mover aba para a direita",
moveTabUp: "Mover aba para cima",
moveTabDown: "Mover aba para baixo",
closePane: "Fechar painel",
newTerminal: "Novo terminal",
toggleCommandCenter: "Alternar central de comandos",
showKeyboardShortcuts: "Mostrar atalhos de teclado",
toggleLeftSidebar: "Alternar barra lateral esquerda",
toggleRightSidebar: "Alternar barra lateral direita",
toggleBothSidebars: "Alternar ambas as barras laterais",
toggleSettings: "Alternar Configurações",
toggleFocusMode: "Alternar modo de foco",
cycleTheme: "Alternar tema",
focusMessageInput: "Focar entrada de mensagem",
cycleAgentMode: "Alternar modo do agente",
toggleVoiceMode: "Alternar modo de voz",
startStopDictation: "Iniciar/parar ditado",
interruptAgent: "Interromper agente",
sendMessage: "Enviar mensagem",
queueMessage: "Enfileirar mensagem",
muteUnmuteVoiceMode: "Silenciar/ativar modo de voz",
switchProject: "Trocar projeto",
},
helpNotes: {
showKeyboardShortcuts:
"Disponível quando o foco não está em um campo de texto ou terminal.",
},
},
integrations: {
title: "Integrações",
docs: {
cli: "Docs da CLI",
skills: "Docs das skills",
openCli: "Abrir documentação da CLI",
openSkills: "Abrir documentação das skills",
},
commandLine: {
title: "Linha de comando",
description: "Controle agentes e execute scripts pelo terminal",
},
skills: {
title: "Skills de orquestração",
description: "Ensine seus agentes a orquestrar pela CLI",
updateAvailable: "Atualização disponível",
updateTitle: "Atualizar Paseo skills?",
updateFallback: "Sincronize as skills incluídas com sua máquina.",
uninstallTitle: "Desinstalar Paseo skills?",
uninstallMessage:
"Remove todas as skills de orquestração do Paseo de ~/.agents, ~/.claude e ~/.codex.",
choose: "Escolher skills",
chooseAll: "Todas as skills",
chooseAllHint:
"Mantenha instaladas todas as skills incluídas, inclusive as adicionadas depois.",
chooseList: "Skills incluídas",
chooseEmpty: "Esta versão não inclui skills.",
removeTitle: "Remover as skills desmarcadas?",
removeMessage:
"{{skills}} serão excluídas de ~/.agents, ~/.claude e ~/.codex. Tudo o que você adicionou dentro dessas pastas de skills também é excluído.",
saveFailed: "Não foi possível salvar sua seleção de skills.",
},
actions: {
install: "Instalar",
installing: "Instalando...",
installed: "Instalado",
update: "Atualizar",
working: "Trabalhando...",
remove: "Remover",
uninstall: "Desinstalar",
save: "Salvar",
saving: "Salvando...",
},
operations: {
add: "Adicionar skill",
update: "Atualizar skill",
delete: "Excluir skill",
},
},
permissions: {
title: "Permissões",
notifications: "Notificações",
microphone: "Microfone",
refresh: "Atualizar",
refreshing: "Atualizando...",
refreshAccessibility: "Atualizar permissões do desktop",
test: "Testar",
actions: {
granted: "Concedida",
request: "Solicitar",
requesting: "Solicitando...",
busySuffix: "{{label}}...",
},
},
host: {
appearance: {
title: "Aparência",
name: {
label: "Nome",
},
color: {
label: "Cor",
accessibilityLabel: "Cor, {{value}}",
options: {
none: "Padrão",
violet: "Violeta",
sky: "Céu",
emerald: "Esmeralda",
orange: "Laranja",
pink: "Rosa",
indigo: "Índigo",
teal: "Verde-azulado",
red: "Vermelho",
amber: "Âmbar",
blue: "Azul",
},
},
badge: {
label: "Selo da barra lateral",
accessibilityLabel: "Selo da barra lateral, {{value}}",
options: {
name: "Nome",
icon: "Somente ícone",
hidden: "Oculto",
},
},
preview: {
workspaceName: "my-workspace",
},
},
notFound: "Host não encontrado",
badges: {
relay: "Relay",
local: "Local",
},
connections: {
title: "Conexões",
removeTitle: "Remover conexão",
removeMessage: "Remover {{name}}? Isso não pode ser desfeito.",
removeAction: "Remover",
removeErrorTitle: "Erro",
removeErrorMessage: "Não foi possível remover a conexão",
timeout: "Timeout",
},
pairDevices: {
title: "Parear dispositivos",
rowTitle: "Parear um dispositivo",
rowHint: "Escaneie um QR code ou copie um link para conectar seu celular a este host",
},
orchestration: {
title: "Orquestração",
unavailable: "Conecte-se a este host para gerenciar a orquestração",
enableTools: {
title: "Ativar ferramentas do Paseo",
hint: "Agentes poderão gerenciar worktrees, agentes e agendamentos",
accessibilityLabel: "Injetar ferramentas do Paseo",
},
systemPrompt: {
title: "Prompt do sistema",
hint: "Adiciona um prompt do sistema a todos os agentes",
sheetTitle: "Acrescentar prompt do sistema",
accessibilityLabel: "Acrescentar prompt do sistema",
placeholder: "Mantenha as respostas sempre concisas.",
edit: "Editar",
reset: "Redefinir",
save: "Salvar",
saving: "Salvando...",
},
},
agents: {
unavailable: "Conecte-se a este host para gerenciar agentes",
},
workspaces: {
unavailable: "Conecte-se a este host para gerenciar workspaces",
},
terminalProfiles: {
unavailable: "Conecte-se a este host para gerenciar perfis de terminal",
sectionTitle: "Perfis de terminal",
editProfile: "Editar perfil",
addProfileTitle: "Adicionar perfil de terminal",
editProfileTitle: "Editar perfil de terminal",
namePlaceholder: "Claude Code",
commandPlaceholder: "claude",
argsPlaceholder: "--dangerously-skip-permissions",
nameLabel: "Nome",
commandLabel: "Comando",
argsLabel: "Argumentos",
nameRequired: "O nome é obrigatório",
commandRequired: "O comando é obrigatório",
argsHint: "Argumentos separados por espaço passados para o comando",
saving: "Salvando...",
remove: "Remover",
removeConfirmTitle: "Remover perfil?",
removeConfirmMessage: 'Remover "{{name}}"?',
moveUp: "Mover para cima",
moveDown: "Mover para baixo",
save: "Salvar",
emptyState:
"Nenhum perfil ainda. Adicione um para abrir terminais com um comando específico.",
},
daemon: {
rename: {
editLabel: "Editar rótulo",
title: "Renomear host",
placeholder: "Meu Host",
submit: "Renomear",
},
restart: {
title: "Reiniciar daemon",
hint: "Reinicia o processo do daemon. O app reconectará automaticamente",
confirm: "Reiniciar",
confirmTitle: "Reiniciar {{name}}",
confirmMessage:
"Isso vai reiniciar o daemon. Agentes em execução nele continuarão rodando; o app reconectará automaticamente.",
restarting: "Reiniciando...",
unableToReconnectTitle: "Não foi possível reconectar",
unableToReconnectMessage:
"{{name}} não voltou a ficar online. Verifique se ele reiniciou.",
unavailableTitle: "Host indisponível",
unavailableMessage:
"Este host não está conectado. Aguarde até ele ficar online antes de reiniciar.",
offlineTitle: "Host offline",
offlineMessage:
"Este host está offline. O Paseo reconecta automaticamente. Aguarde ele voltar a ficar online antes de reiniciar.",
requestFailedTitle: "Erro",
requestFailedMessage:
"Falha ao enviar a solicitação de reinício. O Paseo reconecta automaticamente. Tente novamente quando o host aparecer como online.",
dialogFailedMessage: "Não foi possível abrir o diálogo de confirmação de reinício.",
},
update: {
desktopManagedHint:
"Este daemon é gerenciado pelo Paseo Desktop. Atualize o Paseo Desktop no host.",
title: "Atualizar daemon",
hint: "Atualiza o daemon para a versão mais recente e o reinicia",
confirm: "Atualizar",
confirmTitle: "Atualizar {{name}}",
confirmMessage:
"Isso vai atualizar o daemon para a versão mais recente e reiniciá-lo. Agentes em execução serão interrompidos brevemente.",
updating: "Atualizando...",
phaseStarting: "Preparando atualização...",
phaseDownloading: "Baixando pacotes...",
phaseInstalling: "Instalando...",
phaseComplete: "Atualização concluída, reiniciando...",
unableToReconnectTitle: "Não foi possível reconectar",
unableToReconnectMessage:
"{{name}} não voltou a ficar online após a atualização. Verifique se o daemon reiniciou.",
unavailableTitle: "Host indisponível",
unavailableMessage:
"Este host não está conectado. Aguarde até ele ficar online antes de atualizar.",
offlineTitle: "Host offline",
offlineMessage:
"Este host está offline. Aguarde até ele voltar a ficar online antes de atualizar.",
requestFailedTitle: "Falha na atualização",
requestFailedMessage: "Falha ao atualizar o daemon: {{error}}",
dialogFailedMessage: "Não foi possível abrir o diálogo de confirmação da atualização.",
},
dangerZone: "Zona de perigo",
remove: {
title: "Remover host",
localTitle: "Remover conexão localhost",
hint: "Remove este host e suas conexões salvas deste dispositivo",
localHint: "Remove localhost deste dispositivo e interrompe o daemon integrado",
localConfirmTitle: "Remover conexão localhost e parar daemon?",
confirmMessage: "Remover {{name}}? Isso excluirá suas conexões salvas.",
localConfirmMessage:
"Isso vai remover a conexão localhost, desativar o gerenciamento do daemon integrado e parar o daemon gerenciado. Hosts remotos permanecem conectados.",
errorTitle: "Erro",
errorMessage: "Não foi possível remover host",
localErrorMessage: "Não foi possível remover a conexão localhost",
},
},
},
providers: {
title: "Provedores",
addProvider: "Adicionar provedor",
providerDetails: "Detalhes do provedor {{name}}",
enableProvider: "Ativar {{name}}",
unavailable: "Conecte-se a este host para ver provedores",
loading: "Carregando...",
addErrorTitle: "Não foi possível adicionar provedor",
updateErrorTitle: "Não foi possível atualizar provedor",
actions: {
menu: "{{name}} actions",
remove: "Remove provider",
removing: "Removing...",
},
remove: {
confirmTitle: "Remove {{name}}?",
confirmMessage: "This deletes the provider entry from config.json. It cannot be undone.",
confirm: "Remove",
errorTitle: "Unable to remove provider",
},
statuses: {
disabled: "Desativado",
loading: "Carregando",
error: "Erro",
available: "Disponível",
notInstalled: "Não instalado",
},
models: {
one: "1 modelo",
many: "{{count}} modelos",
addModel: "Adicionar modelo",
addCustomTitle: "Adicionar modelo personalizado",
modelId: "ID do modelo",
modelIdPlaceholder: "e.g. openai/gpt-5",
add: "Adicionar",
adding: "Adicionando...",
failedToSave: "Falha ao salvar modelo",
removeModel: "Remover {{id}}",
searchPlaceholder: "Buscar modelos",
loading: "Carregando modelos...",
retry: "Tentar novamente",
retrying: "Tentando novamente...",
noSearchMatches: "Nenhum modelo corresponde à sua busca",
noneDetected: "Nenhum modelo detectado",
discovered: "Descobertos",
custom: "Modelos personalizados",
updated: "Atualizado {{time}}",
},
diagnostic: {
title: "Diagnóstico",
button: "Diagnóstico",
refresh: "Atualizar",
refreshing: "Atualizando...",
copyLabel: "diagnóstico",
copyAccessibility: "Copiar diagnóstico",
copyFailed: "Falha ao copiar diagnóstico",
refreshAccessibility: "Atualizar diagnóstico",
refreshingAccessibility: "Atualizando diagnóstico",
running: "Executando diagnóstico...",
none: "Nenhum diagnóstico disponível",
failedToFetch: "Falha ao buscar diagnóstico",
unknownError: "Erro desconhecido",
},
},
project: {
noEditableTarget: "Este projeto não pode ser editado neste host.",
backToProjects: "Voltar para projetos",
edit: {
title: "Editar projeto",
name: "Nome",
nameLabel: "Nome do projeto",
icon: "Ícone",
chooseImage: "Escolher imagem",
useAutomatic: "Usar automático",
imageUrl: "URL de imagem ou site",
save: "Salvar alterações",
savedToast: "Projeto atualizado",
},
readFailures: {
invalidTitle: "Não foi possível analisar paseo.json",
invalidDescription: "Corrija o arquivo no disco e recarregue.",
missingTitle: "Este host não tem este projeto",
missingSingleHost: "O host selecionado não tem registro deste projeto.",
transportTitle: "Não foi possível carregar paseo.json",
transportFallback: "O host não respondeu.",
failedTitle: "Não foi possível carregar paseo.json",
failedDescription: "Recarregue para tentar novamente.",
},
worktree: {
title: "Hooks de ciclo de vida do worktree",
info: "Comandos executados quando um worktree é criado ou desmontado para este projeto",
docs: "Docs",
docsTooltip:
"Veja a documentação para mais detalhes e as variáveis de ambiente disponíveis para estes comandos",
setup: "Configuração",
setupAccessibility: "Comandos de configuração do worktree",
teardown: "Desmontagem",
teardownAccessibility: "Comandos de desmontagem do worktree",
},
scripts: {
title: "Scripts",
info: "Serviços contínuos e comandos avulsos que você pode iniciar de qualquer agente neste projeto",
empty: "Nenhum script ainda.",
untitled: "Script sem título",
port: "porta {{port}}",
menuAccessibility: "Abrir menu do script",
removeTitle: "Remover script?",
removeMessage: "Remover {{name}}?",
removeFallbackName: "este script",
name: "Nome",
command: "Comando",
nameAccessibility: "Nome do script",
commandAccessibility: "Comando do script",
nameRequired: "O nome é obrigatório",
commandRequired: "O comando é obrigatório",
newScript: "Novo script",
editScript: "Editar {{name}}",
runAsService: "Executar como serviço",
serviceHint: "O Paseo supervisiona o processo e atribui uma porta via $PASEO_PORT",
actions: {
add: "Adicionar script",
edit: "Editar",
remove: "Remover",
},
},
metadata: {
title: "Geração de metadados",
info: "Instruções específicas do projeto injetadas nos prompts de IA que o Paseo usa para gerar metadados. Use-as para aplicar convenções da sua equipe, como nomes de branch, estilo de commit ou formato de PR",
branchName: "Nomes de branch",
branchNamePlaceholder: "Prefixe branches com feat/ ou fix/, mb/ para branches pessoais",
commitMessage: "Mensagens de commit",
commitMessagePlaceholder: "Use Conventional Commits com escopo",
pullRequest: "Pull requests",
pullRequestPlaceholder: "Comece com um resumo de um parágrafo e inclua uma seção Test plan",
},
writeFailures: {
staleTitle: "Configuração alterada no disco",
staleDescription: "Recarregue para buscar o paseo.json mais recente antes de salvar.",
failedTitle: "Não foi possível salvar paseo.json",
failedDescription: "Tente novamente ou recarregue a versão mais recente do disco.",
},
actions: {
reload: "Recarregar",
tryAgain: "Tentar novamente",
save: "Salvar",
saved: "Projeto salvo",
saving: "Salvando...",
cancel: "Cancelar",
},
},
},
};