diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 03a8be14cc..08b2f77310 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -8,7 +8,7 @@ const allLocales = [ ["en", "en-US"], - ["fa", "fa-IR"], + ["es", "es-ES"], ]; const ignoreUnused = [ diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 46467d01fc..0005794b38 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,15 +1,21 @@ import { createIntl, createIntlCache } from "react-intl"; import langEn from "./lang/en.json"; +import langEs from "./lang/es.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script -const localeOptions = [["en", "en-US"]]; +const localeOptions = [ + ["en", "en-US"], + ["es", "es-ES"] +]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { + case "es": + return Object.assign({}, langList, langEs); default: return Object.assign({}, langList, langEn); } @@ -17,6 +23,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { + case "es-ES": + case "es": + return "ES"; default: return "EN"; } diff --git a/frontend/src/locale/lang/es.json b/frontend/src/locale/lang/es.json new file mode 100644 index 0000000000..5a71d3c5a0 --- /dev/null +++ b/frontend/src/locale/lang/es.json @@ -0,0 +1,215 @@ +{ + "access-list": "Lista de Acceso", + "access-list.access-count": "{count} {count, plural, one {Regla} other {Reglas}}", + "access-list.auth-count": "{count} {count, plural, one {Usuario} other {Usuarios}}", + "access-list.help-rules-last": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final", + "access-list.help.rules-order": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas.", + "access-list.pass-auth": "Pasar Autenticación al Upstream", + "access-list.public": "Accesible Públicamente", + "access-list.public.subtitle": "No se requiere autenticación básica", + "access-list.satisfy-any": "Satisfacer Cualquiera", + "access-list.subtitle": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}", + "access-lists": "Listas de Acceso", + "action.add": "Añadir", + "action.add-location": "Añadir Ubicación", + "action.close": "Cerrar", + "action.delete": "Eliminar", + "action.disable": "Deshabilitar", + "action.download": "Descargar", + "action.edit": "Editar", + "action.enable": "Habilitar", + "action.permissions": "Permisos", + "action.renew": "Renovar", + "action.view-details": "Ver Detalles", + "auditlogs": "Registros de Auditoría", + "cancel": "Cancelar", + "certificate": "Certificado", + "certificate.custom-certificate": "Certificado", + "certificate.custom-certificate-key": "Clave del Certificado", + "certificate.custom-intermediate": "Certificado Intermedio", + "certificate.in-use": "En Uso", + "certificate.none.subtitle": "Sin certificado asignado", + "certificate.none.subtitle.for-http": "Este host no usará HTTPS", + "certificate.none.title": "Ninguno", + "certificate.not-in-use": "Sin Usar", + "certificate.renew": "Renovar Certificado", + "certificates": "Certificados", + "certificates.custom": "Certificado Personalizado", + "certificates.custom.warning": "No se admiten archivos de claves protegidos con contraseña.", + "certificates.dns.credentials": "Contenido del Archivo de Credenciales", + "certificates.dns.credentials-note": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor", + "certificates.dns.credentials-warning": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!", + "certificates.dns.propagation-seconds": "Segundos de Propagación", + "certificates.dns.propagation-seconds-note": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS.", + "certificates.dns.provider": "Proveedor DNS", + "certificates.dns.warning": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos.", + "certificates.http.reachability-404": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.reachability-failed-to-check": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com.", + "certificates.http.reachability-not-resolved": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router.", + "certificates.http.reachability-ok": "Tu servidor es accesible y debería ser posible crear certificados.", + "certificates.http.reachability-other": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.reachability-wrong-data": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.test-results": "Resultados de la Prueba", + "certificates.http.warning": "Estos dominios ya deben estar configurados para apuntar a esta instalación.", + "certificates.request.subtitle": "con Let's Encrypt", + "certificates.request.title": "Solicitar un nuevo Certificado", + "column.access": "Acceso", + "column.authorization": "Autorización", + "column.authorizations": "Autorizaciones", + "column.custom-locations": "Ubicaciones Personalizadas", + "column.destination": "Destino", + "column.details": "Detalles", + "column.email": "Correo Electrónico", + "column.event": "Evento", + "column.expires": "Expira", + "column.http-code": "Acceso", + "column.incoming-port": "Puerto de Entrada", + "column.name": "Nombre", + "column.protocol": "Protocolo", + "column.provider": "Proveedor", + "column.roles": "Roles", + "column.rules": "Reglas", + "column.satisfy": "Satisfacer", + "column.satisfy-all": "Todo", + "column.satisfy-any": "Cualquiera", + "column.scheme": "Esquema", + "column.source": "Origen", + "column.ssl": "SSL", + "column.status": "Estado", + "created-on": "Creado: {date}", + "dashboard": "Panel de Control", + "dead-host": "Host 404", + "dead-hosts": "Hosts 404", + "dead-hosts.count": "{count} {count, plural, one {Host 404} other {Hosts 404}}", + "disabled": "Deshabilitado", + "domain-names": "Nombres de Dominio", + "domain-names.max": "{count} nombres de dominio como máximo", + "domain-names.placeholder": "Comienza a escribir para añadir dominio...", + "domain-names.wildcards-not-permitted": "No se permiten comodines para este tipo", + "domain-names.wildcards-not-supported": "No se admiten comodines para esta CA", + "domains.force-ssl": "Forzar SSL", + "domains.hsts-enabled": "HSTS Habilitado", + "domains.hsts-subdomains": "HSTS en Subdominios", + "domains.http2-support": "Soporte HTTP/2", + "domains.use-dns": "Usar Desafío DNS", + "email-address": "Dirección de correo electrónico", + "empty-search": "No se encontraron resultados", + "empty-subtitle": "¿Por qué no creas uno?", + "enabled": "Habilitado", + "error.access.at-least-one": "Se requiere al menos una Autorización o una Regla de Acceso", + "error.access.duplicate-usernames": "Los nombres de usuario de autorización deben ser únicos", + "error.invalid-auth": "Correo electrónico o contraseña no válidos", + "error.invalid-domain": "Dominio no válido: {domain}", + "error.invalid-email": "Dirección de correo electrónico no válida", + "error.max-character-length": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}", + "error.max-domains": "Demasiados dominios, el máximo es {max}", + "error.maximum": "El máximo es {max}", + "error.min-character-length": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}", + "error.minimum": "El mínimo es {min}", + "error.passwords-must-match": "Las contraseñas deben coincidir", + "error.required": "Este campo es obligatorio", + "expires.on": "Expira: {date}", + "footer.github-fork": "Bifúrcame en Github", + "host.flags.block-exploits": "Bloquear Exploits Comunes", + "host.flags.cache-assets": "Cachear Recursos", + "host.flags.preserve-path": "Preservar Ruta", + "host.flags.protocols": "Protocolos", + "host.flags.websockets-upgrade": "Soporte de Websockets", + "host.forward-port": "Puerto de Reenvío", + "host.forward-scheme": "Esquema", + "hosts": "Hosts", + "http-only": "Solo HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt vía DNS", + "lets-encrypt-via-http": "Let's Encrypt vía HTTP", + "loading": "Cargando…", + "login.title": "Inicia sesión en tu cuenta", + "nginx-config.label": "Configuración Personalizada de Nginx", + "nginx-config.placeholder": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!", + "no-permission-error": "No tienes acceso para ver esto.", + "notfound.action": "Llévame al inicio", + "notfound.content": "Lo sentimos, pero la página que buscas no fue encontrada", + "notfound.title": "Ups… Has encontrado una página de error", + "notification.error": "Error", + "notification.object-deleted": "{object} ha sido eliminado", + "notification.object-disabled": "{object} ha sido deshabilitado", + "notification.object-enabled": "{object} ha sido habilitado", + "notification.object-renewed": "{object} ha sido renovado", + "notification.object-saved": "{object} ha sido guardado", + "notification.success": "Éxito", + "object.actions-title": "{object} #{id}", + "object.add": "Añadir {object}", + "object.delete": "Eliminar {object}", + "object.delete.content": "¿Estás seguro de que quieres eliminar este {object}?", + "object.edit": "Editar {object}", + "object.empty": "No hay {objects}", + "object.event.created": "{object} Creado", + "object.event.deleted": "{object} Eliminado", + "object.event.disabled": "{object} Deshabilitado", + "object.event.enabled": "{object} Habilitado", + "object.event.renewed": "{object} Renovado", + "object.event.updated": "{object} Actualizado", + "offline": "Desconectado", + "online": "Conectado", + "options": "Opciones", + "password": "Contraseña", + "password.generate": "Generar contraseña aleatoria", + "password.hide": "Ocultar Contraseña", + "password.show": "Mostrar Contraseña", + "permissions.hidden": "Oculto", + "permissions.manage": "Gestionar", + "permissions.view": "Solo Ver", + "permissions.visibility.all": "Todos los Elementos", + "permissions.visibility.title": "Visibilidad de Elementos", + "permissions.visibility.user": "Solo Elementos Creados", + "proxy-host": "Host Proxy", + "proxy-host.forward-host": "Nombre de Host / IP de Reenvío", + "proxy-hosts": "Hosts Proxy", + "proxy-hosts.count": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}", + "public": "Público", + "redirection-host": "Host de Redirección", + "redirection-host.forward-domain": "Dominio de Reenvío", + "redirection-hosts": "Hosts de Redirección", + "redirection-hosts.count": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}", + "role.admin": "Administrador", + "role.standard-user": "Usuario Estándar", + "save": "Guardar", + "setting": "Configuración", + "settings": "Configuración", + "settings.default-site": "Sitio Predeterminado", + "settings.default-site.404": "Página 404", + "settings.default-site.444": "Sin Respuesta (444)", + "settings.default-site.congratulations": "Página de Felicitaciones", + "settings.default-site.description": "Qué mostrar cuando Nginx recibe un Host desconocido", + "settings.default-site.html": "HTML Personalizado", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Redirigir", + "setup.preamble": "Comienza creando tu cuenta de administrador.", + "setup.title": "¡Bienvenido!", + "sign-in": "Iniciar Sesión", + "ssl-certificate": "Certificado SSL", + "stream": "Stream", + "stream.forward-host": "Host de Reenvío", + "stream.incoming-port": "Puerto de Entrada", + "streams": "Streams", + "streams.count": "{count} {count, plural, one {Stream} other {Streams}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Probar", + "user": "Usuario", + "user.change-password": "Cambiar Contraseña", + "user.confirm-password": "Confirmar Contraseña", + "user.current-password": "Contraseña Actual", + "user.edit-profile": "Editar Perfil", + "user.full-name": "Nombre Completo", + "user.login-as": "Iniciar sesión como {name}", + "user.logout": "Cerrar Sesión", + "user.new-password": "Nueva Contraseña", + "user.nickname": "Apodo", + "user.set-password": "Establecer Contraseña", + "user.set-permissions": "Establecer Permisos para {name}", + "user.switch-dark": "Cambiar a modo Oscuro", + "user.switch-light": "Cambiar a modo Claro", + "username": "Nombre de Usuario", + "users": "Usuarios" +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 4d9de4e50c..864cf2e704 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,3 +1,4 @@ { - "locale-en-US": "English" -} \ No newline at end of file + "locale-en-US": "English", + "locale-es-ES": "Español" +} diff --git a/frontend/src/locale/src/HelpDoc/es/AccessLists.md b/frontend/src/locale/src/HelpDoc/es/AccessLists.md new file mode 100644 index 0000000000..f0a089f65e --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/AccessLists.md @@ -0,0 +1,7 @@ +## ¿Qué es una Lista de Acceso? + +Las Listas de Acceso proporcionan una lista negra o blanca de direcciones IP de cliente específicas junto con autenticación para los Hosts Proxy a través de Autenticación HTTP Básica. + +Puede configurar múltiples reglas de cliente, nombres de usuario y contraseñas para una única Lista de Acceso y luego aplicarla a uno o más _Hosts Proxy_. + +Esto es más útil para servicios web reenviados que no tienen mecanismos de autenticación integrados o cuando desea protegerse de clientes desconocidos. diff --git a/frontend/src/locale/src/HelpDoc/es/Certificates.md b/frontend/src/locale/src/HelpDoc/es/Certificates.md new file mode 100644 index 0000000000..5907147ffc --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/Certificates.md @@ -0,0 +1,32 @@ +## Ayuda de Certificados + +### Certificado HTTP + +Un certificado validado por HTTP significa que los servidores de Let's Encrypt +intentarán acceder a tus dominios a través de HTTP (¡no HTTPS!) y, si tienen éxito, +emitirán tu certificado. + +Para este método, deberás tener un _Host Proxy_ creado para tu(s) dominio(s) que +sea accesible por HTTP y que apunte a esta instalación de Nginx. Después de que se +haya emitido un certificado, puedes modificar el _Host Proxy_ para que también use +este certificado para conexiones HTTPS. Sin embargo, el _Host Proxy_ seguirá +necesitando estar configurado para acceso HTTP para que el certificado se renueve. + +Este proceso _no_ admite dominios comodín. + +### Certificado DNS + +Un certificado validado por DNS requiere que uses un complemento de Proveedor de DNS. +Este Proveedor de DNS se usará para crear registros temporales en tu dominio y luego +Let's Encrypt consultará esos registros para asegurarse de que eres el propietario y, +si tiene éxito, emitirá tu certificado. + +No necesitas tener un _Host Proxy_ creado antes de solicitar este tipo de certificado. +Tampoco necesitas tener tu _Host Proxy_ configurado para acceso HTTP. + +Este proceso _sí_ admite dominios comodín. + +### Certificado Personalizado + +Usa esta opción para cargar tu propio Certificado SSL, proporcionado por tu propia +Autoridad de Certificación. diff --git a/frontend/src/locale/src/HelpDoc/es/DeadHosts.md b/frontend/src/locale/src/HelpDoc/es/DeadHosts.md new file mode 100644 index 0000000000..bc7756842c --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/DeadHosts.md @@ -0,0 +1,10 @@ +## ¿Qué es un Host 404? + +Un Host 404 es simplemente una configuración de host que muestra una página 404. + +Esto puede ser útil cuando tu dominio está listado en los motores de búsqueda y deseas +proporcionar una página de error más agradable o específicamente para indicar a los indexadores de búsqueda que +las páginas del dominio ya no existen. + +Otro beneficio de tener este host es rastrear los registros de visitas a él y +ver los referentes. diff --git a/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md new file mode 100644 index 0000000000..57994b7cd9 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md @@ -0,0 +1,7 @@ +## ¿Qué es un Host Proxy? + +Un Host Proxy es el punto de entrada para un servicio web que deseas reenviar. + +Proporciona terminación SSL opcional para tu servicio que podría no tener soporte SSL integrado. + +Los Hosts Proxy son el uso más común del Nginx Proxy Manager. diff --git a/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md new file mode 100644 index 0000000000..7a05a3012e --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md @@ -0,0 +1,7 @@ +## ¿Qué es un Host de Redirección? + +Un Host de Redirección redirigirá las solicitudes del dominio entrante e impulsará al +visitante a otro dominio. + +La razón más común para usar este tipo de host es cuando tu sitio web cambia de +dominios pero aún tienes enlaces de motores de búsqueda o referencias apuntando al dominio anterior. diff --git a/frontend/src/locale/src/HelpDoc/es/Streams.md b/frontend/src/locale/src/HelpDoc/es/Streams.md new file mode 100644 index 0000000000..f085352f10 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/Streams.md @@ -0,0 +1,6 @@ +## ¿Qué es un Stream? + +Una característica relativamente nueva para Nginx, un Stream servirá para reenviar tráfico TCP/UDP +directamente a otra computadora en la red. + +Si estás ejecutando servidores de juegos, FTP o servidores SSH esto puede ser muy útil. diff --git a/frontend/src/locale/src/HelpDoc/es/index.ts b/frontend/src/locale/src/HelpDoc/es/index.ts new file mode 100644 index 0000000000..a9bb46ba7c --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/es.json b/frontend/src/locale/src/es.json new file mode 100644 index 0000000000..9f7213a739 --- /dev/null +++ b/frontend/src/locale/src/es.json @@ -0,0 +1,641 @@ +{ + "redirection-host.forward-domain": { + "defaultMessage": "Dominio de Reenvío" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}" + }, + "notification.success": { + "defaultMessage": "Éxito" + }, + "setup.preamble": { + "defaultMessage": "Comienza creando tu cuenta de administrador." + }, + "column.event": { + "defaultMessage": "Evento" + }, + "auditlogs": { + "defaultMessage": "Registros de Auditoría" + }, + "enabled": { + "defaultMessage": "Habilitado" + }, + "column.source": { + "defaultMessage": "Origen" + }, + "column.details": { + "defaultMessage": "Detalles" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.destination": { + "defaultMessage": "Destino" + }, + "settings.default-site.html": { + "defaultMessage": "HTML Personalizado" + }, + "proxy-host": { + "defaultMessage": "Host Proxy" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS." + }, + "settings.default-site.redirect": { + "defaultMessage": "Redirigir" + }, + "hosts": { + "defaultMessage": "Hosts" + }, + "users": { + "defaultMessage": "Usuarios" + }, + "permissions.visibility.all": { + "defaultMessage": "Todos los Elementos" + }, + "password.generate": { + "defaultMessage": "Generar contraseña aleatoria" + }, + "host.flags.preserve-path": { + "defaultMessage": "Preservar Ruta" + }, + "password.show": { + "defaultMessage": "Mostrar Contraseña" + }, + "permissions.visibility.title": { + "defaultMessage": "Visibilidad de Elementos" + }, + "http-only": { + "defaultMessage": "Solo HTTP" + }, + "empty-search": { + "defaultMessage": "No se encontraron resultados" + }, + "column.provider": { + "defaultMessage": "Proveedor" + }, + "user": { + "defaultMessage": "Usuario" + }, + "domain-names.placeholder": { + "defaultMessage": "Comienza a escribir para añadir dominio..." + }, + "certificates": { + "defaultMessage": "Certificados" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Soporte de Websockets" + }, + "dead-host": { + "defaultMessage": "Host 404" + }, + "column.email": { + "defaultMessage": "Correo Electrónico" + }, + "settings.default-site": { + "defaultMessage": "Sitio Predeterminado" + }, + "action.add-location": { + "defaultMessage": "Añadir Ubicación" + }, + "settings.default-site.404": { + "defaultMessage": "Página 404" + }, + "user.change-password": { + "defaultMessage": "Cambiar Contraseña" + }, + "settings": { + "defaultMessage": "Configuración" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certificado" + }, + "streams": { + "defaultMessage": "Streams" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}" + }, + "error.passwords-must-match": { + "defaultMessage": "Las contraseñas deben coincidir" + }, + "ssl-certificate": { + "defaultMessage": "Certificado SSL" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Este host no usará HTTPS" + }, + "user.confirm-password": { + "defaultMessage": "Confirmar Contraseña" + }, + "notfound.title": { + "defaultMessage": "Ups… Has encontrado una página de error" + }, + "object.edit": { + "defaultMessage": "Editar {object}" + }, + "error.max-domains": { + "defaultMessage": "Demasiados dominios, el máximo es {max}" + }, + "column.scheme": { + "defaultMessage": "Esquema" + }, + "permissions.hidden": { + "defaultMessage": "Oculto" + }, + "certificate.in-use": { + "defaultMessage": "En Uso" + }, + "column.satisfy": { + "defaultMessage": "Satisfacer" + }, + "column.protocol": { + "defaultMessage": "Protocolo" + }, + "action.add": { + "defaultMessage": "Añadir" + }, + "column.custom-locations": { + "defaultMessage": "Ubicaciones Personalizadas" + }, + "certificate.renew": { + "defaultMessage": "Renovar Certificado" + }, + "offline": { + "defaultMessage": "Desconectado" + }, + "permissions.visibility.user": { + "defaultMessage": "Solo Elementos Creados" + }, + "certificates.dns.credentials": { + "defaultMessage": "Contenido del Archivo de Credenciales" + }, + "proxy-hosts": { + "defaultMessage": "Hosts Proxy" + }, + "user.edit-profile": { + "defaultMessage": "Editar Perfil" + }, + "user.switch-dark": { + "defaultMessage": "Cambiar a modo Oscuro" + }, + "certificates.custom.warning": { + "defaultMessage": "No se admiten archivos de claves protegidos con contraseña." + }, + "access-list.help.rules-order": { + "defaultMessage": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas." + }, + "save": { + "defaultMessage": "Guardar" + }, + "certificates.http.reachability-404": { + "defaultMessage": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "settings.default-site.congratulations": { + "defaultMessage": "Página de Felicitaciones" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "user.current-password": { + "defaultMessage": "Contraseña Actual" + }, + "access-list": { + "defaultMessage": "Lista de Acceso" + }, + "column.access": { + "defaultMessage": "Acceso" + }, + "action.delete": { + "defaultMessage": "Eliminar" + }, + "certificates.custom": { + "defaultMessage": "Certificado Personalizado" + }, + "column.authorizations": { + "defaultMessage": "Autorizaciones" + }, + "host.flags.block-exploits": { + "defaultMessage": "Bloquear Exploits Comunes" + }, + "object.event.created": { + "defaultMessage": "{object} Creado" + }, + "options": { + "defaultMessage": "Opciones" + }, + "redirection-host": { + "defaultMessage": "Host de Redirección" + }, + "certificate.none.title": { + "defaultMessage": "Ninguno" + }, + "created-on": { + "defaultMessage": "Creado: {date}" + }, + "user.login-as": { + "defaultMessage": "Iniciar sesión como {name}" + }, + "certificates.request.subtitle": { + "defaultMessage": "con Let's Encrypt" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}" + }, + "host.forward-port": { + "defaultMessage": "Puerto de Reenvío" + }, + "notfound.content": { + "defaultMessage": "Lo sentimos, pero la página que buscas no fue encontrada" + }, + "access-list.public.subtitle": { + "defaultMessage": "No se requiere autenticación básica" + }, + "proxy-host.forward-host": { + "defaultMessage": "Nombre de Host / IP de Reenvío" + }, + "settings.default-site.444": { + "defaultMessage": "Sin Respuesta (444)" + }, + "settings.default-site.description": { + "defaultMessage": "Qué mostrar cuando Nginx recibe un Host desconocido" + }, + "column.expires": { + "defaultMessage": "Expira" + }, + "object.delete": { + "defaultMessage": "Eliminar {object}" + }, + "notification.object-deleted": { + "defaultMessage": "{object} ha sido eliminado" + }, + "cancel": { + "defaultMessage": "Cancelar" + }, + "user.set-password": { + "defaultMessage": "Establecer Contraseña" + }, + "nginx-config.placeholder": { + "defaultMessage": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {Usuario} other {Usuarios}}" + }, + "password.hide": { + "defaultMessage": "Ocultar Contraseña" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "notification.object-renewed": { + "defaultMessage": "{object} ha sido renovado" + }, + "object.event.deleted": { + "defaultMessage": "{object} Eliminado" + }, + "error.invalid-auth": { + "defaultMessage": "Correo electrónico o contraseña no válidos" + }, + "domains.force-ssl": { + "defaultMessage": "Forzar SSL" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS en Subdominios" + }, + "host.flags.protocols": { + "defaultMessage": "Protocolos" + }, + "action.download": { + "defaultMessage": "Descargar" + }, + "certificates.dns.warning": { + "defaultMessage": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos." + }, + "certificates.request.title": { + "defaultMessage": "Solicitar un nuevo Certificado" + }, + "password": { + "defaultMessage": "Contraseña" + }, + "notification.object-saved": { + "defaultMessage": "{object} ha sido guardado" + }, + "setting": { + "defaultMessage": "Configuración" + }, + "object.empty": { + "defaultMessage": "No hay {objects}" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt vía HTTP" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS Habilitado" + }, + "error.maximum": { + "defaultMessage": "El máximo es {max}" + }, + "user.switch-light": { + "defaultMessage": "Cambiar a modo Claro" + }, + "action.edit": { + "defaultMessage": "Editar" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}" + }, + "action.enable": { + "defaultMessage": "Habilitar" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Los nombres de usuario de autorización deben ser únicos" + }, + "notfound.action": { + "defaultMessage": "Llévame al inicio" + }, + "notification.object-disabled": { + "defaultMessage": "{object} ha sido deshabilitado" + }, + "user.logout": { + "defaultMessage": "Cerrar Sesión" + }, + "stream.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Tu servidor es accesible y debería ser posible crear certificados." + }, + "access-list.help-rules-last": { + "defaultMessage": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final" + }, + "action.view-details": { + "defaultMessage": "Ver Detalles" + }, + "notification.object-enabled": { + "defaultMessage": "{object} ha sido habilitado" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "username": { + "defaultMessage": "Nombre de Usuario" + }, + "user.nickname": { + "defaultMessage": "Apodo" + }, + "column.name": { + "defaultMessage": "Nombre" + }, + "column.roles": { + "defaultMessage": "Roles" + }, + "footer.github-fork": { + "defaultMessage": "Bifúrcame en Github" + }, + "object.event.updated": { + "defaultMessage": "{object} Actualizado" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!" + }, + "access-list.satisfy-any": { + "defaultMessage": "Satisfacer Cualquiera" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Segundos de Propagación" + }, + "error.min-character-length": { + "defaultMessage": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}" + }, + "domain-names.max": { + "defaultMessage": "{count} nombres de dominio como máximo" + }, + "object.delete.content": { + "defaultMessage": "¿Estás seguro de que quieres eliminar este {object}?" + }, + "column.rules": { + "defaultMessage": "Reglas" + }, + "error.required": { + "defaultMessage": "Este campo es obligatorio" + }, + "certificate": { + "defaultMessage": "Certificado" + }, + "public": { + "defaultMessage": "Público" + }, + "domains.use-dns": { + "defaultMessage": "Usar Desafío DNS" + }, + "error.max-character-length": { + "defaultMessage": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}" + }, + "permissions.view": { + "defaultMessage": "Solo Ver" + }, + "expires.on": { + "defaultMessage": "Expira: {date}" + }, + "setup.title": { + "defaultMessage": "¡Bienvenido!" + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com." + }, + "certificates.http.warning": { + "defaultMessage": "Estos dominios ya deben estar configurados para apuntar a esta instalación." + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Clave del Certificado" + }, + "empty-subtitle": { + "defaultMessage": "¿Por qué no creas uno?" + }, + "dead-hosts": { + "defaultMessage": "Hosts 404" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "email-address": { + "defaultMessage": "Dirección de correo electrónico" + }, + "domain-names": { + "defaultMessage": "Nombres de Dominio" + }, + "user.full-name": { + "defaultMessage": "Nombre Completo" + }, + "column.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "column.http-code": { + "defaultMessage": "Acceso" + }, + "certificate.not-in-use": { + "defaultMessage": "Sin Usar" + }, + "action.disable": { + "defaultMessage": "Deshabilitar" + }, + "redirection-hosts": { + "defaultMessage": "Hosts de Redirección" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "role.admin": { + "defaultMessage": "Administrador" + }, + "nginx-config.label": { + "defaultMessage": "Configuración Personalizada de Nginx" + }, + "disabled": { + "defaultMessage": "Deshabilitado" + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "No se permiten comodines para este tipo" + }, + "online": { + "defaultMessage": "Conectado" + }, + "access-list.public": { + "defaultMessage": "Accesible Públicamente" + }, + "action.renew": { + "defaultMessage": "Renovar" + }, + "object.add": { + "defaultMessage": "Añadir {object}" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor" + }, + "error.invalid-email": { + "defaultMessage": "Dirección de correo electrónico no válida" + }, + "notification.error": { + "defaultMessage": "Error" + }, + "error.invalid-domain": { + "defaultMessage": "Dominio no válido: {domain}" + }, + "user.set-permissions": { + "defaultMessage": "Establecer Permisos para {name}" + }, + "certificate.none.subtitle": { + "defaultMessage": "Sin certificado asignado" + }, + "object.event.enabled": { + "defaultMessage": "{object} Habilitado" + }, + "login.title": { + "defaultMessage": "Inicia sesión en tu cuenta" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Regla} other {Reglas}}" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Certificado Intermedio" + }, + "error.access.at-least-one": { + "defaultMessage": "Se requiere al menos una Autorización o una Regla de Acceso" + }, + "stream": { + "defaultMessage": "Stream" + }, + "action.close": { + "defaultMessage": "Cerrar" + }, + "certificates.http.test-results": { + "defaultMessage": "Resultados de la Prueba" + }, + "certificates.dns.provider": { + "defaultMessage": "Proveedor DNS" + }, + "object.event.renewed": { + "defaultMessage": "{object} Renovado" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt vía DNS" + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router." + }, + "no-permission-error": { + "defaultMessage": "No tienes acceso para ver esto." + }, + "column.satisfy-all": { + "defaultMessage": "Todo" + }, + "host.forward-scheme": { + "defaultMessage": "Esquema" + }, + "domains.http2-support": { + "defaultMessage": "Soporte HTTP/2" + }, + "action.permissions": { + "defaultMessage": "Permisos" + }, + "loading": { + "defaultMessage": "Cargando…" + }, + "object.event.disabled": { + "defaultMessage": "{object} Deshabilitado" + }, + "dashboard": { + "defaultMessage": "Panel de Control" + }, + "sign-in": { + "defaultMessage": "Iniciar Sesión" + }, + "permissions.manage": { + "defaultMessage": "Gestionar" + }, + "user.new-password": { + "defaultMessage": "Nueva Contraseña" + }, + "stream.forward-host": { + "defaultMessage": "Host de Reenvío" + }, + "test": { + "defaultMessage": "Probar" + }, + "column.authorization": { + "defaultMessage": "Autorización" + }, + "column.satisfy-any": { + "defaultMessage": "Cualquiera" + }, + "host.flags.cache-assets": { + "defaultMessage": "Cachear Recursos" + }, + "access-lists": { + "defaultMessage": "Listas de Acceso" + }, + "role.standard-user": { + "defaultMessage": "Usuario Estándar" + }, + "certificates.http.reachability-other": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "column.status": { + "defaultMessage": "Estado" + }, + "error.minimum": { + "defaultMessage": "El mínimo es {min}" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "No se admiten comodines para esta CA" + }, + "access-list.pass-auth": { + "defaultMessage": "Pasar Autenticación al Upstream" + } +} diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 3f3b2697b2..f58eb7946d 100644 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -1,5 +1,8 @@ { "locale-en-US": { "defaultMessage": "English" - } + }, + "locale-es-ES": { + "defaultMessage": "Español" + } }