# errores básicos
ErrInvalidParams: 'Solicitud inválida: {{ .detail }}'
ErrTokenParse: 'Token inválido: {{ .detail }}'
ErrInitialPassword: 'Contraseña original incorrecta'
ErrInternalServer: 'Error interno: {{ .detail }}'
ErrInternalServerKey: "Error interno del servidor:"
ErrRecordExist: 'Registro ya existe'
ErrRecordNotFound: 'Registro no encontrado'
ErrStructTransform: 'Error de conversión: {{ .detail }}'
ErrNotSupportType: 'Tipo no soportado: {{ .name }}'
ErrDemoEnvironment: 'No disponible en demo'
ErrCmdTimeout: 'Comando agotó tiempo'
ErrPortInUsed: "El puerto {{ .name }} ya está en uso"
ErrFileNotFound: "El archivo {{ .name }} no existe"
ErrReqFailed: "{{.name}} petición fallida: {{ .err }}"

# solicitud y entrada de seguridad
ErrNoSuchHost: "No se pudo encontrar el servidor solicitado {{ .err }}"
ErrHttpReqNotFound: "No se pudo encontrar el recurso solicitado {{ .err }}"
ErrHttpReqFailed: "Solicitud fallida {{ .err }}"
ErrHttpReqTimeOut: "La solicitud ha expirado {{ .err }}"
ErrCreateHttpClient: "Error al crear la solicitud {{ .err }}"
ErrProxy: 'Solicitud fallida: {{ .detail }}'
ErrProxySetting: "Información del servidor proxy no disponible {{ .err }}, compruebe e inténtelo de nuevo"
ErrEntrance: "Error en la información de entrada de seguridad, por favor revise e intente de nuevo"
ErrEntranceFormat: "La entrada de seguridad {{ .name }} no está actualmente soportada. Por favor verifique e inténtelo de nuevo"

# inicio de sesión y seguridad
ErrNotLogin: 'No has iniciado sesión: {{ .detail }}'
ErrSessionDataNotFound: "La sesión actual ha caducado"
ErrSessionDataFormat: "El formato de los datos de la sesión actual es anómalo"
ErrPasswordExpired: 'Contraseña expirada: {{ .detail }}'
ErrLoginLocked: "Demasiados intentos fallidos. El inicio de sesión se ha bloqueado temporalmente durante 5 minutos."
ErrApiConfigStatusInvalid: 'API desactivada: {{ .detail }}'
ErrApiConfigKeyInvalid: 'Clave API inválida: {{ .detail }}'
ErrApiConfigIPInvalid: 'IP no permitida: {{ .detail }}'
ErrApiConfigDisable: 'API no permitida: {{ .detail }}'
ErrApiConfigKeyTimeInvalid: 'Timestamp inválido: {{ .detail }}'
ErrPasskeyDisabled: "Passkey requiere que HTTPS esté habilitado"
ErrPasskeyNotConfigured: "No hay Passkey configurado"
ErrPasskeyLimit: "Límite de Passkey alcanzado (máximo 5)"
ErrPasskeySession: "La sesión de Passkey ha expirado o no es válida"
ErrPasskeyDuplicate: "Passkey ya existe"
ErrPasskeyVerify: "Error al verificar Passkey"
ErrOIDCNotEnabled: "La autenticación OIDC no está habilitada"
ErrOIDCConfigInvalid: "La configuración de OIDC no es válida"
ErrOIDCConfigChanged: "La configuración de OIDC ha cambiado; inicie la autenticación de nuevo"
ErrOIDCDiscoveryFailed: "No se pudo descubrir la configuración del Provider OIDC"
ErrOIDCIssuerMismatch: "El Issuer de OIDC no coincide con el Issuer configurado"
ErrOIDCUnsupportedPKCE: "El Provider OIDC no admite el método PKCE requerido"
ErrOIDCUnsupportedSigningAlgorithm: "El algoritmo de firma OIDC no es compatible"
ErrOIDCInvalidState: "El estado de inicio de sesión OIDC no es válido o ya se ha utilizado"
ErrOIDCLoginExpired: "La solicitud de inicio de sesión OIDC ha caducado; inténtelo de nuevo"
ErrOIDCTokenExchange: "No se pudo intercambiar el código de autorización OIDC"
ErrOIDCTokenValidation: "No se pudo validar el Token OIDC"
ErrOIDCUserInfoValidation: "No se pudo validar la información del usuario OIDC"
ErrOIDCNameClaimMissing: "El Claim de nombre de usuario OIDC configurado no existe o no es válido"
ErrOIDCNameConflictLocal: "El nombre de usuario OIDC entra en conflicto con un usuario local"
ErrOIDCNameConflictLDAP: "El nombre de usuario OIDC entra en conflicto con un usuario LDAP"
ErrOIDCNameConflictOIDC: "El nombre de usuario OIDC entra en conflicto con otra identidad OIDC"
ErrOIDCDefaultRoleInvalid: "El rol predeterminado configurado para OIDC no está disponible"
ErrOIDCPrivateAddressDenied: "La dirección del Endpoint OIDC no está permitida por la política de seguridad de red"
ErrOIDCTLSValidation: "Error al validar el certificado TLS de OIDC"
ErrOIDCTestExpired: "La prueba de OIDC en el navegador ha caducado; vuelva a ejecutarla"
ErrOIDCLocalCredentialsReadonly: "Los nombres de usuario y las contraseñas OIDC los administra el Provider de identidad y no se pueden cambiar localmente."
ErrOIDCPasswordExpirationUnsupported: "Los usuarios OIDC no utilizan la política local de caducidad de contraseñas."
ErrOIDCInternal: "Se produjo un error interno durante la autenticación OIDC. Inténtelo de nuevo más tarde."

