Par 31 € pievienojām savai vietnei japāņu un Brazīlijas portugāļu valodu — pilnībā

29. septembrī mēs izlaidām globalize.now japāņu un Brazīlijas portugāļu valodā. Katru lapu, katru cenu tabulu un visus 61 emuāra ierakstus. Pati tulkošana aizņēma astoņas minūtes, un lietotne izrakstīja rēķinu par apmēram 31 €. globalize.now ir uz mākslīgo intelektu balstīta lokalizācijas infrastruktūra, un šādi izskatījās tās izmantošana mūsu pašu vietnei — visi skaitļi ir ņemti no uzdevuma lapas un Git vēstures, nevis no atmiņas.

Mūsu ieraksts par to, cik 2017. gadā maksāja lokalizācijas izaugsmes stratēģija, noslēdzas ar teikumu, ka savus skaitļus vēl nepublicējam. Šis ir pirmais. Tas ir izmaksu skaitlis, nevis izaugsmes skaitlis — /ja/ vēl neviens nav paspējis apmeklēt.

Ko tieši mēs iztulkojām?

Visu vietni, divreiz. Šeit ir saraksts, saskaitīts no repozitorija:

  • Saskarne: 1782 angļu valodas teksti piecos ziņojumu katalogos (galvenā vietne, cenu lapa, salīdzinājuma lapas, integrācijas un tulkojumu piemēri) — aptuveni 21 000 vārdu.
  • Emuārs: 61 ieraksts, aptuveni 110 000 vārdu.
  • Mērķa valodas: japāņu (ja) un Brazīlijas portugāļu (pt-BR).

Tas ir aptuveni 130 000 avota vārdu, kas tiek pārtulkoti divās valodās. Pull request skāra 170 failus un pievienoja 34 681 rindiņu. Pēc apvienošanas vietnes karte uzrāda 811 URL adreses 11 lokālēs, un vietne izveido 962 statiskās lapas.

Cik ilgi tas aizņēma?

Astoņas minūtes tulkošanas, tad garāka kvalitātes pārbaude. Arturs, mūsu CTO, projektam pievienoja abas valodas, un uzdevums sākās main plkst. 08:56 pēc UTC. Uzdevuma lapa to sadala šādi:

PosmsIlgums
Tulkošana (11 264 jauni teksti, 5632 katrai valodai)8 min 1 s
Automatizēta kvalitātes pārbaude27 min 11 s
Piegāde uz pull request5 min 29 s

Kopveikums ar abām valodām tika iestrādāts plkst. 09:29 pēc UTC. Pārējie 45 106 teksti šajā uzdevumā bija no tulkošanas atmiņas, jo astoņas jau esošās valodas nebija mainījušās.

Kad Arturs to pieminēja mūsu komandas tērzētavā, viņš minēja desmit minūtes. Viņam bija taisnība par tulkošanu, un viņš bija optimistisks par visu uzdevumu kopumā — starpība ir kvalitātes pārbaudes posmā. Mēs labāk veltām 27 minūtes datora laika pārbaudei, nekā to izlaižam.

Ko atklāja automatizētā kvalitātes pārbaude?

72 atzīmes no 11 264 jaunajiem tekstiem, visas novērtētas kā nelielas. 11 192 teksti tika apstiprināti bez iebildumiem, un kvalitātes pārbaude pa ceļam veica 182 automātiskus labojumus.

Atzīmes, ko atvērām, lielākoties bija saistītas ar to, ka garuma pārbaude ir piesardzīga attiecībā uz japāņu valodu. Vārds „Pricing“ kļūst par 料金 — divas rakstzīmes, un garuma attiecība 0,29 nedaudz nesasniedz 0,3 slieksni. Tas ir korekts tulkojums, kas iedarbina heiristiku, kas veidota alfabētiskajām valodām, nevis kļūda. Mēs tomēr atstājam šīs atzīmes redzamas — pārbaude, kas nekad nenostrādā, nav pārbaude.

