Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren
Der Inhalt dieser Seite wurde mit einer KI übersetzt.
Den englischen Originaltext ansehenWenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.
GitHub-Link zur DokumentationMarkdown des Dokuments in die Zwischenablage kopieren
i18next VS Intlayer: React & Next.js Internationalisierungs-Benchmark (i18n)

i18next ist das am weitesten verbreitete i18n-Framework im JavaScript-Ökosystem. Über react-i18next und next-i18next betreibt es einen großen Teil der React- und Next.js-Anwendungen. Intlayer ist eine compilerbasierte, komponentenzentrierte Alternative.
Dieser Artikel vergleicht beide anhand echter Messwerte anstelle von Feature-Listen. Die Zahlen stammen aus dem Benchmark Bloom, einer Open-Source-Suite, die dieselbe Anwendung mit jeder Bibliothek erstellt und misst, was der Browser tatsächlich herunterlädt.
tl;dr:i18nextist die schwerste Runtime im Benchmark: +77 KB gzip pro Seite auf Next.js im Standard-Setup (naiv), +22 KB nach vollständiger Namespace- und Lazy-Loading-Optimierung. Intlayer fügt lediglich +0.3 KB hinzu. Jedei18next-Konfiguration mit Ausnahme der vollständig isolierten (scoped) liefert ~90% Zeichenketten fremder Seiten aus; Intlayer liefert standardmäßig 0% aus. Der Sprachwechsel mit einem dynamisch nachgeladenen Backend dauerte 123-185 ms mitreact-i18nextgegenüber 3-4 ms mit Intlayer. Der Adapter@intlayer/next-i18nextbehält diei18next-API bei und erzielte 150.7 KB pro Seite gegenüber 218.5 KB für das Original.
Kurz zusammengefasst
- i18next / react-i18next / next-i18next - Ausgereift, pluginreich, framework-agnostisch. Namespaces, Spracherkenner, Backends, ICU über Plugins,
<Trans>für Rich Content. Inhalte sind zentral inlocales/{lng}/{ns}.jsonorganisiert. Mächtig, aber jede Optimierung (Namespace-Aufteilung, seitenweises Laden, Typsicherheit) ist Konfigurationsaufwand, den Sie selbst verwalten müssen. - Intlayer - Komponentenzentriertes Inhaltsmodell.
.content.ts-Wörterbücher liegen direkt neben der jeweiligen Komponente, ein Build-Time-Compiler übernimmt Tree-Shaking und Lazy Loading pro Komponente und Sprache, strikte TypeScript-Typen werden aus den Inhalten generiert und fehlende Übersetzungen führen zu Build-Fehlern. Bietet Middleware, SEO-Helfer, einen visuellen Editor / CMS und KI-gestützte Übersetzung.
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
Badges aktualisieren sich automatisch. Snapshots variieren im Zeitverlauf.
Direkter Funktionsvergleich
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Feature | Intlayer (react-intlayer / next-intlayer) | i18next (react-i18next / next-i18next) |
|---|---|---|
| Übersetzungen direkt an Komponenten | ✅ Ja, .content.ts direkt bei der jeweiligen Komponente | ❌ Nein, zentralisiert in locales/{lng}/{ns}.json |
| TypeScript-Integration | ✅ Strikte Typen automatisch aus dem Inhalt generiert | ⚠️ Basis; strikte Schlüssel benötigen CustomTypeOptions-Erweiterung |
| Erkennung fehlender Übersetzungen | ✅ TypeScript-Fehler + Build-Time-Fehler/Warnung | ⚠️ Runtime-Fallback (saveMissing, Schlüssel-Echo) |
| Rich Content (JSX / Markdown / Komponenten) | ✅ Direkte Unterstützung | ⚠️ <Trans> mit indizierten Platzhaltern |
| ICU-Unterstützung | ⚠️ In Arbeit | ⚠️ Über Plugin (i18next-icu) |
| Pluralisierung | ✅ Auf Aufzählungen basierende Muster | ✅ Suffixe _one / _other (Intl.PluralRules) |
| Formatierung (Datum, Zahlen, Währungen) | ✅ useNumber, useDate, ... (Intl integriert) | ⚠️ Interpolations-Formatierer oder manuelles Intl.* |
| Lokalisiertes Routing & Middleware | ✅ Integrierter Proxy / Middleware, getMultilingualUrls | ⚠️ Nicht im Core; eigene Middleware oder Drittanbieter-Lösung |
| SEO-Helfer (hreflang, Sitemap, robots) | ✅ Integrierte Hilfsfunktionen | ❌ Manuell |
| Synchrone Server-Komponenten | ✅ useIntlayer aus next-intlayer/server in jeder Server-Komponente einsetzbar | ⚠️ getFixedT auf Seitenebene, danach t als Props weiterreichen |
| Tree-Shaking (nur genutzten Inhalt liefern) | ✅ Pro Komponente, pro Sprache, automatisch durch Compiler | ⚠️ Manuell: Namespaces + ns-Liste pro Seite + Backend |
| Lazy Loading | ✅ importMode: 'dynamic' (eine Zeile Konfiguration) | ✅ Über Backend-Plugins (i18next-resources-to-backend, i18next-http-backend) |
| Ungenutzte Inhalte bereinigen | ✅ Verwaiste Wörterbücher werden beim Build entfernt | ❌ Nicht integriert |
| Fehlende Übersetzungen testen (CLI / CI) | ✅ npx intlayer content test | ⚠️ i18next-parser / Drittanbieter-Tools |
| KI-gestützte Übersetzung | ✅ Integriert, nutzt Ihre eigenen API-Schlüssel | ❌ Nein (Locize ist ein separater, kostenpflichtiger Dienst) |
| Visueller Editor / CMS | ✅ Kostenloser visueller Editor + optionales CMS | ❌ Nein (Locize / externe Plattformen) |
| MCP-Server & Agent Skills | ✅ Ja | ❌ Nein |
| Ökosystem & Community | ⚠️ Jünger, aber rasant wachsend | ✅ Größtes und ausgereiftestes Ökosystem |
Der Benchmark
Was gemessen wurde
Die Benchmark Bloom-Suite erstellt dieselbe Anwendung mit jeder Bibliothek: 10 Seiten (Startseite, Über uns, Blog, Karriere, Kontakt, FAQ, Preise, Produkte, Einstellungen, Team), 10 Sprachen (en, fr, es, de, it, pt, zh, ja, ko, ru), identische Komponenten und identische Inhalte. Die Seiten werden in en und fr gemessen. Jede Bibliothek wird in bis zu vier Ladestrategien implementiert:
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Strategie | Beschreibung | Typischer Einsatz |
|---|---|---|
| static | Alle Sprachen und Seiten zusammen gebündelt (resources in init() eingebunden) | Schnelle Prototypen, KI-generierter Code |
| dynamic | Nur die aktive Sprache wird über ein Backend geladen, aber alle Namespaces gleichzeitig | Die meisten Projekte |
| scoped-static | Ein Namespace pro Route, alle vorab gebündelt | Selten |
| scoped-dynamic | Ein Namespace pro Route + Lazy Loading über Backend. Nur aktuelle Seite, aktuelle Sprache | Anwendungen mit strengem Performance-Budget |
Intlayer benötigt keine "scoped"-Variante: Der Compiler grenzt den Inhalt automatisch pro Komponente ein, sodass bereits die Zeilen static und dynamic optimiert sind.
Für jeden Build erfasst die Suite:
- Lib size: gzip-Größe einer leeren Komponente, die nur die i18n-Bibliothek importiert.
- Page JS: gzip-JavaScript pro Seite heruntergeladen, gemittelt über alle Seiten und Sprachen.
- Locale leak %: Anteil der übersetzten Zeichenketten im JS, die zu einer Sprache gehören, die der Nutzer nicht betrachtet.
- Page leak %: Anteil der übersetzten Zeichenketten im JS, die zu einer Seite gehören, auf der sich der Nutzer nicht befindet.
- Component avg: durchschnittliche gzip-Größe jeder isoliert kompilierten Komponente.
- E2E reactivity: gemessene Zeitspanne zwischen Sprachauswahl und Aktualisierung von
html[lang]im DOM (Playwright, 5 Iterationen). - Hydration: Dauer der React-Hydratisierungsphase.
Die nachfolgenden Werte stammen aus dem Durchlauf vom 2026-09-12 mitnext-i18next16.3.0,react-i18next17.0.13 undintlayer9.5.1. Die Testanwendung ist bewusst kompakt gehalten (einige Dutzend Strings pro Sprache), daher spiegeln die Leckage-Werte ein Muster wider: Sie wachsen proportional zu Ihrem Inhalt, während die Runtime-Kosten konstant bleiben.
Ergebnisse auf Next.js (next-i18next)
Wählen Sie die Metriken und Bibliotheken aus, die für Sie wichtig sind:
Metrik
Dynamisches JSON-Laden
Lädt Übersetzungen während der Laufzeit verzögert
Gescoptes JSON (Namespacing)
Übersetzungs-Namespaces pro Seite
Was ist diese Metrik?
Die gesamte gzip-komprimierte Größe des Internationalisierungs-Bibliothekspakets. Es enthält nur den Provider und die Inhaltsabruflogik nach Tree-Shaking und Minimierung.
Warum ist das wichtig?
Eine kleinere Bibliotheksgröße reduziert die anfängliche JavaScript-Nutzlast, was zu schnelleren Download- und Ausführungszeiten auf dem Client führt.
Ansehen als
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Bibliothek | Strategie | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E-Reaktivität | Hydration |
|---|---|---|---|---|---|---|---|---|
| base (ohne i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
next-i18next | static | 19.7 KB | 218.5 KB | 0.0% | 89.8% | 78.5 KB | 16.4 ms | 15.6 ms |
next-i18next | dynamic | 19.7 KB | 169.5 KB | 50.0% | 89.8% | 26.1 KB | 15.4 ms | 27.7 ms |
next-i18next | scoped-static | 19.7 KB | 220.1 KB | 0.0% | 89.8% | 78.9 KB | 16.4 ms | 14.7 ms |
next-i18next | scoped-dynamic | 19.7 KB | 163.4 KB | 0.0% | 0.0% | 27.1 KB | 15.9 ms | 15.1 ms |
next-intlayer | static | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 8.5 KB | 15.5 ms | 16.9 ms |
next-intlayer | dynamic | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 6.9 KB | 15.3 ms | 15.9 ms |
@intlayer/next-i18next (compat) | static | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 10.7 ms | 11.3 ms |
@intlayer/next-i18next (compat) | dynamic | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 11.9 ms | 10.6 ms |
Interpretation der Messwerte
- Runtime-Kosten. Der
i18next-Core samtreact-i18nextist die größte gemessene Runtime: 19.7 KB gzip für eine leere Komponente gegenüber 5.5 KB beinext-intlayer. - Das Standard-Setup ist kostspielig. Das direkte Einbetten von
resourcesininit()führt zu 218.5 KB pro Seite, +77.5 KB über der Basisanwendung. Jede Seite trägt sämtliche Namespaces mit. - Optimierung erfordert viel Aufwand. Der Wechsel zu einem Backend (
dynamic) spart 49 KB ein, lässt aber weiterhin 90% an Zeichenketten fremder Seiten durchsickern, und in dieser Konfiguration gehört die Hälfte der Strings zur falschen Sprache. Erst die zusätzliche Aufteilung in routenbasierte Namespaces (scoped-dynamic) eliminiert die Lecks vollständig bei 163.4 KB - immer noch +22.4 KB pro Seite mehr als Intlayer mit 141.3 KB, das ganz ohne manuelle Konfiguration auskam. - Komponentengröße. Eine Komponente mit
useTranslation()kompiliert je nach Konfiguration auf 26 bis 79 KB; dieselbe Komponente mituseIntlayer()benötigt lediglich 6.9 KB. - Die Hydratisierung steigt im
dynamic-Setup auf 27.7 ms an: Die i18next-Instanz initialisiert sich und löst ihr Backend auf dem Client auf, bevor React die Hydratisierung abschließen kann.
Vollständige Tabelle, jede Bibliothek und jede Strategie, im Next.js-Benchmark-Bericht.
Ergebnisse auf TanStack Start (react-i18next)
Dieselbe Testanwendung auf TanStack Start mit reinem react-i18next, wodurch Next.js-spezifische Eigenheiten aus dem Vergleich herausgefiltert werden.
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Bibliothek | Strategie | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E-Reaktivität | Hydration |
|---|---|---|---|---|---|---|---|---|
| base (ohne i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
react-i18next | static | 18.4 KB | 180.3 KB | 50.0% | 89.8% | 24.3 KB | 12.9 ms | 85.1 ms |
react-i18next | dynamic | 18.4 KB | 136.4 KB | 23.1% | 89.8% | 24.8 KB | 123.1 ms | 32.9 ms |
react-i18next | scoped-static | 18.4 KB | 184.2 KB | 50.7% | 89.8% | 25.3 KB | 185.1 ms | 25.2 ms |
react-i18next | scoped-dynamic | 18.4 KB | 127.2 KB | 0.0% | 0.0% | 26.7 KB | 17.6 ms | 11.3 ms |
intlayer | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms | 11.5 ms |
intlayer | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms | 14.1 ms |
Interpretation der Messwerte
- Die unoptimierte
react-i18next-App liefert +69 KB pro Seite mehr als die Basisanwendung aus, und die Hydratisierung dauert 85 ms (das Vierfache der Basis), da der gesamte Ressourcenbaum vor dem ersten Rendern auf dem Client analysiert und registriert werden muss. - Sprachwechsel macht Backend-Latenzen spürbar. Werden Ressourcen erst bei Bedarf geladen, erfordert der Sprachwechsel einen zusätzlichen Netzwerk-Roundtrip vor der
html[lang]-Aktualisierung: 123 ms beidynamic, 185 ms beiscoped-static. Intlayer aktualisiert das DOM in beiden Modi in 3-4 ms: Der Wechsel erfolgt sofort und blockiert nicht auf Netzwerkanfragen. - Die voll optimierte
scoped-dynamic-Konfiguration erreicht 0% Leckage bei 127.2 KB, liegt aber immer noch +8.6 KB über Intlayersdynamic-Zeile - und erforderte dafür eine Routen-zu-Namespace-Zuordnung, ein Backend und Suspense-Grenzen pro Route. - Intlayers
static-Zeile weist bereits 0% Seitenleckage auf, weil ausschließlich die von den Komponenten der jeweiligen Seite importierten Wörterbücher gebündelt werden. Das Aktivieren vonimportMode: 'dynamic'eliminiert auch die Sprachleckage vollständig. - Komponentengröße: 24-27 KB pro Komponente mit
react-i18nextgegenüber 6-8 KB mit Intlayer.useTranslation()bindet jede Komponente an die globale i18next-Instanz.
Vollständige Tabelle im TanStack Start-Benchmark-Bericht.
Woher kommt der Unterschied? Globale Instanz vs. kompilierte Wörterbücher

i18next wurde 2012 als Runtime konzipiert: Eine globale Instanz verwaltet einen Ressourcenspeicher, Plugins erweitern ihn und t() schlägt Schlüssel zur Renderzeit nach. Das macht es sehr flexibel (für jedes Framework, Backend und Format), führt aber auch zu Mehrgewicht:
Kopieren Sie den Code in die Zwischenablage
Die Instanz kann nicht wissen, welche Schlüssel eine Komponente anfordern wird. Optimierung bedeutet daher: Sie unterteilen Kataloge in Namespaces, Sie listen die Namespaces für jede Seite auf und Sie halten diese Liste synchron, wenn Komponenten verschoben werden.
Die Rechnung wächst auf zwei Achsen gleichzeitig, Seiten und Sprachen:

Wie die Benchmark-Hinweise festhalten: "Typsicherheit zu wahren und exakt zu wissen, welcher Namespace auf welcher Seite eingebunden werden muss, ist ein Albtraum".
Intlayer verzichtet auf die globale Instanz. Inhalte werden direkt bei der Komponente deklariert und der Compiler löst den Abhängigkeitsgraphen zur Build-Zeit auf:
Kopieren Sie den Code in die Zwischenablage
@intlayer/swc / @intlayer/babel erkennt, welche Komponente welches Wörterbuch importiert, bündelt nur diese und nur für die aktive Sprache und verwirft Unbenutztes. Das "scoped-dynamic"-Muster ist das automatische Ergebnis des Builds und keine mühsame manuelle Disziplin mehr.
Um die Werte derdynamic-Zeile zu erhalten, setzen Siedictionary.importMode: 'dynamic'inintlayer.config.ts. Details finden Sie in der Dokumentation zur Bundle-Optimierung.
Entwicklererfahrung
Einrichtung
Kopieren Sie den Code in die Zwischenablage
Dazu kommt ein clientseitiger I18nProvider, der die Instanz mit identischen Optionen instanziiert, generateStaticParams und eine namespaces-Liste auf jeder Seite.
Kopieren Sie den Code in die Zwischenablage
Kopieren Sie den Code in die Zwischenablage
Client-Komponente
Kopieren Sie den Code in die Zwischenablage
Kopieren Sie den Code in die Zwischenablage
Die Seite, die diese Komponente einbindet, muss den Namespaceaboutladen, undt("counter.label")bleibt ein einfacher String, sofernCustomTypeOptionsnicht erweitert wird.
Kopieren Sie den Code in die Zwischenablage
Kopieren Sie den Code in die Zwischenablage
label und increment sind strikt typisiert; Tippfehler werden als TypeScript-Fehler gemeldet und fehlende Übersetzungen verhindern den Build.
Synchrone Server-Komponente
Kopieren Sie den Code in die Zwischenablage
Die Seite ruft i18n.getFixedT(locale, "about") auf und reicht t und locale als Props nach unten weiter.
Kopieren Sie den Code in die Zwischenablage
i18next-API behalten, Intlayer-Performance nutzen
Sie müssen keine Komponenten neu schreiben, um von den Benchmark-Ergebnissen zu profitieren. @intlayer/i18next, @intlayer/react-i18next und @intlayer/next-i18next sind Drop-in-Adapter: useTranslation, t(), <Trans>, {{interpolation}}, _one / _other-Plurale, Kontext-Suffixe und returnObjects funktionieren weiterhin, bereitgestellt aus vorkompilierten Intlayer-Wörterbüchern.
Kopieren Sie den Code in die Zwischenablage
Kopieren Sie den Code in die Zwischenablage
Im Benchmark sank die angepasste Version derselben Next.js-Anwendung von 218.5 KB auf 150.7 KB pro Seite, von 78.5 KB auf 9.7 KB pro Komponente, von ~90% Inhaltslecks auf 0% und die Hydratisierung von 15.6 ms auf 11.3 ms - bei unverändertem Anwendungscode. Ihre bestehenden locales/{lng}/{ns}.json-Dateien können über das JSON-Sync-Plugin weiterhin die Source of Truth bleiben.
Siehe die Migrationsanleitungen: i18next, react-i18next, next-i18next.
Wann welche Lösung wählen?
Wenn Sie dessen Plugin-Ökosystem (Detektoren, Backends, ICU, Locize) benötigen, Lokalisierung auch außerhalb von React stattfindet (Node-Dienste, Vanilla JS, andere Frameworks), Ihr Team bereits damit vertraut ist oder Übersetzungsplattformen locales/{lng}/{ns}.json erwarten. Planen Sie die Zeit ein, um Kataloge in Namespaces aufzuteilen, ein Backend einzubinden und das Seiten-Mapping manuell zu pflegen.
Sie möchten komponentenbezogene Inhalte, striktes TypeScript, Fehler bei fehlenden Schlüsseln zur Build-Zeit, müheloses Tree-Shaking und Lazy Loading, sofortiges Umschalten der Sprache, synchrone Serverkomponenten und integrierte Redaktionswerkzeuge (Visueller Editor, CMS, KI-Übersetzung, MCP-Server). Besonders relevant für große, modulare Codebasen und Design-Systeme.
Sie nutzen bereits i18next und möchten die Bundle- und Reaktivitätsgewinne ohne Umschreiben nutzen. Ihre locales/{lng}/{ns}.json-Dateien bleiben die Quelle der Wahrheit. Direkt verglichen in i18next vs @intlayer/i18next.
FAQ
Es wurde als Framework-agnostische Laufzeitumgebung konzipiert: eine globale Instanz, eine Plugin-Pipeline, ein Ressourcenspeicher, ein Schlüssel-Resolver. Diese Flexibilität wird in jedes Bundle kompiliert. Eine leere Komponente, die nur die Bibliothek importiert, kostet 19.7 KB gzip mit next-i18next gegenüber 5.5 KB mit next-intlayer, und diese Kosten fallen auf jeder Seite an, unabhängig vom Inhalt.
Es spart Bytes, verringert aber nicht die Latenz. Der Wechsel zu i18next-resources-to-backend spart ~49 KB pro Seite, fügt aber beim Sprachwechsel einen Netzwerk-Roundtrip hinzu: 123 ms im dynamic-Setup und 185 ms in scoped-static, gegenüber 3-4 ms bei Intlayer. Die Hydratisierung steigt ebenfalls auf 27.7 ms, da die Instanz ihr Backend auflöst, bevor React hydratisieren kann.
Ja, mit scoped-dynamic: ein Namespace pro Route, ein Ressourcen-Backend und eine manuell gepflegte Zuordnung von Seiten zu Namespaces. Das landet bei 163.4 KB pro Seite auf Next.js, immer noch +22 KB über den 141.3 KB von Intlayer, das keine Konfiguration benötigte. Siehe Bundle-Optimierung.
Nein. @intlayer/i18next, @intlayer/react-i18next und @intlayer/next-i18next behalten useTranslation, t(), <Trans>, {{interpolation}}, _one / _other-Plurale, Kontext-Suffixe und returnObjects bei. Eine einzige Plugin-Zeile in next.config.ts oder vite.config.ts. Schritt für Schritt im next-i18next-Migrationsleitfaden.
Backends und Spracherkenner werden akzeptiert, bleiben aber wirkungslos: Es gibt zur Laufzeit nichts mehr zu laden oder zu erkennen. Die Spracherkennung wird zur Routing-Konfiguration von Intlayer (URL-Präfix, Cookie, Header). Wenn Ihre App Übersetzungen zur Laufzeit von einem CMS abruft, nutzen Sie stattdessen das Intlayer CMS oder intlayer pull / push.
Verwandte Vergleiche
Gleicher Benchmark, andere Bibliotheken:
Mehr zu i18next:
Referenzdokumentation:
Kompatibilitätsadapter:
Migrationsleitfäden:
Um zu verstehen, woher diese Bibliotheken kommen, lesen Sie die Geschichte von i18n in JavaScript.
GitHub-Sterne
GitHub-Sterne sind ein aussagekräftiger Indikator für Popularität, Vertrauen der Community und Zukunftsfähigkeit eines Projekts. Sie messen zwar nicht direkt die Codequalität, zeigen aber, wie viele Entwickler das Projekt schätzen, verfolgen und einsetzen.
Commit-Aktivität
Sterne zeigen Popularität. Commits zeigen, wie viel Arbeit in einem Projekt steckt. Zum Zeitpunkt des Schreibens zählt Intlayer rund 7.500 Commits, mehr als die meisten hier verglichenen Bibliotheken und etwa 5-mal so viele wie next-intl oder next-i18next.
- i18next/i18next
- i18next/react-i18next
- i18next/next-i18next
- aymericzip/intlayer
Commits auf dem Standard-Branch, Quelle: GitHub API.
Intlayer ist ein Monorepo: Die Zahl umfasst jedes Framework-Paket, die CLI und die Dokumentation. Commits sind ein Signal für Aktivität, nicht für Qualität.
npm-Downloads
- i18next
- react-i18next
- next-i18next
- intlayer
Quelle: Download-API der npm-Registry.
Downloads belohnen die ältesten Lösungen, nicht die besten. Eine vor Jahren veröffentlichte Bibliothek wird weiterhin von jedem Projekt installiert, das sie damals gewählt hat, von jedem CI-Lauf und von jedem Paket, das davon abhängt. Die Zahl misst Trägheit mehr als eine bewusste Wahl.
KI-Assistenten verstärken diesen Effekt. next-intl, i18next und vue-i18n sind im Code, mit dem sie trainiert wurden, allgegenwärtig, also schlagen sie diese standardmäßig vor, ohne Alternativen zu vergleichen. Jeder Vorschlag erzeugt Downloads, die den nächsten Vorschlag verstärken. Vergleichen Sie anhand des Benchmarks, nicht anhand der Downloadzahlen.
Fazit
i18next hat seinen Platz verdient: Es läuft überall, bietet Plugins für jeden Anwendungsfall und wird seit über zehn Jahren gepflegt. Der Benchmark verdeutlicht jedoch die Kosten dieser runtime-fokussierten Architektur. Das typische Setup kostet +70-77 KB gzip pro Seite, transportiert ~90% Daten fremder Seiten mit sich und benötigt bei Lazy Loading über 100 ms für einen Sprachwechsel. 0% Leckage ist machbar, erfordert aber ein Backend, getrennte Namespaces pro Route und manuelle Pflege - und bleibt dennoch +9-22 KB schwerer als Intlayer.
Intlayer verlagert diese Arbeit in den Compiler. Wörterbücher pro Komponente, Lazy Loading pro Sprache und das Bereinigen ungenutzter Inhalte sind Ergebnisse des Builds statt manueller Konventionen. Auf derselben Anwendung: +0.3 KB pro Seite, 0% Leckage, Komponenten 3 bis 10 Mal kleiner und Sprachwechsel in 3-4 ms.
Alle Rohdaten, Testanwendungen und Skripte stehen im Benchmark Bloom Repository bereit. Probieren Sie es selbst aus.
Weitere Details finden Sie in der Dokumentation 'Warum Intlayer?'.
Kommentare
Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.
