Web, který mluví desítkami jazyků, bez překladatelů
Přeloženo automaticky z italštiny · přečíst originál
Jak jsme vytvořili překladatelský systém, který běží pod těmito stránkami: AI dle potřeby, vždy cache, nulové vnímané čekání.
Problém tradiční i18n
Po léta byla internacionalizace webové stránky malou odyseou pracovních postupů: soubory .po, lidští překladatelé, zapomenuté klíče, zpožděné nasazení, protože „stále chybí němčina“. Přidání jednoho jazyka stálo čas a peníze; přidání deseti bylo mimo diskusi pro jakoukoli malou společnost.
S LLM poslední generace dosáhla kvalita automatického překladu bodu, kdy — pro firemní web, nikoli pro literaturu — je dostatečná. Otázka už není „můžeme to automaticky přeložit“, ale „jak to integrujeme, aniž bychom narušili uživatelský zážitek“.
Architektura ve zkratce
Web je servírován staticky v italštině. Když si uživatel vybere jiný jazyk, do hry vstupuje malý engine na třech kolekcích MongoDB:
i18n_base: zdrojové texty v zvoleném jazyce (dnes italština), každý s deklarací svého jazyka, popisem toho, kde a proč se objevuje na webu (zásadní pro kvalitu překladu), tónem a limitem znaků. Tento popis se stává součástí promptu pro LLM, který tak ví, zda překládá tlačítko nebo odstavec.i18n_human: ručně upravené překlady, když pro některé stránky požadujeme redakční kvalitu namísto výstupu LLM. Mají prioritu před automatickou cache a automaticky se „označí“ jako neplatné, když se změní zdrojový text.i18n_cache: již vygenerované překlady, indexované podle (pole, jazyk). Každý záznam uchovává časové razítko základního textu v okamžiku generování.articoli_i18n: stejná logika aplikovaná na delší obsah, jako je tento článek.
Při prvním přístupu v novém jazyce systém požádá LLM pouze o chybějící pole, uloží odpověď do cache a vrátí ji prohlížeči. Při následných návštěvách dorazí stejný jazyk okamžitě, bez dalších volání AI.
Invalidace, která funguje
Cache je uspořádaná lež: říká „moje pravda je tato“, dokud ji někdo nevyvrátí. Mechanismus vyvrácení je zde jednoduchý: každá uložená překlad v cache si pamatuje časové razítko základního textu, který ji vygeneroval. Když upravíte italský text a zvýšíte jeho updated_at, všechny překlady tohoto pole ve všech jazycích se automaticky stanou neplatnými a budou se znovu generovat podle potřeby. Žádné manuální kaskády, žádná cache k vyprázdnění.
Uživatel, který nečeká
Nejzajímavější není samotný překlad – je to, jak se zobrazuje. Při změně jazyka má prohlížeč před sebou italskou stránku s malými spinnery vedle každého bloku textu, který se má aktualizovat. Pokušení je provést jeden hovor, který přeloží vše najednou: jednoduché, čisté a odsouzení uživatele čekat, dokud LLM nedokončí vše, než uvidí jakékoli změny.
Vybrali jsme opačný směr. Texty jsou seskupeny podle sekce (navigace, tělo, patička) a rozděleny do mikro-dávek po třech polích. Volání se spouští sekvenčně: nejprve několik polí v navigaci, která se objeví během několika sekund – uživatel vidí, že se něco děje, a začne číst. Zatímco čte, dorazí první část těla, pak druhá a nakonec patička.
Noční práce
Cache má jediného skutečného nepřítele: první návštěvu. První německý uživatel zaplatí cenu všech budoucích překladů a jeho zkušenost je to, co mu zůstane v paměti. Aby se tento problém (nebo téměř) vyřešil, úkol na pozadí se probudí každou minutu, vybere nejpoptávanější jazyk mezi těmi, které ještě nejsou dokončeny, vezme nepřeložený text a pošle ho přes LLM. Příští minutu další. Za několik dní jsou nejrozšířenější jazyky již hotové.
Noční úkol dělá i druhou práci: automaticky kontroluje pochybné překlady a zkouší je s jiným AI modelem. Když je důležitá shoda mezi jazyky, špatný překlad tak nezůstane.
Pokud jste první Němec, který přijde, a dorazíte, zatímco systém stále dokončuje cache, máte alespoň progresivní načítání, které vás zabaví. Pokud jste druhý, ani si toho nevšimnete.
Co si odnášíte
Vícejazyčný web bez překladatelů, bez správy souborů, bez nasazení pro přidání jazyka. Uživatel zadá kód — ja, ca, eu, co chce — a stránka se přeloží. Podruhé je to okamžité. Potřetí jsme se s největší pravděpodobností postarali my, přeloženo v pravý čas úkolem, který nikdy nespí.
Tato stránka, pokud ji čtete v němčině, španělštině nebo korejštině, nebyla nikdy napsána překladatelem. Byla přeložena jednou, LLM, a od té doby je poskytována z cache. Jediné, co je napsáno ručně, je to, co čtete nyní, pokud je to v italštině.
Máte zájem o implementaci této architektury na vašem webu? Pojďme se o tom pobavit.
Kontaktujte nás
Máte připomínku? Napište nám
Zpráva je určena pouze nám. Pokud bude váš komentář zajímavý, můžeme ho zveřejnit na konci článku, ale až po posouzení.
Zatímco píšete, váš prohlížeč řeší drobný výpočet – to je náš způsob, jak zabránit automatické poště bez použití externích služeb a bez nutnosti rozpoznávat semafory. Nic se vás neptáme a žádná data toto místo neopustí.