@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,1088 @@
|
|
|
1
|
+
# Comenzando con la Internacionalización (i18n) con Intlayer y Next.js usando Page Router
|
|
2
|
+
|
|
3
|
+
## ¿Qué es Intlayer?
|
|
4
|
+
|
|
5
|
+
**Intlayer** es una biblioteca innovadora y de código abierto para la internacionalización (i18n) diseñada para simplificar el soporte multilingüe en aplicaciones web modernas. Intlayer se integra perfectamente con el último framework **Next.js**, incluyendo su tradicional **Page Router**.
|
|
6
|
+
|
|
7
|
+
Con Intlayer, puedes:
|
|
8
|
+
|
|
9
|
+
- **Gestionar fácilmente las traducciones** utilizando diccionarios declarativos a nivel de componente.
|
|
10
|
+
- **Localizar dinámicamente metadatos**, rutas y contenido.
|
|
11
|
+
- **Garantizar soporte para TypeScript** con tipos autogenerados, mejorando la autocompletación y la detección de errores.
|
|
12
|
+
- **Beneficiarte de características avanzadas**, como la detección y cambio dinámico de locales.
|
|
13
|
+
|
|
14
|
+
> Intlayer es compatible con Next.js 12, 13, 14 y 15. Si estás utilizando Next.js App Router, consulta la [guía de App Router](https://github.com/aymericzip/intlayer/blob/main/docs/es/intlayer_with_nextjs_14.md). Para Next.js 15, sigue esta [guía](https://github.com/aymericzip/intlayer/blob/main/docs/es/intlayer_with_nextjs_15.md).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Guía Paso a Paso para Configurar Intlayer en una Aplicación Next.js Usando Page Router
|
|
19
|
+
|
|
20
|
+
### Paso 1: Instalar Dependencias
|
|
21
|
+
|
|
22
|
+
Instala los paquetes necesarios utilizando tu gestor de paquetes preferido:
|
|
23
|
+
|
|
24
|
+
```bash packageManager="npm"
|
|
25
|
+
npm install intlayer next-intlayer
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```bash packageManager="pnpm"
|
|
29
|
+
pnpm add intlayer next-intlayer
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```bash packageManager="yarn"
|
|
33
|
+
yarn add intlayer next-intlayer
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- **intlayer**
|
|
37
|
+
|
|
38
|
+
El paquete principal que proporciona herramientas de internacionalización para la gestión de configuraciones, traducciones, [declaración de contenido](https://github.com/aymericzip/intlayer/blob/main/docs/es/dictionary/get_started.md), transpilación y [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/es/intlayer_cli.md).
|
|
39
|
+
|
|
40
|
+
- **next-intlayer**
|
|
41
|
+
|
|
42
|
+
El paquete que integra Intlayer con Next.js. Proporciona proveedores de contexto y hooks para la internacionalización en Next.js. Además, incluye el plugin de Next.js para integrar Intlayer con [Webpack](https://webpack.js.org/) o [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), así como middleware para detectar el idioma preferido del usuario, gestionar cookies y manejar redirecciones de URL.
|
|
43
|
+
|
|
44
|
+
### Paso 2: Configurar Tu Proyecto
|
|
45
|
+
|
|
46
|
+
Crea un archivo de configuración para definir los idiomas soportados por tu aplicación:
|
|
47
|
+
|
|
48
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
49
|
+
// Configuración de idiomas soportados
|
|
50
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
51
|
+
|
|
52
|
+
const config: IntlayerConfig = {
|
|
53
|
+
internationalization: {
|
|
54
|
+
locales: [
|
|
55
|
+
Locales.ENGLISH,
|
|
56
|
+
Locales.FRENCH,
|
|
57
|
+
Locales.SPANISH,
|
|
58
|
+
// Agrega tus otros locales aquí
|
|
59
|
+
],
|
|
60
|
+
defaultLocale: Locales.ENGLISH,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export default config;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
68
|
+
// Configuración de idiomas soportados
|
|
69
|
+
import { Locales } from "intlayer";
|
|
70
|
+
|
|
71
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
72
|
+
const config = {
|
|
73
|
+
internationalization: {
|
|
74
|
+
locales: [
|
|
75
|
+
Locales.ENGLISH,
|
|
76
|
+
Locales.FRENCH,
|
|
77
|
+
Locales.SPANISH,
|
|
78
|
+
// Agrega tus otros locales aquí
|
|
79
|
+
],
|
|
80
|
+
defaultLocale: Locales.ENGLISH,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default config;
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
88
|
+
// Configuración de idiomas soportados
|
|
89
|
+
const { Locales } = require("intlayer");
|
|
90
|
+
|
|
91
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
92
|
+
const config = {
|
|
93
|
+
internationalization: {
|
|
94
|
+
locales: [
|
|
95
|
+
Locales.ENGLISH,
|
|
96
|
+
Locales.FRENCH,
|
|
97
|
+
Locales.SPANISH,
|
|
98
|
+
// Agrega tus otros locales aquí
|
|
99
|
+
],
|
|
100
|
+
defaultLocale: Locales.ENGLISH,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
module.exports = config;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
> A través de este archivo de configuración, puedes configurar URLs localizadas, redirección de middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido, desactivar los logs de Intlayer en la consola, y más. Para una lista completa de parámetros disponibles, consulta la [documentación de configuración](https://github.com/aymericzip/intlayer/blob/main/docs/es/configuration.md).
|
|
108
|
+
|
|
109
|
+
### Paso 3: Integrar Intlayer con la Configuración de Next.js
|
|
110
|
+
|
|
111
|
+
Modifica tu configuración de Next.js para incorporar Intlayer:
|
|
112
|
+
|
|
113
|
+
```typescript fileName="next.config.mjs"
|
|
114
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
115
|
+
|
|
116
|
+
/** @type {import('next').NextConfig} */
|
|
117
|
+
const nextConfig = {
|
|
118
|
+
// Tu configuración existente de Next.js
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default withIntlayer(nextConfig);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
> El plugin `withIntlayer()` de Next.js se utiliza para integrar Intlayer con Next.js. Garantiza la construcción de archivos de declaración de contenido y los monitorea en modo de desarrollo. Define variables de entorno de Intlayer dentro de los entornos de [Webpack](https://webpack.js.org/) o [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). Además, proporciona alias para optimizar el rendimiento y garantizar la compatibilidad con componentes del servidor.
|
|
125
|
+
|
|
126
|
+
### Paso 4: Configurar Middleware para la Detección de Locales
|
|
127
|
+
|
|
128
|
+
Configura middleware para detectar y manejar automáticamente el idioma preferido del usuario:
|
|
129
|
+
|
|
130
|
+
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
131
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
132
|
+
|
|
133
|
+
export const config = {
|
|
134
|
+
matcher:
|
|
135
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
136
|
+
};
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
140
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
141
|
+
|
|
142
|
+
export const config = {
|
|
143
|
+
matcher:
|
|
144
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
149
|
+
const { intlayerMiddleware } = require("next-intlayer/middleware");
|
|
150
|
+
|
|
151
|
+
const config = {
|
|
152
|
+
matcher:
|
|
153
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
module.exports = { middleware: intlayerMiddleware, config };
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
> Adapta el parámetro `matcher` para que coincida con las rutas de tu aplicación. Para más detalles, consulta la [documentación de Next.js sobre la configuración del matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
|
|
160
|
+
|
|
161
|
+
### Paso 5: Definir Rutas Dinámicas de Locales
|
|
162
|
+
|
|
163
|
+
Implementa enrutamiento dinámico para servir contenido localizado basado en el idioma del usuario.
|
|
164
|
+
|
|
165
|
+
1. **Crear Páginas Específicas por Idioma:**
|
|
166
|
+
|
|
167
|
+
Renombra tu archivo de página principal para incluir el segmento dinámico `[locale]`.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
mv src/pages/index.tsx src/pages/[locale]/index.tsx
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
2. **Actualizar `_app.tsx` para Manejar la Localización:**
|
|
174
|
+
|
|
175
|
+
Modifica tu `_app.tsx` para incluir proveedores de Intlayer.
|
|
176
|
+
|
|
177
|
+
```tsx fileName="src/pages/_app.tsx" codeFormat="typescript"
|
|
178
|
+
import type { FC } from "react";
|
|
179
|
+
import type { AppProps } from "next/app";
|
|
180
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
181
|
+
|
|
182
|
+
const App = FC<AppProps>({ Component, pageProps }) => {
|
|
183
|
+
const { locale } = pageProps;
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<IntlayerClientProvider locale={locale}>
|
|
187
|
+
<Component {...pageProps} />
|
|
188
|
+
</IntlayerClientProvider>
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export default MyApp;
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```jsx fileName="src/pages/_app.mjx" codeFormat="esm"
|
|
196
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
197
|
+
|
|
198
|
+
const App = ({ Component, pageProps }) => (
|
|
199
|
+
<IntlayerClientProvider locale={locale}>
|
|
200
|
+
<Component {...pageProps} />
|
|
201
|
+
</IntlayerClientProvider>
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
export default App;
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
```jsx fileName="src/pages/_app.csx" codeFormat="commonjs"
|
|
208
|
+
const { IntlayerClientProvider } = require("next-intlayer");
|
|
209
|
+
|
|
210
|
+
const App = ({ Component, pageProps }) => (
|
|
211
|
+
<IntlayerClientProvider locale={locale}>
|
|
212
|
+
<Component {...pageProps} />
|
|
213
|
+
</IntlayerClientProvider>
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
module.exports = App;
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
3. **Configurar `getStaticPaths` y `getStaticProps`:**
|
|
220
|
+
|
|
221
|
+
En tu `[locale]/index.tsx`, define las rutas y propiedades para manejar diferentes idiomas.
|
|
222
|
+
|
|
223
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
224
|
+
import type { FC } from "react";
|
|
225
|
+
import type { GetStaticPaths, GetStaticProps } from "next";
|
|
226
|
+
import { type Locales, getConfiguration } from "intlayer";
|
|
227
|
+
|
|
228
|
+
const HomePage: FC = () => <div>{/* Tu contenido aquí */}</div>;
|
|
229
|
+
|
|
230
|
+
export const getStaticPaths: GetStaticPaths = () => {
|
|
231
|
+
const { internationalization } = getConfiguration();
|
|
232
|
+
const { locales } = internationalization;
|
|
233
|
+
|
|
234
|
+
const paths = locales.map((locale) => ({
|
|
235
|
+
params: { locale },
|
|
236
|
+
}));
|
|
237
|
+
|
|
238
|
+
return { paths, fallback: false };
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
export const getStaticProps: GetStaticProps = ({ params }) => {
|
|
242
|
+
const locale = params?.locale as string;
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
props: {
|
|
246
|
+
locale,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export default HomePage;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
255
|
+
import { getConfiguration } from "intlayer";
|
|
256
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
257
|
+
|
|
258
|
+
const HomePage = () => <div>{/* Tu contenido aquí */}</div>;
|
|
259
|
+
|
|
260
|
+
export const getStaticPaths = () => {
|
|
261
|
+
const { internationalization } = getConfiguration();
|
|
262
|
+
const { locales } = internationalization;
|
|
263
|
+
|
|
264
|
+
const paths = locales.map((locale) => ({
|
|
265
|
+
params: { locale },
|
|
266
|
+
}));
|
|
267
|
+
|
|
268
|
+
return { paths, fallback: false };
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
export const getStaticProps = ({ params }) => {
|
|
272
|
+
const locale = params?.locale;
|
|
273
|
+
|
|
274
|
+
return {
|
|
275
|
+
props: {
|
|
276
|
+
locale,
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
283
|
+
const { getConfiguration } = require("intlayer");
|
|
284
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
285
|
+
|
|
286
|
+
const HomePage = () => <div>{/* Tu contenido aquí */}</div>;
|
|
287
|
+
|
|
288
|
+
const getStaticPaths = async () => {
|
|
289
|
+
const { internationalization } = getConfiguration();
|
|
290
|
+
const { locales } = internationalization;
|
|
291
|
+
|
|
292
|
+
const paths = locales.map((locale) => ({
|
|
293
|
+
params: { locale },
|
|
294
|
+
}));
|
|
295
|
+
|
|
296
|
+
return { paths, fallback: false };
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
const getStaticProps = async ({ params }) => {
|
|
300
|
+
const locale = params?.locale;
|
|
301
|
+
|
|
302
|
+
return {
|
|
303
|
+
props: {
|
|
304
|
+
locale,
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
module.exports = {
|
|
310
|
+
getStaticProps,
|
|
311
|
+
getStaticPaths,
|
|
312
|
+
default: HomePage,
|
|
313
|
+
};
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
> `getStaticPaths` y `getStaticProps` aseguran que tu aplicación preconstruya las páginas necesarias para todos los idiomas en el Page Router de Next.js. Este enfoque reduce el cálculo en tiempo de ejecución y mejora la experiencia del usuario. Para más detalles, consulta la documentación de Next.js sobre [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) y [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props).
|
|
317
|
+
|
|
318
|
+
### Paso 6: Declarar Tu Contenido
|
|
319
|
+
|
|
320
|
+
Crea y gestiona tus declaraciones de contenido para almacenar traducciones.
|
|
321
|
+
|
|
322
|
+
```tsx fileName="src/pages/[locale]/home.content.ts" contentDeclarationFormat="typescript"
|
|
323
|
+
import { t, type Dictionary } from "intlayer";
|
|
324
|
+
|
|
325
|
+
const homeContent = {
|
|
326
|
+
key: "home",
|
|
327
|
+
content: {
|
|
328
|
+
title: t({
|
|
329
|
+
en: "Welcome to My Website",
|
|
330
|
+
fr: "Bienvenue sur mon site Web",
|
|
331
|
+
es: "Bienvenido a mi sitio web",
|
|
332
|
+
}),
|
|
333
|
+
description: t({
|
|
334
|
+
en: "Get started by editing this page.",
|
|
335
|
+
fr: "Commencez par éditer cette page.",
|
|
336
|
+
es: "Comience por editar esta página.",
|
|
337
|
+
}),
|
|
338
|
+
},
|
|
339
|
+
} satisfies Dictionary;
|
|
340
|
+
|
|
341
|
+
export default homeContent;
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
```javascript fileName="src/pages/[locale]/home.content.mjs" contentDeclarationFormat="esm"
|
|
345
|
+
import { t } from "intlayer";
|
|
346
|
+
|
|
347
|
+
/** @type {import('intlayer').Dictionary} */
|
|
348
|
+
const homeContent = {
|
|
349
|
+
key: "home",
|
|
350
|
+
content: {
|
|
351
|
+
getStarted: {
|
|
352
|
+
main: t({
|
|
353
|
+
en: "Get started by editing this page.",
|
|
354
|
+
fr: "Commencez par éditer cette page.",
|
|
355
|
+
es: "Comience por editar esta página.",
|
|
356
|
+
}),
|
|
357
|
+
pageLink: "src/app/page.tsx",
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
export default homeContent;
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
```javascript fileName="src/pages/[locale]/home.content.cjs" contentDeclarationFormat="commonjs"
|
|
366
|
+
const { t } = require("intlayer");
|
|
367
|
+
|
|
368
|
+
/** @type {import('intlayer').Dictionary} */
|
|
369
|
+
const homeContent = {
|
|
370
|
+
key: "home",
|
|
371
|
+
content: {
|
|
372
|
+
getStarted: {
|
|
373
|
+
main: t({
|
|
374
|
+
en: "Get started by editing this page.",
|
|
375
|
+
fr: "Commencez par éditer cette page.",
|
|
376
|
+
es: "Comience por editar esta página.",
|
|
377
|
+
}),
|
|
378
|
+
pageLink: "src/app/page.tsx",
|
|
379
|
+
},
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
module.exports = homeContent;
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
```json fileName="src/pages/[locale]/home.content.json" contentDeclarationFormat="json"
|
|
387
|
+
{
|
|
388
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
389
|
+
"key": "home",
|
|
390
|
+
"content": {
|
|
391
|
+
"getStarted": {
|
|
392
|
+
"nodeType": "translation",
|
|
393
|
+
"translation": {
|
|
394
|
+
"en": "Get started by editing this page.",
|
|
395
|
+
"fr": "Commencez par éditer cette page.",
|
|
396
|
+
"es": "Comience por editar esta página."
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"pageLink": {
|
|
400
|
+
"nodeType": "translation",
|
|
401
|
+
"translation": {
|
|
402
|
+
"en": "src/app/page.tsx",
|
|
403
|
+
"fr": "src/app/page.tsx",
|
|
404
|
+
"es": "src/app/page.tsx"
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
Para más información sobre cómo declarar contenido, consulta la [guía de declaración de contenido](https://github.com/aymericzip/intlayer/blob/main/docs/es/dictionary/get_started.md).
|
|
412
|
+
|
|
413
|
+
### Paso 7: Utilizar Contenido en Tu Código
|
|
414
|
+
|
|
415
|
+
Accede a tus diccionarios de contenido en toda tu aplicación para mostrar contenido traducido.
|
|
416
|
+
|
|
417
|
+
```tsx {2,6} fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
418
|
+
import type { FC } from "react";
|
|
419
|
+
import { useIntlayer } from "next-intlayer";
|
|
420
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
421
|
+
|
|
422
|
+
const HomePage: FC = () => {
|
|
423
|
+
const content = useIntlayer("home");
|
|
424
|
+
|
|
425
|
+
return (
|
|
426
|
+
<div>
|
|
427
|
+
<h1>{content.title}</h1>
|
|
428
|
+
<p>{content.description}</p>
|
|
429
|
+
<ComponentExample />
|
|
430
|
+
{/* Componentes adicionales */}
|
|
431
|
+
</div>
|
|
432
|
+
);
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
// ... Resto del código, incluyendo getStaticPaths y getStaticProps
|
|
436
|
+
|
|
437
|
+
export default HomePage;
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
441
|
+
import { useIntlayer } from "next-intlayer";
|
|
442
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
443
|
+
|
|
444
|
+
const HomePage = () => {
|
|
445
|
+
const content = useIntlayer("home");
|
|
446
|
+
|
|
447
|
+
return (
|
|
448
|
+
<div>
|
|
449
|
+
<h1>{content.getStarted.main}</h1>
|
|
450
|
+
<code>{content.getStarted.pageLink}</code>
|
|
451
|
+
|
|
452
|
+
<ComponentExample />
|
|
453
|
+
{/* Componentes adicionales */}
|
|
454
|
+
</div>
|
|
455
|
+
);
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
// ... Resto del código, incluyendo getStaticPaths y getStaticProps
|
|
459
|
+
|
|
460
|
+
export default HomePage;
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
464
|
+
const { useIntlayer } = require("next-intlayer");
|
|
465
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
466
|
+
|
|
467
|
+
const HomePage = () => {
|
|
468
|
+
const content = useIntlayer("home");
|
|
469
|
+
|
|
470
|
+
return (
|
|
471
|
+
<div>
|
|
472
|
+
<h1>{content.getStarted.main}</h1>
|
|
473
|
+
<code>{content.getStarted.pageLink}</code>
|
|
474
|
+
|
|
475
|
+
<ComponentExample />
|
|
476
|
+
{/* Componentes adicionales */}
|
|
477
|
+
</div>
|
|
478
|
+
);
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
// ... Resto del código, incluyendo getStaticPaths y getStaticProps
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
485
|
+
import type { FC } from "react";
|
|
486
|
+
import { useIntlayer } from "next-intlayer";
|
|
487
|
+
|
|
488
|
+
export const ComponentExample: FC = () => {
|
|
489
|
+
const content = useIntlayer("component-example"); // Asegúrate de tener una declaración de contenido correspondiente
|
|
490
|
+
|
|
491
|
+
return (
|
|
492
|
+
<div>
|
|
493
|
+
<h2>{content.title}</h2>
|
|
494
|
+
<p>{content.content}</p>
|
|
495
|
+
</div>
|
|
496
|
+
);
|
|
497
|
+
};
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
```jsx fileName="src/components/ComponentExample.mjx" codeFormat="esm"
|
|
501
|
+
import { useIntlayer } from "next-intlayer";
|
|
502
|
+
|
|
503
|
+
const ComponentExample = () => {
|
|
504
|
+
const content = useIntlayer("component-example"); // Asegúrate de tener una declaración de contenido correspondiente
|
|
505
|
+
|
|
506
|
+
return (
|
|
507
|
+
<div>
|
|
508
|
+
<h2>{content.title}</h2>
|
|
509
|
+
<p>{content.content}</p>
|
|
510
|
+
</div>
|
|
511
|
+
);
|
|
512
|
+
};
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
```jsx fileName="src/components/ComponentExample.csx" codeFormat="commonjs"
|
|
516
|
+
const { useIntlayer } = require("next-intlayer");
|
|
517
|
+
|
|
518
|
+
const ComponentExample = () => {
|
|
519
|
+
const content = useIntlayer("component-example"); // Asegúrate de tener una declaración de contenido correspondiente
|
|
520
|
+
|
|
521
|
+
return (
|
|
522
|
+
<div>
|
|
523
|
+
<h2>{content.title}</h2>
|
|
524
|
+
<p>{content.content}</p>
|
|
525
|
+
</div>
|
|
526
|
+
);
|
|
527
|
+
};
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
> Al usar traducciones en atributos de tipo `string` (por ejemplo, `alt`, `title`, `href`, `aria-label`), llama al valor de la función de la siguiente manera:
|
|
531
|
+
|
|
532
|
+
> ```jsx
|
|
533
|
+
>
|
|
534
|
+
> ```
|
|
535
|
+
|
|
536
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
537
|
+
|
|
538
|
+
> ```
|
|
539
|
+
>
|
|
540
|
+
> ```
|
|
541
|
+
|
|
542
|
+
> Para aprender más sobre el hook `useIntlayer`, consulta la [documentación](https://github.com/aymericzip/intlayer/blob/main/docs/es/packages/next-intlayer/useIntlayer.md).
|
|
543
|
+
|
|
544
|
+
### (Opcional) Paso 8: Internacionalizar Tus Metadatos
|
|
545
|
+
|
|
546
|
+
Para internacionalizar metadatos como títulos y descripciones de páginas, utiliza la función `getStaticProps` junto con la función `getTranslation` de Intlayer.
|
|
547
|
+
|
|
548
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
549
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
550
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
551
|
+
import { useIntlayer } from "next-intlayer";
|
|
552
|
+
|
|
553
|
+
interface HomePageProps {
|
|
554
|
+
locale: string;
|
|
555
|
+
metadata: Metadata;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
const HomePage = ({ metadata }: HomePageProps) => {
|
|
559
|
+
// Los metadatos pueden ser utilizados en el head u otros componentes según sea necesario
|
|
560
|
+
return (
|
|
561
|
+
<div>
|
|
562
|
+
<Head>
|
|
563
|
+
<title>{metadata.title}</title>
|
|
564
|
+
<meta name="description" content={metadata.description} />
|
|
565
|
+
</Head>
|
|
566
|
+
|
|
567
|
+
{/* Contenido adicional */}
|
|
568
|
+
</div>
|
|
569
|
+
);
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
export const getStaticProps: GetStaticProps = async ({ params }) => {
|
|
573
|
+
const locale = params?.locale as string;
|
|
574
|
+
|
|
575
|
+
const t = <T,>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
576
|
+
|
|
577
|
+
const metadata = {
|
|
578
|
+
title: t({
|
|
579
|
+
en: "My Website",
|
|
580
|
+
fr: "Mon Site Web",
|
|
581
|
+
es: "Mi Sitio Web",
|
|
582
|
+
}),
|
|
583
|
+
description: t({
|
|
584
|
+
en: "Welcome to my website.",
|
|
585
|
+
fr: "Bienvenue sur mon site Web.",
|
|
586
|
+
es: "Bienvenido a mi sitio web.",
|
|
587
|
+
}),
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
return {
|
|
591
|
+
props: {
|
|
592
|
+
locale,
|
|
593
|
+
metadata,
|
|
594
|
+
},
|
|
595
|
+
};
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
export default HomePage;
|
|
599
|
+
|
|
600
|
+
// ... Resto del código incluyendo getStaticPaths
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
604
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
605
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
606
|
+
import { useIntlayer } from "next-intlayer";
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
const HomePage = ({ metadata }) => {
|
|
611
|
+
// Los metadatos pueden ser utilizados en el head u otros componentes según sea necesario
|
|
612
|
+
return (
|
|
613
|
+
<div>
|
|
614
|
+
<Head>
|
|
615
|
+
<title>{metadata.title}</title>
|
|
616
|
+
<meta name="description" content={metadata.description} />
|
|
617
|
+
</Head>
|
|
618
|
+
|
|
619
|
+
{/* Contenido adicional */}
|
|
620
|
+
</div>
|
|
621
|
+
);
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
export const getStaticProps = async ({ params }) => {
|
|
625
|
+
const locale = params?.locale as string;
|
|
626
|
+
|
|
627
|
+
const t = (content) =>
|
|
628
|
+
getTranslation(content, locale);
|
|
629
|
+
|
|
630
|
+
const metadata = {
|
|
631
|
+
title: t({
|
|
632
|
+
en: "My Website",
|
|
633
|
+
fr: "Mon Site Web",
|
|
634
|
+
es: "Mi Sitio Web",
|
|
635
|
+
}),
|
|
636
|
+
description: t({
|
|
637
|
+
en: "Welcome to my website.",
|
|
638
|
+
fr: "Bienvenue sur mon site Web.",
|
|
639
|
+
es: "Bienvenido a mi sitio web.",
|
|
640
|
+
}),
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
return {
|
|
644
|
+
props: {
|
|
645
|
+
locale,
|
|
646
|
+
metadata,
|
|
647
|
+
},
|
|
648
|
+
};
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
export default HomePage;
|
|
652
|
+
|
|
653
|
+
// ... Resto del código incluyendo getStaticPaths
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
657
|
+
const { GetStaticPaths, GetStaticProps } = require("next");
|
|
658
|
+
const { type IConfigLocales, getTranslation, Locales } = require("intlayer");
|
|
659
|
+
const { useIntlayer } = require("next-intlayer");
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
const HomePage = ({ metadata }) => {
|
|
663
|
+
// Los metadatos pueden ser utilizados en el head u otros componentes según sea necesario
|
|
664
|
+
return (
|
|
665
|
+
<div>
|
|
666
|
+
<Head>
|
|
667
|
+
<title>{metadata.title}</title>
|
|
668
|
+
<meta name="description" content={metadata.description} />
|
|
669
|
+
</Head>
|
|
670
|
+
|
|
671
|
+
{/* Contenido adicional */}
|
|
672
|
+
</div>
|
|
673
|
+
);
|
|
674
|
+
};
|
|
675
|
+
|
|
676
|
+
const getStaticProps = async ({ params }) => {
|
|
677
|
+
const locale = params?.locale;
|
|
678
|
+
|
|
679
|
+
const t = (content) =>
|
|
680
|
+
getTranslation(content, locale);
|
|
681
|
+
|
|
682
|
+
const metadata = {
|
|
683
|
+
title: t({
|
|
684
|
+
en: "My Website",
|
|
685
|
+
fr: "Mon Site Web",
|
|
686
|
+
es: "Mi Sitio Web",
|
|
687
|
+
}),
|
|
688
|
+
description: t({
|
|
689
|
+
en: "Welcome to my website.",
|
|
690
|
+
fr: "Bienvenue sur mon site Web.",
|
|
691
|
+
es: "Bienvenido a mi sitio web.",
|
|
692
|
+
}),
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
return {
|
|
696
|
+
props: {
|
|
697
|
+
locale,
|
|
698
|
+
metadata,
|
|
699
|
+
},
|
|
700
|
+
};
|
|
701
|
+
};
|
|
702
|
+
|
|
703
|
+
module.exports = {
|
|
704
|
+
getStaticProps,
|
|
705
|
+
getStaticPaths,
|
|
706
|
+
default: HomePage,
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
// ... Resto del código incluyendo getStaticPaths
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
### (Opcional) Paso 9: Cambiar el Idioma de Tu Contenido
|
|
713
|
+
|
|
714
|
+
Para permitir que los usuarios cambien de idioma dinámicamente, utiliza la función `setLocale` proporcionada por el hook `useLocale`.
|
|
715
|
+
|
|
716
|
+
```tsx fileName="src/components/LanguageSwitcher.tsx" codeFormat="typescript"
|
|
717
|
+
import {
|
|
718
|
+
Locales,
|
|
719
|
+
getHTMLTextDir,
|
|
720
|
+
getLocaleName,
|
|
721
|
+
getLocalizedUrl,
|
|
722
|
+
} from "intlayer";
|
|
723
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
724
|
+
import { type FC } from "react";
|
|
725
|
+
import Link from "next/link";
|
|
726
|
+
|
|
727
|
+
const LocaleSwitcher: FC = () => {
|
|
728
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
729
|
+
useLocalePageRouter();
|
|
730
|
+
|
|
731
|
+
return (
|
|
732
|
+
<div>
|
|
733
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
734
|
+
<div id="localePopover" popover="auto">
|
|
735
|
+
{availableLocales.map((localeItem) => (
|
|
736
|
+
<Link
|
|
737
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
738
|
+
hrefLang={localeItem}
|
|
739
|
+
key={localeItem}
|
|
740
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
741
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
742
|
+
>
|
|
743
|
+
<span>
|
|
744
|
+
{/* Locale - e.g. FR */}
|
|
745
|
+
{localeItem}
|
|
746
|
+
</span>
|
|
747
|
+
<span>
|
|
748
|
+
{/* Idioma en su propio Local - e.g. Français */}
|
|
749
|
+
{getLocaleName(localeItem, locale)}
|
|
750
|
+
</span>
|
|
751
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
752
|
+
{/* Idioma en el Local actual - e.g. Francés con el local actual configurado en Locales.SPANISH */}
|
|
753
|
+
{getLocaleName(localeItem)}
|
|
754
|
+
</span>
|
|
755
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
756
|
+
{/* Idioma en Inglés - e.g. French */}
|
|
757
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
758
|
+
</span>
|
|
759
|
+
</Link>
|
|
760
|
+
))}
|
|
761
|
+
</div>
|
|
762
|
+
</div>
|
|
763
|
+
);
|
|
764
|
+
};
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="esm"
|
|
768
|
+
import {
|
|
769
|
+
Locales,
|
|
770
|
+
getHTMLTextDir,
|
|
771
|
+
getLocaleName,
|
|
772
|
+
getLocalizedUrl,
|
|
773
|
+
} from "intlayer";
|
|
774
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
775
|
+
|
|
776
|
+
const LocaleSwitcher = () => {
|
|
777
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
778
|
+
useLocalePageRouter();
|
|
779
|
+
|
|
780
|
+
return (
|
|
781
|
+
<div>
|
|
782
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
783
|
+
<div id="localePopover" popover="auto">
|
|
784
|
+
{availableLocales.map((localeItem) => (
|
|
785
|
+
<Link
|
|
786
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
787
|
+
hrefLang={localeItem}
|
|
788
|
+
key={localeItem}
|
|
789
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
790
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
791
|
+
>
|
|
792
|
+
<span>
|
|
793
|
+
{/* Locale - e.g. FR */}
|
|
794
|
+
{localeItem}
|
|
795
|
+
</span>
|
|
796
|
+
<span>
|
|
797
|
+
{/* Idioma en su propio Local - e.g. Français */}
|
|
798
|
+
{getLocaleName(localeItem, locale)}
|
|
799
|
+
</span>
|
|
800
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
801
|
+
{/* Idioma en el Local actual - e.g. Francés con el local actual configurado en Locales.SPANISH */}
|
|
802
|
+
{getLocaleName(localeItem)}
|
|
803
|
+
</span>
|
|
804
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
805
|
+
{/* Idioma en Inglés - e.g. French */}
|
|
806
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
807
|
+
</span>
|
|
808
|
+
</Link>
|
|
809
|
+
))}
|
|
810
|
+
</div>
|
|
811
|
+
</div>
|
|
812
|
+
);
|
|
813
|
+
};
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="commonjs"
|
|
817
|
+
const {
|
|
818
|
+
Locales,
|
|
819
|
+
getHTMLTextDir,
|
|
820
|
+
getLocaleName,
|
|
821
|
+
getLocalizedUrl,
|
|
822
|
+
} = require("intlayer");
|
|
823
|
+
const { useLocalePageRouter } = require("next-intlayer");
|
|
824
|
+
|
|
825
|
+
const LocaleSwitcher = () => {
|
|
826
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
827
|
+
useLocalePageRouter();
|
|
828
|
+
|
|
829
|
+
return (
|
|
830
|
+
<select>
|
|
831
|
+
{availableLocales.map((localeItem) => (
|
|
832
|
+
<option value={localeItem} key={localeItem}>
|
|
833
|
+
<a
|
|
834
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
835
|
+
hrefLang={localeItem}
|
|
836
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
837
|
+
onClick={(e) => {
|
|
838
|
+
e.preventDefault();
|
|
839
|
+
setLocale(localeItem);
|
|
840
|
+
}}
|
|
841
|
+
>
|
|
842
|
+
<span>
|
|
843
|
+
{/* Locale - e.g. FR */}
|
|
844
|
+
{localeItem}
|
|
845
|
+
</span>
|
|
846
|
+
<span>
|
|
847
|
+
{/* Idioma en su propio Local - e.g. Français */}
|
|
848
|
+
{getLocaleName(localeItem, locale)}
|
|
849
|
+
</span>
|
|
850
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
851
|
+
{/* Idioma en el Local actual - e.g. Francés con el local actual configurado en Locales.SPANISH */}
|
|
852
|
+
{getLocaleName(localeItem)}
|
|
853
|
+
</span>
|
|
854
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
855
|
+
{/* Idioma en Inglés - e.g. French */}
|
|
856
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
857
|
+
</span>
|
|
858
|
+
</a>
|
|
859
|
+
</option>
|
|
860
|
+
))}
|
|
861
|
+
</select>
|
|
862
|
+
);
|
|
863
|
+
};
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
> La API `useLocalePageRouter` es la misma que `useLocale`. Para aprender más sobre el hook `useLocale`, consulta la [documentación](https://github.com/aymericzip/intlayer/blob/main/docs/es/packages/next-intlayer/useLocale.md).
|
|
867
|
+
|
|
868
|
+
> Referencias de la documentación:
|
|
869
|
+
|
|
870
|
+
> - [`getLocaleName` hook](https://github.com/aymericzip/intlayer/blob/main/docs/es/packages/intlayer/getLocaleName.md)
|
|
871
|
+
|
|
872
|
+
> - [`getLocalizedUrl` hook](https://github.com/aymericzip/intlayer/blob/main/docs/es/packages/intlayer/getLocalizedUrl.md)
|
|
873
|
+
|
|
874
|
+
> - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/es/packages/intlayer/getHTMLTextDir.md)
|
|
875
|
+
|
|
876
|
+
> - [`hrefLang` attribute](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
877
|
+
|
|
878
|
+
> - [`lang` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
|
|
879
|
+
|
|
880
|
+
> - [`dir` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
|
|
881
|
+
|
|
882
|
+
> - [`aria-current` attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
883
|
+
|
|
884
|
+
### (Opcional) Paso 10: Crear un Componente de Enlace Localizado
|
|
885
|
+
|
|
886
|
+
Para cambiar el idioma de tu contenido en Next.js, la forma recomendada es usar el componente `Link` para redirigir a los usuarios a la página localizada apropiada. El componente `Link` permite la precarga de la página, lo que ayuda a evitar una recarga completa de la página.
|
|
887
|
+
|
|
888
|
+
Este comportamiento es útil por varias razones:
|
|
889
|
+
|
|
890
|
+
- **SEO y Experiencia de Usuario**: Las URLs localizadas ayudan a los motores de búsqueda a indexar correctamente las páginas específicas por idioma y proporcionan a los usuarios contenido en su idioma preferido.
|
|
891
|
+
- **Consistencia**: Al usar un enlace localizado en toda tu aplicación, garantizas que la navegación se mantenga dentro del idioma actual, evitando cambios inesperados de idioma.
|
|
892
|
+
- **Mantenibilidad**: Centralizar la lógica de localización en un único componente simplifica la gestión de URLs, haciendo que tu base de código sea más fácil de mantener y ampliar a medida que tu aplicación crece.
|
|
893
|
+
|
|
894
|
+
A continuación, se muestra la implementación de un componente `Link` localizado en TypeScript:
|
|
895
|
+
|
|
896
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
897
|
+
"use client";
|
|
898
|
+
|
|
899
|
+
import { getLocalizedUrl } from "intlayer";
|
|
900
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
901
|
+
import { useLocale } from "next-intlayer";
|
|
902
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
|
|
903
|
+
|
|
904
|
+
/**
|
|
905
|
+
* Función de utilidad para verificar si una URL es externa.
|
|
906
|
+
* Si la URL comienza con http:// o https://, se considera externa.
|
|
907
|
+
*/
|
|
908
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
909
|
+
/^https?:\/\//.test(href ?? "");
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Un componente de enlace personalizado que adapta el atributo href según el idioma actual.
|
|
913
|
+
* Para enlaces internos, utiliza `getLocalizedUrl` para agregar el prefijo del idioma a la URL (por ejemplo, /fr/about).
|
|
914
|
+
* Esto garantiza que la navegación se mantenga dentro del contexto del idioma actual.
|
|
915
|
+
*/
|
|
916
|
+
export const Link = forwardRef<
|
|
917
|
+
HTMLAnchorElement,
|
|
918
|
+
PropsWithChildren<NextLinkProps>
|
|
919
|
+
>(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
|
|
920
|
+
const { locale } = useLocale();
|
|
921
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
922
|
+
|
|
923
|
+
// Si el enlace es interno y se proporciona un href válido, obtiene la URL localizada.
|
|
924
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
925
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
926
|
+
|
|
927
|
+
return (
|
|
928
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
929
|
+
{children}
|
|
930
|
+
</NextLink>
|
|
931
|
+
);
|
|
932
|
+
});
|
|
933
|
+
|
|
934
|
+
Link.displayName = "Link";
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
938
|
+
'use client';
|
|
939
|
+
|
|
940
|
+
import { getLocalizedUrl } from 'intlayer';
|
|
941
|
+
import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
|
|
942
|
+
import { useLocale } from 'next-intlayer';
|
|
943
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* Función de utilidad para verificar si una URL es externa.
|
|
947
|
+
* Si la URL comienza con http:// o https://, se considera externa.
|
|
948
|
+
*/
|
|
949
|
+
export const checkIsExternalLink = (href) =>
|
|
950
|
+
/^https?:\/\//.test(href ?? '');
|
|
951
|
+
|
|
952
|
+
/**
|
|
953
|
+
* Un componente de enlace personalizado que adapta el atributo href según el idioma actual.
|
|
954
|
+
* Para enlaces internos, utiliza `getLocalizedUrl` para agregar el prefijo del idioma a la URL (por ejemplo, /fr/about).
|
|
955
|
+
* Esto garantiza que la navegación se mantenga dentro del contexto del idioma actual.
|
|
956
|
+
*/
|
|
957
|
+
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
958
|
+
const { locale } = useLocale();
|
|
959
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
960
|
+
|
|
961
|
+
// Si el enlace es interno y se proporciona un href válido, obtiene la URL localizada.
|
|
962
|
+
const hrefI18n =
|
|
963
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
964
|
+
|
|
965
|
+
return (
|
|
966
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
967
|
+
{children}
|
|
968
|
+
</NextLink>
|
|
969
|
+
);
|
|
970
|
+
});
|
|
971
|
+
|
|
972
|
+
Link.displayName = 'Link';
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
976
|
+
'use client';
|
|
977
|
+
|
|
978
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
979
|
+
const NextLink = require("next/link");
|
|
980
|
+
const { useLocale } = require("next-intlayer");
|
|
981
|
+
const { forwardRef } = require("react");
|
|
982
|
+
|
|
983
|
+
/**
|
|
984
|
+
* Función de utilidad para verificar si una URL es externa.
|
|
985
|
+
* Si la URL comienza con http:// o https://, se considera externa.
|
|
986
|
+
*/
|
|
987
|
+
const checkIsExternalLink = (href) =>
|
|
988
|
+
/^https?:\/\//.test(href ?? '');
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
992
|
+
const { locale } = useLocale();
|
|
993
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
994
|
+
|
|
995
|
+
// Si el enlace es interno y se proporciona un href válido, obtiene la URL localizada.
|
|
996
|
+
const hrefI18n: NextLinkProps['href'] =
|
|
997
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
998
|
+
|
|
999
|
+
return (
|
|
1000
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
1001
|
+
{children}
|
|
1002
|
+
</NextLink>
|
|
1003
|
+
);
|
|
1004
|
+
});
|
|
1005
|
+
|
|
1006
|
+
Link.displayName = 'Link';
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
#### Cómo Funciona
|
|
1010
|
+
|
|
1011
|
+
- **Detección de Enlaces Externos**:
|
|
1012
|
+
La función auxiliar `checkIsExternalLink` determina si una URL es externa. Los enlaces externos se dejan sin cambios porque no necesitan localización.
|
|
1013
|
+
|
|
1014
|
+
- **Recuperación del Idioma Actual**:
|
|
1015
|
+
El hook `useLocale` proporciona el idioma actual (por ejemplo, `fr` para francés).
|
|
1016
|
+
|
|
1017
|
+
- **Localización de la URL**:
|
|
1018
|
+
Para enlaces internos (es decir, no externos), se utiliza `getLocalizedUrl` para agregar automáticamente el prefijo del idioma actual a la URL. Esto significa que si tu usuario está en francés, pasar `/about` como el `href` lo transformará en `/fr/about`.
|
|
1019
|
+
|
|
1020
|
+
- **Devolución del Enlace**:
|
|
1021
|
+
El componente devuelve un elemento `<a>` con la URL localizada, asegurando que la navegación sea consistente con el idioma.
|
|
1022
|
+
|
|
1023
|
+
Al integrar este componente `Link` en toda tu aplicación, mantienes una experiencia de usuario coherente y consciente del idioma, además de beneficiarte de un mejor SEO y usabilidad.
|
|
1024
|
+
|
|
1025
|
+
### (Opcional) Paso 11: Optimiza el tamaño de tu bundle
|
|
1026
|
+
|
|
1027
|
+
Cuando usas `next-intlayer`, los diccionarios se incluyen en el bundle de cada página por defecto. Para optimizar el tamaño de tu bundle, Intlayer ofrece un plugin SWC opcional que reemplaza de forma inteligente las llamadas a `useIntlayer` usando macros. Esto asegura que los diccionarios solo se incluyan en los bundles de las páginas que realmente los utilizan.
|
|
1028
|
+
|
|
1029
|
+
Para habilitar esta optimización, instala el paquete `@intlayer/swc`. Una vez instalado, `next-intlayer` lo detectará y lo usará automáticamente:
|
|
1030
|
+
|
|
1031
|
+
```bash packageManager="npm"
|
|
1032
|
+
npm install @intlayer/swc --save-dev
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
```bash packageManager="pnpm"
|
|
1036
|
+
pnpm add @intlayer/swc --save-dev
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
```bash packageManager="yarn"
|
|
1040
|
+
yarn add @intlayer/swc --save-dev
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
> Nota: Esta optimización solo está disponible para Next.js 13 y superior.
|
|
1044
|
+
|
|
1045
|
+
> Nota: Este paquete no se instala por defecto porque los plugins SWC aún son experimentales en Next.js. Puede cambiar en el futuro.
|
|
1046
|
+
|
|
1047
|
+
### Configurar TypeScript
|
|
1048
|
+
|
|
1049
|
+
Intlayer utiliza la ampliación de módulos para obtener beneficios de TypeScript y fortalecer tu base de código.
|
|
1050
|
+
|
|
1051
|
+

|
|
1052
|
+
|
|
1053
|
+

|
|
1054
|
+
|
|
1055
|
+
Asegúrate de que tu configuración de TypeScript incluya los tipos autogenerados.
|
|
1056
|
+
|
|
1057
|
+
```json5 fileName="tsconfig.json"
|
|
1058
|
+
{
|
|
1059
|
+
// ... Tus configuraciones existentes de TypeScript
|
|
1060
|
+
"include": [
|
|
1061
|
+
// ... Tus configuraciones existentes de TypeScript
|
|
1062
|
+
".intlayer/**/*.ts", // Incluye los tipos autogenerados
|
|
1063
|
+
],
|
|
1064
|
+
}
|
|
1065
|
+
```
|
|
1066
|
+
|
|
1067
|
+
### Configuración de Git
|
|
1068
|
+
|
|
1069
|
+
Para mantener tu repositorio limpio y evitar cometer archivos generados, se recomienda ignorar los archivos creados por Intlayer.
|
|
1070
|
+
|
|
1071
|
+
Agrega las siguientes líneas a tu archivo `.gitignore`:
|
|
1072
|
+
|
|
1073
|
+
```plaintext fileName=".gitignore"
|
|
1074
|
+
# Ignorar los archivos generados por Intlayer
|
|
1075
|
+
.intlayer
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
## Recursos Adicionales
|
|
1079
|
+
|
|
1080
|
+
- **Documentación de Intlayer:** [Repositorio de GitHub](https://github.com/aymericzip/intlayer)
|
|
1081
|
+
- **Guía de Diccionario:** [Diccionario](https://github.com/aymericzip/intlayer/blob/main/docs/es/dictionary/get_started.md)
|
|
1082
|
+
- **Documentación de Configuración:** [Guía de Configuración](https://github.com/aymericzip/intlayer/blob/main/docs/es/configuration.md)
|
|
1083
|
+
|
|
1084
|
+
Siguiendo esta guía, puedes integrar eficazmente Intlayer en tu aplicación Next.js utilizando el Page Router, habilitando un soporte de internacionalización robusto y escalable para tus proyectos web.
|
|
1085
|
+
|
|
1086
|
+
### Ir Más Allá
|
|
1087
|
+
|
|
1088
|
+
Para ir más allá, puedes implementar el [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/es/intlayer_visual_editor.md) o externalizar tu contenido utilizando el [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/es/intlayer_CMS.md).
|