Pirmiausia pridėkite vykdymo metu veikiančią i18n biblioteką, tada konvertuokite Copilot jau įrašytas eilutes ir pasirūpinkite, kad naujosios nebebūtų įrašomos tiesiogiai kode. Būtent paskutinį žingsnį dauguma komandų atlieka neteisingai, nes saugyklos instrukcijų failas nepasiekia kiekvieno paviršiaus, iš kurio Copilot rašo kodą. Pokalbis ir programavimo agentas jį skaito, o eilutinis automatinis užbaigimas — ne. globalize.now yra dirbtiniu intelektu paremta lokalizacijos infrastruktūra, kuri vieną kartą konvertuoja kodų bazę ir sugeneruoja raktus bei lokalės failus, kuriuos skaito jūsų i18n biblioteka.

Kodėl Copilot vis dar įrašo eilutes tiesiogiai kode, nors pridėjau instrukcijų failą?

Nes instrukcijų failas neįtrauktas į greičiausią darbo kelią. VS Code dokumentacijoje aiškiai nurodyta, kad pasirinktinės instrukcijos netaikomos eilutiniams pasiūlymams, kuriuos gaunate rašydami. Būtent šiame režime dauguma žmonių praleidžia didžiąją dienos dalį.

Taigi jūsų parašyta taisyklė yra tikra ir taikoma, kai užduodate Copilot klausimą pokalbyje arba perduodate užduotį programavimo agentui. Ji netaikoma, kai įvedate JSX žymą ir paspaudžiate Tab ant pilkai rodomo pasiūlymo. Abu būdai sukuria į kodų bazę patenkantį kodą. Tačiau tik vienas iš jų perskaitė jūsų taisyklę.

Kurie Copilot paviršiai skaito jūsų instrukcijas?

Trys paviršiai įrašo kodą į jūsų saugyklą, tačiau jie veikia skirtingai.

PaviršiusSkaito instrukcijas?Kur patenka išvestis
Eilutiniai užbaigimaiNeTiesiai į redaguojamą failą
Pokalbis ir agento režimasTaipPakeitimai, kuriuos peržiūrite redaktoriuje
Programavimo agentasTaipJuodraštis pull request, kurį peržiūrite

Programavimo agentas iš šių trijų geriausiai tinka šiai problemai spręsti. Priskiriate jam užduotį, jis dirba fone ir atidaro juodraštį pull request, todėl jo išvestis patenka ten, kur ją jau peržiūri atsakingas asmuo. Eilutiniai pasiūlymai pasirodo visiškai be kontrolės vartų.

Kaip nustatyti i18n Copilot projekte?

Pirmiausia pasirinkite vykdymo metu veikiančią biblioteką, kurią rekomenduoja jūsų karkasas. Next.js App Router naudokite next-intl, bet kuriai kitai React programėlei — react-i18next, o jei norite kompiliavimo metu atliekamo ištraukimo ir PO katalogų — Lingui. Šias tris bibliotekas palyginome straipsnyje next-intl ir react-i18next bei Lingui.

Copilot, kitaip nei Lovable ar Bolt, nėra susietas su konkrečiu karkasu, todėl technologijų rinkinio klausimas iš tiesų lieka atviras ir biblioteką renkatės jūs. Tačiau veiksmų seka nėra atvira diskusijai. Įdiekite biblioteką, konvertuokite jau esančias eilutes ir tik tada rūpinkitės prevencija. Prevencijos taisyklė, parašyta kodų bazei, kurioje 90 % teksto vis dar įrašyta angliškai tiesiogiai kode, nesuteikia nieko, ką galėtumėte išmatuoti.

Kas turėtų būti faile .github/copilot-instructions.md?

Šiuo keliu esantis saugyklos instrukcijų failas aptinkamas automatiškai ir taikomas darbo srities pokalbių užklausoms. Pačios GitHub rekomendacija — kiekvieną instrukciją išlaikyti trumpą ir savarankišką, paaiškinti jos priežastį ir praleisti tai, ką jau užtikrina linteris. Pagal šias rekomendacijas parengtas i18n skyrius yra trumpas:

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

Paskutinė eilutė svarbesnė, nei gali pasirodyti. Per plačiai taikomos taisyklės ignoruojamos, o taisyklė, liepianti agentui apgaubti žurnalo pranešimus, išmokys jį laikyti visą skyrių triukšmu. Jei dar neturite jokio instrukcijų failo, VS Code gali jį parengti pagal jūsų kodų bazę, pokalbyje naudojant init komandą. Tai geresnė pradžia nei tuščias failas.

