Files
1Panel/core/i18n/lang/es-ES.yaml
Yuki Guoandssongliu d658395188 feat(sync): sync php extended template (#14299)
* feat(sync): sync php extended template

* fix(i18n): complete resource sync translations

---------

Co-authored-by: ssongliu <sloooop1x@gmail.com>
2026-11-05 15:06:12 +08:00

601 lines
45 KiB
YAML

# 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 }}'
ErrApiConfigKeyExpired: "La clave API ha caducado. Ajusta su fecha de caducidad o reemplázala en la gestión de claves API del panel."
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."
# 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: "Este servicio 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"
PrepareNodePackage: "Preparar el paquete existente en el nodo secundario"
PrepareNodePackageDetail: "Usar el paquete existente en el nodo secundario: {{ .name }}"
SyncNodeConfig: "Sincronizar la configuración del nodo"
ErrNodePackagePath: "Introduzca la ruta absoluta del archivo del paquete en el nodo secundario"
ErrNodePackageFile: "Error al procesar el archivo del paquete {{ .name }}: {{ .err }}"
ErrNodePackageMember: "El paquete contiene una entrada no válida o duplicada: {{ .name }}"
ErrNodePackageMismatch: "El paquete debe coincidir con la versión {{ .version }} del nodo principal y la arquitectura {{ .arch }} del nodo secundario"
ErrNodePackageMissing: "Falta un archivo necesario en el paquete: {{ .name }}"
ErrNodePackageVersion: "La versión {{ .version }} del paquete no coincide con la versión {{ .expected }} del nodo principal"
ErrNodePackageArch: "La arquitectura del ejecutable Agent no coincide con la arquitectura {{ .arch }} del nodo secundario"
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 código QR ya no es válido. Genere uno nuevo y vuelva a escanearlo.'
# 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."
# API key management
ErrAPIKeyConflict: "La clave API cambió. Actualice y reintente; al repetir la creación, use los parámetros originales"
ErrAPIKeyNameExists: "Ya existe una clave API no revocada con este nombre"
ErrAPIKeyNotFound: "La clave API no existe o no pertenece al usuario actual"
ErrAPIKeyAppBindingDisabled: "Esta clave API no permite vincular la APP mediante código QR"
ErrAPIKeyTerminalUpgradeRequired: "No se pudo verificar la autorización de terminal con clave API. Compruebe la conexión del nodo y actualice su Agent antes de reintentar."
LocalAppSyncDispatch: "Enviar sincronización de apps locales"
LocalAppSyncDispatchNode: "Enviar sincronización de apps locales a {{.node}} (tarea del nodo: {{.taskID}})"
ErrLocalAppSyncDisabled: "La sincronización de apps locales entre nodos está desactivada"
# MCP connection document
MCPDocumentTitle: "Instrucciones de configuración de la conexión MCP de 1Panel"
MCPDocumentIntro: "Entregue este archivo a un agente de IA y pídale que realice la configuración descrita. El archivo contiene el Token completo; manténgalo privado."
MCPDocumentTaskTitle: "Tarea de configuración para el agente de IA"
MCPDocumentTask: "Configure el MCP de 1Panel en el entorno actual para el cliente indicado a continuación y verifique la conexión y el descubrimiento de herramientas. Use los parámetros del bloque de configuración siguiente."
MCPDocumentClientCodex: "Cliente de destino: Codex. Confirme primero el ámbito de configuración y el CODEX_HOME real. Use el config.toml activo (por defecto: ~/.codex/config.toml) e integre el TOML siguiente en la entrada mcp_servers correspondiente."
MCPDocumentClientClaude: "Cliente de destino: Claude. Confirme primero la versión real del cliente. El JSON siguiente está destinado a clientes que admitan la configuración MCP por HTTP. Use una ubicación o un método de gestión admitidos por esa versión; no escriba la configuración HTTP remota en una entrada que solo admita stdio."
MCPDocumentClientGeneric: "Cliente de destino: cliente MCP genérico. Identifique primero el cliente utilizado y el ámbito de configuración. Si no puede determinarlo, pregunte al usuario; no adivine la ubicación del archivo. Integre los parámetros siguientes con la sintaxis del cliente."
MCPDocumentSteps: |-
1. Confirme que el cliente admite Streamable HTTP y cabeceras de solicitud Bearer. Si la versión no los admite, explique el motivo.
2. Lea la configuración existente y cree una copia de seguridad. Integre la única entrada de servidor siguiente y conserve el resto de los ajustes MCP y del cliente. Si el nombre ya existe, actualice solo esa entrada.
3. Escriba los valores de URL y Authorization exactamente como se proporcionan. No regenere el Token ni cambie los permisos del panel o el estado del servicio. No incluya el Token en el historial de comandos, registros, respuestas ni Git.
4. Mantenga la validación de certificados HTTPS. Para una CA privada, pida al usuario una CA de confianza; no confíe automáticamente en el certificado del servidor ni desactive la validación TLS. Use HTTP solo en redes de confianza; configure HTTPS antes de atravesar una red no fiable.
5. Recargue mediante el cliente y verifique la inicialización MCP y tools/list. No ejecute tools/call ni operaciones de escritura. Si no se puede recargar, indique que hace falta una nueva sesión o un reinicio. Guardar el archivo no demuestra que la conexión funcione.
6. Informe del cliente, la ubicación de configuración, el nombre del servidor, los resultados de conexión y descubrimiento de herramientas y los problemas pendientes. Oculte el Token.
MCPDocumentConfigTitle: "Configuración de la conexión"
MCPDocumentNotes: "El servidor del panel comprueba los permisos de herramientas, nodos y de la cuenta actual en cada solicitud. Tras regenerar el Token, actualice la configuración del cliente. Se deniega el acceso si la credencial se desactiva, revoca o caduca."
MCPDocumentHTTPWarning: "Esta dirección utiliza HTTP sin cifrar. Configure HTTPS antes de usarla en una red no fiable."
# MCP management
ErrMCPConflict: "Conflicto de datos MCP. Actualice y revise."
ErrMCPSettingsChanged: "La configuración cambió. Actualice y revise antes de guardar."
ErrMCPCredentialChanged: "La credencial cambió. Actualice y revise antes de enviar."
ErrMCPCredentialRevoked: "Credencial revocada. Cree otra."
ErrMCPCredentialNameExists: "El nombre de credencial ya existe. Elija otro."
ErrMCPRequestReused: "Conflicto en la solicitud. Cierre y vuelva a abrir esta ventana."
ErrMCPInstallationRunning: "Instalación en curso. Consulte el registro de instalación."
ErrMCPServiceOperationRunning: "Operación del servicio en curso. Actualice cuando termine."
ErrMCPEndpointManagedByWebsite: "El sitio gestiona esta dirección. Modifíquela en sus ajustes."
ErrMCPWebsiteConfigurationExists: "Existe una vinculación u operación pendiente. Desmarque «Vincular sitio después de la instalación»."
ErrMCPWebsiteAlreadyBound: "Sitio ya vinculado. Gestione o elimine la vinculación actual."
ErrMCPWebsiteNotBound: "No hay sitio vinculado. Actualice antes de vincular."
ErrMCPWebsiteMissing: "El sitio original ya no existe. Elimine la vinculación obsoleta y vuelva a vincular."
ErrMCPWebsiteOperationPending: "Operación del sitio sin confirmar. Actualice y reintente la operación original."
ErrMCPWebsiteDomainConflict: "La combinación de dominio y puerto está en uso. Cambie el dominio o el puerto."
ErrMCPWebsiteOwnershipChanged: "La propiedad del sitio cambió. Revise el sitio y la vinculación."
ErrMCPWebsiteDomainChanged: "El dominio cambió. Revíselo y actualice el estado de vinculación."
ErrMCPWebsiteDirectoryChanged: "El directorio o sus permisos cambiaron. Restáurelos antes de reintentar."
ErrMCPWebsiteProxyModified: "Conflicto de proxy. Restaure la configuración del proxy MCP."
ErrMCPWebsiteModified: "El protocolo o los ajustes del sitio cambiaron. Revise y actualice."
ErrMCPWebsiteRequestChanged: "El registro no coincide. Actualice y verifique antes de iniciar otra operación."
ErrMCPWebsiteProxyNotLoaded: "Proxy MCP no cargado. Revise los ajustes del sitio y OpenResty."
ErrMCPWebsiteStateUnconfirmed: "Estado del sitio sin confirmar. Revise el sitio y OpenResty y actualice."
ErrMCPPolicyChanged: "El catálogo o los permisos cambiaron. Actualice y revise antes de guardar."
ErrMCPCatalogUnavailable: "Catálogo no disponible. Revise el estado del servicio."
ErrMCPDisabled: "El servicio MCP no está habilitado."
ErrMCPSecretKeyUnavailable: "Cifrado de credenciales no disponible. Inténtelo más tarde."
ErrMCPSecretInvalid: "No se puede descifrar el Token. Genérelo de nuevo."
ErrMCPCredentialInactive: "La credencial está deshabilitada, caducada o revocada."
ErrMCPAuditUnavailable: "Auditoría no disponible. Verifique primero el resultado de la operación."
ErrMCPEndpointUnavailable: "Configure primero una dirección MCP válida."
ErrMCPWebsitePending: "Resultado del sitio sin confirmar. Actualice y reintente la operación original."
ErrMCPWebsiteUnavailable: "Vinculación no disponible. Revise el sitio y OpenResty."
ErrMCPWebsiteServiceRequired: "Instale primero el servicio 1Panel MCP."
ErrMCPWebsiteHTTPPortRequired: "Use el puerto HTTP de OpenResty para vincular con HTTPS."
# MCP installation tasks
PanelMCP: "1Panel MCP"
MCPInstallPrepare: "Comprobar el servicio MCP actual"
MCPInstallPullImage: "Comprobar y descargar la imagen"
MCPInstallCatalog: "Validar el contrato de herramientas"
MCPInstallStarting: "Iniciar el contenedor y comprobar su estado"
MCPInstallSaving: "Guardar la configuración del servicio"
MCPInstallCompleted: "Instalación del servicio MCP completada"
MCPInstallRollback: "La instalación falló; restaurar el servicio MCP anterior"
MCPInstallBindWebsite: "Crear el sitio web vinculado"
MCPInstallWebsiteFailed: "Servicio instalado; falló la vinculación. Resuélvalo en los ajustes del servicio."
MCPInstallInterrupted: "El reinicio del panel interrumpió la instalación. Verifique el estado del servicio."
MCPInstallFailed: "Instalación fallida. Revise Docker, la imagen y los registros del panel."
MCPInstallRecoveryFailed: "Instalación fallida y recuperación incompleta. Verifique el estado del servicio."
MCPInstallLocalImage: "La imagen ya existe localmente; omitir la descarga"
MCPInstallVerifyImage: "Validar la versión de la imagen y el contrato del servicio administrado"
MCPInstallVerifiedImage: "La imagen superó la validación"
PHPExtensionsNoTargets: "No quedan nodos de destino tras excluir el nodo de origen"
PHPExtensionsSyncTask: "Sincronizar plantilla de extensiones PHP [{{ .name }}]"
PHPExtensionsSyncSkipped: "El nodo [{{ .node }}] ya tiene una plantilla idéntica; se ha omitido"
MCPInstallCleanup: "Limpiar el contenedor anterior"
MCPInstallOldContainerRemoved: "Contenedor anterior eliminado"
MCPInstallOldImageRemoved: "Imagen anterior eliminada"
MCPInstallOldImageKept: "Imagen anterior conservada"
MCPInstallOldImageRetained: "La imagen anterior tiene referencias u otras etiquetas; se ha conservado."
MCPInstallCleanupSkipped: "El contenedor anterior no existe; se omite la limpieza de la imagen."
MCPInstallCleanupFailed: "MCP se ha actualizado, pero no se han limpiado todos los recursos anteriores. Revísalos manualmente."