@intlayer/docs 8.10.1 → 8.11.2
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/i18n_using_next-i18next.md +3 -3
- package/blog/en/i18n_using_next-intl.md +3 -3
- package/blog/en/list_i18n_technologies/frameworks/angular.md +3 -3
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +3 -3
- package/blog/en/list_i18n_technologies/frameworks/react.md +3 -3
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +3 -3
- package/blog/en/list_i18n_technologies/frameworks/vue.md +3 -3
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +3 -3
- package/dist/cjs/common.cjs +3 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +0 -1
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +39 -20
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +0 -1
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +3 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +39 -19
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +1 -1
- package/docs/ar/benchmark/solid.md +1 -1
- package/docs/ar/benchmark/svelte.md +1 -1
- package/docs/ar/benchmark/tanstack.md +1 -1
- package/docs/ar/dictionary/markdown.md +165 -7
- package/docs/ar/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/ar/intlayer_with_angular_21.md +412 -0
- package/docs/bn/intlayer_with_angular_21.md +412 -0
- package/docs/cs/intlayer_with_angular_21.md +412 -0
- package/docs/de/benchmark/nextjs.md +1 -1
- package/docs/de/benchmark/solid.md +1 -1
- package/docs/de/benchmark/svelte.md +1 -1
- package/docs/de/benchmark/tanstack.md +1 -1
- package/docs/de/dictionary/markdown.md +165 -7
- package/docs/de/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/de/intlayer_with_angular_21.md +412 -0
- package/docs/en/benchmark/nextjs.md +1 -1
- package/docs/en/benchmark/solid.md +1 -1
- package/docs/en/benchmark/svelte.md +1 -1
- package/docs/en/benchmark/tanstack.md +1 -1
- package/docs/en/dictionary/markdown.md +167 -7
- package/docs/en/intlayer_with_adonisjs.md +3 -3
- package/docs/en/intlayer_with_analog.md +3 -3
- package/docs/en/{intlayer_with_angular.md → intlayer_with_angular_19.md} +10 -9
- package/docs/en/intlayer_with_angular_21.md +412 -0
- package/docs/en/intlayer_with_astro.md +3 -3
- package/docs/en/intlayer_with_astro_lit.md +3 -3
- package/docs/en/intlayer_with_astro_preact.md +3 -3
- package/docs/en/intlayer_with_astro_react.md +3 -3
- package/docs/en/intlayer_with_astro_solid.md +3 -3
- package/docs/en/intlayer_with_astro_svelte.md +3 -3
- package/docs/en/intlayer_with_astro_vanilla.md +3 -3
- package/docs/en/intlayer_with_astro_vue.md +3 -3
- package/docs/en/intlayer_with_create_react_app.md +3 -3
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_fastify.md +3 -3
- package/docs/en/intlayer_with_hono.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +3 -3
- package/docs/en/intlayer_with_nestjs.md +3 -3
- package/docs/en/intlayer_with_next-i18next.md +3 -3
- package/docs/en/intlayer_with_next-intl.md +3 -3
- package/docs/en/intlayer_with_nextjs_14.md +3 -3
- package/docs/en/intlayer_with_nextjs_15.md +3 -3
- package/docs/en/intlayer_with_nextjs_16.md +3 -3
- package/docs/en/intlayer_with_nextjs_compiler.md +3 -3
- package/docs/en/intlayer_with_nextjs_no_locale_path.md +3 -3
- package/docs/en/intlayer_with_nextjs_page_router.md +3 -3
- package/docs/en/intlayer_with_nuxt.md +3 -3
- package/docs/en/intlayer_with_react_native+expo.md +3 -3
- package/docs/en/intlayer_with_react_router_v7.md +3 -3
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +3 -3
- package/docs/en/intlayer_with_svelte_kit.md +3 -3
- package/docs/en/intlayer_with_tanstack+solid.md +3 -3
- package/docs/en/intlayer_with_tanstack.md +3 -3
- package/docs/en/intlayer_with_vanilla.md +3 -3
- package/docs/en/intlayer_with_vite+lit.md +3 -3
- package/docs/en/intlayer_with_vite+preact.md +3 -3
- package/docs/en/intlayer_with_vite+react.md +3 -3
- package/docs/en/intlayer_with_vite+react_compiler.md +3 -3
- package/docs/en/intlayer_with_vite+solid.md +3 -3
- package/docs/en/intlayer_with_vite+svelte.md +3 -3
- package/docs/en/intlayer_with_vite+vanilla.md +3 -3
- package/docs/en/intlayer_with_vite+vue.md +3 -3
- package/docs/en-GB/benchmark/nextjs.md +1 -1
- package/docs/en-GB/benchmark/solid.md +1 -1
- package/docs/en-GB/benchmark/svelte.md +1 -1
- package/docs/en-GB/benchmark/tanstack.md +1 -1
- package/docs/en-GB/dictionary/markdown.md +161 -0
- package/docs/en-GB/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/en-GB/intlayer_with_angular_21.md +412 -0
- package/docs/es/benchmark/nextjs.md +1 -1
- package/docs/es/benchmark/solid.md +1 -1
- package/docs/es/benchmark/svelte.md +1 -1
- package/docs/es/benchmark/tanstack.md +1 -1
- package/docs/es/dictionary/markdown.md +165 -7
- package/docs/es/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/es/intlayer_with_angular_21.md +412 -0
- package/docs/fr/benchmark/nextjs.md +1 -1
- package/docs/fr/benchmark/solid.md +1 -1
- package/docs/fr/benchmark/svelte.md +1 -1
- package/docs/fr/benchmark/tanstack.md +1 -1
- package/docs/fr/dictionary/markdown.md +165 -7
- package/docs/fr/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/fr/intlayer_with_angular_21.md +412 -0
- package/docs/hi/benchmark/nextjs.md +1 -1
- package/docs/hi/benchmark/solid.md +1 -1
- package/docs/hi/benchmark/svelte.md +1 -1
- package/docs/hi/benchmark/tanstack.md +1 -1
- package/docs/hi/dictionary/markdown.md +165 -7
- package/docs/hi/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/hi/intlayer_with_angular_21.md +412 -0
- package/docs/id/benchmark/nextjs.md +1 -1
- package/docs/id/benchmark/solid.md +1 -1
- package/docs/id/benchmark/svelte.md +1 -1
- package/docs/id/benchmark/tanstack.md +1 -1
- package/docs/id/dictionary/markdown.md +165 -7
- package/docs/id/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/id/intlayer_with_angular_21.md +412 -0
- package/docs/it/benchmark/nextjs.md +1 -1
- package/docs/it/benchmark/solid.md +1 -1
- package/docs/it/benchmark/svelte.md +1 -1
- package/docs/it/benchmark/tanstack.md +1 -1
- package/docs/it/dictionary/markdown.md +165 -7
- package/docs/it/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/it/intlayer_with_angular_21.md +412 -0
- package/docs/ja/benchmark/nextjs.md +1 -1
- package/docs/ja/benchmark/solid.md +1 -1
- package/docs/ja/benchmark/svelte.md +1 -1
- package/docs/ja/benchmark/tanstack.md +1 -1
- package/docs/ja/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/ja/intlayer_with_angular_21.md +412 -0
- package/docs/ko/benchmark/nextjs.md +1 -1
- package/docs/ko/benchmark/solid.md +1 -1
- package/docs/ko/benchmark/svelte.md +1 -1
- package/docs/ko/benchmark/tanstack.md +1 -1
- package/docs/ko/dictionary/markdown.md +165 -7
- package/docs/ko/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/ko/intlayer_with_angular_21.md +412 -0
- package/docs/nl/intlayer_with_angular_21.md +412 -0
- package/docs/pl/benchmark/nextjs.md +1 -1
- package/docs/pl/benchmark/solid.md +1 -1
- package/docs/pl/benchmark/svelte.md +1 -1
- package/docs/pl/benchmark/tanstack.md +1 -1
- package/docs/pl/dictionary/markdown.md +165 -7
- package/docs/pl/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/pl/intlayer_with_angular_21.md +412 -0
- package/docs/pt/benchmark/nextjs.md +1 -1
- package/docs/pt/benchmark/solid.md +1 -1
- package/docs/pt/benchmark/svelte.md +1 -1
- package/docs/pt/benchmark/tanstack.md +1 -1
- package/docs/pt/dictionary/markdown.md +165 -7
- package/docs/pt/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/pt/intlayer_with_angular_21.md +412 -0
- package/docs/ru/benchmark/nextjs.md +1 -1
- package/docs/ru/benchmark/solid.md +1 -1
- package/docs/ru/benchmark/svelte.md +1 -1
- package/docs/ru/benchmark/tanstack.md +1 -1
- package/docs/ru/dictionary/markdown.md +161 -0
- package/docs/ru/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/ru/intlayer_with_angular_21.md +412 -0
- package/docs/tr/benchmark/nextjs.md +1 -1
- package/docs/tr/benchmark/solid.md +1 -1
- package/docs/tr/benchmark/svelte.md +1 -1
- package/docs/tr/benchmark/tanstack.md +1 -1
- package/docs/tr/dictionary/markdown.md +165 -7
- package/docs/tr/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/tr/intlayer_with_angular_21.md +412 -0
- package/docs/uk/benchmark/nextjs.md +1 -1
- package/docs/uk/benchmark/solid.md +1 -1
- package/docs/uk/benchmark/svelte.md +1 -1
- package/docs/uk/benchmark/tanstack.md +1 -1
- package/docs/uk/dictionary/markdown.md +165 -7
- package/docs/uk/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/uk/intlayer_with_angular_21.md +412 -0
- package/docs/ur/intlayer_with_angular_21.md +412 -0
- package/docs/vi/benchmark/nextjs.md +1 -1
- package/docs/vi/benchmark/solid.md +1 -1
- package/docs/vi/benchmark/svelte.md +1 -1
- package/docs/vi/benchmark/tanstack.md +1 -1
- package/docs/vi/dictionary/markdown.md +165 -7
- package/docs/vi/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/vi/intlayer_with_angular_21.md +412 -0
- package/docs/zh/benchmark/nextjs.md +1 -1
- package/docs/zh/benchmark/solid.md +1 -1
- package/docs/zh/benchmark/svelte.md +1 -1
- package/docs/zh/benchmark/tanstack.md +1 -1
- package/docs/zh/dictionary/markdown.md +165 -7
- package/docs/zh/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
- package/docs/zh/intlayer_with_angular_21.md +412 -0
- package/docs/zh-TW/intlayer_with_angular_21.md +412 -0
- package/package.json +7 -7
- package/src/common.ts +12 -6
- package/src/generated/docs.entry.ts +39 -19
|
@@ -120,7 +120,7 @@ Nous avons comparé **quatre stratégies de chargement** :
|
|
|
120
120
|
|
|
121
121
|
Les étoiles GitHub sont un indicateur fort de la popularité d'un projet, de la confiance de la communauté et de sa pertinence à long terme. Bien qu'elles ne soient pas une mesure directe de la qualité technique, elles reflètent le nombre de développeurs qui trouvent le projet utile, suivent ses progrès et sont susceptibles de l'adopter. Pour estimer la valeur d'un projet, les étoiles aident à comparer l'attraction entre les alternatives et fournissent des informations sur la croissance de l'écosystème.
|
|
122
122
|
|
|
123
|
-
[](https://www.star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
|
|
124
124
|
|
|
125
125
|
## Résultats détaillés
|
|
126
126
|
|
|
@@ -128,7 +128,7 @@ Nous avons comparé **quatre stratégies de chargement** :
|
|
|
128
128
|
|
|
129
129
|
Les étoiles GitHub sont un indicateur fort de la popularité d'un projet, de la confiance de la communauté et de sa pertinence à long terme. Bien qu'elles ne soient pas une mesure directe de la qualité technique, elles reflètent le nombre de développeurs qui trouvent le projet utile, suivent ses progrès et sont susceptibles de l'adopter. Pour estimer la valeur d'un projet, les étoiles aident à comparer l'attraction entre les alternatives et fournissent des informations sur la croissance de l'écosystème.
|
|
130
130
|
|
|
131
|
-
[](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&lingui/js-lingui&amannn/next-intl&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
132
132
|
|
|
133
133
|
## Résultats détaillés
|
|
134
134
|
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
- content
|
|
18
18
|
- markdown
|
|
19
19
|
history:
|
|
20
|
+
- version: 8.11.0
|
|
21
|
+
date: 2026-05-28
|
|
22
|
+
changes: "Permettre la pré-analyse de l'AST Markdown pour le SSR / l'hydratation"
|
|
20
23
|
- version: 8.10.0
|
|
21
24
|
date: 2026-05-19
|
|
22
25
|
changes: "Ajout de la prise en charge des fichiers `.content.md`"
|
|
@@ -66,13 +69,10 @@ Vous pouvez déclarer du contenu Markdown en utilisant la fonction `md` ou simpl
|
|
|
66
69
|
Exemple de structure de fichiers :
|
|
67
70
|
|
|
68
71
|
```text
|
|
69
|
-
content
|
|
70
|
-
├── en
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
│ └── markdown-file.fr.content.md
|
|
74
|
-
└── es/
|
|
75
|
-
└── markdown-file.es.content.md
|
|
72
|
+
content
|
|
73
|
+
├── markdown-file.en.content.md
|
|
74
|
+
├── markdown-file.fr.content.md
|
|
75
|
+
└── markdown-file.es.content.md
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
Vous pouvez ajouter dans le front-matter n'importe quelle propriété définie dans la [Définition du dictionnaire](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md)
|
|
@@ -1152,6 +1152,164 @@ export class MyComponent {
|
|
|
1152
1152
|
|
|
1153
1153
|
---
|
|
1154
1154
|
|
|
1155
|
+
## Rendu Côté Serveur (SSR) et Hydratation
|
|
1156
|
+
|
|
1157
|
+
En comparaison avec d'autres parseurs Markdown tels que remark / rehype, Intlayer Markdown est sans dépendance et s'exécute aussi bien côté client que côté serveur.
|
|
1158
|
+
|
|
1159
|
+
Cependant, Intlayer optimise l'analyse pour les frameworks de rendu côté serveur (SSR) (tels que Next.js App Router, React Router, Nuxt, SvelteKit, etc.).
|
|
1160
|
+
|
|
1161
|
+
Au lieu d'envoyer des chaînes Markdown brutes au client et de les analyser dans le navigateur (ce qui entraîne une pénalité de performance), Intlayer vous permet de pré-analyser le Markdown en un arbre de syntaxe abstraite (AST) sur le serveur.
|
|
1162
|
+
|
|
1163
|
+
Vous pouvez utiliser la fonction `parseMarkdown` du package Intlayer de votre framework côté serveur pour générer un AST sérialisable (objet `ParsedMarkdown`), et le transmettre directement au frontend. Tous les utilitaires de rendu Intlayer (comme `<MarkdownRenderer>`, `useMarkdownRenderer`, etc.) acceptent automatiquement cet objet AST et le rendent de manière transparente.
|
|
1164
|
+
|
|
1165
|
+
### Exemple dans une architecture Serveur/Client
|
|
1166
|
+
|
|
1167
|
+
<Tabs group="framework">
|
|
1168
|
+
<Tab label="React Router" value="react">
|
|
1169
|
+
|
|
1170
|
+
```tsx fileName="server.ts"
|
|
1171
|
+
import { parseMarkdown } from "react-intlayer/markdown";
|
|
1172
|
+
|
|
1173
|
+
// 1. Sur le serveur : Analyser le markdown en un AST sérialisable
|
|
1174
|
+
export const loader = async () => {
|
|
1175
|
+
const markdownString = "## My title \n\nLorem Ipsum";
|
|
1176
|
+
const ast = parseMarkdown(markdownString);
|
|
1177
|
+
|
|
1178
|
+
// Renvoyer l'AST au client sous forme de JSON
|
|
1179
|
+
return Response.json({ content: ast });
|
|
1180
|
+
};
|
|
1181
|
+
```
|
|
1182
|
+
|
|
1183
|
+
```tsx fileName="client.tsx"
|
|
1184
|
+
import { useLoaderData } from "react-router";
|
|
1185
|
+
import { MarkdownRenderer } from "react-intlayer/markdown";
|
|
1186
|
+
|
|
1187
|
+
// 2. Sur le client : Rendre l'AST directement sans ré-analyse
|
|
1188
|
+
export default function Page() {
|
|
1189
|
+
const { content } = useLoaderData();
|
|
1190
|
+
|
|
1191
|
+
// Le renderer accepte soit une chaîne brute, soit l'AST analysé
|
|
1192
|
+
return <MarkdownRenderer content={content} />;
|
|
1193
|
+
}
|
|
1194
|
+
```
|
|
1195
|
+
|
|
1196
|
+
</Tab>
|
|
1197
|
+
<Tab label="Next.js" value="nextjs">
|
|
1198
|
+
|
|
1199
|
+
```tsx fileName="app/page.tsx"
|
|
1200
|
+
import { parseMarkdown } from "next-intlayer/markdown";
|
|
1201
|
+
import { MarkdownRenderer } from "next-intlayer/markdown";
|
|
1202
|
+
|
|
1203
|
+
export default async function Page() {
|
|
1204
|
+
// 1. Analyser le markdown en un AST sérialisable sur le serveur
|
|
1205
|
+
const markdownString = "## My title \n\nLorem Ipsum";
|
|
1206
|
+
const ast = parseMarkdown(markdownString);
|
|
1207
|
+
|
|
1208
|
+
// 2. Rendre l'AST directement
|
|
1209
|
+
// Dans un composant serveur, cela fonctionne de manière transparente et transmet l'AST
|
|
1210
|
+
// directement aux composants clients sous-jacents si nécessaire.
|
|
1211
|
+
return <MarkdownRenderer content={ast} />;
|
|
1212
|
+
}
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
</Tab>
|
|
1216
|
+
<Tab label="Vue / Nuxt" value="vue">
|
|
1217
|
+
|
|
1218
|
+
```vue fileName="pages/index.vue"
|
|
1219
|
+
<script setup lang="ts">
|
|
1220
|
+
import { parseMarkdown } from "vue-intlayer/markdown";
|
|
1221
|
+
import { MarkdownRenderer } from "vue-intlayer/markdown";
|
|
1222
|
+
|
|
1223
|
+
// 1. Récupérer et analyser le markdown en un AST sur le serveur
|
|
1224
|
+
const { data: ast } = await useAsyncData('markdown', () => {
|
|
1225
|
+
const markdownString = "## My title \n\nLorem Ipsum";
|
|
1226
|
+
return parseMarkdown(markdownString);
|
|
1227
|
+
});
|
|
1228
|
+
</script>
|
|
1229
|
+
|
|
1230
|
+
<template>
|
|
1231
|
+
<!-- 2. Sur le client : Rendre l'AST directement sans ré-analyse -->
|
|
1232
|
+
<MarkdownRenderer :content="ast" />
|
|
1233
|
+
</template>
|
|
1234
|
+
```
|
|
1235
|
+
|
|
1236
|
+
</Tab>
|
|
1237
|
+
<Tab label="SvelteKit" value="svelte">
|
|
1238
|
+
|
|
1239
|
+
```typescript fileName="+page.server.ts"
|
|
1240
|
+
import { parseMarkdown } from "svelte-intlayer/markdown";
|
|
1241
|
+
|
|
1242
|
+
// 1. Sur le serveur : Analyser le markdown en un AST sérialisable
|
|
1243
|
+
export const load = async () => {
|
|
1244
|
+
const markdownString = "## My title \n\nLorem Ipsum";
|
|
1245
|
+
const ast = parseMarkdown(markdownString);
|
|
1246
|
+
|
|
1247
|
+
// Renvoyer l'AST au client
|
|
1248
|
+
return { content: ast };
|
|
1249
|
+
};
|
|
1250
|
+
```
|
|
1251
|
+
|
|
1252
|
+
```svelte fileName="+page.svelte"
|
|
1253
|
+
<script lang="ts">
|
|
1254
|
+
import { MarkdownRenderer } from "svelte-intlayer/markdown";
|
|
1255
|
+
export let data;
|
|
1256
|
+
</script>
|
|
1257
|
+
|
|
1258
|
+
<!-- 2. Sur le client : Rendre l'AST directement sans ré-analyse -->
|
|
1259
|
+
<MarkdownRenderer value={data.content} />
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
</Tab>
|
|
1263
|
+
<Tab label="Angular" value="angular">
|
|
1264
|
+
|
|
1265
|
+
L'SSR d'Angular résout généralement les données sur le serveur lors du chargement initial et s'hydrate sur le client. Vous pouvez utiliser des résolveurs pour transmettre l'AST.
|
|
1266
|
+
|
|
1267
|
+
```typescript fileName="app.resolver.ts"
|
|
1268
|
+
import { Injectable } from "@angular/core";
|
|
1269
|
+
import { Resolve } from "@angular/router";
|
|
1270
|
+
import { parseMarkdown, type ParsedMarkdown } from "angular-intlayer/markdown";
|
|
1271
|
+
|
|
1272
|
+
@Injectable({ providedIn: "root" })
|
|
1273
|
+
export class MarkdownResolver implements Resolve<ParsedMarkdown> {
|
|
1274
|
+
resolve(): ParsedMarkdown {
|
|
1275
|
+
const markdownString = "## My title \n\nLorem Ipsum";
|
|
1276
|
+
// 1. Sur le serveur : Analyser le markdown en un AST sérialisable
|
|
1277
|
+
return parseMarkdown(markdownString);
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
```typescript fileName="app.component.ts"
|
|
1283
|
+
import { Component } from "@angular/core";
|
|
1284
|
+
import { ActivatedRoute } from "@angular/router";
|
|
1285
|
+
import { IntlayerMarkdownService, type ParsedMarkdown } from "angular-intlayer/markdown";
|
|
1286
|
+
|
|
1287
|
+
@Component({
|
|
1288
|
+
selector: "app-root",
|
|
1289
|
+
template: `<div [innerHTML]="renderedMarkdown"></div>`,
|
|
1290
|
+
})
|
|
1291
|
+
export class AppComponent {
|
|
1292
|
+
renderedMarkdown: string = "";
|
|
1293
|
+
|
|
1294
|
+
constructor(
|
|
1295
|
+
private route: ActivatedRoute,
|
|
1296
|
+
private markdownService: IntlayerMarkdownService
|
|
1297
|
+
) {
|
|
1298
|
+
// 2. Sur le client : Rendre l'AST directement sans ré-analyse
|
|
1299
|
+
this.route.data.subscribe((data) => {
|
|
1300
|
+
this.renderedMarkdown = this.markdownService.renderMarkdown(
|
|
1301
|
+
data.markdownAst
|
|
1302
|
+
) as string;
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
```
|
|
1307
|
+
|
|
1308
|
+
</Tab>
|
|
1309
|
+
</Tabs>
|
|
1310
|
+
|
|
1311
|
+
Ce modèle garantit que la logique d'analyse Markdown est entièrement exécutée sur le serveur, ce qui réduit considérablement le temps d'exécution côté client et améliore la vitesse d'hydratation initiale.
|
|
1312
|
+
|
|
1155
1313
|
## Référence des options
|
|
1156
1314
|
|
|
1157
1315
|
Ces options peuvent être passées à `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` et `renderMarkdown`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
3
|
updatedAt: 2026-05-06
|
|
4
|
-
title: Angular i18n - Comment traduire une application Angular
|
|
4
|
+
title: Angular i18n - Comment traduire une application Angular 19 (Webpack)
|
|
5
5
|
description: Découvrez comment rendre votre site web Angular multilingue. Suivez la documentation pour l'internationaliser (i18n) et le traduire.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internationalisation
|
|
@@ -13,8 +13,9 @@ slugs:
|
|
|
13
13
|
- doc
|
|
14
14
|
- environment
|
|
15
15
|
- angular
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
- 19
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-angular-19-template
|
|
18
|
+
applicationShowcase: https://intlayer-angular-19-template.vercel.app
|
|
18
19
|
history:
|
|
19
20
|
- version: 8.9.0
|
|
20
21
|
date: 2026-05-04
|
|
@@ -27,7 +28,7 @@ history:
|
|
|
27
28
|
changes: "Initialiser l'historique"
|
|
28
29
|
---
|
|
29
30
|
|
|
30
|
-
# Traduisez votre site web Angular avec Intlayer | Internationalisation (i18n)
|
|
31
|
+
# Traduisez votre site web Angular 19 (Webpack) avec Intlayer | Internationalisation (i18n)
|
|
31
32
|
|
|
32
33
|
## Table des matières
|
|
33
34
|
|
|
@@ -52,7 +53,7 @@ Avec Intlayer, vous pouvez :
|
|
|
52
53
|
<Tab label="Code" value="code">
|
|
53
54
|
|
|
54
55
|
<iframe
|
|
55
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-angular-template?file=intlayer.config.ts"
|
|
56
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-19-template?file=intlayer.config.ts"
|
|
56
57
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
57
58
|
title="Démo CodeSandbox - Comment internationaliser votre application avec Intlayer"
|
|
58
59
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -63,7 +64,7 @@ Avec Intlayer, vous pouvez :
|
|
|
63
64
|
<Tab label="Démo" value="demo">
|
|
64
65
|
|
|
65
66
|
<iframe
|
|
66
|
-
src="https://intlayer-angular-template.vercel.app"
|
|
67
|
+
src="https://intlayer-angular-19-template.vercel.app"
|
|
67
68
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
68
69
|
title="Démo - intlayer-angular-template"
|
|
69
70
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -73,7 +74,7 @@ Avec Intlayer, vous pouvez :
|
|
|
73
74
|
</Tab>
|
|
74
75
|
</Tabs>
|
|
75
76
|
|
|
76
|
-
Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-angular-template) sur GitHub.
|
|
77
|
+
Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-angular-19-template) sur GitHub.
|
|
77
78
|
|
|
78
79
|
### Étape 1 : Installer les dépendances
|
|
79
80
|
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-04-18
|
|
3
|
+
updatedAt: 2026-05-06
|
|
4
|
+
title: Angular i18n - Comment traduire une application Angular 21 (Vite) en 2026
|
|
5
|
+
description: Découvrez comment rendre votre site Web Angular multilingue. Suivez la documentation pour l'internationaliser (i18n) et le traduire.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internationalisation
|
|
8
|
+
- Documentation
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Angular
|
|
11
|
+
- JavaScript
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- environment
|
|
15
|
+
- angular
|
|
16
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-angular-21-template
|
|
17
|
+
applicationShowcase: https://intlayer-angular-21-template.vercel.app/
|
|
18
|
+
history:
|
|
19
|
+
- version: 8.9.0
|
|
20
|
+
date: 2026-05-04
|
|
21
|
+
changes: "Mise à jour de l'utilisation de l'API Solid useIntlayer pour l'accès direct aux propriétés"
|
|
22
|
+
- version: 8.0.0
|
|
23
|
+
date: 2026-01-26
|
|
24
|
+
changes: "Sortie de la version stable"
|
|
25
|
+
- version: 8.0.0
|
|
26
|
+
date: 2025-12-30
|
|
27
|
+
changes: "Ajout de la commande init"
|
|
28
|
+
- version: 5.5.10
|
|
29
|
+
date: 2025-06-29
|
|
30
|
+
changes: "Historique initial"
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Traduisez votre site Angular 21 (Vite) avec Intlayer | Internationalisation (i18n)
|
|
34
|
+
|
|
35
|
+
## Table des matières
|
|
36
|
+
|
|
37
|
+
<TOC/>
|
|
38
|
+
|
|
39
|
+
## Qu'est-ce qu'Intlayer ?
|
|
40
|
+
|
|
41
|
+
**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.
|
|
42
|
+
|
|
43
|
+
Avec Intlayer, vous pouvez :
|
|
44
|
+
|
|
45
|
+
- **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau du composant.
|
|
46
|
+
- **Localiser dynamiquement les métadonnées**, les routes et le contenu.
|
|
47
|
+
- **Garantir le support TypeScript** avec des types autogénérés, améliorant l'autocomplétion et la détection d'erreurs.
|
|
48
|
+
- **Bénéficier de fonctionnalités avancées**, comme la détection et le changement de locale dynamiques.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Guide étape par étape pour configurer Intlayer dans une application Angular
|
|
53
|
+
|
|
54
|
+
<Tabs defaultTab="code">
|
|
55
|
+
<Tab label="Code" value="code">
|
|
56
|
+
|
|
57
|
+
<iframe
|
|
58
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-21-template?file=intlayer.config.ts"
|
|
59
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
60
|
+
title="Démo CodeSandbox - Comment internationaliser votre application avec Intlayer"
|
|
61
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
62
|
+
loading="lazy"
|
|
63
|
+
/>
|
|
64
|
+
|
|
65
|
+
</Tab>
|
|
66
|
+
<Tab label="Démo" value="demo">
|
|
67
|
+
|
|
68
|
+
<iframe
|
|
69
|
+
src="https://intlayer-angular-21-template.vercel.app/"
|
|
70
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
71
|
+
title="Démo - intlayer-angular-template"
|
|
72
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
73
|
+
loading="lazy"
|
|
74
|
+
/>
|
|
75
|
+
|
|
76
|
+
</Tab>
|
|
77
|
+
</Tabs>
|
|
78
|
+
|
|
79
|
+
Voir [Modèle d'Application](https://github.com/aymericzip/intlayer-angular-21-template) sur GitHub.
|
|
80
|
+
|
|
81
|
+
### Étape 1 : Installer les dépendances
|
|
82
|
+
|
|
83
|
+
Installez les paquets nécessaires en utilisant npm :
|
|
84
|
+
|
|
85
|
+
```bash packageManager="npm"
|
|
86
|
+
npm install intlayer angular-intlayer
|
|
87
|
+
npm install @angular-builders/custom-esbuild --save-dev
|
|
88
|
+
npx intlayer init
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```bash packageManager="pnpm"
|
|
92
|
+
pnpm add intlayer angular-intlayer
|
|
93
|
+
pnpm add @angular-builders/custom-esbuild --save-dev
|
|
94
|
+
pnpm intlayer init
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```bash packageManager="yarn"
|
|
98
|
+
yarn add intlayer angular-intlayer
|
|
99
|
+
yarn add @angular-builders/custom-esbuild --save-dev
|
|
100
|
+
yarn intlayer init
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```bash packageManager="bun"
|
|
104
|
+
bun add intlayer angular-intlayer
|
|
105
|
+
bun add @angular-builders/custom-esbuild --dev
|
|
106
|
+
bun x intlayer init
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **intlayer**
|
|
110
|
+
|
|
111
|
+
Le paquet principal qui fournit les 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/content_file.md), la transpilation, et les [commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/cli/index.md).
|
|
112
|
+
|
|
113
|
+
- **angular-intlayer**
|
|
114
|
+
Le paquet qui intègre Intlayer avec l'application Angular. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation Angular.
|
|
115
|
+
|
|
116
|
+
- **@angular-builders/custom-esbuild**
|
|
117
|
+
Requis pour personnaliser la configuration esbuild d'Angular CLI.
|
|
118
|
+
|
|
119
|
+
### Étape 2 : Configuration de votre projet
|
|
120
|
+
|
|
121
|
+
Créez un fichier de configuration pour configurer les langues de votre application :
|
|
122
|
+
|
|
123
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
124
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
125
|
+
|
|
126
|
+
const config: IntlayerConfig = {
|
|
127
|
+
internationalization: {
|
|
128
|
+
locales: [
|
|
129
|
+
Locales.ENGLISH,
|
|
130
|
+
Locales.FRENCH,
|
|
131
|
+
Locales.SPANISH,
|
|
132
|
+
// Vos autres langues
|
|
133
|
+
],
|
|
134
|
+
defaultLocale: Locales.ENGLISH,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export default config;
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
> Via ce fichier de configuration, vous pouvez configurer les URL localisées, la redirection de middleware, les noms de cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les journaux Intlayer dans la console, et 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).
|
|
142
|
+
|
|
143
|
+
### Étape 3 : Intégrer Intlayer dans votre configuration Angular
|
|
144
|
+
|
|
145
|
+
Pour intégrer Intlayer avec Angular CLI, vous devez utiliser un builder personnalisé. Ce guide suppose que vous utilisez Vite/esbuild (par défaut pour les projets Angular 21).
|
|
146
|
+
|
|
147
|
+
D'abord, modifiez votre `angular.json` pour utiliser le builder esbuild personnalisé. Mettez à jour les configurations `build` et `serve` :
|
|
148
|
+
|
|
149
|
+
```json5 fileName="angular.json"
|
|
150
|
+
{
|
|
151
|
+
"projects": {
|
|
152
|
+
"your-app-name": {
|
|
153
|
+
"architect": {
|
|
154
|
+
"build": {
|
|
155
|
+
"builder": "@angular-builders/custom-esbuild:application", // replace "@angular/build:application"
|
|
156
|
+
"options": {
|
|
157
|
+
"define": {
|
|
158
|
+
"process.env": "{}",
|
|
159
|
+
},
|
|
160
|
+
"plugins": ["./esbuild.plugins.ts"],
|
|
161
|
+
"browser": "src/main.ts",
|
|
162
|
+
// ...
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
"serve": {
|
|
166
|
+
"builder": "@angular-builders/custom-esbuild:dev-server", // replace "@angular/build:dev-server"
|
|
167
|
+
"options": {
|
|
168
|
+
"prebundle": {
|
|
169
|
+
"exclude": [
|
|
170
|
+
"intlayer",
|
|
171
|
+
"angular-intlayer",
|
|
172
|
+
"@intlayer/config/built",
|
|
173
|
+
"@intlayer/core"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
> Assurez-vous de remplacer `your-app-name` par le nom réel de votre projet dans `angular.json`.
|
|
184
|
+
|
|
185
|
+
Ensuite, créez un fichier `esbuild.plugins.ts` à la racine de votre projet :
|
|
186
|
+
|
|
187
|
+
```typescript fileName="esbuild.plugins.ts"
|
|
188
|
+
import { intlayerEsbuildPlugin } from "angular-intlayer/esbuild";
|
|
189
|
+
|
|
190
|
+
export default [intlayerEsbuildPlugin()];
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
> La fonction `intlayerEsbuildPlugin` configure esbuild avec Intlayer. Elle injecte le plugin pour gérer les fichiers de déclaration de contenu et configure les éléments pour des performances optimales.
|
|
194
|
+
|
|
195
|
+
> **Utilisateurs de NX** : Les builders Angular de NX chargent les fichiers de plug-in via la résolution ESM native de Node et ne compilent pas les fichiers de plug-in TypeScript à la volée. Utilisez plutôt un fichier `.mjs` et mettez à jour la référence `plugins` dans `angular.json` en conséquence :
|
|
196
|
+
>
|
|
197
|
+
> ```javascript fileName="esbuild.plugins.mjs"
|
|
198
|
+
> import { intlayerEsbuildPlugin } from "angular-intlayer/esbuild";
|
|
199
|
+
>
|
|
200
|
+
> export default [intlayerEsbuildPlugin()];
|
|
201
|
+
> ```
|
|
202
|
+
>
|
|
203
|
+
> Ensuite, dans `angular.json`, pointez vers `"./esbuild.plugins.mjs"` au lieu de `"./esbuild.plugins.ts"`.
|
|
204
|
+
|
|
205
|
+
### Étape 4 : Déclarez votre contenu
|
|
206
|
+
|
|
207
|
+
Créez et gérez vos déclarations de contenu pour stocker les traductions :
|
|
208
|
+
|
|
209
|
+
```tsx fileName="src/app/app.content.ts" contentDeclarationFormat=["typescript", "esm", "cjs"]
|
|
210
|
+
import { t, type Dictionary } from "intlayer";
|
|
211
|
+
|
|
212
|
+
const appContent = {
|
|
213
|
+
key: "app",
|
|
214
|
+
content: {
|
|
215
|
+
title: t({
|
|
216
|
+
en: "Hello",
|
|
217
|
+
fr: "Bonjour",
|
|
218
|
+
es: "Hola",
|
|
219
|
+
}),
|
|
220
|
+
congratulations: t({
|
|
221
|
+
en: "Congratulations! Your app is running. 🎉",
|
|
222
|
+
fr: "Félicitations! Votre application est en cours d'exécution. 🎉",
|
|
223
|
+
es: "¡Felicidades! Tu aplicación está en ejecución. 🎉",
|
|
224
|
+
}),
|
|
225
|
+
exploreDocs: t({
|
|
226
|
+
en: "Explore the Docs",
|
|
227
|
+
fr: "Explorer les Docs",
|
|
228
|
+
es: "Explorar los Docs",
|
|
229
|
+
}),
|
|
230
|
+
learnWithTutorials: t({
|
|
231
|
+
en: "Learn with Tutorials",
|
|
232
|
+
fr: "Apprendre avec les Tutoriels",
|
|
233
|
+
es: "Aprender con los Tutorios",
|
|
234
|
+
}),
|
|
235
|
+
cliDocs: "CLI Docs",
|
|
236
|
+
angularLanguageService: t({
|
|
237
|
+
en: "Angular Language Service",
|
|
238
|
+
fr: "Service de Langage Angular",
|
|
239
|
+
es: "Servicio de Lenguaje Angular",
|
|
240
|
+
}),
|
|
241
|
+
angularDevTools: "Angular DevTools",
|
|
242
|
+
github: "Github",
|
|
243
|
+
twitter: "Twitter",
|
|
244
|
+
youtube: "Youtube",
|
|
245
|
+
},
|
|
246
|
+
} satisfies Dictionary;
|
|
247
|
+
|
|
248
|
+
export default appContent;
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
> 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, `./src`). Et qu'elles correspondent à l'extension de fichier de déclaration de contenu (par défaut, `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
252
|
+
|
|
253
|
+
> Pour plus de détails, consultez la [documentation sur les déclarations de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md).
|
|
254
|
+
|
|
255
|
+
### Étape 5 : Utiliser Intlayer dans votre code
|
|
256
|
+
|
|
257
|
+
Pour utiliser les fonctionnalités d'internationalisation d'Intlayer dans votre application Angular, vous devez fournir Intlayer dans la configuration de votre application.
|
|
258
|
+
|
|
259
|
+
```typescript fileName="src/app/app.config.ts"
|
|
260
|
+
import { ApplicationConfig } from "@angular/core";
|
|
261
|
+
import { provideRouter } from "@angular/router";
|
|
262
|
+
import { provideIntlayer } from "angular-intlayer";
|
|
263
|
+
import { routes } from "./app.routes";
|
|
264
|
+
|
|
265
|
+
export const appConfig: ApplicationConfig = {
|
|
266
|
+
providers: [
|
|
267
|
+
provideRouter(routes),
|
|
268
|
+
provideIntlayer(), // Ajoutez le fournisseur Intlayer ici
|
|
269
|
+
],
|
|
270
|
+
};
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Ensuite, vous pouvez utiliser la fonction `useIntlayer` dans n'importe quel composant.
|
|
274
|
+
|
|
275
|
+
```typescript fileName="src/app/app.component.ts"
|
|
276
|
+
import { Component } from "@angular/core";
|
|
277
|
+
import { RouterOutlet } from "@angular/router";
|
|
278
|
+
import { useIntlayer } from "angular-intlayer";
|
|
279
|
+
|
|
280
|
+
@Component({
|
|
281
|
+
selector: "app-root",
|
|
282
|
+
standalone: true,
|
|
283
|
+
imports: [RouterOutlet],
|
|
284
|
+
templateUrl: "./app.component.html",
|
|
285
|
+
styleUrl: "./app.component.css",
|
|
286
|
+
})
|
|
287
|
+
export class AppComponent {
|
|
288
|
+
content = useIntlayer("app");
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Et dans votre modèle :
|
|
293
|
+
|
|
294
|
+
```html fileName="src/app/app.component.html"
|
|
295
|
+
<div class="content">
|
|
296
|
+
<h1>{{ content().title }}</h1>
|
|
297
|
+
<p>{{ content().congratulations }}</p>
|
|
298
|
+
</div>
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Le contenu Intlayer est retourné sous forme de `Signal`, donc vous accédez aux valeurs en appelant le signal : `content().title`.
|
|
302
|
+
|
|
303
|
+
### (Facultatif) Étape 6 : Changer la langue de votre contenu
|
|
304
|
+
|
|
305
|
+
Pour changer la langue de votre contenu, vous pouvez utiliser la fonction `setLocale` fournie par la fonction `useLocale`. Cela vous permet de définir la langue de l'application et de mettre à jour le contenu en conséquence.
|
|
306
|
+
|
|
307
|
+
Créez un composant pour basculer entre les langues :
|
|
308
|
+
|
|
309
|
+
```typescript fileName="src/app/locale-switcher.component.ts"
|
|
310
|
+
import { Component } from "@angular/core";
|
|
311
|
+
import { CommonModule } from "@angular/common";
|
|
312
|
+
import { useLocale } from "angular-intlayer";
|
|
313
|
+
|
|
314
|
+
@Component({
|
|
315
|
+
selector: "app-locale-switcher",
|
|
316
|
+
standalone: true,
|
|
317
|
+
imports: [CommonModule],
|
|
318
|
+
template: `
|
|
319
|
+
<div class="locale-switcher">
|
|
320
|
+
<select
|
|
321
|
+
[value]="locale()"
|
|
322
|
+
(change)="setLocale($any($event.target).value)"
|
|
323
|
+
>
|
|
324
|
+
@for (loc of availableLocales; track loc) {
|
|
325
|
+
<option [value]="loc">{{ loc }}</option>
|
|
326
|
+
}
|
|
327
|
+
</select>
|
|
328
|
+
</div>
|
|
329
|
+
`,
|
|
330
|
+
})
|
|
331
|
+
export class LocaleSwitcherComponent {
|
|
332
|
+
localeCtx = useLocale();
|
|
333
|
+
|
|
334
|
+
locale = this.localeCtx.locale;
|
|
335
|
+
availableLocales = this.localeCtx.availableLocales;
|
|
336
|
+
setLocale = this.localeCtx.setLocale;
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Ensuite, utilisez ce composant dans votre `app.component.ts` :
|
|
341
|
+
|
|
342
|
+
```typescript fileName="src/app/app.component.ts"
|
|
343
|
+
import { Component } from "@angular/core";
|
|
344
|
+
import { RouterOutlet } from "@angular/router";
|
|
345
|
+
import { useIntlayer } from "angular-intlayer";
|
|
346
|
+
import { LocaleSwitcherComponent } from "./locale-switcher.component";
|
|
347
|
+
|
|
348
|
+
@Component({
|
|
349
|
+
selector: "app-root",
|
|
350
|
+
standalone: true,
|
|
351
|
+
imports: [RouterOutlet, LocaleSwitcherComponent],
|
|
352
|
+
templateUrl: "./app.component.html",
|
|
353
|
+
styleUrl: "./app.component.css",
|
|
354
|
+
})
|
|
355
|
+
export class AppComponent {
|
|
356
|
+
content = useIntlayer("app");
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Configurer TypeScript
|
|
361
|
+
|
|
362
|
+
Intlayer utilise l'augmentation de module pour tirer parti de TypeScript et rendre votre base de code plus robuste.
|
|
363
|
+
|
|
364
|
+

|
|
365
|
+
|
|
366
|
+

|
|
367
|
+
|
|
368
|
+
Assurez-vous que votre configuration TypeScript inclut les types autogénérés.
|
|
369
|
+
|
|
370
|
+
```json5 fileName="tsconfig.json"
|
|
371
|
+
{
|
|
372
|
+
// ... Vos configurations TypeScript existantes
|
|
373
|
+
"include": [
|
|
374
|
+
// ... Vos configurations TypeScript existantes
|
|
375
|
+
".intlayer/**/*.ts", // Inclure les types autogénérés
|
|
376
|
+
],
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Configuration Git
|
|
381
|
+
|
|
382
|
+
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les commiter dans votre dépôt Git.
|
|
383
|
+
|
|
384
|
+
Pour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier `.gitignore` :
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
# Ignorer les fichiers générés par Intlayer
|
|
388
|
+
.intlayer
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Extension VS Code
|
|
392
|
+
|
|
393
|
+
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l'extension officielle **Intlayer VS Code Extension**.
|
|
394
|
+
|
|
395
|
+
[Installer depuis le VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
396
|
+
|
|
397
|
+
Cette extension fournit :
|
|
398
|
+
|
|
399
|
+
- **L'autocomplétion** pour les clés de traduction.
|
|
400
|
+
- **La détection d'erreurs en temps réel** pour les traductions manquantes.
|
|
401
|
+
- **Des aperçus en ligne** du contenu traduit.
|
|
402
|
+
- **Des actions rapides** pour créer et mettre à jour facilement les traductions.
|
|
403
|
+
|
|
404
|
+
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).
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
### Aller plus loin
|
|
409
|
+
|
|
410
|
+
Pour aller plus loin, vous pouvez implémenter l'[éditeur visuel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) ou externaliser votre contenu en utilisant le [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).
|
|
411
|
+
|
|
412
|
+
---
|