@intlayer/docs 5.5.11 → 5.5.12
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/ar/intlayer_with_next-intl.md +0 -1
- package/blog/ar/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ar/what_is_internationalization.md +2 -2
- package/blog/de/intlayer_with_next-intl.md +0 -1
- package/blog/de/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/de/what_is_internationalization.md +2 -2
- package/blog/en/intlayer_with_next-intl.md +0 -1
- package/blog/en/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en/what_is_internationalization.md +2 -2
- package/blog/en-GB/intlayer_with_next-intl.md +0 -1
- package/blog/en-GB/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en-GB/what_is_internationalization.md +2 -2
- package/blog/es/intlayer_with_next-intl.md +0 -1
- package/blog/es/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/es/what_is_internationalization.md +2 -2
- package/blog/fr/intlayer_with_next-intl.md +0 -1
- package/blog/fr/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/fr/what_is_internationalization.md +2 -2
- package/blog/hi/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/hi/what_is_internationalization.md +2 -2
- package/blog/it/intlayer_with_next-intl.md +0 -1
- package/blog/it/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/it/what_is_internationalization.md +2 -2
- package/blog/ja/intlayer_with_next-intl.md +0 -1
- package/blog/ja/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ja/what_is_internationalization.md +2 -2
- package/blog/ko/intlayer_with_next-intl.md +0 -1
- package/blog/ko/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/intlayer_with_next-intl.md +0 -1
- package/blog/pt/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/what_is_internationalization.md +2 -2
- package/blog/ru/intlayer_with_next-intl.md +0 -1
- package/blog/ru/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ru/what_is_internationalization.md +2 -2
- package/blog/zh/intlayer_with_next-intl.md +0 -1
- package/blog/zh/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/zh/what_is_internationalization.md +2 -2
- package/dist/cjs/blog.cjs +2 -2
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +17 -6
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs +2 -2
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +2 -2
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1152 -252
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +3778 -1124
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +794 -161
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +32 -31
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/legal.cjs +2 -2
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs +2 -2
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +17 -6
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs +2 -2
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs +2 -2
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +1151 -252
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +3777 -1124
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +793 -161
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +31 -31
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/legal.mjs +2 -2
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts +2 -2
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts +3 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/doc.d.ts +2 -2
- package/dist/types/doc.d.ts.map +1 -1
- package/dist/types/frequentQuestions.d.ts +2 -2
- package/dist/types/frequentQuestions.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/dist/types/legal.d.ts +2 -2
- package/dist/types/legal.d.ts.map +1 -1
- package/docs/ar/intlayer_with_vite+react.md +100 -108
- package/docs/de/intlayer_with_vite+react.md +121 -142
- package/docs/en/CI_CD.md +3 -1
- package/docs/en/autoFill.md +3 -1
- package/docs/en/configuration.md +4 -1
- package/docs/en/dictionary/condition.md +3 -1
- package/docs/en/dictionary/content_extention_customization.md +3 -1
- package/docs/en/dictionary/enumeration.md +3 -1
- package/docs/en/dictionary/file.md +3 -1
- package/docs/en/dictionary/function_fetching.md +3 -1
- package/docs/en/dictionary/get_started.md +3 -1
- package/docs/en/dictionary/insertion.md +3 -1
- package/docs/en/dictionary/markdown.md +3 -1
- package/docs/en/dictionary/nesting.md +3 -1
- package/docs/en/dictionary/translation.md +3 -1
- package/docs/en/how_works_intlayer.md +3 -1
- package/docs/en/index.md +3 -1
- package/docs/en/interest_of_intlayer.md +3 -1
- package/docs/en/intlayer_CMS.md +3 -1
- package/docs/en/intlayer_cli.md +3 -1
- package/docs/en/intlayer_visual_editor.md +3 -1
- package/docs/en/intlayer_with_angular.md +3 -1
- package/docs/en/intlayer_with_create_react_app.md +3 -1
- package/docs/en/intlayer_with_express.md +3 -1
- package/docs/en/intlayer_with_lynx+react.md +3 -1
- package/docs/en/intlayer_with_nextjs_14.md +6 -1
- package/docs/en/intlayer_with_nextjs_15.md +5 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en/intlayer_with_nuxt.md +3 -1
- package/docs/en/intlayer_with_react_native+expo.md +3 -1
- package/docs/en/intlayer_with_vite+preact.md +3 -1
- package/docs/en/intlayer_with_vite+react.md +9 -7
- package/docs/en/intlayer_with_vite+solid.md +3 -1
- package/docs/en/intlayer_with_vite+svelte.md +3 -1
- package/docs/en/intlayer_with_vite+vue.md +3 -1
- package/docs/en/introduction.md +3 -1
- package/docs/en/mcp_server.md +42 -1
- package/docs/en/packages/@intlayer/api/index.md +3 -1
- package/docs/en/packages/@intlayer/chokidar/index.md +3 -1
- package/docs/en/packages/@intlayer/cli/index.md +3 -1
- package/docs/en/packages/@intlayer/config/index.md +3 -1
- package/docs/en/packages/@intlayer/core/index.md +3 -1
- package/docs/en/packages/@intlayer/design-system/index.md +3 -1
- package/docs/en/packages/@intlayer/dictionary-entry/index.md +3 -1
- package/docs/en/packages/@intlayer/editor/index.md +3 -1
- package/docs/en/packages/@intlayer/editor-react/index.md +3 -1
- package/docs/en/packages/@intlayer/webpack/index.md +3 -1
- package/docs/en/packages/angular-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/t.md +3 -1
- package/docs/en/packages/intlayer/getConfiguration.md +3 -1
- package/docs/en/packages/intlayer/getEnumeration.md +3 -1
- package/docs/en/packages/intlayer/getHTMLTextDir.md +3 -1
- package/docs/en/packages/intlayer/getLocaleLang.md +3 -1
- package/docs/en/packages/intlayer/getLocaleName.md +3 -1
- package/docs/en/packages/intlayer/getLocalizedUrl.md +3 -1
- package/docs/en/packages/intlayer/getMultilingualUrls.md +3 -1
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +3 -1
- package/docs/en/packages/intlayer/getTranslation.md +3 -1
- package/docs/en/packages/intlayer/getTranslationContent.md +3 -1
- package/docs/en/packages/intlayer/index.md +3 -1
- package/docs/en/packages/intlayer-cli/index.md +3 -1
- package/docs/en/packages/intlayer-editor/index.md +3 -1
- package/docs/en/packages/lynx-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/t.md +3 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/next-intlayer/useLocale.md +3 -1
- package/docs/en/packages/nuxt-intlayer/index.md +3 -1
- package/docs/en/packages/preact-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/t.md +3 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/react-intlayer/useLocale.md +3 -1
- package/docs/en/packages/react-native-intlayer/index.md +3 -1
- package/docs/en/packages/react-scripts-intlayer/index.md +3 -1
- package/docs/en/packages/solid-intlayer/index.md +3 -1
- package/docs/en/packages/svelte-intlayer/index.md +3 -1
- package/docs/en/packages/vite-intlayer/index.md +3 -1
- package/docs/en/packages/vue-intlayer/index.md +3 -1
- package/docs/en/per_locale_file.md +3 -1
- package/docs/en/roadmap.md +5 -2
- package/docs/en/vs_code_extension.md +3 -1
- package/docs/en-GB/intlayer_with_vite+react.md +64 -83
- package/docs/es/intlayer_with_vite+react.md +91 -94
- package/docs/fr/intlayer_with_vite+react.md +73 -65
- package/docs/hi/intlayer_with_vite+react.md +107 -107
- package/docs/it/intlayer_with_vite+react.md +156 -112
- package/docs/ja/intlayer_with_vite+react.md +153 -218
- package/docs/ko/intlayer_with_vite+react.md +116 -148
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
- package/docs/pt/intlayer_with_vite+react.md +110 -132
- package/docs/ru/intlayer_with_vite+react.md +98 -83
- package/docs/zh/intlayer_with_vite+react.md +147 -184
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +1 -23
- package/frequent_questions/ar/build_error_CI_CD.md +75 -0
- package/frequent_questions/de/build_error_CI_CD.md +75 -0
- package/frequent_questions/en/build_error_CI_CD.md +75 -0
- package/frequent_questions/en-GB/build_error_CI_CD.md +75 -0
- package/frequent_questions/es/build_error_CI_CD.md +75 -0
- package/frequent_questions/fr/build_error_CI_CD.md +75 -0
- package/frequent_questions/hi/build_error_CI_CD.md +75 -0
- package/frequent_questions/it/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/intlayer_command_undefined.md +3 -3
- package/frequent_questions/ko/build_error_CI_CD.md +75 -0
- package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
- package/frequent_questions/pt/build_error_CI_CD.md +75 -0
- package/frequent_questions/ru/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
- package/legal/ar/privacy_notice.md +83 -0
- package/legal/ar/terms_of_service.md +55 -0
- package/legal/de/privacy_notice.md +83 -0
- package/legal/de/terms_of_service.md +55 -0
- package/legal/en/privacy_notice.md +83 -0
- package/legal/en/terms_of_service.md +55 -0
- package/legal/en-GB/privacy_notice.md +83 -0
- package/legal/en-GB/terms_of_service.md +55 -0
- package/legal/es/privacy_notice.md +83 -0
- package/legal/es/terms_of_service.md +55 -0
- package/legal/fr/privacy_notice.md +83 -0
- package/legal/fr/terms_of_service.md +55 -0
- package/legal/hi/privacy_notice.md +83 -0
- package/legal/hi/terms_of_service.md +55 -0
- package/legal/it/privacy_notice.md +83 -0
- package/legal/it/terms_of_service.md +55 -0
- package/legal/ja/privacy_notice.md +83 -0
- package/legal/ja/terms_of_service.md +55 -0
- package/legal/ko/privacy_notice.md +83 -0
- package/legal/ko/terms_of_service.md +55 -0
- package/legal/pt/privacy_notice.md +83 -0
- package/legal/pt/terms_of_service.md +55 -0
- package/legal/ru/privacy_notice.md +83 -0
- package/legal/ru/terms_of_service.md +55 -0
- package/legal/zh/privacy_notice.md +83 -0
- package/legal/zh/terms_of_service.md +55 -0
- package/package.json +7 -6
- package/src/blog.ts +6 -4
- package/src/common.ts +23 -7
- package/src/doc.ts +6 -4
- package/src/frequentQuestions.ts +6 -4
- package/src/generated/blog.entry.ts +1177 -280
- package/src/generated/docs.entry.ts +3868 -1217
- package/src/generated/frequentQuestions.entry.ts +808 -178
- package/src/generated/legal.entry.ts +34 -36
- package/src/legal.ts +6 -4
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt:
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2024-03-07
|
|
4
|
+
title: Prise en main d'Intlayer avec Vite + React
|
|
5
|
+
description: Apprenez à ajouter l'internationalisation (i18n) à votre application Vite et React en utilisant Intlayer. Suivez ce guide pour rendre votre application multilingue.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internationalisation
|
|
8
8
|
- Documentation
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Vite
|
|
11
11
|
- React
|
|
12
|
-
-
|
|
12
|
+
- i18n
|
|
13
13
|
- JavaScript
|
|
14
14
|
slugs:
|
|
15
15
|
- doc
|
|
16
16
|
- environment
|
|
17
|
-
-
|
|
17
|
+
- vite-and-react
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# Prise en main de l'internationalisation (i18n) avec Intlayer, Vite et React
|
|
21
21
|
|
|
22
|
-
Voir le [Modèle d'
|
|
22
|
+
Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-vite-react-template) sur GitHub.
|
|
23
23
|
|
|
24
|
-
## Qu'est-ce
|
|
24
|
+
## Qu'est-ce qu'Intlayer ?
|
|
25
25
|
|
|
26
26
|
**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.
|
|
27
27
|
|
|
28
28
|
Avec Intlayer, vous pouvez :
|
|
29
29
|
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
30
|
+
- **Gérez facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
|
|
31
|
+
- **Localisez dynamiquement les métadonnées**, les routes et le contenu.
|
|
32
|
+
- **Assurez la prise en charge de TypeScript** avec des types générés automatiquement, améliorant l'autocomplétion et la détection des erreurs.
|
|
33
|
+
- **Bénéficiez de fonctionnalités avancées**, comme la détection dynamique de la langue et le changement de locale.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -38,7 +38,7 @@ Avec Intlayer, vous pouvez :
|
|
|
38
38
|
|
|
39
39
|
### Étape 1 : Installer les dépendances
|
|
40
40
|
|
|
41
|
-
Installez les paquets nécessaires
|
|
41
|
+
Installez les paquets nécessaires en utilisant npm :
|
|
42
42
|
|
|
43
43
|
```bash packageManager="npm"
|
|
44
44
|
npm install intlayer react-intlayer
|
|
@@ -57,13 +57,13 @@ yarn add --save-dev vite-intlayer
|
|
|
57
57
|
|
|
58
58
|
- **intlayer**
|
|
59
59
|
|
|
60
|
-
Le
|
|
60
|
+
Le paquet principal qui fournit des outils d'internationalisation pour la gestion de la configuration, la traduction, la [déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md), la transpilation, et les [commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_cli.md).
|
|
61
61
|
|
|
62
62
|
- **react-intlayer**
|
|
63
|
-
Le
|
|
63
|
+
Le paquet qui intègre Intlayer avec une application React. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation dans React.
|
|
64
64
|
|
|
65
65
|
- **vite-intlayer**
|
|
66
|
-
Inclut le plugin Vite pour intégrer Intlayer avec le [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), ainsi que
|
|
66
|
+
Inclut le plugin Vite pour intégrer Intlayer avec le [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), ainsi que des middlewares pour détecter la locale préférée de l'utilisateur, gérer les cookies, et gérer la redirection des URL.
|
|
67
67
|
|
|
68
68
|
### Étape 2 : Configuration de votre projet
|
|
69
69
|
|
|
@@ -78,7 +78,7 @@ const config: IntlayerConfig = {
|
|
|
78
78
|
Locales.ENGLISH,
|
|
79
79
|
Locales.FRENCH,
|
|
80
80
|
Locales.SPANISH,
|
|
81
|
-
// Vos autres
|
|
81
|
+
// Vos autres langues
|
|
82
82
|
],
|
|
83
83
|
defaultLocale: Locales.ENGLISH,
|
|
84
84
|
},
|
|
@@ -91,14 +91,13 @@ export default config;
|
|
|
91
91
|
import { Locales } from "intlayer";
|
|
92
92
|
|
|
93
93
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
-
// Configuration de l'internationalisation
|
|
95
94
|
const config = {
|
|
96
95
|
internationalization: {
|
|
97
96
|
locales: [
|
|
98
97
|
Locales.ENGLISH,
|
|
99
98
|
Locales.FRENCH,
|
|
100
99
|
Locales.SPANISH,
|
|
101
|
-
// Vos autres
|
|
100
|
+
// Vos autres langues
|
|
102
101
|
],
|
|
103
102
|
defaultLocale: Locales.ENGLISH,
|
|
104
103
|
},
|
|
@@ -111,14 +110,13 @@ export default config;
|
|
|
111
110
|
const { Locales } = require("intlayer");
|
|
112
111
|
|
|
113
112
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
114
|
-
// Configuration de l'internationalisation
|
|
115
113
|
const config = {
|
|
116
114
|
internationalization: {
|
|
117
115
|
locales: [
|
|
118
116
|
Locales.ENGLISH,
|
|
119
117
|
Locales.FRENCH,
|
|
120
118
|
Locales.SPANISH,
|
|
121
|
-
// Vos autres
|
|
119
|
+
// Vos autres langues
|
|
122
120
|
],
|
|
123
121
|
defaultLocale: Locales.ENGLISH,
|
|
124
122
|
},
|
|
@@ -127,7 +125,7 @@ const config = {
|
|
|
127
125
|
module.exports = config;
|
|
128
126
|
```
|
|
129
127
|
|
|
130
|
-
> Grâce à ce fichier de configuration, vous pouvez configurer des
|
|
128
|
+
> Grâce à ce fichier de configuration, vous pouvez configurer des URLs localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et bien plus encore. Pour une liste complète des paramètres disponibles, consultez la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
|
|
131
129
|
|
|
132
130
|
### Étape 3 : Intégrer Intlayer dans votre configuration Vite
|
|
133
131
|
|
|
@@ -329,7 +327,7 @@ const appContent = {
|
|
|
329
327
|
),
|
|
330
328
|
es: (
|
|
331
329
|
<>
|
|
332
|
-
|
|
330
|
+
Editez <code>src/App.tsx</code> et enregistrez pour tester HMR
|
|
333
331
|
</>
|
|
334
332
|
),
|
|
335
333
|
},
|
|
@@ -345,7 +343,7 @@ const appContent = {
|
|
|
345
343
|
module.exports = appContent;
|
|
346
344
|
```
|
|
347
345
|
|
|
348
|
-
|
|
346
|
+
```json fileName="src/app.content.json" contentDeclarationFormat="json"
|
|
349
347
|
{
|
|
350
348
|
"$schema": "https://intlayer.org/schema.json",
|
|
351
349
|
"key": "app",
|
|
@@ -361,7 +359,7 @@ module.exports = appContent;
|
|
|
361
359
|
"reactLogo": {
|
|
362
360
|
"nodeType": "translation",
|
|
363
361
|
"translation": {
|
|
364
|
-
"en": "
|
|
362
|
+
"en": "React logo",
|
|
365
363
|
"fr": "Logo React",
|
|
366
364
|
"es": "Logo React"
|
|
367
365
|
}
|
|
@@ -393,6 +391,15 @@ module.exports = appContent;
|
|
|
393
391
|
"readTheDocs": {
|
|
394
392
|
"nodeType": "translation",
|
|
395
393
|
"translation": {
|
|
394
|
+
"en": "Click on the Vite and React logos to learn more",
|
|
395
|
+
"fr": "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
396
|
+
"es": "Haga clic en los logotipos de Vite y React para obtener más información"
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
396
403
|
> 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 correspondent à l'extension de fichier de déclaration de contenu (par défaut, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
397
404
|
|
|
398
405
|
> Pour plus de détails, consultez la [documentation sur la déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md).
|
|
@@ -448,7 +455,7 @@ const App: FC = () => (
|
|
|
448
455
|
);
|
|
449
456
|
|
|
450
457
|
export default App;
|
|
451
|
-
|
|
458
|
+
```
|
|
452
459
|
|
|
453
460
|
```tsx {5,9} fileName="src/App.msx" codeFormat="esm"
|
|
454
461
|
import { useState } from "react";
|
|
@@ -606,7 +613,7 @@ const LocaleSwitcher = () => {
|
|
|
606
613
|
|
|
607
614
|
### (Optionnel) Étape 7 : Ajouter un routage localisé à votre application
|
|
608
615
|
|
|
609
|
-
|
|
616
|
+
L'objectif de cette étape est de créer des routes uniques pour chaque langue. Cela est utile pour le SEO et pour des URLs optimisées pour le référencement.
|
|
610
617
|
Exemple :
|
|
611
618
|
|
|
612
619
|
```plaintext
|
|
@@ -664,7 +671,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
664
671
|
return (
|
|
665
672
|
<Navigate
|
|
666
673
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
667
|
-
replace //
|
|
674
|
+
replace // Remplace l'entrée actuelle de l'historique par la nouvelle
|
|
668
675
|
/>
|
|
669
676
|
);
|
|
670
677
|
}
|
|
@@ -698,7 +705,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
698
705
|
};
|
|
699
706
|
|
|
700
707
|
/**
|
|
701
|
-
* Un composant de routeur qui configure les routes spécifiques à
|
|
708
|
+
* Un composant de routeur qui configure les routes spécifiques à chaque locale.
|
|
702
709
|
* Il utilise React Router pour gérer la navigation et rendre les composants localisés.
|
|
703
710
|
*/
|
|
704
711
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
@@ -809,7 +816,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
809
816
|
};
|
|
810
817
|
|
|
811
818
|
/**
|
|
812
|
-
* Un composant
|
|
819
|
+
* Un composant routeur qui configure les routes spécifiques à chaque locale.
|
|
813
820
|
* Il utilise React Router pour gérer la navigation et rendre les composants localisés.
|
|
814
821
|
*/
|
|
815
822
|
export const LocaleRouter = ({ children }) => (
|
|
@@ -890,14 +897,14 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
890
897
|
);
|
|
891
898
|
}
|
|
892
899
|
|
|
893
|
-
// Envelopper les enfants avec IntlayerProvider et définir la locale
|
|
900
|
+
// Envelopper les enfants avec IntlayerProvider et définir la locale actuelle
|
|
894
901
|
return (
|
|
895
902
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
896
903
|
);
|
|
897
904
|
} else {
|
|
898
905
|
/**
|
|
899
906
|
* Lorsque middleware.prefixDefault est faux, la locale par défaut n'est pas préfixée.
|
|
900
|
-
* Assurez-vous que la locale
|
|
907
|
+
* Assurez-vous que la locale actuelle est valide et n'est pas la locale par défaut.
|
|
901
908
|
*/
|
|
902
909
|
if (
|
|
903
910
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -905,7 +912,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
905
912
|
.filter(
|
|
906
913
|
(locale) => locale.toString() !== defaultLocale.toString() // Exclure la locale par défaut
|
|
907
914
|
)
|
|
908
|
-
.includes(currentLocale) // Vérifier si la locale
|
|
915
|
+
.includes(currentLocale) // Vérifier si la locale actuelle est dans la liste des locales valides
|
|
909
916
|
) {
|
|
910
917
|
// Rediriger vers le chemin sans préfixe de locale
|
|
911
918
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
@@ -920,7 +927,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
920
927
|
|
|
921
928
|
/**
|
|
922
929
|
* Un composant de routeur qui configure des routes spécifiques à la locale.
|
|
923
|
-
* Il utilise React Router pour gérer la navigation et rendre
|
|
930
|
+
* Il utilise React Router pour gérer la navigation et rendre des composants localisés.
|
|
924
931
|
*/
|
|
925
932
|
const LocaleRouter = ({ children }) => (
|
|
926
933
|
<BrowserRouter>
|
|
@@ -931,7 +938,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
931
938
|
)
|
|
932
939
|
.map((locale) => (
|
|
933
940
|
<Route
|
|
934
|
-
// Modèle de route pour capturer la locale (ex. /en/, /fr/) et correspondre à tous les chemins suivants
|
|
941
|
+
// Modèle de route pour capturer la locale (ex. : /en/, /fr/) et correspondre à tous les chemins suivants
|
|
935
942
|
path={`/${locale}/*`}
|
|
936
943
|
key={locale}
|
|
937
944
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Enveloppe les enfants avec la gestion de la locale
|
|
@@ -939,7 +946,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
939
946
|
))}
|
|
940
947
|
|
|
941
948
|
{
|
|
942
|
-
// Si le préfixe
|
|
949
|
+
// Si le préfixe pour la locale par défaut est désactivé, rendre les enfants directement à la racine
|
|
943
950
|
!middleware.prefixDefault && (
|
|
944
951
|
<Route
|
|
945
952
|
path="*"
|
|
@@ -1028,9 +1035,9 @@ module.exports = defineConfig({
|
|
|
1028
1035
|
});
|
|
1029
1036
|
```
|
|
1030
1037
|
|
|
1031
|
-
### (Optionnel) Étape 8 : Modifier l
|
|
1038
|
+
### (Optionnel) Étape 8 : Modifier l'URL lorsque la langue change
|
|
1032
1039
|
|
|
1033
|
-
Pour modifier l
|
|
1040
|
+
Pour modifier l'URL lorsque la langue change, vous pouvez utiliser la propriété `onLocaleChange` fournie par le hook `useLocale`. Parallèlement, vous pouvez utiliser les hooks `useLocation` et `useNavigate` de `react-router-dom` pour mettre à jour le chemin de l'URL.
|
|
1034
1041
|
|
|
1035
1042
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
1036
1043
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -1044,7 +1051,7 @@ import { useLocale } from "react-intlayer";
|
|
|
1044
1051
|
import { type FC } from "react";
|
|
1045
1052
|
|
|
1046
1053
|
const LocaleSwitcher: FC = () => {
|
|
1047
|
-
const { pathname, search } = useLocation(); //
|
|
1054
|
+
const { pathname, search } = useLocation(); // Récupère le chemin URL actuel. Exemple : /fr/about?foo=bar
|
|
1048
1055
|
const navigate = useNavigate();
|
|
1049
1056
|
|
|
1050
1057
|
const { locale, availableLocales, setLocale } = useLocale({
|
|
@@ -1138,7 +1145,7 @@ const LocaleSwitcher = () => {
|
|
|
1138
1145
|
key={localeItem}
|
|
1139
1146
|
>
|
|
1140
1147
|
<span>
|
|
1141
|
-
{/*
|
|
1148
|
+
{/* Locale - ex. FR */}
|
|
1142
1149
|
{localeItem}
|
|
1143
1150
|
</span>
|
|
1144
1151
|
<span>
|
|
@@ -1146,7 +1153,7 @@ const LocaleSwitcher = () => {
|
|
|
1146
1153
|
{getLocaleName(localeItem, locale)}
|
|
1147
1154
|
</span>
|
|
1148
1155
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1149
|
-
{/* Langue dans la locale
|
|
1156
|
+
{/* Langue dans la locale actuelle - ex. Francés avec la locale actuelle définie sur Locales.SPANISH */}
|
|
1150
1157
|
{getLocaleName(localeItem)}
|
|
1151
1158
|
</span>
|
|
1152
1159
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1214,7 +1221,7 @@ const LocaleSwitcher = () => {
|
|
|
1214
1221
|
{getLocaleName(localeItem)}
|
|
1215
1222
|
</span>
|
|
1216
1223
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1217
|
-
{/* Langue en anglais - par exemple
|
|
1224
|
+
{/* Langue en anglais - par exemple Français */}
|
|
1218
1225
|
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1219
1226
|
</span>
|
|
1220
1227
|
</a>
|
|
@@ -1240,15 +1247,15 @@ Voici la **Étape 9** mise à jour avec des explications supplémentaires et des
|
|
|
1240
1247
|
|
|
1241
1248
|
---
|
|
1242
1249
|
|
|
1243
|
-
### (Optionnel) Étape 9 : Modifier les attributs
|
|
1250
|
+
### (Optionnel) Étape 9 : Modifier les attributs de langue et de direction du HTML
|
|
1244
1251
|
|
|
1245
|
-
Lorsque votre application prend en charge plusieurs langues, il est crucial de mettre à jour les attributs `lang` et `dir` de la balise `<html>` pour
|
|
1252
|
+
Lorsque votre application prend en charge plusieurs langues, il est crucial de mettre à jour les attributs `lang` et `dir` de la balise `<html>` pour qu'ils correspondent à la locale actuelle. Cela garantit :
|
|
1246
1253
|
|
|
1247
1254
|
- **Accessibilité** : Les lecteurs d'écran et les technologies d'assistance s'appuient sur l'attribut `lang` correct pour prononcer et interpréter le contenu avec précision.
|
|
1248
1255
|
- **Rendu du texte** : L'attribut `dir` (direction) assure que le texte est affiché dans le bon ordre (par exemple, de gauche à droite pour l'anglais, de droite à gauche pour l'arabe ou l'hébreu), ce qui est essentiel pour la lisibilité.
|
|
1249
1256
|
- **SEO** : Les moteurs de recherche utilisent l'attribut `lang` pour déterminer la langue de votre page, aidant ainsi à diffuser le contenu localisé approprié dans les résultats de recherche.
|
|
1250
1257
|
|
|
1251
|
-
En mettant à jour ces attributs
|
|
1258
|
+
En mettant à jour ces attributs de manière dynamique lorsque la locale change, vous garantissez une expérience cohérente et accessible pour les utilisateurs dans toutes les langues prises en charge.
|
|
1252
1259
|
|
|
1253
1260
|
#### Implémentation du Hook
|
|
1254
1261
|
|
|
@@ -1289,7 +1296,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1289
1296
|
* - `lang` : Informe les navigateurs et les moteurs de recherche de la langue de la page.
|
|
1290
1297
|
* - `dir` : Assure l'ordre de lecture correct (par exemple, 'ltr' pour l'anglais, 'rtl' pour l'arabe).
|
|
1291
1298
|
*
|
|
1292
|
-
* Cette mise à jour dynamique est essentielle pour un rendu correct du texte, l'accessibilité et le SEO.
|
|
1299
|
+
* Cette mise à jour dynamique est essentielle pour un rendu correct du texte, l'accessibilité et le référencement SEO.
|
|
1293
1300
|
*/
|
|
1294
1301
|
export const useI18nHTMLAttributes = () => {
|
|
1295
1302
|
const { locale } = useLocale();
|
|
@@ -1311,7 +1318,7 @@ const { getHTMLTextDir } = require("intlayer");
|
|
|
1311
1318
|
|
|
1312
1319
|
/**
|
|
1313
1320
|
* Met à jour les attributs `lang` et `dir` de l'élément HTML <html> en fonction de la locale courante.
|
|
1314
|
-
* - `lang` : Informe les navigateurs et moteurs de recherche de la langue de la page.
|
|
1321
|
+
* - `lang` : Informe les navigateurs et les moteurs de recherche de la langue de la page.
|
|
1315
1322
|
* - `dir` : Assure l'ordre de lecture correct (par exemple, 'ltr' pour l'anglais, 'rtl' pour l'arabe).
|
|
1316
1323
|
*
|
|
1317
1324
|
* Cette mise à jour dynamique est essentielle pour un rendu correct du texte, l'accessibilité et le SEO.
|
|
@@ -1342,7 +1349,7 @@ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
|
1342
1349
|
import "./App.css";
|
|
1343
1350
|
|
|
1344
1351
|
const AppContent: FC = () => {
|
|
1345
|
-
// Appliquez le hook pour mettre à jour les attributs lang et dir de la balise <html>
|
|
1352
|
+
// Appliquez le hook pour mettre à jour les attributs lang et dir de la balise <html> en fonction de la locale.
|
|
1346
1353
|
useI18nHTMLAttributes();
|
|
1347
1354
|
|
|
1348
1355
|
// ... Le reste de votre composant
|
|
@@ -1402,12 +1409,13 @@ module.exports = App;
|
|
|
1402
1409
|
|
|
1403
1410
|
En appliquant ces modifications, votre application va :
|
|
1404
1411
|
|
|
1405
|
-
- Assurer que l'attribut **
|
|
1412
|
+
- Assurer que l'attribut **langue** (`lang`) reflète correctement la locale actuelle, ce qui est important pour le SEO et le comportement du navigateur.
|
|
1406
1413
|
- Ajuster la **direction du texte** (`dir`) selon la locale, améliorant la lisibilité et l'utilisabilité pour les langues avec des ordres de lecture différents.
|
|
1407
1414
|
- Fournir une expérience plus **accessible**, car les technologies d'assistance dépendent de ces attributs pour fonctionner de manière optimale.
|
|
1408
1415
|
|
|
1409
|
-
### (Optionnel) Étape 10 :
|
|
1416
|
+
### (Optionnel) Étape 10 : Créer un composant de lien localisé
|
|
1410
1417
|
|
|
1418
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
1411
1419
|
// Appliquer le hook pour mettre à jour les attributs lang et dir de la balise <html> en fonction de la locale.
|
|
1412
1420
|
useI18nHTMLAttributes();
|
|
1413
1421
|
|
|
@@ -1422,23 +1430,23 @@ const App = () => (
|
|
|
1422
1430
|
|
|
1423
1431
|
module.exports = App;
|
|
1424
1432
|
|
|
1425
|
-
|
|
1433
|
+
```
|
|
1426
1434
|
|
|
1427
1435
|
En appliquant ces modifications, votre application va :
|
|
1428
1436
|
|
|
1429
|
-
- S'assurer que l'attribut **
|
|
1430
|
-
- Ajuster la **direction du texte** (`dir`) selon la locale, améliorant
|
|
1437
|
+
- S'assurer que l'attribut **lang** reflète correctement la locale actuelle, ce qui est important pour le SEO et le comportement des navigateurs.
|
|
1438
|
+
- Ajuster la **direction du texte** (`dir`) selon la locale, améliorant la lisibilité et l'utilisabilité pour les langues avec des ordres de lecture différents.
|
|
1431
1439
|
- Offrir une expérience plus **accessible**, car les technologies d'assistance dépendent de ces attributs pour fonctionner de manière optimale.
|
|
1432
1440
|
|
|
1433
1441
|
### (Optionnel) Étape 10 : Créer un composant Link localisé
|
|
1434
1442
|
|
|
1435
|
-
Pour garantir que la navigation de votre application respecte la
|
|
1443
|
+
Pour garantir que la navigation de votre application respecte la locale actuelle, vous pouvez créer un composant `Link` personnalisé. Ce composant préfixe automatiquement les URL internes avec la langue courante. Par exemple, lorsqu’un utilisateur francophone clique sur un lien vers la page "À propos", il est redirigé vers `/fr/about` au lieu de `/about`.
|
|
1436
1444
|
|
|
1437
1445
|
Ce comportement est utile pour plusieurs raisons :
|
|
1438
1446
|
|
|
1439
|
-
- **SEO et expérience utilisateur** : Les URL localisées aident les moteurs de recherche à indexer correctement les pages spécifiques à une langue et fournissent aux utilisateurs
|
|
1440
|
-
- **Cohérence** : En utilisant un lien localisé dans toute votre application, vous garantissez que la navigation reste dans la
|
|
1441
|
-
- **Maintenabilité** : Centraliser la logique de localisation dans un seul composant simplifie la gestion des
|
|
1447
|
+
- **SEO et expérience utilisateur** : Les URL localisées aident les moteurs de recherche à indexer correctement les pages spécifiques à une langue et fournissent aux utilisateurs du contenu dans leur langue préférée.
|
|
1448
|
+
- **Cohérence** : En utilisant un lien localisé dans toute votre application, vous garantissez que la navigation reste dans la locale actuelle, évitant ainsi des changements de langue inattendus.
|
|
1449
|
+
- **Maintenabilité** : Centraliser la logique de localisation dans un seul composant simplifie la gestion des URL, rendant votre base de code plus facile à maintenir et à étendre à mesure que votre application grandit.
|
|
1442
1450
|
|
|
1443
1451
|
Voici l'implémentation d'un composant `Link` localisé en TypeScript :
|
|
1444
1452
|
|
|
@@ -1487,7 +1495,7 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
1487
1495
|
);
|
|
1488
1496
|
|
|
1489
1497
|
Link.displayName = "Link";
|
|
1490
|
-
|
|
1498
|
+
```
|
|
1491
1499
|
|
|
1492
1500
|
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
1493
1501
|
import { getLocalizedUrl } from "intlayer";
|
|
@@ -1503,7 +1511,7 @@ export const checkIsExternalLink = (href?: string): boolean =>
|
|
|
1503
1511
|
|
|
1504
1512
|
/**
|
|
1505
1513
|
* Composant Link personnalisé qui adapte l'attribut href en fonction de la locale actuelle.
|
|
1506
|
-
* Pour les liens internes, il utilise `getLocalizedUrl` pour préfixer l'URL avec la locale (
|
|
1514
|
+
* Pour les liens internes, il utilise `getLocalizedUrl` pour préfixer l'URL avec la locale (ex. : /fr/about).
|
|
1507
1515
|
* Cela garantit que la navigation reste dans le même contexte de locale.
|
|
1508
1516
|
*/
|
|
1509
1517
|
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
@@ -1571,12 +1579,12 @@ Link.displayName = "Link";
|
|
|
1571
1579
|
Le hook `useLocale` fournit la locale actuelle (par exemple, `fr` pour le français).
|
|
1572
1580
|
|
|
1573
1581
|
- **Localisation de l'URL** :
|
|
1574
|
-
Pour les liens internes (c
|
|
1582
|
+
Pour les liens internes (c’est-à-dire non externes), `getLocalizedUrl` est utilisé pour préfixer automatiquement l'URL avec la locale courante. Cela signifie que si votre utilisateur est en français, passer `/about` comme `href` le transformera en `/fr/about`.
|
|
1575
1583
|
|
|
1576
1584
|
- **Retour du lien** :
|
|
1577
1585
|
Le composant retourne un élément `<a>` avec l’URL localisée, garantissant que la navigation est cohérente avec la locale.
|
|
1578
1586
|
|
|
1579
|
-
En intégrant ce composant `Link` dans toute votre application, vous maintenez une expérience utilisateur cohérente et adaptée à la langue tout en bénéficiant d’
|
|
1587
|
+
En intégrant ce composant `Link` dans toute votre application, vous maintenez une expérience utilisateur cohérente et adaptée à la langue tout en bénéficiant d’une meilleure SEO et d’une meilleure utilisabilité.
|
|
1580
1588
|
|
|
1581
1589
|
### Configurer TypeScript
|
|
1582
1590
|
|
|
@@ -1602,7 +1610,7 @@ Assurez-vous que votre configuration TypeScript inclut les types générés auto
|
|
|
1602
1610
|
|
|
1603
1611
|
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les commettre dans votre dépôt Git.
|
|
1604
1612
|
|
|
1605
|
-
Pour ce faire, vous pouvez ajouter les instructions suivantes
|
|
1613
|
+
Pour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier `.gitignore` :
|
|
1606
1614
|
|
|
1607
1615
|
```plaintext
|
|
1608
1616
|
# Ignorer les fichiers générés par Intlayer
|
|
@@ -1615,7 +1623,7 @@ Pour améliorer votre expérience de développement avec Intlayer, vous pouvez i
|
|
|
1615
1623
|
|
|
1616
1624
|
[Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1617
1625
|
|
|
1618
|
-
Cette extension
|
|
1626
|
+
Cette extension offre :
|
|
1619
1627
|
|
|
1620
1628
|
- **Autocomplétion** pour les clés de traduction.
|
|
1621
1629
|
- **Détection d'erreurs en temps réel** pour les traductions manquantes.
|
|
@@ -1632,6 +1640,6 @@ Pour aller plus loin, vous pouvez implémenter l’[éditeur visuel](https://git
|
|
|
1632
1640
|
|
|
1633
1641
|
---
|
|
1634
1642
|
|
|
1635
|
-
## Historique
|
|
1643
|
+
## Historique du document
|
|
1636
1644
|
|
|
1637
1645
|
- 5.5.10 - 2025-06-29 : Historique initial
|