Cik tas maksāja?

Apmēram 31 €: projekta izmaksu pārskats pa valodām rāda 15,72 € par japāņu valodu un 16,15 € par Brazīlijas portugāļu valodu. Tā ir summa, ko iekasē lietotne — tāda pati, kādu par tādu pašu apjomu redzētu jebkurš klients. Tā nav mūsu iekšējā modeļa izmaksa, un tā nav atlaide.

Aptuveni 260 000 iztulkoto vārdu — tas ir apmēram 12 centi par 1000 vārdiem. Nekas cits netika rēķinā iekļauts papildus. Nav ne maksas par katru valodu, ne maksas par vietu, tāpēc divpadsmitās valodas pievienošana maksā tikpat, cik trešās. Aktuālie plāni ir pieejami cenu lapā.

Ko izstrādes puse patiesībā ietvēra?

Viens pull request, apvienots tajā pašā pēcpusdienā, un neviena tā daļa nebija tulkošana. Kad tas tika atvērts, tulkošanas uzdevums uz tā izpildījās vēlreiz un 56 370 no 56 390 tekstiem paņēma tieši no tulkošanas atmiņas, tāpēc jau iztulkotie katalogi jaunajos failos nonāca septiņu minūšu laikā. Tulkošana ir tā daļa, kas tika automatizēta. Jauna lokāļa reģistrēšana Next.js vietnē joprojām ir jūsu kods, un ir vērts saprast, ko „jūsu kods“ nozīmē, pirms to plānojat.

Lokāles pievienošana next-intl ir viena rindiņa maršrutēšanas konfigurācijā. Viss pārējais, kas veido URL, nolasa lokāli vai uzskaita jūsu lokāles, ir pārējā izmaiņu daļa:

  • Maršrutēšana: lokāļu saraksts, plus URL prefiksa pārrakstīšana pt-BR (nākamā sadaļa).
  • SEO metadati: hreflang kopas, kanoniskās saites, og:locale (ja_JP, pt_BR) un lokāļu saraksts, ko metadatu palīgfunkcijas iziet cauri ciklā.
  • Formatēšana: Intl tagi ja-JP un pt-BR, lai datumi un skaitļi tiktu attēloti pareizi.
  • Valodas pārslēdzējs: tas saista ar katru lokāli, izmantojot īstu <a href hreflang>, lai robotprogrammas to varētu izsekot.
  • Vietnes karte un pārbaudes: vietnes kartes ģeneratoram, pēdējā atjauninājuma pārbaudei, iekšējo saišu pārbaudei un tulkojumu verificētājam bija jāapgūst divi jaunie kodi.
  • Katalogi: tukši, tikai ar galvenēm .po faili abiem lokāļiem, kas tajā pašā pull request tika aizpildīti no tulkošanas atmiņas.

Ja jūsu vietne ir mazāk pielāgota nekā mūsējā, lielākā daļa no šī saraksta ir tikai konfigurācija. Ja kaut kur veidojat URL adreses ar rokām — un lielākajai daļai vietņu tas kaut kur ir — katru šādu vietu atklāsiet tad, kad pirmo reizi saite izrādīsies nepareiza. Izstrādātāju rokasgrāmata apraksta iestatīšanu, bet ko AI lokalizācijas aģents patiesībā dara apraksta robežu starp to, kas ir automatizēts, un to, kas nav.

Kāpēc Brazīlijas portugāļu valoda ir adresē /pt-br/, nevis /pt-BR/?

Tāpēc, ka valodas tags un URL segments ir divas dažādas lietas ar dažādiem uzdevumiem.

Pareizais tags ir pt-BR saskaņā ar BCP 47. To izmantojam visur, kur valodu lasa mašīna: failu nosaukumos, <html lang>, hreflang, og:locale un Intl. Mazajos burtos tiek pārveidota tikai URL adrese:

// 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;
}

