@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,1087 @@
|
|
|
1
|
+
# Erste Schritte mit der Internationalisierung (i18n) mit Intlayer und Next.js unter Verwendung des Page Routers
|
|
2
|
+
|
|
3
|
+
## Was ist Intlayer?
|
|
4
|
+
|
|
5
|
+
**Intlayer** ist eine innovative, Open-Source-Internationalisierungsbibliothek (i18n), die entwickelt wurde, um die Unterstützung mehrerer Sprachen in modernen Webanwendungen zu vereinfachen. Intlayer integriert sich nahtlos in das neueste **Next.js**-Framework, einschließlich seines traditionellen **Page Routers**.
|
|
6
|
+
|
|
7
|
+
Mit Intlayer können Sie:
|
|
8
|
+
|
|
9
|
+
- **Übersetzungen einfach verwalten** mithilfe deklarativer Wörterbücher auf Komponentenebene.
|
|
10
|
+
- **Metadaten, Routen und Inhalte dynamisch lokalisieren**.
|
|
11
|
+
- **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die die Autovervollständigung und Fehlererkennung verbessern.
|
|
12
|
+
- **Von erweiterten Funktionen profitieren**, wie dynamische Spracherkennung und -umschaltung.
|
|
13
|
+
|
|
14
|
+
> Intlayer ist kompatibel mit Next.js 12, 13, 14 und 15. Wenn Sie den Next.js App Router verwenden, lesen Sie den [App Router Guide](https://github.com/aymericzip/intlayer/blob/main/docs/de/intlayer_with_nextjs_14.md). Für Next.js 15 folgen Sie dieser [Anleitung](https://github.com/aymericzip/intlayer/blob/main/docs/de/intlayer_with_nextjs_15.md).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Schritt-für-Schritt-Anleitung zur Einrichtung von Intlayer in einer Next.js-Anwendung mit Page Router
|
|
19
|
+
|
|
20
|
+
### Schritt 1: Abhängigkeiten installieren
|
|
21
|
+
|
|
22
|
+
Installieren Sie die erforderlichen Pakete mit Ihrem bevorzugten Paketmanager:
|
|
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
|
+
Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/de/dictionary/get_started.md), Transpilation und [CLI-Befehle](https://github.com/aymericzip/intlayer/blob/main/docs/de/intlayer_cli.md) bereitstellt.
|
|
39
|
+
|
|
40
|
+
- **next-intlayer**
|
|
41
|
+
|
|
42
|
+
Das Paket, das Intlayer mit Next.js integriert. Es bietet Kontextanbieter und Hooks für die Internationalisierung in Next.js. Außerdem enthält es das Next.js-Plugin zur Integration von Intlayer mit [Webpack](https://webpack.js.org/) oder [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) sowie Middleware zur Erkennung der bevorzugten Sprache des Benutzers, Verwaltung von Cookies und Behandlung von URL-Weiterleitungen.
|
|
43
|
+
|
|
44
|
+
### Schritt 2: Projekt konfigurieren
|
|
45
|
+
|
|
46
|
+
Erstellen Sie eine Konfigurationsdatei, um die von Ihrer Anwendung unterstützten Sprachen zu definieren:
|
|
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
|
+
// Fügen Sie hier weitere Sprachen hinzu
|
|
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
|
+
// Fügen Sie hier weitere Sprachen hinzu
|
|
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
|
+
// Fügen Sie hier weitere Sprachen hinzu
|
|
96
|
+
],
|
|
97
|
+
defaultLocale: Locales.ENGLISH,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
module.exports = config;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
> Über diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen, das Deaktivieren von Intlayer-Protokollen in der Konsole und mehr einrichten. Eine vollständige Liste der verfügbaren Parameter finden Sie in der [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/configuration.md).
|
|
105
|
+
|
|
106
|
+
### Schritt 3: Intlayer in die Next.js-Konfiguration integrieren
|
|
107
|
+
|
|
108
|
+
Ändern Sie Ihre Next.js-Konfiguration, um Intlayer einzubinden:
|
|
109
|
+
|
|
110
|
+
```typescript fileName="next.config.mjs"
|
|
111
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
112
|
+
|
|
113
|
+
/** @type {import('next').NextConfig} */
|
|
114
|
+
const nextConfig = {
|
|
115
|
+
// Ihre bestehende Next.js-Konfiguration
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export default withIntlayer(nextConfig);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
> Das `withIntlayer()` Next.js-Plugin wird verwendet, um Intlayer mit Next.js zu integrieren. Es stellt sicher, dass Inhaltsdeklarationsdateien erstellt und im Entwicklungsmodus überwacht werden. Es definiert Intlayer-Umgebungsvariablen innerhalb der [Webpack](https://webpack.js.org/)- oder [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack)-Umgebungen. Darüber hinaus bietet es Aliase zur Leistungsoptimierung und stellt die Kompatibilität mit Serverkomponenten sicher.
|
|
122
|
+
|
|
123
|
+
### Schritt 4: Middleware für die Spracherkennung konfigurieren
|
|
124
|
+
|
|
125
|
+
Richten Sie Middleware ein, um die bevorzugte Sprache des Benutzers automatisch zu erkennen und zu behandeln:
|
|
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
|
+
> Passen Sie den Parameter `matcher` an, um die Routen Ihrer Anwendung abzugleichen. Weitere Details finden Sie in der [Next.js-Dokumentation zur Konfiguration des Matchers](https://nextjs.org/docs/app/building-your-application/routing/middleware).
|
|
157
|
+
|
|
158
|
+
### Schritt 5: Dynamische Sprachrouten definieren
|
|
159
|
+
|
|
160
|
+
Implementieren Sie dynamisches Routing, um lokalisierte Inhalte basierend auf der Sprache des Benutzers bereitzustellen.
|
|
161
|
+
|
|
162
|
+
1. **Erstellen Sie sprachspezifische Seiten:**
|
|
163
|
+
|
|
164
|
+
Benennen Sie Ihre Hauptseitendatei um, um das dynamische Segment `[locale]` einzuschließen.
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
mv src/pages/index.tsx src/pages/[locale]/index.tsx
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
2. **Aktualisieren Sie `_app.tsx`, um die Lokalisierung zu behandeln:**
|
|
171
|
+
|
|
172
|
+
Ändern Sie Ihre `_app.tsx`, um Intlayer-Anbieter einzuschließen.
|
|
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. **Richten Sie `getStaticPaths` und `getStaticProps` ein:**
|
|
217
|
+
|
|
218
|
+
Definieren Sie in Ihrer `[locale]/index.tsx` die Pfade und Eigenschaften, um verschiedene Sprachen zu behandeln.
|
|
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
|
+
const HomePage: FC = () => <div>{/* Ihr Inhalt hier */}</div>;
|
|
226
|
+
|
|
227
|
+
export const getStaticPaths: GetStaticPaths = () => {
|
|
228
|
+
const { internationalization } = getConfiguration();
|
|
229
|
+
const { locales } = internationalization;
|
|
230
|
+
|
|
231
|
+
const paths = locales.map((locale) => ({
|
|
232
|
+
params: { locale },
|
|
233
|
+
}));
|
|
234
|
+
|
|
235
|
+
return { paths, fallback: false };
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
export const getStaticProps: GetStaticProps = ({ params }) => {
|
|
239
|
+
const locale = params?.locale as string;
|
|
240
|
+
|
|
241
|
+
return {
|
|
242
|
+
props: {
|
|
243
|
+
locale,
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export default HomePage;
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
252
|
+
import { getConfiguration } from "intlayer";
|
|
253
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
254
|
+
|
|
255
|
+
const HomePage = () => <div>{/* Ihr Inhalt hier */}</div>;
|
|
256
|
+
|
|
257
|
+
export const getStaticPaths = () => {
|
|
258
|
+
const { internationalization } = getConfiguration();
|
|
259
|
+
const { locales } = internationalization;
|
|
260
|
+
|
|
261
|
+
const paths = locales.map((locale) => ({
|
|
262
|
+
params: { locale },
|
|
263
|
+
}));
|
|
264
|
+
|
|
265
|
+
return { paths, fallback: false };
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
export const getStaticProps = ({ params }) => {
|
|
269
|
+
const locale = params?.locale;
|
|
270
|
+
|
|
271
|
+
return {
|
|
272
|
+
props: {
|
|
273
|
+
locale,
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
export default HomePage;
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
282
|
+
const { getConfiguration } = require("intlayer");
|
|
283
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
284
|
+
|
|
285
|
+
const HomePage = () => <div>{/* Ihr Inhalt hier */}</div>;
|
|
286
|
+
|
|
287
|
+
const getStaticPaths = async () => {
|
|
288
|
+
const { internationalization } = getConfiguration();
|
|
289
|
+
const { locales } = internationalization;
|
|
290
|
+
|
|
291
|
+
const paths = locales.map((locale) => ({
|
|
292
|
+
params: { locale },
|
|
293
|
+
}));
|
|
294
|
+
|
|
295
|
+
return { paths, fallback: false };
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
const getStaticProps = async ({ params }) => {
|
|
299
|
+
const locale = params?.locale;
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
props: {
|
|
303
|
+
locale,
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
module.exports = {
|
|
309
|
+
getStaticProps,
|
|
310
|
+
getStaticPaths,
|
|
311
|
+
default: HomePage,
|
|
312
|
+
};
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
> `getStaticPaths` und `getStaticProps` stellen sicher, dass Ihre Anwendung die erforderlichen Seiten für alle Sprachen im Next.js Page Router vorab erstellt. Dieser Ansatz reduziert die Laufzeitberechnung und führt zu einer verbesserten Benutzererfahrung. Weitere Details finden Sie in der Next.js-Dokumentation zu [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) und [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props).
|
|
316
|
+
|
|
317
|
+
### Schritt 6: Inhalte deklarieren
|
|
318
|
+
|
|
319
|
+
Erstellen und verwalten Sie Ihre Inhaltsdeklarationen, um Übersetzungen zu speichern.
|
|
320
|
+
|
|
321
|
+
```tsx fileName="src/pages/[locale]/home.content.ts" contentDeclarationFormat="typescript"
|
|
322
|
+
import { t, type Dictionary } from "intlayer";
|
|
323
|
+
|
|
324
|
+
const homeContent = {
|
|
325
|
+
key: "home",
|
|
326
|
+
content: {
|
|
327
|
+
title: t({
|
|
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
|
+
en: "Get started by editing this page.",
|
|
334
|
+
fr: "Commencez par éditer cette page.",
|
|
335
|
+
es: "Comience por editar esta página.",
|
|
336
|
+
}),
|
|
337
|
+
},
|
|
338
|
+
} satisfies Dictionary;
|
|
339
|
+
|
|
340
|
+
export default homeContent;
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
```javascript fileName="src/pages/[locale]/home.content.mjs" contentDeclarationFormat="esm"
|
|
344
|
+
import { t } from "intlayer";
|
|
345
|
+
|
|
346
|
+
/** @type {import('intlayer').Dictionary} */
|
|
347
|
+
const homeContent = {
|
|
348
|
+
key: "home",
|
|
349
|
+
content: {
|
|
350
|
+
getStarted: {
|
|
351
|
+
main: t({
|
|
352
|
+
en: "Get started by editing this page.",
|
|
353
|
+
fr: "Commencez par éditer cette page.",
|
|
354
|
+
es: "Comience por editar esta página.",
|
|
355
|
+
}),
|
|
356
|
+
pageLink: "src/app/page.tsx",
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
export default homeContent;
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
```javascript fileName="src/pages/[locale]/home.content.cjs" contentDeclarationFormat="commonjs"
|
|
365
|
+
const { t } = require("intlayer");
|
|
366
|
+
|
|
367
|
+
/** @type {import('intlayer').Dictionary} */
|
|
368
|
+
const homeContent = {
|
|
369
|
+
key: "home",
|
|
370
|
+
content: {
|
|
371
|
+
getStarted: {
|
|
372
|
+
main: t({
|
|
373
|
+
en: "Get started by editing this page.",
|
|
374
|
+
fr: "Commencez par éditer cette page.",
|
|
375
|
+
es: "Comience por editar esta página.",
|
|
376
|
+
}),
|
|
377
|
+
pageLink: "src/app/page.tsx",
|
|
378
|
+
},
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
module.exports = homeContent;
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
```json fileName="src/pages/[locale]/home.content.json" contentDeclarationFormat="json"
|
|
386
|
+
{
|
|
387
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
388
|
+
"key": "home",
|
|
389
|
+
"content": {
|
|
390
|
+
"getStarted": {
|
|
391
|
+
"nodeType": "translation",
|
|
392
|
+
"translation": {
|
|
393
|
+
"en": "Get started by editing this page.",
|
|
394
|
+
"fr": "Commencez par éditer cette page.",
|
|
395
|
+
"es": "Comience por éditar esta página."
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
"pageLink": {
|
|
399
|
+
"nodeType": "translation",
|
|
400
|
+
"translation": {
|
|
401
|
+
"en": "src/app/page.tsx",
|
|
402
|
+
"fr": "src/app/page.tsx",
|
|
403
|
+
"es": "src/app/page.tsx"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Weitere Informationen zur Deklaration von Inhalten finden Sie im [Leitfaden zur Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/de/dictionary/get_started.md).
|
|
411
|
+
|
|
412
|
+
### Schritt 7: Inhalte im Code verwenden
|
|
413
|
+
|
|
414
|
+
Greifen Sie in Ihrer gesamten Anwendung auf Ihre Inhaltswörterbücher zu, um übersetzte Inhalte anzuzeigen.
|
|
415
|
+
|
|
416
|
+
```tsx {2,6} fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
417
|
+
import type { FC } from "react";
|
|
418
|
+
import { useIntlayer } from "next-intlayer";
|
|
419
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
420
|
+
|
|
421
|
+
const HomePage: FC = () => {
|
|
422
|
+
const content = useIntlayer("home");
|
|
423
|
+
|
|
424
|
+
return (
|
|
425
|
+
<div>
|
|
426
|
+
<h1>{content.title}</h1>
|
|
427
|
+
<p>{content.description}</p>
|
|
428
|
+
<ComponentExample />
|
|
429
|
+
{/* Zusätzliche Komponenten */}
|
|
430
|
+
</div>
|
|
431
|
+
);
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
// ... Restlicher Code, einschließlich getStaticPaths und getStaticProps
|
|
435
|
+
|
|
436
|
+
export default HomePage;
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
440
|
+
import { useIntlayer } from "next-intlayer";
|
|
441
|
+
import { ComponentExample } from "@components/ComponentExample";
|
|
442
|
+
|
|
443
|
+
const HomePage = () => {
|
|
444
|
+
const content = useIntlayer("home");
|
|
445
|
+
|
|
446
|
+
return (
|
|
447
|
+
<div>
|
|
448
|
+
<h1>{content.getStarted.main}</h1>
|
|
449
|
+
<code>{content.getStarted.pageLink}</code>
|
|
450
|
+
|
|
451
|
+
<ComponentExample />
|
|
452
|
+
{/* Zusätzliche Komponenten */}
|
|
453
|
+
</div>
|
|
454
|
+
);
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// ... Restlicher Code, einschließlich getStaticPaths und getStaticProps
|
|
458
|
+
|
|
459
|
+
export default HomePage;
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
```jsx {1,5} fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
463
|
+
const { useIntlayer } = require("next-intlayer");
|
|
464
|
+
const { ComponentExample } = require("@components/ComponentExample");
|
|
465
|
+
|
|
466
|
+
const HomePage = () => {
|
|
467
|
+
const content = useIntlayer("home");
|
|
468
|
+
|
|
469
|
+
return (
|
|
470
|
+
<div>
|
|
471
|
+
<h1>{content.getStarted.main}</h1>
|
|
472
|
+
<code>{content.getStarted.pageLink}</code>
|
|
473
|
+
|
|
474
|
+
<ComponentExample />
|
|
475
|
+
{/* Zusätzliche Komponenten */}
|
|
476
|
+
</div>
|
|
477
|
+
);
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
// ... Restlicher Code, einschließlich getStaticPaths und getStaticProps
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
484
|
+
import type { FC } from "react";
|
|
485
|
+
import { useIntlayer } from "next-intlayer";
|
|
486
|
+
|
|
487
|
+
export const ComponentExample: FC = () => {
|
|
488
|
+
const content = useIntlayer("component-example"); // Stellen Sie sicher, dass Sie eine entsprechende Inhaltsdeklaration haben
|
|
489
|
+
|
|
490
|
+
return (
|
|
491
|
+
<div>
|
|
492
|
+
<h2>{content.title}</h2>
|
|
493
|
+
<p>{content.content}</p>
|
|
494
|
+
</div>
|
|
495
|
+
);
|
|
496
|
+
};
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
```jsx fileName="src/components/ComponentExample.mjx" codeFormat="esm"
|
|
500
|
+
import { useIntlayer } from "next-intlayer";
|
|
501
|
+
|
|
502
|
+
const ComponentExample = () => {
|
|
503
|
+
const content = useIntlayer("component-example"); // Stellen Sie sicher, dass Sie eine entsprechende Inhaltsdeklaration haben
|
|
504
|
+
|
|
505
|
+
return (
|
|
506
|
+
<div>
|
|
507
|
+
<h2>{content.title}</h2>
|
|
508
|
+
<p>{content.content}</p>
|
|
509
|
+
</div>
|
|
510
|
+
);
|
|
511
|
+
};
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
```jsx fileName="src/components/ComponentExample.csx" codeFormat="commonjs"
|
|
515
|
+
const { useIntlayer } = require("next-intlayer");
|
|
516
|
+
|
|
517
|
+
const ComponentExample = () => {
|
|
518
|
+
const content = useIntlayer("component-example"); // Stellen Sie sicher, dass Sie eine entsprechende Inhaltsdeklaration haben
|
|
519
|
+
|
|
520
|
+
return (
|
|
521
|
+
<div>
|
|
522
|
+
<h2>{content.title}</h2>
|
|
523
|
+
<p>{content.content}</p>
|
|
524
|
+
</div>
|
|
525
|
+
);
|
|
526
|
+
};
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
> Wenn Sie Übersetzungen in `string`-Attributen verwenden (z. B. `alt`, `title`, `href`, `aria-label`), rufen Sie den Wert der Funktion wie folgt auf:
|
|
530
|
+
|
|
531
|
+
> ```jsx
|
|
532
|
+
>
|
|
533
|
+
> ```
|
|
534
|
+
|
|
535
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
536
|
+
|
|
537
|
+
> ```
|
|
538
|
+
>
|
|
539
|
+
> ```
|
|
540
|
+
|
|
541
|
+
> Weitere Informationen zum `useIntlayer`-Hook finden Sie in der [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/next-intlayer/useIntlayer.md).
|
|
542
|
+
|
|
543
|
+
### (Optional) Schritt 8: Ihre Metadaten internationalisieren
|
|
544
|
+
|
|
545
|
+
Um Metadaten wie Seitentitel und Beschreibungen zu internationalisieren, verwenden Sie die Funktion `getStaticProps` in Verbindung mit der Funktion `getTranslation` von Intlayer.
|
|
546
|
+
|
|
547
|
+
```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
|
|
548
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
549
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
550
|
+
import { useIntlayer } from "next-intlayer";
|
|
551
|
+
|
|
552
|
+
interface HomePageProps {
|
|
553
|
+
locale: string;
|
|
554
|
+
metadata: Metadata;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
const HomePage = ({ metadata }: HomePageProps) => {
|
|
558
|
+
// Metadaten können im Head oder in anderen Komponenten nach Bedarf verwendet werden
|
|
559
|
+
return (
|
|
560
|
+
<div>
|
|
561
|
+
<Head>
|
|
562
|
+
<title>{metadata.title}</title>
|
|
563
|
+
<meta name="description" content={metadata.description} />
|
|
564
|
+
</Head>
|
|
565
|
+
|
|
566
|
+
{/* Zusätzlicher Inhalt */}
|
|
567
|
+
</div>
|
|
568
|
+
);
|
|
569
|
+
};
|
|
570
|
+
|
|
571
|
+
export const getStaticProps: GetStaticProps = async ({ params }) => {
|
|
572
|
+
const locale = params?.locale as string;
|
|
573
|
+
|
|
574
|
+
const t = <T,>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
575
|
+
|
|
576
|
+
const metadata = {
|
|
577
|
+
title: t({
|
|
578
|
+
en: "My Website",
|
|
579
|
+
fr: "Mon Site Web",
|
|
580
|
+
es: "Mi Sitio Web",
|
|
581
|
+
}),
|
|
582
|
+
description: t({
|
|
583
|
+
en: "Welcome to my website.",
|
|
584
|
+
fr: "Bienvenue sur mon site Web.",
|
|
585
|
+
es: "Bienvenido a mi sitio web.",
|
|
586
|
+
}),
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
return {
|
|
590
|
+
props: {
|
|
591
|
+
locale,
|
|
592
|
+
metadata,
|
|
593
|
+
},
|
|
594
|
+
};
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
export default HomePage;
|
|
598
|
+
|
|
599
|
+
// ... Restlicher Code einschließlich getStaticPaths
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
|
|
603
|
+
import { GetStaticPaths, GetStaticProps } from "next";
|
|
604
|
+
import { type IConfigLocales, getTranslation, Locales } from "intlayer";
|
|
605
|
+
import { useIntlayer } from "next-intlayer";
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
const HomePage = ({ metadata }) => {
|
|
610
|
+
// Metadaten können im Head oder in anderen Komponenten nach Bedarf verwendet werden
|
|
611
|
+
return (
|
|
612
|
+
<div>
|
|
613
|
+
<Head>
|
|
614
|
+
<title>{metadata.title}</title>
|
|
615
|
+
<meta name="description" content={metadata.description} />
|
|
616
|
+
</Head>
|
|
617
|
+
|
|
618
|
+
{/* Zusätzlicher Inhalt */}
|
|
619
|
+
</div>
|
|
620
|
+
);
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
export const getStaticProps = async ({ params }) => {
|
|
624
|
+
const locale = params?.locale as string;
|
|
625
|
+
|
|
626
|
+
const t = (content) =>
|
|
627
|
+
getTranslation(content, locale);
|
|
628
|
+
|
|
629
|
+
const metadata = {
|
|
630
|
+
title: t({
|
|
631
|
+
en: "My Website",
|
|
632
|
+
fr: "Mon Site Web",
|
|
633
|
+
es: "Mi Sitio Web",
|
|
634
|
+
}),
|
|
635
|
+
description: t({
|
|
636
|
+
en: "Welcome to my website.",
|
|
637
|
+
fr: "Bienvenue sur mon site Web.",
|
|
638
|
+
es: "Bienvenido a mi sitio web.",
|
|
639
|
+
}),
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
return {
|
|
643
|
+
props: {
|
|
644
|
+
locale,
|
|
645
|
+
metadata,
|
|
646
|
+
},
|
|
647
|
+
};
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
export default HomePage;
|
|
651
|
+
|
|
652
|
+
// ... Restlicher Code einschließlich getStaticPaths
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
|
|
656
|
+
const { GetStaticPaths, GetStaticProps } = require("next");
|
|
657
|
+
const { type IConfigLocales, getTranslation, Locales } = require("intlayer");
|
|
658
|
+
const { useIntlayer } = require("next-intlayer");
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
const HomePage = ({ metadata }) => {
|
|
662
|
+
// Metadaten können im Head oder in anderen Komponenten nach Bedarf verwendet werden
|
|
663
|
+
return (
|
|
664
|
+
<div>
|
|
665
|
+
<Head>
|
|
666
|
+
<title>{metadata.title}</title>
|
|
667
|
+
<meta name="description" content={metadata.description} />
|
|
668
|
+
</Head>
|
|
669
|
+
|
|
670
|
+
{/* Zusätzlicher Inhalt */}
|
|
671
|
+
</div>
|
|
672
|
+
);
|
|
673
|
+
};
|
|
674
|
+
|
|
675
|
+
const getStaticProps = async ({ params }) => {
|
|
676
|
+
const locale = params?.locale;
|
|
677
|
+
|
|
678
|
+
const t = (content) =>
|
|
679
|
+
getTranslation(content, locale);
|
|
680
|
+
|
|
681
|
+
const metadata = {
|
|
682
|
+
title: t({
|
|
683
|
+
en: "My Website",
|
|
684
|
+
fr: "Mon Site Web",
|
|
685
|
+
es: "Mi Sitio Web",
|
|
686
|
+
}),
|
|
687
|
+
description: t({
|
|
688
|
+
en: "Welcome to my website.",
|
|
689
|
+
fr: "Bienvenue sur mon site Web.",
|
|
690
|
+
es: "Bienvenido a mi sitio web.",
|
|
691
|
+
}),
|
|
692
|
+
};
|
|
693
|
+
|
|
694
|
+
return {
|
|
695
|
+
props: {
|
|
696
|
+
locale,
|
|
697
|
+
metadata,
|
|
698
|
+
},
|
|
699
|
+
};
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
module.exports = {
|
|
703
|
+
getStaticProps,
|
|
704
|
+
getStaticPaths,
|
|
705
|
+
default: HomePage,
|
|
706
|
+
};
|
|
707
|
+
|
|
708
|
+
// ... Restlicher Code einschließlich getStaticPaths
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
### (Optional) Schritt 9: Die Sprache Ihrer Inhalte ändern
|
|
712
|
+
|
|
713
|
+
Um die Sprache Ihrer Inhalte in Next.js zu ändern, wird empfohlen, die `Link`-Komponente zu verwenden, um Benutzer auf die entsprechende lokalisierte Seite umzuleiten. Die `Link`-Komponente ermöglicht das Vorladen der Seite, was hilft, einen vollständigen Seitenneuladen zu vermeiden.
|
|
714
|
+
|
|
715
|
+
```tsx fileName="src/components/LanguageSwitcher.tsx" codeFormat="typescript"
|
|
716
|
+
import {
|
|
717
|
+
Locales,
|
|
718
|
+
getHTMLTextDir,
|
|
719
|
+
getLocaleName,
|
|
720
|
+
getLocalizedUrl,
|
|
721
|
+
} from "intlayer";
|
|
722
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
723
|
+
import { type FC } from "react";
|
|
724
|
+
import Link from "next/link";
|
|
725
|
+
|
|
726
|
+
const LocaleSwitcher: FC = () => {
|
|
727
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
728
|
+
useLocalePageRouter();
|
|
729
|
+
|
|
730
|
+
return (
|
|
731
|
+
<div>
|
|
732
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
733
|
+
<div id="localePopover" popover="auto">
|
|
734
|
+
{availableLocales.map((localeItem) => (
|
|
735
|
+
<Link
|
|
736
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
737
|
+
hrefLang={localeItem}
|
|
738
|
+
key={localeItem}
|
|
739
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
740
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
741
|
+
>
|
|
742
|
+
<span>
|
|
743
|
+
{/* Sprache - z. B. FR */}
|
|
744
|
+
{localeItem}
|
|
745
|
+
</span>
|
|
746
|
+
<span>
|
|
747
|
+
{/* Sprache in ihrer eigenen Sprache - z. B. Français */}
|
|
748
|
+
{getLocaleName(localeItem, locale)}
|
|
749
|
+
</span>
|
|
750
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
751
|
+
{/* Sprache in der aktuellen Sprache - z. B. Francés mit aktueller Sprache auf Locales.SPANISH gesetzt */}
|
|
752
|
+
{getLocaleName(localeItem)}
|
|
753
|
+
</span>
|
|
754
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
755
|
+
{/* Sprache auf Englisch - z. B. French */}
|
|
756
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
757
|
+
</span>
|
|
758
|
+
</Link>
|
|
759
|
+
))}
|
|
760
|
+
</div>
|
|
761
|
+
</div>
|
|
762
|
+
);
|
|
763
|
+
};
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="esm"
|
|
767
|
+
import {
|
|
768
|
+
Locales,
|
|
769
|
+
getHTMLTextDir,
|
|
770
|
+
getLocaleName,
|
|
771
|
+
getLocalizedUrl,
|
|
772
|
+
} from "intlayer";
|
|
773
|
+
import { useLocalePageRouter } from "next-intlayer";
|
|
774
|
+
|
|
775
|
+
const LocaleSwitcher = () => {
|
|
776
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
777
|
+
useLocalePageRouter();
|
|
778
|
+
|
|
779
|
+
return (
|
|
780
|
+
<div>
|
|
781
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
782
|
+
<div id="localePopover" popover="auto">
|
|
783
|
+
{availableLocales.map((localeItem) => (
|
|
784
|
+
<Link
|
|
785
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
786
|
+
hrefLang={localeItem}
|
|
787
|
+
key={localeItem}
|
|
788
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
789
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
790
|
+
>
|
|
791
|
+
<span>
|
|
792
|
+
{/* Sprache - z. B. FR */}
|
|
793
|
+
{localeItem}
|
|
794
|
+
</span>
|
|
795
|
+
<span>
|
|
796
|
+
{/* Sprache in ihrer eigenen Sprache - z. B. Français */}
|
|
797
|
+
{getLocaleName(localeItem, locale)}
|
|
798
|
+
</span>
|
|
799
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
800
|
+
{/* Sprache in der aktuellen Sprache - z. B. Francés mit aktueller Sprache auf Locales.SPANISH gesetzt */}
|
|
801
|
+
{getLocaleName(localeItem)}
|
|
802
|
+
</span>
|
|
803
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
804
|
+
{/* Sprache auf Englisch - z. B. French */}
|
|
805
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
806
|
+
</span>
|
|
807
|
+
</Link>
|
|
808
|
+
))}
|
|
809
|
+
</div>
|
|
810
|
+
</div>
|
|
811
|
+
);
|
|
812
|
+
};
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="commonjs"
|
|
816
|
+
const {
|
|
817
|
+
Locales,
|
|
818
|
+
getHTMLTextDir,
|
|
819
|
+
getLocaleName,
|
|
820
|
+
getLocalizedUrl,
|
|
821
|
+
} = require("intlayer");
|
|
822
|
+
const { useLocalePageRouter } = require("next-intlayer");
|
|
823
|
+
|
|
824
|
+
const LocaleSwitcher = () => {
|
|
825
|
+
const { locale, pathWithoutLocale, availableLocales, setLocale } =
|
|
826
|
+
useLocalePageRouter();
|
|
827
|
+
|
|
828
|
+
return (
|
|
829
|
+
<select>
|
|
830
|
+
{availableLocales.map((localeItem) => (
|
|
831
|
+
<option value={localeItem} key={localeItem}>
|
|
832
|
+
<a
|
|
833
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
834
|
+
hrefLang={localeItem}
|
|
835
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
836
|
+
onClick={(e) => {
|
|
837
|
+
e.preventDefault();
|
|
838
|
+
setLocale(localeItem);
|
|
839
|
+
}}
|
|
840
|
+
>
|
|
841
|
+
<span>
|
|
842
|
+
{/* Sprache - z. B. FR */}
|
|
843
|
+
{localeItem}
|
|
844
|
+
</span>
|
|
845
|
+
<span>
|
|
846
|
+
{/* Sprache in ihrer eigenen Sprache - z. B. Français */}
|
|
847
|
+
{getLocaleName(localeItem, locale)}
|
|
848
|
+
</span>
|
|
849
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
850
|
+
{/* Sprache in der aktuellen Sprache - z. B. Francés mit aktueller Sprache auf Locales.SPANISH gesetzt */}
|
|
851
|
+
{getLocaleName(localeItem)}
|
|
852
|
+
</span>
|
|
853
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
854
|
+
{/* Sprache auf Englisch - z. B. French */}
|
|
855
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
856
|
+
</span>
|
|
857
|
+
</a>
|
|
858
|
+
</option>
|
|
859
|
+
))}
|
|
860
|
+
</select>
|
|
861
|
+
);
|
|
862
|
+
};
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
> Die API `useLocalePageRouter` ist identisch mit `useLocale`. Weitere Informationen zum `useLocale`-Hook finden Sie in der [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/next-intlayer/useLocale.md).
|
|
866
|
+
|
|
867
|
+
> Dokumentationsreferenzen:
|
|
868
|
+
|
|
869
|
+
> - [`getLocaleName`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getLocaleName.md)
|
|
870
|
+
|
|
871
|
+
> - [`getLocalizedUrl`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getLocalizedUrl.md)
|
|
872
|
+
|
|
873
|
+
> - [`getHTMLTextDir`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getHTMLTextDir.md)
|
|
874
|
+
|
|
875
|
+
> - [`hrefLang`-Attribut](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
876
|
+
|
|
877
|
+
> - [`lang`-Attribut](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
|
|
878
|
+
|
|
879
|
+
> - [`dir`-Attribut](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
|
|
880
|
+
|
|
881
|
+
> - [`aria-current`-Attribut](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
882
|
+
|
|
883
|
+
### (Optional) Schritt 10: Erstellen einer lokalisierten Link-Komponente
|
|
884
|
+
|
|
885
|
+
Um sicherzustellen, dass die Navigation Ihrer Anwendung die aktuelle Sprache respektiert, können Sie eine benutzerdefinierte `Link`-Komponente erstellen. Diese Komponente fügt internen URLs automatisch die aktuelle Sprache voran, sodass beispielsweise ein französischsprachiger Benutzer beim Klicken auf einen Link zur Seite "Über uns" zu `/fr/about` statt zu `/about` weitergeleitet wird.
|
|
886
|
+
|
|
887
|
+
Dieses Verhalten ist aus mehreren Gründen nützlich:
|
|
888
|
+
|
|
889
|
+
- **SEO und Benutzererfahrung**: Lokalisierte URLs helfen Suchmaschinen, sprachspezifische Seiten korrekt zu indexieren, und bieten Benutzern Inhalte in ihrer bevorzugten Sprache.
|
|
890
|
+
- **Konsistenz**: Durch die Verwendung eines lokalisierten Links in Ihrer gesamten Anwendung stellen Sie sicher, dass die Navigation innerhalb der aktuellen Sprache bleibt und unerwartete Sprachwechsel vermieden werden.
|
|
891
|
+
- **Wartbarkeit**: Die Zentralisierung der Lokalisierungslogik in einer einzigen Komponente vereinfacht die Verwaltung von URLs und macht Ihren Code einfacher zu warten und zu erweitern, wenn Ihre Anwendung wächst.
|
|
892
|
+
|
|
893
|
+
Nachfolgend finden Sie die Implementierung einer lokalisierten `Link`-Komponente in TypeScript:
|
|
894
|
+
|
|
895
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
896
|
+
"use client";
|
|
897
|
+
|
|
898
|
+
import { getLocalizedUrl } from "intlayer";
|
|
899
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
900
|
+
import { useLocale } from "next-intlayer";
|
|
901
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
|
|
902
|
+
|
|
903
|
+
/**
|
|
904
|
+
* Hilfsfunktion, um zu überprüfen, ob eine gegebene URL extern ist.
|
|
905
|
+
* Wenn die URL mit http:// oder https:// beginnt, wird sie als extern betrachtet.
|
|
906
|
+
*/
|
|
907
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
908
|
+
/^https?:\/\//.test(href ?? "");
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Eine benutzerdefinierte Link-Komponente, die das href-Attribut basierend auf der aktuellen Sprache anpasst.
|
|
912
|
+
* Für interne Links wird `getLocalizedUrl` verwendet, um die URL mit der Sprache zu versehen (z. B. /fr/about).
|
|
913
|
+
* Dies stellt sicher, dass die Navigation innerhalb des gleichen Sprachkontexts bleibt.
|
|
914
|
+
*/
|
|
915
|
+
export const Link = forwardRef<
|
|
916
|
+
HTMLAnchorElement,
|
|
917
|
+
PropsWithChildren<NextLinkProps>
|
|
918
|
+
>(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
|
|
919
|
+
const { locale } = useLocale();
|
|
920
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
921
|
+
|
|
922
|
+
// Wenn der Link intern ist und ein gültiges href bereitgestellt wird, holen Sie die lokalisierte URL.
|
|
923
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
924
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
925
|
+
|
|
926
|
+
return (
|
|
927
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
928
|
+
{children}
|
|
929
|
+
</NextLink>
|
|
930
|
+
);
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
Link.displayName = "Link";
|
|
934
|
+
```
|
|
935
|
+
|
|
936
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
937
|
+
'use client';
|
|
938
|
+
|
|
939
|
+
import { getLocalizedUrl } from 'intlayer';
|
|
940
|
+
import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
|
|
941
|
+
import { useLocale } from 'next-intlayer';
|
|
942
|
+
import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
* Hilfsfunktion, um zu überprüfen, ob eine gegebene URL extern ist.
|
|
946
|
+
* Wenn die URL mit http:// oder https:// beginnt, wird sie als extern betrachtet.
|
|
947
|
+
*/
|
|
948
|
+
export const checkIsExternalLink = (href) =>
|
|
949
|
+
/^https?:\/\//.test(href ?? '');
|
|
950
|
+
|
|
951
|
+
/**
|
|
952
|
+
* Eine benutzerdefinierte Link-Komponente, die das href-Attribut basierend auf der aktuellen Sprache anpasst.
|
|
953
|
+
* Für interne Links wird `getLocalizedUrl` verwendet, um die URL mit der Sprache zu versehen (z. B. /fr/about).
|
|
954
|
+
* Dies stellt sicher, dass die Navigation innerhalb des gleichen Sprachkontexts bleibt.
|
|
955
|
+
*/
|
|
956
|
+
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
957
|
+
const { locale } = useLocale();
|
|
958
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
959
|
+
|
|
960
|
+
// Wenn der Link intern ist und ein gültiges href bereitgestellt wird, holen Sie die lokalisierte URL.
|
|
961
|
+
const hrefI18n =
|
|
962
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
963
|
+
|
|
964
|
+
return (
|
|
965
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
966
|
+
{children}
|
|
967
|
+
</NextLink>
|
|
968
|
+
);
|
|
969
|
+
});
|
|
970
|
+
|
|
971
|
+
Link.displayName = 'Link';
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
975
|
+
'use client';
|
|
976
|
+
|
|
977
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
978
|
+
const NextLink = require("next/link");
|
|
979
|
+
const { useLocale } = require("next-intlayer");
|
|
980
|
+
const { forwardRef } = require("react");
|
|
981
|
+
|
|
982
|
+
/**
|
|
983
|
+
* Hilfsfunktion, um zu überprüfen, ob eine gegebene URL extern ist.
|
|
984
|
+
* Wenn die URL mit http:// oder https:// beginnt, wird sie als extern betrachtet.
|
|
985
|
+
*/
|
|
986
|
+
const checkIsExternalLink = (href) =>
|
|
987
|
+
/^https?:\/\//.test(href ?? '');
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
991
|
+
const { locale } = useLocale();
|
|
992
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
993
|
+
|
|
994
|
+
// Wenn der Link intern ist und ein gültiges href bereitgestellt wird, holen Sie die lokalisierte URL.
|
|
995
|
+
const hrefI18n: NextLinkProps['href'] =
|
|
996
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
997
|
+
|
|
998
|
+
return (
|
|
999
|
+
<NextLink href={hrefI18n} ref={ref} {...props}>
|
|
1000
|
+
{children}
|
|
1001
|
+
</NextLink>
|
|
1002
|
+
);
|
|
1003
|
+
});
|
|
1004
|
+
|
|
1005
|
+
Link.displayName = 'Link';
|
|
1006
|
+
```
|
|
1007
|
+
|
|
1008
|
+
#### Funktionsweise
|
|
1009
|
+
|
|
1010
|
+
- **Erkennung externer Links**:
|
|
1011
|
+
Die Hilfsfunktion `checkIsExternalLink` bestimmt, ob eine URL extern ist. Externe Links bleiben unverändert, da sie keine Lokalisierung benötigen.
|
|
1012
|
+
|
|
1013
|
+
- **Abrufen der aktuellen Sprache**:
|
|
1014
|
+
Der Hook `useLocale` liefert die aktuelle Sprache (z. B. `fr` für Französisch).
|
|
1015
|
+
|
|
1016
|
+
- **Lokalisierung der URL**:
|
|
1017
|
+
Für interne Links (d. h. nicht extern) wird `getLocalizedUrl` verwendet, um die URL automatisch mit der aktuellen Sprache zu versehen. Das bedeutet, dass bei einem Benutzer, der Französisch verwendet, `/about` als `href` zu `/fr/about` transformiert wird.
|
|
1018
|
+
|
|
1019
|
+
- **Rückgabe des Links**:
|
|
1020
|
+
Die Komponente gibt ein `<a>`-Element mit der lokalisierten URL zurück und stellt sicher, dass die Navigation mit der Sprache übereinstimmt.
|
|
1021
|
+
|
|
1022
|
+
Durch die Integration dieser `Link`-Komponente in Ihrer gesamten Anwendung erhalten Sie eine kohärente und sprachbewusste Benutzererfahrung und profitieren gleichzeitig von einer verbesserten SEO und Benutzerfreundlichkeit.
|
|
1023
|
+
|
|
1024
|
+
### (Optional) Schritt 11: Optimieren Sie Ihre Bundle-Größe
|
|
1025
|
+
|
|
1026
|
+
Bei der Verwendung von `next-intlayer` werden Wörterbücher standardmäßig in das Bundle für jede Seite aufgenommen. Um die Bundle-Größe zu optimieren, bietet Intlayer ein optionales SWC-Plugin, das `useIntlayer`-Aufrufe intelligent durch Makros ersetzt. Dies stellt sicher, dass Wörterbücher nur in Bundles für Seiten enthalten sind, die sie tatsächlich verwenden.
|
|
1027
|
+
|
|
1028
|
+
Um diese Optimierung zu aktivieren, installieren Sie das `@intlayer/swc`-Paket. Nach der Installation erkennt und verwendet `next-intlayer` das Plugin automatisch:
|
|
1029
|
+
|
|
1030
|
+
```bash packageManager="npm"
|
|
1031
|
+
npm install @intlayer/swc --save-dev
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
```bash packageManager="pnpm"
|
|
1035
|
+
pnpm add @intlayer/swc --save-dev
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
```bash packageManager="yarn"
|
|
1039
|
+
yarn add @intlayer/swc --save-dev
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
> Hinweis: Diese Optimierung ist nur für Next.js 13 und höher verfügbar.
|
|
1043
|
+
|
|
1044
|
+
> Hinweis: Dieses Paket ist standardmäßig nicht installiert, da SWC-Plugins in Next.js noch experimentell sind. Dies könnte sich in Zukunft ändern.
|
|
1045
|
+
|
|
1046
|
+
### TypeScript konfigurieren
|
|
1047
|
+
|
|
1048
|
+
Intlayer verwendet Modulerweiterungen, um die Vorteile von TypeScript zu nutzen und Ihre Codebasis robuster zu machen.
|
|
1049
|
+
|
|
1050
|
+

|
|
1051
|
+
|
|
1052
|
+

|
|
1053
|
+
|
|
1054
|
+
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen enthält.
|
|
1055
|
+
|
|
1056
|
+
```json5 fileName="tsconfig.json"
|
|
1057
|
+
{
|
|
1058
|
+
// ... Ihre bestehenden TypeScript-Konfigurationen
|
|
1059
|
+
"include": [
|
|
1060
|
+
// ... Ihre bestehenden TypeScript-Konfigurationen
|
|
1061
|
+
".intlayer/**/*.ts", // Schließen Sie die automatisch generierten Typen ein
|
|
1062
|
+
],
|
|
1063
|
+
}
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
### Git-Konfiguration
|
|
1067
|
+
|
|
1068
|
+
Um Ihr Repository sauber zu halten und das Commiten generierter Dateien zu vermeiden, wird empfohlen, die von Intlayer erstellten Dateien zu ignorieren.
|
|
1069
|
+
|
|
1070
|
+
Fügen Sie die folgenden Zeilen zu Ihrer `.gitignore`-Datei hinzu:
|
|
1071
|
+
|
|
1072
|
+
```plaintext fileName=".gitignore"
|
|
1073
|
+
# Ignorieren Sie die von Intlayer generierten Dateien
|
|
1074
|
+
.intlayer
|
|
1075
|
+
```
|
|
1076
|
+
|
|
1077
|
+
## Zusätzliche Ressourcen
|
|
1078
|
+
|
|
1079
|
+
- **Intlayer-Dokumentation:** [GitHub-Repository](https://github.com/aymericzip/intlayer)
|
|
1080
|
+
- **Wörterbuch-Leitfaden:** [Wörterbuch](https://github.com/aymericzip/intlayer/blob/main/docs/de/dictionary/get_started.md)
|
|
1081
|
+
- **Konfigurationsdokumentation:** [Konfigurationsleitfaden](https://github.com/aymericzip/intlayer/blob/main/docs/de/configuration.md)
|
|
1082
|
+
|
|
1083
|
+
Durch die Befolgung dieser Anleitung können Sie Intlayer effektiv in Ihre Next.js-Anwendung mit dem Page Router integrieren und eine robuste und skalierbare Unterstützung für die Internationalisierung Ihrer Webprojekte ermöglichen.
|
|
1084
|
+
|
|
1085
|
+
### Weiterführende Schritte
|
|
1086
|
+
|
|
1087
|
+
Um weiterzugehen, können Sie den [visuellen Editor](https://github.com/aymericzip/intlayer/blob/main/docs/de/intlayer_visual_editor.md) implementieren oder Ihre Inhalte mithilfe des [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/de/intlayer_CMS.md) auslagern.
|