Añade una biblioteca de i18n en runtime, luego convierte las cadenas que Copilot ya ha escrito, y solo después evita que aparezcan nuevas. El paso que la mayoría de los equipos hace mal es el último, porque un archivo de instrucciones del repositorio no llega a todas las superficies desde las que Copilot escribe código. El chat y el coding agent lo leen. El autocompletado en línea no. globalize.now es infraestructura de localización impulsada por IA que convierte el codebase una sola vez y produce las claves y los archivos de traducción que lee tu biblioteca de i18n.
¿Por qué Copilot sigue codificando cadenas después de añadir un archivo de instrucciones?
Porque el archivo de instrucciones no está conectado a la ruta más rápida. La documentación de VS Code deja claro que las instrucciones personalizadas no se tienen en cuenta para las sugerencias en línea que aparecen mientras escribes. Y ese es el modo en el que la mayoría de la gente pasa la mayor parte del día.
Así que la regla que escribiste es real, y se aplica cuando le haces una pregunta a Copilot en el chat o le asignas una tarea al coding agent. No se aplica cuando escribes una etiqueta JSX y pulsas Tab sobre una sugerencia en gris. Ambas acciones producen código que se termina commiteando. Solo una de ellas ha leído tu regla.
¿Qué superficies de Copilot leen tus instrucciones?
Tres superficies escriben código en tu repositorio, y no se comportan de la misma manera.
| Superficie | ¿Lee las instrucciones? | Dónde aterriza el resultado |
|---|---|---|
| Autocompletado en línea | No | Directo al archivo que estás editando |
| Chat y modo agente | Sí | Cambios que revisas en el editor |
| Coding agent | Sí | Un borrador de pull request que revisas |
El coding agent es el más amigable de los tres para este problema. Le asignas un issue, trabaja en segundo plano y abre un borrador de pull request, así que su resultado llega a un lugar que un revisor ya mira. Los autocompletados en línea llegan sin ningún filtro.
¿Cómo configuras i18n en un proyecto con Copilot?
Elige primero la biblioteca en runtime que quiere tu framework. next-intl para el App Router de Next.js, react-i18next para cualquier otra app en React, Lingui si quieres extracción en tiempo de compilación y catálogos PO. Comparamos las tres en next-intl vs react-i18next vs Lingui.
Copilot no depende de un framework concreto como sí lo hacen Lovable o Bolt, lo que significa que la pregunta del stack está genuinamente abierta y la elección de biblioteca es tuya. Lo que no está abierto es el orden. Instala la biblioteca, convierte las cadenas que ya existen y solo después preocúpate por la prevención. Una regla de prevención escrita sobre un codebase que todavía es un 90 por ciento inglés codificado no te da nada que medir.
¿Qué debería incluir .github/copilot-instructions.md?
Un archivo de instrucciones del repositorio en esa ruta se detecta automáticamente y se aplica a las peticiones de chat en el workspace. La propia guía de GitHub recomienda mantener cada instrucción corta y autocontenida, explicar el razonamiento y omitir cualquier cosa que un linter ya haga cumplir. Una sección de i18n que sigue ese consejo es pequeña:
## User-facing text
- User-facing text belongs in the message catalog, never in a component literal.
- Use the translation function from our i18n library for every visible string.
- Reason: a literal cannot be translated and does not show up as a missing key,
so it ships silently in one language.
- Add new English values to the source catalog only. Never hand-edit other locales.
- Not user-facing: test names, log lines, error codes, internal constants.
La última línea importa más de lo que parece. Las reglas que se aplican en exceso terminan ignoradas, y una regla que le dice a un agente que envuelva mensajes de log le enseñará que toda la sección es ruido. Si aún no tienes ningún archivo de instrucciones, VS Code puede redactar uno a partir de tu codebase con el comando init en el chat, un mejor punto de partida que un archivo en blanco.
¿Puede un archivo de instrucciones específico de ruta hacerlo mejor?
Sí, y esta es la única palanca que tiene Copilot que los archivos de reglas de otros editores no tienen. Los archivos que terminan en .instructions.md, guardados bajo .github/instructions, llevan un glob applyTo en su frontmatter y se cargan solo cuando el agente toca un archivo que coincide.
---
name: 'UI strings'
description: 'String handling rules for components'
applyTo: '**/*.{jsx,tsx}'
---
Every visible string in this file must come from the catalog.
Key format is feature.element.state, lowerCamelCase.
If you add a key here, add its English value to the source catalog in the same change.
Limitar el alcance de la regla a los archivos de componentes es lo que la mantiene creíble. Se activa donde vive el texto de cara al usuario y permanece en silencio en tus rutas de API y scripts de migración. Si ya mantienes un AGENTS.md o un CLAUDE.md en la raíz del repositorio, Copilot también los lee como instrucciones siempre activas, así que un equipo que ejecuta varios agentes no necesita un archivo separado por herramienta.
¿Qué atrapa las cadenas que se les escapan a las instrucciones?
Una regla de lint en CI, porque es la única capa de este stack que hace fallar un build. Las instrucciones cambian las probabilidades; una comprobación que falla cambia el resultado. Analizamos esa capa de aplicación en detalle en por qué los agentes de IA siguen añadiendo cadenas codificadas, y la configuración se traslada sin cambios a un repositorio de Copilot.
El añadido específico de Copilot es la pull request. Las instrucciones del repositorio se aplican tanto a la revisión de código de Copilot como al chat, así que el mismo archivo que da forma a la generación también da forma a los comentarios de revisión en el borrador de PR del coding agent. Eso te da un filtro que el autocompletado en línea no puede evitar, lo más parecido a una solución para la brecha del principio de este artículo.
Nada de esto liquida la deuda que ya existe en el repositorio, ni llena un archivo de traducción. Detectar un literal en la revisión te dice que falta una cadena. Alguien todavía tiene que asignarle una clave, traducirla y evitar que los demás idiomas se desincronicen.
¿Dónde entra globalize.now?
En la capa que produce el catálogo, que es la parte que ni tu biblioteca de i18n ni tu archivo de instrucciones cubren. Conectas el repositorio en la app y convierte el codebase una sola vez, sustituyendo las cadenas codificadas por claves y generando los archivos de traducción. Después de esa conversión única, los jobs en cada push traducen las nuevas unidades del catálogo que introducen tus commits.
La salida es JSON o PO, así que los catálogos llegan en el formato que tu biblioteca en runtime ya lee. El mismo enfoque cubre los otros editores agénticos: Claude Code y Cursor chocan con el mismo muro desde otra dirección, y hay una versión paso a paso para un codebase de Next.js en añadir i18n a una app de Next.js construida con IA. Los documentos para desarrolladores cubren la conversión con más detalle, y los planes están en la página de precios.
La versión corta
Escribe el archivo de instrucciones, limita una regla específica de ruta a tus archivos de componentes y añade una regla de lint en CI para que la brecha entre lo que le dijiste a Copilot y lo que Copilot escribió se convierta en un build en rojo en lugar de una cadena en inglés desplegada. Después, convierte el backlog una vez, para que la regla tenga algo consistente que proteger.
globalize.now convierte el texto codificado de tu app en archivos de traducción listos para localizar y los mantiene actualizados en cada despliegue.
Prueba globalize.now gratis