BookinglyTech News
Software

Extensión de Chrome que translitera hanifi rohingya sobre la marcha

Convierte el texto hanifi rohingya de cualquier página al alfabeto latino sin salir de ella, sin backend y con permisos mínimos. Todavía está en revisión en la Chrome Web Store.

3 min de lecturaDev.to0 vistas

Rohingya Reader coge el texto en hanifi rohingya que aparece en una página y lo pasa al alfabeto latino sin salir de ella. No traduce: translitera, las palabras siguen siendo rohingya. La extensión está en revisión en la Chrome Web Store y aún no se puede instalar; mientras tanto, el mismo conversor sigue accesible en rohingyalanguage.org.

El rohingya se escribe con dos sistemas vivos. El hanifi rohingya va de derecha a izquierda y está en Unicode desde 2018, en el bloque U+10D00–U+10D3F. El rohingyalish es rohingya en alfabeto latino. Mucha gente lee uno con soltura y se atasca con el otro. La web del proyecto ya tenía un conversor entre ambos; el problema era el ir y venir de copiar el texto a la herramienta y devolverlo a la página.

Un conversor que no duplica nada

La extensión importa directamente el módulo del conversor del sitio. No hay copia propia de las tablas de mapeo, así que no pueden desincronizarse. Todo corre en el dispositivo: sin backend, sin API y sin analíticas.

Para decidir qué convertir no se fía del atributo lang, que casi nunca está bien puesto, sino de los puntos de código. Cada nodo de texto se parte en tramos de caracteres hanifi y solo esos tramos pasan por el conversor; el inglés, el árabe, el bengalí, los emojis y la puntuación se copian tal cual.

Tampoco reescribe innerHTML, que es la forma más rápida de cargarse los listeners de una página, el estado de un framework y la identidad de los elementos. Edita solo el campo data de nodos de texto que ya existen: no crea, mueve ni borra elementos, ni toca atributos. De cada nodo guarda dos cadenas, el original y lo que escribió, y únicamente restaura si el nodo sigue conteniendo lo suyo. Si la web lo cambió por el medio, gana la web. Los registros viven en un WeakMap y en un conjunto de WeakRef, de modo que los nodos que la página elimina se pueden recolectar.

Bidi, tandas de 12 ms y permisos

Las páginas dinámicas obligan a más. Un MutationObserver encola solo los nodos añadidos o modificados, nunca reescanea el documento entero, y el trabajo se reparte en tandas de unos 12 ms. En una prueba de extremo a extremo, una página con 5.000 párrafos se convirtió en unos 0,4 segundos y sin tareas largas. Quedan fuera script, style, inputs, textareas, zonas contenteditable, role textbox, bloques de código y editores como CodeMirror, Monaco o ProseMirror.

Hay dos detalles finos. El hanifi usa signos combinantes y los sitios parten palabras entre varios elementos; convertir cada nodo por separado da un resultado distinto al de la palabra completa, así que los nodos inline adyacentes se tratan en grupo, y si no existe un corte seguro el texto se queda en hanifi. Y como el hanifi va de derecha a izquierda y el rohingyalish no, el algoritmo bidireccional de Unicode reordenaría las palabras alrededor de la puntuación: la extensión envuelve cada pasaje en aislantes invisibles U+2066 (LRI) y U+2069 (PDI) escritos dentro de los nodos, sin tocar atributos ni alineación.

El manifest pide activeTab, scripting y storage, más optional_host_permissions. Nada se concede al instalar: la conversión de la página actual usa activeTab, que solo vale después de pulsar el botón, y la opción de convertir siempre un sitio solicita ese hostname concreto y registra un content script. La preferencia guardada, el permiso concedido y el script registrado pueden divergir, porque el usuario revoca desde los ajustes de Chrome o una actualización pierde registros, así que un service worker los reconcilia al instalar, al actualizar, al arrancar el navegador y cuando cambian los permisos.

La extensión sigue en revisión, así que no hay ficha pública que probar. Lo aprovechable ahora es la técnica: editar nodos de texto en lugar de HTML, apoyarse en el conversor como única fuente de verdad y resolver el bidi con aislantes en vez de con atributos dir. Quien haya escrito una extensión que toca páginas ajenas reconocerá la lista de problemas.