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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
callback | Function | Opcional | Funció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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
group | String | Sí | Grupo raíz dentro del JSON de diccionario (ej. "page", "component"). |
item | String | Sí | Clave 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
html | String | Sí | Cadena 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
rootNode | Node | Sí | Nodo DOM o Shadow DOM donde buscar y reemplazar tokens. |
tokenMap | Object | Sí | Objeto 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
obj | Object | Sí | Objeto anidado a aplanar. |
prefix | String | Opcional | Prefijo acumulador de rutas de propiedades. |
res | Object | Opcional | Objeto 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
- Sanitizar siempre entradas externas: Pasar todo marcado dinámico por
sanitizeHTML()antes de inyectarlo en.innerHTML.