@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,1109 @@
|
|
|
1
|
+
# Começando com Internacionalização (i18n) usando Intlayer e Next.js com Page Router
|
|
2
|
+
|
|
3
|
+
## O que é o Intlayer?
|
|
4
|
+
|
|
5
|
+
**Intlayer** é uma biblioteca de internacionalização (i18n) inovadora e de código aberto, projetada para simplificar o suporte multilíngue em aplicações web modernas. O Intlayer se integra perfeitamente com o mais recente framework **Next.js**, incluindo seu tradicional **Page Router**.
|
|
6
|
+
|
|
7
|
+
Com o Intlayer, você pode:
|
|
8
|
+
|
|
9
|
+
- **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
|
|
10
|
+
- **Localizar dinamicamente metadados**, rotas e conteúdo.
|
|
11
|
+
- **Garantir suporte ao TypeScript** com tipos autogerados, melhorando a autocompletação e a detecção de erros.
|
|
12
|
+
- **Aproveitar recursos avançados**, como detecção e troca dinâmica de localidade.
|
|
13
|
+
|
|
14
|
+
> O Intlayer é compatível com Next.js 12, 13, 14 e 15. Se você estiver usando o Next.js App Router, consulte o [guia do App Router](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_with_nextjs_14.md). Para o Next.js 15, siga este [guia](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_with_nextjs_15.md).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Guia Passo a Passo para Configurar o Intlayer em uma Aplicação Next.js Usando Page Router
|
|
19
|
+
|
|
20
|
+
### Passo 1: Instale as Dependências
|
|
21
|
+
|
|
22
|
+
Instale os pacotes necessários usando seu gerenciador de pacotes 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
|
+
O pacote principal que fornece ferramentas de internacionalização para gerenciamento de configuração, tradução, [declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/pt/dictionary/get_started.md), transpiração e [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_cli.md).
|
|
39
|
+
|
|
40
|
+
- **next-intlayer**
|
|
41
|
+
|
|
42
|
+
O pacote que integra o Intlayer com o Next.js. Ele fornece provedores de contexto e hooks para internacionalização no Next.js. Além disso, inclui o plugin Next.js para integrar o Intlayer com [Webpack](https://webpack.js.org/) ou [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), bem como middleware para detectar a localidade preferida do usuário, gerenciar cookies e lidar com redirecionamento de URLs.
|
|
43
|
+
|
|
44
|
+
### Passo 2: Configure Seu Projeto
|
|
45
|
+
|
|
46
|
+
Crie um arquivo de configuração para definir os idiomas suportados pela sua aplicação:
|
|
47
|
+
|
|
48
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
49
|
+
// Configuração do Intlayer
|
|
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
|
+
// Adicione outras localidades aqui
|
|
59
|
+
],
|
|
60
|
+
defaultLocale: Locales.ENGLISH,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export default config;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
68
|
+
// Configuração do Intlayer
|
|
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
|
+
// Adicione outras localidades aqui
|
|
79
|
+
],
|
|
80
|
+
defaultLocale: Locales.ENGLISH,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default config;
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
88
|
+
// Configuração do Intlayer
|
|
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
|
+
// Adicione outras localidades aqui
|
|
99
|
+
],
|
|
100
|
+
defaultLocale: Locales.ENGLISH,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
module.exports = config;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
> Por meio deste arquivo de configuração, você pode configurar URLs localizados, redirecionamento de middleware, nomes de cookies, a localização e extensão de suas declarações de conteúdo, desativar logs do Intlayer no console e muito mais. Para uma lista completa de parâmetros disponíveis, consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/pt/configuration.md).
|
|
108
|
+
|
|
109
|
+
### Passo 3: Integre o Intlayer com a Configuração do Next.js
|
|
110
|
+
|
|
111
|
+
Modifique sua configuração do Next.js para incorporar o Intlayer:
|
|
112
|
+
|
|
113
|
+
```typescript fileName="next.config.mjs"
|
|
114
|
+
// Integração do Intlayer com Next.js
|
|
115
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
116
|
+
|
|
117
|
+
/** @type {import('next').NextConfig} */
|
|
118
|
+
const nextConfig = {
|
|
119
|
+
// Sua configuração existente do Next.js
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default withIntlayer(nextConfig);
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
> O plugin `withIntlayer()` do Next.js é usado para integrar o Intlayer com o Next.js. Ele garante a construção de arquivos de declaração de conteúdo e os monitora no modo de desenvolvimento. Define variáveis de ambiente do Intlayer nos ambientes [Webpack](https://webpack.js.org/) ou [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). Além disso, fornece aliases para otimizar o desempenho e garante compatibilidade com componentes do servidor.
|
|
126
|
+
|
|
127
|
+
### Passo 4: Configure Middleware para Detecção de Localidade
|
|
128
|
+
|
|
129
|
+
Configure o middleware para detectar e lidar automaticamente com a localidade preferida do usuário:
|
|
130
|
+
|
|
131
|
+
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
132
|
+
// Middleware para detecção de localidade
|
|
133
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
134
|
+
|
|
135
|
+
export const config = {
|
|
136
|
+
matcher:
|
|
137
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
138
|
+
};
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
142
|
+
// Middleware para detecção de localidade
|
|
143
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
144
|
+
|
|
145
|
+
export const config = {
|
|
146
|
+
matcher:
|
|
147
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
148
|
+
};
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
152
|
+
// Middleware para detecção de localidade
|
|
153
|
+
const { intlayerMiddleware } = require("next-intlayer/middleware");
|
|
154
|
+
|
|
155
|
+
const config = {
|
|
156
|
+
matcher:
|
|
157
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
module.exports = { middleware: intlayerMiddleware, config };
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> Adapte o parâmetro `matcher` para corresponder às rotas da sua aplicação. Para mais detalhes, consulte a [documentação do Next.js sobre configuração do matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
|
|
164
|
+
|
|
165
|
+
### Passo 5: Defina Rotas Dinâmicas de Localidade
|
|
166
|
+
|
|
167
|
+
Implemente roteamento dinâmico para servir conteúdo localizado com base na localidade do usuário.
|
|
168
|
+
|
|
169
|
+
1. **Crie Páginas Específicas para Localidades:**
|
|
170
|
+
|
|
171
|
+
Renomeie o arquivo da sua página principal para incluir o segmento dinâmico `[locale]`.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
mv src/pages/index.tsx src/pages/[locale]/index.tsx
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
2. **Atualize `_app.tsx` para Lidar com Localização:**
|
|
178
|
+
|
|
179
|
+
Modifique seu `_app.tsx` para incluir provedores do Intlayer.
|
|
180
|
+
|
|
181
|
+
```tsx fileName="src/pages/_app.tsx" codeFormat="typescript"
|
|
182
|
+
|
|
183
|
+
// Configuração do App com Intlayer
|
|
184
|
+
import type { FC } from "react";
|
|
185
|
+
import type { AppProps } from "next/app";
|
|
186
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
187
|
+
|
|
188
|
+
const App = FC<AppProps>({ Component, pageProps }) => {
|
|
189
|
+
const { locale } = pageProps;
|
|
190
|
+
|
|
191
|
+
return (
|
|
192
|
+
<IntlayerClientProvider locale={locale}>
|
|
193
|
+
<Component {...pageProps} />
|
|
194
|
+
</IntlayerClientProvider>
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export default MyApp;
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```jsx fileName="src/pages/_app.mjx" codeFormat="esm"
|
|
202
|
+
|
|
203
|
+
// Configuração do App com Intlayer
|
|
204
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
205
|
+
|
|
206
|
+
const App = ({ Component, pageProps }) => (
|
|
207
|
+
<IntlayerClientProvider locale={locale}>
|
|
208
|
+
<Component {...pageProps} />
|
|
209
|
+
</IntlayerClientProvider>
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
export default App;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
```jsx fileName="src/pages/_app.csx" codeFormat="commonjs"
|
|
216
|
+
|
|
217
|
+
// Configuração do App com Intlayer
|
|
218
|
+
const { IntlayerClientProvider } = require("next-intlayer");
|
|
219
|
+
|
|
220
|
+
const App = ({ Component, pageProps }) => (
|
|
221
|
+
<IntlayerClientProvider locale={locale}>
|
|
222
|
+
<Component {...pageProps} />
|
|
223
|
+
</IntlayerClientProvider>
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
module.exports = App;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
3. **Configure `getStaticPaths` e `getStaticProps`:**
|
|
230
|
+
|
|
231
|
+
No seu `[locale]/index.tsx`, defina os caminhos e as propriedades para lidar com diferentes localidades.
|
|
232
|
+
|
|
233
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
234
|
+
|
|
235
|
+
// Configuração de rotas dinâmicas
|
|
236
|
+
import type { FC } from "react";
|
|
237
|
+
import type { GetStaticPaths, GetStaticProps } from "next";
|
|
238
|
+
import { type Locales, getConfiguration } from "intlayer";
|
|
239
|
+
|
|
240
|
+
const HomePage: FC = () => <div>{/_ Seu conteúdo aqui _/}</div>;
|
|
241
|
+
|
|
242
|
+
export const getStaticPaths: GetStaticPaths = () => {
|
|
243
|
+
const { internationalization } = getConfiguration();
|
|
244
|
+
const { locales } = internationalization;
|
|
245
|
+
|
|
246
|
+
const paths = locales.map((locale) => ({
|
|
247
|
+
params: { locale },
|
|
248
|
+
}));
|
|
249
|
+
|
|
250
|
+
return { paths, fallback: false };
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
export const getStaticProps: GetStaticProps = ({ params }) => {
|
|
254
|
+
const locale = params?.locale as string;
|
|
255
|
+
|
|
256
|
+
return {
|
|
257
|
+
props: {
|
|
258
|
+
locale,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
export default HomePage;
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
267
|
+
import { getConfiguration } from "intlayer";
|
|
268
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
269
|
+
|
|
270
|
+
const HomePage = () => <div>{/* Seu conteúdo aqui */}</div>;
|
|
271
|
+
|
|
272
|
+
export const getStaticPaths = () => {
|
|
273
|
+
const { internationalization } = getConfiguration();
|
|
274
|
+
const { locales } = internationalization;
|
|
275
|
+
|
|
276
|
+
const paths = locales.map((locale) => ({
|
|
277
|
+
params: { locale },
|
|
278
|
+
}));
|
|
279
|
+
|
|
280
|
+
return { paths, fallback: false };
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
export const getStaticProps = ({ params }) => {
|
|
284
|
+
const locale = params?.locale;
|
|
285
|
+
|
|
286
|
+
return {
|
|
287
|
+
props: {
|
|
288
|
+
locale,
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
295
|
+
const { getConfiguration } = require("intlayer");
|
|
296
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
297
|
+
|
|
298
|
+
const HomePage = () => <div>{/* Seu conteúdo aqui */}</div>;
|
|
299
|
+
|
|
300
|
+
const getStaticPaths = async () => {
|
|
301
|
+
const { internationalization } = getConfiguration();
|
|
302
|
+
const { locales } = internationalization;
|
|
303
|
+
|
|
304
|
+
const paths = locales.map((locale) => ({
|
|
305
|
+
params: { locale },
|
|
306
|
+
}));
|
|
307
|
+
|
|
308
|
+
return { paths, fallback: false };
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
const getStaticProps = async ({ params }) => {
|
|
312
|
+
const locale = params?.locale;
|
|
313
|
+
|
|
314
|
+
return {
|
|
315
|
+
props: {
|
|
316
|
+
locale,
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
module.exports = {
|
|
322
|
+
getStaticProps,
|
|
323
|
+
getStaticPaths,
|
|
324
|
+
default: HomePage,
|
|
325
|
+
};
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
> `getStaticPaths` e `getStaticProps` garantem que sua aplicação pré-construa as páginas necessárias para todos os idiomas no Next.js Page Router. Essa abordagem reduz o cálculo em tempo de execução e melhora a experiência do usuário. Para mais detalhes, consulte a documentação do Next.js sobre [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) e [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props).
|
|
329
|
+
|
|
330
|
+
### Passo 6: Declare Seu Conteúdo
|
|
331
|
+
|
|
332
|
+
Crie e gerencie suas declarações de conteúdo para armazenar traduções.
|
|
333
|
+
|
|
334
|
+
```tsx fileName="src/pages/[locale]/home.content.ts" contentDeclarationFormat="typescript"
|
|
335
|
+
import { t, type Dictionary } from "intlayer";
|
|
336
|
+
|
|
337
|
+
const homeContent = {
|
|
338
|
+
key: "home",
|
|
339
|
+
content: {
|
|
340
|
+
title: t({
|
|
341
|
+
pt: "Bem-vindo ao Meu Site",
|
|
342
|
+
en: "Welcome to My Website",
|
|
343
|
+
fr: "Bienvenue sur mon site Web",
|
|
344
|
+
es: "Bienvenido a mi sitio web",
|
|
345
|
+
}),
|
|
346
|
+
description: t({
|
|
347
|
+
pt: "Comece editando esta página.",
|
|
348
|
+
en: "Get started by editing this page.",
|
|
349
|
+
fr: "Commencez par éditer cette page.",
|
|
350
|
+
es: "Comience por editar esta página.",
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
353
|
+
} satisfies Dictionary;
|
|
354
|
+
|
|
355
|
+
export default homeContent;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
```javascript fileName="src/pages/[locale]/home.content.mjs" contentDeclarationFormat="esm"
|
|
359
|
+
import { t } from "intlayer";
|
|
360
|
+
|
|
361
|
+
/** @type {import('intlayer').Dictionary} */
|
|
362
|
+
const homeContent = {
|
|
363
|
+
key: "home",
|
|
364
|
+
content: {
|
|
365
|
+
getStarted: {
|
|
366
|
+
main: t({
|
|
367
|
+
pt: "Comece editando esta página.",
|
|
368
|
+
en: "Get started by editing this page.",
|
|
369
|
+
fr: "Commencez par éditer cette page.",
|
|
370
|
+
es: "Comience por editar esta página.",
|
|
371
|
+
}),
|
|
372
|
+
pageLink: "src/app/page.tsx",
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
export default homeContent;
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
```javascript fileName="src/pages/[locale]/home.content.cjs" contentDeclarationFormat="commonjs"
|
|
381
|
+
const { t } = require("intlayer");
|
|
382
|
+
|
|
383
|
+
/** @type {import('intlayer').Dictionary} */
|
|
384
|
+
const homeContent = {
|
|
385
|
+
key: "home",
|
|
386
|
+
content: {
|
|
387
|
+
getStarted: {
|
|
388
|
+
main: t({
|
|
389
|
+
pt: "Comece editando esta página.",
|
|
390
|
+
en: "Get started by editing this page.",
|
|
391
|
+
fr: "Commencez par éditer cette page.",
|
|
392
|
+
es: "Comience por editar esta página.",
|
|
393
|
+
}),
|
|
394
|
+
pageLink: "src/app/page.tsx",
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
module.exports = homeContent;
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
```json fileName="src/pages/[locale]/home.content.json" contentDeclarationFormat="json"
|
|
403
|
+
{
|
|
404
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
405
|
+
"key": "home",
|
|
406
|
+
"content": {
|
|
407
|
+
"getStarted": {
|
|
408
|
+
"nodeType": "translation",
|
|
409
|
+
"translation": {
|
|
410
|
+
"pt": "Comece editando esta página.",
|
|
411
|
+
"en": "Get started by editing this page.",
|
|
412
|
+
"fr": "Commencez par éditer cette page.",
|
|
413
|
+
"es": "Comience por editar esta página."
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
"pageLink": {
|
|
417
|
+
"nodeType": "translation",
|
|
418
|
+
"translation": {
|
|
419
|
+
"pt": "src/app/page.tsx",
|
|
420
|
+
"en": "src/app/page.tsx",
|
|
421
|
+
"fr": "src/app/page.tsx",
|
|
422
|
+
"es": "src/app/page.tsx"
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
Para mais informações sobre como declarar conteúdo, consulte o [guia de declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/pt/dictionary/get_started.md).
|
|
430
|
+
|
|
431
|
+
### Passo 7: Utilize o Conteúdo no Seu Código
|
|
432
|
+
|
|
433
|
+
Acesse seus dicionários de conteúdo em toda a aplicação para exibir o conteúdo traduzido.
|
|
434
|
+
|
|
435
|
+
```tsx {2,6} fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
436
|
+
import type { FC } from "react";
|
|
437
|
+
import { useIntlayer } from "next-intlayer";
|
|
438
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
439
|
+
|
|
440
|
+
const HomePage: FC = () => {
|
|
441
|
+
const content = useIntlayer("home");
|
|
442
|
+
|
|
443
|
+
return (
|
|
444
|
+
<div>
|
|
445
|
+
<h1>{content.title}</h1>
|
|
446
|
+
<p>{content.description}</p>
|
|
447
|
+
<ComponentExample />
|
|
448
|
+
{/* Componentes adicionais */}
|
|
449
|
+
</div>
|
|
450
|
+
);
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
// ... Resto do código, incluindo getStaticPaths e getStaticProps
|
|
454
|
+
|
|
455
|
+
export default HomePage;
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
459
|
+
import { useIntlayer } from "next-intlayer";
|
|
460
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
461
|
+
|
|
462
|
+
const HomePage = () => {
|
|
463
|
+
const content = useIntlayer("home");
|
|
464
|
+
|
|
465
|
+
return (
|
|
466
|
+
<div>
|
|
467
|
+
<h1>{content.getStarted.main}</h1>
|
|
468
|
+
<code>{content.getStarted.pageLink}</code>
|
|
469
|
+
|
|
470
|
+
<ComponentExample />
|
|
471
|
+
{/* Componentes adicionais */}
|
|
472
|
+
</div>
|
|
473
|
+
);
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
// ... Resto do código, incluindo getStaticPaths e getStaticProps
|
|
477
|
+
|
|
478
|
+
export default HomePage;
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
482
|
+
const { useIntlayer } = require("next-intlayer");
|
|
483
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
484
|
+
|
|
485
|
+
const HomePage = () => {
|
|
486
|
+
const content = useIntlayer("home");
|
|
487
|
+
|
|
488
|
+
return (
|
|
489
|
+
<div>
|
|
490
|
+
<h1>{content.getStarted.main}</h1>
|
|
491
|
+
<code>{content.getStarted.pageLink}</code>
|
|
492
|
+
|
|
493
|
+
<ComponentExample />
|
|
494
|
+
{/* Componentes adicionais */}
|
|
495
|
+
</div>
|
|
496
|
+
);
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
// ... Resto do código, incluindo getStaticPaths e getStaticProps
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
503
|
+
import type { FC } from "react";
|
|
504
|
+
import { useIntlayer } from "next-intlayer";
|
|
505
|
+
|
|
506
|
+
export const ComponentExample: FC = () => {
|
|
507
|
+
const content = useIntlayer("component-example"); // Certifique-se de ter uma declaração de conteúdo correspondente
|
|
508
|
+
|
|
509
|
+
return (
|
|
510
|
+
<div>
|
|
511
|
+
<h2>{content.title}</h2>
|
|
512
|
+
<p>{content.content}</p>
|
|
513
|
+
</div>
|
|
514
|
+
);
|
|
515
|
+
};
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
```jsx fileName="src/components/ComponentExample.mjx" codeFormat="esm"
|
|
519
|
+
import { useIntlayer } from "next-intlayer";
|
|
520
|
+
|
|
521
|
+
const ComponentExample = () => {
|
|
522
|
+
const content = useIntlayer("component-example"); // Certifique-se de ter uma declaração de conteúdo correspondente
|
|
523
|
+
|
|
524
|
+
return (
|
|
525
|
+
<div>
|
|
526
|
+
<h2>{content.title}</h2>
|
|
527
|
+
<p>{content.content}</p>
|
|
528
|
+
</div>
|
|
529
|
+
);
|
|
530
|
+
};
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
```jsx fileName="src/components/ComponentExample.csx" codeFormat="commonjs"
|
|
534
|
+
const { useIntlayer } = require("next-intlayer");
|
|
535
|
+
|
|
536
|
+
const ComponentExample = () => {
|
|
537
|
+
const content = useIntlayer("component-example"); // Certifique-se de ter uma declaração de conteúdo correspondente
|
|
538
|
+
|
|
539
|
+
return (
|
|
540
|
+
<div>
|
|
541
|
+
<h2>{content.title}</h2>
|
|
542
|
+
<p>{content.content}</p>
|
|
543
|
+
</div>
|
|
544
|
+
);
|
|
545
|
+
};
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
> Ao usar traduções em atributos `string` (por exemplo, `alt`, `title`, `href`, `aria-label`), chame o
|
|
549
|
+
|
|
550
|
+
> valor da função da seguinte forma:
|
|
551
|
+
|
|
552
|
+
> ```jsx
|
|
553
|
+
>
|
|
554
|
+
> ```
|
|
555
|
+
|
|
556
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
557
|
+
|
|
558
|
+
> ```
|
|
559
|
+
>
|
|
560
|
+
> ```
|
|
561
|
+
|
|
562
|
+
> Para saber mais sobre o hook `useIntlayer`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/next-intlayer/useIntlayer.md).
|
|
563
|
+
|
|
564
|
+
### (Opcional) Etapa 8: Internacionalizar Seus Metadados
|
|
565
|
+
|
|
566
|
+
Para internacionalizar metadados como títulos e descrições de páginas, use a função `getStaticProps` em conjunto com a função `getTranslation` do Intlayer.
|
|
567
|
+
|
|
568
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
569
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
570
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
571
|
+
import { useIntlayer } from "next-intlayer";
|
|
572
|
+
|
|
573
|
+
interface HomePageProps {
|
|
574
|
+
locale: string;
|
|
575
|
+
metadata: Metadata;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
const HomePage = ({ metadata }: HomePageProps) => {
|
|
579
|
+
// Os metadados podem ser usados no head ou em outros componentes conforme necessário
|
|
580
|
+
return (
|
|
581
|
+
<div>
|
|
582
|
+
<Head>
|
|
583
|
+
<title>{metadata.title}</title>
|
|
584
|
+
<meta name="description" content={metadata.description} />
|
|
585
|
+
</Head>
|
|
586
|
+
|
|
587
|
+
{/* Conteúdo adicional */}
|
|
588
|
+
</div>
|
|
589
|
+
);
|
|
590
|
+
};
|
|
591
|
+
|
|
592
|
+
export const getStaticProps: GetStaticProps = async ({ params }) => {
|
|
593
|
+
const locale = params?.locale as string;
|
|
594
|
+
|
|
595
|
+
const t = <T,>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
596
|
+
|
|
597
|
+
const metadata = {
|
|
598
|
+
title: t({
|
|
599
|
+
pt: "Meu Site",
|
|
600
|
+
en: "My Website",
|
|
601
|
+
fr: "Mon Site Web",
|
|
602
|
+
es: "Mi Sitio Web",
|
|
603
|
+
}),
|
|
604
|
+
description: t({
|
|
605
|
+
pt: "Bem-vindo ao meu site.",
|
|
606
|
+
en: "Welcome to my website.",
|
|
607
|
+
fr: "Bienvenue sur mon site Web.",
|
|
608
|
+
es: "Bienvenido a mi sitio web.",
|
|
609
|
+
}),
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
return {
|
|
613
|
+
props: {
|
|
614
|
+
locale,
|
|
615
|
+
metadata,
|
|
616
|
+
},
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
export default HomePage;
|
|
621
|
+
|
|
622
|
+
// ... Resto do código incluindo getStaticPaths
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
626
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
627
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
628
|
+
import { useIntlayer } from "next-intlayer";
|
|
629
|
+
|
|
630
|
+
const HomePage = ({ metadata }) => {
|
|
631
|
+
// Os metadados podem ser usados no head ou em outros componentes conforme necessário
|
|
632
|
+
return (
|
|
633
|
+
<div>
|
|
634
|
+
<Head>
|
|
635
|
+
<title>{metadata.title}</title>
|
|
636
|
+
<meta name="description" content={metadata.description} />
|
|
637
|
+
</Head>
|
|
638
|
+
|
|
639
|
+
{/* Conteúdo adicional */}
|
|
640
|
+
</div>
|
|
641
|
+
);
|
|
642
|
+
};
|
|
643
|
+
|
|
644
|
+
export const getStaticProps = async ({ params }) => {
|
|
645
|
+
const locale = params?.locale as string;
|
|
646
|
+
|
|
647
|
+
const t = (content) =>
|
|
648
|
+
getTranslation(content, locale);
|
|
649
|
+
|
|
650
|
+
const metadata = {
|
|
651
|
+
title: t({
|
|
652
|
+
pt: "Meu Site",
|
|
653
|
+
en: "My Website",
|
|
654
|
+
fr: "Mon Site Web",
|
|
655
|
+
es: "Mi Sitio Web",
|
|
656
|
+
}),
|
|
657
|
+
description: t({
|
|
658
|
+
pt: "Bem-vindo ao meu site.",
|
|
659
|
+
en: "Welcome to my website.",
|
|
660
|
+
fr: "Bienvenue sur mon site Web.",
|
|
661
|
+
es: "Bienvenido a mi sitio web.",
|
|
662
|
+
}),
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
return {
|
|
666
|
+
props: {
|
|
667
|
+
locale,
|
|
668
|
+
metadata,
|
|
669
|
+
},
|
|
670
|
+
};
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
export default HomePage;
|
|
674
|
+
|
|
675
|
+
// ... Resto do código incluindo getStaticPaths
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
679
|
+
const { GetStaticPaths, GetStaticProps } = require("next");
|
|
680
|
+
const { type IConfigLocales, getTranslation, Locales } = require("intlayer");
|
|
681
|
+
const { useIntlayer } = require("next-intlayer");
|
|
682
|
+
|
|
683
|
+
const HomePage = ({ metadata }) => {
|
|
684
|
+
// Os metadados podem ser usados no head ou em outros componentes conforme necessário
|
|
685
|
+
return (
|
|
686
|
+
<div>
|
|
687
|
+
<Head>
|
|
688
|
+
<title>{metadata.title}</title>
|
|
689
|
+
<meta name="description" content={metadata.description} />
|
|
690
|
+
</Head>
|
|
691
|
+
|
|
692
|
+
{/* Conteúdo adicional */}
|
|
693
|
+
</div>
|
|
694
|
+
);
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
const getStaticProps = async ({ params }) => {
|
|
698
|
+
const locale = params?.locale;
|
|
699
|
+
|
|
700
|
+
const t = (content) =>
|
|
701
|
+
getTranslation(content, locale);
|
|
702
|
+
|
|
703
|
+
const metadata = {
|
|
704
|
+
title: t({
|
|
705
|
+
pt: "Meu Site",
|
|
706
|
+
en: "My Website",
|
|
707
|
+
fr: "Mon Site Web",
|
|
708
|
+
es: "Mi Sitio Web",
|
|
709
|
+
}),
|
|
710
|
+
description: t({
|
|
711
|
+
pt: "Bem-vindo ao meu site.",
|
|
712
|
+
en: "Welcome to my website.",
|
|
713
|
+
fr: "Bienvenue sur mon site Web.",
|
|
714
|
+
es: "Bienvenido a mi sitio web.",
|
|
715
|
+
}),
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
return {
|
|
719
|
+
props: {
|
|
720
|
+
locale,
|
|
721
|
+
metadata,
|
|
722
|
+
},
|
|
723
|
+
};
|
|
724
|
+
};
|
|
725
|
+
|
|
726
|
+
module.exports = {
|
|
727
|
+
getStaticProps,
|
|
728
|
+
getStaticPaths,
|
|
729
|
+
default: HomePage,
|
|
730
|
+
};
|
|
731
|
+
|
|
732
|
+
// ... Resto do código incluindo getStaticPaths
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
### (Opcional) Etapa 9: Alterar o Idioma do Seu Conteúdo
|
|
736
|
+
|
|
737
|
+
Para alterar o idioma do seu conteúdo no Next.js, a maneira recomendada é usar o componente `Link` para redirecionar os usuários para a página localizada apropriada. O componente `Link` permite o pré-carregamento da página, o que ajuda a evitar um recarregamento completo da página.
|
|
738
|
+
|
|
739
|
+
```tsx fileName="src/components/LanguageSwitcher.tsx" codeFormat="typescript"
|
|
740
|
+
import {
|
|
741
|
+
Locales,
|
|
742
|
+
getHTMLTextDir,
|
|
743
|
+
getLocaleName,
|
|
744
|
+
getLocalizedUrl,
|
|
745
|
+
} from "intlayer";
|
|
746
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
747
|
+
import { type FC } from "react";
|
|
748
|
+
import Link from "next/link";
|
|
749
|
+
|
|
750
|
+
const LocaleSwitcher: FC = () => {
|
|
751
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
752
|
+
useLocalePageRouter();
|
|
753
|
+
|
|
754
|
+
return (
|
|
755
|
+
<div>
|
|
756
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
757
|
+
<div id="localePopover" popover="auto">
|
|
758
|
+
{availableLocales.map((localeItem) => (
|
|
759
|
+
<Link
|
|
760
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
761
|
+
hrefLang={localeItem}
|
|
762
|
+
key={localeItem}
|
|
763
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
764
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
765
|
+
>
|
|
766
|
+
<span>
|
|
767
|
+
{/* Locale - ex.: FR */}
|
|
768
|
+
{localeItem}
|
|
769
|
+
</span>
|
|
770
|
+
<span>
|
|
771
|
+
{/* Idioma no próprio Locale - ex.: Français */}
|
|
772
|
+
{getLocaleName(localeItem, locale)}
|
|
773
|
+
</span>
|
|
774
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
775
|
+
{/* Idioma no Locale atual - ex.: Francés com o locale atual definido como Locales.SPANISH */}
|
|
776
|
+
{getLocaleName(localeItem)}
|
|
777
|
+
</span>
|
|
778
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
779
|
+
{/* Idioma em Inglês - ex.: French */}
|
|
780
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
781
|
+
</span>
|
|
782
|
+
</Link>
|
|
783
|
+
))}
|
|
784
|
+
</div>
|
|
785
|
+
</div>
|
|
786
|
+
);
|
|
787
|
+
};
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="esm"
|
|
791
|
+
import {
|
|
792
|
+
Locales,
|
|
793
|
+
getHTMLTextDir,
|
|
794
|
+
getLocaleName,
|
|
795
|
+
getLocalizedUrl,
|
|
796
|
+
} from "intlayer";
|
|
797
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
798
|
+
|
|
799
|
+
const LocaleSwitcher = () => {
|
|
800
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
801
|
+
useLocalePageRouter();
|
|
802
|
+
|
|
803
|
+
return (
|
|
804
|
+
<div>
|
|
805
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
806
|
+
<div id="localePopover" popover="auto">
|
|
807
|
+
{availableLocales.map((localeItem) => (
|
|
808
|
+
<Link
|
|
809
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
810
|
+
hrefLang={localeItem}
|
|
811
|
+
key={localeItem}
|
|
812
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
813
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
814
|
+
>
|
|
815
|
+
<span>
|
|
816
|
+
{/* Locale - ex.: FR */}
|
|
817
|
+
{localeItem}
|
|
818
|
+
</span>
|
|
819
|
+
<span>
|
|
820
|
+
{/* Idioma no próprio Locale - ex.: Français */}
|
|
821
|
+
{getLocaleName(localeItem, locale)}
|
|
822
|
+
</span>
|
|
823
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
824
|
+
{/* Idioma no Locale atual - ex.: Francés com o locale atual definido como Locales.SPANISH */}
|
|
825
|
+
{getLocaleName(localeItem)}
|
|
826
|
+
</span>
|
|
827
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
828
|
+
{/* Idioma em Inglês - ex.: French */}
|
|
829
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
830
|
+
</span>
|
|
831
|
+
</Link>
|
|
832
|
+
))}
|
|
833
|
+
</div>
|
|
834
|
+
</div>
|
|
835
|
+
);
|
|
836
|
+
};
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="commonjs"
|
|
840
|
+
const {
|
|
841
|
+
Locales,
|
|
842
|
+
getHTMLTextDir,
|
|
843
|
+
getLocaleName,
|
|
844
|
+
getLocalizedUrl,
|
|
845
|
+
} = require("intlayer");
|
|
846
|
+
const { useLocalePageRouter } = require("next-intlayer");
|
|
847
|
+
|
|
848
|
+
const LocaleSwitcher = () => {
|
|
849
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
850
|
+
useLocalePageRouter();
|
|
851
|
+
|
|
852
|
+
return (
|
|
853
|
+
<select>
|
|
854
|
+
{availableLocales.map((localeItem) => (
|
|
855
|
+
<option value={localeItem} key={localeItem}>
|
|
856
|
+
<a
|
|
857
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
858
|
+
hrefLang={localeItem}
|
|
859
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
860
|
+
onClick={(e) => {
|
|
861
|
+
e.preventDefault();
|
|
862
|
+
setLocale(localeItem);
|
|
863
|
+
}}
|
|
864
|
+
>
|
|
865
|
+
<span>
|
|
866
|
+
{/* Localidade - ex. FR */}
|
|
867
|
+
{localeItem}
|
|
868
|
+
</span>
|
|
869
|
+
<span>
|
|
870
|
+
{/* Idioma na sua própria Localidade - ex. Français */}
|
|
871
|
+
{getLocaleName(localeItem, locale)}
|
|
872
|
+
</span>
|
|
873
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
874
|
+
{/* Idioma na Localidade atual - ex. Francés com a localidade atual definida como Locales.SPANISH */}
|
|
875
|
+
{getLocaleName(localeItem)}
|
|
876
|
+
</span>
|
|
877
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
878
|
+
{/* Idioma em Inglês - ex. French */}
|
|
879
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
880
|
+
</span>
|
|
881
|
+
</a>
|
|
882
|
+
</option>
|
|
883
|
+
))}
|
|
884
|
+
</select>
|
|
885
|
+
);
|
|
886
|
+
};
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
> A API `useLocalePageRouter` é a mesma que `useLocale`. Para saber mais sobre o hook `useLocale`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/next-intlayer/useLocale.md).
|
|
890
|
+
|
|
891
|
+
> Referências da documentação:
|
|
892
|
+
|
|
893
|
+
> - [Hook `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getLocaleName.md)
|
|
894
|
+
|
|
895
|
+
> - [Hook `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getLocalizedUrl.md)
|
|
896
|
+
|
|
897
|
+
> - [Hook `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/pt/packages/intlayer/getHTMLTextDir.md)
|
|
898
|
+
|
|
899
|
+
> - [Atributo `hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
900
|
+
|
|
901
|
+
> - [Atributo `lang`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
|
|
902
|
+
|
|
903
|
+
> - [Atributo `dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
|
|
904
|
+
|
|
905
|
+
> - [Atributo `aria-current`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
906
|
+
|
|
907
|
+
### (Opcional) Etapa 10: Criando um Componente de Link Localizado
|
|
908
|
+
|
|
909
|
+
Para garantir que a navegação da sua aplicação respeite a localidade atual, você pode criar um componente `Link` personalizado. Este componente automaticamente adiciona um prefixo aos URLs internos com o idioma atual. Por exemplo, quando um usuário que fala francês clica em um link para a página "Sobre", ele é redirecionado para `/fr/about` em vez de `/about`.
|
|
910
|
+
|
|
911
|
+
Esse comportamento é útil por várias razões:
|
|
912
|
+
|
|
913
|
+
- **SEO e Experiência do Usuário**: URLs localizados ajudam os motores de busca a indexar corretamente as páginas específicas de idioma e fornecem aos usuários conteúdo no idioma preferido.
|
|
914
|
+
- **Consistência**: Usando um link localizado em toda a aplicação, você garante que a navegação permaneça na localidade atual, evitando mudanças inesperadas de idioma.
|
|
915
|
+
- **Manutenibilidade**: Centralizar a lógica de localização em um único componente simplifica o gerenciamento de URLs, tornando sua base de código mais fácil de manter e expandir à medida que sua aplicação cresce.
|
|
916
|
+
|
|
917
|
+
Abaixo está a implementação de um componente `Link` localizado em TypeScript:
|
|
918
|
+
|
|
919
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
920
|
+
"use client";
|
|
921
|
+
|
|
922
|
+
import { getLocalizedUrl } from "intlayer";
|
|
923
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
924
|
+
import { useLocale } from "next-intlayer";
|
|
925
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Função utilitária para verificar se um URL é externo.
|
|
929
|
+
* Se o URL começar com http:// ou https://, ele é considerado externo.
|
|
930
|
+
*/
|
|
931
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
932
|
+
/^https?:\/\//.test(href ?? "");
|
|
933
|
+
|
|
934
|
+
/**
|
|
935
|
+
* Um componente de Link personalizado que adapta o atributo href com base na localidade atual.
|
|
936
|
+
* Para links internos, ele usa `getLocalizedUrl` para prefixar o URL com a localidade (ex.: /fr/about).
|
|
937
|
+
* Isso garante que a navegação permaneça no mesmo contexto de localidade.
|
|
938
|
+
*/
|
|
939
|
+
export const Link = forwardRef<
|
|
940
|
+
HTMLAnchorElement,
|
|
941
|
+
PropsWithChildren<NextLinkProps>
|
|
942
|
+
>(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
|
|
943
|
+
const { locale } = useLocale();
|
|
944
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
945
|
+
|
|
946
|
+
// Se o link for interno e um href válido for fornecido, obtenha o URL localizado.
|
|
947
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
948
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
949
|
+
|
|
950
|
+
return (
|
|
951
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
952
|
+
{children}
|
|
953
|
+
</NextLink>
|
|
954
|
+
);
|
|
955
|
+
});
|
|
956
|
+
|
|
957
|
+
Link.displayName = "Link";
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
961
|
+
'use client';
|
|
962
|
+
|
|
963
|
+
import { getLocalizedUrl } from 'intlayer';
|
|
964
|
+
import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
|
|
965
|
+
import { useLocale } from 'next-intlayer';
|
|
966
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
|
|
967
|
+
|
|
968
|
+
/**
|
|
969
|
+
* Função utilitária para verificar se um URL é externo.
|
|
970
|
+
* Se o URL começar com http:// ou https://, ele é considerado externo.
|
|
971
|
+
*/
|
|
972
|
+
export const checkIsExternalLink = (href) =>
|
|
973
|
+
/^https?:\/\//.test(href ?? '');
|
|
974
|
+
|
|
975
|
+
/**
|
|
976
|
+
* Um componente de Link personalizado que adapta o atributo href com base na localidade atual.
|
|
977
|
+
* Para links internos, ele usa `getLocalizedUrl` para prefixar o URL com a localidade (ex.: /fr/about).
|
|
978
|
+
* Isso garante que a navegação permaneça no mesmo contexto de localidade.
|
|
979
|
+
*/
|
|
980
|
+
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
981
|
+
const { locale } = useLocale();
|
|
982
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
983
|
+
|
|
984
|
+
// Se o link for interno e um href válido for fornecido, obtenha o URL localizado.
|
|
985
|
+
const hrefI18n =
|
|
986
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
987
|
+
|
|
988
|
+
return (
|
|
989
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
990
|
+
{children}
|
|
991
|
+
</NextLink>
|
|
992
|
+
);
|
|
993
|
+
});
|
|
994
|
+
|
|
995
|
+
Link.displayName = 'Link';
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
999
|
+
'use client';
|
|
1000
|
+
|
|
1001
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
1002
|
+
const NextLink = require("next/link");
|
|
1003
|
+
const { useLocale } = require("next-intlayer");
|
|
1004
|
+
const { forwardRef } = require("react");
|
|
1005
|
+
|
|
1006
|
+
/**
|
|
1007
|
+
* Função utilitária para verificar se um URL é externo.
|
|
1008
|
+
* Se o URL começar com http:// ou https://, ele é considerado externo.
|
|
1009
|
+
*/
|
|
1010
|
+
const checkIsExternalLink = (href) =>
|
|
1011
|
+
/^https?:\/\//.test(href ?? '');
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1015
|
+
const { locale } = useLocale();
|
|
1016
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1017
|
+
|
|
1018
|
+
// Se o link for interno e um href válido for fornecido, obtenha o URL localizado.
|
|
1019
|
+
const hrefI18n: NextLinkProps['href'] =
|
|
1020
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1021
|
+
|
|
1022
|
+
return (
|
|
1023
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
1024
|
+
{children}
|
|
1025
|
+
</NextLink>
|
|
1026
|
+
);
|
|
1027
|
+
});
|
|
1028
|
+
|
|
1029
|
+
Link.displayName = 'Link';
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
#### Como Funciona
|
|
1033
|
+
|
|
1034
|
+
- **Detectando Links Externos**:
|
|
1035
|
+
A função auxiliar `checkIsExternalLink` determina se um URL é externo. Links externos permanecem inalterados porque não precisam de localização.
|
|
1036
|
+
|
|
1037
|
+
- **Recuperando a Localidade Atual**:
|
|
1038
|
+
O hook `useLocale` fornece a localidade atual (ex.: `fr` para francês).
|
|
1039
|
+
|
|
1040
|
+
- **Localizando o URL**:
|
|
1041
|
+
Para links internos (ou seja, não externos), `getLocalizedUrl` é usado para prefixar automaticamente o URL com a localidade atual. Isso significa que, se o usuário estiver em francês, passar `/about` como `href` será transformado em `/fr/about`.
|
|
1042
|
+
|
|
1043
|
+
- **Retornando o Link**:
|
|
1044
|
+
O componente retorna um elemento `<a>` com o URL localizado, garantindo que a navegação seja consistente com a localidade.
|
|
1045
|
+
|
|
1046
|
+
### (Opcional) Passo 11: Otimize o tamanho do seu bundle
|
|
1047
|
+
|
|
1048
|
+
Ao usar o `next-intlayer`, os dicionários são incluídos no bundle de cada página por padrão. Para otimizar o tamanho do bundle, o Intlayer fornece um plugin SWC opcional que substitui inteligentemente as chamadas `useIntlayer` usando macros. Isso garante que os dicionários sejam incluídos apenas nos bundles das páginas que realmente os utilizam.
|
|
1049
|
+
|
|
1050
|
+
Para habilitar essa otimização, instale o pacote `@intlayer/swc`. Uma vez instalado, o `next-intlayer` detectará automaticamente e usará o plugin:
|
|
1051
|
+
|
|
1052
|
+
```bash packageManager="npm"
|
|
1053
|
+
npm install @intlayer/swc --save-dev
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
```bash packageManager="pnpm"
|
|
1057
|
+
pnpm add @intlayer/swc --save-dev
|
|
1058
|
+
```
|
|
1059
|
+
|
|
1060
|
+
```bash packageManager="yarn"
|
|
1061
|
+
yarn add @intlayer/swc --save-dev
|
|
1062
|
+
```
|
|
1063
|
+
|
|
1064
|
+
> Nota: Esta otimização só está disponível em Next.js 13 e superior.
|
|
1065
|
+
|
|
1066
|
+
> Nota: Este pacote não é instalado por padrão porque o plugin SWC ainda está em fase experimental no Next.js. Isso pode mudar no futuro.
|
|
1067
|
+
|
|
1068
|
+
### Configurar TypeScript
|
|
1069
|
+
|
|
1070
|
+
O Intlayer utiliza a ampliação de módulos para aproveitar os benefícios do TypeScript e tornar sua base de código mais robusta.
|
|
1071
|
+
|
|
1072
|
+

|
|
1073
|
+
|
|
1074
|
+

|
|
1075
|
+
|
|
1076
|
+
Certifique-se de que sua configuração do TypeScript inclua os tipos gerados automaticamente.
|
|
1077
|
+
|
|
1078
|
+
```json5 fileName="tsconfig.json"
|
|
1079
|
+
{
|
|
1080
|
+
// ... Suas configurações existentes do TypeScript
|
|
1081
|
+
"include": [
|
|
1082
|
+
// ... Suas configurações existentes do TypeScript
|
|
1083
|
+
".intlayer/**/*.ts", // Inclua os tipos gerados automaticamente
|
|
1084
|
+
],
|
|
1085
|
+
}
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
### Configuração do Git
|
|
1089
|
+
|
|
1090
|
+
Para manter seu repositório limpo e evitar o commit de arquivos gerados, é recomendado ignorar os arquivos criados pelo Intlayer.
|
|
1091
|
+
|
|
1092
|
+
Adicione as seguintes linhas ao seu arquivo `.gitignore`:
|
|
1093
|
+
|
|
1094
|
+
```plaintext fileName=".gitignore"
|
|
1095
|
+
# Ignore os arquivos gerados pelo Intlayer
|
|
1096
|
+
.intlayer
|
|
1097
|
+
```
|
|
1098
|
+
|
|
1099
|
+
## Recursos Adicionais
|
|
1100
|
+
|
|
1101
|
+
- **Documentação do Intlayer:** [Repositório no GitHub](https://github.com/aymericzip/intlayer)
|
|
1102
|
+
- **Guia do Dicionário:** [Dicionário](https://github.com/aymericzip/intlayer/blob/main/docs/pt/dictionary/get_started.md)
|
|
1103
|
+
- **Documentação de Configuração:** [Guia de Configuração](https://github.com/aymericzip/intlayer/blob/main/docs/pt/configuration.md)
|
|
1104
|
+
|
|
1105
|
+
Seguindo este guia, você pode integrar efetivamente o Intlayer em sua aplicação Next.js usando o Page Router, permitindo suporte robusto e escalável à internacionalização para seus projetos web.
|
|
1106
|
+
|
|
1107
|
+
### Avance Mais
|
|
1108
|
+
|
|
1109
|
+
Para ir além, você pode implementar o [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_visual_editor.md) ou externalizar seu conteúdo usando o [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/pt/intlayer_CMS.md).
|