Website anlegen: Im Dashboard die Adresse, die Ausgangssprache und die gewünschten Zielsprachen eintragen.
Script-Tag einfügen: Eine Zeile in die Seitenvorlage, am besten in den <head>:
<script src="https://alinio.de/widget.js" data-key="IHR_WEBSITE_SCHLUESSEL"></script>
Besucher wählen ihre Sprache: In einer Ecke der Seite erscheint ein kompakter Sprachumschalter. Die Wahl gilt auf allen weiteren Seiten.
Das funktioniert überall, wo sich ein Script-Tag einfügen lässt: WordPress, Shopify, Webflow, Wix, Squarespace, statisches HTML sowie React-, Vue- oder Angular-Apps.
translate="no" oder die Klasse notranslate aus – ideal für Markennamen, Preise oder Code.data-alinio-lang="fr" wird zum Sprachbutton. Die Position des Standard-Umschalters ist wählbar, und über eine kleine JavaScript-API (alinio.setLanguage('de'), alinio.restore(), die Events alinio:change und alinio:status) lässt sich alles auch aus dem eigenen Code steuern.localStorage des Browsers. Verarbeitet wird nur der Text der Seiten.Zur Einordnung: Weil die Übersetzung im Browser stattfindet, indexieren Suchmaschinen weiterhin die Originalsprache. alinio ist für die Besucher einer Website gemacht, nicht als SEO-Werkzeug.
Vieles auf einer Website wiederholt sich: Navigation, Fußzeile, Produktnamen. alinio übersetzt jeden Satz deshalb nur einmal pro Website und liefert ihn danach für alle Seiten und alle Besucher aus dem Cache. Je nach Situation braucht ein Sprachwechsel unterschiedlich viel Netzwerk:
| Situation | Was passiert | Netzwerk |
|---|---|---|
| Wiederkehrender Besucher | Im Browser gespeicherte Übersetzungen werden bei DOMContentLoaded angewendet, bevor die Seite sichtbar wird – die Originalsprache blitzt nicht erst auf. |
keins |
| Seite wurde schon einmal gelesen | Ein kleiner, cachebarer GET (ETag, stale-while-revalidate) liefert alle bekannten Übersetzungen der Seite. |
1 Anfrage |
| Ganz neuer Text | Ein POST mit Content-Type: text/plain, dadurch ohne CORS-Preflight. Sichtbarer Text zuerst; bekannte Sätze kommen sofort, der Rest wird in parallelen Paketen übersetzt und Satz für Satz als NDJSON-Stream zurückgeschickt. |
1 gestreamte Anfrage |
Bei ganz neuem Text erscheinen die ersten Sätze nach etwa einer Sekunde, der Rest folgt, sobald er fertig ist.
Der Server ist in Go geschrieben und wird zu einem einzigen statischen Binary kompiliert. Darin stecken Webserver, Hintergrund-Worker (Vorab-Übersetzung, Abgleich der Abos), tägliches Backup und alle Konsolenbefehle (serve, worker, setup, migrate, backup:restore …). Templates, statische Dateien und das Datenbankschema sind eingebettet, gerendert wird mit html/template. Die Liste der externen Abhängigkeiten ist kurz: MySQL-Treiber, Stripe-SDK, Anthropic-SDK, go-mail und golang.org/x/crypto.
MariaDB hält Konten, Websites und das Übersetzungsgedächtnis. Textsegmente sind pro Website eindeutig, jede Seite merkt sich ihre Segmente (daraus entsteht die cachebare Antwort für bekannte Seiten), und jede Übersetzung trägt ihre Herkunft: machine oder manual. Migrationen laufen beim Start automatisch.
Das Widget kommt ohne Framework und ohne Abhängigkeiten aus. Es zerlegt den DOM in Textsegmente und ersetzt Inline-Markup durch Platzhalter wie <g1>…</g1> oder <x2/>. Übersetzungen schreibt es ausschließlich als Text zurück, das Original kann es jederzeit exakt wiederherstellen. Ein MutationObserver erfasst nachgeladene Inhalte, der Sprachumschalter lebt barrierearm in einem Shadow DOM und kollidiert so nicht mit dem CSS der Website. Für die Auslieferung wird das Script mit terser minifiziert.
Übersetzt wird von einem großen Sprachmodell im Ton der jeweiligen Website und unter Beachtung des Glossars. Ein paar Details:
HttpOnly- und SameSite-Cookies, eine strikte Content Security Policy, Rate-Limits pro IP (bei IPv6 pro /64-Netz) und Größenlimits für jede Anfrage.Am schnellsten überzeugt die Demo auf alinio.de: Die Startseite übersetzt sich mit demselben Script, das auch die Websites unserer Kunden bekommen. Dort lässt sich auch direkt ein Konto anlegen. Alle Optionen des Widgets beschreibt die Dokumentation.