⚠️ Advertencia sobre Modificaciones del Core: Si bien BaP Framework permite modificar cualquier archivo en src/_main/, ten en cuenta que al actualizar a una nueva versión de BaP en el futuro, cualquier cambio manual en los archivos del núcleo se sobrescribirá y perderá. Se sugiere contactar al referente o mantenedor del framework para sugerir mejoras o cambios antes de alterar el motor localmente.

Módulo i18n.js

Motor de internacionalización en tiempo de ejecución (TreeWalker nativo) y filtro de sanitización HTML impulsado por DOMPurify.

Funciones Exportadas (export function)

1. applyI18n(callback)

Firma: applyI18n(callback?: Function): void

Propósito: Carga el diccionario correspondiente al idioma actual y recorre el DOM sustituyendo marcadores `{token.path}` en nodos de texto sin alterar escuchadores de eventos.

ParámetroTipoRequeridoDescripción
callbackFunctionOpcionalFunción ejecutada tras finalizar la sustitución de tokens i18n en el DOM.

Ejemplo de uso:

import { applyI18n } from "../../_main/i18n.js";

applyI18n(() => {
  console.log("Traducciones aplicadas correctamente al DOM.");
});

2. getI18nContent(group, item)

Firma: getI18nContent(group: string, item: string): Object|string|null

Propósito: Accede asíncronamente a un bloque o cadena específica dentro del diccionario de idioma activo.

ParámetroTipoRequeridoDescripción
groupStringGrupo raíz dentro del JSON de diccionario (ej. "page", "component").
itemStringClave del elemento o sección deseada (ej. "core", "bapDialog").

Ejemplo de uso:

import { getI18nContent } from "../../_main/i18n.js";

const dialogTexts = getI18nContent("component", "bapDialog");
console.log("Título por defecto del diálogo:", dialogTexts.confirmTitle);

3. sanitizeHTML(html)

Firma: sanitizeHTML(html: string): string

Propósito: Sanitiza cadenas HTML mediante DOMPurify neutralizando scripts maliciosos (<script>, handlers onerror, onload, etc.).

ParámetroTipoRequeridoDescripción
htmlStringCadena de marcado HTML no verificado a filtrar con DOMPurify.

Ejemplo de uso:

import { sanitizeHTML } from "../../_main/i18n.js";

const clean = sanitizeHTML("<img src=x onerror=alert(1)><b>Texto seguro</b>");
// Resultado: "Texto seguro"

4. replaceTokensInDOM(rootNode, tokenMap)

Firma: replaceTokensInDOM(rootNode: Node, tokenMap: Object): void

Propósito: Sustituye programáticamente un mapa de tokens sobre cualquier nodo o Shadow DOM.

ParámetroTipoRequeridoDescripción
rootNodeNodeNodo DOM o Shadow DOM donde buscar y reemplazar tokens.
tokenMapObjectObjeto clave-valor con los tokens a reemplazar (ej. { "{user}": "Gonzalo" }).

Ejemplo de uso:

import { replaceTokensInDOM } from "../../_main/i18n.js";

const container = document.querySelector("#my-container");
replaceTokensInDOM(container, { "{user.name}": "Gonzalo" });

5. flattenObject(obj, prefix, res)

Firma: flattenObject(obj: Object, prefix?: string, res?: Object): Object

Propósito: Convierte un objeto JSON anidado en un objeto de un solo nivel con claves separadas por puntos (`"page.title": "..."`).

ParámetroTipoRequeridoDescripción
objObjectObjeto anidado a aplanar.
prefixStringOpcionalPrefijo acumulador de rutas de propiedades.
resObjectOpcionalObjeto acumulador de resultados.

Ejemplo de uso:

import { flattenObject } from "../../_main/i18n.js";

const flat = flattenObject({ page: { title: "Inicio" } });
// Resultado: { "page.title": "Inicio" }

Buenas Prácticas