@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-09
|
|
3
3
|
updatedAt: 2025-09-09
|
|
4
|
-
title: Prise en main
|
|
5
|
-
description: Apprenez
|
|
4
|
+
title: Prise en main d'Intlayer avec Tanstack Start
|
|
5
|
+
description: Apprenez à ajouter l'internationalisation (i18n) à votre application Tanstack Start en utilisant Intlayer. Suivez ce guide complet pour rendre votre application multilingue avec un routage sensible à la locale.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internationalisation
|
|
8
8
|
- Documentation
|
|
@@ -15,15 +15,13 @@ keywords:
|
|
|
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
22
|
# Prise en main de l'internationalisation (i18n) avec Intlayer et Tanstack Start
|
|
25
23
|
|
|
26
|
-
Ce guide montre comment intégrer **Intlayer** pour une internationalisation fluide dans les projets Tanstack Start avec un routage sensible à la locale, la prise en charge de TypeScript
|
|
24
|
+
Ce guide montre comment intégrer **Intlayer** pour une internationalisation fluide dans les projets Tanstack Start avec un routage sensible à la locale, la prise en charge de TypeScript et des pratiques de développement modernes.
|
|
27
25
|
|
|
28
26
|
## Qu'est-ce qu'Intlayer ?
|
|
29
27
|
|
|
@@ -33,9 +31,9 @@ Avec Intlayer, vous pouvez :
|
|
|
33
31
|
|
|
34
32
|
- **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
|
|
35
33
|
- **Localiser dynamiquement les métadonnées**, les routes et le contenu.
|
|
36
|
-
- **Assurer la prise en charge de TypeScript** avec des types générés automatiquement, améliorant l'autocomplétion et la détection
|
|
37
|
-
- **Bénéficier de fonctionnalités avancées**,
|
|
38
|
-
- **Activer
|
|
34
|
+
- **Assurer la prise en charge de TypeScript** avec des types générés automatiquement, améliorant l'autocomplétion et la détection d'erreurs.
|
|
35
|
+
- **Bénéficier de fonctionnalités avancées**, telles que la détection et le changement dynamique de la locale.
|
|
36
|
+
- **Activer un routage sensible à la locale** avec le système de routage basé sur les fichiers de Tanstack Start.
|
|
39
37
|
|
|
40
38
|
---
|
|
41
39
|
|
|
@@ -61,19 +59,21 @@ pnpm add vite-intlayer --save-dev
|
|
|
61
59
|
|
|
62
60
|
- **intlayer**
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
- **intlayer**
|
|
63
|
+
|
|
64
|
+
Le package principal qui fournit des outils d'internationalisation pour la gestion de la configuration, la traduction, la [déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md), la transpilation, et les [commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_cli.md).
|
|
65
65
|
|
|
66
|
-
- **react-intlayer**
|
|
66
|
+
- **react-intlayer**
|
|
67
67
|
Le package qui intègre Intlayer avec une application React. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation dans React.
|
|
68
68
|
|
|
69
|
-
- **vite-intlayer**
|
|
70
|
-
|
|
69
|
+
- **vite-intlayer**
|
|
70
|
+
Comprend le plugin Vite pour intégrer Intlayer avec le [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), ainsi que des middlewares pour détecter la locale préférée de l'utilisateur, gérer les cookies, et gérer la redirection des URL.
|
|
71
71
|
|
|
72
72
|
### Étape 3 : Configuration de votre projet
|
|
73
73
|
|
|
74
74
|
Créez un fichier de configuration pour configurer les langues de votre application :
|
|
75
75
|
|
|
76
|
-
```typescript fileName="intlayer.config.ts"
|
|
76
|
+
```typescript fileName="intlayer.config.ts"
|
|
77
77
|
import type { IntlayerConfig } from "intlayer";
|
|
78
78
|
|
|
79
79
|
import { Locales } from "intlayer";
|
|
@@ -81,75 +81,27 @@ import { Locales } from "intlayer";
|
|
|
81
81
|
const config: IntlayerConfig = {
|
|
82
82
|
internationalization: {
|
|
83
83
|
defaultLocale: Locales.ENGLISH,
|
|
84
|
-
locales: [
|
|
85
|
-
Locales.ENGLISH,
|
|
86
|
-
Locales.FRENCH,
|
|
87
|
-
Locales.SPANISH,
|
|
88
|
-
// Vos autres langues
|
|
89
|
-
],
|
|
84
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
90
85
|
},
|
|
91
86
|
};
|
|
92
87
|
|
|
93
88
|
export default config;
|
|
94
89
|
```
|
|
95
90
|
|
|
96
|
-
|
|
97
|
-
import { Locales } from "intlayer";
|
|
98
|
-
|
|
99
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
100
|
-
const config = {
|
|
101
|
-
internationalization: {
|
|
102
|
-
defaultLocale: Locales.ENGLISH,
|
|
103
|
-
locales: [
|
|
104
|
-
Locales.ENGLISH,
|
|
105
|
-
Locales.FRENCH,
|
|
106
|
-
Locales.SPANISH,
|
|
107
|
-
// Vos autres locales
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export default config;
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
116
|
-
const { Locales } = require("intlayer");
|
|
117
|
-
|
|
118
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
119
|
-
const config = {
|
|
120
|
-
internationalization: {
|
|
121
|
-
defaultLocale: Locales.ENGLISH,
|
|
122
|
-
locales: [
|
|
123
|
-
Locales.ENGLISH,
|
|
124
|
-
Locales.FRENCH,
|
|
125
|
-
Locales.SPANISH,
|
|
126
|
-
// Vos autres locales
|
|
127
|
-
],
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
module.exports = config;
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
> Grâce à ce fichier de configuration, vous pouvez configurer des URLs localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et bien plus encore. Pour une liste complète des paramètres disponibles, référez-vous à la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
|
|
91
|
+
> Grâce à ce fichier de configuration, vous pouvez configurer les URL localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et bien plus encore. Pour une liste complète des paramètres disponibles, consultez la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
|
|
135
92
|
|
|
136
93
|
### Étape 4 : Intégrer Intlayer dans votre configuration Vite
|
|
137
94
|
|
|
138
95
|
Ajoutez le plugin intlayer dans votre configuration :
|
|
139
96
|
|
|
140
|
-
```typescript fileName="vite.config.ts"
|
|
97
|
+
```typescript fileName="vite.config.ts"
|
|
141
98
|
import { reactRouter } from "@react-router/dev/vite";
|
|
142
99
|
import { defineConfig } from "vite";
|
|
143
|
-
import {
|
|
100
|
+
import { intlayer } from "vite-intlayer";
|
|
144
101
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
145
102
|
|
|
146
103
|
export default defineConfig({
|
|
147
|
-
plugins: [
|
|
148
|
-
reactRouter(),
|
|
149
|
-
tsconfigPaths(),
|
|
150
|
-
intlayer(),
|
|
151
|
-
intlayerMiddlewarePlugin(),
|
|
152
|
-
],
|
|
104
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
153
105
|
});
|
|
154
106
|
```
|
|
155
107
|
|
|
@@ -157,14 +109,12 @@ export default defineConfig({
|
|
|
157
109
|
|
|
158
110
|
### Étape 5 : Créez les composants de mise en page
|
|
159
111
|
|
|
160
|
-
Configurez votre mise en page racine et les mises en page spécifiques
|
|
112
|
+
Configurez votre mise en page racine et les mises en page spécifiques aux locales :
|
|
161
113
|
|
|
162
114
|
#### Mise en page racine
|
|
163
115
|
|
|
164
|
-
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
165
|
-
// src/routes/{-$locale}/route.tsx
|
|
116
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
166
117
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
167
|
-
import { configuration } from "intlayer";
|
|
168
118
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
169
119
|
|
|
170
120
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -174,10 +124,11 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
174
124
|
});
|
|
175
125
|
|
|
176
126
|
function LayoutComponent() {
|
|
127
|
+
const { defaultLocale } = useLocale();
|
|
177
128
|
const { locale } = Route.useParams();
|
|
178
129
|
|
|
179
130
|
return (
|
|
180
|
-
<IntlayerProvider locale={
|
|
131
|
+
<IntlayerProvider locale={defaultLocale}>
|
|
181
132
|
<Outlet />
|
|
182
133
|
</IntlayerProvider>
|
|
183
134
|
);
|
|
@@ -188,7 +139,7 @@ function LayoutComponent() {
|
|
|
188
139
|
|
|
189
140
|
Créez et gérez vos déclarations de contenu pour stocker les traductions :
|
|
190
141
|
|
|
191
|
-
```tsx fileName="src/contents/page.content.ts"
|
|
142
|
+
```tsx fileName="src/contents/page.content.ts"
|
|
192
143
|
import type { Dictionary } from "intlayer";
|
|
193
144
|
|
|
194
145
|
import { t } from "intlayer";
|
|
@@ -197,25 +148,26 @@ const appContent = {
|
|
|
197
148
|
content: {
|
|
198
149
|
links: {
|
|
199
150
|
about: t({
|
|
151
|
+
fr: "À propos",
|
|
200
152
|
en: "About",
|
|
201
153
|
es: "Acerca de",
|
|
202
|
-
fr: "À propos",
|
|
203
154
|
}),
|
|
204
155
|
home: t({
|
|
205
|
-
en: "Accueil",
|
|
206
|
-
es: "Inicio",
|
|
207
156
|
fr: "Accueil",
|
|
157
|
+
en: "Home",
|
|
158
|
+
es: "Inicio",
|
|
208
159
|
}),
|
|
209
160
|
},
|
|
210
161
|
meta: {
|
|
211
162
|
description: t({
|
|
212
|
-
en: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
213
|
-
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
214
163
|
fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
164
|
+
en: "This is an example of using Intlayer with TanStack Router",
|
|
165
|
+
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
215
166
|
}),
|
|
216
167
|
},
|
|
217
168
|
title: t({
|
|
218
|
-
|
|
169
|
+
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
170
|
+
en: "Welcome to Intlayer + TanStack Router",
|
|
219
171
|
es: "Bienvenido a Intlayer + TanStack Router",
|
|
220
172
|
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
221
173
|
}),
|
|
@@ -226,67 +178,107 @@ const appContent = {
|
|
|
226
178
|
export default appContent;
|
|
227
179
|
```
|
|
228
180
|
|
|
229
|
-
> Vos déclarations de contenu peuvent être définies n'importe où dans votre application dès qu'elles sont incluses dans le répertoire `contentDir` (par défaut, `./app`). Et
|
|
181
|
+
> Vos déclarations de contenu peuvent être définies n'importe où dans votre application dès qu'elles sont incluses dans le répertoire `contentDir` (par défaut, `./app`). Et elles doivent correspondre à l'extension de fichier des déclarations de contenu (par défaut, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
230
182
|
|
|
231
|
-
> Pour plus de détails,
|
|
183
|
+
> Pour plus de détails, référez-vous à la [documentation des déclarations de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md).
|
|
232
184
|
|
|
233
|
-
### Étape 7 :
|
|
185
|
+
### Étape 7 : Créez des composants et hooks sensibles à la locale
|
|
234
186
|
|
|
235
187
|
Créez un composant `LocalizedLink` pour une navigation sensible à la locale :
|
|
236
188
|
|
|
237
|
-
```tsx fileName="src/components/localized-link.tsx"
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
import { Link, type
|
|
241
|
-
import { getLocalizedUrl } from "intlayer";
|
|
189
|
+
```tsx fileName="src/components/localized-link.tsx"
|
|
190
|
+
import type { FC } from "react";
|
|
191
|
+
|
|
192
|
+
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
242
193
|
import { useLocale } from "react-intlayer";
|
|
243
194
|
|
|
195
|
+
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
196
|
+
|
|
197
|
+
// Utilitaire principal
|
|
198
|
+
export type RemoveLocaleParam<T> = T extends string
|
|
199
|
+
? RemoveLocaleFromString<T>
|
|
200
|
+
: T;
|
|
201
|
+
|
|
202
|
+
export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
|
|
203
|
+
|
|
204
|
+
type CollapseDoubleSlashes<S extends string> =
|
|
205
|
+
S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
|
|
206
|
+
|
|
244
207
|
type LocalizedLinkProps = {
|
|
245
|
-
to
|
|
246
|
-
} & Omit<
|
|
208
|
+
to?: To;
|
|
209
|
+
} & Omit<LinkComponentProps, "to">;
|
|
247
210
|
|
|
248
|
-
|
|
249
|
-
|
|
211
|
+
// Helpers
|
|
212
|
+
type RemoveAll<
|
|
213
|
+
S extends string,
|
|
214
|
+
Sub extends string,
|
|
215
|
+
> = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
|
|
250
216
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
217
|
+
type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
218
|
+
RemoveAll<S, typeof LOCALE_ROUTE>
|
|
219
|
+
>;
|
|
254
220
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
: getLocalizedUrl(props.to, locale);
|
|
221
|
+
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
222
|
+
const { locale } = useLocale();
|
|
258
223
|
|
|
259
|
-
return
|
|
260
|
-
|
|
224
|
+
return (
|
|
225
|
+
<Link
|
|
226
|
+
{...props}
|
|
227
|
+
params={{
|
|
228
|
+
locale,
|
|
229
|
+
...(typeof props?.params === "object" ? props?.params : {}),
|
|
230
|
+
}}
|
|
231
|
+
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
232
|
+
/>
|
|
233
|
+
);
|
|
234
|
+
};
|
|
261
235
|
```
|
|
262
236
|
|
|
263
|
-
|
|
237
|
+
Ce composant a deux objectifs :
|
|
264
238
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
// eslint-disable-next-line no-restricted-imports
|
|
268
|
-
import { NavigateOptions, useNavigate } from "@tanstack/react-router";
|
|
269
|
-
import { getLocalizedUrl } from "intlayer";
|
|
270
|
-
import { useLocale } from "react-intlayer";
|
|
239
|
+
- Supprimer le préfixe `{-$locale}` inutile de l'URL.
|
|
240
|
+
- Injecter le paramètre de locale dans l'URL pour garantir que l'utilisateur est directement redirigé vers la route localisée.
|
|
271
241
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
242
|
+
Ensuite, nous pouvons créer un hook `useLocalizedNavigate` pour la navigation programmatique :
|
|
243
|
+
|
|
244
|
+
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
245
|
+
import { useLocale } from "react-intlayer";
|
|
246
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
247
|
+
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
248
|
+
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
275
249
|
|
|
276
250
|
export const useLocalizedNavigate = () => {
|
|
277
251
|
const navigate = useNavigate();
|
|
252
|
+
|
|
278
253
|
const { locale } = useLocale();
|
|
279
254
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
255
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
256
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
257
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
258
|
+
? "/"
|
|
259
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
260
|
+
? `/${Rest}`
|
|
261
|
+
: never;
|
|
262
|
+
|
|
263
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
264
|
+
|
|
265
|
+
interface LocalizedNavigate {
|
|
266
|
+
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
267
|
+
(
|
|
268
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
269
|
+
): ReturnType<typeof navigate>;
|
|
270
|
+
}
|
|
283
271
|
|
|
284
|
-
const localizedNavigate = (
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
272
|
+
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
273
|
+
if (typeof args === "string") {
|
|
274
|
+
return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
|
|
275
|
+
}
|
|
288
276
|
|
|
289
|
-
|
|
277
|
+
const { to, ...rest } = args;
|
|
278
|
+
|
|
279
|
+
const localedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
280
|
+
|
|
281
|
+
return navigate({ to: localedTo, params: { locale, ...rest } as any });
|
|
290
282
|
};
|
|
291
283
|
|
|
292
284
|
return localizedNavigate;
|
|
@@ -297,23 +289,9 @@ export const useLocalizedNavigate = () => {
|
|
|
297
289
|
|
|
298
290
|
Accédez à vos dictionnaires de contenu dans toute votre application :
|
|
299
291
|
|
|
300
|
-
#### Page de redirection racine
|
|
301
|
-
|
|
302
|
-
```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
|
|
303
|
-
// src/routes/page.tsx
|
|
304
|
-
import { useLocale } from "react-intlayer";
|
|
305
|
-
import { Navigate } from "react-router";
|
|
306
|
-
|
|
307
|
-
export default function Page() {
|
|
308
|
-
const { locale } = useLocale();
|
|
309
|
-
|
|
310
|
-
return <Navigate replace to={locale} />;
|
|
311
|
-
}
|
|
312
|
-
```
|
|
313
|
-
|
|
314
292
|
#### Page d'accueil localisée
|
|
315
293
|
|
|
316
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
294
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
317
295
|
import { createFileRoute } from "@tanstack/react-router";
|
|
318
296
|
import { getIntlayer } from "intlayer";
|
|
319
297
|
import { useIntlayer } from "react-intlayer";
|
|
@@ -342,16 +320,15 @@ function RouteComponent() {
|
|
|
342
320
|
const navigate = useLocalizedNavigate();
|
|
343
321
|
|
|
344
322
|
return (
|
|
345
|
-
<div
|
|
346
|
-
<div
|
|
323
|
+
<div>
|
|
324
|
+
<div>
|
|
347
325
|
{content.title}
|
|
348
326
|
<LocaleSwitcher />
|
|
349
|
-
<div
|
|
350
|
-
<a href="/">Index</a>
|
|
327
|
+
<div>
|
|
351
328
|
<LocalizedLink to="/">{content.links.home}</LocalizedLink>
|
|
352
329
|
<LocalizedLink to="/about">{content.links.about}</LocalizedLink>
|
|
353
330
|
</div>
|
|
354
|
-
<div
|
|
331
|
+
<div>
|
|
355
332
|
<button onClick={() => navigate({ to: "/" })}>
|
|
356
333
|
{content.links.home}
|
|
357
334
|
</button>
|
|
@@ -371,57 +348,65 @@ function RouteComponent() {
|
|
|
371
348
|
|
|
372
349
|
Créez un composant pour permettre aux utilisateurs de changer de langue :
|
|
373
350
|
|
|
374
|
-
```tsx fileName="src/components/locale-switcher.tsx"
|
|
351
|
+
```tsx fileName="src/components/locale-switcher.tsx"
|
|
352
|
+
import type { FC } from "react";
|
|
353
|
+
|
|
375
354
|
import { useLocation } from "@tanstack/react-router";
|
|
376
|
-
import {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
const {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
const { availableLocales, locale, setLocale } = useLocale({
|
|
389
|
-
onLocaleChange: (newLocale) => {
|
|
390
|
-
const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
|
|
391
|
-
location.replace(pathWithLocale);
|
|
392
|
-
},
|
|
393
|
-
});
|
|
355
|
+
import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
|
|
356
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
357
|
+
|
|
358
|
+
import { LocalizedLink, To } from "./localized-link";
|
|
359
|
+
|
|
360
|
+
export const LocaleSwitcher: FC = () => {
|
|
361
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
362
|
+
const { pathname } = useLocation();
|
|
363
|
+
|
|
364
|
+
const { availableLocales, locale } = useLocale();
|
|
365
|
+
|
|
366
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
394
367
|
|
|
395
368
|
return (
|
|
396
|
-
<
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
369
|
+
<ol>
|
|
370
|
+
{availableLocales.map((localeEl) => (
|
|
371
|
+
<li key={localeEl}>
|
|
372
|
+
<LocalizedLink
|
|
373
|
+
aria-current={localeEl === locale ? "page" : undefined}
|
|
374
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
375
|
+
onClick={() => setLocaleCookie(localeEl)}
|
|
376
|
+
params={{ locale: localeEl }}
|
|
377
|
+
to={pathWithoutLocale as To}
|
|
378
|
+
>
|
|
379
|
+
<span>
|
|
380
|
+
{/* Locale - ex. FR */}
|
|
381
|
+
{localeItem}
|
|
382
|
+
</span>
|
|
383
|
+
<span>
|
|
384
|
+
{/* Langue dans sa propre locale - ex. Français */}
|
|
385
|
+
{getLocaleName(localeItem, locale)}
|
|
386
|
+
</span>
|
|
387
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
388
|
+
{/* Langue dans la locale courante - ex. Francés avec la locale courante définie sur Locales.SPANISH */}
|
|
389
|
+
{getLocaleName(localeItem)}
|
|
390
|
+
</span>
|
|
391
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
392
|
+
{/* Langue en anglais - ex. French */}
|
|
393
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
394
|
+
</span>
|
|
395
|
+
</LocalizedLink>
|
|
396
|
+
</li>
|
|
412
397
|
))}
|
|
413
|
-
</
|
|
398
|
+
</ol>
|
|
414
399
|
);
|
|
415
|
-
}
|
|
400
|
+
};
|
|
416
401
|
```
|
|
417
402
|
|
|
418
403
|
> Pour en savoir plus sur le hook `useLocale`, consultez la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/react-intlayer/useLocale.md).
|
|
419
404
|
|
|
420
|
-
### Étape 10 : Ajouter la gestion des attributs HTML (
|
|
405
|
+
### Étape 10 : Ajouter la gestion des attributs HTML (Optionnel)
|
|
421
406
|
|
|
422
407
|
Créez un hook pour gérer les attributs lang et dir du HTML :
|
|
423
408
|
|
|
424
|
-
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
409
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
425
410
|
// src/hooks/useI18nHTMLAttributes.tsx
|
|
426
411
|
import { getHTMLTextDir } from "intlayer";
|
|
427
412
|
import { useEffect } from "react";
|
|
@@ -439,9 +424,8 @@ export const useI18nHTMLAttributes = () => {
|
|
|
439
424
|
|
|
440
425
|
Ensuite, utilisez-le dans votre composant racine :
|
|
441
426
|
|
|
442
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
427
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
443
428
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
444
|
-
import { configuration } from "intlayer";
|
|
445
429
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
446
430
|
|
|
447
431
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importer le hook
|
|
@@ -453,43 +437,44 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
453
437
|
function LayoutComponent() {
|
|
454
438
|
useI18nHTMLAttributes(); // ajouter cette ligne
|
|
455
439
|
|
|
440
|
+
const { defaultLocale } = useLocale();
|
|
456
441
|
const { locale } = Route.useParams();
|
|
457
442
|
|
|
458
443
|
return (
|
|
459
|
-
<IntlayerProvider locale={locale}>
|
|
444
|
+
<IntlayerProvider locale={locale ?? defaultLocale}>
|
|
460
445
|
<Outlet />
|
|
461
446
|
</IntlayerProvider>
|
|
462
447
|
);
|
|
463
448
|
}
|
|
464
449
|
```
|
|
465
450
|
|
|
466
|
-
|
|
451
|
+
---
|
|
467
452
|
|
|
468
|
-
|
|
453
|
+
### Étape 11 : Ajouter un middleware (Optionnel)
|
|
469
454
|
|
|
470
|
-
|
|
471
|
-
# Construire les dictionnaires Intlayer
|
|
472
|
-
npm run intlayer:build
|
|
455
|
+
Vous pouvez également utiliser le `intlayerMiddleware` pour ajouter un routage côté serveur à votre application. Ce plugin détectera automatiquement la locale actuelle en fonction de l'URL et définira le cookie de locale approprié. Si aucune locale n'est spécifiée, le plugin déterminera la locale la plus appropriée en fonction des préférences linguistiques du navigateur de l'utilisateur. Si aucune locale n'est détectée, il redirigera vers la locale par défaut.
|
|
473
456
|
|
|
474
|
-
|
|
475
|
-
npm run dev
|
|
476
|
-
```
|
|
457
|
+
> Notez que pour utiliser le `intlayerMiddleware` en production, vous devez déplacer le paquet `vite-intlayer` de `devDependencies` vers `dependencies`.
|
|
477
458
|
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
|
|
459
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
460
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
461
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
462
|
+
import { defineConfig } from "vite";
|
|
463
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
464
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
481
465
|
|
|
482
|
-
|
|
483
|
-
|
|
466
|
+
export default defineConfig({
|
|
467
|
+
plugins: [
|
|
468
|
+
tailwindcss(),
|
|
469
|
+
reactRouter(),
|
|
470
|
+
tsconfigPaths(),
|
|
471
|
+
intlayer(),
|
|
472
|
+
intlayerMiddleware(),
|
|
473
|
+
],
|
|
474
|
+
});
|
|
484
475
|
```
|
|
485
476
|
|
|
486
|
-
|
|
487
|
-
# Construire les dictionnaires Intlayer
|
|
488
|
-
yarn intlayer:build
|
|
489
|
-
|
|
490
|
-
# Démarrer le serveur de développement
|
|
491
|
-
yarn dev
|
|
492
|
-
```
|
|
477
|
+
---
|
|
493
478
|
|
|
494
479
|
### Étape 12 : Configurer TypeScript (Optionnel)
|
|
495
480
|
|
|
@@ -499,9 +484,7 @@ Assurez-vous que votre configuration TypeScript inclut les types générés auto
|
|
|
499
484
|
|
|
500
485
|
```json5 fileName="tsconfig.json"
|
|
501
486
|
{
|
|
502
|
-
|
|
503
|
-
// ... vos configurations TypeScript existantes
|
|
504
|
-
},
|
|
487
|
+
// ... vos configurations existantes
|
|
505
488
|
include: [
|
|
506
489
|
// ... vos inclusions existantes
|
|
507
490
|
".intlayer/**/*.ts", // Inclure les types générés automatiquement
|
|
@@ -509,11 +492,13 @@ Assurez-vous que votre configuration TypeScript inclut les types générés auto
|
|
|
509
492
|
}
|
|
510
493
|
```
|
|
511
494
|
|
|
495
|
+
---
|
|
496
|
+
|
|
512
497
|
### Configuration Git
|
|
513
498
|
|
|
514
|
-
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les
|
|
499
|
+
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les committer dans votre dépôt Git.
|
|
515
500
|
|
|
516
|
-
Pour ce faire, vous pouvez ajouter les instructions suivantes
|
|
501
|
+
Pour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier `.gitignore` :
|
|
517
502
|
|
|
518
503
|
```plaintext fileName=".gitignore"
|
|
519
504
|
# Ignorer les fichiers générés par Intlayer
|
|
@@ -522,67 +507,9 @@ Pour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier
|
|
|
522
507
|
|
|
523
508
|
---
|
|
524
509
|
|
|
525
|
-
### Étape 13 : Créer une redirection (Optionnel)
|
|
526
|
-
|
|
527
|
-
```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
|
|
528
|
-
function LayoutComponent() {
|
|
529
|
-
useI18nHTMLAttributes();
|
|
530
|
-
|
|
531
|
-
const { locale } = Route.useParams();
|
|
532
|
-
const { locale: selectedLocale } = useLocale();
|
|
533
|
-
const { defaultLocale } = configuration.internationalization;
|
|
534
|
-
const { prefixDefault } = configuration.middleware;
|
|
535
|
-
|
|
536
|
-
// Rediriger vers la locale par défaut si aucune locale n'est présente dans l'URL lorsque prefixDefault est vrai
|
|
537
|
-
if (selectedLocale === defaultLocale && !locale && prefixDefault) {
|
|
538
|
-
return <Navigate replace to={defaultLocale} />;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
// Rediriger vers la locale sélectionnée si la locale dans l'URL ne correspond pas à la locale sélectionnée
|
|
542
|
-
if (selectedLocale !== defaultLocale && !locale) {
|
|
543
|
-
return <Navigate replace to={selectedLocale} />;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
return (
|
|
547
|
-
<IntlayerProvider locale={locale}>
|
|
548
|
-
<Outlet />
|
|
549
|
-
</IntlayerProvider>
|
|
550
|
-
);
|
|
551
|
-
}
|
|
552
|
-
```
|
|
553
|
-
|
|
554
|
-
## Déploiement en Production
|
|
555
|
-
|
|
556
|
-
Lors du déploiement de votre application :
|
|
557
|
-
|
|
558
|
-
1. **Construisez votre application :**
|
|
559
|
-
|
|
560
|
-
```bash
|
|
561
|
-
npm run build
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
2. **Générez les dictionnaires Intlayer :**
|
|
565
|
-
|
|
566
|
-
```bash
|
|
567
|
-
npm run intlayer:build
|
|
568
|
-
```
|
|
569
|
-
|
|
570
|
-
3. **Déplacez `vite-intlayer` dans les dépendances** si vous utilisez le middleware en production :
|
|
571
|
-
```bash
|
|
572
|
-
npm install vite-intlayer --save
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
Votre application prendra désormais en charge :
|
|
576
|
-
|
|
577
|
-
- **Structure des URL** : `/en`, `/en/about`, `/tr`, `/tr/about`
|
|
578
|
-
- **Détection automatique de la langue** basée sur les préférences du navigateur
|
|
579
|
-
- **Routage sensible à la langue** avec Tanstack Start
|
|
580
|
-
- **Support TypeScript** avec des types générés automatiquement
|
|
581
|
-
- **Rendu côté serveur** avec une gestion correcte de la langue
|
|
582
|
-
|
|
583
510
|
## Extension VS Code
|
|
584
511
|
|
|
585
|
-
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l
|
|
512
|
+
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l’**extension officielle Intlayer pour VS Code**.
|
|
586
513
|
|
|
587
514
|
[Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
588
515
|
|
|
@@ -593,7 +520,7 @@ Cette extension offre :
|
|
|
593
520
|
- **Aperçus en ligne** du contenu traduit.
|
|
594
521
|
- **Actions rapides** pour créer et mettre à jour facilement les traductions.
|
|
595
522
|
|
|
596
|
-
Pour plus de détails sur l
|
|
523
|
+
Pour plus de détails sur l'utilisation de l'extension, consultez la [documentation de l'extension VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).
|
|
597
524
|
|
|
598
525
|
---
|
|
599
526
|
|
|
@@ -612,7 +539,7 @@ Pour aller plus loin, vous pouvez implémenter l’[éditeur visuel](https://git
|
|
|
612
539
|
- [Déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md)
|
|
613
540
|
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
|
|
614
541
|
|
|
615
|
-
Ce guide complet
|
|
542
|
+
Ce guide complet fournit tout ce dont vous avez besoin pour intégrer Intlayer avec Tanstack Start afin de créer une application entièrement internationalisée avec un routage sensible à la locale et une prise en charge de TypeScript.
|
|
616
543
|
|
|
617
544
|
## Historique de la documentation
|
|
618
545
|
|