Kontrollige enne väljalaset seitset asja, kui Codex, Claude Code või Cursor on teie rakenduse ühe promptiga ära tõlkinud: kas pikad tekstid mahuvad, kas mitmusevormid vastavad igale keelele, kas muutujad on säilinud, kas terminid on järjepidevad, kas toon kõlab emakeelsele kõnelejale õigesti, kas iga võti on olemas igas lokaalis ja kas järgmine funktsioon üldse tõlgitakse. globalize.now on tehisintellektil põhinev lokaliseerimise infrastruktuur ning enamik probleeme, mida pärast ühekordset tõlget näeme, on mehaanilised – see on hea uudis, sest mehaanilisi probleeme saab kontrollida.
Esimene läbimine harva probleemiks on. Tänapäevased agendid toodavad loetavaid tõlkeid kiiresti. Ühes promptis puudub aga igasugune samm, mis väljundit kontrolliks, ja just seda sammu need kontrollid pakuvadki.
Kas tekst mahub pärast tõlkimist ära?
Sageli mitte ning esimesena jäävad hätta nupud. W3C juhised teksti suuruse kohta tõlkes märgivad, et mida lühem on lähtesõnum, seda suurem on tõenäoline pikenemine, mistõttu kahesõnaline nupusilt kasvab proportsionaalselt rohkem kui lõik. Samuti juhitakse tähelepanu sellele, et sellistes keeltes nagu saksa keel ei pruugi liitsõnad murduda ning et mõned kirjasüsteemid vajavad ladina tekstist rohkem ruumi nii horisontaalselt kui vertikaalselt.
Agent, kes tõlgib JSON-faili stringe, ei näe ekraani, seega ei saa ta teada, et „Save changes“ täidab nüüd nupu servast servani. Käivitage rakendus pikimas lokaalis, mida toetate, käige läbi põhivoogud ja otsige kärbitud teksti, murdunud nuppe ja kärbitud tabelipäiseid. Kui toetate paremalt vasakule keeli, tehke sama läbivaatus ühes neist; Lovable'i rakenduste araabia ja RTL-i juhend käsitleb suunda, mida pelgalt ületäitumise kontrollid ei kata.
Püsiv lahendus on paigutus, mitte lühemad tõlked: laske konteineritel kasvada, vältige tekstil fikseeritud laiust ja ärge lühendage, et ära mahtuda. Paluge see osa teha oma agendil, sest see on kood.
Kas mitmusevormid vastavad sihtkeelele?
Kontrollige seda varakult, sest viga ei anna endast märku. Unicode CLDR defineerib kuus mitmusekategooriat: zero, one, two, few, many ja other. Inglise keel kasutab ainult kategooriaid one ja other. Vene keel kasutab kategooriaid one, few, many ja other. Kõmri keel kasutab kõiki kuut ning i18next'i dokumentatsioon näitab, et araabia keeles on samuti kõik kuus mitmusevõtit.
Agent, mis kopeerib inglise keele paari vene või araabia faili, toodab kataloogi, mis parsitakse ja renderdub, kuid näitab valet vormi iga arvu puhul, mis vajab faili puuduvat kategooriat. Veateadet ei tule. i18next'iga tuleb meeles pidada, et muutuja nimi peab olema täpselt count, ja dokumentatsioon ütleb, et selle puudumisel ei pöörduta tagasi lihtsa võtme juurde. Sama agent, kes kirjutab komponenti count === 1 ? 'item' : 'items', teeb sama vea juba enne tõlkimist; mis on ICU MessageFormat ja miks see tehisintellekti loodud rakendusi komistama paneb käsitleb süntaksi külge.
Kontroll on mehaaniline: võrrelge iga lokaali puhul mitmusevõtmeid kategooriatega, mida see keel nõuab.
Kas interpolatsioonimuutujad on säilinud?
Mitte alati, ja selle selgitab välja skript. Interpolatsioonimuutujad, nagu {{name}} või {count}, peavad igas tõlkes olema täpselt sellisel kujul, nagu on kirjutatud. Pikka faili tõlkides sõnastavad agendid mõnikord muutuja ümber, jätavad muutuja ära, kui lause kõlab ilma temata paremini, või tõlgivad sildi sisu. Tulemuseks on tühi koht, sõnasõnaline looksulg või kokkujooks.
Võrrelge iga tõlgitud stringi muutujate hulka selle lähtestringiga. See lühike Node'i skript teeb seda ning teatab ka võtmetest, mis on inglise keeles olemas, kuid puuduvad mõnes teises lokaalis:
import fs from "node:fs";
const [src, ...targets] = process.argv.slice(2);
const read = (f) => JSON.parse(fs.readFileSync(f, "utf8"));
const vars = (s) =>
[...String(s).matchAll(/\{\{?\s*[\w.]+\s*\}?\}/g)].map((m) => m[0]).sort().join(",");
const base = read(src);
let problems = 0;
for (const file of targets) {
const loc = read(file);
for (const [key, text] of Object.entries(base)) {
if (!(key in loc)) { console.log(file, "missing", key); problems++; continue; }
if (typeof text === "string" && vars(text) !== vars(loc[key])) {
console.log(file, "variable mismatch", key); problems++;
}
}
}
process.exit(problems ? 1 : 0);
Käivitage seda CI-s kujul node check-locales.mjs locales/en.json locales/de.json locales/ru.json. Skript eeldab ühetasandilisi võtmefaile; kohandage tsüklit, kui teie kataloog on pesastatud.
Kas terminoloogia on järjepidev?
Ühe vastuse piires on see järjepidev, kuid mitme vastuse vahel hakkab triivima. Kui suure rakenduse tõlge on jaotatud failide, seansside või partiide vahel, ei taga miski, et „workspace“, „project“ ja teie toote nimi tõlgitakse iga kord samamoodi. Lõpuks on nupul üks asi ja abilehel teine.
Kirjutage terminid üks kord üles: koostage sõnastik toodete nimedest, funktsioonide nimedest ja sõnadest, mida ei tohi tõlkida, ning laske tõlkesammul seda lugeda. globalize.now genereerib koodibaasi teisendamisel ühise sõnastiku, nii et terminid on andmetena olemas enne tõlkimise algust. Ilma tööriistata on miinimum lühike sõnastikufail, millele teie agendi juhised viitavad; AGENTS.md reeglite postitus näitab, kus need juhised asuvad.
Kas see kõlab emakeelsele kõnelejale õigesti?
See on ainus kontroll, mida skript teha ei saa. Register, viisakusaste ja suurtähtede kasutus on need kohad, kus ühekordsed tõlked paistavad masinatõlkena: vale pöördumisviis, käskivas kõneviisis nupud, mis kõlavad nagu korraldused, ja suurtähtedega pealkiri keeles, kus see mõjub karjumisena.
Ärge vaadake üle iga stringi. Valige iga keelepere kohta, mille keeli te välja annate, üks keel ja laske emakeelsel kõnelejal lugeda esmakäivituse ekraane, ostu- või registreerumisvoogu ning veateateid. Just nendel ekraanidel läheb toon teile kasutajatega kalliks maksma. Kirjutage nende parandused sõnastikku, et järgmine käivitus algaks neist.
Kas iga võti on olemas ja kas iga string jõudis kataloogi?
Kaks erinevat lünka näevad ekraanil ühesugused välja. Võti võib olla inglise keeles olemas, kuid lokaadis puududa, mille ülaltoodud skript üles leiab. Või võib string olla komponenti käsitsi sisse kirjutatud ega ole kunagi kataloogi jõudnud, mistõttu ükski tõlge seda katta ei saa. Agendid jätavad teist sorti stringe atribuutidesse, toast-teadetesse ja veateadetesse sagedamini kui nähtavasse tekstu; miks agendid hardcoded stringe juurde lisavad käsitleb seda mustrit ja lint-reeglit, mis selle kinni püüab.
Lülitage rakendus mitteinglise lokaalile ja klõpsake see läbi. Iga allesjäänud inglise tekst on kas puuduv võti või string, mis ei jõudnud kunagi süsteemi, ja parandus on kummalgi juhul erinev.
Kas järgmine funktsioon tõlgitakse?
Ainult siis, kui tõlkimine on osa koodi väljastamise viisist, ja just seda kontrolli ei suuda ühest promptist koosnev käivitus läbida. Prompt tõlkis rakenduse sellisena, nagu see oli sel pärastlõunal. Järgmine funktsioon, mille teie agent ehitab, jõuab kohale inglise keeles, samades failides, ja lokaalid jäävad funktsioon funktsioonilt maha. Miks tõlkefailid sünkroonist välja lähevad kirjeldab, kuidas see kuhjub.
Siin lahknevad ühekordne lähenemine ja järjepidev töövoog. Lokaliseerimise liikumine arendustsüklisse esitab seisukoha põhjenduse; praktiline versioon on see, et teisendus toimub üks kord ja hilisemad muudatused tõlgitakse seal, kus need tehakse. globalize.now puhul ühendate hoidla rakenduses, koodibaas teisendatakse üks kord ning push-tööd tõlgivad pärast seda uued kataloogiühikud, tulemused tulevad kohale muudatustena, mille te üle vaatate ja liidate. Käitusaja teek ja kataloogi vorming jäävad teile. Tiimid, kellel on juba inimtõlkija, säilitavad selle ülevaatussammu; see lihtsalt ei ole enam ainus asi, mis seisab ainult ingliskeelse koodi ja väljalaske vahel.
Kui eelistate hoida seda oma skriptides, on miinimum eelnev skript CI-s koos reegliga, et uued stringid läbivad kataloogi. Kuidas lokaliseerida tehisintellekti loodud rakendust käib kogu tee läbi ja Claude Code'i juhend käsitleb seda agenti eraldi.
Kust alustada?
Käivitage skript juba täna oma praeguste lokaadifailide peal; see võtab minuti ja ütleb, kas struktuur on korras. Seejärel avage rakendus oma pikimas lokaalis ja klõpsake esmakäivituse voog läbi. Kui olete välja lasknud tehisintellektiga ehitatud rakenduse ja soovite, et teisenduse, tõlkimise ja hilisemad uuendused võtaks enda peale süsteem, mitte ei hoitaks neid käsitsi korras, on vibe coder'ite leht ülevaade, arendaja viide katab agentide seadistused ja hinnastus asub eraldi lehel.
globalize.now muudab rakenduse koodis olevad tekstid tõlkeks valmis lokaale failideks ja hoiab neid ajakohasena, kui sa uusi versioone välja lasid.
Proovi globalize.now tasuta