@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,1200 @@
|
|
|
1
|
+
# Erste Schritte mit der Internationalisierung (i18n) mit Intlayer und React Create App
|
|
2
|
+
|
|
3
|
+
Siehe [i18n-react-create-app](https://github.com/aymericzip/intlayer-react-cra-template) für eine vollständige Demonstration.
|
|
4
|
+
|
|
5
|
+
## Was ist Intlayer?
|
|
6
|
+
|
|
7
|
+
**Intlayer** ist eine innovative, Open-Source-Internationalisierungsbibliothek (i18n), die entwickelt wurde, um die Unterstützung mehrerer Sprachen in modernen Webanwendungen zu vereinfachen.
|
|
8
|
+
|
|
9
|
+
Mit Intlayer können Sie:
|
|
10
|
+
|
|
11
|
+
- **Übersetzungen einfach verwalten** mithilfe deklarativer Wörterbücher auf Komponentenebene.
|
|
12
|
+
- **Metadaten, Routen und Inhalte dynamisch lokalisieren**.
|
|
13
|
+
- **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die die Autovervollständigung und Fehlererkennung verbessern.
|
|
14
|
+
- **Von erweiterten Funktionen profitieren**, wie dynamischer Lokalisierungserkennung und -umschaltung.
|
|
15
|
+
|
|
16
|
+
## Schritt-für-Schritt-Anleitung zur Einrichtung von Intlayer in einer React-Anwendung
|
|
17
|
+
|
|
18
|
+
### Schritt 1: Abhängigkeiten installieren
|
|
19
|
+
|
|
20
|
+
Installieren Sie die erforderlichen Pakete mit npm:
|
|
21
|
+
|
|
22
|
+
```bash packageManager="npm"
|
|
23
|
+
npm install intlayer react-intlayer react-scripts-intlayer
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```bash packageManager="pnpm"
|
|
27
|
+
pnpm add intlayer react-intlayer react-scripts-intlayer
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```bash packageManager="yarn"
|
|
31
|
+
yarn add intlayer react-intlayer react-scripts-intlayer
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **intlayer**
|
|
35
|
+
|
|
36
|
+
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.
|
|
37
|
+
|
|
38
|
+
- **react-intlayer**
|
|
39
|
+
|
|
40
|
+
Das Paket, das Intlayer in React-Anwendungen integriert. Es bietet Kontextanbieter und Hooks für die Internationalisierung in React.
|
|
41
|
+
|
|
42
|
+
- **react-scripts-intlayer**
|
|
43
|
+
|
|
44
|
+
Beinhaltet die `react-scripts-intlayer`-Befehle und Plugins zur Integration von Intlayer in auf Create React App basierende Anwendungen. Diese Plugins basieren auf [craco](https://craco.js.org/) und enthalten zusätzliche Konfigurationen für den [Webpack](https://webpack.js.org/)-Bundler.
|
|
45
|
+
|
|
46
|
+
### Schritt 2: Konfiguration Ihres Projekts
|
|
47
|
+
|
|
48
|
+
Erstellen Sie eine Konfigurationsdatei, um die Sprachen Ihrer Anwendung zu konfigurieren:
|
|
49
|
+
|
|
50
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
51
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
52
|
+
|
|
53
|
+
const config: IntlayerConfig = {
|
|
54
|
+
internationalization: {
|
|
55
|
+
locales: [
|
|
56
|
+
Locales.ENGLISH,
|
|
57
|
+
Locales.FRENCH,
|
|
58
|
+
Locales.SPANISH,
|
|
59
|
+
// Ihre weiteren Sprachen
|
|
60
|
+
],
|
|
61
|
+
defaultLocale: Locales.ENGLISH,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default config;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
69
|
+
import { Locales } from "intlayer";
|
|
70
|
+
|
|
71
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
72
|
+
const config = {
|
|
73
|
+
internationalization: {
|
|
74
|
+
locales: [
|
|
75
|
+
Locales.ENGLISH,
|
|
76
|
+
Locales.FRENCH,
|
|
77
|
+
Locales.SPANISH,
|
|
78
|
+
// Ihre weiteren Sprachen
|
|
79
|
+
],
|
|
80
|
+
defaultLocale: Locales.ENGLISH,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default config;
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
88
|
+
const { Locales } = require("intlayer");
|
|
89
|
+
|
|
90
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
91
|
+
const config = {
|
|
92
|
+
internationalization: {
|
|
93
|
+
locales: [
|
|
94
|
+
Locales.ENGLISH,
|
|
95
|
+
Locales.FRENCH,
|
|
96
|
+
Locales.SPANISH,
|
|
97
|
+
// Ihre weiteren Sprachen
|
|
98
|
+
],
|
|
99
|
+
defaultLocale: Locales.ENGLISH,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
module.exports = config;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> Über diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookienamen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen, das Deaktivieren von Intlayer-Logs 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).
|
|
107
|
+
|
|
108
|
+
### Schritt 3: Integration von Intlayer in Ihre CRA-Konfiguration
|
|
109
|
+
|
|
110
|
+
Ändern Sie Ihre Skripte, um react-intlayer zu verwenden:
|
|
111
|
+
|
|
112
|
+
```json fileName="package.json"
|
|
113
|
+
"scripts": {
|
|
114
|
+
"build": "react-scripts-intlayer build",
|
|
115
|
+
"start": "react-scripts-intlayer start",
|
|
116
|
+
"transpile": "intlayer build"
|
|
117
|
+
},
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> Die `react-scripts-intlayer`-Skripte basieren auf [CRACO](https://craco.js.org/). Sie können auch Ihre eigene Einrichtung basierend auf dem Intlayer-Craco-Plugin implementieren. [Beispiel hier ansehen](https://github.com/aymericzip/intlayer/blob/main/examples/react-app/craco.config.js).
|
|
121
|
+
|
|
122
|
+
### Schritt 4: Deklarieren Sie Ihre Inhalte
|
|
123
|
+
|
|
124
|
+
Erstellen und verwalten Sie Ihre Inhaltsdeklarationen, um Übersetzungen zu speichern:
|
|
125
|
+
|
|
126
|
+
```tsx fileName="src/app.content.tsx" codeFormat="typescript"
|
|
127
|
+
import { t, type Dictionary } from "intlayer";
|
|
128
|
+
import React, { type ReactNode } from "react";
|
|
129
|
+
|
|
130
|
+
const appContent = {
|
|
131
|
+
key: "app",
|
|
132
|
+
content: {
|
|
133
|
+
getStarted: t<ReactNode>({
|
|
134
|
+
en: (
|
|
135
|
+
<>
|
|
136
|
+
Edit <code>src/App.tsx</code> and save to reload
|
|
137
|
+
</>
|
|
138
|
+
),
|
|
139
|
+
fr: (
|
|
140
|
+
<>
|
|
141
|
+
Éditez <code>src/App.tsx</code> et enregistrez pour recharger
|
|
142
|
+
</>
|
|
143
|
+
),
|
|
144
|
+
es: (
|
|
145
|
+
<>
|
|
146
|
+
Edita <code>src/App.tsx</code> y guarda para recargar
|
|
147
|
+
</>
|
|
148
|
+
),
|
|
149
|
+
de: (
|
|
150
|
+
<>
|
|
151
|
+
Bearbeiten Sie <code>src/App.tsx</code> und speichern Sie, um neu zu
|
|
152
|
+
laden
|
|
153
|
+
</>
|
|
154
|
+
),
|
|
155
|
+
}),
|
|
156
|
+
reactLink: {
|
|
157
|
+
href: "https://reactjs.org",
|
|
158
|
+
content: t({
|
|
159
|
+
en: "Learn React",
|
|
160
|
+
fr: "Apprendre React",
|
|
161
|
+
es: "Aprender React",
|
|
162
|
+
de: "React lernen",
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
} satisfies Dictionary;
|
|
167
|
+
|
|
168
|
+
export default appContent;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
```jsx fileName="src/app.content.mjx" codeFormat="esm"
|
|
172
|
+
import { t } from "intlayer";
|
|
173
|
+
|
|
174
|
+
/** @type {import('intlayer').Dictionary} */
|
|
175
|
+
const appContent = {
|
|
176
|
+
key: "app",
|
|
177
|
+
content: {
|
|
178
|
+
getStarted: t({
|
|
179
|
+
en: "Get started by editing",
|
|
180
|
+
fr: "Commencez par éditer",
|
|
181
|
+
es: "Comience por editar",
|
|
182
|
+
de: "Beginnen Sie mit dem Bearbeiten",
|
|
183
|
+
}),
|
|
184
|
+
reactLink: {
|
|
185
|
+
href: "https://reactjs.org",
|
|
186
|
+
content: t({
|
|
187
|
+
en: "Learn React",
|
|
188
|
+
fr: "Apprendre React",
|
|
189
|
+
es: "Aprender React",
|
|
190
|
+
de: "React lernen",
|
|
191
|
+
}),
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export default appContent;
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```jsx fileName="src/app.content.csx" codeFormat="commonjs"
|
|
200
|
+
const { t } = require("intlayer");
|
|
201
|
+
|
|
202
|
+
/** @type {import('intlayer').Dictionary} */
|
|
203
|
+
const appContent = {
|
|
204
|
+
key: "app",
|
|
205
|
+
content: {
|
|
206
|
+
getStarted: t({
|
|
207
|
+
en: "Get started by editing",
|
|
208
|
+
fr: "Commencez par éditer",
|
|
209
|
+
es: "Comience por editar",
|
|
210
|
+
de: "Beginnen Sie mit dem Bearbeiten",
|
|
211
|
+
}),
|
|
212
|
+
reactLink: {
|
|
213
|
+
href: "https://reactjs.org",
|
|
214
|
+
content: t({
|
|
215
|
+
en: "Learn React",
|
|
216
|
+
fr: "Apprendre React",
|
|
217
|
+
es: "Aprender React",
|
|
218
|
+
de: "React lernen",
|
|
219
|
+
}),
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
module.exports = appContent;
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
> Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, solange sie im `contentDir`-Verzeichnis (standardmäßig `./src`) enthalten sind und die Inhaltsdeklarationsdateierweiterung (standardmäßig `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`) übereinstimmt.
|
|
228
|
+
|
|
229
|
+
> Weitere Details finden Sie in der [Dokumentation zur Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/de/dictionary/get_started.md).
|
|
230
|
+
|
|
231
|
+
> Wenn Ihre Inhaltsdatei TSX-Code enthält, sollten Sie `import React from "react";` in Ihrer Inhaltsdatei importieren.
|
|
232
|
+
|
|
233
|
+
### Schritt 5: Verwenden Sie Intlayer in Ihrem Code
|
|
234
|
+
|
|
235
|
+
Greifen Sie in Ihrer gesamten Anwendung auf Ihre Inhaltswörterbücher zu:
|
|
236
|
+
|
|
237
|
+
```tsx {4,7} fileName="src/App.tsx" codeFormat="typescript"
|
|
238
|
+
import logo from "./logo.svg";
|
|
239
|
+
import "./App.css";
|
|
240
|
+
import type { FC } from "react";
|
|
241
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
242
|
+
|
|
243
|
+
const AppContent: FC = () => {
|
|
244
|
+
const content = useIntlayer("app");
|
|
245
|
+
|
|
246
|
+
return (
|
|
247
|
+
<div className="App">
|
|
248
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
249
|
+
|
|
250
|
+
{content.getStarted}
|
|
251
|
+
<a
|
|
252
|
+
className="App-link"
|
|
253
|
+
href={content.reactLink.href.value}
|
|
254
|
+
target="_blank"
|
|
255
|
+
rel="noopener noreferrer"
|
|
256
|
+
>
|
|
257
|
+
{content.reactLink.content}
|
|
258
|
+
</a>
|
|
259
|
+
</div>
|
|
260
|
+
);
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
const App: FC = () => (
|
|
264
|
+
<IntlayerProvider>
|
|
265
|
+
<AppContent />
|
|
266
|
+
</IntlayerProvider>
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
export default App;
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```jsx {3,6} fileName="src/App.mjx" codeFormat="esm"
|
|
273
|
+
import "./App.css";
|
|
274
|
+
import logo from "./logo.svg";
|
|
275
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
276
|
+
|
|
277
|
+
const AppContent = () => {
|
|
278
|
+
const content = useIntlayer("app");
|
|
279
|
+
|
|
280
|
+
return (
|
|
281
|
+
<div className="App">
|
|
282
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
283
|
+
|
|
284
|
+
{content.getStarted}
|
|
285
|
+
<a
|
|
286
|
+
className="App-link"
|
|
287
|
+
href={content.reactLink.href.value}
|
|
288
|
+
target="_blank"
|
|
289
|
+
rel="noopener noreferrer"
|
|
290
|
+
>
|
|
291
|
+
{content.reactLink.content}
|
|
292
|
+
</a>
|
|
293
|
+
</div>
|
|
294
|
+
);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const App = () => (
|
|
298
|
+
<IntlayerProvider>
|
|
299
|
+
<AppContent />
|
|
300
|
+
</IntlayerProvider>
|
|
301
|
+
);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
```jsx {3,6} fileName="src/App.csx" codeFormat="commonjs"
|
|
305
|
+
require("./App.css");
|
|
306
|
+
const logo = require("./logo.svg");
|
|
307
|
+
const { IntlayerProvider, useIntlayer } = require("react-intlayer");
|
|
308
|
+
|
|
309
|
+
const AppContent = () => {
|
|
310
|
+
const content = useIntlayer("app");
|
|
311
|
+
|
|
312
|
+
return (
|
|
313
|
+
<div className="App">
|
|
314
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
315
|
+
|
|
316
|
+
{content.getStarted}
|
|
317
|
+
<a
|
|
318
|
+
className="App-link"
|
|
319
|
+
href={content.reactLink.href.value}
|
|
320
|
+
target="_blank"
|
|
321
|
+
rel="noopener noreferrer"
|
|
322
|
+
>
|
|
323
|
+
{content.reactLink.content}
|
|
324
|
+
</a>
|
|
325
|
+
</div>
|
|
326
|
+
);
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
const App = () => (
|
|
330
|
+
<IntlayerProvider>
|
|
331
|
+
<AppContent />
|
|
332
|
+
</IntlayerProvider>
|
|
333
|
+
);
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
> Hinweis: Wenn Sie Ihre Inhalte in einem `string`-Attribut wie `alt`, `title`, `href`, `aria-label` usw. verwenden möchten, müssen Sie den Wert der Funktion aufrufen, wie:
|
|
337
|
+
|
|
338
|
+
> ```jsx
|
|
339
|
+
>
|
|
340
|
+
> ```
|
|
341
|
+
|
|
342
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
343
|
+
|
|
344
|
+
> ```
|
|
345
|
+
>
|
|
346
|
+
> ```
|
|
347
|
+
|
|
348
|
+
> Weitere Informationen zum `useIntlayer`-Hook finden Sie in der [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/react-intlayer/useIntlayer.md).
|
|
349
|
+
|
|
350
|
+
### (Optional) Schritt 6: Ändern Sie die Sprache Ihrer Inhalte
|
|
351
|
+
|
|
352
|
+
Um die Sprache Ihrer Inhalte zu ändern, können Sie die Funktion `setLocale` verwenden, die vom `useLocale`-Hook bereitgestellt wird. Mit dieser Funktion können Sie die Sprache der Anwendung festlegen und die Inhalte entsprechend aktualisieren.
|
|
353
|
+
|
|
354
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
355
|
+
import { Locales } from "intlayer";
|
|
356
|
+
import { useLocale } from "react-intlayer";
|
|
357
|
+
|
|
358
|
+
const LocaleSwitcher = () => {
|
|
359
|
+
const { setLocale } = useLocale();
|
|
360
|
+
|
|
361
|
+
return (
|
|
362
|
+
<button onClick={() => setLocale(Locales.GERMAN)}>
|
|
363
|
+
Sprache auf Deutsch ändern
|
|
364
|
+
</button>
|
|
365
|
+
);
|
|
366
|
+
};
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
```jsx fileName="src/components/LocaleSwitcher.mjx" codeFormat="esm"
|
|
370
|
+
import { Locales } from "intlayer";
|
|
371
|
+
import { useLocale } from "react-intlayer";
|
|
372
|
+
|
|
373
|
+
const LocaleSwitcher = () => {
|
|
374
|
+
const { setLocale } = useLocale();
|
|
375
|
+
|
|
376
|
+
return (
|
|
377
|
+
<button onClick={() => setLocale(Locales.GERMAN)}>
|
|
378
|
+
Sprache auf Deutsch ändern
|
|
379
|
+
</button>
|
|
380
|
+
);
|
|
381
|
+
};
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
385
|
+
const { Locales } = require("intlayer");
|
|
386
|
+
const { useLocale } = require("react-intlayer");
|
|
387
|
+
|
|
388
|
+
const LocaleSwitcher = () => {
|
|
389
|
+
const { setLocale } = useLocale();
|
|
390
|
+
|
|
391
|
+
return (
|
|
392
|
+
<button onClick={() => setLocale(Locales.GERMAN)}>
|
|
393
|
+
Sprache auf Deutsch ändern
|
|
394
|
+
</button>
|
|
395
|
+
);
|
|
396
|
+
};
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
> Weitere Informationen zum `useLocale`-Hook finden Sie in der [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/react-intlayer/useLocale.md).
|
|
400
|
+
|
|
401
|
+
### (Optional) Schritt 7: Lokalisierte Routen zu Ihrer Anwendung hinzufügen
|
|
402
|
+
|
|
403
|
+
Das Ziel dieses Schritts ist es, für jede Sprache eindeutige Routen zu erstellen. Dies ist nützlich für SEO und SEO-freundliche URLs.
|
|
404
|
+
Beispiel:
|
|
405
|
+
|
|
406
|
+
```plaintext
|
|
407
|
+
- https://example.com/about
|
|
408
|
+
- https://example.com/es/about
|
|
409
|
+
- https://example.com/fr/about
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
> Standardmäßig werden die Routen nicht für die Standardsprache vorangestellt. Wenn Sie die Standardsprache voranstellen möchten, können Sie die Option `middleware.prefixDefault` in Ihrer Konfiguration auf `true` setzen. Weitere Informationen finden Sie in der [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/de/configuration.md).
|
|
413
|
+
|
|
414
|
+
Um lokalisierte Routen zu Ihrer Anwendung hinzuzufügen, können Sie eine `LocaleRouter`-Komponente erstellen, die die Routen Ihrer Anwendung umschließt und lokalisierungsbasierte Routen verwaltet. Hier ist ein Beispiel mit [React Router](https://reactrouter.com/home):
|
|
415
|
+
|
|
416
|
+
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
417
|
+
import { Locales, configuration, getPathWithoutLocale } from "intlayer";
|
|
418
|
+
import type { FC, PropsWithChildren } from "react";
|
|
419
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
420
|
+
import {
|
|
421
|
+
BrowserRouter,
|
|
422
|
+
Routes,
|
|
423
|
+
Route,
|
|
424
|
+
Navigate,
|
|
425
|
+
useLocation,
|
|
426
|
+
} from "react-router-dom";
|
|
427
|
+
|
|
428
|
+
// Destrukturierung der Konfiguration aus Intlayer
|
|
429
|
+
const { internationalization, middleware } = configuration;
|
|
430
|
+
const { locales, defaultLocale } = internationalization;
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Eine Komponente, die die Lokalisierung verwaltet und Kinder mit dem entsprechenden Lokalisierungskontext umschließt.
|
|
434
|
+
* Sie verwaltet die URL-basierte Lokalisierungserkennung und -validierung.
|
|
435
|
+
*/
|
|
436
|
+
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
437
|
+
children,
|
|
438
|
+
locale,
|
|
439
|
+
}) => {
|
|
440
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads
|
|
441
|
+
|
|
442
|
+
// Bestimmen der aktuellen Lokalisierung, Standardwert ist die Standardsprache
|
|
443
|
+
const currentLocale = locale ?? defaultLocale;
|
|
444
|
+
|
|
445
|
+
// Entfernen des Lokalisierungsprefixes aus dem Pfad, um einen Basispfad zu erstellen
|
|
446
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
447
|
+
pathname // Aktueller URL-Pfad
|
|
448
|
+
);
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Wenn middleware.prefixDefault wahr ist, sollte die Standardsprache immer vorangestellt werden.
|
|
452
|
+
*/
|
|
453
|
+
if (middleware.prefixDefault) {
|
|
454
|
+
// Validieren der Lokalisierung
|
|
455
|
+
if (!locale || !locales.includes(locale)) {
|
|
456
|
+
// Umleiten zur Standardsprache mit dem aktualisierten Pfad
|
|
457
|
+
return (
|
|
458
|
+
<Navigate
|
|
459
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
460
|
+
replace // Ersetzen des aktuellen Verlaufs mit dem neuen
|
|
461
|
+
/>
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
466
|
+
return (
|
|
467
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
468
|
+
);
|
|
469
|
+
} else {
|
|
470
|
+
/**
|
|
471
|
+
* Wenn middleware.prefixDefault falsch ist, wird die Standardsprache nicht vorangestellt.
|
|
472
|
+
* Sicherstellen, dass die aktuelle Lokalisierung gültig ist und nicht der Standardsprache entspricht.
|
|
473
|
+
*/
|
|
474
|
+
if (
|
|
475
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
476
|
+
!locales
|
|
477
|
+
.filter(
|
|
478
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Ausschließen der Standardsprache
|
|
479
|
+
)
|
|
480
|
+
.includes(currentLocale) // Überprüfen, ob die aktuelle Lokalisierung in der Liste der gültigen Lokalisierungen enthalten ist
|
|
481
|
+
) {
|
|
482
|
+
// Umleiten zum Pfad ohne Lokalisierungsprefix
|
|
483
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
487
|
+
return (
|
|
488
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Eine Router-Komponente, die lokalisierungsspezifische Routen einrichtet.
|
|
495
|
+
* Sie verwendet React Router zur Navigation und zum Rendern lokalisierter Komponenten.
|
|
496
|
+
*/
|
|
497
|
+
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
498
|
+
<BrowserRouter>
|
|
499
|
+
<Routes>
|
|
500
|
+
{locales
|
|
501
|
+
.filter(
|
|
502
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
503
|
+
)
|
|
504
|
+
.map((locale) => (
|
|
505
|
+
<Route
|
|
506
|
+
// Routenmuster zum Erfassen der Lokalisierung (z. B. /en/, /fr/) und zum Abgleichen aller nachfolgenden Pfade
|
|
507
|
+
path={`/${locale}/*`}
|
|
508
|
+
key={locale}
|
|
509
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
510
|
+
/>
|
|
511
|
+
))}
|
|
512
|
+
|
|
513
|
+
{
|
|
514
|
+
// Wenn das Voranstellen der Standardsprache deaktiviert ist, rendern Sie die Kinder direkt am Stammverzeichnis
|
|
515
|
+
!middleware.prefixDefault && (
|
|
516
|
+
<Route
|
|
517
|
+
path="*"
|
|
518
|
+
element={
|
|
519
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
520
|
+
} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
521
|
+
/>
|
|
522
|
+
)
|
|
523
|
+
}
|
|
524
|
+
</Routes>
|
|
525
|
+
</BrowserRouter>
|
|
526
|
+
);
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
530
|
+
import { Locales, configuration, getPathWithoutLocale } from "intlayer";
|
|
531
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
532
|
+
import {
|
|
533
|
+
BrowserRouter,
|
|
534
|
+
Routes,
|
|
535
|
+
Route,
|
|
536
|
+
Navigate,
|
|
537
|
+
useLocation,
|
|
538
|
+
} from "react-router-dom";
|
|
539
|
+
|
|
540
|
+
// Destrukturierung der Konfiguration aus Intlayer
|
|
541
|
+
const { internationalization, middleware } = configuration;
|
|
542
|
+
const { locales, defaultLocale } = internationalization;
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Eine Komponente, die die Lokalisierung verwaltet und Kinder mit dem entsprechenden Lokalisierungskontext umschließt.
|
|
546
|
+
* Sie verwaltet die URL-basierte Lokalisierungserkennung und -validierung.
|
|
547
|
+
*/
|
|
548
|
+
const AppLocalized = ({ children, locale }) => {
|
|
549
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads
|
|
550
|
+
|
|
551
|
+
// Bestimmen der aktuellen Lokalisierung, Standardwert ist die Standardsprache
|
|
552
|
+
const currentLocale = locale ?? defaultLocale;
|
|
553
|
+
|
|
554
|
+
// Entfernen des Lokalisierungsprefixes aus dem Pfad, um einen Basispfad zu erstellen
|
|
555
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
556
|
+
pathname // Aktueller URL-Pfad
|
|
557
|
+
);
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Wenn middleware.prefixDefault wahr ist, sollte die Standardsprache immer vorangestellt werden.
|
|
561
|
+
*/
|
|
562
|
+
if (middleware.prefixDefault) {
|
|
563
|
+
// Validieren der Lokalisierung
|
|
564
|
+
if (!locale || !locales.includes(locale)) {
|
|
565
|
+
// Umleiten zur Standardsprache mit dem aktualisierten Pfad
|
|
566
|
+
return (
|
|
567
|
+
<Navigate
|
|
568
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
569
|
+
replace // Ersetzen des aktuellen Verlaufs mit dem neuen
|
|
570
|
+
/>
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
575
|
+
return (
|
|
576
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
577
|
+
);
|
|
578
|
+
} else {
|
|
579
|
+
/**
|
|
580
|
+
* Wenn middleware.prefixDefault falsch ist, wird die Standardsprache nicht vorangestellt.
|
|
581
|
+
* Sicherstellen, dass die aktuelle Lokalisierung gültig ist und nicht der Standardsprache entspricht.
|
|
582
|
+
*/
|
|
583
|
+
if (
|
|
584
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
585
|
+
!locales
|
|
586
|
+
.filter(
|
|
587
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Ausschließen der Standardsprache
|
|
588
|
+
)
|
|
589
|
+
.includes(currentLocale) // Überprüfen, ob die aktuelle Lokalisierung in der Liste der gültigen Lokalisierungen enthalten ist
|
|
590
|
+
) {
|
|
591
|
+
// Umleiten zum Pfad ohne Lokalisierungsprefix
|
|
592
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
596
|
+
return (
|
|
597
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
598
|
+
);
|
|
599
|
+
}
|
|
600
|
+
};
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Eine Router-Komponente, die lokalisierungsspezifische Routen einrichtet.
|
|
604
|
+
* Sie verwendet React Router zur Navigation und zum Rendern lokalisierter Komponenten.
|
|
605
|
+
*/
|
|
606
|
+
export const LocaleRouter = ({ children }) => (
|
|
607
|
+
<BrowserRouter>
|
|
608
|
+
<Routes>
|
|
609
|
+
{locales
|
|
610
|
+
.filter(
|
|
611
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
612
|
+
)
|
|
613
|
+
.map((locale) => (
|
|
614
|
+
<Route
|
|
615
|
+
// Routenmuster zum Erfassen der Lokalisierung (z. B. /en/, /fr/) und zum Abgleichen aller nachfolgenden Pfade
|
|
616
|
+
path={`/${locale}/*`}
|
|
617
|
+
key={locale}
|
|
618
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
619
|
+
/>
|
|
620
|
+
))}
|
|
621
|
+
|
|
622
|
+
{
|
|
623
|
+
// Wenn das Voranstellen der Standardsprache deaktiviert ist, rendern Sie die Kinder direkt am Stammverzeichnis
|
|
624
|
+
!middleware.prefixDefault && (
|
|
625
|
+
<Route
|
|
626
|
+
path="*"
|
|
627
|
+
element={
|
|
628
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
629
|
+
} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
630
|
+
/>
|
|
631
|
+
)
|
|
632
|
+
}
|
|
633
|
+
</Routes>
|
|
634
|
+
</BrowserRouter>
|
|
635
|
+
);
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
|
|
639
|
+
const { configuration, getPathWithoutLocale } = require("intlayer");
|
|
640
|
+
const { IntlayerProvider, useLocale } = require("react-intlayer");
|
|
641
|
+
const {
|
|
642
|
+
BrowserRouter,
|
|
643
|
+
Routes,
|
|
644
|
+
Route,
|
|
645
|
+
Navigate,
|
|
646
|
+
useLocation,
|
|
647
|
+
} = require("react-router-dom");
|
|
648
|
+
|
|
649
|
+
// Destrukturierung der Konfiguration aus Intlayer
|
|
650
|
+
const { internationalization, middleware } = configuration;
|
|
651
|
+
const { locales, defaultLocale } = internationalization;
|
|
652
|
+
|
|
653
|
+
/**
|
|
654
|
+
* Eine Komponente, die die Lokalisierung verwaltet und Kinder mit dem entsprechenden Lokalisierungskontext umschließt.
|
|
655
|
+
* Sie verwaltet die URL-basierte Lokalisierungserkennung und -validierung.
|
|
656
|
+
*/
|
|
657
|
+
const AppLocalized = ({ children, locale }) => {
|
|
658
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads
|
|
659
|
+
|
|
660
|
+
// Bestimmen der aktuellen Lokalisierung, Standardwert ist die Standardsprache
|
|
661
|
+
const currentLocale = locale ?? defaultLocale;
|
|
662
|
+
|
|
663
|
+
// Entfernen des Lokalisierungsprefixes aus dem Pfad, um einen Basispfad zu erstellen
|
|
664
|
+
const pathWithoutLocale = getPathWithoutLocale(
|
|
665
|
+
pathname // Aktueller URL-Pfad
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
/**
|
|
669
|
+
* Wenn middleware.prefixDefault wahr ist, sollte die Standardsprache immer vorangestellt werden.
|
|
670
|
+
*/
|
|
671
|
+
if (middleware.prefixDefault) {
|
|
672
|
+
// Validieren der Lokalisierung
|
|
673
|
+
if (!locale || !locales.includes(locale)) {
|
|
674
|
+
// Umleiten zur Standardsprache mit dem aktualisierten Pfad
|
|
675
|
+
return (
|
|
676
|
+
<Navigate
|
|
677
|
+
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
678
|
+
replace // Ersetzen des aktuellen Verlaufs mit dem neuen
|
|
679
|
+
/>
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
684
|
+
return (
|
|
685
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
686
|
+
);
|
|
687
|
+
} else {
|
|
688
|
+
/**
|
|
689
|
+
* Wenn middleware.prefixDefault falsch ist, wird die Standardsprache nicht vorangestellt.
|
|
690
|
+
* Sicherstellen, dass die aktuelle Lokalisierung gültig ist und nicht der Standardsprache entspricht.
|
|
691
|
+
*/
|
|
692
|
+
if (
|
|
693
|
+
currentLocale.toString() !== defaultLocale.toString() &&
|
|
694
|
+
!locales
|
|
695
|
+
.filter(
|
|
696
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Ausschließen der Standardsprache
|
|
697
|
+
)
|
|
698
|
+
.includes(currentLocale) // Überprüfen, ob die aktuelle Lokalisierung in der Liste der gültigen Lokalisierungen enthalten ist
|
|
699
|
+
) {
|
|
700
|
+
// Umleiten zum Pfad ohne Lokalisierungsprefix
|
|
701
|
+
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// Umhüllen der Kinder mit dem IntlayerProvider und Festlegen der aktuellen Lokalisierung
|
|
705
|
+
return (
|
|
706
|
+
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
707
|
+
);
|
|
708
|
+
}
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* Eine Router-Komponente, die lokalisierungsspezifische Routen einrichtet.
|
|
713
|
+
* Sie verwendet React Router zur Navigation und zum Rendern lokalisierter Komponenten.
|
|
714
|
+
*/
|
|
715
|
+
const LocaleRouter = ({ children }) => (
|
|
716
|
+
<BrowserRouter>
|
|
717
|
+
<Routes>
|
|
718
|
+
{locales
|
|
719
|
+
.filter(
|
|
720
|
+
(locale) => middleware.prefixDefault || locale !== defaultLocale
|
|
721
|
+
)
|
|
722
|
+
.map((locale) => (
|
|
723
|
+
<Route
|
|
724
|
+
// Routenmuster zum Erfassen der Lokalisierung (z. B. /en/, /fr/) und zum Abgleichen aller nachfolgenden Pfade
|
|
725
|
+
path={`/${locale}/*`}
|
|
726
|
+
key={locale}
|
|
727
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
728
|
+
/>
|
|
729
|
+
))}
|
|
730
|
+
|
|
731
|
+
{
|
|
732
|
+
// Wenn das Voranstellen der Standardsprache deaktiviert ist, rendern Sie die Kinder direkt am Stammverzeichnis
|
|
733
|
+
!middleware.prefixDefault && (
|
|
734
|
+
<Route
|
|
735
|
+
path="*"
|
|
736
|
+
element={
|
|
737
|
+
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
738
|
+
} // Umhüllen der Kinder mit Lokalisierungsverwaltung
|
|
739
|
+
/>
|
|
740
|
+
)
|
|
741
|
+
}
|
|
742
|
+
</Routes>
|
|
743
|
+
</BrowserRouter>
|
|
744
|
+
);
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
Dann können Sie die `LocaleRouter`-Komponente in Ihrer Anwendung verwenden:
|
|
748
|
+
|
|
749
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
750
|
+
import { LocaleRouter } from "./components/LocaleRouter";
|
|
751
|
+
import type { FC } from "react";
|
|
752
|
+
|
|
753
|
+
// ... Ihre AppContent-Komponente
|
|
754
|
+
|
|
755
|
+
const App: FC = () => (
|
|
756
|
+
<LocaleRouter>
|
|
757
|
+
<AppContent />
|
|
758
|
+
</LocaleRouter>
|
|
759
|
+
);
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
```jsx fileName="src/App.mjx" codeFormat="esm"
|
|
763
|
+
import { LocaleRouter } from "./components/LocaleRouter";
|
|
764
|
+
|
|
765
|
+
// ... Ihre AppContent-Komponente
|
|
766
|
+
|
|
767
|
+
const App = () => (
|
|
768
|
+
<LocaleRouter>
|
|
769
|
+
<AppContent />
|
|
770
|
+
</LocaleRouter>
|
|
771
|
+
);
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
```jsx fileName="src/App.cjx" codeFormat="commonjs"
|
|
775
|
+
const { LocaleRouter } = require("./components/LocaleRouter");
|
|
776
|
+
|
|
777
|
+
// ... Ihre AppContent-Komponente
|
|
778
|
+
|
|
779
|
+
const App = () => (
|
|
780
|
+
<LocaleRouter>
|
|
781
|
+
<AppContent />
|
|
782
|
+
</LocaleRouter>
|
|
783
|
+
);
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
### (Optional) Schritt 8: Ändern der URL, wenn sich die Lokalisierung ändert
|
|
787
|
+
|
|
788
|
+
Um die URL zu ändern, wenn sich die Lokalisierung ändert, können Sie die `onLocaleChange`-Eigenschaft verwenden, die vom `useLocale`-Hook bereitgestellt wird. Parallel dazu können Sie die Hooks `useLocation` und `useNavigate` aus `react-router-dom` verwenden, um den URL-Pfad zu aktualisieren.
|
|
789
|
+
|
|
790
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
791
|
+
import { useLocation, useNavigate } from "react-router-dom";
|
|
792
|
+
import {
|
|
793
|
+
Locales,
|
|
794
|
+
getHTMLTextDir,
|
|
795
|
+
getLocaleName,
|
|
796
|
+
getLocalizedUrl,
|
|
797
|
+
} from "intlayer";
|
|
798
|
+
import { useLocale } from "react-intlayer";
|
|
799
|
+
import { type FC } from "react";
|
|
800
|
+
|
|
801
|
+
const LocaleSwitcher: FC = () => {
|
|
802
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads. Beispiel: /fr/about?foo=bar
|
|
803
|
+
const navigate = useNavigate();
|
|
804
|
+
|
|
805
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
806
|
+
onLocaleChange: (locale) => {
|
|
807
|
+
// Konstruktion der URL mit der aktualisierten Lokalisierung
|
|
808
|
+
// Beispiel: /es/about?foo=bar
|
|
809
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
810
|
+
|
|
811
|
+
// Aktualisieren des URL-Pfads
|
|
812
|
+
navigate(pathWithLocale);
|
|
813
|
+
},
|
|
814
|
+
});
|
|
815
|
+
|
|
816
|
+
return (
|
|
817
|
+
<div>
|
|
818
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
819
|
+
<div id="localePopover" popover="auto">
|
|
820
|
+
{availableLocales.map((localeItem) => (
|
|
821
|
+
<a
|
|
822
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
823
|
+
hrefLang={localeItem}
|
|
824
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
825
|
+
onClick={(e) => {
|
|
826
|
+
e.preventDefault();
|
|
827
|
+
setLocale(localeItem);
|
|
828
|
+
}}
|
|
829
|
+
key={localeItem}
|
|
830
|
+
>
|
|
831
|
+
<span>
|
|
832
|
+
{/* Lokalisierung - z. B. DE */}
|
|
833
|
+
{localeItem}
|
|
834
|
+
</span>
|
|
835
|
+
<span>
|
|
836
|
+
{/* Sprache in ihrer eigenen Lokalisierung - z. B. Deutsch */}
|
|
837
|
+
{getLocaleName(localeItem, locale)}
|
|
838
|
+
</span>
|
|
839
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
840
|
+
{/* Sprache in aktueller Lokalisierung - z. B. Alemán mit aktueller Lokalisierung auf Locales.SPANISH */}
|
|
841
|
+
{getLocaleName(localeItem)}
|
|
842
|
+
</span>
|
|
843
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
844
|
+
{/* Sprache auf Englisch - z. B. German */}
|
|
845
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
846
|
+
</span>
|
|
847
|
+
</a>
|
|
848
|
+
))}
|
|
849
|
+
</div>
|
|
850
|
+
</div>
|
|
851
|
+
);
|
|
852
|
+
};
|
|
853
|
+
```
|
|
854
|
+
|
|
855
|
+
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
856
|
+
import { useLocation, useNavigate } from "react-router-dom";
|
|
857
|
+
import {
|
|
858
|
+
Locales,
|
|
859
|
+
getHTMLTextDir,
|
|
860
|
+
getLocaleName,
|
|
861
|
+
getLocalizedUrl,
|
|
862
|
+
} from "intlayer";
|
|
863
|
+
import { useLocale } from "react-intlayer";
|
|
864
|
+
|
|
865
|
+
const LocaleSwitcher = () => {
|
|
866
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads. Beispiel: /fr/about?foo=bar
|
|
867
|
+
const navigate = useNavigate();
|
|
868
|
+
|
|
869
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
870
|
+
onLocaleChange: (locale) => {
|
|
871
|
+
// Konstruktion der URL mit der aktualisierten Lokalisierung
|
|
872
|
+
// Beispiel: /es/about?foo=bar
|
|
873
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
874
|
+
|
|
875
|
+
// Aktualisieren des URL-Pfads
|
|
876
|
+
navigate(pathWithLocale);
|
|
877
|
+
},
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
return (
|
|
881
|
+
<div>
|
|
882
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
883
|
+
<div id="localePopover" popover="auto">
|
|
884
|
+
{availableLocales.map((localeItem) => (
|
|
885
|
+
<a
|
|
886
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
887
|
+
hrefLang={localeItem}
|
|
888
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
889
|
+
onClick={(e) => {
|
|
890
|
+
e.preventDefault();
|
|
891
|
+
setLocale(localeItem);
|
|
892
|
+
}}
|
|
893
|
+
key={localeItem}
|
|
894
|
+
>
|
|
895
|
+
<span>
|
|
896
|
+
{/* Lokalisierung - z. B. DE */}
|
|
897
|
+
{localeItem}
|
|
898
|
+
</span>
|
|
899
|
+
<span>
|
|
900
|
+
{/* Sprache in ihrer eigenen Lokalisierung - z. B. Deutsch */}
|
|
901
|
+
{getLocaleName(localeItem, locale)}
|
|
902
|
+
</span>
|
|
903
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
904
|
+
{/* Sprache in aktueller Lokalisierung - z. B. Alemán mit aktueller Lokalisierung auf Locales.SPANISH */}
|
|
905
|
+
{getLocaleName(localeItem)}
|
|
906
|
+
</span>
|
|
907
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
908
|
+
{/* Sprache auf Englisch - z. B. German */}
|
|
909
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
910
|
+
</span>
|
|
911
|
+
</a>
|
|
912
|
+
))}
|
|
913
|
+
</div>
|
|
914
|
+
</div>
|
|
915
|
+
);
|
|
916
|
+
};
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
920
|
+
const { useLocation, useNavigate } = require("react-router-dom");
|
|
921
|
+
const {
|
|
922
|
+
Locales,
|
|
923
|
+
getHTMLTextDir,
|
|
924
|
+
getLocaleName,
|
|
925
|
+
getLocalizedUrl,
|
|
926
|
+
} = require("intlayer");
|
|
927
|
+
const { useLocale } = require("react-intlayer");
|
|
928
|
+
|
|
929
|
+
const LocaleSwitcher = () => {
|
|
930
|
+
const { pathname, search } = useLocation(); // Abrufen des aktuellen URL-Pfads. Beispiel: /fr/about?foo=bar
|
|
931
|
+
const navigate = useNavigate();
|
|
932
|
+
|
|
933
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
934
|
+
onLocaleChange: (locale) => {
|
|
935
|
+
// Konstruktion der URL mit der aktualisierten Lokalisierung
|
|
936
|
+
// Beispiel: /es/about?foo=bar
|
|
937
|
+
const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
|
|
938
|
+
|
|
939
|
+
// Aktualisieren des URL-Pfads
|
|
940
|
+
navigate(pathWithLocale);
|
|
941
|
+
},
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
return (
|
|
945
|
+
<div>
|
|
946
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
947
|
+
<div id="localePopover" popover="auto">
|
|
948
|
+
{availableLocales.map((localeItem) => (
|
|
949
|
+
<a
|
|
950
|
+
href={getLocalizedUrl(location.pathname, localeItem)}
|
|
951
|
+
hrefLang={localeItem}
|
|
952
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
953
|
+
onClick={(e) => {
|
|
954
|
+
e.preventDefault();
|
|
955
|
+
setLocale(localeItem);
|
|
956
|
+
}}
|
|
957
|
+
key={localeItem}
|
|
958
|
+
>
|
|
959
|
+
<span>
|
|
960
|
+
{/* Lokalisierung - z. B. DE */}
|
|
961
|
+
{localeItem}
|
|
962
|
+
</span>
|
|
963
|
+
<span>
|
|
964
|
+
{/* Sprache in ihrer eigenen Lokalisierung - z. B. Deutsch */}
|
|
965
|
+
{getLocaleName(localeItem, locale)}
|
|
966
|
+
</span>
|
|
967
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
968
|
+
{/* Sprache in aktueller Lokalisierung - z. B. Alemán mit aktueller Lokalisierung auf Locales.SPANISH */}
|
|
969
|
+
{getLocaleName(localeItem)}
|
|
970
|
+
</span>
|
|
971
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
972
|
+
{/* Sprache auf Englisch - z. B. German */}
|
|
973
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
974
|
+
</span>
|
|
975
|
+
</a>
|
|
976
|
+
))}
|
|
977
|
+
</div>
|
|
978
|
+
</div>
|
|
979
|
+
);
|
|
980
|
+
};
|
|
981
|
+
```
|
|
982
|
+
|
|
983
|
+
> Dokumentationsreferenzen:
|
|
984
|
+
|
|
985
|
+
> - [`useLocale`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/react-intlayer/useLocale.md)
|
|
986
|
+
|
|
987
|
+
> - [`getLocaleName`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getLocaleName.md)
|
|
988
|
+
|
|
989
|
+
> - [`getLocalizedUrl`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getLocalizedUrl.md)
|
|
990
|
+
|
|
991
|
+
> - [`getHTMLTextDir`-Hook](https://github.com/aymericzip/intlayer/blob/main/docs/de/packages/intlayer/getHTMLTextDir.md)
|
|
992
|
+
|
|
993
|
+
> - [`hrefLang`-Attribut](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=de)
|
|
994
|
+
|
|
995
|
+
> - [`lang`-Attribut](https://developer.mozilla.org/de/docs/Web/HTML/Global_attributes/lang)
|
|
996
|
+
|
|
997
|
+
> - [`dir`-Attribut](https://developer.mozilla.org/de/docs/Web/HTML/Global_attributes/dir)
|
|
998
|
+
|
|
999
|
+
> - [`aria-current`-Attribut](https://developer.mozilla.org/de/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
1000
|
+
|
|
1001
|
+
### (Optional) Schritt 9: Ändern der HTML-Sprach- und Richtungsattribute
|
|
1002
|
+
|
|
1003
|
+
Wenn Ihre Anwendung mehrere Sprachen unterstützt, ist es wichtig, die Attribute `lang` und `dir` des `<html>`-Tags an die aktuelle Lokalisierung anzupassen. Dies gewährleistet:
|
|
1004
|
+
|
|
1005
|
+
- **Barrierefreiheit**: Screenreader und unterstützende Technologien verlassen sich auf das richtige `lang`-Attribut, um Inhalte korrekt auszusprechen und zu interpretieren.
|
|
1006
|
+
- **Textrendering**: Das Attribut `dir` (Richtung) stellt sicher, dass Text in der richtigen Reihenfolge gerendert wird (z. B. von links nach rechts für Englisch, von rechts nach links für Arabisch oder Hebräisch), was für die Lesbarkeit entscheidend ist.
|
|
1007
|
+
- **SEO**: Suchmaschinen verwenden das `lang`-Attribut, um die Sprache Ihrer Seite zu bestimmen und die richtige lokalisierte Inhalte in den Suchergebnissen bereitzustellen.
|
|
1008
|
+
|
|
1009
|
+
Durch die dynamische Aktualisierung dieser Attribute bei Änderungen der Lokalisierung gewährleisten Sie ein konsistentes und barrierefreies Erlebnis für Benutzer in allen unterstützten Sprachen.
|
|
1010
|
+
|
|
1011
|
+
#### Implementierung des Hooks
|
|
1012
|
+
|
|
1013
|
+
Erstellen Sie einen benutzerdefinierten Hook, um die HTML-Attribute zu verwalten. Der Hook hört auf Lokalisierungsänderungen und aktualisiert die Attribute entsprechend:
|
|
1014
|
+
|
|
1015
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
1016
|
+
import { useEffect } from "react";
|
|
1017
|
+
import { useLocale } from "react-intlayer";
|
|
1018
|
+
import { getHTMLTextDir } from "intlayer";
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* Aktualisiert die Attribute `lang` und `dir` des HTML-Elements <html> basierend auf der aktuellen Lokalisierung.
|
|
1022
|
+
* - `lang`: Informiert Browser und Suchmaschinen über die Sprache der Seite.
|
|
1023
|
+
* - `dir`: Stellt die richtige Leserichtung sicher (z. B. 'ltr' für Englisch, 'rtl' für Arabisch).
|
|
1024
|
+
*
|
|
1025
|
+
* Diese dynamische Aktualisierung ist entscheidend für korrektes Textrendering, Barrierefreiheit und SEO.
|
|
1026
|
+
*/
|
|
1027
|
+
export const useI18nHTMLAttributes = () => {
|
|
1028
|
+
const { locale } = useLocale();
|
|
1029
|
+
|
|
1030
|
+
useEffect(() => {
|
|
1031
|
+
// Aktualisieren des Sprachattributs auf die aktuelle Lokalisierung.
|
|
1032
|
+
document.documentElement.lang = locale;
|
|
1033
|
+
|
|
1034
|
+
// Festlegen der Textrichtung basierend auf der aktuellen Lokalisierung.
|
|
1035
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1036
|
+
}, [locale]);
|
|
1037
|
+
};
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
```jsx fileName="src/hooks/useI18nHTMLAttributes.msx" codeFormat="esm"
|
|
1041
|
+
import { useEffect } from "react";
|
|
1042
|
+
import { useLocale } from "react-intlayer";
|
|
1043
|
+
import { getHTMLTextDir } from "intlayer";
|
|
1044
|
+
|
|
1045
|
+
/**
|
|
1046
|
+
* Aktualisiert die Attribute `lang` und `dir` des HTML-Elements <html> basierend auf der aktuellen Lokalisierung.
|
|
1047
|
+
* - `lang`: Informiert Browser und Suchmaschinen über die Sprache der Seite.
|
|
1048
|
+
* - `dir`: Stellt die richtige Leserichtung sicher (z. B. 'ltr' für Englisch, 'rtl' für Arabisch).
|
|
1049
|
+
*
|
|
1050
|
+
* Diese dynamische Aktualisierung ist entscheidend für korrektes Textrendering, Barrierefreiheit und SEO.
|
|
1051
|
+
*/
|
|
1052
|
+
export const useI18nHTMLAttributes = () => {
|
|
1053
|
+
const { locale } = useLocale();
|
|
1054
|
+
|
|
1055
|
+
useEffect(() => {
|
|
1056
|
+
// Aktualisieren des Sprachattributs auf die aktuelle Lokalisierung.
|
|
1057
|
+
document.documentElement.lang = locale;
|
|
1058
|
+
|
|
1059
|
+
// Festlegen der Textrichtung basierend auf der aktuellen Lokalisierung.
|
|
1060
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1061
|
+
}, [locale]);
|
|
1062
|
+
};
|
|
1063
|
+
```
|
|
1064
|
+
|
|
1065
|
+
```jsx fileName="src/hooks/useI18nHTMLAttributes.csx" codeFormat="commonjs"
|
|
1066
|
+
const { useEffect } = require("react");
|
|
1067
|
+
const { useLocale } = require("react-intlayer");
|
|
1068
|
+
const { getHTMLTextDir } = require("intlayer");
|
|
1069
|
+
|
|
1070
|
+
/**
|
|
1071
|
+
* Aktualisiert die Attribute `lang` und `dir` des HTML-Elements <html> basierend auf der aktuellen Lokalisierung.
|
|
1072
|
+
* - `lang`: Informiert Browser und Suchmaschinen über die Sprache der Seite.
|
|
1073
|
+
* - `dir`: Stellt die richtige Leserichtung sicher (z. B. 'ltr' für Englisch, 'rtl' für Arabisch).
|
|
1074
|
+
*
|
|
1075
|
+
* Diese dynamische Aktualisierung ist entscheidend für korrektes Textrendering, Barrierefreiheit und SEO.
|
|
1076
|
+
*/
|
|
1077
|
+
const useI18nHTMLAttributes = () => {
|
|
1078
|
+
const { locale } = useLocale();
|
|
1079
|
+
|
|
1080
|
+
useEffect(() => {
|
|
1081
|
+
// Aktualisieren des Sprachattributs auf die aktuelle Lokalisierung.
|
|
1082
|
+
document.documentElement.lang = locale;
|
|
1083
|
+
|
|
1084
|
+
// Festlegen der Textrichtung basierend auf der aktuellen Lokalisierung.
|
|
1085
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1086
|
+
}, [locale]);
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
module.exports = { useI18nHTMLAttributes };
|
|
1090
|
+
```
|
|
1091
|
+
|
|
1092
|
+
#### Verwendung des Hooks in Ihrer Anwendung
|
|
1093
|
+
|
|
1094
|
+
Integrieren Sie den Hook in Ihre Hauptkomponente, sodass die HTML-Attribute aktualisiert werden, wenn sich die Lokalisierung ändert:
|
|
1095
|
+
|
|
1096
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
1097
|
+
import type { FC } from "react";
|
|
1098
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1099
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1100
|
+
import "./App.css";
|
|
1101
|
+
|
|
1102
|
+
const AppContent: FC = () => {
|
|
1103
|
+
// Anwenden des Hooks, um die Attribute `lang` und `dir` des <html>-Tags basierend auf der Lokalisierung zu aktualisieren.
|
|
1104
|
+
useI18nHTMLAttributes();
|
|
1105
|
+
|
|
1106
|
+
// ... Rest Ihrer Komponente
|
|
1107
|
+
};
|
|
1108
|
+
|
|
1109
|
+
const App: FC = () => (
|
|
1110
|
+
<IntlayerProvider>
|
|
1111
|
+
<AppContent />
|
|
1112
|
+
</IntlayerProvider>
|
|
1113
|
+
);
|
|
1114
|
+
|
|
1115
|
+
export default App;
|
|
1116
|
+
```
|
|
1117
|
+
|
|
1118
|
+
```jsx fileName="src/App.msx" codeFormat="esm"
|
|
1119
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1120
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1121
|
+
import "./App.css";
|
|
1122
|
+
|
|
1123
|
+
const AppContent = () => {
|
|
1124
|
+
// Anwenden des Hooks, um die Attribute `lang` und `dir` des <html>-Tags basierend auf der Lokalisierung zu aktualisieren.
|
|
1125
|
+
useI18nHTMLAttributes();
|
|
1126
|
+
|
|
1127
|
+
// ... Rest Ihrer Komponente
|
|
1128
|
+
};
|
|
1129
|
+
|
|
1130
|
+
const App = () => (
|
|
1131
|
+
<IntlayerProvider>
|
|
1132
|
+
<AppContent />
|
|
1133
|
+
</IntlayerProvider>
|
|
1134
|
+
);
|
|
1135
|
+
|
|
1136
|
+
export default App;
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
```jsx fileName="src/App.csx" codeFormat="commonjs"
|
|
1140
|
+
const { FC } = require("react");
|
|
1141
|
+
const { IntlayerProvider, useIntlayer } = require("react-intlayer");
|
|
1142
|
+
const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
1143
|
+
require("./App.css");
|
|
1144
|
+
|
|
1145
|
+
const AppContent = () => {
|
|
1146
|
+
// Anwenden des Hooks, um die Attribute `lang` und `dir` des <html>-Tags basierend auf der Lokalisierung zu aktualisieren.
|
|
1147
|
+
useI18nHTMLAttributes();
|
|
1148
|
+
|
|
1149
|
+
// ... Rest Ihrer Komponente
|
|
1150
|
+
};
|
|
1151
|
+
|
|
1152
|
+
const App = () => (
|
|
1153
|
+
<IntlayerProvider>
|
|
1154
|
+
<AppContent />
|
|
1155
|
+
</IntlayerProvider>
|
|
1156
|
+
);
|
|
1157
|
+
|
|
1158
|
+
module.exports = App;
|
|
1159
|
+
```
|
|
1160
|
+
|
|
1161
|
+
Durch die Anwendung dieser Änderungen wird Ihre Anwendung:
|
|
1162
|
+
|
|
1163
|
+
- Sicherstellen, dass das **Sprachattribut** (`lang`) korrekt die aktuelle Lokalisierung widerspiegelt, was für SEO und Browserverhalten wichtig ist.
|
|
1164
|
+
- Die **Textrichtung** (`dir`) entsprechend der Lokalisierung anpassen, wodurch die Lesbarkeit und Benutzerfreundlichkeit für Sprachen mit unterschiedlichen Leserichtungen verbessert wird.
|
|
1165
|
+
- Ein barrierefreieres Erlebnis bieten, da unterstützende Technologien auf diese Attribute angewiesen sind, um optimal zu funktionieren.
|
|
1166
|
+
|
|
1167
|
+
### TypeScript konfigurieren
|
|
1168
|
+
|
|
1169
|
+
Intlayer verwendet Modulaugmentation, um die Vorteile von TypeScript zu nutzen und Ihre Codebasis robuster zu machen.
|
|
1170
|
+
|
|
1171
|
+

|
|
1172
|
+
|
|
1173
|
+

|
|
1174
|
+
|
|
1175
|
+
Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen enthält.
|
|
1176
|
+
|
|
1177
|
+
```json5 fileName="tsconfig.json"
|
|
1178
|
+
{
|
|
1179
|
+
// ... Ihre bestehenden TypeScript-Konfigurationen
|
|
1180
|
+
"include": [
|
|
1181
|
+
// ... Ihre bestehenden TypeScript-Konfigurationen
|
|
1182
|
+
".intlayer/**/*.ts", // Einbeziehen der automatisch generierten Typen
|
|
1183
|
+
],
|
|
1184
|
+
}
|
|
1185
|
+
```
|
|
1186
|
+
|
|
1187
|
+
### Git-Konfiguration
|
|
1188
|
+
|
|
1189
|
+
Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. Dadurch vermeiden Sie, dass diese in Ihr Git-Repository aufgenommen werden.
|
|
1190
|
+
|
|
1191
|
+
Fügen Sie dazu die folgenden Anweisungen zu Ihrer `.gitignore`-Datei hinzu:
|
|
1192
|
+
|
|
1193
|
+
```plaintext fileName=".gitignore"
|
|
1194
|
+
# Ignorieren der von Intlayer generierten Dateien
|
|
1195
|
+
.intlayer
|
|
1196
|
+
```
|
|
1197
|
+
|
|
1198
|
+
### Weiterführende Schritte
|
|
1199
|
+
|
|
1200
|
+
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.
|