Proyecto 02 de 04

← Volver a proyectos

Traductor inglés → español para Zed

Extensión open source que traduce Markdown y texto plano de forma local, preserva la estructura del documento y muestra el resultado sin modificar el buffer.

Estado
En desarrollo
Periodo
2026—En curso
Rol
Creador y mantenedor; responsable de arquitectura, implementación, pruebas, empaquetado, seguridad de la cadena de suministro y publicación.
  • Rust
  • WebAssembly
  • Zed Extension API
  • Language Server Protocol
  • Bergamot
  • Marian NMT
  • Markdown

Problema

Traducir documentación desde un editor suele implicar cambiar de aplicación, copiar el texto o enviarlo a un servicio externo. Quería consultar una versión en español sin sacar el contenido del flujo de trabajo y sin convertir la traducción en una edición accidental del archivo.

El objetivo no era construir otro panel de traducción. Era diseñar una integración pequeña, predecible y auditable para Markdown y texto plano.

Experiencia de uso

La extensión expone la traducción como información contextual de solo lectura. El usuario solicita el resultado desde Zed, lo consulta y continúa trabajando con el documento original. El buffer no se reemplaza, no se aplica un diff y no se escribe una copia traducida.

Ese límite reduce el riesgo de perder formato o confirmar una traducción por error. También hace explícito que el producto ayuda a comprender un texto; no pretende editarlo ni decidir por quien lo escribe.

Arquitectura

La solución se divide en cuatro responsabilidades:

  1. la extensión Rust compilada a WebAssembly integra comandos y capacidades de Zed;
  2. translator-lsp adapta las solicitudes del editor al Language Server Protocol;
  3. translator-core protege la estructura del documento y coordina la traducción;
  4. el runtime embebido ejecuta Bergamot/Marian con los modelos inglés → español.

La separación mantiene la API del editor fuera del motor de traducción. El core puede probar preservación y composición sin iniciar Zed, mientras el LSP se concentra en transporte, capacidades y ciclo de vida.

Decisiones y tradeoffs

Solo lectura antes que automatización

Elegí una vista contextual porque la mutación del buffer habría ampliado el contrato: selección de rangos, reconciliación con cambios concurrentes, deshacer y preservación exacta del documento. El resultado actual es menos automático, pero su efecto sobre el trabajo del usuario es más fácil de entender y revertir.

Local después de la adquisición inicial

La traducción del documento ocurre en el equipo y su contenido no se envía a un servicio remoto. La primera preparación sí necesita red para obtener el paquete versionado y los modelos desde fuentes públicas. Después de esa adquisición, el mismo conjunto de artefactos permite traducir offline.

Esta precisión importa: «traducción offline» describe la ejecución normal, no una instalación completamente desconectada.

Preservar estructura antes que traducir todo

El core identifica las regiones traducibles y conserva la estructura que no debe pasar por el modelo. Esto protege delimitadores y organización de Markdown a costa de no tratar cada fragmento como prosa libre. El comportamiento es deliberadamente conservador.

Cadena de suministro y recuperación

El runtime no se ejecuta directamente desde una descarga temporal. Antes de promover un paquete verifico su tamaño, identidad SHA-256, layout esperado y permisos. La preparación ocurre en un área no ejecutable y la promoción final es atómica.

Si la adquisición o validación falla, el proceso descarta el candidato y conserva la última versión válida. Así, un error de red o un paquete incompleto no reemplaza un runtime que ya funcionaba.

El código original se distribuye bajo MIT. El runtime, los modelos y demás componentes conservan sus licencias y avisos aplicables, incluidos materiales MPL-2.0. La release no presenta dependencias de terceros como código propio.

Evidencia pública

La release v0.1.0 está publicada y acompaña el paquete con un checksum verificable. El repositorio conserva código, pruebas, ADR, documentación de validación, manifiestos de dependencias y avisos de terceros.

Al 29 de julio de 2026, el PR upstream #6843 permanece abierto, no fusionado, y sus verificaciones públicas están aprobadas. La extensión todavía no se presenta como disponible en la Gallery de Zed.

Son tres estados distintos: existe una release utilizable, hay una propuesta de incorporación upstream y la publicación en Gallery continúa pendiente.

Límites actuales

v0.1.0 publica soporte para Linux x86_64. La preparación inicial requiere acceso a los artefactos públicos y el rendimiento depende del equipo y del tamaño del documento. La traducción automática tampoco garantiza equivalencia terminológica ni sustituye una revisión humana.

El siguiente cierre de producto depende del proceso upstream y de comprobar la disponibilidad real en Gallery. Mientras eso no ocurra, el repositorio y la release son los canales públicos correctos.

Aprendizaje

La parte visible de una extensión puede ser pequeña y aun así exigir decisiones de producto, protocolo, ejecución local y distribución. En este caso, el valor no estuvo solo en producir una traducción, sino en limitar con precisión qué se modifica, qué se descarga, qué se ejecuta y qué evidencia respalda cada estado de publicación.

Evidencia

Evidencia del caso.

Estado del material visual y de los enlaces que pueden hacerse públicos.

Sin imagen pública

La evidencia pública de v1 se concentra en el repositorio, la release verificable y el PR upstream. No añado una captura decorativa que repita esa información.

Contacto

Hablemos de este proyecto.

Si quieres conversar sobre arquitectura, backend o decisiones de desarrollo, el correo es el canal principal.