@intlayer/docs 8.3.0-canary.4 → 8.3.1
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/docs/ar/compiler.md +84 -49
- package/docs/ar/configuration.md +80 -37
- package/docs/ar/intlayer_with_nextjs_16.md +174 -1
- package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ar/intlayer_with_react_router_v7.md +224 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ar/intlayer_with_svelte_kit.md +175 -2
- package/docs/ar/intlayer_with_tanstack.md +176 -1
- package/docs/ar/intlayer_with_vite+preact.md +174 -1
- package/docs/ar/intlayer_with_vite+react.md +174 -1
- package/docs/ar/intlayer_with_vite+solid.md +174 -1
- package/docs/ar/intlayer_with_vite+svelte.md +174 -1
- package/docs/ar/intlayer_with_vite+vue.md +174 -1
- package/docs/de/compiler.md +83 -48
- package/docs/de/configuration.md +434 -212
- package/docs/de/intlayer_with_nextjs_16.md +176 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
- package/docs/de/intlayer_with_react_router_v7.md +225 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
- package/docs/de/intlayer_with_svelte_kit.md +158 -2
- package/docs/de/intlayer_with_tanstack.md +159 -1
- package/docs/de/intlayer_with_vite+preact.md +157 -1
- package/docs/de/intlayer_with_vite+react.md +157 -1
- package/docs/de/intlayer_with_vite+solid.md +159 -3
- package/docs/de/intlayer_with_vite+svelte.md +157 -1
- package/docs/de/intlayer_with_vite+vue.md +157 -1
- package/docs/en/compiler.md +60 -33
- package/docs/en/configuration.md +80 -57
- package/docs/en/intlayer_with_nextjs_16.md +176 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
- package/docs/en/intlayer_with_react_router_v7.md +159 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
- package/docs/en/intlayer_with_svelte_kit.md +159 -0
- package/docs/en/intlayer_with_tanstack.md +160 -1
- package/docs/en/intlayer_with_vite+preact.md +159 -0
- package/docs/en/intlayer_with_vite+react.md +159 -0
- package/docs/en/intlayer_with_vite+solid.md +148 -27
- package/docs/en/intlayer_with_vite+svelte.md +159 -0
- package/docs/en/intlayer_with_vite+vue.md +142 -41
- package/docs/en-GB/compiler.md +66 -34
- package/docs/en-GB/configuration.md +78 -36
- package/docs/es/compiler.md +83 -48
- package/docs/es/configuration.md +429 -206
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +176 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +227 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
- package/docs/es/intlayer_with_svelte_kit.md +158 -2
- package/docs/es/intlayer_with_tanstack.md +160 -2
- package/docs/es/intlayer_with_vite+preact.md +162 -6
- package/docs/es/intlayer_with_vite+react.md +160 -4
- package/docs/es/intlayer_with_vite+solid.md +163 -7
- package/docs/es/intlayer_with_vite+svelte.md +157 -1
- package/docs/es/intlayer_with_vite+vue.md +165 -9
- package/docs/fr/compiler.md +81 -46
- package/docs/fr/configuration.md +355 -134
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +183 -7
- package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
- package/docs/fr/intlayer_with_react_router_v7.md +229 -3
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
- package/docs/fr/intlayer_with_svelte_kit.md +158 -2
- package/docs/fr/intlayer_with_tanstack.md +159 -1
- package/docs/fr/intlayer_with_vite+preact.md +164 -8
- package/docs/fr/intlayer_with_vite+react.md +162 -6
- package/docs/fr/intlayer_with_vite+solid.md +163 -7
- package/docs/fr/intlayer_with_vite+svelte.md +157 -1
- package/docs/fr/intlayer_with_vite+vue.md +164 -8
- package/docs/hi/compiler.md +81 -46
- package/docs/hi/configuration.md +87 -44
- package/docs/hi/intlayer_with_nextjs_16.md +174 -1
- package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/hi/intlayer_with_react_router_v7.md +224 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/hi/intlayer_with_svelte_kit.md +158 -2
- package/docs/hi/intlayer_with_tanstack.md +159 -1
- package/docs/hi/intlayer_with_vite+preact.md +157 -1
- package/docs/hi/intlayer_with_vite+react.md +157 -1
- package/docs/hi/intlayer_with_vite+solid.md +157 -1
- package/docs/hi/intlayer_with_vite+svelte.md +157 -1
- package/docs/hi/intlayer_with_vite+vue.md +157 -1
- package/docs/id/compiler.md +84 -51
- package/docs/id/configuration.md +83 -45
- package/docs/id/intlayer_with_nextjs_16.md +174 -1
- package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/id/intlayer_with_react_router_v7.md +224 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/id/intlayer_with_svelte_kit.md +158 -2
- package/docs/id/intlayer_with_tanstack.md +159 -1
- package/docs/id/intlayer_with_vite+preact.md +157 -1
- package/docs/id/intlayer_with_vite+react.md +157 -1
- package/docs/id/intlayer_with_vite+solid.md +157 -1
- package/docs/id/intlayer_with_vite+svelte.md +157 -1
- package/docs/id/intlayer_with_vite+vue.md +157 -1
- package/docs/it/compiler.md +81 -46
- package/docs/it/configuration.md +426 -204
- package/docs/it/intlayer_with_nextjs_16.md +174 -1
- package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/it/intlayer_with_react_router_v7.md +225 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/it/intlayer_with_svelte_kit.md +158 -2
- package/docs/it/intlayer_with_tanstack.md +159 -1
- package/docs/it/intlayer_with_vite+preact.md +157 -1
- package/docs/it/intlayer_with_vite+react.md +157 -1
- package/docs/it/intlayer_with_vite+solid.md +159 -3
- package/docs/it/intlayer_with_vite+svelte.md +157 -1
- package/docs/it/intlayer_with_vite+vue.md +157 -1
- package/docs/ja/compiler.md +94 -58
- package/docs/ja/configuration.md +88 -45
- package/docs/ja/intlayer_with_nextjs_16.md +174 -1
- package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ja/intlayer_with_react_router_v7.md +184 -394
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ja/intlayer_with_svelte_kit.md +119 -595
- package/docs/ja/intlayer_with_tanstack.md +131 -642
- package/docs/ja/intlayer_with_vite+preact.md +111 -1231
- package/docs/ja/intlayer_with_vite+react.md +129 -1304
- package/docs/ja/intlayer_with_vite+solid.md +159 -3
- package/docs/ja/intlayer_with_vite+svelte.md +157 -1
- package/docs/ja/intlayer_with_vite+vue.md +157 -1
- package/docs/ko/compiler.md +88 -52
- package/docs/ko/configuration.md +87 -44
- package/docs/ko/intlayer_with_nextjs_16.md +174 -1
- package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ko/intlayer_with_react_router_v7.md +225 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ko/intlayer_with_svelte_kit.md +158 -2
- package/docs/ko/intlayer_with_tanstack.md +159 -1
- package/docs/ko/intlayer_with_vite+preact.md +157 -1
- package/docs/ko/intlayer_with_vite+react.md +157 -1
- package/docs/ko/intlayer_with_vite+solid.md +159 -3
- package/docs/ko/intlayer_with_vite+svelte.md +157 -1
- package/docs/ko/intlayer_with_vite+vue.md +157 -1
- package/docs/pl/compiler.md +84 -51
- package/docs/pl/configuration.md +83 -37
- package/docs/pl/intlayer_with_nextjs_16.md +174 -1
- package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pl/intlayer_with_react_router_v7.md +224 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pl/intlayer_with_svelte_kit.md +158 -2
- package/docs/pl/intlayer_with_tanstack.md +159 -1
- package/docs/pl/intlayer_with_vite+preact.md +157 -1
- package/docs/pl/intlayer_with_vite+react.md +157 -1
- package/docs/pl/intlayer_with_vite+solid.md +157 -1
- package/docs/pl/intlayer_with_vite+svelte.md +157 -1
- package/docs/pl/intlayer_with_vite+vue.md +157 -1
- package/docs/pt/compiler.md +81 -46
- package/docs/pt/configuration.md +404 -194
- package/docs/pt/intlayer_with_nextjs_16.md +174 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pt/intlayer_with_react_router_v7.md +224 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pt/intlayer_with_svelte_kit.md +158 -2
- package/docs/pt/intlayer_with_tanstack.md +159 -1
- package/docs/pt/intlayer_with_vite+preact.md +157 -1
- package/docs/pt/intlayer_with_vite+react.md +157 -1
- package/docs/pt/intlayer_with_vite+solid.md +157 -1
- package/docs/pt/intlayer_with_vite+svelte.md +157 -1
- package/docs/pt/intlayer_with_vite+vue.md +157 -1
- package/docs/ru/compiler.md +90 -57
- package/docs/ru/configuration.md +76 -46
- package/docs/ru/intlayer_with_nextjs_16.md +174 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ru/intlayer_with_react_router_v7.md +224 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ru/intlayer_with_svelte_kit.md +158 -2
- package/docs/ru/intlayer_with_tanstack.md +159 -1
- package/docs/ru/intlayer_with_vite+preact.md +157 -1
- package/docs/ru/intlayer_with_vite+react.md +157 -1
- package/docs/ru/intlayer_with_vite+solid.md +157 -1
- package/docs/ru/intlayer_with_vite+svelte.md +157 -1
- package/docs/ru/intlayer_with_vite+vue.md +157 -1
- package/docs/tr/compiler.md +85 -52
- package/docs/tr/configuration.md +83 -40
- package/docs/tr/intlayer_with_nextjs_16.md +174 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/tr/intlayer_with_react_router_v7.md +224 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/tr/intlayer_with_svelte_kit.md +158 -2
- package/docs/tr/intlayer_with_tanstack.md +159 -1
- package/docs/tr/intlayer_with_vite+preact.md +157 -1
- package/docs/tr/intlayer_with_vite+react.md +157 -1
- package/docs/tr/intlayer_with_vite+solid.md +157 -1
- package/docs/tr/intlayer_with_vite+svelte.md +157 -1
- package/docs/tr/intlayer_with_vite+vue.md +157 -1
- package/docs/uk/compiler.md +96 -61
- package/docs/uk/configuration.md +83 -37
- package/docs/uk/intlayer_with_nextjs_16.md +174 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/uk/intlayer_with_react_router_v7.md +224 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/uk/intlayer_with_svelte_kit.md +157 -1
- package/docs/uk/intlayer_with_tanstack.md +159 -1
- package/docs/uk/intlayer_with_vite+preact.md +157 -1
- package/docs/uk/intlayer_with_vite+react.md +157 -1
- package/docs/uk/intlayer_with_vite+solid.md +157 -1
- package/docs/uk/intlayer_with_vite+svelte.md +157 -1
- package/docs/uk/intlayer_with_vite+vue.md +157 -1
- package/docs/vi/compiler.md +85 -50
- package/docs/vi/configuration.md +85 -39
- package/docs/vi/intlayer_with_nextjs_16.md +174 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/vi/intlayer_with_react_router_v7.md +224 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/vi/intlayer_with_svelte_kit.md +158 -2
- package/docs/vi/intlayer_with_tanstack.md +159 -1
- package/docs/vi/intlayer_with_vite+preact.md +157 -1
- package/docs/vi/intlayer_with_vite+react.md +157 -1
- package/docs/vi/intlayer_with_vite+solid.md +157 -1
- package/docs/vi/intlayer_with_vite+svelte.md +157 -1
- package/docs/vi/intlayer_with_vite+vue.md +157 -1
- package/docs/zh/compiler.md +84 -49
- package/docs/zh/configuration.md +80 -37
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +174 -1
- package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/zh/intlayer_with_react_router_v7.md +227 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
- package/docs/zh/intlayer_with_svelte_kit.md +158 -2
- package/docs/zh/intlayer_with_tanstack.md +159 -1
- package/docs/zh/intlayer_with_vite+preact.md +159 -3
- package/docs/zh/intlayer_with_vite+react.md +157 -1
- package/docs/zh/intlayer_with_vite+solid.md +161 -5
- package/docs/zh/intlayer_with_vite+svelte.md +157 -1
- package/docs/zh/intlayer_with_vite+vue.md +158 -2
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-01-10
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: Next.js i18n - Transformieren Sie eine bestehende Next.js-App in eine mehrsprachige App in 2026
|
|
5
5
|
description: Erfahren Sie, wie Sie Ihre bestehende Next.js-Anwendung mit dem Intlayer Compiler mehrsprachig machen. Folgen Sie der Dokumentation, um sie zu internationalisieren (i18n) und mit KI zu übersetzen.
|
|
6
6
|
keywords:
|
|
@@ -76,430 +76,187 @@ Um diese Auswirkungen während der Entwicklung zu mildern, können Sie den Compi
|
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
79
|
-
## Schritt-für-Schritt-Anleitung
|
|
79
|
+
## Schritt-für-Schritt-Anleitung
|
|
80
80
|
|
|
81
|
-
### Schritt 1:
|
|
81
|
+
### (Optional) Schritt 1 : Inhalt Ihrer Komponenten extrahieren
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
Wenn Sie eine bestehende Codebasis haben, kann die Transformation von Tausenden von Dateien zeitaufwendig sein.
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
npm install intlayer next-intlayer
|
|
87
|
-
npm install @intlayer/babel --save-dev
|
|
88
|
-
npx intlayer init
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
```bash packageManager="pnpm"
|
|
92
|
-
pnpm add intlayer next-intlayer
|
|
93
|
-
pnpm add @intlayer/babel --save-dev
|
|
94
|
-
pnpm intlayer init
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
```bash packageManager="yarn"
|
|
98
|
-
yarn add intlayer next-intlayer
|
|
99
|
-
yarn add @intlayer/babel --save-dev
|
|
100
|
-
yarn intlayer init
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
```bash packageManager="bun"
|
|
104
|
-
bun add intlayer next-intlayer
|
|
105
|
-
bun add @intlayer/babel --dev
|
|
106
|
-
bunx intlayer init
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
- **intlayer**
|
|
110
|
-
|
|
111
|
-
Das Kernpaket, das Internationalisierungstools für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/content_file.md), Transpilierung und [CLI-Befehle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/index.md) bereitstellt.
|
|
112
|
-
|
|
113
|
-
- **next-intlayer**
|
|
114
|
-
|
|
115
|
-
Das Paket, das Intlayer in Next.js integriert. Es bietet Context Provider und Hooks für die Internationalisierung von Next.js. Zusätzlich enthält es das Next.js-Plugin zur Integration von Intlayer mit [Webpack](https://webpack.js.org/) oder [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) sowie einen Proxy zur Erkennung der bevorzugten Sprache des Benutzers, zur Verwaltung von Cookies und zur Handhabung von URL-Umleitungen.
|
|
85
|
+
Um diesen Prozess zu erleichtern, bietet Intlayer einen [Compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/compiler.md) / [Extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/cli/extract.md) an, um Ihre Komponenten zu transformieren und den Inhalt zu extrahieren.
|
|
116
86
|
|
|
117
|
-
|
|
87
|
+
Um es einzurichten, können Sie einen `compiler`-Abschnitt in Ihrer `intlayer.config.ts`-Datei hinzufügen:
|
|
118
88
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
```typescript fileName="intlayer.config.ts"
|
|
122
|
-
import { Locales, type IntlayerConfig } from "intlayer";
|
|
89
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
90
|
+
import { type IntlayerConfig } from "intlayer";
|
|
123
91
|
|
|
124
92
|
const config: IntlayerConfig = {
|
|
125
|
-
|
|
126
|
-
locales: [Locales.ENGLISH, Locales.GERMAN],
|
|
127
|
-
defaultLocale: Locales.GERMAN,
|
|
128
|
-
},
|
|
129
|
-
routing: {
|
|
130
|
-
mode: "search-params",
|
|
131
|
-
},
|
|
93
|
+
// ... Rest Ihrer Konfiguration
|
|
132
94
|
compiler: {
|
|
133
95
|
/**
|
|
134
|
-
* Gibt an, ob der Compiler aktiviert
|
|
96
|
+
* Gibt an, ob der Compiler aktiviert sein soll.
|
|
135
97
|
*/
|
|
136
98
|
enabled: true,
|
|
137
99
|
|
|
138
100
|
/**
|
|
139
|
-
*
|
|
101
|
+
* Definiert den Pfad der Ausgabedateien
|
|
140
102
|
*/
|
|
141
|
-
output: ({
|
|
103
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
142
104
|
|
|
143
105
|
/**
|
|
144
|
-
*
|
|
106
|
+
* Gibt an, ob die Komponenten nach der Transformation gespeichert werden sollen. Auf diese Weise kann der Compiler nur einmal ausgeführt werden, um die App zu transformieren, und dann entfernt werden.
|
|
145
107
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Wörterbuch-Präfix
|
|
150
|
-
*/
|
|
151
|
-
dictionaryKeyPrefix: "", // Remove base prefix
|
|
108
|
+
saveComponents: false,
|
|
152
109
|
|
|
153
110
|
/**
|
|
154
|
-
*
|
|
155
|
-
* Auf diese Weise kann der Compiler nur einmal ausgeführt werden, um die App zu transformieren, und dann entfernt werden.
|
|
111
|
+
* Präfix für Wörterbuchschlüssel
|
|
156
112
|
*/
|
|
157
|
-
|
|
158
|
-
},
|
|
159
|
-
ai: {
|
|
160
|
-
provider: "openai",
|
|
161
|
-
model: "gpt-5-mini",
|
|
162
|
-
apiKey: process.env.OPEN_AI_API_KEY,
|
|
163
|
-
applicationContext: "Diese App ist eine Karten-App",
|
|
113
|
+
dictionaryKeyPrefix: "",
|
|
164
114
|
},
|
|
165
115
|
};
|
|
166
116
|
|
|
167
117
|
export default config;
|
|
168
118
|
```
|
|
169
119
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
120
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
121
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
122
|
+
const config = {
|
|
123
|
+
// ... Rest Ihrer Konfiguration
|
|
124
|
+
compiler: {
|
|
125
|
+
/**
|
|
126
|
+
* Gibt an, ob der Compiler aktiviert sein soll.
|
|
127
|
+
*/
|
|
128
|
+
enabled: true,
|
|
175
129
|
|
|
176
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Definiert den Pfad der Ausgabedateien
|
|
132
|
+
*/
|
|
133
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
177
134
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Gibt an, ob die Komponenten nach der Transformation gespeichert werden sollen. Auf diese Weise kann der Compiler nur einmal ausgeführt werden, um die App zu transformieren, und dann entfernt werden.
|
|
137
|
+
*/
|
|
138
|
+
saveComponents: false,
|
|
181
139
|
|
|
182
|
-
|
|
183
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Präfix für Wörterbuchschlüssel
|
|
142
|
+
*/
|
|
143
|
+
dictionaryKeyPrefix: "",
|
|
144
|
+
},
|
|
184
145
|
};
|
|
185
146
|
|
|
186
|
-
export default
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
> Das Next.js-Plugin `withIntlayer()` wird verwendet, um Intlayer in Next.js zu integrieren. Es stellt die Erstellung von Inhaltsdeklarationsdateien sicher und überwacht diese im Entwicklungsmodus. Es definiert Intlayer-Umgebungsvariablen innerhalb der [Webpack](https://webpack.js.org/)- oder [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack)-Umgebungen. Zusätzlich bietet es Aliase zur Leistungsoptimierung und gewährleistet die Kompatibilität mit Server-Komponenten.
|
|
190
|
-
|
|
191
|
-
### Schritt 4: Babel konfigurieren
|
|
192
|
-
|
|
193
|
-
Der Intlayer-Compiler benötigt Babel, um Ihren Inhalt zu extrahieren und zu optimieren. Aktualisieren Sie Ihre `babel.config.js` (oder `babel.config.json`) um die Intlayer-Plugins einzubinden:
|
|
194
|
-
|
|
195
|
-
```typescript fileName="babel.config.js"
|
|
196
|
-
const {
|
|
197
|
-
intlayerExtractBabelPlugin,
|
|
198
|
-
intlayerOptimizeBabelPlugin,
|
|
199
|
-
getExtractPluginOptions,
|
|
200
|
-
getOptimizePluginOptions,
|
|
201
|
-
} = require("@intlayer/babel");
|
|
202
|
-
|
|
203
|
-
module.exports = {
|
|
204
|
-
presets: ["next/babel"],
|
|
205
|
-
plugins: [
|
|
206
|
-
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
207
|
-
[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
|
|
208
|
-
],
|
|
209
|
-
};
|
|
147
|
+
export default config;
|
|
210
148
|
```
|
|
211
149
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
import { getHTMLTextDir, getIntlayer } from "intlayer";
|
|
222
|
-
import { getLocale } from "next-intlayer/server";
|
|
223
|
-
export { generateStaticParams } from "next-intlayer";
|
|
150
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
151
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
152
|
+
const config = {
|
|
153
|
+
// ... Rest Ihrer Konfiguration
|
|
154
|
+
compiler: {
|
|
155
|
+
/**
|
|
156
|
+
* Gibt an, ob der Compiler aktiviert sein soll.
|
|
157
|
+
*/
|
|
158
|
+
enabled: true,
|
|
224
159
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
160
|
+
/**
|
|
161
|
+
* Definiert den Pfad der Ausgabedateien
|
|
162
|
+
*/
|
|
163
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
228
164
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
};
|
|
234
|
-
};
|
|
165
|
+
/**
|
|
166
|
+
* Gibt an, ob die Komponenten nach der Transformation gespeichert werden sollen. Auf diese Weise kann der Compiler nur einmal ausgeführt werden, um die App zu transformieren, und dann entfernt werden.
|
|
167
|
+
*/
|
|
168
|
+
saveComponents: false,
|
|
235
169
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
const locale = await getLocale();
|
|
242
|
-
|
|
243
|
-
return (
|
|
244
|
-
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
245
|
-
<IntlayerClientProvider defaultLocale={locale}>
|
|
246
|
-
<body>{children}</body>
|
|
247
|
-
</IntlayerClientProvider>
|
|
248
|
-
</html>
|
|
249
|
-
);
|
|
170
|
+
/**
|
|
171
|
+
* Präfix für Wörterbuchschlüssel
|
|
172
|
+
*/
|
|
173
|
+
dictionaryKeyPrefix: "",
|
|
174
|
+
},
|
|
250
175
|
};
|
|
251
176
|
|
|
252
|
-
|
|
177
|
+
module.exports = config;
|
|
253
178
|
```
|
|
254
179
|
|
|
255
|
-
### Schritt 6: Compilieren Sie Ihre Komponenten
|
|
256
|
-
|
|
257
|
-
Wenn der Compiler aktiviert ist, müssen Sie Inhaltswörterbücher (wie `.content.ts`-Dateien) **nicht mehr manuell deklarieren**.
|
|
258
|
-
|
|
259
|
-
Stattdessen können Sie Ihren Inhalt direkt als Zeichenfolgen in Ihren Code schreiben. Intlayer analysiert Ihren Code, generiert die Übersetzungen mit dem konfigurierten KI-Anbieter und ersetzt die Zeichenfolgen zur Kompilierzeit durch lokalisierten Inhalt.
|
|
260
|
-
|
|
261
|
-
Schreiben Sie Ihre Komponenten einfach mit fest kodierten Zeichenfolgen in Ihrer Standardsprache. Der Compiler kümmert sich um den Rest.
|
|
262
|
-
|
|
263
|
-
Beispiel für das Aussehen Ihrer Seite:
|
|
264
|
-
|
|
265
180
|
<Tabs>
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
```tsx fileName="src/app/page.tsx"
|
|
269
|
-
import type { FC } from "react";
|
|
270
|
-
import { IntlayerServerProvider } from "next-intlayer/server";
|
|
271
|
-
import { getLocale } from "next-intlayer/server";
|
|
272
|
-
|
|
273
|
-
const PageContent: FC = () => {
|
|
274
|
-
return (
|
|
275
|
-
<>
|
|
276
|
-
<p>Beginnen Sie mit der Bearbeitung von</p>
|
|
277
|
-
<code>src/app/page.tsx</code>
|
|
278
|
-
</>
|
|
279
|
-
);
|
|
280
|
-
};
|
|
281
|
-
|
|
282
|
-
export default async function Page() {
|
|
283
|
-
const locale = await getLocale();
|
|
181
|
+
<Tab value='Extraktionsbefehl'>
|
|
284
182
|
|
|
285
|
-
|
|
286
|
-
<IntlayerServerProvider locale={locale}>
|
|
287
|
-
<PageContent />
|
|
288
|
-
</IntlayerServerProvider>
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
```
|
|
183
|
+
Führen Sie den Extractor aus, um Ihre Komponenten zu transformieren und den Inhalt zu extrahieren
|
|
292
184
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
```ts fileName="i18n/page-content.content.tsx"
|
|
297
|
-
{
|
|
298
|
-
key: "page-content",
|
|
299
|
-
content: {
|
|
300
|
-
nodeType: "translation",
|
|
301
|
-
translation: {
|
|
302
|
-
en: {
|
|
303
|
-
getStartedByEditing: "Get started by editing",
|
|
304
|
-
},
|
|
305
|
-
fr: {
|
|
306
|
-
getStartedByEditing: "Commencez par éditer",
|
|
307
|
-
},
|
|
308
|
-
de: {
|
|
309
|
-
getStartedByEditing: "Beginnen Sie mit der Bearbeitung von",
|
|
310
|
-
},
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
```tsx fileName="src/app/page.tsx"
|
|
317
|
-
import { type FC } from "react";
|
|
318
|
-
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
319
|
-
import { getLocale } from "next-intlayer/server";
|
|
320
|
-
|
|
321
|
-
const PageContent: FC = () => {
|
|
322
|
-
const content = useIntlayer("page-content");
|
|
323
|
-
|
|
324
|
-
return (
|
|
325
|
-
<>
|
|
326
|
-
<p>{content.getStartedByEditing}</p>
|
|
327
|
-
<code>src/app/page.tsx</code>
|
|
328
|
-
</>
|
|
329
|
-
);
|
|
330
|
-
};
|
|
331
|
-
|
|
332
|
-
export default async function Page() {
|
|
333
|
-
const locale = await getLocale();
|
|
334
|
-
|
|
335
|
-
return (
|
|
336
|
-
<IntlayerServerProvider locale={locale}>
|
|
337
|
-
<PageContent />
|
|
338
|
-
</IntlayerServerProvider>
|
|
339
|
-
);
|
|
340
|
-
}
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
</Tab>
|
|
344
|
-
</Tabs>
|
|
345
|
-
|
|
346
|
-
- **`IntlayerClientProvider`** wird verwendet, um die Sprache für Client-Komponenten bereitzustellen.
|
|
347
|
-
- **`IntlayerServerProvider`** wird verwendet, um die Sprache für Server-Kinder bereitzustellen.
|
|
348
|
-
|
|
349
|
-
> Layout and page cannot share a common server context because the server context system is based on a per-request data store (via [React's cache](https://react.dev/reference/react/cache) mechanism), causing each "context" to be re-created for different segments of the application. Placing the provider in a shared layout would break this isolation, preventing the correct propagation of the server context values to your server components.
|
|
350
|
-
|
|
351
|
-
### (Optional) Schritt 7: Fehlende Übersetzungen ausfüllen
|
|
352
|
-
|
|
353
|
-
Intlayer bietet ein CLI-Tool an, um fehlende Übersetzungen auszufüllen. Sie können den Befehl `intlayer` verwenden, um fehlende Übersetzungen in Ihrem Code zu testen und auszufüllen.
|
|
354
|
-
|
|
355
|
-
```bash
|
|
356
|
-
npx intlayer test # Testen, ob Übersetzungen fehlen
|
|
185
|
+
```bash packageManager="npm"
|
|
186
|
+
npx intlayer extract
|
|
357
187
|
```
|
|
358
188
|
|
|
359
|
-
```bash
|
|
360
|
-
|
|
189
|
+
```bash packageManager="pnpm"
|
|
190
|
+
pnpm intlayer extract
|
|
361
191
|
```
|
|
362
192
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
### (Optional) Schritt 8: Proxy zur Erkennung der Sprache konfigurieren
|
|
366
|
-
|
|
367
|
-
Richten Sie einen Proxy ein, um die bevorzugte Sprache des Benutzers zu erkennen:
|
|
368
|
-
|
|
369
|
-
```typescript fileName="src/proxy.ts"
|
|
370
|
-
export { intlayerProxy as proxy } from "next-intlayer/proxy";
|
|
371
|
-
|
|
372
|
-
export const config = {
|
|
373
|
-
matcher:
|
|
374
|
-
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
375
|
-
};
|
|
193
|
+
```bash packageManager="yarn"
|
|
194
|
+
yarn intlayer extract
|
|
376
195
|
```
|
|
377
196
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
### (Optional) Schritt 8: Sprache Ihres Inhalts ändern
|
|
381
|
-
|
|
382
|
-
Um die Sprache Ihres Inhalts in Next.js zu ändern, wird empfohlen, die Komponente `Link` zu verwenden, um Benutzer auf die entsprechende lokalisierte Seite umzuleiten. Die Komponente `Link` ermöglicht das Prefetching der Seite, was dazu beiträgt, ein vollständiges Neuladen der Seite zu vermeiden.
|
|
383
|
-
|
|
384
|
-
```tsx fileName="src/components/localeSwitcher/LocaleSwitcher.tsx"
|
|
385
|
-
"use client";
|
|
386
|
-
|
|
387
|
-
import type { FC } from "react";
|
|
388
|
-
import { Locales, getHTMLTextDir, getLocaleName } from "intlayer";
|
|
389
|
-
import { useLocale } from "next-intlayer";
|
|
390
|
-
|
|
391
|
-
export const LocaleSwitcher: FC = () => {
|
|
392
|
-
const { locale, availableLocales, setLocale } = useLocale();
|
|
393
|
-
|
|
394
|
-
return (
|
|
395
|
-
<div>
|
|
396
|
-
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
397
|
-
<div id="localePopover" popover="auto">
|
|
398
|
-
{availableLocales.map((localeItem) => (
|
|
399
|
-
<button
|
|
400
|
-
key={localeItem}
|
|
401
|
-
aria-current={locale === localeItem ? "page" : undefined}
|
|
402
|
-
onClick={() => setLocale(localeItem)}
|
|
403
|
-
>
|
|
404
|
-
<span>
|
|
405
|
-
{/* Sprache - z. B. DE */}
|
|
406
|
-
{localeItem}
|
|
407
|
-
</span>
|
|
408
|
-
<span>
|
|
409
|
-
{/* Sprache in ihrer eigenen Sprache - z. B. Deutsch */}
|
|
410
|
-
{getLocaleName(localeItem, locale)}
|
|
411
|
-
</span>
|
|
412
|
-
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
413
|
-
{/* Sprache in der aktuellen Sprache - z. B. Allemand, wenn die aktuelle Sprache auf Locales.FRENCH eingestellt ist */}
|
|
414
|
-
{getLocaleName(localeItem)}
|
|
415
|
-
</span>
|
|
416
|
-
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
417
|
-
{/* Sprache in Englisch - z. B. German */}
|
|
418
|
-
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
419
|
-
</span>
|
|
420
|
-
</button>
|
|
421
|
-
))}
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
);
|
|
425
|
-
};
|
|
197
|
+
```bash packageManager="bun"
|
|
198
|
+
bunx intlayer extract
|
|
426
199
|
```
|
|
427
200
|
|
|
428
|
-
>
|
|
429
|
-
|
|
430
|
-
### (Optional) Schritt 10: Bundle-Größe optimieren
|
|
431
|
-
|
|
432
|
-
Bei Verwendung von `next-intlayer` sind Wörterbücher standardmäßig für jede Seite im Bundle enthalten. Um die Bundle-Größe zu optimieren, bietet Intlayer ein optionales SWC-Plugin an, das `useIntlayer`-Aufrufe mithilfe von Makros intelligent ersetzt. Dies stellt sicher, dass Wörterbücher nur in Bundles für Seiten enthalten sind, die sie tatsächlich verwenden.
|
|
433
|
-
|
|
434
|
-
Um diese Optimierung zu aktivieren, installieren Sie das Paket `@intlayer/swc`. Nach der Installation erkennt und verwendet `next-intlayer` automatisch das Plugin:
|
|
201
|
+
</Tab>
|
|
202
|
+
<Tab value='Babel-Compiler'>
|
|
435
203
|
|
|
436
204
|
```bash packageManager="npm"
|
|
437
|
-
npm install @intlayer/
|
|
205
|
+
npm install @intlayer/babel --save-dev
|
|
438
206
|
```
|
|
439
207
|
|
|
440
208
|
```bash packageManager="pnpm"
|
|
441
|
-
pnpm add @intlayer/
|
|
209
|
+
pnpm add @intlayer/babel --save-dev
|
|
442
210
|
```
|
|
443
211
|
|
|
444
212
|
```bash packageManager="yarn"
|
|
445
|
-
yarn add @intlayer/
|
|
213
|
+
yarn add @intlayer/babel --save-dev
|
|
446
214
|
```
|
|
447
215
|
|
|
448
216
|
```bash packageManager="bun"
|
|
449
|
-
bun add @intlayer/
|
|
217
|
+
bun add @intlayer/babel --dev
|
|
450
218
|
```
|
|
451
219
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
### TypeScript konfigurieren
|
|
459
|
-
|
|
460
|
-
Intlayer verwendet Modul-Augmentation, um die Vorteile von TypeScript zu nutzen und Ihre Codebasis robuster zu machen.
|
|
461
|
-
|
|
462
|
-

|
|
463
|
-
|
|
464
|
-

|
|
465
|
-
|
|
466
|
-
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen enthält.
|
|
220
|
+
```js fileName="babel.config.js"
|
|
221
|
+
const {
|
|
222
|
+
intlayerExtractBabelPlugin,
|
|
223
|
+
getExtractPluginOptions,
|
|
224
|
+
} = require("@intlayer/babel");
|
|
467
225
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
".intlayer/**/*.ts", // Die automatisch generierten Typen einbinden
|
|
226
|
+
module.exports = {
|
|
227
|
+
presets: ["next/babel"],
|
|
228
|
+
plugins: [
|
|
229
|
+
// Inhalt aus Komponenten in Wörterbücher extrahieren
|
|
230
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
474
231
|
],
|
|
475
|
-
}
|
|
232
|
+
};
|
|
476
233
|
```
|
|
477
234
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
Fügen Sie hierzu die folgenden Anweisungen in Ihre `.gitignore`-Datei ein:
|
|
235
|
+
```bash packageManager="npm"
|
|
236
|
+
npm run build # Oder npm run dev
|
|
237
|
+
```
|
|
483
238
|
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
.intlayer
|
|
239
|
+
```bash packageManager="pnpm"
|
|
240
|
+
pnpm run build # Oder pnpm run dev
|
|
487
241
|
```
|
|
488
242
|
|
|
489
|
-
|
|
243
|
+
```bash packageManager="yarn"
|
|
244
|
+
yarn build # Oder yarn dev
|
|
245
|
+
```
|
|
490
246
|
|
|
491
|
-
|
|
247
|
+
```bash packageManager="bun"
|
|
248
|
+
bun run build # Or bun run dev
|
|
249
|
+
```
|
|
492
250
|
|
|
493
|
-
|
|
251
|
+
</Tab>
|
|
252
|
+
</Tabs>
|
|
494
253
|
|
|
495
|
-
|
|
254
|
+
zur Einrichtung von Intlayer in einer Next.js-Anwendung
|
|
496
255
|
|
|
497
|
-
-
|
|
498
|
-
-
|
|
499
|
-
- **Inline-Vorschau** der übersetzten Inhalte.
|
|
500
|
-
- **Schnellaktionen**, um Übersetzungen einfach zu erstellen und zu aktualisieren.
|
|
256
|
+
- **`IntlayerClientProvider`** wird verwendet, um die Sprache für Client-Komponenten bereitzustellen.
|
|
257
|
+
- **`IntlayerServerProvider`** wird verwendet, um die Sprache für Server-Kinder bereitzustellen.
|
|
501
258
|
|
|
502
|
-
|
|
259
|
+
> Layout and page cannot share a common server context because the server context system is based on a per-request data store (via [React's cache](https://react.dev/reference/react/cache) mechanism), causing each "context" to be re-created for different segments of the application. Placing the provider in a shared layout would break this isolation, preventing the correct propagation of the server context values to your server components.
|
|
503
260
|
|
|
504
261
|
### Weiterführende Informationen
|
|
505
262
|
|