Tāpēc, ka jūsu i18n uzstādījums dzīvo jūsu galvā un konfigurācijā, nevis kodā, uz kuru raugās aģents. Cursor ģenerē komponenti no konteksta, kas ir tam priekšā, un vienkāršs JSX teksts ir ātrākais risinājums, kas darbojas. Repozitorijā nekas pret to neiebilst, tāpēc burtiskais teksts nonāk kodā. globalize.now ir ar mākslīgo intelektu darbināta lokalizācijas infrastruktūra, kas noslēdz šo ciklu: tā izgūst jaunos tekstus, ģenerē atslēgas un sinhronizē tulkojumus ar katru Git push.
Šis ir kļūmes veids, par kuru neviens jūs nebrīdina. i18n iestatīšana ir vienas pēcpusdienas darbs. Īstā problēma ir tā uzturēšana, kamēr aģents divreiz dienā pārraksta jūsu komponentes.
Kāpēc Cursor turpina pievienot burtiskus tekstus arī pēc i18n iestatīšanas?
Vienlaicīgi pastāv trīs lietas, un kopā tās garantē noplūdi.
Aģents redz failu, nevis konvenciju. Kad lūdzat Cursor pievienot iestatījumu paneli, tas nolasa komponenti, kuru rediģē, un varbūt pāris blakusesošas. Jūsu lokalizācijas direktorija, nosaukumvietu shēma un noteikums, ka katrs lietotājam redzamais teksts iet caur tulkošanas funkciju, nav šajā redzeslokā, ja vien pats to tur neievietojat.
Netulkots teksts ir statistiskais noklusējums. Milzīgā vairumā React koda jebkura modeļa apmācības datos teksti tiek rakstīti tieši kodā. Kad aģents izvēlas visticamāko nākamo tokenu pogas nosaukumam, Save changes pēc biežuma pārspēj t('settings.save'). Jūs katru reizi lūdzat izvēlēties retāk sastopamo modeli, bet nesaņemat atgriezenisko saiti, ja tas to nedara.
Nekas nesalūzt. Šis ir izšķirošais faktors. Burtisks teksts iziet tipa pārbaudi. Tas tiek sabūvēts. Tas tiek atveidots. Tas iztur jūsu testus. Nekur jūsu izstrādes ķēdē nav sarkanas atzīmes, kas paziņotu, ka lietotājs Vācijā tūlīt ieraudzīs angļu valodas paziņojumu. Defekts ir neredzams, kamēr kāds nepārslēdz lokalizāciju un neritina lapu tālāk.
Salīdziniet to ar trūkstošu importu vai nepareizu prop tipu — aģents par to saņem labojumu dažu sekunžu laikā. Netulkots teksts ir vienīgā kļūdu kategorija, ko jūsu rīku ķēde klusībā pieņem, tāpēc tā ir vienīgā kļūdu kategorija, kas uzkrājas.
Kuri teksti visbiežāk noplūst?
Tie, kas pievienoti pēdējie, ar vismazāko uzmanību.
Izejiet cauri jebkurai AI atbalstītai kodabāzei, kas sākotnēji bija daudzvalodu, un pamestā angļu valoda dzīvo paredzamās vietās:
- Kļūdu un veiksmes paziņojumos, jo īpaši tajos, kas pievienoti, labojot nesaistītu kļūdu
- Tukšos stāvokļos un ielādes tekstos, kas tiek uzrakstīti vienreiz un nekad netiek pārskatīti
- Formu validācijas ziņojumos, kas bieži tiek ģenerēti tieši shēmas iekšienē
- Pieejamības atribūtos:
aria-label,alt,title - Apstiprinājuma dialogos un destruktīvu darbību tekstos
- Jebkurā
catchblokā
Modelis ir konsekvents. Jūsu galvenās plūsmas tiek tulkotas, jo jūs tās aplūkojat. Malas paliek burtiski rakstītas, jo neviens tās neatver otrā lokalizācijā.
Tam pastāv arī otrās kārtas variants. Kad aģents pievieno burtisku tekstu blakus jau iztulkotam kodam, tas dažreiz „izpalīdzīgi” izgudro atslēgu, kas neatbilst jūsu nosaukumvietu shēmai, tāpēc jūs beigās iegūstat errors.saveFailed vienā failā un settings_save_error citā. Tagad jums ir gan netulkoti teksti, gan sadrumstalota atslēgu telpa. Ja atrodaties šī ceļa sākumā, mūsu rokasgrāmata par AI ģenerētas lietotnes lokalizēšanu apraksta sākotnējo sakārtošanu.
Vai .cursor/rules vai AGENTS.md var to apturēt?
Tie palīdz, un jums vajadzētu tādu uzrakstīt, taču tie ir vadlīnijas, nevis izpildes mehānisms.
Instrukciju failu slānis pēdējā laikā ir standartizējies. AGENTS.md sākās kā ražotājneitrāla konvencija 2025. gadā, un tagad to pārvalda Agentic AI Foundation, kas darbojas Linux Foundation paspārnē. To natīvi nolasa Cursor, Codex, Copilot, Gemini CLI, Aider, Windsurf un Zed, kas nozīmē — viens fails jūsu repozitorija saknē sasniedz katru jūsu komandas lietoto aģentu. Cursor arī atbalsta ierobežota tvēruma projekta noteikumus kā .mdc failus zem .cursor/rules/, kur frontmatter kontrolē aprakstu, failu maskas un to, vai noteikums tiek piemērots vienmēr. Praktiskais uzstādījums 2026. gadā ir AGENTS.md saknē pārnesamībai, plus ierobežota tvēruma Cursor noteikumi tur, kur automātiskā pievienošana attaisno sevi.
Darbojošos i18n bloks izskatās šādi:
## Internationalization
- Never write user-facing text as a literal in JSX or in a string passed to a UI component.
- All user-facing text goes through the translation function from `next-intl`.
- Keys follow `feature.element.state` in lowerCamelCase, e.g. `settings.save.error`.
- Add the English value to `messages/en.json` only. Never hand-edit other locale files.
- This includes toasts, empty states, validation messages, `aria-label`, `alt` and `title`.
Tas manāmi samazinās noplūdes līmeni. Tas to nesamazinās līdz nullei, jo noteikumu faili sacenšas par uzmanību ar visu pārējo konteksta logā, un garās aģenta sesijās notiek novirze. Uztveriet šo slāni kā biežuma samazinātāju, nevis garantiju.
Kā panākt, lai netulkots teksts izraisītu sabūvēšanas kļūdu?
Pievienojiet lint noteikumu, kas burtisku tekstu JSX kodā uzskata par kļūdu, un pēc tam palaidiet to nepārtrauktās integrācijas procesā.
Standarta izvēle ir no-literal-string noteikums no eslint-plugin-i18next. Pēc noklusējuma tas validē tikai vienkāršu tekstu JSX marķējumā, nevis katru burtisko vērtību failā, un tieši tas padara to izmantojamu reālā kodabāzē, nevis pārvēršas par kļūdaino trauksmju sienu. Tas atbalsta ignorēšanas šablonus ar regulārām izteiksmēm, izņēmumus funkcijām, kuras zināt esam drošas, un tikai-marķējuma režīmu.
Sākotnējā konfigurācija:
// eslint.config.js
import i18next from 'eslint-plugin-i18next';
export default [
{
files: ['**/*.{jsx,tsx}'],
plugins: { i18next },
rules: {
'i18next/no-literal-string': [
'error',
{
markupOnly: true,
ignoreAttribute: ['data-testid', 'className'],
ignore: ['^[0-9]+$', '^\\s*$'],
},
],
},
},
];
Palaidiet to savā konveijerā, ne tikai redaktorā:
npx eslint . --max-warnings=0
Tagad neredzamajam defektam ir sarkana atzīme. Aģents saņem tādu pašu atgriezenisko saiti par netulkotu tekstu, kādu tas jau saņem par tipa kļūdu, kas nozīmē, ka tas var izlabot savu kļūdu tajā pašā sesijā, nevis atstāt to atklāt lietotājam citā lokalizācijā. Ja vēlaties plašāku ainu par i18n integrēšanu Cursor projektā no nulles, skatiet mūsu 15 minūšu Cursor un Next.js pamācību un Cursor integrācijas lapu.
Kāpēc ar neizdodošos lint noteikumu vien nepietiek?
Tāpēc, ka sarkana sabūvēšana pasaka, ka teksts eksistē. Tā to netulko.
Kad noteikums nostrādā, kādam vēl jāizvēlas atslēga, kas atbilst esošajām nosaukumvietām, jāpievieno angļu valodas pirmvērtība un jāsagatavo pārējās lokalizācijas. Vientuļā projektā, kas tiek izlaists vairākas reizes dienā, šis darbs tiek atlikts. Pietiekami ilgi atliekot, godīgais risinājums kļūst par faila pievienošanu ignorēšanas sarakstam — un tad esat atpakaļ tur, no kurienes sākāt, tikai ar papildu konfigurāciju.
Šī ir plaisa, kas atrisinātu problēmu pārvērš atkārtotā parādā. Pirmais un otrais slānis maina to, cik bieži problēma parādās un cik ātri par to uzzināt. Neviens no tiem neveic pašu darbu.
Kā izskatās trīs slāņu uzstādījums?
Instrukcija, izpilde, automatizācija. Katrs slānis notver to, ko iepriekšējais palaida garām.
Pirmais slānis — instrukcija. Ierakstiet i18n bloku AGENTS.md failā repozitorija saknē un pievienojiet ierobežota tvēruma .cursor/rules/i18n.mdc ar maskām savām komponenšu direktorijām. Izmaksas: piecpadsmit minūtes, vienreiz. Efekts: mazāk burtisku tekstu jau no sākuma.
Otrais slānis — izpilde. Ieslēdziet no-literal-string un neļaujiet nepārtrauktajai integrācijai to ignorēt. Izmaksas: pēcpusdiena ignorēšanas šablonu pieskaņošanai esošajai kodabāzei. Efekts: neviens burtisks teksts nesasniedz jūsu galveno zaru nepamanīts, un aģents var pats sevi izlabot.
Trešais slānis — automatizācija. Ļaujiet izgūšanai, atslēgu veidošanai un tulkošanai notikt bez jūsu iesaistes. Šo slāni aizņem globalize.now. Tas darbojas virs jūsu i18n izpildlaika, nevis to aizstāj: next-intl vai i18next joprojām atveido tekstus. globalize.now atklāj jauno burtisko tekstu, ģenerē atslēgas, kas atbilst jūsu projektā jau esošajām nosaukumvietām, tulko tās visās konfigurētajās lokalizācijās un ar katru Git push commito atjauninātos lokalizācijas failus atpakaļ. Iestatiet to vienreiz — pievienojiet repozitoriju vietnē globalize.now — un nav neviena manuāla soļa, ko izlaist. To varat arī instalēt savā aģentā ar:
npx skills add globalize-now/globalize-skills
Plāni sākas no 5 € mēnesī; 20 € Starter plāns katru mēnesi ietver 20 € tulkošanas kredīta (aptuveni 200 000 vārdu), bet patēriņš virs iekļautā apjoma tiek rēķināts pēc tās pašas cenas par rakstzīmi. Nav maksas par lietotāju vietām, nav maksas par valodu skaitu, un reģistrējoties saņemat 5 € tulkošanas kredītu bez kartes pievienošanas. Detalizētāka informācija izstrādātājiem ir izstrādātāju lapā, bet īsāka versija tiem, kas veido produktus ar AI rīkiem, — vibe coderu lapā.
Šo trīs slāņu jēga ir tāda, ka neviens no tiem nav atkarīgs no jūsu disciplīnas noturēšanās simtiem aģenta sesiju garumā. Noteikumu fails samazina biežumu, lint noteikums padara kļūmes skaļas, bet sinhronizācija padara labojumu bezmaksas. Tieši šī kombinācija saglabā daudzvalodu lietotni daudzvalodīgu, kamēr aģents to turpina pārrakstīt.
Jūsu i18n uzstādījums nav trauslākā vieta. Trauslā vieta ir cikls starp aģenta uzrakstīto tekstu un šī teksta nonākšanu lokalizācijas failā. globalize.now noslēdz šo ciklu ar katru push.
globalize.now pārvērš burtiski ierakstītus lietotnes tekstus tulkošanai gatavos lokalizācijas failos un pastāvīgi tos atjaunina līdz ar katru jauno versiju.
Izmēģiniet globalize.now bez maksas