@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,1100 @@
|
|
|
1
|
+
# Начало работы с интернационализацией (i18n) с Intlayer и Next.js, используя Page Router
|
|
2
|
+
|
|
3
|
+
## Что такое Intlayer?
|
|
4
|
+
|
|
5
|
+
**Intlayer** , это инновационная, открытая библиотека интернационализации (i18n), разработанная для упрощения поддержки многоязычности в современных веб-приложениях. Intlayer бесшовно интегрируется с последней версией фреймворка **Next.js**, включая его традиционный **Page Router**.
|
|
6
|
+
|
|
7
|
+
С помощью Intlayer вы можете:
|
|
8
|
+
|
|
9
|
+
- **Легко управлять переводами** с использованием декларативных словарей на уровне компонентов.
|
|
10
|
+
- **Динамически локализовать метаданные**, маршруты и контент.
|
|
11
|
+
- **Обеспечить поддержку TypeScript** с автогенерацией типов, улучшая автодополнение и обнаружение ошибок.
|
|
12
|
+
- **Использовать расширенные функции**, такие как динамическое определение и переключение локали.
|
|
13
|
+
|
|
14
|
+
> Intlayer совместим с Next.js 12, 13, 14 и 15. Если вы используете Next.js App Router, обратитсь к [руководству по App Router](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_with_nextjs_14.md). Для Next.js 15 следуйте этому [руководству](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_with_nextjs_15.md).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Пошаговое руководство по настройке Intlayer в приложении Next.js с использованием Page Router
|
|
19
|
+
|
|
20
|
+
### Шаг 1: Установите зависимости
|
|
21
|
+
|
|
22
|
+
Установите необходимые пакеты, используя предпочитаемый менеджер пакетов:
|
|
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
|
+
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, переводами, [декларацией контента](https://github.com/aymericzip/intlayer/blob/main/docs/ru/dictionary/get_started.md), транспиляцией и [CLI-командами](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_cli.md).
|
|
39
|
+
|
|
40
|
+
- **next-intlayer**
|
|
41
|
+
|
|
42
|
+
Пакет, интегрирующий Intlayer с Next.js. Он предоставляет провайдеры контекста и хуки для интернационализации в Next.js. Кроме того, он включает плагин Next.js для интеграции Intlayer с [Webpack](https://webpack.js.org/) или [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), а также middleware для определения предпочтительной локали пользователя, управления cookies и обработки перенаправлений URL.
|
|
43
|
+
|
|
44
|
+
### Шаг 2: Настройте ваш проект
|
|
45
|
+
|
|
46
|
+
Создайте файл конфигурации для определения языков, поддерживаемых вашим приложением:
|
|
47
|
+
|
|
48
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
49
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
50
|
+
|
|
51
|
+
const config: IntlayerConfig = {
|
|
52
|
+
internationalization: {
|
|
53
|
+
locales: [
|
|
54
|
+
Locales.ENGLISH,
|
|
55
|
+
Locales.FRENCH,
|
|
56
|
+
Locales.SPANISH,
|
|
57
|
+
// Добавьте другие локали здесь
|
|
58
|
+
],
|
|
59
|
+
defaultLocale: Locales.ENGLISH,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export default config;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
67
|
+
import { Locales } from "intlayer";
|
|
68
|
+
|
|
69
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
70
|
+
const config = {
|
|
71
|
+
internationalization: {
|
|
72
|
+
locales: [
|
|
73
|
+
Locales.ENGLISH,
|
|
74
|
+
Locales.FRENCH,
|
|
75
|
+
Locales.SPANISH,
|
|
76
|
+
// Добавьте другие локали здесь
|
|
77
|
+
],
|
|
78
|
+
defaultLocale: Locales.ENGLISH,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export default config;
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
86
|
+
const { Locales } = require("intlayer");
|
|
87
|
+
|
|
88
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
89
|
+
const config = {
|
|
90
|
+
internationalization: {
|
|
91
|
+
locales: [
|
|
92
|
+
Locales.ENGLISH,
|
|
93
|
+
Locales.FRENCH,
|
|
94
|
+
Locales.SPANISH,
|
|
95
|
+
// Добавьте другие локали здесь
|
|
96
|
+
],
|
|
97
|
+
defaultLocale: Locales.ENGLISH,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
module.exports = config;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
> С помощью этого файла конфигурации вы можете настроить локализованные URL, перенаправления middleware, имена cookies, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/configuration.md).
|
|
105
|
+
|
|
106
|
+
### Шаг 3: Интеграция Intlayer с конфигурацией Next.js
|
|
107
|
+
|
|
108
|
+
Измените конфигурацию Next.js для включения Intlayer:
|
|
109
|
+
|
|
110
|
+
```typescript fileName="next.config.mjs"
|
|
111
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
112
|
+
|
|
113
|
+
/** @type {import('next').NextConfig} */
|
|
114
|
+
const nextConfig = {
|
|
115
|
+
// Ваша существующая конфигурация Next.js
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export default withIntlayer(nextConfig);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
> Плагин `withIntlayer()` для Next.js используется для интеграции Intlayer с Next.js. Он обеспечивает построение файлов декларации контента и их мониторинг в режиме разработки. Он определяет переменные окружения Intlayer в средах [Webpack](https://webpack.js.org/) или [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). Кроме того, он предоставляет алиасы для оптимизации производительности и гарантирует совместимость с серверными компонентами.
|
|
122
|
+
|
|
123
|
+
### Шаг 4: Настройка Middleware для определения локали
|
|
124
|
+
|
|
125
|
+
Настройте middleware для автоматического определения и обработки предпочтительной локали пользователя:
|
|
126
|
+
|
|
127
|
+
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
128
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
129
|
+
|
|
130
|
+
export const config = {
|
|
131
|
+
matcher:
|
|
132
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
133
|
+
};
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
137
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
138
|
+
|
|
139
|
+
export const config = {
|
|
140
|
+
matcher:
|
|
141
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
142
|
+
};
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
146
|
+
const { intlayerMiddleware } = require("next-intlayer/middleware");
|
|
147
|
+
|
|
148
|
+
const config = {
|
|
149
|
+
matcher:
|
|
150
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
module.exports = { middleware: intlayerMiddleware, config };
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
> Настройте параметр `matcher` для соответствия маршрутам вашего приложения. Для получения дополнительной информации обратитесь к [документации Next.js по настройке matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
|
|
157
|
+
|
|
158
|
+
### Шаг 5: Определение динамических маршрутов локали
|
|
159
|
+
|
|
160
|
+
Реализуйте динамическую маршрутизацию для предоставления локализованного контента на основе локали пользователя.
|
|
161
|
+
|
|
162
|
+
1. **Создайте страницы для конкретных локалей:**
|
|
163
|
+
|
|
164
|
+
Переименуйте основной файл страницы, чтобы включить динамический сегмент `[locale]`.
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
mv src/pages/index.tsx src/pages/[locale]/index.tsx
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
2. **Обновите `_app.tsx` для обработки локализации:**
|
|
171
|
+
|
|
172
|
+
Измените ваш `_app.tsx`, чтобы включить провайдеры Intlayer.
|
|
173
|
+
|
|
174
|
+
```tsx fileName="src/pages/_app.tsx" codeFormat="typescript"
|
|
175
|
+
import type { FC } from "react";
|
|
176
|
+
import type { AppProps } from "next/app";
|
|
177
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
178
|
+
|
|
179
|
+
const App = FC<AppProps>({ Component, pageProps }) => {
|
|
180
|
+
const { locale } = pageProps;
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<IntlayerClientProvider locale={locale}>
|
|
184
|
+
<Component {...pageProps} />
|
|
185
|
+
</IntlayerClientProvider>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export default MyApp;
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```jsx fileName="src/pages/_app.mjx" codeFormat="esm"
|
|
193
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
194
|
+
|
|
195
|
+
const App = ({ Component, pageProps }) => (
|
|
196
|
+
<IntlayerClientProvider locale={locale}>
|
|
197
|
+
<Component {...pageProps} />
|
|
198
|
+
</IntlayerClientProvider>
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
export default App;
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```jsx fileName="src/pages/_app.csx" codeFormat="commonjs"
|
|
205
|
+
const { IntlayerClientProvider } = require("next-intlayer");
|
|
206
|
+
|
|
207
|
+
const App = ({ Component, pageProps }) => (
|
|
208
|
+
<IntlayerClientProvider locale={locale}>
|
|
209
|
+
<Component {...pageProps} />
|
|
210
|
+
</IntlayerClientProvider>
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
module.exports = App;
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
3. **Настройте `getStaticPaths` и `getStaticProps`:**
|
|
217
|
+
|
|
218
|
+
В вашем `[locale]/index.tsx` определите пути и свойства для обработки различных локалей.
|
|
219
|
+
|
|
220
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
221
|
+
import type { FC } from "react";
|
|
222
|
+
import type { GetStaticPaths, GetStaticProps } from "next";
|
|
223
|
+
import { type Locales, getConfiguration } from "intlayer";
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
const HomePage: FC = () => <div>{/_ Ваш контент здесь _/}</div>;
|
|
227
|
+
|
|
228
|
+
export const getStaticPaths: GetStaticPaths = () => {
|
|
229
|
+
const { internationalization } = getConfiguration();
|
|
230
|
+
const { locales } = internationalization;
|
|
231
|
+
|
|
232
|
+
const paths = locales.map((locale) => ({
|
|
233
|
+
params: { locale },
|
|
234
|
+
}));
|
|
235
|
+
|
|
236
|
+
return { paths, fallback: false };
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
export const getStaticProps: GetStaticProps = ({ params }) => {
|
|
240
|
+
const locale = params?.locale as string;
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
props: {
|
|
244
|
+
locale,
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export default HomePage;
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
253
|
+
import { getConfiguration } from "intlayer";
|
|
254
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
255
|
+
|
|
256
|
+
const HomePage = () => <div>{/* Ваш контент здесь */}</div>;
|
|
257
|
+
|
|
258
|
+
export const getStaticPaths = () => {
|
|
259
|
+
const { internationalization } = getConfiguration();
|
|
260
|
+
const { locales } = internationalization;
|
|
261
|
+
|
|
262
|
+
const paths = locales.map((locale) => ({
|
|
263
|
+
params: { locale },
|
|
264
|
+
}));
|
|
265
|
+
|
|
266
|
+
return { paths, fallback: false };
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
export const getStaticProps = ({ params }) => {
|
|
270
|
+
const locale = params?.locale;
|
|
271
|
+
|
|
272
|
+
return {
|
|
273
|
+
props: {
|
|
274
|
+
locale,
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
281
|
+
const { getConfiguration } = require("intlayer");
|
|
282
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
283
|
+
|
|
284
|
+
const HomePage = () => <div>{/* Ваш контент здесь */}</div>;
|
|
285
|
+
|
|
286
|
+
const getStaticPaths = async () => {
|
|
287
|
+
const { internationalization } = getConfiguration();
|
|
288
|
+
const { locales } = internationalization;
|
|
289
|
+
|
|
290
|
+
const paths = locales.map((locale) => ({
|
|
291
|
+
params: { locale },
|
|
292
|
+
}));
|
|
293
|
+
|
|
294
|
+
return { paths, fallback: false };
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const getStaticProps = async ({ params }) => {
|
|
298
|
+
const locale = params?.locale;
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
props: {
|
|
302
|
+
locale,
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
module.exports = {
|
|
308
|
+
getStaticProps,
|
|
309
|
+
getStaticPaths,
|
|
310
|
+
default: HomePage,
|
|
311
|
+
};
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
> `getStaticPaths` и `getStaticProps` обеспечивают предварительную сборку необходимых страниц для всех локалей в маршрутизаторе страниц Next.js. Этот подход снижает вычисления во время выполнения и улучшает пользовательский опыт. Для получения дополнительной информации обратитесь к документации Next.js по [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) и [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props).
|
|
315
|
+
|
|
316
|
+
### Шаг 6: Объявите ваш контент
|
|
317
|
+
|
|
318
|
+
Создайте и управляйте объявлениями контента для хранения переводов.
|
|
319
|
+
|
|
320
|
+
```tsx fileName="src/pages/[locale]/home.content.ts" contentDeclarationFormat="typescript"
|
|
321
|
+
import { t, type Dictionary } from "intlayer";
|
|
322
|
+
|
|
323
|
+
const homeContent = {
|
|
324
|
+
key: "home",
|
|
325
|
+
content: {
|
|
326
|
+
title: t({
|
|
327
|
+
ru: "Добро пожаловать на мой сайт",
|
|
328
|
+
en: "Welcome to My Website",
|
|
329
|
+
fr: "Bienvenue sur mon site Web",
|
|
330
|
+
es: "Bienvenido a mi sitio web",
|
|
331
|
+
}),
|
|
332
|
+
description: t({
|
|
333
|
+
ru: "Начните с редактирования этой страницы.",
|
|
334
|
+
en: "Get started by editing this page.",
|
|
335
|
+
fr: "Commencez par éditer cette page.",
|
|
336
|
+
es: "Comience por editar esta página.",
|
|
337
|
+
}),
|
|
338
|
+
},
|
|
339
|
+
} satisfies Dictionary;
|
|
340
|
+
|
|
341
|
+
export default homeContent;
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
```javascript fileName="src/pages/[locale]/home.content.mjs" contentDeclarationFormat="esm"
|
|
345
|
+
import { t } from "intlayer";
|
|
346
|
+
|
|
347
|
+
/** @type {import('intlayer').Dictionary} */
|
|
348
|
+
const homeContent = {
|
|
349
|
+
key: "home",
|
|
350
|
+
content: {
|
|
351
|
+
getStarted: {
|
|
352
|
+
main: t({
|
|
353
|
+
ru: "Начните с редактирования этой страницы.",
|
|
354
|
+
en: "Get started by editing this page.",
|
|
355
|
+
fr: "Commencez par éditer cette page.",
|
|
356
|
+
es: "Comience por editar esta página.",
|
|
357
|
+
}),
|
|
358
|
+
pageLink: "src/app/page.tsx",
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
export default homeContent;
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
```javascript fileName="src/pages/[locale]/home.content.cjs" contentDeclarationFormat="commonjs"
|
|
367
|
+
const { t } = require("intlayer");
|
|
368
|
+
|
|
369
|
+
/** @type {import('intlayer').Dictionary} */
|
|
370
|
+
const homeContent = {
|
|
371
|
+
key: "home",
|
|
372
|
+
content: {
|
|
373
|
+
getStarted: {
|
|
374
|
+
main: t({
|
|
375
|
+
ru: "Начните с редактирования этой страницы.",
|
|
376
|
+
en: "Get started by editing this page.",
|
|
377
|
+
fr: "Commencez par éditer cette page.",
|
|
378
|
+
es: "Comience por editar esta página.",
|
|
379
|
+
}),
|
|
380
|
+
pageLink: "src/app/page.tsx",
|
|
381
|
+
},
|
|
382
|
+
},
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
module.exports = homeContent;
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
```json fileName="src/pages/[locale]/home.content.json" contentDeclarationFormat="json"
|
|
389
|
+
{
|
|
390
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
391
|
+
"key": "home",
|
|
392
|
+
"content": {
|
|
393
|
+
"getStarted": {
|
|
394
|
+
"nodeType": "translation",
|
|
395
|
+
"translation": {
|
|
396
|
+
"ru": "Начните с редактирования этой страницы.",
|
|
397
|
+
"en": "Get started by editing this page.",
|
|
398
|
+
"fr": "Commencez par éditer cette page.",
|
|
399
|
+
"es": "Comience por editar esta página."
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"pageLink": {
|
|
403
|
+
"nodeType": "translation",
|
|
404
|
+
"translation": {
|
|
405
|
+
"ru": "src/app/page.tsx",
|
|
406
|
+
"en": "src/app/page.tsx",
|
|
407
|
+
"fr": "src/app/page.tsx",
|
|
408
|
+
"es": "src/app/page.tsx"
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
Для получения дополнительной информации об объявлении контента обратитесь к [руководству по объявлению контента](https://github.com/aymericzip/intlayer/blob/main/docs/ru/dictionary/get_started.md).
|
|
416
|
+
|
|
417
|
+
### Шаг 7: Используйте контент в вашем коде
|
|
418
|
+
|
|
419
|
+
Получите доступ к словарям контента в вашем приложении для отображения переведенного контента.
|
|
420
|
+
|
|
421
|
+
```tsx {2,6} fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
422
|
+
import type { FC } from "react";
|
|
423
|
+
import { useIntlayer } from "next-intlayer";
|
|
424
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
425
|
+
|
|
426
|
+
const HomePage: FC = () => {
|
|
427
|
+
const content = useIntlayer("home");
|
|
428
|
+
|
|
429
|
+
return (
|
|
430
|
+
<div>
|
|
431
|
+
<h1>{content.title}</h1>
|
|
432
|
+
<p>{content.description}</p>
|
|
433
|
+
<ComponentExample />
|
|
434
|
+
{/* Дополнительные компоненты */}
|
|
435
|
+
</div>
|
|
436
|
+
);
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
// ... Остальная часть кода, включая getStaticPaths и getStaticProps
|
|
440
|
+
|
|
441
|
+
export default HomePage;
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
445
|
+
import { useIntlayer } from "next-intlayer";
|
|
446
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
447
|
+
|
|
448
|
+
const HomePage = () => {
|
|
449
|
+
const content = useIntlayer("home");
|
|
450
|
+
|
|
451
|
+
return (
|
|
452
|
+
<div>
|
|
453
|
+
<h1>{content.getStarted.main}</h1>
|
|
454
|
+
<code>{content.getStarted.pageLink}</code>
|
|
455
|
+
|
|
456
|
+
<ComponentExample />
|
|
457
|
+
{/* Дополнительные компоненты */}
|
|
458
|
+
</div>
|
|
459
|
+
);
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
// ... Остальная часть кода, включая getStaticPaths и getStaticProps
|
|
463
|
+
|
|
464
|
+
export default HomePage;
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
468
|
+
const { useIntlayer } = require("next-intlayer");
|
|
469
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
470
|
+
|
|
471
|
+
const HomePage = () => {
|
|
472
|
+
const content = useIntlayer("home");
|
|
473
|
+
|
|
474
|
+
return (
|
|
475
|
+
<div>
|
|
476
|
+
<h1>{content.getStarted.main}</h1>
|
|
477
|
+
<code>{content.getStarted.pageLink}</code>
|
|
478
|
+
|
|
479
|
+
<ComponentExample />
|
|
480
|
+
{/* Дополнительные компоненты */}
|
|
481
|
+
</div>
|
|
482
|
+
);
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
// ... Остальная часть кода, включая getStaticPaths и getStaticProps
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
489
|
+
import type { FC } from "react";
|
|
490
|
+
import { useIntlayer } from "next-intlayer";
|
|
491
|
+
|
|
492
|
+
export const ComponentExample: FC = () => {
|
|
493
|
+
const content = useIntlayer("component-example"); // Убедитесь, что у вас есть соответствующее объявление контента
|
|
494
|
+
|
|
495
|
+
return (
|
|
496
|
+
<div>
|
|
497
|
+
<h2>{content.title}</h2>
|
|
498
|
+
<p>{content.content}</p>
|
|
499
|
+
</div>
|
|
500
|
+
);
|
|
501
|
+
};
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
```jsx fileName="src/components/ComponentExample.mjx" codeFormat="esm"
|
|
505
|
+
import { useIntlayer } from "next-intlayer";
|
|
506
|
+
|
|
507
|
+
const ComponentExample = () => {
|
|
508
|
+
const content = useIntlayer("component-example"); // Убедитесь, что у вас есть соответствующее объявление контента
|
|
509
|
+
|
|
510
|
+
return (
|
|
511
|
+
<div>
|
|
512
|
+
<h2>{content.title}</h2>
|
|
513
|
+
<p>{content.content}</p>
|
|
514
|
+
</div>
|
|
515
|
+
);
|
|
516
|
+
};
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
```jsx fileName="src/components/ComponentExample.csx" codeFormat="commonjs"
|
|
520
|
+
const { useIntlayer } = require("next-intlayer");
|
|
521
|
+
|
|
522
|
+
const ComponentExample = () => {
|
|
523
|
+
const content = useIntlayer("component-example"); // Убедитесь, что у вас есть соответствующее объявление контента
|
|
524
|
+
|
|
525
|
+
return (
|
|
526
|
+
<div>
|
|
527
|
+
<h2>{content.title}</h2>
|
|
528
|
+
<p>{content.content}</p>
|
|
529
|
+
</div>
|
|
530
|
+
);
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
};
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
> При использовании переводов в атрибутах `string` (например, `alt`, `title`, `href`, `aria-label`), вызовите
|
|
537
|
+
|
|
538
|
+
> значение функции следующим образом:
|
|
539
|
+
|
|
540
|
+
> ```jsx
|
|
541
|
+
>
|
|
542
|
+
> ```
|
|
543
|
+
|
|
544
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
545
|
+
|
|
546
|
+
> ```
|
|
547
|
+
>
|
|
548
|
+
> ```
|
|
549
|
+
|
|
550
|
+
> Чтобы узнать больше о хуке `useIntlayer`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/next-intlayer/useIntlayer.md).
|
|
551
|
+
|
|
552
|
+
### (Необязательно) Шаг 8: Интернационализация метаданных
|
|
553
|
+
|
|
554
|
+
Для интернационализации метаданных, таких как заголовки страниц и описания, используйте функцию `getStaticProps` в сочетании с функцией `getTranslation` из Intlayer.
|
|
555
|
+
|
|
556
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
557
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
558
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
559
|
+
import { useIntlayer } from "next-intlayer";
|
|
560
|
+
|
|
561
|
+
interface HomePageProps {
|
|
562
|
+
locale: string;
|
|
563
|
+
metadata: Metadata;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
const HomePage = ({ metadata }: HomePageProps) => {
|
|
567
|
+
// Метаданные могут использоваться в head или других компонентах по мере необходимости
|
|
568
|
+
return (
|
|
569
|
+
<div>
|
|
570
|
+
<Head>
|
|
571
|
+
<title>{metadata.title}</title>
|
|
572
|
+
<meta name="description" content={metadata.description} />
|
|
573
|
+
</Head>
|
|
574
|
+
|
|
575
|
+
{/* Дополнительный контент */}
|
|
576
|
+
</div>
|
|
577
|
+
);
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
export const getStaticProps: GetStaticProps = async ({ params }) => {
|
|
581
|
+
const locale = params?.locale as string;
|
|
582
|
+
|
|
583
|
+
const t = <T,>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
584
|
+
|
|
585
|
+
const metadata = {
|
|
586
|
+
title: t({
|
|
587
|
+
ru: "Мой Вебсайт",
|
|
588
|
+
en: "My Website",
|
|
589
|
+
fr: "Mon Site Web",
|
|
590
|
+
es: "Mi Sitio Web",
|
|
591
|
+
}),
|
|
592
|
+
description: t({
|
|
593
|
+
ru: "Добро пожаловать на мой вебсайт.",
|
|
594
|
+
en: "Welcome to my website.",
|
|
595
|
+
fr: "Bienvenue sur mon site Web.",
|
|
596
|
+
es: "Bienvenido a mi sitio web.",
|
|
597
|
+
}),
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
return {
|
|
601
|
+
props: {
|
|
602
|
+
locale,
|
|
603
|
+
metadata,
|
|
604
|
+
},
|
|
605
|
+
};
|
|
606
|
+
};
|
|
607
|
+
|
|
608
|
+
export default HomePage;
|
|
609
|
+
|
|
610
|
+
// ... Остальная часть кода, включая getStaticPaths
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
614
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
615
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
616
|
+
import { useIntlayer } from "next-intlayer";
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
const HomePage = ({ metadata }) => {
|
|
621
|
+
// Метаданные могут использоваться в head или других компонентах по мере необходимости
|
|
622
|
+
return (
|
|
623
|
+
<div>
|
|
624
|
+
<Head>
|
|
625
|
+
<title>{metadata.title}</title>
|
|
626
|
+
<meta name="description" content={metadata.description} />
|
|
627
|
+
</Head>
|
|
628
|
+
|
|
629
|
+
{/* Дополнительный контент */}
|
|
630
|
+
</div>
|
|
631
|
+
);
|
|
632
|
+
};
|
|
633
|
+
|
|
634
|
+
export const getStaticProps = async ({ params }) => {
|
|
635
|
+
const locale = params?.locale as string;
|
|
636
|
+
|
|
637
|
+
const t = (content) =>
|
|
638
|
+
getTranslation(content, locale);
|
|
639
|
+
|
|
640
|
+
const metadata = {
|
|
641
|
+
title: t({
|
|
642
|
+
ru: "Мой Вебсайт",
|
|
643
|
+
en: "My Website",
|
|
644
|
+
fr: "Mon Site Web",
|
|
645
|
+
es: "Mi Sitio Web",
|
|
646
|
+
}),
|
|
647
|
+
description: t({
|
|
648
|
+
ru: "Добро пожаловать на мой вебсайт.",
|
|
649
|
+
en: "Welcome to my website.",
|
|
650
|
+
fr: "Bienvenue sur mon site Web.",
|
|
651
|
+
es: "Bienvenido a mi sitio web.",
|
|
652
|
+
}),
|
|
653
|
+
};
|
|
654
|
+
|
|
655
|
+
return {
|
|
656
|
+
props: {
|
|
657
|
+
locale,
|
|
658
|
+
metadata,
|
|
659
|
+
},
|
|
660
|
+
};
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
export default HomePage;
|
|
664
|
+
|
|
665
|
+
// ... Остальная часть кода, включая getStaticPaths
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
669
|
+
const { GetStaticPaths, GetStaticProps } = require("next");
|
|
670
|
+
const { type IConfigLocales, getTranslation, Locales } = require("intlayer");
|
|
671
|
+
const { useIntlayer } = require("next-intlayer");
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
const HomePage = ({ metadata }) => {
|
|
675
|
+
// Метаданные могут использоваться в head или других компонентах по мере необходимости
|
|
676
|
+
return (
|
|
677
|
+
<div>
|
|
678
|
+
<Head>
|
|
679
|
+
<title>{metadata.title}</title>
|
|
680
|
+
<meta name="description" content={metadata.description} />
|
|
681
|
+
</Head>
|
|
682
|
+
|
|
683
|
+
{/* Дополнительный контент */}
|
|
684
|
+
</div>
|
|
685
|
+
);
|
|
686
|
+
};
|
|
687
|
+
|
|
688
|
+
const getStaticProps = async ({ params }) => {
|
|
689
|
+
const locale = params?.locale;
|
|
690
|
+
|
|
691
|
+
const t = (content) =>
|
|
692
|
+
getTranslation(content, locale);
|
|
693
|
+
|
|
694
|
+
const metadata = {
|
|
695
|
+
title: t({
|
|
696
|
+
ru: "Мой Вебсайт",
|
|
697
|
+
en: "My Website",
|
|
698
|
+
fr: "Mon Site Web",
|
|
699
|
+
es: "Mi Sitio Web",
|
|
700
|
+
}),
|
|
701
|
+
description: t({
|
|
702
|
+
ru: "Добро пожаловать на мой вебсайт.",
|
|
703
|
+
en: "Welcome to my website.",
|
|
704
|
+
fr: "Bienvenue sur mon site Web.",
|
|
705
|
+
es: "Bienvenido a mi sitio web.",
|
|
706
|
+
}),
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
return {
|
|
710
|
+
props: {
|
|
711
|
+
locale,
|
|
712
|
+
metadata,
|
|
713
|
+
},
|
|
714
|
+
};
|
|
715
|
+
};
|
|
716
|
+
|
|
717
|
+
module.exports = {
|
|
718
|
+
getStaticProps,
|
|
719
|
+
getStaticPaths,
|
|
720
|
+
default: HomePage,
|
|
721
|
+
};
|
|
722
|
+
|
|
723
|
+
// ... Остальная часть кода, включая getStaticPaths
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
### (Необязательно) Шаг 9: Изменение языка вашего контента
|
|
727
|
+
|
|
728
|
+
Чтобы изменить язык вашего контента в Next.js, рекомендуется использовать компонент `Link` для перенаправления пользователей на соответствующую локализованную страницу. Компонент `Link` позволяет предварительно загружать страницу, что помогает избежать полной перезагрузки страницы.
|
|
729
|
+
|
|
730
|
+
```tsx fileName="src/components/LanguageSwitcher.tsx" codeFormat="typescript"
|
|
731
|
+
import {
|
|
732
|
+
Locales,
|
|
733
|
+
getHTMLTextDir,
|
|
734
|
+
getLocaleName,
|
|
735
|
+
getLocalizedUrl,
|
|
736
|
+
} from "intlayer";
|
|
737
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
738
|
+
import { type FC } from "react";
|
|
739
|
+
import Link from "next/link";
|
|
740
|
+
|
|
741
|
+
const LocaleSwitcher: FC = () => {
|
|
742
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
743
|
+
useLocalePageRouter();
|
|
744
|
+
|
|
745
|
+
return (
|
|
746
|
+
<div>
|
|
747
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
748
|
+
<div id="localePopover" popover="auto">
|
|
749
|
+
{availableLocales.map((localeItem) => (
|
|
750
|
+
<Link
|
|
751
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
752
|
+
hrefLang={localeItem}
|
|
753
|
+
key={localeItem}
|
|
754
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
755
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
756
|
+
>
|
|
757
|
+
<span>
|
|
758
|
+
{/* Локаль - например, FR */}
|
|
759
|
+
{localeItem}
|
|
760
|
+
</span>
|
|
761
|
+
<span>
|
|
762
|
+
{/* Язык в своей локали - например, Français */}
|
|
763
|
+
{getLocaleName(localeItem, locale)}
|
|
764
|
+
</span>
|
|
765
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
766
|
+
{/* Язык в текущей локали - например, Francés с текущей локалью Locales.SPANISH */}
|
|
767
|
+
{getLocaleName(localeItem)}
|
|
768
|
+
</span>
|
|
769
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
770
|
+
{/* Язык на английском - например, French */}
|
|
771
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
772
|
+
</span>
|
|
773
|
+
</Link>
|
|
774
|
+
))}
|
|
775
|
+
</div>
|
|
776
|
+
</div>
|
|
777
|
+
);
|
|
778
|
+
};
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="esm"
|
|
782
|
+
import {
|
|
783
|
+
Locales,
|
|
784
|
+
getHTMLTextDir,
|
|
785
|
+
getLocaleName,
|
|
786
|
+
getLocalizedUrl,
|
|
787
|
+
} from "intlayer";
|
|
788
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
789
|
+
|
|
790
|
+
const LocaleSwitcher = () => {
|
|
791
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
792
|
+
useLocalePageRouter();
|
|
793
|
+
|
|
794
|
+
return (
|
|
795
|
+
<div>
|
|
796
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
797
|
+
<div id="localePopover" popover="auto">
|
|
798
|
+
{availableLocales.map((localeItem) => (
|
|
799
|
+
<Link
|
|
800
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
801
|
+
hrefLang={localeItem}
|
|
802
|
+
key={localeItem}
|
|
803
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
804
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
805
|
+
>
|
|
806
|
+
<span>
|
|
807
|
+
{/* Локаль - например, FR */}
|
|
808
|
+
{localeItem}
|
|
809
|
+
</span>
|
|
810
|
+
<span>
|
|
811
|
+
{/* Язык в своей локали - например, Français */}
|
|
812
|
+
{getLocaleName(localeItem, locale)}
|
|
813
|
+
</span>
|
|
814
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
815
|
+
{/* Язык в текущей локали - например, Francés с текущей локалью Locales.SPANISH */}
|
|
816
|
+
{getLocaleName(localeItem)}
|
|
817
|
+
</span>
|
|
818
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
819
|
+
{/* Язык на английском - например, French */}
|
|
820
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
821
|
+
</span>
|
|
822
|
+
</Link>
|
|
823
|
+
))}
|
|
824
|
+
</div>
|
|
825
|
+
</div>
|
|
826
|
+
);
|
|
827
|
+
};
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="commonjs"
|
|
831
|
+
const {
|
|
832
|
+
Locales,
|
|
833
|
+
getHTMLTextDir,
|
|
834
|
+
getLocaleName,
|
|
835
|
+
getLocalizedUrl,
|
|
836
|
+
} = require("intlayer");
|
|
837
|
+
const { useLocalePageRouter } = require("next-intlayer");
|
|
838
|
+
|
|
839
|
+
const LocaleSwitcher = () => {
|
|
840
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
841
|
+
useLocalePageRouter();
|
|
842
|
+
|
|
843
|
+
return (
|
|
844
|
+
<select>
|
|
845
|
+
{availableLocales.map((localeItem) => (
|
|
846
|
+
<option value={localeItem} key={localeItem}>
|
|
847
|
+
<a
|
|
848
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
849
|
+
hrefLang={localeItem}
|
|
850
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
851
|
+
onClick={(e) => {
|
|
852
|
+
e.preventDefault();
|
|
853
|
+
setLocale(localeItem);
|
|
854
|
+
}}
|
|
855
|
+
>
|
|
856
|
+
<span>
|
|
857
|
+
{/* Локаль - например, FR */}
|
|
858
|
+
{localeItem}
|
|
859
|
+
</span>
|
|
860
|
+
<span>
|
|
861
|
+
{/* Язык на своем собственном языке - например, Français */}
|
|
862
|
+
{getLocaleName(localeItem, locale)}
|
|
863
|
+
</span>
|
|
864
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
865
|
+
{/* Язык на текущей локали - например, Francés, если текущая локаль установлена на Locales.SPANISH */}
|
|
866
|
+
{getLocaleName(localeItem)}
|
|
867
|
+
</span>
|
|
868
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
869
|
+
{/* Язык на английском - например, French */}
|
|
870
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
871
|
+
</span>
|
|
872
|
+
</a>
|
|
873
|
+
</option>
|
|
874
|
+
))}
|
|
875
|
+
</select>
|
|
876
|
+
);
|
|
877
|
+
};
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
> API `useLocalePageRouter` идентичен `useLocale`. Чтобы узнать больше о хуке `useLocale`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/next-intlayer/useLocale.md).
|
|
881
|
+
|
|
882
|
+
> Ссылки на документацию:
|
|
883
|
+
|
|
884
|
+
> - [Хук `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getLocaleName.md)
|
|
885
|
+
|
|
886
|
+
> - [Хук `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getLocalizedUrl.md)
|
|
887
|
+
|
|
888
|
+
> - [Хук `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getHTMLTextDir.md)
|
|
889
|
+
|
|
890
|
+
> - [Атрибут `hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=ru)
|
|
891
|
+
|
|
892
|
+
> - [Атрибут `lang`](https://developer.mozilla.org/ru/docs/Web/HTML/Global_attributes/lang)
|
|
893
|
+
|
|
894
|
+
> - [Атрибут `dir`](https://developer.mozilla.org/ru/docs/Web/HTML/Global_attributes/dir)
|
|
895
|
+
|
|
896
|
+
> - [Атрибут `aria-current`](https://developer.mozilla.org/ru/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
897
|
+
|
|
898
|
+
### (Опционально) Шаг 10: Создание локализованного компонента ссылки
|
|
899
|
+
|
|
900
|
+
Чтобы обеспечить соблюдение текущей локали при навигации в вашем приложении, вы можете создать пользовательский компонент `Link`. Этот компонент автоматически добавляет префикс к внутренним URL-адресам с текущим языком. Например, когда пользователь, говорящий на французском, нажимает на ссылку на страницу "О нас", он перенаправляется на `/ru/about` вместо `/about`.
|
|
901
|
+
|
|
902
|
+
Это поведение полезно по нескольким причинам:
|
|
903
|
+
|
|
904
|
+
- **SEO и пользовательский опыт**: Локализованные URL-адреса помогают поисковым системам корректно индексировать страницы на определенных языках и предоставляют пользователям контент на их предпочтительном языке.
|
|
905
|
+
- **Согласованность**: Используя локализованную ссылку по всему приложению, вы гарантируете, что навигация остается в рамках текущей локали, предотвращая неожиданные переключения языка.
|
|
906
|
+
- **Поддерживаемость**: Централизация логики локализации в одном компоненте упрощает управление URL-адресами, делая ваш код более удобным для поддержки и расширения по мере роста приложения.
|
|
907
|
+
|
|
908
|
+
Ниже приведена реализация локализованного компонента `Link` на TypeScript:
|
|
909
|
+
|
|
910
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
911
|
+
"use client";
|
|
912
|
+
|
|
913
|
+
import { getLocalizedUrl } from "intlayer";
|
|
914
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
915
|
+
import { useLocale } from "next-intlayer";
|
|
916
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
|
|
917
|
+
|
|
918
|
+
/**
|
|
919
|
+
* Утилита для проверки, является ли данный URL внешним.
|
|
920
|
+
* Если URL начинается с http:// или https://, он считается внешним.
|
|
921
|
+
*/
|
|
922
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
923
|
+
/^https?:\/\//.test(href ?? "");
|
|
924
|
+
|
|
925
|
+
/**
|
|
926
|
+
* Пользовательский компонент Link, который адаптирует атрибут href в зависимости от текущей локали.
|
|
927
|
+
* Для внутренних ссылок используется `getLocalizedUrl` для добавления префикса URL с локалью (например, /fr/about).
|
|
928
|
+
* Это гарантирует, что навигация остается в рамках текущей локали.
|
|
929
|
+
*/
|
|
930
|
+
export const Link = forwardRef<
|
|
931
|
+
HTMLAnchorElement,
|
|
932
|
+
PropsWithChildren<NextLinkProps>
|
|
933
|
+
>(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
|
|
934
|
+
const { locale } = useLocale();
|
|
935
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
936
|
+
|
|
937
|
+
// Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
|
|
938
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
939
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
940
|
+
|
|
941
|
+
return (
|
|
942
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
943
|
+
{children}
|
|
944
|
+
</NextLink>
|
|
945
|
+
);
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
Link.displayName = "Link";
|
|
949
|
+
```
|
|
950
|
+
|
|
951
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
952
|
+
'use client';
|
|
953
|
+
|
|
954
|
+
import { getLocalizedUrl } from 'intlayer';
|
|
955
|
+
import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
|
|
956
|
+
import { useLocale } from 'next-intlayer';
|
|
957
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
|
|
958
|
+
|
|
959
|
+
/**
|
|
960
|
+
* Утилита для проверки, является ли данный URL внешним.
|
|
961
|
+
* Если URL начинается с http:// или https://, он считается внешним.
|
|
962
|
+
*/
|
|
963
|
+
export const checkIsExternalLink = (href) =>
|
|
964
|
+
/^https?:\/\//.test(href ?? '');
|
|
965
|
+
|
|
966
|
+
/**
|
|
967
|
+
* Пользовательский компонент Link, который адаптирует атрибут href в зависимости от текущей локали.
|
|
968
|
+
* Для внутренних ссылок используется `getLocalizedUrl` для добавления префикса URL с локалью (например, /fr/about).
|
|
969
|
+
* Это гарантирует, что навигация остается в рамках текущей локали.
|
|
970
|
+
*/
|
|
971
|
+
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
972
|
+
const { locale } = useLocale();
|
|
973
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
974
|
+
|
|
975
|
+
// Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
|
|
976
|
+
const hrefI18n =
|
|
977
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
978
|
+
|
|
979
|
+
return (
|
|
980
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
981
|
+
{children}
|
|
982
|
+
</NextLink>
|
|
983
|
+
);
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
Link.displayName = 'Link';
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
990
|
+
'use client';
|
|
991
|
+
|
|
992
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
993
|
+
const NextLink = require("next/link");
|
|
994
|
+
const { useLocale } = require("next-intlayer");
|
|
995
|
+
const { forwardRef } = require("react");
|
|
996
|
+
|
|
997
|
+
/**
|
|
998
|
+
* Утилита для проверки, является ли данный URL внешним.
|
|
999
|
+
* Если URL начинается с http:// или https://, он считается внешним.
|
|
1000
|
+
*/
|
|
1001
|
+
const checkIsExternalLink = (href) =>
|
|
1002
|
+
/^https?:\/\//.test(href ?? '');
|
|
1003
|
+
|
|
1004
|
+
|
|
1005
|
+
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1006
|
+
const { locale } = useLocale();
|
|
1007
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1008
|
+
|
|
1009
|
+
// Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
|
|
1010
|
+
const hrefI18n: NextLinkProps['href'] =
|
|
1011
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1012
|
+
|
|
1013
|
+
return (
|
|
1014
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
1015
|
+
{children}
|
|
1016
|
+
</NextLink>
|
|
1017
|
+
);
|
|
1018
|
+
});
|
|
1019
|
+
|
|
1020
|
+
Link.displayName = 'Link';
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
#### Как это работает
|
|
1024
|
+
|
|
1025
|
+
- **Определение внешних ссылок**:
|
|
1026
|
+
Вспомогательная функция `checkIsExternalLink` определяет, является ли URL внешним. Внешние ссылки остаются неизменными, так как они не требуют локализации.
|
|
1027
|
+
|
|
1028
|
+
- **Получение текущей локали**:
|
|
1029
|
+
Хук `useLocale` предоставляет текущую локаль (например, `fr` для французского).
|
|
1030
|
+
|
|
1031
|
+
- **Локализация URL**:
|
|
1032
|
+
Для внутренних ссылок (т.е. не внешних) используется `getLocalizedUrl`, чтобы автоматически добавлять префикс URL с текущей локалью. Это означает, что если пользователь находится на французском языке, передача `/about` в качестве `href` преобразуется в `/fr/about`.
|
|
1033
|
+
|
|
1034
|
+
- **Возврат ссылки**:
|
|
1035
|
+
Компонент возвращает элемент `<a>` с локализованным URL, обеспечивая согласованность навигации с локалью.
|
|
1036
|
+
|
|
1037
|
+
### (Опционально) Шаг 11: Оптимизация размера вашего бандла
|
|
1038
|
+
|
|
1039
|
+
При использовании `next-intlayer` словари по умолчанию включаются в бандл для каждой страницы. Чтобы оптимизировать размер бандла, Intlayer предоставляет опциональный SWC плагин, который интеллектуально заменяет вызовы `useIntlayer` с помощью макросов. Это гарантирует, что словари включаются только в бандлы тех страниц, которые их действительно используют.
|
|
1040
|
+
|
|
1041
|
+
Чтобы включить эту оптимизацию, установите пакет `@intlayer/swc`. После установки `next-intlayer` автоматически обнаружит и использует плагин:
|
|
1042
|
+
|
|
1043
|
+
```bash packageManager="npm"
|
|
1044
|
+
npm install @intlayer/swc --save-dev
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
```bash packageManager="pnpm"
|
|
1048
|
+
pnpm add @intlayer/swc --save-dev
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
```bash packageManager="yarn"
|
|
1052
|
+
yarn add @intlayer/swc --save-dev
|
|
1053
|
+
```
|
|
1054
|
+
|
|
1055
|
+
> Примечание: Эта оптимизация доступна только в Next.js 13 и выше.
|
|
1056
|
+
|
|
1057
|
+
> Примечание: Этот пакет не устанавливается по умолчанию, потому что плагин SWC еще находится на этапе экспериментального использования в Next.js. Это может измениться в будущем.
|
|
1058
|
+
|
|
1059
|
+
### Настройка TypeScript
|
|
1060
|
+
|
|
1061
|
+
Intlayer использует расширение модулей для получения преимуществ TypeScript и укрепления вашей кодовой базы.
|
|
1062
|
+
|
|
1063
|
+

|
|
1064
|
+
|
|
1065
|
+

|
|
1066
|
+
|
|
1067
|
+
Убедитесь, что ваша конфигурация TypeScript включает автоматически сгенерированные типы.
|
|
1068
|
+
|
|
1069
|
+
```json5 fileName="tsconfig.json"
|
|
1070
|
+
{
|
|
1071
|
+
// ... Ваши существующие конфигурации TypeScript
|
|
1072
|
+
"include": [
|
|
1073
|
+
// ... Ваши существующие конфигурации TypeScript
|
|
1074
|
+
".intlayer/**/*.ts", // Включите автоматически сгенерированные типы
|
|
1075
|
+
],
|
|
1076
|
+
}
|
|
1077
|
+
```
|
|
1078
|
+
|
|
1079
|
+
### Конфигурация Git
|
|
1080
|
+
|
|
1081
|
+
Чтобы сохранить ваш репозиторий чистым и избежать коммита сгенерированных файлов, рекомендуется игнорировать файлы, созданные Intlayer.
|
|
1082
|
+
|
|
1083
|
+
Добавьте следующие строки в ваш файл `.gitignore`:
|
|
1084
|
+
|
|
1085
|
+
```plaintext fileName=".gitignore"
|
|
1086
|
+
# Игнорировать файлы, созданные Intlayer
|
|
1087
|
+
.intlayer
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
## Дополнительные ресурсы
|
|
1091
|
+
|
|
1092
|
+
- **Документация Intlayer:** [Репозиторий GitHub](https://github.com/aymericzip/intlayer)
|
|
1093
|
+
- **Руководство по словарю:** [Словарь](https://github.com/aymericzip/intlayer/blob/main/docs/ru/dictionary/get_started.md)
|
|
1094
|
+
- **Документация по конфигурации:** [Руководство по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/configuration.md)
|
|
1095
|
+
|
|
1096
|
+
Следуя этому руководству, вы сможете эффективно интегрировать Intlayer в ваше приложение Next.js, используя Page Router, что обеспечит надежную и масштабируемую поддержку интернационализации для ваших веб-проектов.
|
|
1097
|
+
|
|
1098
|
+
### Дальнейшие шаги
|
|
1099
|
+
|
|
1100
|
+
Чтобы пойти дальше, вы можете внедрить [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_visual_editor.md) или вынести ваш контент с помощью [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_CMS.md).
|