# usuario y permisos
ErrNoSuchUser: "No se encontró la información del usuario. Verifique e intente de nuevo."
ErrToMaster: "Este usuario no tiene permiso para realizar esta operación en el nodo principal. Verifique e intente de nuevo."
ErrToNode: "Este usuario no tiene permiso para realizar esta operación en este nodo. Verifique e intente de nuevo."
ErrRBAC: "Permisos de usuario insuficientes. No se puede realizar esta operación. Verifique e intente de nuevo."
ErrNoneNode: "Este usuario no tiene permisos sobre ningún nodo. Contacte al administrador o verifique e intente de nuevo."
ErrOnlySuperAdmin: "Solo los superadministradores pueden usar esta función."
ErrRolePresetCannotDelete: "No se pueden eliminar los roles predefinidos del sistema"
ErrRolePresetCannotUpdate: "No se pueden actualizar los roles predefinidos del sistema"
ErrRoleBoundToUser: "Este rol ya está vinculado a usuarios y no se puede eliminar"
ErrRolePresetCannotBind: "Los roles predefinidos del sistema no se pueden asignar a usuarios"
ErrNodeAdminMasterForbidden: "No se pueden agregar permisos de administrador de nodo al nodo principal"
ErrSuperAdminCannotDelete: "No se pueden eliminar usuarios superadministradores"
ErrGroupIsDefault: "Grupo predeterminado, no se puede eliminar"
ErrGroupIsInUse: "El grupo está en uso y no se puede eliminar."

# licencia
LicenseCheck: 'Comprobar si la licencia está disponible'
ErrLicenseInUsed: 'La licencia ya está vinculada. Verifique e intente de nuevo'
ErrLicenseExpired: 'La licencia ha expirado. Verifique e intente de nuevo'
ErrLicense: "Error en el formato de la licencia, verifique y reintente"
ErrLicenseCheck: "Validación de licencia fallida, verifique y reintente"
ErrXpackVersion: "Validación de licencia fallida, esta licencia está limitada por versión, no se puede importar, verifique y reintente"
ErrLicenseSave: "Error al guardar la información de la licencia, error {{ .err }}, reintente"
ErrLicenseSync: "Sincronización de licencia fallida, no se detectó información de licencia en la base de datos"
ErrLicenseExist: "Este registro de licencia ya existe. Puede ir directamente a la página de licencia para la vinculación del nodo."
ErrXpackNotFound: "Esta sección requiere la edición Business. Importa una licencia en Configuración del panel > Licencia."
ErrXpackExceptional: "Esta sección requiere la edición Business. Sincroniza el estado de la licencia en Configuración del panel > Licencia."
ErrXpackLost: "La licencia alcanzó el límite de reintentos. Ve a Configuración del panel > Licencia y ejecuta una sincronización manual."
ErrEnterpriseLicenseRequired: "La licencia de la edición Enterprise no se ha importado. Importa primero una licencia."
ErrDeviceLost: "Faltan archivos necesarios para la verificación de licencia, verifique e intente de nuevo"
ErrDeviceErr: "El entorno actual no coincide con el entorno de importación de la licencia. Edite la licencia e impórtela de nuevo"
ErrXpackTimeout: "Tiempo de espera de la solicitud, puede que la conexión de red sea inestable, intente más tarde"
ErrUnbindMaster: "Se detectaron nodos en la gestión de nodos, no se puede desvincular la licencia actual, elimine los nodos primero e intente de nuevo"
ErrFreeNodeLimit: "Se alcanzó el límite de nodos que se pueden añadir. Compra y vuelve a intentarlo."
ErrNodeBound: "Esta licencia está vinculada a otro nodo, verifique e intente de nuevo"
ErrNodeBoundDelete: "Esta licencia está vinculada y no admite operaciones de eliminación. Verifique e intente de nuevo"
ErrNodeBoundLimit: "El nodo gratuito actual ha alcanzado su límite, verifique e intente de nuevo"
ErrLicenseFree: "Los nodos gratuitos solo pueden usarse si la licencia está correctamente vinculada a un nodo. Verifique e intente de nuevo"
ErrLicenseUnbind: "Esta licencia todavía tiene nodos de la edición Community vinculados. Desvincúlalos en Configuración del panel > Licencia y vuelve a intentarlo."
ErrLicenseBindCount: "El número de nodos gratuitos de la nueva licencia es menor que el número actual de nodos de la edición Community vinculados. Verifique e intente de nuevo."
ErrNoSuchNode: "Información del nodo no encontrada, verifique e intente de nuevo"
ErrNodeUnbind: "Este nodo no está dentro del rango de vinculación de la licencia, verifique e intente de nuevo"
ErrNodeBind: "Este nodo ya está vinculado a una licencia, verifique e intente de nuevo"
ErrNodeLocalRollback: "El nodo principal no admite la reversión directa. Ejecuta manualmente '1pctl restore' para revertir."
ErrIntlLicense: "La versión actual aún no admite importar licencias de la edición internacional. Próximamente"
InvalidRequestBodyType: "Formato del cuerpo de la solicitud no válido, por favor revisa y asegúrate de que el contenido cumpla con el formato requerido antes de reintentar."
InvalidLicenseCodeType: "Formato de código de licencia no válido, por favor revisa e inténtalo de nuevo."
LicenseNotFoundType: "Licencia no encontrada, no existe ningún registro coincidente en el sistema para la licencia proporcionada. Por favor revisa e inténtalo de nuevo."
LicenseRevokedType: "La licencia solicitada ha sido revocada y ya no se puede utilizar. Por favor revisa e inténtalo de nuevo."
LicenseExpiredType: "La licencia ha expirado. Renuévala o vuelve a importarla en Configuración del Panel - Sección de Licencia antes de reintentar."
LicenseProductMismatchType: "La licencia no corresponde con el producto o servicio solicitado."
InvalidAssigneeType: "Información de usuario o dispositivo de destino no válida para la asignación de licencia. Por favor revisa e inténtalo de nuevo."
LicenseUsageNotFoundType: "No se encontraron registros de uso. Esta licencia no ha sido activada o utilizada aún. Por favor revisa e inténtalo de nuevo."
LicenseUsageLimitExceededType: "Esta licencia ya está vinculada a otro nodo. Por favor revisa e inténtalo de nuevo."