Jauktu reģistru ceļus bieži pieraksta nepareizi, un vietne, kas atbild gan uz /pt-BR/, gan /pt-br/, iegūst divas katras lapas kopijas, kas savstarpēji konkurē. Tāpēc /pt-BR/ tiek novirzīts uz /pt-br/, un localeUrlSegment() katru pašrocīgi veidoto URL izveido no prefiksu kartes. Viens patiesības avots nozīmē, ka valodas pārslēdzējs, kanoniskās saites un vietnes karte nevar atšķirties viena no otras.

Kāpēc tieši japāņu un Brazīlijas portugāļu valoda?

Tās ir lielas interneta valodas, kuras mēs vēl neaptvērām. Pēc W3Techs datiem tajā dienā, kad izlaidām šīs valodas, japāņu valoda bija satura valoda 4,9% vietņu, bet portugāļu — 4,1%.

Argumenti par labu šai darbībai ir senāki par mums pašiem. CSA Research 2020. gadā aptaujāja 8709 patērētājus 29 valstīs, un 76% norādīja, ka dod priekšroku produktiem ar informāciju savā dzimtajā valodā. Tas ir pieprasījuma puse. Mainījās piedāvājuma puse: agrāk divas valodas nozīmēja attiecības ar pakalpojumu sniedzēju, tagad tās maksā 31 €.

Mūsu pašu likums valodu izvēlei ir tas pats, kas aprakstīts izaugsmes stratēģijas ierakstā. Paskatieties, no kurienes jau nāk jūsu trafiks, pievienojiet divas valodas, nemainiet neko citu un mēriet rezultātus ceturksni. Tieši to mēs darīsim ar šīm divām valodām.

Ko mēs vēl neesam pārbaudījuši?

Dzimtās valodas runātāju pārbaudi. Neviens, kam japāņu vai Brazīlijas portugāļu valoda ir dzimtā, iztulkoto tekstu vēl nav izskatījis.

Ko esam pārbaudījuši: automatizētu kvalitātes pārbaudi katram tekstam, to, ka projekts iztur visas pirms-būvēšanas pārbaudes, un to, ka izlases veidā pārbaudītās lapas testa vidē atgriež 200 ar pareizajiem lang, canonical un hreflang tagiem un tiek pilnībā atveidotas. Ko būvēšanas process nevar pārbaudīt, ir tas, vai teikums izklausās tā, it kā to būtu uzrakstījis cilvēks. To mēs uzzinājām grūtā ceļā, kad pārbaudījām savu vācu un franču valodas tekstu un atklājām nepareizu stilistisko reģistru veselās lapās.

Tāpēc pārbaude ir nākamais solis, un mēs atjaunināsim šo ierakstu ar tās rezultātiem, tostarp ar visu, kas izrādīsies nepareizs.

Vai to pašu varētu izdarīt jūsu vietnē?

Ja jūsu teksti jau atrodas katalogos, jā — un tulkošanas daļa aizņems minūtes. Ja tie joprojām ir burtiski ierakstīti komponentos, vispirms nepieciešama konvertēšana. Tā notiek vienu reizi, izmantojot pieslēgšanas procesu lietotnē, un turpmāk push uzdevumi tulko jaunos tekstus. Vibe coder rokasgrāmata apraksta lietotnes, kas veidotas ar Lovable, Bolt vai Cursor, kur burtiski teksti ir ierasta prakse.

Izmaksas ir atkarīgas no iztulkoto vārdu skaita, nevis no valodu skaita vai komandas locekļu skaita. Tāpēc ir mainījusies atbilde uz jautājumu „vai ir vērts pievienot valodu?“. Tagad izmērīt to ir lētāk nekā sarīkot sanāksmi par to.

Izmēģiniet to savā repozitorijā

Divas valodas mums izmaksāja astoņas minūtes tulkošanas un apmēram 31 €. Pievienojiet savu repozitoriju, izvēlieties divas valodas, uz kurām jau norāda jūsu analītika, un paskatieties, kā izskatās jūsu pašu čeks.

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