@intlayer/docs 6.1.6-canary.0 → 6.1.6
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/en/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -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/intlayer_with_angular.md +2 -2
- package/docs/ar/intlayer_with_astro.md +246 -0
- package/docs/ar/intlayer_with_create_react_app.md +3 -2
- package/docs/ar/intlayer_with_express.md +2 -2
- package/docs/ar/intlayer_with_nestjs.md +2 -2
- package/docs/ar/intlayer_with_nextjs_14.md +2 -2
- package/docs/ar/intlayer_with_nextjs_15.md +2 -2
- package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ar/intlayer_with_nuxt.md +2 -2
- package/docs/ar/intlayer_with_react_native+expo.md +11 -20
- package/docs/ar/intlayer_with_react_router_v7.md +195 -241
- package/docs/ar/intlayer_with_tanstack.md +198 -272
- package/docs/ar/intlayer_with_vite+preact.md +9 -9
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/de/intlayer_with_angular.md +2 -2
- package/docs/de/intlayer_with_astro.md +246 -0
- package/docs/de/intlayer_with_create_react_app.md +2 -2
- package/docs/de/intlayer_with_express.md +2 -2
- package/docs/de/intlayer_with_nestjs.md +2 -2
- package/docs/de/intlayer_with_nextjs_14.md +2 -2
- package/docs/de/intlayer_with_nextjs_15.md +2 -2
- package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/de/intlayer_with_nuxt.md +2 -2
- package/docs/de/intlayer_with_react_native+expo.md +11 -20
- package/docs/de/intlayer_with_react_router_v7.md +193 -242
- package/docs/de/intlayer_with_tanstack.md +194 -266
- package/docs/de/intlayer_with_vite+preact.md +9 -9
- package/docs/de/intlayer_with_vite+react.md +9 -9
- package/docs/de/intlayer_with_vite+vue.md +11 -11
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +1 -1
- package/docs/en/intlayer_cli.md +1 -1
- package/docs/en/intlayer_with_angular.md +4 -4
- package/docs/en/intlayer_with_astro.md +246 -0
- package/docs/en/intlayer_with_create_react_app.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +13 -4
- package/docs/en/intlayer_with_nextjs_15.md +13 -4
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/en/intlayer_with_nuxt.md +4 -4
- package/docs/en/intlayer_with_react_native+expo.md +46 -24
- package/docs/en/intlayer_with_react_router_v7.md +164 -211
- package/docs/en/intlayer_with_tanstack.md +166 -241
- package/docs/en/intlayer_with_vite+preact.md +12 -12
- package/docs/en/intlayer_with_vite+react.md +12 -12
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +12 -12
- package/docs/en/introduction.md +1 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/react-intlayer/useI18n.md +1 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/releases/v6.md +1 -0
- package/docs/en/roadmap.md +1 -1
- package/docs/en-GB/intlayer_with_angular.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +246 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
- package/docs/en-GB/intlayer_with_express.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
- package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/en-GB/intlayer_with_nuxt.md +2 -2
- package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
- package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
- package/docs/en-GB/intlayer_with_tanstack.md +174 -248
- package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
- package/docs/en-GB/intlayer_with_vite+react.md +9 -9
- package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
- package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/es/intlayer_with_angular.md +2 -2
- package/docs/es/intlayer_with_astro.md +246 -0
- package/docs/es/intlayer_with_create_react_app.md +3 -2
- package/docs/es/intlayer_with_express.md +2 -2
- package/docs/es/intlayer_with_nextjs_14.md +2 -2
- package/docs/es/intlayer_with_nextjs_15.md +2 -2
- package/docs/es/intlayer_with_react_native+expo.md +11 -20
- package/docs/es/intlayer_with_react_router_v7.md +188 -232
- package/docs/es/intlayer_with_tanstack.md +203 -273
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/intlayer_with_angular.md +2 -2
- package/docs/fr/intlayer_with_astro.md +246 -0
- package/docs/fr/intlayer_with_create_react_app.md +3 -2
- package/docs/fr/intlayer_with_express.md +2 -2
- package/docs/fr/intlayer_with_nestjs.md +2 -2
- package/docs/fr/intlayer_with_nextjs_14.md +2 -2
- package/docs/fr/intlayer_with_react_native+expo.md +11 -20
- package/docs/fr/intlayer_with_react_router_v7.md +188 -248
- package/docs/fr/intlayer_with_tanstack.md +192 -265
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/intlayer_cli.md +1 -4
- package/docs/hi/intlayer_with_angular.md +2 -2
- package/docs/hi/intlayer_with_astro.md +246 -0
- package/docs/hi/intlayer_with_create_react_app.md +2 -2
- package/docs/hi/intlayer_with_express.md +2 -2
- package/docs/hi/intlayer_with_nestjs.md +2 -2
- package/docs/hi/intlayer_with_nextjs_14.md +2 -2
- package/docs/hi/intlayer_with_nextjs_15.md +2 -2
- package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/hi/intlayer_with_nuxt.md +2 -2
- package/docs/hi/intlayer_with_react_native+expo.md +11 -20
- package/docs/hi/intlayer_with_react_router_v7.md +199 -243
- package/docs/hi/intlayer_with_tanstack.md +210 -285
- package/docs/hi/intlayer_with_vite+preact.md +9 -9
- package/docs/hi/intlayer_with_vite+react.md +9 -9
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +11 -11
- package/docs/it/intlayer_with_angular.md +2 -2
- package/docs/it/intlayer_with_astro.md +246 -0
- package/docs/it/intlayer_with_create_react_app.md +3 -2
- package/docs/it/intlayer_with_express.md +2 -2
- package/docs/it/intlayer_with_nestjs.md +2 -2
- package/docs/it/intlayer_with_nextjs_14.md +2 -2
- package/docs/it/intlayer_with_nextjs_15.md +2 -2
- package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/it/intlayer_with_nuxt.md +2 -2
- package/docs/it/intlayer_with_react_native+expo.md +11 -21
- package/docs/it/intlayer_with_react_router_v7.md +195 -242
- package/docs/it/intlayer_with_tanstack.md +203 -267
- package/docs/it/intlayer_with_vite+preact.md +9 -9
- package/docs/it/intlayer_with_vite+react.md +13 -11
- package/docs/it/intlayer_with_vite+vue.md +11 -11
- package/docs/ja/intlayer_with_angular.md +2 -2
- package/docs/ja/intlayer_with_astro.md +246 -0
- package/docs/ja/intlayer_with_create_react_app.md +3 -2
- package/docs/ja/intlayer_with_express.md +2 -2
- package/docs/ja/intlayer_with_nestjs.md +2 -2
- package/docs/ja/intlayer_with_nextjs_14.md +2 -2
- package/docs/ja/intlayer_with_nextjs_15.md +2 -2
- package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ja/intlayer_with_nuxt.md +2 -2
- package/docs/ja/intlayer_with_react_native+expo.md +18 -29
- package/docs/ja/intlayer_with_react_router_v7.md +204 -250
- package/docs/ja/intlayer_with_tanstack.md +218 -286
- package/docs/ja/intlayer_with_vite+preact.md +9 -9
- package/docs/ja/intlayer_with_vite+react.md +11 -11
- package/docs/ja/intlayer_with_vite+vue.md +11 -11
- package/docs/ko/intlayer_with_angular.md +2 -2
- package/docs/ko/intlayer_with_astro.md +246 -0
- package/docs/ko/intlayer_with_create_react_app.md +3 -2
- package/docs/ko/intlayer_with_express.md +2 -2
- package/docs/ko/intlayer_with_nestjs.md +2 -2
- package/docs/ko/intlayer_with_nextjs_14.md +2 -2
- package/docs/ko/intlayer_with_nextjs_15.md +2 -2
- package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ko/intlayer_with_nuxt.md +2 -2
- package/docs/ko/intlayer_with_react_native+expo.md +19 -28
- package/docs/ko/intlayer_with_react_router_v7.md +190 -244
- package/docs/ko/intlayer_with_tanstack.md +200 -270
- package/docs/ko/intlayer_with_vite+preact.md +9 -9
- package/docs/ko/intlayer_with_vite+react.md +9 -9
- package/docs/ko/intlayer_with_vite+vue.md +11 -11
- package/docs/pt/intlayer_with_angular.md +2 -2
- package/docs/pt/intlayer_with_astro.md +246 -0
- package/docs/pt/intlayer_with_create_react_app.md +3 -2
- package/docs/pt/intlayer_with_express.md +2 -2
- package/docs/pt/intlayer_with_nestjs.md +2 -2
- package/docs/pt/intlayer_with_nextjs_14.md +2 -2
- package/docs/pt/intlayer_with_nextjs_15.md +2 -2
- package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/pt/intlayer_with_nuxt.md +2 -2
- package/docs/pt/intlayer_with_react_native+expo.md +11 -20
- package/docs/pt/intlayer_with_react_router_v7.md +7 -13
- package/docs/pt/intlayer_with_tanstack.md +183 -258
- package/docs/pt/intlayer_with_vite+preact.md +9 -9
- package/docs/pt/intlayer_with_vite+react.md +9 -9
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/intlayer_with_angular.md +2 -2
- package/docs/ru/intlayer_with_astro.md +246 -0
- package/docs/ru/intlayer_with_create_react_app.md +3 -2
- package/docs/ru/intlayer_with_express.md +2 -2
- package/docs/ru/intlayer_with_nestjs.md +2 -2
- package/docs/ru/intlayer_with_nextjs_14.md +2 -2
- package/docs/ru/intlayer_with_nextjs_15.md +2 -2
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +2 -2
- package/docs/ru/intlayer_with_react_native+expo.md +11 -20
- package/docs/ru/intlayer_with_react_router_v7.md +192 -238
- package/docs/ru/intlayer_with_tanstack.md +197 -269
- package/docs/ru/intlayer_with_vite+preact.md +9 -9
- package/docs/ru/intlayer_with_vite+react.md +9 -9
- package/docs/ru/intlayer_with_vite+vue.md +11 -11
- package/docs/tr/how_works_intlayer.md +1 -1
- package/docs/tr/index.md +1 -1
- package/docs/tr/intlayer_cli.md +1 -1
- package/docs/tr/intlayer_with_angular.md +4 -4
- package/docs/tr/intlayer_with_astro.md +246 -0
- package/docs/tr/intlayer_with_create_react_app.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +2 -2
- package/docs/tr/intlayer_with_nextjs_14.md +2 -2
- package/docs/tr/intlayer_with_nextjs_15.md +4 -4
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/tr/intlayer_with_nuxt.md +4 -4
- package/docs/tr/intlayer_with_react_native+expo.md +12 -21
- package/docs/tr/intlayer_with_react_router_v7.md +222 -267
- package/docs/tr/intlayer_with_tanstack.md +400 -303
- package/docs/tr/intlayer_with_vite+preact.md +12 -12
- package/docs/tr/intlayer_with_vite+react.md +12 -12
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +12 -12
- package/docs/tr/introduction.md +1 -1
- package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
- package/docs/tr/roadmap.md +1 -1
- package/docs/zh/intlayer_with_angular.md +2 -2
- package/docs/zh/intlayer_with_astro.md +246 -0
- package/docs/zh/intlayer_with_create_react_app.md +3 -2
- package/docs/zh/intlayer_with_express.md +2 -2
- package/docs/zh/intlayer_with_nestjs.md +2 -2
- package/docs/zh/intlayer_with_nextjs_14.md +2 -2
- package/docs/zh/intlayer_with_nextjs_15.md +2 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/zh/intlayer_with_nuxt.md +2 -2
- package/docs/zh/intlayer_with_react_native+expo.md +19 -28
- package/docs/zh/intlayer_with_react_router_v7.md +200 -248
- package/docs/zh/intlayer_with_tanstack.md +208 -283
- package/docs/zh/intlayer_with_vite+preact.md +9 -9
- package/docs/zh/intlayer_with_vite+react.md +9 -9
- package/docs/zh/intlayer_with_vite+vue.md +9 -9
- package/package.json +11 -11
- package/src/generated/docs.entry.ts +16 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
createdAt: 2025-09-09
|
|
3
3
|
updatedAt: 2025-09-09
|
|
4
4
|
title: Erste Schritte mit Intlayer in Tanstack Start
|
|
5
|
-
description: Erfahren Sie, wie Sie Internationalisierung (i18n) zu Ihrer Tanstack Start-Anwendung mit Intlayer hinzufügen. Folgen Sie
|
|
5
|
+
description: Erfahren Sie, wie Sie Internationalisierung (i18n) zu Ihrer Tanstack Start-Anwendung mit Intlayer hinzufügen. Folgen Sie dieser umfassenden Anleitung, um Ihre App mehrsprachig mit lokalisierungsbewusstem Routing zu machen.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internationalisierung
|
|
8
8
|
- Dokumentation
|
|
@@ -11,19 +11,17 @@ keywords:
|
|
|
11
11
|
- React
|
|
12
12
|
- i18n
|
|
13
13
|
- TypeScript
|
|
14
|
-
-
|
|
14
|
+
- Locale Routing
|
|
15
15
|
slugs:
|
|
16
16
|
- doc
|
|
17
17
|
- environment
|
|
18
|
-
- vite-and-react
|
|
19
18
|
- tanstack-start
|
|
20
|
-
applicationTemplate: https://github.com/
|
|
21
|
-
author: AydinTheFirst
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
|
|
22
20
|
---
|
|
23
21
|
|
|
24
|
-
# Erste Schritte
|
|
22
|
+
# Erste Schritte zur Internationalisierung (i18n) mit Intlayer und Tanstack Start
|
|
25
23
|
|
|
26
|
-
Diese Anleitung zeigt, wie Sie **Intlayer** für nahtlose Internationalisierung in Tanstack Start-Projekten mit lokalisierungsbewusstem Routing, TypeScript-Unterstützung und modernen
|
|
24
|
+
Diese Anleitung zeigt, wie Sie **Intlayer** für nahtlose Internationalisierung in Tanstack Start-Projekten mit lokalisierungsbewusstem Routing, TypeScript-Unterstützung und modernen Entwicklungsmethoden integrieren.
|
|
27
25
|
|
|
28
26
|
## Was ist Intlayer?
|
|
29
27
|
|
|
@@ -31,10 +29,10 @@ Diese Anleitung zeigt, wie Sie **Intlayer** für nahtlose Internationalisierung
|
|
|
31
29
|
|
|
32
30
|
Mit Intlayer können Sie:
|
|
33
31
|
|
|
34
|
-
- **Übersetzungen einfach verwalten**
|
|
32
|
+
- **Übersetzungen einfach verwalten** mithilfe deklarativer Wörterbücher auf Komponentenebene.
|
|
35
33
|
- **Metadaten, Routen und Inhalte dynamisch lokalisieren**.
|
|
36
34
|
- **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die die Autovervollständigung und Fehlererkennung verbessern.
|
|
37
|
-
- **Von
|
|
35
|
+
- **Von erweiterten Funktionen profitieren**, wie dynamische Lokalerkennung und -umschaltung.
|
|
38
36
|
- **Lokalisierungsbewusstes Routing aktivieren** mit dem dateibasierten Routing-System von Tanstack Start.
|
|
39
37
|
|
|
40
38
|
---
|
|
@@ -63,21 +61,21 @@ pnpm add vite-intlayer --save-dev
|
|
|
63
61
|
|
|
64
62
|
- **intlayer**
|
|
65
63
|
|
|
66
|
-
Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md),
|
|
64
|
+
Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md), Transpilation und [CLI-Befehle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md) bereitstellt.
|
|
67
65
|
|
|
68
66
|
- **react-intlayer**
|
|
69
67
|
|
|
70
|
-
Das Paket, das Intlayer in React-Anwendungen integriert. Es stellt
|
|
68
|
+
Das Paket, das Intlayer in React-Anwendungen integriert. Es stellt Kontextanbieter und Hooks für die Internationalisierung in React bereit.
|
|
71
69
|
|
|
72
70
|
- **vite-intlayer**
|
|
73
71
|
|
|
74
|
-
|
|
72
|
+
Enthält das Vite-Plugin zur Integration von Intlayer mit dem [Vite-Bundler](https://vite.dev/guide/why.html#why-bundle-for-production) sowie Middleware zur Erkennung der bevorzugten Sprache des Benutzers, Verwaltung von Cookies und Handhabung von URL-Weiterleitungen.
|
|
75
73
|
|
|
76
74
|
### Schritt 3: Konfiguration Ihres Projekts
|
|
77
75
|
|
|
78
76
|
Erstellen Sie eine Konfigurationsdatei, um die Sprachen Ihrer Anwendung zu konfigurieren:
|
|
79
77
|
|
|
80
|
-
```typescript fileName="intlayer.config.ts"
|
|
78
|
+
```typescript fileName="intlayer.config.ts"
|
|
81
79
|
import type { IntlayerConfig } from "intlayer";
|
|
82
80
|
|
|
83
81
|
import { Locales } from "intlayer";
|
|
@@ -85,90 +83,40 @@ import { Locales } from "intlayer";
|
|
|
85
83
|
const config: IntlayerConfig = {
|
|
86
84
|
internationalization: {
|
|
87
85
|
defaultLocale: Locales.ENGLISH,
|
|
88
|
-
locales: [
|
|
89
|
-
Locales.ENGLISH,
|
|
90
|
-
Locales.FRENCH,
|
|
91
|
-
Locales.SPANISH,
|
|
92
|
-
// Ihre weiteren Sprachversionen
|
|
93
|
-
],
|
|
86
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
94
87
|
},
|
|
95
88
|
};
|
|
96
89
|
|
|
97
90
|
export default config;
|
|
98
91
|
```
|
|
99
92
|
|
|
100
|
-
|
|
101
|
-
import { Locales } from "intlayer";
|
|
102
|
-
|
|
103
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
104
|
-
const config = {
|
|
105
|
-
internationalization: {
|
|
106
|
-
defaultLocale: Locales.ENGLISH,
|
|
107
|
-
locales: [
|
|
108
|
-
Locales.ENGLISH,
|
|
109
|
-
Locales.FRENCH,
|
|
110
|
-
Locales.SPANISH,
|
|
111
|
-
// Ihre weiteren Sprachen
|
|
112
|
-
],
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export default config;
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
120
|
-
const { Locales } = require("intlayer");
|
|
121
|
-
|
|
122
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
123
|
-
const config = {
|
|
124
|
-
internationalization: {
|
|
125
|
-
defaultLocale: Locales.ENGLISH,
|
|
126
|
-
locales: [
|
|
127
|
-
Locales.ENGLISH,
|
|
128
|
-
Locales.FRENCH,
|
|
129
|
-
Locales.SPANISH,
|
|
130
|
-
// Ihre weiteren Sprachen
|
|
131
|
-
],
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
module.exports = config;
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
> Durch diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen einrichten, Intlayer-Protokolle in der Konsole deaktivieren und vieles mehr. Für eine vollständige Liste der verfügbaren Parameter konsultieren Sie bitte die [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md).
|
|
93
|
+
> Über diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen einrichten, Intlayer-Logs in der Konsole deaktivieren und mehr. Für eine vollständige Liste der verfügbaren Parameter verweisen wir auf die [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md).
|
|
139
94
|
|
|
140
95
|
### Schritt 4: Integrieren Sie Intlayer in Ihre Vite-Konfiguration
|
|
141
96
|
|
|
142
97
|
Fügen Sie das Intlayer-Plugin in Ihre Konfiguration ein:
|
|
143
98
|
|
|
144
|
-
```typescript fileName="vite.config.ts"
|
|
99
|
+
```typescript fileName="vite.config.ts"
|
|
145
100
|
import { reactRouter } from "@react-router/dev/vite";
|
|
146
101
|
import { defineConfig } from "vite";
|
|
147
|
-
import {
|
|
102
|
+
import { intlayer } from "vite-intlayer";
|
|
148
103
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
149
104
|
|
|
150
105
|
export default defineConfig({
|
|
151
|
-
plugins: [
|
|
152
|
-
reactRouter(),
|
|
153
|
-
tsconfigPaths(),
|
|
154
|
-
intlayer(),
|
|
155
|
-
intlayerMiddlewarePlugin(),
|
|
156
|
-
],
|
|
106
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
157
107
|
});
|
|
158
108
|
```
|
|
159
109
|
|
|
160
|
-
> Das `intlayer()` Vite-Plugin wird verwendet, um Intlayer
|
|
110
|
+
> Das `intlayer()` Vite-Plugin wird verwendet, um Intlayer mit Vite zu integrieren. Es sorgt für den Aufbau der Content-Deklarationsdateien und überwacht diese im Entwicklungsmodus. Es definiert Intlayer-Umgebungsvariablen innerhalb der Vite-Anwendung. Zusätzlich stellt es Aliase bereit, um die Leistung zu optimieren.
|
|
161
111
|
|
|
162
112
|
### Schritt 5: Erstellen Sie Layout-Komponenten
|
|
163
113
|
|
|
164
|
-
Richten Sie Ihr Root-Layout und
|
|
114
|
+
Richten Sie Ihr Root-Layout und sprachspezifische Layouts ein:
|
|
165
115
|
|
|
166
116
|
#### Root-Layout
|
|
167
117
|
|
|
168
|
-
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
169
|
-
// src/routes/{-$locale}/route.tsx
|
|
118
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
170
119
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
171
|
-
import { configuration } from "intlayer";
|
|
172
120
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
173
121
|
|
|
174
122
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -178,10 +126,11 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
178
126
|
});
|
|
179
127
|
|
|
180
128
|
function LayoutComponent() {
|
|
129
|
+
const { defaultLocale } = useLocale();
|
|
181
130
|
const { locale } = Route.useParams();
|
|
182
131
|
|
|
183
132
|
return (
|
|
184
|
-
<IntlayerProvider locale={
|
|
133
|
+
<IntlayerProvider locale={defaultLocale}>
|
|
185
134
|
<Outlet />
|
|
186
135
|
</IntlayerProvider>
|
|
187
136
|
);
|
|
@@ -192,7 +141,7 @@ function LayoutComponent() {
|
|
|
192
141
|
|
|
193
142
|
Erstellen und verwalten Sie Ihre Inhaltsdeklarationen, um Übersetzungen zu speichern:
|
|
194
143
|
|
|
195
|
-
```tsx fileName="src/contents/page.content.ts"
|
|
144
|
+
```tsx fileName="src/contents/page.content.ts"
|
|
196
145
|
import type { Dictionary } from "intlayer";
|
|
197
146
|
|
|
198
147
|
import { t } from "intlayer";
|
|
@@ -201,25 +150,29 @@ const appContent = {
|
|
|
201
150
|
content: {
|
|
202
151
|
links: {
|
|
203
152
|
about: t({
|
|
153
|
+
de: "Über",
|
|
204
154
|
en: "About",
|
|
205
155
|
es: "Acerca de",
|
|
206
156
|
fr: "À propos",
|
|
207
157
|
}),
|
|
208
158
|
home: t({
|
|
209
|
-
|
|
159
|
+
de: "Startseite",
|
|
160
|
+
en: "Home",
|
|
210
161
|
es: "Inicio",
|
|
211
162
|
fr: "Accueil",
|
|
212
163
|
}),
|
|
213
164
|
},
|
|
214
165
|
meta: {
|
|
215
166
|
description: t({
|
|
216
|
-
|
|
167
|
+
de: "Dies ist ein Beispiel für die Verwendung von Intlayer mit TanStack Router",
|
|
168
|
+
en: "This is an example of using Intlayer with TanStack Router",
|
|
217
169
|
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
218
170
|
fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
219
171
|
}),
|
|
220
172
|
},
|
|
221
173
|
title: t({
|
|
222
|
-
|
|
174
|
+
de: "Willkommen bei Intlayer + TanStack Router",
|
|
175
|
+
en: "Welcome to Intlayer + TanStack Router",
|
|
223
176
|
es: "Bienvenido a Intlayer + TanStack Router",
|
|
224
177
|
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
225
178
|
}),
|
|
@@ -230,7 +183,7 @@ const appContent = {
|
|
|
230
183
|
export default appContent;
|
|
231
184
|
```
|
|
232
185
|
|
|
233
|
-
> Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, sobald sie in das
|
|
186
|
+
> Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, sobald sie in das `contentDir`-Verzeichnis (standardmäßig `./app`) aufgenommen werden. Und sie müssen der Dateierweiterung der Inhaltsdeklaration entsprechen (standardmäßig `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
234
187
|
|
|
235
188
|
> Für weitere Details siehe die [Dokumentation zur Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md).
|
|
236
189
|
|
|
@@ -238,59 +191,99 @@ export default appContent;
|
|
|
238
191
|
|
|
239
192
|
Erstellen Sie eine `LocalizedLink`-Komponente für lokalisierungsbewusste Navigation:
|
|
240
193
|
|
|
241
|
-
```tsx fileName="src/components/localized-link.tsx"
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
import { Link, type
|
|
245
|
-
import {
|
|
246
|
-
|
|
194
|
+
```tsx fileName="src/components/localized-link.tsx"
|
|
195
|
+
import type { FC } from "react";
|
|
196
|
+
|
|
197
|
+
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
198
|
+
import { useLocale } from "react-intlayer";
|
|
199
|
+
|
|
200
|
+
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
201
|
+
|
|
202
|
+
// Hauptfunktion
|
|
203
|
+
export type RemoveLocaleParam<T> = T extends string
|
|
204
|
+
? RemoveLocaleFromString<T>
|
|
205
|
+
: T;
|
|
206
|
+
|
|
207
|
+
export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
|
|
208
|
+
|
|
209
|
+
type CollapseDoubleSlashes<S extends string> =
|
|
210
|
+
S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
|
|
247
211
|
|
|
248
212
|
type LocalizedLinkProps = {
|
|
249
|
-
to
|
|
250
|
-
} & Omit<
|
|
213
|
+
to?: To;
|
|
214
|
+
} & Omit<LinkComponentProps, "to">;
|
|
251
215
|
|
|
252
|
-
|
|
253
|
-
|
|
216
|
+
// Hilfsfunktionen
|
|
217
|
+
type RemoveAll<
|
|
218
|
+
S extends string,
|
|
219
|
+
Sub extends string,
|
|
220
|
+
> = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
|
|
254
221
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
222
|
+
type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
223
|
+
RemoveAll<S, typeof LOCALE_ROUTE>
|
|
224
|
+
>;
|
|
258
225
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
: getLocalizedUrl(props.to, locale);
|
|
226
|
+
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
227
|
+
const { locale } = useLocale();
|
|
262
228
|
|
|
263
|
-
return
|
|
264
|
-
|
|
229
|
+
return (
|
|
230
|
+
<Link
|
|
231
|
+
{...props}
|
|
232
|
+
params={{
|
|
233
|
+
locale,
|
|
234
|
+
...(typeof props?.params === "object" ? props?.params : {}),
|
|
235
|
+
}}
|
|
236
|
+
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
237
|
+
/>
|
|
238
|
+
);
|
|
239
|
+
};
|
|
265
240
|
```
|
|
266
241
|
|
|
267
|
-
|
|
242
|
+
Diese Komponente verfolgt zwei Ziele:
|
|
268
243
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
// eslint-disable-next-line no-restricted-imports
|
|
272
|
-
import { NavigateOptions, useNavigate } from "@tanstack/react-router";
|
|
273
|
-
import { getLocalizedUrl } from "intlayer";
|
|
274
|
-
import { useLocale } from "react-intlayer";
|
|
244
|
+
- Entfernen des unnötigen `{-$locale}`-Präfixes aus der URL.
|
|
245
|
+
- Einfügen des Locale-Parameters in die URL, um sicherzustellen, dass der Benutzer direkt zur lokalisierten Route weitergeleitet wird.
|
|
275
246
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
247
|
+
Anschließend können wir einen `useLocalizedNavigate`-Hook für die programmatische Navigation erstellen:
|
|
248
|
+
|
|
249
|
+
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
250
|
+
import { useLocale } from "react-intlayer";
|
|
251
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
252
|
+
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
253
|
+
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
279
254
|
|
|
280
255
|
export const useLocalizedNavigate = () => {
|
|
281
256
|
const navigate = useNavigate();
|
|
257
|
+
|
|
282
258
|
const { locale } = useLocale();
|
|
283
259
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
260
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
261
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
262
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
263
|
+
? "/"
|
|
264
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
265
|
+
? `/${Rest}`
|
|
266
|
+
: never;
|
|
267
|
+
|
|
268
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
269
|
+
|
|
270
|
+
interface LocalizedNavigate {
|
|
271
|
+
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
272
|
+
(
|
|
273
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
274
|
+
): ReturnType<typeof navigate>;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
278
|
+
if (typeof args === "string") {
|
|
279
|
+
return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
|
|
280
|
+
}
|
|
287
281
|
|
|
288
|
-
|
|
289
|
-
const to = isExternal(options.to)
|
|
290
|
-
? options.to
|
|
291
|
-
: getLocalizedUrl(options.to, locale);
|
|
282
|
+
const { to, ...rest } = args;
|
|
292
283
|
|
|
293
|
-
|
|
284
|
+
const localedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
285
|
+
|
|
286
|
+
return navigate({ to: localedTo, params: { locale, ...rest } as any });
|
|
294
287
|
};
|
|
295
288
|
|
|
296
289
|
return localizedNavigate;
|
|
@@ -301,23 +294,9 @@ export const useLocalizedNavigate = () => {
|
|
|
301
294
|
|
|
302
295
|
Greifen Sie in Ihrer gesamten Anwendung auf Ihre Inhaltswörterbücher zu:
|
|
303
296
|
|
|
304
|
-
#### Root-Weiterleitungsseite
|
|
305
|
-
|
|
306
|
-
```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
|
|
307
|
-
// src/routes/page.tsx
|
|
308
|
-
import { useLocale } from "react-intlayer";
|
|
309
|
-
import { Navigate } from "react-router";
|
|
310
|
-
|
|
311
|
-
export default function Page() {
|
|
312
|
-
const { locale } = useLocale();
|
|
313
|
-
|
|
314
|
-
return <Navigate replace to={locale} />;
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
297
|
#### Lokalisierte Startseite
|
|
319
298
|
|
|
320
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
299
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
321
300
|
import { createFileRoute } from "@tanstack/react-router";
|
|
322
301
|
import { getIntlayer } from "intlayer";
|
|
323
302
|
import { useIntlayer } from "react-intlayer";
|
|
@@ -346,16 +325,15 @@ function RouteComponent() {
|
|
|
346
325
|
const navigate = useLocalizedNavigate();
|
|
347
326
|
|
|
348
327
|
return (
|
|
349
|
-
<div
|
|
350
|
-
<div
|
|
328
|
+
<div>
|
|
329
|
+
<div>
|
|
351
330
|
{content.title}
|
|
352
331
|
<LocaleSwitcher />
|
|
353
|
-
<div
|
|
354
|
-
<a href="/">Index</a>
|
|
332
|
+
<div>
|
|
355
333
|
<LocalizedLink to="/">{content.links.home}</LocalizedLink>
|
|
356
334
|
<LocalizedLink to="/about">{content.links.about}</LocalizedLink>
|
|
357
335
|
</div>
|
|
358
|
-
<div
|
|
336
|
+
<div>
|
|
359
337
|
<button onClick={() => navigate({ to: "/" })}>
|
|
360
338
|
{content.links.home}
|
|
361
339
|
</button>
|
|
@@ -371,65 +349,73 @@ function RouteComponent() {
|
|
|
371
349
|
|
|
372
350
|
> Um mehr über den `useIntlayer` Hook zu erfahren, siehe die [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useIntlayer.md).
|
|
373
351
|
|
|
374
|
-
### Schritt 9: Erstellen
|
|
352
|
+
### Schritt 9: Erstellen Sie eine Sprachumschalter-Komponente
|
|
375
353
|
|
|
376
354
|
Erstellen Sie eine Komponente, die es Benutzern ermöglicht, die Sprache zu wechseln:
|
|
377
355
|
|
|
378
|
-
```tsx fileName="src/components/locale-switcher.tsx"
|
|
356
|
+
```tsx fileName="src/components/locale-switcher.tsx"
|
|
357
|
+
import type { FC } from "react";
|
|
358
|
+
|
|
379
359
|
import { useLocation } from "@tanstack/react-router";
|
|
380
|
-
import {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
const {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
const { availableLocales, locale, setLocale } = useLocale({
|
|
393
|
-
onLocaleChange: (newLocale) => {
|
|
394
|
-
const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
|
|
395
|
-
location.replace(pathWithLocale);
|
|
396
|
-
},
|
|
397
|
-
});
|
|
360
|
+
import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
|
|
361
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
362
|
+
|
|
363
|
+
import { LocalizedLink, To } from "./localized-link";
|
|
364
|
+
|
|
365
|
+
export const LocaleSwitcher: FC = () => {
|
|
366
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
367
|
+
const { pathname } = useLocation();
|
|
368
|
+
|
|
369
|
+
const { availableLocales, locale } = useLocale();
|
|
370
|
+
|
|
371
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
398
372
|
|
|
399
373
|
return (
|
|
400
|
-
<
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
374
|
+
<ol>
|
|
375
|
+
{availableLocales.map((localeEl) => (
|
|
376
|
+
<li key={localeEl}>
|
|
377
|
+
<LocalizedLink
|
|
378
|
+
aria-current={localeEl === locale ? "page" : undefined}
|
|
379
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
380
|
+
onClick={() => setLocaleCookie(localeEl)}
|
|
381
|
+
params={{ locale: localeEl }}
|
|
382
|
+
to={pathWithoutLocale as To}
|
|
383
|
+
>
|
|
384
|
+
<span>
|
|
385
|
+
{/* Gebietsschema - z.B. FR */}
|
|
386
|
+
{localeItem}
|
|
387
|
+
</span>
|
|
388
|
+
<span>
|
|
389
|
+
{/* Sprache in ihrem eigenen Gebietsschema - z.B. Français */}
|
|
390
|
+
{getLocaleName(localeItem, locale)}
|
|
391
|
+
</span>
|
|
392
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
393
|
+
{/* Sprache im aktuellen Gebietsschema - z.B. Francés mit aktuellem Gebietsschema auf Locales.SPANISH gesetzt */}
|
|
394
|
+
{getLocaleName(localeItem)}
|
|
395
|
+
</span>
|
|
396
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
397
|
+
{/* Sprache auf Englisch - z.B. French */}
|
|
398
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
399
|
+
</span>
|
|
400
|
+
</LocalizedLink>
|
|
401
|
+
</li>
|
|
416
402
|
))}
|
|
417
|
-
</
|
|
403
|
+
</ol>
|
|
418
404
|
);
|
|
419
|
-
}
|
|
405
|
+
};
|
|
420
406
|
```
|
|
421
407
|
|
|
422
408
|
> Um mehr über den `useLocale` Hook zu erfahren, siehe die [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useLocale.md).
|
|
423
409
|
|
|
424
410
|
### Schritt 10: HTML-Attribute-Verwaltung hinzufügen (Optional)
|
|
425
411
|
|
|
426
|
-
|
|
412
|
+
Erstelle einen Hook, um die HTML-Attribute lang und dir zu verwalten:
|
|
427
413
|
|
|
428
|
-
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
414
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
429
415
|
// src/hooks/useI18nHTMLAttributes.tsx
|
|
430
416
|
import { getHTMLTextDir } from "intlayer";
|
|
431
417
|
import { useEffect } from "react";
|
|
432
|
-
import { useLocale } from "intlayer";
|
|
418
|
+
import { useLocale } from "react-intlayer";
|
|
433
419
|
|
|
434
420
|
export const useI18nHTMLAttributes = () => {
|
|
435
421
|
const { locale } = useLocale();
|
|
@@ -441,12 +427,11 @@ export const useI18nHTMLAttributes = () => {
|
|
|
441
427
|
};
|
|
442
428
|
```
|
|
443
429
|
|
|
444
|
-
Dann
|
|
430
|
+
Dann verwende ihn in deiner Root-Komponente:
|
|
445
431
|
|
|
446
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
432
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
447
433
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
448
|
-
import {
|
|
449
|
-
import { IntlayerProvider, useLocale } from "intlayer";
|
|
434
|
+
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
450
435
|
|
|
451
436
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importiere den Hook
|
|
452
437
|
|
|
@@ -457,67 +442,68 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
457
442
|
function LayoutComponent() {
|
|
458
443
|
useI18nHTMLAttributes(); // diese Zeile hinzufügen
|
|
459
444
|
|
|
445
|
+
const { defaultLocale } = useLocale();
|
|
460
446
|
const { locale } = Route.useParams();
|
|
461
447
|
|
|
462
448
|
return (
|
|
463
|
-
<IntlayerProvider locale={locale}>
|
|
449
|
+
<IntlayerProvider locale={locale ?? defaultLocale}>
|
|
464
450
|
<Outlet />
|
|
465
451
|
</IntlayerProvider>
|
|
466
452
|
);
|
|
467
453
|
}
|
|
468
454
|
```
|
|
469
455
|
|
|
470
|
-
|
|
456
|
+
---
|
|
471
457
|
|
|
472
|
-
|
|
458
|
+
### Schritt 11: Middleware hinzufügen (Optional)
|
|
473
459
|
|
|
474
|
-
|
|
475
|
-
# Intlayer-Wörterbücher erstellen
|
|
476
|
-
npm run intlayer:build
|
|
460
|
+
Sie können auch das `intlayerMiddleware` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
477
461
|
|
|
478
|
-
|
|
479
|
-
npm run dev
|
|
480
|
-
```
|
|
462
|
+
> Beachten Sie, dass Sie, um das `intlayerMiddleware` in der Produktion zu verwenden, das `vite-intlayer`-Paket von `devDependencies` zu `dependencies` wechseln müssen.
|
|
481
463
|
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
|
|
464
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
465
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
466
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
467
|
+
import { defineConfig } from "vite";
|
|
468
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
469
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
485
470
|
|
|
486
|
-
|
|
487
|
-
|
|
471
|
+
export default defineConfig({
|
|
472
|
+
plugins: [
|
|
473
|
+
tailwindcss(),
|
|
474
|
+
reactRouter(),
|
|
475
|
+
tsconfigPaths(),
|
|
476
|
+
intlayer(),
|
|
477
|
+
intlayerMiddleware(),
|
|
478
|
+
],
|
|
479
|
+
});
|
|
488
480
|
```
|
|
489
481
|
|
|
490
|
-
|
|
491
|
-
# Intlayer-Wörterbücher erstellen
|
|
492
|
-
yarn intlayer:build
|
|
493
|
-
|
|
494
|
-
# Entwicklungsserver starten
|
|
495
|
-
yarn dev
|
|
496
|
-
```
|
|
482
|
+
---
|
|
497
483
|
|
|
498
484
|
### Schritt 12: TypeScript konfigurieren (optional)
|
|
499
485
|
|
|
500
|
-
Intlayer verwendet
|
|
486
|
+
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und Ihren Code robuster zu machen.
|
|
501
487
|
|
|
502
488
|
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen einschließt:
|
|
503
489
|
|
|
504
490
|
```json5 fileName="tsconfig.json"
|
|
505
491
|
{
|
|
506
|
-
|
|
507
|
-
// ... Ihre bestehenden TypeScript-Konfigurationen
|
|
508
|
-
},
|
|
492
|
+
// ... Ihre bestehenden Konfigurationen
|
|
509
493
|
include: [
|
|
510
494
|
// ... Ihre bestehenden Includes
|
|
511
|
-
".intlayer/**/*.ts", //
|
|
495
|
+
".intlayer/**/*.ts", // Einschließen der automatisch generierten Typen
|
|
512
496
|
],
|
|
513
497
|
}
|
|
514
498
|
```
|
|
515
499
|
|
|
500
|
+
---
|
|
501
|
+
|
|
516
502
|
### Git-Konfiguration
|
|
517
503
|
|
|
518
|
-
Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie,
|
|
504
|
+
Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie, diese versehentlich in Ihr Git-Repository zu committen.
|
|
519
505
|
|
|
520
|
-
|
|
506
|
+
Um dies zu tun, können Sie die folgenden Anweisungen zu Ihrer `.gitignore`-Datei hinzufügen:
|
|
521
507
|
|
|
522
508
|
```plaintext fileName=".gitignore"
|
|
523
509
|
# Ignoriere die von Intlayer generierten Dateien
|
|
@@ -526,64 +512,6 @@ Fügen Sie dazu folgende Anweisungen in Ihre `.gitignore`-Datei ein:
|
|
|
526
512
|
|
|
527
513
|
---
|
|
528
514
|
|
|
529
|
-
### Schritt 13: Weiterleitung erstellen (Optional)
|
|
530
|
-
|
|
531
|
-
```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
|
|
532
|
-
function LayoutComponent() {
|
|
533
|
-
useI18nHTMLAttributes();
|
|
534
|
-
|
|
535
|
-
const { locale } = Route.useParams();
|
|
536
|
-
const { locale: selectedLocale } = useLocale();
|
|
537
|
-
const { defaultLocale } = configuration.internationalization;
|
|
538
|
-
const { prefixDefault } = configuration.middleware;
|
|
539
|
-
|
|
540
|
-
// Weiterleitung zur Standardsprache, wenn keine Sprache in der URL vorhanden ist und prefixDefault wahr ist
|
|
541
|
-
if (selectedLocale === defaultLocale && !locale && prefixDefault) {
|
|
542
|
-
return <Navigate replace to={defaultLocale} />;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
// Weiterleitung zur ausgewählten Sprache, wenn die Sprache in der URL nicht mit der ausgewählten Sprache übereinstimmt
|
|
546
|
-
if (selectedLocale !== defaultLocale && !locale) {
|
|
547
|
-
return <Navigate replace to={selectedLocale} />;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
return (
|
|
551
|
-
<IntlayerProvider locale={locale}>
|
|
552
|
-
<Outlet />
|
|
553
|
-
</IntlayerProvider>
|
|
554
|
-
);
|
|
555
|
-
}
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
## Produktionsbereitstellung
|
|
559
|
-
|
|
560
|
-
Beim Bereitstellen Ihrer Anwendung:
|
|
561
|
-
|
|
562
|
-
1. **Bauen Sie Ihre Anwendung:**
|
|
563
|
-
|
|
564
|
-
```bash
|
|
565
|
-
npm run build
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
2. **Bauen Sie die Intlayer-Wörterbücher:**
|
|
569
|
-
|
|
570
|
-
```bash
|
|
571
|
-
npm run intlayer:build
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
3. **Verschieben Sie `vite-intlayer` in die Abhängigkeiten**, wenn Sie Middleware in der Produktion verwenden:
|
|
575
|
-
```bash
|
|
576
|
-
npm install vite-intlayer --save
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
Ihre Anwendung unterstützt nun:
|
|
580
|
-
|
|
581
|
-
- **URL-Struktur**: `/en`, `/en/about`, `/tr`, `/tr/about`
|
|
582
|
-
- **Automatische Spracherkennung** basierend auf den Browsereinstellungen
|
|
583
|
-
- **Sprachbewusstes Routing** mit Tanstack Start
|
|
584
|
-
- **TypeScript-Unterstützung** mit automatisch generierten Typen
|
|
585
|
-
- **Server-seitiges Rendering** mit korrekter Sprachbehandlung
|
|
586
|
-
|
|
587
515
|
## VS Code Erweiterung
|
|
588
516
|
|
|
589
517
|
Um Ihre Entwicklungserfahrung mit Intlayer zu verbessern, können Sie die offizielle **Intlayer VS Code Erweiterung** installieren.
|
|
@@ -597,7 +525,7 @@ Diese Erweiterung bietet:
|
|
|
597
525
|
- **Inline-Vorschauen** des übersetzten Inhalts.
|
|
598
526
|
- **Schnellaktionen**, um Übersetzungen einfach zu erstellen und zu aktualisieren.
|
|
599
527
|
|
|
600
|
-
Für weitere Details zur Verwendung der Erweiterung
|
|
528
|
+
Für weitere Details zur Verwendung der Erweiterung siehe die [Intlayer VS Code Extension Dokumentation](https://intlayer.org/doc/vs-code-extension).
|
|
601
529
|
|
|
602
530
|
---
|
|
603
531
|
|
|
@@ -622,4 +550,4 @@ Dieser umfassende Leitfaden bietet alles, was Sie benötigen, um Intlayer mit Ta
|
|
|
622
550
|
|
|
623
551
|
| Version | Datum | Änderungen |
|
|
624
552
|
| ------- | ---------- | ------------------------------ |
|
|
625
|
-
| 5.8.1 | 2025-09-09 |
|
|
553
|
+
| 5.8.1 | 2025-09-09 | Hinzugefügt für Tanstack Start |
|