mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-12-17 21:08:25 +08:00
feat: Dev v2 spanish (#10352)
This commit is contained in:
parent
aa91bb88bc
commit
1999f102bf
11 changed files with 4529 additions and 6 deletions
|
|
@ -128,6 +128,7 @@ type Locale struct {
|
|||
Zh string `json:"zh"`
|
||||
Ko string `json:"ko"`
|
||||
Tr string `json:"tr"`
|
||||
Es string `json:"es-es" yaml:"es-es"`
|
||||
}
|
||||
|
||||
type AppForm struct {
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ func Init() {
|
|||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/es-ES.yaml")
|
||||
lang := GetLanguageFromDB()
|
||||
global.I18n = i18n.NewLocalizer(bundle, lang)
|
||||
}
|
||||
|
|
|
|||
490
agent/i18n/lang/es-ES.yaml
Normal file
490
agent/i18n/lang/es-ES.yaml
Normal file
|
|
@ -0,0 +1,490 @@
|
|||
ErrInvalidParams: 'Error en los parámetros de la solicitud: {{ .detail }}'
|
||||
ErrTokenParse: 'Error al generar el token: {{ .detail }}'
|
||||
ErrInitialPassword: 'La contraseña original es incorrecta'
|
||||
ErrInternalServer: 'Error interno del servidor: {{ .detail }}'
|
||||
ErrRecordExist: 'El registro ya existe'
|
||||
ErrRecordNotFound: 'Registro no encontrado'
|
||||
ErrStructTransform: 'Error de conversión de tipo: {{ .err }}'
|
||||
ErrNotLogin: 'Usuario no ha iniciado sesión: {{ .detail }}'
|
||||
ErrPasswordExpired: 'La contraseña actual ha expirado: {{ .detail }}'
|
||||
ErrNotSupportType: 'El sistema no admite el tipo actual: {{ .name }}'
|
||||
ErrProxy: 'Error en la solicitud, por favor revise el estado del nodo: {{ .detail }}'
|
||||
ErrApiConfigStatusInvalid: 'Se prohíbe el acceso a la interfaz API: {{ .detail }}'
|
||||
ErrApiConfigKeyInvalid: 'Error en la clave de la interfaz API: {{ .detail }}'
|
||||
ErrApiConfigIPInvalid: 'La IP usada para llamar a la API no está en la lista blanca: {{ .detail }}'
|
||||
ErrApiConfigDisable: 'Esta interfaz prohíbe el uso de llamadas a la API: {{ .detail }}'
|
||||
ErrApiConfigKeyTimeInvalid: 'Error en la marca de tiempo de la interfaz API: {{ .detail }}'
|
||||
ErrMinQuickJump: "¡Por favor configure al menos una entrada de acceso rápido!"
|
||||
ErrMaxQuickJump: "¡Puede configurar hasta cuatro entradas de acceso rápido!"
|
||||
|
||||
#común
|
||||
ErrUsernameIsExist: 'El nombre de usuario ya existe'
|
||||
ErrNameIsExist: 'El nombre ya existe'
|
||||
ErrDemoEnvironment: '¡Servidor de demostración, esta operación está prohibida!'
|
||||
ErrCmdTimeout: '¡Tiempo de espera excedido en la ejecución del comando!'
|
||||
ErrCmdIllegal: 'Hay caracteres ilegales en el comando, ¡modifíquelo e intente de nuevo!'
|
||||
ErrPortExist: 'El puerto {{ .port }} ya está ocupado por {{ .type }} [{{ .name }}]'
|
||||
TYPE_APP: 'Aplicación'
|
||||
TYPE_RUNTIME: 'Entorno de ejecución'
|
||||
TYPE_DOMAIN: 'Nombre de dominio'
|
||||
ErrTypePort: 'El formato del puerto {{ .name }} es incorrecto'
|
||||
ErrTypePortRange: 'El rango de puertos debe estar entre 1-65535'
|
||||
Success: 'Éxito'
|
||||
Failed: 'Error'
|
||||
SystemRestart: 'La tarea fue interrumpida debido a un reinicio del sistema'
|
||||
ErrGroupIsDefault: 'Grupo predeterminado, no se puede eliminar'
|
||||
ErrGroupIsInWebsiteUse: 'El grupo está siendo usado por otro sitio web y no se puede eliminar.'
|
||||
|
||||
#backup
|
||||
ErrBackupInUsed: 'La cuenta de respaldo está siendo utilizada en una tarea programada y no se puede eliminar.'
|
||||
ErrBackupCheck: 'Error al probar la conexión de la cuenta de respaldo {{ .err }}'
|
||||
ErrBackupLocalDelete: 'No se admite aún la eliminación de la cuenta de respaldo del servidor local'
|
||||
ErrBackupLocalCreate: 'No se admite aún la creación de cuentas de respaldo del servidor local'
|
||||
Localhost: "Máquina local"
|
||||
|
||||
#app
|
||||
ErrPortInUsed: '¡El puerto {{ .detail }} ya está ocupado!'
|
||||
ErrAppLimit: 'El número de aplicaciones instaladas ha superado el límite'
|
||||
ErrNotInstall: 'Aplicación no instalada'
|
||||
ErrPortInOtherApp: '¡El puerto {{ .port }} ya está ocupado por la aplicación {{ .apps }}!'
|
||||
ErrDbUserNotValid: '¡Base de datos existente, usuario y contraseña no coinciden!'
|
||||
ErrUpdateBuWebsite: 'La aplicación se actualizó correctamente, pero falló la modificación del archivo de configuración del sitio web. ¡Por favor revise la configuración!'
|
||||
Err1PanelNetworkFailed: '¡Fallo la creación de la red por defecto del contenedor! {{ .detail }}'
|
||||
ErrFileParse: '¡Fallo al analizar el archivo docker-compose de la aplicación!'
|
||||
ErrInstallDirNotFound: 'El directorio de instalación no existe. Si desea desinstalar, seleccione Desinstalación forzada'
|
||||
AppStoreIsUpToDate: 'La tienda de aplicaciones ya está en la última versión'
|
||||
LocalAppVersionNull: '¡La aplicación {{ .name }} no está sincronizada a la versión! No se puede agregar a la lista de aplicaciones'
|
||||
LocalAppVersionErr: '¡La sincronización de la versión {{ .version }} de {{ .name }} falló! {{ .err }}'
|
||||
ErrFileNotFound: 'El archivo {{ .name }} no existe'
|
||||
ErrFileParseApp: '¡El archivo {{ .name }} falló al analizarse! {{ .err }}'
|
||||
ErrAppDirNull: 'La carpeta de la versión no existe'
|
||||
LocalAppErr: '¡La sincronización de la aplicación {{ .name }} falló! {{ .err }}'
|
||||
ErrContainerName: 'El nombre del contenedor ya existe'
|
||||
ErrCreateHttpClient: 'Fallo al crear la solicitud {{ .err }}'
|
||||
ErrHttpReqTimeOut: 'La solicitud superó el tiempo de espera {{ .err }}'
|
||||
ErrHttpReqFailed: 'La solicitud falló {{ .err }}'
|
||||
ErrNoSuchHost: 'No se pudo encontrar el servidor solicitado {{ .err }}'
|
||||
ErrHttpReqNotFound: 'No se pudo encontrar el recurso solicitado {{ .err }}'
|
||||
ErrContainerNotFound: 'El contenedor {{ .name }} no existe'
|
||||
ErrContainerMsg: 'El contenedor {{ .name }} presenta anomalías. Revise el log en la página de contenedores para más detalles'
|
||||
ErrAppBackup: 'Falló el respaldo de la aplicación {{ .name }} {{ .err }}'
|
||||
ErrVersionTooLow: 'La versión actual de 1Panel es demasiado baja para actualizar la tienda de aplicaciones. Actualice primero.'
|
||||
ErrAppNameExist: 'El nombre de la aplicación ya existe'
|
||||
AppStoreIsSyncing: 'La tienda de aplicaciones está sincronizando, inténtelo más tarde'
|
||||
ErrGetCompose: '¡Fallo al obtener el archivo docker-compose.yml! {{ .detail }}'
|
||||
ErrAppWarn: 'Estado anómalo, revise el log'
|
||||
ErrAppParamKey: 'El campo de parámetro {{ .name }} es anómalo'
|
||||
ErrAppUpgrade: 'La actualización de la aplicación {{ .name }} falló {{ .err }}'
|
||||
AppRecover: 'Revertir la aplicación {{ .name }}'
|
||||
PullImageStart: 'Iniciar descarga de la imagen {{ .name }}'
|
||||
PullImageSuccess: 'Descarga de imagen exitosa'
|
||||
AppStoreIsLastVersion: 'La tienda de aplicaciones ya está en la última versión'
|
||||
AppStoreSyncSuccess: 'Sincronización de la tienda de aplicaciones exitosa'
|
||||
SyncAppDetail: 'Sincronizar configuración de la aplicación'
|
||||
AppVersionNotMatch: 'La aplicación {{ .name }} requiere una versión superior de 1Panel, se omite la sincronización'
|
||||
MoveSiteDir: 'La actualización actual requiere migrar el directorio del sitio web OpenResty'
|
||||
MoveSiteDirSuccess: 'Migración del directorio del sitio exitosa'
|
||||
DeleteRuntimePHP: 'Eliminar entorno de ejecución PHP'
|
||||
CustomAppStoreFileValid: 'Los paquetes de la tienda de aplicaciones deben estar en formato .tar.gz'
|
||||
PullImageTimeout: 'Tiempo de espera al descargar la imagen, intente aumentar la aceleración o use otra'
|
||||
ErrAppIsDown: 'El estado de la aplicación {{ .name }} es anómalo, revise'
|
||||
ErrCustomApps: 'Hay una aplicación instalada, desinstálela primero'
|
||||
ErrCustomRuntimes: 'Hay un entorno de ejecución instalado, elimínelo primero'
|
||||
ErrAppVersionDeprecated: "La aplicación {{ .name }} no es compatible con la versión actual de 1Panel, omitida"
|
||||
ErrDockerFailed: "El estado de Docker es anómalo, revise el servicio"
|
||||
ErrDockerComposeCmdNotFound: "El comando Docker Compose no existe, por favor instálelo primero en el host"
|
||||
|
||||
#ssh
|
||||
ExportIP: "IP de inicio de sesión"
|
||||
ExportArea: "Ubicación"
|
||||
ExportPort: "Puerto"
|
||||
ExportAuthMode: "Método de inicio de sesión"
|
||||
ExportUser: "Usuario"
|
||||
ExportStatus: "Estado de inicio de sesión"
|
||||
ExportDate: "Fecha y hora"
|
||||
|
||||
#file
|
||||
ErrFileCanNotRead: 'Este archivo no soporta vista previa'
|
||||
ErrFileToLarge: 'El archivo es mayor a 10M y no puede abrirse'
|
||||
ErrPathNotFound: 'El directorio no existe'
|
||||
ErrMovePathFailed: '¡La ruta de destino no puede contener la ruta original!'
|
||||
ErrLinkPathNotFound: '¡La ruta de destino no existe!'
|
||||
ErrFileIsExist: '¡El archivo o carpeta ya existe!'
|
||||
ErrFileUpload: '{{ .name }} falló al subir archivo {{ .detail }}'
|
||||
ErrFileDownloadDir: 'No se admite la descarga de carpetas'
|
||||
ErrCmdNotFound: 'El comando {{ .name }} no existe, instálelo primero en el host'
|
||||
ErrSourcePathNotFound: 'El directorio fuente no existe'
|
||||
ErrFavoriteExist: 'Esta ruta ya ha sido marcada como favorita'
|
||||
ErrInvalidChar: 'No se permiten caracteres ilegales'
|
||||
ErrPathNotDelete: 'No se puede eliminar el directorio seleccionado'
|
||||
FileDropFailed: "Error al limpiar el archivo {{ .name }}: {{ .err }}"
|
||||
FileDropSuccess: "Archivo {{ .name }} limpiado correctamente, {{ .count }} archivos eliminados, {{ .size }} de espacio liberado"
|
||||
FileDropSum: "Limpieza de archivos completada, total {{ .count }} archivos eliminados, {{ .size }} de espacio liberado"
|
||||
|
||||
#website
|
||||
ErrAliasIsExist: 'El alias ya existe'
|
||||
ErrBackupMatch: 'El archivo de respaldo no coincide con parte de los datos actuales del sitio web {{ .detail }}'
|
||||
ErrBackupExist: 'Parte de los datos fuente del respaldo no existe {{ .detail }}'
|
||||
ErrPHPResource: '¡El entorno local no soporta cambio!'
|
||||
ErrPathPermission: 'Se detectó una carpeta con permisos distintos a 1000:1000 en el directorio index, lo cual puede causar errores de acceso denegado. Haga clic en Guardar arriba'
|
||||
ErrDomainIsUsed: 'El dominio ya está en uso por el sitio web [{{ .name }}]'
|
||||
ErrDomainFormat: 'El formato del dominio {{ .name }} es incorrecto'
|
||||
ErrDefaultAlias: 'default es un código reservado, use otro'
|
||||
ErrParentWebsite: 'Primero debe eliminar el sub-sitio {{ .name }}'
|
||||
ErrBuildDirNotFound: 'El directorio de compilación no existe'
|
||||
ErrImageNotExist: 'La imagen del entorno {{ .name }} no existe, edítela de nuevo'
|
||||
ErrProxyIsUsed: "El balanceo de carga ya está usado por un proxy reverso, no se puede eliminar"
|
||||
ErrSSLValid: 'Archivo de certificado anómalo, ¡revise el estado del certificado!'
|
||||
ErrWebsiteDir: "Por favor seleccione un directorio dentro del directorio del sitio web"
|
||||
ErrComposerFileNotFound: "El archivo composer.json no existe"
|
||||
ErrRuntimeNoPort: "El entorno de ejecución no tiene configurado un puerto, edítelo primero"
|
||||
|
||||
#ssl
|
||||
ErrSSLCannotDelete: 'El certificado {{ .name }} está siendo utilizado por un sitio web y no puede eliminarse'
|
||||
ErrAccountCannotDelete: 'La cuenta está asociada a un certificado y no puede eliminarse'
|
||||
ErrSSLApply: 'Renovación del certificado exitosa, recarga de openresty fallida, ¡revise la configuración!'
|
||||
ErrEmailIsExist: 'El correo ya existe'
|
||||
ErrSSLKeyNotFound: 'El archivo de clave privada no existe'
|
||||
ErrSSLCertificateNotFound: 'El archivo de certificado no existe'
|
||||
ErrSSLKeyFormat: 'Error en la verificación del archivo de clave privada'
|
||||
ErrSSLCertificateFormat: 'Formato de certificado incorrecto, use formato pem'
|
||||
ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid o EabHmacKey no pueden estar en blanco'
|
||||
ErrOpenrestyNotFound: 'El modo Http requiere tener Openresty instalado primero'
|
||||
ApplySSLStart: 'Iniciando solicitud de certificado, dominio [{{ .domain }}] método de solicitud [{{ .type }}]'
|
||||
dnsAccount: 'DNS Automático'
|
||||
dnsManual: 'DNS Manual'
|
||||
http: 'HTTP'
|
||||
ApplySSLFailed: 'Solicitud de certificado para [{{ .domain }}] fallida, {{ .detail }}'
|
||||
ApplySSLSuccess: '¡Solicitud de certificado para [{{ .domain }}] exitosa!'
|
||||
DNSAccountName: 'Cuenta DNS [{{ .name }}] proveedor [{{ .type }}]'
|
||||
PushDirLog: 'Certificado empujado al directorio [{{ .path }}] {{ .status }}'
|
||||
ErrDeleteCAWithSSL: 'La organización actual tiene un certificado emitido y no puede eliminarse.'
|
||||
ErrDeleteWithPanelSSL: 'La configuración SSL del panel utiliza este certificado y no puede eliminarse'
|
||||
ErrDefaultCA: 'La autoridad por defecto no puede eliminarse'
|
||||
ApplyWebSiteSSLLog: 'Iniciando renovación del certificado del sitio web {{ .name }}'
|
||||
ErrUpdateWebsiteSSL: 'Actualización de certificado del sitio web {{ .name }} falló: {{ .err }}'
|
||||
ApplyWebSiteSSLSuccess: 'Certificado del sitio web actualizado exitosamente'
|
||||
ErrExecShell: 'Ejecución del script fallida {{ .err }}'
|
||||
ExecShellStart: 'Iniciando ejecución de script'
|
||||
ExecShellSuccess: 'Ejecución de script exitosa'
|
||||
StartUpdateSystemSSL: 'Iniciando actualización del certificado del sistema'
|
||||
UpdateSystemSSLSuccess: 'Certificado del sistema actualizado correctamente'
|
||||
ErrWildcardDomain: 'No se puede solicitar certificado de dominio wildcard en modo HTTP'
|
||||
ErrDeleteCAWithSSL: "La organización actual tiene un certificado emitido y no puede eliminarse."
|
||||
ErrApplySSLCanNotDelete: "El certificado {{ .name }} en proceso de solicitud no puede eliminarse, inténtelo más tarde"
|
||||
StartPushSSLToNode: "Iniciando envío de certificado al nodo"
|
||||
PushSSLToNodeFailed: "Error al enviar el certificado al nodo: {{ .err }}"
|
||||
PushSSLToNodeSuccess: "Certificado enviado correctamente al nodo"
|
||||
|
||||
#mysql
|
||||
ErrUserIsExist: 'El usuario actual ya existe, intente con otro'
|
||||
ErrDatabaseIsExist: 'La base de datos actual ya existe, intente con otro nombre'
|
||||
ErrExecTimeOut: 'Tiempo de espera en la ejecución SQL, revise la base de datos'
|
||||
ErrRemoteExist: 'La base de datos remota ya existe con ese nombre, modifíquelo e intente de nuevo'
|
||||
ErrLocalExist: 'El nombre ya existe en la base de datos local, modifíquelo e intente de nuevo'
|
||||
|
||||
#redis
|
||||
ErrTypeOfRedis: 'El tipo de archivo de recuperación no coincide con el método de persistencia actual, modifíquelo e intente'
|
||||
|
||||
#container
|
||||
ErrInUsed: '{{ .detail }} está en uso y no puede eliminarse'
|
||||
ErrObjectInUsed: 'El objeto está en uso y no puede eliminarse'
|
||||
ErrObjectBeDependent: 'Esta imagen depende de otras imágenes y no puede eliminarse'
|
||||
ErrPortRules: 'El número de puerto no coincide, ingrese de nuevo'
|
||||
ErrPgImagePull: 'Tiempo de espera al descargar la imagen, configure la aceleración o descárguela manualmente ({{ .name }}) e intente de nuevo'
|
||||
PruneHelper: "Esta limpieza eliminó {{ .name }} {{ .count }} elementos, liberando {{ .size }} de espacio en disco"
|
||||
ImageRemoveHelper: "Imagen {{ .name }} eliminada, liberando {{ .size }} de espacio en disco"
|
||||
BuildCache: "Caché de compilación"
|
||||
Volume: "Volumen de almacenamiento"
|
||||
Network: "Red"
|
||||
|
||||
#runtime
|
||||
ErrFileNotExist: 'El archivo {{ .detail }} no existe, ¡verifique la integridad!'
|
||||
ErrImageBuildErr: 'Fallo al construir la imagen'
|
||||
ErrImageExist: "¡La imagen ya existe! Modifique el nombre de la imagen."
|
||||
ErrDelWithWebsite: 'El entorno de ejecución ya está asociado a un sitio web y no puede eliminarse'
|
||||
ErrRuntimeStart: 'Fallo al iniciar'
|
||||
ErrPackageJsonNotFound: 'El archivo package.json no existe'
|
||||
ErrScriptsNotFound: 'No se encontró la configuración de scripts en package.json'
|
||||
ErrContainerNameNotFound: 'No se puede obtener el nombre del contenedor, revise el archivo .env'
|
||||
ErrNodeModulesNotFound: 'La carpeta node_modules no existe, edite o espere a que inicie'
|
||||
ErrContainerNameIsNull: 'El nombre del contenedor no existe'
|
||||
ErrPHPPortIsDefault: "El puerto 9000 es el predeterminado, modifique e intente de nuevo"
|
||||
ErrPHPRuntimePortFailed: "El puerto {{ .name }} ya está en uso por el entorno actual, modifique e intente"
|
||||
|
||||
#tool
|
||||
ErrConfigNotFound: 'El archivo de configuración no existe'
|
||||
ErrConfigParse: 'El formato del archivo de configuración es incorrecto'
|
||||
ErrConfigIsNull: 'El archivo de configuración no puede estar vacío'
|
||||
ErrConfigDirNotFound: 'El directorio de ejecución no existe'
|
||||
ErrConfigAlreadyExist: 'Ya existe un archivo de configuración con ese nombre'
|
||||
ErrUserFindErr: 'Búsqueda del usuario {{ .name }} fallida {{ .err }}'
|
||||
|
||||
#cronjob
|
||||
CutWebsiteLogSuccess: 'Log del sitio web {{ .name }} cortado con éxito, ruta de respaldo {{ .path }}'
|
||||
HandleShell: 'Ejecutar script {{ .name }}'
|
||||
HandleNtpSync: 'Sincronizar hora del sistema'
|
||||
HandleSystemClean: 'Limpiar caché del sistema'
|
||||
SystemLog: 'Log del sistema'
|
||||
CutWebsiteLog: 'Rotar log del sitio web'
|
||||
FileOrDir: 'Directorio / Archivo'
|
||||
UploadFile: 'Subiendo archivo de respaldo {{ .file }} a {{ .backup }}'
|
||||
IgnoreBackupErr: 'Fallo en el respaldo, error: {{ .detail }}, se ignora este error...'
|
||||
IgnoreUploadErr: 'Fallo en la subida, error: {{ .detail }}, se ignora este error...'
|
||||
Upload: "Subir"
|
||||
LoadBackupFailed: "Error al obtener la conexión de la cuenta de respaldo, error: {{ .detail }}"
|
||||
InExecuting: "La tarea actual se está ejecutando, por favor no la repita"
|
||||
NoSuchResource: "No se encontraron contenidos de respaldo en la base de datos, omitiendo..."
|
||||
|
||||
#toolbox
|
||||
ErrNotExistUser: 'El usuario actual no existe, modifíquelo e intente de nuevo'
|
||||
ErrBanAction: 'Fallo al configurar. El servicio {{ .name }} no está disponible, revise e intente de nuevo'
|
||||
ErrClamdscanNotFound: 'El comando clamdscan no fue detectado, siga la documentación para instalarlo'
|
||||
|
||||
#waf
|
||||
ErrScope: 'No se admite la modificación de esta configuración'
|
||||
ErrStateChange: 'Fallo al cambiar de estado'
|
||||
ErrRuleExist: 'La regla ya existe'
|
||||
ErrRuleNotExist: 'La regla no existe'
|
||||
ErrParseIP: 'Formato de IP incorrecto'
|
||||
ErrDefaultIP: 'default es un nombre reservado, cámbielo'
|
||||
ErrGroupInUse: 'El grupo IP está en uso por listas negras/blancas y no se puede eliminar'
|
||||
ErrIPGroupAclUse: "El grupo IP está en uso por reglas personalizadas del sitio web {{ .name }}, no puede eliminarse"
|
||||
ErrGroupExist: 'El nombre del grupo IP ya existe'
|
||||
ErrIPRange: 'Rango de IP incorrecto'
|
||||
ErrIPExist: 'La IP ya existe'
|
||||
urlDefense: 'Reglas de URL'
|
||||
urlHelper: 'URL prohibida'
|
||||
dirFilter: 'Filtro de directorio'
|
||||
xss: 'XSS'
|
||||
phpExec: 'Ejecución de scripts PHP'
|
||||
oneWordTrojan: 'Troyano de una sola palabra'
|
||||
appFilter: 'Filtrar directorios peligrosos'
|
||||
webshell: 'Webshell'
|
||||
args: 'Reglas de parámetros'
|
||||
protocolFilter: 'Filtrado de protocolos'
|
||||
javaFileter: 'Filtrado de archivos Java peligrosos'
|
||||
scannerFilter: 'Filtrado de escáneres'
|
||||
escapeFilter: 'Filtro de escape'
|
||||
customRule: 'Regla personalizada'
|
||||
httpMethod: 'Filtrado de métodos HTTP'
|
||||
fileExt: 'Restricciones de carga de archivos'
|
||||
defaultIpBlack: 'Grupo de IPs maliciosas'
|
||||
cookie: 'Reglas de Cookie'
|
||||
urlBlack: 'Lista negra de URLs'
|
||||
uaBlack: 'Lista negra de User-Agent'
|
||||
attackCount: 'Límite de frecuencia de ataques'
|
||||
fileExtCheck: 'Restricción de carga de archivos'
|
||||
geoRestrict: 'Restricciones de acceso regional'
|
||||
unknownWebsite: 'Acceso no autorizado al dominio'
|
||||
notFoundCount: 'Límite de tasa 404'
|
||||
headerDefense: 'Reglas de encabezado'
|
||||
defaultUaBlack: 'Reglas de User-Agent'
|
||||
methodWhite: 'Reglas HTTP'
|
||||
captcha: 'Verificación humano-máquina'
|
||||
fiveSeconds: 'Verificación de 5 segundos'
|
||||
vulnCheck: 'Reglas suplementarias'
|
||||
acl: 'Reglas personalizadas'
|
||||
sql: 'Inyección SQL'
|
||||
cc: 'Límite de frecuencia de acceso'
|
||||
defaultUrlBlack: 'Reglas de URL'
|
||||
sqlInject: 'Inyección SQL'
|
||||
ErrDBNotExist: 'La base de datos no existe'
|
||||
allow: 'permitir'
|
||||
deny: 'denegar'
|
||||
OpenrestyNotFound: 'Openresty no está instalado'
|
||||
remoteIpIsNull: "La lista de IP está vacía"
|
||||
OpenrestyVersionErr: "La versión de Openresty es demasiado baja, actualice a 1.27.1.2-2-2-focal"
|
||||
|
||||
#task
|
||||
TaskStart: 'La tarea {{ .name }} inicia [INICIO]'
|
||||
TaskEnd: 'La tarea {{ .name }} completada [COMPLETADA]'
|
||||
TaskFailed: 'La tarea {{ .name }} falló'
|
||||
TaskTimeout: 'La tarea {{ .name }} excedió el tiempo'
|
||||
TaskSuccess: 'La tarea {{ .name }} se realizó con éxito'
|
||||
TaskRetry: 'Iniciar el {{ .name }} reintento'
|
||||
SubTaskSuccess: '{{ .name }} exitoso'
|
||||
SubTaskFailed: '{{ .name }} falló: {{ .err }}'
|
||||
TaskInstall: 'Instalar'
|
||||
TaskUninstall: 'Desinstalar'
|
||||
TaskCreate: 'Crear'
|
||||
TaskDelete: 'Eliminar'
|
||||
TaskUpgrade: 'Actualizar'
|
||||
TaskUpdate: 'Actualizar'
|
||||
TaskRestart: 'Reiniciar'
|
||||
TaskBackup: 'Respaldar'
|
||||
TaskRecover: 'Recuperar'
|
||||
TaskRollback: 'Revertir'
|
||||
TaskPull: 'Descargar'
|
||||
TaskCommit: 'Commit'
|
||||
TaskBuild: 'Construir'
|
||||
TaskPush: 'Subir'
|
||||
TaskHandle: 'Ejecutar'
|
||||
Website: 'Sitio web'
|
||||
App: 'Aplicación'
|
||||
Runtime: 'Entorno de ejecución'
|
||||
Database: 'Base de datos'
|
||||
ConfigFTP: 'Crear usuario FTP {{ .name }}'
|
||||
ConfigOpenresty: 'Crear archivo de configuración Openresty'
|
||||
InstallAppSuccess: 'Aplicación {{ .name }} instalada correctamente'
|
||||
ConfigRuntime: 'Configurar entorno de ejecución'
|
||||
ConfigApp: 'Configurar aplicación'
|
||||
SuccessStatus: '{{ .name }} exitoso'
|
||||
FailedStatus: '{{ .name }} falló {{ .err }}'
|
||||
HandleLink: 'Gestionar asociación de aplicación'
|
||||
HandleDatabaseApp: 'Gestionar parámetros de aplicación'
|
||||
ExecShell: 'Ejecutar script {{ .name }}'
|
||||
PullImage: 'Descargar imagen'
|
||||
Start: 'Iniciar'
|
||||
Run: 'Ejecutar'
|
||||
Stop: 'Detener'
|
||||
Image: 'Imagen'
|
||||
Compose: 'Orquestación'
|
||||
Container: 'Contenedor'
|
||||
AppLink: 'Aplicación enlazada'
|
||||
EnableSSL: 'Habilitar HTTPS'
|
||||
AppStore: 'Tienda de aplicaciones'
|
||||
TaskSync: 'Sincronizar'
|
||||
LocalApp: 'Aplicación local'
|
||||
SubTask: 'Subtarea'
|
||||
RuntimeExtension: 'Extensión del entorno de ejecución'
|
||||
TaskIsExecuting: 'Tarea en ejecución'
|
||||
CustomAppstore: 'Almacén de aplicaciones personalizado'
|
||||
TaskClean: "Limpieza"
|
||||
TaskExec: "Ejecutar"
|
||||
|
||||
# task - ai
|
||||
OllamaModelPull: 'Descargar modelo Ollama {{ .name }}'
|
||||
OllamaModelSize: 'Obtener tamaño del modelo Ollama {{ .name }}'
|
||||
|
||||
# task - clam
|
||||
Clamscan: "Escanear {{ .name }}"
|
||||
TaskScan: "Escaneo"
|
||||
|
||||
# task-snapshot
|
||||
Snapshot: 'Instantánea'
|
||||
SnapDBInfo: 'Escribir información de base de datos de 1Panel'
|
||||
SnapCopy: 'Copiar archivos y directorios {{ .name }}'
|
||||
SnapNewDB: 'Inicializar conexión a base de datos {{ .name }}'
|
||||
SnapDeleteOperationLog: 'Eliminar log de operaciones'
|
||||
SnapDeleteLoginLog: 'Eliminar log de accesos'
|
||||
SnapDeleteMonitor: 'Eliminar datos de monitoreo'
|
||||
SnapRemoveSystemIP: 'Eliminar IP del sistema'
|
||||
SnapBaseInfo: 'Escribir información básica de 1Panel'
|
||||
SnapInstallAppImageEmpty: 'No se seleccionaron imágenes de aplicaciones, omitiendo...'
|
||||
SnapInstallApp: 'Respaldar aplicaciones instaladas de 1Panel'
|
||||
SnapDockerSave: 'Comprimir aplicaciones instaladas'
|
||||
SnapLocalBackup: 'Respaldar directorio local de 1Panel'
|
||||
SnapCompressBackup: 'Comprimir directorio local de respaldo'
|
||||
SnapPanelData: 'Respaldar directorio de datos de 1Panel'
|
||||
SnapCompressPanel: 'Directorio de datos comprimido'
|
||||
SnapWebsite: 'Respaldar directorio de sitios web de 1Panel'
|
||||
SnapCloseDBConn: 'Cerrar conexión de base de datos'
|
||||
SnapCompress: 'Crear archivos de instantánea'
|
||||
SnapCompressFile: 'Comprimir archivo de instantánea'
|
||||
SnapCheckCompress: 'Verificar archivo de compresión de instantánea'
|
||||
SnapCompressSize: 'Tamaño del archivo de instantánea {{ .name }}'
|
||||
SnapUpload: 'Subir archivo de instantánea'
|
||||
SnapUploadTo: 'Subir archivo de instantánea a {{ .name }}'
|
||||
|
||||
SnapshotRecover: 'Restaurar instantánea'
|
||||
RecoverDownload: 'Descargar archivo de instantánea'
|
||||
Download: 'Descargar'
|
||||
RecoverDownloadAccount: 'Obtener cuenta de respaldo para descargar instantánea {{ .name }}'
|
||||
RecoverDecompress: 'Descomprimir archivos de instantánea'
|
||||
Decompress: 'Descompresión'
|
||||
BackupBeforeRecover: 'Respaldar datos del sistema antes de restaurar instantánea'
|
||||
Readjson: 'Leer archivo Json de la instantánea'
|
||||
ReadjsonPath: 'Obtener ruta del archivo Json en la instantánea'
|
||||
ReadjsonContent: 'Leer archivo Json'
|
||||
ReadjsonMarshal: 'Procesar escape de Json'
|
||||
RecoverApp: 'Restaurar aplicaciones instaladas'
|
||||
RecoverWebsite: 'Recuperar directorio del sitio web'
|
||||
RecoverAppImage: 'Restaurar imagen de la instantánea'
|
||||
RecoverCompose: 'Restaurar otros contenidos de compose'
|
||||
RecoverComposeList: 'Obtener todos los compose a restaurar'
|
||||
RecoverComposeItem: 'Restaurar compose {{ .name }}'
|
||||
RecoverAppEmpty: 'No se encontraron imágenes de respaldo de aplicaciones en la instantánea'
|
||||
RecoverBaseData: 'Recuperar datos y archivos básicos'
|
||||
RecoverDaemonJsonEmpty: 'El archivo daemon.json no existe ni en la instantánea ni en el equipo actual'
|
||||
RecoverDaemonJson: 'Restaurar archivo daemon.json de configuración de contenedor'
|
||||
RecoverDBData: 'Restaurar datos de base de datos'
|
||||
RecoverBackups: 'Restaurar directorio local de respaldo'
|
||||
RecoverPanelData: 'Recuperar directorio de datos'
|
||||
|
||||
# task - container
|
||||
ContainerNewCliet: 'Inicializar cliente Docker'
|
||||
ContainerImagePull: 'Descargar imagen de contenedor {{ .name }}'
|
||||
ContainerRemoveOld: 'Eliminar el contenedor original {{ .name }}'
|
||||
ContainerImageCheck: 'Comprobar si la imagen se descargó correctamente'
|
||||
ContainerLoadInfo: 'Obtener información básica del contenedor'
|
||||
ContainerRecreate: 'Actualización del contenedor fallida, restaurando el contenedor original'
|
||||
ContainerCreate: 'Crear nuevo contenedor {{ .name }}'
|
||||
ContainerCreateFailed: 'Falló la creación del contenedor, eliminando el contenedor fallido'
|
||||
ContainerStartCheck: 'Verificar si el contenedor ha iniciado'
|
||||
|
||||
# task - image
|
||||
ImageBuild: 'Construcción de imagen'
|
||||
ImageBuildStdoutCheck: 'Analizar salida de la imagen'
|
||||
ImageBuildRes: 'Salida de construcción de imagen: {{ .name }}'
|
||||
ImagePull: 'Descargar imagen'
|
||||
ImageRepoAuthFromDB: 'Obtener autenticación de repositorio desde base de datos'
|
||||
ImaegPullRes: 'Salida de descarga de imagen: {{ .name }}'
|
||||
ImagePush: 'Subir imagen'
|
||||
ImageRenameTag: 'Modificar etiqueta de imagen'
|
||||
ImageNewTag: 'Nueva etiqueta de imagen {{ .name }}'
|
||||
ImaegPushRes: 'Salida de subida de imagen: {{ .name }}'
|
||||
ComposeCreate: 'Crear orquestación'
|
||||
ComposeCreateRes: 'Salida de creación de orquestación: {{ .name }}'
|
||||
ImageRepoAuthFromDB: "Obtener información de autenticación del repositorio desde la base de datos"
|
||||
ImaegPullRes: "Salida de descarga de imagen: {{ .name }}"
|
||||
ImaegPushRes: "Salida de subida de imagen: {{ .name }}"
|
||||
|
||||
# task - website
|
||||
BackupNginxConfig: 'Respaldar archivo de configuración OpenResty'
|
||||
CompressFileSuccess: 'Directorio comprimido con éxito, guardado en {{ .name }}'
|
||||
CompressDir: 'Directorio comprimido'
|
||||
DeCompressFile: 'Descomprimir archivo {{ .name }}'
|
||||
ErrCheckValid: 'Verificación de archivo de respaldo fallida, {{ .name }}'
|
||||
Rollback: 'Revertir'
|
||||
websiteDir: 'Directorio del sitio web'
|
||||
RecoverFailedStartRollBack: 'Restauración fallida, iniciando reversión'
|
||||
AppBackupFileIncomplete: 'El archivo de respaldo está incompleto, falta app.json o app.tar.gz'
|
||||
AppAttributesNotMatch: 'El tipo o nombre de la aplicación no coincide'
|
||||
|
||||
#alert
|
||||
ErrAlert: 'El formato del mensaje de alerta es incorrecto, ¡revise e intente de nuevo!'
|
||||
ErrAlertPush: 'Error al enviar la alerta, ¡revise e intente de nuevo!'
|
||||
ErrAlertSave: 'Error al guardar la alerta, ¡revise e intente de nuevo!'
|
||||
ErrAlertSync: 'Error en la sincronización de la alerta, ¡revise e intente de nuevo!'
|
||||
ErrAlertRemote: 'Error remoto de alerta, ¡revise e intente de nuevo!'
|
||||
CommonAlert: "Su 1Panel: {{ .msg }}, por favor inicie sesión en el panel para más detalles."
|
||||
NodeExceptionAlert: "Su 1Panel tiene {{ .num }} nodos anómalos, inicie sesión para más detalles."
|
||||
LicenseExceptionAlert: "Su 1Panel tiene {{ .num }} licencias anómalas, inicie sesión para más detalles."
|
||||
SSHAndPanelLoginAlert: "Su 1Panel detectó un inicio de sesión anómalo en el panel {{ .name }} desde {{ .ip }}, revise en el panel para más detalles."
|
||||
|
||||
#task - runtime
|
||||
ErrInstallExtension: "Ya hay una tarea de instalación en curso, espere a que termine"
|
||||
|
||||
# alert mail template
|
||||
PanelAlertTitle: "Notificación de alerta del panel"
|
||||
TestAlertTitle: "Correo de prueba - Verificar conectividad de correo"
|
||||
TestAlert: "Este es un correo de prueba para verificar que la configuración de envío de correos es correcta."
|
||||
LicenseExpirationAlert: "Su licencia de 1Panel expirará en {{ .day }} días. Inicie sesión para más detalles."
|
||||
CronJobFailedAlert: "Su tarea programada '{{ .name }}' ha fallado. Inicie sesión en el panel para más detalles."
|
||||
ClamAlert: "La tarea de escaneo de virus detectó {{ .num }} archivos infectados. Inicie sesión para detalles."
|
||||
WebSiteAlert: "Hay {{ .num }} sitios web en su 1Panel que expirarán en {{ .day }} días. Inicie sesión para más detalles."
|
||||
SSLAlert: "Hay {{ .num }} certificados SSL en su 1Panel que expirarán en {{ .day }} días. Inicie sesión para detalles."
|
||||
DiskUsedAlert: "El disco '{{ .name }}' de su 1Panel ha utilizado {{ .used }}. Inicie sesión para más detalles."
|
||||
ResourceAlert: "El uso promedio de {{ .name }} en {{ .time }} minutos es de {{ .used }}. Inicie sesión para más detalles."
|
||||
PanelVersionAlert: "Hay una nueva versión de 1Panel disponible. Inicie sesión para actualizar."
|
||||
PanelPwdExpirationAlert: "Su contraseña de 1Panel expirará en {{ .day }} días. Inicie sesión para más detalles."
|
||||
|
||||
#disk
|
||||
DeviceNotFound: "Dispositivo {{ .name }} no encontrado"
|
||||
DeviceIsMounted: "El dispositivo {{ .name }} está montado, desmóntelo primero"
|
||||
PartitionDiskErr: "Error al particionar, {{ .err }}"
|
||||
FormatDiskErr: "Error al formatear disco, {{ .err }}"
|
||||
MountDiskErr: "Error al montar disco, {{ .err }}"
|
||||
UnMountDiskErr: "Error al desmontar disco, {{ .err }}"
|
||||
XfsNotFound: "No se detectó el sistema de archivos xfs, por favor instale xfsprogs primero"
|
||||
|
|
@ -28,7 +28,7 @@ type Login struct {
|
|||
IgnoreCaptcha bool `json:"ignoreCaptcha"`
|
||||
Captcha string `json:"captcha"`
|
||||
CaptchaID string `json:"captchaID"`
|
||||
Language string `json:"language" validate:"required,oneof=zh en 'zh-Hant' ko ja ru ms 'pt-BR' tr"`
|
||||
Language string `json:"language" validate:"required,oneof=zh en 'zh-Hant' ko ja ru ms 'pt-BR' tr 'es-ES'"`
|
||||
}
|
||||
|
||||
type MFALogin struct {
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ func Init() {
|
|||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/es-ES.yaml")
|
||||
lang := GetLanguageFromDB()
|
||||
global.I18n = i18n.NewLocalizer(bundle, lang)
|
||||
}
|
||||
|
|
|
|||
233
core/i18n/lang/es-ES.yaml
Normal file
233
core/i18n/lang/es-ES.yaml
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
ErrInvalidParams: "Parámetros de solicitud no son válidos: {{ .detail }}"
|
||||
ErrTokenParse: "Error al generar el token: {{ .detail }}"
|
||||
ErrInitialPassword: "Contraseña inicial incorrecta"
|
||||
ErrInternalServer: "Error interno del servidor: {{ .detail }}"
|
||||
ErrRecordExist: "El registro ya existe"
|
||||
ErrRecordNotFound: "Registro no encontrado"
|
||||
ErrStructTransform: "Error en la conversión de tipo: {{ .detail }}"
|
||||
ErrNotLogin: "Usuario no ha iniciado sesión: {{ .detail }}"
|
||||
ErrPasswordExpired: "La contraseña actual ha expirado: {{ .detail }}"
|
||||
ErrNotSupportType: "El tipo actual no es compatible: {{ .detail }}"
|
||||
ErrProxy: "Error en la solicitud, por favor revise el estado de este nodo: {{ .detail }}"
|
||||
ErrApiConfigStatusInvalid: "Acceso a la API prohibido: {{ .detail }}"
|
||||
ErrApiConfigKeyInvalid: "Error de clave API: {{ .detail }}"
|
||||
ErrApiConfigIPInvalid: "La IP de la solicitud API no está en la lista blanca: {{ .detail }}"
|
||||
ErrApiConfigDisable: "Esta interfaz prohíbe llamadas a la API: {{ .detail }}"
|
||||
ErrApiConfigKeyTimeInvalid: "Error de marca de tiempo de API: {{ .detail }}"
|
||||
|
||||
# request
|
||||
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 }}"
|
||||
|
||||
# common
|
||||
ErrDemoEnvironment: "Servidor de demostración, ¡esta operación está prohibida!"
|
||||
ErrCmdTimeout: "¡Tiempo de espera al ejecutar el comando!"
|
||||
ErrEntrance: "Error en la información de entrada de seguridad, ¡por favor revise e intente de nuevo!"
|
||||
ErrGroupIsDefault: "Grupo predeterminado, no se puede eliminar"
|
||||
ErrGroupIsInUse: "El grupo está en uso y no se puede eliminar."
|
||||
ErrLocalDelete: "¡No se puede eliminar el nodo local!"
|
||||
ErrPortInUsed: "¡El puerto {{ .name }} ya está en uso!"
|
||||
ErrInternalServerKey: "Error interno del servidor:"
|
||||
|
||||
# app
|
||||
CustomAppStoreFileValid: "El paquete de la tienda de aplicaciones debe tener formato .tar.gz"
|
||||
ErrFileNotFound: "El archivo {{ .name }} no existe"
|
||||
|
||||
# backup
|
||||
ErrBackupInUsed: "Esta cuenta de respaldo se utiliza en tareas programadas y no se puede eliminar"
|
||||
ErrBackupCheck: "Fallo en la prueba de conexión de la cuenta de respaldo {{ .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."
|
||||
|
||||
#license
|
||||
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 es para la edición profesional, importe la licencia en Panel > Ajustes > Licencia"
|
||||
ErrXpackExceptional: "Esta sección es para la edición profesional, sincronice el estado de la licencia en Panel > Ajustes > Licencia"
|
||||
ErrXpackOutOfDate: "La licencia actual ha expirado, importe nuevamente la licencia en Panel > Ajustes > Licencia"
|
||||
ErrXpackLost: "La licencia ha alcanzado el número máximo de reintentos, vaya a [Ajustes del Panel] [Licencia] y haga clic en el botón de sincronización manualmente para asegurar el funcionamiento correcto de las funciones profesionales"
|
||||
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 en la versión comunitaria, ¡vaya a www.lxware.cn/1panel para comprar y reintentar!"
|
||||
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: "Se detectaron nodos de la Edición Comunitaria para esta licencia. ¡Desvincule en [Panel > Ajustes > Licencia] y vuelva a intentarlo!"
|
||||
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. ¡Ejecute manualmente el comando '1pctl restore' para revertir!"
|
||||
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."
|
||||
|
||||
# alert
|
||||
ErrAlertSync: "Error al sincronizar la información de alertas, ¡verifique e intente de nuevo!"
|
||||
|
||||
# task
|
||||
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'
|
||||
TaskBackup: "Respaldar"
|
||||
SuccessStatus: "{{ .name }} correcta"
|
||||
FailedStatus: "{{ .name }} fallida {{ .err }}"
|
||||
Start: "Iniciar"
|
||||
SubTask: "Subtarea"
|
||||
Skip: "Omitir errores y continuar..."
|
||||
|
||||
#script
|
||||
ScriptLibrary: "Biblioteca de scripts"
|
||||
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..."
|
||||
|
||||
Node: "Nodo"
|
||||
SyncNode: "Sincronizar datos del nodo"
|
||||
LocalName: "El nombre 'local' solo se utiliza para la identificación local del sistema"
|
||||
SyncPackageData: "Sincronizar datos del paquete [{{ .detail }}]"
|
||||
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"
|
||||
|
||||
#upgrade node
|
||||
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"
|
||||
|
||||
#add node
|
||||
MasterData: "Datos del nodo principal"
|
||||
LoadSftpClient: "Cargar cliente SFTP"
|
||||
PackageMasterData: "Generar paquete de respaldo del nodo principal"
|
||||
UploadBackup: "Subir datos de respaldo"
|
||||
MvBackup: "Mover datos al directorio de respaldos"
|
||||
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."
|
||||
|
||||
#cmd
|
||||
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 }}"
|
||||
SudoHelper: "Por favor use {{ .cmd }} o cambie al usuario root"
|
||||
ListenIPCommands: "Cambiar ip de escucha"
|
||||
ListenIPv4: "Escuchar en IPv4"
|
||||
ListenIPv6: "Escuchar en IPv6"
|
||||
ListenChangeSuccessful: "¡Cambio exitoso! Ahora escuchando en {{ .value }}"
|
||||
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"
|
||||
RestoreCommands: "Revertir servicio y datos de 1Panel"
|
||||
RestoreNoSuchFile: "No hay archivos disponibles para revertir"
|
||||
RestoreStep1: "(1/5) Iniciando reversión del servicio y datos de 1Panel desde el directorio {{ .name }}..."
|
||||
RestoreStep2: "(2/5) Reversión de binarios de 1Panel finalizada con éxito"
|
||||
RestoreStep3: "(3/5) Reversión de scripts de 1Panel finalizada con éxito"
|
||||
RestoreStep4: "(4/5) Reversión de servicio de 1Panel finalizada con éxito"
|
||||
RestoreStep5: "(5/5) Reversión de datos de 1Panel finalizada con éxito"
|
||||
RestoreSuccessful: "¡Reversión finalizada con éxito! Reiniciando el servicio, espere..."
|
||||
UpdateCommands: "Actualizar información del panel"
|
||||
UpdateUser: "Actualizar usuario del panel"
|
||||
UpdatePassword: "Actualizar contraseña del panel"
|
||||
UpdatePort: "Actualizar puerto del panel"
|
||||
UpdateUserNull: "Error: ¡el usuario del panel está vacío!"
|
||||
UpdateUserBlank: "Error: ¡el usuario del panel contiene espacios!"
|
||||
UpdateUserFormat: "Error: ¡formato de usuario del panel inválido! Solo admite inglés, chino, números y _, longitud 3-30"
|
||||
UpdateUserErr: "Error: Fallo al actualizar usuario del panel, {{ .err }}"
|
||||
UpdateSuccessful: "¡Actualización finalizada con éxito!"
|
||||
UpdateUserResult: "Usuario del panel: {{ .name }}"
|
||||
UpdatePasswordRead: "Error: Fallo al leer información de la contraseña del panel, {{ .err }}"
|
||||
UpdatePasswordNull: "Error: ¡la contraseña del panel está vacía!"
|
||||
UpdateUPasswordBlank: "Error: ¡la contraseña del panel contiene espacios!"
|
||||
UpdatePasswordFormat: "Error: ¡La contraseña solo admite letras, números y los caracteres especiales !@#$%*_,.?, longitud 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 panel, {{ .err }}"
|
||||
UpdatePasswordSame: "Error: Las dos contraseñas no coinciden, ¡verifique e intente de nuevo!"
|
||||
UpdatePasswordResult: "Contraseña del panel: {{ .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."
|
||||
UserInfo: "Obtener información del panel"
|
||||
UserInfoAddr: "Dirección del panel: "
|
||||
UserInfoPassHelp: "Consejo: para cambiar la contraseña, ejecute el comando: "
|
||||
DBConnErr: "Error: Fallo al inicializar la conexión a la base de datos, {{ .err }}"
|
||||
SystemVersion: "versión: "
|
||||
SystemMode: "modo: "
|
||||
|
||||
#mobile app
|
||||
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.'
|
||||
|
||||
#cluster
|
||||
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."
|
||||
|
||||
#ssl
|
||||
ErrReqFailed: "{{.name}} petición fallida: {{ .err }}"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<p align="center"><a href="https://1panel.pro"><img src="https://resource.1panel.pro/img/1panel-logo.png" alt="1Panel" width="300" /></a></p>
|
||||
<p align="center"><b>Herramienta de gestión de servidores Linux basada en la web mejor valorada</b></p>
|
||||
<p align="center"><b>La herramienta de gestión más valorada para administrar servidores Linux.</b></p>
|
||||
<p align="center">
|
||||
<a href="https://trendshift.io/repositories/2462" target="_blank"><img src="https://trendshift.io/api/badge/repositories/2462" alt="1Panel-dev%2F1Panel | Trendshift" style="width: 180px; height: auto;" /></a>
|
||||
<a href="https://www.producthunt.com/posts/1panel?embed=true&utm_source=badge-featured&utm_medium=badge&utm_souce=badge-1panel" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=639696&theme=light" alt="1Panel - Top-Rated web-based Linux server management tool | Product Hunt" style="width: 180px; height: auto;" /></a>
|
||||
|
|
@ -32,9 +32,9 @@
|
|||
|
||||
------------------------------
|
||||
|
||||
1Panel es un panel de control moderno y de código abierto basado en la web para la gestión de servidores Linux.
|
||||
1Panel es un panel de control moderno y de código abierto basado en web para la gestión de servidores Linux.
|
||||
|
||||
- **Gestión eficiente**: los usuarios pueden gestionar fácilmente servidores Linux a través de una interfaz web, como monitoreo de hosts, gestión de archivos, gestión de bases de datos, gestión de contenedores, entre otros;
|
||||
- **Gestión eficiente**: los usuarios pueden gestionar fácilmente servidores Linux a través de una interfaz web, como monitorización de hosts, gestión de archivos, gestión de bases de datos, gestión de contenedores, entre otros;
|
||||
- **Creación rápida de sitios web**: integración profunda con el software de creación de sitios web de código abierto WordPress y Halo, operaciones como vinculación de dominios y configuración de certificados SSL se realizan con un solo clic;
|
||||
- **Tienda de aplicaciones**: selección de diversas herramientas y software de código abierto de alta calidad, ayudando a los usuarios a instalar y actualizar fácilmente;
|
||||
- **Seguro y confiable**: basado en la gestión de contenedores y el despliegue de aplicaciones, se logra la mínima exposición a vulnerabilidades, al tiempo que se ofrecen funciones como protección contra virus, cortafuegos y auditoría de registros;
|
||||
|
|
@ -42,13 +42,13 @@
|
|||
|
||||
## Inicio Rápido
|
||||
|
||||
Ejecute el script a continuación y siga las indicaciones para instalar 1Panel:
|
||||
Ejecute el siguiente script y siga las indicaciones para instalar 1Panel:
|
||||
|
||||
```bash
|
||||
curl -sSL https://resource.1panel.pro/quick_start.sh -o quick_start.sh && bash quick_start.sh
|
||||
```
|
||||
|
||||
Por favor, consulte nuestra [dokumentasi](https://docs.1panel.pro/quick_start/) para más detalles.
|
||||
Por favor, consulte nuestra [documentación](https://docs.1panel.pro/quick_start/) para más detalles.
|
||||
|
||||
## Captura de Pantalla
|
||||
|
||||
|
|
@ -16,6 +16,7 @@ import ptBR from 'element-plus/es/locale/lang/pt-br';
|
|||
import ru from 'element-plus/es/locale/lang/ru';
|
||||
import ko from 'element-plus/es/locale/lang/ko';
|
||||
import tr from 'element-plus/es/locale/lang/tr';
|
||||
import esES from 'element-plus/es/locale/lang/es-es';
|
||||
import { useTheme } from '@/global/use-theme';
|
||||
useTheme();
|
||||
|
||||
|
|
@ -34,6 +35,7 @@ const i18nLocale = computed(() => {
|
|||
if (globalStore.language === 'pt-br') return ptBR;
|
||||
if (globalStore.language === 'ko') return ko;
|
||||
if (globalStore.language === 'tr') return tr;
|
||||
if (globalStore.language === 'es-es') return esES;
|
||||
return zhCn;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ export namespace App {
|
|||
ru: string;
|
||||
ko: string;
|
||||
tr: string;
|
||||
'es-es': string;
|
||||
}
|
||||
|
||||
export interface AppDTO extends App {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import ru from './modules/ru';
|
|||
import ms from './modules/ms';
|
||||
import ko from './modules/ko';
|
||||
import tr from './modules/tr';
|
||||
import esES from './modules/es-es';
|
||||
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
|
|
@ -25,6 +26,7 @@ const i18n = createI18n({
|
|||
ms,
|
||||
ko,
|
||||
tr,
|
||||
'es-ES': esES,
|
||||
},
|
||||
warnHtmlMessage: false,
|
||||
});
|
||||
|
|
|
|||
3792
frontend/src/lang/modules/es-es.ts
Normal file
3792
frontend/src/lang/modules/es-es.ts
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue