@intlayer/docs 7.1.9 → 7.2.0

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.
Files changed (44) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_svelte_kit.md +730 -0
  9. package/docs/ar/intlayer_with_vite+svelte.md +288 -104
  10. package/docs/de/intlayer_with_svelte_kit.md +730 -0
  11. package/docs/de/intlayer_with_vite+svelte.md +302 -101
  12. package/docs/en/intlayer_with_svelte_kit.md +560 -0
  13. package/docs/en/intlayer_with_vite+svelte.md +22 -6
  14. package/docs/en/introduction.md +2 -0
  15. package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
  16. package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
  17. package/docs/es/intlayer_with_svelte_kit.md +730 -0
  18. package/docs/es/intlayer_with_vite+svelte.md +300 -107
  19. package/docs/fr/intlayer_with_svelte_kit.md +762 -0
  20. package/docs/fr/intlayer_with_vite+svelte.md +297 -101
  21. package/docs/hi/intlayer_with_svelte_kit.md +730 -0
  22. package/docs/hi/intlayer_with_vite+svelte.md +298 -108
  23. package/docs/id/intlayer_with_svelte_kit.md +730 -0
  24. package/docs/id/intlayer_with_vite+svelte.md +277 -99
  25. package/docs/it/intlayer_with_svelte_kit.md +762 -0
  26. package/docs/it/intlayer_with_vite+svelte.md +275 -99
  27. package/docs/ja/intlayer_with_svelte_kit.md +730 -0
  28. package/docs/ja/intlayer_with_vite+svelte.md +295 -110
  29. package/docs/ko/intlayer_with_svelte_kit.md +730 -0
  30. package/docs/ko/intlayer_with_vite+svelte.md +286 -199
  31. package/docs/pl/intlayer_with_svelte_kit.md +732 -0
  32. package/docs/pl/intlayer_with_vite+svelte.md +273 -101
  33. package/docs/pt/intlayer_with_svelte_kit.md +764 -0
  34. package/docs/pt/intlayer_with_vite+svelte.md +290 -96
  35. package/docs/ru/intlayer_with_svelte_kit.md +730 -0
  36. package/docs/ru/intlayer_with_vite+svelte.md +275 -99
  37. package/docs/tr/intlayer_with_svelte_kit.md +730 -0
  38. package/docs/tr/intlayer_with_vite+svelte.md +297 -119
  39. package/docs/vi/intlayer_with_svelte_kit.md +730 -0
  40. package/docs/vi/intlayer_with_vite+svelte.md +275 -102
  41. package/docs/zh/intlayer_with_svelte_kit.md +730 -0
  42. package/docs/zh/intlayer_with_vite+svelte.md +309 -107
  43. package/package.json +6 -6
  44. package/src/generated/docs.entry.ts +19 -0
@@ -0,0 +1,762 @@
1
+ ---
2
+ createdAt: 2025-11-20
3
+ updatedAt: 2025-11-20
4
+ title: Comment traduire votre application SvelteKit – guide i18n 2025
5
+ description: Découvrez comment rendre votre site SvelteKit multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site en utilisant le Server-Side Rendering (SSR).
6
+ keywords:
7
+ - Internationalisation
8
+ - Documentation
9
+ - Intlayer
10
+ - SvelteKit
11
+ - JavaScript
12
+ - SSR
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - sveltekit
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
18
+ history:
19
+ - version: 7.1.10
20
+ date: 2025-11-20
21
+ changes: Historique initial
22
+ ---
23
+
24
+ # Traduisez votre site SvelteKit avec Intlayer | Internationalisation (i18n)
25
+
26
+ ## Table des matières
27
+
28
+ <TOC/>
29
+
30
+ ## Qu'est-ce que Intlayer ?
31
+
32
+ **Intlayer** est une bibliothèque d'internationalisation (i18n) innovante et open-source conçue pour simplifier la prise en charge multilingue dans les applications web modernes. Elle fonctionne parfaitement avec les capacités de Server-Side Rendering (SSR) de **SvelteKit**.
33
+
34
+ Avec Intlayer, vous pouvez :
35
+
36
+ - **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
37
+ - **Localiser dynamiquement les métadonnées**, les routes et le contenu.
38
+ - **Assurer la prise en charge de TypeScript** avec des types générés automatiquement.
39
+ - **Exploiter le SSR de SvelteKit** pour une internationalisation optimisée pour le SEO.
40
+
41
+ ---
42
+
43
+ ## Guide étape par étape pour configurer Intlayer dans une application SvelteKit
44
+
45
+ Pour commencer, créez un nouveau projet SvelteKit. Voici la structure finale que nous allons réaliser :
46
+
47
+ ```bash
48
+ .
49
+ ├── intlayer.config.ts
50
+ ├── package.json
51
+ ├── src
52
+ │ ├── app.d.ts
53
+ │   ├── app.html
54
+ │   ├── hooks.server.ts
55
+ │   ├── lib
56
+ │   │   ├── getLocale.ts
57
+ │   │   ├── LocaleSwitcher.svelte
58
+ │   │   └── LocalizedLink.svelte
59
+ │   ├── params
60
+ │   │   └── locale.ts
61
+ │   └── routes
62
+ │   ├── [[locale=locale]]
63
+ │   │   ├── +layout.svelte
64
+ │   │   ├── +layout.ts
65
+ │   │   ├── +page.svelte
66
+ │   │   ├── +page.ts
67
+ │   │   ├── about
68
+ │   │   │   ├── +page.svelte
69
+ │   │   │   ├── +page.ts
70
+ │   │   │   └── page.content.ts
71
+ │   │   ├── Counter.content.ts
72
+ │   │   ├── Counter.svelte
73
+ │   │   ├── Header.content.ts
74
+ │   │   ├── Header.svelte
75
+ │   │   ├── home.content.ts
76
+ │   │   └── layout.content.ts
77
+ │   ├── +layout.svelte
78
+ │   └── layout.css
79
+ ├── static
80
+ │   ├── favicon.svg
81
+ │   └── robots.txt
82
+ ├── svelte.config.js
83
+ ├── tsconfig.json
84
+ └── vite.config.ts
85
+ ```
86
+
87
+ ### Étape 1 : Installer les dépendances
88
+
89
+ Installez les paquets nécessaires en utilisant npm :
90
+
91
+ ```bash packageManager="npm"
92
+ npm install intlayer svelte-intlayer
93
+ npm install vite-intlayer --save-dev
94
+ ```
95
+
96
+ ```bash packageManager="pnpm"
97
+ pnpm add intlayer svelte-intlayer
98
+ pnpm add vite-intlayer --save-dev
99
+ ```
100
+
101
+ ```bash packageManager="yarn"
102
+ yarn add intlayer svelte-intlayer
103
+ yarn add vite-intlayer --save-dev
104
+ ```
105
+
106
+ ```bash packageManager="bun"
107
+ bun add intlayer svelte-intlayer
108
+ bun add vite-intlayer --save-dev
109
+ ```
110
+
111
+ - **intlayer** : Le paquet principal pour l'internationalisation (i18n).
112
+ - **svelte-intlayer** : Fournit des context providers et des stores pour Svelte/SvelteKit.
113
+ - **vite-intlayer** : Le plugin Vite pour intégrer les déclarations de contenu dans le processus de build.
114
+
115
+ ### Étape 2 : Configuration de votre projet
116
+
117
+ Créez un fichier de configuration à la racine de votre projet :
118
+
119
+ ```typescript fileName="intlayer.config.ts"
120
+ import { Locales, type IntlayerConfig } from "intlayer";
121
+
122
+ const config: IntlayerConfig = {
123
+ internationalization: {
124
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
125
+ defaultLocale: Locales.ENGLISH,
126
+ },
127
+ };
128
+
129
+ export default config;
130
+ ```
131
+
132
+ ### Étape 3 : Intégrer Intlayer dans votre configuration Vite
133
+
134
+ Mettez à jour votre fichier `vite.config.ts` pour inclure le plugin Intlayer. Ce plugin gère la transpilation de vos fichiers de contenu.
135
+
136
+ ```typescript fileName="vite.config.ts"
137
+ import { sveltekit } from "@sveltejs/kit/vite";
138
+ import { defineConfig } from "vite";
139
+ import { intlayer } from "vite-intlayer";
140
+
141
+ export default defineConfig({
142
+ plugins: [intlayer(), sveltekit()], // l'ordre est important, Intlayer doit être placé avant SvelteKit
143
+ });
144
+ ```
145
+
146
+ ### Étape 4 : Déclarez votre contenu
147
+
148
+ Créez vos fichiers de déclaration de contenu n'importe où dans votre dossier `src` (par exemple, `src/lib/content` ou à côté de vos composants). Ces fichiers définissent le contenu traduisible pour votre application en utilisant la fonction `t()` pour chaque locale.
149
+
150
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
151
+ import { t, type Dictionary } from "intlayer";
152
+
153
+ const heroContent = {
154
+ key: "hero-section",
155
+ content: {
156
+ title: t({
157
+ en: "Welcome to SvelteKit",
158
+ fr: "Bienvenue sur SvelteKit",
159
+ es: "Bienvenido a SvelteKit",
160
+ }),
161
+ },
162
+ } satisfies Dictionary;
163
+
164
+ export default heroContent;
165
+ ```
166
+
167
+ ### Étape 5 : Utilisez Intlayer dans vos composants
168
+
169
+ Vous pouvez maintenant utiliser la fonction `useIntlayer` dans n'importe quel composant Svelte. Elle retourne un store réactif qui se met automatiquement à jour lorsque la locale change. La fonction respecte automatiquement la locale courante (à la fois lors du SSR et de la navigation côté client).
170
+
171
+ > **Note :** `useIntlayer` retourne un store Svelte, vous devez donc utiliser le préfixe `---
172
+ > createdAt: 2025-11-20
173
+ > updatedAt: 2025-11-20
174
+ > title: Comment traduire votre application SvelteKit – guide i18n 2025
175
+ > description: Découvrez comment rendre votre site SvelteKit multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site en utilisant le Server-Side Rendering (SSR).
176
+ > keywords:
177
+
178
+ - Internationalisation
179
+ - Documentation
180
+ - Intlayer
181
+ - SvelteKit
182
+ - JavaScript
183
+ - SSR
184
+ slugs:
185
+ - doc
186
+ - environment
187
+ - sveltekit
188
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
189
+ history:
190
+ - version: 7.1.10
191
+ date: 2025-11-20
192
+ changes: Historique initial
193
+
194
+ ---
195
+
196
+ # Traduisez votre site SvelteKit avec Intlayer | Internationalisation (i18n)
197
+
198
+ ## Table des matières
199
+
200
+ <TOC/>
201
+
202
+ ## Qu'est-ce que Intlayer ?
203
+
204
+ **Intlayer** est une bibliothèque d'internationalisation (i18n) innovante et open-source conçue pour simplifier la prise en charge multilingue dans les applications web modernes. Elle fonctionne parfaitement avec les capacités de Server-Side Rendering (SSR) de **SvelteKit**.
205
+
206
+ Avec Intlayer, vous pouvez :
207
+
208
+ - **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
209
+ - **Localiser dynamiquement les métadonnées**, les routes et le contenu.
210
+ - **Assurer la prise en charge de TypeScript** avec des types générés automatiquement.
211
+ - **Exploiter le SSR de SvelteKit** pour une internationalisation optimisée pour le SEO.
212
+
213
+ ---
214
+
215
+ ## Guide étape par étape pour configurer Intlayer dans une application SvelteKit
216
+
217
+ Pour commencer, créez un nouveau projet SvelteKit. Voici la structure finale que nous allons réaliser :
218
+
219
+ ```bash
220
+ .
221
+ ├── intlayer.config.ts
222
+ ├── package.json
223
+ ├── src
224
+ │ ├── app.d.ts
225
+ │   ├── app.html
226
+ │   ├── hooks.server.ts
227
+ │   ├── lib
228
+ │   │   ├── getLocale.ts
229
+ │   │   ├── LocaleSwitcher.svelte
230
+ │   │   └── LocalizedLink.svelte
231
+ │   ├── params
232
+ │   │   └── locale.ts
233
+ │   └── routes
234
+ │   ├── [[locale=locale]]
235
+ │   │   ├── +layout.svelte
236
+ │   │   ├── +layout.ts
237
+ │   │   ├── +page.svelte
238
+ │   │   ├── +page.ts
239
+ │   │   ├── about
240
+ │   │   │   ├── +page.svelte
241
+ │   │   │   ├── +page.ts
242
+ │   │   │   └── page.content.ts
243
+ │   │   ├── Counter.content.ts
244
+ │   │   ├── Counter.svelte
245
+ │   │   ├── Header.content.ts
246
+ │   │   ├── Header.svelte
247
+ │   │   ├── home.content.ts
248
+ │   │   └── layout.content.ts
249
+ │   ├── +layout.svelte
250
+ │   └── layout.css
251
+ ├── static
252
+ │   ├── favicon.svg
253
+ │   └── robots.txt
254
+ ├── svelte.config.js
255
+ ├── tsconfig.json
256
+ └── vite.config.ts
257
+ ```
258
+
259
+ ### Étape 1 : Installer les dépendances
260
+
261
+ Installez les paquets nécessaires en utilisant npm :
262
+
263
+ ```bash packageManager="npm"
264
+ npm install intlayer svelte-intlayer
265
+ npm install vite-intlayer --save-dev
266
+ ```
267
+
268
+ ```bash packageManager="pnpm"
269
+ pnpm add intlayer svelte-intlayer
270
+ pnpm add vite-intlayer --save-dev
271
+ ```
272
+
273
+ ```bash packageManager="yarn"
274
+ yarn add intlayer svelte-intlayer
275
+ yarn add vite-intlayer --save-dev
276
+ ```
277
+
278
+ ```bash packageManager="bun"
279
+ bun add intlayer svelte-intlayer
280
+ bun add vite-intlayer --save-dev
281
+ ```
282
+
283
+ - **intlayer** : Le paquet principal pour l'internationalisation (i18n).
284
+ - **svelte-intlayer** : Fournit des context providers et des stores pour Svelte/SvelteKit.
285
+ - **vite-intlayer** : Le plugin Vite pour intégrer les déclarations de contenu dans le processus de build.
286
+
287
+ ### Étape 2 : Configuration de votre projet
288
+
289
+ Créez un fichier de configuration à la racine de votre projet :
290
+
291
+ ```typescript fileName="intlayer.config.ts"
292
+ import { Locales, type IntlayerConfig } from "intlayer";
293
+
294
+ const config: IntlayerConfig = {
295
+ internationalization: {
296
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
297
+ defaultLocale: Locales.ENGLISH,
298
+ },
299
+ };
300
+
301
+ export default config;
302
+ ```
303
+
304
+ ### Étape 3 : Intégrer Intlayer dans votre configuration Vite
305
+
306
+ Mettez à jour votre fichier `vite.config.ts` pour inclure le plugin Intlayer. Ce plugin gère la transpilation de vos fichiers de contenu.
307
+
308
+ ```typescript fileName="vite.config.ts"
309
+ import { sveltekit } from "@sveltejs/kit/vite";
310
+ import { defineConfig } from "vite";
311
+ import { intlayer } from "vite-intlayer";
312
+
313
+ export default defineConfig({
314
+ plugins: [intlayer(), sveltekit()], // l'ordre est important, Intlayer doit être placé avant SvelteKit
315
+ });
316
+ ```
317
+
318
+ ### Étape 4 : Déclarez votre contenu
319
+
320
+ Créez vos fichiers de déclaration de contenu n'importe où dans votre dossier `src` (par exemple, `src/lib/content` ou à côté de vos composants). Ces fichiers définissent le contenu traduisible pour votre application en utilisant la fonction `t()` pour chaque locale.
321
+
322
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
323
+ import { t, type Dictionary } from "intlayer";
324
+
325
+ const heroContent = {
326
+ key: "hero-section",
327
+ content: {
328
+ title: t({
329
+ en: "Welcome to SvelteKit",
330
+ fr: "Bienvenue sur SvelteKit",
331
+ es: "Bienvenido a SvelteKit",
332
+ }),
333
+ },
334
+ } satisfies Dictionary;
335
+
336
+ export default heroContent;
337
+ ```
338
+
339
+ ### Étape 5 : Utilisez Intlayer dans vos composants
340
+
341
+ pour accéder à sa valeur réactive (par exemple, `$content.title`).
342
+
343
+ ```svelte fileName="src/lib/components/Component.svelte"
344
+ <script lang="ts">
345
+ import { useIntlayer } from "svelte-intlayer";
346
+
347
+ // "hero-section" correspond à la clé définie à l'Étape 4
348
+ const content = useIntlayer("hero-section");
349
+ </script>
350
+
351
+ <!-- Afficher le contenu comme contenu simple -->
352
+ <h1>{$content.title}</h1>
353
+ <!-- Pour rendre le contenu éditable via l'éditeur -->
354
+ <h1><svelte:component this={$content.title} /></h1>
355
+ <!-- Pour afficher le contenu en tant que chaîne -->
356
+ <div aria-label={$content.title.value}></div>
357
+ ```
358
+
359
+ ### (Optionnel) Étape 6 : Configurer le routage
360
+
361
+ Les étapes suivantes montrent comment configurer un routage basé sur la locale dans SvelteKit. Cela permet à vos URLs d'inclure le préfixe de la locale (par exemple, `/en/about`, `/fr/about`) pour un meilleur SEO et une meilleure expérience utilisateur.
362
+
363
+ ```bash
364
+ .
365
+ └─── src
366
+ ├── app.d.ts # Définir le type de la locale
367
+ ├── hooks.server.ts # Gérer le routage des locales
368
+ ├── lib
369
+ │   └── getLocale.ts # Vérifier la locale depuis l'en-tête, les cookies
370
+ ├── params
371
+ │   └── locale.ts # Définir le paramètre locale
372
+ └── routes
373
+ ├── [[locale=locale]] # Encapsuler dans un groupe de routes pour définir la locale
374
+ │   ├── +layout.svelte # Mise en page locale pour la route
375
+ │   ├── +layout.ts
376
+ │   ├── +page.svelte
377
+ │   ├── +page.ts
378
+ │   └── about
379
+ │      ├── +page.svelte
380
+ │      └── +page.ts
381
+ └── +layout.svelte # Mise en page racine pour les polices et styles globaux
382
+ ```
383
+
384
+ ### Étape 7 : Gérer la détection de la locale côté serveur (Hooks)
385
+
386
+ Dans SvelteKit, le serveur doit connaître la locale de l'utilisateur pour rendre le contenu correct lors du SSR. Nous utilisons `hooks.server.ts` pour détecter la locale à partir de l'URL ou des cookies.
387
+
388
+ Créez ou modifiez `src/hooks.server.ts` :
389
+
390
+ ```typescript fileName="src/hooks.server.ts"
391
+ import type { Handle } from "@sveltejs/kit";
392
+ import { getLocalizedUrl } from "intlayer";
393
+ import { getLocale } from "$lib/getLocale";
394
+
395
+ export const handle: Handle = async ({ event, resolve }) => {
396
+ const detectedLocale = getLocale(event);
397
+
398
+ // Vérifie si le chemin actuel commence déjà par une locale (ex. /fr, /en)
399
+ const pathname = event.url.pathname;
400
+ const targetPathname = getLocalizedUrl(pathname, detectedLocale);
401
+
402
+ // Si AUCUNE locale n'est présente dans l'URL (ex. l'utilisateur visite "/"), redirigez-le
403
+ if (targetPathname !== pathname) {
404
+ return new Response(undefined, {
405
+ headers: { Location: targetPathname },
406
+ status: 307, // Redirection temporaire
407
+ });
408
+ }
409
+
410
+ return resolve(event, {
411
+ transformPageChunk: ({ html }) => html.replace("%lang%", detectedLocale),
412
+ });
413
+ };
414
+ ```
415
+
416
+ Ensuite, créez un helper pour obtenir la locale de l'utilisateur à partir de l'événement de requête :
417
+
418
+ ```typescript fileName="src/lib/getLocale.ts"
419
+ import {
420
+ configuration,
421
+ getLocaleFromStorage,
422
+ localeDetector,
423
+ type Locale,
424
+ } from "intlayer";
425
+ import type { RequestEvent } from "@sveltejs/kit";
426
+
427
+ /**
428
+ * Récupère la locale de l'utilisateur à partir de l'événement de requête.
429
+ * Cette fonction est utilisée dans le hook `handle` dans `src/hooks.server.ts`.
430
+ *
431
+ * Elle tente d'abord d'obtenir la locale depuis le stockage Intlayer (cookies ou en-têtes personnalisés).
432
+ * Si la locale n'est pas trouvée, elle revient à la négociation "Accept-Language" du navigateur.
433
+ *
434
+ * @param event - L'événement de requête de SvelteKit
435
+ * @returns La locale de l'utilisateur
436
+ */
437
+ export const getLocale = (event: RequestEvent): Locale => {
438
+ const defaultLocale = configuration?.internationalization?.defaultLocale;
439
+
440
+ // Tente d'obtenir la locale depuis le stockage Intlayer (cookies ou en-têtes)
441
+ const storedLocale = getLocaleFromStorage({
442
+ // Accès aux cookies SvelteKit
443
+ getCookie: (name: string) => event.cookies.get(name) ?? null,
444
+ // Accès aux headers SvelteKit
445
+ getHeader: (name: string) => event.request.headers.get(name) ?? null,
446
+ });
447
+
448
+ if (storedLocale) {
449
+ return storedLocale;
450
+ }
451
+
452
+ // Repli sur la négociation "Accept-Language" du navigateur
453
+ const negotiatorHeaders: Record<string, string> = {};
454
+
455
+ // Conversion de l'objet Headers de SvelteKit en un Record<string, string> simple
456
+ event.request.headers.forEach((value, key) => {
457
+ negotiatorHeaders[key] = value;
458
+ });
459
+
460
+ // Vérification de la locale à partir du header `Accept-Language`
461
+ const userFallbackLocale = localeDetector(negotiatorHeaders);
462
+
463
+ if (userFallbackLocale) {
464
+ return userFallbackLocale;
465
+ }
466
+
467
+ // Retourne la locale par défaut si aucune correspondance n'est trouvée
468
+ return defaultLocale;
469
+ };
470
+ ```
471
+
472
+ > `getLocaleFromStorage` vérifiera la locale à partir de l'en-tête ou du cookie selon votre configuration. Voir [Configuration](https://intlayer.org/doc/configuration) pour plus de détails.
473
+
474
+ > La fonction `localeDetector` traitera l'en-tête `Accept-Language` et retournera la meilleure correspondance.
475
+
476
+ Si la locale n'est pas configurée, nous souhaitons retourner une erreur 404. Pour faciliter cela, nous pouvons créer une fonction `match` pour vérifier si la locale est valide :
477
+
478
+ ```ts fileName="/src/params/locale.ts"
479
+ import { configuration, type Locale } from "intlayer";
480
+
481
+ export const match = (
482
+ param: Locale = configuration.internationalization.defaultLocale
483
+ ): boolean => {
484
+ return configuration.internationalization.locales.includes(param);
485
+ };
486
+ ```
487
+
488
+ > **Note :** Assurez-vous que votre fichier `src/app.d.ts` inclut la définition de la locale :
489
+ >
490
+ > ```typescript
491
+ > declare global {
492
+ > namespace App {
493
+ > interface Locals {
494
+ > locale: import("intlayer").Locale;
495
+ > }
496
+ > }
497
+ > }
498
+ > ```
499
+
500
+ Pour le fichier `+layout.svelte`, nous pouvons tout supprimer afin de ne conserver que le contenu statique, non lié à l’i18n :
501
+
502
+ ```svelte fileName="src/+layout.svelte"
503
+ <script lang="ts">
504
+ import './layout.css';
505
+
506
+ let { children } = $props();
507
+ </script>
508
+
509
+ <div class="app">
510
+ {@render children()}
511
+ </div>
512
+
513
+ <style>
514
+ .app {
515
+ /* */
516
+ }
517
+ </style>
518
+ ```
519
+
520
+ Ensuite, créez une nouvelle page et un layout sous le groupe `[[locale=locale]]` :
521
+
522
+ ```ts fileName="src/routes/[[locale=locale]]/+layout.ts"
523
+ import type { Load } from "@sveltejs/kit";
524
+ import { configuration, type Locale } from "intlayer";
525
+
526
+ export const prerender = true;
527
+
528
+ // Utilisez le type générique Load
529
+ export const load: Load = ({ params }) => {
530
+ const locale: Locale =
531
+ (params.locale as Locale) ??
532
+ configuration.internationalization.defaultLocale;
533
+
534
+ return {
535
+ locale,
536
+ };
537
+ };
538
+ ```
539
+
540
+ ```svelte fileName="src/routes/[[locale=locale]]/+layout.svelte"
541
+ <script lang="ts">
542
+ import type { Snippet } from 'svelte';
543
+ import { useIntlayer, setupIntlayer } from 'svelte-intlayer';
544
+ import Header from './Header.svelte';
545
+ import type { LayoutData } from './$types';
546
+
547
+ let { children, data }: { children: Snippet, data: LayoutData } = $props();
548
+
549
+ // Initialiser Intlayer avec la locale provenant de la route
550
+ setupIntlayer(data.locale);
551
+
552
+ // Utiliser le dictionnaire de contenu du layout
553
+ const layoutContent = useIntlayer('layout');
554
+ </script>
555
+
556
+ <Header />
557
+
558
+ <main>
559
+ {@render children()}
560
+ </main>
561
+
562
+ <footer>
563
+ <p>
564
+ {$layoutContent.footer.prefix.value}{' '}
565
+ <a href="https://svelte.dev/docs/kit">{$layoutContent.footer.linkLabel.value}</a>{' '}
566
+ {$layoutContent.footer.suffix.value}
567
+ </p>
568
+ </footer>
569
+
570
+ <style>
571
+ /* */
572
+ </style>
573
+ ```
574
+
575
+ ```ts fileName="src/routes/[[locale=locale]]/+page.ts"
576
+ export const prerender = true;
577
+ ```
578
+
579
+ ```svelte fileName="src/routes/[[locale=locale]]/+page.svelte"
580
+ <script lang="ts">
581
+ import { useIntlayer } from 'svelte-intlayer';
582
+
583
+ // Utiliser le dictionnaire de contenu de la page d'accueil
584
+ const homeContent = useIntlayer('home');
585
+ </script>
586
+
587
+ <svelte:head>
588
+ <title>{$homeContent.title.value}</title>
589
+ </svelte:head>
590
+
591
+ <section>
592
+ <h1>
593
+ {$homeContent.title}
594
+ </h1>
595
+ </section>
596
+
597
+ <style>
598
+ /* */
599
+ </style>
600
+ ```
601
+
602
+ ### (Optionnel) Étape 8 : Liens internationalisés
603
+
604
+ Pour le SEO, il est recommandé de préfixer vos routes avec la locale (par exemple, `/en/about`, `/fr/about`). Ce composant préfixe automatiquement tout lien avec la locale courante.
605
+
606
+ ```svelte fileName="src/lib/components/LocalizedLink.svelte"
607
+ <script lang="ts">
608
+ import { getLocalizedUrl } from "intlayer";
609
+ import { useLocale } from 'svelte-intlayer';
610
+
611
+ let { href = "" } = $props();
612
+ const { locale } = useLocale();
613
+
614
+ // Aide pour préfixer l'URL avec la locale courante
615
+ $: localizedHref = getLocalizedUrl(href, $locale);
616
+ </script>
617
+
618
+ <a href={localizedHref}>
619
+ <slot />
620
+ </a>
621
+ ```
622
+
623
+ Si vous utilisez `goto` de SvelteKit, vous pouvez utiliser la même logique avec `getLocalizedUrl` pour naviguer vers l'URL localisée :
624
+
625
+ ```typescript
626
+ import { goto } from "$app/navigation";
627
+ import { getLocalizedUrl } from "intlayer";
628
+ import { useLocale } from "svelte-intlayer";
629
+
630
+ const { locale } = useLocale();
631
+ const localizedPath = getLocalizedUrl("/about", $locale);
632
+ goto(localizedPath); // Navigue vers /en/about ou /fr/about selon la locale
633
+ ```
634
+
635
+ ### (Optionnel) Étape 9 : Sélecteur de langue
636
+
637
+ Pour permettre aux utilisateurs de changer de langue, mettez à jour l’URL.
638
+
639
+ ```svelte fileName="src/lib/components/LanguageSwitcher.svelte"
640
+ <script lang="ts">
641
+ import { getLocalizedUrl, getLocaleName } from 'intlayer';
642
+ import { useLocale } from 'svelte-intlayer';
643
+ import { page } from '$app/stores';
644
+ import { goto } from '$app/navigation';
645
+
646
+ const { locale, setLocale, availableLocales } = useLocale({
647
+ onLocaleChange: (newLocale) => {
648
+ const localizedPath = getLocalizedUrl($page.url.pathname, newLocale);
649
+ goto(localizedPath);
650
+ },
651
+ });
652
+ </script>
653
+
654
+ <ul class="locale-list">
655
+ {#each availableLocales as localeEl}
656
+ <li>
657
+ <a
658
+ href={getLocalizedUrl($page.url.pathname, localeEl)}
659
+ onclick={(e) => {
660
+ e.preventDefault();
661
+ setLocale(localeEl); // Va définir la locale dans le store et déclencher onLocaleChange
662
+ }}
663
+ class:active={$locale === localeEl}
664
+ >
665
+ {getLocaleName(localeEl)}
666
+ </a>
667
+ </li>
668
+ {/each}
669
+ </ul>
670
+
671
+ <style>
672
+ /* */
673
+ </style>
674
+ ```
675
+
676
+ ### (Optionnel) Étape 10 : Ajouter un proxy backend
677
+
678
+ Pour ajouter un proxy backend à votre application SvelteKit, vous pouvez utiliser la fonction `intlayerProxy` fournie par le plugin `vite-intlayer`. Ce plugin détectera automatiquement la meilleure locale pour l'utilisateur en fonction de l'URL, des cookies et des préférences linguistiques du navigateur.
679
+
680
+ ```ts fileName="vite.config.ts"
681
+ import { defineConfig } from "vite";
682
+ import { intlayer, intlayerProxy } from "vite-intlayer";
683
+ import { sveltekit } from "@sveltejs/kit/vite";
684
+
685
+ // https://vitejs.dev/config/
686
+ export default defineConfig({
687
+ plugins: [intlayer(), intlayerProxy(), sveltekit()],
688
+ });
689
+ ```
690
+
691
+ ### (Optionnel) Étape 11 : Configurer l'éditeur / CMS intlayer
692
+
693
+ Pour configurer l'éditeur intlayer, vous devez suivre la [documentation de l'éditeur intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md).
694
+
695
+ Pour configurer le CMS intlayer, vous devez suivre la [documentation du CMS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).
696
+
697
+ Pour pouvoir visualiser le sélecteur de l'éditeur intlayer, vous devrez utiliser la syntaxe composant dans votre contenu intlayer.
698
+
699
+ ```svelte fileName="Component.svelte"
700
+ <script lang="ts">
701
+ import { useIntlayer } from "svelte-intlayer";
702
+
703
+ const content = useIntlayer("component");
704
+ </script>
705
+
706
+ <div>
707
+
708
+ <!-- Rendre le contenu comme contenu simple -->
709
+ <h1>{$content.title}</h1>
710
+
711
+ <!-- Rendre le contenu comme un composant (requis par l'éditeur) -->
712
+ <svelte:component this={$content.component} />
713
+ </div>
714
+ ```
715
+
716
+ ### Configuration Git
717
+
718
+ Il est recommandé d'ignorer les fichiers générés par Intlayer.
719
+
720
+ ```plaintext fileName=".gitignore"
721
+ # Ignorer les fichiers générés par Intlayer
722
+ .intlayer
723
+ ```
724
+
725
+ ---
726
+
727
+ ### Aller plus loin
728
+
729
+ Pour pouvoir visualiser le sélecteur de l'éditeur intlayer, vous devrez utiliser la syntaxe composant dans votre contenu intlayer.
730
+
731
+ ```svelte fileName="Component.svelte"
732
+ <script lang="ts">
733
+ import { useIntlayer } from "svelte-intlayer";
734
+
735
+ const content = useIntlayer("component");
736
+ </script>
737
+
738
+ <div>
739
+
740
+ <!-- Rendre le contenu comme un contenu simple -->
741
+ <h1>{$content.title}</h1>
742
+
743
+ <!-- Rendre le contenu comme un composant (requis par l'éditeur) -->
744
+ <svelte:component this={$content.component} />
745
+ </div>
746
+ ```
747
+
748
+ ### Configuration Git
749
+
750
+ Il est recommandé d'ignorer les fichiers générés par Intlayer.
751
+
752
+ ```plaintext fileName=".gitignore"
753
+ # Ignorer les fichiers générés par Intlayer
754
+ .intlayer
755
+ ```
756
+
757
+ ---
758
+
759
+ ### Aller plus loin
760
+
761
+ - **Éditeur Visuel** : Intégrez l'[Éditeur Visuel Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) pour éditer les traductions directement depuis l'interface utilisateur.
762
+ - **CMS** : Externalisez la gestion de votre contenu en utilisant le [CMS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).