2026-04-17 09:09:50 +08:00
export default {
// Login
login : {
title : 'Hermes Web UI' ,
description : 'Introduce tu token de acceso para continuar. Encuentralo en los registros de inicio del servidor.' ,
placeholder : 'Token de acceso' ,
submit : 'Iniciar sesion' ,
tokenRequired : 'Por favor, introduce tu token de acceso' ,
invalidToken : 'Token invalido' ,
connectionFailed : 'No se puede conectar al servidor' ,
2026-04-22 20:27:33 +08:00
passwordLogin : 'Contrasena' ,
tokenLogin : 'Token' ,
usernamePlaceholder : 'Nombre de usuario' ,
passwordPlaceholder : 'Contrasena' ,
credentialsRequired : 'Por favor, introduzca nombre de usuario y contrasena' ,
invalidCredentials : 'Nombre de usuario o contrasena incorrectos' ,
2026-05-08 18:29:43 +08:00
tooManyAttempts : 'Demasiados intentos fallidos, por favor intente mas tarde' ,
2026-04-22 20:27:33 +08:00
passwordMismatch : 'Las contrasenas no coinciden' ,
passwordTooShort : 'La contrasena debe tener al menos 6 caracteres' ,
setupSuccess : 'Login con contrasena configurado correctamente' ,
passwordChanged : 'Contrasena cambiada correctamente' ,
passwordRemoved : 'Login con contrasena eliminado' ,
setupPassword : 'Configurar login con contrasena' ,
changePassword : 'Cambiar contrasena' ,
changeUsername : 'Cambiar nombre de usuario' ,
removePasswordLogin : 'Eliminar' ,
username : 'Nombre de usuario' ,
currentPassword : 'Contrasena actual' ,
newPassword : 'Nueva contrasena' ,
confirmPassword : 'Confirmar contrasena' ,
newUsername : 'Nuevo nombre de usuario' ,
usernameChanged : 'Nombre de usuario cambiado correctamente' ,
usernameTooShort : 'El nombre de usuario debe tener al menos 2 caracteres' ,
setupDescription : 'Configure un nombre de usuario y contrasena para un inicio de sesion rapido. El token de acceso seguira funcionando.' ,
removeConfirm : 'Esta seguro de eliminar el login con contrasena? Necesitara usar el token de acceso.' ,
passwordLoginNotConfigured : 'Login con contrasena no configurado' ,
passwordLoginConfigured : 'Login con contrasena habilitado ({username})' ,
2026-04-17 09:09:50 +08:00
} ,
// Common
common : {
loading : 'Cargando...' ,
cancel : 'Cancelar' ,
2026-04-17 23:11:57 +08:00
retry : 'Reintentar' ,
2026-04-17 09:09:50 +08:00
delete : 'Eliminar' ,
edit : 'Editar' ,
save : 'Guardar' ,
saved : 'Guardado' ,
update : 'Actualizar' ,
create : 'Crear' ,
saveFailed : 'Error al guardar' ,
2026-04-24 20:41:14 +08:00
deleteFailed : 'Error al eliminar' ,
2026-04-17 09:09:50 +08:00
ok : 'OK' ,
copied : 'Copiado' ,
copy : 'Copiar' ,
noData : 'Sin datos' ,
fetch : 'Obtener' ,
add : 'Anadir' ,
enable : 'Activar' ,
disable : 'Desactivar' ,
configured : 'Configurado' ,
notConfigured : 'No configurado' ,
confirm : 'Confirmar' ,
expand : 'Expandir' ,
collapse : 'Contraer' ,
} ,
// Sidebar
sidebar : {
chat : 'Chat' ,
2026-05-01 11:27:43 +08:00
search : 'Buscar' ,
2026-05-07 22:16:52 +08:00
apiRelay : 'API Relay' ,
2026-05-01 11:27:43 +08:00
history : 'Historial' ,
2026-04-17 09:09:50 +08:00
jobs : 'Tareas programadas' ,
models : 'Modelos' ,
profiles : 'Perfiles' ,
2026-05-10 13:50:39 +02:00
plugins : 'Plugins' ,
2026-04-17 09:09:50 +08:00
skills : 'Habilidades' ,
memory : 'Memoria' ,
logs : 'Registros' ,
usage : 'Uso' ,
2026-05-14 09:28:51 +08:00
skillsUsage : 'Uso de habilidades' ,
2026-04-17 09:09:50 +08:00
channels : 'Canales' ,
terminal : 'Terminal' ,
2026-04-23 14:10:14 +08:00
files : 'Archivos' ,
2026-04-24 20:41:14 +08:00
groupChat : 'Chat grupal' ,
groupConversation : 'Conversación' ,
2026-04-17 09:09:50 +08:00
settings : 'Configuracion' ,
connected : 'Conectado' ,
disconnected : 'Desconectado' ,
updateTip : 'Ejecuta "hermes-web-ui update" en la terminal para actualizar' ,
updateVersion : 'Actualizar a v{version}' ,
2026-05-12 03:03:07 +02:00
reloadClientVersion : 'Recargar para v{version}' ,
2026-04-17 09:09:50 +08:00
updating : 'Actualizando...' ,
2026-05-14 12:06:39 +08:00
updateSuccess : 'Actualizacion completada. Actualiza la pagina en breve. Si no se inicia despues de un tiempo, inicialo manualmente.' ,
2026-04-17 09:09:50 +08:00
updateFailed : 'Error al actualizar' ,
2026-04-22 20:27:33 +08:00
logout : 'Cerrar sesion' ,
2026-04-24 02:31:42 +02:00
nodeVersionWarning : 'Se detecto Node.js v{version}. Actualiza a la version 23 o posterior.' ,
2026-04-22 20:27:33 +08:00
changelog : 'Registro de cambios' ,
noChangelog : 'No hay registro de cambios' ,
2026-04-17 09:09:50 +08:00
} ,
2026-05-03 22:10:40 +08:00
// Drawer
drawer : {
terminal : 'Terminal' ,
files : 'Espacio de trabajo' ,
} ,
2026-04-17 09:09:50 +08:00
// Chat
chat : {
2026-04-22 16:14:50 +08:00
contextRemaining : 'restante' ,
2026-05-06 15:05:44 +08:00
contextClickToEdit : 'Haz clic para editar la longitud del contexto' ,
contextEditTitle : 'Editar longitud del contexto' ,
contextEditDesc : 'Establecer el límite de longitud del contexto para el modelo actual (en tokens)' ,
contextEditPlaceholder : 'Ingresa la longitud del contexto' ,
contextEditHint : 'Valores comunes: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)' ,
contextEditSave : 'Guardar' ,
contextEditCancel : 'Cancelar' ,
contextEditInvalid : 'Por favor ingresa una longitud de contexto válida' ,
contextEditSuccess : 'Longitud del contexto actualizada' ,
contextEditFailed : 'Error en la actualización' ,
2026-04-17 09:09:50 +08:00
emptyState : 'Inicia una conversacion con Hermes Agent' ,
inputPlaceholder : 'Escribe un mensaje... (Enter para enviar, Shift+Enter para nueva linea)' ,
2026-05-15 12:04:03 +08:00
slashCommandArgs : {
message : '<mensaje>' ,
title : '<titulo>' ,
text : '<texto>' ,
} ,
slashCommands : {
usage : 'Calcular el uso de la sesión actual' ,
status : 'Mostrar estado de sesión y cola' ,
abort : 'Detener la ejecución activa de Bridge' ,
queue : 'Poner un mensaje en cola tras la ejecución activa' ,
clear : 'Limpiar la vista actual' ,
clearHistory : 'Eliminar el historial de mensajes guardado de esta sesión' ,
title : 'Renombrar esta sesión' ,
compress : 'Ejecutar compresión de contexto cuando esté inactiva' ,
steer : 'Enviar texto de guía a la ejecución activa de Bridge' ,
destroy : 'Liberar el agente Bridge de esta sesión' ,
} ,
2026-04-17 09:09:50 +08:00
attachFiles : 'Adjuntar archivos' ,
2026-05-17 09:01:59 +08:00
showToolCalls : 'Mostrar llamadas de herramientas' ,
hideToolCalls : 'Ocultar llamadas de herramientas' ,
2026-05-07 10:34:58 +08:00
messageQueue : 'Cola de mensajes' ,
removeQueuedMessage : 'Quitar mensaje de la cola' ,
2026-04-17 09:09:50 +08:00
stop : 'Detener' ,
send : 'Enviar' ,
contextUsed : 'Contexto utilizado:' ,
sessions : 'Sesiones' ,
2026-05-06 16:15:42 +08:00
webUiSessions : 'Sesiones' ,
2026-05-02 03:00:47 +02:00
sessionScopeHint : 'Chat solo muestra sesiones de Web UI/API Server. Las sesiones de CLI, Telegram, Discord, Cron y otros canales son de solo lectura en Historial.' ,
openHistory : 'Abrir historial' ,
hermesHistory : 'Historial de Hermes' ,
historyScopeHint : 'Sesiones del historial de Hermes, de solo lectura y agrupadas por origen.' ,
2026-04-17 09:09:50 +08:00
noSessions : 'Sin sesiones' ,
newChat : 'Nuevo chat' ,
2026-05-16 00:11:51 +08:00
approvalKicker : 'Permiso de terminal' ,
approvalTitle : 'Revisar comando antes de ejecutar' ,
approvalAllowOnce : 'Permitir una vez' ,
approvalAllowSession : 'Permitir sesión' ,
approvalAlways : 'Siempre' ,
approvalDeny : 'Denegar' ,
2026-04-17 09:09:50 +08:00
deleteSession : 'Eliminar esta sesion?' ,
2026-05-06 16:15:42 +08:00
toggleBatchMode : 'Selección por lotes' ,
selectAll : 'Seleccionar todo' ,
confirmBatchDelete : '¿Eliminar {count} sesiones seleccionadas?' ,
batchDeleteSuccess : '{count} sesiones eliminadas' ,
batchDeletePartial : '{failed} sesiones fallaron al eliminar' ,
batchDeleteFailed : 'Error al eliminar por lotes' ,
2026-04-17 09:09:50 +08:00
sessionDeleted : 'Sesion eliminada' ,
rename : 'Renombrar' ,
2026-04-22 02:09:58 +02:00
pin : 'Fijar' ,
unpin : 'Desfijar' ,
pinned : 'Fijados' ,
chatMode : 'Chat' ,
liveMode : 'En vivo' ,
liveSessions : 'Sesiones en vivo' ,
recentBadge : 'Reciente' ,
linkedSessions : '{count} vinculadas' ,
noVisibleMessages : 'No hay mensajes visibles para humanos.' ,
monitorRoleUser : 'Usuario' ,
monitorRoleAssistant : 'Asistente' ,
copySessionId : 'Copiar ID de sesión' ,
2026-05-07 13:49:57 +08:00
export : 'Exportar' ,
exportFull : 'Exportación completa (JSON)' ,
exportCompressed : 'Exportación comprimida (TXT)' ,
exportCompressing : 'Comprimiendo contexto, espere...' ,
exportSuccess : 'Sesión exportada' ,
exportFailed : 'Error al exportar' ,
2026-04-17 09:09:50 +08:00
renamed : 'Renombrada' ,
renameFailed : 'Error al renombrar' ,
renameSession : 'Renombrar sesion' ,
2026-05-03 22:10:40 +08:00
sessionNotFound : 'Sesion no encontrada' ,
2026-04-17 09:09:50 +08:00
enterNewTitle : 'Introduce un nuevo titulo' ,
other : 'Otro' ,
runFailed : 'Error en la ejecucion' ,
error : 'Error' ,
tool : 'Herramienta' ,
arguments : 'Argumentos' ,
result : 'Resultado' ,
truncated : '... (truncado)' ,
2026-04-30 16:40:37 +08:00
executionDuration : 'Execution time' , thinkingLabel : 'Pensamiento' ,
2026-04-25 08:46:50 +08:00
thinkingInProgress : 'Pensando…' ,
thinkingShow : 'Mostrar pensamiento' ,
thinkingHide : 'Ocultar pensamiento' ,
thinkingDuration : 'Observado {duration}' ,
thinkingChars : '{count} caracteres' ,
2026-04-26 22:59:43 +08:00
copyBubble : 'Copiar mensaje' ,
copiedBubble : 'Mensaje copiado' ,
copyFailed : 'Error al copiar' ,
2026-05-02 13:26:57 +08:00
playSpeech : 'Reproducir voz' ,
pauseSpeech : 'Pausa' ,
resumeSpeech : 'Reanudar' ,
stopSpeech : 'Detener' ,
speechNotSupported : 'Reproducción de voz no soportada en este navegador' ,
2026-04-17 09:09:50 +08:00
} ,
// Jobs
jobs : {
title : 'Tareas programadas' ,
createJob : 'Crear tarea' ,
editJob : 'Editar tarea' ,
noJobs : 'No hay tareas programadas aun. Crea una para comenzar.' ,
name : 'Nombre' ,
namePlaceholder : 'Nombre de la tarea' ,
schedule : 'Programacion (expresion Cron)' ,
schedulePlaceholder : 'ej. 0 9 * * *' ,
quickPresets : 'Presets rapidos' ,
selectPreset : 'Seleccionar un preset...' ,
presetEveryMinute : 'Cada minuto' ,
presetEvery5Min : 'Cada 5 minutos' ,
presetEveryHour : 'Cada hora' ,
presetEveryDay : 'Todos los dias a las 00:00' ,
presetEveryDay9 : 'Todos los dias a las 09:00' ,
presetEveryMonday : 'Cada lunes a las 09:00' ,
presetEveryMonth : 'El dia 1 de cada mes a las 09:00' ,
prompt : 'Prompt' ,
promptPlaceholder : 'El prompt a ejecutar' ,
deliverTarget : 'Destino de entrega' ,
origin : 'Origen' ,
local : 'Local' ,
repeatCount : 'Repeticiones (opcional)' ,
2026-04-30 10:17:25 +10:00
modelPlaceholder : 'Modelo por defecto' ,
2026-04-17 09:09:50 +08:00
repeatPlaceholder : 'Dejar vacio para infinito' ,
jobCreated : 'Tarea creada' ,
jobUpdated : 'Tarea actualizada' ,
nameRequired : 'El nombre es obligatorio' ,
scheduleRequired : 'La programacion es obligatoria' ,
loadFailed : 'Error al cargar la tarea' ,
jobPaused : 'Tarea en pausa' ,
jobResumed : 'Tarea reanudada' ,
2026-04-30 10:17:25 +10:00
jobTriggered : 'Job ejecutado' ,
modelUpdated : 'Modelo actualizado' ,
2026-04-17 09:09:50 +08:00
jobDeleted : 'Tarea eliminada' ,
status : {
running : 'En ejecucion' ,
paused : 'En pausa' ,
disabled : 'Desactivada' ,
scheduled : 'Programada' ,
} ,
info : {
2026-04-30 10:17:25 +10:00
model : 'Modelo' ,
2026-04-17 09:09:50 +08:00
schedule : 'Programacion' ,
lastRun : 'Ultima ejecucion' ,
nextRun : 'Proxima ejecucion' ,
deliver : 'Entrega' ,
repeat : 'Repeticion' ,
} ,
action : {
pause : 'Pausar' ,
pauseJob : 'Pausar tarea' ,
resume : 'Reanudar' ,
resumeJob : 'Reanudar tarea' ,
runNow : 'Ejecutar ahora' ,
triggerImmediately : 'Ejecutar inmediatamente' ,
} ,
2026-04-30 10:17:25 +10:00
runHistory : {
title : 'Historial' ,
runs : 'ejecuciones' ,
noRuns : 'No se encontró historial.' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
// Skills
skills : {
title : 'Habilidades' ,
searchPlaceholder : 'Buscar habilidades...' ,
noMatch : 'Ninguna habilidad coincide con tu busqueda' ,
noSkills : 'No se encontraron habilidades' ,
backTo : 'Volver a' ,
attachedFiles : 'Archivos adjuntos' ,
loadFailed : 'Error al cargar la habilidad' ,
fileLoadFailed : 'Error al cargar el archivo' ,
2026-05-02 10:56:58 +10:00
modified : 'Modificado por el usuario' ,
archived : 'Archivado' ,
pinned : 'Fijado' ,
pin : 'Fijar habilidad' ,
unpin : 'Desfijar habilidad' ,
pinFailed : 'Error al cambiar estado de fijacion' ,
2026-04-17 09:09:50 +08:00
toggleFailed : 'Error al activar/desactivar la habilidad' ,
2026-05-02 10:56:58 +10:00
source : {
builtin : 'Integrado' ,
hub : 'Hub' ,
local : 'Local' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
2026-05-10 13:50:39 +02:00
// Plugins
plugins : {
title : 'Plugins' ,
refresh : 'Actualizar' ,
notice : 'Inventario de solo lectura de manifests de plugins Hermes detectables. Los metadatos de descubrimiento se leen sin cargar código de plugins. En v1, la gestión permanece en CLI; los cambios se aplican en nuevas sesiones Hermes.' ,
loadFailed : 'No se pudieron cargar los plugins' ,
commandCopied : 'Comando copiado' ,
searchPlaceholder : 'Buscar key, nombre, descripción, ruta...' ,
source : 'Origen' ,
kind : 'Tipo' ,
statusTitle : 'Estado' ,
configStatus : 'config: {status}' ,
notAvailable : 'n/a' ,
copyCommand : 'Copiar comando' ,
managedElsewhere : 'gestionado en otro lugar' ,
noMatch : 'Ningún plugin coincide con los filtros actuales' ,
enabled : 'activado' ,
disabled : 'desactivado' ,
summary : {
total : 'Total' ,
active : 'Activado / auto' ,
inactive : 'Inactivo' ,
disabled : 'Desactivado' ,
providerManaged : 'Gestionado por provider' ,
} ,
status : {
enabled : 'Activado' ,
'auto-active' : 'Autoactivo' ,
inactive : 'Inactivo' ,
disabled : 'Desactivado' ,
'provider-managed' : 'Gestionado por provider' ,
} ,
statusLabel : {
enabled : 'Activado por configuración' ,
'auto-active' : 'Autoactivo' ,
inactive : 'Inactivo' ,
disabled : 'Desactivado' ,
'provider-managed' : 'Gestionado por provider' ,
} ,
configStatuses : {
enabled : 'activado' ,
disabled : 'desactivado' ,
'not-enabled' : 'no activado' ,
auto : 'auto' ,
'provider-managed' : 'gestionado por provider' ,
} ,
table : {
plugin : 'Plugin' ,
status : 'Estado' ,
source : 'Origen' ,
kind : 'Tipo' ,
capabilities : 'Capacidades' ,
path : 'Ruta / entrypoint' ,
cli : 'CLI' ,
} ,
capabilities : {
tools : '{count} herramientas' ,
hooks : '{count} hooks' ,
env : '{count} env' ,
} ,
metadata : {
agentRoot : 'Agent root' ,
python : 'Python' ,
scanCwd : 'Scan cwd' ,
projectPlugins : 'Plugins del proyecto' ,
} ,
} ,
2026-04-17 09:09:50 +08:00
// Memory
memory : {
title : 'Memoria' ,
refresh : 'Actualizar' ,
loadFailed : 'Error al cargar la memoria' ,
myNotes : 'Mis notas' ,
noNotes : 'Sin notas aun.' ,
notesPlaceholder : 'Escribe tus notas...' ,
userProfile : 'Perfil de usuario' ,
noProfile : 'Sin perfil aun.' ,
profilePlaceholder : 'Escribe tu perfil...' ,
soul : 'Alma' ,
noSoul : 'Sin configuracion de alma aun.' ,
soulPlaceholder : 'Escribe la configuracion del alma...' ,
} ,
// Models
models : {
title : 'Modelos' ,
addProvider : 'Anadir proveedor' ,
providerType : 'Tipo de proveedor' ,
preset : 'Preset' ,
custom : 'Personalizado' ,
selectProvider : 'Seleccionar proveedor' ,
chooseProvider : 'Elige un proveedor...' ,
name : 'Nombre' ,
autoGeneratedName : 'Generado automaticamente desde la URL base' ,
baseUrl : 'URL base' ,
2026-04-25 14:00:07 +08:00
region : 'Región' ,
regionIntl : 'Internacional' ,
regionCn : 'China continental' ,
2026-04-17 09:09:50 +08:00
baseUrlPlaceholder : 'ej. https://api.example.com/v1' ,
apiKey : 'Clave API' ,
apiKeyPlaceholder : 'sk-...' ,
defaultModel : 'Modelo predeterminado' ,
2026-04-17 22:05:06 +08:00
selectOrInput : 'Seleccionar o ingresar un modelo...' ,
2026-04-17 09:09:50 +08:00
selectModel : 'Seleccionar un modelo...' ,
providerAdded : 'Proveedor anadido' ,
providerDeleted : 'Proveedor eliminado' ,
deleteProvider : 'Eliminar proveedor' ,
deleteConfirm : 'Estas seguro de que quieres eliminar "{name}"?' ,
2026-04-17 23:11:57 +08:00
codexLoginTitle : 'Inicio de sesión de OpenAI Codex' ,
codexWaiting : 'Ingrese este código en la página de autorización para iniciar sesión:' ,
codexCopyCode : 'Código copiado' ,
codexOpenLink : 'Abrir página de autorización' ,
codexApproved : 'Inicio de sesión exitoso' ,
codexExpired : 'La autorización ha expirado. Por favor, inténtelo de nuevo.' ,
2026-04-23 08:39:19 +08:00
nousLoginTitle : 'Inicio de sesión de Nous Portal' ,
nousWaiting : 'Ingrese este código en la página de autorización:' ,
nousCopyCode : 'Código copiado' ,
nousOpenLink : 'Abrir página de autorización' ,
nousApproved : 'Inicio de sesión exitoso' ,
nousDenied : 'Autorización denegada' ,
nousExpired : 'Autorización expirada' ,
2026-04-26 22:51:35 +08:00
copilotLoginTitle : 'Inicio de sesión de GitHub Copilot' ,
copilotWaiting : 'Abra GitHub e introduzca el código de dispositivo a continuación para autorizar. La ventana se cerrará automáticamente tras la aprobación.' ,
copilotCopyCode : 'Código copiado' ,
copilotOpenLink : 'Abrir la página de autorización de GitHub' ,
copilotApproved : '¡Inicio de sesión exitoso!' ,
copilotDenied : 'Autorización denegada.' ,
copilotExpired : 'El enlace de autorización ha caducado. Vuelva a intentarlo.' ,
copilotAddDetectedTitle : 'GitHub Copilot detectado' ,
copilotAddDetected : 'Se detectó un token OAuth de GitHub Copilot en este equipo. Haz clic en Agregar para habilitar Copilot en Hermes.' ,
copilotAddSourceEnv : 'Origen: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)' ,
copilotAddSourceGhCli : 'Origen: gh CLI (gh auth token)' ,
copilotAddSourceAppsJson : 'Origen: extensión Copilot de VS Code (apps.json)' ,
copilotDeleteHintEnv : 'Esto borrará COPILOT_GITHUB_TOKEN en ~/.hermes/.env. Otras herramientas no se verán afectadas.' ,
copilotDeleteHintGhCli : 'Copilot se ocultará de Hermes. Tu sesión de gh CLI no se verá afectada — `gh auth status` seguirá mostrando que estás conectado.' ,
copilotDeleteHintAppsJson : 'Copilot se ocultará de Hermes. La extensión Copilot de VS Code seguirá conectada.' ,
2026-04-24 08:49:45 +08:00
customBadge : 'PERSONALIZADO' ,
2026-04-26 22:51:35 +08:00
previewBadge : 'VISTA PREVIA' ,
disabledBadge : 'NO DISPONIBLE' ,
disabledTooltip : "Este modelo no está disponible para tu cuenta." ,
2026-05-11 16:18:13 +02:00
customModelPlaceholder : 'ID de modelo no listado' ,
customModelHint : 'Para modelos compatibles con el proveedor que la API no devuelve; no es un cambio de nombre visible. Enter para cargar.' ,
2026-04-17 09:09:50 +08:00
noProviders : 'No se encontraron proveedores. Anade un proveedor personalizado para comenzar.' ,
2026-05-14 23:36:07 +08:00
clearVisibleModels : 'Borrar selección' ,
2026-04-17 09:09:50 +08:00
builtIn : 'Integrado' ,
customType : 'Personalizado' ,
provider : 'Proveedor' ,
2026-04-24 11:18:11 +08:00
contextLength : 'Longitud del contexto' ,
contextLengthPlaceholder : 'ej. 200000 (opcional)' ,
2026-04-17 09:09:50 +08:00
local : 'Local ({host})' ,
selectProviderRequired : 'Por favor, selecciona un proveedor' ,
baseUrlRequired : 'La URL base es obligatoria' ,
apiKeyRequired : 'La clave API es obligatoria' ,
modelRequired : 'El modelo predeterminado es obligatorio' ,
enterBaseUrl : 'Por favor, introduce primero la URL base' ,
unexpectedFormat : 'Formato de respuesta inesperado' ,
foundModels : '{count} modelos encontrados' ,
fetchFailed : 'Error al obtener los modelos' ,
} ,
// Profiles
profiles : {
title : 'Perfiles' ,
create : 'Crear perfil' ,
import : 'Importar' ,
export : 'Exportar' ,
rename : 'Renombrar' ,
delete : 'Eliminar' ,
switchTo : 'Cambiar a' ,
switchConfirm : 'Cambiar al perfil "{name}" reiniciara la pasarela. Continuar?' ,
switchSuccess : 'Se ha cambiado al perfil "{name}"' ,
switchFailed : 'Error al cambiar de perfil. Es posible que la pasarela necesite un reinicio manual.' ,
createSuccess : 'Perfil "{name}" creado' ,
createFailed : 'Error al crear el perfil' ,
renameSuccess : 'Perfil renombrado' ,
renameFailed : 'Error al renombrar el perfil' ,
deleteConfirm : 'Estas seguro de que quieres eliminar el perfil "{name}"?' ,
deleteSuccess : 'Perfil eliminado' ,
deleteFailed : 'Error al eliminar el perfil' ,
exportSuccess : 'Perfil exportado' ,
exportFailed : 'Error al exportar el perfil' ,
importSuccess : 'Perfil importado' ,
importFailed : 'Error al importar el perfil' ,
importSelectFile : 'Seleccionar archivo de archivo' ,
importInvalidFile : 'Por favor, selecciona un archivo valido (.tar.gz, .tgz, .gz, .zip)' ,
name : 'Nombre del perfil' ,
namePlaceholder : 'Solo letras, numeros y guiones' ,
2026-05-03 22:10:40 +08:00
nameValidation : 'El nombre del perfil solo puede contener letras minúsculas, números, guiones bajos y guiones' ,
2026-04-17 09:09:50 +08:00
newName : 'Nuevo nombre' ,
newNamePlaceholder : 'Introduce un nuevo nombre' ,
cloneFromCurrent : 'Clonar desde el perfil actual' ,
2026-04-29 20:31:24 +08:00
cloneCleanupNotice : 'Al clonar se omiten automáticamente las credenciales exclusivas de plataforma (Weixin / Telegram / Slack, etc.) para evitar conflictos con el perfil de origen' ,
cloneStrippedCredentials : 'Se eliminaron {count} credenciales exclusivas: {list}' ,
cloneDisabledPlatforms : 'Se deshabilitaron {count} plataforma(s): {list}' ,
cloneStrippedConfigCredentials : 'Se eliminaron {count} credencial(es) integradas de config.yaml: {list}' ,
2026-04-17 09:09:50 +08:00
archivePath : 'Ruta del archivo' ,
archivePathPlaceholder : 'Ruta del servidor al archivo de archivo' ,
importName : 'Nombre del perfil (opcional)' ,
importNamePlaceholder : 'Dejar vacio para usar el nombre del archivo' ,
active : 'Activo' ,
model : 'Modelo' ,
gateway : 'Pasarela' ,
alias : 'Alias' ,
provider : 'Proveedor' ,
path : 'Ruta' ,
skills : 'Habilidades' ,
hasEnv : 'Tiene .env' ,
hasSoulMd : 'Tiene soul.md' ,
noProfiles : 'No se encontraron perfiles. Crea uno para comenzar.' ,
} ,
// Logs
logs : {
title : 'Registros' ,
all : 'Todos' ,
searchPlaceholder : 'Buscar...' ,
refresh : 'Actualizar' ,
noEntries : 'Sin entradas de registro' ,
} ,
// Settings
settings : {
title : 'Configuracion' ,
saved : 'Guardado' ,
saveFailed : 'Error al guardar' ,
tabs : {
display : 'Pantalla' ,
2026-04-22 20:27:33 +08:00
account : 'Cuenta' ,
2026-04-17 09:09:50 +08:00
agent : 'Agente' ,
memory : 'Memoria' ,
session : 'Sesion' ,
privacy : 'Privacidad' ,
apiServer : 'Servidor API' ,
2026-05-10 20:08:38 +08:00
models : 'Modelos' ,
voice : 'Voz' ,
2026-04-17 09:09:50 +08:00
} ,
display : {
streaming : 'Respuestas en streaming' ,
streamingHint : 'Mostrar respuestas de la IA en tiempo real' ,
compact : 'Modo compacto' ,
compactHint : 'Reducir el espaciado entre mensajes' ,
showReasoning : 'Mostrar razonamiento' ,
showReasoningHint : 'Mostrar el proceso de pensamiento del modelo' ,
showCost : 'Mostrar costo' ,
showCostHint : 'Mostrar uso de tokens en las respuestas' ,
inlineDiffs : 'Diffs en linea' ,
inlineDiffsHint : 'Mostrar cambios de codigo en linea' ,
bellOnComplete : 'Sonido de finalizacion' ,
bellOnCompleteHint : 'Reproducir un sonido cuando la IA termina' ,
busyInputMode : 'Modo de entrada ocupada' ,
busyInputModeHint : 'Permitir entrada mientras la IA procesa' ,
theme : 'Tema' ,
themeHint : 'Elige claro, oscuro o seguir la preferencia del sistema' ,
themeLight : 'Claro' ,
themeDark : 'Oscuro' ,
themeSystem : 'Sistema' ,
} ,
agent : {
maxTurns : 'Turnos maximos' ,
maxTurnsHint : 'Rondas maximas de interaccion por conversacion' ,
gatewayTimeout : 'Tiempo de espera de la pasarela' ,
gatewayTimeoutHint : 'Tiempo de espera de la peticion en segundos' ,
restartDrainTimeout : 'Tiempo de drenado al reiniciar' ,
restartDrainTimeoutHint : 'Tiempo de drenado antes de reiniciar en segundos' ,
toolEnforcement : 'Aplicacion de herramientas' ,
toolEnforcementHint : 'Controlar el modo de ejecucion de llamadas a herramientas' ,
auto : 'Automatico' ,
always : 'Siempre' ,
never : 'Nunca' ,
} ,
memory : {
enabled : 'Activar memoria' ,
enabledHint : 'Permitir que la IA recuerde el contexto de la conversacion' ,
userProfile : 'Perfil de usuario' ,
userProfileHint : 'Permitir que la IA recuerde las preferencias del usuario' ,
charLimit : 'Limite de caracteres de memoria' ,
charLimitHint : 'Maximo de caracteres para MEMORY.md' ,
userCharLimit : 'Limite de caracteres del perfil de usuario' ,
userCharLimitHint : 'Maximo de caracteres para USER.md' ,
} ,
session : {
mode : 'Modo de reinicio' ,
modeHint : 'Condicion de activacion del reinicio de sesion' ,
modeBoth : 'Inactividad + Programado' ,
modeIdle : 'Solo inactividad' ,
2026-05-16 21:18:59 +08:00
modeDaily : 'Solo programado' ,
modeNone : 'Nunca (solo manual)' ,
2026-04-17 09:09:50 +08:00
idleMinutes : 'Tiempo de inactividad' ,
idleMinutesHint : 'Tiempo de espera antes del reinicio automatico (minutos)' ,
atHour : 'Hora de reinicio programado' ,
2026-04-22 02:09:58 +02:00
humanOnly : 'Mostrar solo sesiones humanas' ,
humanOnlyHint : 'Oculta por defecto el ruido de subagentes y del monitor de sesiones' ,
liveMonitorHumanOnly : 'Monitor en vivo: mostrar solo sesiones humanas' ,
liveMonitorHumanOnlyHint : 'Oculta por defecto el ruido de subagentes y del monitor de sesiones en el monitor en vivo' ,
2026-04-17 09:09:50 +08:00
atHourHint : 'Reiniciar sesion a esta hora todos los dias' ,
2026-05-04 21:29:39 +08:00
requireAuth : 'Autorización de sesión' ,
requireAuthHint : 'Requiere autorización para operaciones de sesión' ,
2026-04-17 09:09:50 +08:00
} ,
privacy : {
redactPii : 'Ocultar informacion personal' ,
redactPiiHint : 'Detectar y ocultar automaticamente informacion sensible (contrasenas, claves, etc.)' ,
} ,
apiServer : {
enable : 'Activar' ,
enableHint : 'Activar servidor API' ,
host : 'Host' ,
hostHint : 'Direccion de escucha' ,
port : 'Puerto' ,
portHint : 'Puerto de escucha' ,
key : 'Clave' ,
keyHint : 'Clave de acceso API' ,
cors : 'Origenes CORS' ,
corsHint : 'Fuentes cross-origin permitidas' ,
} ,
2026-05-10 20:08:38 +08:00
voice : {
ttsProvider : 'Proveedor TTS' ,
ttsProviderHint : 'Elija el motor de texto a voz para la reproduccion de mensajes' ,
providerWebSpeech : 'WebSpeech API (Navegador)' ,
providerOpenai : 'OpenAI TTS' ,
providerCustom : 'Endpoint personalizado (compatible con OpenAI)' ,
providerEdge : 'Edge TTS (Gratuito, sin clave API)' ,
// WebSpeech
webspeechVoice : 'Voz' ,
webspeechVoiceHint : 'Seleccione una voz de su navegador o sistema operativo' ,
webspeechVoicePlaceholder : 'Auto (voz predeterminada)' ,
// OpenAI
openaiKey : 'Clave API' ,
openaiKeyHint : 'Su clave API de OpenAI con acceso TTS' ,
openaiUrl : 'URL base de API' ,
openaiUrlHint : 'ej. https://api.openai.com/v1/audio/speech' ,
openaiModel : 'Modelo' ,
openaiModelHint : 'tts-1 (mas rapido) / tts-1-hd (mayor calidad)' ,
openaiVoice : 'Voz' ,
openaiVoiceHint : 'Voz a utilizar para la sintesis' ,
// Custom endpoint
customHint : 'Utilice cualquier API TTS compatible con OpenAI — funciona con GPT-SoVITS, CosyVoice, etc.' ,
customUrl : 'URL de API' ,
customUrlHint : 'URL base de su servicio TTS' ,
customUrlPlaceholder : 'Direccion configurada en el adaptador local, ej. http://127.0.0.1:9880' ,
customApiKey : 'Clave API (opcional)' ,
customApiKeyHint : 'Algunos endpoints personalizados requieren autenticacion' ,
customApiKeyPlaceholder : 'Dejar en blanco si no es necesario' ,
// Edge TTS
edgeHint : 'Impulsado por Microsoft Edge TTS (node-edge-tts).' ,
edgeUrl : 'URL del adaptador' ,
edgeUrlHint : 'Direccion del adaptador Edge TTS, ej. http://127.0.0.1:9882' ,
edgeUrlPlaceholder : 'http://127.0.0.1:9882' ,
edgeVoice : 'Voz' ,
edgeVoiceHint : 'Seleccione una voz para la sintesis de voz' ,
2026-05-11 21:56:11 +08:00
edgeRate : 'Velocidad' ,
edgeRateHint : 'Ajustar velocidad del habla (0.5x ~ 2.0x)' ,
edgePitch : 'Tono' ,
edgePitchHint : 'Ajustar tono del habla (-20 ~ +20 Hz)' ,
2026-05-10 20:08:38 +08:00
// Test
testTitle : 'Prueba de voz' ,
testText : 'Texto de prueba' ,
testTextPlaceholder : 'Ingrese texto para probar...' ,
testTextDefault : 'Hola, esta es una prueba de voz.' ,
testButton : 'Probar' ,
testButtonPlaying : 'Reproduciendo...' ,
testFailed : 'Prueba fallida: {error}' ,
2026-05-16 08:55:23 +08:00
// MiMo TTS
providerMimo : 'MiMo TTS' ,
mimoHint : 'Xiaomi MiMo TTS — voces predefinidas, diseño de voz y clonación de voz' ,
mimoApiKey : 'Clave API' ,
mimoApiKeyHint : 'Obtenga su clave en platform.xiaomimimo.com' ,
mimoApiKeyPlaceholder : 'Clave API MiMo' ,
mimoBaseUrl : 'URL base' ,
mimoBaseUrlHint : 'URL del endpoint de la API MiMo' ,
mimoModel : 'Modelo' ,
mimoModelHint : 'Seleccione el modelo de síntesis de voz' ,
mimoModelPreset : 'Voces predefinidas' ,
mimoModelVoiceDesign : 'Diseño de voz' ,
mimoModelVoiceClone : 'Clonación de voz' ,
mimoVoice : 'Voz' ,
mimoVoiceHint : 'Seleccione una voz predefinida' ,
mimoVoiceDesignPrompt : 'Descripción de voz' ,
mimoVoiceDesignPromptHint : 'Describa las características de voz deseadas' ,
mimoVoiceDesignPromptPlaceholder : 'Ej: Una voz femenina cálida y joven, algo lenta, con tono magnético' ,
mimoCloneAudio : 'Subir audio' ,
mimoCloneAudioHint : 'Suba una muestra de audio para clonación (mp3/wav, máx. 10 MB)' ,
mimoCloneAudioUpload : 'Elegir archivo' ,
mimoCloneAudioClear : 'Borrar' ,
mimoStylePrompt : 'Indicador de estilo' ,
mimoStylePromptHint : 'Opcional — describa el estilo de habla en lenguaje natural' ,
mimoStylePromptPlaceholder : 'Ej: Tono brillante y animado, ritmo rápido' ,
2026-05-10 20:08:38 +08:00
} ,
2026-05-08 18:29:43 +08:00
lockedIps : {
title : 'IPs bloqueadas' ,
count : '{count} bloqueadas' ,
empty : 'Sin IPs bloqueadas' ,
unlock : 'Desbloquear' ,
unlockAll : 'Desbloquear todo' ,
unlockAllConfirm : 'Desbloquear todas las IPs?' ,
unlocked : 'IP desbloqueada' ,
allUnlocked : '{count} IPs desbloqueadas' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
// Platform channel settings
platform : {
requireMention : "Requerir mencion {'@'}" ,
requireMentionGroup : "Requerir mencion {'@'} en grupos para responder" ,
requireMentionChannel : "Requerir mencion {'@'} en canales para responder" ,
requireMentionRoom : "Requerir mencion {'@'} en salas para responder" ,
reactions : 'Reacciones' ,
reactionsHint : 'Reaccionar a mensajes con emoji' ,
freeResponseChats : 'Chats de respuesta libre' ,
freeResponseChatsHint : "IDs de chats que responden sin mencion {'@'} (separados por comas)" ,
freeResponseChannels : 'Canales de respuesta libre' ,
freeResponseChannelsHint : "IDs de canales que responden sin mencion {'@'} (separados por comas)" ,
freeResponseRooms : 'Salas de respuesta libre' ,
freeResponseRoomsHint : "IDs de salas que responden sin mencion {'@'} (separados por comas)" ,
mentionPatterns : 'Patrones de mencion personalizados' ,
mentionPatternsHint : 'Patrones de activacion adicionales' ,
autoThread : 'Hilo automatico' ,
autoThreadHint : "Crear automaticamente hilos de respuesta despues de mencion {'@'}" ,
autoThreadHintRoom : 'Crear automaticamente hilos de respuesta en salas' ,
dmMentionThreads : 'Hilos de mencion en MD' ,
dmMentionThreadsHint : 'Usar hilos de respuesta para menciones en mensajes directos' ,
allowBots : 'Permitir mensajes de bots' ,
allowBotsHint : 'Responder a mensajes de otros bots' ,
allowedChannels : 'Canales permitidos' ,
allowedChannelsHint : 'Lista blanca de IDs de canales (separados por comas)' ,
ignoredChannels : 'Canales ignorados' ,
ignoredChannelsHint : 'Canales donde el bot nunca responde (separados por comas)' ,
noThreadChannels : 'Canales sin hilo' ,
noThreadChannelsHint : 'Canales donde el bot responde sin hilos (separados por comas)' ,
2026-04-29 20:31:24 +08:00
exclusiveTokenWarning : 'Esta plataforma usa bloqueo exclusivo de token. Cada perfil debe usar un token de identidad distinto para evitar conflictos con otros perfiles.' ,
2026-04-17 09:09:50 +08:00
botToken : 'Token del bot' ,
botTokenHint : 'Token del bot del portal de desarrolladores' ,
accessToken : 'Token de acceso' ,
accessTokenHint : 'Token de acceso de Matrix' ,
homeserver : 'URL del homeserver' ,
homeserverHint : 'URL del homeserver de Matrix' ,
appId : 'ID de aplicacion' ,
appIdHint : 'ID de aplicacion de Feishu' ,
appSecret : 'Secreto de aplicacion' ,
appSecretHint : 'Secreto de aplicacion de Feishu' ,
clientId : 'ID de cliente' ,
clientIdHint : 'ID de cliente de DingTalk' ,
clientSecret : 'Secreto de cliente' ,
clientSecretHint : 'Secreto de cliente de DingTalk' ,
botId : 'ID del bot' ,
botIdHint : 'ID del bot de WeCom' ,
wecomSecretHint : 'Secreto del bot de WeCom' ,
waEnabled : 'Activar WhatsApp' ,
waEnabledHint : 'Activar WhatsApp mediante emparejamiento por codigo QR' ,
weixinToken : 'Token de Weixin' ,
weixinTokenHint : 'Desde el inicio de sesion QR de la CLI de weixin (hermes weixin)' ,
accountId : 'ID de cuenta' ,
accountIdHint : 'ID de cuenta de Weixin' ,
qrLogin : 'Inicio de sesion QR' ,
qrRelogin : 'Volver a iniciar sesion' ,
qrFetching : 'Obteniendo codigo QR...' ,
qrScanHint : 'Escanea con WeChat para iniciar sesion' ,
qrScanedHint : 'Escaneado, por favor confirma en el telefono...' ,
} ,
// Language
language : {
label : 'Idioma' ,
zh : '中文' ,
en : 'English' ,
es : 'Espanol' ,
} ,
// Terminal
terminal : {
sessions : 'Sesiones' ,
newTab : 'Nueva terminal' ,
closeSession : 'Cerrar esta sesion?' ,
sessionExited : 'Finalizada' ,
processExited : 'Proceso finalizado con codigo {code}' ,
} ,
// Usage
usage : {
title : 'Estadisticas de uso' ,
refresh : 'Actualizar' ,
totalTokens : 'Total de tokens' ,
inputTokens : 'Entrada' ,
outputTokens : 'Salida' ,
totalSessions : 'Total de sesiones' ,
avgPerDay : '~{n}/dia de promedio' ,
estimatedCost : 'Costo est.' ,
cacheHitRate : 'Tasa de acierto de cache' ,
modelBreakdown : 'Desglose por modelo' ,
2026-05-13 01:41:49 +02:00
dailyTrend : 'Uso diario' ,
2026-04-17 09:09:50 +08:00
date : 'Fecha' ,
tokens : 'Tokens' ,
2026-05-02 10:36:33 +10:00
cache : 'Caché' ,
cacheRead : 'Cache Read' ,
cacheWrite : 'Cache Write' ,
2026-04-17 09:09:50 +08:00
sessions : 'Sesiones' ,
cost : 'Costo' ,
noData : 'Sin datos de uso' ,
} ,
2026-04-22 20:27:33 +08:00
2026-05-14 09:28:51 +08:00
skillsUsage : {
title : 'Uso de habilidades' ,
subtitle : 'Sigue las cargas y ediciones de habilidades en sesiones de Hermes' ,
refresh : 'Actualizar' ,
periodSelector : 'Periodo de uso de habilidades' ,
periodLabel : '{days} d' ,
summary : 'Resumen' ,
totalActions : 'Acciones' ,
loads : 'Cargas' ,
edits : 'Ed.' ,
distinctSkills : 'Habs.' ,
topSkills : 'Top habs.' ,
dailyTrend : 'Tendencia diaria' ,
periodSummary : 'Últimos {days} días' ,
skill : 'Hab.' ,
share : '%' ,
lastUsed : 'Últ. uso' ,
noData : 'No hay datos de uso de habilidades' ,
loadFailed : 'No se pudo cargar el uso de habilidades' ,
otherSkills : 'Otras habs.' ,
} ,
2026-04-22 20:27:33 +08:00
// Registro de cambios
changelog : {
2026-05-01 11:27:43 +08:00
2026-05-02 15:39:01 +08:00
new_0_5_6_1 : 'Reproducción de voz con Web Speech API: botón manual, interruptor auto-play, animación de borde arcoíris y optimización móvil' ,
new_0_5_6_2 : 'Parser LLM JSON robusto con tolerancia a formato Python y extracción de texto de eventos streaming' ,
new_0_5_6_3 : 'Mejoras de Skills: estadísticas de uso, filtrado de fuentes, skills archivados, procedencia y toggle de fijado' ,
new_0_5_6_4 : 'Estadísticas diarias de uso expandidas con desglose detallado de tokens incluyendo separación de lectura/escritura de caché' ,
new_0_5_6_5 : 'Ámbito del historial de sesiones aclarado con descripciones mejoradas en vistas de chat e historial' ,
new_0_5_6_6 : 'Rediseñado el manejo de adjuntos usando formato de matriz ContentBlock estilo Anthropic (texto, imagen, archivo)' ,
new_0_5_6_7 : 'Añadida funcionalidad de descarga de archivos en frontend soportando formatos ContentBlock y Markdown con autenticación' ,
new_0_5_6_8 : 'Corregido conflicto de múltiples procesos que causaba reinicios de base de datos SQLite eliminando instancias nodemon redundantes' ,
2026-05-05 11:45:24 +08:00
2026-05-07 22:25:59 +08:00
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' ,
2026-05-09 09:49:30 +08:00
new_0_5_15_1 : 'Tablero Kanban para gestión visual de tareas y sesiones' ,
new_0_5_15_2 : 'Página de inicio y sitio de documentación oficial' ,
new_0_5_15_3 : 'Cliente agente group-chat usa puerto dinámico en vez de 8648' ,
new_0_5_15_4 : 'Módulo de voz node-edge-tts añadido' ,
new_0_5_15_5 : 'Corregido enlace de host de escucha WSL predeterminado' ,
new_0_5_15_6 : 'Metadatos SEO para la página de inicio del sitio' ,
new_0_5_15_7 : 'Protección contra ataques de fuerza bruta basada en IP' ,
new_0_5_15_8 : 'Corregido envoltura doble de URLs de descarga en MarkdownRenderer' ,
new_0_5_15_9 : 'Corregido renderizado de medios Markdown y reintento de sincronización' ,
new_0_5_15_10 : 'Eliminada dependencia de variables de entorno upstream' ,
2026-05-09 12:18:26 +08:00
new_0_5_15_11 : 'Si la función Kanban no está disponible, actualice hermes-agent' ,
2026-05-10 02:49:58 +08:00
new_0_5_16_1 : 'Migrar streaming de chat de /v1/runs a /v1/responses API para menor latencia' ,
new_0_5_16_2 : 'Persistir uso real de API (tokens, caché, razonamiento) en tabla de estadísticas' ,
new_0_5_16_3 : 'Añadir código QR del grupo QQ a la barra de navegación del sitio web' ,
new_0_5_16_4 : 'Eliminar campo codex_reasoning_items no utilizado del esquema de mensajes' ,
2026-05-11 20:08:13 +08:00
new_0_5_17_1 : 'Compatibilidad completa con Windows: manejo de rutas, gestión de procesos, terminal, análisis de logs' ,
new_0_5_17_2 : 'Refactorizada la gestión de procesos de Gateway con inicio/parada/health-check multiplataforma' ,
new_0_5_17_3 : 'Corregido el descubrimiento de plugins en Termux analizando el shebang de hermes para localizar Python' ,
2026-05-11 22:15:41 +08:00
new_0_5_17_4 : 'Tolerar claves YAML duplicadas en el análisis de configuración' ,
2026-05-11 20:08:13 +08:00
new_0_5_17_5 : 'Mejorada la ventana de bloqueo de autenticación y el flujo de cierre del entorno de desarrollo' ,
new_0_5_17_6 : 'Tema Comic: fuentes manuales para chino (ZCOOL KuaiLe), japonés (Zen Maru Gothic), coreano (Gaegu)' ,
2026-05-11 22:15:41 +08:00
new_0_5_17_7 : 'Agregar estilo de tema Comic/doodle' ,
new_0_5_17_8 : 'Cambiar licencia a BSL-1.1' ,
new_0_5_17_9 : 'Agregar página de plugins Hermes de solo lectura' ,
new_0_5_17_10 : 'Convertir subidas de imágenes a formato multimodal base64' ,
new_0_5_17_11 : 'Corregir selección y aislamiento del tablero Kanban' ,
new_0_5_17_12 : 'Agregar ajustes de reproducción de voz con soporte TTS de 4 proveedores' ,
new_0_5_17_13 : 'Reducir umbral de compresión de contexto de 200 a 150 mensajes' ,
new_0_5_17_14 : 'Corregir lógica de reinicio de autoactualización de Web UI' ,
new_0_5_17_15 : 'Corregir variable de entorno compartida opencode-zen y opencode-go que causaba acoplamiento de configuración' ,
new_0_5_17_16 : 'Agregar soporte para idioma chino tradicional (zh-TW)' ,
new_0_5_17_17 : 'Gestionar modelos visibles en la Web UI' ,
new_0_5_17_18 : 'Kanban: cadena de acción completa de tareas (comentarios, logs, asignación, despacho) con límites de capacidades' ,
new_0_5_17_19 : 'Corregir entradas de autenticación de proveedor no limpiadas al eliminar' ,
new_0_5_17_20 : 'Corregir reconocimiento de autenticación credential-pool de Codex' ,
new_0_5_17_21 : 'Agregar controles deslizantes de velocidad/tono de Edge TTS a los ajustes de voz' ,
new_0_5_17_22 : 'Las claves YAML duplicadas en la configuración ya no causan fallos en el análisis' ,
new_0_5_17_23 : 'La propiedad del puerto del gateway ahora se basa en archivo PID, evitando secuestro de puerto entre perfiles' ,
new_0_5_17_24 : 'La página de historial ahora muestra registros de sesiones Cron' ,
new_0_5_17_25 : 'Corregir iconos de cambio de idioma y tema comprimidos en la barra lateral colapsada' ,
2026-05-14 10:32:24 +08:00
new_0_5_18_1 : 'Add Skills Usage monitoring page with daily trend chart and top skills statistics' ,
new_0_5_18_2 : 'Add CLI chat session bridge with Python agent bridge for WebSocket-based sessions' ,
new_0_5_18_3 : 'Add Ollama Cloud provider preset with dynamic model catalog' ,
new_0_5_18_4 : 'Support model display name renaming (aliases)' ,
new_0_5_18_5 : 'Support model visibility management in Web UI' ,
new_0_5_18_6 : 'Enhance usage analytics dashboard' ,
new_0_5_18_7 : 'Docker single-container deployment with docker-compose and gateway startup fixes' ,
new_0_5_18_8 : 'Fix plugins page HERMES_HOME fallback warning for non-default profiles' ,
new_0_5_18_9 : 'Fix gateway stability across dev restarts and improve Windows compatibility' ,
2026-05-14 15:23:19 +08:00
new_0_5_22_1 : 'Fix Hermes session list API reading the Web UI local session store instead of the Hermes profile database' ,
2026-05-15 13:03:03 +08:00
new_0_5_23_1 : 'Add bridge-only chat slash commands with localized command suggestions' ,
new_0_5_23_2 : 'Persist command history for session replay without polluting model context, usage, or compression' ,
new_0_5_23_3 : 'Isolate gateway profile environment variables to prevent credentials leaking across profiles' ,
new_0_5_23_4 : 'Reserve the Web UI port during gateway allocation to avoid startup conflicts' ,
new_0_5_23_5 : 'Fix self-update restart handling so successful helper exits are not reported as failures' ,
2026-05-15 14:47:29 +08:00
new_0_5_24_1 : 'Align Bridge chat with API Server handling for multimodal input, system prompt, and workspace context' ,
2026-05-16 09:40:25 +08:00
new_0_5_25_1 : 'Add group chat room reset and clone actions' ,
new_0_5_25_2 : 'Make the Web UI state directory configurable for custom deployment layouts' ,
new_0_5_25_3 : 'Add MiMo as a TTS provider in voice settings' ,
new_0_5_25_4 : 'Fetch custom provider model lists through the backend to avoid browser CORS failures' ,
new_0_5_25_5 : 'Fix tool approval flow for bridge sessions' ,
new_0_5_25_6 : 'Remove the forced CLI platform hint from bridge prompts so custom media/file instructions are preserved' ,
new_0_5_25_7 : 'Show base64 image content correctly in user message history' ,
new_0_5_25_8 : 'Add Playwright browser tests, chat streaming contract coverage, provider model coverage, and coverage baseline' ,
2026-05-17 10:09:25 +08:00
new_0_5_26_1 : 'Support Windows and local Markdown media paths in chat history and rendered messages' ,
new_0_5_26_2 : 'Filter empty assistant history and clear stale compression status when a new run starts' ,
new_0_5_26_3 : 'Add locked file writes for config and profile updates to reduce concurrent write corruption' ,
new_0_5_26_4 : 'Add QQBot and DingTalk channel settings' ,
new_0_5_26_5 : 'Make CLI port detection portable and improve mobile terminal drawer sizing' ,
new_0_5_26_6 : 'Isolate Bridge profile environments and fix Hermes plugin discovery across Python environments' ,
new_0_5_26_7 : 'Explain stopped gateway states with Web UI diagnostics and keep log loading state stable' ,
new_0_5_26_8 : 'Fix session reset mode options, custom provider base URL handling, and dynamic deliver targets' ,
new_0_5_26_9 : 'Add a local tool-call trace visibility toggle in the chat input bar' ,
new_0_5_26_10 : 'Support Hermes Agent package installs when no source checkout is available' ,
new_0_5_26_11 : 'Add xAI Grok OAuth login for SuperGrok subscription users and update Grok model presets' ,
new_0_5_26_12 : 'Expand browser, chat streaming, provider, gateway, config, plugin, and Bridge test coverage' ,
2026-05-17 12:20:53 +08:00
new_0_5_27_1 : 'Add session-level model settings for Bridge chats, with independent provider and model saved per session' ,
new_0_5_27_2 : 'Right-click a Bridge session and choose Set Model to switch the model for that session' ,
new_0_5_27_3 : 'Runs now validate the session model and fall back to the current default model when the saved model is unavailable' ,
new_0_5_27_4 : 'Context compression now follows the current Profile default selected model by default' ,
2026-05-01 11:27:43 +08:00
new_0_5_5_1 : '🎉 ¡Feliz Día del Trabajo! Hoy no se trabaja, agradezcan su comprensión' ,
new_0_5_5_2 : 'Añadida página de historial para sesiones Hermes' ,
new_0_5_5_3 : 'La página de historial gestiona sesiones de forma independiente' ,
new_0_5_5_4 : 'Carga automática de primera sesión CLI' ,
new_0_5_5_5 : 'Componente HistoryMessageList con inyección de props' ,
new_0_5_5_6 : 'Filtrado de mensajes vacíos y tools sin toolName' ,
new_0_5_5_7 : 'Eliminado caché de sesiones localStorage, datos del backend' ,
new_0_5_5_8 : 'Optimizado cambio de perfil, eliminadas llamadas de cachete obsoletas' ,
2026-05-01 08:29:06 +08:00
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' ,
2026-04-26 13:28:08 +08:00
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 : 'Visualizacion en streaming en tiempo real de bloques de pensamiento/razonamiento' ,
new_0_4_7_2 : 'Omitir script de preparacion durante la construccion Docker' ,
new_0_4_7_3 : 'Mejoras en la experiencia movil del chat grupal y pulido de UI' ,
new_0_4_7_4 : 'Limitar los tokens restantes del contexto a 0 en lugar de negativos' ,
new_0_4_7_5 : 'Agregar proveedor integrado Alibaba Coding Plan con anulacion de base_url en .env' ,
new_0_4_7_6 : 'Omitir perfiles remotos al inicio para evitar bloqueos' ,
new_0_4_7_7 : 'Detectar y mostrar errores de ejecucion silenciosamente tragados' ,
new_0_4_7_8 : 'Consulta de longitud de contexto consciente del proveedor' ,
new_0_4_7_9 : 'Restablecer config.model al cambiar y resolver proveedor personalizado CLI' ,
new_0_4_7_10 : 'Limpiar base_url_env de .env al eliminar proveedor integrado' ,
new_0_4_7_11 : 'Alinear el fondo de la barra lateral del chat grupal con la lista de sesiones' ,
2026-05-06 16:42:29 +08:00
new_0_4_5_1 : 'Add group chat with multi-agent rooms, mention routing, and typing status recovery' ,
2026-04-24 20:54:06 +08:00
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 : 'Agregar seguimiento de uso de tokens y longitud de contexto dinamico' ,
new_0_4_2_2 : 'Agregar modal de busqueda de sesiones' ,
new_0_4_2_3 : 'Restaurar sistema de chat grupal con Socket.IO y SQLite' ,
new_0_4_2_4 : 'Agregar sesiones fijas y monitor en vivo en la pagina de chat' ,
new_0_4_2_5 : 'Corregir deteccion de proveedores integrados y coincidencia de modelos' ,
} ,
2026-04-23 14:10:14 +08:00
// Archivos
files : {
title : 'Archivos' ,
tree : 'Arbol de directorios' ,
list : 'Lista de archivos' ,
breadcrumbRoot : 'Inicio' ,
newFile : 'Nuevo archivo' ,
newFolder : 'Nueva carpeta' ,
upload : 'Subir' ,
refresh : 'Actualizar' ,
open : 'Abrir' ,
edit : 'Editar' ,
preview : 'Vista previa' ,
download : 'Descargar' ,
copyPath : 'Copiar ruta' ,
rename : 'Renombrar' ,
delete : 'Eliminar' ,
name : 'Nombre' ,
size : 'Tamano' ,
modified : 'Modificado' ,
actions : 'Acciones' ,
emptyDir : 'Directorio vacio' ,
loading : 'Cargando...' ,
confirmDelete : '?Seguro que quiere eliminar "{name}"?' ,
confirmDeleteDir : '?Seguro que quiere eliminar el directorio "{name}" y todo su contenido?' ,
deleteFailed : 'Error al eliminar' ,
deleted : 'Eliminado' ,
renameTo : 'Renombrar a' ,
newFileName : 'Nombre del archivo' ,
newFolderName : 'Nombre de la carpeta' ,
created : 'Creado' ,
createFailed : 'Error al crear' ,
renamed : 'Renombrado' ,
renameFailed : 'Error al renombrar' ,
uploadSuccess : '{count} archivo(s) subido(s)' ,
uploadFailed : 'Error al subir' ,
saveFailed : 'Error al guardar' ,
saved : 'Guardado' ,
unsavedChanges : 'Tiene cambios sin guardar. ?Descartar?' ,
pathCopied : 'Ruta copiada' ,
fileTooLarge : 'Archivo demasiado grande (max 10MB)' ,
permissionDenied : 'No se puede modificar un archivo protegido' ,
notFound : 'Archivo o directorio no encontrado' ,
backendError : 'Error en la operacion de archivo' ,
dragDropHint : 'Arrastra archivos aqui para subir' ,
closeEditor : 'Cerrar editor' ,
closePreview : 'Cerrar' ,
saveFile : 'Guardar' ,
} ,
2026-04-24 20:41:14 +08:00
// Chat grupal
groupChat : {
title : 'Chat grupal' ,
createRoom : 'Crear sala' ,
joinByCode : 'Unirse con codigo' ,
roomName : 'Nombre de la sala' ,
roomNamePlaceholder : 'Ingrese el nombre de la sala' ,
inviteCode : 'Codigo de invitacion' ,
autoGenerate : 'Generar automaticamente' ,
noRooms : 'Aun no hay salas' ,
selectOrCreate : 'Seleccione o cree una sala para comenzar a chatear' ,
agents : 'Agentes' ,
addAgent : 'Agregar agente' ,
selectProfile : 'Seleccione un perfil' ,
agentAdded : 'Agente agregado' ,
agentAlreadyInRoom : 'El agente ya esta en esta sala' ,
noAgents : 'No hay agentes en esta sala' ,
members : 'Miembros' ,
roomCreated : 'Sala creada' ,
roomDeleted : 'Sala eliminada' ,
2026-05-15 15:52:16 +08:00
roomCloned : 'Sala clonada' ,
cloneRoom : 'Clonar sala' ,
2026-04-24 20:41:14 +08:00
deleteRoomConfirm : '¿Eliminar esta sala?' ,
2026-05-15 15:52:16 +08:00
clearContext : 'Limpiar contexto' ,
clearContextConfirm : '¿Limpiar el contexto de esta sala? Se eliminarán mensajes e instantáneas de compresión, pero se conservan agentes y miembros.' ,
contextCleared : 'Contexto limpiado' ,
2026-04-24 20:41:14 +08:00
you : 'Tú' ,
joined : 'Se unio a la sala' ,
joinFailed : 'Error al unirse a la sala' ,
inputPlaceholder : 'Escriba un mensaje... (Enter para enviar)' ,
enterCode : 'Ingrese el codigo de invitacion' ,
yourName : 'Tu nombre' ,
yourNamePlaceholder : 'Ingresa tu nombre para mostrar' ,
yourDescription : 'Descripcion (opcional)' ,
yourDescriptionPlaceholder : 'Cuentales a los demas quien eres...' ,
agentName : 'Nombre del agente' ,
agentNamePlaceholder : 'Nombre personalizado (vacío = nombre del perfil)' ,
agentDesc : 'Descripción del agente' ,
agentDescPlaceholder : 'Describe lo que hace este agente...' ,
agentReplying : 'está respondiendo...' ,
agentCompressing : 'está comprimiendo contexto...' ,
compressionSettings : 'Configuración de compresión' ,
triggerTokens : 'Tokens de activación' ,
triggerTokensDesc : 'Umbral de tokens para activar la compresión' ,
maxHistoryTokens : 'Tokens máximos de historial' ,
maxHistoryTokensDesc : 'Máximo de tokens para el contexto comprimido' ,
tailMessageCount : 'Mensajes recientes' ,
tailMessageCountDesc : 'Número de mensajes recientes a conservar sin comprimir' ,
compressionConfig : 'Config. de compresión' ,
compressNow : 'Comprimir ahora' ,
compressingInProgress : 'Compresión en progreso' ,
compressionSaved : 'Configuración guardada' ,
} ,
2026-04-23 14:10:14 +08:00
// Descarga
download : {
downloading : 'Descargando...' ,
downloadFailed : 'Error en la descarga' ,
fileNotFound : 'Archivo no encontrado o eliminado' ,
fileTooLarge : 'Archivo demasiado grande (excede el limite)' ,
backendError : 'Error al leer el archivo, el entorno remoto puede no estar disponible' ,
backendTimeout : 'Tiempo de lectura del archivo agotado' ,
unsupportedBackend : 'El backend del terminal actual no admite la descarga de archivos' ,
invalidPath : 'Ruta de archivo invalida' ,
download : 'Descargar' ,
2026-04-24 02:31:42 +02:00
downloadFile : 'Descargar archivo' ,
2026-04-23 14:10:14 +08:00
} ,
2026-04-17 09:09:50 +08:00
}