From 06a0f8eb1b5795f4813e161d5a02352f7af88390 Mon Sep 17 00:00:00 2001 From: Mariano Graziano Date: Fri, 14 Aug 2026 21:01:25 -0300 Subject: [PATCH] feat(i18n): add Spanish (es) locale support Add a complete Spanish translation (common, demos, scene namespaces) and register "es" across the i18n stack: language switcher, locale-aware links, client/server i18next init, locale middleware, and the locale resources API route. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Dyt6kcMVEWJza4sTJ67GFB --- app/components/header.tsx | 5 +- app/components/locale-link.tsx | 2 +- app/entry.client.tsx | 2 +- app/entry.server.tsx | 2 +- app/locales/es/common.ts | 490 +++++++++++++++++ app/locales/es/demos.ts | 812 +++++++++++++++++++++++++++++ app/locales/es/index.ts | 6 + app/locales/es/scene.ts | 177 +++++++ app/locales/index.ts | 2 + app/middleware/i18next.ts | 6 +- app/routes/api.locales.$lng.$ns.ts | 2 +- 11 files changed, 1497 insertions(+), 9 deletions(-) create mode 100644 app/locales/es/common.ts create mode 100644 app/locales/es/demos.ts create mode 100644 app/locales/es/index.ts create mode 100644 app/locales/es/scene.ts diff --git a/app/components/header.tsx b/app/components/header.tsx index 78aa30b..7c6b544 100644 --- a/app/components/header.tsx +++ b/app/components/header.tsx @@ -17,10 +17,11 @@ export function Header() { { code: "zh", label: "简体中文" }, { code: "zh-HK", label: "繁體中文" }, { code: "en-US", label: "English" }, + { code: "es", label: "Español" }, ]; const handleLanguageChange = (newLang: string) => { - const prefixes = ["zh-HK", "en-US"]; + const prefixes = ["zh-HK", "en-US", "es"]; const segments = location.pathname.split("/").filter(Boolean); const hasPrefix = segments.length > 0 && prefixes.includes(segments[0]); @@ -42,7 +43,7 @@ export function Header() { }; // Determine home link - const prefixes = ["zh-HK", "en-US"]; + const prefixes = ["zh-HK", "en-US", "es"]; const segments = location.pathname.split("/").filter(Boolean); const currentPrefix = segments.length > 0 && prefixes.includes(segments[0]) ? segments[0] : ""; diff --git a/app/components/locale-link.tsx b/app/components/locale-link.tsx index c688320..89dd1cc 100644 --- a/app/components/locale-link.tsx +++ b/app/components/locale-link.tsx @@ -18,7 +18,7 @@ export function LocaleLink({ to, children, ...props }: LocaleLinkProps) { // Check if we're currently on a localized route const pathSegments = location.pathname.split("/"); const currentLocale = pathSegments[1]; - const isLocalizedRoute = ["zh-HK", "en-US"].includes(currentLocale); + const isLocalizedRoute = ["zh-HK", "en-US", "es"].includes(currentLocale); // Build the localized path let localizedTo = to; diff --git a/app/entry.client.tsx b/app/entry.client.tsx index d88f4c5..f617f7f 100644 --- a/app/entry.client.tsx +++ b/app/entry.client.tsx @@ -12,7 +12,7 @@ async function main() { .use(I18nextBrowserLanguageDetector) .init({ fallbackLng: "zh", - supportedLngs: ["zh", "zh-HK", "en-US"], + supportedLngs: ["zh", "zh-HK", "en-US", "es"], defaultNS: "common", ns: ["common"], detection: { order: ["htmlTag"], caches: [] }, diff --git a/app/entry.server.tsx b/app/entry.server.tsx index 365604f..d1a3b87 100644 --- a/app/entry.server.tsx +++ b/app/entry.server.tsx @@ -26,7 +26,7 @@ export default async function handleRequest( ns, defaultNS: "common", fallbackLng: "zh", - supportedLngs: ["zh", "zh-HK", "en-US"], + supportedLngs: ["zh", "zh-HK", "en-US", "es"], resources, interpolation: { escapeValue: false, diff --git a/app/locales/es/common.ts b/app/locales/es/common.ts new file mode 100644 index 0000000..e4ff8c8 --- /dev/null +++ b/app/locales/es/common.ts @@ -0,0 +1,490 @@ +export default { + title: "Visualización de Radioafición", + description: + "Bienvenido al Laboratorio de Visualización de Radioafición. Explora simulaciones 3D interactivas de tipos clásicos de antenas y de la polarización de ondas electromagnéticas. A través de estas demostraciones podrás comprender de forma intuitiva los principios de las antenas y las características de propagación de las ondas de radio.", + + nav: { + home: "Inicio", + back: "Volver", + }, + + actions: { + viewDemo: "Ver demo", + openTool: "Abrir herramienta", + github: "Repositorio en GitHub", + }, + + sections: { + tools: "Herramientas", + }, + + demoCards: { + vertical: { + title: "Polarización vertical", + description: + "Visualiza la propagación del campo eléctrico de una antena con polarización vertical.", + keywords: + "polarización vertical, campo eléctrico, dipolo, teoría de antenas", + }, + horizontal: { + title: "Polarización horizontal", + description: + "Visualiza la propagación del campo eléctrico de una antena con polarización horizontal.", + keywords: + "polarización horizontal, campo eléctrico, dipolo, teoría de antenas", + }, + circular: { + title: "Polarización circular", + description: + "Visualiza el vector de campo eléctrico rotatorio en la polarización circular.", + keywords: + "polarización circular, vector rotatorio, comunicación por satélite", + }, + elliptical: { + title: "Polarización elíptica", + description: + "La forma general de polarización, entre la lineal y la circular.", + keywords: "polarización elíptica, tipos de polarización", + }, + dipoleAntenna: { + title: "Antena dipolo", + description: + "El tipo de antena más fundamental. Visualiza ondas estacionarias y diagramas de radiación.", + keywords: "antena dipolo, media onda, onda estacionaria", + }, + yagi: { + title: "Antena Yagi-Uda", + description: + "Una famosa antena direccional compuesta por directores, elemento activo y reflector.", + keywords: "antena yagi-uda, antena direccional, directores, reflector", + }, + invertedV: { + title: "Antena V invertida", + description: + "Una variante del dipolo fácil de instalar, más alta en el centro y más baja en los extremos.", + keywords: "antena v invertida, variante de dipolo, antena de hilo", + }, + gp: { + title: "Antena de plano de tierra", + description: + "Una antena monopolo vertical con radiales horizontales o inclinados hacia abajo.", + keywords: + "antena de plano de tierra, monopolo, radiales, antena vertical", + }, + positiveV: { + title: "Antena V positiva", + description: + "Un dipolo con brazos inclinados hacia arriba, adecuado para instalación en azoteas.", + keywords: "antena v positiva, dipolo, antena de azotea, dipolo en V", + }, + quad: { + title: "Antena Quad", + description: + "Una antena direccional formada por espiras cuadradas, con alta ganancia y bajo ruido.", + keywords: "antena quad, antena de lazo, alta ganancia, bajo ruido", + }, + moxon: { + title: "Antena Moxon", + description: + "Una antena direccional rectangular compacta con una excelente relación frente-espalda.", + keywords: + "antena moxon, antena rectangular, direccional, relación frente-espalda", + }, + endFed: { + title: "Media onda alimentada en el extremo", + description: + "Una antena portátil multibanda que usa un transformador de impedancia 49:1, alimentada por un extremo.", + keywords: + "media onda alimentada en el extremo, EFHW, antena portátil, transformador de impedancia", + }, + longWireAntenna: { + title: "Antena de hilo largo", + description: + "Demostración 3D de las características de radiación multilobular de la antena de hilo largo.", + keywords: "antena de hilo largo, hilo aleatorio, diagrama multilobular", + }, + windomAntenna: { + title: "Antena Windom (OCFD)", + description: + "Demostración 3D de la estructura de la antena Windom (OCFD) y su funcionamiento multibanda.", + keywords: "antena Windom, OCFD, dipolo de alimentación descentrada", + }, + hb9cv: { + title: "Antena HB9CV", + description: + "Un arreglo en fase de 2 elementos con alta ganancia y relación F/B, diseñado por HB9CV.", + keywords: + "antena HB9CV, arreglo en fase, antena direccional, radioafición", + }, + magneticLoopAntenna: { + title: "Antena de lazo magnético", + description: + "Demo 3D de la antena de lazo pequeño (dipolo magnético). Visualiza sus nulos profundos y su alto Q.", + keywords: + "lazo magnético, lazo pequeño, dipolo magnético, visualización de antenas", + }, + electromagneticPropagation: { + title: "Propagación electromagnética", + description: + "Visualización 3D de la propagación de ondas electromagnéticas en distintas bandas (HF/UV), demostrando los principios de onda de superficie, onda ionosférica y reflexión ionosférica.", + keywords: + "propagación electromagnética, onda de superficie, onda ionosférica, salto ionosférico, hf, uv", + }, + }, + + tools: { + yagiCalculator: { + title: "Calculadora Yagi", + description: + "Herramienta de diseño de antenas Yagi basada en el modelo de boom largo DL6WU y el algoritmo de corrección VK5DJ.", + keywords: "calculadora yagi, diseño de antenas, DL6WU, VK5DJ", + ui: { + title: "Calculadora Yagi", + subtitle: "Herramienta de ingeniería DL6WU", + quickMode: "Modo rápido", + proMode: "Modo pro", + blueprintPreview: "Vista previa del plano", + imgDownload: "Guardar diagrama + tabla", + downloadError: + "No se pudieron obtener los datos del plano; actualiza la página e inténtalo de nuevo.", + downloading: "Descargando...", + downloadFail: + "Falló la generación de la imagen; inténtalo de nuevo más tarde", + downloadUnknownError: + "Error desconocido durante la descarga; consulta la consola para más detalles.", + copySuccess: "¡Datos copiados al portapapeles!", + boomCorrectionApplied: "Corrección de boom aplicada", + boomCorrectionDetails: + "Basada en B/d={{ratio}} y k={{kFactor}}. Todos los elementos alargados en", + }, + specs: { + title: "Especificaciones básicas", + frequency: "Frecuencia central", + elements: "Número de elementos", + }, + quick: { + title: "Ajustes rápidos", + label: "Tipo de material del boom", + presets: { + metal_bonded: "Boom metálico - Con contacto (pasante y en contacto)", + metal_insulated: "Boom metálico - Aislado (pasante y aislado)", + pvc: "Boom de PVC/PPR - No metálico", + }, + note: "* Predeterminado: elemento de 4mm, boom de 20mm, dipolo plegado, espaciado DL6WU.", + }, + pro: { + title: "Parámetros de ingeniería", + section1: "1. Corrección de boom", + section2: "2. Elemento activo", + section3: "3. Estrategia de espaciado", + boomShape: "Forma del boom", + shapes: { + round: "Tubo redondo", + square: "Tubo cuadrado", + }, + elementDia: "Diámetro del elemento (d)", + elementDiaTooltip: { + title: "Efecto del diámetro (factor K)", + content: + "Los elementos más gruesos parecen eléctricamente más largos. Hay que cortarlos físicamente más cortos.", + }, + boomDia: "Diámetro del boom (B)", + boomDiaTooltip: { + title: "Efecto de acortamiento del boom", + content: + "Un boom metálico actúa como inductancia y acorta la longitud eléctrica de los elementos que lo atraviesan.", + }, + mount: "Montaje", + mountTooltip: { + title: "Factor de corrección (k)", + item1: "No metálico: k ≈ 0", + item2: "Sobre el boom: k ≈ 0.05 (mínimo)", + item3: "Pasante/en contacto: k = dinámico (0.6~0.8)", + }, + mountMethods: { + bonded: "En contacto (atraviesa el metal)", + insulated: "Aislado (atraviesa el metal)", + above: "Encima (aislado del boom)", + none: "Ninguno (boom no metálico)", + }, + bcFactor: "Factor de corrección (BC)", + bcFactorTooltip: { + title: "Factor de corrección k", + content: + "Curva DL6WU basada en la relación B/d. Longitud física añadida = B × k", + }, + autoCalcNote: + "* El sistema calcula k mediante la curva DL6WU. Puedes ajustarlo manualmente.", + deType: "Tipo", + deTypeTooltip: { + title: "Impedancia", + item1: "Plegado: ~288Ω (requiere balun 4:1)", + item2: "Recto: ~72Ω (alimentación directa)", + }, + deTypes: { + folded: "Dipolo plegado", + straight: "Dipolo recto", + }, + feedGap: "Separación de alimentación", + feedGapTooltip: { + title: "Corte físico", + content: + "A la longitud de corte del dipolo hay que restarle esta separación. LongCorte = LongTotal - Separación", + }, + algo: "Algoritmo", + algoTooltip: { + title: "Escalonado DL6WU", + content: + "El espaciado de los directores aumenta de 0.075λ a 0.30λ para máxima ganancia frontal con buen ancho de banda.", + }, + algos: { + dl6wu: "Escalonado DL6WU (recomendado)", + uniform: "Espaciado uniforme (personalizado)", + }, + fixedSpacing: "Espaciado fijo (λ)", + material: "Material", + materialTooltip: { + title: "Material del boom", + content: + "La conductividad del material seleccionado afecta ligeramente al diseño de los elementos.", + }, + materials: { + aluminum: "Aluminio - Estándar", + copper: "Cobre - Alta conductividad", + stainless_steel: "Acero inoxidable - Alta resistencia", + fiberglass: "Fibra de vidrio - Aislante", + }, + }, + results: { + title: "Lista de cortes", + tolerance: "Tolerancia ±0.5mm", + copy: "Copiar datos", + headers: { + element: "Elemento", + pos: "Pos", + space: "Espacio", + half: "Mitad", + cut: "Corte", + note: "Nota", + }, + notes: { + folded: "Plegado", + gap: "Separación: {{val}}mm", + foldedLoop: "Lazo plegado", + gapEn: "Separación: {{val}}mm", + }, + totalBoom: "Boom total: {{val}} mm", + estGain: "Ganancia est.", + estGainTooltip: "Fórmula est.: (Elementos × 1.2) + 2.15 dBi", + generatedBy: "Generado por Yagi Calc Pro | {{date}}", + downloadFileName: "yagi_design_{{freq}}MHz.png", + }, + }, + moxonCalculator: { + title: "Calculadora Moxon", + description: + "Diseñador de antenas Moxon rectangulares basado en el algoritmo AC6LA / MoxGen.", + keywords: "calculadora moxon, Moxon, MoxGen, diseño de antenas, AC6LA", + algorithm: "Algoritmo AC6LA / MoxGen", + specs: { + title: "Configuración", + subtitle: "Frecuencia e hilo", + freqLabel: "Frecuencia central (MHz)", + diaLabel: "Diámetro del hilo (mm)", + typicalFreq: "Típ.: 144.100, 435.000, 28.500", + typicalDia: "Típ.: 2mm ~ 6mm", + introTitle: "¿Qué es una Moxon?", + introDesc: + "La Moxon rectangular es una antena directiva de hilo de 2 elementos mejorada por Les Moxon (G6XN). Ofrece una excelente relación frente-espalda y un gran ancho de banda en una forma rectangular compacta (aprox. el 70% de una Yagi de tamaño completo). Normalmente proporciona una impedancia de alimentación directa de 50Ω.", + }, + results: { + title: "Lista de dimensiones", + copy: "Copiar datos", + copied: "¡Copiado al portapapeles!", + headers: { + id: "ID", + desc: "Descripción", + len: "Longitud (mm)", + wl: "Longitud de onda (λ)", + }, + rows: { + A: "Ancho del elemento activo", + B: "Cola del elemento activo", + C: "Separación", + D: "Cola del reflector", + E: "Profundidad total", + wireDriven: "Hilo total del elemento activo", + wireRef: "Hilo total del reflector", + }, + }, + blueprint: { + title: "Vista previa del plano", + download: "Guardar plano", + feed: "Punto de alimentación", + }, + }, + cw: { + title: "Entrenador de CW", + description: + "Entrenador de código Morse basado en Web Audio API, con decodificación y visualización en tiempo real.", + keywords: "CW, código Morse, entrenador, Web Audio API", + panel: { + letters: "LETRAS", + numbers: "NÚMEROS", + symbols: "SÍMBOLOS", + rx_log: "REGISTRO RX", + speed: "VELOCIDAD", + clear: "BORRAR", + morse_code_reference: "Referencia de código Morse", + ref: "REF", + training_mode: "MODO ENTRENAMIENTO", + free_play: "MODO LIBRE", + edit: "EDITAR", + next: "SIGUIENTE", + custom_text: "TEXTO PERSONALIZADO", + custom_text_placeholder: "ESCRIBE TEXTO (A-Z 0-9)...", + cancel: "CANCELAR", + confirm: "CONFIRMAR", + }, + circuit_board_visualization: + "Visualización de código Morse en placa de circuito", + input_aria_label: "Entrada de código Morse", + control: { + dit: "DIT [J / ←]", + dah: "DAH [K / →]", + backspace: "BORRAR [BS]", + reset: "REINICIAR [ESC]", + }, + status: { + ready: "LISTO", + }, + speed: { + slow: "LENTO", + med: "MEDIO", + fast: "RÁPIDO", + beginner: "Principiante", + intermediate: "Intermedio", + advanced: "Avanzado", + }, + instructions: { + title: "Instrucciones", + operation: { + title: "Cómo operar", + keyboard: "Control por teclado", + keyboard_desc: + "Usa '.' / 'J' / 'flecha izquierda' para DIT. Usa '-' / 'K' / 'flecha derecha' para DAH. Espacio para separar palabras. Retroceso para borrar.", + buttons: "Botones en pantalla", + buttons_desc: + "Pulsa los botones grandes de la parte inferior para DIT y DAH. Usa los botones pequeños para Borrar, Eliminar y Reiniciar.", + }, + speed_guide: { + title: "Ajustes de velocidad", + beginner: + "Principiante: velocidad lenta (menos WPM) con mayor separación entre caracteres. Ideal para quienes aprenden por primera vez a distinguir puntos y rayas.", + intermediate: + "Intermedio: velocidad moderada. Reduce la separación exagerada. Ideal para practicar el ritmo y la formación estándar de caracteres.", + advanced: + "Avanzado: velocidad rápida. Separación mínima. Simula la operación real de CW a alta velocidad o condiciones de concurso.", + }, + training_desc: + "Cambia al modo entrenamiento para practicar con texto en pantalla. El sistema valida tu entrada en tiempo real y calcula tus WPM. También puedes introducir texto personalizado para una práctica dirigida.", + }, + game: { + title: "CW Defense", + subtitle: "Teclea código Morse para defender el muro", + ready: "¿Listo para jugar?", + instructions: + "Pulsa J para · (dit) y K para − (dah). ¡Teclea el código Morse para eliminar los caracteres que caen antes de que lleguen al muro!", + start: "Iniciar juego", + resume: "Reanudar", + paused: "En pausa", + score: "Puntuación", + highScore: "Récord", + combo: "Combo", + wall: "Muro de defensa", + yourInput: "Tu entrada", + waiting: "Esperando...", + clear: "Borrar", + dit: "Dit", + dah: "Dah", + controls: + "J = · (dit) | K = − (dah) | RETROCESO = Borrar | ESC = Pausa", + gameOver: "Fin del juego", + wallBreached: "¡El muro ha sido derribado!", + finalScore: "Puntuación final", + maxCombo: "Combo máximo", + newRecord: "¡Nuevo récord!", + mainMenu: "Menú", + playAgain: "Jugar de nuevo", + }, + }, + cwGame: { + title: "CW Defense", + description: + "¡Defiende el muro con código Morse! Un juego de mecanografía con caracteres que caen para entrenar tu velocidad de reacción en CW.", + keywords: "CW, código Morse, juego, juego de mecanografía, radioafición", + }, + cwRxGame: { + title: "Entrenador de RX de CW", + description: + "Entrenador de recepción de código Morse con ruido de fondo de HF realista.", + keywords: "CW, RX, recepción, código Morse, radioafición", + ui: { + title: "ENTRENADOR RX", + subtitle: "Simulador de recepción de código Morse", + instructions: + "Escucha la secuencia. Escribe lo que oigas. Pulsa ENTER para enviar.", + start: "EMPEZAR A ESCUCHAR", + score: "Puntuación", + highScore: "Récord", + speed: "Velocidad (WPM)", + spacing: "Espaciado", + noise: "Ruido", + qsb: "QSB (desvanecimiento)", + chineseCallsigns: "Solo indicativos CN", + qsoMode: "Simular QSO", + status: { + transmitting: "TRANSMITIENDO...", + waiting: "ESPERANDO ENTRADA", + correct: "¡CORRECTO!", + miss: "¡FALLO!", + was: "ERA:", + }, + input: { + placeholder: { + playing: "...", + waiting: "ESCRIBE AQUÍ", + }, + hint: "PULSA [ESPACIO] PARA REPETIR • [ENTER] PARA ENVIAR", + }, + }, + }, + }, + + footer: { + feedback: { + title: "¿Tienes ideas o sugerencias?", + subtitle: + "Los comentarios son bienvenidos para ayudar a mejorar este proyecto", + emailTitle: "Enviar correo a ham@charlesify.com", + githubTitle: "Ver en GitHub", + }, + copyright: "© {{year}} BG8ROM. Todos los derechos reservados.", + credits: "Agradecimientos especiales", + acknowledgements: "Agradecimientos", + authorKJ7LNW: "Motor NEC2 impulsado por KJ7LNW/nec2c", + }, + + meta: { + siteName: "Visualización de Radioafición", + keywords: + "radioafición, demos de antenas, visualización 3D, polarización vertical, polarización horizontal, polarización circular, antena Yagi, antena GP, antena V invertida, antena V positiva, antena quad, antena Moxon", + home: { + title: "Visualización de Radioafición", + description: + "Una colección de visualizaciones de antenas de radioafición: incluye demos 3D de polarización y radiación de antenas clásicas como polarización vertical/horizontal/circular, Yagi, V invertida, GP, V positiva, Quad, Moxon, media onda alimentada en el extremo (EFHW), hilo largo, Windom, HB9CV, lazo magnético, etc.", + keywords: + "radioafición, ham radio, demos de antenas, visualización 3D, polarización vertical, polarización horizontal, polarización circular, antena Yagi, antena GP, antena V invertida, antena V positiva, antena Quad, antena Moxon, EFHW, hilo largo, antena Windom, HB9CV, lazo magnético, demos de radioafición, visualización de antenas", + }, + }, +} satisfies typeof import("~/locales/zh/common").default; diff --git a/app/locales/es/demos.ts b/app/locales/es/demos.ts new file mode 100644 index 0000000..74fea63 --- /dev/null +++ b/app/locales/es/demos.ts @@ -0,0 +1,812 @@ +export default { + subtitle: "Visualización de teoría de antenas", + loading: "Cargando escena 3D...", + aboutTitle: "Acerca de esta demostración", + polarizationMatch: "Coincidencia de polarización y pérdidas", + polarizationTitle: "Características y aplicaciones de la polarización", + physicsValidation: "Validación física", + + circularPolarization: { + metaTitle: "Polarización circular | Visualización de radioafición", + metaDescription: + "Demostración 3D de la propagación de ondas con polarización circular, incluyendo RHCP y LHCP.", + metaKeywords: + "polarización circular, RHCP, LHCP, antena helicoidal, comunicación por satélite", + title: "Polarización circular", + about: + "Esta visualización demuestra la propagación de ondas electromagnéticas con polarización circular. En este modo de polarización, el vector de campo eléctrico gira a medida que la onda se propaga, trazando una forma helicoidal.", + rhcp: "Polarización circular a derechas (RHCP): El vector de campo eléctrico gira en sentido horario a lo largo de la dirección de propagación (siguiendo la regla de la mano derecha).", + lhcp: "Polarización circular a izquierdas (LHCP): El vector de campo eléctrico gira en sentido antihorario a lo largo de la dirección de propagación.", + application: + "Aplicación: La polarización circular se utiliza ampliamente en las comunicaciones por satélite porque resiste la rotación de Faraday (el cambio del plano de polarización cuando las señales atraviesan la ionosfera) y no requiere una alineación precisa entre las antenas transmisora y receptora.", + matchRhcpToRhcp: "Transmisión RHCP -> Recepción RHCP:", + matchRhcpToLhcp: + "Transmisión RHCP -> Recepción LHCP (polarización cruzada):", + matchCircularToLinear: + "Transmisión circular -> Recepción lineal (V/H):", + bestMatch: "Coincidencia óptima", + highLoss: "Pérdida alta", + loss3db: "Pérdida de 3dB", + rhcpToLhcpNote: + "Pérdida teóricamente infinita; en la práctica, normalmente >20dB.", + reflectionNote: + "Nota: Cuando las señales con polarización circular se reflejan en una superficie, su sentido de giro suele invertirse (p. ej., RHCP se convierte en LHCP).", + circularToLinearNote: + "Esta es una estrategia habitual para trabajar satélites (si no se desea construir complejas antenas de polarización circular con seguimiento), pero se pierde la mitad de la señal.", + physicsContent: + "En las antenas helicoidales, cuando la circunferencia de la hélice se aproxima a una longitud de onda, la antena opera en modo axial. La antena radia intensamente a lo largo del eje de la hélice, formando un haz direccional con una polarización circular casi perfecta.", + physicsQuote: + '"El modo axial de radiación... la radiación máxima se produce a lo largo del eje de la hélice... La polarización es circular."', + }, + + ellipticalPolarization: { + metaTitle: "Polarización elíptica | Visualización de radioafición", + metaDescription: + "Demostración 3D de la forma general de polarización: la polarización elíptica, entre la lineal y la circular.", + metaKeywords: "polarización elíptica, polarización, propagación de radio", + title: "Polarización elíptica", + about: + "Esta visualización demuestra la polarización elíptica. Es la forma general de polarización. Cuando las componentes vertical y horizontal tienen amplitudes diferentes, o la diferencia de fase no es 0^\\circ, 90^\\circ ni 180^\\circ, el resultado es una polarización elíptica.", + sliderNote: + "Ajusta los controles deslizantes de abajo para observar cómo los distintos parámetros afectan a la forma de la polarización:", + linear: + "Polarización lineal: La diferencia de fase es 0^\\circ o 180^\\circ.", + circular: + "Polarización circular: Amplitudes V/H iguales con una diferencia de fase de 90^\\circ.", + elliptical: + "Polarización elíptica: Todos los demás casos.", + generalRulesTitle: "Reglas generales para la coincidencia de polarización", + generalRules: + "En la práctica, la mayoría de las señales de radio adquieren cierta polarización elíptica durante la propagación (debido a reflexiones, refracción, etc.). La pérdida por desadaptación de polarización depende de las diferencias de relación axial y ángulo de inclinación entre las dos ondas con polarización elíptica.", + physicsContent: + "La polarización elíptica es la forma general de polarización de las ondas electromagnéticas; la lineal y la circular son casos particulares. Matemáticamente, es la superposición de dos componentes ortogonales con polarización lineal, con una relación de amplitudes y una diferencia de fase arbitrarias. La relación axial (AR) mide el achatamiento de la elipse: AR=1 (0\\text{dB}) es circular, AR=\\infty es lineal.", + physicsQuote: + '"En el caso general, la traza de la punta del vector de campo eléctrico... forma una elipse... La relación entre el eje mayor y el eje menor se denomina relación axial."', + }, + + verticalPolarization: { + metaTitle: "Polarización vertical | Visualización de radioafición", + metaDescription: + "Demostración 3D de la propagación del campo eléctrico de una antena dipolo con polarización vertical y de los principios de coincidencia de polarización.", + metaKeywords: + "polarización vertical, dipolo, antena vertical, pérdida de polarización", + title: "Polarización vertical", + about: + "Esta visualización demuestra la propagación de ondas electromagnéticas desde una antena dipolo con polarización vertical. Observa cómo el vector de campo E oscila hacia arriba y hacia abajo (verticalmente) a medida que la onda se propaga hacia afuera.", + polarization: + "Polarización: Definida por la dirección del vector de campo E.", + verticalDipole: + "Dipolo vertical: Produce ondas con polarización vertical.", + propagation: + "Propagación: Omnidireccional en el plano horizontal (acimut).", + vToV: "TX vertical -> RX vertical:", + vToVNote: "Máxima intensidad de señal, sin pérdida de polarización.", + vToH: "TX vertical -> RX horizontal:", + crossPolarization: "Aislamiento de polarización cruzada", + vToHNote: + "Teóricamente no se recibe señal (pérdida infinita). En la práctica, la pérdida suele ser de -20dB a -30dB debido a las reflexiones y al multitrayecto.", + crossPolNote: + "Por eso estas dos polarizaciones pueden compartir la misma frecuencia sin interferencias significativas.", + vToC: "TX vertical -> RX circular:", + vToCNote: + "Una onda lineal puede descomponerse en dos ondas circulares que giran en sentidos opuestos; la antena receptora solo capta una componente y pierde la mitad de la potencia (3dB). A pesar de la pérdida, esta combinación es aceptable en ciertos escenarios (p. ej., comunicaciones móviles).", + physicsContent: + 'Según la teoría de antenas, un dipolo vertical produce un campo E con únicamente componente vertical. Su intensidad de radiación es uniforme en el plano horizontal, formando un diagrama omnidireccional. Esto significa que el "vector de campo E" (vertical) es geométricamente ortogonal a la "dirección del lóbulo principal de radiación" (plano horizontal).', + physicsQuote: + '"El diagrama de radiación de un dipolo vertical es omnidireccional en el plano horizontal... Las líneas de campo E son verticales, paralelas al eje del dipolo."', + }, + + horizontalPolarization: { + metaTitle: "Polarización horizontal | Visualización de radioafición", + metaDescription: + "Demostración 3D de la propagación del campo eléctrico de una antena dipolo con polarización horizontal y de los principios de coincidencia de polarización.", + metaKeywords: + "polarización horizontal, dipolo, antena horizontal, pérdida de polarización", + title: "Polarización horizontal", + about: + "Esta visualización demuestra la propagación de ondas electromagnéticas desde una antena dipolo con polarización horizontal. Observa cómo el vector de campo E oscila de izquierda a derecha (horizontalmente) a medida que la onda se propaga.", + polarization: + "Polarización: Definida por la dirección del vector de campo E.", + horizontalDipole: + "Dipolo horizontal: Produce ondas con polarización horizontal.", + propagation: + "Propagación: Más intensa en la dirección perpendicular al hilo, pero normalmente nos centramos en sus características horizontales respecto al suelo.", + hToH: "TX horizontal -> RX horizontal:", + hToHNote: "Máxima intensidad de señal.", + hToV: "TX horizontal -> RX vertical:", + hToVNote: + "Enorme pérdida de señal (aproximadamente -20dB a -30dB). En DX de HF, la reflexión ionosférica suele cambiar la polarización, por lo que este efecto es menos severo que en los enlaces de línea de vista de VHF/UHF, donde resulta crítico.", + physicsContent: + "Una antena dipolo horizontal produce un vector de campo E paralelo al suelo. Su diagrama de radiación en el espacio libre es un toroide alrededor del hilo, pero la reflexión en el suelo suele crear lóbulos inclinados hacia arriba. La polarización horizontal es popular para DX en HF porque es menos susceptible al ruido del suelo que la polarización vertical.", + physicsQuote: + '"Las antenas con polarización horizontal son menos susceptibles al ruido artificial... El factor de reflexión del suelo refuerza la señal en ciertos ángulos de despegue."', + }, + + dipoleAntenna: { + metaTitle: "Antena dipolo | Visualización de radioafición", + metaDescription: + "Visualización 3D de la estructura de la antena dipolo, el principio de la onda estacionaria y el diagrama de radiación.", + metaKeywords: + "antena dipolo, media onda, onda estacionaria, diagrama de radiación, V invertida", + title: "Antena dipolo", + overviewTitle: "Acerca de esta demostración", + overview: + "Esta página ofrece una simulación 3D interactiva de una antena dipolo. Puedes ajustar la longitud de la antena (0.5λ, 1.0λ, 1.5λ) para observar los cambios en la distribución de la onda estacionaria, o activar el modo 'V invertida' para ver cómo la deformación afecta a la radiación.", + structure: + "Simulación de la estructura: Los cilindros rojo y azul representan los brazos del dipolo, con un punto de alimentación blanco en el centro. La línea amarilla visualiza dinámicamente la onda estacionaria de corriente.", + halfWave: + "Prueba esto: Ajusta la longitud al valor estándar de 0.5λ para ver las características clásicas del dipolo de media onda. Después cambia a 1.5λ para observar la división del diagrama.", + principleTitle: "Principio de funcionamiento: la onda estacionaria", + principle: + "La curva amarilla de la simulación muestra la distribución de la onda estacionaria de corriente. Observa la posición de los vientres (máximos) y los nodos (ceros) de corriente.", + principleDetails: { + ends: "Extremos: Siempre son nodos de corriente (0), cumpliendo las condiciones físicas de contorno.", + center: + "Punto de alimentación: Vientre de corriente (máximo) en media onda, lo que corresponde a una impedancia baja (73Ω); nodo (0) en onda completa, lo que significa una impedancia alta.", + impedance: + "Pista sobre la impedancia: Observando la magnitud de la corriente en el punto de alimentación puedes inferir intuitivamente la impedancia (corriente alta = Z baja, corriente baja = Z alta).", + }, + patternTitle: "Fórmula del diagrama de radiación (modelo matemático)", + patternIntro: + "La malla 3D verde visualiza la intensidad de radiación en campo lejano F(\\theta) calculada con la fórmula de abajo. Fíjate en cómo 'respira' al cambiar la longitud L.", + halfWaveSpecialCase: + "Caso particular del dipolo de media onda (L=\\lambda/2 \\Rightarrow kL/2 = \\pi/2)", + fullWaveTitle: "¿Por qué no un dipolo de onda completa?", + fullWaveIntro: + "Si ajustas la longitud a 1.0\\lambda en el simulador:", + fullWavePoints: { + pattern: + "Diagrama: Más estrecho pero todavía en forma de 8, con una ganancia ligeramente mayor.", + impedance: + "Desastre de impedancia: En el centro, la corriente es 0 (nodo). Esto implica que la impedancia de entrada Z tiende a infinito (miles de ohmios).", + conclusion: + "Conclusión: Un equipo de 50Ω no puede alimentar directamente un dipolo de onda completa. Requiere alimentación por el extremo (EFHW) o una adaptación especial.", + }, + impedanceTitle: "Características de impedancia", + impedance73: + "73Ω: Dipolo de media onda en el espacio libre.", + impedance50: + "50Ω: Al montarlo en 'V invertida' (ángulo de 90-120°), la impedancia baja a ~50Ω, lo que permite la conexión directa del coaxial sin transformador balun (aun así se recomienda un balun 1:1 por equilibrio).", + physicsContent: + "La distribución de corriente en una antena dipolo delgada es aproximadamente sinusoidal, con nulos en los extremos. Esta distribución de onda estacionaria genera la radiación del campo electromagnético.", + physicsQuote: + '"Se supone que la distribución de corriente en la antena... es sinusoidal... Esta aproximación es bastante precisa para dipolos delgados."', + }, + + gpAntenna: { + metaTitle: "Antena de plano de tierra | Visualización de radioafición", + metaDescription: + "Demostración 3D de la estructura de monopolo vertical de la antena GP, la función de los radiales y el diagrama de radiación.", + metaKeywords: + "antena GP, antena Ground Plane, monopolo vertical, radiales, cuarto de longitud de onda", + title: "Antena de plano de tierra", + about: + "La antena GP (Ground Plane) es la antena vertical más básica y común. Consta de un radiador vertical de un cuarto de longitud de onda y varios radiales (normalmente 3-4) horizontales o inclinados hacia abajo.", + theoryAnalysis: "Análisis teórico", + theoryContent: + "La antena GP (Ground Plane) se basa en la teoría de imágenes. El plano de tierra (los radiales) actúa como un espejo electromagnético, creando una imagen virtual del radiador bajo tierra para formar un dipolo vertical completo. La combinación del radiador físico de 1/4 de onda y la imagen virtual logra la eficiencia de una antena de tamaño completo. Inclinar los radiales hacia abajo hasta ~135° eleva la impedancia del punto de alimentación a 50Ω para una adaptación perfecta con el cable coaxial. Su bajo ángulo de despegue la convierte en una herramienta formidable para la comunicación DX.", + formulaRadiation: "Diagrama de radiación (monopolo ideal)", + formulaImpedance: "Adaptación de impedancia (radiales a 135°)", + comparisonTable: { + title: "Comparación: GP (vertical) vs dipolo (horizontal)", + headers: [ + "Característica", + "Antena GP (vertical)", + "Dipolo (horizontal)", + ], + rows: [ + { + feature: "Direccionalidad", + gp: "Omnidireccional (360°)", + dipole: "Bidireccional (en forma de 8)", + }, + { + feature: "Ángulo de despegue", + gp: "Bajo (bueno para DX)", + dipole: "Alto (bueno para NVIS)", + }, + { + feature: "Nivel de ruido", + gp: "Alto (propensa al ruido)", + dipole: "Bajo (más silenciosa)", + }, + { + feature: "Instalación", + gp: "Huella reducida", + dipole: "Requiere un gran vano", + }, + ], + }, + physicsContent: + "El funcionamiento de una antena GP depende de la teoría de imágenes. Un plano de tierra perfectamente conductor actúa como un espejo electromagnético, creando bajo tierra una imagen con la misma dirección de corriente (en fase) que el radiador vertical superior. Esto hace que un monopolo de 1/4 de onda sea equivalente en campo lejano a un dipolo de 1/2 onda. Los radiales simulan este plano conductor.", + physicsQuote: + '"El monopolo sobre un plano de tierra crea una corriente imagen... La combinación de la fuente real y la corriente imagen produce los mismos campos que un dipolo en el hemisferio superior."', + }, + + invertedVAntenna: { + metaTitle: "Antena V invertida | Visualización de radioafición", + metaDescription: + "Demostración 3D de la estructura y las características de radiación de la antena V invertida, explicando su impedancia y sus ventajas de instalación.", + metaKeywords: + "antena V invertida, dipolo, adaptación de impedancia, antena portable", + title: "Antena V invertida", + about: + "La V invertida es esencialmente un dipolo con el centro elevado y los extremos caídos. Su instalación sencilla (solo necesita un mástil de apoyo) la convierte en una de las antenas de HF más populares entre los radioaficionados.", + theoryAnalysis: "Análisis teórico", + theoryContent: + 'La V invertida es el "Ferrari de los pobres". Sus ventajas principales son su extrema sencillez y su adaptación natural de impedancia. Al requerir un solo mástil central, los hilos descienden de forma natural. Cuando el ángulo del vértice está entre 90° y 120°, la impedancia del punto de alimentación baja de los 73Ω del dipolo a aproximadamente 50Ω, lo que permite la conexión directa al cable coaxial sin unidades de adaptación. Además, su componente de polarización vertical refuerza la radiación omnidireccional, haciéndola excelente para NVIS.', + formulaImpedance: "Impedancia de entrada (ángulo de 90°-120°)", + comparisonTable: { + title: "Comparación: V rígida vs V invertida", + headers: [ + "Característica", + "V positiva (rígida)", + "V invertida (de hilo)", + ], + rows: [ + { + feature: "Material", + rigid: "Tubo de aluminio", + inverted: "Hilo", + }, + { + feature: "Soporte", + rigid: "Rotor + soporte", + inverted: "Un solo mástil", + }, + { + feature: "Aplicación", + rigid: "DX (larga distancia)", + inverted: "NVIS (regional) / portable", + }, + { + feature: "Coste", + rigid: "Alto", + inverted: "Muy bajo", + }, + ], + }, + physicsContent: + "Dejar caer los extremos del dipolo para formar una V invertida afecta tanto a su impedancia como a su diagrama de radiación. A medida que el ángulo comprendido se hace menor de 180°, la impedancia de entrada disminuye (típicamente hasta cerca de 50Ω), proporcionando una mejor adaptación al coaxial. La radiación con polarización vertical aumenta, rellenando los nulos en los extremos del dipolo y haciendo el diagrama más omnidireccional.", + physicsQuote: + '"Dejar caer los extremos del dipolo para formar una V invertida reduce la frecuencia de resonancia y la impedancia del punto de alimentación... algo más omnidireccional que un dipolo horizontal."', + }, + + moxonAntenna: { + metaTitle: "Antena Moxon | Visualización de radioafición", + metaDescription: + "Demostración 3D de la estructura compacta del rectángulo Moxon, mostrando su alta relación frente-espalda y su excelente directividad.", + metaKeywords: "antena Moxon, antena rectangular, alta relación F/B", + title: "Antena Moxon", + about: + "El rectángulo Moxon fue popularizado por Les Moxon (G6XN). Es una antena de hilo de dos elementos con las puntas de los elementos dobladas hacia adentro para formar un rectángulo.", + fbRatio: + "Excelente relación F/B: La característica principal de la Moxon es su altísima relación frente-espalda, que suprime eficazmente las interferencias procedentes de la parte trasera.", + compact: + "Tamaño compacto: Su envergadura es de aproximadamente el 70% de la de una Yagi de tamaño completo para la misma frecuencia, ideal para ubicaciones con espacio limitado.", + bandwidth: + "Gran ancho de banda: Mantiene una buena ROE en un amplio rango de frecuencias.", + applicationTitle: "Aplicaciones", + foxHunting: + "Radiogoniometría: Su excelente directividad y relación F/B la hacen popular para la caza del zorro.", + limitedSpace: + "DX con espacio limitado: Cuando el espacio del balcón o de la azotea no basta para una Yagi, la Moxon es una excelente alternativa.", + physicsContent: + 'El rectángulo Moxon utiliza principios de "acoplamiento crítico". Al doblar las puntas de los elementos hacia adentro con una separación específica, se refuerza el acoplamiento mutuo entre el elemento activo y el reflector. Esta geometría produce un diagrama cardioide casi perfecto, que mantiene la ganancia frontal mientras elimina en gran medida la radiación trasera (alta relación F/B).', + physicsQuote: + '"El rectángulo Moxon es una direccional de 2 elementos con las puntas de los elementos plegadas una hacia la otra... maximizando la relación frente-espalda."', + theoryAnalysis: "Análisis teórico", + theoryContent: + "Aunque el campo de radiación preciso de una antena Moxon requiere un análisis numérico complejo (como el modelado NEC), su característico diagrama cardioide puede aproximarse con la siguiente función simplificada:", + formulaRadiation: "Fórmula del diagrama de radiación (modelo matemático)", + formulaAngle: + "Donde \\theta es el ángulo de acimut (0^\\circ es el frente).", + formulaShapeFactor: + "A es el factor de forma (típicamente A \\approx 1.3).", + theorySummaryTable: { + title: "Moxon vs Yagi de 2 elementos", + headers: ["Característica", "Rectángulo Moxon", "Yagi de 2 elementos"], + rows: [ + { + feature: "Tamaño", + moxon: "Pequeño (rectángulo compacto)", + yagi: "Grande (lineal)", + }, + { + feature: "Relación F/B", + moxon: "Muy alta (>20dB)", + yagi: "Media (10-15dB)", + }, + { + feature: "Ganancia", + moxon: "Moderada (~5.5 dBi)", + yagi: "Ligeramente mayor (~6.0 dBi)", + }, + { + feature: "Adaptación", + moxon: "Directa a 50Ω", + yagi: "Requiere red de adaptación", + }, + { + feature: "Ancho de banda", + moxon: "Muy amplio", + yagi: "Más estrecho", + }, + ], + }, + }, + + positiveVAntenna: { + metaTitle: "Antena V positiva | Visualización de radioafición", + metaDescription: + "Demostración 3D de la estructura de la antena V positiva, mostrando por qué es ideal para instalaciones en azoteas con espacio limitado.", + metaKeywords: + "antena V positiva, dipolo, antena de azotea, antena compacta", + title: "Antena V positiva", + about: + 'La V positiva es un dipolo con los brazos inclinados hacia arriba, con forma de "V". Es lo contrario de la V invertida, que tiene el centro alto y los extremos bajos.', + structure: + "Ventaja estructural: Con los extremos elevados, los puntos de alta tensión (las puntas de la antena) quedan lejos del suelo y de los objetos cercanos, reduciendo las pérdidas dieléctricas y mejorando la seguridad.", + rotatable: + "Dipolo giratorio: En las bandas de HF, la V positiva se usa a menudo en dipolos giratorios. La forma en V reduce el radio de giro, haciendo la antena más compacta y con menor inercia de rotación.", + polarizationTitle: "Polarización y diagrama", + physicsContent: + "La V positiva aleja los puntos de alta tensión (las puntas de la antena) del suelo o de las estructuras de la azotea. Esto reduce significativamente los efectos capacitivos y las pérdidas dieléctricas causadas por los objetos cercanos, manteniendo una alta eficiencia de radiación. La forma en V modifica ligeramente el diagrama de campo lejano, rellenando los nulos del diagrama en forma de 8.", + physicsQuote: + '"Elevar los extremos del dipolo en forma de V mantiene los puntos de alta tensión alejados de estructuras con pérdidas... minimizando las pérdidas a tierra."', + + // New Content + theoryAnalysis: "Análisis teórico", + theoryContent: + "La antena V positiva es esencialmente un dipolo de media onda doblado. Al plegar los elementos hacia arriba en forma de V (típicamente 90°~120°), se alteran las características de impedancia de la antena. Mientras que un dipolo recto tiene una impedancia de unos 73Ω, la forma en V aprovecha la impedancia mutua entre los elementos para reducir la resistencia de radiación hasta cerca de 50Ω, logrando una adaptación natural con los cables coaxiales comunes (sin necesidad de acoplador). Además, la forma en V mejora la direccionalidad al rellenar los nulos en los extremos de la antena.", + impedanceMathLabel: "Impedancia con un ángulo de 120°", + comparisonTable: { + title: "Tabla comparativa", + headers: ["Característica", "V positiva (V rígida)", "V invertida"], + rows: [ + { + feature: "Forma", + posV: "V (centro bajo, extremos altos)", + invV: "∧ (centro alto, extremos bajos)", + }, + { + feature: "Impedancia", + posV: "~50Ω (adaptación natural)", + invV: "< 50Ω (suele necesitar balun)", + }, + { + feature: "Ángulo de despegue", + posV: "Bajo (bueno para DX)", + invV: "Alto (bueno para NVIS)", + }, + { + feature: "Instalación", + posV: "Rotor/tubo de aluminio (rígida)", + invV: "Un solo mástil/hilo (sencilla)", + }, + ], + }, + }, + + quadAntenna: { + metaTitle: "Antena Quad | Visualización de radioafición", + metaDescription: + "Demostración 3D de la estructura de lazo de la antena Quad, mostrando sus características de alta ganancia y bajo ángulo de radiación.", + metaKeywords: "antena Quad, antena direccional, DX, alta ganancia", + title: "Antena Quad", + about: + "La antena Quad (típicamente Cubical Quad) consta de dos o más elementos de lazo cuadrados. Fue inventada por Clarence Moore (W9LZX) en los años 40 para resolver los problemas de descarga por efecto corona a gran altitud.", + highGain: + "Alta ganancia: Una Quad de 2 elementos suele igualar la ganancia de una Yagi de 3 elementos.", + lowNoise: + "Bajo ruido: La estructura de lazo cerrado ayuda a reducir el ruido estático durante la recepción; normalmente suena más silenciosa que una Yagi.", + theoryAnalysis: "Análisis teórico", + theoryContent: + "El lazo de onda completa (Quad) es esencialmente un conjunto de dos dipolos plegados. Cuando el perímetro es de aproximadamente 1 longitud de onda (\\lambda), la distribución de corriente forma una onda estacionaria, con radiación máxima perpendicular al plano del lazo (broadside). Esta estructura de lazo cerrado proporciona mayor ganancia (aprox. 3.3 dBi) que un dipolo de media onda y está puesta a tierra en CC, lo que reduce eficazmente el ruido estático por precipitación para una recepción más silenciosa.", + formulaLoopLength: "Perímetro del lazo", + formulaImpedance: "Impedancia de entrada (lazo único)", + comparisonTable: { + title: "Tabla comparativa", + headers: ["Característica", "Lazo pequeño", "Lazo de onda completa"], + rows: [ + { + feature: "Tamaño (perímetro)", + small: "< 0.1λ", + full: "≈ 1.0λ", + }, + { + feature: "Modelo físico", + small: "Dipolo magnético", + full: "Conjunto de dos dipolos", + }, + { + feature: "Dirección de radiación", + small: "En el plano", + full: "Perpendicular al plano (broadside)", + }, + { + feature: "Aplicación", + small: "Recepción (barra de ferrita AM)", + full: "Transmisión/DX (Quad)", + }, + ], + }, + physicsContent: + "La antena Quad es un lazo cerrado de una longitud de onda completa con una apertura de radiación más eficaz que la de un dipolo de media onda. Una Quad estándar de 2 elementos (activo + reflector) proporciona unos 7dBi de ganancia mediante acoplamiento crítico, equivalente a una Yagi de 3 elementos. Al ser un lazo cerrado puesto a tierra en CC, disipa eficazmente la estática por precipitación, lo que se traduce en un ruido de fondo menor que el de las Yagi.", + physicsQuote: + '"La configuración de lazo cerrado de la antena Quad da como resultado un Q más bajo y un mayor ancho de banda... y es menos susceptible al ruido estático."', + }, + + yagiAntenna: { + metaTitle: "Antena Yagi-Uda | Visualización de radioafición", + metaDescription: + "Demostración 3D del funcionamiento de la antena Yagi, mostrando las funciones de los directores, el elemento activo y el reflector, y su diagrama de radiación.", + metaKeywords: + "antena Yagi, antena Yagi-Uda, antena direccional, director, reflector", + title: "Antena Yagi-Uda", + about: + "La antena Yagi fue inventada por los japoneses Hidetsugu Yagi y Shintaro Uda. Es una antena de alta ganancia y gran directividad, ampliamente utilizada en comunicaciones de onda corta, recepción de TV y radar.", + theoryAnalysis: "Análisis teórico", + principle: + "Principio de funcionamiento: Mediante el acoplamiento mutuo entre los elementos parásitos (reflector y directores) y el elemento activo, se modifican las fases de las corrientes para combinar constructivamente las señales en una dirección mientras se cancelan en la opuesta.", + gain: "Ganancia: Más elementos y directores más largos significan mayor ganancia y un haz más estrecho.", + application: + "Aplicación: La antena de comunicación DX (larga distancia) más común. Concentra tu señal hacia una estación distante concreta.", + polarizationTitle: "Coincidencia de polarización", + polarizationMatch: + "Coincidencia de polarización: La mayoría de las Yagi de HF se montan horizontalmente, produciendo polarización horizontal.", + polarizationNote: + "Nota: Para la comunicación local en FM de VHF/UHF, lo habitual es el montaje vertical para coincidir con la polarización vertical de los equipos portátiles y móviles.", + physicsContent: + "La directividad de la antena Yagi proviene de la diferencia de fase entre las corrientes inducidas en los elementos parásitos (reflector y directores) y la corriente del elemento activo. El reflector suele ser algo más largo que la resonancia (inductivo), con corriente retrasada; los directores son algo más cortos (capacitivos), con corriente adelantada. Esta relación de fases provoca una interferencia constructiva hacia adelante y destructiva hacia atrás.", + physicsQuote: + '"La fase de la corriente en el elemento parásito depende de su longitud... Con la separación y la longitud adecuadas, la radiación del elemento parásito refuerza la del elemento activo en la dirección frontal."', + theoryTitle: "1. Descripción general", + theoryContent: + "La antena Yagi es un conjunto de radiación longitudinal (end-fire). Funciona induciendo corrientes en los elementos parásitos (reflectores/directores) mediante acoplamiento mutuo. El reflector es ligeramente más largo que 1/2 longitud de onda (inductivo), lo que provoca un retraso de corriente que cancela el lóbulo trasero. Los directores son más cortos (capacitivos), lo que provoca un adelanto de corriente que refuerza el haz frontal. Este control preciso de la fase logra una alta ganancia sin una red de alimentación compleja.", + formulaDriven: "Longitud del elemento activo", + formulaReflector: "Longitud del reflector (normalmente un 5% más largo)", + formulaDirector: "Longitud del director (normalmente un 5% más corto)", + theorySummaryTable: { + title: "Tabla resumen", + headers: [ + "Tipo de elemento", + "Longitud", + "Reactancia", + "Fase", + "Función", + ], + rows: [ + { + type: "Reflector", + length: "\\gt \\lambda/2", + reactance: "Inductiva (+jX)", + phase: "Retraso", + function: 'Elimina la radiación trasera, actúa como "espejo"', + }, + { + type: "Elemento activo", + length: "\\approx \\lambda/2", + reactance: "Resonante (0)", + phase: "Referencia", + function: "Punto de alimentación de energía", + }, + { + type: "Director", + length: "\\lt \\lambda/2", + reactance: "Capacitiva (-jX)", + phase: "Adelanto", + function: 'Guía el haz hacia adelante, actúa como "lente"', + }, + ], + }, + }, + + endFedAntenna: { + metaTitle: + "Antena de media onda alimentada por el extremo | Visualización de radioafición", + metaDescription: + "Demostración 3D de la portabilidad de la EFHW y de sus características de resonancia multibanda, mostrando el principio del transformador de impedancia 49:1.", + metaKeywords: + "EFHW, End-Fed Half Wave, balun 49:1, antena portable, antena multibanda", + title: "Antena de media onda alimentada por el extremo", + about: + "La antena de media onda alimentada por el extremo (EFHW) es una antena multibanda muy popular, especialmente adecuada para la operación portable en el campo. Es esencialmente un hilo de longitud igual a la mitad de la longitud de onda de trabajo, alimentado por un extremo.", + impedance: + "Transformación de impedancia: Alimentar por el extremo de media onda presenta una impedancia extremadamente alta (~2000-4000 ohmios), lo que requiere un unun 49:1 o 64:1 para adaptarla a 50 ohmios.", + structure: + "Estructura: Consta principalmente de una caja de unun, un hilo radiador largo y cable coaxial. La malla del coaxial suele servir de contrapeso.", + multiband: + "Multibanda: Resuena de forma natural en las frecuencias armónicas, funcionando en varias bandas (p. ej., 40m, 20m, 15m, 10m) sin acoplador.", + polarizationTitle: "Polarización y aplicaciones", + physicsContent: + "En resonancia, el punto de alimentación de la EFHW se encuentra en un vientre de tensión (tensión máxima) y un nodo de corriente (corriente mínima). Según Z=V/I, esto significa una impedancia de entrada extremadamente alta (teóricamente infinita, en la práctica ~2500-5000Ω). Se requiere un unun de banda ancha de alta relación (49:1 o 64:1) para transformarla a 50Ω.", + physicsQuote: + '"Una antena de media onda alimentada por el extremo presenta una impedancia muy alta en el punto de alimentación... y requiere una red de adaptación (unun) para transformar esa impedancia alta a 50 ohmios."', + theoryAnalysis: "Análisis teórico", + theoryVoltageFeed: + "Alimentación en tensión: Alimentar por el extremo del hilo (tensión alta, corriente baja) da como resultado una impedancia muy alta (2000\\Omega \\sim 4000\\Omega). Un transformador con una alta relación de espiras (49:1 o 64:1) es esencial para una transferencia de potencia eficiente.", + harmonics: + "Resonancia armónica: Un hilo de media onda para la frecuencia fundamental (f_0) también resuena en los múltiplos enteros (2f_0, 3f_0...). Esto permite la operación multibanda (p. ej., 40m/20m/10m) con un solo hilo y sin acoplador.", + formulaRadiation: "Fórmula del diagrama de radiación (armónicos)", + oddHarmonics: "Para armónicos impares (n=1, 3, 5...):", + evenHarmonics: "Para armónicos pares (n=2, 4, 6...):", + patternDesc: + "A medida que aumenta el orden del armónico n, el lóbulo único se divide en múltiples lóbulos y la dirección del haz principal se desplaza acercándose al eje del hilo.", + commonMode: + "Corriente de modo común: La malla del coaxial suele actuar como contrapeso. Se recomienda encarecidamente un choque de modo común para prevenir la RFI.", + }, + + longWireAntenna: { + metaTitle: "Antena de hilo largo | Visualización de radioafición", + metaDescription: + "Demostración 3D de las características de radiación multilobulada de la antena de hilo largo y de cómo la longitud afecta a la direccionalidad.", + metaKeywords: + "antena de hilo largo, hilo aleatorio, diagrama multilobulado, onda estacionaria", + title: "Antena de hilo largo", + about: + "Una antena de hilo largo es aquella que mide al menos una longitud de onda (normalmente mucho más). A diferencia de un dipolo de media onda, su diagrama de radiación se vuelve complejo a medida que aumenta la longitud.", + gain: "Ganancia y directividad: A medida que aumenta la longitud de la antena (en longitudes de onda), los lóbulos principales se alinean más con el eje del hilo y la ganancia aumenta.", + lobes: + "Multilobulada: Las antenas de hilo largo producen múltiples lóbulos de radiación. Cuanto más largo es el hilo, más lóbulos aparecen.", + ground: + "Sistema de tierra: Para los hilos largos no resonantes (como el hilo aleatorio o Random Wire), un buen sistema de tierra es esencial, ya que forma parte del sistema de antena.", + physicsContent: + "La distribución de corriente en un hilo largo se trata normalmente como una onda estacionaria (si está abierto en el extremo) o como una onda viajera (si está terminado con una carga). Para un hilo largo abierto en el extremo, el diagrama de radiación es característicamente multilobulado.", + physicsQuote: + '"A medida que el hilo se hace más largo, los lóbulos principales de radiación se alinean más estrechamente con el hilo... creando un efecto direccional a lo largo del eje del hilo."', + theoryTitle: "Análisis teórico", + theoryDesc: + "La antena de hilo largo, sobre todo cuando opera con varias longitudes de onda, presenta un diagrama de radiación complejo gobernado por la distribución de la onda estacionaria a lo largo del hilo.", + theoryFormulaIntro: + "Para una antena de hilo largo de onda estacionaria de longitud L con un número impar de semilongitudes de onda (n impar), el diagrama de radiación del campo eléctrico normalizado E(\\theta) viene dado por:", + theoryFormulaExpl: + "Donde \\theta es el ángulo respecto al eje del hilo. En nuestra simulación modelamos un hilo de longitud L = 2.5\\lambda, lo que corresponde a:", + theoryResult: + "Como n=5 es un número impar, el término \\cos(\\frac{5\\pi}{2} \\cos \\theta) se convierte en \\cos(0) = 1 cuando \\theta = 90^\\circ. Esto explica la presencia de un lóbulo transversal perpendicular al hilo, que es una característica distintiva de las antenas de onda estacionaria con armónicos impares.", + }, + + windomAntenna: { + metaTitle: "Antena Windom (OCFD) | Visualización de radioafición", + metaDescription: + "Visualización 3D de la estructura de alimentación descentrada de la antena Windom (OCFD), sus principios de adaptación y su operación multibanda.", + metaKeywords: + "antena Windom, OCFD, dipolo alimentado fuera del centro, balun 4:1, antena multibanda", + title: "Antena Windom (Windom / OCFD)", + overviewTitle: "Acerca de esta demostración", + overview: + "Esta página demuestra la antena Windom, también conocida como dipolo alimentado fuera del centro (OCFD). Al desplazar el punto de alimentación fuera del centro, obtenemos capacidad multibanda sin una pérdida de eficiencia significativa. Su estructura asimétrica es su rasgo distintivo.", + structure: + "Simulación de la estructura: El punto de alimentación (caja blanca) se sitúa aproximadamente al 33% de la longitud total. Este diseño descentrado cambia fundamentalmente la distribución de la impedancia.", + principleTitle: "¿Por qué el 33%? (El punto mágico)", + principleIntro: + "Si observamos la distribución de la onda estacionaria de corriente (curva amarilla) en diferentes frecuencias, descubrimos que el punto a 1/3 es una ubicación mágica:", + principlePoints: { + fundamental: + "Fundamental (n=1): Corriente moderada, impedancia de aprox. 200-300Ω.", + harmonics2: + "2.º armónico (n=2): El centro es un nodo de corriente (impedancia infinita), pero a 1/3 la corriente sigue siendo moderada (impedancia ~200-300Ω).", + harmonics4: + "4.º armónico (n=4): El punto a 1/3 mantiene una corriente y una impedancia moderadas.", + }, + principleConclusion: + "Conclusión: Con un solo punto de alimentación podemos lograr impedancias similares en bandas de armónicos pares como 40m, 20m y 10m.", + matchingTitle: "Sistema de adaptación: balun 4:1", + matchingIntro: + "Dado que la impedancia del punto de alimentación (~200-300Ω) es mucho mayor que la del cable coaxial de 50Ω, necesitamos una transformación de impedancia:", + matchingConclusion: + "Por lo tanto, la antena Windom debe usarse con un balun de corriente 4:1. Esto es distinto del transformador 49:1 utilizado en la EFHW.", + patternTitle: "Diagrama de radiación", + patternIntro: + "El diagrama de radiación (malla verde) está determinado principalmente por la longitud física total de la antena. En la frecuencia fundamental es similar al de un dipolo (en forma de 8). En los armónicos superiores se divide en múltiples lóbulos.", + patternPoints: { + fundamental: + "Fundamental: Un 8 distorsionado, similar a un dipolo.", + harmonic: + "Armónicos: Multilobulado, con mayor directividad.", + }, + comparisonTitle: "Windom vs EFHW vs dipolo", + tableHead: { + feature: "Característica", + dipole: "Dipolo", + windom: "Windom (OCFD)", + efhw: "Alimentada por el extremo (EFHW)", + }, + tableRow: { + feedPos: "Punto de alimentación", + multiBand: "Multibanda", + match: "Adaptación", + ground: "Puesta a tierra", + cons: "Inconvenientes", + }, + tableCell: { + dipoleFeed: "Centro (50%)", + windomFeed: "Descentrado (33%)", + efhwFeed: "Extremo (0%)", + dipoleBand: "Pobre (fundamental + armónicos impares)", + windomBand: "Buena (fundamental + armónicos pares)", + efhwBand: "Excelente (fundamental + todos los armónicos)", + dipoleMatch: "Balun 1:1 (opcional)", + windomMatch: "Balun 4:1 (obligatorio)", + efhwMatch: "Transformador 49:1 (obligatorio)", + dipoleGround: "No necesaria", + windomGround: "Recomendada (contra el modo común)", + efhwGround: "Necesaria (contrapeso)", + dipoleCons: "Monobanda", + windomCons: "Huecos en los armónicos", + efhwCons: "Altas pérdidas en el transformador", + }, + comparisonSummary: + "Resumen: La antena Windom es un compromiso entre eficiencia y comodidad. En general es más eficiente que la EFHW, pero requiere una mejor supresión del ruido de modo común.", + misconceptionTitle: "Conceptos erróneos comunes", + misconceptionIntro: + "Muchos principiantes creen erróneamente que desplazar el punto de alimentación hace que el diagrama se 'incline hacia un lado'. Esto es incorrecto.", + misconceptionPhysicsTitle: "Reglas físicas", + misconceptionPhysics: + "La forma de la onda estacionaria está determinada por la longitud total del hilo y la frecuencia. La corriente debe ser cero en los extremos independientemente del punto de alimentación. Por lo tanto, la forma de la onda estacionaria y el diagrama de radiación permanecen sin cambios.", + misconceptionFeedTitle: "Papel del punto de alimentación", + misconceptionFeed: + "Desplazar el punto de alimentación solo selecciona la impedancia:", + misconceptionFeedLow: "Alimentar en el vientre = impedancia baja (dipolo)", + misconceptionFeedHigh: + "Alimentar en el nodo = impedancia alta (alimentada por el extremo)", + misconceptionFeedMid: + "Alimentar en la pendiente media = impedancia media (Windom)", + misconceptionConclusion: + "El punto de alimentación determina la ROE, no la direccionalidad.", + misconceptionExTitle: "Excepción práctica", + misconceptionEx: + "Si el balun es deficiente y permite corriente de modo común, la línea de alimentación se convierte en parte del radiador, lo que distorsiona el diagrama.", + polarizationTitle: "Características de polarización", + polarizationIntro: + "La antena Windom tiene **polarización lineal** (normalmente horizontal). **NO** es de polarización elíptica ni circular.", + polarizationReason1Title: "1. Física", + polarizationReason1: + "La polarización elíptica requiere dos componentes ortogonales de campo E con un desfase (p. ej., una antena helicoidal). Una Windom es esencialmente un solo hilo. El vector de campo eléctrico siempre vibra en paralelo al hilo.", + polarizationReason2Title: "2. Efectos del montaje", + polarizationReason2List: { + horizontal: + "Montaje horizontal: Produce polarización lineal horizontal pura.", + invertedV: + "Montaje en V invertida: Sigue siendo lineal. Sin embargo, los elementos inclinados introducen una componente vertical que rellena los nulos axiales (factor de relleno δ ≈ 0.2), haciendo el diagrama más omnidireccional (en forma de cacahuete).", + sloper: + "Montaje en sloper (inclinado): Produce polarización lineal inclinada (vibra a lo largo de una línea diagonal, sin rotar).", + }, + polarizationExceptionTitle: "3. La única excepción (interferencia)", + polarizationException: + "Solo una **corriente de modo común** severa (un balun deficiente que hace radiar la línea de alimentación) puede mezclar las ondas verticales de la línea con las ondas horizontales del hilo, dando lugar a una polarización desordenada. Pero esto se considera **distorsión de señal/RFI**, no una característica de diseño.", + physicsContent: + "La antena Windom aprovecha la propiedad de que la impedancia es similar aproximadamente al 33% de la longitud para varias frecuencias armónicas. Esto permite la operación multibanda con un solo punto de alimentación y un balun 4:1.", + physicsQuote: + '"Al desplazar el punto de alimentación a una posición descentrada... la impedancia de la antena en el punto de alimentación puede hacerse manejable en varias bandas armónicas."', + }, + magneticLoopAntenna: { + metaTitle: "Antena de lazo magnético | Visualización de radioafición", + metaDescription: + "Visualización 3D de la antena de lazo magnético (lazo pequeño). Explora su alto Q, su ancho de banda estrecho y sus nulos profundos para el rechazo del ruido.", + metaKeywords: + "lazo magnético, Magnetic Loop, lazo pequeño, dipolo magnético, alto Q, antirruido, antena de lazo", + title: "Antena de lazo magnético", + overviewTitle: "Acerca de esta demostración", + overview: + "Esta página demuestra la antena de lazo magnético, también conocida como antena de lazo pequeño. Es una antena eléctricamente pequeña (C \\lt \\lambda/10).", + structure: + "Estructura: Normalmente una bobina de una o varias espiras montada verticalmente, sintonizada mediante un condensador variable en serie en la parte superior o inferior. Un método de alimentación habitual utiliza un lazo de acoplamiento más pequeño.", + features: + "Características: Menor eficiencia, pero un factor Q extremadamente alto y un ancho de banda estrecho. Su rasgo más famoso es su excelente capacidad de rechazo del ruido.", + physicsModelTitle: "Modelo físico: el dipolo magnético", + physicsModel: + "La antena de lazo pequeño es físicamente equivalente a un dipolo magnético. Como sus dimensiones son mucho menores que la longitud de onda, se supone que la corriente I en el lazo es uniforme (a diferencia de una antena dipolo).", + fieldFormulaTitle: "Fórmula del campo eléctrico en campo lejano", + fieldFormulaDesc: + "La componente del campo eléctrico en campo lejano E_\\phi en coordenadas esféricas es:", + paramEta: "\\eta \\approx 377\\Omega (impedancia de onda)", + paramK: "k = 2\\pi/\\lambda (número de onda)", + paramI: "I es la corriente del lazo", + paramA: "A es el área del lazo", + paramTheta: "\\theta es el ángulo respecto al eje del lazo (eje Z)", + patternTitle: "Diagrama de radiación", + patternDesc: + "La función de directividad es F(\\theta) = \\sin\\theta.", + patternNull: + "Nulos: La radiación es nula a lo largo del eje del lazo (perpendicular al plano del lazo).", + patternMax: + "Máximo: La radiación es máxima en el plano del lazo (mirando el lazo de canto).", + advantageTitle: "Rechazo del ruido mediante nulos profundos", + advantageDesc: + "La característica más valiosa del lazo magnético son sus nulos profundos. Girando la antena para situar una fuente de interferencia en el nulo (a lo largo del eje), el ruido puede reducirse en 20-30dB.", + physicsContent: + "La antena de lazo magnético radia principalmente componentes de campo magnético en el campo cercano. En el campo lejano, su componente de campo eléctrico es horizontal (dirección \\phi) y su diagrama de radiación tiene forma de toroide con nulos a lo largo del eje.", + physicsQuote: + '"La antena de lazo pequeño es equivalente a un dipolo magnético... tiene un nulo a lo largo de su eje y radiación máxima en el plano del lazo."', + }, + hb9cvAntenna: { + title: "Antena HB9CV", + metaTitle: + "Visualización 3D de la antena HB9CV - Principio del conjunto en fase", + metaDescription: + "Visualización 3D interactiva de la antena HB9CV. Explora su singular principio de desfase, su diagrama de radiación cardioide y su alta relación frente-espalda.", + metaKeywords: + "antena HB9CV, conjunto en fase, antena direccional, radioafición, simulación 3D", + about: + "La antena HB9CV es un clásico conjunto en fase de 2 elementos diseñado por el radioaficionado suizo Rudolf Baumgartner (HB9CV) en los años 50. A diferencia de una antena Yagi-Uda, en la que solo se alimenta un elemento, los dos elementos de la HB9CV son activos. Se alimentan con igual amplitud pero con una diferencia de fase específica, lo que da como resultado una ganancia superior y una notable relación frente-espalda para una longitud de boom tan corta.", + structureTitle: "Estructura", + structureContent: + "Dos elementos activos conectados por una línea de desfase.", + phaseTitle: "Desfase", + phaseContent: + "Utiliza un desfase de 225 grados para obtener un diagrama cardioide.", + phaseFront: "Fase espacial + fase de línea", + phaseRear: "Cancelación en la parte trasera", + formulaTitle: "Fórmula del diagrama", + formulaIntro: "Aproximación del factor de conjunto:", + afDef: "k=número de onda, d=separación, theta=ángulo", + paramK: "k = 2pi/lambda", + paramD: "d ~ lambda/8", + paramDelta: "delta ~ 225 deg", + patternTitle: "Diagrama de radiación", + patternContent: + "Diagrama cardioide con un nulo profundo en la parte trasera.", + comparisonTitle: "HB9CV vs Yagi", + comparisonTable: { + headers: { + feature: "Característica", + hb9cv: "HB9CV", + yagi: "Yagi (2 el.)", + }, + rows: { + gain: { feature: "Ganancia", hb9cv: "Mayor", yagi: "Menor" }, + fbRatio: { feature: "Relación F/B", hb9cv: "Alta", yagi: "Moderada" }, + bandwidth: { + feature: "Ancho de banda", + hb9cv: "Amplio", + yagi: "Estrecho", + }, + feed: { feature: "Alimentación", hb9cv: "En fase", yagi: "Sencilla" }, + }, + }, + physicsContent: + "La HB9CV demuestra el principio del conjunto en fase, en el que controlar la fase de cada elemento permite conformar el haz sin necesidad de elementos parásitos pasivos.", + physicsQuote: + "Los conjuntos en fase son la base de los sistemas modernos de radar y de conformación de haz.", + }, + electromagneticPropagation: { + metaTitle: "Propagación electromagnética | Visualización de radioafición", + metaDescription: + "Visualización 3D de la propagación de ondas electromagnéticas en distintas bandas (HF/UV), demostrando los principios de la onda terrestre, la onda ionosférica y la reflexión ionosférica.", + metaKeywords: + "propagación electromagnética, onda terrestre, onda ionosférica, salto ionosférico, HF, UV", + title: "Propagación electromagnética", + hudTitle: "SISTEMA DE SIMULACIÓN DE RADIO", + systemStatus: { + online: "SISTEMA: EN LÍNEA", + ionosphereStable: "IONOSFERA: ESTABLE", + transmissionActive: "ESTADO TX: ACTIVO", + }, + geoInfo: { + latitude: "LAT", + longitude: "LON", + altitude: "ALT", + }, + controls: { + title: "CONSOLA PRINCIPAL", + mode: { + hf: "HF (onda corta)", + uv: "UV (línea de vista)", + }, + frequency: "FRECUENCIA TX", + elevation: "ELEVACIÓN TX", + ionosphereHeight: "ALTURA IONO", + }, + metrics: { + snr: "SNR", + ber: "BER", + }, + legend: { + title: "DIAGNÓSTICO DE SEÑAL", + groundWave: "Onda terrestre (superficie)", + skyWave: "Onda ionosférica (reflexión)", + scatter: "Dispersión secundaria", + }, + }, +} satisfies typeof import("~/locales/zh/demos").default; diff --git a/app/locales/es/index.ts b/app/locales/es/index.ts new file mode 100644 index 0000000..f5f471f --- /dev/null +++ b/app/locales/es/index.ts @@ -0,0 +1,6 @@ +import type { ResourceLanguage } from "i18next"; +import common from "./common"; +import demos from "./demos"; +import scene from "./scene"; + +export default { common, demos, scene } satisfies ResourceLanguage; diff --git a/app/locales/es/scene.ts b/app/locales/es/scene.ts new file mode 100644 index 0000000..0ad5815 --- /dev/null +++ b/app/locales/es/scene.ts @@ -0,0 +1,177 @@ +export default { + common: { + created: "Creado por BG8ROM - Para la educación en radioafición", + controls: { + visualization: "Visualización", + showWaves: "Mostrar ondas", + showPattern: "Mostrar diagrama", + speed: "Velocidad", + slow: "Lenta", + medium: "Media", + fast: "Rápida", + length: "Longitud (λ)", + harmonicMode: "Modo armónico", + harmonic1: "Fundamental (n=1)", + harmonic2: "2.º armónico (n=2)", + harmonic3: "3.º armónico (n=3)", + harmonic4: "4.º armónico (n=4)", + invertedV: "Modo V invertida", + download: "Descargar captura", + autoRotate: "Rotación automática", + }, + simulation: { + analysis: "Análisis de simulación", + peakGain: "Ganancia máxima", + impedance: "Impedancia", + material: "Material", + copper: "Cobre", + aluminum: "Aluminio", + stainlessSteel: "Acero inoxidable", + groundHeight: "Altura sobre el suelo (λ)", + freeSpace: "Espacio libre", + strength: "Intensidad de campo (E·r)", + }, + }, + circularPolarization: { + title: "Polarización circular", + desc: "El vector del campo E rota durante la propagación. Común en comunicaciones espaciales.", + driven: "Elemento activo", + parasitic: "Tierra/Pasivo", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + polarization: "Polarización:", + rhcp: "RHCP", + lhcp: "LHCP", + }, + ellipticalPolarization: { + title: "Polarización elíptica", + desc: "La forma general en la que el campo E traza una elipse.", + active: "Elemento activo", + passiveOrGround: "Pasivo/Tierra", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + ampY: "Amp Y", + ampZ: "Amp Z", + phaseShift: "Desfase", + }, + gpAntenna: { + title: "Antena GP (plano de tierra)", + desc: "Un radiador vertical con radiales que actúan como plano de tierra.", + radiator: "Radiador vertical", + radials: "Radiales", + pattern: "Diagrama de radiación", + eField: "Campo E", + radialAngle: "Ángulo de radiales", + angle90: "90° (Horizontal)", + angle60: "60° (Inclinados hacia arriba)", + angle135: "135° (Caídos)", + }, + horizontalPolarization: { + title: "Polarización horizontal", + desc: "El campo E oscila horizontalmente. Común en comunicaciones DX de HF.", + active: "Elemento activo", + passiveOrGround: "Pasivo/Tierra", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + }, + invertedVAntenna: { + title: "Antena en V invertida", + desc: "Un dipolo con los extremos caídos hacia abajo. Fácil de instalar y de adaptar.", + active: "Elemento activo", + passiveOrGround: "Pasivo/Tierra", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + }, + moxonAntenna: { + title: "Antena Moxon", + desc: "Una antena directiva rectangular y compacta con alta relación F/B.", + driven: "Elemento excitado", + reflector: "Reflector", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + }, + positiveVAntenna: { + title: "Antena en V positiva", + desc: "Un dipolo con los extremos inclinados hacia arriba. Suele montarse alto en un mástil.", + active: "Elemento activo", + passiveOrGround: "Pasivo/Tierra", + pattern: "Diagrama de radiación", + strength: "Intensidad de campo", + }, + quadAntenna: { + title: "Antena Quad", + desc: "Una antena directiva formada por lazos de hilo.", + drivenLoop: "Lazo excitado", + reflectorLoop: "Lazo reflector", + pattern: "Diagrama (haces a lo largo del boom)", + strength: "Intensidad de campo", + polarization: "Polarización:", + horizontal: "Horizontal", + vertical: "Vertical", + }, + verticalPolarization: { + title: "Polarización vertical", + desc: "El campo E oscila verticalmente. Común en portátiles y estaciones base.", + active: "Elemento activo", + passiveOrGround: "Pasivo/Tierra", + pattern: "Diagrama de radiación", + eField: "Campo E", + }, + yagiAntenna: { + title: "Antena Yagi-Uda", + desc: "Alta ganancia y directividad. Usada para DX y seguimiento de satélites.", + driven: "Elemento excitado", + passive: "Reflector/Director", + pattern: "Diagrama de radiación (Pattern)", + strength: "Intensidad de campo", + }, + dipoleAntenna: { + title: "Antena dipolo", + desc: "La antena fundamental. Dos elementos de igual longitud alimentados en el centro. Base de muchas antenas complejas.
Ideal para comprender la polarización y la impedancia.", + active: "Elemento excitado", + pattern: "Diagrama de radiación (Pattern)", + }, + endFedAntenna: { + title: "Media onda alimentada en el extremo (EFHW)", + desc: "Media onda alimentada en el extremo con unun 49:1.", + radiator: "Radiador", + eField: "Campo E", + hField: "Campo H", + pattern: "Diagrama de radiación", + waves: "Intensidad de onda", + }, + longWireAntenna: { + title: "Antena de hilo largo", + desc: "Una antena más larga que una longitud de onda. Tiene un diagrama de radiación multilobulado.", + radiator: "Radiador", + eField: "Campo E", + hField: "Campo H", + pattern: "Diagrama de radiación", + waves: "Intensidad de onda", + }, + hb9cvAntenna: { + title: "Antena HB9CV", + desc: "Agrupación en fase de 2 elementos, diagrama cardioide.", + frontElement: "Frontal (excitado, -225°)", + rearElement: "Trasero (excitado, 0°)", + phaseLine: "Línea de desfase (forma de Z)", + pattern: "Diagrama cardioide", + strength: "Intensidad de campo", + }, + magneticLoopAntenna: { + title: "Antena de lazo magnético", + desc: "Una antena de lazo pequeño con nulos pronunciados en el eje. Alto Q, ancho de banda estrecho, excelente para el rechazo de ruido.
Ideal para espacios reducidos y para recibir señales débiles.", + loop: "Lazo principal", + capacitor: "Condensador de sintonía", + pattern: "Diagrama de radiación (nulo en el eje)", + + strength: "Intensidad del campo E", + }, + windomAntenna: { + title: "Antena Windom", + desc: "Dipolo alimentado fuera del centro (OCFD). Resonancia multibanda con diagramas únicos.
Popular para operaciones multibanda en HF.", + wire: "Hilo (activo)", + feed: "Punto de alimentación", + pattern: "Diagrama de radiación (Pattern)", + }, +} satisfies typeof import("~/locales/zh/scene").default; diff --git a/app/locales/index.ts b/app/locales/index.ts index 1f76fa4..ef261b1 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -1,5 +1,6 @@ import type { Resource } from "i18next"; import enUS from "./en-US"; +import es from "./es"; import zh from "./zh"; import zhHK from "./zh-HK"; @@ -7,4 +8,5 @@ export default { zh, "zh-HK": zhHK, "en-US": enUS, + es, } satisfies Resource; diff --git a/app/middleware/i18next.ts b/app/middleware/i18next.ts index f2a659e..33443f6 100644 --- a/app/middleware/i18next.ts +++ b/app/middleware/i18next.ts @@ -14,13 +14,13 @@ export const localeCookie = createCookie("lng", { const [i18nextMiddleware] = createI18nextMiddleware({ detection: { - supportedLanguages: ["zh", "zh-HK", "en-US"], + supportedLanguages: ["zh", "zh-HK", "en-US", "es"], fallbackLanguage: "zh", cookie: localeCookie, // Detect locale from URL pathname async findLocale(request) { const locale = new URL(request.url).pathname.split("/").at(1); - if (locale === "en-US" || locale === "zh-HK") { + if (locale === "en-US" || locale === "zh-HK" || locale === "es") { return locale; } return "zh"; @@ -39,7 +39,7 @@ export function getLocale(request: Request): string { // 1. Check URL first const url = new URL(request.url); const pathLocale = url.pathname.split("/")[1]; - if (pathLocale === "en-US" || pathLocale === "zh-HK") { + if (pathLocale === "en-US" || pathLocale === "zh-HK" || pathLocale === "es") { return pathLocale; } diff --git a/app/routes/api.locales.$lng.$ns.ts b/app/routes/api.locales.$lng.$ns.ts index 254d3d4..81c29cd 100644 --- a/app/routes/api.locales.$lng.$ns.ts +++ b/app/routes/api.locales.$lng.$ns.ts @@ -2,7 +2,7 @@ import { cacheHeader } from "pretty-cache-header"; import { data } from "react-router"; import resources from "~/locales"; -const supportedLngs = ["zh", "zh-HK", "en-US"] as const; +const supportedLngs = ["zh", "zh-HK", "en-US", "es"] as const; const supportedNs = ["common", "demos", "scene"] as const; type SupportedLng = (typeof supportedLngs)[number];