Aggiungi una libreria i18n a runtime, poi converti le stringhe che Copilot ha già scritto, e infine impedisci che se ne aggiungano di nuove. Il passaggio in cui la maggior parte dei team sbaglia è l'ultimo, perché un file di istruzioni del repository non raggiunge tutte le superfici da cui Copilot scrive codice. La chat e il coding agent lo leggono. Il completamento automatico inline no. globalize.now è un'infrastruttura di localizzazione basata su IA che converte la codebase una sola volta e produce le chiavi e i file di traduzione che la tua libreria i18n legge.

Perché Copilot continua a hardcodare stringhe dopo che ho aggiunto un file di istruzioni?

Perché il file di istruzioni non è collegato al percorso più rapido. La documentazione di VS Code afferma chiaramente che le istruzioni personalizzate non vengono considerate per i suggerimenti inline che ottieni mentre digiti. Ed è la modalità in cui la maggior parte delle persone passa gran parte della giornata.

Quindi la regola che hai scritto è reale, e si applica quando fai una domanda a Copilot in chat o affidi un task al coding agent. Non si applica quando digiti un tag JSX e premi Tab su un completamento in grigio. Entrambi producono codice committato. Solo uno dei due ha letto la tua regola.

Quali superfici di Copilot leggono le tue istruzioni?

Tre superfici scrivono codice nel tuo repository, e non si comportano allo stesso modo.

SuperficieLegge le istruzioni?Dove finisce l'output
Completamenti inlineNoDirettamente nel file che stai modificando
Chat e modalità agenteSìModifiche che revisioni nell'editor
Coding agentSìUna bozza di pull request che revisioni

Il coding agent è il più gestibile dei tre per questo problema. Gli assegni un issue, lavora in background e apre una bozza di pull request, così il suo output arriva in un punto che un revisore controlla già. I completamenti inline arrivano senza alcun filtro.

Come imposti l'i18n in un progetto Copilot?

Scegli prima la libreria a runtime richiesta dal tuo framework. next-intl per il Next.js App Router, react-i18next per qualsiasi altra app React, Lingui se vuoi l'estrazione a compile-time e i catalog PO. Abbiamo confrontato i tre in next-intl vs react-i18next vs Lingui.

Copilot non è legato a un framework specifico come Lovable o Bolt, il che significa che la scelta dello stack è realmente aperta e la libreria è una tua decisione. Quello che non è aperto è l'ordine. Installa la libreria, converti le stringhe che esistono già, e solo dopo preoccupati della prevenzione. Una regola di prevenzione scritta su una codebase ancora composta al 90% da inglese hardcoded non ti dà nulla da misurare.

Cosa dovrebbe contenere .github/copilot-instructions.md?

Un file di istruzioni del repository in quel percorso viene rilevato automaticamente e applicato alle richieste in chat nel workspace. Le linee guida stesse di GitHub consigliano di mantenere ogni istruzione breve e autosufficiente, di spiegare il ragionamento e di omettere tutto ciò che un linter applica già. Una sezione i18n che segue questo consiglio è minima:

## 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.

L'ultima riga conta più di quanto sembri. Le regole applicate in modo eccessivo vengono ignorate, e una regola che dice a un agente di racchiudere i messaggi di log gli insegnerà che tutta la sezione è rumore. Se non hai ancora nessun file di istruzioni, VS Code può crearne una bozza a partire dalla tua codebase con il comando init in chat, un punto di partenza migliore di un file vuoto.

Un file di istruzioni specifico per percorso può fare meglio?

Sì, ed è l'unica leva che Copilot ha e che i file di regole di altri editor non hanno. I file che terminano in .instructions.md, salvati sotto .github/instructions, portano un glob applyTo nel loro frontmatter e si caricano solo quando l'agente tocca un file corrispondente.

---
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.

Limitare l'ambito della regola ai file dei componenti è ciò che la rende credibile. Si attiva dove vive il testo rivolto all'utente e resta silenziosa nelle tue route API e negli script di migrazione. Se mantieni già un AGENTS.md o un CLAUDE.md nella root del repository, Copilot li legge anch'essi come istruzioni sempre attive, così un team che gestisce più agenti non ha bisogno di un file separato per ogni strumento.

Cosa intercetta le stringhe che le istruzioni non colgono?

Una regola di lint in CI, perché è il solo livello in questo stack che fa fallire una build. Le istruzioni cambiano le probabilità; un controllo che fallisce cambia l'esito. Abbiamo approfondito quel livello di enforcement in perché gli agenti IA continuano ad aggiungere stringhe hardcoded, e la configurazione si trasferisce senza modifiche a un repository Copilot.

L'aggiunta specifica per Copilot è la pull request. Le istruzioni del repository si applicano anche alla revisione del codice di Copilot, non solo alla chat, quindi lo stesso file che modella la generazione modella anche i commenti di revisione sulla bozza di PR del coding agent. Questo ti dà un filtro che il completamento automatico inline non può eludere, il che è la cosa più simile a una soluzione per il divario descritto all'inizio di questo articolo.

Niente di tutto questo estingue il debito già presente nel repository, e niente di tutto questo popola un file di traduzione. Individuare un letterale in revisione ti dice che manca una stringa. Qualcuno deve ancora trasformarla in chiave, tradurla, e impedire che le altre lingue si disallineino.

Dove si inserisce globalize.now?

Al livello che produce il catalogo, la parte che né la tua libreria i18n né il tuo file di istruzioni gestiscono. Connetti il repository nell'app e converte la codebase una sola volta, sostituendo le stringhe hardcoded con chiavi e generando i file di traduzione. Dopo quella conversione unica, i job attivati a ogni push traducono le nuove unità di catalogo introdotte dai tuoi commit.

L'output è in JSON o PO, quindi i cataloghi arrivano nella forma che la tua libreria a runtime già legge. Lo stesso approccio copre gli altri editor agentici: Claude Code e Cursor incontrano lo stesso ostacolo da una direzione diversa, ed esiste una versione passo per passo per una codebase Next.js in aggiungere l'i18n a un'app Next.js costruita con l'IA. La documentazione per sviluppatori approfondisce la conversione, e i piani sono sulla pagina prezzi.

La versione breve

Scrivi il file di istruzioni, limita una regola specifica per percorso ai tuoi file di componenti, e metti una regola di lint in CI così il divario tra ciò che a Copilot è stato detto e ciò che Copilot ha scritto diventa una build rossa invece di una stringa in inglese rilasciata. Poi converti l'arretrato una volta per tutte, così la regola ha qualcosa di coerente da proteggere.

globalize.now trasforma il testo hardcoded dell'app in file di localizzazione pronti e li mantiene aggiornati mentre rilasci.

Prova globalize.now gratis