[{"data":1,"prerenderedAt":324},["ShallowReactive",2],{"brief-\u002Fes\u002Fprojects\u002Fci-translation-components":3,"brief-order-es":313},{"id":4,"title":5,"body":6,"category":260,"cover":261,"coverAlt":262,"description":263,"draft":264,"extension":265,"externalUrl":266,"featured":267,"highlights":268,"links":278,"meta":297,"navigation":267,"order":298,"org":299,"path":300,"period":301,"role":302,"seo":303,"stack":304,"stem":311,"__hash__":312},"projects\u002Fes\u002Fprojects\u002Fci-translation-components.md","CI Translation Components",{"type":7,"value":8,"toc":253},"minimark",[9,14,18,21,29,32,36,42,48,64,70,91,97,167,174,199,205,211,215,218,250],[10,11,13],"h2",{"id":12},"qué","Qué",[15,16,17],"p",{},"En la mayoría de las empresas, la traducción vive fuera de las herramientas que los ingenieros usan a diario. El contenido se exporta, se envía por correo a un proveedor, se traduce en otro lugar y se vuelve a pegar semanas después, cuando el original ya cambió. El resultado es contenido localizado que queda desactualizado de forma permanente y estructural.",[15,19,20],{},"CI Translation Components nació como mi propuesta para el AI Enterprise Hackathon 2026 de GitLab: un conjunto de componentes reutilizables de CI\u002FCD de GitLab que tratan la traducción como una etapa más del pipeline y no como una tarea aparte. Cambia un archivo de origen, CI lo detecta, se traduce el contenido y la traducción llega como una solicitud de fusión común en el mismo repositorio, lista para revisar, revertir y auditar como cualquier otro cambio.",[15,22,23,24,28],{},"La prueba tuvo un alcance deliberadamente acotado. El objetivo de la v1 no era resolver todos los casos de uso de localización, sino demostrar que un componente de CI podía procesar de forma fiable un conjunto pequeño y bien delimitado de ",[25,26,27],"strong",{},"contenido real en producción"," y crear las solicitudes de fusión correctas sin que un ingeniero tuviera que vigilarlo. Crear algo que los clientes pudieran adoptar implicaba usarlo primero nosotros.",[15,30,31],{},"Escribí la hoja de ruta y llevé el epic como DRI general, con responsabilidad compartida con la DRI de Garantía de Calidad Lingüística, a cargo de la calidad de las traducciones.",[10,33,35],{"id":34},"cómo","Cómo",[15,37,38,41],{},[25,39,40],{},"Estructura del pipeline."," Cambio en el origen → detección → traducción → commit → solicitud de fusión → fusión automática. Todas las llamadas al modelo pasan por GitLab AI Gateway; el runner nunca se comunica directamente con la API de un proveedor, y eso fue lo que hizo que todo el sistema resistiera una revisión de seguridad.",[15,43,44,47],{},[25,45,46],{},"La calidad empieza antes de que el modelo vea una sola palabra."," Nada se traduce sin contexto. Cada trabajo se basa en tres insumos: un conjunto de especificaciones sobre qué traducir y cómo, un glosario terminológico mantenido en GitLab e instrucciones de traducción que definen el tono, el estilo y las convenciones de cada configuración regional. Como los tres están en control de versiones, la terminología y la voz se pueden revisar, comparar y tienen responsables, igual que el contenido al que dan forma.",[15,49,50,53,54,58,59,63],{},[25,51,52],{},"La revisión acompaña, no bloquea."," De esta decisión de diseño dependía toda la prueba. Si un lingüista tiene que aprobar una MR de traducción antes de fusionarla, el ritmo de trabajo se reduce a la velocidad de la revisión humana y terminas reconstruyendo dentro de CI el mismo cuello de botella del proveedor. En cambio, la primera revisión ocurre donde llega la traducción: GitLab Duo revisa la solicitud de fusión apenas se crea y, por sí solo, hace un trabajo realmente sólido. La revisión lingüística se activa ",[55,56,57],"em",{},"después"," de la fusión: un flujo de Translation Review Flagger abre incidencias de seguimiento asíncronas en un proyecto aparte, ",[60,61,62],"code",{},"linguistic-review-tracker",", para que los problemas de calidad se detecten y corrijan sin tener el pipeline de rehén.",[15,65,66,69],{},[25,67,68],{},"El nivel de calidad es configurable, no fijo."," Los equipos que necesitan un nivel más exigente tienen muchas opciones, todas nativas de GitLab: instrucciones personalizadas de revisión de MR para Duo, trabajos de CI adicionales que exigen sus propias comprobaciones, reglas de Vale que aplican el estilo y la terminología, y las reglas de aprobación habituales. El componente define un valor predeterminado razonable; cada proyecto decide qué tan estricto quiere ser.",[15,71,72,75,76,79,80,83,84,79,87,90],{},[25,73,74],{},"Puntos ciegos antes de producción."," Antes de tocar cualquier cosa visible para los clientes, dos líneas de trabajo paralelas probaron los componentes en forks: las páginas de Soluciones en español en un fork de ",[60,77,78],{},"about.gitlab.com"," y ",[60,81,82],{},"\u002Fdocs"," en un fork de prueba de GitLab Operator. Empezar por los forks significó que los fallos que encontramos no tuvieron costo. El único requisito previo indispensable fue poco vistoso: el aprovisionamiento de ",[60,85,86],{},"AI_API_KEY",[60,88,89],{},"GITLAB_API_TOKEN"," a nivel de grupo, que bloqueó todos los pipelines en producción hasta que estuvo listo.",[15,92,93,96],{},[25,94,95],{},"Primera fase en producción."," Cuatro proyectos, elegidos porque eran reales pero acotados:",[98,99,100,116],"table",{},[101,102,103],"thead",{},[104,105,106,110,113],"tr",{},[107,108,109],"th",{},"Proyecto",[107,111,112],{},"Contenido",[107,114,115],{},"Idiomas",[117,118,119,132,146,157],"tbody",{},[104,120,121,126,129],{},[122,123,124],"td",{},[60,125,78],{},[122,127,128],{},"44 páginas de Soluciones en 7 categorías",[122,130,131],{},"Español",[104,133,134,137,143],{},[122,135,136],{},"GitLab Operator",[122,138,139,140],{},"11 páginas de documentación, sin incluir ",[60,141,142],{},"\u002Fdeveloper",[122,144,145],{},"Coreano, francés, japonés",[104,147,148,151,154],{},[122,149,150],{},"Orbit",[122,152,153],{},"29 páginas de documentación, el conjunto completo",[122,155,156],{},"Japonés",[104,158,159,162,165],{},[122,160,161],{},"Releases de GitLab",[122,163,164],{},"3 publicaciones de release, 19.2–19.4, publicadas al mismo tiempo que en inglés",[122,166,156],{},[15,168,169,170,173],{},"Orbit fue la prueba de lo ",[55,171,172],{},"continuo",": traduje toda su documentación al japonés y la mantuve al día a medida que cambiaba el original, con MR de traducción que solían llegar unos 20 minutos después del commit de origen.",[15,175,176,179,180,187,188,79,193,198],{},[25,177,178],{},"Lingüistas publicando releases de principio a fin."," La prueba más importante no fue la cantidad de páginas, sino quién estaba al mando. Preparé a nuestros lingüistas para que configuraran estos pipelines por su cuenta y gestionaran las traducciones de forma autónoma, desde el cambio en el original hasta la MR fusionada, sin ningún ingeniero de por medio. Así publicaron en japonés las releases ",[181,182,186],"a",{"href":183,"rel":184},"https:\u002F\u002Fdocs.gitlab.com\u002Fja-jp\u002Freleases\u002F19\u002Fgitlab-19-2-released\u002F",[185],"nofollow","19.2",", ",[181,189,192],{"href":190,"rel":191},"https:\u002F\u002Fdocs.gitlab.com\u002Fja-jp\u002Freleases\u002F19\u002Fgitlab-19-3-released\u002F",[185],"19.3",[181,194,197],{"href":195,"rel":196},"https:\u002F\u002Fdocs.gitlab.com\u002Fja-jp\u002Freleases\u002F19\u002Fgitlab-19-4-released\u002F",[185],"19.4"," de GitLab el mismo día que el original en inglés, en lugar de semanas después. Ese es el cambio para el que se creó el proyecto: una localización en manos de quienes dominan el idioma, sobre la misma plataforma que todo lo demás.",[15,200,201,204],{},[25,202,203],{},"Lanzamiento en tres etapas."," Primero, identificar los puntos ciegos; luego, habilitar la producción; y por último, lograr la cobertura operativa completa. Cada etapa tuvo una fecha y una persona responsable, en lugar de un vago \"cuando esté listo\".",[15,206,207,210],{},[25,208,209],{},"Seguridad desde el principio."," Acceso con privilegios mínimos para el componente y las cuentas de servicio, secretos enmascarados y ocultos, trazabilidad de cada ejecución desde la solicitud hasta la MR pasando por el pipeline, y un procedimiento de reversión que cualquier DRI podía ejecutar de inmediato. Dejar todo esto por escrito antes del lanzamiento fue lo que permitió que la prueba avanzara rápido después.",[10,212,214],{"id":213},"resultados","Resultados",[15,216,217],{},"La prueba cumplió el plazo previsto y el epic se cerró en agosto de 2026. Esto fue lo que dejó:",[219,220,221,228,234,240],"ul",{},[222,223,224,227],"li",{},[25,225,226],{},"CI Translation Components en producción"," en proyectos reales, con traducciones que llegan como solicitudes de fusión a los repositorios responsables del contenido.",[222,229,230,233],{},[25,231,232],{},"Un flujo de trabajo documentado y repetible",", desde la solicitud → ejecución en CI → MR de traducción → revisión → fusión, con responsables definidos, monitoreo y canales de soporte: justo lo que faltaba cuando esto era solo una demostración de hackathon.",[222,235,236,239],{},[25,237,238],{},"Guías operativas pensadas para los clientes, no solo para nosotros",": cómo adoptar el componente, cómo solucionar problemas de un trabajo fallido y cómo solicitar o aportar cambios. El sentido de usarlo internamente siempre fue ponerlo en manos de otros.",[222,241,242,245,246,249],{},[25,243,244],{},"Un camino claro hacia adelante."," La prueba terminó con un epic por escrito para ",[55,247,248],{},"estabilizar y ampliar",", no con una vuelta triunfal, y ese es el resultado honesto: la producción nos enseñó que la rotación de tokens pausaba los forks, que el posprocesamiento necesitaba más solidez y que la política de configuración debía decidirse de forma deliberada en lugar de heredarse. Cada lección quedó registrada como trabajo acotado y documentado, para que quien retome los componentes parta de un plan y de una base funcional en producción, no de una página en blanco.",[15,251,252],{},"Los objetivos con los que se midió la prueba, definidos antes de empezar: una tasa de éxito del pipeline de al menos el 50 % de las ejecuciones en producción completadas sin intervención manual de ingeniería, creación correcta de la MR en al menos el 80 % de las ejecuciones exitosas y una mediana de menos de un día hábil desde el cambio en el original hasta la MR abierta, con minutos como meta ambiciosa. La documentación de Orbit en japonés alcanzaba esa meta con regularidad, en unos 20 minutos.",{"title":254,"searchDepth":255,"depth":255,"links":256},"",2,[257,258,259],{"id":12,"depth":255,"text":13},{"id":34,"depth":255,"text":35},{"id":213,"depth":255,"text":214},"platform","\u002Fimages\u002Fprojects\u002Fplatform-ci-translation-components.svg","Un componente de CI, basado en especificaciones, un glosario terminológico e instrucciones de traducción, que convierte los cambios en Orbit, about.gitlab.com y GitLab Operator en solicitudes de fusión en japonés, coreano y francés, cada una revisada por GitLab Duo","Cómo convertí un prototipo de hackathon en un pipeline de traducción en producción que entrega contenido localizado como solicitudes de fusión comunes y corrientes.",false,"md",null,true,[269,272,275],{"value":270,"label":271},"87","páginas con traducción continua en la primera fase",{"value":273,"label":274},"4","idiomas de destino: es, ja, ko, fr",{"value":276,"label":277},"~20 min","tiempo habitual desde el cambio en el original hasta la MR de traducción",[279,282,285,288,290,292,294],{"label":280,"url":281},"ci-translation-components","https:\u002F\u002Fgitlab.com\u002Fgitlab-com\u002Flocalization\u002Fci-translation-components",{"label":283,"url":284},"Epic — Prueba de lanzamiento en producción","https:\u002F\u002Fgitlab.com\u002Fgroups\u002Fgitlab-com\u002Flocalization\u002F-\u002Fwork_items\u002F174",{"label":286,"url":287},"Incidencia de la hoja de ruta","https:\u002F\u002Fgitlab.com\u002Fgitlab-com\u002Flocalization\u002Flocalization-team\u002F-\u002Fwork_items\u002F730",{"label":289,"url":183},"Publicación de la release 19.2 de GitLab (ja-jp)",{"label":291,"url":190},"Publicación de la release 19.3 de GitLab (ja-jp)",{"label":293,"url":195},"Publicación de la release 19.4 de GitLab (ja-jp)",{"label":295,"url":296},"Continuación — estabilizar y ampliar","https:\u002F\u002Fgitlab.com\u002Fgroups\u002Fgitlab-com\u002Flocalization\u002F-\u002Fwork_items\u002F176",{},1,"GitLab","\u002Fes\u002Fprojects\u002Fci-translation-components","2026","Autora y DRI general",{"title":5,"description":263},[305,306,307,308,309,310],"GitLab CI\u002FCD Components","GitLab AI Gateway","GitLab Runner","Hugo","Markdown","YAML","es\u002Fprojects\u002Fci-translation-components","IKWB-903kKfG-M9C-D2XAAb9119OqLOWROinlABnChM",[314,315,318,321],{"path":300,"title":5,"externalUrl":266},{"path":316,"title":317,"externalUrl":266},"\u002Fes\u002Fprojects\u002Fjapanese-documentation","Documentación del producto en japonés",{"path":319,"title":320,"externalUrl":266},"\u002Fes\u002Fprojects\u002Fceo-shadow-takeaways","Lo que aprendí como CEO Shadow",{"path":322,"title":323,"externalUrl":266},"\u002Fes\u002Fprojects\u002Fxyz-textbooks","Plataforma de libros de texto en línea de XYZ",1791503629882]