@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-10-03
|
|
4
4
|
title: Erste Schritte mit Intlayer in React Router v7
|
|
5
|
-
description: Erfahren Sie, wie Sie Internationalisierung (i18n) zu Ihrer React Router v7-Anwendung mit Intlayer hinzufügen. Folgen Sie dieser umfassenden Anleitung, um Ihre App mehrsprachig mit lokalisierungsbewusstem Routing zu
|
|
5
|
+
description: Erfahren Sie, wie Sie Internationalisierung (i18n) zu Ihrer React Router v7-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,18 @@ keywords:
|
|
|
11
11
|
- React
|
|
12
12
|
- i18n
|
|
13
13
|
- TypeScript
|
|
14
|
-
-
|
|
14
|
+
- Lokalisierungs-Routing
|
|
15
15
|
slugs:
|
|
16
16
|
- doc
|
|
17
17
|
- environment
|
|
18
18
|
- vite-and-react
|
|
19
19
|
- react-router-v7
|
|
20
|
-
applicationTemplate: https://github.com/
|
|
21
|
-
author: AydinTheFirst
|
|
20
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-react-router-v7-template
|
|
22
21
|
---
|
|
23
22
|
|
|
24
|
-
# Erste Schritte
|
|
23
|
+
# Erste Schritte mit der Internationalisierung (i18n) mit Intlayer und React Router v7
|
|
25
24
|
|
|
26
|
-
Diese Anleitung zeigt, wie Sie **Intlayer**
|
|
25
|
+
Diese Anleitung zeigt, wie Sie **Intlayer** für nahtlose Internationalisierung in React Router v7-Projekten mit lokalisierungsbewusstem Routing, TypeScript-Unterstützung und modernen Entwicklungsmethoden integrieren.
|
|
27
26
|
|
|
28
27
|
## Was ist Intlayer?
|
|
29
28
|
|
|
@@ -33,9 +32,9 @@ Mit Intlayer können Sie:
|
|
|
33
32
|
|
|
34
33
|
- **Übersetzungen einfach verwalten** durch deklarative Wörterbücher auf Komponentenebene.
|
|
35
34
|
- **Metadaten, Routen und Inhalte dynamisch lokalisieren**.
|
|
36
|
-
- **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die
|
|
37
|
-
- **Von erweiterten Funktionen profitieren**, wie
|
|
38
|
-
- **
|
|
35
|
+
- **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die Autovervollständigung und Fehlererkennung verbessern.
|
|
36
|
+
- **Von erweiterten Funktionen profitieren**, wie dynamische Lokalerkennung und -umschaltung.
|
|
37
|
+
- **Aktivieren Sie lokalisierungsbewusstes Routing** mit dem konfigurationsbasierten Routing-System von React Router v7.
|
|
39
38
|
|
|
40
39
|
---
|
|
41
40
|
|
|
@@ -43,7 +42,7 @@ Mit Intlayer können Sie:
|
|
|
43
42
|
|
|
44
43
|
### Schritt 1: Abhängigkeiten installieren
|
|
45
44
|
|
|
46
|
-
Installieren Sie die
|
|
45
|
+
Installieren Sie die notwendigen Pakete mit Ihrem bevorzugten Paketmanager:
|
|
47
46
|
|
|
48
47
|
```bash packageManager="npm"
|
|
49
48
|
npm install intlayer react-intlayer
|
|
@@ -59,14 +58,12 @@ pnpm add vite-intlayer --save-dev
|
|
|
59
58
|
|
|
60
59
|
- **intlayer**
|
|
61
60
|
|
|
62
|
-
Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md),
|
|
61
|
+
Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md), Transpilierung und [CLI-Befehle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md) bereitstellt.
|
|
63
62
|
|
|
64
63
|
- **react-intlayer**
|
|
65
|
-
|
|
66
64
|
Das Paket, das Intlayer in React-Anwendungen integriert. Es stellt Kontext-Provider und Hooks für die Internationalisierung in React bereit.
|
|
67
65
|
|
|
68
66
|
- **vite-intlayer**
|
|
69
|
-
|
|
70
67
|
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.
|
|
71
68
|
|
|
72
69
|
### Schritt 2: Konfiguration Ihres Projekts
|
|
@@ -78,11 +75,8 @@ import { type IntlayerConfig, Locales } from "intlayer";
|
|
|
78
75
|
|
|
79
76
|
const config: IntlayerConfig = {
|
|
80
77
|
internationalization: {
|
|
81
|
-
defaultLocale: Locales.ENGLISH,
|
|
82
|
-
locales: [Locales.ENGLISH, Locales.
|
|
83
|
-
},
|
|
84
|
-
middleware: {
|
|
85
|
-
prefixDefault: true, // Standardlocale in URLs immer voranstellen
|
|
78
|
+
defaultLocale: Locales.ENGLISH, // Standard-Sprache
|
|
79
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Verfügbare Sprachen
|
|
86
80
|
},
|
|
87
81
|
};
|
|
88
82
|
|
|
@@ -95,11 +89,8 @@ import { Locales } from "intlayer";
|
|
|
95
89
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
96
90
|
const config = {
|
|
97
91
|
internationalization: {
|
|
98
|
-
defaultLocale: Locales.ENGLISH,
|
|
99
|
-
locales: [Locales.ENGLISH, Locales.
|
|
100
|
-
},
|
|
101
|
-
middleware: {
|
|
102
|
-
prefixDefault: true,
|
|
92
|
+
defaultLocale: Locales.ENGLISH, // Standard-Sprache
|
|
93
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Verfügbare Sprachen
|
|
103
94
|
},
|
|
104
95
|
};
|
|
105
96
|
|
|
@@ -110,59 +101,49 @@ export default config;
|
|
|
110
101
|
const { Locales } = require("intlayer");
|
|
111
102
|
|
|
112
103
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
113
|
-
// Konfiguration des Intlayer-Setups
|
|
114
104
|
const config = {
|
|
115
105
|
internationalization: {
|
|
116
|
-
defaultLocale: Locales.ENGLISH, //
|
|
117
|
-
locales: [Locales.ENGLISH, Locales.
|
|
118
|
-
},
|
|
119
|
-
middleware: {
|
|
120
|
-
prefixDefault: true, // Standard-Sprache immer im URL-Pfad voranstellen
|
|
106
|
+
defaultLocale: Locales.ENGLISH, // Standardsprache
|
|
107
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Verfügbare Sprachen
|
|
121
108
|
},
|
|
122
109
|
};
|
|
123
110
|
|
|
124
111
|
module.exports = config;
|
|
125
112
|
```
|
|
126
113
|
|
|
127
|
-
> Über diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen einstellen, Intlayer-Logs in der Konsole deaktivieren und vieles mehr. Für eine vollständige Liste der verfügbaren Parameter
|
|
128
|
-
|
|
129
|
-
### Schritt 3: React Router v7 Routen konfigurieren
|
|
130
|
-
|
|
131
|
-
Richten Sie Ihre Routing-Konfiguration mit sprachsensitiven Routen ein:
|
|
114
|
+
> Über diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen einstellen, Intlayer-Logs in der Konsole deaktivieren und vieles mehr. Für eine vollständige Liste der verfügbaren Parameter lesen Sie bitte die [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md).
|
|
132
115
|
|
|
133
|
-
|
|
134
|
-
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
135
|
-
|
|
136
|
-
export default [
|
|
137
|
-
layout("routes/layout.tsx", [
|
|
138
|
-
route("/", "routes/page.tsx"), // Startseite - leitet zur Sprache weiter
|
|
139
|
-
route("/:lang", "routes/[lang]/page.tsx"), // Lokalisierte Startseite
|
|
140
|
-
route("/:lang/about", "routes/[lang]/about/page.tsx"), // Lokalisierte Über-Seite
|
|
141
|
-
]),
|
|
142
|
-
] satisfies RouteConfig;
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Schritt 4: Intlayer in Ihre Vite-Konfiguration integrieren
|
|
116
|
+
### Schritt 3: Integrieren Sie Intlayer in Ihre Vite-Konfiguration
|
|
146
117
|
|
|
147
118
|
Fügen Sie das Intlayer-Plugin in Ihre Konfiguration ein:
|
|
148
119
|
|
|
149
|
-
```typescript fileName="vite.config.ts"
|
|
120
|
+
```typescript fileName="vite.config.ts"
|
|
150
121
|
import { reactRouter } from "@react-router/dev/vite";
|
|
151
122
|
import { defineConfig } from "vite";
|
|
152
|
-
import {
|
|
123
|
+
import { intlayer } from "vite-intlayer";
|
|
153
124
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
154
125
|
|
|
155
126
|
export default defineConfig({
|
|
156
|
-
plugins: [
|
|
157
|
-
reactRouter(),
|
|
158
|
-
tsconfigPaths(),
|
|
159
|
-
intlayer(),
|
|
160
|
-
intlayerMiddlewarePlugin(),
|
|
161
|
-
],
|
|
127
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
162
128
|
});
|
|
163
129
|
```
|
|
164
130
|
|
|
165
|
-
> Das `intlayer()` Vite-Plugin wird verwendet, um Intlayer
|
|
131
|
+
> Das `intlayer()` Vite-Plugin wird verwendet, um Intlayer mit Vite zu integrieren. Es sorgt für den Aufbau der Inhaltsdeklarationsdateien und überwacht diese im Entwicklungsmodus. Es definiert Intlayer-Umgebungsvariablen innerhalb der Vite-Anwendung. Zusätzlich stellt es Aliase bereit, um die Leistung zu optimieren.
|
|
132
|
+
|
|
133
|
+
### Schritt 4: Konfigurieren der React Router v7 Routen
|
|
134
|
+
|
|
135
|
+
Richten Sie Ihre Routing-Konfiguration mit sprachsensitiven Routen ein:
|
|
136
|
+
|
|
137
|
+
```typescript fileName="app/routes.ts"
|
|
138
|
+
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
139
|
+
|
|
140
|
+
export default [
|
|
141
|
+
layout("routes/layout.tsx", [
|
|
142
|
+
route("/:lang?", "routes/page.tsx"), // Lokalisierte Startseite
|
|
143
|
+
route("/:lang?/about", "routes/about/page.tsx"), // Lokalisierte Über-Seite
|
|
144
|
+
]),
|
|
145
|
+
] satisfies RouteConfig;
|
|
146
|
+
```
|
|
166
147
|
|
|
167
148
|
### Schritt 5: Layout-Komponenten erstellen
|
|
168
149
|
|
|
@@ -170,15 +151,17 @@ Richten Sie Ihr Root-Layout und sprachspezifische Layouts ein:
|
|
|
170
151
|
|
|
171
152
|
#### Root-Layout
|
|
172
153
|
|
|
173
|
-
```tsx fileName="app/routes/layout.tsx"
|
|
174
|
-
tsx fileName="app/routes/layout.tsx" codeFormat="typescript"
|
|
175
|
-
// app/routes/layout.tsx
|
|
176
|
-
import { Outlet } from "react-router";
|
|
154
|
+
```tsx fileName="app/routes/layout.tsx"
|
|
177
155
|
import { IntlayerProvider } from "react-intlayer";
|
|
156
|
+
import { Outlet } from "react-router";
|
|
157
|
+
|
|
158
|
+
import type { Route } from "./+types/layout";
|
|
159
|
+
|
|
160
|
+
export default function RootLayout({ params }: Route.ComponentProps) {
|
|
161
|
+
const { locale } = params;
|
|
178
162
|
|
|
179
|
-
export default function RootLayout() {
|
|
180
163
|
return (
|
|
181
|
-
<IntlayerProvider>
|
|
164
|
+
<IntlayerProvider locale={locale}>
|
|
182
165
|
<Outlet />
|
|
183
166
|
</IntlayerProvider>
|
|
184
167
|
);
|
|
@@ -189,7 +172,7 @@ export default function RootLayout() {
|
|
|
189
172
|
|
|
190
173
|
Erstellen und verwalten Sie Ihre Inhaltsdeklarationen, um Übersetzungen zu speichern:
|
|
191
174
|
|
|
192
|
-
```tsx fileName="app/routes/[lang]/page.content.ts"
|
|
175
|
+
```tsx fileName="app/routes/[lang]/page.content.ts"
|
|
193
176
|
import { t, type Dictionary } from "intlayer";
|
|
194
177
|
|
|
195
178
|
const pageContent = {
|
|
@@ -197,19 +180,23 @@ const pageContent = {
|
|
|
197
180
|
content: {
|
|
198
181
|
title: t({
|
|
199
182
|
en: "Welcome to React Router v7 + Intlayer",
|
|
200
|
-
|
|
183
|
+
es: "Bienvenido a React Router v7 + Intlayer",
|
|
184
|
+
fr: "Bienvenue sur React Router v7 + Intlayer",
|
|
201
185
|
}),
|
|
202
186
|
description: t({
|
|
203
187
|
en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
|
|
204
|
-
|
|
188
|
+
es: "Cree aplicaciones multilingües fácilmente usando React Router v7 y Intlayer.",
|
|
189
|
+
fr: "Créez des applications multilingues facilement avec React Router v7 et Intlayer.",
|
|
205
190
|
}),
|
|
206
191
|
aboutLink: t({
|
|
207
192
|
en: "Erfahren Sie mehr über uns",
|
|
208
|
-
|
|
193
|
+
es: "Aprender Sobre Nosotros",
|
|
194
|
+
fr: "En savoir plus sur nous",
|
|
209
195
|
}),
|
|
210
196
|
homeLink: t({
|
|
211
197
|
en: "Startseite",
|
|
212
|
-
|
|
198
|
+
es: "Inicio",
|
|
199
|
+
fr: "Accueil",
|
|
213
200
|
}),
|
|
214
201
|
},
|
|
215
202
|
} satisfies Dictionary;
|
|
@@ -217,163 +204,165 @@ const pageContent = {
|
|
|
217
204
|
export default pageContent;
|
|
218
205
|
```
|
|
219
206
|
|
|
220
|
-
> Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, sobald sie in das Verzeichnis `contentDir` (standardmäßig `./app`)
|
|
207
|
+
> Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, sobald sie in das Verzeichnis `contentDir` aufgenommen werden (standardmäßig `./app`). Und sie müssen der Dateierweiterung für Inhaltsdeklarationen entsprechen (standardmäßig `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
221
208
|
|
|
222
|
-
> Für weitere Details
|
|
209
|
+
> Für weitere Details siehe die [Dokumentation zur Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md).
|
|
223
210
|
|
|
224
|
-
### Schritt 7: Erstellen Sie
|
|
211
|
+
### Schritt 7: Erstellen Sie locale-bewusste Komponenten
|
|
225
212
|
|
|
226
|
-
Erstellen Sie eine `LocalizedLink`-Komponente für
|
|
213
|
+
Erstellen Sie eine `LocalizedLink`-Komponente für locale-bewusste Navigation:
|
|
227
214
|
|
|
228
|
-
```tsx fileName="app/components/localized-link.tsx"
|
|
229
|
-
|
|
230
|
-
import { getLocalizedUrl } from "intlayer";
|
|
231
|
-
import { useLocale } from "react-intlayer";
|
|
232
|
-
import React from "react";
|
|
233
|
-
import { Link, useLocation } from "react-router";
|
|
234
|
-
|
|
235
|
-
type RouterLinkProps = React.ComponentProps<typeof Link>;
|
|
215
|
+
```tsx fileName="app/components/localized-link.tsx"
|
|
216
|
+
import type { FC } from "react";
|
|
236
217
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
218
|
+
import { getLocalizedUrl, type LocalesValues } from "intlayer";
|
|
219
|
+
import { useLocale } from "react-intlayer";
|
|
220
|
+
import { Link, type LinkProps, type To } from "react-router";
|
|
240
221
|
|
|
241
|
-
|
|
242
|
-
/^([a-z][a-z0-9+.-]*:)?\/\//i.test(path) || path.startsWith("mailto:");
|
|
222
|
+
const isExternalLink = (to: string) => /^(https?:)?\/\//.test(to);
|
|
243
223
|
|
|
224
|
+
// Prüft, ob der Link extern ist
|
|
225
|
+
export const locacalizeTo = (to: To, locale: LocalesValues): To => {
|
|
244
226
|
if (typeof to === "string") {
|
|
245
|
-
if (
|
|
246
|
-
return
|
|
227
|
+
if (isExternalLink(to)) {
|
|
228
|
+
return to;
|
|
247
229
|
}
|
|
248
|
-
|
|
230
|
+
|
|
231
|
+
return getLocalizedUrl(to, locale);
|
|
249
232
|
}
|
|
250
233
|
|
|
251
|
-
if (to
|
|
252
|
-
|
|
253
|
-
if (pathname && pathname.startsWith("/") && !isExternal(pathname)) {
|
|
254
|
-
return (
|
|
255
|
-
<Link
|
|
256
|
-
to={{ ...to, pathname: getLocalizedUrl(pathname, locale) }}
|
|
257
|
-
{...props}
|
|
258
|
-
/>
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
return <Link to={to} {...props} />;
|
|
234
|
+
if (isExternalLink(to.pathname ?? "")) {
|
|
235
|
+
return to;
|
|
262
236
|
}
|
|
263
237
|
|
|
264
|
-
return
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
```
|
|
238
|
+
return {
|
|
239
|
+
...to,
|
|
240
|
+
pathname: getLocalizedUrl(to.pathname ?? "", locale),
|
|
241
|
+
};
|
|
242
|
+
};
|
|
272
243
|
|
|
273
|
-
|
|
244
|
+
// Lokalisierter Link-Komponenten für die Navigation
|
|
245
|
+
export const LocalizedLink: FC<LinkProps> = (props) => {
|
|
246
|
+
const { locale } = useLocale();
|
|
274
247
|
|
|
275
|
-
|
|
248
|
+
return <Link {...props} to={locacalizeTo(props.to, locale)} />;
|
|
249
|
+
};
|
|
250
|
+
```
|
|
276
251
|
|
|
277
|
-
|
|
252
|
+
Falls Sie zu den lokalisierten Routen navigieren möchten, können Sie den `useLocalizedNavigate` Hook verwenden:
|
|
278
253
|
|
|
279
|
-
```tsx fileName="app/
|
|
280
|
-
|
|
281
|
-
import {
|
|
282
|
-
import { Navigate } from "react-router";
|
|
254
|
+
```tsx fileName="app/hooks/useLocalizedNavigate.ts"
|
|
255
|
+
import { useLocale } from "intlayer";
|
|
256
|
+
import { type NavigateOptions, type To, useNavigate } from "react-router";
|
|
283
257
|
|
|
284
|
-
|
|
258
|
+
import { locacalizeTo } from "~/components/localized-link";
|
|
259
|
+
|
|
260
|
+
export const useLocalizedNavigate = () => {
|
|
261
|
+
const navigate = useNavigate();
|
|
285
262
|
const { locale } = useLocale();
|
|
286
263
|
|
|
287
|
-
|
|
288
|
-
|
|
264
|
+
const localizedNavigate = (to: To, options?: NavigateOptions) => {
|
|
265
|
+
const localedTo = locacalizeTo(to, locale);
|
|
266
|
+
|
|
267
|
+
navigate(localedTo, options);
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
return localizedNavigate;
|
|
271
|
+
};
|
|
289
272
|
```
|
|
290
273
|
|
|
274
|
+
### Schritt 8: Verwenden Sie Intlayer in Ihren Seiten
|
|
275
|
+
|
|
276
|
+
Greifen Sie in Ihrer gesamten Anwendung auf Ihre Inhaltswörterbücher zu:
|
|
277
|
+
|
|
291
278
|
#### Lokalisierte Startseite
|
|
292
279
|
|
|
293
|
-
```tsx fileName="app/routes/[lang]/page.tsx"
|
|
280
|
+
```tsx fileName="app/routes/[lang]/page.tsx"
|
|
294
281
|
import { useIntlayer } from "react-intlayer";
|
|
295
|
-
import LocalizedLink from "~/components/localized-link";
|
|
282
|
+
import { LocalizedLink } from "~/components/localized-link";
|
|
296
283
|
|
|
297
284
|
export default function Page() {
|
|
298
|
-
const
|
|
285
|
+
const { title, description, aboutLink } = useIntlayer("page");
|
|
299
286
|
|
|
300
287
|
return (
|
|
301
|
-
<div
|
|
302
|
-
<h1>{
|
|
303
|
-
<p>{
|
|
304
|
-
<nav
|
|
305
|
-
<LocalizedLink
|
|
306
|
-
to="/about"
|
|
307
|
-
style={{
|
|
308
|
-
display: "inline-block",
|
|
309
|
-
padding: "0.5rem 1rem",
|
|
310
|
-
backgroundColor: "#007bff",
|
|
311
|
-
color: "white",
|
|
312
|
-
textDecoration: "none",
|
|
313
|
-
borderRadius: "4px",
|
|
314
|
-
}}
|
|
315
|
-
>
|
|
316
|
-
{content.aboutLink}
|
|
317
|
-
</LocalizedLink>
|
|
288
|
+
<div>
|
|
289
|
+
<h1>{title}</h1>
|
|
290
|
+
<p>{description}</p>
|
|
291
|
+
<nav>
|
|
292
|
+
<LocalizedLink to="/about">{aboutLink}</LocalizedLink>
|
|
318
293
|
</nav>
|
|
319
294
|
</div>
|
|
320
295
|
);
|
|
321
296
|
}
|
|
322
297
|
```
|
|
323
298
|
|
|
324
|
-
> Um mehr über den `useIntlayer` Hook zu erfahren,
|
|
299
|
+
> Um mehr über den `useIntlayer` Hook zu erfahren, lesen Sie die [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useIntlayer.md).
|
|
325
300
|
|
|
326
301
|
### Schritt 9: Erstellen Sie eine Sprachumschalter-Komponente
|
|
327
302
|
|
|
328
303
|
Erstellen Sie eine Komponente, die es Benutzern ermöglicht, die Sprache zu wechseln:
|
|
329
304
|
|
|
330
|
-
```tsx fileName="app/components/locale-switcher.tsx"
|
|
331
|
-
import {
|
|
332
|
-
import { useLocale } from "intlayer";
|
|
333
|
-
import { useLocation, useNavigate } from "react-router";
|
|
305
|
+
```tsx fileName="app/components/locale-switcher.tsx"
|
|
306
|
+
import type { FC } from "react";
|
|
334
307
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
308
|
+
import {
|
|
309
|
+
getHTMLTextDir,
|
|
310
|
+
getLocaleName,
|
|
311
|
+
getLocalizedUrl,
|
|
312
|
+
getPathWithoutLocale,
|
|
313
|
+
} from "intlayer";
|
|
314
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
315
|
+
import { Link, useLocation } from "react-router";
|
|
339
316
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
};
|
|
317
|
+
export const LocaleSwitcher: FC = () => {
|
|
318
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
319
|
+
const { pathname } = useLocation();
|
|
320
|
+
|
|
321
|
+
const { availableLocales, locale } = useLocale();
|
|
322
|
+
|
|
323
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
348
324
|
|
|
349
325
|
return (
|
|
350
|
-
<
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
326
|
+
<ol>
|
|
327
|
+
{availableLocales.map((localeItem) => (
|
|
328
|
+
<li key={localeItem}>
|
|
329
|
+
<Link
|
|
330
|
+
aria-current={localeItem === locale ? "page" : undefined}
|
|
331
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
|
|
332
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
333
|
+
to={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
334
|
+
>
|
|
335
|
+
<span>
|
|
336
|
+
{/* Gebietsschema - z.B. FR */}
|
|
337
|
+
{localeItem}
|
|
338
|
+
</span>
|
|
339
|
+
<span>
|
|
340
|
+
{/* Sprache im eigenen Gebietsschema - z.B. Français */}
|
|
341
|
+
{getLocaleName(localeItem, locale)}
|
|
342
|
+
</span>
|
|
343
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
344
|
+
{/* Sprache im aktuellen Gebietsschema - z.B. Francés mit aktuellem Gebietsschema auf Locales.SPANISH gesetzt */}
|
|
345
|
+
{getLocaleName(localeItem)}
|
|
346
|
+
</span>
|
|
347
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
348
|
+
{/* Sprache auf Englisch - z.B. Französisch */}
|
|
349
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
350
|
+
</span>
|
|
351
|
+
</Link>
|
|
352
|
+
</li>
|
|
353
|
+
))}
|
|
354
|
+
</ol>
|
|
365
355
|
);
|
|
366
|
-
}
|
|
356
|
+
};
|
|
367
357
|
```
|
|
368
358
|
|
|
369
|
-
> Um mehr über den `useLocale` Hook zu erfahren,
|
|
359
|
+
> 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).
|
|
370
360
|
|
|
371
361
|
### Schritt 10: HTML-Attribute-Verwaltung hinzufügen (Optional)
|
|
372
362
|
|
|
373
363
|
Erstellen Sie einen Hook, um die HTML-Attribute lang und dir zu verwalten:
|
|
374
364
|
|
|
375
|
-
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
|
|
376
|
-
// app/hooks/useI18nHTMLAttributes.tsx
|
|
365
|
+
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
|
|
377
366
|
import { getHTMLTextDir } from "intlayer";
|
|
378
367
|
import { useEffect } from "react";
|
|
379
368
|
import { useLocale } from "react-intlayer";
|
|
@@ -390,15 +379,14 @@ export const useI18nHTMLAttributes = () => {
|
|
|
390
379
|
|
|
391
380
|
Verwenden Sie es dann in Ihrer Root-Komponente:
|
|
392
381
|
|
|
393
|
-
```tsx fileName="app/
|
|
394
|
-
// app/routes/layout.tsx
|
|
382
|
+
```tsx fileName="app/routes/layout.tsx"
|
|
395
383
|
import { Outlet } from "react-router";
|
|
396
384
|
import { IntlayerProvider } from "react-intlayer";
|
|
397
385
|
|
|
398
|
-
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // Hook importieren
|
|
386
|
+
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // den Hook importieren
|
|
399
387
|
|
|
400
388
|
export default function RootLayout() {
|
|
401
|
-
useI18nHTMLAttributes(); // Hook aufrufen
|
|
389
|
+
useI18nHTMLAttributes(); // den Hook aufrufen
|
|
402
390
|
|
|
403
391
|
return (
|
|
404
392
|
<IntlayerProvider>
|
|
@@ -408,57 +396,48 @@ export default function RootLayout() {
|
|
|
408
396
|
}
|
|
409
397
|
```
|
|
410
398
|
|
|
411
|
-
### Schritt 11:
|
|
412
|
-
|
|
413
|
-
Baue die Inhaltswörterbücher und starte deine Anwendung:
|
|
399
|
+
### Schritt 11: Middleware hinzufügen (Optional)
|
|
414
400
|
|
|
415
|
-
|
|
416
|
-
# Baue Intlayer-Wörterbücher
|
|
417
|
-
npm run intlayer:build
|
|
401
|
+
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.
|
|
418
402
|
|
|
419
|
-
|
|
420
|
-
npm run dev
|
|
421
|
-
```
|
|
403
|
+
> Beachten Sie, dass Sie, um das `intlayerMiddleware` in der Produktion zu verwenden, das Paket `vite-intlayer` von `devDependencies` zu `dependencies` verschieben müssen.
|
|
422
404
|
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
|
|
405
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
406
|
+
import { defineConfig } from "vite";
|
|
407
|
+
import react from "@vitejs/plugin-react-swc";
|
|
408
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
426
409
|
|
|
427
|
-
|
|
428
|
-
|
|
410
|
+
// https://vitejs.dev/config/
|
|
411
|
+
export default defineConfig({
|
|
412
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
413
|
+
});
|
|
429
414
|
```
|
|
430
415
|
|
|
431
|
-
|
|
432
|
-
# Baue Intlayer-Wörterbücher
|
|
433
|
-
yarn intlayer:build
|
|
434
|
-
|
|
435
|
-
# Starte den Entwicklungsserver
|
|
436
|
-
yarn dev
|
|
437
|
-
```
|
|
416
|
+
---
|
|
438
417
|
|
|
439
|
-
|
|
418
|
+
## TypeScript konfigurieren
|
|
440
419
|
|
|
441
|
-
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und
|
|
420
|
+
Intlayer verwendet Module Augmentation, um die Vorteile von TypeScript zu nutzen und Ihren Code stabiler zu machen.
|
|
442
421
|
|
|
443
|
-
|
|
422
|
+
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen enthält:
|
|
444
423
|
|
|
445
424
|
```json5 fileName="tsconfig.json"
|
|
446
425
|
{
|
|
447
|
-
|
|
448
|
-
// ... deine bestehenden TypeScript-Konfigurationen
|
|
449
|
-
},
|
|
426
|
+
// ... Ihre bestehenden Konfigurationen
|
|
450
427
|
include: [
|
|
451
428
|
// ... Ihre bestehenden Includes
|
|
452
|
-
".intlayer/**/*.ts", //
|
|
429
|
+
".intlayer/**/*.ts", // Einschluss der automatisch generierten Typen
|
|
453
430
|
],
|
|
454
431
|
}
|
|
455
432
|
```
|
|
456
433
|
|
|
457
|
-
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Git-Konfiguration
|
|
458
437
|
|
|
459
|
-
Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie, dass diese in Ihr Git-Repository
|
|
438
|
+
Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie, dass diese versehentlich in Ihr Git-Repository committet werden.
|
|
460
439
|
|
|
461
|
-
Fügen Sie dazu
|
|
440
|
+
Fügen Sie dazu folgende Anweisungen in Ihre `.gitignore`-Datei ein:
|
|
462
441
|
|
|
463
442
|
```plaintext fileName=".gitignore"
|
|
464
443
|
# Ignoriere die von Intlayer generierten Dateien
|
|
@@ -467,35 +446,6 @@ Fügen Sie dazu die folgenden Anweisungen in Ihre `.gitignore`-Datei ein:
|
|
|
467
446
|
|
|
468
447
|
---
|
|
469
448
|
|
|
470
|
-
## Produktionsbereitstellung
|
|
471
|
-
|
|
472
|
-
Beim Deployment Ihrer Anwendung:
|
|
473
|
-
|
|
474
|
-
1. **Bauen Sie Ihre Anwendung:**
|
|
475
|
-
|
|
476
|
-
```bash
|
|
477
|
-
npm run build
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
2. **Bauen Sie die Intlayer-Wörterbücher:**
|
|
481
|
-
|
|
482
|
-
```bash
|
|
483
|
-
npm run intlayer:build
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
3. **Verschieben Sie `vite-intlayer` in die Abhängigkeiten**, wenn Sie Middleware in der Produktion verwenden:
|
|
487
|
-
```bash
|
|
488
|
-
npm install vite-intlayer --save
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
Ihre Anwendung unterstützt nun:
|
|
492
|
-
|
|
493
|
-
- **URL-Struktur**: `/en`, `/en/about`, `/tr`, `/tr/about`
|
|
494
|
-
- **Automatische Spracherkennung** basierend auf den Browsereinstellungen
|
|
495
|
-
- **Sprachbewusstes Routing** mit React Router v7
|
|
496
|
-
- **TypeScript-Unterstützung** mit automatisch generierten Typen
|
|
497
|
-
- **Server-seitiges Rendering** mit korrekter Sprachbehandlung
|
|
498
|
-
|
|
499
449
|
## VS Code Erweiterung
|
|
500
450
|
|
|
501
451
|
Um Ihre Entwicklungserfahrung mit Intlayer zu verbessern, können Sie die offizielle **Intlayer VS Code Erweiterung** installieren.
|
|
@@ -506,10 +456,10 @@ Diese Erweiterung bietet:
|
|
|
506
456
|
|
|
507
457
|
- **Autovervollständigung** für Übersetzungsschlüssel.
|
|
508
458
|
- **Echtzeit-Fehlererkennung** für fehlende Übersetzungen.
|
|
509
|
-
- **Inline-Vorschauen**
|
|
459
|
+
- **Inline-Vorschauen** des übersetzten Inhalts.
|
|
510
460
|
- **Schnellaktionen**, um Übersetzungen einfach zu erstellen und zu aktualisieren.
|
|
511
461
|
|
|
512
|
-
Für weitere Details zur
|
|
462
|
+
Für weitere Details zur Nutzung der Erweiterung lesen Sie die [Intlayer VS Code Erweiterungsdokumentation](https://intlayer.org/doc/vs-code-extension).
|
|
513
463
|
|
|
514
464
|
---
|
|
515
465
|
|
|
@@ -532,6 +482,7 @@ Dieser umfassende Leitfaden bietet alles, was Sie benötigen, um Intlayer mit Re
|
|
|
532
482
|
|
|
533
483
|
## Dokumentationsverlauf
|
|
534
484
|
|
|
535
|
-
| Version | Datum
|
|
536
|
-
| ------- |
|
|
537
|
-
|
|
|
485
|
+
| Version | Datum | Änderungen |
|
|
486
|
+
| ------- | ---------- | ------------------------------- |
|
|
487
|
+
| 6.1.5 | 2025-10-03 | Dokumentation aktualisiert |
|
|
488
|
+
| 5.8.2 | 2025-09-04 | Hinzugefügt für React Router v7 |
|