Replit rakenduse muudad mitmekeelseks, ühendades selle Git-hoidla GitHubiga ja hoides tõlkekataloogid selles hoidlas Git'i lisatud failidena. Replit salvestab juba iga Agenti kontrollpunkti Git commitina, mistõttu hoidla on olemas juba enne, kui hakkad keeltele mõtlema; töö seisneb selle GitHubi viimises ja kataloogide sama ajaloo kaudu tagasi toomises. globalize.now on AI-põhine lokaliseerimise infrastruktuur: see loob võtmed ja lokaalifailid, ning jooksuaegne teek, mida su rakendus juba kasutab, serveerib neid. Ühtegi armatuurlauda jooksuaegses teekonnas ei ole ning miski ei tõlgi lehte pärast selle laadimist.

Miks ei toimi agendilt rakenduse tõlkimise palumine?

Sest pole midagi, millesse tõlkida. Kui palud Replit Agentil luua armatuurlaua, kirjutab see <h2>Your bookings</h2> komponenti, mitte otsingut kataloogi vastu. Iga pealkiri, nupp, tühi olek, teavitus ja valideerimisviga maandub JSX-i sõna-sõnalise tekstina selles keeles, milles palve esitasid.

Nii et kui palud hiljem agendil „tõlgi rakendus afrikaani keelde“, saad ühe kahest poolikust tulemusest: teise koopia komponentidest, kus tekst on ära vahetatud, või käsitsi kirjutatud translations objekti, mis katab ekraane, mida agent juhtus vaatama. Kumbki neist pole lokaalikiht. Järgmine funktsioon tarnitakse taas inglise keeles. Kirjeldasime sama korduvat mustrit artiklis Cursor lisab pidevalt sisse kirjutatud stringe; Replit Agent käitub samamoodi, sest ta lahendab talle ette antud korralduse, mitte selle taga olevat arhitektuuri.

Lahendus on struktuurne: anna stringidele võtmed, pane tõlked failidesse ning lase rakendusel neid faile jooksuajal lugeda. See ongi see, mida „mitmekeelne“ koodibaasis tähendab, ning see on ühekordne muudatus.

Mida Replit Agent tegelikult genereerib?

Tavapärase veebiprojekti, mis ongi hea uudis. Replit'i kureeritud rakendustüübid on üles ehitatud React'ile koos ShadCN UI-ga esiotsas, tavaliselt paaris Express-serveriga samas projektis, kõik TypeScriptis. Alates 2025. aasta septembrist töötab Agent ka mis tahes raamistikuga, mille ise kaasa tood, sealhulgas imporditud GitHubi hoidlatega, seega on võimalik ka Next.js või Vue projekt; vaikimisi tee on siiski React'i tehnoloogiapinu.

Lokaliseerimise seisukohalt on tehnoloogiapinu ainus fakt, mis loeb, ning see on standardne pind. React pluss Vite pluss TypeScript on kõige paremini toetatud kombinatsioon i18n-ökosüsteemis: i18next, Lingui ja react-intl toetavad seda kõik otse. Kui Agent ehitas sulle hoopis Next.js rakenduse, on valik next-intl, react-i18next ja Lingui vahel, ning see võrdlus on eraldi artikkel.

See, mis erineb pelgalt front-end'i ehitavast tööriistast, on projekti teine pool. Replit rakendusel on tavaliselt server ning ka serveritel on stringe. Sellest lähemalt allpool.

Kus asub Git-hoidla Replit rakenduses?

See on juba olemas. Replit'i versioonihaldus on aluselt Git ning Agenti kontrollpunktid on selles hoidlas commitid. Iga kord, kui Agent lõpetab funktsiooni ja pakub sulle tagasipöördumispunkti, on ta teinud commiti. Replit'i enda dokumentatsioon soovitab pikaajalise jälgimise jaoks lülituda tavaliste Git-commitite peale, kui töötad väliste hoidlatega — mis ongi täpselt praegune olukord.

