@intlayer/docs 5.7.8 → 5.8.0-canary.0
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/intlayer_with_next-i18next.md +3 -4
- package/blog/ar/intlayer_with_next-intl.md +3 -4
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/de/intlayer_with_next-i18next.md +3 -4
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/en/intlayer_with_next-i18next.md +3 -4
- package/blog/en/intlayer_with_next-intl.md +3 -4
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -4
- package/blog/en-GB/intlayer_with_next-intl.md +3 -4
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/es/intlayer_with_next-i18next.md +3 -4
- package/blog/es/intlayer_with_next-intl.md +3 -4
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/fr/intlayer_with_next-i18next.md +3 -4
- package/blog/fr/intlayer_with_next-intl.md +3 -4
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/hi/intlayer_with_next-i18next.md +3 -4
- package/blog/hi/intlayer_with_next-intl.md +3 -4
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/it/intlayer_with_next-i18next.md +3 -4
- package/blog/it/intlayer_with_next-intl.md +3 -4
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/ja/intlayer_with_next-i18next.md +3 -4
- package/blog/ja/intlayer_with_next-intl.md +3 -4
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ko/intlayer_with_next-i18next.md +3 -4
- package/blog/ko/intlayer_with_next-intl.md +3 -4
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/pt/intlayer_with_next-i18next.md +3 -4
- package/blog/pt/intlayer_with_next-intl.md +3 -4
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/ru/intlayer_with_next-i18next.md +3 -4
- package/blog/ru/intlayer_with_next-intl.md +3 -4
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/zh/intlayer_with_next-i18next.md +3 -4
- package/blog/zh/intlayer_with_next-intl.md +3 -4
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/dist/cjs/generated/docs.entry.cjs +41 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +41 -0
- package/dist/esm/generated/docs.entry.mjs.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/formatters.md +239 -0
- package/docs/ar/interest_of_intlayer.md +162 -49
- package/docs/ar/introduction.md +3 -3
- package/docs/ar/packages/intlayer/index.md +3 -3
- package/docs/ar/packages/next-intlayer/index.md +3 -3
- package/docs/de/formatters.md +239 -0
- package/docs/de/interest_of_intlayer.md +161 -47
- package/docs/de/introduction.md +3 -3
- package/docs/de/packages/intlayer/index.md +3 -3
- package/docs/de/packages/next-intlayer/index.md +3 -3
- package/docs/de/packages/react-intlayer/index.md +3 -3
- package/docs/en/formatters.md +250 -0
- package/docs/en/interest_of_intlayer.md +159 -46
- package/docs/en/introduction.md +3 -3
- package/docs/en/packages/intlayer/index.md +3 -3
- package/docs/en/packages/next-intlayer/index.md +3 -3
- package/docs/en/packages/react-intlayer/index.md +3 -3
- package/docs/en-GB/formatters.md +239 -0
- package/docs/en-GB/interest_of_intlayer.md +160 -53
- package/docs/en-GB/packages/intlayer/index.md +3 -3
- package/docs/en-GB/packages/next-intlayer/index.md +3 -3
- package/docs/en-GB/packages/react-intlayer/index.md +3 -3
- package/docs/es/formatters.md +239 -0
- package/docs/es/interest_of_intlayer.md +159 -47
- package/docs/es/introduction.md +3 -3
- package/docs/es/packages/intlayer/index.md +3 -3
- package/docs/es/packages/next-intlayer/index.md +3 -3
- package/docs/fr/formatters.md +239 -0
- package/docs/fr/interest_of_intlayer.md +160 -46
- package/docs/fr/introduction.md +3 -3
- package/docs/fr/packages/intlayer/index.md +3 -3
- package/docs/fr/packages/next-intlayer/index.md +3 -3
- package/docs/fr/packages/react-intlayer/index.md +3 -3
- package/docs/hi/formatters.md +239 -0
- package/docs/hi/interest_of_intlayer.md +158 -42
- package/docs/hi/introduction.md +3 -3
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/hi/packages/next-intlayer/index.md +3 -3
- package/docs/hi/packages/react-intlayer/index.md +3 -3
- package/docs/it/formatters.md +239 -0
- package/docs/it/interest_of_intlayer.md +160 -46
- package/docs/it/introduction.md +3 -3
- package/docs/it/packages/intlayer/index.md +3 -3
- package/docs/it/packages/next-intlayer/index.md +3 -3
- package/docs/it/packages/react-intlayer/index.md +3 -3
- package/docs/ja/formatters.md +261 -0
- package/docs/ja/interest_of_intlayer.md +157 -48
- package/docs/ja/introduction.md +3 -3
- package/docs/ja/packages/intlayer/index.md +3 -3
- package/docs/ja/packages/next-intlayer/index.md +3 -3
- package/docs/ja/packages/react-intlayer/index.md +3 -3
- package/docs/ko/formatters.md +258 -0
- package/docs/ko/interest_of_intlayer.md +160 -48
- package/docs/ko/introduction.md +3 -3
- package/docs/ko/packages/intlayer/index.md +3 -3
- package/docs/ko/packages/next-intlayer/index.md +3 -3
- package/docs/ko/packages/react-intlayer/index.md +3 -3
- package/docs/pt/formatters.md +239 -0
- package/docs/pt/interest_of_intlayer.md +162 -47
- package/docs/pt/introduction.md +3 -3
- package/docs/pt/packages/intlayer/index.md +3 -3
- package/docs/pt/packages/next-intlayer/index.md +3 -3
- package/docs/pt/packages/react-intlayer/index.md +3 -3
- package/docs/ru/formatters.md +239 -0
- package/docs/ru/interest_of_intlayer.md +168 -50
- package/docs/ru/introduction.md +3 -3
- package/docs/ru/packages/intlayer/index.md +3 -3
- package/docs/ru/packages/next-intlayer/index.md +3 -3
- package/docs/ru/packages/react-intlayer/index.md +3 -3
- package/docs/zh/formatters.md +239 -0
- package/docs/zh/interest_of_intlayer.md +158 -48
- package/docs/zh/introduction.md +3 -3
- package/docs/zh/packages/intlayer/index.md +3 -3
- package/docs/zh/packages/next-intlayer/index.md +3 -3
- package/docs/zh/packages/react-intlayer/index.md +3 -3
- package/package.json +12 -12
- package/src/generated/docs.entry.ts +41 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-13
|
|
3
|
+
updatedAt: 2025-08-20
|
|
4
|
+
title: Formatierer
|
|
5
|
+
description: Ortsabhängige Formatierungswerkzeuge basierend auf Intl für Zahlen, Prozentsätze, Währungen, Daten, relative Zeit, Einheiten und kompakte Notation. Enthält einen gecachten Intl-Helfer.
|
|
6
|
+
keywords:
|
|
7
|
+
- Formatierer
|
|
8
|
+
- Intl
|
|
9
|
+
- Zahl
|
|
10
|
+
- Währung
|
|
11
|
+
- Prozentsatz
|
|
12
|
+
- Datum
|
|
13
|
+
- Relative Zeit
|
|
14
|
+
- Einheiten
|
|
15
|
+
- Kompakt
|
|
16
|
+
- Internationalisierung
|
|
17
|
+
slugs:
|
|
18
|
+
- doc
|
|
19
|
+
- formatters
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Intlayer Formatierer
|
|
23
|
+
|
|
24
|
+
## Übersicht
|
|
25
|
+
|
|
26
|
+
Intlayer bietet eine Reihe von leichtgewichtigen Helfern, die auf den nativen `Intl`-APIs aufbauen, sowie einen gecachten `Intl`-Wrapper, um das wiederholte Erstellen schwerer Formatierer zu vermeiden. Diese Werkzeuge sind vollständig ortsabhängig und können aus dem Hauptpaket `intlayer` verwendet werden.
|
|
27
|
+
|
|
28
|
+
### Import
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import {
|
|
32
|
+
Intl,
|
|
33
|
+
number,
|
|
34
|
+
percentage,
|
|
35
|
+
currency,
|
|
36
|
+
date,
|
|
37
|
+
relativeTime,
|
|
38
|
+
units,
|
|
39
|
+
compact,
|
|
40
|
+
} von "intlayer";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Wenn Sie React verwenden, sind auch Hooks verfügbar; siehe `react-intlayer/format`.
|
|
44
|
+
|
|
45
|
+
## Gecachter Intl
|
|
46
|
+
|
|
47
|
+
Das exportierte `Intl` ist ein dünner, gecachter Wrapper um das globale `Intl`. Es merkt sich Instanzen von `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, wodurch vermieden wird, denselben Formatierer wiederholt neu zu erstellen.
|
|
48
|
+
|
|
49
|
+
Da die Erstellung von Formatierern relativ aufwendig ist, verbessert dieses Caching die Leistung, ohne das Verhalten zu ändern. Der Wrapper bietet dieselbe API wie das native `Intl`, sodass die Nutzung identisch ist.
|
|
50
|
+
|
|
51
|
+
- Das Caching erfolgt pro Prozess und ist für Aufrufer transparent.
|
|
52
|
+
|
|
53
|
+
> Wenn `Intl.DisplayNames` in der Umgebung nicht verfügbar ist, wird eine einmalige Entwickler-Warnung ausgegeben (ein Polyfill wird empfohlen).
|
|
54
|
+
|
|
55
|
+
Beispiel:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import { Intl } from "intlayer";
|
|
59
|
+
|
|
60
|
+
const numberFormat = new Intl.NumberFormat("en-GB", {
|
|
61
|
+
style: "currency",
|
|
62
|
+
currency: "GBP",
|
|
63
|
+
});
|
|
64
|
+
numberFormat.format(1234.5); // "£1,234.50"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Formatierer
|
|
68
|
+
|
|
69
|
+
Alle untenstehenden Hilfsfunktionen werden von `intlayer` exportiert.
|
|
70
|
+
|
|
71
|
+
### `number(value, options?)`
|
|
72
|
+
|
|
73
|
+
Formatiert einen numerischen Wert unter Verwendung von lokalisierter Gruppierung und Dezimalstellen.
|
|
74
|
+
|
|
75
|
+
- **value**: `number | string`
|
|
76
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
77
|
+
|
|
78
|
+
Beispiele:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { number } from "intlayer";
|
|
82
|
+
|
|
83
|
+
number(123456.789); // "123,456.789" (in en-US)
|
|
84
|
+
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
85
|
+
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### `percentage(value, options?)`
|
|
89
|
+
|
|
90
|
+
Formatiert eine Zahl als Prozentzeichenkette.
|
|
91
|
+
|
|
92
|
+
Verhalten: Werte größer als 1 werden als ganze Prozentsätze interpretiert und normalisiert (z. B. `25` → `25%`, `0.25` → `25%`).
|
|
93
|
+
|
|
94
|
+
- **value**: `number | string`
|
|
95
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
96
|
+
|
|
97
|
+
Beispiele:
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { percentage } from "intlayer";
|
|
101
|
+
|
|
102
|
+
percentage(0.25); // "25%"
|
|
103
|
+
percentage(25); // "25%"
|
|
104
|
+
percentage(0.237, { minimumFractionDigits: 1 }); // "23,7%"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### `currency(value, options?)`
|
|
108
|
+
|
|
109
|
+
Formatiert einen Wert als lokalisierte Währung. Standardmäßig `USD` mit zwei Nachkommastellen.
|
|
110
|
+
|
|
111
|
+
- **value**: `number | string`
|
|
112
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
113
|
+
- Häufige Felder: `currency` (z. B. `"EUR"`), `currencyDisplay` (`"symbol" | "code" | "name"`)
|
|
114
|
+
|
|
115
|
+
Beispiele:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { currency } from "intlayer";
|
|
119
|
+
|
|
120
|
+
currency(1234.5, { currency: "EUR" }); // "€1.234,50"
|
|
121
|
+
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### `date(date, optionsOrPreset?)`
|
|
125
|
+
|
|
126
|
+
Formatiert einen Datum-/Uhrzeitwert mit `Intl.DateTimeFormat`.
|
|
127
|
+
|
|
128
|
+
- **date**: `Date | string | number`
|
|
129
|
+
- **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` oder eines der Presets:
|
|
130
|
+
- Presets: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
|
|
131
|
+
|
|
132
|
+
Beispiele:
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
import { date } from "intlayer";
|
|
136
|
+
|
|
137
|
+
date(new Date(), "short"); // z.B. "02.08.25, 14:30"
|
|
138
|
+
date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### `relativeTime(from, to = new Date(), options?)`
|
|
142
|
+
|
|
143
|
+
Formatiert relative Zeit zwischen zwei Zeitpunkten mit `Intl.RelativeTimeFormat`.
|
|
144
|
+
|
|
145
|
+
- Übergebe "now" als erstes Argument und das Ziel als zweites, um eine natürliche Formulierung zu erhalten.
|
|
146
|
+
- **from**: `Date | string | number`
|
|
147
|
+
- **to**: `Date | string | number` (Standard ist `new Date()`)
|
|
148
|
+
- **options**: `{ locale?: LocalesValues; unit?: Intl.RelativeTimeFormatUnit; numeric?: Intl.RelativeTimeFormatNumeric; style?: Intl.RelativeTimeFormatStyle }`
|
|
149
|
+
- Standard-`unit` ist `"second"`.
|
|
150
|
+
|
|
151
|
+
Beispiele:
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
import { relativeTime } from "intlayer";
|
|
155
|
+
|
|
156
|
+
const now = new Date();
|
|
157
|
+
const in3Days = new Date(now.getTime() + 3 * 864e5);
|
|
158
|
+
relativeTime(now, in3Days, { unit: "day" }); // "in 3 Tagen"
|
|
159
|
+
|
|
160
|
+
const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
|
|
161
|
+
relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "vor 2 Stunden"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### `units(value, options?)`
|
|
165
|
+
|
|
166
|
+
Formatiert einen numerischen Wert als lokalisierten Einheitentext unter Verwendung von `Intl.NumberFormat` mit `style: 'unit'`.
|
|
167
|
+
|
|
168
|
+
- **value**: `number | string`
|
|
169
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
170
|
+
- Häufige Felder: `unit` (z.B. `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
|
|
171
|
+
- Standardwerte: `unit: 'day'`, `unitDisplay: 'short'`, `useGrouping: false`
|
|
172
|
+
|
|
173
|
+
Beispiele:
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import { units } from "intlayer";
|
|
177
|
+
|
|
178
|
+
units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
|
|
179
|
+
units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (abhängig von der Locale)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### `compact(value, options?)`
|
|
183
|
+
|
|
184
|
+
Formatiert eine Zahl mit kompakter Notation (z.B. `1.2K`, `1M`).
|
|
185
|
+
|
|
186
|
+
- **value**: `number | string`
|
|
187
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (verwendet intern `notation: 'compact'`)
|
|
188
|
+
|
|
189
|
+
Beispiele:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
import { compact } from "intlayer";
|
|
193
|
+
|
|
194
|
+
compact(1200); // "1.2K"
|
|
195
|
+
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Hinweise
|
|
199
|
+
|
|
200
|
+
- Alle Helfer akzeptieren Eingaben als `string`; diese werden intern in Zahlen oder Daten umgewandelt.
|
|
201
|
+
- Die Locale verwendet standardmäßig die konfigurierte `internationalization.defaultLocale`, falls keine angegeben ist.
|
|
202
|
+
- Diese Hilfsfunktionen sind dünne Wrapper; für erweiterte Formatierungen können die Standard-`Intl`-Optionen direkt verwendet werden.
|
|
203
|
+
|
|
204
|
+
## Einstiegspunkte und Re-Exports (`@index.ts`)
|
|
205
|
+
|
|
206
|
+
Die Formatter befinden sich im Core-Paket und werden von höherstufigen Paketen erneut exportiert, um Importe über verschiedene Laufzeitumgebungen hinweg ergonomisch zu gestalten:
|
|
207
|
+
|
|
208
|
+
Beispiele:
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
// App-Code (empfohlen)
|
|
212
|
+
import { number, currency, date, Intl } from "intlayer";
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### React
|
|
216
|
+
|
|
217
|
+
Client-Komponenten:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
import { useNumber, useCurrency, useDate } from "react-intlayer/format";
|
|
221
|
+
// oder in Next.js-Anwendungen
|
|
222
|
+
import { useNumber, useCurrency, useDate } from "next-intlayer/client/format";
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Server-Komponenten (oder React Server Runtime):
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
import { useNumber, useCurrency, useDate } from "intlayer/server/format";
|
|
229
|
+
// oder in Next.js-Anwendungen
|
|
230
|
+
import { useNumber, useCurrency, useDate } from "next-intlayer/server/format";
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
> Diese Hooks berücksichtigen die Locale vom `IntlayerProvider` oder `IntlayerServerProvider`
|
|
234
|
+
|
|
235
|
+
## Dokumentationshistorie
|
|
236
|
+
|
|
237
|
+
| Version | Datum | Änderungen |
|
|
238
|
+
| ------- | ---------- | ------------------------------------- |
|
|
239
|
+
| 5.8.0 | 2025-08-18 | Formatierer-Dokumentation hinzugefügt |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-14
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-08-20
|
|
4
4
|
title: Interesse an Intlayer
|
|
5
|
-
description: Entdecken Sie die Vorteile und Nutzen der Verwendung von Intlayer in Ihren Projekten. Verstehen Sie, warum Intlayer sich
|
|
5
|
+
description: Entdecken Sie die Vorteile und Nutzen der Verwendung von Intlayer in Ihren Projekten. Verstehen Sie, warum Intlayer sich unter anderen Frameworks hervorhebt.
|
|
6
6
|
keywords:
|
|
7
7
|
- Vorteile
|
|
8
8
|
- Nutzen
|
|
@@ -11,41 +11,104 @@ keywords:
|
|
|
11
11
|
- Vergleich
|
|
12
12
|
slugs:
|
|
13
13
|
- doc
|
|
14
|
-
-
|
|
15
|
-
- interest
|
|
14
|
+
- why
|
|
16
15
|
---
|
|
17
16
|
|
|
18
|
-
#
|
|
17
|
+
# Warum sollten Sie Intlayer in Betracht ziehen?
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## Was ist Intlayer?
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
**Intlayer** ist eine Internationalisierungsbibliothek, die speziell für JavaScript-Entwickler entwickelt wurde. Sie ermöglicht die Deklaration Ihres Inhalts überall in Ihrem Code. Sie wandelt Deklarationen mehrsprachiger Inhalte in strukturierte Wörterbücher um, um sie einfach in Ihren Code zu integrieren. Durch die Verwendung von TypeScript macht **Intlayer** Ihre Entwicklung robuster und effizienter.
|
|
22
|
+
|
|
23
|
+
## Warum wurde Intlayer erstellt?
|
|
24
|
+
|
|
25
|
+
Intlayer wurde entwickelt, um ein häufiges Problem zu lösen, das alle gängigen i18n-Bibliotheken wie `next-intl`, `react-i18next`, `react-intl`, `next-i18next`, `react-intl` und `vue-i18n` betrifft.
|
|
26
|
+
|
|
27
|
+
Alle diese Lösungen verfolgen einen zentralisierten Ansatz, um Ihre Inhalte aufzulisten und zu verwalten. Zum Beispiel:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
.
|
|
31
|
+
├── locales
|
|
32
|
+
│ ├── en.json
|
|
33
|
+
│ ├── fr.json
|
|
34
|
+
│ └── es.json
|
|
35
|
+
├── i18n.ts
|
|
36
|
+
└── src
|
|
37
|
+
└── components
|
|
38
|
+
└── MyComponent
|
|
39
|
+
└── index.tsx
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Oder hier mit Namespaces:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
.
|
|
46
|
+
├── locales
|
|
47
|
+
│ ├── en
|
|
48
|
+
│ │ ├── footer.json
|
|
49
|
+
│ │ └── navbar.json
|
|
50
|
+
│ ├── fr
|
|
51
|
+
│ │ ├── footer.json
|
|
52
|
+
│ │ └── navbar.json
|
|
53
|
+
│ └── es
|
|
54
|
+
│ ├── footer.json
|
|
55
|
+
│ └── navbar.json
|
|
56
|
+
├── i18n.ts
|
|
57
|
+
└── src
|
|
58
|
+
└── components
|
|
59
|
+
└── MyComponent
|
|
60
|
+
└── index.tsx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Diese Art von Architektur verlangsamt den Entwicklungsprozess und macht den Codebestand aus mehreren Gründen komplexer zu warten:
|
|
64
|
+
|
|
65
|
+
1. **Für jede neu erstellte Komponente sollten Sie:**
|
|
66
|
+
- Die neue Ressource/den neuen Namespace im Ordner `locales` anlegen
|
|
67
|
+
- Daran denken, den neuen Namespace in Ihrer Seite zu importieren
|
|
68
|
+
- Ihre Inhalte übersetzen (oft manuell durch Kopieren/Einfügen von KI-Anbietern)
|
|
69
|
+
|
|
70
|
+
2. **Für jede Änderung an Ihren Komponenten sollten Sie:**
|
|
71
|
+
- Nach der zugehörigen Ressource/dem Namespace suchen (weit entfernt von der Komponente)
|
|
72
|
+
- Ihre Inhalte übersetzen
|
|
73
|
+
- Sicherstellen, dass Ihre Inhalte für jede Locale aktuell sind
|
|
74
|
+
- Überprüfen, dass Ihr Namespace keine ungenutzten Schlüssel/Werte enthält
|
|
75
|
+
- Sicherstellen, dass die Struktur Ihrer JSON-Dateien für alle Locales gleich ist
|
|
76
|
+
|
|
77
|
+
Bei professionellen Projekten, die diese Lösungen verwenden, werden häufig Lokalisierungsplattformen eingesetzt, um die Übersetzung Ihrer Inhalte zu verwalten. Dies kann jedoch bei großen Projekten schnell kostspielig werden.
|
|
78
|
+
|
|
79
|
+
Um dieses Problem zu lösen, verfolgt Intlayer einen Ansatz, bei dem Ihre Inhalte pro Komponente abgegrenzt und nahe bei Ihrer Komponente gehalten werden, ähnlich wie wir es oft mit CSS (`styled-components`), Typen, Dokumentation (`storybook`) oder Unit-Tests (`jest`) tun.
|
|
23
80
|
|
|
24
81
|
```bash codeFormat="typescript"
|
|
25
82
|
.
|
|
26
|
-
└──
|
|
83
|
+
└── components
|
|
27
84
|
└── MyComponent
|
|
28
85
|
├── index.content.ts
|
|
86
|
+
├── index.test.tsx
|
|
87
|
+
├── index.stories.tsx
|
|
29
88
|
└── index.tsx
|
|
30
89
|
```
|
|
31
90
|
|
|
32
91
|
```bash codeFormat="commonjs"
|
|
33
92
|
.
|
|
34
|
-
└──
|
|
93
|
+
└── components
|
|
35
94
|
└── MyComponent
|
|
36
95
|
├── index.content.cjs
|
|
37
|
-
|
|
96
|
+
├── index.test.mjs
|
|
97
|
+
├── index.stories.mjs
|
|
98
|
+
└── index.tsx
|
|
38
99
|
```
|
|
39
100
|
|
|
40
101
|
```bash codeFormat="esm"
|
|
41
102
|
.
|
|
42
|
-
└──
|
|
103
|
+
└── components
|
|
43
104
|
└── MyComponent
|
|
44
105
|
├── index.content.mjs
|
|
45
|
-
|
|
106
|
+
├── index.test.mjs
|
|
107
|
+
├── index.stories.mjs
|
|
108
|
+
└── index.tsx
|
|
46
109
|
```
|
|
47
110
|
|
|
48
|
-
```tsx fileName="./
|
|
111
|
+
```tsx fileName="./components/MyComponent/index.content.ts" codeFormat="typescript"
|
|
49
112
|
import { t, type Dictionary } from "intlayer";
|
|
50
113
|
|
|
51
114
|
const componentExampleContent = {
|
|
@@ -53,8 +116,8 @@ const componentExampleContent = {
|
|
|
53
116
|
content: {
|
|
54
117
|
myTranslatedContent: t({
|
|
55
118
|
en: "Hello World",
|
|
56
|
-
fr: "Bonjour le monde",
|
|
57
119
|
es: "Hola Mundo",
|
|
120
|
+
fr: "Bonjour le monde",
|
|
58
121
|
}),
|
|
59
122
|
},
|
|
60
123
|
} satisfies Dictionary;
|
|
@@ -62,18 +125,17 @@ const componentExampleContent = {
|
|
|
62
125
|
export default componentExampleContent;
|
|
63
126
|
```
|
|
64
127
|
|
|
65
|
-
```jsx fileName="./
|
|
128
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
66
129
|
import { t } from "intlayer";
|
|
67
130
|
|
|
68
131
|
/** @type {import('intlayer').Dictionary} */
|
|
69
|
-
// Beispielinhalt für die Komponente mit mehrsprachigem Text
|
|
70
132
|
const componentExampleContent = {
|
|
71
133
|
key: "component-example",
|
|
72
134
|
content: {
|
|
73
135
|
myTranslatedContent: t({
|
|
74
136
|
en: "Hello World",
|
|
75
|
-
fr: "Bonjour le monde",
|
|
76
137
|
es: "Hola Mundo",
|
|
138
|
+
fr: "Bonjour le monde",
|
|
77
139
|
}),
|
|
78
140
|
},
|
|
79
141
|
};
|
|
@@ -81,17 +143,18 @@ const componentExampleContent = {
|
|
|
81
143
|
export default componentExampleContent;
|
|
82
144
|
```
|
|
83
145
|
|
|
84
|
-
```jsx fileName="./
|
|
146
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
85
147
|
const { t } = require("intlayer");
|
|
86
148
|
|
|
87
149
|
/** @type {import('intlayer').Dictionary} */
|
|
150
|
+
// Übersetzungsinhalt für die Komponente
|
|
88
151
|
const componentExampleContent = {
|
|
89
152
|
key: "component-example",
|
|
90
153
|
content: {
|
|
91
154
|
myTranslatedContent: t({
|
|
92
155
|
en: "Hello World",
|
|
93
|
-
fr: "Bonjour le monde",
|
|
94
156
|
es: "Hola Mundo",
|
|
157
|
+
fr: "Bonjour le monde",
|
|
95
158
|
}),
|
|
96
159
|
},
|
|
97
160
|
};
|
|
@@ -99,7 +162,7 @@ const componentExampleContent = {
|
|
|
99
162
|
module.exports = componentExampleContent;
|
|
100
163
|
```
|
|
101
164
|
|
|
102
|
-
```tsx fileName="./
|
|
165
|
+
```tsx fileName="./components/MyComponent/index.tsx" codeFormat="typescript"
|
|
103
166
|
import { useIntlayer } from "react-intlayer";
|
|
104
167
|
|
|
105
168
|
export const ComponentExample = () => {
|
|
@@ -109,8 +172,7 @@ export const ComponentExample = () => {
|
|
|
109
172
|
};
|
|
110
173
|
```
|
|
111
174
|
|
|
112
|
-
```jsx fileName="./
|
|
113
|
-
jsx fileName="./Components/MyComponent/index.mjx" codeFormat="esm"
|
|
175
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
114
176
|
import { useIntlayer } from "react-intlayer";
|
|
115
177
|
|
|
116
178
|
const ComponentExample = () => {
|
|
@@ -120,7 +182,7 @@ const ComponentExample = () => {
|
|
|
120
182
|
};
|
|
121
183
|
```
|
|
122
184
|
|
|
123
|
-
```jsx fileName="./
|
|
185
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
124
186
|
const { useIntlayer } = require("react-intlayer");
|
|
125
187
|
|
|
126
188
|
const ComponentExample = () => {
|
|
@@ -130,27 +192,79 @@ const ComponentExample = () => {
|
|
|
130
192
|
};
|
|
131
193
|
```
|
|
132
194
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
-
|
|
195
|
+
Dieser Ansatz ermöglicht es Ihnen:
|
|
196
|
+
|
|
197
|
+
1. **Die Entwicklungsgeschwindigkeit zu erhöhen**
|
|
198
|
+
- `.content.{{ts|mjs|cjs|json}}` Dateien können mit einer VSCode-Erweiterung erstellt werden
|
|
199
|
+
- Autovervollständigungs-KI-Tools in Ihrer IDE (wie GitHub Copilot) können Ihnen helfen, Ihren Inhalt zu deklarieren, wodurch Copy/Paste reduziert wird
|
|
200
|
+
|
|
201
|
+
2. **Reduzieren Sie die Komplexität Ihres Codebestands**
|
|
202
|
+
|
|
203
|
+
3. **Erhöhen Sie die Wartbarkeit Ihres Codebestands**
|
|
204
|
+
|
|
205
|
+
4. **Duplizieren Sie Ihre Komponenten und deren zugehörigen Inhalte einfacher (Beispiel: Login/Register-Komponenten usw.)**
|
|
206
|
+
- Indem Sie das Risiko minimieren, den Inhalt anderer Komponenten zu beeinflussen
|
|
207
|
+
- Indem Sie Ihre Inhalte von einer Anwendung in eine andere ohne externe Abhängigkeiten kopieren/einfügen
|
|
208
|
+
|
|
209
|
+
5. **Vermeiden Sie es, Ihren Codebestand mit ungenutzten Schlüsseln/Werten für ungenutzte Komponenten zu verschmutzen**
|
|
210
|
+
- Wenn Sie eine Komponente nicht verwenden, müssen Sie deren Inhalt nicht importieren
|
|
211
|
+
- Wenn Sie eine Komponente löschen, erinnern Sie sich leichter daran, den zugehörigen Inhalt zu entfernen, da dieser im selben Ordner vorhanden ist
|
|
212
|
+
|
|
213
|
+
6. **Reduzieren Sie die Denkaufwand für KI-Agenten, um Ihre mehrsprachigen Inhalte zu deklarieren**
|
|
214
|
+
- Der KI-Agent muss nicht Ihren gesamten Codebestand durchsuchen, um zu wissen, wo Ihr Inhalt implementiert werden soll
|
|
215
|
+
- Übersetzungen können einfach mit Autovervollständigungs-KI-Tools in Ihrer IDE (wie GitHub Copilot) durchgeführt werden
|
|
216
|
+
|
|
217
|
+
7. **Optimieren Sie die Ladeleistung**
|
|
218
|
+
- Wenn eine Komponente lazy geladen wird, wird ihr zugehöriger Inhalt gleichzeitig geladen
|
|
219
|
+
|
|
220
|
+
## Zusätzliche Funktionen von Intlayer
|
|
221
|
+
|
|
222
|
+
| Funktion | Beschreibung |
|
|
223
|
+
| ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
224
|
+
|  | **Framework-übergreifende Unterstützung**<br><br>Intlayer ist kompatibel mit allen wichtigen Frameworks und Bibliotheken, einschließlich Next.js, React, Vite, Vue.js, Nuxt, Preact, Express und mehr. |
|
|
225
|
+
|  | **JavaScript-gesteuertes Content-Management**<br><br>Nutzen Sie die Flexibilität von JavaScript, um Ihre Inhalte effizient zu definieren und zu verwalten. <br><br> - [Inhaltsdeklaration](https://intlayer.org/doc/concept/content) |
|
|
226
|
+
|  | **Pro-Lokale Inhaltsdeklarationsdatei**<br><br>Beschleunigen Sie Ihre Entwicklung, indem Sie Ihre Inhalte einmalig deklarieren, bevor die automatische Generierung erfolgt.<br><br> - [Pro-Lokale Inhaltsdeklarationsdatei](https://intlayer.org/doc/concept/per-locale-file) |
|
|
227
|
+
|  | **Typsicheres Umfeld**<br><br>Nutzen Sie TypeScript, um sicherzustellen, dass Ihre Inhaltsdefinitionen und Ihr Code fehlerfrei sind, und profitieren Sie gleichzeitig von der Autovervollständigung in der IDE.<br><br> - [TypeScript-Konfiguration](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
228
|
+
|  | **Vereinfachte Einrichtung**<br><br>Starten Sie schnell mit minimaler Konfiguration. Passen Sie Einstellungen für Internationalisierung, Routing, KI, Build und Inhaltsverwaltung mühelos an.<br><br> - [Next.js-Integration erkunden](https://intlayer.org/doc/environment/nextjs) |
|
|
229
|
+
|  | **Vereinfachte Inhaltsabfrage**<br><br>Sie müssen Ihre `t`-Funktion nicht für jeden einzelnen Inhalt aufrufen. Rufen Sie alle Ihre Inhalte direkt mit einem einzigen Hook ab.<br><br> - [React-Integration](https://intlayer.org/doc/environment/create-react-app) |
|
|
230
|
+
|  | **Konsistente Implementierung von Server-Komponenten**<br><br>Perfekt geeignet für Next.js Server-Komponenten, verwenden Sie dieselbe Implementierung sowohl für Client- als auch für Server-Komponenten, ohne Ihre `t`-Funktion an jede Server-Komponente weitergeben zu müssen. <br><br> - [Server-Komponenten](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
|
|
231
|
+
|  | **Organisierte Codebasis**<br><br>Halten Sie Ihre Codebasis besser organisiert: 1 Komponente = 1 Wörterbuch im selben Ordner. Übersetzungen, die nahe bei ihren jeweiligen Komponenten liegen, verbessern die Wartbarkeit und Klarheit. <br><br> - [Wie Intlayer funktioniert](https://intlayer.org/doc/concept/how-works-intlayer) |
|
|
232
|
+
|  | **Erweitertes Routing**<br><br>Volle Unterstützung des App-Routings, die sich nahtlos an komplexe Anwendungsstrukturen anpasst, für Next.js, React, Vite, Vue.js usw.<br><br> - [Next.js-Integration erkunden](https://intlayer.org/doc/environment/nextjs) |
|
|
233
|
+
|  | **Markdown-Unterstützung**<br><br>Importieren und interpretieren Sie Lokalisierungsdateien und entfernte Markdown-Dateien für mehrsprachige Inhalte wie Datenschutzrichtlinien, Dokumentationen usw. Interpretieren Sie Markdown-Metadaten und machen Sie sie in Ihrem Code zugänglich.<br><br> - [Inhaltsdateien](https://intlayer.org/doc/concept/content/file) |
|
|
234
|
+
|  | **Kostenloser visueller Editor & CMS**<br><br>Ein kostenloser visueller Editor und CMS stehen Content-Autoren zur Verfügung, wodurch keine Lokalisierungsplattform mehr benötigt wird. Halten Sie Ihre Inhalte mit Git synchronisiert oder externalisieren Sie sie ganz oder teilweise mit dem CMS.<br><br> - [Intlayer Editor](https://intlayer.org/doc/concept/editor) <br> - [Intlayer CMS](https://intlayer.org/doc/concept/cms) |
|
|
235
|
+
|  | **Tree-shakable Inhalte**<br><br>Tree-shakable Inhalte, die die Größe des finalen Bundles reduzieren. Lädt Inhalte pro Komponente und schließt ungenutzte Inhalte aus Ihrem Bundle aus. Unterstützt Lazy Loading, um die Ladeeffizienz der App zu verbessern. <br><br> - [App-Build-Optimierung](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
|
|
236
|
+
|  | **Statisches Rendering**<br><br>Blockiert das statische Rendering nicht. <br><br> - [Next.js-Integration](https://intlayer.org/doc/environment/nextjs) |
|
|
237
|
+
|  | **KI-gestützte Übersetzung**<br><br>Verwandeln Sie Ihre Website mit nur einem Klick in 231 Sprachen mithilfe der fortschrittlichen KI-gestützten Übersetzungswerkzeuge von Intlayer unter Verwendung Ihres eigenen KI-Anbieters/API-Schlüssels. <br><br> - [CI/CD-Integration](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI](https://intlayer.org/doc/concept/cli) <br> - [Automatisches Ausfüllen](https://intlayer.org/doc/concept/auto-fill) |
|
|
238
|
+
|  | **MCP-Server-Integration**<br><br>Stellt einen MCP (Model Context Protocol) Server für IDE-Automatisierung bereit, der nahtloses Content-Management und i18n-Workflows direkt in Ihrer Entwicklungsumgebung ermöglicht. <br><br> - [MCP-Server](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/mcp_server.md) |
|
|
239
|
+
|  | **VSCode-Erweiterung**<br><br>Intlayer bietet eine VSCode-Erweiterung, die Ihnen hilft, Ihre Inhalte und Übersetzungen zu verwalten, Ihre Wörterbücher zu erstellen, Ihre Inhalte zu übersetzen und mehr. <br><br> - [VSCode-Erweiterung](https://intlayer.org/doc/vs-code-extension) |
|
|
240
|
+
|  | **Interoperabilität**<br><br>Ermöglicht die Interoperabilität mit react-i18next, next-i18next, next-intl und react-intl. <br><br> - [Intlayer und react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer und next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer und next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
|
|
241
|
+
|
|
242
|
+
## Vergleich von Intlayer mit anderen Lösungen
|
|
243
|
+
|
|
244
|
+
| Funktion | Intlayer | React-i18next / i18next | React-Intl (FormatJS) | LinguiJS | next-intl | next-i18next | vue-i18n |
|
|
245
|
+
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
246
|
+
| **Übersetzungen in der Nähe der Komponenten** | Ja, Inhalte sind mit jeder Komponente zusammengefasst | Nein | Nein | Nein | Nein | Nein | Ja - Verwendung von `Single File Components` (SFCs) |
|
|
247
|
+
| **TypeScript-Integration** | Fortgeschritten, automatisch generierte strenge Typen | Grundlegend; zusätzliche Konfiguration für Sicherheit | Gut, aber weniger strikt | Typen, benötigt Konfiguration | Gut | Grundlegend | Gut (Typen verfügbar; Schlüssel-Sicherheit benötigt Einrichtung) |
|
|
248
|
+
| **Fehlende Übersetzungs-Erkennung** | Fehler/Warnung zur Build-Zeit | Meist Fallback-Strings zur Laufzeit | Fallback-Strings | Benötigt zusätzliche Konfiguration | Laufzeit-Fallback | Laufzeit-Fallback | Laufzeit-Fallback/Warnungen (konfigurierbar) |
|
|
249
|
+
| **Reicher Inhalt (JSX/Markdown/Komponenten)** | Direkte Unterstützung, sogar React-Knoten | Eingeschränkt / nur Interpolation | ICU-Syntax, kein echtes JSX | Eingeschränkt | Nicht für reiche Knoten ausgelegt | Eingeschränkt | Eingeschränkt (Komponenten über `<i18n-t>`, Markdown über Plugins) |
|
|
250
|
+
| **KI-gestützte Übersetzung** | Ja, unterstützt mehrere KI-Anbieter. Nutzbar mit eigenen API-Schlüsseln. Berücksichtigt den Kontext Ihrer Anwendung und des Inhaltsumfangs | Nein | Nein | Nein | Nein | Nein | Nein |
|
|
251
|
+
| **Visueller Editor** | Ja, lokaler visueller Editor + optionales CMS; kann Codebasis-Inhalte auslagern; einbettbar | Nein / verfügbar über externe Lokalisierungsplattformen | Nein / verfügbar über externe Lokalisierungsplattformen | Nein / verfügbar über externe Lokalisierungsplattformen | Nein / verfügbar über externe Lokalisierungsplattformen | Nein / verfügbar über externe Lokalisierungsplattformen | Nein / verfügbar über externe Lokalisierungsplattformen |
|
|
252
|
+
| **Lokalisierte Routenführung** | Eingebaut, Middleware-Unterstützung | Plugins oder manuelle Konfiguration | Nicht eingebaut | Plugin/manuelle Konfiguration | Eingebaut | Eingebaut | Manuell über Vue Router (wird von Nuxt i18n verwaltet) |
|
|
253
|
+
| **Dynamische Routen-Generierung** | Ja | Plugin/Ökosystem oder manuelle Einrichtung | Nicht bereitgestellt | Plugin/manuell | Ja | Ja | Nicht bereitgestellt (wird von Nuxt i18n bereitgestellt) |
|
|
254
|
+
| **Pluralisierung** | Aufzählungsbasierte Muster; siehe Dokumentation | Konfigurierbar (Plugins wie i18next-icu) | Fortgeschritten (ICU) | Fortgeschritten (ICU/messageformat) | Gut | Gut | Fortgeschritten (eingebaute Pluralregeln) |
|
|
255
|
+
| **Formatierung (Daten, Zahlen, Währungen)** | Optimierte Formatierer (Intl im Hintergrund) | Über Plugins oder benutzerdefinierte Intl-Nutzung | Erweiterte ICU-Formatierer | ICU/CLI-Helfer | Gut (Intl-Helfer) | Gut (Intl-Helfer) | Eingebaute Datums-/Zahlenformatierer (Intl) |
|
|
256
|
+
| **Inhaltsformat** | .tsx, .ts, .js, .json, .md, .txt | .json | .json, .js | .po, .json | .json, .js, .ts | .json | .json, .js |
|
|
257
|
+
| **ICU-Unterstützung** | In Arbeit (native ICU) | Über Plugin (i18next-icu) | Ja | Ja | Ja | Über Plugin (i18next-icu) | Über benutzerdefinierten Formatter/Compiler |
|
|
258
|
+
| **SEO-Helfer (hreflang, Sitemap)** | Eingebaute Werkzeuge: Helfer für Sitemap, **robots.txt**, Metadaten | Community-Plugins/Manuell | Nicht Kernfunktion | Nicht Kernfunktion | Gut | Gut | Nicht Kernfunktion (Nuxt i18n stellt Helfer bereit) |
|
|
259
|
+
| **Ökosystem / Gemeinschaft** | Klein, aber schnell wachsend und reaktiv | Größte und am weitesten entwickelte | Groß, unternehmensorientiert | Wachsend, kleiner | Mittelgroß, Next.js-fokussiert | Mittelgroß, Next.js-fokussiert | Groß im Vue-Ökosystem |
|
|
260
|
+
| **Server-seitiges Rendering & Server-Komponenten** | Ja, optimiert für SSR / React Server-Komponenten | Unterstützt, einige Konfiguration erforderlich | Unterstützt in Next.js | Unterstützt | Volle Unterstützung | Volle Unterstützung | SSR über Nuxt/Vue SSR (kein RSC) |
|
|
261
|
+
| **Tree-shaking (nur verwendete Inhalte laden)** | Ja, pro Komponente zur Build-Zeit über Babel/SWC-Plugins | Lädt normalerweise alles (kann mit Namespaces/Code-Splitting verbessert werden) | Lädt normalerweise alles | Nicht standardmäßig | Teilweise | Teilweise | Teilweise (mit Code-Splitting/manuellem Setup) |
|
|
262
|
+
| **Lazy Loading** | Ja, pro Locale/pro Komponente | Ja (z.B. Backends/Namespaces bei Bedarf) | Ja (aufgeteilte Locale-Bündel) | Ja (dynamische Katalogimporte) | Ja (pro Route/pro Locale) | Ja (pro Route/pro Locale) | Ja (asynchrone Locale-Nachrichten) |
|
|
263
|
+
| **Verwaltung großer Projekte** | Fördert Modularität, geeignet für Design-Systeme | Benötigt gute Dateidisziplin | Zentrale Kataloge können groß werden | Kann komplex werden | Modular mit Setup | Modular mit Setup | Modular mit Vue Router/Nuxt i18n Setup |
|
|
264
|
+
|
|
265
|
+
## Dokumenthistorie
|
|
266
|
+
|
|
267
|
+
| Version | Datum | Änderungen |
|
|
268
|
+
| ------- | ---------- | -------------------------------- |
|
|
269
|
+
| 5.8.0 | 2025-08-19 | Aktualisierung Vergleichstabelle |
|
|
270
|
+
| 5.5.10 | 2025-06-29 | Initiale Historie |
|
package/docs/de/introduction.md
CHANGED
|
@@ -44,8 +44,8 @@ const componentContent = {
|
|
|
44
44
|
content: {
|
|
45
45
|
myTranslatedContent: t({
|
|
46
46
|
en: "Hello World",
|
|
47
|
-
fr: "Bonjour le monde",
|
|
48
47
|
es: "Hola Mundo",
|
|
48
|
+
fr: "Bonjour le monde",
|
|
49
49
|
}),
|
|
50
50
|
},
|
|
51
51
|
} satisfies Dictionary;
|
|
@@ -64,8 +64,8 @@ const componentContent = {
|
|
|
64
64
|
content: {
|
|
65
65
|
myTranslatedContent: t({
|
|
66
66
|
en: "Hello World",
|
|
67
|
-
fr: "Bonjour le monde",
|
|
68
67
|
es: "Hola Mundo",
|
|
68
|
+
fr: "Bonjour le monde",
|
|
69
69
|
}),
|
|
70
70
|
},
|
|
71
71
|
};
|
|
@@ -83,8 +83,8 @@ const componentContent = {
|
|
|
83
83
|
content: {
|
|
84
84
|
myTranslatedContent: t({
|
|
85
85
|
en: "Hello World",
|
|
86
|
-
fr: "Bonjour le monde",
|
|
87
86
|
es: "Hola Mundo",
|
|
87
|
+
fr: "Bonjour le monde",
|
|
88
88
|
}),
|
|
89
89
|
},
|
|
90
90
|
};
|