# nodo y clúster
MasterNode: "Nodo Maestro"
Node: "Nodo"
ErrLocalDelete: "No se puede eliminar el nodo local"
ErrMasterDelete: "No se puede eliminar el nodo principal, elimine primero los nodos secundarios."
ClusterNameIsExist: "El nombre del clúster ya existe."
AppStatusUnHealthy: "Adquisición anormal del estado de la aplicación, revise el estado del nodo en la lista de nodos."
MasterNodePortNotAvailable: "Verificación de conectividad del puerto {{ .port }} del nodo {{ .name }} fallida, verifique la configuración del firewall/grupo de seguridad y el estado del nodo principal."
ClusterMasterNotExist: "El nodo principal del clúster está desconectado, elimine los nodos secundarios."

# máquina virtual
ErrVMNotFound: "La máquina virtual no existe"
ErrVMAlreadyExists: "La máquina virtual ya existe"
ErrVMImageAlreadyExists: "La imagen de la máquina virtual ya existe: {{ .detail }}"
ErrVMStoragePathInUse: "La ruta del pool de almacenamiento ya está usada por [{{ .name }}]"
ErrVMHelperNotFound: "No se encontró 1panel-kvm"
ErrVMBridgeManaged: "El nombre del bridge ya está administrado por libvirt o Docker"
ErrVMNetworkInUse: "La red está en uso y no se puede eliminar"
ErrVMStorageInUse: "El pool de almacenamiento está en uso y no se puede eliminar"
ErrVMStorageNameCannotChange: "El nombre del pool de almacenamiento no se puede cambiar"
ErrVMStoragePathCannotChange: "La ruta del pool de almacenamiento no se puede cambiar"
ErrVMRunning: "La máquina virtual está en ejecución"
ErrVMLibvirtConnect: "Error al conectar con libvirt: {{ .detail }}"
ErrVMPermission: "Sin permiso para operar la máquina virtual: {{ .detail }}"
ErrVMNetworkNotFound: "La red de la máquina virtual no existe: {{ .detail }}"
ErrVMInvalidPath: "Ruta de máquina virtual no válida: {{ .detail }}"
ErrVMInvalidInput: "Parámetro de máquina virtual no válido: {{ .detail }}"
ErrVMCommandFailed: "Error al ejecutar el comando de la máquina virtual: {{ .err }}"
VMCreateTask: "Crear máquina virtual [{{ .name }}]"
VMCreateFromTemplateTask: "Crear máquina virtual [{{ .name }}] desde plantilla"
VMUpdateTask: "Actualizar máquina virtual [{{ .name }}]"
VMRenameTask: "Renombrar máquina virtual [{{ .name }}] a [{{ .newName }}]"
VMDeleteTask: "Eliminar máquina virtual [{{ .name }}]"
VMTemplateCreateTask: "Guardar máquina virtual [{{ .name }}] como plantilla [{{ .template }}]"
VMTemplateDeleteTask: "Eliminar plantilla de máquina virtual [{{ .name }}]"
VMForceDeleteMetadataOnly: "1panel-kvm no encontrado, eliminando solo los metadatos de la máquina virtual [{{ .name }}]"
VMForceDeleteMetadataAfterLibvirtFailed: "Error al eliminar la máquina virtual [{{ .name }}] de libvirt, eliminando metadatos: {{ .err }}"
VMForceDeleteDiskFailed: "Error al forzar la eliminación del archivo de disco de la máquina virtual [{{ .path }}]: {{ .err }}"
VMForceDeleteDiskSuccess: "Archivo de disco de la máquina virtual [{{ .path }}] eliminado forzosamente"
VMSnapshotCreateTask: "Crear instantánea [{{ .snapshot }}] para la máquina virtual [{{ .vm }}]"
VMSnapshotCreateStep: "Crear instantánea de máquina virtual [{{ .snapshot }}]"
VMSnapshotRecoverTask: "Restaurar instantánea [{{ .snapshot }}] para la máquina virtual [{{ .vm }}]"
VMSnapshotRecoverStep: "Restaurar instantánea de máquina virtual [{{ .snapshot }}]"
VMSnapshotDeleteTask: "Eliminar instantánea [{{ .snapshot }}] de la máquina virtual [{{ .vm }}]"
VMSnapshotDeleteStep: "Eliminar instantánea de máquina virtual [{{ .snapshot }}]"

