← Tilbake til artikler
Web 2026-04-17 · rev. 2026-05-10 ProtoMedia

En nettside som snakker dusinvis av språk, uten oversettere

Automatisk oversatt fra italiensk · les originalen

Hvordan vi bygde oversettelsessystemet som driver disse sidene: AI ved behov, alltid cache, null opplevd ventetid.

Problemet med tradisjonell i18n

I årevis har internasjonaliseringen av en nettside vært en liten odyssé av arbeidsflyter: .po-filer, menneskelige oversettere, glemte nøkler, forsinkede distribusjoner fordi "tysk mangler fortsatt". Å legge til et språk kostet tid og penger; å legge til ti var utenfor spørsmål for enhver liten bedrift.

Med LLM-er av siste generasjon har kvaliteten på automatisk oversettelse nådd et punkt der – for en bedriftsnettside, ikke for litteratur – den er tilstrekkelig. Spørsmålet er ikke lenger "kan vi oversette det automatisk", men "hvordan integrerer vi det uten å ødelegge brukeropplevelsen".

Arkitekturen, kort fortalt

Nettstedet serveres statisk på italiensk. Når en bruker velger et annet språk, kommer en liten motor inn i spill på tre MongoDB-samlinger:

  • i18n_base: kildetekster på det valgte språket (i dag italiensk), hver med erklæringen om sitt eget språk, en beskrivelse av hvor og hvorfor det vises på nettstedet (essensielt for kvaliteten på oversettelsen), tone og tegnbegrensning. Denne beskrivelsen blir en del av prompten til LLM, slik at den vet om den oversetter en knapp eller et avsnitt.
  • i18n_human: manuelt kuraterte oversettelser, når vi for noen sider ønsker redaksjonell kvalitet i stedet for LLM-output. De har prioritet over den automatiske hurtigbufferen og "merkes" automatisk når kildeteksten endres.
  • i18n_cache: oversettelser som allerede er generert, indeksert etter (felt, språk). Hver oppføring lagrer tidsstempelet til basisteksten på genereringstidspunktet.
  • articoli_i18n: samme logikk brukt på lengre innhold, som denne artikkelen.

Ved første tilgang på et nytt språk ber systemet LLM om kun de feltene som mangler, lagrer svaret i hurtigbufferen og returnerer det til nettleseren. Ved påfølgende besøk kommer samme språk umiddelbart, uten flere AI-kall.

Invalidation som fungerer

En cache er en ordnet løgn: den sier "min sannhet er denne" inntil noen motbeviser den. Mekanismen for motbevis her er enkel: hver cachelagret oversettelse lagrer tidsstempelet til grunnteksten som genererte den. Når du endrer den italienske teksten og øker dens updated_at, blir alle oversettelser av det feltet i alle språk automatisk utdatert og regenereres ved behov. Ingen manuelle kaskader, ingen cache å tømme.

Brukeren som ikke venter

Det mest interessante er ikke oversettelsen — det er hvordan den vises. Ved språkbytte har nettleseren en italiensk side med små spinnere ved siden av hver tekstblokk som skal oppdateres. Fristelsen er å gjøre én enkelt forespørsel som oversetter alt sammen: enkelt, rent, og det dømmer brukeren til å vente til LLM-en er ferdig med alt før de ser noen endringer.

Vi tok en annen retning. Tekstene grupperes etter seksjon (navbar, kropp, footer) og deles inn i mikro-batcher på tre felt hver. Forespørslene starter i sekvens: først de få feltene i navbar, som vises på få sekunder — brukeren ser at noe skjer og begynner å lese. Mens de leser, kommer den første delen av kroppen, deretter den andre, til slutt footer.

Leksjonen i korte trekk: Opplevd hastighet er ikke total hastighet. Å oversette bit for bit, i visuell rekkefølge, er viktigere enn å fullføre først.

Nattarbeidet

En cache har bare én virkelig fiende: det første besøket. Den første tyske brukeren betaler prisen for alle fremtidige oversettelser, og det er hans opplevelse som blir hengende igjen. For å eliminere (eller nesten) problemet, våkner en bakgrunnsoppgave hvert minutt, velger det mest etterspurte språket blant de som fortsatt er ufullstendige, tar en ikke-oversatt tekst og sender den gjennom LLM-en. Neste minutt, den neste. I løpet av få dager er de mest brukte språkene allerede varme.

Nattarbeidet gjør også en andre jobb: det reviderer automatisk oversettelser av tvilsom kvalitet, og prøver dem på nytt med en annen AI-modell. Når justeringen mellom språk er viktig, forblir ikke en middelmådig oversettelse slik.

Hvis du er den første tyskeren på dagen og ankommer mens systemet fortsatt fullfører cachen, har du fortsatt progressiv lasting for å holde deg opptatt. Hvis du er den andre, vil du ikke engang legge merke til det.

Hva du får med deg

En flerspråklig nettside uten oversettere, uten filer å administrere, uten utrulling for å legge til et språk. Brukeren skriver inn en kode — ja, ca, eu, hva som helst — og siden oversettes. Andre gang går det umiddelbart. Tredje gang har vi sannsynligvis allerede gjort det, oversatt i rett tid av en oppgave som aldri sover.

Denne siden, hvis du leser den på tysk, spansk eller koreansk, har aldri blitt skrevet av en oversetter. Den ble oversatt én gang av en LLM, og har siden blitt servert fra cache. Det eneste som er skrevet for hånd er det du leser nå, hvis det er på italiensk.

Interessert i å implementere denne arkitekturen på din nettside? La oss snakke om det.

Kontakt oss

Har du en kommentar? Skriv til oss

Meldingen kommer kun til oss. Hvis kommentaren din er interessant kan vi publisere den nederst i artikkelen, men først etter vurdering.

Mens du skriver, løser nettleseren din et lite regnestykke – vår måte å hindre automatisk spam uten tredjepartstjenester eller «velg semafor»-oppgaver. Du trenger ikke gjøre noe, og ingen data forlater dette nettstedet.