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"`
|
Zh string `json:"zh"`
|
||||||
Ko string `json:"ko"`
|
Ko string `json:"ko"`
|
||||||
Tr string `json:"tr"`
|
Tr string `json:"tr"`
|
||||||
|
Es string `json:"es-es" yaml:"es-es"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AppForm struct {
|
type AppForm struct {
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,7 @@ func Init() {
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
||||||
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/es-ES.yaml")
|
||||||
lang := GetLanguageFromDB()
|
lang := GetLanguageFromDB()
|
||||||
global.I18n = i18n.NewLocalizer(bundle, lang)
|
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"`
|
IgnoreCaptcha bool `json:"ignoreCaptcha"`
|
||||||
Captcha string `json:"captcha"`
|
Captcha string `json:"captcha"`
|
||||||
CaptchaID string `json:"captchaID"`
|
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 {
|
type MFALogin struct {
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,7 @@ func Init() {
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
|
||||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/tr.yaml")
|
||||||
|
_, _ = bundle.LoadMessageFileFS(fs, "lang/es-ES.yaml")
|
||||||
lang := GetLanguageFromDB()
|
lang := GetLanguageFromDB()
|
||||||
global.I18n = i18n.NewLocalizer(bundle, lang)
|
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"><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">
|
<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://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>
|
<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;
|
- **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;
|
- **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;
|
- **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
|
## 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
|
```bash
|
||||||
curl -sSL https://resource.1panel.pro/quick_start.sh -o quick_start.sh && bash quick_start.sh
|
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
|
## 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 ru from 'element-plus/es/locale/lang/ru';
|
||||||
import ko from 'element-plus/es/locale/lang/ko';
|
import ko from 'element-plus/es/locale/lang/ko';
|
||||||
import tr from 'element-plus/es/locale/lang/tr';
|
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';
|
import { useTheme } from '@/global/use-theme';
|
||||||
useTheme();
|
useTheme();
|
||||||
|
|
||||||
|
|
@ -34,6 +35,7 @@ const i18nLocale = computed(() => {
|
||||||
if (globalStore.language === 'pt-br') return ptBR;
|
if (globalStore.language === 'pt-br') return ptBR;
|
||||||
if (globalStore.language === 'ko') return ko;
|
if (globalStore.language === 'ko') return ko;
|
||||||
if (globalStore.language === 'tr') return tr;
|
if (globalStore.language === 'tr') return tr;
|
||||||
|
if (globalStore.language === 'es-es') return esES;
|
||||||
return zhCn;
|
return zhCn;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ export namespace App {
|
||||||
ru: string;
|
ru: string;
|
||||||
ko: string;
|
ko: string;
|
||||||
tr: string;
|
tr: string;
|
||||||
|
'es-es': string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AppDTO extends App {
|
export interface AppDTO extends App {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import ru from './modules/ru';
|
||||||
import ms from './modules/ms';
|
import ms from './modules/ms';
|
||||||
import ko from './modules/ko';
|
import ko from './modules/ko';
|
||||||
import tr from './modules/tr';
|
import tr from './modules/tr';
|
||||||
|
import esES from './modules/es-es';
|
||||||
|
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
legacy: false,
|
legacy: false,
|
||||||
|
|
@ -25,6 +26,7 @@ const i18n = createI18n({
|
||||||
ms,
|
ms,
|
||||||
ko,
|
ko,
|
||||||
tr,
|
tr,
|
||||||
|
'es-ES': esES,
|
||||||
},
|
},
|
||||||
warnHtmlMessage: false,
|
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