# aplicación
CustomAppStoreFileValid: "El paquete de la tienda de aplicaciones debe tener formato .tar.gz"
AppBackup: 'Copia de seguridad de aplicación'
AppBackupPush: 'Transferir archivo de copia de seguridad de aplicación {{.file}} al nodo {{ .name }}'
ErrSourceTargetSame: 'El nodo de origen y el nodo de destino no pueden ser el mismo'
AppInstall: 'Instalar aplicación {{ .name }} en nodo {{ .targetNode }}'
AppInstallCheck: 'Verificar entorno de instalación de aplicación'

# copia de seguridad
ErrBackupInUsed: 'Cuenta de respaldo en uso por tarea programada'
ErrBackupCheck: 'Conexión de respaldo falló: {{ .err }}'
ErrBackupLocal: "La cuenta de respaldo del servidor local no admite esta operación"
ErrBackupPublic: "Se detectó que esta cuenta de respaldo no es pública, verifique e intente de nuevo"
ErrOSSConn: "No se pudo obtener la última versión, por favor revise la conectividad de red externa del servidor."
MvBackup: "Mover datos al directorio de respaldos"

# alerta
ErrAlertSync: "Error al sincronizar la información de alertas, verifique e intente de nuevo"

# puerta de enlace de IA
ErrAIProxyUserGroupIsDefault: "No se puede eliminar el grupo de usuarios predeterminado."
ErrAIProxyUserGroupInUse: "El grupo de usuarios está en uso y no se puede eliminar."
ErrAIProxyUserGroupExists: "El nombre del grupo de usuarios ya existe."
ErrAIProxyBackendAccountExists: "Esta cuenta de modelo ya se importó al grupo de cuentas de AI Gateway."
ErrAIProxyModelGroupInUse: "El grupo de modelos está en uso y no se puede eliminar."
ErrAIProxyModelGroupExists: "El nombre del grupo de modelos ya existe."
ErrAIProxySensitiveGroupInUse: "El grupo de palabras sensibles está en uso y no se puede eliminar."
ErrAIProxySensitiveGroupExists: "El nombre del grupo de palabras sensibles ya existe."
AIProxyContentPolicyViolation: "Lo siento, no puedo procesar esta solicitud porque el contenido podría incumplir la política de contenido. Modifícalo e inténtalo de nuevo."
AIBenchmarkRun: "Ejecutar prueba de referencia de IA"

# tarea
TaskStart: "Tarea {{ .name }} iniciada [INICIO]"
TaskEnd: "Tarea {{ .name }} finalizada [COMPLETADA]"
TaskFailed: "Tarea {{ .name }} fallida"
TaskTimeout: "{{ .name }} ha expirado"
TaskSuccess: "Tarea {{ .name }} terminada con éxito"
TaskRetry: "Iniciando reintento {{ .name }}"
SubTaskSuccess: "{{ .name }} completada correctamente"
SubTaskFailed: "{{ .name }} falló: {{ .err }}"
TaskInstall: "Instalar"
TaskUpgrade: "Actualizar"
TaskSync: 'Sincronizar'
TaskSyncForNode: "Sincronizar Datos del Nodo"
TaskBackup: "Respaldar"
TaskPush: "Enviar"
TaskRsync: "Sincronizar"
SuccessStatus: "{{ .name }} correcta"
FailedStatus: "{{ .name }} fallida {{ .err }}"
Start: "Iniciar"
SubTask: "Subtarea"
Skip: "Omitir errores y continuar..."
Success: "Éxito"

# tareas de enrutamiento inteligente del gateway de IA
AIProxySmartRouteCreateTask: "Crear muestras de enrutamiento inteligente del gateway de IA"
AIProxySmartRouteCreateSubTask: "Crear muestras y generar vectores"
AIProxySmartRouteCreateStart: "Iniciando la creación de muestras, {{ .total }} en total"
AIProxySmartRouteCreateFailed: "[{{ .current }}/{{ .total }}] Error de creación: type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteCreateSuccess: "[{{ .current }}/{{ .total }}] Creada: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteCreateComplete: "Creación completada: {{ .success }} correctas, {{ .failed }} fallidas"
AIProxySmartRouteCreateError: "Error al crear muestras: {{ .failed }} fallidas, último error"
AIProxySmartRouteRebuildTask: "Reconstruir vectores de muestras de enrutamiento inteligente del gateway de IA"
AIProxySmartRouteRebuildSubTask: "Reconstruir vectores de muestras"
AIProxySmartRouteEmbeddingRequired: "El endpoint y el modelo de Embedding son obligatorios"
AIProxySmartRouteRebuildStart: "Iniciando la reconstrucción de vectores, {{ .total }} en total"
AIProxySmartRouteRebuildFailed: "[{{ .current }}/{{ .total }}] Error de reconstrucción: sampleID={{ .id }} type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteRebuildSuccess: "[{{ .current }}/{{ .total }}] Reconstruida: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteRebuildComplete: "Reconstrucción completada: {{ .success }} correctas, {{ .failed }} fallidas"
AIProxySmartRouteRebuildError: "Error al reconstruir vectores de muestras: {{ .failed }} fallidas, último error"

# tarea por lotes de agentes
BatchInstallAgent: "Instalación masiva de agentes"
DispatchAgentInstallTasks: "Enviar tareas de instalación de agentes"
BatchUpgradeAgent: "Actualización masiva de agentes"
DispatchAgentUpgradeTasks: "Enviar tareas de actualización de agentes"
BatchAgentInstallDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea de instalación de {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Nodo {{ .node }} distribuyó la tarea de instalación de {{ .agentType }} correctamente!"
BatchAgentUpgradeDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea de actualización de {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Nodo {{ .node }} {{ .agent }} ya está en la versión objetivo, omitido"
BatchAgentUpgradeSubmitted: "Nodo {{ .node }} distribuyó la tarea de actualización de {{ .agent }} correctamente!"
BatchAgentUpgradeFailed: "Nodo {{ .node }} no pudo distribuir la tarea de actualización de {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Distribuir Skill por lotes"
DispatchAgentSkillInstallTasks: "Enviar tareas de instalación de Skill"
BatchAgentSkillDispatchFailed: "Nodo {{ .node }} no pudo distribuir {{ .skill }} a {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Nodo {{ .node }} no encontró agentes {{ .agentType }}, omitido"
BatchAgentSkillSkipped: "Nodo {{ .node }} {{ .agent }} omitido Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Nodo {{ .node }} distribuyó la tarea de instalación de {{ .skill }} a {{ .agent }} correctamente!"
BatchAgentSkillInstallFailed: "Nodo {{ .node }} no pudo distribuir la tarea de instalación de {{ .skill }} a {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea {{ .operate }} de {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Nodo {{ .node }} {{ .agent }} omitido Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Nodo {{ .node }} distribuyó la tarea {{ .operate }} de {{ .agent }} correctamente!"
BatchAgentOperateFailed: "Nodo {{ .node }} no pudo distribuir la tarea {{ .operate }} de {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Inicio masivo de agentes"
DispatchAgentStartTasks: "Enviar tareas de inicio de agentes"
BatchStopAgent: "Detención masiva de agentes"
DispatchAgentStopTasks: "Enviar tareas de detención de agentes"
BatchRestartAgent: "Reinicio masivo de agentes"
DispatchAgentRestartTasks: "Enviar tareas de reinicio de agentes"
BatchDeleteAgent: "Eliminación masiva de agentes"
DispatchAgentDeleteTasks: "Enviar tareas de eliminación de agentes"
AgentOperateStart: "Iniciar"
AgentOperateStop: "Detener"
AgentOperateRestart: "Reiniciar"
AgentOperateDelete: "Eliminar"

# tarea de aplicación y habilidad
PushAppInstallTaskToNode: "Enviar tarea de instalación de aplicación al nodo [{{ .name }}]"
AppInstallTask: "Tarea de instalación de aplicación"
PushAppFailed: "Error al enviar tarea de instalación de aplicación"
SkillHubInstallTask: "Instalar skill [{{ .name }}]"
SkillHubInstallToTarget: "Instalar skill [{{ .name }}] en el destino [{{ .target }}]"

# biblioteca de scripts
ScriptLibrary: "Biblioteca de scripts"
RemoteScriptLibrary: "Biblioteca de Scripts Remota"
ScriptSyncSkip: "La biblioteca de scripts ya está en la última versión"
DownloadData: "Descargando archivo de datos de la biblioteca de scripts data.yaml"
DownloadPackage: "Descargando paquete de la biblioteca de scripts"
AnalyticCompletion: "Análisis completado, sincronizando con la base de datos..."

# sincronización de nodos
SyncNode: "Sincronizar datos con el nodo {{ .name }}"
LocalName: "El nombre 'local' solo se utiliza para la identificación local del sistema"
SyncPackageData: "Empaquetar los datos de sincronización"
SyncPackageEncrypt: "Encriptación del paquete de datos"
SyncRequest: "Solicitar API de sincronización de nodos"
SyncFailedRetry: "Tiempo de espera en la sincronización de datos del nodo (intento {{ .index }}), reintentando..."
SyncFailed: "La sincronización falló, sincronice manualmente en la lista de nodos"
SyncSystemProxy: "Configuración del proxy del sistema"
SyncScripts: "Biblioteca de scripts"
SyncBackupAccounts: "Cuentas de copia de seguridad"
SyncAlertSetting: "Configuración de alertas"
SyncCustomApp: "Aplicación personalizada"
SyncLanguage: "Idioma del sistema"
SyncEdition: "Región"

# actualización de nodos
NodeUpgrade: "Actualizar nodo {{ .name }}"
UpgradeCheck: "Comprobar actualizaciones de nodos"
UpgradeCheckLocal: "Los nodos locales no admiten actualizaciones en lote, omitiendo..."
UpgradeCheckLatest: "El nodo ya está en la última versión, omitiendo..."
NewSSHClient: "Inicializando conexión SSH"
BackupBeforeUpgrade: "Respaldar datos antes de actualizar"
UploadUpgradeFile: "Distribuir archivos de actualización"
RestartAfterUpgrade: "Iniciar servicio después de actualizar"
LoadAutoUpgradeNodesFailed: "Error al cargar nodos de actualización automática, error: {{ .err }}"
AutoUpgradeNodes: "Nodos de actualización automática: {{ .nodes }}"
UpdateAutoUpgradeNodesStatusFailed: "Error al actualizar el estado de los nodos de actualización automática, error: {{ .err }}"

# agregar nodo
MasterData: "Datos del nodo principal"
LoadSftpClient: "Cargar cliente SFTP"
PackageMasterData: "Generar paquete de respaldo del nodo principal"
UploadBackup: "Subir datos de respaldo"
TaskAddNode: "Agregar nodo"
LoadNodeArch: "Obtener información de arquitectura del nodo"
LoadNodeArchDetail: "Arquitectura detectada - principal: {{ .local }}, nodo secundario: {{ .node }}"
LoadNodeUpgradeDetail: "Usando el directorio de instalación histórico versión v1: {{ .baseDir }}, puerto de escucha del servicio: {{ .port }}"
SyncAgentBaseInfo: "Sincronizar información básica del nodo"
GenerateSSLInfo: "Generar información SSL del nodo"
ConnInfoNotMatch: "La información de conexión no coincide"
MakeAgentPackage: "Generar paquete de instalación del nodo"
SendAgent: "Distribuir paquete de instalación del nodo"
StartService: "Iniciar servicio"
NoBackupNode: "Actualmente no hay nodo de respaldo. Seleccione uno para guardar e intente de nuevo."

# sincronización de archivos e imágenes de nodo
LocalNodeIpFailed: "No se pudo obtener la IP del nodo principal. Edite el nodo principal y añada la dirección IP y la información de autenticación SSH."
HandlePrivateKey: "Procesar la clave privada del nodo"
HandlePublicKey: "Procesar la clave pública del nodo"
ExchangeFile: "Iniciar la sincronización de {{ .sourcePath }} desde el nodo {{ .source }} al nodo {{ .dest }}:{{ .destPath }}"
NodeFile: "Archivo del nodo"
ImageSyncTaskName: "Sincronizar {{ .count }} imágenes"
SSLSyncTaskName: "Sincronizar {{ .count }} certificados"
AppSyncTaskName: "Sincronizar la aplicación {{ .name }}"
SSLSyncToNode: "Enviar el certificado [{{ .cert }}] al nodo [{{ .node }}]"
ImageSyncSave: "Guardar la imagen {{ .image }}"
ImageSyncSaveTags: "Guardar las etiquetas de la imagen {{ .tags }}"
ImageSyncToNode: "Sincronizar la imagen {{ .image }} con el nodo {{ .node }}"
ImageSyncLoad: "Cargar la imagen {{ .image }} en el nodo {{ .node }}"
ImageSyncClean: "Limpiar los archivos temporales de la imagen {{ .image }}"
ImageSyncNoTag: "La imagen {{ .image }} no tiene etiqueta y se guardará mediante su ID"
ImageSyncFrontendTagsIgnored: "No se encontraron etiquetas para la imagen {{ .image }} en el nodo de origen. Se ignoraron las etiquetas del frontend."
ImageSyncHandlePrivateKey: "Procesar la clave privada del nodo de sincronización de imágenes"
ImageSyncHandlePublicKey: "Procesar la clave pública del nodo de sincronización de imágenes"
ImageSyncTransfer: "Iniciar la transferencia del archivo temporal de la imagen: {{ .source }}:{{ .sourcePath }} -> {{ .dest }}:{{ .destPath }}"

# línea de comandos
SudoHelper: "Por favor use {{ .cmd }} o cambie al usuario root"
UsernameNeed: "La edición Enterprise debe especificar --username"
DBConnErr: "Error: Fallo al inicializar la conexión a la base de datos, {{ .err }}"
SystemVersion: "versión: "
SystemMode: "modo: "

# línea de comandos - aplicación
AppVersion: "Versión de la aplicación"
AppCommands: "Comandos relacionados con la app"
AppInit: "Inicializar aplicación"
AppKeyVal: "Clave de la app (solo admite inglés)"
AppCreateFileErr: "Error al crear el archivo {{ .name }} {{ .err }}"
AppCreateDirErr: "Error al crear la carpeta {{ .name }} {{ .err }}"
AppMissKey: "Falta la clave de la app, use -k para especificar"
AppMissVersion: "Falta la versión de la app, use -v para especificar"
AppVersionExist: "La versión ya existe"
AppCreateSuccessful: "Creación finalizada con éxito"
AppWriteErr: "Error al escribir el archivo {{ .name }} {{ .err }}"

# línea de comandos - IP de escucha
ListenIPCommands: "Cambiar ip de escucha"
ListenIPv4: "Escuchar en IPv4"
ListenIPv6: "Escuchar en IPv6"
ListenChangeSuccessful: "Cambio exitoso Ahora escuchando en {{ .value }}"

# línea de comandos - restablecer
ResetCommands: "Restablecer información del sistema"
ResetMFA: "Cancelar autenticación de dos factores de 1Panel"
ResetHttps: "Cancelar inicio de sesión https de 1Panel"
ResetEntrance: "Cancelar entrada segura de 1Panel"
ResetIPs: "Cancelar restricciones de IP autorizadas de 1Panel"
ResetDomain: "Cancelar vinculación de dominio de 1Panel"
ResetPasskey: "Eliminar passkeys de 1Panel"

# línea de comandos - usuario
UserList: "Obtener la lista de usuarios de 1Panel"
UserTableName: "Nombre"
UserTableMFAStatus: "Estado MFA"
UserTableSuperAdmin: "Superadministrador"
UserTableCreatedAt: "Creado en"
UserEmptyList: "No se encontraron usuarios"
UserInfo: "Obtener información del panel"
UserInfoAddr: "Dirección del panel: "
UserInfoPassHelp: "Consejo: para cambiar la contraseña, ejecute el comando: "

# línea de comandos - restaurar
RestoreCommands: "Revertir el servicio y los datos de 1Panel"
RestoreNoSuchFile: "No se encontraron archivos de reversión"
RestoreStep1: "(1/5) Iniciando la reversión del servicio y los datos de 1Panel desde el directorio {{ .name }}..."
RestoreStep2: "(2/5) Reversión del binario de 1Panel completada"
RestoreStep3: "(3/5) Reversión del script de 1Panel completada"
RestoreStep4: "(4/5) Reversión del servicio de 1Panel completada"
RestoreStep5: "(5/5) Reversión de los datos de 1Panel completada"
RestoreSuccessful: "Reversión completada. Se volvió a {{ .version }}. Reiniciando el servicio..."

# línea de comandos - actualizar
UpdateCommands: "Actualizar información del panel"
UpdateUser: "Actualizar información del usuario"
UpdatePassword: "Actualizar contraseña del usuario"
UpdatePort: "Actualizar puerto del panel"
UpdateUserNull: "Error: el usuario está vacío"
UpdateUserBlank: "Error: el usuario contiene espacios"
UpdateUserFormat: "Error: formato de usuario inválido Solo admite inglés, chino, números y _, longitud 3-30"
UpdateUserErr: "Error: Fallo al actualizar usuario, {{ .err }}"
UpdateSuccessful: "Actualización finalizada con éxito"
UpdateUserResult: "Usuario: {{ .name }}"
UpdatePasswordRead: "Error: Fallo al leer información de la contraseña del usuario, {{ .err }}"
UpdatePasswordNull: "Error: la contraseña del usuario está vacía"
UpdateUPasswordBlank: "Error: la contraseña del usuario contiene espacios"
UpdatePasswordFormat: "Error: La contraseña del usuario solo admite letras, números y caracteres especiales (@#$%*_,.?), con una longitud de 8-30."
UpdatePasswordLen: "Error: Ingrese una contraseña mayor a 6 caracteres"
UpdatePasswordRe: "Confirmar contraseña:"
UpdatePasswordErr: "Error: Fallo al actualizar la contraseña del usuario, {{ .err }}"
UpdatePasswordSame: "Error: Las dos contraseñas no coinciden, verifique e intente de nuevo"
UpdatePasswordResult: "Contraseña del usuario: {{ .name }}"
UpdatePortFormat: "Error: El puerto debe estar entre 1 y 65535"
UpdatePortUsed: "Error: El puerto ya está en uso, verifique e intente de nuevo"
UpdatePortErr: "Error: Fallo al actualizar el puerto del panel, {{ .err }}"
UpdatePortResult: "Puerto del panel: {{ .name }}"
UpdatePortFirewallAdd: "Fallo al agregar la regla de puerto al firewall, {{ .err }}, agregue manualmente el puerto {{ .name }} al firewall."
UpdatePortFirewallDel: "Error: Fallo al eliminar el puerto del firewall, {{ .err }}"
UpdatePortFirewallReload: "Fallo al recargar el firewall, {{ .err }}, recargue el firewall manualmente."

# aplicación móvil
ErrVerifyToken: 'Error al verificar el token, por favor restablezca y escanee de nuevo.'
ErrInvalidToken: 'Token inválido, por favor restablezca y escanee de nuevo.'
ErrExpiredToken: 'El token ha expirado, por favor restablezca y escanee de nuevo.'

# exportación de comandos
Name: "Nombre"
Command: "Comando"

# LDAP
ErrLDAPConnectionTest: "La prueba de conexión LDAP falló. Compruebe la dirección del servidor, la cuenta de enlace y la configuración de red."
ErrLDAPLoginTest: "La prueba de inicio de sesión LDAP falló. Compruebe el nombre de usuario y la contraseña."
LDAPConnectionTestSuccess: "La prueba de conexión LDAP se realizó correctamente."
ErrLDAPDirectorySearch: "No se pudieron leer los usuarios LDAP. Compruebe la conexión y la configuración de búsqueda."
ErrLDAPConfigLoad: "No se pudo cargar la configuración LDAP."
ErrLDAPConfigSave: "No se pudo guardar la configuración LDAP."
ErrLDAPURLInvalid: "La dirección del servidor LDAP debe usar ldap:// o ldaps:// e incluir un host válido."
ErrLDAPBindDNRequired: "El DN de enlace es obligatorio."
ErrLDAPBindPasswordRequired: "La contraseña de enlace es obligatoria."
ErrLDAPUserOURequired: "La OU de usuarios es obligatoria."
ErrLDAPConnectTimeoutRange: "El tiempo de espera de conexión debe estar entre 1 y 120 segundos."
ErrLDAPSearchPageSizeRange: "El tamaño de página de la consulta LDAP debe estar entre 1 y 10000."
ErrLDAPResultPageSizeRange: "El tamaño de página de resultados no puede superar 200."
ErrLDAPAttributeMapOnlyName: "La asignación de atributos solo admite el campo name."
ErrLDAPNameAttributeRequired: "El atributo LDAP asignado a name es obligatorio."
ErrLDAPAttributeNameInvalid: "La asignación contiene un nombre de atributo LDAP no válido."
ErrLDAPUserFilterRequired: "El filtro de usuarios es obligatorio."
ErrLDAPUserFilterInvalid: "El filtro de usuarios no es un filtro LDAP válido."
ErrLDAPAttributeMapObject: "La asignación de atributos debe ser un objeto JSON válido."
ErrLDAPImportModeInvalid: "El modo de importación debe ser usuarios seleccionados o todos los usuarios."
ErrLDAPImportSelectionRequired: "Seleccione al menos un usuario LDAP para importar."
ErrLDAPImportSelectionInvalid: "Los usuarios LDAP seleccionados no son válidos o ya no existen. Vuelva a leer el directorio."
ErrLDAPConfigChanged: "La configuración LDAP ha cambiado. Vuelva a leer el directorio y a previsualizar la importación."
ErrLDAPRoleRequired: "Seleccione un rol para los nuevos usuarios LDAP."
ErrLDAPImportPlanIncomplete: "No se puede ejecutar un plan de importación LDAP incompleto."
ErrLDAPQueryTokenInvalid: "El resultado de la consulta LDAP ha caducado. Vuelva a leer el directorio."
ErrLDAPPlanTokenInvalid: "La vista previa de importación LDAP ha caducado. Vuelva a previsualizar la importación."
ErrLDAPOperationFailed: "La operación LDAP falló. Inténtelo de nuevo."
ErrLDAPEntryIdentityMissing: "A la entrada LDAP le falta un ID estable o un nombre de usuario."
ErrLDAPDuplicateExternalID: "LDAP devolvió IDs de usuario duplicados."
ErrLDAPUsernameConflict: "El nombre de usuario ya está siendo utilizado por otro usuario."
ErrLDAPUsernameSourceConflict: "El nombre de usuario ya está siendo utilizado por un usuario local u otra fuente de autenticación."
ErrLDAPUsernameConcurrentConflict: "Otro usuario ocupó el nombre de usuario durante la importación."
ErrLDAPLocalCredentialsReadonly: "Los nombres de usuario y contraseñas LDAP se administran en LDAP y no pueden modificarse localmente."
ErrLDAPPasswordExpirationUnsupported: "Los usuarios LDAP no utilizan la política local de caducidad de contraseñas."
ErrLDAPSyncSourceDisabled: "Habilite AD/LDAP antes de activar o ejecutar la sincronización."
ErrLDAPSyncConfigSave: "No se pudo guardar la configuración de sincronización LDAP."
ErrLDAPSyncSchedule: "No se pudo actualizar la programación de sincronización LDAP."
ErrLDAPSyncCronInvalid: "Introduzca una expresión Cron válida de cinco campos."
ErrLDAPSyncWeekdayInvalid: "Seleccione un día de la semana válido."
ErrLDAPSyncCronRequired: "Introduzca una expresión Cron."
ErrLDAPSyncScheduleTypeInvalid: "Seleccione un tipo de programación de sincronización válido."
ErrLDAPSyncTimeInvalid: "Introduzca una hora de ejecución válida."
ErrLDAPSyncRunning: "Ya hay una tarea de sincronización LDAP en ejecución."
ErrLDAPSyncDirectoryIncomplete: "LDAP devolvió un resultado incompleto de la consulta completa. No se modificó el estado de ningún usuario."
ErrLDAPSyncFailed: "La sincronización de usuarios LDAP falló."
LDAPSyncSuccess: "La sincronización de usuarios LDAP se completó correctamente."
ErrSAML2NotEnabled: "La autenticación SAML2 no está activada."
ErrSAML2ConfigInvalid: "La configuración de SAML2 no es válida."
ErrSAML2ConfigChanged: "La configuración de SAML2 ha cambiado. Inicie de nuevo la autenticación."
ErrSAML2PanelOriginMissing: "Introduzca una URL pública de 1Panel válida que solo contenga el esquema, el host y un puerto opcional."
ErrSAML2MetadataInvalid: "Faltan los metadatos del IdP o no son válidos."
ErrSAML2MetadataURLInvalid: "La URL de metadatos del IdP o uno de sus puntos de conexión no está permitido."
ErrSAML2MetadataFetch: "No se pudieron cargar los metadatos del IdP."
ErrSAML2MetadataCertificate: "Los metadatos del IdP no contienen un certificado de firma utilizable."
ErrSAML2KeyPairInvalid: "La clave privada y el certificado del SP no son válidos o no coinciden."
ErrSAML2NameAttributeMissing: "Falta el atributo de nombre de usuario SAML2 configurado o no es válido."
ErrSAML2DefaultRoleInvalid: "El rol predeterminado configurado para SAML2 no está disponible."
ErrSAML2SLOUnavailable: "El IdP no proporciona un servicio de cierre de sesión único compatible."
ErrSAML2TestExpired: "La prueba de SAML2 ha caducado. Ejecútela de nuevo."
ErrSAML2LoginExpired: "La solicitud de inicio de sesión SAML2 ha caducado. Inténtelo de nuevo."
ErrSAML2InvalidState: "El estado de inicio de sesión SAML2 no es válido o ya se utilizó."
ErrSAML2RequestBuild: "No se pudo crear la solicitud SAML2."
ErrSAML2ResponseInvalid: "La respuesta SAML2 no es válida."
ErrSAML2SignatureInvalid: "La firma SAML2 no es válida."
ErrSAML2Replay: "El mensaje SAML2 ya se utilizó."
ErrSAML2NameIDMissing: "Falta el NameID de SAML2 o no es válido."
ErrSAML2SessionIndexMissing: "Falta el SessionIndex de SAML2 o no es válido."
ErrSAML2NameConflictLocal: "El nombre de usuario SAML2 entra en conflicto con un usuario local."
ErrSAML2NameConflictLDAP: "El nombre de usuario SAML2 entra en conflicto con un usuario LDAP."
ErrSAML2NameConflictOIDC: "El nombre de usuario SAML2 entra en conflicto con un usuario OIDC."
ErrSAML2NameConflictSAML2: "El nombre de usuario SAML2 entra en conflicto con otra identidad SAML2."
ErrSAML2Internal: "Se produjo un error interno durante la autenticación SAML2. Inténtelo más tarde."
ErrSAML2LogoutExpired: "La solicitud de cierre de sesión SAML2 ha caducado."
ErrSAML2LogoutInvalid: "El mensaje de cierre de sesión SAML2 no es válido."
ErrSAML2LocalCredentialsReadonly: "Los nombres de usuario y las contraseñas SAML2 los gestiona el proveedor de identidad y no pueden modificarse localmente."
ErrSAML2PasswordExpirationUnsupported: "Los usuarios SAML2 no utilizan la política local de caducidad de contraseñas."
