Skip to content

Commit f3633cb

Browse files
authored
Merge pull request #4850 from TeenBiscuits/lang-spanish
Add Spanish language support and translations
2 parents c3954e9 + 8773ce2 commit f3633cb

File tree

14 files changed

+949
-6
lines changed

14 files changed

+949
-6
lines changed

frontend/check-locales.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
const allLocales = [
1010
["en", "en-US"],
11-
["fa", "fa-IR"],
11+
["es", "es-ES"],
1212
];
1313

1414
const ignoreUnused = [

frontend/src/locale/IntlProvider.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
import { createIntl, createIntlCache } from "react-intl";
22
import langEn from "./lang/en.json";
3+
import langEs from "./lang/es.json";
34
import langDe from "./lang/de.json";
45
import langList from "./lang/lang-list.json";
56

67
// first item of each array should be the language code,
78
// not the country code
89
// Remember when adding to this list, also update check-locales.js script
910
const localeOptions = [
10-
["en", "en-US"],
11-
["de", "de-DE"],
11+
["en", "en-US"],
12+
["es", "es-ES"],
13+
["de", "de-DE"]
1214
];
1315

1416
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
1517
const thisLocale = locale || "en";
1618
switch (thisLocale.slice(0, 2)) {
19+
case "es":
20+
return Object.assign({}, langList, langEs);
1721
case "de":
1822
return Object.assign({}, langList, langEn, langDe);
1923
default:
@@ -23,6 +27,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => {
2327

2428
const getFlagCodeForLocale = (locale?: string) => {
2529
switch (locale) {
30+
case "es-ES":
31+
case "es":
32+
return "ES";
2633
case "de-DE":
2734
case "de":
2835
return "DE";

frontend/src/locale/lang/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"column.email": "Email",
6363
"column.event": "Event",
6464
"column.expires": "Expires",
65-
"column.http-code": "Access",
65+
"column.http-code": "HTTP Code",
6666
"column.incoming-port": "Incoming Port",
6767
"column.name": "Name",
6868
"column.protocol": "Protocol",

frontend/src/locale/lang/es.json

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
{
2+
"access-list": "Lista de Acceso",
3+
"access-list.access-count": "{count} {count, plural, one {Regla} other {Reglas}}",
4+
"access-list.auth-count": "{count} {count, plural, one {Usuario} other {Usuarios}}",
5+
"access-list.help-rules-last": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final",
6+
"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.",
7+
"access-list.pass-auth": "Pasar Autenticación al Upstream",
8+
"access-list.public": "Accesible Públicamente",
9+
"access-list.public.subtitle": "No se requiere autenticación básica",
10+
"access-list.satisfy-any": "Satisfacer Cualquiera",
11+
"access-list.subtitle": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}",
12+
"access-lists": "Listas de Acceso",
13+
"action.add": "Añadir",
14+
"action.add-location": "Añadir Ubicación",
15+
"action.close": "Cerrar",
16+
"action.delete": "Eliminar",
17+
"action.disable": "Deshabilitar",
18+
"action.download": "Descargar",
19+
"action.edit": "Editar",
20+
"action.enable": "Habilitar",
21+
"action.permissions": "Permisos",
22+
"action.renew": "Renovar",
23+
"action.view-details": "Ver Detalles",
24+
"auditlogs": "Registros de Auditoría",
25+
"cancel": "Cancelar",
26+
"certificate": "Certificado",
27+
"certificate.custom-certificate": "Certificado",
28+
"certificate.custom-certificate-key": "Clave del Certificado",
29+
"certificate.custom-intermediate": "Certificado Intermedio",
30+
"certificate.in-use": "En Uso",
31+
"certificate.none.subtitle": "Sin certificado asignado",
32+
"certificate.none.subtitle.for-http": "Este host no usará HTTPS",
33+
"certificate.none.title": "Ninguno",
34+
"certificate.not-in-use": "Sin Usar",
35+
"certificate.renew": "Renovar Certificado",
36+
"certificates": "Certificados",
37+
"certificates.custom": "Certificado Personalizado",
38+
"certificates.custom.warning": "No se admiten archivos de claves protegidos con contraseña.",
39+
"certificates.dns.credentials": "Contenido del Archivo de Credenciales",
40+
"certificates.dns.credentials-note": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor",
41+
"certificates.dns.credentials-warning": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!",
42+
"certificates.dns.propagation-seconds": "Segundos de Propagación",
43+
"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.",
44+
"certificates.dns.provider": "Proveedor DNS",
45+
"certificates.dns.warning": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos.",
46+
"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.",
47+
"certificates.http.reachability-failed-to-check": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com.",
48+
"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.",
49+
"certificates.http.reachability-ok": "Tu servidor es accesible y debería ser posible crear certificados.",
50+
"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.",
51+
"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.",
52+
"certificates.http.test-results": "Resultados de la Prueba",
53+
"certificates.http.warning": "Estos dominios ya deben estar configurados para apuntar a esta instalación.",
54+
"certificates.request.subtitle": "con Let's Encrypt",
55+
"certificates.request.title": "Solicitar un nuevo Certificado",
56+
"column.access": "Acceso",
57+
"column.authorization": "Autorización",
58+
"column.authorizations": "Autorizaciones",
59+
"column.custom-locations": "Ubicaciones Personalizadas",
60+
"column.destination": "Destino",
61+
"column.details": "Detalles",
62+
"column.email": "Correo Electrónico",
63+
"column.event": "Evento",
64+
"column.expires": "Expira",
65+
"column.http-code": "Código HTTP",
66+
"column.incoming-port": "Puerto de Entrada",
67+
"column.name": "Nombre",
68+
"column.protocol": "Protocolo",
69+
"column.provider": "Proveedor",
70+
"column.roles": "Roles",
71+
"column.rules": "Reglas",
72+
"column.satisfy": "Satisfacer",
73+
"column.satisfy-all": "Todo",
74+
"column.satisfy-any": "Cualquiera",
75+
"column.scheme": "Esquema",
76+
"column.source": "Origen",
77+
"column.ssl": "SSL",
78+
"column.status": "Estado",
79+
"created-on": "Creado: {date}",
80+
"dashboard": "Panel de Control",
81+
"dead-host": "Host 404",
82+
"dead-hosts": "Hosts 404",
83+
"dead-hosts.count": "{count} {count, plural, one {Host 404} other {Hosts 404}}",
84+
"disabled": "Deshabilitado",
85+
"domain-names": "Nombres de Dominio",
86+
"domain-names.max": "{count} nombres de dominio como máximo",
87+
"domain-names.placeholder": "Comienza a escribir para añadir dominio...",
88+
"domain-names.wildcards-not-permitted": "No se permiten comodines para este tipo",
89+
"domain-names.wildcards-not-supported": "No se admiten comodines para esta CA",
90+
"domains.force-ssl": "Forzar SSL",
91+
"domains.hsts-enabled": "HSTS Habilitado",
92+
"domains.hsts-subdomains": "HSTS en Subdominios",
93+
"domains.http2-support": "Soporte HTTP/2",
94+
"domains.use-dns": "Usar Desafío DNS",
95+
"email-address": "Dirección de correo electrónico",
96+
"empty-search": "No se encontraron resultados",
97+
"empty-subtitle": "¿Por qué no creas uno?",
98+
"enabled": "Habilitado",
99+
"error.access.at-least-one": "Se requiere al menos una Autorización o una Regla de Acceso",
100+
"error.access.duplicate-usernames": "Los nombres de usuario de autorización deben ser únicos",
101+
"error.invalid-auth": "Correo electrónico o contraseña no válidos",
102+
"error.invalid-domain": "Dominio no válido: {domain}",
103+
"error.invalid-email": "Dirección de correo electrónico no válida",
104+
"error.max-character-length": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}",
105+
"error.max-domains": "Demasiados dominios, el máximo es {max}",
106+
"error.maximum": "El máximo es {max}",
107+
"error.min-character-length": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}",
108+
"error.minimum": "El mínimo es {min}",
109+
"error.passwords-must-match": "Las contraseñas deben coincidir",
110+
"error.required": "Este campo es obligatorio",
111+
"expires.on": "Expira: {date}",
112+
"footer.github-fork": "Bifúrcame en Github",
113+
"host.flags.block-exploits": "Bloquear Exploits Comunes",
114+
"host.flags.cache-assets": "Cachear Recursos",
115+
"host.flags.preserve-path": "Preservar Ruta",
116+
"host.flags.protocols": "Protocolos",
117+
"host.flags.websockets-upgrade": "Soporte de Websockets",
118+
"host.forward-port": "Puerto de Reenvío",
119+
"host.forward-scheme": "Esquema",
120+
"hosts": "Hosts",
121+
"http-only": "Solo HTTP",
122+
"lets-encrypt": "Let's Encrypt",
123+
"lets-encrypt-via-dns": "Let's Encrypt vía DNS",
124+
"lets-encrypt-via-http": "Let's Encrypt vía HTTP",
125+
"loading": "Cargando…",
126+
"login.title": "Inicia sesión en tu cuenta",
127+
"nginx-config.label": "Configuración Personalizada de Nginx",
128+
"nginx-config.placeholder": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!",
129+
"no-permission-error": "No tienes acceso para ver esto.",
130+
"notfound.action": "Llévame al inicio",
131+
"notfound.content": "Lo sentimos, pero la página que buscas no fue encontrada",
132+
"notfound.title": "Ups… Has encontrado una página de error",
133+
"notification.error": "Error",
134+
"notification.object-deleted": "{object} ha sido eliminado",
135+
"notification.object-disabled": "{object} ha sido deshabilitado",
136+
"notification.object-enabled": "{object} ha sido habilitado",
137+
"notification.object-renewed": "{object} ha sido renovado",
138+
"notification.object-saved": "{object} ha sido guardado",
139+
"notification.success": "Éxito",
140+
"object.actions-title": "{object} #{id}",
141+
"object.add": "Añadir {object}",
142+
"object.delete": "Eliminar {object}",
143+
"object.delete.content": "¿Estás seguro de que quieres eliminar este {object}?",
144+
"object.edit": "Editar {object}",
145+
"object.empty": "No hay {objects}",
146+
"object.event.created": "{object} Creado",
147+
"object.event.deleted": "{object} Eliminado",
148+
"object.event.disabled": "{object} Deshabilitado",
149+
"object.event.enabled": "{object} Habilitado",
150+
"object.event.renewed": "{object} Renovado",
151+
"object.event.updated": "{object} Actualizado",
152+
"offline": "Desconectado",
153+
"online": "Conectado",
154+
"options": "Opciones",
155+
"password": "Contraseña",
156+
"password.generate": "Generar contraseña aleatoria",
157+
"password.hide": "Ocultar Contraseña",
158+
"password.show": "Mostrar Contraseña",
159+
"permissions.hidden": "Oculto",
160+
"permissions.manage": "Gestionar",
161+
"permissions.view": "Solo Ver",
162+
"permissions.visibility.all": "Todos los Elementos",
163+
"permissions.visibility.title": "Visibilidad de Elementos",
164+
"permissions.visibility.user": "Solo Elementos Creados",
165+
"proxy-host": "Host Proxy",
166+
"proxy-host.forward-host": "Nombre de Host / IP de Reenvío",
167+
"proxy-hosts": "Hosts Proxy",
168+
"proxy-hosts.count": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}",
169+
"public": "Público",
170+
"redirection-host": "Host de Redirección",
171+
"redirection-host.forward-domain": "Dominio de Reenvío",
172+
"redirection-host.forward-http-code": "Código HTTP",
173+
"redirection-hosts": "Hosts de Redirección",
174+
"redirection-hosts.count": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}",
175+
"role.admin": "Administrador",
176+
"role.standard-user": "Usuario Estándar",
177+
"save": "Guardar",
178+
"setting": "Configuración",
179+
"settings": "Configuración",
180+
"settings.default-site": "Sitio Predeterminado",
181+
"settings.default-site.404": "Página 404",
182+
"settings.default-site.444": "Sin Respuesta (444)",
183+
"settings.default-site.congratulations": "Página de Felicitaciones",
184+
"settings.default-site.description": "Qué mostrar cuando Nginx recibe un Host desconocido",
185+
"settings.default-site.html": "HTML Personalizado",
186+
"settings.default-site.html.placeholder": "<!-- Introduce aquí tu contenido HTML personalizado -->",
187+
"settings.default-site.redirect": "Redirigir",
188+
"setup.preamble": "Comienza creando tu cuenta de administrador.",
189+
"setup.title": "¡Bienvenido!",
190+
"sign-in": "Iniciar Sesión",
191+
"ssl-certificate": "Certificado SSL",
192+
"stream": "Stream",
193+
"stream.forward-host": "Host de Reenvío",
194+
"stream.incoming-port": "Puerto de Entrada",
195+
"streams": "Streams",
196+
"streams.count": "{count} {count, plural, one {Stream} other {Streams}}",
197+
"streams.tcp": "TCP",
198+
"streams.udp": "UDP",
199+
"test": "Probar",
200+
"user": "Usuario",
201+
"user.change-password": "Cambiar Contraseña",
202+
"user.confirm-password": "Confirmar Contraseña",
203+
"user.current-password": "Contraseña Actual",
204+
"user.edit-profile": "Editar Perfil",
205+
"user.full-name": "Nombre Completo",
206+
"user.login-as": "Iniciar sesión como {name}",
207+
"user.logout": "Cerrar Sesión",
208+
"user.new-password": "Nueva Contraseña",
209+
"user.nickname": "Apodo",
210+
"user.set-password": "Establecer Contraseña",
211+
"user.set-permissions": "Establecer Permisos para {name}",
212+
"user.switch-dark": "Cambiar a modo Oscuro",
213+
"user.switch-light": "Cambiar a modo Claro",
214+
"username": "Nombre de Usuario",
215+
"users": "Usuarios"
216+
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"locale-de-DE": "German",
3-
"locale-en-US": "English"
4-
}
3+
"locale-en-US": "English",
4+
"locale-es-ES": "Español"
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## ¿Qué es una Lista de Acceso?
2+
3+
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.
4+
5+
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_.
6+
7+
Esto es más útil para servicios web reenviados que no tienen mecanismos de autenticación integrados o cuando desea protegerse de clientes desconocidos.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Ayuda de Certificados
2+
3+
### Certificado HTTP
4+
5+
Un certificado validado por HTTP significa que los servidores de Let's Encrypt
6+
intentarán acceder a tus dominios a través de HTTP (¡no HTTPS!) y, si tienen éxito,
7+
emitirán tu certificado.
8+
9+
Para este método, deberás tener un _Host Proxy_ creado para tu(s) dominio(s) que
10+
sea accesible por HTTP y que apunte a esta instalación de Nginx. Después de que se
11+
haya emitido un certificado, puedes modificar el _Host Proxy_ para que también use
12+
este certificado para conexiones HTTPS. Sin embargo, el _Host Proxy_ seguirá
13+
necesitando estar configurado para acceso HTTP para que el certificado se renueve.
14+
15+
Este proceso _no_ admite dominios comodín.
16+
17+
### Certificado DNS
18+
19+
Un certificado validado por DNS requiere que uses un complemento de Proveedor de DNS.
20+
Este Proveedor de DNS se usará para crear registros temporales en tu dominio y luego
21+
Let's Encrypt consultará esos registros para asegurarse de que eres el propietario y,
22+
si tiene éxito, emitirá tu certificado.
23+
24+
No necesitas tener un _Host Proxy_ creado antes de solicitar este tipo de certificado.
25+
Tampoco necesitas tener tu _Host Proxy_ configurado para acceso HTTP.
26+
27+
Este proceso __ admite dominios comodín.
28+
29+
### Certificado Personalizado
30+
31+
Usa esta opción para cargar tu propio Certificado SSL, proporcionado por tu propia
32+
Autoridad de Certificación.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
## ¿Qué es un Host 404?
2+
3+
Un Host 404 es simplemente una configuración de host que muestra una página 404.
4+
5+
Esto puede ser útil cuando tu dominio está listado en los motores de búsqueda y deseas
6+
proporcionar una página de error más agradable o específicamente para indicar a los indexadores de búsqueda que
7+
las páginas del dominio ya no existen.
8+
9+
Otro beneficio de tener este host es rastrear los registros de visitas a él y
10+
ver los referentes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## ¿Qué es un Host Proxy?
2+
3+
Un Host Proxy es el punto de entrada para un servicio web que deseas reenviar.
4+
5+
Proporciona terminación SSL opcional para tu servicio que podría no tener soporte SSL integrado.
6+
7+
Los Hosts Proxy son el uso más común del Nginx Proxy Manager.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## ¿Qué es un Host de Redirección?
2+
3+
Un Host de Redirección redirigirá las solicitudes del dominio entrante e impulsará al
4+
visitante a otro dominio.
5+
6+
La razón más común para usar este tipo de host es cuando tu sitio web cambia de
7+
dominios pero aún tienes enlaces de motores de búsqueda o referencias apuntando al dominio anterior.

0 commit comments

Comments
 (0)