feat: add full Zonemaster stack with Docker and Spanish UI

- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI)
- Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend
- Dockerfile.gui: Astro static build served via nginx
- docker-compose.yml: backend (internal) + frontend (port 5353)
- nginx.conf: root redirects to /es/, /api/ proxied to backend
- zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 08:19:24 +02:00
commit 8d4eaa1489
1567 changed files with 204155 additions and 0 deletions

387
zonemaster-cli/share/es.po Normal file
View File

@@ -0,0 +1,387 @@
msgid ""
msgstr ""
"Project-Id-Version: 0.0.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 19:52-0300\n"
"PO-Revision-Date: 2024-12-16 20:05-0300\n"
"Last-Translator: hsalgado@vulcano.cl\n"
"Language-Team: Zonemaster Team\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.2.2\n"
#, perl-brace-format
msgid ""
"Warning: setting locale category LC_MESSAGES to {locale} failed -- is it "
"installed on this system?"
msgstr ""
"Advertencia: fallo en definir la categoría de localización LC_MESSAGES como "
"{locale} (¿está instalada en este sistema?)"
#, perl-brace-format
msgid ""
"Warning: setting locale category LC_CTYPE to {locale} failed -- is it "
"installed on this system?"
msgstr ""
"Advertencia: fallo en definir la categoría de localización LC_CTYPE como "
"{locale} (¿está instalada en este sistema?)"
msgid "Warning: deprecated --encoding, simply remove it from your usage."
msgstr ""
"Advertencia: --encoding está obsoleto, puede eliminarlo de las opciones."
msgid "Error: --json-stream and --no-json cannot be used together."
msgstr "Error: --json-stream y --no-json no pueden usarse juntas."
msgid ""
"Warning: --json-translate has no effect without either --json or --json-"
"stream."
msgstr ""
"Advertencia: --json-translate no tiene ningún efecto sin tener además --json "
"o --json-stream."
msgid "Warning: deprecated --json-translate, use --no-raw instead."
msgstr "Advertencia: --json-translate está obsoleta, utilice mejor --no-raw."
msgid "Warning: deprecated --no-json-translate, use --raw instead."
msgstr "Advertencia: --no-json-translate está obsoleta, utilice mejor --raw."
#, perl-brace-format
msgid "Loading profile from {path}."
msgstr "Cargando perfil desde {path}."
#, perl-brace-format
msgid "Error: invalid value for --sourceaddr4: {reason}"
msgstr "Error: valor inválido para --sourceaddr4: {reason}"
#, perl-brace-format
msgid "Error: invalid value for --sourceaddr6: {reason}"
msgstr "Error: valor inválido para --sourceaddr6: {reason}"
#, perl-brace-format
msgid ""
"Error: Invalid input '{cli_arg}' in --test. There must be at most one slash "
"('/') character."
msgstr ""
"Error: entrada inválida '{cli_arg}' en --test. Debe haber al menos una barra "
"diagonal ('/')."
#, perl-brace-format
msgid ""
"Error: Unrecognized test case '{testcase}' in --test. Use --list-tests for a "
"list of valid choices."
msgstr ""
"Error: caso de prueba no reconocido '{testcase}' en --test. Use --list-tests "
"para una lista de las alternativas válidas."
#, perl-brace-format
msgid ""
"Error: Unrecognized test module '{module}' in --test. Use --list-tests for a "
"list of valid choices."
msgstr ""
"Error: módulo de prueba no reconocido '{module}' en --test. Use --list-tests "
"para una lista de las alternativas válidas."
#, perl-brace-format
msgid "Error: Invalid input '{cli_arg}' in --test."
msgstr "Error: entrada inválida '{cli_arg}' en --test."
#, perl-brace-format
msgid ""
"Notice: Engine does not have test case '{testcase}' enabled in the profile. "
"Forcing..."
msgstr ""
"Aviso: El motor no tiene el caso de prueba '{testcase}' habilitado en el "
"perfil. Forzando..."
#, perl-brace-format
msgid "Failed to recognize stop level '{level}'."
msgstr "Fallo en identificar el nivel de detención '{level}'."
msgid ""
"--level must be one of CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG, DEBUG2 "
"or DEBUG3."
msgstr ""
"--level debe ser alguno entre CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG, "
"DEBUG2 o DEBUG3."
msgid ""
"Only one domain can be given for testing. Did you forget to prepend an "
"option with '--<OPTION>'?"
msgstr ""
"Solo puede indicarse 1 dominio para las pruebas. ¿Quizás incluyó una opción "
"y olvidó el prefijo '--<OPCIÓN>'?"
msgid "Must give the name of a domain to test."
msgstr "Debe indicar el nombre de un dominio a probar."
#, perl-brace-format
msgid "Error loading hints file: {message}"
msgstr "Error al cargar el archivo 'hints': {message}"
msgid "Seconds"
msgstr "Segundos"
msgid "Level"
msgstr "Nivel"
msgid "Module"
msgstr "Módulo"
msgid "Testcase"
msgstr "Caso de prueba"
msgid "Message"
msgstr "Mensaje"
msgid "Looks OK."
msgstr "Se ve bien."
msgid ""
"\n"
"\n"
" Level\tNumber of log entries"
msgstr ""
"\n"
"\n"
" Nivel\tNúmero de registros"
#, perl-format
msgid "%8s\t%5d entries.\n"
msgstr "%8s\t%5d registros.\n"
msgid "--ns must be a name or a name/ip pair."
msgstr "--ns debe ser un nombre o un par nombre/ip."
msgid ""
"--ds ds data must be in the form \"keytag,algorithm,type,digest\". E.g. "
"space is not permitted anywhere in the string."
msgstr ""
"--ds los datos para DS deben estar en el formato \"keytag,algoritmo,tipo,"
"digest\". No se permiten espacios dentro del valor."
msgid "DEBUG"
msgstr "DEPURACIÓN"
msgid "INFO"
msgstr "INFO"
msgid "NOTICE"
msgstr "AVISO"
msgid "WARNING"
msgstr "ADVERTENCIA"
msgid "ERROR"
msgstr "ERROR"
msgid "CRITICAL"
msgstr "CRÍTICO"
#~ msgid "Print version information and exit."
#~ msgstr "Despliega información de la versión y termina."
#~ msgid ""
#~ "The minimum severity level to display. Must be one of CRITICAL, ERROR, "
#~ "WARNING, NOTICE, INFO or DEBUG."
#~ msgstr ""
#~ "El nivel de severidad mínimo para mostrar. Debe ser alguno entre "
#~ "CRITICAL, ERROR, WARNING, NOTICE, INFO o DEBUG."
#~ msgid "The locale to use for messages translation."
#~ msgstr "Localización (locale) para la traducción de los mensajes."
#~ msgid "Flag indicating if output should be in JSON or not."
#~ msgstr "Opción que indica si la salida será en JSON o no."
#~ msgid "Flag indicating if output should be streaming JSON or not."
#~ msgstr ""
#~ "Opción que indica si la salida debiera ser transmisión de JSON o no."
#~ msgid ""
#~ "Deprecated. Flag indicating if JSON output should include the translated "
#~ "message of the tag or not."
#~ msgstr ""
#~ "Obsoleta. Opción que indica si la salida de transmisión de JSON debiera "
#~ "incluir el mensaje traducido del tag o no."
#~ msgid ""
#~ "Flag indicating if output should be translated to human language or "
#~ "dumped raw."
#~ msgstr ""
#~ "Opción que indica si la salida se traducirá a idioma humano o en formato "
#~ "crudo."
#~ msgid "Print timestamp on entries."
#~ msgstr "Despliega marcas de tiempo en los registros."
#~ msgid "Print level on entries."
#~ msgstr "Despliega el nivel en los registros."
#~ msgid "Print the name of the module on entries."
#~ msgstr "Despliega el nombre del módulo en los registros."
#~ msgid "Print the name of the test case on entries."
#~ msgstr "Despliega el nombre del caso de prueba en los registros."
#~ msgid ""
#~ "A name/ip string giving a nameserver for undelegated tests, or just a "
#~ "name which will be looked up for IP addresses. Can be given multiple "
#~ "times."
#~ msgstr ""
#~ "Una etiqueta nombre/IP para el servidor de nombres en las pruebas no-"
#~ "delegadas, o solo un nombre que será resuelto para buscar la dirección "
#~ "IP. Puede repetirse varias veces."
#~ msgid "Name of a root hints file to override the defaults."
#~ msgstr ""
#~ "Nombre del archivo 'root hints' para reemplazar los valores por defecto."
#~ msgid "Name of a file to save DNS data to after running tests."
#~ msgstr ""
#~ "Nombre de un archivo para guardar los datos DNS después de ejecutar las "
#~ "pruebas."
#~ msgid "Name of a file to restore DNS data from before running test."
#~ msgstr ""
#~ "Nombre de un archivo para recuperar los datos DNS antes de ejecutar la "
#~ "prueba."
#~ msgid ""
#~ "Flag to permit or deny queries being sent via IPv4. --ipv4 permits IPv4 "
#~ "traffic, --no-ipv4 forbids it."
#~ msgstr ""
#~ "Opción para permitir o prohibir el envío de consultas vía IPv4. --ipv4 "
#~ "autoriza el tráfico IPv4, --no-ipv4 lo prohíbe."
#~ msgid ""
#~ "Flag to permit or deny queries being sent via IPv6. --ipv6 permits IPv6 "
#~ "traffic, --no-ipv6 forbids it."
#~ msgstr ""
#~ "Opción para permitir o prohibir el envío de consultas vía IPv6. --ipv6 "
#~ "autoriza el tráfico IPv6, --no-ipv6 lo prohíbe."
#~ msgid "Instead of running a test, list all available tests."
#~ msgstr ""
#~ "En vez de ejecutar una prueba, despliega todas las pruebas disponibles."
#~ msgid ""
#~ "Specify test to run. Should be either the name of a module, or the name "
#~ "of a module and the name of a method in that module separated by a \"/\" "
#~ "character (Example: \"Basic/basic1\"). The method specified must be one "
#~ "that takes a zone object as its single argument. This switch can be "
#~ "repeated."
#~ msgstr ""
#~ "Indica la prueba a ejecutar. Debe ser el nombre de un módulo, o el nombre "
#~ "de un módulo y el nombre de un método de ese módulo separado por el "
#~ "caracter \"/\" (por ejemplo: \"Basic/basic1\"). El método especificado "
#~ "debe ser uno que recibe un objecto de zona como su único argumento. Esta "
#~ "opción puede repetirse."
#~ msgid ""
#~ "As soon as a message at this level or higher is logged, execution will "
#~ "stop. Must be one of CRITICAL, ERROR, WARNING, NOTICE, INFO or DEBUG."
#~ msgstr ""
#~ "Tan pronto como se registra un mensaje en este nivel o uno superior, la "
#~ "ejecución se detendrá. Debe ser alguno entre CRITICAL, ERROR, WARNING, "
#~ "NOTICE, INFO o DEBUG."
#~ msgid "Name of profile file to load. (DEFAULT)"
#~ msgstr "Nombre del archivo de perfiles a cargar. (DEFAULT)"
#~ msgid "Strings with DS data on the form \"keytag,algorithm,type,digest\""
#~ msgstr ""
#~ "Etiquetas con los datos DS en la forma \"tag,algoritmo,tipo,"
#~ "resumen\" (\"keytag,algorithm,type,digest\")"
#~ msgid "Print a count of the number of messages at each level"
#~ msgstr "Despliega un contador de la cantidad de mensajes en cada nivel"
#~ msgid ""
#~ "Boolean flag for activity indicator. Defaults to on if STDOUT is a tty, "
#~ "off if it is not. Disable with --no-progress."
#~ msgstr ""
#~ "Opción booleana para el indicador de actividad. El predeterminado es "
#~ "encendido si la salida estándar (STDOUT) es un terminal, apagado si no lo "
#~ "es. Se puede deshabilitar con --no-progress."
#~ msgid "Name of the character encoding used for command line arguments"
#~ msgstr ""
#~ "Nombre de la codificación de caracteres (\"encoding\") que se usa para "
#~ "los argumentos en la línea de comandos"
#~ msgid ""
#~ "At the end of a run, print a summary of the times (in milliseconds) the "
#~ "zone's name servers took to answer."
#~ msgstr ""
#~ "Al finalizar una ejecución, despliega un resumen del tiempo (en "
#~ "milisegundos) que le tomó responder a los servidores de nombre de la zona."
#~ msgid "Print the effective profile used in JSON format, then exit."
#~ msgstr ""
#~ "Despliega el perfil definitivo usado en formato JSON, luego termina."
#~ msgid ""
#~ "Deprecated (planned removal: v2024.1). Use --sourceaddr4 and/or --"
#~ "sourceaddr6. Source IP address used to send queries. Setting an IP "
#~ "address not correctly configured on a local network interface causes "
#~ "cryptic error messages."
#~ msgstr ""
#~ "Obsoleta (eliminación planificada para v2024.1). Use --sourceaddr4 y/o .."
#~ "sourceaddr6. Dirección IP de origen usada para enviar las consultas. "
#~ "Indicar una dirección IP que no esté correctamente configurada en una "
#~ "interfaz de red local puede causar mensajes de error confusos."
#~ msgid ""
#~ "Source IPv4 address used to send queries. Setting an IPv4 address not "
#~ "correctly configured on a local network interface fails silently. Can not "
#~ "be combined with --sourceaddr."
#~ msgstr ""
#~ "Dirección IPv4 de origen usada para enviar las consultas. Indicar una "
#~ "dirección IPv4 que no esté correctamente configurada en una interfaz de "
#~ "red local fallará silenciosamente. No puede usarse en combinación con --"
#~ "sourceaddr."
#~ msgid ""
#~ "Source IPv6 address used to send queries. Setting an IPv6 address not "
#~ "correctly configured on a local network interface fails silently. Can not "
#~ "be combined with --sourceaddr."
#~ msgstr ""
#~ "Dirección IPv6 de origen usada para enviar las consultas. Indicar una "
#~ "dirección IPv6 que no esté correctamente configurada en una interfaz de "
#~ "red local fallará silenciosamente. No puede usarse en combinación con --"
#~ "sourceaddr."
#~ msgid "Print elapsed time (in seconds) at end of run."
#~ msgstr ""
#~ "Imprime el tiempo transcurrido (en segundos) al finalizar la ejecución."
#~ msgid ""
#~ "Error: --sourceaddr can't be combined with --sourceaddr4 or --sourceaddr6."
#~ msgstr ""
#~ "Error: --sourceaddr no puede usarse al mismo tiempo que --sourceaddr4 o --"
#~ "sourceaddr6."
#~ msgid ""
#~ "Warning: --sourceaddr is deprecated (planned removal: v2024.1). Use --"
#~ "sourceaddr4 and/or --sourceaddr6 instead."
#~ msgstr ""
#~ "Advertencia: --sourceaddr está obsoleta (eliminación planificada para "
#~ "v2024.1). Utilice mejor --sourceaddr4 y/o --sourceaddr6."
#~ msgid "The domain name contains consecutive dots.\n"
#~ msgstr "El nombre de dominio contiene puntos consecutivos.\n"
#, perl-brace-format
#~ msgid "The name of the nameserver '{nsname}' contains consecutive dots."
#~ msgstr ""
#~ "El nombre del servidor de nombres '{nsname}' contiene puntos consecutivos."
#~ msgid ""
#~ "Warning: Zonemaster::LDNS not compiled with IDN support, cannot handle "
#~ "non-ASCII names correctly."
#~ msgstr ""
#~ "Advertencia: Zonemaster::LDNS no fue compilado con soporte IDN, no puede "
#~ "manejar correctamente nombres no-ASCII."