@intlayer/docs 9.5.7 → 9.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
- package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
- package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +6 -3
- package/docs/ar/benchmark/solid.md +21 -4
- package/docs/ar/benchmark/svelte.md +18 -3
- package/docs/ar/benchmark/tanstack.md +6 -3
- package/docs/ar/benchmark/vue.md +14 -5
- package/docs/ar/cli/index.md +6 -1
- package/docs/ar/cli/upgrade.md +125 -0
- package/docs/de/benchmark/nextjs.md +6 -3
- package/docs/de/benchmark/solid.md +21 -4
- package/docs/de/benchmark/svelte.md +18 -3
- package/docs/de/benchmark/tanstack.md +6 -3
- package/docs/de/benchmark/vue.md +14 -5
- package/docs/de/cli/index.md +6 -1
- package/docs/de/cli/upgrade.md +125 -0
- package/docs/en/agent_skills.md +29 -1
- package/docs/en/benchmark/nextjs.md +6 -3
- package/docs/en/benchmark/solid.md +21 -4
- package/docs/en/benchmark/svelte.md +18 -3
- package/docs/en/benchmark/tanstack.md +7 -4
- package/docs/en/benchmark/vue.md +15 -6
- package/docs/en/cli/index.md +6 -1
- package/docs/en/cli/upgrade.md +125 -0
- package/docs/en-GB/benchmark/nextjs.md +6 -3
- package/docs/en-GB/benchmark/solid.md +21 -4
- package/docs/en-GB/benchmark/svelte.md +18 -3
- package/docs/en-GB/benchmark/tanstack.md +6 -3
- package/docs/en-GB/benchmark/vue.md +15 -6
- package/docs/en-GB/cli/index.md +6 -1
- package/docs/en-GB/cli/upgrade.md +125 -0
- package/docs/es/benchmark/nextjs.md +6 -3
- package/docs/es/benchmark/solid.md +21 -4
- package/docs/es/benchmark/svelte.md +18 -3
- package/docs/es/benchmark/tanstack.md +6 -3
- package/docs/es/benchmark/vue.md +14 -5
- package/docs/es/cli/index.md +6 -1
- package/docs/es/cli/upgrade.md +125 -0
- package/docs/fr/benchmark/nextjs.md +6 -3
- package/docs/fr/benchmark/solid.md +21 -4
- package/docs/fr/benchmark/svelte.md +18 -3
- package/docs/fr/benchmark/tanstack.md +6 -3
- package/docs/fr/benchmark/vue.md +15 -6
- package/docs/fr/cli/index.md +6 -1
- package/docs/fr/cli/upgrade.md +125 -0
- package/docs/hi/benchmark/nextjs.md +6 -3
- package/docs/hi/benchmark/solid.md +21 -4
- package/docs/hi/benchmark/svelte.md +18 -3
- package/docs/hi/benchmark/tanstack.md +6 -3
- package/docs/hi/benchmark/vue.md +15 -6
- package/docs/hi/cli/index.md +6 -1
- package/docs/hi/cli/upgrade.md +125 -0
- package/docs/id/benchmark/nextjs.md +6 -3
- package/docs/id/benchmark/solid.md +21 -4
- package/docs/id/benchmark/svelte.md +18 -3
- package/docs/id/benchmark/tanstack.md +6 -3
- package/docs/id/benchmark/vue.md +15 -6
- package/docs/id/cli/index.md +6 -1
- package/docs/id/cli/upgrade.md +125 -0
- package/docs/it/benchmark/nextjs.md +6 -3
- package/docs/it/benchmark/solid.md +21 -4
- package/docs/it/benchmark/svelte.md +18 -3
- package/docs/it/benchmark/tanstack.md +6 -3
- package/docs/it/benchmark/vue.md +14 -5
- package/docs/it/cli/index.md +6 -1
- package/docs/it/cli/upgrade.md +125 -0
- package/docs/ja/benchmark/nextjs.md +6 -3
- package/docs/ja/benchmark/solid.md +21 -4
- package/docs/ja/benchmark/svelte.md +18 -3
- package/docs/ja/benchmark/tanstack.md +5 -2
- package/docs/ja/benchmark/vue.md +14 -5
- package/docs/ja/cli/index.md +6 -1
- package/docs/ja/cli/upgrade.md +125 -0
- package/docs/ko/benchmark/nextjs.md +6 -3
- package/docs/ko/benchmark/solid.md +21 -4
- package/docs/ko/benchmark/svelte.md +18 -3
- package/docs/ko/benchmark/tanstack.md +6 -3
- package/docs/ko/benchmark/vue.md +15 -6
- package/docs/ko/cli/index.md +6 -1
- package/docs/ko/cli/upgrade.md +126 -0
- package/docs/pl/benchmark/nextjs.md +6 -3
- package/docs/pl/benchmark/solid.md +21 -4
- package/docs/pl/benchmark/svelte.md +18 -3
- package/docs/pl/benchmark/tanstack.md +6 -3
- package/docs/pl/benchmark/vue.md +15 -6
- package/docs/pl/cli/index.md +6 -1
- package/docs/pl/cli/upgrade.md +125 -0
- package/docs/pt/benchmark/nextjs.md +6 -3
- package/docs/pt/benchmark/solid.md +21 -4
- package/docs/pt/benchmark/svelte.md +18 -3
- package/docs/pt/benchmark/tanstack.md +6 -3
- package/docs/pt/benchmark/vue.md +14 -5
- package/docs/pt/cli/index.md +6 -1
- package/docs/pt/cli/upgrade.md +125 -0
- package/docs/ru/benchmark/nextjs.md +6 -3
- package/docs/ru/benchmark/solid.md +21 -4
- package/docs/ru/benchmark/svelte.md +18 -3
- package/docs/ru/benchmark/tanstack.md +6 -3
- package/docs/ru/benchmark/vue.md +15 -6
- package/docs/ru/cli/index.md +6 -1
- package/docs/ru/cli/upgrade.md +125 -0
- package/docs/tr/benchmark/nextjs.md +6 -3
- package/docs/tr/benchmark/solid.md +21 -4
- package/docs/tr/benchmark/svelte.md +18 -3
- package/docs/tr/benchmark/tanstack.md +6 -3
- package/docs/tr/benchmark/vue.md +15 -6
- package/docs/tr/cli/index.md +6 -1
- package/docs/tr/cli/upgrade.md +125 -0
- package/docs/uk/benchmark/nextjs.md +6 -3
- package/docs/uk/benchmark/solid.md +21 -4
- package/docs/uk/benchmark/svelte.md +18 -3
- package/docs/uk/benchmark/tanstack.md +6 -3
- package/docs/uk/benchmark/vue.md +15 -6
- package/docs/uk/cli/index.md +6 -1
- package/docs/uk/cli/upgrade.md +125 -0
- package/docs/vi/benchmark/nextjs.md +6 -3
- package/docs/vi/benchmark/solid.md +21 -4
- package/docs/vi/benchmark/svelte.md +18 -3
- package/docs/vi/benchmark/tanstack.md +6 -3
- package/docs/vi/benchmark/vue.md +15 -6
- package/docs/vi/cli/index.md +6 -1
- package/docs/vi/cli/upgrade.md +125 -0
- package/docs/zh/benchmark/nextjs.md +6 -3
- package/docs/zh/benchmark/solid.md +21 -4
- package/docs/zh/benchmark/svelte.md +18 -3
- package/docs/zh/benchmark/tanstack.md +5 -2
- package/docs/zh/benchmark/vue.md +15 -6
- package/docs/zh/cli/index.md +6 -1
- package/docs/zh/cli/upgrade.md +125 -0
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +20 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Beste i18n-Lösung für Svelte im Jahr 2026 – Benchmark-Bericht
|
|
5
|
-
description: Vergleichen Sie Svelte-Internationalisierungsbibliotheken (i18n) wie svelte-i18n, Paraglide und Intlayer. Detaillierter Leistungsbericht zu Bundle-Größe, Leakage und Reaktivität.
|
|
5
|
+
description: Vergleichen Sie Svelte-Internationalisierungsbibliotheken (i18n) wie svelte-i18n, Paraglide, Tolgee und Intlayer. Detaillierter Leistungsbericht zu Bundle-Größe, Leakage und Reaktivität.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-svelte-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Benchmark-Ergebnisse aktualisiert"
|
|
@@ -67,6 +70,7 @@ Die andere Auswirkung betrifft die Entwicklererfahrung (DX): Wie Sie Inhalte dek
|
|
|
67
70
|
|
|
68
71
|
- **Intlayer**: Die leistungseffizienteste Wahl (v9.5.6) mit dem kleinsten Fußabdruck.
|
|
69
72
|
- **Paraglide**: Starker Kandidat für Tree-Shaking, hat aber eine komplexere Entwicklererfahrung und Overhead bei der Reaktivität.
|
|
73
|
+
- **Tolgee**: Funktionsreiche Übersetzungsplattform mit In-Context-Bearbeitung, aber recht schwer (~13.0 KB, ca. 3.6× Intlayer), mit erheblichem Bundle-Leakage zwischen Seiten in statischen Setups (90% Seiten-Leak).
|
|
70
74
|
- **svelte-i18n**: Umfassend und Standard für Svelte, bringt aber ein viel größeres Bundle-Gewicht mit sich (~4,5x Intlayer).
|
|
71
75
|
|
|
72
76
|
## Testen Sie Ihre App
|
|
@@ -101,6 +105,7 @@ Für diesen Benchmark haben wir die folgenden Bibliotheken verglichen:
|
|
|
101
105
|
- `Base App` (Keine i18n-Bibliothek)
|
|
102
106
|
- [`svelte-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/svelte-intlayer/exports.md) (v9.5.6)
|
|
103
107
|
- [`svelte-i18n`](https://github.com/kaisermann/svelte-i18n) (v4.0.1)
|
|
108
|
+
- [`@tolgee/svelte`](https://github.com/tolgee/tolgee-js) (v7.2.1)
|
|
104
109
|
- [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
|
|
105
110
|
|
|
106
111
|
Das Framework ist `Svelte` mit einer mehrsprachigen App aus **10 Seiten** und **10 Sprachen**.
|
|
@@ -145,7 +150,7 @@ Ich habe dieselbe mehrsprachige App in einem echten Browser für jeden Stack aus
|
|
|
145
150
|
|
|
146
151
|
GitHub-Sterne sind ein starker Indikator für die Popularität eines Projekts, das Vertrauen der Community und die langfristige Relevanz. Sie sind zwar kein direktes Maß für die technische Qualität, spiegeln jedoch wider, wie viele Entwickler das Projekt nützlich finden, seinen Fortschritt verfolgen und es wahrscheinlich übernehmen werden. Um den Wert eines Projekts einzuschätzen, helfen Sterne dabei, die Traktion verschiedener Alternativen zu vergleichen und Einblicke in das Wachstum des Ökosystems zu gewinnen.
|
|
147
152
|
|
|
148
|
-
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
|
|
153
|
+
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
149
154
|
|
|
150
155
|
## Ergebnisse im Detail
|
|
151
156
|
|
|
@@ -165,6 +170,16 @@ Schließlich verwendet Paraglide im Vergleich zu anderen Lösungen keinen Store
|
|
|
165
170
|
|
|
166
171
|
> Hinweis zu Paraglide: Die Lösung injiziert Code in Ihre Codebasis für Importe; daher ist die Metrik „lib size“ im Benchmark-Bericht fast 0. Codegenerierung ist eine gute Sache, da die verwendete Funktion nur die notwendige Logik enthält (Präfix überall vs. kein Präfix, Cookie vs. Speicher usw.). Im Vergleich dazu führt Intlayer diese Filterung über Injektionen von Umgebungsvariablen während des Builds durch, um den Bundler zu zwingen, den Inhalt je nach Logik zu tree-shaken. Dank dessen sind Paraglide und Intlayer am Ende 6- bis 10-mal leichtere Lösungen als i18next oder next-intl.
|
|
167
172
|
|
|
173
|
+
**(Tolgee)** (`@tolgee/svelte@7.2.1`):
|
|
174
|
+
|
|
175
|
+
`Tolgee` bietet eine All-in-One-Lokalisierungsplattform mit In-Context-Bearbeitung und offizieller Svelte-Integration über `@tolgee/svelte`.
|
|
176
|
+
|
|
177
|
+
Das Paket ist relativ schwer (~13.0 KB, was etwa 3.6× `svelte-intlayer` entspricht).
|
|
178
|
+
|
|
179
|
+
Ohne granulare Aufteilung pro Seite in Svelte werden in statischen Setups alle Übersetzungen direkt beim Start in den Speicher geladen. Dies führt zu erheblichem Bundle-Leakage (50.0% Locale-Leakage, 90.0% Seiten-Leakage) und durchschnittlichen Seiten-Bundle-Größen von ~100.7 KB (im Vergleich zu ~59.0 KB bei Intlayer).
|
|
180
|
+
|
|
181
|
+
Die Reaktivität beim Sprachwechsel ist sehr schnell (0.5 ms), begünstigt durch die reaktiven Stores von Svelte, obwohl der Hydration-Overhead etwas höher ist (~6.2 ms gegenüber ~5.5 ms bei Intlayer).
|
|
182
|
+
|
|
168
183
|
**(svelte-i18n)** (`svelte-i18n@4.0.1`):
|
|
169
184
|
|
|
170
185
|
Diese Lösung erfüllt alle i18n-Anforderungen in einem Svelte-Projekt. Aber wie bei i18next oder anderen großen i18n-Lösungen ist sie etwas schwer (~16,6 KB, was etwa das 4,5-fache von `svelte-intlayer` ist).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Beste i18n-Lösung für TanStack Start im Jahr 2026 - Benchmark-Bericht
|
|
5
5
|
description: Vergleichen Sie TanStack Start Internationalisierungs-Bibliotheken wie react-i18next, use-intl und Intlayer. Detaillierter Performance-Bericht zu Bundle-Größe, Leakage und Reaktivität.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Benchmark-Ergebnisse aktualisiert"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Benchmark-Ergebnisse aktualisiert"
|
|
@@ -200,7 +203,7 @@ Die Idee hinter `Wuchale` ist interessant, aber noch keine tragfähige Lösung.
|
|
|
200
203
|
|
|
201
204
|
`Tolgee` adressiert viele der oben genannten Probleme. Ich fand den Einstieg schwieriger als bei anderen Tools mit ähnlichen Ansätzen. Es bietet keine Typsicherheit, was es zudem sehr schwer macht, fehlende Schlüssel zur Kompilierzeit zu finden. Ich musste die Tolgee-APIs mit eigenen Funktionen umhüllen, um eine Erkennung fehlender Schlüssel hinzuzufügen.
|
|
202
205
|
|
|
203
|
-
Das Paket ist relativ groß (~
|
|
206
|
+
Das Paket ist relativ groß (~13.8 KB, was mehr als 2.9× `react-intlayer` ist).
|
|
204
207
|
|
|
205
208
|
Auf TanStack Start hatte ich ebenfalls Reaktivitätsprobleme: Beim Sprachwechsel musste ich den Provider zum Re-render zwingen und Locale-Wechsel-Events abonnieren, damit das Laden in einer anderen Sprache korrekt funktionierte.
|
|
206
209
|
|
|
@@ -234,7 +237,7 @@ Das Package ist auch schwer (~15.3kb, was etwa 3× `react-intlayer` ist).
|
|
|
234
237
|
|
|
235
238
|
Dieser TanStack Start-Benchmark hat kein direktes Äquivalent zu `next-translate` (Next.js-Plugin + `getStaticProps`). Für Teams, die unbedingt eine `t()`-API mit einem ausgereiften Ökosystem wollen, bleiben `react-i18next` und `use-intl` "vernünftige" Entscheidungen, aber stellen Sie sich darauf ein, viel Zeit in die Optimierung zu investieren, um Leakage zu vermeiden.
|
|
236
239
|
|
|
237
|
-
**(Intlayer)** (`react-intlayer@9.5.
|
|
240
|
+
**(Intlayer)** (`react-intlayer@9.5.6`):
|
|
238
241
|
|
|
239
242
|
Ich werde `react-intlayer` der Objektivität halber nicht persönlich bewerten, da es meine eigene Lösung ist.
|
|
240
243
|
|
package/docs/de/benchmark/vue.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Beste i18n-Lösung für Vue im Jahr 2026 – Benchmark-Bericht
|
|
5
|
-
description: Vergleichen Sie Vue-Internationalisierungsbibliotheken (i18n) wie vue-i18n, fluent-vue und Intlayer. Detaillierter Leistungsbericht zu Bundle-Größe, Leakage und Reaktivität.
|
|
5
|
+
description: Vergleichen Sie Vue-Internationalisierungsbibliotheken (i18n) wie vue-i18n, fluent-vue, Tolgee und Intlayer. Detaillierter Leistungsbericht zu Bundle-Größe, Leakage und Reaktivität.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-vue-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Benchmark-Ergebnisse aktualisiert und Tolgee hinzugefügt"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Benchmark-Ergebnisse aktualisiert"
|
|
@@ -66,6 +69,7 @@ Die andere Auswirkung betrifft die Entwicklererfahrung (DX): Wie Sie Inhalte dek
|
|
|
66
69
|
## TL;DR
|
|
67
70
|
|
|
68
71
|
- **Intlayer**: Die leichteste Lösung (v9.5.6) mit nativem Scoping und dynamischem Laden.
|
|
72
|
+
- **Tolgee**: Effektives dynamisches Laden ohne Lecks im dynamischen Modus, aber schwerer (~3,7× Intlayer) und ohne integrierte Typsicherheit zur Kompilierzeit.
|
|
69
73
|
- **vue-i18n**: Der Industriestandard mit einem reichen Ökosystem, kann aber in großen Anwendungen deutlich schwerer und schwieriger für Code-Splitting zu optimieren sein.
|
|
70
74
|
- **fluent-vue**: Innovative Nachrichtenorganisation, aber es mangelt an Typsicherheit und es erweist sich als extrem schwere Lösung.
|
|
71
75
|
|
|
@@ -103,6 +107,7 @@ Für diesen Benchmark haben wir die folgenden Bibliotheken verglichen:
|
|
|
103
107
|
- [`@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/compat/vue-i18n.md) (v9.5.6)
|
|
104
108
|
- [`vue-i18n`](https://github.com/intlify/vue-i18n) (v11.4.0)
|
|
105
109
|
- [`fluent-vue`](https://github.com/fluent-vue/fluent-vue) (v3.8.2)
|
|
110
|
+
- [`@tolgee/vue`](https://github.com/tolgee/tolgee-js) (v7.2.0)
|
|
106
111
|
|
|
107
112
|
Das Framework ist `Vue` mit einer mehrsprachigen App aus **10 Seiten** und **10 Sprachen**.
|
|
108
113
|
|
|
@@ -146,7 +151,7 @@ Ich habe dieselbe mehrsprachige App in einem echten Browser für jeden Stack aus
|
|
|
146
151
|
|
|
147
152
|
GitHub-Sterne sind ein starker Indikator für die Popularität eines Projekts, das Vertrauen der Community und die langfristige Relevanz. Sie sind zwar kein direktes Maß für die technische Qualität, spiegeln jedoch wider, wie viele Entwickler das Projekt nützlich finden, seinen Fortschritt verfolgen und es wahrscheinlich übernehmen werden. Um den Wert eines Projekts einzuschätzen, helfen Sterne dabei, die Traktion verschiedener Alternativen zu vergleichen und Einblicke in das Wachstum des Ökosystems zu gewinnen.
|
|
148
153
|
|
|
149
|
-
[](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&aymericzip/intlayer)
|
|
154
|
+
[](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&tolgee/tolgee-js&aymericzip/intlayer)
|
|
150
155
|
|
|
151
156
|
## Ergebnisse im Detail
|
|
152
157
|
|
|
@@ -156,11 +161,15 @@ GitHub-Sterne sind ein starker Indikator für die Popularität eines Projekts, d
|
|
|
156
161
|
|
|
157
162
|
### 2 - Akzeptable Lösungen
|
|
158
163
|
|
|
164
|
+
**(Tolgee)** (`@tolgee/vue@7.2.0`):
|
|
165
|
+
|
|
166
|
+
`Tolgee` adressiert viele der zuvor genannten Probleme und bietet dynamisches Laden, das Locale- und Seiten-Leaks erfolgreich eliminiert (wodurch das Seiten-JS auf ~58,8 KB sinkt). Es bietet jedoch standardmäßig keine integrierte Typsicherheit zur Kompilierzeit für Schlüssel, was das Erkennen fehlender Schlüssel erschwert. Zudem ist die Bibliothek relativ schwer (~13,8 KB, was etwa 3,7× `vue-intlayer` entspricht).
|
|
167
|
+
|
|
159
168
|
**(vue-i18n)** (`vue-i18n@11.4.0`):
|
|
160
169
|
|
|
161
170
|
- **vue-i18n** ist unbestritten die am häufigsten verwendete i18n-Bibliothek für Vue, sie hat viele Funktionen und ein riesiges Ökosystem. Aber unter der Haube ist die Lösung ziemlich schwer. Selbst wenn vue-i18n Lazy-Loading für Nachrichten integriert, fehlt eine Scoping-Funktion. Bei einer klassischen Vue-SPA-App gibt es kein Problem, aber für eine Nuxt-App, die @nuxt/i18n verwendet, führt dies dazu, dass die Nachrichten aller Seiten in einer einzigen enthalten sind. Für eine große Nuxt-App mit mehr als 10 Seiten kann dies wirklich problematisch werden.
|
|
162
171
|
|
|
163
|
-
Das Paket ist sehr schwer (~24
|
|
172
|
+
Das Paket ist sehr schwer (~24.1 KB, was etwa das 6-fache von `vue-intlayer` ist).
|
|
164
173
|
|
|
165
174
|
**(fluent-vue)** (`fluent-vue@3.8.2`):
|
|
166
175
|
|
|
@@ -168,6 +177,6 @@ Das Paket ist sehr schwer (~24,3 KB, was etwa das 6-fache von `vue-intlayer` ist
|
|
|
168
177
|
|
|
169
178
|
### 3 - Empfehlungen
|
|
170
179
|
|
|
171
|
-
**(Intlayer)** (`vue-intlayer@9.5.
|
|
180
|
+
**(Intlayer)** (`vue-intlayer@9.5.6`):
|
|
172
181
|
|
|
173
182
|
Ich werde `vue-intlayer` aus Gründen der Objektivität nicht persönlich beurteilen, da es meine eigene Lösung ist.
|
package/docs/de/cli/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: CLI - Alle Intlayer-CLI-Befehle für Ihre mehrsprachige Website
|
|
5
5
|
description: Erfahren Sie, wie Sie das Intlayer-CLI zur Verwaltung Ihrer mehrsprachigen Website verwenden. Folgen Sie den Schritten in dieser Online-Dokumentation, um Ihr Projekt in wenigen Minuten einzurichten.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
- concept
|
|
18
18
|
- cli
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.8
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Befehl upgrade hinzufügen"
|
|
20
23
|
- version: 9.5.6
|
|
21
24
|
date: 2026-09-21
|
|
22
25
|
changes: "Befehl init infra hinzufügen"
|
|
@@ -155,6 +158,7 @@ Um zu erfahren, wie Sie verfügbare Sprachen oder andere Parameter konfigurieren
|
|
|
155
158
|
|
|
156
159
|
- **[Intlayer initialisieren](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/init.md)** - Richten Sie Intlayer in Ihrem Projekt mit automatischer Konfiguration ein
|
|
157
160
|
- **[Infrastruktur einrichten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/infra.md)** - Installieren Sie die Desktop-App oder hosten Sie das CMS selbst mit Docker (All-in-One oder Compose)
|
|
161
|
+
- **[Intlayer-Pakete aktualisieren](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/upgrade.md)** - Listen Sie die Intlayer-Pakete jeder `package.json` auf und aktualisieren Sie sie auf die neueste Version
|
|
158
162
|
- **[Konfiguration verwalten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/configuration.md)** - Rufen Sie Ihre Intlayer-Konfiguration ab und senden Sie sie an das CMS
|
|
159
163
|
|
|
160
164
|
### Dokumentationsverwaltung
|
|
@@ -182,6 +186,7 @@ Um zu erfahren, wie Sie verfügbare Sprachen oder andere Parameter konfigurieren
|
|
|
182
186
|
"scripts": {
|
|
183
187
|
"intlayer:init": "npx intlayer init",
|
|
184
188
|
"intlayer:infra": "npx intlayer init infra",
|
|
189
|
+
"intlayer:upgrade": "npx intlayer upgrade",
|
|
185
190
|
"intlayer:login": "npx intlayer login",
|
|
186
191
|
"intlayer:build": "npx intlayer build",
|
|
187
192
|
"intlayer:watch": "npx intlayer build --watch",
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-23
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
|
+
title: CLI - Intlayer-Pakete aktualisieren
|
|
5
|
+
description: Erfahren Sie, wie Sie mit dem Befehl upgrade des Intlayer-CLI alle Intlayer-Pakete Ihres Projekts oder Monorepos auflisten und auf die neueste Version aktualisieren.
|
|
6
|
+
keywords:
|
|
7
|
+
- CLI
|
|
8
|
+
- Upgrade
|
|
9
|
+
- Update
|
|
10
|
+
- Pakete
|
|
11
|
+
- Monorepo
|
|
12
|
+
- Intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- concept
|
|
16
|
+
- cli
|
|
17
|
+
- upgrade
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.5.8
|
|
20
|
+
date: 2026-09-23
|
|
21
|
+
changes: "Befehl upgrade hinzufügen"
|
|
22
|
+
author: aymericzip
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Intlayer-Pakete aktualisieren
|
|
26
|
+
|
|
27
|
+
```bash packageManager="npm"
|
|
28
|
+
npx intlayer upgrade
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash packageManager="yarn"
|
|
32
|
+
yarn intlayer upgrade
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```bash packageManager="pnpm"
|
|
36
|
+
pnpm intlayer upgrade
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash packageManager="bun"
|
|
40
|
+
bun x intlayer upgrade
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Der Befehl `upgrade` listet die in jeder `package.json` Ihres Projekts deklarierten Intlayer-Pakete auf, einschließlich Monorepo-Workspaces, und aktualisiert sie auf die neueste veröffentlichte Version. Er führt denselben Paketaktualisierungsschritt wie `intlayer init` eigenständig aus.
|
|
44
|
+
|
|
45
|
+
## Argumente:
|
|
46
|
+
|
|
47
|
+
- `--project-root [projectRoot]` - Optional. Das Projekt-Stammverzeichnis. Standardmäßig startet der Befehl von der nächstgelegenen `package.json` oberhalb des aktuellen Arbeitsverzeichnisses.
|
|
48
|
+
- `--dry-run` - Optional. Listet die Pakete und ihre Zielversion auf, ohne Dateien zu ändern.
|
|
49
|
+
- `--tag <tag>` - Optional. Das npm-dist-tag, auf das aktualisiert werden soll (zum Beispiel `canary`). Standardmäßig `latest`.
|
|
50
|
+
|
|
51
|
+
## Funktionsweise:
|
|
52
|
+
|
|
53
|
+
1. **Listet die Intlayer-Pakete auf** - Durchsucht jede `package.json` des Projekts (ignoriert `node_modules` und Build-Ausgaben) nach Abhängigkeiten und Dev-Abhängigkeiten wie `intlayer`, `@intlayer/*`, `*-intlayer` und `intlayer-*`.
|
|
54
|
+
2. **Ruft die Zielversion ab** - Liest die Version des ausgewählten dist-tags (standardmäßig `latest`) jedes Pakets aus der npm-Registry.
|
|
55
|
+
3. **Schreibt die Versionsbereiche neu** - Aktualisiert jeden veralteten Bereich direkt in der Datei unter Beibehaltung des Operators (`^`, `~` oder keiner) sowie der Dateieinrückung.
|
|
56
|
+
4. **Einmalige Installation** - Führt eine einzelne Installation aus dem Workspace-Root aus (dem nächstgelegenen Verzeichnis mit einer Lock-Datei), unter Verwendung des Paketmanagers, dem die Lock-Datei gehört:
|
|
57
|
+
|
|
58
|
+
| Lock-Datei | Befehl |
|
|
59
|
+
| ------------------------------ | -------------- |
|
|
60
|
+
| `bun.lock` / `bun.lockb` | `bun install` |
|
|
61
|
+
| `pnpm-lock.yaml` | `pnpm install` |
|
|
62
|
+
| `yarn.lock` | `yarn install` |
|
|
63
|
+
| `package-lock.json` oder keine | `npm install` |
|
|
64
|
+
|
|
65
|
+
Wenn keine Lock-Datei vorhanden ist, wird das Feld `packageManager` der `package.json` (zum Beispiel `"bun@1.2.0"`) verwendet, bevor auf npm zurückgegriffen wird.
|
|
66
|
+
|
|
67
|
+
Bereiche, die nicht auf die Registry verweisen, wie `workspace:*`, `file:`, `link:`, `catalog:` oder Git-URLs, werden niemals geändert.
|
|
68
|
+
|
|
69
|
+
## Beispiele:
|
|
70
|
+
|
|
71
|
+
### Verfügbare Upgrades auflisten, ohne sie anzuwenden:
|
|
72
|
+
|
|
73
|
+
```bash packageManager="npm"
|
|
74
|
+
npx intlayer upgrade --dry-run
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```bash packageManager="yarn"
|
|
78
|
+
yarn intlayer upgrade --dry-run
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```bash packageManager="pnpm"
|
|
82
|
+
pnpm intlayer upgrade --dry-run
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash packageManager="bun"
|
|
86
|
+
bun x intlayer upgrade --dry-run
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Auf das Canary-Release aktualisieren:
|
|
90
|
+
|
|
91
|
+
```bash packageManager="npm"
|
|
92
|
+
npx intlayer upgrade --tag canary
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```bash packageManager="yarn"
|
|
96
|
+
yarn intlayer upgrade --tag canary
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```bash packageManager="pnpm"
|
|
100
|
+
pnpm intlayer upgrade --tag canary
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```bash packageManager="bun"
|
|
104
|
+
bun x intlayer upgrade --tag canary
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Beispielausgabe:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer upgrade
|
|
111
|
+
Intlayer packages:
|
|
112
|
+
package.json
|
|
113
|
+
intlayer ^9.0.0 → ^9.5.7
|
|
114
|
+
apps/web/package.json
|
|
115
|
+
next-intlayer ^9.5.7 (latest)
|
|
116
|
+
vite-intlayer ~9.2.0 → ~9.5.7
|
|
117
|
+
Running bun install...
|
|
118
|
+
✓ Upgraded 2 Intlayer dependencies to latest
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Hinweise:
|
|
122
|
+
|
|
123
|
+
- Führen Sie den Befehl im Stammverzeichnis Ihres Repositorys aus, um alle Workspaces zu aktualisieren. Führen Sie ihn in einem Workspace aus, um nur diesen Workspace zu aktualisieren.
|
|
124
|
+
- Pakete, deren Version nicht abgerufen werden kann (offline, privates oder unveröffentlichtes Paket), werden aufgelistet und unverändert gelassen.
|
|
125
|
+
- Schlägt die Installation fehl, bleiben die aktualisierten Bereiche in `package.json` erhalten. Führen Sie den Installationsbefehl Ihres Paketmanagers manuell aus.
|
package/docs/en/agent_skills.md
CHANGED
|
@@ -99,7 +99,7 @@ npx skills add aymericzip/intlayer-skills
|
|
|
99
99
|
|
|
100
100
|
- Teaches the agent to use Svelte stores and idiomatic syntax for reactive and type-safe localized content across Svelte and SvelteKit apps.
|
|
101
101
|
|
|
102
|
-
**intlayer-
|
|
102
|
+
**intlayer-remote-content**
|
|
103
103
|
|
|
104
104
|
- Allows the agent to integrate and manage remote content, enabling it to handle live-syncing and remote translation workflows via the Intlayer CMS.
|
|
105
105
|
|
|
@@ -114,3 +114,31 @@ npx skills add aymericzip/intlayer-skills
|
|
|
114
114
|
**intlayer-compiler**
|
|
115
115
|
|
|
116
116
|
- Simplifies the agent's workflow by enabling automatic content extraction, allowing it to write translatable strings directly in your code without manual dictionary files.
|
|
117
|
+
|
|
118
|
+
**intlayer-lit**
|
|
119
|
+
|
|
120
|
+
- Teaches the agent to translate Lit web components with the `useIntlayer` and `useLocale` ReactiveControllers.
|
|
121
|
+
|
|
122
|
+
**intlayer-vanilla**
|
|
123
|
+
|
|
124
|
+
- Enables the agent to localize plain JavaScript / TypeScript pages with `vanilla-intlayer`, with or without a bundler.
|
|
125
|
+
|
|
126
|
+
**intlayer-remix**
|
|
127
|
+
|
|
128
|
+
- Gives the agent the Remix 3 router middleware and the request-scoped `useIntlayer` / `useLocale` hooks.
|
|
129
|
+
|
|
130
|
+
**intlayer-backend**
|
|
131
|
+
|
|
132
|
+
- Equips the agent to translate server responses in Express, Fastify, Hono, NestJS, AdonisJS and Elysia through one shared middleware + `t` / `getIntlayer` pattern.
|
|
133
|
+
|
|
134
|
+
**intlayer-dev-tools**
|
|
135
|
+
|
|
136
|
+
- Lets the agent set up the Intlayer tooling around your code: ESLint rules for hardcoded strings, the Language Server, the VS Code and Chrome extensions, the MCP server and CI/CD translation checks.
|
|
137
|
+
|
|
138
|
+
**intlayer-markdown**
|
|
139
|
+
|
|
140
|
+
- Teaches the agent to declare Markdown content (`md()`, `.content.md` files, external files) and render it with MDX components, a global `MarkdownProvider`, Suspense and server-side parsing.
|
|
141
|
+
|
|
142
|
+
**intlayer-compat**
|
|
143
|
+
|
|
144
|
+
- Guides the agent through migrating from i18next, react-i18next, next-intl, next-i18next, react-intl, vue-i18n or Lingui with compat adapters that keep the original API, so translation calls don't need rewriting.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Best i18n solution for Next.js in 2026 - Benchmark Report
|
|
5
5
|
description: Compare Next.js internationalization (i18n) libraries like next-intl, next-i18next, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Update benchmark results"
|
|
@@ -214,7 +217,7 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
|
|
|
214
217
|
|
|
215
218
|
**(Tolgee)** (`@tolgee/react@7.2.0`):
|
|
216
219
|
|
|
217
|
-
`Tolgee` addresses many of the issues mentioned earlier. I found it harder to adopt than similar tools. It does not provide type safety, which also makes catching missing keys at compile time harder. I had to wrap Tolgee’s functions with my own to add missing-key detection.
|
|
220
|
+
`Tolgee` addresses many of the issues mentioned earlier. I found it harder to adopt than similar tools. It does not provide type safety, which also makes catching missing keys at compile time harder. I had to wrap Tolgee’s functions with my own to add missing-key detection. The package is also relatively heavy (~14.3kb, which is about 2.8× `next-intlayer`).
|
|
218
221
|
|
|
219
222
|
**(Next Intl)** (`next-intl@4.14.2`):
|
|
220
223
|
|
|
@@ -240,7 +243,7 @@ Message formats also differ: `next-intl` uses ICU MessageFormat, while `i18next`
|
|
|
240
243
|
|
|
241
244
|
`next-translate` is my main recommendation if you like a `t()`-style API. It is elegant via `next-translate-plugin`, loading namespaces through `getStaticProps` with a Webpack / Turbopack loader. It is also one of the lightest options here (~3.5kb). For namespacing, defining namespaces per page or route in config is well thought out and easier to maintain than main alternatives like **next-intl** or **next-i18next**. In version `3.1.2`, I noted that static rendering did not work; Next.js fell back to dynamic rendering.
|
|
242
245
|
|
|
243
|
-
**(Intlayer)** (`next-intlayer@9.5.
|
|
246
|
+
**(Intlayer)** (`next-intlayer@9.5.6`):
|
|
244
247
|
|
|
245
248
|
I will not personally judge `next-intlayer` for objectivity’s sake, since it is my own solution.
|
|
246
249
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Best i18n solution for Solid in 2026 - Benchmark Report
|
|
5
|
-
description: Compare Solid internationalization libraries like solid-primitives, solid-i18next, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
5
|
+
description: Compare Solid internationalization libraries like solid-primitives, solid-i18next, Tolgee, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Update benchmark results"
|
|
@@ -68,6 +71,7 @@ The other impact is on developer experience: how you declare content, types, nam
|
|
|
68
71
|
- **Intlayer**: Recommended choice for professional Solid applications needing advanced features and optimization (v9.5.6).
|
|
69
72
|
- **@solid-primitives/i18n**: Excellent lightweight alternative for simple projects, though lacks advanced features like lazy loading.
|
|
70
73
|
- **solid-i18next**: Standard but heavy option (~3.5× Intlayer) with same downsides as React i18next.
|
|
74
|
+
- **Tolgee**: Feature-rich translation platform, but fairly heavy (~12.7kb, about 3.0× Intlayer), lacks dedicated Solid primitives (relies on @tolgee/web), and in static setups can leak translations across pages (90% page leak).
|
|
71
75
|
- **Paraglide**: Innovative approach but complex DX and tree-shaking issues in some setups.
|
|
72
76
|
|
|
73
77
|
## Test your app
|
|
@@ -103,6 +107,7 @@ For this benchmark, we compared the following libraries:
|
|
|
103
107
|
- [`solid-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/solid-intlayer/exports.md) (v9.5.6)
|
|
104
108
|
- [`@solid-primitives/i18n`](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n) (v2.2.1)
|
|
105
109
|
- [`i18next`](https://github.com/i18next/i18next) (v26.0.8) + [`@mbarzda/solid-i18next`](https://github.com/mbarzda/solid-i18next) (v1.4.1)
|
|
110
|
+
- [`@tolgee/web`](https://github.com/tolgee/tolgee-js) (v7.2.0)
|
|
106
111
|
- [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
|
|
107
112
|
|
|
108
113
|
The framework is `Solid` with a multilingual app of **10 pages** and **10 languages**.
|
|
@@ -147,7 +152,7 @@ I ran the same multilingual app in a real browser for every stack, then wrote do
|
|
|
147
152
|
|
|
148
153
|
GitHub stars are a strong indicator of a project's popularity, community trust, and long-term relevance. While not a direct measure of technical quality, they reflect how many developers find the project useful, follow its progress, and are likely to adopt it. For estimating the value of a project, stars help compare traction across alternatives and provide insights into ecosystem growth.
|
|
149
154
|
|
|
150
|
-
[](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&aymericzip/intlayer)
|
|
155
|
+
[](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
151
156
|
|
|
152
157
|
## Results in detail
|
|
153
158
|
|
|
@@ -170,6 +175,18 @@ Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optim
|
|
|
170
175
|
Solid primitive is extremely light and efficient, I recommend that solution for light projects, but it can quickly become lacking features for professional solutions including cookie management, proxy redirection, formatters etc.
|
|
171
176
|
It also misses lazy loading and scoping namespaces for page size optimization.
|
|
172
177
|
|
|
178
|
+
**(Tolgee)** (`@tolgee/web@7.2.0`):
|
|
179
|
+
|
|
180
|
+
`Tolgee` provides a feature-rich internationalization platform with in-context editing capabilities.
|
|
181
|
+
|
|
182
|
+
On Solid, there is currently no dedicated official adapter (such as `@tolgee/solid`), requiring developers to integrate via `@tolgee/web` with custom signals.
|
|
183
|
+
|
|
184
|
+
The package is fairly heavy (~12.7kb, which is about 3.0× `solid-intlayer`).
|
|
185
|
+
|
|
186
|
+
Without a granular per-page splitting mechanism in Solid, all translations load into memory upfront in static setups. This leads to heavy bundle leakage (44.5% locale leakage, 90.0% page leakage) and average page bundle sizes of ~91.8kb (compared to ~35.8kb for Intlayer).
|
|
187
|
+
|
|
188
|
+
Language switch responsiveness is very fast (0.6ms), matching Solid's fine-grained reactivity, though hydration overhead is higher (~5.6ms vs ~3.0ms for Intlayer).
|
|
189
|
+
|
|
173
190
|
**(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
|
|
174
191
|
|
|
175
192
|
`Paraglide` offers an innovative, well-thought-out approach. Even so, in this benchmark the tree-shaking their company advertises did not work for my implementation. The workflow and DX are also more complex than other options.
|
|
@@ -178,7 +195,7 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
|
|
|
178
195
|
|
|
179
196
|
### 3 - Recommendations
|
|
180
197
|
|
|
181
|
-
**(Intlayer)** (`solid-intlayer@9.5.
|
|
198
|
+
**(Intlayer)** (`solid-intlayer@9.5.6`):
|
|
182
199
|
|
|
183
200
|
I will not personally judge `solid-intlayer` for objectivity’s sake, since it is my own solution.
|
|
184
201
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Best i18n solution for Svelte in 2026 - Benchmark Report
|
|
5
|
-
description: Compare Svelte internationalization libraries like svelte-i18n, Paraglide, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
5
|
+
description: Compare Svelte internationalization libraries like svelte-i18n, Paraglide, Tolgee, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-svelte-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Update benchmark results"
|
|
@@ -67,6 +70,7 @@ The other impact is on developer experience: how you declare content, types, nam
|
|
|
67
70
|
|
|
68
71
|
- **Intlayer**: The most performance-efficient choice (v9.5.6) with the smallest footprint.
|
|
69
72
|
- **Paraglide**: Strong contender for tree-shaking but has a more complex developer experience and reactivity overhead.
|
|
73
|
+
- **Tolgee**: Feature-rich translation platform with in-context editing, but fairly heavy (~13.0kb, about 3.6× Intlayer), and in static setups exhibits significant bundle leakage across pages (90% page leak).
|
|
70
74
|
- **svelte-i18n**: Feature-complete and standard for Svelte, but carries a much larger bundle weight (~4.5× Intlayer).
|
|
71
75
|
|
|
72
76
|
## Test your app
|
|
@@ -101,6 +105,7 @@ For this benchmark, we compared the following libraries:
|
|
|
101
105
|
- `Base App` (No i18n library)
|
|
102
106
|
- [`svelte-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/svelte-intlayer/exports.md) (v9.5.6)
|
|
103
107
|
- [`svelte-i18n`](https://github.com/kaisermann/svelte-i18n) (v4.0.1)
|
|
108
|
+
- [`@tolgee/svelte`](https://github.com/tolgee/tolgee-js) (v7.2.1)
|
|
104
109
|
- [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
|
|
105
110
|
|
|
106
111
|
The framework is `Svelte` with a multilingual app of **10 pages** and **10 languages**.
|
|
@@ -145,7 +150,7 @@ I ran the same multilingual app in a real browser for every stack, then wrote do
|
|
|
145
150
|
|
|
146
151
|
GitHub stars are a strong indicator of a project's popularity, community trust, and long-term relevance. While not a direct measure of technical quality, they reflect how many developers find the project useful, follow its progress, and are likely to adopt it. For estimating the value of a project, stars help compare traction across alternatives and provide insights into ecosystem growth.
|
|
147
152
|
|
|
148
|
-
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
|
|
153
|
+
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
149
154
|
|
|
150
155
|
## Results in detail
|
|
151
156
|
|
|
@@ -165,6 +170,16 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
|
|
|
165
170
|
|
|
166
171
|
> Note on paraglide: the solution inject code in your codebase to import, as a result the metric 'lib size' in the benchmark report is almost 0. Code gen is a good think, because the function used will include only the necessary logic (prefix all vs no prefix, cookie vs storage etc). In comparison Intlayer process to this filtering using env variables injection during the build to force the bundler to tree shake the content depending of the logic. Thanks to this, paraglide and intlayer end up being solution 6-10 times lighter than i18next or next-intl.
|
|
167
172
|
|
|
173
|
+
**(Tolgee)** (`@tolgee/svelte@7.2.1`):
|
|
174
|
+
|
|
175
|
+
`Tolgee` provides an all-in-one localization platform with in-context editing and official Svelte integration via `@tolgee/svelte`.
|
|
176
|
+
|
|
177
|
+
The package is fairly heavy (~13.0kb, which is about 3.6× `svelte-intlayer`).
|
|
178
|
+
|
|
179
|
+
Without granular per-page splitting in Svelte, all translations load into memory upfront in static setups. This causes substantial bundle leakage (50.0% locale leakage, 90.0% page leakage) and average page bundle sizes of ~100.7kb (compared to ~59.0kb for Intlayer).
|
|
180
|
+
|
|
181
|
+
Language switch responsiveness is very fast (0.5ms), benefiting from Svelte's reactive stores, though hydration overhead is slightly higher (~6.2ms vs ~5.5ms for Intlayer).
|
|
182
|
+
|
|
168
183
|
**(svelte-i18n)** (`svelte-i18n@4.0.1`):
|
|
169
184
|
|
|
170
185
|
This solution answers all needs for i18n in a Svelte project. But as it's the case for i18next or other main i18n solutions it's a bit heavy (~16.6kb, which is about 4.5× `svelte-intlayer`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Best i18n solution for TanStack Start in 2026 - Benchmark Report
|
|
5
5
|
description: Compare TanStack Start internationalization libraries like react-i18next, use-intl, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Update benchmark results"
|
|
@@ -202,13 +205,13 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
|
|
|
202
205
|
|
|
203
206
|
`Tolgee` addresses many of the issues mentioned earlier. I found it harder to get started with than other tools with similar approaches. It does not provide type safety, which also makes catching missing keys at compile time much harder. I had to wrap Tolgee’s APIs with my own to add missing-key detection.
|
|
204
207
|
|
|
205
|
-
The package is fairly heavy (~
|
|
208
|
+
The package is fairly heavy (~13.8kb, which is about 2.9× `react-intlayer`).
|
|
206
209
|
|
|
207
210
|
On TanStack Start I also had reactivity problems: on locale change I had to force the provider to rerender and subscribe to locale-change events so loading in another language behaved correctly.
|
|
208
211
|
|
|
209
212
|
**(use-intl)** (`use-intl@4.14.2`):
|
|
210
213
|
|
|
211
|
-
`use-intl` is the most fashionable “intl” piece in the React ecosystem (same family as `next-intl`) and is often pushed by AI agents, but in my view wrongly so in a performance-first setting. Getting started is fairly simple. In practice, the process to optimize and limit leakage is quite complex. Likewise, combining dynamic loading + namespacing + TypeScript types slows development a lot. The package is also fairly heavy (~
|
|
214
|
+
`use-intl` is the most fashionable “intl” piece in the React ecosystem (same family as `next-intl`) and is often pushed by AI agents, but in my view wrongly so in a performance-first setting. Getting started is fairly simple. In practice, the process to optimize and limit leakage is quite complex. Likewise, combining dynamic loading + namespacing + TypeScript types slows development a lot. The package is also fairly heavy (~13.0kb, which is about 2.7× `react-intlayer`).
|
|
212
215
|
|
|
213
216
|
On TanStack Start you avoid Next.js-specific traps (`setRequestLocale`, static rendering), but the core issue is the same: without strict discipline, the bundle quickly carries too many messages and per-route namespace maintenance becomes painful.
|
|
214
217
|
|
|
@@ -236,7 +239,7 @@ The package is also heavy (~15.3kb, which is about 3× `react-intlayer`).
|
|
|
236
239
|
|
|
237
240
|
This TanStack Start benchmark has no direct equivalent to `next-translate` (Next.js plugin + `getStaticProps`). For teams that really want a `t()` API with a mature ecosystem, `react-i18next` and `use-intl` remain “reasonable” choices, but expect to invest a lot of time optimizing to avoid leakage.
|
|
238
241
|
|
|
239
|
-
**(Intlayer)** (`react-intlayer@9.5.
|
|
242
|
+
**(Intlayer)** (`react-intlayer@9.5.6`):
|
|
240
243
|
|
|
241
244
|
I will not personally judge `react-intlayer` for objectivity’s sake, since it is my own solution.
|
|
242
245
|
|