Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions agent/app/dto/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions agent/i18n/i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
490 changes: 490 additions & 0 deletions agent/i18n/lang/es-ES.yaml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion core/app/dto/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions core/i18n/i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
233 changes: 233 additions & 0 deletions core/i18n/lang/es-ES.yaml
Original file line number Diff line number Diff line change
@@ -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 }}"
10 changes: 5 additions & 5 deletions docs/README.es.md → docs/README.es-es.md
Original file line number Diff line number Diff line change
@@ -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&#0045;Rated&#0032;web&#0045;based&#0032;Linux&#0032;server&#0032;management&#0032;tool | Product Hunt" style="width: 180px; height: auto;" /></a>
Expand Down Expand Up @@ -32,23 +32,23 @@

------------------------------

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;
- **Copia de seguridad con un clic**: soporta copias de seguridad y restauraciones con un clic, los usuarios pueden respaldar datos en diversos medios de almacenamiento en la nube, asegurando que nunca se pierdan.

## 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

Expand Down
Loading