ce08d2b05a
* feat: add skills usage monitoring * fix: localize Skills Usage page copy * fix: keep Skills Usage labels compact
1034 lines
46 KiB
TypeScript
1034 lines
46 KiB
TypeScript
export default {
|
|
// Login
|
|
login: {
|
|
title: 'Hermes Web UI',
|
|
description: 'Insira seu token de acesso para continuar. Encontre-o nos logs de inicializacao do servidor.',
|
|
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',
|
|
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',
|
|
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: 'Configure um nome de usuario e senha para login conveniente. O token de acesso continuara funcionando como backup.',
|
|
removeConfirm: 'Tem certeza de que deseja remover o login por senha? Voce precisara usar o token de acesso.',
|
|
passwordLoginNotConfigured: 'Login por senha nao configurado',
|
|
passwordLoginConfigured: 'Login por senha habilitado ({username})',
|
|
},
|
|
|
|
// 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',
|
|
},
|
|
|
|
// 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',
|
|
skillsUsage: 'Uso de habilidades',
|
|
channels: 'Canais',
|
|
terminal: 'Terminal',
|
|
files: 'Arquivos',
|
|
groupChat: 'Chat em grupo',
|
|
groupConversation: 'Conversa',
|
|
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, por favor reinicie o servidor',
|
|
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',
|
|
},
|
|
|
|
// 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',
|
|
inputPlaceholder: 'Digite uma mensagem... (Enter para enviar, Shift+Enter para nova linha)',
|
|
attachFiles: 'Anexar arquivos',
|
|
messageQueue: 'Fila de mensagens',
|
|
removeQueuedMessage: 'Remover mensagem da fila',
|
|
stop: 'Parar',
|
|
send: 'Enviar',
|
|
contextUsed: 'Contexto utilizado:',
|
|
sessions: 'Sessoes',
|
|
webUiSessions: 'Sessões',
|
|
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 somente leitura, agrupadas por origem.',
|
|
noSessions: 'Sem sessoes',
|
|
newChat: 'Novo chat',
|
|
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: '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',
|
|
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: 'Execution time', 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',
|
|
},
|
|
|
|
// 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',
|
|
},
|
|
},
|
|
|
|
// 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: 'Agent root',
|
|
python: 'Python',
|
|
scanCwd: 'Scan 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: 'Preset',
|
|
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.',
|
|
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',
|
|
},
|
|
|
|
// Profiles
|
|
profiles: {
|
|
title: 'Perfis',
|
|
create: 'Criar perfil',
|
|
import: 'Importar',
|
|
export: 'Exportar',
|
|
rename: 'Renomear',
|
|
delete: 'Excluir',
|
|
switchTo: 'Mudar para',
|
|
switchConfirm: 'Mudar para o perfil "{name}" reiniciara o gateway. Continuar?',
|
|
switchSuccess: 'Mudou para o perfil "{name}"',
|
|
switchFailed: 'Falha ao mudar de perfil. 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.',
|
|
},
|
|
|
|
// 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',
|
|
agent: 'Agente',
|
|
memory: 'Memoria',
|
|
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',
|
|
},
|
|
session: {
|
|
mode: 'Modo de reinicializacao',
|
|
modeHint: 'Condicao de acionamento para reinicializacao de sessao',
|
|
modeBoth: 'Inatividade + Agendado',
|
|
modeIdle: 'Somente inatividade',
|
|
modeHourly: 'Somente agendado',
|
|
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}',
|
|
},
|
|
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',
|
|
},
|
|
},
|
|
|
|
// 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...',
|
|
},
|
|
|
|
// 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}',
|
|
},
|
|
|
|
// 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: 'Cache Read',
|
|
cacheWrite: 'Cache Write',
|
|
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_6_1: 'Reprodução de voz: Web Speech API, botão manual, interruptor auto-play, animação de borda arco-íris e otimização móvel',
|
|
new_0_5_6_2: 'Parser JSON LLM robusto com tolerância ao formato Python e extração de texto de eventos streaming',
|
|
new_0_5_6_3: 'Melhorias de Skills: estatísticas de uso, filtragem de fonte, skills arquivados, procedência e toggle de fixação',
|
|
new_0_5_6_4: 'Estatísticas diárias de uso expandidas com breakdown detalhado de tokens incluindo separação de leitura/escrita de cache',
|
|
new_0_5_6_5: 'Escopo do histórico de sessões clarificado com descrições melhoradas nas visualizações de chat e histórico',
|
|
new_0_5_6_6: 'Processamento de anexos reprojetado usando formato de matriz ContentBlock estilo Anthropic (texto, imagem, arquivo)',
|
|
new_0_5_6_7: 'Adicionada funcionalidade de download de arquivos frontend suportando formatos ContentBlock e Markdown com autenticação',
|
|
new_0_5_6_8: 'Corrigido conflito de múltiplos processos que causava redefinições do banco de dados SQLite eliminando instâncias nodemon redundantes',
|
|
new_0_5_9_1: 'Unificar gerenciamento de perfis em todo o aplicativo com API e gerenciamento de estado consistentes',
|
|
|
|
new_0_5_14_1: 'Add session export with full and compressed modes (JSON or plain text)',
|
|
new_0_5_14_2: 'Fix terminal PTY resource exhaustion, switch to lazy connect',
|
|
new_0_5_14_3: 'Fix WSL2 health check failure caused by IPv6 dual-stack binding',
|
|
new_0_5_14_4: 'Fix SQLite connection not released on shutdown causing database lock',
|
|
new_0_5_14_5: 'Update FUN provider models, add builtin badge and API relay link',
|
|
new_0_5_15_1: 'Quadro Kanban para gestão visual de tarefas e sessões',
|
|
new_0_5_15_2: 'Página inicial e site de documentação oficiais',
|
|
new_0_5_15_3: 'Cliente agente group-chat usa porta dinâmica em vez de 8648',
|
|
new_0_5_15_4: 'Módulo de voz node-edge-tts adicionado',
|
|
new_0_5_15_5: 'Corrigido bind de host de escuta WSL padrão',
|
|
new_0_5_15_6: 'Metadados SEO para página inicial do site',
|
|
new_0_5_15_7: 'Proteção contra ataques de força bruta baseada em IP',
|
|
new_0_5_15_8: 'Corrigido empacotamento duplo de URLs de download no MarkdownRenderer',
|
|
new_0_5_15_9: 'Corrigido renderização de mídia Markdown e retry de sincronização',
|
|
new_0_5_15_10: 'Removida dependência de variável de ambiente upstream',
|
|
new_0_5_15_11: 'Se o recurso Kanban não estiver disponível, atualize o hermes-agent',
|
|
new_0_5_16_1: 'Migrar streaming de chat de /v1/runs para /v1/responses API para menor latência',
|
|
new_0_5_16_2: 'Persistir uso real da API (tokens, cache, raciocínio) na tabela de estatísticas',
|
|
new_0_5_16_3: 'Adicionar código QR do grupo QQ à barra de navegação do site',
|
|
new_0_5_16_4: 'Remover campo codex_reasoning_items não utilizado do esquema de mensagens',
|
|
new_0_5_17_1: 'Compatibilidade total com Windows: manipulação de caminhos, gerenciamento de processos, terminal, análise de logs',
|
|
new_0_5_17_2: 'Refatorado gerenciamento de processos do Gateway com início/parada/health-check multiplataforma',
|
|
new_0_5_17_3: 'Corrigida descoberta de plugins no Termux analisando o shebang do hermes para localizar o Python',
|
|
new_0_5_17_4: 'Tolerar chaves YAML duplicadas na análise de configuração',
|
|
new_0_5_17_5: 'Melhorada janela de bloqueio de autenticação e fluxo de desligamento do ambiente de desenvolvimento',
|
|
new_0_5_17_6: 'Tema Comic: fontes manuscritas para chinês (ZCOOL KuaiLe), japonês (Zen Maru Gothic), coreano (Gaegu)',
|
|
new_0_5_17_7: 'Adicionar estilo de tema Comic/doodle',
|
|
new_0_5_17_8: 'Alterar licença para BSL-1.1',
|
|
new_0_5_17_9: 'Adicionar página de plugins Hermes somente leitura',
|
|
new_0_5_17_10: 'Converter uploads de imagem para formato multimodal base64',
|
|
new_0_5_17_11: 'Corrigir seleção e isolamento do quadro Kanban',
|
|
new_0_5_17_12: 'Adicionar configurações de reprodução de voz com suporte TTS de 4 provedores',
|
|
new_0_5_17_13: 'Reduzir limiar de compressão de contexto de 200 para 150 mensagens',
|
|
new_0_5_17_14: 'Corrigir lógica de reinicialização de autoatualização da Web UI',
|
|
new_0_5_17_15: 'Corrigir variável de ambiente compartilhada opencode-zen e opencode-go causando acoplamento de configuração',
|
|
new_0_5_17_16: 'Adicionar suporte ao idioma Chinês Tradicional (zh-TW)',
|
|
new_0_5_17_17: 'Suportar gerenciamento de modelos visíveis na Web UI',
|
|
new_0_5_17_18: 'Kanban: cadeia completa de ações de tarefas (comentários, logs, atribuição, despacho) com limites de capacidades',
|
|
new_0_5_17_19: 'Corrigir entradas de autenticação do provedor não limpas ao excluir',
|
|
new_0_5_17_20: 'Corrigir reconhecimento de autenticação credential-pool do Codex',
|
|
new_0_5_17_21: 'Adicionar controles deslizantes de velocidade/tom do Edge TTS às configurações de voz',
|
|
new_0_5_17_22: 'Chaves YAML duplicadas na configuração não causam mais falhas na análise',
|
|
new_0_5_17_23: 'Propriedade da porta do gateway agora baseada em arquivo PID, prevenindo sequestro de porta entre perfis',
|
|
new_0_5_17_24: 'Página de histórico agora exibe registros de sessões Cron',
|
|
new_0_5_17_25: 'Corrigir ícones de troca de idioma e tema comprimidos na barra lateral recolhida',
|
|
new_0_5_13_1: 'Fila de mensagens para processamento sequencial de execuções, evitando conflitos concorrentes',
|
|
new_0_5_13_2: 'Suporte à estrutura de diretório de skills de dois níveis com categoria diversos',
|
|
new_0_5_13_3: 'Filtrar sessões efêmeras (eph_*) durante a sincronização na inicialização',
|
|
new_0_5_13_4: 'Compatibilidade com ambiente Termux/proot para implantações móveis e embarcadas',
|
|
new_0_5_13_5: 'Ciclo de aborto de execução de chat: limpeza adequada ao cancelar',
|
|
new_0_5_13_6: 'Remover indicador de streaming da lista de mensagens do histórico',
|
|
new_0_5_13_7: 'Corrigir resolução de contexto para provedores personalizados',
|
|
new_0_5_13_8: 'Corrigir vinculação de endereço de escuta IPv6 padrão',
|
|
new_0_5_13_9: 'Melhorar exibição de mensagens do chat e lógica de compressão de contexto',
|
|
new_0_5_13_10: 'Corrigir alternância do som de conclusão do chat e histórico vazio do cron silencioso',
|
|
new_0_5_12_1: 'Exclusão em lote de sessões: seleção múltipla com checkbox, selecionar todos e excluir em lote',
|
|
new_0_5_12_2: 'Editor visual de tamanho de contexto: clique na contagem de tokens para abrir o modal de edição',
|
|
new_0_5_12_3: 'Corrigir seleção de teclado @mention: substituir NDropdown por dropdown personalizado',
|
|
new_0_5_12_4: 'Som de conclusão do chat: alternar reprodução automática',
|
|
new_0_5_12_5: 'Melhorar exibição de mensagens do chat: filtrar mensagens vazias do assistente',
|
|
new_0_5_12_6: 'Mecanismo de atualização aprimorado: usar npm prefix -g para resolução dinâmica de caminho',
|
|
new_0_5_10_1: 'Automatizar builds de imagens Docker no GitHub release com tags versionados (ex. :v0.5.10)',
|
|
new_0_5_10_2: 'Adicionar configuração do modo de autorização de sessão: approvals.mode (desligado/manual)',
|
|
new_0_5_10_3: 'Adicionar geração automática de documentação OpenAPI (94 endpoints, 24 tags)',
|
|
new_0_5_10_4: 'Melhorar renderização de mídia: suporte para imagens, vídeos e arquivos em Markdown',
|
|
new_0_5_10_5: 'Otimizar prompts de chat em grupo e corrigir manuseio de mídia',
|
|
new_0_5_9_2: 'Adicionar modelos de issues e pull requests do GitHub para melhor fluxo de contribuição',
|
|
new_0_5_8_1: 'Adicionar painel de gaveta com suporte de barra lateral móvel e botão arco-íris personalizável',
|
|
new_0_5_8_2: 'Corrigir problema de sincronização de estado de troca de perfil com atualização imediata de IU e verificação de backend',
|
|
new_0_5_8_3: 'Filtrar caracteres especiais e emoji na reprodução de voz para melhor síntese de voz',
|
|
new_0_5_8_4: 'Adicionar chave i18n ausente e unificar fonte de dados de sessão para priorizar banco de dados',
|
|
new_0_5_8_5: 'Otimizar configuração de build Vite para builds Docker mais rápidos com esbuild e divisão de chunks',
|
|
new_0_5_7_1: 'Otimizar compressão de contexto para suportar conteúdo rico (imagens, arquivos) com melhoria no manuseio de mensagens de ferramentas',
|
|
new_0_5_7_2: 'Melhorar sincronização de sessões com inserções em lote e proteção de transações para consistência de dados',
|
|
new_0_5_7_3: 'Corrigir recepção de eventos usage.updated para garantir rastreamento preciso de tokens entre execuções',
|
|
new_0_5_5_1: '🎉 Feliz Dia do Trabalhador! Hoje não se trabalha, obrigado pela compreensão',
|
|
new_0_5_5_2: 'Adicionada página de histórico para sessões Hermes',
|
|
new_0_5_5_3: 'Página de histórico gerencia sessões de forma independente',
|
|
new_0_5_5_4: 'Carregamento automático da primeira sessão CLI',
|
|
new_0_5_5_5: 'Componente HistoryMessageList com injeção de props',
|
|
new_0_5_5_6: 'Filtragem de mensagens vazias e tools sem toolName',
|
|
new_0_5_5_7: 'Removido cache de sessões localStorage, dados do backend',
|
|
new_0_5_5_8: 'Otimizada troca de perfil',
|
|
new_0_5_4_2: 'Fix concurrent chat sessions event cross-talk with WebSocket event routing refactoring',
|
|
new_0_5_4_3: 'Fix cron job edit payloads with partial PATCH to support long prompt name-only edits',
|
|
new_0_5_4_4: 'Fix web terminal Hermes CLI availability after Docker deployment',
|
|
new_0_5_4_5: 'Add workspace dialog i18n translations for title and improve session persistence',
|
|
new_0_5_4_6: 'Support code block copy feedback with user notifications',
|
|
new_0_5_4_7: 'Align usage analytics with Hermes state DB schema',
|
|
new_0_4_8_2: 'Fix nested markdown fence rendering truncation',
|
|
new_0_4_8_3: 'Fix compressed session lineage projection and search',
|
|
new_0_4_8_4: 'Optimize session list N+1 queries and fix search 500 on non-CJK input',
|
|
new_0_4_8_5: 'Fix forced scroll to bottom when switching back from other tabs',
|
|
new_0_4_8_6: 'Smooth session switch with loading transition overlay',
|
|
new_0_4_8_7: 'Fix login token validation using Hermes session endpoint',
|
|
new_0_4_8_8: 'Fix image attachments broken after page refresh (blob URL persistence)',
|
|
new_0_4_8_9: 'Click image attachments to preview in fullscreen overlay',
|
|
new_0_4_8_10: 'Move upload directory from temp to ~/.hermes-web-ui/upload',
|
|
new_0_4_7_1: 'Exibicao em streaming em tempo real de blocos de pensamento/razoamento',
|
|
new_0_4_7_2: 'Ignorar script de preparacao durante o build Docker',
|
|
new_0_4_7_3: 'Melhorias na UX mobile do chat em grupo e polimento da UI',
|
|
new_0_4_7_4: 'Limitar os tokens restantes do contexto a 0 em vez de negativo',
|
|
new_0_4_7_5: 'Adicionar provedor integrado Alibaba Coding Plan com substituicao de base_url no .env',
|
|
new_0_4_7_6: 'Ignorar perfis remotos na inicializacao para evitar travamento',
|
|
new_0_4_7_7: 'Detectar e exibir erros de execucao silenciosamente engolidos',
|
|
new_0_4_7_8: 'Consulta de comprimento de contexto consciente do provedor',
|
|
new_0_4_7_9: 'Redefinir config.model ao trocar e resolver provedor personalizado CLI',
|
|
new_0_4_7_10: 'Limpar base_url_env do .env ao excluir provedor integrado',
|
|
new_0_4_7_11: 'Alinhar o fundo da barra lateral da sala de chat em grupo com a lista de sessoes',
|
|
new_0_4_5_1: 'Add group chat with multi-agent rooms, mention routing, and typing status recovery',
|
|
new_0_4_5_2: 'Rewrite model-context config to use YAML with context_length setting',
|
|
new_0_4_5_3: 'Add gpt-5.5 to OpenAI Codex model list',
|
|
new_0_4_5_4: 'Replace jobs proxy with local controller and optimize model loading',
|
|
new_0_4_5_5: 'Add i18n support for custom model feature in ModelSelector',
|
|
new_0_4_5_6: 'Fix sidebar i18n missing key warnings',
|
|
new_0_4_5_7: 'Clear all localStorage on logout',
|
|
new_0_4_5_8: 'Add periodic log rotation to prevent unbounded log growth',
|
|
new_0_4_2_1: 'Adicionar rastreamento de uso de tokens e comprimento de contexto dinamico',
|
|
new_0_4_2_2: 'Adicionar modal de busca de sessoes',
|
|
new_0_4_2_3: 'Restaurar sistema de chat em grupo com Socket.IO e SQLite',
|
|
new_0_4_2_4: 'Adicionar sessoes fixas e monitor ao vivo na pagina de chat',
|
|
new_0_4_2_5: 'Corrigir deteccao de provedores integrados e combinacao de modelos',
|
|
},
|
|
|
|
// 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',
|
|
},
|
|
|
|
// 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',
|
|
noAgents: 'Nenhum agente nesta sala',
|
|
members: 'Membros',
|
|
roomCreated: 'Sala criada',
|
|
roomDeleted: 'Sala excluída',
|
|
deleteRoomConfirm: 'Excluir esta sala?',
|
|
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',
|
|
download: 'Baixar',
|
|
downloadFile: 'Baixar arquivo',
|
|
},
|
|
}
|