Selle GitHubi viimiseks:

  1. Lisa projektieditorite Tools jaotisest Git-tööriist.
  2. Ühenda oma GitHubi konto connected services alt ning ühenda seejärel hoidla Git-paneelist. Kui projekti pole veel lähtestatud, pakub paneel seda esmalt teha.
  3. Tee push. Paneel teeb push'i ühe klõpsuga ning jääb sünkroonis kõigega, mida käivitad Shellis, seega toimib ka git push origin main.

Replit toetab ka GitLabi ja Bitbucketit, ning sama töövoog kehtib. Oluline pole pakkuja; oluline on see, et hoidla asub nüüd kohas, kus lokaliseerimistöö saab selle vastu pull request'i avada.

Tee seda enne, kui puudutad ühtegi stringi. Lokaliseerimistöö on failitöö ning diff on õige koht selle ülevaatamiseks.

Mida tähendab „ilma armatuurlauata“ Replit rakenduse puhul?

See tähendab, et tõlgitud stringid on hoidlas olevad failid ning rakendus serveerib neid nagu iga teist ressurssi. Ei mingit script-silti, ei väliskutset lehe laadimisel, ei müüjakontot külastaja ja sinu sisu vahel.

Alternatiiv on jooksuaegne vidin, mis vahetab teksti välja pärast lehe joonistumist. Selle kulud on struktuursed: esimene joonistus on inglise keeles, tõlgitud sisu ei ole HTML-is, mida veebiroomajad esimesena loevad, kolmanda osapoole skript asub sinu tootmiskeskkonna teel ning su stringid elavad müüja poe sees, mistõttu lahkumine tähendab eksportimist. Selle argumendi Lovable'i versioon on artiklis Lovable'i rakenduse lokaliseerimine ilma armatuurlauata ning kandub muutmata kujul üle ka Replitile.

On üks Replit'ile eriomane põhjus, miks see siin veelgi olulisem on. Replit teeb rakenduse sinu eest juurutuse, seega on jooksev koopia sinu Replit-domeenil see, mis projektis juurutamise hetkel oli. Vidin tõlgiks selle juurutuse väljastpoolt. Hoidlas olevad kataloogid tähendavad, et juurutus sisaldab juba iga keelt ning Replit'i eelvaade näitab sulle saksakeelset versiooni juba enne selle tarnimist.

Kompromiss on tõeline ja väärib mainimist: sisu muudatus tähendab commiti ja uuesti juurutamist, mitte salvestusnuppu. Üksinda Replit'ist tarniva looja jaoks pole see midagi tähtsat; kellelegi, kes eeldab, et saab projekti puudutamata reaalajas sisu muuta, on see aga piirang.

Kuidas hoidlapõhine seadistus töötab?

Ühenda hoidla globalize.now rakenduses. Teisendus käivitub kordumatult kogu koodibaasil: kõvakoodiga stringidest saavad katalooogiüksused koos võtmetega ning komponendid hakkavad neid lugema runtime library'st, mitte enam sõnasõnaliste literaalidena. See on ühekordne operatsioon, mitte midagi, mis hiljem uuesti käivitub.

Pärast teisendust tõlgivad push-tööd uued katalooogiüksused, kui rakendus kasvab. Palu Agendil luua uus seadete leht, tee push ning uued üksused saavad tõlgitud – olemasolevad jäävad puutumata. Katalooogid tulevad tagasi commititud failidena, JSON või PO, olenevalt runtime library'st, ning pull request'ina, mida vaatad üle nagu iga teist muudatust.

Kaks piiri, sest see kategooria on segane. globalize.now ei asenda runtime library't – i18next, Lingui ja next-intl teevad jätkuvalt oma tööd. Samuti ei ole tegemist tõlkemootoriga, mis konkureeriks DeepL-iga. See on vahepealne kiht, mis loob võtmed ja locale-failid. Arendaja ülevaade selgitab tehnilist poolt.

