Files
Hermes-ui/packages/client/src/i18n/locales/pt.ts
T
ekko 61b41512d4 [codex] increase login lock threshold (#984)
* increase login ip lock threshold

* show login lock recovery commands
2026-05-24 22:36:21 +08:00

1364 lines
60 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 default {
// Login
login: {
title: 'Hermes Web UI',
description: 'Insira seu nome de usuario e senha para continuar.',
placeholder: 'Token de acesso',
submit: 'Entrar',
tokenRequired: 'Por favor, insira seu token de acesso',
invalidToken: 'Token invalido',
connectionFailed: 'Nao foi possivel conectar ao servidor',
passwordLogin: 'Senha',
tokenLogin: 'Token',
usernamePlaceholder: 'Nome de usuario',
passwordPlaceholder: 'Senha',
defaultCredentialsHint: 'Nome de usuario padrao: admin. Senha padrao: 123456.',
credentialsRequired: 'Por favor, insira nome de usuario e senha',
invalidCredentials: 'Nome de usuario ou senha incorretos',
tooManyAttempts: 'Muitas tentativas falhadas, por favor tente novamente mais tarde',
lockResetHint: 'Se este for seu servidor, limpe o bloqueio de login com:',
defaultLoginResetHint: 'Para redefinir a senha admin padrao, execute:',
sessionExpired: 'Login expirado. Entre novamente.',
accessDenied: 'Voce nao tem permissao para acessar este recurso.',
passwordMismatch: 'As senhas nao conferem',
passwordTooShort: 'A senha deve ter pelo menos 6 caracteres',
setupSuccess: 'Login por senha configurado com sucesso',
passwordChanged: 'Senha alterada com sucesso',
passwordRemoved: 'Login por senha removido',
setupPassword: 'Configurar login por senha',
changePassword: 'Alterar senha',
changeUsername: 'Alterar nome de usuario',
removePasswordLogin: 'Remover',
username: 'Nome de usuario',
currentPassword: 'Senha atual',
newPassword: 'Nova senha',
confirmPassword: 'Confirmar senha',
newUsername: 'Novo nome de usuario',
usernameChanged: 'Nome de usuario alterado com sucesso',
usernameTooShort: 'O nome de usuario deve ter pelo menos 2 caracteres',
setupDescription: 'Gerencie o nome de usuario e a senha usados para entrar.',
removeConfirm: 'Login por senha e obrigatorio para contas de usuario.',
passwordLoginNotConfigured: 'Login por senha nao configurado',
passwordLoginConfigured: 'Conta atual: {username}',
defaultCredentialTitle: 'Altere a conta e senha padrao',
defaultCredentialMessage: 'A conta atual ainda usa o nome de usuario ou a senha padrao. Para evitar acesso nao autorizado, altere o nome de usuario e a senha da conta atual o quanto antes.',
defaultCredentialAction: 'Alterar agora',
defaultCredentialLater: 'Lembrar depois',
},
users: {
title: 'Gerenciamento de contas',
description: 'Crie usuarios, atribua funcoes e controle quais perfis administradores comuns podem acessar.',
create: 'Criar usuario',
edit: 'Editar usuario',
username: 'Nome de usuario',
role: 'Funcao',
statusLabel: 'Status',
profiles: 'Perfis acessiveis',
profilesPlaceholder: 'Selecione perfis acessiveis',
allProfiles: 'Todos os perfis',
noProfiles: 'Nenhum perfil atribuido',
lastLogin: 'Ultimo login',
newPasswordOptional: 'Nova senha (deixe em branco para manter)',
loadFailed: 'Falha ao carregar usuarios',
deleteConfirm: 'Excluir este usuario?',
enable: 'Ativar',
disable: 'Desativar',
roles: {
superAdmin: 'Super admin',
admin: 'Admin',
},
status: {
active: 'Ativo',
disabled: 'Desativado',
},
},
// Common
common: {
loading: 'Carregando...',
cancel: 'Cancelar',
retry: 'Tentar novamente',
delete: 'Excluir',
edit: 'Editar',
save: 'Salvar',
saved: 'Salvo',
update: 'Atualizar',
create: 'Criar',
saveFailed: 'Falha ao salvar',
deleteFailed: 'Falha ao excluir',
ok: 'OK',
copied: 'Copiado',
copy: 'Copiar',
noData: 'Sem dados',
fetch: 'Buscar',
add: 'Adicionar',
enable: 'Ativar',
disable: 'Desativar',
configured: 'Configurado',
notConfigured: 'Nao configurado',
confirm: 'Confirmar',
expand: 'Expandir',
collapse: 'Recolher',
stop: 'Parar',
start: 'Iniciar',
expired: 'Expirado',
},
// Sidebar
sidebar: {
chat: 'Chat',
search: 'Pesquisar',
apiRelay: 'API Relay',
history: 'Historico',
jobs: 'Tarefas agendadas',
models: 'Modelos',
profiles: 'Perfis',
plugins: 'Plugins',
skills: 'Habilidades',
memory: 'Memoria',
logs: 'Logs',
usage: 'Uso',
performance: 'Desempenho',
skillsUsage: 'Uso de habilidades',
channels: 'Canais',
terminal: 'Terminal',
files: 'Arquivos',
groupChat: 'Chat em grupo',
groupConversation: 'Conversa',
groupConversationShort: 'Conv.',
groupAgent: 'Agente',
groupAgentShort: 'Ag.',
groupSystem: 'Sistema',
groupSystemShort: 'Sist',
groupMonitoring: 'Monitoramento',
groupMonitoringShort: 'Mon.',
settings: 'Configuracoes',
connected: 'Conectado',
disconnected: 'Desconectado',
updateTip: 'Execute "hermes-web-ui update" no terminal para atualizar',
updateVersion: 'Atualizar para v{version}',
reloadClientVersion: 'Recarregar para v{version}',
updating: 'Atualizando...',
updateSuccess: 'Atualizacao concluida. Atualize a pagina em breve. Se nao iniciar apos algum tempo, inicie manualmente.',
updateFailed: 'Falha na atualizacao',
logout: 'Sair',
nodeVersionWarning: 'Node.js v{version} detectado. Atualize para a versao 23 ou posterior.',
changelog: 'Registro de alteracoes',
noChangelog: 'Nenhum registro disponivel',
kanban: 'Kanban',
groupTools: 'Ferramentas',
groupPlatform: 'Plataforma',
gateways: 'Gateways',
expand: 'Expandir menu',
collapse: 'Recolher menu',
},
performance: {
title: 'Desempenho',
subtitle: 'Monitore recursos do sistema, Bridge Broker, Workers e sessões ativas',
refresh: 'Atualizar',
autoRefreshOn: 'Atualização automática',
autoRefreshOff: 'Atualização manual',
loadFailed: 'Falha ao carregar métricas de desempenho',
systemCpu: 'CPU do sistema',
systemMemory: 'Memória do sistema',
activeSessions: 'Sessões ativas',
runningSessions: 'Em execução {count}',
workers: 'Workers',
totalWorkerMemory: 'Memória total de Worker',
processes: 'Processos',
uptime: 'Tempo ativo',
running: 'Em execução',
stopped: 'Parado',
workerMemory: 'Memória de Worker',
lastUpdated: 'Atualizado',
profile: 'Profile',
memory: 'Memória',
sessions: 'Sessões',
runningActiveSessions: 'Em execução / Ativas',
lastUsed: 'Último uso',
status: 'Status',
noWorkers: 'Nenhum Worker',
sessionsByProfile: 'Sessões por Profile',
noActiveSessions: 'Nenhuma sessão ativa',
},
// Gaveta
drawer: {
terminal: 'Terminal',
files: 'Espaço de trabalho',
},
// Chat
chat: {
contextRemaining: 'restante',
contextClickToEdit: 'Clique para editar o tamanho do contexto',
contextEditTitle: 'Editar tamanho do contexto',
contextEditDesc: 'Definir o limite de tamanho do contexto para o modelo atual (em tokens)',
contextEditPlaceholder: 'Digite o tamanho do contexto',
contextEditHint: 'Valores comuns: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Salvar',
contextEditCancel: 'Cancelar',
contextEditInvalid: 'Por favor, insira um tamanho de contexto válido',
contextEditSuccess: 'Tamanho do contexto atualizado',
contextEditFailed: 'Falha na atualização',
emptyState: 'Inicie uma conversa com o Hermes Agent',
outlineTitle: 'Esboço da conversa',
outlineEmpty: 'Nenhum conteúdo da conversa',
outlineUserQuestion: 'Pergunta do usuário',
inputPlaceholder: 'Digite uma mensagem... (Enter para enviar, Shift+Enter para nova linha)',
slashCommandArgs: {
message: '<mensagem>',
title: '<titulo>',
text: '<texto>',
},
slashCommands: {
usage: 'Calcular o uso da sessão atual',
status: 'Mostrar status da sessão e fila',
abort: 'Parar a execução ativa do Bridge',
queue: 'Enfileirar uma mensagem após a execução ativa',
clear: 'Limpar a visualização atual',
clearHistory: 'Excluir o histórico de mensagens salvo desta sessão',
title: 'Renomear esta sessão',
compress: 'Executar compressão de contexto quando ocioso',
steer: 'Enviar texto de orientação para a execução ativa do Bridge',
destroy: 'Liberar o Bridge Agent desta sessão',
},
attachFiles: 'Anexar arquivos',
showToolCalls: 'Mostrar chamadas de ferramentas',
hideToolCalls: 'Ocultar chamadas de ferramentas',
messageQueue: 'Fila de mensagens',
removeQueuedMessage: 'Remover mensagem da fila',
stop: 'Parar',
send: 'Enviar',
contextUsed: 'Contexto utilizado:',
sessions: 'Sessoes',
webUiSessions: 'Sessões',
allProfiles: 'Todos os perfis',
profileMissingModelsTip: 'O perfil "{profile}" não tem provider ou modelo disponível para esta sessão',
sessionScopeHint: 'O chat mostra apenas sessões da Web UI/API Server. Sessões de CLI, Telegram, Discord, Cron e outros canais são somente leitura no Histórico.',
openHistory: 'Abrir histórico',
hermesHistory: 'Histórico Hermes',
historyScopeHint: 'Sessões do histórico Hermes do perfil atual, somente leitura, agrupadas por origem.',
noSessions: 'Sem sessoes',
newChat: 'Novo chat',
approvalKicker: 'Permissão do terminal',
approvalTitle: 'Revisar comando antes de executar',
approvalAllowOnce: 'Permitir uma vez',
approvalAllowSession: 'Permitir sessão',
approvalAlways: 'Sempre',
approvalDeny: 'Negar',
clarifyKicker: 'Agente precisa de esclarecimento',
clarifyTitle: 'O agente tem uma pergunta para você',
clarifyPlaceholder: 'Digite sua resposta...',
clarifySubmit: 'Responder',
clarifyDismiss: 'Descartar',
deleteSession: 'Excluir esta sessao?',
toggleBatchMode: 'Seleção em lote',
selectAll: 'Selecionar tudo',
confirmBatchDelete: 'Excluir {count} sessões selecionadas?',
batchDeleteSuccess: '{count} sessões excluídas',
batchDeletePartial: '{failed} sessões falharam ao excluir',
batchDeleteFailed: 'Falha na exclusão em lote',
sessionDeleted: 'Sessao excluida',
rename: 'Renomear',
pin: 'Fixar',
unpin: 'Desafixar',
pinned: 'Fixadas',
chatMode: 'Modo de chat',
liveMode: 'Ao vivo',
liveSessions: 'Sessões ao vivo',
recentBadge: 'Recente',
linkedSessions: '{count} vinculadas',
noVisibleMessages: 'Nenhuma mensagem visível para humanos.',
monitorRoleUser: 'Usuário',
monitorRoleAssistant: 'Assistente',
copySessionLink: 'Copiar link da sessão',
openSessionInNewTab: 'Abrir em nova aba',
sessionLinkCopied: 'Session link copied',
copySessionId: 'Copiar ID da sessão',
export: 'Exportar',
exportFull: 'Exportação completa (JSON)',
exportCompressed: 'Exportação comprimida (TXT)',
exportCompressing: 'Comprimindo contexto, aguarde...',
exportSuccess: 'Sessão exportada',
exportFailed: 'Falha ao exportar',
renamed: 'Renomeado',
renameFailed: 'Falha ao renomear',
renameSession: 'Renomear sessao',
sessionNotFound: 'Sessao nao encontrada',
enterNewTitle: 'Digite um novo titulo',
other: 'Outro',
runFailed: 'Falha na execucao',
error: 'Erro',
tool: 'Ferramenta',
arguments: 'Argumentos',
result: 'Resultado',
truncated: '... (truncado)',
executionDuration: 'Tempo de execução', thinkingLabel: 'Raciocínio',
thinkingInProgress: 'Pensando…',
thinkingShow: 'Mostrar raciocínio',
thinkingHide: 'Ocultar raciocínio',
thinkingDuration: 'Observado {duration}',
thinkingChars: '{count} caracteres',
copyBubble: 'Copiar mensagem',
copiedBubble: 'Mensagem copiada',
copyFailed: 'Falha ao copiar',
playSpeech: 'Reproduzir voz',
pauseSpeech: 'Pausar',
resumeSpeech: 'Retomar',
stopSpeech: 'Parar',
speechNotSupported: 'Reprodução de voz não suportada neste navegador',
searchEnterHint: 'Enter para abrir · Esc para fechar',
searchHint: 'Cmd/Ctrl+K',
searchScope: 'Escopo da busca: apenas banco local de sessões da Web UI; sessões históricas Hermes somente leitura não são incluídas.',
searchFailed: 'Falha ao pesquisar sessões',
searchNoSnippet: 'Nenhum resumo disponível',
searchNoResults: 'Nenhuma sessão corresponde à busca',
searchRecent: 'Sessão recente',
searchEmpty: 'Sessões recentes',
searchPlaceholder: 'Pesquisar sessões...',
searchSubtitle: 'Pesquisar por título ou conteúdo da mensagem',
searchTitle: 'Pesquisar sessões',
stopGateway: 'Parar gateway',
start: 'Iniciar',
workspaceSetFailed: 'Falha ao definir workspace',
workspaceSet: 'Workspace definido',
workspacePlaceholder: 'Digite o caminho do projeto, ex. /home/user/project',
workspace: 'Área de trabalho',
setWorkspaceTitle: 'Definir workspace da sessão',
setWorkspace: 'Definir workspace',
modelSetFailed: 'Falha ao definir modelo',
modelSet: 'Modelo definido',
setModelTitle: 'Definir modelo da sessão',
setModel: 'Definir modelo',
newCliChat: 'Novo CLI',
cliEmptyState: 'Iniciar chat CLI',
autoPlaySpeech: 'Reproduzir voz automaticamente',
},
// Jobs
jobs: {
title: 'Tarefas agendadas',
createJob: 'Criar tarefa',
editJob: 'Editar tarefa',
noJobs: 'Nenhuma tarefa agendada ainda. Crie uma para comecar.',
name: 'Nome',
namePlaceholder: 'Nome da tarefa',
schedule: 'Agendamento (expressao Cron)',
schedulePlaceholder: 'ex. 0 9 * * *',
quickPresets: 'Presets rapidos',
selectPreset: 'Selecionar um preset...',
presetEveryMinute: 'Cada minuto',
presetEvery5Min: 'A cada 5 minutos',
presetEveryHour: 'Cada hora',
presetEveryDay: 'Todos os dias as 00:00',
presetEveryDay9: 'Todos os dias as 09:00',
presetEveryMonday: 'Toda segunda as 09:00',
presetEveryMonth: 'Dia 1 de cada mes as 09:00',
prompt: 'Prompt',
promptPlaceholder: 'O prompt a executar',
deliverTarget: 'Destino de entrega',
origin: 'Origem',
local: 'Local',
repeatCount: 'Contagem de repeticoes (opcional)',
modelPlaceholder: 'Modelo padrao',
repeatPlaceholder: 'Deixar vazio para infinito',
jobCreated: 'Tarefa criada',
jobUpdated: 'Tarefa atualizada',
nameRequired: 'O nome e obrigatorio',
scheduleRequired: 'O agendamento e obrigatorio',
loadFailed: 'Falha ao carregar a tarefa',
jobPaused: 'Tarefa pausada',
jobResumed: 'Tarefa retomada',
jobTriggered: 'Job acionado',
modelUpdated: 'Modelo atualizado',
jobDeleted: 'Tarefa excluida',
status: {
running: 'Em execucao',
paused: 'Pausada',
disabled: 'Desativada',
scheduled: 'Agendada',
},
info: {
model: 'Modelo',
schedule: 'Agendamento',
lastRun: 'Ultima execucao',
nextRun: 'Proxima execucao',
deliver: 'Entrega',
repeat: 'Repeticao',
},
action: {
pause: 'Pausar',
pauseJob: 'Pausar tarefa',
resume: 'Retomar',
resumeJob: 'Retomar tarefa',
runNow: 'Executar agora',
triggerImmediately: 'Acionar imediatamente',
},
runHistory: {
title: 'Histórico',
runs: 'execuções',
noRuns: 'Nenhum histórico encontrado.',
},
},
// Skills
skills: {
title: 'Habilidades',
searchPlaceholder: 'Buscar habilidades...',
noMatch: 'Nenhuma habilidade corresponde a sua busca',
noSkills: 'Nenhuma habilidade encontrada',
backTo: 'Voltar para',
attachedFiles: 'Arquivos anexados',
loadFailed: 'Falha ao carregar a habilidade',
fileLoadFailed: 'Falha ao carregar o arquivo',
modified: 'Modificado pelo usuário',
archived: 'Arquivado',
pinned: 'Fixado',
pin: 'Fixar habilidade',
unpin: 'Desfixar habilidade',
pinFailed: 'Falha ao alterar estado de fixacao',
toggleFailed: 'Falha ao ativar/desativar a habilidade',
source: {
builtin: 'Integrado',
hub: 'Hub',
local: 'Local',
external: 'Externo',
},
},
// Plugins
plugins: {
title: 'Plugins',
refresh: 'Atualizar',
notice: 'Inventário somente leitura dos manifests de plugins Hermes detectáveis. Os metadados de descoberta são lidos sem carregar código de plugin. No v1, ações de gerenciamento ficam na CLI; mudanças entram em vigor em novas sessões Hermes.',
loadFailed: 'Falha ao carregar plugins',
commandCopied: 'Comando copiado',
searchPlaceholder: 'Buscar key, nome, descrição, caminho...',
source: 'Origem',
kind: 'Tipo',
statusTitle: 'Status',
configStatus: 'config: {status}',
notAvailable: 'n/a',
copyCommand: 'Copiar comando',
managedElsewhere: 'gerenciado em outro lugar',
noMatch: 'Nenhum plugin corresponde aos filtros atuais',
enabled: 'ativado',
disabled: 'desativado',
summary: {
total: 'Total',
active: 'Ativado / auto',
inactive: 'Inativo',
disabled: 'Desativado',
providerManaged: 'Gerenciado por provider',
},
status: {
enabled: 'Ativado',
'auto-active': 'Autoativo',
inactive: 'Inativo',
disabled: 'Desativado',
'provider-managed': 'Gerenciado por provider',
},
statusLabel: {
enabled: 'Ativado por configuração',
'auto-active': 'Autoativo',
inactive: 'Inativo',
disabled: 'Desativado',
'provider-managed': 'Gerenciado por provider',
},
configStatuses: {
enabled: 'ativado',
disabled: 'desativado',
'not-enabled': 'não ativado',
auto: 'auto',
'provider-managed': 'gerenciado por provider',
},
table: {
plugin: 'Plugin',
status: 'Status',
source: 'Origem',
kind: 'Tipo',
capabilities: 'Capacidades',
path: 'Caminho / entrypoint',
cli: 'CLI',
},
capabilities: {
tools: '{count} ferramentas',
hooks: '{count} hooks',
env: '{count} env',
},
metadata: {
agentRoot: 'Raiz do agente',
python: 'Python',
scanCwd: 'Verificar cwd',
projectPlugins: 'Plugins do projeto',
},
},
// Memory
memory: {
title: 'Memoria',
refresh: 'Atualizar',
loadFailed: 'Falha ao carregar a memoria',
myNotes: 'Minhas notas',
noNotes: 'Nenhuma nota ainda.',
notesPlaceholder: 'Escreva suas notas...',
userProfile: 'Perfil do usuario',
noProfile: 'Nenhum perfil ainda.',
profilePlaceholder: 'Escreva seu perfil...',
soul: 'Alma',
noSoul: 'Nenhuma configuracao de alma ainda.',
soulPlaceholder: 'Escreva a configuracao da alma...',
},
// Models
models: {
title: 'Modelos',
addProvider: 'Adicionar provedor',
providerType: 'Tipo de provedor',
preset: 'Predefinição',
custom: 'Personalizado',
selectProvider: 'Selecionar provedor',
chooseProvider: 'Escolha um provedor...',
name: 'Nome',
autoGeneratedName: 'Gerado automaticamente pela URL base',
baseUrl: 'URL base',
region: 'Região',
regionIntl: 'Internacional',
regionCn: 'China Continental',
baseUrlPlaceholder: 'ex. https://api.example.com/v1',
apiKey: 'Chave API',
apiKeyPlaceholder: 'sk-...',
defaultModel: 'Modelo padrao',
selectOrInput: 'Selecionar ou digitar um modelo...',
selectModel: 'Selecionar um modelo...',
providerAdded: 'Provedor adicionado',
providerDeleted: 'Provedor excluido',
deleteProvider: 'Excluir provedor',
deleteConfirm: 'Tem certeza de que deseja excluir "{name}"?',
codexLoginTitle: 'Login do OpenAI Codex',
codexWaiting: 'Digite este código na página de autorização para fazer login:',
codexCopyCode: 'Código copiado',
codexOpenLink: 'Abrir página de autorização',
codexApproved: 'Login bem-sucedido',
codexExpired: 'A autorização expirou. Por favor, tente novamente.',
nousLoginTitle: 'Login do Nous Portal',
nousWaiting: 'Insira este código na página de autorização:',
nousCopyCode: 'Código copiado',
nousOpenLink: 'Abrir página de autorização',
nousApproved: 'Login bem-sucedido',
nousDenied: 'Autorização negada',
nousExpired: 'Autorização expirada',
copilotLoginTitle: 'Login do GitHub Copilot',
copilotWaiting: 'Abra o GitHub e insira o código do dispositivo abaixo para autorizar. A janela fechará automaticamente após a aprovação.',
copilotCopyCode: 'Código copiado',
copilotOpenLink: 'Abrir a página de autorização do GitHub',
copilotApproved: 'Login bem-sucedido!',
copilotDenied: 'Autorização negada.',
copilotExpired: 'O link de autorização expirou. Tente novamente.',
copilotAddDetectedTitle: 'GitHub Copilot detectado',
copilotAddDetected: 'Foi detectado um token OAuth do GitHub Copilot nesta máquina. Clique em Adicionar para ativar o Copilot no Hermes.',
copilotAddSourceEnv: 'Origem: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)',
copilotAddSourceGhCli: 'Origem: gh CLI (gh auth token)',
copilotAddSourceAppsJson: 'Origem: extensão Copilot do VS Code (apps.json)',
copilotDeleteHintEnv: 'Isto irá limpar o COPILOT_GITHUB_TOKEN em ~/.hermes/.env. Outras ferramentas não são afetadas.',
copilotDeleteHintGhCli: 'O Copilot ficará oculto no Hermes. Sua sessão no gh CLI não é afetada — `gh auth status` continuará indicando que está conectado.',
copilotDeleteHintAppsJson: 'O Copilot ficará oculto no Hermes. A extensão Copilot do VS Code continuará conectada.',
customBadge: 'PERSONALIZADO',
previewBadge: 'PRÉVIA',
disabledBadge: 'INDISPONÍVEL',
disabledTooltip: "Este modelo não está disponível para sua conta.",
customModelPlaceholder: 'ID de modelo não listado',
customModelHint: 'Para modelos compatíveis com o provedor que a API não retorna; não é uma renomeação de exibição. Enter para carregar.',
noProviders: 'Nenhum provedor encontrado. Adicione um provedor personalizado para comecar.',
clearVisibleModels: 'Limpar seleção',
currentDefault: 'Padrão atual',
defaultShort: 'Padrão',
builtIn: 'Integrado',
customType: 'Personalizado',
provider: 'Provedor',
contextLength: 'Tamanho do contexto',
contextLengthPlaceholder: 'ex: 200000 (opcional)',
local: 'Local ({host})',
selectProviderRequired: 'Por favor, selecione um provedor',
baseUrlRequired: 'A URL base e obrigatoria',
apiKeyRequired: 'A chave API e obrigatoria',
modelRequired: 'O modelo padrao e obrigatorio',
enterBaseUrl: 'Por favor, insira a URL base primeiro',
unexpectedFormat: 'Formato de resposta inesperado',
foundModels: '{count} modelos encontrados',
fetchFailed: 'Falha ao buscar os modelos',
xaiWaiting: 'Conclua a autorização na página xAI aberta. A janela será fechada automaticamente após a aprovação.',
xaiOpenLink: 'Abrir página de autorização xAI',
xaiLoginTitle: 'Login OAuth xAI Grok',
xaiExpired: 'O link de autorização expirou. Tente novamente.',
xaiCopyLink: 'Copiar link de autorização',
xaiApproved: 'Login concluído!',
visibilitySelectOne: 'Mantenha pelo menos um modelo visível',
visibilitySaved: 'Modelos visíveis salvos',
visibilitySaveFailed: 'Falha ao salvar modelos visíveis',
visibilityHint: 'Afeta apenas o seletor de modelos e a página de modelos da Web UI. A configuração provider/model da Hermes CLI não é alterada; as chamadas ainda usam o ID original do modelo.',
showAllModels: 'Mostrar todos os modelos',
searchPlaceholder: 'Pesquisar modelos...',
removeCustomModel: 'Remover este modelo não listado',
more: 'mais',
models: 'Lista de modelos',
manageVisibleModelsFor: 'Gerenciar modelos visíveis de {name}',
manageVisibleModels: 'Gerenciar modelos visíveis',
getApiKey: 'Obter API Key',
count: 'modelos',
aliasUseOriginal: 'Restaurar ID original',
aliasTitleFor: 'Nome exibido de {model}',
aliasTitle: 'Nome exibido do modelo',
aliasSaveFailed: 'Falha ao salvar nome exibido',
aliasPlaceholder: 'Deixe vazio para usar o ID original do modelo',
aliasManageFor: 'Nomes exibidos de {provider}',
aliasManage: 'Nomes exibidos',
aliasHint: 'Altera apenas o nome exibido na Web UI. O Hermes ainda recebe o ID original do modelo.',
aliasEdit: 'Renomear',
aliasCanonical: 'ID original: {model}',
},
// Profiles
profiles: {
title: 'Perfis',
create: 'Criar perfil',
import: 'Importar',
export: 'Exportar',
rename: 'Renomear',
delete: 'Excluir',
switchTo: 'Trocar Hermes Profile',
switchConfirm: 'Isto executara `hermes profile use {name}` e alterara o active profile do Hermes CLI. Continuar?',
switchSuccess: 'Hermes active profile alterado para "{name}"',
switchFailed: 'Falha ao trocar Hermes Profile. O gateway pode precisar de reinicio manual.',
createSuccess: 'Perfil "{name}" criado',
createFailed: 'Falha ao criar o perfil',
renameSuccess: 'Perfil renomeado',
renameFailed: 'Falha ao renomear o perfil',
deleteConfirm: 'Tem certeza de que deseja excluir o perfil "{name}"?',
deleteSuccess: 'Perfil excluido',
deleteFailed: 'Falha ao excluir o perfil',
exportSuccess: 'Perfil exportado',
exportFailed: 'Falha ao exportar o perfil',
importSuccess: 'Perfil importado',
importFailed: 'Falha ao importar o perfil',
importSelectFile: 'Selecionar arquivo de arquivo',
importInvalidFile: 'Por favor, selecione um arquivo valido (.tar.gz, .tgz, .gz, .zip)',
name: 'Nome do perfil',
namePlaceholder: 'Apenas letras, numeros e hifens',
nameValidation: 'O nome do perfil só pode conter letras minúsculas, números, sublinhados e hifens',
newName: 'Novo nome',
newNamePlaceholder: 'Digite um novo nome',
cloneFromCurrent: 'Clonar do perfil atual',
cloneCleanupNotice: 'Ao clonar, as credenciais exclusivas de plataforma (Weixin / Telegram / Slack, etc.) são automaticamente ignoradas para evitar conflitos com o perfil de origem',
cloneStrippedCredentials: '{count} credencial(is) exclusiva(s) removida(s): {list}',
cloneDisabledPlatforms: '{count} plataforma(s) desabilitada(s): {list}',
cloneStrippedConfigCredentials: '{count} credencial(is) incorporada(s) removida(s) do config.yaml: {list}',
archivePath: 'Caminho do arquivo',
archivePathPlaceholder: 'Caminho do servidor para o arquivo',
importName: 'Nome do perfil (opcional)',
importNamePlaceholder: 'Deixe vazio para usar o nome do arquivo',
active: 'Ativo',
model: 'Modelo',
gateway: 'Gateway',
alias: 'Alias',
provider: 'Provedor',
path: 'Caminho',
skills: 'Habilidades',
hasEnv: 'Tem .env',
hasSoulMd: 'Tem soul.md',
noProfiles: 'Nenhum perfil encontrado. Crie um para comecar.',
avatar: {
title: 'Avatar personalizado',
customize: 'Personalizar avatar',
upload: 'Enviar imagem',
random: 'Gerar aleatório',
reset: 'Restaurar padrão',
hint: 'PNG, JPEG ou WebP, máximo 1 MB',
invalidType: 'Escolha uma imagem PNG, JPEG ou WebP',
tooLarge: 'A imagem do avatar não pode exceder 1 MB',
saveSuccess: 'Avatar salvo',
saveFailed: 'Falha ao salvar avatar',
resetSuccess: 'Avatar padrão restaurado',
resetFailed: 'Falha ao restaurar avatar padrão',
},
runtime: {
activeProfile: 'Atual: {name}',
bridgeWorker: 'Status do Bridge',
gateway: 'Gateway',
active: 'Ativo',
activeTag: 'Atual',
idle: 'Ocioso',
running: 'Em execução',
stopped: 'Parado',
restartGateway: 'Reiniciar gateway',
restartProfile: 'Reiniciar perfil',
switchProfile: 'Trocar perfil frontend',
gatewayRestarted: 'Gateway reiniciado: {name}',
gatewayRestartFailed: 'Falha ao reiniciar gateway',
profileRestarted: 'Perfil reiniciado: {name}',
profileRestartFailed: 'Falha ao reiniciar perfil',
},
},
// Logs
logs: {
title: 'Logs',
all: 'Todos',
searchPlaceholder: 'Buscar...',
refresh: 'Atualizar',
noEntries: 'Nenhuma entrada de log',
},
// Settings
settings: {
title: 'Configuracoes',
saved: 'Salvo',
saveFailed: 'Falha ao salvar',
tabs: {
display: 'Exibicao',
account: 'Conta atual',
users: 'Gerenciamento de contas',
agent: 'Agente',
memory: 'Memoria',
compression: 'Compressao',
session: 'Sessao',
privacy: 'Privacidade',
apiServer: 'Servidor API',
models: 'Modelos',
voice: 'Voz',
},
display: {
streaming: 'Respostas em streaming',
streamingHint: 'Mostrar respostas da IA em tempo real',
compact: 'Modo compacto',
compactHint: 'Reduzir espacamento entre mensagens',
showReasoning: 'Mostrar raciocinio',
showReasoningHint: 'Mostrar processo de pensamento do modelo',
showCost: 'Mostrar custo',
showCostHint: 'Mostrar uso de tokens nas respostas',
inlineDiffs: 'Diffs em linha',
inlineDiffsHint: 'Mostrar alteracoes de codigo em linha',
bellOnComplete: 'Som de conclusao',
bellOnCompleteHint: 'Tocar som quando a IA terminar',
busyInputMode: 'Modo de entrada ocupada',
busyInputModeHint: 'Permitir entrada enquanto a IA processa',
theme: 'Tema',
themeHint: 'Escolha claro, escuro ou seguir a preferencia do sistema',
themeLight: 'Claro',
themeDark: 'Escuro',
themeSystem: 'Sistema',
},
agent: {
maxTurns: 'Maximo de turnos',
maxTurnsHint: 'Maximo de rodadas de interacao por conversa',
gatewayTimeout: 'Timeout do gateway',
gatewayTimeoutHint: 'Timeout da requisicao em segundos',
restartDrainTimeout: 'Timeout de drenagem ao reiniciar',
restartDrainTimeoutHint: 'Timeout de drenagem antes de reiniciar em segundos',
toolEnforcement: 'Obrigatoriedade de ferramentas',
toolEnforcementHint: 'Controlar o modo de execucao de chamadas de ferramentas',
auto: 'Automatico',
always: 'Sempre',
never: 'Nunca',
},
memory: {
enabled: 'Ativar memoria',
enabledHint: 'Permitir que a IA lembre do contexto da conversa',
userProfile: 'Perfil do usuario',
userProfileHint: 'Permitir que a IA lembre das preferencias do usuario',
charLimit: 'Limite de caracteres da memoria',
charLimitHint: 'Maximo de caracteres para MEMORY.md',
userCharLimit: 'Limite de caracteres do perfil do usuario',
userCharLimitHint: 'Maximo de caracteres para USER.md',
},
compression: {
enabled: 'Ativar compressao',
enabledHint: 'Comprimir automaticamente historico longo antes de exceder o contexto do modelo',
threshold: 'Limiar de compressao',
thresholdHint: 'Iniciar compressao quando tokens estimados excederem esta proporcao do contexto',
targetRatio: 'Proporcao alvo',
targetRatioHint: 'Tamanho alvo do historico apos compressao como proporcao do contexto',
protectLastN: 'Proteger mensagens recentes',
protectLastNHint: 'Manter sem compressao esta quantidade de mensagens recentes',
protectFirstN: 'Proteger primeiras mensagens',
protectFirstNHint: 'Manter sem compressao esta quantidade de mensagens iniciais',
},
session: {
mode: 'Modo de reinicializacao',
modeHint: 'Condicao de acionamento para reinicializacao de sessao',
modeBoth: 'Inatividade + Agendado',
modeIdle: 'Somente inatividade',
modeDaily: 'Somente agendado',
modeNone: 'Nunca (apenas manual)',
idleMinutes: 'Timeout de inatividade',
idleMinutesHint: 'Tempo de espera antes da reinicializacao automatica (minutos)',
atHour: 'Horario de reinicializacao agendada',
humanOnly: 'Mostrar apenas sessões humanas',
humanOnlyHint: 'Oculta por padrão o ruído de subagentes e do monitor de sessões',
liveMonitorHumanOnly: 'Monitor ao vivo: mostrar apenas sessões humanas',
liveMonitorHumanOnlyHint: 'Oculta por padrão o ruído de subagentes e do monitor de sessões no monitor ao vivo',
atHourHint: 'Reiniciar sessao neste horario diariamente',
requireAuth: 'Autorização de sessão',
requireAuthHint: 'Requer autorização para operações de sessão',
},
privacy: {
redactPii: 'Ocultar dados pessoais',
redactPiiHint: 'Detectar e ocultar automaticamente informacoes sensiveis (senhas, chaves, etc.)',
},
apiServer: {
enable: 'Ativar',
enableHint: 'Ativar servidor API',
host: 'Host',
hostHint: 'Endereco de escuta',
port: 'Porta',
portHint: 'Porta de escuta',
key: 'Chave',
keyHint: 'Chave de acesso API',
cors: 'Origens CORS',
corsHint: 'Fontes cross-origin permitidas',
},
voice: {
ttsProvider: 'Provedor TTS',
ttsProviderHint: 'Escolha o mecanismo de texto para fala para reproducao de mensagens',
providerWebSpeech: 'WebSpeech API (Navegador)',
providerOpenai: 'OpenAI TTS',
providerCustom: 'Endpoint personalizado (compativel com OpenAI)',
providerEdge: 'Edge TTS (Gratuito, sem chave API)',
// WebSpeech
webspeechVoice: 'Voz',
webspeechVoiceHint: 'Selecione uma voz do seu navegador ou SO',
webspeechVoicePlaceholder: 'Auto (voz padrao)',
// OpenAI
openaiKey: 'Chave API',
openaiKeyHint: 'Sua chave API OpenAI com acesso TTS',
openaiUrl: 'URL base da API',
openaiUrlHint: 'ex. https://api.openai.com/v1/audio/speech',
openaiModel: 'Modelo',
openaiModelHint: 'tts-1 (mais rapido) / tts-1-hd (qualidade superior)',
openaiVoice: 'Voz',
openaiVoiceHint: 'Voz a ser usada para sintese',
// Custom endpoint
customHint: 'Use qualquer API TTS compativel com OpenAI — funciona com GPT-SoVITS, CosyVoice, etc.',
customUrl: 'URL da API',
customUrlHint: 'URL base do seu servico TTS',
customUrlPlaceholder: 'Endereco configurado no adaptador local, ex. http://127.0.0.1:9880',
customApiKey: 'Chave API (opcional)',
customApiKeyHint: 'Alguns endpoints personalizados exigem autenticacao',
customApiKeyPlaceholder: 'Deixe em branco se nao for necessario',
// Edge TTS
edgeHint: 'Desenvolvido por Microsoft Edge TTS (node-edge-tts).',
edgeUrl: 'URL do adaptador',
edgeUrlHint: 'Endereco do adaptador Edge TTS, ex. http://127.0.0.1:9882',
edgeUrlPlaceholder: 'http://127.0.0.1:9882',
edgeVoice: 'Voz',
edgeVoiceHint: 'Selecione uma voz para sintese de fala',
edgeRate: 'Velocidade',
edgeRateHint: 'Ajustar velocidade da fala (0.5x ~ 2.0x)',
edgePitch: 'Tom',
edgePitchHint: 'Ajustar tom da fala (-20 ~ +20 Hz)',
// Test
testTitle: 'Teste de voz',
testText: 'Texto de teste',
testTextPlaceholder: 'Insira o texto para testar...',
testTextDefault: 'Ola, este e um teste de voz.',
testButton: 'Testar',
testButtonPlaying: 'Reproduzindo...',
testFailed: 'Teste falhou: {error}',
// MiMo TTS
providerMimo: 'MiMo TTS',
mimoHint: 'Xiaomi MiMo TTS — vozes predefinidas, design de voz e clonagem de voz',
mimoApiKey: 'Chave API',
mimoApiKeyHint: 'Obtenha sua chave em platform.xiaomimimo.com',
mimoApiKeyPlaceholder: 'Chave API MiMo',
mimoBaseUrl: 'URL base',
mimoBaseUrlHint: 'URL do endpoint da API MiMo',
mimoModel: 'Modelo',
mimoModelHint: 'Selecione o modelo de síntese de voz',
mimoModelPreset: 'Vozes predefinidas',
mimoModelVoiceDesign: 'Design de voz',
mimoModelVoiceClone: 'Clonagem de voz',
mimoVoice: 'Voz',
mimoVoiceHint: 'Selecione uma voz predefinida',
mimoVoiceDesignPrompt: 'Descrição da voz',
mimoVoiceDesignPromptHint: 'Descreva as características de voz desejadas',
mimoVoiceDesignPromptPlaceholder: 'Ex: Uma voz feminina quente e jovem, ligeiramente lenta, com tom magnético',
mimoCloneAudio: 'Enviar áudio',
mimoCloneAudioHint: 'Envie uma amostra de áudio para clonagem (mp3/wav, máx. 10 MB)',
mimoCloneAudioUpload: 'Escolher arquivo',
mimoCloneAudioClear: 'Limpar',
mimoStylePrompt: 'Prompt de estilo',
mimoStylePromptHint: 'Opcional — descreva o estilo de fala em linguagem natural',
mimoStylePromptPlaceholder: 'Ex: Tom brilhante e animado, ritmo rápido',
},
lockedIps: {
title: 'IPs bloqueadas',
count: '{count} bloqueadas',
empty: 'Nenhuma IP bloqueada',
unlock: 'Desbloquear',
unlockAll: 'Desbloquear tudo',
unlockAllConfirm: 'Desbloquear todas as IPs?',
unlocked: 'IP desbloqueada',
allUnlocked: '{count} IPs desbloqueadas',
},
models: {
apiKey: 'API Key',
apiKeyPlaceholder: 'Digite a API Key',
noProviders: 'Nenhum provedor configurado',
save: 'Salvar',
saveFailed: 'Falha ao salvar',
saved: 'Salvo',
},
},
// Platform channel settings
platform: {
requireMention: "Exigir mencao {'@'}",
requireMentionGroup: "Exigir mencao {'@'} em grupos para responder",
requireMentionChannel: "Exigir mencao {'@'} em canais para responder",
requireMentionRoom: "Exigir mencao {'@'} em salas para responder",
reactions: 'Reacoes',
reactionsHint: 'Reagir a mensagens com emoji',
freeResponseChats: 'Chats de resposta livre',
freeResponseChatsHint: "IDs de chats que respondem sem mencao {'@'} (separados por virgula)",
freeResponseChannels: 'Canais de resposta livre',
freeResponseChannelsHint: "IDs de canais que respondem sem mencao {'@'} (separados por virgula)",
freeResponseRooms: 'Salas de resposta livre',
freeResponseRoomsHint: "IDs de salas que respondem sem mencao {'@'} (separados por virgula)",
mentionPatterns: 'Padroes de mencao personalizados',
mentionPatternsHint: 'Padroes de acionamento adicionais',
autoThread: 'Thread automatica',
autoThreadHint: "Criar automaticamente threads de resposta apos mencao {'@'}",
autoThreadHintRoom: 'Criar automaticamente threads de resposta em salas',
dmMentionThreads: 'Threads de mencao em DM',
dmMentionThreadsHint: 'Usar respostas em thread para mencoes em DMs',
allowBots: 'Permitir mensagens de bots',
allowBotsHint: 'Responder a mensagens de outros bots',
allowedChannels: 'Canais permitidos',
allowedChannelsHint: 'Lista branca de IDs de canais (separados por virgula)',
ignoredChannels: 'Canais ignorados',
ignoredChannelsHint: 'Canais onde o bot nunca responde (separados por virgula)',
noThreadChannels: 'Canais sem thread',
noThreadChannelsHint: 'Canais onde o bot responde sem threads (separados por virgula)',
exclusiveTokenWarning: 'Esta plataforma usa bloqueio exclusivo de token. Cada perfil deve usar um token de identidade diferente para evitar conflitos com outros perfis.',
botToken: 'Token do bot',
botTokenHint: 'Token do bot do portal do desenvolvedor',
accessToken: 'Token de acesso',
accessTokenHint: 'Token de acesso Matrix',
homeserver: 'URL do homeserver',
homeserverHint: 'URL do homeserver Matrix',
appId: 'ID do aplicativo',
appIdHint: 'ID do aplicativo Feishu',
appSecret: 'Segredo do aplicativo',
appSecretHint: 'Segredo do aplicativo Feishu',
clientId: 'ID do cliente',
clientIdHint: 'ID do cliente DingTalk',
clientSecret: 'Segredo do cliente',
clientSecretHint: 'Segredo do cliente DingTalk',
botId: 'ID do bot',
botIdHint: 'ID do bot WeCom',
wecomSecretHint: 'Segredo do bot WeCom',
waEnabled: 'Ativar WhatsApp',
waEnabledHint: 'Ativar WhatsApp via pareamento por codigo QR',
weixinToken: 'Token Weixin',
weixinTokenHint: 'Do login QR da CLI weixin (hermes weixin)',
accountId: 'ID da conta',
accountIdHint: 'ID da conta Weixin',
qrLogin: 'Login por QR',
qrRelogin: 'Reconectar',
qrFetching: 'Buscando codigo QR...',
qrScanHint: 'Escaneie com WeChat para fazer login',
qrScanedHint: 'Escaneado, por favor confirme no celular...',
qqSandboxHint: 'Ativar ambiente sandbox (para testes)',
qqSandbox: 'Modo sandbox',
qqQrScanHint: 'Escaneie o QR code com QQ ou abra o link no celular para concluir a vinculação',
qqMarkdownHint: 'Ativar mensagens em formato Markdown (alguns clientes podem não suportar)',
qqMarkdown: 'Suporte a Markdown',
qqAppSecretHint: 'App Secret do bot QQ Open Platform',
qqAppSecret: 'App Secret',
qqAppIdHint: 'App ID do bot QQ Open Platform',
qqAppId: 'App ID',
allowedUsersHint: 'Lista de permissões de IDs de usuário ou OpenID, separados por vírgula',
allowedUsers: 'Usuários permitidos',
allowAllUsersHint: 'Permite mensagens de qualquer usuário; desative para usar a lista de permissões',
allowAllUsers: 'Permitir todos os usuários',
},
// Language
language: {
label: 'Idioma',
zh: '中文',
en: 'English',
pt: 'Portugues',
},
// Terminal
terminal: {
sessions: 'Sessoes',
newTab: 'Novo terminal',
closeSession: 'Fechar esta sessao?',
sessionExited: 'Encerrada',
processExited: 'Processo encerrado com codigo {code}',
noSessions: 'Nenhuma sessão de terminal',
connectionFailed: 'Falha ao conectar ao terminal',
connectionError: 'Erro de conexão',
connectionClosed: 'Conexão fechada',
},
// Usage
usage: {
title: 'Estatisticas de uso',
refresh: 'Atualizar',
totalTokens: 'Total de tokens',
inputTokens: 'Entrada',
outputTokens: 'Saida',
totalSessions: 'Total de sessoes',
avgPerDay: '~{n}/dia em media',
estimatedCost: 'Custo est.',
cacheHitRate: 'Taxa de acerto de cache',
modelBreakdown: 'Detalhamento por modelo',
dailyTrend: 'Uso diario',
date: 'Data',
tokens: 'Tokens',
cache: 'Cache',
cacheRead: 'Leitura de cache',
cacheWrite: 'Escrita de cache',
sessions: 'Sessoes',
cost: 'Custo',
noData: 'Sem dados de uso',
},
skillsUsage: {
title: 'Uso de habilidades',
subtitle: 'Acompanhe carregamentos e edições de habilidades nas sessões Hermes',
refresh: 'Atualizar',
periodSelector: 'Período de uso de habilidades',
periodLabel: '{days} d',
summary: 'Resumo',
totalActions: 'Ações',
loads: 'Carga',
edits: 'Ed.',
distinctSkills: 'Habs.',
topSkills: 'Top habs.',
dailyTrend: 'Tendência diária',
periodSummary: 'Últimos {days} dias',
skill: 'Hab.',
share: '%',
lastUsed: 'Últ. uso',
noData: 'Nenhum dado de uso de habilidades',
loadFailed: 'Falha ao carregar o uso de habilidades',
otherSkills: 'Outras habs.',
},
// Registro de alteracoes
changelog: {
new_0_5_22_1: 'API de lista de sessões Hermes passa a ler o banco do perfil em vez do store local de sessões da Web UI',
new_0_5_23_1: 'Comandos slash de chat exclusivos do Bridge com sugestões localizadas',
new_0_5_23_2: 'Histórico de comandos persistente para replay de sessão sem poluir contexto, uso ou compressão',
new_0_5_23_3: 'Variáveis de ambiente do perfil gateway isoladas para evitar vazamento de credenciais entre perfis',
new_0_5_23_4: 'Porta da Web UI reservada durante alocação do gateway para evitar conflitos de inicialização',
new_0_5_23_5: 'Correção do reinício de autoatualização para não reportar saídas bem-sucedidas do helper como falha',
new_0_5_24_1: 'Chat Bridge alinhado ao API Server para entrada multimodal, prompt de sistema e contexto de workspace',
new_0_5_25_1: 'Ações de reset e clonagem de salas de chat em grupo',
new_0_5_25_2: 'Diretório de estado da Web UI configurável para layouts de deploy personalizados',
new_0_5_25_3: 'MiMo adicionado como provedor TTS nas configurações de voz',
new_0_5_25_4: 'Listas de modelos de provedores personalizados buscadas pelo backend para evitar falhas CORS do navegador',
new_0_5_25_5: 'Fluxo de aprovação de ferramentas corrigido para sessões Bridge',
new_0_5_25_6: 'Dica de plataforma CLI forçada removida dos prompts Bridge para preservar instruções personalizadas de mídia/arquivo',
new_0_5_25_7: 'Conteúdo de imagem base64 exibido corretamente no histórico de mensagens do usuário',
new_0_5_25_8: 'Testes Playwright de navegador, cobertura de contrato de streaming de chat, cobertura de modelos de provedor e baseline de cobertura adicionados',
new_0_5_26_1: 'Suporte a caminhos de mídia Markdown locais e do Windows no histórico e em mensagens renderizadas',
new_0_5_26_2: 'Histórico vazio do assistant filtrado e estado de compressão obsoleto limpo ao iniciar nova execução',
new_0_5_26_3: 'Escritas com lock para atualizações de config e perfil a fim de reduzir corrupção por concorrência',
new_0_5_26_4: 'Configurações de canais QQBot e DingTalk adicionadas',
new_0_5_26_5: 'Detecção de porta CLI portável e melhorias no tamanho da gaveta de terminal móvel',
new_0_5_26_6: 'Ambientes de perfil Bridge isolados e descoberta de plugins Hermes corrigida entre ambientes Python',
new_0_5_26_7: 'Estados de gateway parado explicados com diagnósticos Web UI e estado de carregamento de logs estável',
new_0_5_26_8: 'Opções de reset de sessão, base URL de provedor personalizado e destinos dinâmicos de entrega corrigidos',
new_0_5_26_9: 'Toggle local de visibilidade de trace de tool-call adicionado à barra de entrada do chat',
new_0_5_26_10: 'Instalação do pacote Hermes Agent suportada quando não há checkout de código-fonte disponível',
new_0_5_26_11: 'Login OAuth xAI Grok para usuários SuperGrok e presets de modelos Grok atualizados',
new_0_5_26_12: 'Cobertura ampliada de navegador, streaming de chat, provedor, gateway, config, plugin e Bridge',
new_0_5_27_1: 'Configurações de modelo por sessão para chats Bridge, com provider e model independentes salvos por sessão',
new_0_5_27_2: 'Clique com o botão direito em uma sessão Bridge e escolha Definir modelo para trocar o modelo daquela sessão',
new_0_5_27_3: 'Execuções validam o modelo da sessão e voltam ao modelo padrão atual quando o modelo salvo está indisponível',
new_0_5_27_4: 'Compressão de contexto segue por padrão o modelo selecionado como padrão no Profile atual',
new_0_5_30_1: 'Bridge chat preserva histórico estruturado, corrigindo ausência intermitente de resposta e execução de ferramentas pulada por histórico de ferramentas achatado',
new_0_5_30_2: 'Roteamento de menções no chat em grupo é mais confiável para múltiplos agentes, remove a própria menção antes da entrega e mantém nomes após atualizar',
new_0_5_30_3: 'Páginas de modelos, dropdowns de modelo do chat e seleção de modelo da sessão agora usam o Profile ativo com marcadores padrão precisos',
new_0_5_30_4: 'Gerenciamento de gateway simplificado: página Gateway independente removida, cada Profile verifica configuração de plataforma antes de iniciar e runner leve gerencia start/restart',
new_0_5_30_5: 'Inicialização do gateway melhorada em Docker, Termux e Windows com runtime-lock, limpeza de conflito de porta, execução em segundo plano e suporte a restart',
new_0_5_30_6: 'Compatibilidade Windows reforçada para detecção de caminhos, downloads e subprocessos job/update sem flashes de janelas de terminal',
new_0_5_30_7: 'Escritas de config e presets de provedor corrigidos: validar chaves .env, rotear FUN-Codex pela Responses API e atualizar listas Z.AI/GLM',
new_0_5_30_8: 'Detalhes de frontend polidos, incluindo sidebar recolhida, rótulos curtos de grupo, divisor lateral e estilo do outline da conversa',
new_0_5_30_9: 'Compressão de contexto segue configurações do Profile e fortalece snapshots obsoletos reutilizando resumos anteriores com cauda segura',
new_0_5_31_1: 'Reinícios do Bridge broker reforçados, renderização final do stream de chat em grupo corrigida e roteamento {\'@\'}all adicionado',
new_0_5_31_2: 'Gerenciador de arquivos pode copiar caminhos absolutos e a gaveta móvel de sessões não fica mais atrás do chat',
new_0_5_31_3: 'Seletor de Profile mostra avatares, upload de avatar personalizado, modal de status runtime e ações de restart de gateway/Profile',
new_0_5_31_4: 'Avatares de Profile aparecem em chat individual, chat em grupo e sidebar recolhida, com metadados Web UI e caminhos seguros para Windows',
new_0_5_31_5: 'Detecção e restart de gateway em Docker, Termux e Windows melhorados usando gateway_state/gateway.pid para liveness do gateway gerenciado',
new_0_5_31_6: 'Endpoint de mídia APIKEY.FUN para geração de imagens e skill apikey-image-gen integrado para texto-imagem, imagem-imagem e edição via provider fun-codex do Profile ativo',
new_0_5_33_1: 'Falhas de execução e erros Socket em chat individual e em grupo agora ficam como mensagens Agent vermelhas na lista de mensagens',
new_0_5_33_2: 'A busca de sessões pode ser limitada ao Profile selecionado, ou buscar todos os Profiles quando nenhum estiver selecionado',
new_0_5_33_3: 'A página Skills mostra documentos de recomendação em chinês/inglês quando nenhum skill está selecionado, e um segundo clique desmarca o skill',
new_0_5_33_4: 'Remove entradas de changelog i18n não usadas para reduzir o tamanho do frontend',
new_0_5_33_5: 'Corrige falha de inicialização do agent bridge no Windows chinês causada pela codificação da saída do netstat',
new_0_5_33_6: 'Atualiza a lista de modelos Nous Portal pelo catalog público e recomendações do Portal',
new_0_5_33_7: 'Listas e status runtime de Profile leem nomes dos diretórios e modelos padrão do config, evitando erros por largura de colunas da CLI',
new_0_5_34_1: 'Normaliza resultados de tools multimodais ao armazenar mensagens de sessão/grupo, evitando imagens base64 nos replays',
new_0_5_34_2: 'Persiste modelos Hermes personalizados em configuração gerenciada pelo backend e adiciona endpoints de adicionar/remover modelo',
new_0_5_34_3: 'Mantém uso final de contexto e status de tools do Bridge corretos após a conclusão das execuções',
new_0_5_34_4: 'Melhora filtros de Kanban, exibição de responsáveis, ações de cards e detalhes de tarefas',
new_0_5_34_5: 'Corrige contagem de uso da compressão com cache de contexto fixo de prompt/tools e totais completos de tokens',
new_0_5_34_6: 'Cacheia contexto fixo por agent no chat em grupo e mostra progresso apenas quando a compressão realmente inicia',
new_0_5_34_7: 'Sincroniza skills integradas do Web UI em todos os Profiles e registra o Profile alvo nos logs',
new_0_5_34_8: 'Se o Kanban falhar no Windows, atualize o Hermes para receber as correções mais recentes de migração do banco Kanban',
new_0_5_35_1: 'Sessões Bridge agora podem executar em paralelo entre sessions diferentes, enquanto runs da mesma session continuam serializados para preservar a ordem',
new_0_5_35_2: 'Adiciona a página Performance Monitor para CPU/memória do sistema, Web UI, Bridge Broker, Workers e status de sessões ativas',
new_0_5_35_3: 'Adiciona métricas por worker com CPU, memória, Profile, número de sessões e estado de execução',
new_0_5_35_4: 'Melhora a limpeza do ciclo de vida dos Bridge workers para recuperar workers no encerramento do Broker ou do processo pai e reduzir processos Python órfãos',
new_0_5_35_5: 'Fortalece a compatibilidade do monitoramento com fallbacks de coleta para macOS, Windows, Linux, Docker e Termux',
new_0_5_35_6: 'Performance Monitor não bloqueia mais em requests a workers durante a inicialização de Agents, reduzindo request timeouts no Windows',
new_0_5_35_7: 'Chat Markdown agora suporta preview inline de conteúdo de texto, e ícones de download baixam arquivos diretamente sem abrir o drawer',
new_0_5_35_8: 'Melhora o drawer de conteúdo com ação de fechar no mobile, largura total no mobile, 800px no desktop e fundos consistentes para texto/Markdown',
new_0_6_0_1: 'A gestão por conta e por Profile agora protege de forma consistente sessões, modelos, uso, Kanban, jobs, uploads, mídia e APIs Hermes relacionadas',
new_0_6_0_2: 'Skills de mídia integrados usam o token de servidor gerado apenas para endpoints de mídia e resolvem credenciais fun-codex/xAI a partir do Profile solicitado',
new_0_6_0_3: 'Chat individual e em grupo injetam o Hermes Profile atual nas instruções do run para que Skills enviem X-Hermes-Profile',
new_0_6_0_4: 'O progresso de subagents de delegate_task aparece na UI do chat com estados de início, ferramenta, progresso e conclusão',
new_0_6_0_5: 'Parar ou abortar um run limpa eventos temporários para que estados abort antigos não passem para o próximo chat',
new_0_6_0_6: 'Atualiza documentação e site para gestão de contas, credenciais padrão, gestão conta/Profile, uploads/downloads e Skills de mídia',
new_0_6_0_7: 'Adiciona comandos CLI de manutenção para limpar bloqueios de IP de login e redefinir o login padrão admin / 123456',
new_0_6_0_8: 'A versão 0.6.0 é o limite entre a Web UI de usuário único e multiusuário. Se o modo multiusuário causar problemas, abra uma issue e volte para a versão 0.5.35 de usuário único se necessário',
},
// Arquivos
files: {
title: 'Arquivos',
tree: 'Arvore de diretorios',
list: 'Lista de arquivos',
breadcrumbRoot: 'Inicio',
newFile: 'Novo arquivo',
newFolder: 'Nova pasta',
upload: 'Enviar',
refresh: 'Atualizar',
open: 'Abrir',
edit: 'Editar',
preview: 'Visualizar',
download: 'Baixar',
copyPath: 'Copiar caminho',
rename: 'Renomear',
delete: 'Excluir',
name: 'Nome',
size: 'Tamanho',
modified: 'Modificado',
actions: 'Acoes',
emptyDir: 'Diretorio vazio',
loading: 'Carregando...',
confirmDelete: 'Tem certeza de que deseja excluir "{name}"?',
confirmDeleteDir: 'Tem certeza de que deseja excluir o diretorio "{name}" e todo o seu conteudo?',
deleteFailed: 'Falha ao excluir',
deleted: 'Excluido',
renameTo: 'Renomear para',
newFileName: 'Nome do arquivo',
newFolderName: 'Nome da pasta',
created: 'Criado',
createFailed: 'Falha ao criar',
renamed: 'Renomeado',
renameFailed: 'Falha ao renomear',
uploadSuccess: '{count} arquivo(s) enviado(s)',
uploadFailed: 'Falha ao enviar',
saveFailed: 'Falha ao salvar',
saved: 'Salvo',
unsavedChanges: 'Voce tem alteracoes nao salvas. Descartar?',
pathCopied: 'Caminho copiado',
fileTooLarge: 'Arquivo muito grande (max 10MB)',
permissionDenied: 'Nao e possivel modificar arquivo protegido',
notFound: 'Arquivo ou diretorio nao encontrado',
backendError: 'Falha na operacao de arquivo',
dragDropHint: 'Arraste arquivos aqui para enviar',
closeEditor: 'Fechar editor',
closePreview: 'Fechar',
saveFile: 'Salvar',
fileTree: 'Árvore de arquivos',
},
// Chat em grupo
groupChat: {
title: 'Chat em grupo',
createRoom: 'Criar sala',
joinByCode: 'Entrar com codigo',
roomName: 'Nome da sala',
roomNamePlaceholder: 'Digite o nome da sala',
inviteCode: 'Codigo de convite',
autoGenerate: 'Gerar automaticamente',
noRooms: 'Nenhuma sala ainda',
selectOrCreate: 'Selecione ou crie uma sala para comecar a conversar',
agents: 'Agentes',
addAgent: 'Adicionar agente',
selectProfile: 'Selecione um perfil',
agentAdded: 'Agente adicionado',
agentAlreadyInRoom: 'O agente ja esta nesta sala',
agentAddFailedCount: '{count} agente(s) nao foram adicionados: {details}',
noAgents: 'Nenhum agente nesta sala',
members: 'Membros',
roomCreated: 'Sala criada',
roomDeleted: 'Sala excluída',
roomCloned: 'Sala clonada',
cloneRoom: 'Clonar sala',
copyRoomLink: 'Copiar link da sala',
deleteRoomConfirm: 'Excluir esta sala?',
clearContext: 'Limpar contexto',
clearContextConfirm: 'Limpar o contexto desta sala? Mensagens e snapshots de compactação serão removidos, mas agentes e membros ficam.',
contextCleared: 'Contexto limpo',
you: 'Você',
joined: 'Entrou na sala',
joinFailed: 'Falha ao entrar na sala',
inputPlaceholder: 'Digite uma mensagem... (Enter para enviar)',
enterCode: 'Digite o codigo de convite',
yourName: 'Seu nome',
yourNamePlaceholder: 'Digite seu nome de exibicao',
yourDescription: 'Descricao (opcional)',
yourDescriptionPlaceholder: 'Conte aos outros quem voce e...',
agentName: 'Nome do agente',
agentNamePlaceholder: 'Nome personalizado (vazio = nome do perfil)',
agentDesc: 'Descrição do agente',
agentDescPlaceholder: 'Descreva o que este agente faz...',
agentReplying: 'está respondendo...',
agentCompressing: 'está compactando contexto...',
compressionSettings: 'Configuração de compactação',
triggerTokens: 'Tokens de acionamento',
triggerTokensDesc: 'Limite de tokens para acionar a compactação',
maxHistoryTokens: 'Máx. tokens de histórico',
maxHistoryTokensDesc: 'Máximo de tokens para o contexto compactado',
tailMessageCount: 'Mensagens recentes',
tailMessageCountDesc: 'Número de mensagens recentes a manter',
compressionConfig: 'Config. de compactação',
compressNow: 'Compactar agora',
compressingInProgress: 'Compactação em andamento',
compressionSaved: 'Configuração salva',
},
// Download
download: {
downloading: 'Baixando...',
downloadFailed: 'Falha no download',
fileNotFound: 'Arquivo nao encontrado ou excluido',
fileTooLarge: 'Arquivo muito grande (limite excedido)',
backendError: 'Falha ao ler o arquivo, o ambiente remoto pode estar indisponivel',
backendTimeout: 'Tempo esgotado para ler o arquivo',
unsupportedBackend: 'O backend de terminal atual nao suporta download de arquivos',
invalidPath: 'Caminho de arquivo invalido',
contentDisplay: 'Exibicao de conteudo',
download: 'Baixar',
downloadFile: 'Baixar arquivo',
},
gateways: {
title: 'Gateways',
running: 'Em execução',
stopped: 'Parado',
started: 'Iniciado',
startFailed: 'Falha ao iniciar gateway',
stopFailed: 'Falha ao parar gateway',
},
kanban: {
title: 'Quadro Kanban',
createTask: 'Nova tarefa',
noTasks: 'Nenhuma tarefa',
allStatuses: 'Todos os status',
allAssignees: 'Todos os responsáveis',
columns: {
triage: 'Triagem',
todo: 'A fazer',
ready: 'Pronto',
running: 'Em andamento',
blocked: 'Bloqueado',
done: 'Concluído',
archived: 'Arquivado',
},
card: {
assigneeTooltip: 'Responsável',
priority: {
low: 'Baixa',
medium: 'Média',
high: 'Alta',
},
timeAgo: {
justNow: 'agora mesmo',
minutes: 'há {count} min',
hours: 'há {count} h',
days: 'há {count} d',
},
},
board: {
create: 'Novo quadro',
archive: 'Arquivar quadro',
archiveConfirm: 'Arquivar o quadro atual?',
archived: 'Quadro arquivado',
created: 'Quadro criado',
slugPlaceholder: 'Identificador do quadro, ex. project-a',
namePlaceholder: 'Nome exibido (opcional)',
slugRequired: 'O identificador do quadro é obrigatório',
},
form: {
title: 'Título',
titlePlaceholder: 'Título da tarefa',
titleRequired: 'Título é obrigatório',
body: 'Descrição',
bodyPlaceholder: 'Descrição da tarefa (opcional)',
assignee: 'Responsável',
selectAssignee: 'Selecionar responsável...',
priority: 'Prioridade',
selectPriority: 'Selecionar prioridade...',
},
detail: {
status: 'Status',
priority: 'Prioridade',
assignee: 'Responsável',
tenant: 'Locatário',
createdAt: 'Criado',
startedAt: 'Iniciado',
completedAt: 'Concluído',
comments: 'Comentários',
events: 'Eventos',
runs: 'Execuções',
artifacts: 'Arquivos gerados',
result: 'Resultado',
highlights: 'Informações principais',
sources: 'Fontes de dados',
sessions: 'Sessões relacionadas',
sessionMessages: 'Mensagens da sessão',
noSessions: 'Nenhuma sessão relacionada encontrada.',
},
action: {
title: 'Ações',
assign: 'Atribuir',
assignTo: 'Atribuir a...',
block: 'Bloquear',
blockReason: 'Motivo do bloqueio',
unblock: 'Desbloquear',
complete: 'Concluir',
completeSummary: 'Resumo de conclusão (opcional)',
},
message: {
loadFailed: 'Falha ao carregar tarefa',
taskCreated: 'Tarefa criada',
taskAssigned: 'Tarefa atribuída',
taskBlocked: 'Tarefa bloqueada',
taskUnblocked: 'Tarefa desbloqueada',
taskCompleted: 'Tarefa concluída',
},
stats: {
total: 'Total',
tasks: 'Tarefas',
},
},
}