@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,1311 @@
|
|
|
1
|
+
# Getting Started internationalizing (i18n) with Intlayer and Next.js 15 App Router
|
|
2
|
+
|
|
3
|
+
<iframe title="The best i18n solution for Next.js? Discover Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/e_PPG7PTqGU?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
4
|
+
|
|
5
|
+
انظر [Template Application](https://github.com/aymericzip/intlayer-next-15-template) على GitHub.
|
|
6
|
+
|
|
7
|
+
## ما هو Intlayer؟
|
|
8
|
+
|
|
9
|
+
**Intlayer** هو مكتبة مفتوحة المصدر مبتكرة للتدويل (i18n) مصممة لتبسيط دعم اللغات المتعددة في تطبيقات الويب الحديثة. يتكامل Intlayer بسلاسة مع أحدث إطار عمل **Next.js 15**، بما في ذلك **App Router** القوي. تم تحسينه للعمل مع **Server Components** لتقديم فعال وهو متوافق تمامًا مع [**Turbopack**](https://nextjs.org/docs/architecture/turbopack).
|
|
10
|
+
|
|
11
|
+
مع Intlayer، يمكنك:
|
|
12
|
+
|
|
13
|
+
- **إدارة الترجمات بسهولة** باستخدام القواميس التصريحية على مستوى المكونات.
|
|
14
|
+
- **توطين البيانات الوصفية ديناميكيًا**، والمسارات، والمحتوى.
|
|
15
|
+
- **الوصول إلى الترجمات في مكونات العميل والخادم**.
|
|
16
|
+
- **ضمان دعم TypeScript** مع الأنواع المولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
|
|
17
|
+
- **الاستفادة من الميزات المتقدمة**، مثل اكتشاف اللغة الديناميكي والتبديل.
|
|
18
|
+
|
|
19
|
+
> Intlayer متوافق مع Next.js 12، 13، 14، و15. إذا كنت تستخدم Next.js Page Router، يمكنك الرجوع إلى هذا [الدليل](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_with_nextjs_page_router.md). بالنسبة لـ Next.js 12، 13، 14 مع App Router، راجع هذا [الدليل](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_with_nextjs_14.md).
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## دليل خطوة بخطوة لإعداد Intlayer في تطبيق Next.js
|
|
24
|
+
|
|
25
|
+
### الخطوة 1: تثبيت التبعيات
|
|
26
|
+
|
|
27
|
+
قم بتثبيت الحزم اللازمة باستخدام npm:
|
|
28
|
+
|
|
29
|
+
```bash packageManager="npm"
|
|
30
|
+
npm install intlayer next-intlayer
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash packageManager="pnpm"
|
|
34
|
+
pnpm add intlayer next-intlayer
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```bash packageManager="yarn"
|
|
38
|
+
yarn add intlayer next-intlayer
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- **intlayer**
|
|
42
|
+
|
|
43
|
+
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/ar/dictionary/get_started.md)، والترجمة، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_cli.md).
|
|
44
|
+
|
|
45
|
+
- **next-intlayer**
|
|
46
|
+
|
|
47
|
+
الحزمة التي تدمج Intlayer مع Next.js. توفر موفري السياق وخطافات لتدويل Next.js. بالإضافة إلى ذلك، تتضمن مكون إضافي لـ Next.js لدمج Intlayer مع [Webpack](https://webpack.js.org/) أو [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack)، بالإضافة إلى البرامج الوسيطة لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط، ومعالجة إعادة توجيه URL.
|
|
48
|
+
|
|
49
|
+
### الخطوة 2: تكوين مشروعك
|
|
50
|
+
|
|
51
|
+
قم بإنشاء ملف تكوين لتحديد لغات تطبيقك:
|
|
52
|
+
|
|
53
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
54
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
55
|
+
|
|
56
|
+
const config: IntlayerConfig = {
|
|
57
|
+
internationalization: {
|
|
58
|
+
locales: [
|
|
59
|
+
Locales.ENGLISH,
|
|
60
|
+
Locales.FRENCH,
|
|
61
|
+
Locales.SPANISH,
|
|
62
|
+
// لغاتك الأخرى
|
|
63
|
+
],
|
|
64
|
+
defaultLocale: Locales.ENGLISH,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default config;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
72
|
+
import { Locales } from "intlayer";
|
|
73
|
+
|
|
74
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
75
|
+
const config = {
|
|
76
|
+
internationalization: {
|
|
77
|
+
locales: [
|
|
78
|
+
Locales.ENGLISH,
|
|
79
|
+
Locales.FRENCH,
|
|
80
|
+
Locales.SPANISH,
|
|
81
|
+
// لغاتك الأخرى
|
|
82
|
+
],
|
|
83
|
+
defaultLocale: Locales.ENGLISH,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export default config;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
91
|
+
const { Locales } = require("intlayer");
|
|
92
|
+
|
|
93
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
+
const config = {
|
|
95
|
+
internationalization: {
|
|
96
|
+
locales: [
|
|
97
|
+
Locales.ENGLISH,
|
|
98
|
+
Locales.FRENCH,
|
|
99
|
+
Locales.SPANISH,
|
|
100
|
+
// لغاتك الأخرى
|
|
101
|
+
],
|
|
102
|
+
defaultLocale: Locales.ENGLISH,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
module.exports = config;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL المحلية، وإعادة توجيه البرامج الوسيطة، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [وثائق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/ar/configuration.md).
|
|
110
|
+
|
|
111
|
+
### الخطوة 3: دمج Intlayer في تكوين Next.js الخاص بك
|
|
112
|
+
|
|
113
|
+
قم بتكوين إعداد Next.js الخاص بك لاستخدام Intlayer:
|
|
114
|
+
|
|
115
|
+
```typescript filename="next.config.ts" codeFormat="typescript"
|
|
116
|
+
import type { NextConfig } from "next";
|
|
117
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
118
|
+
|
|
119
|
+
const nextConfig: NextConfig = {
|
|
120
|
+
/* خيارات التكوين هنا */
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default withIntlayer(nextConfig);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```typescript fileName="next.config.mjs" codeFormat="esm"
|
|
127
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
128
|
+
|
|
129
|
+
/** @type {import('next').NextConfig} */
|
|
130
|
+
const nextConfig = {
|
|
131
|
+
/* خيارات التكوين هنا */
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export default withIntlayer(nextConfig);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```typescript fileName="next.config.cjs" codeFormat="commonjs"
|
|
138
|
+
const { withIntlayer } = require("next-intlayer/server");
|
|
139
|
+
|
|
140
|
+
/** @type {import('next').NextConfig} */
|
|
141
|
+
const nextConfig = {
|
|
142
|
+
/* خيارات التكوين هنا */
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
module.exports = withIntlayer(nextConfig);
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
> يتم استخدام مكون Next.js الإضافي `withIntlayer()` لدمج Intlayer مع Next.js. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. يحدد متغيرات بيئة Intlayer داخل بيئات [Webpack](https://webpack.js.org/) أو [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). بالإضافة إلى ذلك، يوفر أسماء مستعارة لتحسين الأداء ويضمن التوافق مع مكونات الخادم.
|
|
149
|
+
|
|
150
|
+
### الخطوة 4: تحديد مسارات اللغة الديناميكية
|
|
151
|
+
|
|
152
|
+
قم بإزالة كل شيء من `RootLayout` واستبدله بالكود التالي:
|
|
153
|
+
|
|
154
|
+
```tsx {3} fileName="src/app/layout.tsx" codeFormat="typescript"
|
|
155
|
+
import type { PropsWithChildren, FC } from "react";
|
|
156
|
+
import "./globals.css";
|
|
157
|
+
|
|
158
|
+
const RootLayout: FC<PropsWithChildren> = ({ children }) => children;
|
|
159
|
+
|
|
160
|
+
export default RootLayout;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```jsx {3} fileName="src/app/layout.mjx" codeFormat="esm"
|
|
164
|
+
import "./globals.css";
|
|
165
|
+
|
|
166
|
+
const RootLayout = ({ children }) => children;
|
|
167
|
+
|
|
168
|
+
export default RootLayout;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
```jsx {1,8} fileName="src/app/layout.csx" codeFormat="commonjs"
|
|
172
|
+
require("./globals.css");
|
|
173
|
+
|
|
174
|
+
const RootLayout = ({ children }) => children;
|
|
175
|
+
|
|
176
|
+
module.exports = {
|
|
177
|
+
default: RootLayout,
|
|
178
|
+
generateStaticParams,
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
> إبقاء مكون `RootLayout` فارغًا يسمح بتعيين سمات [`lang`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/lang) و [`dir`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/dir) إلى علامة `<html>`.
|
|
183
|
+
|
|
184
|
+
لتنفيذ التوجيه الديناميكي، قم بتوفير المسار للغة عن طريق إضافة تخطيط جديد في دليل `[locale]` الخاص بك:
|
|
185
|
+
|
|
186
|
+
```tsx fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
|
|
187
|
+
import type { NextLayoutIntlayer } from "next-intlayer";
|
|
188
|
+
import { Inter } from "next/font/google";
|
|
189
|
+
import { getHTMLTextDir } from "intlayer";
|
|
190
|
+
|
|
191
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
192
|
+
|
|
193
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
194
|
+
const { locale } = await params;
|
|
195
|
+
return (
|
|
196
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
197
|
+
<body className={inter.className}>{children}</body>
|
|
198
|
+
</html>
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export default LocaleLayout;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```jsx fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
|
|
206
|
+
import { getHTMLTextDir } from "intlayer";
|
|
207
|
+
|
|
208
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
209
|
+
|
|
210
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
211
|
+
const { locale } = await params;
|
|
212
|
+
return (
|
|
213
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
214
|
+
<body className={inter.className}>{children}</body>
|
|
215
|
+
</html>
|
|
216
|
+
);
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export default LocaleLayout;
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```jsx fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
|
|
223
|
+
const { Inter } = require("next/font/google");
|
|
224
|
+
const { getHTMLTextDir } = require("intlayer");
|
|
225
|
+
|
|
226
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
227
|
+
|
|
228
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
229
|
+
const { locale } = await params;
|
|
230
|
+
return (
|
|
231
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
232
|
+
<body className={inter.className}>{children}</body>
|
|
233
|
+
</html>
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
module.exports = LocaleLayout;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> يتم استخدام جزء المسار `[locale]` لتحديد اللغة. مثال: `/en-US/about` سيشير إلى `en-US` و `/fr/about` إلى `fr`.
|
|
241
|
+
|
|
242
|
+
ثم قم بتنفيذ وظيفة `generateStaticParams` في تخطيط تطبيقك.
|
|
243
|
+
|
|
244
|
+
```tsx {1} fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
|
|
245
|
+
export { generateStaticParams } from "next-intlayer"; // السطر المراد إدراجه
|
|
246
|
+
|
|
247
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
248
|
+
/*... باقي الكود*/
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export default LocaleLayout;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```jsx {1} fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
|
|
255
|
+
export { generateStaticParams } from "next-intlayer"; // السطر المراد إدراجه
|
|
256
|
+
|
|
257
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
258
|
+
/*... باقي الكود*/
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// ... باقي الكود
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
```jsx {1,7} fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
|
|
265
|
+
const { generateStaticParams } = require("next-intlayer"); // السطر المراد إدراجه
|
|
266
|
+
|
|
267
|
+
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
268
|
+
/*... باقي الكود*/
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
module.exports = { default: LocaleLayout, generateStaticParams };
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
> يضمن `generateStaticParams` أن يقوم تطبيقك ببناء الصفحات الضرورية مسبقًا لجميع اللغات، مما يقلل من حساب وقت التشغيل ويحسن تجربة المستخدم. لمزيد من التفاصيل، راجع [وثائق Next.js حول generateStaticParams](https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic-rendering#generate-static-params).
|
|
275
|
+
|
|
276
|
+
### الخطوة 5: إعلان المحتوى الخاص بك
|
|
277
|
+
|
|
278
|
+
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
|
|
279
|
+
|
|
280
|
+
```tsx fileName="src/app/[locale]/page.content.ts" contentDeclarationFormat="typescript"
|
|
281
|
+
import { t, type Dictionary } from "intlayer";
|
|
282
|
+
|
|
283
|
+
const pageContent = {
|
|
284
|
+
key: "page",
|
|
285
|
+
content: {
|
|
286
|
+
getStarted: {
|
|
287
|
+
main: t({
|
|
288
|
+
en: "Get started by editing",
|
|
289
|
+
fr: "Commencez par éditer",
|
|
290
|
+
es: "Comience por editar",
|
|
291
|
+
ar: "ابدأ بالتعديل",
|
|
292
|
+
}),
|
|
293
|
+
pageLink: "src/app/page.tsx",
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
} satisfies Dictionary;
|
|
297
|
+
|
|
298
|
+
export default pageContent;
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
```javascript fileName="src/app/[locale]/page.content.mjs" contentDeclarationFormat="esm"
|
|
302
|
+
import { t } from "intlayer";
|
|
303
|
+
|
|
304
|
+
/** @type {import('intlayer').Dictionary} */
|
|
305
|
+
const pageContent = {
|
|
306
|
+
key: "page",
|
|
307
|
+
content: {
|
|
308
|
+
getStarted: {
|
|
309
|
+
main: t({
|
|
310
|
+
en: "Get started by editing",
|
|
311
|
+
fr: "Commencez par éditer",
|
|
312
|
+
es: "Comience por editar",
|
|
313
|
+
ar: "ابدأ بالتعديل",
|
|
314
|
+
}),
|
|
315
|
+
pageLink: "src/app/page.tsx",
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
export default pageContent;
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
```javascript fileName="src/app/[locale]/page.content.cjs" contentDeclarationFormat="commonjs"
|
|
324
|
+
const { t } = require("intlayer");
|
|
325
|
+
|
|
326
|
+
/** @type {import('intlayer').Dictionary} */
|
|
327
|
+
const pageContent = {
|
|
328
|
+
key: "page",
|
|
329
|
+
content: {
|
|
330
|
+
getStarted: {
|
|
331
|
+
main: t({
|
|
332
|
+
en: "Get started by editing",
|
|
333
|
+
fr: "Commencez par éditer",
|
|
334
|
+
es: "Comience por editar",
|
|
335
|
+
ar: "ابدأ بالتعديل",
|
|
336
|
+
}),
|
|
337
|
+
pageLink: "src/app/page.tsx",
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
module.exports = pageContent;
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
```json fileName="src/app/[locale]/page.content.json" contentDeclarationFormat="json"
|
|
346
|
+
{
|
|
347
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
348
|
+
"key": "page",
|
|
349
|
+
"content": {
|
|
350
|
+
"getStarted": {
|
|
351
|
+
"nodeType": "translation",
|
|
352
|
+
"translation": {
|
|
353
|
+
"en": "Get started by editing",
|
|
354
|
+
"fr": "Commencez par éditer",
|
|
355
|
+
"es": "Comience por editar",
|
|
356
|
+
"ar": "ابدأ بالتعديل"
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"pageLink": {
|
|
360
|
+
"nodeType": "translation",
|
|
361
|
+
"translation": {
|
|
362
|
+
"en": "src/app/page.tsx",
|
|
363
|
+
"fr": "src/app/page.tsx",
|
|
364
|
+
"es": "src/app/page.tsx",
|
|
365
|
+
"ar": "src/app/page.tsx"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك طالما تم تضمينها في دليل `contentDir` (افتراضيًا، `./src`). وتطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
373
|
+
|
|
374
|
+
> لمزيد من التفاصيل، راجع [وثائق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/ar/dictionary/get_started.md).
|
|
375
|
+
|
|
376
|
+
### الخطوة 6: استخدام المحتوى في الكود الخاص بك
|
|
377
|
+
|
|
378
|
+
الوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء التطبيق الخاص بك:
|
|
379
|
+
|
|
380
|
+
```tsx fileName="src/app/[locale]/page.tsx" codeFormat="typescript"
|
|
381
|
+
import type { FC } from "react";
|
|
382
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
383
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
384
|
+
import { type NextPageIntlayer, IntlayerClientProvider } from "next-intlayer";
|
|
385
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
386
|
+
|
|
387
|
+
const PageContent: FC = () => {
|
|
388
|
+
const content = useIntlayer("page");
|
|
389
|
+
|
|
390
|
+
return (
|
|
391
|
+
<>
|
|
392
|
+
<p>{content.getStarted.main}</p>
|
|
393
|
+
<code>{content.getStarted.pageLink}</code>
|
|
394
|
+
</>
|
|
395
|
+
);
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
const Page: NextPageIntlayer = async ({ params }) => {
|
|
399
|
+
const { locale } = await params;
|
|
400
|
+
|
|
401
|
+
return (
|
|
402
|
+
<IntlayerServerProvider locale={locale}>
|
|
403
|
+
<PageContent />
|
|
404
|
+
<ServerComponentExample />
|
|
405
|
+
|
|
406
|
+
<IntlayerClientProvider locale={locale}>
|
|
407
|
+
<ClientComponentExample />
|
|
408
|
+
</IntlayerClientProvider>
|
|
409
|
+
</IntlayerServerProvider>
|
|
410
|
+
);
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
export default Page;
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
```jsx fileName="src/app/[locale]/page.mjx" codeFormat="esm"
|
|
417
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
418
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
419
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
420
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
421
|
+
|
|
422
|
+
const PageContent = () => {
|
|
423
|
+
const content = useIntlayer("page");
|
|
424
|
+
|
|
425
|
+
return (
|
|
426
|
+
<>
|
|
427
|
+
<p>{content.getStarted.main}</p>
|
|
428
|
+
<code>{content.getStarted.pageLink}</code>
|
|
429
|
+
</>
|
|
430
|
+
);
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
const Page = async ({ params }) => {
|
|
434
|
+
const { locale } = await params;
|
|
435
|
+
|
|
436
|
+
return (
|
|
437
|
+
<IntlayerServerProvider locale={locale}>
|
|
438
|
+
<PageContent />
|
|
439
|
+
<ServerComponentExample />
|
|
440
|
+
|
|
441
|
+
<IntlayerClientProvider locale={locale}>
|
|
442
|
+
<ClientComponentExample />
|
|
443
|
+
</IntlayerClientProvider>
|
|
444
|
+
</IntlayerServerProvider>
|
|
445
|
+
);
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
export default Page;
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
```jsx fileName="src/app/[locale]/page.csx" codeFormat="commonjs"
|
|
452
|
+
import { ClientComponentExample } from "@components/ClientComponentExample";
|
|
453
|
+
import { ServerComponentExample } from "@components/ServerComponentExample";
|
|
454
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
455
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
456
|
+
|
|
457
|
+
const PageContent = () => {
|
|
458
|
+
const content = useIntlayer("page");
|
|
459
|
+
|
|
460
|
+
return (
|
|
461
|
+
<>
|
|
462
|
+
<p>{content.getStarted.main}</p>
|
|
463
|
+
<code>{content.getStarted.pageLink}</code>
|
|
464
|
+
</>
|
|
465
|
+
);
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
const Page = async ({ params }) => {
|
|
469
|
+
const { locale } = await params;
|
|
470
|
+
|
|
471
|
+
return (
|
|
472
|
+
<IntlayerServerProvider locale={locale}>
|
|
473
|
+
<PageContent />
|
|
474
|
+
<ServerComponentExample />
|
|
475
|
+
|
|
476
|
+
<IntlayerClientProvider locale={locale}>
|
|
477
|
+
<ClientComponentExample />
|
|
478
|
+
</IntlayerClientProvider>
|
|
479
|
+
</IntlayerServerProvider>
|
|
480
|
+
);
|
|
481
|
+
};
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
- **`IntlayerClientProvider`** تُستخدم لتوفير اللغة للمكونات على جانب العميل. يمكن وضعها في أي مكون رئيسي، بما في ذلك التخطيط. ومع ذلك، يُوصى بوضعها في التخطيط لأن Next.js يشارك كود التخطيط عبر الصفحات، مما يجعله أكثر كفاءة. باستخدام `IntlayerClientProvider` في التخطيط، تتجنب إعادة تهيئتها لكل صفحة، مما يحسن الأداء ويحافظ على سياق توطين متسق في جميع أنحاء تطبيقك.
|
|
485
|
+
- **`IntlayerServerProvider`** تُستخدم لتوفير اللغة للأطفال على الخادم. لا يمكن تعيينها في التخطيط.
|
|
486
|
+
|
|
487
|
+
> لا يمكن للتخطيط والصفحة مشاركة سياق خادم مشترك لأن نظام سياق الخادم يعتمد على متجر بيانات لكل طلب (عبر آلية [ذاكرة التخزين المؤقت لـ React](https://react.dev/reference/react/cache))، مما يتسبب في إعادة إنشاء كل "سياق" لشرائح مختلفة من التطبيق. سيؤدي وضع الموفر في تخطيط مشترك إلى كسر هذا العزل، مما يمنع الانتشار الصحيح لقيم سياق الخادم إلى مكونات الخادم الخاصة بك.
|
|
488
|
+
|
|
489
|
+
```tsx {4,7} fileName="src/components/ClientComponentExample.tsx" codeFormat="typescript"
|
|
490
|
+
"use client";
|
|
491
|
+
|
|
492
|
+
import type { FC } from "react";
|
|
493
|
+
import { useIntlayer } from "next-intlayer";
|
|
494
|
+
|
|
495
|
+
export const ClientComponentExample: FC = () => {
|
|
496
|
+
const content = useIntlayer("client-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
497
|
+
|
|
498
|
+
return (
|
|
499
|
+
<div>
|
|
500
|
+
<h2>{content.title}</h2>
|
|
501
|
+
<p>{content.content}</p>
|
|
502
|
+
</div>
|
|
503
|
+
);
|
|
504
|
+
};
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
```jsx {3,6} fileName="src/components/ClientComponentExample.mjx" codeFormat="esm"
|
|
508
|
+
"use client";
|
|
509
|
+
|
|
510
|
+
import { useIntlayer } from "next-intlayer";
|
|
511
|
+
|
|
512
|
+
const ClientComponentExample = () => {
|
|
513
|
+
const content = useIntlayer("client-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
514
|
+
|
|
515
|
+
return (
|
|
516
|
+
<div>
|
|
517
|
+
<h2>{content.title}</h2>
|
|
518
|
+
<p>{content.content}</p>
|
|
519
|
+
</div>
|
|
520
|
+
);
|
|
521
|
+
};
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
```jsx {3,6} fileName="src/components/ClientComponentExample.csx" codeFormat="commonjs"
|
|
525
|
+
"use client";
|
|
526
|
+
|
|
527
|
+
const { useIntlayer } = require("next-intlayer");
|
|
528
|
+
|
|
529
|
+
const ClientComponentExample = () => {
|
|
530
|
+
const content = useIntlayer("client-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
531
|
+
|
|
532
|
+
return (
|
|
533
|
+
<div>
|
|
534
|
+
<h2>{content.title}</h2>
|
|
535
|
+
<p>{content.content}</p>
|
|
536
|
+
</div>
|
|
537
|
+
);
|
|
538
|
+
};
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
```tsx {2} fileName="src/components/ServerComponentExample.tsx" codeFormat="typescript"
|
|
542
|
+
import type { FC } from "react";
|
|
543
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
544
|
+
|
|
545
|
+
export const ServerComponentExample: FC = () => {
|
|
546
|
+
const content = useIntlayer("server-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
547
|
+
|
|
548
|
+
return (
|
|
549
|
+
<div>
|
|
550
|
+
<h2>{content.title}</h2>
|
|
551
|
+
<p>{content.content}</p>
|
|
552
|
+
</div>
|
|
553
|
+
);
|
|
554
|
+
};
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
```jsx {1} fileName="src/components/ServerComponentExample.mjx" codeFormat="esm"
|
|
558
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
559
|
+
|
|
560
|
+
const ServerComponentExample = () => {
|
|
561
|
+
const content = useIntlayer("server-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
562
|
+
|
|
563
|
+
return (
|
|
564
|
+
<div>
|
|
565
|
+
<h2>{content.title}</h2>
|
|
566
|
+
<p>{content.content}</p>
|
|
567
|
+
</div>
|
|
568
|
+
);
|
|
569
|
+
};
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
```jsx {1} fileName="src/components/ServerComponentExample.csx" codeFormat="commonjs"
|
|
573
|
+
const { useIntlayer } = require("next-intlayer/server");
|
|
574
|
+
|
|
575
|
+
const ServerComponentExample = () => {
|
|
576
|
+
const content = useIntlayer("server-component-example"); // قم بإنشاء إعلان محتوى ذي صلة
|
|
577
|
+
|
|
578
|
+
return (
|
|
579
|
+
<div>
|
|
580
|
+
<h2>{content.title}</h2>
|
|
581
|
+
<p>{content.content}</p>
|
|
582
|
+
</div>
|
|
583
|
+
);
|
|
584
|
+
};
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
> إذا كنت تريد استخدام المحتوى الخاص بك في سمة `string`، مثل `alt`، `title`، `href`، `aria-label`، إلخ، يجب عليك استدعاء قيمة الوظيفة، مثل:
|
|
588
|
+
|
|
589
|
+
> ```jsx
|
|
590
|
+
>
|
|
591
|
+
> ```
|
|
592
|
+
|
|
593
|
+
> <img src={content.image.src.value} alt={content.image.value} />
|
|
594
|
+
|
|
595
|
+
> ```
|
|
596
|
+
>
|
|
597
|
+
> ```
|
|
598
|
+
|
|
599
|
+
> لمعرفة المزيد عن خطاف `useIntlayer`، راجع [الوثائق](https://github.com/aymericzip/intlayer/blob/main/docs/ar/packages/next-intlayer/useIntlayer.md).
|
|
600
|
+
|
|
601
|
+
### (اختياري) الخطوة 7: تكوين البرامج الوسيطة لاكتشاف اللغة
|
|
602
|
+
|
|
603
|
+
قم بإعداد البرامج الوسيطة لاكتشاف اللغة المفضلة للمستخدم:
|
|
604
|
+
|
|
605
|
+
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
606
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
607
|
+
|
|
608
|
+
export const config = {
|
|
609
|
+
matcher:
|
|
610
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
611
|
+
};
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
615
|
+
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
616
|
+
|
|
617
|
+
export const config = {
|
|
618
|
+
matcher:
|
|
619
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
620
|
+
};
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
624
|
+
const { intlayerMiddleware } = require("next-intlayer/middleware");
|
|
625
|
+
|
|
626
|
+
const config = {
|
|
627
|
+
matcher:
|
|
628
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
module.exports = { middleware: intlayerMiddleware, config };
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
> يتم استخدام `intlayerMiddleware` لاكتشاف اللغة المفضلة للمستخدم وإعادة توجيههم إلى عنوان URL المناسب كما هو محدد في [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/ar/configuration.md). بالإضافة إلى ذلك، فإنه يمكّن من حفظ اللغة المفضلة للمستخدم في ملف تعريف ارتباط.
|
|
635
|
+
|
|
636
|
+
### (اختياري) الخطوة 8: تدويل البيانات الوصفية الخاصة بك
|
|
637
|
+
|
|
638
|
+
في حالة رغبتك في تدويل البيانات الوصفية الخاصة بك، مثل عنوان صفحتك، يمكنك استخدام وظيفة `generateMetadata` التي يوفرها Next.js. داخل الوظيفة، استخدم وظيفة `getTranslation` لترجمة البيانات الوصفية الخاصة بك.
|
|
639
|
+
|
|
640
|
+
````typescript fileName="src/app/[locale]/layout.tsx or src/app/[locale]/page.tsx" codeFormat="typescript"
|
|
641
|
+
import {
|
|
642
|
+
type IConfigLocales,
|
|
643
|
+
getTranslation,
|
|
644
|
+
getMultilingualUrls,
|
|
645
|
+
} from "intlayer";
|
|
646
|
+
import type { Metadata } from "next";
|
|
647
|
+
import type { LocalPromiseParams } from "next-intlayer";
|
|
648
|
+
|
|
649
|
+
export const generateMetadata = async ({
|
|
650
|
+
params,
|
|
651
|
+
}: LocalPromiseParams): Promise<Metadata> => {
|
|
652
|
+
const { locale } = await params;
|
|
653
|
+
const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale);
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* يولد كائنًا يحتوي على جميع عناوين URL لكل لغة.
|
|
657
|
+
*
|
|
658
|
+
* مثال:
|
|
659
|
+
* ```ts
|
|
660
|
+
* getMultilingualUrls('/about');
|
|
661
|
+
*
|
|
662
|
+
* // يعيد
|
|
663
|
+
* // {
|
|
664
|
+
* // en: '/about',
|
|
665
|
+
* // fr: '/fr/about',
|
|
666
|
+
* // es: '/es/about',
|
|
667
|
+
* // }
|
|
668
|
+
* ```
|
|
669
|
+
*/
|
|
670
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
671
|
+
|
|
672
|
+
return {
|
|
673
|
+
title: t<string>({
|
|
674
|
+
en: "My title",
|
|
675
|
+
fr: "Mon titre",
|
|
676
|
+
es: "Mi título",
|
|
677
|
+
ar: "عنواني",
|
|
678
|
+
}),
|
|
679
|
+
description: t({
|
|
680
|
+
en: "My description",
|
|
681
|
+
fr: "Ma description",
|
|
682
|
+
es: "Mi descripción",
|
|
683
|
+
ar: "وصف صفحتي",
|
|
684
|
+
}),
|
|
685
|
+
alternates: {
|
|
686
|
+
canonical: multilingualUrls[locale as keyof typeof multilingualUrls],
|
|
687
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
688
|
+
},
|
|
689
|
+
openGraph: {
|
|
690
|
+
url: multilingualUrls[locale],
|
|
691
|
+
},
|
|
692
|
+
};
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
// ... باقي الكود
|
|
696
|
+
````
|
|
697
|
+
|
|
698
|
+
````javascript fileName="src/app/[locale]/layout.mjs or src/app/[locale]/page.mjs" codeFormat="esm"
|
|
699
|
+
import { getTranslation, getMultilingualUrls } from "intlayer";
|
|
700
|
+
|
|
701
|
+
export const generateMetadata = async ({ params }) => {
|
|
702
|
+
const { locale } = await params;
|
|
703
|
+
const t = (content) => getTranslation(content, locale);
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* يولد كائنًا يحتوي على جميع عناوين URL لكل لغة.
|
|
707
|
+
*
|
|
708
|
+
* مثال:
|
|
709
|
+
* ```ts
|
|
710
|
+
* getMultilingualUrls('/about');
|
|
711
|
+
*
|
|
712
|
+
* // يعيد
|
|
713
|
+
* // {
|
|
714
|
+
* // en: '/about',
|
|
715
|
+
* // fr: '/fr/about',
|
|
716
|
+
* // es: '/es/about'
|
|
717
|
+
* // }
|
|
718
|
+
* ```
|
|
719
|
+
*/
|
|
720
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
721
|
+
|
|
722
|
+
return {
|
|
723
|
+
title: t({
|
|
724
|
+
en: "My title",
|
|
725
|
+
fr: "Mon titre",
|
|
726
|
+
es: "Mi título",
|
|
727
|
+
ar: "عنواني",
|
|
728
|
+
}),
|
|
729
|
+
description: t({
|
|
730
|
+
en: "My description",
|
|
731
|
+
fr: "Ma description",
|
|
732
|
+
es: "Mi descripción",
|
|
733
|
+
ar: "وصف صفحتي",
|
|
734
|
+
}),
|
|
735
|
+
alternates: {
|
|
736
|
+
canonical: multilingualUrls[locale],
|
|
737
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
738
|
+
},
|
|
739
|
+
openGraph: {
|
|
740
|
+
url: multilingualUrls[locale],
|
|
741
|
+
},
|
|
742
|
+
};
|
|
743
|
+
};
|
|
744
|
+
|
|
745
|
+
// ... باقي الكود
|
|
746
|
+
````
|
|
747
|
+
|
|
748
|
+
````javascript fileName="src/app/[locale]/layout.cjs or src/app/[locale]/page.cjs" codeFormat="commonjs"
|
|
749
|
+
const { getTranslation, getMultilingualUrls } = require("intlayer");
|
|
750
|
+
|
|
751
|
+
const generateMetadata = async ({ params }) => {
|
|
752
|
+
const { locale } = await params;
|
|
753
|
+
|
|
754
|
+
const t = (content) => getTranslation(content, locale);
|
|
755
|
+
|
|
756
|
+
/**
|
|
757
|
+
* يولد كائنًا يحتوي على جميع عناوين URL لكل لغة.
|
|
758
|
+
*
|
|
759
|
+
* مثال:
|
|
760
|
+
* ```ts
|
|
761
|
+
* getMultilingualUrls('/about');
|
|
762
|
+
*
|
|
763
|
+
* // يعيد
|
|
764
|
+
* // {
|
|
765
|
+
* // en: '/about',
|
|
766
|
+
* // fr: '/fr/about',
|
|
767
|
+
* // es: '/es/about'
|
|
768
|
+
* // }
|
|
769
|
+
* ```
|
|
770
|
+
*/
|
|
771
|
+
const multilingualUrls = getMultilingualUrls("/");
|
|
772
|
+
|
|
773
|
+
return {
|
|
774
|
+
title: t({
|
|
775
|
+
en: "My title",
|
|
776
|
+
fr: "Mon titre",
|
|
777
|
+
es: "Mi título",
|
|
778
|
+
ar: "عنواني",
|
|
779
|
+
}),
|
|
780
|
+
description: t({
|
|
781
|
+
en: "My description",
|
|
782
|
+
fr: "Ma description",
|
|
783
|
+
es: "Mi descripción",
|
|
784
|
+
ar: "وصف صفحتي",
|
|
785
|
+
}),
|
|
786
|
+
alternates: {
|
|
787
|
+
canonical: multilingualUrls[locale],
|
|
788
|
+
languages: { ...multilingualUrls, "x-default": "/" },
|
|
789
|
+
},
|
|
790
|
+
openGraph: {
|
|
791
|
+
url: multilingualUrls[locale],
|
|
792
|
+
},
|
|
793
|
+
};
|
|
794
|
+
};
|
|
795
|
+
|
|
796
|
+
module.exports = { generateMetadata };
|
|
797
|
+
|
|
798
|
+
// ... باقي الكود
|
|
799
|
+
````
|
|
800
|
+
|
|
801
|
+
> تعرف على المزيد حول تحسين البيانات الوصفية [في وثائق Next.js الرسمية](https://nextjs.org/docs/app/building-your-application/optimizing/metadata).
|
|
802
|
+
|
|
803
|
+
### (اختياري) الخطوة 9: تدويل ملف sitemap.xml و robots.txt
|
|
804
|
+
|
|
805
|
+
لتدويل ملف `sitemap.xml` و `robots.txt`، يمكنك استخدام وظيفة `getMultilingualUrls` التي يوفرها Intlayer. تتيح لك هذه الوظيفة إنشاء عناوين URL متعددة اللغات لخريطة الموقع الخاصة بك.
|
|
806
|
+
|
|
807
|
+
```tsx fileName="src/app/sitemap.ts" codeFormat="typescript"
|
|
808
|
+
import { getMultilingualUrls } from "intlayer";
|
|
809
|
+
import type { MetadataRoute } from "next";
|
|
810
|
+
|
|
811
|
+
const sitemap = (): MetadataRoute.Sitemap => [
|
|
812
|
+
{
|
|
813
|
+
url: "https://example.com",
|
|
814
|
+
alternates: {
|
|
815
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
816
|
+
},
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
url: "https://example.com/login",
|
|
820
|
+
alternates: {
|
|
821
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
822
|
+
},
|
|
823
|
+
},
|
|
824
|
+
{
|
|
825
|
+
url: "https://example.com/register",
|
|
826
|
+
alternates: {
|
|
827
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
828
|
+
},
|
|
829
|
+
},
|
|
830
|
+
];
|
|
831
|
+
|
|
832
|
+
export default sitemap;
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
```jsx fileName="src/app/sitemap.mjx" codeFormat="esm"
|
|
836
|
+
import { getMultilingualUrls } from "intlayer";
|
|
837
|
+
|
|
838
|
+
const sitemap = () => [
|
|
839
|
+
{
|
|
840
|
+
url: "https://example.com",
|
|
841
|
+
alternates: {
|
|
842
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
843
|
+
},
|
|
844
|
+
},
|
|
845
|
+
{
|
|
846
|
+
url: "https://example.com/login",
|
|
847
|
+
alternates: {
|
|
848
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
849
|
+
},
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
url: "https://example.com/register",
|
|
853
|
+
alternates: {
|
|
854
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
855
|
+
},
|
|
856
|
+
},
|
|
857
|
+
];
|
|
858
|
+
|
|
859
|
+
export default sitemap;
|
|
860
|
+
```
|
|
861
|
+
|
|
862
|
+
```jsx fileName="src/app/sitemap.csx" codeFormat="commonjs"
|
|
863
|
+
const { getMultilingualUrls } = require("intlayer");
|
|
864
|
+
|
|
865
|
+
const sitemap = () => [
|
|
866
|
+
{
|
|
867
|
+
url: "https://example.com",
|
|
868
|
+
alternates: {
|
|
869
|
+
languages: { ...getMultilingualUrls("https://example.com") },
|
|
870
|
+
},
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
url: "https://example.com/login",
|
|
874
|
+
alternates: {
|
|
875
|
+
languages: { ...getMultilingualUrls("https://example.com/login") },
|
|
876
|
+
},
|
|
877
|
+
},
|
|
878
|
+
{
|
|
879
|
+
url: "https://example.com/register",
|
|
880
|
+
alternates: {
|
|
881
|
+
languages: { ...getMultilingualUrls("https://example.com/register") },
|
|
882
|
+
},
|
|
883
|
+
},
|
|
884
|
+
];
|
|
885
|
+
|
|
886
|
+
module.exports = sitemap;
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
```tsx fileName="src/app/robots.ts" codeFormat="typescript"
|
|
890
|
+
import type { MetadataRoute } from "next";
|
|
891
|
+
import { getMultilingualUrls } from "intlayer";
|
|
892
|
+
|
|
893
|
+
const getAllMultilingualUrls = (urls: string[]) =>
|
|
894
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
|
|
895
|
+
|
|
896
|
+
const robots = (): MetadataRoute.Robots => ({
|
|
897
|
+
rules: {
|
|
898
|
+
userAgent: "*",
|
|
899
|
+
allow: ["/"],
|
|
900
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
901
|
+
},
|
|
902
|
+
host: "https://example.com",
|
|
903
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
904
|
+
});
|
|
905
|
+
|
|
906
|
+
export default robots;
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
```jsx fileName="src/app/robots.mjx" codeFormat="esm"
|
|
910
|
+
import { getMultilingualUrls } from "intlayer";
|
|
911
|
+
|
|
912
|
+
const getAllMultilingualUrls = (urls) =>
|
|
913
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
|
|
914
|
+
|
|
915
|
+
const robots = () => ({
|
|
916
|
+
rules: {
|
|
917
|
+
userAgent: "*",
|
|
918
|
+
allow: ["/"],
|
|
919
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
920
|
+
},
|
|
921
|
+
host: "https://example.com",
|
|
922
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
923
|
+
});
|
|
924
|
+
|
|
925
|
+
export default robots;
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
```jsx fileName="src/app/robots.csx" codeFormat="commonjs"
|
|
929
|
+
const { getMultilingualUrls } = require("intlayer");
|
|
930
|
+
|
|
931
|
+
const getAllMultilingualUrls = (urls) =>
|
|
932
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
|
|
933
|
+
|
|
934
|
+
const robots = () => ({
|
|
935
|
+
rules: {
|
|
936
|
+
userAgent: "*",
|
|
937
|
+
allow: ["/"],
|
|
938
|
+
disallow: getAllMultilingualUrls(["/login", "/register"]),
|
|
939
|
+
},
|
|
940
|
+
host: "https://example.com",
|
|
941
|
+
sitemap: `https://example.com/sitemap.xml`,
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
module.exports = robots;
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
> تعرف على المزيد حول تحسين خريطة الموقع [في وثائق Next.js الرسمية](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap). تعرف على المزيد حول تحسين robots.txt [في وثائق Next.js الرسمية](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots).
|
|
948
|
+
|
|
949
|
+
### (اختياري) الخطوة 10: تغيير لغة المحتوى الخاص بك
|
|
950
|
+
|
|
951
|
+
لتغيير لغة المحتوى الخاص بك في Next.js، الطريقة الموصى بها هي استخدام مكون `Link` لإعادة توجيه المستخدمين إلى الصفحة المحلية المناسبة. يتيح مكون `Link` جلب الصفحة مسبقًا، مما يساعد على تجنب إعادة تحميل الصفحة بالكامل.
|
|
952
|
+
|
|
953
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
954
|
+
"use client";
|
|
955
|
+
|
|
956
|
+
import type { FC } from "react";
|
|
957
|
+
import {
|
|
958
|
+
Locales,
|
|
959
|
+
getHTMLTextDir,
|
|
960
|
+
getLocaleName,
|
|
961
|
+
getLocalizedUrl,
|
|
962
|
+
} from "intlayer";
|
|
963
|
+
import { useLocale } from "next-intlayer";
|
|
964
|
+
import Link from "next/link";
|
|
965
|
+
|
|
966
|
+
export const LocaleSwitcher: FC = () => {
|
|
967
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
968
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
969
|
+
|
|
970
|
+
return (
|
|
971
|
+
<div>
|
|
972
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
973
|
+
<div id="localePopover" popover="auto">
|
|
974
|
+
{availableLocales.map((localeItem) => (
|
|
975
|
+
<Link
|
|
976
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
977
|
+
hrefLang={localeItem}
|
|
978
|
+
key={localeItem}
|
|
979
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
980
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
981
|
+
>
|
|
982
|
+
<span>
|
|
983
|
+
{/* اللغة - مثال: FR */}
|
|
984
|
+
{localeItem}
|
|
985
|
+
</span>
|
|
986
|
+
<span>
|
|
987
|
+
{/* اللغة في لغتها الخاصة - مثال: Français */}
|
|
988
|
+
{getLocaleName(localeItem, locale)}
|
|
989
|
+
</span>
|
|
990
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
991
|
+
{/* اللغة في اللغة الحالية - مثال: Francés مع اللغة الحالية المعينة إلى Locales.SPANISH */}
|
|
992
|
+
{getLocaleName(localeItem)}
|
|
993
|
+
</span>
|
|
994
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
995
|
+
{/* اللغة بالإنجليزية - مثال: French */}
|
|
996
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
997
|
+
</span>
|
|
998
|
+
</Link>
|
|
999
|
+
))}
|
|
1000
|
+
</div>
|
|
1001
|
+
</div>
|
|
1002
|
+
);
|
|
1003
|
+
};
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
1007
|
+
"use client";
|
|
1008
|
+
|
|
1009
|
+
import {
|
|
1010
|
+
Locales,
|
|
1011
|
+
getHTMLTextDir,
|
|
1012
|
+
getLocaleName,
|
|
1013
|
+
getLocalizedUrl,
|
|
1014
|
+
} from "intlayer";
|
|
1015
|
+
import { useLocale } from "next-intlayer";
|
|
1016
|
+
import Link from "next/link";
|
|
1017
|
+
|
|
1018
|
+
export const LocaleSwitcher = () => {
|
|
1019
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
1020
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
1021
|
+
|
|
1022
|
+
return (
|
|
1023
|
+
<div>
|
|
1024
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
1025
|
+
<div id="localePopover" popover="auto">
|
|
1026
|
+
{availableLocales.map((localeItem) => (
|
|
1027
|
+
<Link
|
|
1028
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
1029
|
+
hrefLang={localeItem}
|
|
1030
|
+
key={localeItem}
|
|
1031
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
1032
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
1033
|
+
>
|
|
1034
|
+
<span>
|
|
1035
|
+
{/* اللغة - مثال: FR */}
|
|
1036
|
+
{localeItem}
|
|
1037
|
+
</span>
|
|
1038
|
+
<span>
|
|
1039
|
+
{/* اللغة في لغتها الخاصة - مثال: Français */}
|
|
1040
|
+
{getLocaleName(localeItem, locale)}
|
|
1041
|
+
</span>
|
|
1042
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1043
|
+
{/* اللغة في اللغة الحالية - مثال: Francés مع اللغة الحالية المعينة إلى Locales.SPANISH */}
|
|
1044
|
+
{getLocaleName(localeItem)}
|
|
1045
|
+
</span>
|
|
1046
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1047
|
+
{/* اللغة بالإنجليزية - مثال: French */}
|
|
1048
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1049
|
+
</span>
|
|
1050
|
+
</Link>
|
|
1051
|
+
))}
|
|
1052
|
+
</div>
|
|
1053
|
+
</div>
|
|
1054
|
+
);
|
|
1055
|
+
};
|
|
1056
|
+
```
|
|
1057
|
+
|
|
1058
|
+
```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
|
|
1059
|
+
"use client";
|
|
1060
|
+
|
|
1061
|
+
const {
|
|
1062
|
+
Locales,
|
|
1063
|
+
getHTMLTextDir,
|
|
1064
|
+
getLocaleName,
|
|
1065
|
+
getLocalizedUrl,
|
|
1066
|
+
} = require("intlayer");
|
|
1067
|
+
const { useLocale } = require("next-intlayer");
|
|
1068
|
+
const Link = require("next/link");
|
|
1069
|
+
|
|
1070
|
+
export const LocaleSwitcher = () => {
|
|
1071
|
+
const { locale, pathWithoutLocale, availableLocales } = useLocale();
|
|
1072
|
+
const { setLocaleCookie } = useLocaleCookie();
|
|
1073
|
+
|
|
1074
|
+
return (
|
|
1075
|
+
<div>
|
|
1076
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
1077
|
+
<div id="localePopover" popover="auto">
|
|
1078
|
+
{availableLocales.map((localeItem) => (
|
|
1079
|
+
<Link
|
|
1080
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
1081
|
+
hrefLang={localeItem}
|
|
1082
|
+
key={localeItem}
|
|
1083
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
1084
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
1085
|
+
>
|
|
1086
|
+
<span>
|
|
1087
|
+
{/* اللغة - مثال: FR */}
|
|
1088
|
+
{localeItem}
|
|
1089
|
+
</span>
|
|
1090
|
+
<span>
|
|
1091
|
+
{/* اللغة في لغتها الخاصة - مثال: Français */}
|
|
1092
|
+
{getLocaleName(localeItem, locale)}
|
|
1093
|
+
</span>
|
|
1094
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1095
|
+
{/* اللغة في اللغة الحالية - مثال: Francés مع اللغة الحالية المعينة إلى Locales.SPANISH */}
|
|
1096
|
+
{getLocaleName(localeItem)}
|
|
1097
|
+
</span>
|
|
1098
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1099
|
+
{/* اللغة بالإنجليزية - مثال: French */}
|
|
1100
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1101
|
+
</span>
|
|
1102
|
+
</Link>
|
|
1103
|
+
))}
|
|
1104
|
+
</div>
|
|
1105
|
+
</div>
|
|
1106
|
+
);
|
|
1107
|
+
};
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
> مراجع الوثائق:
|
|
1111
|
+
|
|
1112
|
+
> - [خطاف `useLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/ar/packages/next-intlayer/useLocale.md)
|
|
1113
|
+
|
|
1114
|
+
> - [خطاف `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/ar/packages/intlayer/getLocaleName.md)
|
|
1115
|
+
|
|
1116
|
+
> - [خطاف `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/ar/packages/intlayer/getLocalizedUrl.md)
|
|
1117
|
+
|
|
1118
|
+
> - [خطاف `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/ar/packages/intlayer/getHTMLTextDir.md)
|
|
1119
|
+
|
|
1120
|
+
> - [سمة `hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=ar)
|
|
1121
|
+
|
|
1122
|
+
> - [سمة `lang`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
|
|
1123
|
+
|
|
1124
|
+
> - [سمة `dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
|
|
1125
|
+
|
|
1126
|
+
> - [سمة `aria-current`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
1127
|
+
|
|
1128
|
+
### (اختياري) الخطوة 11: إنشاء مكون رابط محلي
|
|
1129
|
+
|
|
1130
|
+
لضمان أن التنقل في تطبيقك يحترم اللغة الحالية، يمكنك إنشاء مكون `Link` مخصص. يقوم هذا المكون تلقائيًا بإضافة بادئة لعناوين URL الداخلية باللغة الحالية، بحيث يتم توجيه المستخدمين إلى الصفحات المناسبة بلغتهم.
|
|
1131
|
+
|
|
1132
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
1133
|
+
"use client";
|
|
1134
|
+
|
|
1135
|
+
import { getLocalizedUrl } from "intlayer";
|
|
1136
|
+
import NextLink, { type LinkProps as NextLinkProps } from "next/link";
|
|
1137
|
+
import { useLocale } from "next-intlayer";
|
|
1138
|
+
import type { PropsWithChildren, FC } from "react";
|
|
1139
|
+
|
|
1140
|
+
/**
|
|
1141
|
+
* وظيفة مساعدة للتحقق مما إذا كان عنوان URL خارجيًا.
|
|
1142
|
+
* إذا كان عنوان URL يبدأ بـ http:// أو https://، فإنه يعتبر خارجيًا.
|
|
1143
|
+
*/
|
|
1144
|
+
export const checkIsExternalLink = (href?: string): boolean =>
|
|
1145
|
+
/^https?:\/\//.test(href ?? "");
|
|
1146
|
+
|
|
1147
|
+
/**
|
|
1148
|
+
* مكون رابط مخصص يتكيف مع سمة href بناءً على اللغة الحالية.
|
|
1149
|
+
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة للعنوان باللغة (مثل /fr/about).
|
|
1150
|
+
* يضمن ذلك أن يظل التنقل داخل نفس سياق اللغة.
|
|
1151
|
+
*/
|
|
1152
|
+
export const Link: FC<PropsWithChildren<NextLinkProps>> = ({
|
|
1153
|
+
href,
|
|
1154
|
+
children,
|
|
1155
|
+
...props
|
|
1156
|
+
}) => {
|
|
1157
|
+
const { locale } = useLocale();
|
|
1158
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1159
|
+
|
|
1160
|
+
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على عنوان URL المحلي.
|
|
1161
|
+
const hrefI18n: NextLinkProps["href"] =
|
|
1162
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1163
|
+
|
|
1164
|
+
return (
|
|
1165
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1166
|
+
{children}
|
|
1167
|
+
</NextLink>
|
|
1168
|
+
);
|
|
1169
|
+
};
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
1173
|
+
"use client";
|
|
1174
|
+
|
|
1175
|
+
import { getLocalizedUrl } from "intlayer";
|
|
1176
|
+
import NextLink from "next/link";
|
|
1177
|
+
import { useLocale } from "next-intlayer";
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* وظيفة مساعدة للتحقق مما إذا كان عنوان URL خارجيًا.
|
|
1181
|
+
* إذا كان عنوان URL يبدأ بـ http:// أو https://، فإنه يعتبر خارجيًا.
|
|
1182
|
+
*/
|
|
1183
|
+
export const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1184
|
+
|
|
1185
|
+
/**
|
|
1186
|
+
* مكون رابط مخصص يتكيف مع سمة href بناءً على اللغة الحالية.
|
|
1187
|
+
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة للعنوان باللغة (مثل /fr/about).
|
|
1188
|
+
* يضمن ذلك أن يظل التنقل داخل نفس سياق اللغة.
|
|
1189
|
+
*/
|
|
1190
|
+
export const Link = ({ href, children, ...props }) => {
|
|
1191
|
+
const { locale } = useLocale();
|
|
1192
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1193
|
+
|
|
1194
|
+
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على عنوان URL المحلي.
|
|
1195
|
+
const hrefI18n =
|
|
1196
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1197
|
+
|
|
1198
|
+
return (
|
|
1199
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1200
|
+
{children}
|
|
1201
|
+
</NextLink>
|
|
1202
|
+
);
|
|
1203
|
+
};
|
|
1204
|
+
```
|
|
1205
|
+
|
|
1206
|
+
```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
|
|
1207
|
+
"use client";
|
|
1208
|
+
|
|
1209
|
+
const { getLocalizedUrl } = require("intlayer");
|
|
1210
|
+
const NextLink = require("next/link");
|
|
1211
|
+
const { useLocale } = require("next-intlayer");
|
|
1212
|
+
|
|
1213
|
+
/**
|
|
1214
|
+
* وظيفة مساعدة للتحقق مما إذا كان عنوان URL خارجيًا.
|
|
1215
|
+
* إذا كان عنوان URL يبدأ بـ http:// أو https://، فإنه يعتبر خارجيًا.
|
|
1216
|
+
*/
|
|
1217
|
+
const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* مكون رابط مخصص يتكيف مع سمة href بناءً على اللغة الحالية.
|
|
1221
|
+
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة للعنوان باللغة (مثل /fr/about).
|
|
1222
|
+
* يضمن ذلك أن يظل التنقل داخل نفس سياق اللغة.
|
|
1223
|
+
*/
|
|
1224
|
+
const Link = ({ href, children, ...props }) => {
|
|
1225
|
+
const { locale } = useLocale();
|
|
1226
|
+
const isExternalLink = checkIsExternalLink(href.toString());
|
|
1227
|
+
|
|
1228
|
+
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على عنوان URL المحلي.
|
|
1229
|
+
const hrefI18n =
|
|
1230
|
+
href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
|
|
1231
|
+
|
|
1232
|
+
return (
|
|
1233
|
+
<NextLink href={hrefI18n} {...props}>
|
|
1234
|
+
{children}
|
|
1235
|
+
</NextLink>
|
|
1236
|
+
);
|
|
1237
|
+
};
|
|
1238
|
+
```
|
|
1239
|
+
|
|
1240
|
+
#### كيف يعمل
|
|
1241
|
+
|
|
1242
|
+
- **اكتشاف الروابط الخارجية**:
|
|
1243
|
+
تحدد وظيفة المساعدة `checkIsExternalLink` ما إذا كان عنوان URL خارجيًا. يتم ترك الروابط الخارجية دون تغيير لأنها لا تحتاج إلى توطين.
|
|
1244
|
+
|
|
1245
|
+
- **استرجاع اللغة الحالية**:
|
|
1246
|
+
يوفر خطاف `useLocale` اللغة الحالية (مثل `fr` للفرنسية).
|
|
1247
|
+
|
|
1248
|
+
- **توطين عنوان URL**:
|
|
1249
|
+
بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدام `getLocalizedUrl` لإضافة بادئة تلقائيًا للعنوان باللغة الحالية. هذا يعني أنه إذا كان المستخدم باللغة الفرنسية، فإن تمرير `/about` كـ `href` سيحولها إلى `/fr/about`.
|
|
1250
|
+
|
|
1251
|
+
- **إرجاع الرابط**:
|
|
1252
|
+
يعيد المكون عنصر `<a>` بعنوان URL المحلي، مما يضمن أن التنقل يتسق مع اللغة.
|
|
1253
|
+
|
|
1254
|
+
من خلال دمج مكون `Link` هذا عبر تطبيقك، تحافظ على تجربة مستخدم متماسكة وواعية باللغة مع الاستفادة أيضًا من تحسين SEO وسهولة الاستخدام.
|
|
1255
|
+
|
|
1256
|
+
### (اختياري) الخطوة 12: تحسين حجم الحزمة
|
|
1257
|
+
|
|
1258
|
+
`next-intlayer` का उपयोग करते समय, डिफ़ॉल्ट रूप से प्रत्येक पृष्ठ के लिए शब्दकोश बंडल में शामिल होते हैं। बंडल आकार को अनुकूलित करने के लिए, Intlayer एक वैकल्पिक SWC प्लगइन प्रदान करता है जो मैक्रोज़ का उपयोग करके `useIntlayer` कॉल को बुद्धिमानी से बदलता है। यह सुनिश्चित करता है कि शब्दकोश केवल उन पृष्ठों के बंडल में शामिल हों जो वास्तव में उनका उपयोग करते हैं।
|
|
1259
|
+
|
|
1260
|
+
इस अनुकूलन को सक्षम करने के लिए, `@intlayer/swc` पैकेज इंस्टॉल करें। एक बार इंस्टॉल हो जाने पर, `next-intlayer` स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा:
|
|
1261
|
+
|
|
1262
|
+
```bash packageManager="npm"
|
|
1263
|
+
npm install @intlayer/swc --save-dev
|
|
1264
|
+
```
|
|
1265
|
+
|
|
1266
|
+
```bash packageManager="pnpm"
|
|
1267
|
+
pnpm add @intlayer/swc --save-dev
|
|
1268
|
+
```
|
|
1269
|
+
|
|
1270
|
+
```bash packageManager="yarn"
|
|
1271
|
+
yarn add @intlayer/swc --save-dev
|
|
1272
|
+
```
|
|
1273
|
+
|
|
1274
|
+
> ملاحظة: هذا التحسين متاح فقط لـ Next.js 13 وما فوق.
|
|
1275
|
+
|
|
1276
|
+
> ملاحظة: لم يتم تثبيت هذه الحزمة افتراضيًا لأن مكونات SWC لا تزال تجريبية على Next.js. قد يتغير ذلك في المستقبل.
|
|
1277
|
+
|
|
1278
|
+
### تكوين TypeScript
|
|
1279
|
+
|
|
1280
|
+
يستخدم Intlayer توسيع الوحدة للحصول على فوائد TypeScript وجعل قاعدة التعليمات البرمجية الخاصة بك أقوى.
|
|
1281
|
+
|
|
1282
|
+

|
|
1283
|
+
|
|
1284
|
+

|
|
1285
|
+
|
|
1286
|
+
تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع المولدة تلقائيًا.
|
|
1287
|
+
|
|
1288
|
+
```json5 fileName="tsconfig.json"
|
|
1289
|
+
{
|
|
1290
|
+
// ... تكوينات TypeScript الحالية الخاصة بك
|
|
1291
|
+
"include": [
|
|
1292
|
+
// ... تكوينات TypeScript الحالية الخاصة بك
|
|
1293
|
+
".intlayer/**/*.ts", // تضمين الأنواع المولدة تلقائيًا
|
|
1294
|
+
],
|
|
1295
|
+
}
|
|
1296
|
+
```
|
|
1297
|
+
|
|
1298
|
+
### تكوين Git
|
|
1299
|
+
|
|
1300
|
+
يوصى بتجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب الالتزام بها في مستودع Git الخاص بك.
|
|
1301
|
+
|
|
1302
|
+
للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
|
|
1303
|
+
|
|
1304
|
+
```plaintext fileName=".gitignore"
|
|
1305
|
+
# تجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer
|
|
1306
|
+
.intlayer
|
|
1307
|
+
```
|
|
1308
|
+
|
|
1309
|
+
### الذهاب أبعد
|
|
1310
|
+
|
|
1311
|
+
للمضي قدمًا، يمكنك تنفيذ [المحرر المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_visual_editor.md) أو نقل المحتوى الخاص بك باستخدام [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_CMS.md).
|