Skip to content
Open
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
2 changes: 1 addition & 1 deletion frontend/check-locales.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

const allLocales = [
["en", "en-US"],
["fa", "fa-IR"],
["es", "es-ES"],
];

const ignoreUnused = [
Expand Down
11 changes: 10 additions & 1 deletion frontend/src/locale/IntlProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
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);
}
};

const getFlagCodeForLocale = (locale?: string) => {
switch (locale) {
case "es-ES":
case "es":
return "ES";
default:
return "EN";
}
Expand Down
215 changes: 215 additions & 0 deletions frontend/src/locale/lang/es.json
Original file line number Diff line number Diff line change
@@ -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": "<!-- Introduce aquí tu contenido HTML personalizado -->",
"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"
}
5 changes: 3 additions & 2 deletions frontend/src/locale/lang/lang-list.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"locale-en-US": "English"
}
"locale-en-US": "English",
"locale-es-ES": "Español"
}
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/AccessLists.md
Original file line number Diff line number Diff line change
@@ -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.
32 changes: 32 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/Certificates.md
Original file line number Diff line number Diff line change
@@ -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.
10 changes: 10 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/DeadHosts.md
Original file line number Diff line number Diff line change
@@ -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.
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/ProxyHosts.md
Original file line number Diff line number Diff line change
@@ -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.
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 6 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/Streams.md
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 6 additions & 0 deletions frontend/src/locale/src/HelpDoc/es/index.ts
Original file line number Diff line number Diff line change
@@ -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";
Loading