Lisasime kogu oma veebilehele jaapani ja Brasiilia portugali keele 31 euroga
29. septembril avaldasime globalize.now Jaapani ja Brasiilia portugali keeles. Iga leht, iga hinnatabel ja kõik 61 blogipostitust. Tõlkimine ise võttis kaheksa minutit ning rakendus arvestas selle eest umbes 31 €. globalize.now on tehisintellektil põhinev lokaliseerimise infrastruktuur ning siin on, kuidas selle rakendamine meie enda veebilehel välja nägi – kõik numbrid on võetud tööülesande lehelt ja Git'i ajaloost, mitte mälu järgi.
Meie postitus selle kohta, mis maksis lokaliseerimise kasvustrateegia 2017. aastal, lõpeb tõdemusega, et me ei avalda veel oma numbreid. See on esimene. See on kulunäitaja, mitte kasvunäitaja: kellelgi pole veel jõudnud aega minna lehele /ja/.
Mida me täpselt tõlkisime?
Kogu saidi, kaks korda. Siin on nimekiri, loetud hoidlast:
- Kasutajaliides: 1782 ingliskeelset stringi viies sõnumikataloogis (põhisait, hinnakujundus, võrdluslehed, integratsioonid ja tõlkenäited), umbes 21 000 sõna.
- Blogi: 61 postitust, umbes 110 000 sõna.
- Sihtkeeled: jaapani (
ja) ja Brasiilia portugali (pt-BR).
See teeb kokku ligikaudu 130 000 lähtesõna, mis läksid kahte keelde. Pull request puudutas 170 faili ja lisas 34 681 rida. Pärast liitmist loetleb saidikaart 811 URL-i 11 lokaali peale ja sait genereerib 962 staatilist lehte.
Kui kaua see aega võttis?
Kaheksa minutit tõlkimist, seejärel pikem kvaliteedikontroll. Meie tehnikadirektor Arturs lisas projektile need kaks keelt ning töö algas main kell 08:56 UTC. Tööülesande leht toob välja järgmise jaotuse:
| Etapp | Kestus |
|---|---|
| Tõlkimine (11 264 uut stringi, 5632 keele kohta) | 8 min 1 s |
| Automatiseeritud kvaliteedikontroll | 27 min 11 s |
| Toimetamine pull requestiks | 5 min 29 s |
Mõlemat keelt sisaldav commit jõudis kohale kell 09:29 UTC. Ülejäänud 45 106 stringi selles tööülesandes pärinesid tõlkemälust, kuna kaheksa olemasolevat keelt polnud muutunud.
Arturs pakkus meie meeskonna vestluses, et see võtaks umbes kümme minutit. Tõlkimise osas oli tal õigus, kogu töö kestuse suhtes aga liiga optimistlik – vahe tuleb kvaliteedikontrolli etapist. Eelistame kulutada 27 minutit masinaaega kontrollimisele, mitte jätta seda vahele.
Mida automatiseeritud kvaliteedikontroll leidis?
72 märgitud probleemi 11 264 uue stringi seas, kõik hinnatud väikseks. 11 192 läbis kontrolli puhtalt ning kvaliteedikontroll tegi ka 182 automaatset parandust.
Enamik meie avatud märkustest tulenes pikkuskontrolli ettevaatlikkusest jaapani keele suhtes. „Pricing” muutub sõnaks 料金 – kaks märki – ja pikkussuhe 0,29 jääb napilt alla 0,3 piiri. See on korrektne tõlge, mis lihtsalt käivitab tähestikulistele keeltele mõeldud heuristika, mitte viga. Jätame märkused siiski nähtavaks: kontroll, mis kunagi ei käivitu, pole ju tegelik kontroll.
Kui palju see maksis?
Umbes 31 €: projekti keelepõhise kuluvaate järgi oli see 15,72 € Jaapani ja 16,15 € Brasiilia portugali keele eest. Nii palju rakendus arvestab – täpselt sama, mida näeks ka klient sama mahu tõlkimisel. See pole meie sisemine mudelikulu ega mingi soodustus.
Ligikaudu 260 000 tõlgitud sõna peale kulub see umbes 12 senti 1000 sõna kohta. Muud tasusid ei lisandunud. Puuduvad nii keelepõhised kui ka kasutajakohased tasud, seega maksab kaheteistkümnenda keele lisamine sama palju kui kolmanda. Kehtivad hinnaplaanid leiab hinnalehelt.
Mida tehniline töö tegelikult sisaldas?
Üks pull request, mis ühendati sama pärastlõuna jooksul, ilma et sinna oleks jäänud üldse tõlkimist. Kui see avati, käivitus tõlketööülesanne uuesti ja võttis 56 390 stringist 56 370 otse tõlkemälust, mistõttu jõudsid juba tõlgitud kataloogid uutesse failidesse vaid seitsme minutiga. Tõlkimine ongi see osa, mis sai automatiseeritud. Uue lokaali registreerimine Next.js-i saidil on jätkuvalt sinu enda kood – ja tasub täpselt teada, mida see „oma kood” tähendab, enne kui seda planeerid.
Lokaali lisamine next-intl-le on üks rida suunamise konfiguratsioonis. Kõik, mis ehitab URL-i, loeb lokaali või loetleb teie lokaale, on ülejäänud diffi sisu:
- Suunamine: lokaalide nimekiri, pluss URL-i eesliite ülekirjutus
pt-BRjaoks (järgmine lõik). - SEO metaandmed: hreflang klastrid, kanoonilised URL-id,
og:locale(ja_JP,pt_BR) ja lokaalide nimekiri, mida metaandmete abifunktsioonid läbivad. - Vormindamine:
Intlsildidja-JPjapt-BR, et kuupäevad ja arvud kuvataks korrektselt. - Keelevahetaja: see lingib igale lokaalile tegeliku
<a href hreflang>kaudu, nii et roomikud saavad seda järgida. - Saidikaart ja kontrollid: saidikaardi generaator, lastmod kontroll, sisemiste linkide kontroll ja tõlke verifitseerija pidid kõik õppima kaks uut koodi tundma.
- Kataloogid: tühjad, ainult päistega
.pofailid kahe lokaali jaoks, mis täideti sama pull requesti käigus tõlkemälust.
Kui teie sait on vähem kohandatud kui meie oma, on suurem osa sellest nimekirjast lihtsalt konfiguratsioon. Kui ehitate kuskil URL-e käsitsi kokku – ja enamikul saitidel juhtub see kuskil – leiate iga sellise koha esimest korda siis, kui link tuleb valesti välja. Arendajate juhend katab seadistuse ja mida tehisintellektil põhinev lokaliseerimisagent tegelikult teeb katab jaotuse selle vahel, mis on automatiseeritud ja mis mitte.
Miks on Brasiilia portugali keel aadressil /pt-br/, mitte /pt-BR/?
Sest keelesilt ja URL-i segment on kaks erinevat asja erinevate ülesannetega.
Õige silt on pt-BR, vastavalt BCP 47-le. Kasutame seda kõikjal, kus keelt loeb masin: failinimedes, <html lang>, hreflang'is, og:locale ja Intl. Ainult URL on väiketähtedega:
// i18n/routing.ts (trimmed)
const prefixes = {
"pt-BR": "/pt-br",
} as const;
export const routing = defineRouting({
locales: ["en", "it", "de", "fr", "es", "lv", "hi", "lt", "et", "ja", "pt-BR"],
defaultLocale: "en",
localePrefix: { mode: "always", prefixes },
});
/** The URL path segment for a locale: `pt-BR` → `pt-br`, `de` → `de`. */
export function localeUrlSegment(locale: string): string {
const prefix = (prefixes as Record<string, string | undefined>)[locale];
return prefix ? prefix.slice(1) : locale;
}
Segatud tähesuurusega teed kirjutatakse kergesti valesti ja sait, mis vastab nii /pt-BR/-l kui ka /pt-br/-l, tekitab iga lehe kaks koopiat, mis konkureerivad omavahel. Seega /pt-BR/ suunatakse ümber /pt-br/-le ja localeUrlSegment() ehitab iga käsitsi tehtud URL-i eesliidete kaardi põhjal. Üks tõeallikas tähendab, et keelevahetaja, kanoonilised URL-id ja saidikaart ei saa üksteisest lahku minna.
Miks just jaapani ja Brasiilia portugali keel?
Need on suured veebikeeled, mida me polnud veel katnud. W3Techs'i andmetel meie väljalaskepäeval oli jaapani keel sisukeeleks 4,9%-l veebilehtedest ja portugali keel 4,1%-l.
Argument selle tegemise kasuks on vanem kui meie ise. CSA Research küsitles 2020. aastal 8709 tarbijat 29 riigis ja 76% ütles, et eelistab osta tooteid, mille kohta on teave saadaval nende emakeeles. See on nõudluse pool. See, mis muutus, on pakkumise pool: kaks keelt tähendas varem tarnijasuhet, nüüd maksavad need 31 eurot.
Meie enda reegel keelte valimiseks on see, mis on kirjas kasvustrateegia postituses. Vaadake, kust teie liiklus juba tuleb, lisage kaks keelt, ärge muutke midagi muud ja mõõtke tulemusi kvartali jooksul. Teeme täpselt sama nende kahe keelega.
Mida me pole veel kontrollinud?
Emakeelekõneleja ülevaatust. Keegi, kes loeb jaapani või Brasiilia portugali keelt emakeelena, pole väljundit veel üle vaadanud.
Mida oleme kontrollinud: automatiseeritud kvaliteedikontroll iga stringi kohta, kõigi ehituseelsete kontrollide läbimine ning pistelise kontrolli käigus testitud staging-lehed tagastavad 200 koos õige lang, canonical'i ja hreflang'iga ning renderduvad täielikult. Seda, kas lause kõlab nagu inimese kirjutatud, ei suuda ükski build kontrollida. Selle õppisime raskel teel, kui auditeerisime oma saksa- ja prantsuskeelset sisu ning leidsime tervete lehtede ulatuses vale registri.
Nii et ülevaatus on järgmine samm ja me täiendame seda postitust selle tulemustega, sh kõigega, mis oli vale.
Kas saaksite sama teha oma saidil?
Kui teie stringid elavad juba kataloogides, siis jah, ja tõlkimise osa võtab aega vaid minuteid. Kui need on veel komponentides kõvasti kodeeritud, tuleb esmalt teisendus. See toimub üks kord, rakendusesisese ühendamisvoo kaudu, ning sellest hetkest alates tõlgivad push-tööd uued stringid automaatselt. Vibe coderi juhend katab Lovable'i, Bolti või Cursoriga ehitatud rakendusi, kus kõvasti kodeeritud stringid on tavapärased.
Kulu skaleerub tõlgitavate sõnade, mitte keelte ega meeskonna suuruse järgi. Seepärast muutuski vastus küsimusele „kas keele lisamine tasub end ära?“. Mõõtmine on nüüd odavam kui selleteemaline koosolek.
Proovige seda oma hoidlas
Kaks keelt maksid meile kaheksa minutit tõlkimist ja umbes 31 €. Ühenda oma hoidla, vali kaks keelt, millele su analüütika juba viitab, ja vaata, milline näeb välja sinu enda kviitung.
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