Jūs lūdzāt Claude Code pievienot ielādes stāvokli pierakstīšanās veidlapā. Ielādes stāvoklis darbojas. Poga tagad saka „Log in” nevis „Sign in”, kļūdas ziņojums kļuvis draudzīgāks, un viens virsraksts pēkšņi rakstīts ar mazo sākumburtu teikuma stilā. Neviens par to neko nelūdza, visi testi iziet cauri, un, ja vien kāds nelasa visu izmaiņu kopu (diff) vārdu pa vārdam, tas nonāk izlaidumā.
Šis raksts ir par šo konkrēto kļūmi: esošs, apstiprināts teksts, ko AI kodēšanas aģents klusi pārformulē, un darbplūsma, kas to novērš. Teksti, ko aģenti rada burtiski un bez atslēgām, ir cita problēma, kas aprakstīta rakstā kāpēc AI kodēšanas rīki turpina pievienot burtiskus tekstus. Kur produkta tekstiem vispār vajadzētu dzīvot — tas ir arhitektūras jautājums, kas aprakstīts rakstā koda dabai atbilstošs produkta teksts. Šis raksts paliek pie konkrētā gadījuma — pirmdienas rīta, kad formulējums mainījās un neviens par to nelēma. globalize.now ir koda dabai atbilstoša teksta pārvaldības sistēma ar iebūvētu lokalizāciju, un šis gadījums ir viens no iemesliem, kāpēc tā pastāv.
Kāpēc AI kodēšanas aģenti pārraksta saskarnes tekstus?
AI kodēšanas aģenti pārraksta saskarnes tekstus tāpēc, ka redz prozu, kas atrodas tieši komponentos; kad šis teksts dzīvo aiz atslēgām avota lokalizācijas failā, tā mainīšana kļūst par skaidru, pārskatāmu labojumu, nevis par kāda cita uzdevuma blakusefektu.
Komponenta iekšienē „Sign in” nav nekāda īpaša statusa. Tas ir teksta literālis JSX atribūtā, neatšķirams no className vai testa ID. Aģents tika trenēts uz miljoniem izmaiņu kopu (diff), kurās tuvumā esošā koda uzlabošana bija vēlama uzvedība, un modelim etiķetes „skaidrāku” padarīšana ir tas pats gājiens, kas mainīga pārdēvēšana. Nav gaidāmas tipa kļūdas, nav neizdevušos testa, nav īpašnieka anotācijas vārdiem. Pārformulēšana aģentam neko nemaksā.
Tad izmaiņa pārdzīvo pārskatīšanu tā paša iemesla dēļ. Pārskatītāji lasa loģiku. Formulējuma izmaiņa atrodas izmaiņu kopas (diff) vidū, kas leģitīmi ir par ielādes stāvokli, tā kompilējas, tā renderējas, un, ja momentuzņēmuma tests (snapshot test) sūdzas, ierastā atbilde ir atjaunināt momentuzņēmumu — kas fiksē jauno formulējumu tā, it kā tas būtu apstiprināts.
Vai noteikumu faili, piemēram, AGENTS.md, to tiešām aptur?
Aģentu noteikumu faili samazina biežumu; tie nepadara saskarnes tekstu neaizskaramu. Tieši arhitektūra padara labojumu redzamu.
Tomēr izveidojiet noteikumu failu — tas ir lētākais slānis, un tas strādā pietiekami bieži, lai tam veltītu trīsdesmit sekundes. Šis bloks darbojas AGENTS.md, CLAUDE.md un Cursor noteikumos (.cursorrules vai .cursor/rules/):
## UI copy policy — do not modify user-facing text
- Never change user-visible strings (button labels, headings, empty states,
error messages, tooltips, placeholder text) unless the task explicitly
asks for a copy change.
- User-visible text lives in the source locale file (e.g. locales/en.json).
Reference it by key. Never inline a new user-facing string in a component.
- If a task needs new user-facing text, add a key to the source locale file,
reference it, and list the new key in your summary for copy review.
- Any diff to the source locale file is a copy change. Call it out
separately — it needs its own approval, apart from code review.
Tagad godīgā daļa. Noteikums ir konteksts, un konteksts konkurē. Garā uzdevumā šī instrukcija ir viena rindiņa starp tūkstošiem koda marķieru (token), un dažreiz tā zaudē — sabiezināšanai (compaction), apakšaģentam, kas to nekad nav redzējis, vai spēcīgam paraugam apkārtējā failā. Vēl sliktāk — aģents, kas pārkāpj noteikumu, to nepaziņo. Jūs nesaņemat paziņojumu, ka jūsu formulējums mainījies; jūs saņemat izmaiņu kopu (diff), kurā tas gadās būt mainījies. Konvencija nav pārbaude.
Tāpēc noteikumu fails ir pirmais slānis — un tas slānis, kuram nevajadzētu uzticēties vienam pašam.
Kā padarīt teksta labojumu redzamu, nevis klusu?
Izņemiet katru lietotājam redzamu tekstu no komponentiem un novietojiet to aiz atslēgām avota lokalizācijas failā. Pēc tam aģentam, kas vēlas mainīt jūsu formulējumu, jārediģē fails, kura vienīgais mērķis ir formulējums.
Šis ir solis, ko noteikumu fails nespēj nodrošināt, un mehānisms ir vienkāršs. Kad komponenti atsaucas uz t('auth.signIn') tā vietā, lai no jauna rakstītu „Sign in”, notiek divas lietas vienlaikus. Komponentu izmaiņu kopas (diff) pārstāj saturēt tekstu, tāpēc aģentam, kas strādā pie jūsu ielādes stāvokļa, tur nav ko pārformulēt. Un katra teksta izmaiņa, ko veic aģents vai cilvēks, nonāk vienā failā — kur mainītā rindiņa ir notikums, kas jums rūp, nevis fona troksnis. Lokalizācijas faila izmaiņu kopas pārskatīšana aizņem sekundes. Sliktas pārformulēšanas atsaukšana ir viena rindiņa.
Lai būtu precīzi par to, ko šis risinājums dod: aģents joprojām var rediģēt lokalizācijas failu. Būtība nav tāda, ka vārdi kļūst neaizskarami — būtība ir tāda, ka to aizskaršana vairs nav blakusefekts, bet gan skaidrs, pārskatāms akts. Tā ir atšķirība starp uzzināšanu no izmaiņu kopas un uzzināšanu no klienta.
Pilns pamatojums tam, kāpēc patiesības avotam jāatrodas kodabāzē — nevis dizaina rīkā, kas ar to sinhronizējas — ir galvenajā rakstā koda dabai atbilstošs produkta teksts. Šim rakstam pietiek ar vienu secinājumu: atslēgots teksts ir tas, kas pārvērš jūsu noteikumu failu no lūguma par kaut ko pārbaudāmu.
Kā izskatās pārskatīšanas kontrolpunkts?
Uztveriet jebkuru izmaiņu kopu avota lokalizācijas failā kā teksta izmaiņu un novirziet to tam, kam pieder vārdi.
Konkrēti: ievietojiet lokalizācijas direktoriju CODEOWNERS, lai jebkurai tās izmaiņai tiktu pieprasīts teksta īpašnieka — cilvēka — apstiprinājums. Pievienojiet vienu rindiņu PR veidnē — „vai šis PR maina lietotājam redzamo formulējumu, un vai tas bija uzdevums?”. Un saglabājiet noteikumu faila prasību, ka aģents savā kopsavilkumā uzskaita mainītās atslēgas; kad tas to izpilda, pārskatīšana ir tūlītēja, un kad neizpilda, CODEOWNERS mehānisms to tik un tā notver.
Mazā komandā tas ir vieglāk, nekā izklausās. Lokalizācijas faila izmaiņu kopa ir īsa, tā lasāma vienkāršā valodā, un „vai šai pogai tagad vajadzētu teikt Log in?” ir lēmums, ko kāds var pieņemt piecās sekundēs — ar noteikumu, ka šis jautājums tiešām tiek uzdots viņam priekšā, kas arī ir kontrolpunkta vienīgais uzdevums.
Ko darīt, ja aģents jau ir pārrakstījis jūsu tekstu?
Vispirms atjaunojiet apstiprināto formulējumu, tad pievienojiet tekstiem atslēgas, lai nākamā pārrakstīšana parādītos kā diff.
Bojājuma atrašana ir git uzdevums: salīdziniet skartos komponentus ar pēdējo commit, kuram uzticaties, un lasiet tikai teksta burtiskās vērtības. Atjaunojiet to, kas mainījās. Ja nevarat ar pārliecību pateikt, kurš formulējums bija apstiprinātais — poga saka „Log in”, mārketinga lapa saka „Sign in”, un neviens artefakts nefiksē, kurš ir pareizais — esat nonākuši pie dziļākas problēmas, ko šis incidents baro. Teksta novirze (copy drift) ir situācija, kad lietotājam redzamais teksts atšķiras no sava apstiprinātā avota dažādās vietnēs un laika gaitā, bez vienota patiesības avota, no kura novirzīties. Šis termins, tā cēloņi un sekas ir aprakstīti atsevišķi: kas ir teksta novirze.
Pēc tam pievienojiet atslēgas tam, ko atjaunojāt, sākot ar tekstiem, kurus skāris aģents. Tie ir pierādāmi tie, kas ir uguns līnijā.
Kur šeit iederas lokalizācija?
Klusa pārrakstīšana vienā valodā ir kaitinoša, bet desmit valodās — tā ir atbildība: katrs tulkojums, kas atvasināts no vecā formulējuma, tagad ir novecojis, un nekas nesignalizē, ka vajag tulkot no jauna.
Šeit aģenta incidents saasinās. Publicējat pārrakstīto angļu tekstu, bet jūsu vācu, japāņu un spāņu versijas joprojām saka veco — tagad virsmas nesakrīt ne tikai starp ekrāniem, bet arī starp valodām. Katalogu izkrišana no sinhronizācijas ir sava veida kļūme ar saviem risinājumiem, aprakstīta tulkošanas failu nesinhronizācijā.
Atslēgām piesaistīts teksts noslēdz arī šo cilpu, jo mainīts avota teksts ir redzams notikums, ap kuru grupējas tā tulkojumi, nevis burtiska vērtība, kas klusi pārvietojusies. Tieši šāda ir globalize.now ideja: teksts atrodas kodabāzē, ar vienotu avotu aiz atslēgām, un lokalizācija ir tā pati darbība, nevis papildinājums — savienojiet repozitoriju, un katra valoda tiek atvasināta no šī viena avota. Komandas, kas izstrādā ar AI kodēšanas rīkiem, ar to sastopas visagrāk, tāpēc mēs rakstām gan izstrādātājiem, gan cilvēkiem, kas izstrādā ar AI rīkiem.
Nākamreiz, kad aģents strādās pie jūsu komponentiem, jautājums būs — vai mainīts nosaukums parādīsies kā apzināts lēmums vai kā pārsteigums. globalize.now nodrošina vienotu avotu jūsu lietotājam redzamajiem tekstiem repozitorijā, ko savienojat, un atvasina katru valodu no šī viena teksta.
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