@intlayer/docs 8.5.2 → 8.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ar/intlayer_with_react_router_v7.md +2 -4
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/ar/intlayer_with_svelte_kit.md +2 -2
- package/docs/ar/intlayer_with_tanstack+solid.md +0 -17
- package/docs/ar/intlayer_with_tanstack.md +0 -8
- package/docs/ar/intlayer_with_vite+lit.md +0 -1
- package/docs/ar/intlayer_with_vite+solid.md +0 -1
- package/docs/ar/intlayer_with_vite+svelte.md +1 -1
- package/docs/bn/intlayer_with_vite+lit.md +0 -1
- package/docs/cs/intlayer_with_vite+lit.md +0 -1
- package/docs/de/intlayer_with_react_router_v7.md +2 -4
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +1 -2
- package/docs/de/intlayer_with_svelte_kit.md +2 -2
- package/docs/de/intlayer_with_tanstack+solid.md +78 -21
- package/docs/de/intlayer_with_tanstack.md +96 -28
- package/docs/de/intlayer_with_vite+lit.md +0 -1
- package/docs/de/intlayer_with_vite+solid.md +0 -1
- package/docs/de/intlayer_with_vite+svelte.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +1 -2
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/en/intlayer_with_svelte_kit.md +2 -2
- package/docs/en/intlayer_with_tanstack+solid.md +79 -19
- package/docs/en/intlayer_with_tanstack.md +81 -10
- package/docs/en/intlayer_with_vite+lit.md +0 -1
- package/docs/en/intlayer_with_vite+solid.md +0 -1
- package/docs/en/intlayer_with_vite+svelte.md +5 -6
- package/docs/en-GB/intlayer_with_react_router_v7.md +2 -4
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/en-GB/intlayer_with_svelte_kit.md +2 -2
- package/docs/en-GB/intlayer_with_tanstack+solid.md +71 -17
- package/docs/en-GB/intlayer_with_tanstack.md +74 -9
- package/docs/en-GB/intlayer_with_vite+lit.md +0 -1
- package/docs/en-GB/intlayer_with_vite+solid.md +0 -1
- package/docs/en-GB/intlayer_with_vite+svelte.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +2 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/es/intlayer_with_svelte_kit.md +2 -2
- package/docs/es/intlayer_with_tanstack+solid.md +78 -21
- package/docs/es/intlayer_with_tanstack.md +96 -28
- package/docs/es/intlayer_with_vite+lit.md +0 -1
- package/docs/es/intlayer_with_vite+solid.md +0 -1
- package/docs/es/intlayer_with_vite+svelte.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +2 -4
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/fr/intlayer_with_svelte_kit.md +3 -3
- package/docs/fr/intlayer_with_tanstack+solid.md +78 -21
- package/docs/fr/intlayer_with_tanstack.md +96 -28
- package/docs/fr/intlayer_with_vite+lit.md +0 -1
- package/docs/fr/intlayer_with_vite+solid.md +0 -1
- package/docs/fr/intlayer_with_vite+svelte.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +2 -4
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/hi/intlayer_with_svelte_kit.md +2 -2
- package/docs/hi/intlayer_with_tanstack+solid.md +0 -17
- package/docs/hi/intlayer_with_tanstack.md +0 -8
- package/docs/hi/intlayer_with_vite+lit.md +0 -1
- package/docs/hi/intlayer_with_vite+solid.md +0 -1
- package/docs/hi/intlayer_with_vite+svelte.md +1 -1
- package/docs/id/intlayer_with_react_router_v7.md +2 -4
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/id/intlayer_with_svelte_kit.md +2 -2
- package/docs/id/intlayer_with_tanstack+solid.md +0 -17
- package/docs/id/intlayer_with_tanstack.md +0 -8
- package/docs/id/intlayer_with_vite+lit.md +0 -1
- package/docs/id/intlayer_with_vite+solid.md +0 -1
- package/docs/id/intlayer_with_vite+svelte.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +2 -4
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/it/intlayer_with_svelte_kit.md +3 -3
- package/docs/it/intlayer_with_tanstack+solid.md +76 -19
- package/docs/it/intlayer_with_tanstack.md +96 -30
- package/docs/it/intlayer_with_vite+lit.md +0 -1
- package/docs/it/intlayer_with_vite+solid.md +0 -1
- package/docs/it/intlayer_with_vite+svelte.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +1 -2
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/ja/intlayer_with_tanstack+solid.md +81 -22
- package/docs/ja/intlayer_with_tanstack.md +779 -93
- package/docs/ja/intlayer_with_vite+lit.md +0 -1
- package/docs/ja/intlayer_with_vite+solid.md +0 -1
- package/docs/ja/intlayer_with_vite+svelte.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +2 -4
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/ko/intlayer_with_svelte_kit.md +2 -2
- package/docs/ko/intlayer_with_tanstack+solid.md +79 -22
- package/docs/ko/intlayer_with_tanstack.md +95 -101
- package/docs/ko/intlayer_with_vite+lit.md +0 -1
- package/docs/ko/intlayer_with_vite+solid.md +0 -1
- package/docs/ko/intlayer_with_vite+svelte.md +1 -1
- package/docs/nl/intlayer_with_vite+lit.md +0 -1
- package/docs/pl/intlayer_with_react_router_v7.md +2 -4
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/pl/intlayer_with_svelte_kit.md +2 -2
- package/docs/pl/intlayer_with_tanstack+solid.md +0 -17
- package/docs/pl/intlayer_with_tanstack.md +0 -8
- package/docs/pl/intlayer_with_vite+lit.md +0 -1
- package/docs/pl/intlayer_with_vite+solid.md +0 -1
- package/docs/pl/intlayer_with_vite+svelte.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +1 -2
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/pt/intlayer_with_svelte_kit.md +3 -3
- package/docs/pt/intlayer_with_tanstack+solid.md +76 -19
- package/docs/pt/intlayer_with_tanstack.md +96 -30
- package/docs/pt/intlayer_with_vite+lit.md +0 -1
- package/docs/pt/intlayer_with_vite+solid.md +0 -1
- package/docs/pt/intlayer_with_vite+svelte.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +2 -4
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/ru/intlayer_with_svelte_kit.md +2 -2
- package/docs/ru/intlayer_with_tanstack+solid.md +78 -21
- package/docs/ru/intlayer_with_tanstack.md +99 -33
- package/docs/ru/intlayer_with_vite+lit.md +0 -1
- package/docs/ru/intlayer_with_vite+solid.md +0 -1
- package/docs/ru/intlayer_with_vite+svelte.md +1 -1
- package/docs/tr/intlayer_with_react_router_v7.md +2 -4
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/tr/intlayer_with_svelte_kit.md +2 -2
- package/docs/tr/intlayer_with_tanstack+solid.md +0 -17
- package/docs/tr/intlayer_with_tanstack.md +0 -8
- package/docs/tr/intlayer_with_vite+lit.md +0 -1
- package/docs/tr/intlayer_with_vite+solid.md +0 -1
- package/docs/tr/intlayer_with_vite+svelte.md +1 -1
- package/docs/uk/intlayer_with_react_router_v7.md +1 -2
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/uk/intlayer_with_svelte_kit.md +2 -2
- package/docs/uk/intlayer_with_tanstack+solid.md +0 -17
- package/docs/uk/intlayer_with_tanstack.md +0 -8
- package/docs/uk/intlayer_with_vite+lit.md +0 -1
- package/docs/uk/intlayer_with_vite+solid.md +0 -1
- package/docs/uk/intlayer_with_vite+svelte.md +1 -1
- package/docs/ur/intlayer_with_vite+lit.md +0 -1
- package/docs/vi/intlayer_with_react_router_v7.md +2 -4
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/vi/intlayer_with_svelte_kit.md +2 -2
- package/docs/vi/intlayer_with_tanstack+solid.md +0 -17
- package/docs/vi/intlayer_with_tanstack.md +0 -8
- package/docs/vi/intlayer_with_vite+lit.md +0 -1
- package/docs/vi/intlayer_with_vite+solid.md +0 -1
- package/docs/vi/intlayer_with_vite+svelte.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +2 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +2 -4
- package/docs/zh/intlayer_with_svelte_kit.md +2 -2
- package/docs/zh/intlayer_with_tanstack+solid.md +80 -23
- package/docs/zh/intlayer_with_tanstack.md +96 -104
- package/docs/zh/intlayer_with_vite+lit.md +0 -1
- package/docs/zh/intlayer_with_vite+solid.md +0 -1
- package/docs/zh/intlayer_with_vite+svelte.md +1 -1
- package/package.json +8 -8
|
@@ -370,7 +370,7 @@ pour accéder à sa valeur réactive (par exemple, `$content.title`).
|
|
|
370
370
|
<!-- Afficher le contenu comme contenu simple -->
|
|
371
371
|
<h1>{$content.title}</h1>
|
|
372
372
|
<!-- Pour rendre le contenu éditable via l'éditeur -->
|
|
373
|
-
<h1
|
|
373
|
+
<h1>{@const Title = $content.title}<Title /></h1>
|
|
374
374
|
<!-- Pour afficher le contenu en tant que chaîne -->
|
|
375
375
|
<div aria-label={$content.title.value}></div>
|
|
376
376
|
```
|
|
@@ -726,7 +726,7 @@ Pour pouvoir visualiser le sélecteur de l'éditeur intlayer, vous devrez utilis
|
|
|
726
726
|
<h1>{$content.title}</h1>
|
|
727
727
|
|
|
728
728
|
<!-- Rendre le contenu comme un composant (requis par l'éditeur) -->
|
|
729
|
-
|
|
729
|
+
{@const Component = $content.component}<Component />
|
|
730
730
|
</div>
|
|
731
731
|
```
|
|
732
732
|
|
|
@@ -914,7 +914,7 @@ Pour pouvoir visualiser le sélecteur de l'éditeur intlayer, vous devrez utilis
|
|
|
914
914
|
<h1>{$content.title}</h1>
|
|
915
915
|
|
|
916
916
|
<!-- Rendre le contenu comme un composant (requis par l'éditeur) -->
|
|
917
|
-
|
|
917
|
+
{@const Component = $content.component}<Component />
|
|
918
918
|
</div>
|
|
919
919
|
```
|
|
920
920
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-25
|
|
3
|
-
updatedAt: 2026-03-
|
|
3
|
+
updatedAt: 2026-03-29
|
|
4
4
|
title: i18n Tanstack Start - Comment traduire une application Tanstack Start en utilisant Solid.js en 2026
|
|
5
5
|
description: Apprenez à ajouter l'internationalisation (i18n) à votre application Tanstack Start en utilisant Intlayer et Solid.js. Suivez ce guide complet pour rendre votre application multilingue avec un routage tenant compte de la localisation.
|
|
6
6
|
keywords:
|
|
@@ -12,6 +12,7 @@ keywords:
|
|
|
12
12
|
- i18n
|
|
13
13
|
- TypeScript
|
|
14
14
|
- Routage de localisation
|
|
15
|
+
- Sitemap
|
|
15
16
|
slugs:
|
|
16
17
|
- doc
|
|
17
18
|
- environment
|
|
@@ -140,16 +141,12 @@ Ajoutez le plugin intlayer dans votre configuration :
|
|
|
140
141
|
import { intlayer } from "vite-intlayer";
|
|
141
142
|
import { defineConfig } from "vite";
|
|
142
143
|
import { devtools } from "@tanstack/devtools-vite";
|
|
143
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
144
144
|
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
145
145
|
import solidPlugin from "vite-plugin-solid";
|
|
146
146
|
|
|
147
147
|
export default defineConfig({
|
|
148
148
|
plugins: [
|
|
149
149
|
devtools(),
|
|
150
|
-
viteTsConfigPaths({
|
|
151
|
-
projects: ["./tsconfig.json"],
|
|
152
|
-
}),
|
|
153
150
|
tanstackStart({
|
|
154
151
|
router: {
|
|
155
152
|
routeFileIgnorePattern:
|
|
@@ -221,9 +218,6 @@ function RootComponent() {
|
|
|
221
218
|
}
|
|
222
219
|
```
|
|
223
220
|
|
|
224
|
-
> [!NOTE]
|
|
225
|
-
> Dans Solid, `useMatches` retourne un **signal** (accesseur réactif). Utilisez `matches()` (avec parenthèses) pour accéder à la valeur actuelle de manière réactive.
|
|
226
|
-
|
|
227
221
|
### Étape 6 : Créer la mise en page de la langue (Optionnel)
|
|
228
222
|
|
|
229
223
|
Créez une mise en page qui gère le préfixe de la langue et effectue la validation. Cette mise en page garantira que seules les langues valides sont traitées.
|
|
@@ -415,7 +409,6 @@ function RouteComponent() {
|
|
|
415
409
|
}
|
|
416
410
|
```
|
|
417
411
|
|
|
418
|
-
> [!NOTE]
|
|
419
412
|
> Dans Solid, `useIntlayer` retourne une fonction **accesseur** (par exemple, `content()`). Vous devez appeler cette fonction pour accéder au contenu réactif.
|
|
420
413
|
>
|
|
421
414
|
> Pour en savoir plus sur le hook `useIntlayer`, reportez-vous à la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/solid-intlayer/useIntlayer.md).
|
|
@@ -460,7 +453,6 @@ export const LocaleSwitcher = () => {
|
|
|
460
453
|
export default LocaleSwitcher;
|
|
461
454
|
```
|
|
462
455
|
|
|
463
|
-
> [!NOTE]
|
|
464
456
|
> Dans Solid, `locale` provenant de `useLocale` est un **accesseur de signal**. Utilisez `locale()` (avec parenthèses) pour lire sa valeur actuelle de manière réactive.
|
|
465
457
|
>
|
|
466
458
|
> Pour en savoir plus sur le hook `useLocale`, reportez-vous à la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/solid-intlayer/useLocale.md).
|
|
@@ -502,15 +494,11 @@ import solid from "vite-plugin-solid";
|
|
|
502
494
|
import { nitro } from "nitro/vite";
|
|
503
495
|
import { defineConfig } from "vite";
|
|
504
496
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
505
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
506
497
|
|
|
507
498
|
export default defineConfig({
|
|
508
499
|
plugins: [
|
|
509
500
|
intlayerProxy(), // Le proxy doit être placé avant le serveur si vous utilisez Nitro
|
|
510
501
|
nitro(),
|
|
511
|
-
viteTsConfigPaths({
|
|
512
|
-
projects: ["./tsconfig.json"],
|
|
513
|
-
}),
|
|
514
502
|
intlayer(),
|
|
515
503
|
tanstackStart({
|
|
516
504
|
router: {
|
|
@@ -551,7 +539,7 @@ export const Route = createFileRoute("/{-$locale}/")({
|
|
|
551
539
|
|
|
552
540
|
---
|
|
553
541
|
|
|
554
|
-
### Étape
|
|
542
|
+
### Étape 13 : Récupérer la langue dans vos actions serveur (Optionnel)
|
|
555
543
|
|
|
556
544
|
Vous voudrez peut-être accéder à la langue actuelle depuis vos actions serveur ou vos points de terminaison d'API.
|
|
557
545
|
Vous pouvez le faire en utilisant l'utilitaire `getLocale` d'`intlayer`.
|
|
@@ -588,7 +576,7 @@ export const getLocaleServer = createServerFn().handler(async () => {
|
|
|
588
576
|
|
|
589
577
|
---
|
|
590
578
|
|
|
591
|
-
### Étape
|
|
579
|
+
### Étape 14 : Gérer les pages non trouvées (Optionnel)
|
|
592
580
|
|
|
593
581
|
Lorsqu'un utilisateur visite une page inexistante, vous pouvez afficher une page 404 personnalisée et le préfixe de langue peut impacter la manière dont la page non trouvée est déclenchée.
|
|
594
582
|
|
|
@@ -662,7 +650,7 @@ export const Route = createFileRoute("/{-$locale}/$")({
|
|
|
662
650
|
});
|
|
663
651
|
```
|
|
664
652
|
|
|
665
|
-
### (Optionnel) Étape
|
|
653
|
+
### (Optionnel) Étape 15 : Extraire le contenu de vos composants
|
|
666
654
|
|
|
667
655
|
Si vous avez une base de code existante, transformer des milliers de fichiers peut prendre du temps.
|
|
668
656
|
|
|
@@ -803,16 +791,12 @@ Mettez à jour votre `vite.config.ts` pour inclure le plugin `intlayerCompiler`
|
|
|
803
791
|
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
804
792
|
import { defineConfig } from "vite";
|
|
805
793
|
import { devtools } from "@tanstack/devtools-vite";
|
|
806
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
807
794
|
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
808
795
|
import solidPlugin from "vite-plugin-solid";
|
|
809
796
|
|
|
810
797
|
export default defineConfig({
|
|
811
798
|
plugins: [
|
|
812
799
|
devtools(),
|
|
813
|
-
viteTsConfigPaths({
|
|
814
|
-
projects: ["./tsconfig.json"],
|
|
815
|
-
}),
|
|
816
800
|
tanstackStart({
|
|
817
801
|
router: {
|
|
818
802
|
routeFileIgnorePattern:
|
|
@@ -847,6 +831,79 @@ bun run build # Ou bun run dev
|
|
|
847
831
|
|
|
848
832
|
---
|
|
849
833
|
|
|
834
|
+
### Étape 16 : Générer un Sitemap (Optionnel)
|
|
835
|
+
|
|
836
|
+
Intlayer est livré avec un générateur de sitemap intégré pour vous aider à créer facilement un sitemap pour votre application. Il gère les routes localisées et ajoute les métadonnées nécessaires pour les moteurs de recherche.
|
|
837
|
+
|
|
838
|
+
> Le sitemap généré par Intlayer prend en charge l'espace de noms `xhtml:link` (Hreflang XML Extensions). Contrairement aux générateurs de sitemap par défaut qui ne répertorient que les URL brutes, Intlayer crée automatiquement les liens bidirectionnels requis entre toutes les versions linguistiques d'une page (par exemple, `/about`, `/about?lang=fr` et `/about?lang=es`). Cela garantit que les moteurs de recherche indexent et servent correctement la bonne version linguistique au bon public.
|
|
839
|
+
|
|
840
|
+
Pour l'utiliser, vous devez d'abord configurer votre fichier `vite.config.ts` pour activer le pré-rendu de vos routes localisées et désactiver la génération de sitemap par défaut de TanStack Start.
|
|
841
|
+
|
|
842
|
+
```typescript fileName="vite.config.ts"
|
|
843
|
+
import { localeMap, localeFlatMap } from "intlayer";
|
|
844
|
+
// ... autres imports
|
|
845
|
+
|
|
846
|
+
export const pathList = ["", "/about", "/404"];
|
|
847
|
+
|
|
848
|
+
const localizedPages = localeFlatMap(({ urlPrefix }) =>
|
|
849
|
+
pathList.map((path) => ({
|
|
850
|
+
path: `${urlPrefix}${path}`,
|
|
851
|
+
prerender: {
|
|
852
|
+
enabled: true,
|
|
853
|
+
},
|
|
854
|
+
}))
|
|
855
|
+
);
|
|
856
|
+
|
|
857
|
+
export default defineConfig({
|
|
858
|
+
plugins: [
|
|
859
|
+
// ... autres plugins
|
|
860
|
+
tanstackStart({
|
|
861
|
+
// ... autres configurations
|
|
862
|
+
sitemap: {
|
|
863
|
+
enabled: false,
|
|
864
|
+
},
|
|
865
|
+
prerender: {
|
|
866
|
+
enabled: true,
|
|
867
|
+
crawlLinks: false,
|
|
868
|
+
concurrency: 10,
|
|
869
|
+
},
|
|
870
|
+
pages: localizedPages,
|
|
871
|
+
}),
|
|
872
|
+
],
|
|
873
|
+
});
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
Ensuite, créez une route `src/routes/sitemap[.]xml.ts` qui utilise la fonction `generateSitemap` :
|
|
877
|
+
|
|
878
|
+
```typescript fileName="src/routes/sitemap[.]xml.ts"
|
|
879
|
+
import { createFileRoute } from "@tanstack/solid-router";
|
|
880
|
+
import { generateSitemap } from "intlayer";
|
|
881
|
+
|
|
882
|
+
const SITE_URL = "http://localhost:3000";
|
|
883
|
+
|
|
884
|
+
export const Route = createFileRoute("/sitemap.xml")({
|
|
885
|
+
server: {
|
|
886
|
+
handlers: {
|
|
887
|
+
GET: async () => {
|
|
888
|
+
const sitemap = generateSitemap(
|
|
889
|
+
[
|
|
890
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
891
|
+
{ path: "/about", changefreq: "monthly", priority: 0.8 },
|
|
892
|
+
],
|
|
893
|
+
{ siteUrl: SITE_URL }
|
|
894
|
+
);
|
|
895
|
+
|
|
896
|
+
return new Response(sitemap, {
|
|
897
|
+
headers: { "Content-Type": "application/xml" },
|
|
898
|
+
});
|
|
899
|
+
},
|
|
900
|
+
},
|
|
901
|
+
},
|
|
902
|
+
});
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
850
907
|
### Étape 17 : Configurer TypeScript (Optionnel)
|
|
851
908
|
|
|
852
909
|
Intlayer utilise l'augmentation de module pour bénéficier des avantages de TypeScript et rendre votre base de code plus robuste.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-09
|
|
3
|
-
updatedAt: 2026-03-
|
|
3
|
+
updatedAt: 2026-03-29
|
|
4
4
|
title: Tanstack Start i18n - Comment traduire une application Tanstack Start en 2026
|
|
5
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 tenant compte de la locale.
|
|
6
6
|
keywords:
|
|
@@ -12,6 +12,7 @@ keywords:
|
|
|
12
12
|
- i18n
|
|
13
13
|
- TypeScript
|
|
14
14
|
- Routage par locale
|
|
15
|
+
- Sitemap
|
|
15
16
|
slugs:
|
|
16
17
|
- doc
|
|
17
18
|
- environment
|
|
@@ -160,14 +161,10 @@ import viteReact from "@vitejs/plugin-react";
|
|
|
160
161
|
import { nitro } from "nitro/vite";
|
|
161
162
|
import { defineConfig } from "vite";
|
|
162
163
|
import { intlayer } from "vite-intlayer";
|
|
163
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
164
164
|
|
|
165
165
|
const config = defineConfig({
|
|
166
166
|
plugins: [
|
|
167
167
|
nitro(),
|
|
168
|
-
viteTsConfigPaths({
|
|
169
|
-
projects: ["./tsconfig.json"],
|
|
170
|
-
}),
|
|
171
168
|
intlayer(),
|
|
172
169
|
tanstackStart({
|
|
173
170
|
router: {
|
|
@@ -593,15 +590,11 @@ import viteReact from "@vitejs/plugin-react";
|
|
|
593
590
|
import { nitro } from "nitro/vite";
|
|
594
591
|
import { defineConfig } from "vite";
|
|
595
592
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
596
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
597
593
|
|
|
598
594
|
export default defineConfig({
|
|
599
595
|
plugins: [
|
|
600
596
|
intlayerProxy(), // Le proxy doit être placé avant le serveur si vous utilisez Nitro
|
|
601
597
|
nitro(),
|
|
602
|
-
viteTsConfigPaths({
|
|
603
|
-
projects: ["./tsconfig.json"],
|
|
604
|
-
}),
|
|
605
598
|
intlayer(),
|
|
606
599
|
tanstackStart({
|
|
607
600
|
router: {
|
|
@@ -755,25 +748,7 @@ export const Route = createFileRoute("/{-$locale}/$")({
|
|
|
755
748
|
|
|
756
749
|
---
|
|
757
750
|
|
|
758
|
-
### Étape 15 :
|
|
759
|
-
|
|
760
|
-
Intlayer utilise l'augmentation de module pour bénéficier des avantages de TypeScript et rendre votre codebase plus robuste.
|
|
761
|
-
|
|
762
|
-
Assurez-vous que votre configuration TypeScript inclut les types autogénérés :
|
|
763
|
-
|
|
764
|
-
```json5 fileName="tsconfig.json"
|
|
765
|
-
{
|
|
766
|
-
// ... vos configurations existantes
|
|
767
|
-
include: [
|
|
768
|
-
// ... vos includes existants
|
|
769
|
-
".intlayer/**/*.ts", // Inclure les types auto-générés
|
|
770
|
-
],
|
|
771
|
-
}
|
|
772
|
-
```
|
|
773
|
-
|
|
774
|
-
---
|
|
775
|
-
|
|
776
|
-
### (Optionnel) Étape 16 : Extraire le contenu de vos composants
|
|
751
|
+
### (Optionnel) Étape 15 : Extraer le contenu de vos composants
|
|
777
752
|
|
|
778
753
|
Si vous avez une base de code existante, transformer des milliers de fichiers peut prendre beaucoup de temps.
|
|
779
754
|
|
|
@@ -931,6 +906,99 @@ bun run build # Or bun run dev
|
|
|
931
906
|
|
|
932
907
|
---
|
|
933
908
|
|
|
909
|
+
### Étape 16 : Générer un Sitemap (Optionnel)
|
|
910
|
+
|
|
911
|
+
Intlayer est livré avec un générateur de sitemap intégré pour vous aider à créer facilement un sitemap pour votre application. Il gère les routes localisées et ajoute les métadonnées nécessaires pour les moteurs de recherche.
|
|
912
|
+
|
|
913
|
+
> Le sitemap généré par Intlayer prend en charge l'espace de noms `xhtml:link` (Hreflang XML Extensions). Contrairement aux générateurs de sitemap par défaut qui ne répertorient que les URL brutes, Intlayer crée automatiquement les liens bidirectionnels requis entre toutes les versions linguistiques d'une page (par exemple, `/about`, `/about?lang=fr` et `/about?lang=es`). Cela garantit que les moteurs de recherche indexent et servent correctement la bonne version linguistique au bon public.
|
|
914
|
+
|
|
915
|
+
Pour l'utiliser, vous devez d'abord configurer votre fichier `vite.config.ts` pour activer le pré-rendu de vos routes localisées et désactiver la génération de sitemap par défaut de TanStack Start.
|
|
916
|
+
|
|
917
|
+
```typescript fileName="vite.config.ts"
|
|
918
|
+
import { localeFlatMap } from "intlayer";
|
|
919
|
+
// ... autres imports
|
|
920
|
+
|
|
921
|
+
export const pathList = ["", "/about", "/404"];
|
|
922
|
+
|
|
923
|
+
const localizedPages = localeFlatMap(({ urlPrefix }) =>
|
|
924
|
+
pathList.map((path) => ({
|
|
925
|
+
path: `${urlPrefix}${path}`,
|
|
926
|
+
prerender: {
|
|
927
|
+
enabled: true,
|
|
928
|
+
},
|
|
929
|
+
}))
|
|
930
|
+
);
|
|
931
|
+
|
|
932
|
+
export default defineConfig({
|
|
933
|
+
plugins: [
|
|
934
|
+
// ... autres plugins
|
|
935
|
+
tanstackStart({
|
|
936
|
+
// ... autres configurations
|
|
937
|
+
sitemap: {
|
|
938
|
+
enabled: false,
|
|
939
|
+
},
|
|
940
|
+
prerender: {
|
|
941
|
+
enabled: true,
|
|
942
|
+
crawlLinks: false,
|
|
943
|
+
concurrency: 10,
|
|
944
|
+
},
|
|
945
|
+
pages: localizedPages,
|
|
946
|
+
}),
|
|
947
|
+
],
|
|
948
|
+
});
|
|
949
|
+
```
|
|
950
|
+
|
|
951
|
+
Ensuite, créez une route `src/routes/sitemap[.]xml.ts` qui utilise la fonction `generateSitemap` :
|
|
952
|
+
|
|
953
|
+
```typescript fileName="src/routes/sitemap[.]xml.ts"
|
|
954
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
955
|
+
import { generateSitemap } from "intlayer";
|
|
956
|
+
|
|
957
|
+
const SITE_URL = (
|
|
958
|
+
import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
|
|
959
|
+
).replace(/\/$/, "");
|
|
960
|
+
|
|
961
|
+
export const Route = createFileRoute("/sitemap.xml")({
|
|
962
|
+
server: {
|
|
963
|
+
handlers: {
|
|
964
|
+
GET: async () => {
|
|
965
|
+
const sitemap = generateSitemap(
|
|
966
|
+
[
|
|
967
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
968
|
+
{ path: "/about", changefreq: "monthly", priority: 0.8 },
|
|
969
|
+
],
|
|
970
|
+
{ siteUrl: SITE_URL }
|
|
971
|
+
);
|
|
972
|
+
|
|
973
|
+
return new Response(sitemap, {
|
|
974
|
+
headers: { "Content-Type": "application/xml" },
|
|
975
|
+
});
|
|
976
|
+
},
|
|
977
|
+
},
|
|
978
|
+
},
|
|
979
|
+
});
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
---
|
|
983
|
+
|
|
984
|
+
### Étape 17 : Configurer TypeScript (Optionnel)
|
|
985
|
+
|
|
986
|
+
Intlayer utilise l'augmentation de module pour bénéficier des avantages de TypeScript et rendre votre codebase plus robuste.
|
|
987
|
+
|
|
988
|
+
Assurez-vous que votre configuration TypeScript inclut les types autogénérés :
|
|
989
|
+
|
|
990
|
+
```json5 fileName="tsconfig.json"
|
|
991
|
+
{
|
|
992
|
+
// ... vos configurations existantes
|
|
993
|
+
include: [
|
|
994
|
+
// ... vos includes existants
|
|
995
|
+
".intlayer/**/*.ts", // Inclure les types auto-générés
|
|
996
|
+
],
|
|
997
|
+
}
|
|
998
|
+
```
|
|
999
|
+
|
|
1000
|
+
---
|
|
1001
|
+
|
|
934
1002
|
### Configuration Git
|
|
935
1003
|
|
|
936
1004
|
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.
|
|
@@ -409,7 +409,6 @@ export class MyElement extends LitElement {
|
|
|
409
409
|
}
|
|
410
410
|
```
|
|
411
411
|
|
|
412
|
-
> [!NOTE]
|
|
413
412
|
> Lorsque vous avez besoin de la chaîne traduite dans un attribut HTML natif (ex: `alt`, `aria-label`, `title`), appelez `.value` sur le nœud terminal :
|
|
414
413
|
>
|
|
415
414
|
> ```typescript
|
|
@@ -315,7 +315,6 @@ const App: Component = () => (
|
|
|
315
315
|
export default App;
|
|
316
316
|
```
|
|
317
317
|
|
|
318
|
-
> [!NOTE]
|
|
319
318
|
> Dans Solid, `useIntlayer` retourne une fonction **accesseur** (par exemple, `content()`). Vous devez appeler cette fonction pour accéder au contenu réactif.
|
|
320
319
|
|
|
321
320
|
> Si vous souhaitez utiliser votre contenu dans un attribut `string`, tel que `alt`, `title`, `href`, `aria-label`, etc., vous devez appeler la valeur de la fonction, comme :
|
|
@@ -232,7 +232,7 @@ module.exports = appContent;
|
|
|
232
232
|
<!-- Afficher le contenu comme contenu simple -->
|
|
233
233
|
<h1>{$content.title}</h1>
|
|
234
234
|
<!-- Pour afficher le contenu éditable via l'éditeur -->
|
|
235
|
-
<h1
|
|
235
|
+
<h1>{@const Title = $content.title}<Title /></h1>
|
|
236
236
|
<!-- Pour afficher le contenu en tant que chaîne de caractères -->
|
|
237
237
|
<div aria-label={$content.title.value}></div>
|
|
238
238
|
```
|
|
@@ -175,10 +175,9 @@ module.exports = config;
|
|
|
175
175
|
import { reactRouter } from "@react-router/dev/vite";
|
|
176
176
|
import { defineConfig } from "vite";
|
|
177
177
|
import { intlayer } from "vite-intlayer";
|
|
178
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
179
178
|
|
|
180
179
|
export default defineConfig({
|
|
181
|
-
plugins: [reactRouter(),
|
|
180
|
+
plugins: [reactRouter(), intlayer()],
|
|
182
181
|
});
|
|
183
182
|
```
|
|
184
183
|
|
|
@@ -741,13 +740,12 @@ This comprehensive guide provides everything you need to integrate Intlayer with
|
|
|
741
740
|
import { reactRouter } from "@react-router/dev/vite";
|
|
742
741
|
import { defineConfig } from "vite";
|
|
743
742
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
744
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
745
743
|
|
|
746
744
|
export default defineConfig({
|
|
747
745
|
plugins: [
|
|
748
746
|
intlayerProxy(), // should be placed first
|
|
749
747
|
reactRouter(),
|
|
750
|
-
|
|
748
|
+
|
|
751
749
|
intlayer(),
|
|
752
750
|
],
|
|
753
751
|
});
|
|
@@ -174,10 +174,9 @@ module.exports = config;
|
|
|
174
174
|
import { reactRouter } from "@react-router/dev/vite";
|
|
175
175
|
import { defineConfig } from "vite";
|
|
176
176
|
import { intlayer } from "vite-intlayer";
|
|
177
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
178
177
|
|
|
179
178
|
export default defineConfig({
|
|
180
|
-
plugins: [reactRouter(),
|
|
179
|
+
plugins: [reactRouter(), intlayer()],
|
|
181
180
|
});
|
|
182
181
|
```
|
|
183
182
|
|
|
@@ -688,13 +687,12 @@ This comprehensive guide provides everything you need to integrate Intlayer with
|
|
|
688
687
|
import { reactRouter } from "@react-router/dev/vite";
|
|
689
688
|
import { defineConfig } from "vite";
|
|
690
689
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
691
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
692
690
|
|
|
693
691
|
export default defineConfig({
|
|
694
692
|
plugins: [
|
|
695
693
|
intlayerProxy(), // should be placed first
|
|
696
694
|
reactRouter(),
|
|
697
|
-
|
|
695
|
+
|
|
698
696
|
intlayer(),
|
|
699
697
|
],
|
|
700
698
|
});
|
|
@@ -370,7 +370,7 @@ export default heroContent;
|
|
|
370
370
|
<!-- सामग्री को सरल सामग्री के रूप में रेंडर करें -->
|
|
371
371
|
<h1>{$content.title}</h1>
|
|
372
372
|
<!-- संपादक का उपयोग करके सामग्री को संपादन योग्य बनाने के लिए -->
|
|
373
|
-
<h1
|
|
373
|
+
<h1>{@const Title = $content.title}<Title /></h1>
|
|
374
374
|
<!-- सामग्री को स्ट्रिंग के रूप में प्रस्तुत करने के लिए -->
|
|
375
375
|
<div aria-label={$content.title.value}></div>
|
|
376
376
|
```
|
|
@@ -726,7 +726,7 @@ intlayer संपादक चयनकर्ता को विज़ुअ
|
|
|
726
726
|
<h1>{$content.title}</h1>
|
|
727
727
|
|
|
728
728
|
<!-- सामग्री को एक component के रूप में रेंडर करें (संपादक के लिए आवश्यक) -->
|
|
729
|
-
|
|
729
|
+
{@const Component = $content.component}<Component />
|
|
730
730
|
</div>
|
|
731
731
|
```
|
|
732
732
|
|
|
@@ -140,16 +140,12 @@ export default config;
|
|
|
140
140
|
import { intlayer } from "vite-intlayer";
|
|
141
141
|
import { defineConfig } from "vite";
|
|
142
142
|
import { devtools } from "@tanstack/devtools-vite";
|
|
143
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
144
143
|
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
145
144
|
import solidPlugin from "vite-plugin-solid";
|
|
146
145
|
|
|
147
146
|
export default defineConfig({
|
|
148
147
|
plugins: [
|
|
149
148
|
devtools(),
|
|
150
|
-
viteTsConfigPaths({
|
|
151
|
-
projects: ["./tsconfig.json"],
|
|
152
|
-
}),
|
|
153
149
|
tanstackStart({
|
|
154
150
|
router: {
|
|
155
151
|
routeFileIgnorePattern:
|
|
@@ -221,9 +217,6 @@ function RootComponent() {
|
|
|
221
217
|
}
|
|
222
218
|
```
|
|
223
219
|
|
|
224
|
-
> [!NOTE]
|
|
225
|
-
> Solid में, `useMatches` एक **सिग्नल** (प्रतिक्रियाशील एक्सेसॉर) देता है। वर्तमान मान को प्रतिक्रियाशील रूप से एक्सेस करने के लिए `matches()` (कोष्ठक के साथ) का उपयोग करें।
|
|
226
|
-
|
|
227
220
|
### स्टेप 6: लोकेल लेआउट बनाएं (वैकल्पिक)
|
|
228
221
|
|
|
229
222
|
एक लेआउट बनाएं जो लोकेल उपसर्ग को संभालता है और सत्यापन करता है। यह लेआउट सुनिश्चित करेगा कि केवल वैध लोकेल ही संसाधित हों।
|
|
@@ -415,7 +408,6 @@ function RouteComponent() {
|
|
|
415
408
|
}
|
|
416
409
|
```
|
|
417
410
|
|
|
418
|
-
> [!NOTE]
|
|
419
411
|
> Solid में, `useIntlayer` एक **एक्सेसॉर** हुक (उदा: `content()`) देता है। प्रतिक्रियाशील सामग्री तक पहुँचने के लिए आपको इस फ़ंक्शन को कॉल करना होगा।
|
|
420
412
|
>
|
|
421
413
|
> `useIntlayer` हुक के बारे में अधिक जानने के लिए, [दस्तावेज़ीकरण](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/packages/solid-intlayer/useIntlayer.md) देखें।
|
|
@@ -460,7 +452,6 @@ export const LocaleSwitcher = () => {
|
|
|
460
452
|
export default LocaleSwitcher;
|
|
461
453
|
```
|
|
462
454
|
|
|
463
|
-
> [!NOTE]
|
|
464
455
|
> Solid में, `useLocale` से `locale` एक **सिग्नल एक्सेसॉर** है। इसके वर्तमान मान को प्रतिक्रियाशील रूप से पढ़ने के लिए `locale()` (कोष्ठक के साथ) का उपयोग करें।
|
|
465
456
|
>
|
|
466
457
|
> `useLocale` हुक के बारे में अधिक जानने के लिए, [दस्तावेज़ीकरण](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/packages/solid-intlayer/useLocale.md) देखें।
|
|
@@ -502,15 +493,11 @@ import solid from "vite-plugin-solid";
|
|
|
502
493
|
import { nitro } from "nitro/vite";
|
|
503
494
|
import { defineConfig } from "vite";
|
|
504
495
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
505
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
506
496
|
|
|
507
497
|
export default defineConfig({
|
|
508
498
|
plugins: [
|
|
509
499
|
intlayerProxy(), // यदि आप Nitro का उपयोग करते हैं तो प्रॉक्सी को सर्वर से पहले रखा जाना चाहिए
|
|
510
500
|
nitro(),
|
|
511
|
-
viteTsConfigPaths({
|
|
512
|
-
projects: ["./tsconfig.json"],
|
|
513
|
-
}),
|
|
514
501
|
intlayer(),
|
|
515
502
|
tanstackStart({
|
|
516
503
|
router: {
|
|
@@ -803,16 +790,12 @@ bun x intlayer extract
|
|
|
803
790
|
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
804
791
|
import { defineConfig } from "vite";
|
|
805
792
|
import { devtools } from "@tanstack/devtools-vite";
|
|
806
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
807
793
|
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
808
794
|
import solidPlugin from "vite-plugin-solid";
|
|
809
795
|
|
|
810
796
|
export default defineConfig({
|
|
811
797
|
plugins: [
|
|
812
798
|
devtools(),
|
|
813
|
-
viteTsConfigPaths({
|
|
814
|
-
projects: ["./tsconfig.json"],
|
|
815
|
-
}),
|
|
816
799
|
tanstackStart({
|
|
817
800
|
router: {
|
|
818
801
|
routeFileIgnorePattern:
|
|
@@ -160,14 +160,10 @@ import viteReact from "@vitejs/plugin-react";
|
|
|
160
160
|
import { nitro } from "nitro/vite";
|
|
161
161
|
import { defineConfig } from "vite";
|
|
162
162
|
import { intlayer } from "vite-intlayer";
|
|
163
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
164
163
|
|
|
165
164
|
const config = defineConfig({
|
|
166
165
|
plugins: [
|
|
167
166
|
nitro(),
|
|
168
|
-
viteTsConfigPaths({
|
|
169
|
-
projects: ["./tsconfig.json"],
|
|
170
|
-
}),
|
|
171
167
|
intlayer(),
|
|
172
168
|
tanstackStart({
|
|
173
169
|
router: {
|
|
@@ -593,15 +589,11 @@ import viteReact from "@vitejs/plugin-react";
|
|
|
593
589
|
import { nitro } from "nitro/vite";
|
|
594
590
|
import { defineConfig } from "vite";
|
|
595
591
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
596
|
-
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
597
592
|
|
|
598
593
|
export default defineConfig({
|
|
599
594
|
plugins: [
|
|
600
595
|
intlayerProxy(), // यदि आप Nitro का उपयोग करते हैं तो प्रॉक्सी को सर्वर से पहले रखा जाना चाहिए
|
|
601
596
|
nitro(),
|
|
602
|
-
viteTsConfigPaths({
|
|
603
|
-
projects: ["./tsconfig.json"],
|
|
604
|
-
}),
|
|
605
597
|
intlayer(),
|
|
606
598
|
tanstackStart({
|
|
607
599
|
router: {
|
|
@@ -314,7 +314,6 @@ const App: Component = () => (
|
|
|
314
314
|
export default App;
|
|
315
315
|
```
|
|
316
316
|
|
|
317
|
-
> [!NOTE]
|
|
318
317
|
> Solid में, `useIntlayer` एक **accessor** फ़ंक्शन (उदाहरण: `content()`) लौटाता है। आपको रिएक्टिव सामग्री तक पहुंचने के लिए इस फ़ंक्शन को कॉल करना होगा।
|
|
319
318
|
|
|
320
319
|
> यदि आप `alt`, `title`, `href`, `aria-label` आदि जैसे `string` विशेषता में अपनी सामग्री का उपयोग करना चाहते हैं, तो आपको फ़ंक्शन के मान को इस तरह कॉल करना होगा:
|
|
@@ -233,7 +233,7 @@ module.exports = appContent;
|
|
|
233
233
|
<!-- सामग्री को सरल सामग्री के रूप में रेंडर करें -->
|
|
234
234
|
<h1>{$content.title}</h1>
|
|
235
235
|
<!-- संपादक का उपयोग करके सामग्री को संपादन योग्य रूप में रेंडर करने के लिए -->
|
|
236
|
-
<h1
|
|
236
|
+
<h1>{@const Title = $content.title}<Title /></h1>
|
|
237
237
|
<!-- सामग्री को स्ट्रिंग के रूप में रेंडर करने के लिए -->
|
|
238
238
|
<div aria-label={$content.title.value}></div>
|
|
239
239
|
```
|
|
@@ -182,10 +182,9 @@ Tambahkan plugin intlayer ke dalam konfigurasi Anda:
|
|
|
182
182
|
import { reactRouter } from "@react-router/dev/vite";
|
|
183
183
|
import { defineConfig } from "vite";
|
|
184
184
|
import { intlayer } from "vite-intlayer";
|
|
185
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
186
185
|
|
|
187
186
|
export default defineConfig({
|
|
188
|
-
plugins: [reactRouter(),
|
|
187
|
+
plugins: [reactRouter(), intlayer()],
|
|
189
188
|
});
|
|
190
189
|
```
|
|
191
190
|
|
|
@@ -745,13 +744,12 @@ Anda juga dapat menggunakan `intlayerProxy` untuk menambahkan routing sisi serve
|
|
|
745
744
|
import { reactRouter } from "@react-router/dev/vite";
|
|
746
745
|
import { defineConfig } from "vite";
|
|
747
746
|
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
748
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
749
747
|
|
|
750
748
|
export default defineConfig({
|
|
751
749
|
plugins: [
|
|
752
750
|
intlayerProxy(), // should be placed first
|
|
753
751
|
reactRouter(),
|
|
754
|
-
|
|
752
|
+
|
|
755
753
|
intlayer(),
|
|
756
754
|
],
|
|
757
755
|
});
|