Proyecto 02 de 04
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.
- 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:
- la extensión Rust compilada a WebAssembly integra comandos y capacidades de Zed;
translator-lspadapta las solicitudes del editor al Language Server Protocol;translator-coreprotege la estructura del documento y coordina la traducción;- 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.
david_ramirezz@hotmail.com