Ar konkrečiam keliui skirta instrukcijų byla gali veikti geriau?

Taip — tai vienas svertas, kurį Copilot turi, o kitur naudojami redaktoriaus taisyklių failai jo neturi. Failuose, kurių pavadinimas baigiasi .instructions.md ir kurie saugomi .github/instructions kataloge, antraštinėje dalyje nurodomas applyTo globas. Jie įkeliami tik tada, kai agentas paliečia atitinkantį failą.

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

Apribojus taisyklę komponentų failais, ji išlieka patikima. Taisyklė suveikia ten, kur yra naudotojui matomas tekstas, ir netrukdo API maršrutams bei migracijos scenarijams. Jei saugyklos šaknyje jau turite AGENTS.md arba CLAUDE.md, Copilot juos taip pat skaito kaip visada taikomas instrukcijas, todėl komandai, naudojančiai kelis agentus, nereikia atskiro failo kiekvienam įrankiui.

Kas aptinka eilutes, kurių nepastebi instrukcijos?

CI linterio taisyklė, nes tai vienintelis šio rinkinio sluoksnis, galintis sustabdyti kūrimą. Instrukcijos keičia tikimybę, o nesėkmingas patikrinimas pakeičia rezultatą. Šį kontrolės sluoksnį išsamiai aptarėme straipsnyje kodėl dirbtinio intelekto agentai vis dar prideda tiesiogiai kode įrašytas eilutes, o jo nustatymas Copilot saugykloje nesikeičia.

Su Copilot susijęs papildomas elementas — pull request. Saugyklos instrukcijos taikomos ne tik Copilot pokalbiams, bet ir kodo peržiūrai, todėl tas pats failas, kuris formuoja generavimą, formuoja ir programavimo agento juodraščio PR peržiūros komentarus. Taip gaunate vienus kontrolės vartus, pro kuriuos eilutinis automatinis užbaigimas negali praslysti — tai artimiausia išeitis iš šio įrašo pradžioje aprašytos spragos.

Visa tai nepašalina jau saugykloje susikaupusios skolos ir neužpildo lokalės failo. Peržiūroje aptikę tiesioginę eilutę sužinote, kad trūksta eilutės. Tačiau kažkas vis tiek turi jai suteikti raktą, ją išversti ir pasirūpinti, kad kitos lokalės neišsiderintų.

Kur čia įsiterpia globalize.now?

Jis veikia katalogą generuojančiame sluoksnyje — toje dalyje, kurios neapima nei jūsų i18n biblioteka, nei instrukcijų failas. Programėlėje prijungiate saugyklą, o globalize.now vieną kartą konvertuoja kodų bazę, pakeisdamas tiesiogiai įrašytas eilutes raktais ir sugeneruodamas lokalės failus. Po šio vienkartinio konvertavimo išsiuntimo užduotys išverčia naujus katalogo vienetus, kuriuos įveda jūsų pakeitimai.

Išvestis pateikiama JSON arba PO formatu, todėl katalogai atsiduria tokios struktūros, kurią jūsų vykdymo metu veikianti biblioteka jau moka skaityti. Tas pats metodas tinka ir kitiems agentiniams redaktoriams: Claude Code ir Cursor susiduria su ta pačia kliūtimi, tik iš kitos pusės, o nuoseklus vadovas, skirtas Next.js kodų bazei, pateiktas straipsnyje kaip pridėti i18n prie dirbtinio intelekto sukurtos Next.js programėlės. Kūrėjų dokumentacijoje konvertavimas aprašytas išsamiau, o planus rasite kainų puslapyje.

Trumpai

Parašykite instrukcijų failą, konkrečiam keliui skirtą taisyklę apribokite komponentų failais ir įdėkite linterio taisyklę į CI, kad skirtumas tarp to, ko Copilot buvo išmokytas, ir to, ką jis įvedė, virstų raudonu kūrimo procesu, o ne išleista angliška eilute. Tada vieną kartą konvertuokite sukauptą atsilikimą, kad taisyklė turėtų nuoseklų turinį, kurį galėtų saugoti.

globalize.now paverčia užkoduotą programos tekstą į vertimui paruoštus lokalės failus ir juos atnaujina, kai jūs diegiate naujus pakeitimus.

Išbandyti globalize.now nemokamai