Kuidas tõlked jõuavad tagasi Repliti?

Sama Git-paneeli kaudu, ainult vastupidises suunas. See on samm, mis erineb Boltist või Lovable'ist, sest Replit on ka koht, kus rakendus töötab.

  1. Vaata üle ja liida pull request GitHubis.
  2. Vali Replit Git-paneelis Pull. Kui sina või Agent olete vahepeal samu faile muutnud, tõstab paneel konfliktid esile ning saad need enne liitmise lõpetamist redaktoris lahendada.
  3. Käivita uus juurutus. Katalooogid on nüüd projekti osa, seega juurutus sisaldab kõiki keeli.

Üks Replitile omane hoiatus: Agendi kontrollpunktid taastavad kogu projekti seisu, sealhulgas failid. Kui pöördud tagasi kontrollpunkti juurde, mis loodi enne tõlkeharu pull'imist, kaovad katalooogid koos sellega. Käsitle liitmist verstapostina, lase Agendil pärast seda luua uus kontrollpunkt ning pöördu tagasi selle, mitte varasema juurde.

Millised stringid asuvad serveris?

Need, mida esikülg kunagi JSX-ina ei näe. Replit-rakendusel Express-taustaga on teine stringi pind: API veateated, valideerimisvastused, e-kirjade pealkirjad, teavituste sisu, CSV päised – kõik, mida server enne saatmist vormindab. Esikülje kataloog neid ei kata ning vidin ei näe neid üldse, sest need pole kunagi DOM-is.

Muster on sama, mis kliendipoolel, ainult rakendatuna serveripoolel. Anna serverile koopia runtime library'st, loe külastaja locale päringust (Accept-Language päis või kasutaja kirje locale-väli) ning vorminda vastused kataloogist, mitte string-literaalidest. Võtmete nimeruum jääb jagatud, seega errors.booking.overlap tähendab sama asja nii teavituses kui ka 409 vastuses.

Kui seda vahele jätta, näib rakendus mitmekeelne kuni esimese veani – seejärel räägib see inglise keeles.

Mida kontrollida enne teise keele lisamist?

Vaata see läbi enne teisendust, sest iga punkt on odavam parandada nüüd kui pärast viie keele käivitamist:

  • Konkatenatsiooniga stringid. "Welcome back, " + user.name ei saa tõlkija ümber järjestada. Kasutage selle asemel interpolatsiooni.
  • Mitmused. Inglise keeles on kaks vormi; poola keeles kolm, araabia keeles kuus. Ternaar count === 1 peal on enamikus keeltes vale.
  • Kuupäevad, arvud ja valuuta. Kasuta Intl, mitte string-vormindust, nii kliendi- kui ka serveripoolel.
  • Paigutus. Saksa ja soome keel on inglise keelest pikemad. Fikseeritud laiusega nupud murduvad ning Tailwindi klassid näivad korras olevat, kuni tekst kohale jõuab.
  • Paremalt vasakule. Kui araabia või heebrea keel on plaanis, otsusta see nüüd. RTL-i hilisem lisamine on kulukas.
  • Kataloogide lahknemine. Kui katalooogid on olemas, siis ühte lokaali lisatud, aga teistesse mitte lisatud võti on vaikiv viga. Miks tõlkefailid sünkroonist väljas käivad selgitab, kuidas see tekib ja mida push-töö selle vastu teeb.

Hinnastamine on tööruumipõhine, ilma kasutajapõhise või keelepõhise tasuta, seega on keelte arv toote-, mitte eelarveotsus. Praegused numbrid on hinnalehel. Sama ülevaate leiab teiste ehitajate kohta vibe-koodijate ülevaatest, mis on alguspunktiks.

Kust alustada

Kui su Replit-projekt on juba GitHubiga ühendatud, on järgmine samm teisendus selle hoidla peal, mitte tööriistavalik. Kui see pole veel ühendatud, on Git-paneel samm enne seda.

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