2026-04-17 09:09:50 +08:00
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' ,
2026-04-22 20:27:33 +08:00
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' ,
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})' ,
2026-04-17 09:09:50 +08:00
} ,
// Common
common : {
loading : 'Carregando...' ,
cancel : 'Cancelar' ,
2026-04-17 23:11:57 +08:00
retry : 'Tentar novamente' ,
2026-04-17 09:09:50 +08:00
delete : 'Excluir' ,
edit : 'Editar' ,
save : 'Salvar' ,
saved : 'Salvo' ,
update : 'Atualizar' ,
create : 'Criar' ,
saveFailed : 'Falha ao salvar' ,
2026-04-24 20:41:14 +08:00
deleteFailed : 'Falha ao excluir' ,
2026-04-17 09:09:50 +08:00
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' ,
jobs : 'Tarefas agendadas' ,
models : 'Modelos' ,
profiles : 'Perfis' ,
skills : 'Habilidades' ,
memory : 'Memoria' ,
logs : 'Logs' ,
usage : 'Uso' ,
channels : 'Canais' ,
terminal : 'Terminal' ,
2026-04-23 14:10:14 +08:00
files : 'Arquivos' ,
2026-04-24 20:41:14 +08:00
groupChat : 'Chat em grupo' ,
groupConversation : 'Conversa' ,
2026-04-17 09:09:50 +08:00
settings : 'Configuracoes' ,
connected : 'Conectado' ,
disconnected : 'Desconectado' ,
updateTip : 'Execute "hermes-web-ui update" no terminal para atualizar' ,
updateVersion : 'Atualizar para v{version}' ,
updating : 'Atualizando...' ,
updateSuccess : 'Atualizacao concluida, por favor reinicie o servidor' ,
updateFailed : 'Falha na atualizacao' ,
2026-04-22 20:27:33 +08:00
logout : 'Sair' ,
2026-04-24 02:31:42 +02:00
nodeVersionWarning : 'Node.js v{version} detectado. Atualize para a versao 23 ou posterior.' ,
2026-04-22 20:27:33 +08:00
changelog : 'Registro de alteracoes' ,
noChangelog : 'Nenhum registro disponivel' ,
2026-04-17 09:09:50 +08:00
} ,
// Chat
chat : {
2026-04-22 16:14:50 +08:00
contextRemaining : 'restante' ,
2026-04-17 09:09:50 +08:00
emptyState : 'Inicie uma conversa com o Hermes Agent' ,
inputPlaceholder : 'Digite uma mensagem... (Enter para enviar, Shift+Enter para nova linha)' ,
attachFiles : 'Anexar arquivos' ,
stop : 'Parar' ,
send : 'Enviar' ,
contextUsed : 'Contexto utilizado:' ,
sessions : 'Sessoes' ,
noSessions : 'Sem sessoes' ,
newChat : 'Novo chat' ,
deleteSession : 'Excluir esta sessao?' ,
sessionDeleted : 'Sessao excluida' ,
rename : 'Renomear' ,
2026-04-22 02:09:58 +02:00
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' ,
2026-04-17 09:09:50 +08:00
renamed : 'Renomeado' ,
renameFailed : 'Falha ao renomear' ,
renameSession : 'Renomear sessao' ,
enterNewTitle : 'Digite um novo titulo' ,
other : 'Outro' ,
runFailed : 'Falha na execucao' ,
error : 'Erro' ,
tool : 'Ferramenta' ,
arguments : 'Argumentos' ,
result : 'Resultado' ,
truncated : '... (truncado)' ,
2026-04-25 08:46:50 +08:00
thinkingLabel : 'Raciocínio' ,
thinkingInProgress : 'Pensando…' ,
thinkingShow : 'Mostrar raciocínio' ,
thinkingHide : 'Ocultar raciocínio' ,
thinkingDuration : 'Observado {duration}' ,
thinkingChars : '{count} caracteres' ,
2026-04-17 09:09:50 +08:00
} ,
// 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)' ,
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 : 'Tarefa acionada' ,
jobDeleted : 'Tarefa excluida' ,
status : {
running : 'Em execucao' ,
paused : 'Pausada' ,
disabled : 'Desativada' ,
scheduled : 'Agendada' ,
} ,
info : {
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' ,
} ,
} ,
// 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' ,
toggleFailed : 'Falha ao ativar/desativar a habilidade' ,
} ,
// 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' ,
2026-04-25 14:00:07 +08:00
region : 'Região' ,
regionIntl : 'Internacional' ,
regionCn : 'China Continental' ,
2026-04-17 09:09:50 +08:00
baseUrlPlaceholder : 'ex. https://api.example.com/v1' ,
apiKey : 'Chave API' ,
apiKeyPlaceholder : 'sk-...' ,
defaultModel : 'Modelo padrao' ,
2026-04-17 22:05:06 +08:00
selectOrInput : 'Selecionar ou digitar um modelo...' ,
2026-04-17 09:09:50 +08:00
selectModel : 'Selecionar um modelo...' ,
providerAdded : 'Provedor adicionado' ,
providerDeleted : 'Provedor excluido' ,
deleteProvider : 'Excluir provedor' ,
deleteConfirm : 'Tem certeza de que deseja excluir "{name}"?' ,
2026-04-17 23:11:57 +08:00
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.' ,
2026-04-23 08:39:19 +08:00
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' ,
2026-04-26 22:51:35 +08:00
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.' ,
2026-04-24 08:49:45 +08:00
customBadge : 'PERSONALIZADO' ,
2026-04-26 22:51:35 +08:00
previewBadge : 'PRÉVIA' ,
disabledBadge : 'INDISPONÍVEL' ,
disabledTooltip : "Este modelo não está disponível para sua conta." ,
2026-04-24 08:49:45 +08:00
customModelPlaceholder : 'Nome do modelo personalizado' ,
customModelHint : 'Enter para carregar' ,
2026-04-17 09:09:50 +08:00
noProviders : 'Nenhum provedor encontrado. Adicione um provedor personalizado para comecar.' ,
builtIn : 'Integrado' ,
customType : 'Personalizado' ,
provider : 'Provedor' ,
2026-04-24 11:18:11 +08:00
contextLength : 'Tamanho do contexto' ,
contextLengthPlaceholder : 'ex: 200000 (opcional)' ,
2026-04-17 09:09:50 +08:00
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' ,
newName : 'Novo nome' ,
newNamePlaceholder : 'Digite um novo nome' ,
cloneFromCurrent : 'Clonar do perfil atual' ,
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' ,
2026-04-22 20:27:33 +08:00
account : 'Conta' ,
2026-04-17 09:09:50 +08:00
agent : 'Agente' ,
memory : 'Memoria' ,
session : 'Sessao' ,
privacy : 'Privacidade' ,
apiServer : 'Servidor API' ,
} ,
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' ,
2026-04-22 02:09:58 +02:00
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' ,
2026-04-17 09:09:50 +08:00
atHourHint : 'Reiniciar sessao neste horario diariamente' ,
} ,
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' ,
} ,
} ,
// 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)' ,
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 (ultimos 30 dias)' ,
date : 'Data' ,
tokens : 'Tokens' ,
cache : 'Cache' ,
sessions : 'Sessoes' ,
cost : 'Custo' ,
noData : 'Sem dados de uso' ,
} ,
2026-04-22 20:27:33 +08:00
// Registro de alteracoes
changelog : {
2026-04-26 13:28:08 +08:00
new_0_4_8_1 : 'Safe Mermaid diagram rendering with async render and timeout fallback' ,
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' ,
2026-04-25 20:39:53 +08:00
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' ,
2026-04-24 20:54:06 +08:00
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' ,
2026-04-22 20:27:33 +08:00
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' ,
} ,
2026-04-23 14:10:14 +08:00
// 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' ,
} ,
2026-04-24 20:41:14 +08:00
// 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' ,
} ,
2026-04-23 14:10:14 +08:00
// 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' ,
2026-04-24 02:31:42 +02:00
downloadFile : 'Baixar arquivo' ,
2026-04-23 14:10:14 +08:00
} ,
2026-04-17 09:09:50 +08:00
}