@intlayer/docs 5.5.8
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/LICENSE +202 -0
- package/ar/CI_CD.md +149 -0
- package/ar/autoFill.md +157 -0
- package/ar/concept/content/file.md +1 -0
- package/ar/configuration.md +492 -0
- package/ar/dictionary/condition.md +213 -0
- package/ar/dictionary/content_extention_customization.md +81 -0
- package/ar/dictionary/enumeration.md +221 -0
- package/ar/dictionary/file.md +209 -0
- package/ar/dictionary/function_fetching.md +190 -0
- package/ar/dictionary/get_started.md +490 -0
- package/ar/dictionary/insertion.md +161 -0
- package/ar/dictionary/markdown.md +343 -0
- package/ar/dictionary/nesting.md +249 -0
- package/ar/dictionary/translation.md +307 -0
- package/ar/header.md +7 -0
- package/ar/how_works_intlayer.md +219 -0
- package/ar/index.md +125 -0
- package/ar/interest_of_intlayer.md +132 -0
- package/ar/intlayer_CMS.md +328 -0
- package/ar/intlayer_cli.md +258 -0
- package/ar/intlayer_visual_editor.md +210 -0
- package/ar/intlayer_with_angular.md +3 -0
- package/ar/intlayer_with_create_react_app.md +1196 -0
- package/ar/intlayer_with_express.md +270 -0
- package/ar/intlayer_with_lynx+react.md +482 -0
- package/ar/intlayer_with_nextjs_14.md +1260 -0
- package/ar/intlayer_with_nextjs_15.md +1311 -0
- package/ar/intlayer_with_nextjs_page_router.md +1099 -0
- package/ar/intlayer_with_react_native+expo.md +539 -0
- package/ar/intlayer_with_vite+preact.md +1679 -0
- package/ar/intlayer_with_vite+react.md +1582 -0
- package/ar/intlayer_with_vite+solid.md +3 -0
- package/ar/intlayer_with_vite+svelte.md +3 -0
- package/ar/intlayer_with_vite+vue.md +989 -0
- package/ar/introduction.md +190 -0
- package/ar/mcp_server.md +150 -0
- package/ar/packages/@intlayer/api/index.md +31 -0
- package/ar/packages/@intlayer/chokidar/index.md +31 -0
- package/ar/packages/@intlayer/cli/index.md +1 -0
- package/ar/packages/@intlayer/config/index.md +116 -0
- package/ar/packages/@intlayer/core/index.md +25 -0
- package/ar/packages/@intlayer/design-system/index.md +21 -0
- package/ar/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ar/packages/@intlayer/editor/index.md +21 -0
- package/ar/packages/@intlayer/editor-react/index.md +21 -0
- package/ar/packages/@intlayer/webpack/index.md +35 -0
- package/ar/packages/angular-intlayer/index.md +3 -0
- package/ar/packages/express-intlayer/index.md +232 -0
- package/ar/packages/express-intlayer/t.md +448 -0
- package/ar/packages/intlayer/getConfiguration.md +120 -0
- package/ar/packages/intlayer/getEnumeration.md +138 -0
- package/ar/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ar/packages/intlayer/getLocaleLang.md +61 -0
- package/ar/packages/intlayer/getLocaleName.md +93 -0
- package/ar/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ar/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ar/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ar/packages/intlayer/getTranslation.md +175 -0
- package/ar/packages/intlayer/getTranslationContent.md +175 -0
- package/ar/packages/intlayer/index.md +254 -0
- package/ar/packages/intlayer-cli/index.md +41 -0
- package/ar/packages/intlayer-editor/index.md +113 -0
- package/ar/packages/lynx-intlayer/index.md +58 -0
- package/ar/packages/next-intlayer/index.md +267 -0
- package/ar/packages/next-intlayer/t.md +341 -0
- package/ar/packages/next-intlayer/useDictionary.md +248 -0
- package/ar/packages/next-intlayer/useIntlayer.md +237 -0
- package/ar/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ar/packages/next-intlayer/useLocale.md +105 -0
- package/ar/packages/preact-intlayer/index.md +3 -0
- package/ar/packages/react-intlayer/index.md +261 -0
- package/ar/packages/react-intlayer/t.md +283 -0
- package/ar/packages/react-intlayer/useDictionary.md +268 -0
- package/ar/packages/react-intlayer/useIntlayer.md +225 -0
- package/ar/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ar/packages/react-intlayer/useLocale.md +184 -0
- package/ar/packages/react-native-intlayer/index.md +57 -0
- package/ar/packages/react-scripts-intlayer/index.md +57 -0
- package/ar/packages/solid-intlayer/index.md +3 -0
- package/ar/packages/svelte-intlayer/index.md +3 -0
- package/ar/packages/vite-intlayer/index.md +53 -0
- package/ar/packages/vue-intlayer/index.md +3 -0
- package/ar/per_locale_file.md +298 -0
- package/ar/privacy_notice.md +61 -0
- package/ar/roadmap.md +208 -0
- package/ar/terms_of_service.md +33 -0
- package/ar/vs_code_extension.md +139 -0
- package/de/CI_CD.md +149 -0
- package/de/angular-intlayer/index.md +3 -0
- package/de/autoFill.md +157 -0
- package/de/configuration.md +501 -0
- package/de/dictionary/condition.md +213 -0
- package/de/dictionary/content_extention_customization.md +81 -0
- package/de/dictionary/enumeration.md +221 -0
- package/de/dictionary/file.md +207 -0
- package/de/dictionary/function_fetching.md +190 -0
- package/de/dictionary/get_started.md +466 -0
- package/de/dictionary/insertion.md +167 -0
- package/de/dictionary/markdown.md +345 -0
- package/de/dictionary/nesting.md +252 -0
- package/de/dictionary/translation.md +287 -0
- package/de/header.md +5 -0
- package/de/how_works_intlayer.md +216 -0
- package/de/index.md +125 -0
- package/de/insertion.md +0 -0
- package/de/interest_of_intlayer.md +132 -0
- package/de/intlayer_CMS.md +334 -0
- package/de/intlayer_cli.md +274 -0
- package/de/intlayer_visual_editor.md +210 -0
- package/de/intlayer_with_angular.md +3 -0
- package/de/intlayer_with_create_react_app.md +1200 -0
- package/de/intlayer_with_express.md +268 -0
- package/de/intlayer_with_lynx+react.md +482 -0
- package/de/intlayer_with_nextjs_14.md +1258 -0
- package/de/intlayer_with_nextjs_15.md +1306 -0
- package/de/intlayer_with_nextjs_page_router.md +1087 -0
- package/de/intlayer_with_react_native+expo.md +539 -0
- package/de/intlayer_with_vite+preact.md +1701 -0
- package/de/intlayer_with_vite+react.md +1584 -0
- package/de/intlayer_with_vite+solid.md +3 -0
- package/de/intlayer_with_vite+svelte.md +3 -0
- package/de/intlayer_with_vite+vue.md +989 -0
- package/de/introduction.md +186 -0
- package/de/mcp_server.md +150 -0
- package/de/packages/@intlayer/api/index.md +31 -0
- package/de/packages/@intlayer/chokidar/index.md +31 -0
- package/de/packages/@intlayer/cli/index.md +21 -0
- package/de/packages/@intlayer/config/index.md +116 -0
- package/de/packages/@intlayer/core/index.md +25 -0
- package/de/packages/@intlayer/design-system/index.md +21 -0
- package/de/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/de/packages/@intlayer/editor/index.md +21 -0
- package/de/packages/@intlayer/editor-react/index.md +21 -0
- package/de/packages/@intlayer/webpack/index.md +35 -0
- package/de/packages/angular-intlayer/index.md +31 -0
- package/de/packages/express-intlayer/index.md +229 -0
- package/de/packages/express-intlayer/t.md +432 -0
- package/de/packages/intlayer/getConfiguration.md +120 -0
- package/de/packages/intlayer/getEnumeration.md +140 -0
- package/de/packages/intlayer/getHTMLTextDir.md +97 -0
- package/de/packages/intlayer/getLocaleLang.md +57 -0
- package/de/packages/intlayer/getLocaleName.md +93 -0
- package/de/packages/intlayer/getLocalizedUrl.md +221 -0
- package/de/packages/intlayer/getMultilingualUrls.md +198 -0
- package/de/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/de/packages/intlayer/getTranslation.md +166 -0
- package/de/packages/intlayer/getTranslationContent.md +166 -0
- package/de/packages/intlayer/index.md +478 -0
- package/de/packages/intlayer-cli/index.md +41 -0
- package/de/packages/intlayer-editor/index.md +113 -0
- package/de/packages/lynx-intlayer/index.md +58 -0
- package/de/packages/next-intlayer/index.md +263 -0
- package/de/packages/next-intlayer/t.md +325 -0
- package/de/packages/next-intlayer/useDictionary.md +242 -0
- package/de/packages/next-intlayer/useIntlayer.md +237 -0
- package/de/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/de/packages/next-intlayer/useLocale.md +105 -0
- package/de/packages/preact-intlayer/index.md +3 -0
- package/de/packages/react-intlayer/index.md +260 -0
- package/de/packages/react-intlayer/t.md +277 -0
- package/de/packages/react-intlayer/useDictionary.md +260 -0
- package/de/packages/react-intlayer/useIntlayer.md +225 -0
- package/de/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/de/packages/react-intlayer/useLocale.md +184 -0
- package/de/packages/react-native-intlayer/index.md +57 -0
- package/de/packages/react-scripts-intlayer/index.md +57 -0
- package/de/packages/solid-intlayer/index.md +3 -0
- package/de/packages/svelte-intlayer/index.md +3 -0
- package/de/packages/vite-intlayer/index.md +53 -0
- package/de/packages/vue-intlayer/index.md +3 -0
- package/de/per_locale_file.md +298 -0
- package/de/privacy_notice.md +61 -0
- package/de/roadmap.md +206 -0
- package/de/terms_of_service.md +33 -0
- package/de/vs_code_extension.md +139 -0
- package/en/CI_CD.md +149 -0
- package/en/autoFill.md +157 -0
- package/en/configuration.md +506 -0
- package/en/dictionary/condition.md +213 -0
- package/en/dictionary/content_extention_customization.md +81 -0
- package/en/dictionary/enumeration.md +221 -0
- package/en/dictionary/file.md +198 -0
- package/en/dictionary/function_fetching.md +190 -0
- package/en/dictionary/get_started.md +504 -0
- package/en/dictionary/insertion.md +167 -0
- package/en/dictionary/markdown.md +355 -0
- package/en/dictionary/nesting.md +249 -0
- package/en/dictionary/translation.md +285 -0
- package/en/frequent_questions/build_dictionaries.md +37 -0
- package/en/frequent_questions/domain_routing.md +92 -0
- package/en/frequent_questions/esbuild_error.md +9 -0
- package/en/frequent_questions/get_locale_cookie.md +121 -0
- package/en/frequent_questions/intlayer_command_undefined.md +135 -0
- package/en/frequent_questions/locale_incorect_in_url.md +52 -0
- package/en/frequent_questions/static_rendering.md +24 -0
- package/en/frequent_questions/unknown_command.md +76 -0
- package/en/header.md +5 -0
- package/en/how_works_intlayer.md +219 -0
- package/en/index.md +139 -0
- package/en/interest_of_intlayer.md +133 -0
- package/en/intlayer_CMS.md +334 -0
- package/en/intlayer_cli.md +309 -0
- package/en/intlayer_visual_editor.md +244 -0
- package/en/intlayer_with_angular.md +139 -0
- package/en/intlayer_with_create_react_app.md +1209 -0
- package/en/intlayer_with_express.md +391 -0
- package/en/intlayer_with_lynx+react.md +483 -0
- package/en/intlayer_with_nextjs_14.md +1298 -0
- package/en/intlayer_with_nextjs_15.md +1347 -0
- package/en/intlayer_with_nextjs_page_router.md +1126 -0
- package/en/intlayer_with_react_native+expo.md +630 -0
- package/en/intlayer_with_vite+preact.md +1659 -0
- package/en/intlayer_with_vite+react.md +1605 -0
- package/en/intlayer_with_vite+solid.md +254 -0
- package/en/intlayer_with_vite+svelte.md +254 -0
- package/en/intlayer_with_vite+vue.md +1000 -0
- package/en/introduction.md +185 -0
- package/en/mcp_server.md +150 -0
- package/en/packages/@intlayer/api/index.md +31 -0
- package/en/packages/@intlayer/chokidar/index.md +31 -0
- package/en/packages/@intlayer/cli/index.md +21 -0
- package/en/packages/@intlayer/config/index.md +116 -0
- package/en/packages/@intlayer/core/index.md +25 -0
- package/en/packages/@intlayer/design-system/index.md +21 -0
- package/en/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/en/packages/@intlayer/editor/index.md +21 -0
- package/en/packages/@intlayer/editor-react/index.md +21 -0
- package/en/packages/@intlayer/webpack/index.md +35 -0
- package/en/packages/angular-intlayer/index.md +31 -0
- package/en/packages/express-intlayer/index.md +229 -0
- package/en/packages/express-intlayer/t.md +432 -0
- package/en/packages/intlayer/getConfiguration.md +120 -0
- package/en/packages/intlayer/getEnumeration.md +138 -0
- package/en/packages/intlayer/getHTMLTextDir.md +97 -0
- package/en/packages/intlayer/getLocaleLang.md +57 -0
- package/en/packages/intlayer/getLocaleName.md +93 -0
- package/en/packages/intlayer/getLocalizedUrl.md +221 -0
- package/en/packages/intlayer/getMultilingualUrls.md +198 -0
- package/en/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/en/packages/intlayer/getTranslation.md +166 -0
- package/en/packages/intlayer/getTranslationContent.md +166 -0
- package/en/packages/intlayer/index.md +476 -0
- package/en/packages/intlayer-cli/index.md +41 -0
- package/en/packages/intlayer-editor/index.md +113 -0
- package/en/packages/lynx-intlayer/index.md +60 -0
- package/en/packages/next-intlayer/index.md +263 -0
- package/en/packages/next-intlayer/t.md +326 -0
- package/en/packages/next-intlayer/useDictionary.md +242 -0
- package/en/packages/next-intlayer/useIntlayer.md +237 -0
- package/en/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/en/packages/next-intlayer/useLocale.md +105 -0
- package/en/packages/preact-intlayer/index.md +31 -0
- package/en/packages/react-intlayer/index.md +257 -0
- package/en/packages/react-intlayer/t.md +277 -0
- package/en/packages/react-intlayer/useDictionary.md +260 -0
- package/en/packages/react-intlayer/useIntlayer.md +225 -0
- package/en/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/en/packages/react-intlayer/useLocale.md +184 -0
- package/en/packages/react-native-intlayer/index.md +59 -0
- package/en/packages/react-scripts-intlayer/index.md +57 -0
- package/en/packages/solid-intlayer/index.md +31 -0
- package/en/packages/svelte-intlayer/index.md +31 -0
- package/en/packages/vite-intlayer/index.md +53 -0
- package/en/packages/vue-intlayer/index.md +31 -0
- package/en/per_locale_file.md +297 -0
- package/en/privacy_notice.md +61 -0
- package/en/roadmap.md +270 -0
- package/en/t.md +163 -0
- package/en/terms_of_service.md +33 -0
- package/en/vs_code_extension.md +129 -0
- package/en-GB/CI_CD.md +149 -0
- package/en-GB/autoFill.md +0 -0
- package/en-GB/configuration.md +490 -0
- package/en-GB/dictionary/condition.md +213 -0
- package/en-GB/dictionary/content_extention_customization.md +83 -0
- package/en-GB/dictionary/enumeration.md +221 -0
- package/en-GB/dictionary/file.md +201 -0
- package/en-GB/dictionary/function_fetching.md +190 -0
- package/en-GB/dictionary/get_started.md +466 -0
- package/en-GB/dictionary/insertion.md +167 -0
- package/en-GB/dictionary/markdown.md +343 -0
- package/en-GB/dictionary/nesting.md +249 -0
- package/en-GB/dictionary/translation.md +285 -0
- package/en-GB/header.md +1 -0
- package/en-GB/how_works_intlayer.md +217 -0
- package/en-GB/index.md +142 -0
- package/en-GB/interest_of_intlayer.md +123 -0
- package/en-GB/intlayer_CMS.md +334 -0
- package/en-GB/intlayer_cli.md +239 -0
- package/en-GB/intlayer_visual_editor.md +210 -0
- package/en-GB/intlayer_with_angular.md +3 -0
- package/en-GB/intlayer_with_create_react_app.md +1192 -0
- package/en-GB/intlayer_with_express.md +267 -0
- package/en-GB/intlayer_with_lynx+react.md +484 -0
- package/en-GB/intlayer_with_nextjs_14.md +1267 -0
- package/en-GB/intlayer_with_nextjs_15.md +1308 -0
- package/en-GB/intlayer_with_nextjs_page_router.md +1087 -0
- package/en-GB/intlayer_with_react_native+expo.md +539 -0
- package/en-GB/intlayer_with_vite+preact.md +1648 -0
- package/en-GB/intlayer_with_vite+react.md +1430 -0
- package/en-GB/intlayer_with_vite+solid.md +3 -0
- package/en-GB/intlayer_with_vite+svelte.md +3 -0
- package/en-GB/intlayer_with_vite+vue.md +993 -0
- package/en-GB/introduction.md +201 -0
- package/en-GB/mcp_server.md +150 -0
- package/en-GB/packages/@intlayer/api/index.md +31 -0
- package/en-GB/packages/@intlayer/chokidar/index.md +31 -0
- package/en-GB/packages/@intlayer/cli/index.md +21 -0
- package/en-GB/packages/@intlayer/config/index.md +116 -0
- package/en-GB/packages/@intlayer/core/index.md +25 -0
- package/en-GB/packages/@intlayer/design-system/index.md +21 -0
- package/en-GB/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/en-GB/packages/@intlayer/editor/index.md +21 -0
- package/en-GB/packages/@intlayer/editor-react/index.md +21 -0
- package/en-GB/packages/@intlayer/webpack/index.md +35 -0
- package/en-GB/packages/angular-intlayer/index.md +3 -0
- package/en-GB/packages/express-intlayer/index.md +229 -0
- package/en-GB/packages/express-intlayer/t.md +432 -0
- package/en-GB/packages/intlayer/getConfiguration.md +120 -0
- package/en-GB/packages/intlayer/getEnumeration.md +140 -0
- package/en-GB/packages/intlayer/getHTMLTextDir.md +97 -0
- package/en-GB/packages/intlayer/getLocaleLang.md +57 -0
- package/en-GB/packages/intlayer/getLocaleName.md +93 -0
- package/en-GB/packages/intlayer/getLocalizedUrl.md +221 -0
- package/en-GB/packages/intlayer/getMultilingualUrls.md +198 -0
- package/en-GB/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/en-GB/packages/intlayer/getTranslation.md +166 -0
- package/en-GB/packages/intlayer/getTranslationContent.md +166 -0
- package/en-GB/packages/intlayer/index.md +476 -0
- package/en-GB/packages/intlayer-cli/index.md +41 -0
- package/en-GB/packages/intlayer-editor/index.md +113 -0
- package/en-GB/packages/lynx-intlayer/index.md +58 -0
- package/en-GB/packages/next-intlayer/index.md +263 -0
- package/en-GB/packages/next-intlayer/t.md +326 -0
- package/en-GB/packages/next-intlayer/useDictionary.md +242 -0
- package/en-GB/packages/next-intlayer/useIntlayer.md +237 -0
- package/en-GB/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/en-GB/packages/next-intlayer/useLocale.md +105 -0
- package/en-GB/packages/preact-intlayer/index.md +3 -0
- package/en-GB/packages/react-intlayer/index.md +257 -0
- package/en-GB/packages/react-intlayer/t.md +277 -0
- package/en-GB/packages/react-intlayer/useDictionary.md +260 -0
- package/en-GB/packages/react-intlayer/useIntlayer.md +225 -0
- package/en-GB/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/en-GB/packages/react-intlayer/useLocale.md +184 -0
- package/en-GB/packages/react-native-intlayer/index.md +57 -0
- package/en-GB/packages/react-scripts-intlayer/index.md +57 -0
- package/en-GB/packages/solid-intlayer/index.md +3 -0
- package/en-GB/packages/svelte-intlayer/index.md +3 -0
- package/en-GB/packages/vite-intlayer/index.md +53 -0
- package/en-GB/packages/vue-intlayer/index.md +3 -0
- package/en-GB/per_locale_file.md +298 -0
- package/en-GB/privacy_notice.md +57 -0
- package/en-GB/roadmap.md +206 -0
- package/en-GB/terms_of_service.md +33 -0
- package/en-GB/vs_code_extension.md +139 -0
- package/es/CI_CD.md +149 -0
- package/es/autoFill.md +157 -0
- package/es/configuration.md +503 -0
- package/es/dictionary/condition.md +213 -0
- package/es/dictionary/content_extention_customization.md +81 -0
- package/es/dictionary/enumeration.md +221 -0
- package/es/dictionary/file.md +206 -0
- package/es/dictionary/function_fetching.md +190 -0
- package/es/dictionary/get_started.md +466 -0
- package/es/dictionary/insertion.md +161 -0
- package/es/dictionary/markdown.md +338 -0
- package/es/dictionary/nesting.md +249 -0
- package/es/dictionary/translation.md +287 -0
- package/es/header.md +5 -0
- package/es/how_works_intlayer.md +217 -0
- package/es/index.md +122 -0
- package/es/interest_of_intlayer.md +132 -0
- package/es/intlayer_CMS.md +334 -0
- package/es/intlayer_cli.md +274 -0
- package/es/intlayer_visual_editor.md +210 -0
- package/es/intlayer_with_angular.md +3 -0
- package/es/intlayer_with_create_react_app.md +1192 -0
- package/es/intlayer_with_express.md +276 -0
- package/es/intlayer_with_lynx+react.md +475 -0
- package/es/intlayer_with_nextjs_14.md +1258 -0
- package/es/intlayer_with_nextjs_15.md +1308 -0
- package/es/intlayer_with_nextjs_page_router.md +1088 -0
- package/es/intlayer_with_react_native+expo.md +180 -0
- package/es/intlayer_with_vite+preact.md +1637 -0
- package/es/intlayer_with_vite+react.md +1592 -0
- package/es/intlayer_with_vite+solid.md +3 -0
- package/es/intlayer_with_vite+svelte.md +3 -0
- package/es/intlayer_with_vite+vue.md +947 -0
- package/es/introduction.md +184 -0
- package/es/mcp_server.md +150 -0
- package/es/packages/@intlayer/api/index.md +31 -0
- package/es/packages/@intlayer/chokidar/index.md +31 -0
- package/es/packages/@intlayer/cli/index.md +21 -0
- package/es/packages/@intlayer/config/index.md +116 -0
- package/es/packages/@intlayer/core/index.md +25 -0
- package/es/packages/@intlayer/design-system/index.md +21 -0
- package/es/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/es/packages/@intlayer/editor/index.md +21 -0
- package/es/packages/@intlayer/editor-react/index.md +21 -0
- package/es/packages/@intlayer/webpack/index.md +35 -0
- package/es/packages/angular-intlayer/index.md +3 -0
- package/es/packages/express-intlayer/index.md +229 -0
- package/es/packages/express-intlayer/t.md +432 -0
- package/es/packages/intlayer/getConfiguration.md +120 -0
- package/es/packages/intlayer/getEnumeration.md +138 -0
- package/es/packages/intlayer/getHTMLTextDir.md +97 -0
- package/es/packages/intlayer/getLocaleLang.md +57 -0
- package/es/packages/intlayer/getLocaleName.md +93 -0
- package/es/packages/intlayer/getLocalizedUrl.md +221 -0
- package/es/packages/intlayer/getMultilingualUrls.md +198 -0
- package/es/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/es/packages/intlayer/getTranslation.md +166 -0
- package/es/packages/intlayer/getTranslationContent.md +166 -0
- package/es/packages/intlayer/index.md +478 -0
- package/es/packages/intlayer-cli/index.md +41 -0
- package/es/packages/intlayer-editor/index.md +115 -0
- package/es/packages/lynx-intlayer/index.md +58 -0
- package/es/packages/next-intlayer/index.md +263 -0
- package/es/packages/next-intlayer/t.md +325 -0
- package/es/packages/next-intlayer/useDictionary.md +242 -0
- package/es/packages/next-intlayer/useIntlayer.md +237 -0
- package/es/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/es/packages/next-intlayer/useLocale.md +105 -0
- package/es/packages/preact-intlayer/index.md +3 -0
- package/es/packages/react-intlayer/index.md +263 -0
- package/es/packages/react-intlayer/t.md +277 -0
- package/es/packages/react-intlayer/useDictionary.md +270 -0
- package/es/packages/react-intlayer/useIntlayer.md +225 -0
- package/es/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/es/packages/react-intlayer/useLocale.md +184 -0
- package/es/packages/react-native-intlayer/index.md +57 -0
- package/es/packages/react-scripts-intlayer/index.md +57 -0
- package/es/packages/solid-intlayer/index.md +3 -0
- package/es/packages/svelte-intlayer/index.md +5 -0
- package/es/packages/vite-intlayer/index.md +53 -0
- package/es/packages/vue-intlayer/index.md +3 -0
- package/es/per_locale_file.md +293 -0
- package/es/privacy_notice.md +61 -0
- package/es/roadmap.md +157 -0
- package/es/terms_of_service.md +33 -0
- package/es/vs_code_extension.md +139 -0
- package/fr/CI_CD.md +149 -0
- package/fr/autoFill.md +157 -0
- package/fr/configuration.md +481 -0
- package/fr/dictionary/condition.md +213 -0
- package/fr/dictionary/content_extention_customization.md +81 -0
- package/fr/dictionary/enumeration.md +221 -0
- package/fr/dictionary/file.md +206 -0
- package/fr/dictionary/function_fetching.md +190 -0
- package/fr/dictionary/get_started.md +466 -0
- package/fr/dictionary/insertion.md +161 -0
- package/fr/dictionary/markdown.md +335 -0
- package/fr/dictionary/nesting.md +249 -0
- package/fr/dictionary/translation.md +287 -0
- package/fr/header.md +5 -0
- package/fr/how_works_intlayer.md +217 -0
- package/fr/index.md +122 -0
- package/fr/interest_of_intlayer.md +132 -0
- package/fr/intlayer_CMS.md +334 -0
- package/fr/intlayer_cli.md +274 -0
- package/fr/intlayer_visual_editor.md +210 -0
- package/fr/intlayer_with_angular.md +3 -0
- package/fr/intlayer_with_create_react_app.md +1192 -0
- package/fr/intlayer_with_express.md +270 -0
- package/fr/intlayer_with_lynx+react.md +466 -0
- package/fr/intlayer_with_nextjs_14.md +1258 -0
- package/fr/intlayer_with_nextjs_15.md +1308 -0
- package/fr/intlayer_with_nextjs_page_router.md +1085 -0
- package/fr/intlayer_with_react_native+expo.md +535 -0
- package/fr/intlayer_with_vite+preact.md +1621 -0
- package/fr/intlayer_with_vite+react.md +1589 -0
- package/fr/intlayer_with_vite+solid.md +3 -0
- package/fr/intlayer_with_vite+svelte.md +3 -0
- package/fr/intlayer_with_vite+vue.md +947 -0
- package/fr/introduction.md +190 -0
- package/fr/mcp_server.md +152 -0
- package/fr/packages/@intlayer/api/index.md +31 -0
- package/fr/packages/@intlayer/chokidar/index.md +31 -0
- package/fr/packages/@intlayer/cli/index.md +21 -0
- package/fr/packages/@intlayer/config/index.md +116 -0
- package/fr/packages/@intlayer/core/index.md +25 -0
- package/fr/packages/@intlayer/design-system/index.md +21 -0
- package/fr/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/fr/packages/@intlayer/editor/index.md +21 -0
- package/fr/packages/@intlayer/editor-react/index.md +21 -0
- package/fr/packages/@intlayer/webpack/index.md +35 -0
- package/fr/packages/angular-intlayer/index.md +3 -0
- package/fr/packages/express-intlayer/index.md +238 -0
- package/fr/packages/express-intlayer/t.md +432 -0
- package/fr/packages/intlayer/getConfiguration.md +120 -0
- package/fr/packages/intlayer/getEnumeration.md +138 -0
- package/fr/packages/intlayer/getHTMLTextDir.md +97 -0
- package/fr/packages/intlayer/getLocaleLang.md +57 -0
- package/fr/packages/intlayer/getLocaleName.md +93 -0
- package/fr/packages/intlayer/getLocalizedUrl.md +221 -0
- package/fr/packages/intlayer/getMultilingualUrls.md +198 -0
- package/fr/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/fr/packages/intlayer/getTranslation.md +166 -0
- package/fr/packages/intlayer/getTranslationContent.md +166 -0
- package/fr/packages/intlayer/index.md +476 -0
- package/fr/packages/intlayer-cli/index.md +41 -0
- package/fr/packages/intlayer-editor/index.md +115 -0
- package/fr/packages/lynx-intlayer/index.md +58 -0
- package/fr/packages/next-intlayer/index.md +266 -0
- package/fr/packages/next-intlayer/t.md +325 -0
- package/fr/packages/next-intlayer/useDictionary.md +242 -0
- package/fr/packages/next-intlayer/useIntlayer.md +237 -0
- package/fr/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/fr/packages/next-intlayer/useLocale.md +105 -0
- package/fr/packages/preact-intlayer/index.md +3 -0
- package/fr/packages/react-intlayer/index.md +257 -0
- package/fr/packages/react-intlayer/t.md +277 -0
- package/fr/packages/react-intlayer/useDictionary.md +269 -0
- package/fr/packages/react-intlayer/useIntlayer.md +234 -0
- package/fr/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/fr/packages/react-intlayer/useLocale.md +184 -0
- package/fr/packages/react-native-intlayer/index.md +57 -0
- package/fr/packages/react-scripts-intlayer/index.md +57 -0
- package/fr/packages/solid-intlayer/index.md +3 -0
- package/fr/packages/svelte-intlayer/index.md +3 -0
- package/fr/packages/vite-intlayer/index.md +53 -0
- package/fr/packages/vue-intlayer/index.md +3 -0
- package/fr/per_locale_file.md +297 -0
- package/fr/privacy_notice.md +57 -0
- package/fr/roadmap.md +206 -0
- package/fr/terms_of_service.md +33 -0
- package/fr/vs_code_extension.md +139 -0
- package/hi/CI_CD.md +149 -0
- package/hi/autoFill.md +157 -0
- package/hi/configuration.md +509 -0
- package/hi/dictionary/condition.md +213 -0
- package/hi/dictionary/content_extention_customization.md +81 -0
- package/hi/dictionary/enumeration.md +221 -0
- package/hi/dictionary/file.md +209 -0
- package/hi/dictionary/function_fetching.md +188 -0
- package/hi/dictionary/get_started.md +490 -0
- package/hi/dictionary/insertion.md +167 -0
- package/hi/dictionary/markdown.md +344 -0
- package/hi/dictionary/nesting.md +249 -0
- package/hi/dictionary/translation.md +307 -0
- package/hi/header.md +7 -0
- package/hi/how_works_intlayer.md +217 -0
- package/hi/index.md +125 -0
- package/hi/interest_of_intlayer.md +132 -0
- package/hi/intlayer_CMS.md +334 -0
- package/hi/intlayer_cli.md +274 -0
- package/hi/intlayer_visual_editor.md +210 -0
- package/hi/intlayer_with_angular.md +3 -0
- package/hi/intlayer_with_create_react_app.md +1395 -0
- package/hi/intlayer_with_express.md +273 -0
- package/hi/intlayer_with_lynx+react.md +456 -0
- package/hi/intlayer_with_nextjs_14.md +1283 -0
- package/hi/intlayer_with_nextjs_15.md +1319 -0
- package/hi/intlayer_with_nextjs_page_router.md +1097 -0
- package/hi/intlayer_with_react_native+expo.md +554 -0
- package/hi/intlayer_with_vite+preact.md +1538 -0
- package/hi/intlayer_with_vite+react.md +1540 -0
- package/hi/intlayer_with_vite+solid.md +3 -0
- package/hi/intlayer_with_vite+svelte.md +3 -0
- package/hi/intlayer_with_vite+vue.md +840 -0
- package/hi/introduction.md +190 -0
- package/hi/mcp_server.md +150 -0
- package/hi/packages/@intlayer/api/index.md +31 -0
- package/hi/packages/@intlayer/chokidar/index.md +31 -0
- package/hi/packages/@intlayer/cli/index.md +21 -0
- package/hi/packages/@intlayer/config/index.md +116 -0
- package/hi/packages/@intlayer/core/index.md +25 -0
- package/hi/packages/@intlayer/design-system/index.md +21 -0
- package/hi/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/hi/packages/@intlayer/editor/index.md +21 -0
- package/hi/packages/@intlayer/editor-react/index.md +21 -0
- package/hi/packages/@intlayer/webpack/index.md +35 -0
- package/hi/packages/angular-intlayer/index.md +3 -0
- package/hi/packages/express-intlayer/index.md +232 -0
- package/hi/packages/express-intlayer/t.md +445 -0
- package/hi/packages/intlayer/getConfiguration.md +120 -0
- package/hi/packages/intlayer/getEnumeration.md +138 -0
- package/hi/packages/intlayer/getHTMLTextDir.md +97 -0
- package/hi/packages/intlayer/getLocaleLang.md +57 -0
- package/hi/packages/intlayer/getLocaleName.md +93 -0
- package/hi/packages/intlayer/getLocalizedUrl.md +221 -0
- package/hi/packages/intlayer/getMultilingualUrls.md +198 -0
- package/hi/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/hi/packages/intlayer/getTranslation.md +175 -0
- package/hi/packages/intlayer/getTranslationContent.md +175 -0
- package/hi/packages/intlayer/index.md +314 -0
- package/hi/packages/intlayer-cli/index.md +41 -0
- package/hi/packages/intlayer-editor/index.md +113 -0
- package/hi/packages/lynx-intlayer/index.md +58 -0
- package/hi/packages/next-intlayer/index.md +270 -0
- package/hi/packages/next-intlayer/t.md +337 -0
- package/hi/packages/next-intlayer/useDictionary.md +248 -0
- package/hi/packages/next-intlayer/useIntlayer.md +237 -0
- package/hi/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/hi/packages/next-intlayer/useLocale.md +105 -0
- package/hi/packages/preact-intlayer/index.md +3 -0
- package/hi/packages/react-intlayer/index.md +261 -0
- package/hi/packages/react-intlayer/t.md +283 -0
- package/hi/packages/react-intlayer/useDictionary.md +268 -0
- package/hi/packages/react-intlayer/useIntlayer.md +225 -0
- package/hi/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/hi/packages/react-intlayer/useLocale.md +184 -0
- package/hi/packages/react-native-intlayer/index.md +57 -0
- package/hi/packages/react-scripts-intlayer/index.md +57 -0
- package/hi/packages/solid-intlayer/index.md +3 -0
- package/hi/packages/svelte-intlayer/index.md +3 -0
- package/hi/packages/vite-intlayer/index.md +53 -0
- package/hi/packages/vue-intlayer/index.md +3 -0
- package/hi/per_locale_file.md +298 -0
- package/hi/privacy_notice.md +61 -0
- package/hi/roadmap.md +206 -0
- package/hi/terms_of_service.md +33 -0
- package/hi/vs_code_extension.md +139 -0
- package/index.cjs +1265 -0
- package/index.d.ts +100 -0
- package/it/CI_CD.md +149 -0
- package/it/autoFill.md +157 -0
- package/it/configuration.md +503 -0
- package/it/dictionary/condition.md +213 -0
- package/it/dictionary/content_extention_customization.md +81 -0
- package/it/dictionary/enumeration.md +221 -0
- package/it/dictionary/file.md +207 -0
- package/it/dictionary/function_fetching.md +190 -0
- package/it/dictionary/get_started.md +466 -0
- package/it/dictionary/insertion.md +161 -0
- package/it/dictionary/markdown.md +343 -0
- package/it/dictionary/nesting.md +249 -0
- package/it/dictionary/translation.md +287 -0
- package/it/header.md +7 -0
- package/it/how_works_intlayer.md +217 -0
- package/it/index.md +125 -0
- package/it/interest_of_intlayer.md +132 -0
- package/it/intlayer_CMS.md +334 -0
- package/it/intlayer_cli.md +274 -0
- package/it/intlayer_visual_editor.md +210 -0
- package/it/intlayer_with_angular.md +3 -0
- package/it/intlayer_with_create_react_app.md +413 -0
- package/it/intlayer_with_express.md +267 -0
- package/it/intlayer_with_lynx+react.md +482 -0
- package/it/intlayer_with_nextjs_14.md +1269 -0
- package/it/intlayer_with_nextjs_15.md +1319 -0
- package/it/intlayer_with_nextjs_page_router.md +1095 -0
- package/it/intlayer_with_react_native+expo.md +261 -0
- package/it/intlayer_with_vite+preact.md +1681 -0
- package/it/intlayer_with_vite+react.md +1580 -0
- package/it/intlayer_with_vite+solid.md +3 -0
- package/it/intlayer_with_vite+svelte.md +3 -0
- package/it/intlayer_with_vite+vue.md +989 -0
- package/it/introduction.md +192 -0
- package/it/mcp_server.md +152 -0
- package/it/packages/@intlayer/api/index.md +31 -0
- package/it/packages/@intlayer/chokidar/index.md +31 -0
- package/it/packages/@intlayer/cli/index.md +21 -0
- package/it/packages/@intlayer/config/index.md +116 -0
- package/it/packages/@intlayer/core/index.md +25 -0
- package/it/packages/@intlayer/design-system/index.md +21 -0
- package/it/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/it/packages/@intlayer/editor/index.md +21 -0
- package/it/packages/@intlayer/editor-react/index.md +21 -0
- package/it/packages/@intlayer/webpack/index.md +35 -0
- package/it/packages/angular-intlayer/index.md +3 -0
- package/it/packages/express-intlayer/index.md +229 -0
- package/it/packages/express-intlayer/t.md +432 -0
- package/it/packages/intlayer/getConfiguration.md +120 -0
- package/it/packages/intlayer/getEnumeration.md +138 -0
- package/it/packages/intlayer/getHTMLTextDir.md +97 -0
- package/it/packages/intlayer/getLocaleLang.md +57 -0
- package/it/packages/intlayer/getLocaleName.md +93 -0
- package/it/packages/intlayer/getLocalizedUrl.md +221 -0
- package/it/packages/intlayer/getMultilingualUrls.md +200 -0
- package/it/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/it/packages/intlayer/getTranslation.md +166 -0
- package/it/packages/intlayer/getTranslationContent.md +166 -0
- package/it/packages/intlayer/index.md +479 -0
- package/it/packages/intlayer-cli/index.md +41 -0
- package/it/packages/intlayer-editor/index.md +113 -0
- package/it/packages/lynx-intlayer/index.md +58 -0
- package/it/packages/next-intlayer/index.md +267 -0
- package/it/packages/next-intlayer/t.md +326 -0
- package/it/packages/next-intlayer/useDictionary.md +242 -0
- package/it/packages/next-intlayer/useIntlayer.md +237 -0
- package/it/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/it/packages/next-intlayer/useLocale.md +105 -0
- package/it/packages/preact-intlayer/index.md +3 -0
- package/it/packages/react-intlayer/index.md +260 -0
- package/it/packages/react-intlayer/t.md +277 -0
- package/it/packages/react-intlayer/useDictionary.md +260 -0
- package/it/packages/react-intlayer/useIntlayer.md +225 -0
- package/it/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/it/packages/react-intlayer/useLocale.md +184 -0
- package/it/packages/react-native-intlayer/index.md +57 -0
- package/it/packages/react-scripts-intlayer/index.md +57 -0
- package/it/packages/solid-intlayer/index.md +5 -0
- package/it/packages/svelte-intlayer/index.md +3 -0
- package/it/packages/vite-intlayer/index.md +53 -0
- package/it/packages/vue-intlayer/index.md +5 -0
- package/it/per_locale_file.md +298 -0
- package/it/privacy_notice.md +61 -0
- package/it/roadmap.md +206 -0
- package/it/terms_of_service.md +33 -0
- package/it/vs_code_extension.md +139 -0
- package/ja/CI_CD.md +149 -0
- package/ja/autoFill.md +157 -0
- package/ja/configuration.md +507 -0
- package/ja/dictionary/condition.md +213 -0
- package/ja/dictionary/content_extention_customization.md +81 -0
- package/ja/dictionary/enumeration.md +221 -0
- package/ja/dictionary/file.md +209 -0
- package/ja/dictionary/function_fetching.md +190 -0
- package/ja/dictionary/get_started.md +466 -0
- package/ja/dictionary/insertion.md +161 -0
- package/ja/dictionary/markdown.md +343 -0
- package/ja/dictionary/nesting.md +249 -0
- package/ja/dictionary/translation.md +287 -0
- package/ja/header.md +7 -0
- package/ja/how_works_intlayer.md +217 -0
- package/ja/index.md +125 -0
- package/ja/interest_of_intlayer.md +132 -0
- package/ja/intlayer_CMS.md +334 -0
- package/ja/intlayer_cli.md +274 -0
- package/ja/intlayer_visual_editor.md +213 -0
- package/ja/intlayer_with_angular.md +3 -0
- package/ja/intlayer_with_create_react_app.md +1186 -0
- package/ja/intlayer_with_express.md +267 -0
- package/ja/intlayer_with_lynx+react.md +482 -0
- package/ja/intlayer_with_nextjs_14.md +1256 -0
- package/ja/intlayer_with_nextjs_15.md +1308 -0
- package/ja/intlayer_with_nextjs_page_router.md +1085 -0
- package/ja/intlayer_with_react_native+expo.md +537 -0
- package/ja/intlayer_with_vite+preact.md +1601 -0
- package/ja/intlayer_with_vite+react.md +1555 -0
- package/ja/intlayer_with_vite+solid.md +3 -0
- package/ja/intlayer_with_vite+svelte.md +3 -0
- package/ja/intlayer_with_vite+vue.md +990 -0
- package/ja/introduction.md +186 -0
- package/ja/mcp_server.md +150 -0
- package/ja/packages/@intlayer/api/index.md +31 -0
- package/ja/packages/@intlayer/chokidar/index.md +31 -0
- package/ja/packages/@intlayer/cli/index.md +21 -0
- package/ja/packages/@intlayer/config/index.md +116 -0
- package/ja/packages/@intlayer/core/index.md +25 -0
- package/ja/packages/@intlayer/design-system/index.md +21 -0
- package/ja/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ja/packages/@intlayer/editor/index.md +21 -0
- package/ja/packages/@intlayer/editor-react/index.md +21 -0
- package/ja/packages/@intlayer/webpack/index.md +35 -0
- package/ja/packages/angular-intlayer/index.md +3 -0
- package/ja/packages/express-intlayer/index.md +229 -0
- package/ja/packages/express-intlayer/t.md +432 -0
- package/ja/packages/intlayer/getConfiguration.md +120 -0
- package/ja/packages/intlayer/getEnumeration.md +140 -0
- package/ja/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ja/packages/intlayer/getLocaleLang.md +59 -0
- package/ja/packages/intlayer/getLocaleName.md +93 -0
- package/ja/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ja/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ja/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ja/packages/intlayer/getTranslation.md +166 -0
- package/ja/packages/intlayer/getTranslationContent.md +166 -0
- package/ja/packages/intlayer/index.md +479 -0
- package/ja/packages/intlayer-cli/index.md +41 -0
- package/ja/packages/intlayer-editor/index.md +115 -0
- package/ja/packages/lynx-intlayer/index.md +58 -0
- package/ja/packages/next-intlayer/index.md +263 -0
- package/ja/packages/next-intlayer/t.md +326 -0
- package/ja/packages/next-intlayer/useDictionary.md +242 -0
- package/ja/packages/next-intlayer/useIntlayer.md +237 -0
- package/ja/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ja/packages/next-intlayer/useLocale.md +105 -0
- package/ja/packages/preact-intlayer/index.md +3 -0
- package/ja/packages/react-intlayer/index.md +257 -0
- package/ja/packages/react-intlayer/t.md +277 -0
- package/ja/packages/react-intlayer/useDictionary.md +260 -0
- package/ja/packages/react-intlayer/useIntlayer.md +225 -0
- package/ja/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ja/packages/react-intlayer/useLocale.md +184 -0
- package/ja/packages/react-native-intlayer/index.md +57 -0
- package/ja/packages/react-scripts-intlayer/index.md +57 -0
- package/ja/packages/solid-intlayer/index.md +3 -0
- package/ja/packages/svelte-intlayer/index.md +3 -0
- package/ja/packages/vite-intlayer/index.md +53 -0
- package/ja/packages/vue-intlayer/index.md +3 -0
- package/ja/per_locale_file.md +298 -0
- package/ja/privacy_notice.md +57 -0
- package/ja/roadmap.md +206 -0
- package/ja/terms_of_service.md +33 -0
- package/ja/vs_code_extension.md +139 -0
- package/ko/CI_CD.md +149 -0
- package/ko/autoFill.md +157 -0
- package/ko/configuration.md +507 -0
- package/ko/dictionary/condition.md +213 -0
- package/ko/dictionary/content_extention_customization.md +81 -0
- package/ko/dictionary/enumeration.md +221 -0
- package/ko/dictionary/file.md +207 -0
- package/ko/dictionary/function_fetching.md +190 -0
- package/ko/dictionary/get_started.md +466 -0
- package/ko/dictionary/insertion.md +167 -0
- package/ko/dictionary/markdown.md +343 -0
- package/ko/dictionary/nesting.md +249 -0
- package/ko/dictionary/translation.md +287 -0
- package/ko/header.md +7 -0
- package/ko/how_works_intlayer.md +216 -0
- package/ko/index.md +125 -0
- package/ko/interest_of_intlayer.md +132 -0
- package/ko/intlayer_CMS.md +334 -0
- package/ko/intlayer_cli.md +274 -0
- package/ko/intlayer_visual_editor.md +210 -0
- package/ko/intlayer_with_angular.md +3 -0
- package/ko/intlayer_with_create_react_app.md +1186 -0
- package/ko/intlayer_with_express.md +267 -0
- package/ko/intlayer_with_lynx+react.md +482 -0
- package/ko/intlayer_with_nextjs_14.md +1267 -0
- package/ko/intlayer_with_nextjs_15.md +1319 -0
- package/ko/intlayer_with_nextjs_page_router.md +1097 -0
- package/ko/intlayer_with_react_native+expo.md +537 -0
- package/ko/intlayer_with_vite+preact.md +1682 -0
- package/ko/intlayer_with_vite+react.md +1582 -0
- package/ko/intlayer_with_vite+solid.md +3 -0
- package/ko/intlayer_with_vite+svelte.md +3 -0
- package/ko/intlayer_with_vite+vue.md +988 -0
- package/ko/introduction.md +186 -0
- package/ko/mcp_server.md +150 -0
- package/ko/packages/@intlayer/api/index.md +31 -0
- package/ko/packages/@intlayer/chokidar/index.md +31 -0
- package/ko/packages/@intlayer/cli/index.md +21 -0
- package/ko/packages/@intlayer/config/index.md +116 -0
- package/ko/packages/@intlayer/core/index.md +25 -0
- package/ko/packages/@intlayer/design-system/index.md +21 -0
- package/ko/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ko/packages/@intlayer/editor/index.md +21 -0
- package/ko/packages/@intlayer/editor-react/index.md +21 -0
- package/ko/packages/@intlayer/webpack/index.md +35 -0
- package/ko/packages/angular-intlayer/index.md +5 -0
- package/ko/packages/express-intlayer/index.md +229 -0
- package/ko/packages/express-intlayer/t.md +432 -0
- package/ko/packages/intlayer/getConfiguration.md +120 -0
- package/ko/packages/intlayer/getEnumeration.md +138 -0
- package/ko/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ko/packages/intlayer/getLocaleLang.md +57 -0
- package/ko/packages/intlayer/getLocaleName.md +93 -0
- package/ko/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ko/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ko/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ko/packages/intlayer/getTranslation.md +166 -0
- package/ko/packages/intlayer/getTranslationContent.md +166 -0
- package/ko/packages/intlayer/index.md +480 -0
- package/ko/packages/intlayer-cli/index.md +41 -0
- package/ko/packages/intlayer-editor/index.md +113 -0
- package/ko/packages/lynx-intlayer/index.md +58 -0
- package/ko/packages/next-intlayer/index.md +267 -0
- package/ko/packages/next-intlayer/t.md +337 -0
- package/ko/packages/next-intlayer/useDictionary.md +242 -0
- package/ko/packages/next-intlayer/useIntlayer.md +237 -0
- package/ko/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ko/packages/next-intlayer/useLocale.md +105 -0
- package/ko/packages/preact-intlayer/index.md +3 -0
- package/ko/packages/react-intlayer/index.md +260 -0
- package/ko/packages/react-intlayer/t.md +277 -0
- package/ko/packages/react-intlayer/useDictionary.md +268 -0
- package/ko/packages/react-intlayer/useIntlayer.md +225 -0
- package/ko/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ko/packages/react-intlayer/useLocale.md +184 -0
- package/ko/packages/react-native-intlayer/index.md +57 -0
- package/ko/packages/react-scripts-intlayer/index.md +57 -0
- package/ko/packages/solid-intlayer/index.md +3 -0
- package/ko/packages/svelte-intlayer/index.md +3 -0
- package/ko/packages/vite-intlayer/index.md +53 -0
- package/ko/packages/vue-intlayer/index.md +3 -0
- package/ko/per_locale_file.md +300 -0
- package/ko/privacy_notice.md +61 -0
- package/ko/roadmap.md +206 -0
- package/ko/terms_of_service.md +33 -0
- package/ko/vs_code_extension.md +139 -0
- package/package.json +96 -0
- package/pt/CI_CD.md +149 -0
- package/pt/autoFill.md +157 -0
- package/pt/configuration.md +503 -0
- package/pt/dictionary/condition.md +213 -0
- package/pt/dictionary/content_extention_customization.md +81 -0
- package/pt/dictionary/enumeration.md +221 -0
- package/pt/dictionary/file.md +210 -0
- package/pt/dictionary/function_fetching.md +190 -0
- package/pt/dictionary/get_started.md +490 -0
- package/pt/dictionary/insertion.md +161 -0
- package/pt/dictionary/markdown.md +339 -0
- package/pt/dictionary/nesting.md +249 -0
- package/pt/dictionary/translation.md +322 -0
- package/pt/header.md +7 -0
- package/pt/how_works_intlayer.md +216 -0
- package/pt/index.md +125 -0
- package/pt/interest_of_intlayer.md +132 -0
- package/pt/intlayer_CMS.md +334 -0
- package/pt/intlayer_cli.md +274 -0
- package/pt/intlayer_visual_editor.md +210 -0
- package/pt/intlayer_with_angular.md +3 -0
- package/pt/intlayer_with_create_react_app.md +1204 -0
- package/pt/intlayer_with_express.md +270 -0
- package/pt/intlayer_with_lynx+react.md +467 -0
- package/pt/intlayer_with_nextjs_14.md +1269 -0
- package/pt/intlayer_with_nextjs_15.md +1319 -0
- package/pt/intlayer_with_nextjs_page_router.md +1109 -0
- package/pt/intlayer_with_react_native+expo.md +259 -0
- package/pt/intlayer_with_vite+preact.md +1663 -0
- package/pt/intlayer_with_vite+react.md +1621 -0
- package/pt/intlayer_with_vite+solid.md +3 -0
- package/pt/intlayer_with_vite+svelte.md +3 -0
- package/pt/intlayer_with_vite+vue.md +989 -0
- package/pt/introduction.md +193 -0
- package/pt/mcp_server.md +150 -0
- package/pt/packages/@intlayer/api/index.md +31 -0
- package/pt/packages/@intlayer/chokidar/index.md +31 -0
- package/pt/packages/@intlayer/cli/index.md +21 -0
- package/pt/packages/@intlayer/config/index.md +116 -0
- package/pt/packages/@intlayer/core/index.md +25 -0
- package/pt/packages/@intlayer/design-system/index.md +21 -0
- package/pt/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/pt/packages/@intlayer/editor/index.md +21 -0
- package/pt/packages/@intlayer/editor-react/index.md +21 -0
- package/pt/packages/@intlayer/webpack/index.md +35 -0
- package/pt/packages/angular-intlayer/index.md +3 -0
- package/pt/packages/express-intlayer/index.md +232 -0
- package/pt/packages/express-intlayer/t.md +267 -0
- package/pt/packages/intlayer/getConfiguration.md +120 -0
- package/pt/packages/intlayer/getEnumeration.md +138 -0
- package/pt/packages/intlayer/getHTMLTextDir.md +97 -0
- package/pt/packages/intlayer/getLocaleLang.md +57 -0
- package/pt/packages/intlayer/getLocaleName.md +93 -0
- package/pt/packages/intlayer/getLocalizedUrl.md +221 -0
- package/pt/packages/intlayer/getMultilingualUrls.md +198 -0
- package/pt/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/pt/packages/intlayer/getTranslation.md +175 -0
- package/pt/packages/intlayer/getTranslationContent.md +177 -0
- package/pt/packages/intlayer/index.md +484 -0
- package/pt/packages/intlayer-cli/index.md +41 -0
- package/pt/packages/intlayer-editor/index.md +113 -0
- package/pt/packages/lynx-intlayer/index.md +58 -0
- package/pt/packages/next-intlayer/index.md +270 -0
- package/pt/packages/next-intlayer/t.md +341 -0
- package/pt/packages/next-intlayer/useDictionary.md +248 -0
- package/pt/packages/next-intlayer/useIntlayer.md +237 -0
- package/pt/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/pt/packages/next-intlayer/useLocale.md +105 -0
- package/pt/packages/preact-intlayer/index.md +3 -0
- package/pt/packages/react-intlayer/index.md +261 -0
- package/pt/packages/react-intlayer/t.md +289 -0
- package/pt/packages/react-intlayer/useDictionary.md +268 -0
- package/pt/packages/react-intlayer/useIntlayer.md +225 -0
- package/pt/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/pt/packages/react-intlayer/useLocale.md +184 -0
- package/pt/packages/react-native-intlayer/index.md +57 -0
- package/pt/packages/react-scripts-intlayer/index.md +57 -0
- package/pt/packages/solid-intlayer/index.md +3 -0
- package/pt/packages/svelte-intlayer/index.md +3 -0
- package/pt/packages/vite-intlayer/index.md +53 -0
- package/pt/packages/vue-intlayer/index.md +3 -0
- package/pt/per_locale_file.md +298 -0
- package/pt/privacy_notice.md +61 -0
- package/pt/roadmap.md +206 -0
- package/pt/terms_of_service.md +33 -0
- package/pt/vs_code_extension.md +139 -0
- package/ru/CI_CD.md +149 -0
- package/ru/autoFill.md +157 -0
- package/ru/configuration.md +507 -0
- package/ru/dictionary/condition.md +213 -0
- package/ru/dictionary/content_extention_customization.md +81 -0
- package/ru/dictionary/enumeration.md +221 -0
- package/ru/dictionary/file.md +209 -0
- package/ru/dictionary/function_fetching.md +188 -0
- package/ru/dictionary/get_started.md +311 -0
- package/ru/dictionary/insertion.md +161 -0
- package/ru/dictionary/markdown.md +339 -0
- package/ru/dictionary/nesting.md +249 -0
- package/ru/dictionary/translation.md +322 -0
- package/ru/environment/angular.md +3 -0
- package/ru/header.md +7 -0
- package/ru/how_works_intlayer.md +217 -0
- package/ru/index.md +125 -0
- package/ru/interest_of_intlayer.md +132 -0
- package/ru/intlayer_CMS.md +334 -0
- package/ru/intlayer_cli.md +274 -0
- package/ru/intlayer_visual_editor.md +210 -0
- package/ru/intlayer_with_angular.md +3 -0
- package/ru/intlayer_with_create_react_app.md +1196 -0
- package/ru/intlayer_with_express.md +273 -0
- package/ru/intlayer_with_lynx+react.md +482 -0
- package/ru/intlayer_with_nextjs_14.md +1274 -0
- package/ru/intlayer_with_nextjs_15.md +1318 -0
- package/ru/intlayer_with_nextjs_page_router.md +1100 -0
- package/ru/intlayer_with_react_native+expo.md +537 -0
- package/ru/intlayer_with_vite+preact.md +1663 -0
- package/ru/intlayer_with_vite+react.md +1546 -0
- package/ru/intlayer_with_vite+solid.md +3 -0
- package/ru/intlayer_with_vite+svelte.md +3 -0
- package/ru/intlayer_with_vite+vue.md +987 -0
- package/ru/introduction.md +190 -0
- package/ru/mcp_server.md +152 -0
- package/ru/packages/@intlayer/api/index.md +31 -0
- package/ru/packages/@intlayer/chokidar/index.md +31 -0
- package/ru/packages/@intlayer/cli/index.md +23 -0
- package/ru/packages/@intlayer/config/index.md +116 -0
- package/ru/packages/@intlayer/core/index.md +25 -0
- package/ru/packages/@intlayer/design-system/index.md +21 -0
- package/ru/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/ru/packages/@intlayer/editor/index.md +21 -0
- package/ru/packages/@intlayer/editor-react/index.md +21 -0
- package/ru/packages/@intlayer/webpack/index.md +35 -0
- package/ru/packages/angular-intlayer/index.md +3 -0
- package/ru/packages/express-intlayer/index.md +235 -0
- package/ru/packages/express-intlayer/t.md +445 -0
- package/ru/packages/intlayer/getConfiguration.md +120 -0
- package/ru/packages/intlayer/getEnumeration.md +140 -0
- package/ru/packages/intlayer/getHTMLTextDir.md +97 -0
- package/ru/packages/intlayer/getLocaleLang.md +59 -0
- package/ru/packages/intlayer/getLocaleName.md +93 -0
- package/ru/packages/intlayer/getLocalizedUrl.md +221 -0
- package/ru/packages/intlayer/getMultilingualUrls.md +198 -0
- package/ru/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/ru/packages/intlayer/getTranslation.md +177 -0
- package/ru/packages/intlayer/getTranslationContent.md +175 -0
- package/ru/packages/intlayer/index.md +275 -0
- package/ru/packages/intlayer-cli/index.md +41 -0
- package/ru/packages/intlayer-editor/index.md +115 -0
- package/ru/packages/lynx-intlayer/index.md +58 -0
- package/ru/packages/next-intlayer/index.md +267 -0
- package/ru/packages/next-intlayer/t.md +340 -0
- package/ru/packages/next-intlayer/useDictionary.md +248 -0
- package/ru/packages/next-intlayer/useIntlayer.md +237 -0
- package/ru/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/ru/packages/next-intlayer/useLocale.md +105 -0
- package/ru/packages/preact-intlayer/index.md +3 -0
- package/ru/packages/react-intlayer/index.md +261 -0
- package/ru/packages/react-intlayer/t.md +289 -0
- package/ru/packages/react-intlayer/useDictionary.md +268 -0
- package/ru/packages/react-intlayer/useIntlayer.md +225 -0
- package/ru/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/ru/packages/react-intlayer/useLocale.md +184 -0
- package/ru/packages/react-native-intlayer/index.md +57 -0
- package/ru/packages/react-scripts-intlayer/index.md +57 -0
- package/ru/packages/solid-intlayer/index.md +3 -0
- package/ru/packages/svelte-intlayer/index.md +3 -0
- package/ru/packages/vite-intlayer/index.md +53 -0
- package/ru/packages/vue-intlayer/index.md +3 -0
- package/ru/per_locale_file.md +298 -0
- package/ru/privacy_notice.md +61 -0
- package/ru/roadmap.md +206 -0
- package/ru/terms_of_service.md +33 -0
- package/ru/vs_code_extension.md +139 -0
- package/zh/CI_CD.md +149 -0
- package/zh/autoFill.md +157 -0
- package/zh/configuration.md +484 -0
- package/zh/dictionary/condition.md +213 -0
- package/zh/dictionary/content_extention_customization.md +81 -0
- package/zh/dictionary/enumeration.md +221 -0
- package/zh/dictionary/file.md +209 -0
- package/zh/dictionary/function_fetching.md +188 -0
- package/zh/dictionary/get_started.md +490 -0
- package/zh/dictionary/insertion.md +161 -0
- package/zh/dictionary/markdown.md +342 -0
- package/zh/dictionary/nesting.md +249 -0
- package/zh/dictionary/translation.md +287 -0
- package/zh/header.md +7 -0
- package/zh/how_works_intlayer.md +217 -0
- package/zh/index.md +125 -0
- package/zh/interest_of_intlayer.md +132 -0
- package/zh/intlayer_CMS.md +334 -0
- package/zh/intlayer_cli.md +274 -0
- package/zh/intlayer_visual_editor.md +210 -0
- package/zh/intlayer_with_angular.md +3 -0
- package/zh/intlayer_with_create_react_app.md +1196 -0
- package/zh/intlayer_with_express.md +267 -0
- package/zh/intlayer_with_lynx+react.md +484 -0
- package/zh/intlayer_with_nextjs_14.md +1286 -0
- package/zh/intlayer_with_nextjs_15.md +1322 -0
- package/zh/intlayer_with_nextjs_page_router.md +1097 -0
- package/zh/intlayer_with_react_native+expo.md +539 -0
- package/zh/intlayer_with_vite+preact.md +1681 -0
- package/zh/intlayer_with_vite+react.md +1577 -0
- package/zh/intlayer_with_vite+solid.md +3 -0
- package/zh/intlayer_with_vite+svelte.md +3 -0
- package/zh/intlayer_with_vite+vue.md +988 -0
- package/zh/introduction.md +186 -0
- package/zh/mcp_server.md +152 -0
- package/zh/packages/@intlayer/api/index.md +31 -0
- package/zh/packages/@intlayer/chokidar/index.md +31 -0
- package/zh/packages/@intlayer/cli/index.md +21 -0
- package/zh/packages/@intlayer/config/index.md +116 -0
- package/zh/packages/@intlayer/core/index.md +25 -0
- package/zh/packages/@intlayer/design-system/index.md +21 -0
- package/zh/packages/@intlayer/dictionary-entry/index.md +21 -0
- package/zh/packages/@intlayer/editor/index.md +21 -0
- package/zh/packages/@intlayer/editor-react/index.md +21 -0
- package/zh/packages/@intlayer/webpack/index.md +35 -0
- package/zh/packages/angular-intlayer/index.md +3 -0
- package/zh/packages/express-intlayer/index.md +229 -0
- package/zh/packages/express-intlayer/t.md +432 -0
- package/zh/packages/intlayer/getConfiguration.md +120 -0
- package/zh/packages/intlayer/getEnumeration.md +140 -0
- package/zh/packages/intlayer/getHTMLTextDir.md +97 -0
- package/zh/packages/intlayer/getLocaleLang.md +57 -0
- package/zh/packages/intlayer/getLocaleName.md +93 -0
- package/zh/packages/intlayer/getLocalizedUrl.md +221 -0
- package/zh/packages/intlayer/getMultilingualUrls.md +198 -0
- package/zh/packages/intlayer/getPathWithoutLocale.md +50 -0
- package/zh/packages/intlayer/getTranslation.md +166 -0
- package/zh/packages/intlayer/getTranslationContent.md +166 -0
- package/zh/packages/intlayer/index.md +360 -0
- package/zh/packages/intlayer-cli/index.md +41 -0
- package/zh/packages/intlayer-editor/index.md +113 -0
- package/zh/packages/lynx-intlayer/index.md +60 -0
- package/zh/packages/next-intlayer/index.md +267 -0
- package/zh/packages/next-intlayer/t.md +338 -0
- package/zh/packages/next-intlayer/useDictionary.md +242 -0
- package/zh/packages/next-intlayer/useIntlayer.md +237 -0
- package/zh/packages/next-intlayer/useIntlayerAsync.md +211 -0
- package/zh/packages/next-intlayer/useLocale.md +105 -0
- package/zh/packages/preact-intlayer/index.md +3 -0
- package/zh/packages/react-intlayer/index.md +257 -0
- package/zh/packages/react-intlayer/t.md +271 -0
- package/zh/packages/react-intlayer/useDictionary.md +260 -0
- package/zh/packages/react-intlayer/useIntlayer.md +225 -0
- package/zh/packages/react-intlayer/useIntlayerAsync.md +226 -0
- package/zh/packages/react-intlayer/useLocale.md +184 -0
- package/zh/packages/react-native-intlayer/index.md +57 -0
- package/zh/packages/react-scripts-intlayer/index.md +57 -0
- package/zh/packages/solid-intlayer/index.md +3 -0
- package/zh/packages/svelte-intlayer/index.md +3 -0
- package/zh/packages/vite-intlayer/index.md +53 -0
- package/zh/packages/vue-intlayer/index.md +3 -0
- package/zh/per_locale_file.md +298 -0
- package/zh/privacy_notice.md +61 -0
- package/zh/roadmap.md +206 -0
- package/zh/terms_of_service.md +33 -0
- package/zh/vs_code_extension.md +139 -0
|
@@ -0,0 +1,1308 @@
|
|
|
1
|
+
# Commencer avec l'internationalisation (i18n) avec Intlayer et Next.js 15 App Router
|
|
2
|
+
|
|
3
|
+
<iframe title="The best i18n solution for Next.js? Discover Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/e_PPG7PTqGU?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
4
|
+
|
|
5
|
+
Voir [Application Template](https://github.com/aymericzip/intlayer-next-15-template) sur GitHub.
|
|
6
|
+
|
|
7
|
+
## Qu'est-ce qu'Intlayer ?
|
|
8
|
+
|
|
9
|
+
**Intlayer** est une bibliothèque open-source innovante d'internationalisation (i18n) conçue pour simplifier la prise en charge multilingue dans les applications web modernes. Intlayer s'intègre parfaitement avec le dernier framework **Next.js 15**, y compris son puissant **App Router**. Elle est optimisée pour fonctionner avec les **Server Components** pour un rendu efficace et est entièrement compatible avec [**Turbopack**](https://nextjs.org/docs/architecture/turbopack).
|
|
10
|
+
|
|
11
|
+
Avec Intlayer, vous pouvez :
|
|
12
|
+
|
|
13
|
+
- **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
|
|
14
|
+
- **Localiser dynamiquement les métadonnées**, les routes et le contenu.
|
|
15
|
+
- **Accéder aux traductions dans les composants côté client et côté serveur**.
|
|
16
|
+
- **Assurer 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.
|
|
17
|
+
- **Bénéficier de fonctionnalités avancées**, comme la détection et le changement dynamiques de locale.
|
|
18
|
+
|
|
19
|
+
> Intlayer est compatible avec Next.js 12, 13, 14 et 15. Si vous utilisez le Page Router de Next.js, vous pouvez consulter ce [guide](https://github.com/aymericzip/intlayer/blob/main/docs/fr/intlayer_with_nextjs_page_router.md). Pour Next.js 12, 13, 14 avec App Router, consultez ce [guide](https://github.com/aymericzip/intlayer/blob/main/docs/fr/intlayer_with_nextjs_14.md).
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Guide étape par étape pour configurer Intlayer dans une application Next.js
|
|
24
|
+
|
|
25
|
+
### Étape 1 : Installer les dépendances
|
|
26
|
+
|
|
27
|
+
Installez les packages nécessaires en utilisant npm :
|
|
28
|
+
|
|
29
|
+
```bash packageManager="npm"
|
|
30
|
+
npm install intlayer next-intlayer
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash packageManager="pnpm"
|
|
34
|
+
pnpm add intlayer next-intlayer
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```bash packageManager="yarn"
|
|
38
|
+
yarn add intlayer next-intlayer
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- **intlayer**
|
|
42
|
+
|
|
43
|
+
Le package principal qui fournit des outils d'internationalisation pour la gestion des configurations, la traduction, [la déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/fr/dictionary/get_started.md), la transpilation et [les commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/fr/intlayer_cli.md).
|
|
44
|
+
|
|
45
|
+
- **next-intlayer**
|
|
46
|
+
|
|
47
|
+
Le package qui intègre Intlayer avec Next.js. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation avec Next.js. De plus, il inclut le plugin Next.js pour intégrer Intlayer avec [Webpack](https://webpack.js.org/) ou [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), ainsi qu'un middleware pour détecter la locale préférée de l'utilisateur, gérer les cookies et gérer la redirection des URL.
|
|
48
|
+
|
|
49
|
+
### Étape 2 : Configurer votre projet
|
|
50
|
+
|
|
51
|
+
Créez un fichier de configuration pour configurer les langues de votre application :
|
|
52
|
+
|
|
53
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
54
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
55
|
+
|
|
56
|
+
const config: IntlayerConfig = {
|
|
57
|
+
internationalization: {
|
|
58
|
+
locales: [
|
|
59
|
+
Locales.ENGLISH,
|
|
60
|
+
Locales.FRENCH,
|
|
61
|
+
Locales.SPANISH,
|
|
62
|
+
// Vos autres locales
|
|
63
|
+
],
|
|
64
|
+
defaultLocale: Locales.ENGLISH,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default config;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
72
|
+
import { Locales } from "intlayer";
|
|
73
|
+
|
|
74
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
75
|
+
const config = {
|
|
76
|
+
internationalization: {
|
|
77
|
+
locales: [
|
|
78
|
+
Locales.ENGLISH,
|
|
79
|
+
Locales.FRENCH,
|
|
80
|
+
Locales.SPANISH,
|
|
81
|
+
// Vos autres locales
|
|
82
|
+
],
|
|
83
|
+
defaultLocale: Locales.ENGLISH,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export default config;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
91
|
+
const { Locales } = require("intlayer");
|
|
92
|
+
|
|
93
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
+
const config = {
|
|
95
|
+
internationalization: {
|
|
96
|
+
locales: [
|
|
97
|
+
Locales.ENGLISH,
|
|
98
|
+
Locales.FRENCH,
|
|
99
|
+
Locales.SPANISH,
|
|
100
|
+
// Vos autres locales
|
|
101
|
+
],
|
|
102
|
+
defaultLocale: Locales.ENGLISH,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
module.exports = config;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> Grâce à ce fichier de configuration, vous pouvez configurer des URL localisées, des redirections middleware, des noms de cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les journaux 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/fr/configuration.md).
|
|
110
|
+
|
|
111
|
+
### Étape 3 : Intégrer Intlayer dans votre configuration Next.js
|
|
112
|
+
|
|
113
|
+
Configurez votre projet Next.js pour utiliser Intlayer :
|
|
114
|
+
|
|
115
|
+
```typescript filename="next.config.ts" codeFormat="typescript"
|
|
116
|
+
import type { NextConfig } from "next";
|
|
117
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
118
|
+
|
|
119
|
+
const nextConfig: NextConfig = {
|
|
120
|
+
/* options de configuration ici */
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default withIntlayer(nextConfig);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```typescript fileName="next.config.mjs" codeFormat="esm"
|
|
127
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
128
|
+
|
|
129
|
+
/** @type {import('next').NextConfig} */
|
|
130
|
+
const nextConfig = {
|
|
131
|
+
/* options de configuration ici */
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export default withIntlayer(nextConfig);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```typescript fileName="next.config.cjs" codeFormat="commonjs"
|
|
138
|
+
const { withIntlayer } = require("next-intlayer/server");
|
|
139
|
+
|
|
140
|
+
/** @type {import('next').NextConfig} */
|
|
141
|
+
const nextConfig = {
|
|
142
|
+
/* options de configuration ici */
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
module.exports = withIntlayer(nextConfig);
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
> Le plugin Next.js `withIntlayer()` est utilisé pour intégrer Intlayer avec Next.js. Il garantit la construction des fichiers de déclaration de contenu et les surveille en mode développement. Il définit les variables d'environnement Intlayer dans les environnements [Webpack](https://webpack.js.org/) ou [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). De plus, il fournit des alias pour optimiser les performances et garantir la compatibilité avec les composants serveur.
|
|
149
|
+
|
|
150
|
+
### Étape 4 : Définir des routes dynamiques pour les locales
|
|
151
|
+
|
|
152
|
+
Supprimez tout le contenu de `RootLayout` et remplacez-le par le code suivant :
|
|
153
|
+
|
|
154
|
+
```tsx {3} fileName="src/app/layout.tsx" codeFormat="typescript"
|
|
155
|
+
import type { PropsWithChildren, FC } from "react";
|
|
156
|
+
import "./globals.css";
|
|
157
|
+
|
|
158
|
+
const RootLayout: FC<PropsWithChildren> = ({ children }) => children;
|
|
159
|
+
|
|
160
|
+
export default RootLayout;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```jsx {3} fileName="src/app/layout.mjx" codeFormat="esm"
|
|
164
|
+
import "./globals.css";
|
|
165
|
+
|
|
166
|
+
const RootLayout = ({ children }) => children;
|
|
167
|
+
|
|
168
|
+
export default RootLayout;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
```jsx {1,8} fileName="src/app/layout.csx" codeFormat="commonjs"
|
|
172
|
+
require("./globals.css");
|
|
173
|
+
|
|
174
|
+
const RootLayout = ({ children }) => children;
|
|
175
|
+
|
|
176
|
+
module.exports = {
|
|
177
|
+
default: RootLayout,
|
|
178
|
+
generateStaticParams,
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
> Garder le composant `RootLayout` vide permet de définir les attributs [`lang`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/lang) et [`dir`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/dir) sur la balise `<html>`.
|
|
183
|
+
|
|
184
|
+
Pour implémenter le routage dynamique, fournissez le chemin pour la locale en ajoutant une nouvelle disposition dans votre répertoire `[locale]` :
|
|
185
|
+
|
|
186
|
+
```tsx fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
|
|
187
|
+
import type { NextLayoutIntlayer } from "next-intlayer";
|
|
188
|
+
import { Inter } from "next/font/google";
|
|
189
|
+
import { getHTMLTextDir } from "intlayer";
|
|
190
|
+
|
|
191
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
192
|
+
|
|
193
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
194
|
+
const { locale } = await params;
|
|
195
|
+
return (
|
|
196
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
197
|
+
<body className={inter.className}>{children}</body>
|
|
198
|
+
</html>
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export default LocaleLayout;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```jsx fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
|
|
206
|
+
import { getHTMLTextDir } from "intlayer";
|
|
207
|
+
|
|
208
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
209
|
+
|
|
210
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
211
|
+
const { locale } = await params;
|
|
212
|
+
return (
|
|
213
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
214
|
+
<body className={inter.className}>{children}</body>
|
|
215
|
+
</html>
|
|
216
|
+
);
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export default LocaleLayout;
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```jsx fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
|
|
223
|
+
const { Inter } = require("next/font/google");
|
|
224
|
+
const { getHTMLTextDir } = require("intlayer");
|
|
225
|
+
|
|
226
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
227
|
+
|
|
228
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
229
|
+
const { locale } = await params;
|
|
230
|
+
return (
|
|
231
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
232
|
+
<body className={inter.className}>{children}</body>
|
|
233
|
+
</html>
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
module.exports = LocaleLayout;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> Le segment de chemin `[locale]` est utilisé pour définir la locale. Exemple : `/en-US/about` fera référence à `en-US` et `/fr/about` à `fr`.
|
|
241
|
+
|
|
242
|
+
Ensuite, implémentez la fonction `generateStaticParams` dans votre disposition d'application.
|
|
243
|
+
|
|
244
|
+
```tsx {1} fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
|
|
245
|
+
export { generateStaticParams } from "next-intlayer"; // Ligne à insérer
|
|
246
|
+
|
|
247
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
248
|
+
/*... Reste du code*/
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export default LocaleLayout;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```jsx {1} fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
|
|
255
|
+
export { generateStaticParams } from "next-intlayer"; // Ligne à insérer
|
|
256
|
+
|
|
257
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
258
|
+
/*... Reste du code*/
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// ... Reste du code
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
```jsx {1,7} fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
|
|
265
|
+
const { generateStaticParams } = require("next-intlayer"); // Ligne à insérer
|
|
266
|
+
|
|
267
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
268
|
+
/*... Reste du code*/
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
module.exports = { default: LocaleLayout, generateStaticParams };
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
> `generateStaticParams` garantit que votre application pré-construit les pages nécessaires pour toutes les locales, réduisant ainsi les calculs au moment de l'exécution et améliorant l'expérience utilisateur. Pour plus de détails, consultez la [documentation Next.js sur generateStaticParams](https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic-rendering#generate-static-params).
|
|
275
|
+
|
|
276
|
+
### Étape 5 : Déclarer votre contenu
|
|
277
|
+
|
|
278
|
+
Créez et gérez vos déclarations de contenu pour stocker les traductions :
|
|
279
|
+
|
|
280
|
+
```tsx fileName="src/app/[locale]/page.content.ts" contentDeclarationFormat="typescript"
|
|
281
|
+
import { t, type Dictionary } from "intlayer";
|
|
282
|
+
|
|
283
|
+
const pageContent = {
|
|
284
|
+
key: "page",
|
|
285
|
+
content: {
|
|
286
|
+
getStarted: {
|
|
287
|
+
main: t({
|
|
288
|
+
en: "Get started by editing",
|
|
289
|
+
fr: "Commencez par éditer",
|
|
290
|
+
es: "Comience por editar",
|
|
291
|
+
}),
|
|
292
|
+
pageLink: "src/app/page.tsx",
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
} satisfies Dictionary;
|
|
296
|
+
|
|
297
|
+
export default pageContent;
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
```javascript fileName="src/app/[locale]/page.content.mjs" contentDeclarationFormat="esm"
|
|
301
|
+
import { t } from "intlayer";
|
|
302
|
+
|
|
303
|
+
/** @type {import('intlayer').Dictionary} */
|
|
304
|
+
const pageContent = {
|
|
305
|
+
key: "page",
|
|
306
|
+
content: {
|
|
307
|
+
getStarted: {
|
|
308
|
+
main: t({
|
|
309
|
+
en: "Get started by editing",
|
|
310
|
+
fr: "Commencez par éditer",
|
|
311
|
+
es: "Comience por editar",
|
|
312
|
+
}),
|
|
313
|
+
pageLink: "src/app/page.tsx",
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
export default pageContent;
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
```javascript fileName="src/app/[locale]/page.content.cjs" contentDeclarationFormat="commonjs"
|
|
322
|
+
const { t } = require("intlayer");
|
|
323
|
+
|
|
324
|
+
/** @type {import('intlayer').Dictionary} */
|
|
325
|
+
const pageContent = {
|
|
326
|
+
key: "page",
|
|
327
|
+
content: {
|
|
328
|
+
getStarted: {
|
|
329
|
+
main: t({
|
|
330
|
+
en: "Get started by editing",
|
|
331
|
+
fr: "Commencez par éditer",
|
|
332
|
+
es: "Comience por editar",
|
|
333
|
+
}),
|
|
334
|
+
pageLink: "src/app/page.tsx",
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
module.exports = pageContent;
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
```json fileName="src/app/[locale]/page.content.json" contentDeclarationFormat="json"
|
|
343
|
+
{
|
|
344
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
345
|
+
"key": "page",
|
|
346
|
+
"content": {
|
|
347
|
+
"getStarted": {
|
|
348
|
+
"nodeType": "translation",
|
|
349
|
+
"translation": {
|
|
350
|
+
"en": "Get started by editing",
|
|
351
|
+
"fr": "Commencez par éditer",
|
|
352
|
+
"es": "Comience por editar"
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
"pageLink": {
|
|
356
|
+
"nodeType": "translation",
|
|
357
|
+
"translation": {
|
|
358
|
+
"en": "src/app/page.tsx",
|
|
359
|
+
"fr": "src/app/page.tsx",
|
|
360
|
+
"es": "src/app/page.tsx"
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
> Vos déclarations de contenu peuvent être définies n'importe où dans votre application tant 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}`).
|
|
368
|
+
|
|
369
|
+
> Pour plus de détails, consultez la [documentation sur les déclarations de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/fr/dictionary/get_started.md).
|
|
370
|
+
|
|
371
|
+
### Étape 6 : Utiliser le contenu dans votre code
|
|
372
|
+
|
|
373
|
+
Accédez à vos dictionnaires de contenu dans toute votre application :
|
|
374
|
+
|
|
375
|
+
```tsx fileName="src/app/[locale]/page.tsx" codeFormat="typescript"
|
|
376
|
+
import type { FC } from "react";
|
|
377
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
378
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
379
|
+
import { type NextPageIntlayer, IntlayerClientProvider } from "next-intlayer";
|
|
380
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
381
|
+
|
|
382
|
+
const PageContent: FC = () => {
|
|
383
|
+
const content = useIntlayer("page");
|
|
384
|
+
|
|
385
|
+
return (
|
|
386
|
+
<>
|
|
387
|
+
<p>{content.getStarted.main}</p>
|
|
388
|
+
<code>{content.getStarted.pageLink}</code>
|
|
389
|
+
</>
|
|
390
|
+
);
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
const Page: NextPageIntlayer = async ({ params }) => {
|
|
394
|
+
const { locale } = await params;
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<IntlayerServerProvider locale={locale}>
|
|
398
|
+
<PageContent />
|
|
399
|
+
<ServerComponentExample />
|
|
400
|
+
|
|
401
|
+
<IntlayerClientProvider locale={locale}>
|
|
402
|
+
<ClientComponentExample />
|
|
403
|
+
</IntlayerClientProvider>
|
|
404
|
+
</IntlayerServerProvider>
|
|
405
|
+
);
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
export default Page;
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
```jsx fileName="src/app/[locale]/page.mjx" codeFormat="esm"
|
|
412
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
413
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
414
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
415
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
416
|
+
|
|
417
|
+
const PageContent = () => {
|
|
418
|
+
const content = useIntlayer("page");
|
|
419
|
+
|
|
420
|
+
return (
|
|
421
|
+
<>
|
|
422
|
+
<p>{content.getStarted.main}</p>
|
|
423
|
+
<code>{content.getStarted.pageLink}</code>
|
|
424
|
+
</>
|
|
425
|
+
);
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
const Page = async ({ params }) => {
|
|
429
|
+
const { locale } = await params;
|
|
430
|
+
|
|
431
|
+
return (
|
|
432
|
+
<IntlayerServerProvider locale={locale}>
|
|
433
|
+
<PageContent />
|
|
434
|
+
<ServerComponentExample />
|
|
435
|
+
|
|
436
|
+
<IntlayerClientProvider locale={locale}>
|
|
437
|
+
<ClientComponentExample />
|
|
438
|
+
</IntlayerClientProvider>
|
|
439
|
+
</IntlayerServerProvider>
|
|
440
|
+
);
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
export default Page;
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
```jsx fileName="src/app/[locale]/page.csx" codeFormat="commonjs"
|
|
447
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
448
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
449
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
450
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
451
|
+
|
|
452
|
+
const PageContent = () => {
|
|
453
|
+
const content = useIntlayer("page");
|
|
454
|
+
|
|
455
|
+
return (
|
|
456
|
+
<>
|
|
457
|
+
<p>{content.getStarted.main}</p>
|
|
458
|
+
<code>{content.getStarted.pageLink}</code>
|
|
459
|
+
</>
|
|
460
|
+
);
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
const Page = async ({ params }) => {
|
|
464
|
+
const { locale } = await params;
|
|
465
|
+
|
|
466
|
+
return (
|
|
467
|
+
<IntlayerServerProvider locale={locale}>
|
|
468
|
+
<PageContent />
|
|
469
|
+
<ServerComponentExample />
|
|
470
|
+
|
|
471
|
+
<IntlayerClientProvider locale={locale}>
|
|
472
|
+
<ClientComponentExample />
|
|
473
|
+
</IntlayerClientProvider>
|
|
474
|
+
</IntlayerServerProvider>
|
|
475
|
+
);
|
|
476
|
+
};
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
- **`IntlayerClientProvider`** est utilisé pour fournir la locale aux composants côté client. Il peut être placé dans n'importe quel composant parent, y compris la disposition. Cependant, il est recommandé de le placer dans une disposition car Next.js partage le code de disposition entre les pages, ce qui le rend plus efficace. En utilisant `IntlayerClientProvider` dans la disposition, vous évitez de le réinitialiser pour chaque page, améliorant ainsi les performances et maintenant un contexte de localisation cohérent dans toute votre application.
|
|
480
|
+
- **`IntlayerServerProvider`** est utilisé pour fournir la locale aux enfants côté serveur. Il ne peut pas être défini dans la disposition.
|
|
481
|
+
|
|
482
|
+
> La disposition et la page ne peuvent pas partager un contexte serveur commun car le système de contexte serveur est basé sur un magasin de données par requête (via le mécanisme [React's cache](https://react.dev/reference/react/cache)), ce qui entraîne la recréation de chaque "contexte" pour différents segments de l'application. Placer le fournisseur dans une disposition partagée briserait cette isolation, empêchant la propagation correcte des valeurs de contexte serveur à vos composants serveur.
|
|
483
|
+
|
|
484
|
+
```tsx {4,7} fileName="src/components/ClientComponentExample.tsx" codeFormat="typescript"
|
|
485
|
+
"use client";
|
|
486
|
+
|
|
487
|
+
import type { FC } from "react";
|
|
488
|
+
import { useIntlayer } from "next-intlayer";
|
|
489
|
+
|
|
490
|
+
export const ClientComponentExample: FC = () => {
|
|
491
|
+
const content = useIntlayer("client-component-example"); // Créez une déclaration de contenu associée
|
|
492
|
+
|
|
493
|
+
return (
|
|
494
|
+
<div>
|
|
495
|
+
<h2>{content.title}</h2>
|
|
496
|
+
<p>{content.content}</p>
|
|
497
|
+
</div>
|
|
498
|
+
);
|
|
499
|
+
};
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
```jsx {3,6} fileName="src/components/ClientComponentExample.mjx" codeFormat="esm"
|
|
503
|
+
"use client";
|
|
504
|
+
|
|
505
|
+
import { useIntlayer } from "next-intlayer";
|
|
506
|
+
|
|
507
|
+
const ClientComponentExample = () => {
|
|
508
|
+
const content = useIntlayer("client-component-example"); // Créez une déclaration de contenu associée
|
|
509
|
+
|
|
510
|
+
return (
|
|
511
|
+
<div>
|
|
512
|
+
<h2>{content.title}</h2>
|
|
513
|
+
<p>{content.content}</p>
|
|
514
|
+
</div>
|
|
515
|
+
);
|
|
516
|
+
};
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
```jsx {3,6} fileName="src/components/ClientComponentExample.csx" codeFormat="commonjs"
|
|
520
|
+
"use client";
|
|
521
|
+
|
|
522
|
+
const { useIntlayer } = require("next-intlayer");
|
|
523
|
+
|
|
524
|
+
const ClientComponentExample = () => {
|
|
525
|
+
const content = useIntlayer("client-component-example"); // Créez une déclaration de contenu associée
|
|
526
|
+
|
|
527
|
+
return (
|
|
528
|
+
<div>
|
|
529
|
+
<h2>{content.title}</h2>
|
|
530
|
+
<p>{content.content}</p>
|
|
531
|
+
</div>
|
|
532
|
+
);
|
|
533
|
+
};
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
```tsx {2} fileName="src/components/ServerComponentExample.tsx" codeFormat="typescript"
|
|
537
|
+
import type { FC } from "react";
|
|
538
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
539
|
+
|
|
540
|
+
export const ServerComponentExample: FC = () => {
|
|
541
|
+
const content = useIntlayer("server-component-example"); // Créez une déclaration de contenu associée
|
|
542
|
+
|
|
543
|
+
return (
|
|
544
|
+
<div>
|
|
545
|
+
<h2>{content.title}</h2>
|
|
546
|
+
<p>{content.content}</p>
|
|
547
|
+
</div>
|
|
548
|
+
);
|
|
549
|
+
};
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
```jsx {1} fileName="src/components/ServerComponentExample.mjx" codeFormat="esm"
|
|
553
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
554
|
+
|
|
555
|
+
const ServerComponentExample = () => {
|
|
556
|
+
const content = useIntlayer("server-component-example"); // Créez une déclaration de contenu associée
|
|
557
|
+
|
|
558
|
+
return (
|
|
559
|
+
<div>
|
|
560
|
+
<h2>{content.title}</h2>
|
|
561
|
+
<p>{content.content}</p>
|
|
562
|
+
</div>
|
|
563
|
+
);
|
|
564
|
+
};
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
```jsx {1} fileName="src/components/ServerComponentExample.csx" codeFormat="commonjs"
|
|
568
|
+
const { useIntlayer } = require("next-intlayer/server");
|
|
569
|
+
|
|
570
|
+
const ServerComponentExample = () => {
|
|
571
|
+
const content = useIntlayer("server-component-example"); // Créez une déclaration de contenu associée
|
|
572
|
+
|
|
573
|
+
return (
|
|
574
|
+
<div>
|
|
575
|
+
<h2>{content.title}</h2>
|
|
576
|
+
<p>{content.content}</p>
|
|
577
|
+
</div>
|
|
578
|
+
);
|
|
579
|
+
};
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
> Si vous souhaitez utiliser votre contenu dans un attribut `string`, tel que `alt`, `title`, `href`, `aria-label`, etc., vous devez appeler la valeur de la fonction, comme :
|
|
583
|
+
|
|
584
|
+
> ```jsx
|
|
585
|
+
>
|
|
586
|
+
> ```
|
|
587
|
+
|
|
588
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
589
|
+
|
|
590
|
+
> ```
|
|
591
|
+
>
|
|
592
|
+
> ```
|
|
593
|
+
|
|
594
|
+
> Pour en savoir plus sur le hook `useIntlayer`, consultez la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/fr/packages/next-intlayer/useIntlayer.md).
|
|
595
|
+
|
|
596
|
+
### (Optionnel) Étape 7 : Configurer le middleware pour la détection de la locale
|
|
597
|
+
|
|
598
|
+
Configurez le middleware pour détecter la locale préférée de l'utilisateur :
|
|
599
|
+
|
|
600
|
+
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
601
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
602
|
+
|
|
603
|
+
export const config = {
|
|
604
|
+
matcher:
|
|
605
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
606
|
+
};
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
610
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
611
|
+
|
|
612
|
+
export const config = {
|
|
613
|
+
matcher:
|
|
614
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
615
|
+
};
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
619
|
+
const { intlayerMiddleware } = require("next-intlayer/middleware");
|
|
620
|
+
|
|
621
|
+
const config = {
|
|
622
|
+
matcher:
|
|
623
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
624
|
+
};
|
|
625
|
+
|
|
626
|
+
module.exports = { middleware: intlayerMiddleware, config };
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
> Le `intlayerMiddleware` est utilisé pour détecter la locale préférée de l'utilisateur et le rediriger vers l'URL appropriée comme spécifié dans la [configuration](https://github.com/aymericzip/intlayer/blob/main/docs/fr/configuration.md). De plus, il permet d'enregistrer la locale préférée de l'utilisateur dans un cookie.
|
|
630
|
+
|
|
631
|
+
### (Optionnel) Étape 8 : Internationalisation de vos métadonnées
|
|
632
|
+
|
|
633
|
+
Dans le cas où vous souhaitez internationaliser vos métadonnées, comme le titre de votre page, vous pouvez utiliser la fonction `generateMetadata` fournie par Next.js. À l'intérieur de la fonction, utilisez la fonction `getTranslation` pour traduire vos métadonnées.
|
|
634
|
+
|
|
635
|
+
````typescript fileName="src/app/[locale]/layout.tsx or src/app/[locale]/page.tsx" codeFormat="typescript"
|
|
636
|
+
import {
|
|
637
|
+
type IConfigLocales,
|
|
638
|
+
getTranslation,
|
|
639
|
+
getMultilingualUrls,
|
|
640
|
+
} from "intlayer";
|
|
641
|
+
import type { Metadata } from "next";
|
|
642
|
+
import type { LocalPromiseParams } from "next-intlayer";
|
|
643
|
+
|
|
644
|
+
export const generateMetadata = async ({
|
|
645
|
+
params,
|
|
646
|
+
}: LocalPromiseParams): Promise<Metadata> => {
|
|
647
|
+
const { locale } = await params;
|
|
648
|
+
const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Génère un objet contenant toutes les URL pour chaque locale.
|
|
652
|
+
*
|
|
653
|
+
* Exemple :
|
|
654
|
+
* ```ts
|
|
655
|
+
* getMultilingualUrls('/about');
|
|
656
|
+
*
|
|
657
|
+
* // Retourne
|
|
658
|
+
* // {
|
|
659
|
+
* // en: '/about',
|
|
660
|
+
* // fr: '/fr/about',
|
|
661
|
+
* // es: '/es/about',
|
|
662
|
+
* // }
|
|
663
|
+
* ```
|
|
664
|
+
*/
|
|
665
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
666
|
+
|
|
667
|
+
return {
|
|
668
|
+
title: t<string>({
|
|
669
|
+
en: "My title",
|
|
670
|
+
fr: "Mon titre",
|
|
671
|
+
es: "Mi título",
|
|
672
|
+
}),
|
|
673
|
+
description: t({
|
|
674
|
+
en: "My description",
|
|
675
|
+
fr: "Ma description",
|
|
676
|
+
es: "Mi descripción",
|
|
677
|
+
}),
|
|
678
|
+
alternates: {
|
|
679
|
+
canonical: multilingualUrls[locale as keyof typeof multilingualUrls],
|
|
680
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
681
|
+
},
|
|
682
|
+
openGraph: {
|
|
683
|
+
url: multilingualUrls[locale],
|
|
684
|
+
},
|
|
685
|
+
};
|
|
686
|
+
};
|
|
687
|
+
|
|
688
|
+
// ... Reste du code
|
|
689
|
+
````
|
|
690
|
+
|
|
691
|
+
````javascript fileName="src/app/[locale]/layout.mjs or src/app/[locale]/page.mjs" codeFormat="esm"
|
|
692
|
+
import { getTranslation, getMultilingualUrls } from "intlayer";
|
|
693
|
+
|
|
694
|
+
export const generateMetadata = async ({ params }) => {
|
|
695
|
+
const { locale } = await params;
|
|
696
|
+
const t = (content) => getTranslation(content, locale);
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Génère un objet contenant toutes les URL pour chaque locale.
|
|
700
|
+
*
|
|
701
|
+
* Exemple :
|
|
702
|
+
* ```ts
|
|
703
|
+
* getMultilingualUrls('/about');
|
|
704
|
+
*
|
|
705
|
+
* // Retourne
|
|
706
|
+
* // {
|
|
707
|
+
* // en: '/about',
|
|
708
|
+
* // fr: '/fr/about',
|
|
709
|
+
* // es: '/es/about'
|
|
710
|
+
* // }
|
|
711
|
+
* ```
|
|
712
|
+
*/
|
|
713
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
714
|
+
|
|
715
|
+
return {
|
|
716
|
+
title: t({
|
|
717
|
+
en: "My title",
|
|
718
|
+
fr: "Mon titre",
|
|
719
|
+
es: "Mi título",
|
|
720
|
+
}),
|
|
721
|
+
description: t({
|
|
722
|
+
en: "My description",
|
|
723
|
+
fr: "Ma description",
|
|
724
|
+
es: "Mi descripción",
|
|
725
|
+
}),
|
|
726
|
+
alternates: {
|
|
727
|
+
canonical: multilingualUrls[locale],
|
|
728
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
729
|
+
},
|
|
730
|
+
openGraph: {
|
|
731
|
+
url: multilingualUrls[locale],
|
|
732
|
+
},
|
|
733
|
+
};
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
// ... Reste du code
|
|
737
|
+
````
|
|
738
|
+
|
|
739
|
+
````javascript fileName="src/app/[locale]/layout.cjs or src/app/[locale]/page.cjs" codeFormat="commonjs"
|
|
740
|
+
const { getTranslation, getMultilingualUrls } = require("intlayer");
|
|
741
|
+
|
|
742
|
+
const generateMetadata = async ({ params }) => {
|
|
743
|
+
const { locale } = await params;
|
|
744
|
+
|
|
745
|
+
const t = (content) => getTranslation(content, locale);
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* Génère un objet contenant toutes les URL pour chaque locale.
|
|
749
|
+
*
|
|
750
|
+
* Exemple :
|
|
751
|
+
* ```ts
|
|
752
|
+
* getMultilingualUrls('/about');
|
|
753
|
+
*
|
|
754
|
+
* // Retourne
|
|
755
|
+
* // {
|
|
756
|
+
* // en: '/about',
|
|
757
|
+
* // fr: '/fr/about',
|
|
758
|
+
* // es: '/es/about'
|
|
759
|
+
* // }
|
|
760
|
+
* ```
|
|
761
|
+
*/
|
|
762
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
763
|
+
|
|
764
|
+
return {
|
|
765
|
+
title: t({
|
|
766
|
+
en: "My title",
|
|
767
|
+
fr: "Mon titre",
|
|
768
|
+
es: "Mi título",
|
|
769
|
+
}),
|
|
770
|
+
description: t({
|
|
771
|
+
en: "My description",
|
|
772
|
+
fr: "Ma description",
|
|
773
|
+
es: "Mi descripción",
|
|
774
|
+
}),
|
|
775
|
+
alternates: {
|
|
776
|
+
canonical: multilingualUrls[locale],
|
|
777
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
778
|
+
},
|
|
779
|
+
openGraph: {
|
|
780
|
+
url: multilingualUrls[locale],
|
|
781
|
+
},
|
|
782
|
+
};
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
module.exports = { generateMetadata };
|
|
786
|
+
|
|
787
|
+
// ... Reste du code
|
|
788
|
+
````
|
|
789
|
+
|
|
790
|
+
> Pour en savoir plus sur l'optimisation des métadonnées [sur la documentation officielle de Next.js](https://nextjs.org/docs/app/building-your-application/optimizing/metadata).
|
|
791
|
+
|
|
792
|
+
### (Optionnel) Étape 9 : Internationalisation de votre sitemap.xml et robots.txt
|
|
793
|
+
|
|
794
|
+
Pour internationaliser votre `sitemap.xml` et `robots.txt`, vous pouvez utiliser la fonction `getMultilingualUrls` fournie par Intlayer. Cette fonction vous permet de générer des URL multilingues pour votre sitemap.
|
|
795
|
+
|
|
796
|
+
```tsx fileName="src/app/sitemap.ts" codeFormat="typescript"
|
|
797
|
+
import { getMultilingualUrls } from "intlayer";
|
|
798
|
+
import type { MetadataRoute } from "next";
|
|
799
|
+
|
|
800
|
+
const sitemap = (): MetadataRoute.Sitemap => [
|
|
801
|
+
{
|
|
802
|
+
url: "https://example.com",
|
|
803
|
+
alternates: {
|
|
804
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
805
|
+
},
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
url: "https://example.com/login",
|
|
809
|
+
alternates: {
|
|
810
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
811
|
+
},
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
url: "https://example.com/register",
|
|
815
|
+
alternates: {
|
|
816
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
817
|
+
},
|
|
818
|
+
},
|
|
819
|
+
];
|
|
820
|
+
|
|
821
|
+
export default sitemap;
|
|
822
|
+
```
|
|
823
|
+
|
|
824
|
+
```jsx fileName="src/app/sitemap.mjx" codeFormat="esm"
|
|
825
|
+
import { getMultilingualUrls } from "intlayer";
|
|
826
|
+
|
|
827
|
+
const sitemap = () => [
|
|
828
|
+
{
|
|
829
|
+
url: "https://example.com",
|
|
830
|
+
alternates: {
|
|
831
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
832
|
+
},
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
url: "https://example.com/login",
|
|
836
|
+
alternates: {
|
|
837
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
838
|
+
},
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
url: "https://example.com/register",
|
|
842
|
+
alternates: {
|
|
843
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
844
|
+
},
|
|
845
|
+
},
|
|
846
|
+
];
|
|
847
|
+
|
|
848
|
+
export default sitemap;
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
```jsx fileName="src/app/sitemap.csx" codeFormat="commonjs"
|
|
852
|
+
const { getMultilingualUrls } = require("intlayer");
|
|
853
|
+
|
|
854
|
+
const sitemap = () => [
|
|
855
|
+
{
|
|
856
|
+
url: "https://example.com",
|
|
857
|
+
alternates: {
|
|
858
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
859
|
+
},
|
|
860
|
+
},
|
|
861
|
+
{
|
|
862
|
+
url: "https://example.com/login",
|
|
863
|
+
alternates: {
|
|
864
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
865
|
+
},
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
url: "https://example.com/register",
|
|
869
|
+
alternates: {
|
|
870
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
871
|
+
},
|
|
872
|
+
},
|
|
873
|
+
];
|
|
874
|
+
|
|
875
|
+
module.exports = sitemap;
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
```tsx fileName="src/app/robots.ts" codeFormat="typescript"
|
|
879
|
+
import type { MetadataRoute } from "next";
|
|
880
|
+
import { getMultilingualUrls } from "intlayer";
|
|
881
|
+
|
|
882
|
+
const getAllMultilingualUrls = (urls: string[]) =>
|
|
883
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
|
|
884
|
+
|
|
885
|
+
const robots = (): MetadataRoute.Robots => ({
|
|
886
|
+
rules: {
|
|
887
|
+
userAgent: "*",
|
|
888
|
+
allow: ["/"],
|
|
889
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
890
|
+
},
|
|
891
|
+
host: "https://example.com",
|
|
892
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
893
|
+
});
|
|
894
|
+
|
|
895
|
+
export default robots;
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
```jsx fileName="src/app/robots.mjx" codeFormat="esm"
|
|
899
|
+
import { getMultilingualUrls } from "intlayer";
|
|
900
|
+
|
|
901
|
+
const getAllMultilingualUrls = (urls) =>
|
|
902
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
|
|
903
|
+
|
|
904
|
+
const robots = () => ({
|
|
905
|
+
rules: {
|
|
906
|
+
userAgent: "*",
|
|
907
|
+
allow: ["/"],
|
|
908
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
909
|
+
},
|
|
910
|
+
host: "https://example.com",
|
|
911
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
912
|
+
});
|
|
913
|
+
|
|
914
|
+
export default robots;
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
```jsx fileName="src/app/robots.csx" codeFormat="commonjs"
|
|
918
|
+
const { getMultilingualUrls } = require("intlayer");
|
|
919
|
+
|
|
920
|
+
const getAllMultilingualUrls = (urls) =>
|
|
921
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
|
|
922
|
+
|
|
923
|
+
const robots = () => ({
|
|
924
|
+
rules: {
|
|
925
|
+
userAgent: "*",
|
|
926
|
+
allow: ["/"],
|
|
927
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
928
|
+
},
|
|
929
|
+
host: "https://example.com",
|
|
930
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
module.exports = robots;
|
|
934
|
+
```
|
|
935
|
+
|
|
936
|
+
> Pour en savoir plus sur l'optimisation du sitemap [sur la documentation officielle de Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap). Pour en savoir plus sur l'optimisation du robots.txt [sur la documentation officielle de Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots).
|
|
937
|
+
|
|
938
|
+
### (Optionnel) Étape 10 : Changer la langue de votre contenu
|
|
939
|
+
|
|
940
|
+
Pour changer la langue de votre contenu dans Next.js, la méthode recommandée est d'utiliser le composant `Link` pour rediriger les utilisateurs vers la page localisée appropriée. Le composant `Link` permet le préchargement de la page, ce qui aide à éviter un rechargement complet de la page.
|
|
941
|
+
|
|
942
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
943
|
+
"use client";
|
|
944
|
+
|
|
945
|
+
import type { FC } from "react";
|
|
946
|
+
import {
|
|
947
|
+
Locales,
|
|
948
|
+
getHTMLTextDir,
|
|
949
|
+
getLocaleName,
|
|
950
|
+
getLocalizedUrl,
|
|
951
|
+
} from "intlayer";
|
|
952
|
+
import { useLocale } from "next-intlayer";
|
|
953
|
+
import Link from "next/link";
|
|
954
|
+
|
|
955
|
+
export const LocaleSwitcher: FC = () => {
|
|
956
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
957
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
958
|
+
|
|
959
|
+
return (
|
|
960
|
+
<div>
|
|
961
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
962
|
+
<div id="localePopover" popover="auto">
|
|
963
|
+
{availableLocales.map((localeItem) => (
|
|
964
|
+
<Link
|
|
965
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
966
|
+
hrefLang={localeItem}
|
|
967
|
+
key={localeItem}
|
|
968
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
969
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
970
|
+
>
|
|
971
|
+
<span>
|
|
972
|
+
{/* Locale - e.g. FR */}
|
|
973
|
+
{localeItem}
|
|
974
|
+
</span>
|
|
975
|
+
<span>
|
|
976
|
+
{/* Langue dans sa propre Locale - e.g. Français */}
|
|
977
|
+
{getLocaleName(localeItem, locale)}
|
|
978
|
+
</span>
|
|
979
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
980
|
+
{/* Langue dans la Locale actuelle - e.g. Francés avec la locale actuelle définie sur Locales.SPANISH */}
|
|
981
|
+
{getLocaleName(localeItem)}
|
|
982
|
+
</span>
|
|
983
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
984
|
+
{/* Langue en anglais - e.g. French */}
|
|
985
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
986
|
+
</span>
|
|
987
|
+
</Link>
|
|
988
|
+
))}
|
|
989
|
+
</div>
|
|
990
|
+
</div>
|
|
991
|
+
);
|
|
992
|
+
};
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
996
|
+
"use client";
|
|
997
|
+
|
|
998
|
+
import {
|
|
999
|
+
Locales,
|
|
1000
|
+
getHTMLTextDir,
|
|
1001
|
+
getLocaleName,
|
|
1002
|
+
getLocalizedUrl,
|
|
1003
|
+
} from "intlayer";
|
|
1004
|
+
import { useLocale } from "next-intlayer";
|
|
1005
|
+
import Link from "next/link";
|
|
1006
|
+
|
|
1007
|
+
export const LocaleSwitcher = () => {
|
|
1008
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
1009
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
1010
|
+
|
|
1011
|
+
return (
|
|
1012
|
+
<div>
|
|
1013
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
1014
|
+
<div id="localePopover" popover="auto">
|
|
1015
|
+
{availableLocales.map((localeItem) => (
|
|
1016
|
+
<Link
|
|
1017
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
1018
|
+
hrefLang={localeItem}
|
|
1019
|
+
key={localeItem}
|
|
1020
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
1021
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
1022
|
+
>
|
|
1023
|
+
<span>
|
|
1024
|
+
{/* Locale - e.g. FR */}
|
|
1025
|
+
{localeItem}
|
|
1026
|
+
</span>
|
|
1027
|
+
<span>
|
|
1028
|
+
{/* Langue dans sa propre Locale - e.g. Français */}
|
|
1029
|
+
{getLocaleName(localeItem, locale)}
|
|
1030
|
+
</span>
|
|
1031
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1032
|
+
{/* Langue dans la Locale actuelle - e.g. Francés avec la locale actuelle définie sur Locales.SPANISH */}
|
|
1033
|
+
{getLocaleName(localeItem)}
|
|
1034
|
+
</span>
|
|
1035
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1036
|
+
{/* Langue en anglais - e.g. French */}
|
|
1037
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1038
|
+
</span>
|
|
1039
|
+
</Link>
|
|
1040
|
+
))}
|
|
1041
|
+
</div>
|
|
1042
|
+
</div>
|
|
1043
|
+
);
|
|
1044
|
+
};
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
1048
|
+
"use client";
|
|
1049
|
+
|
|
1050
|
+
const {
|
|
1051
|
+
Locales,
|
|
1052
|
+
getHTMLTextDir,
|
|
1053
|
+
getLocaleName,
|
|
1054
|
+
getLocalizedUrl,
|
|
1055
|
+
} = require("intlayer");
|
|
1056
|
+
const { useLocale } = require("next-intlayer");
|
|
1057
|
+
const Link = require("next/link");
|
|
1058
|
+
|
|
1059
|
+
export const LocaleSwitcher = () => {
|
|
1060
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
1061
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
1062
|
+
|
|
1063
|
+
return (
|
|
1064
|
+
<div>
|
|
1065
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
1066
|
+
<div id="localePopover" popover="auto">
|
|
1067
|
+
{availableLocales.map((localeItem) => (
|
|
1068
|
+
<Link
|
|
1069
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
1070
|
+
hrefLang={localeItem}
|
|
1071
|
+
key={localeItem}
|
|
1072
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
1073
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
1074
|
+
>
|
|
1075
|
+
<span>
|
|
1076
|
+
{/* Locale - e.g. FR */}
|
|
1077
|
+
{localeItem}
|
|
1078
|
+
</span>
|
|
1079
|
+
<span>
|
|
1080
|
+
{/* Langue dans sa propre Locale - e.g. Français */}
|
|
1081
|
+
{getLocaleName(localeItem, locale)}
|
|
1082
|
+
</span>
|
|
1083
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1084
|
+
{/* Langue dans la Locale actuelle - e.g. Francés avec la locale actuelle définie sur Locales.SPANISH */}
|
|
1085
|
+
{getLocaleName(localeItem)}
|
|
1086
|
+
</span>
|
|
1087
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1088
|
+
{/* Langue en anglais - e.g. French */}
|
|
1089
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1090
|
+
</span>
|
|
1091
|
+
</Link>
|
|
1092
|
+
))}
|
|
1093
|
+
</div>
|
|
1094
|
+
</div>
|
|
1095
|
+
);
|
|
1096
|
+
};
|
|
1097
|
+
```
|
|
1098
|
+
|
|
1099
|
+
> Références de documentation :
|
|
1100
|
+
|
|
1101
|
+
> - [Hook `useLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/fr/packages/next-intlayer/useLocale.md)
|
|
1102
|
+
|
|
1103
|
+
> - [Hook `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/fr/packages/intlayer/getLocaleName.md)
|
|
1104
|
+
|
|
1105
|
+
> - [Hook `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/fr/packages/intlayer/getLocalizedUrl.md)
|
|
1106
|
+
|
|
1107
|
+
> - [Hook `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/fr/packages/intlayer/getHTMLTextDir.md)
|
|
1108
|
+
|
|
1109
|
+
> - [Attribut `hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
1110
|
+
|
|
1111
|
+
> - [Attribut `lang`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/lang)
|
|
1112
|
+
|
|
1113
|
+
> - [Attribut `dir`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/dir)
|
|
1114
|
+
|
|
1115
|
+
> - [Attribut `aria-current`](https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
1116
|
+
|
|
1117
|
+
### (Optionnel) Étape 11 : Création d'un composant de lien localisé
|
|
1118
|
+
|
|
1119
|
+
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 actuelle, de sorte que, par exemple, lorsqu'un utilisateur francophone clique sur un lien vers la page "À propos", il est redirigé vers `/fr/about` au lieu de `/about`.
|
|
1120
|
+
|
|
1121
|
+
Ce comportement est utile pour plusieurs raisons :
|
|
1122
|
+
|
|
1123
|
+
- **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 un contenu dans leur langue préférée.
|
|
1124
|
+
- **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.
|
|
1125
|
+
- **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 se développe.
|
|
1126
|
+
|
|
1127
|
+
Voici l'implémentation d'un composant `Link` localisé en TypeScript :
|
|
1128
|
+
|
|
1129
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
1130
|
+
"use client";
|
|
1131
|
+
|
|
1132
|
+
import { getLocalizedUrl } from "intlayer";
|
|
1133
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
1134
|
+
import { useLocale } from "next-intlayer";
|
|
1135
|
+
import type { PropsWithChildren, FC } from "react";
|
|
1136
|
+
|
|
1137
|
+
/**
|
|
1138
|
+
* Fonction utilitaire pour vérifier si une URL donnée est externe.
|
|
1139
|
+
* Si l'URL commence par http:// ou https://, elle est considérée comme externe.
|
|
1140
|
+
*/
|
|
1141
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
1142
|
+
/^https?:\/\//.test(href ?? "");
|
|
1143
|
+
|
|
1144
|
+
/**
|
|
1145
|
+
* Un composant Link personnalisé qui adapte l'attribut href en fonction de la locale actuelle.
|
|
1146
|
+
* Pour les liens internes, il utilise `getLocalizedUrl` pour préfixer l'URL avec la locale (par exemple, /fr/about).
|
|
1147
|
+
* Cela garantit que la navigation reste dans le même contexte de locale.
|
|
1148
|
+
*/
|
|
1149
|
+
export const Link: FC<PropsWithChildren<NextLinkProps>> = ({
|
|
1150
|
+
href,
|
|
1151
|
+
children,
|
|
1152
|
+
...props
|
|
1153
|
+
}) => {
|
|
1154
|
+
const { locale } = useLocale();
|
|
1155
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1156
|
+
|
|
1157
|
+
// Si le lien est interne et qu'un href valide est fourni, obtenez l'URL localisée.
|
|
1158
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
1159
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1160
|
+
|
|
1161
|
+
return (
|
|
1162
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1163
|
+
{children}
|
|
1164
|
+
</NextLink>
|
|
1165
|
+
);
|
|
1166
|
+
};
|
|
1167
|
+
```
|
|
1168
|
+
|
|
1169
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
1170
|
+
"use client";
|
|
1171
|
+
|
|
1172
|
+
import { getLocalizedUrl } from "intlayer";
|
|
1173
|
+
import NextLink from "next/link";
|
|
1174
|
+
import { useLocale } from "next-intlayer";
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* Fonction utilitaire pour vérifier si une URL donnée est externe.
|
|
1178
|
+
* Si l'URL commence par http:// ou https://, elle est considérée comme externe.
|
|
1179
|
+
*/
|
|
1180
|
+
export const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1181
|
+
|
|
1182
|
+
/**
|
|
1183
|
+
* Un composant Link personnalisé qui adapte l'attribut href en fonction de la locale actuelle.
|
|
1184
|
+
* Pour les liens internes, il utilise `getLocalizedUrl` pour préfixer l'URL avec la locale (par exemple, /fr/about).
|
|
1185
|
+
* Cela garantit que la navigation reste dans le même contexte de locale.
|
|
1186
|
+
*/
|
|
1187
|
+
export const Link = ({ href, children, ...props }) => {
|
|
1188
|
+
const { locale } = useLocale();
|
|
1189
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1190
|
+
|
|
1191
|
+
// Si le lien est interne et qu'un href valide est fourni, obtenez l'URL localisée.
|
|
1192
|
+
const hrefI18n =
|
|
1193
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1194
|
+
|
|
1195
|
+
return (
|
|
1196
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1197
|
+
{children}
|
|
1198
|
+
</NextLink>
|
|
1199
|
+
);
|
|
1200
|
+
};
|
|
1201
|
+
```
|
|
1202
|
+
|
|
1203
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
1204
|
+
"use client";
|
|
1205
|
+
|
|
1206
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
1207
|
+
const NextLink = require("next/link");
|
|
1208
|
+
const { useLocale } = require("next-intlayer");
|
|
1209
|
+
|
|
1210
|
+
/**
|
|
1211
|
+
* Fonction utilitaire pour vérifier si une URL donnée est externe.
|
|
1212
|
+
* Si l'URL commence par http:// ou https://, elle est considérée comme externe.
|
|
1213
|
+
*/
|
|
1214
|
+
const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1215
|
+
|
|
1216
|
+
/**
|
|
1217
|
+
* Un composant Link personnalisé qui adapte l'attribut href en fonction de la locale actuelle.
|
|
1218
|
+
* Pour les liens internes, il utilise `getLocalizedUrl` pour préfixer l'URL avec la locale (par exemple, /fr/about).
|
|
1219
|
+
* Cela garantit que la navigation reste dans le même contexte de locale.
|
|
1220
|
+
*/
|
|
1221
|
+
const Link = ({ href, children, ...props }) => {
|
|
1222
|
+
const { locale } = useLocale();
|
|
1223
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1224
|
+
|
|
1225
|
+
// Si le lien est interne et qu'un href valide est fourni, obtenez l'URL localisée.
|
|
1226
|
+
const hrefI18n =
|
|
1227
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1228
|
+
|
|
1229
|
+
return (
|
|
1230
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1231
|
+
{children}
|
|
1232
|
+
</NextLink>
|
|
1233
|
+
);
|
|
1234
|
+
};
|
|
1235
|
+
```
|
|
1236
|
+
|
|
1237
|
+
#### Comment cela fonctionne
|
|
1238
|
+
|
|
1239
|
+
- **Détection des liens externes** :
|
|
1240
|
+
La fonction utilitaire `checkIsExternalLink` détermine si une URL est externe. Les liens externes restent inchangés car ils n'ont pas besoin de localisation.
|
|
1241
|
+
|
|
1242
|
+
- **Récupération de la locale actuelle** :
|
|
1243
|
+
Le hook `useLocale` fournit la locale actuelle (par exemple, `fr` pour le français).
|
|
1244
|
+
|
|
1245
|
+
- **Localisation de l'URL** :
|
|
1246
|
+
Pour les liens internes (c'est-à-dire non externes), `getLocalizedUrl` est utilisé pour préfixer automatiquement l'URL avec la locale actuelle. Cela signifie que si votre utilisateur est en français, passer `/about` comme `href` le transformera en `/fr/about`.
|
|
1247
|
+
|
|
1248
|
+
- **Retour du lien** :
|
|
1249
|
+
Le composant retourne un élément `<a>` avec l'URL localisée, garantissant que la navigation est cohérente avec la locale.
|
|
1250
|
+
|
|
1251
|
+
En intégrant ce composant `Link` dans toute votre application, vous maintenez une expérience utilisateur cohérente et respectueuse de la langue tout en bénéficiant d'un SEO et d'une convivialité améliorés.
|
|
1252
|
+
|
|
1253
|
+
### (Optionnel) Étape 12 : Optimisez la taille de votre bundle
|
|
1254
|
+
|
|
1255
|
+
Lorsque vous utilisez `next-intlayer`, les dictionnaires sont inclus dans le bundle de chaque page par défaut. Pour optimiser la taille de votre bundle, Intlayer propose un plugin SWC optionnel qui remplace intelligemment les appels à `useIntlayer` à l'aide de macros. Cela garantit que les dictionnaires ne sont inclus que dans les bundles des pages qui les utilisent réellement.
|
|
1256
|
+
|
|
1257
|
+
Pour activer cette optimisation, installez le package `@intlayer/swc`. Une fois installé, `next-intlayer` le détectera et l'utilisera automatiquement :
|
|
1258
|
+
|
|
1259
|
+
```bash packageManager="npm"
|
|
1260
|
+
npm install @intlayer/swc --save-dev
|
|
1261
|
+
```
|
|
1262
|
+
|
|
1263
|
+
```bash packageManager="pnpm"
|
|
1264
|
+
pnpm add @intlayer/swc --save-dev
|
|
1265
|
+
```
|
|
1266
|
+
|
|
1267
|
+
```bash packageManager="yarn"
|
|
1268
|
+
yarn add @intlayer/swc --save-dev
|
|
1269
|
+
```
|
|
1270
|
+
|
|
1271
|
+
> Note: Cette optimisation n'est disponible que pour Next.js 13 et supérieur.
|
|
1272
|
+
|
|
1273
|
+
> Note: Ce paquet n'est pas installé par défaut car les plugins SWC sont encore expérimentaux sur Next.js. Cela peut changer dans le futur.
|
|
1274
|
+
|
|
1275
|
+
### Configurer TypeScript
|
|
1276
|
+
|
|
1277
|
+
Intlayer utilise l'augmentation de module pour bénéficier de TypeScript et renforcer votre base de code.
|
|
1278
|
+
|
|
1279
|
+

|
|
1280
|
+
|
|
1281
|
+

|
|
1282
|
+
|
|
1283
|
+
Assurez-vous que votre configuration TypeScript inclut les types générés automatiquement.
|
|
1284
|
+
|
|
1285
|
+
```json5 fileName="tsconfig.json"
|
|
1286
|
+
{
|
|
1287
|
+
// ... Vos configurations TypeScript existantes
|
|
1288
|
+
"include": [
|
|
1289
|
+
// ... Vos configurations TypeScript existantes
|
|
1290
|
+
".intlayer/**/*.ts", // Inclure les types générés automatiquement
|
|
1291
|
+
],
|
|
1292
|
+
}
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
### Configuration Git
|
|
1296
|
+
|
|
1297
|
+
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les ajouter à votre dépôt Git.
|
|
1298
|
+
|
|
1299
|
+
Pour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier `.gitignore` :
|
|
1300
|
+
|
|
1301
|
+
```plaintext fileName=".gitignore"
|
|
1302
|
+
# Ignorer les fichiers générés par Intlayer
|
|
1303
|
+
.intlayer
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
### Aller plus loin
|
|
1307
|
+
|
|
1308
|
+
Pour aller plus loin, vous pouvez implémenter l'[éditeur visuel](https://github.com/aymericzip/intlayer/blob/main/docs/fr/intlayer_visual_editor.md) ou externaliser votre contenu en utilisant le [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/fr/intlayer_CMS.md).
|