@intlayer/docs 5.8.1-canary.0 → 6.0.0-canary.0
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/blog/ar/rag_powered_documentation_assistant.md +282 -0
- package/blog/de/rag_powered_documentation_assistant.md +282 -0
- package/blog/en/rag_powered_documentation_assistant.md +289 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
- package/blog/es/rag_powered_documentation_assistant.md +308 -0
- package/blog/fr/rag_powered_documentation_assistant.md +308 -0
- package/blog/hi/rag_powered_documentation_assistant.md +284 -0
- package/blog/it/rag_powered_documentation_assistant.md +284 -0
- package/blog/ja/rag_powered_documentation_assistant.md +284 -0
- package/blog/ko/rag_powered_documentation_assistant.md +283 -0
- package/blog/pt/rag_powered_documentation_assistant.md +284 -0
- package/blog/ru/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/index.md +69 -0
- package/blog/tr/internationalization_and_SEO.md +273 -0
- package/blog/tr/intlayer_with_i18next.md +162 -0
- package/blog/tr/intlayer_with_next-i18next.md +367 -0
- package/blog/tr/intlayer_with_next-intl.md +392 -0
- package/blog/tr/intlayer_with_react-i18next.md +346 -0
- package/blog/tr/intlayer_with_react-intl.md +345 -0
- package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
- package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
- package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
- package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
- package/blog/tr/rag_powered_documentation_assistant.md +284 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
- package/blog/tr/what_is_internationalization.md +166 -0
- package/blog/zh/rag_powered_documentation_assistant.md +284 -0
- package/dist/cjs/generated/blog.entry.cjs +212 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +660 -132
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +6 -0
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +212 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +660 -132
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +6 -0
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +5 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/autoFill.md +41 -40
- package/docs/ar/configuration.md +202 -199
- package/docs/ar/dictionary/content_file.md +1059 -0
- package/docs/ar/intlayer_CMS.md +4 -4
- package/docs/ar/intlayer_with_nestjs.md +271 -0
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +533 -0
- package/docs/ar/intlayer_with_tanstack.md +465 -299
- package/docs/ar/intlayer_with_vite+preact.md +7 -7
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/ar/packages/vite-intlayer/index.md +3 -3
- package/docs/ar/readme.md +261 -0
- package/docs/ar/testing.md +199 -0
- package/docs/de/autoFill.md +42 -19
- package/docs/de/configuration.md +155 -147
- package/docs/de/dictionary/content_file.md +1059 -0
- package/docs/de/intlayer_CMS.md +4 -5
- package/docs/de/intlayer_with_nestjs.md +270 -0
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_react_router_v7.md +537 -0
- package/docs/de/intlayer_with_tanstack.md +469 -302
- package/docs/de/intlayer_with_vite+preact.md +7 -7
- package/docs/de/intlayer_with_vite+react.md +7 -7
- package/docs/de/intlayer_with_vite+vue.md +9 -9
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/de/readme.md +261 -0
- package/docs/de/testing.md +200 -0
- package/docs/en/CI_CD.md +4 -6
- package/docs/en/autoFill.md +25 -5
- package/docs/en/configuration.md +45 -54
- package/docs/en/dictionary/content_file.md +1054 -0
- package/docs/en/intlayer_CMS.md +8 -7
- package/docs/en/intlayer_cli.md +112 -5
- package/docs/en/intlayer_with_nestjs.md +268 -0
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +531 -0
- package/docs/en/intlayer_with_tanstack.md +463 -294
- package/docs/en/intlayer_with_vite+preact.md +8 -8
- package/docs/en/intlayer_with_vite+react.md +8 -8
- package/docs/en/intlayer_with_vite+vue.md +8 -8
- package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
- package/docs/en/packages/vite-intlayer/index.md +3 -3
- package/docs/en/readme.md +261 -0
- package/docs/en/testing.md +200 -0
- package/docs/en-GB/autoFill.md +29 -6
- package/docs/en-GB/configuration.md +79 -71
- package/docs/en-GB/dictionary/content_file.md +1084 -0
- package/docs/en-GB/intlayer_CMS.md +4 -5
- package/docs/en-GB/intlayer_with_nestjs.md +268 -0
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
- package/docs/en-GB/intlayer_with_tanstack.md +466 -299
- package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
- package/docs/en-GB/intlayer_with_vite+react.md +7 -7
- package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
- package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
- package/docs/en-GB/readme.md +261 -0
- package/docs/en-GB/testing.md +200 -0
- package/docs/es/autoFill.md +45 -23
- package/docs/es/configuration.md +171 -167
- package/docs/es/dictionary/content_file.md +1088 -0
- package/docs/es/intlayer_CMS.md +4 -5
- package/docs/es/intlayer_with_nestjs.md +268 -0
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +533 -0
- package/docs/es/intlayer_with_tanstack.md +469 -280
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/es/packages/vite-intlayer/index.md +3 -3
- package/docs/es/readme.md +261 -0
- package/docs/es/testing.md +200 -0
- package/docs/fr/autoFill.md +47 -24
- package/docs/fr/configuration.md +213 -198
- package/docs/fr/dictionary/content_file.md +1054 -0
- package/docs/fr/intlayer_CMS.md +4 -5
- package/docs/fr/intlayer_with_nestjs.md +268 -0
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +549 -0
- package/docs/fr/intlayer_with_tanstack.md +465 -279
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/packages/vite-intlayer/index.md +3 -3
- package/docs/fr/readme.md +261 -0
- package/docs/fr/testing.md +200 -0
- package/docs/hi/autoFill.md +47 -25
- package/docs/hi/configuration.md +194 -189
- package/docs/hi/dictionary/content_file.md +1056 -0
- package/docs/hi/intlayer_CMS.md +4 -5
- package/docs/hi/intlayer_with_nestjs.md +269 -0
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +533 -0
- package/docs/hi/intlayer_with_tanstack.md +467 -282
- package/docs/hi/intlayer_with_vite+preact.md +7 -7
- package/docs/hi/intlayer_with_vite+react.md +7 -7
- package/docs/hi/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/packages/vite-intlayer/index.md +3 -3
- package/docs/hi/readme.md +261 -0
- package/docs/hi/testing.md +200 -0
- package/docs/it/autoFill.md +46 -24
- package/docs/it/configuration.md +169 -161
- package/docs/it/dictionary/content_file.md +1061 -0
- package/docs/it/intlayer_CMS.md +4 -5
- package/docs/it/intlayer_with_nestjs.md +268 -0
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +535 -0
- package/docs/it/intlayer_with_tanstack.md +467 -301
- package/docs/it/intlayer_with_vite+preact.md +7 -7
- package/docs/it/intlayer_with_vite+react.md +7 -7
- package/docs/it/intlayer_with_vite+vue.md +9 -9
- package/docs/it/packages/vite-intlayer/index.md +3 -3
- package/docs/it/readme.md +261 -0
- package/docs/it/testing.md +200 -0
- package/docs/ja/autoFill.md +45 -23
- package/docs/ja/configuration.md +243 -204
- package/docs/ja/dictionary/content_file.md +1064 -0
- package/docs/ja/intlayer_CMS.md +4 -5
- package/docs/ja/intlayer_with_nestjs.md +268 -0
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +534 -0
- package/docs/ja/intlayer_with_tanstack.md +467 -303
- package/docs/ja/intlayer_with_vite+preact.md +7 -7
- package/docs/ja/intlayer_with_vite+react.md +7 -7
- package/docs/ja/intlayer_with_vite+vue.md +9 -9
- package/docs/ja/packages/vite-intlayer/index.md +3 -3
- package/docs/ja/readme.md +263 -0
- package/docs/ja/testing.md +200 -0
- package/docs/ko/autoFill.md +39 -16
- package/docs/ko/configuration.md +217 -197
- package/docs/ko/dictionary/content_file.md +1060 -0
- package/docs/ko/intlayer_CMS.md +4 -5
- package/docs/ko/intlayer_with_nestjs.md +268 -0
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +540 -0
- package/docs/ko/intlayer_with_tanstack.md +466 -302
- package/docs/ko/intlayer_with_vite+preact.md +7 -7
- package/docs/ko/intlayer_with_vite+react.md +7 -7
- package/docs/ko/intlayer_with_vite+vue.md +9 -9
- package/docs/ko/packages/vite-intlayer/index.md +3 -3
- package/docs/ko/readme.md +261 -0
- package/docs/ko/testing.md +200 -0
- package/docs/pt/autoFill.md +39 -15
- package/docs/pt/configuration.md +165 -147
- package/docs/pt/dictionary/content_file.md +1062 -0
- package/docs/pt/intlayer_CMS.md +4 -5
- package/docs/pt/intlayer_with_nestjs.md +271 -0
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +535 -0
- package/docs/pt/intlayer_with_tanstack.md +469 -300
- package/docs/pt/intlayer_with_vite+preact.md +7 -7
- package/docs/pt/intlayer_with_vite+react.md +7 -7
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/pt/packages/vite-intlayer/index.md +3 -3
- package/docs/pt/readme.md +261 -0
- package/docs/pt/testing.md +200 -0
- package/docs/ru/autoFill.md +52 -30
- package/docs/ru/configuration.md +164 -117
- package/docs/ru/dictionary/content_file.md +1064 -0
- package/docs/ru/intlayer_CMS.md +4 -4
- package/docs/ru/intlayer_with_nestjs.md +270 -0
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +534 -0
- package/docs/ru/intlayer_with_tanstack.md +470 -305
- package/docs/ru/intlayer_with_vite+preact.md +7 -7
- package/docs/ru/intlayer_with_vite+react.md +7 -7
- package/docs/ru/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/packages/vite-intlayer/index.md +3 -3
- package/docs/ru/readme.md +261 -0
- package/docs/ru/testing.md +202 -0
- package/docs/tr/CI_CD.md +198 -0
- package/docs/tr/autoFill.md +201 -0
- package/docs/tr/configuration.md +585 -0
- package/docs/tr/dictionary/condition.md +243 -0
- package/docs/tr/dictionary/content_file.md +1055 -0
- package/docs/tr/dictionary/enumeration.md +251 -0
- package/docs/tr/dictionary/file.md +228 -0
- package/docs/tr/dictionary/function_fetching.md +218 -0
- package/docs/tr/dictionary/gender.md +279 -0
- package/docs/tr/dictionary/insertion.md +191 -0
- package/docs/tr/dictionary/markdown.md +385 -0
- package/docs/tr/dictionary/nesting.md +279 -0
- package/docs/tr/dictionary/translation.md +315 -0
- package/docs/tr/formatters.md +618 -0
- package/docs/tr/how_works_intlayer.md +254 -0
- package/docs/tr/index.md +168 -0
- package/docs/tr/interest_of_intlayer.md +288 -0
- package/docs/tr/intlayer_CMS.md +347 -0
- package/docs/tr/intlayer_cli.md +570 -0
- package/docs/tr/intlayer_visual_editor.md +269 -0
- package/docs/tr/intlayer_with_angular.md +694 -0
- package/docs/tr/intlayer_with_create_react_app.md +1218 -0
- package/docs/tr/intlayer_with_express.md +415 -0
- package/docs/tr/intlayer_with_lynx+react.md +511 -0
- package/docs/tr/intlayer_with_nestjs.md +268 -0
- package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
- package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
- package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
- package/docs/tr/intlayer_with_nuxt.md +773 -0
- package/docs/tr/intlayer_with_react_native+expo.md +660 -0
- package/docs/tr/intlayer_with_react_router_v7.md +531 -0
- package/docs/tr/intlayer_with_tanstack.md +452 -0
- package/docs/tr/intlayer_with_vite+preact.md +1673 -0
- package/docs/tr/intlayer_with_vite+react.md +1632 -0
- package/docs/tr/intlayer_with_vite+solid.md +288 -0
- package/docs/tr/intlayer_with_vite+svelte.md +288 -0
- package/docs/tr/intlayer_with_vite+vue.md +1042 -0
- package/docs/tr/introduction.md +209 -0
- package/docs/tr/locale_mapper.md +244 -0
- package/docs/tr/mcp_server.md +207 -0
- package/docs/tr/packages/@intlayer/api/index.md +58 -0
- package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
- package/docs/tr/packages/@intlayer/cli/index.md +47 -0
- package/docs/tr/packages/@intlayer/config/index.md +142 -0
- package/docs/tr/packages/@intlayer/core/index.md +51 -0
- package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
- package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
- package/docs/tr/packages/@intlayer/editor/index.md +47 -0
- package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
- package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
- package/docs/tr/packages/angular-intlayer/index.md +59 -0
- package/docs/tr/packages/express-intlayer/index.md +258 -0
- package/docs/tr/packages/express-intlayer/t.md +459 -0
- package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
- package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
- package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
- package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
- package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
- package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
- package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
- package/docs/tr/packages/intlayer/getTranslation.md +196 -0
- package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
- package/docs/tr/packages/intlayer/index.md +505 -0
- package/docs/tr/packages/intlayer-cli/index.md +71 -0
- package/docs/tr/packages/intlayer-editor/index.md +139 -0
- package/docs/tr/packages/lynx-intlayer/index.md +85 -0
- package/docs/tr/packages/next-intlayer/index.md +154 -0
- package/docs/tr/packages/next-intlayer/t.md +354 -0
- package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
- package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
- package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
- package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
- package/docs/tr/packages/preact-intlayer/index.md +55 -0
- package/docs/tr/packages/react-intlayer/index.md +148 -0
- package/docs/tr/packages/react-intlayer/t.md +304 -0
- package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
- package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
- package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
- package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
- package/docs/tr/packages/react-native-intlayer/index.md +85 -0
- package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
- package/docs/tr/packages/solid-intlayer/index.md +56 -0
- package/docs/tr/packages/svelte-intlayer/index.md +55 -0
- package/docs/tr/packages/vite-intlayer/index.md +82 -0
- package/docs/tr/packages/vue-intlayer/index.md +59 -0
- package/docs/tr/per_locale_file.md +321 -0
- package/docs/tr/readme.md +261 -0
- package/docs/tr/roadmap.md +338 -0
- package/docs/tr/testing.md +200 -0
- package/docs/tr/vs_code_extension.md +154 -0
- package/docs/zh/autoFill.md +40 -18
- package/docs/zh/configuration.md +245 -226
- package/docs/zh/dictionary/content_file.md +1064 -0
- package/docs/zh/intlayer_CMS.md +4 -5
- package/docs/zh/intlayer_with_nestjs.md +268 -0
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +535 -0
- package/docs/zh/intlayer_with_tanstack.md +468 -278
- package/docs/zh/intlayer_with_vite+preact.md +7 -7
- package/docs/zh/intlayer_with_vite+react.md +7 -7
- package/docs/zh/intlayer_with_vite+vue.md +7 -7
- package/docs/zh/packages/vite-intlayer/index.md +3 -3
- package/docs/zh/readme.md +261 -0
- package/docs/zh/testing.md +198 -0
- package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
- package/frequent_questions/tr/array_as_content_declaration.md +72 -0
- package/frequent_questions/tr/build_dictionaries.md +59 -0
- package/frequent_questions/tr/build_error_CI_CD.md +75 -0
- package/frequent_questions/tr/customized_locale_list.md +65 -0
- package/frequent_questions/tr/domain_routing.md +114 -0
- package/frequent_questions/tr/esbuild_error.md +30 -0
- package/frequent_questions/tr/get_locale_cookie.md +142 -0
- package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
- package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
- package/frequent_questions/tr/static_rendering.md +45 -0
- package/frequent_questions/tr/translated_path_url.md +56 -0
- package/frequent_questions/tr/unknown_command.md +98 -0
- package/legal/tr/privacy_notice.md +83 -0
- package/legal/tr/terms_of_service.md +55 -0
- package/package.json +13 -13
- package/src/generated/blog.entry.ts +212 -0
- package/src/generated/docs.entry.ts +663 -135
- package/src/generated/frequentQuestions.entry.ts +85 -1
- package/src/generated/legal.entry.ts +7 -1
- package/docs/ar/dictionary/content_extention_customization.md +0 -100
- package/docs/ar/dictionary/get_started.md +0 -527
- package/docs/de/dictionary/content_extention_customization.md +0 -100
- package/docs/de/dictionary/get_started.md +0 -531
- package/docs/en/dictionary/content_extention_customization.md +0 -102
- package/docs/en/dictionary/get_started.md +0 -529
- package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
- package/docs/en-GB/dictionary/get_started.md +0 -591
- package/docs/es/dictionary/content_extention_customization.md +0 -100
- package/docs/es/dictionary/get_started.md +0 -527
- package/docs/fr/dictionary/content_extention_customization.md +0 -100
- package/docs/fr/dictionary/get_started.md +0 -527
- package/docs/hi/dictionary/content_extention_customization.md +0 -100
- package/docs/hi/dictionary/get_started.md +0 -527
- package/docs/it/dictionary/content_extention_customization.md +0 -113
- package/docs/it/dictionary/get_started.md +0 -573
- package/docs/ja/dictionary/content_extention_customization.md +0 -113
- package/docs/ja/dictionary/get_started.md +0 -576
- package/docs/ko/dictionary/content_extention_customization.md +0 -100
- package/docs/ko/dictionary/get_started.md +0 -530
- package/docs/pt/dictionary/content_extention_customization.md +0 -100
- package/docs/pt/dictionary/get_started.md +0 -532
- package/docs/ru/dictionary/content_extention_customization.md +0 -100
- package/docs/ru/dictionary/get_started.md +0 -575
- package/docs/zh/dictionary/content_extention_customization.md +0 -117
- package/docs/zh/dictionary/get_started.md +0 -533
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-09-04
|
|
3
|
+
updatedAt: 2025-09-04
|
|
4
|
+
title: البدء مع Intlayer في React Router v7
|
|
5
|
+
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه واعٍ للغة.
|
|
6
|
+
keywords:
|
|
7
|
+
- التدويل
|
|
8
|
+
- التوثيق
|
|
9
|
+
- Intlayer
|
|
10
|
+
- React Router v7
|
|
11
|
+
- React
|
|
12
|
+
- i18n
|
|
13
|
+
- TypeScript
|
|
14
|
+
- توجيه اللغة
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- environment
|
|
18
|
+
- vite-and-react
|
|
19
|
+
- react-router-v7
|
|
20
|
+
applicationTemplate: https://github.com/AydinTheFirst/react-router-intlayer
|
|
21
|
+
author: AydinTheFirst
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# البدء في التدويل (i18n) مع Intlayer و React Router v7
|
|
25
|
+
|
|
26
|
+
يوضح هذا الدليل كيفية دمج **Intlayer** لتوفير تدويل سلس في مشاريع React Router v7 مع توجيه واعٍ للغة، ودعم TypeScript، وممارسات تطوير حديثة.
|
|
27
|
+
|
|
28
|
+
## ما هو Intlayer؟
|
|
29
|
+
|
|
30
|
+
**Intlayer** هو مكتبة تدويل (i18n) مبتكرة ومفتوحة المصدر مصممة لتبسيط دعم تعدد اللغات في تطبيقات الويب الحديثة.
|
|
31
|
+
|
|
32
|
+
مع Intlayer، يمكنك:
|
|
33
|
+
|
|
34
|
+
- **إدارة الترجمات بسهولة** باستخدام قواميس إعلانية على مستوى المكونات.
|
|
35
|
+
- **توطين البيانات الوصفية، والمسارات، والمحتوى بشكل ديناميكي**.
|
|
36
|
+
- **ضمان دعم TypeScript** من خلال أنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
|
|
37
|
+
- **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة والتبديل بينها.
|
|
38
|
+
- **تمكين التوجيه الواعي للغة** باستخدام نظام التوجيه المعتمد على التكوين في React Router v7.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## دليل خطوة بخطوة لإعداد Intlayer في تطبيق React Router v7
|
|
43
|
+
|
|
44
|
+
### الخطوة 1: تثبيت التبعيات
|
|
45
|
+
|
|
46
|
+
قم بتثبيت الحزم اللازمة باستخدام مدير الحزم المفضل لديك:
|
|
47
|
+
|
|
48
|
+
```bash packageManager="npm"
|
|
49
|
+
npm install intlayer react-intlayer
|
|
50
|
+
npm install vite-intlayer --save-dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer react-intlayer
|
|
55
|
+
pnpm add vite-intlayer --save-dev
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- **intlayer**
|
|
59
|
+
|
|
60
|
+
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)، والترجمة البرمجية، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_cli.md).
|
|
61
|
+
|
|
62
|
+
- **react-intlayer**
|
|
63
|
+
الحزمة التي تدمج Intlayer مع تطبيق React. توفر موفري السياق (context providers) وخطافات (hooks) للتدويل في React.
|
|
64
|
+
|
|
65
|
+
- **vite-intlayer**
|
|
66
|
+
تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط (cookies)، والتعامل مع إعادة توجيه عناوين URL.
|
|
67
|
+
|
|
68
|
+
### الخطوة 2: تكوين مشروعك
|
|
69
|
+
|
|
70
|
+
قم بإنشاء ملف تكوين لتكوين لغات تطبيقك:
|
|
71
|
+
|
|
72
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
73
|
+
import { type IntlayerConfig, Locales } from "intlayer";
|
|
74
|
+
|
|
75
|
+
const config: IntlayerConfig = {
|
|
76
|
+
internationalization: {
|
|
77
|
+
defaultLocale: Locales.ENGLISH,
|
|
78
|
+
locales: [Locales.ENGLISH, Locales.TURKISH],
|
|
79
|
+
},
|
|
80
|
+
middleware: {
|
|
81
|
+
prefixDefault: true, // دائمًا أضف بادئة اللغة الافتراضية في عناوين URL
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export default config;
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
89
|
+
import { Locales } from "intlayer";
|
|
90
|
+
|
|
91
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
92
|
+
const config = {
|
|
93
|
+
internationalization: {
|
|
94
|
+
defaultLocale: Locales.ENGLISH,
|
|
95
|
+
locales: [Locales.ENGLISH, Locales.TURKISH],
|
|
96
|
+
},
|
|
97
|
+
middleware: {
|
|
98
|
+
prefixDefault: true,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export default config;
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
106
|
+
const { Locales } = require("intlayer");
|
|
107
|
+
|
|
108
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
109
|
+
const config = {
|
|
110
|
+
internationalization: {
|
|
111
|
+
defaultLocale: Locales.ENGLISH,
|
|
112
|
+
locales: [Locales.ENGLISH, Locales.TURKISH],
|
|
113
|
+
},
|
|
114
|
+
middleware: {
|
|
115
|
+
prefixDefault: true,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
module.exports = config;
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
> من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط، أسماء ملفات تعريف الارتباط، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
|
|
123
|
+
|
|
124
|
+
### الخطوة 3: تكوين مسارات React Router v7
|
|
125
|
+
|
|
126
|
+
قم بإعداد تكوين التوجيه الخاص بك مع مسارات مدركة للغة:
|
|
127
|
+
|
|
128
|
+
```typescript fileName="app/routes.ts" codeFormat="typescript"
|
|
129
|
+
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
130
|
+
|
|
131
|
+
export default [
|
|
132
|
+
layout("routes/layout.tsx", [
|
|
133
|
+
route("/", "routes/page.tsx"), // الصفحة الجذرية - يعيد التوجيه إلى اللغة
|
|
134
|
+
route("/:lang", "routes/[lang]/page.tsx"), // الصفحة الرئيسية المحلية
|
|
135
|
+
route("/:lang/about", "routes/[lang]/about/page.tsx"), // صفحة حول المحلية
|
|
136
|
+
]),
|
|
137
|
+
] satisfies RouteConfig;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### الخطوة 4: دمج Intlayer في تكوين Vite الخاص بك
|
|
141
|
+
|
|
142
|
+
أضف مكون intlayer الإضافي إلى تكوينك:
|
|
143
|
+
|
|
144
|
+
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
145
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
146
|
+
import { defineConfig } from "vite";
|
|
147
|
+
import { intlayerMiddlewarePlugin, intlayerPlugin } from "vite-intlayer";
|
|
148
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
149
|
+
|
|
150
|
+
export default defineConfig({
|
|
151
|
+
plugins: [
|
|
152
|
+
reactRouter(),
|
|
153
|
+
tsconfigPaths(),
|
|
154
|
+
intlayerPlugin(),
|
|
155
|
+
intlayerMiddlewarePlugin(),
|
|
156
|
+
],
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
> يتم استخدام مكون Vite الإضافي `intlayerPlugin()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. كما يعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر ألقابًا لتحسين الأداء.
|
|
161
|
+
|
|
162
|
+
### الخطوة 5: إنشاء مكونات التخطيط
|
|
163
|
+
|
|
164
|
+
قم بإعداد تخطيط الجذر والتخطيطات الخاصة باللغات:
|
|
165
|
+
|
|
166
|
+
#### تخطيط الجذر
|
|
167
|
+
|
|
168
|
+
```tsx fileName="app/routes/layout.tsx" codeFormat="typescript"
|
|
169
|
+
// app/routes/layout.tsx
|
|
170
|
+
import { Outlet } from "react-router";
|
|
171
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
172
|
+
|
|
173
|
+
export default function RootLayout() {
|
|
174
|
+
return (
|
|
175
|
+
<IntlayerProvider>
|
|
176
|
+
<Outlet />
|
|
177
|
+
</IntlayerProvider>
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### الخطوة 6: إعلان المحتوى الخاص بك
|
|
183
|
+
|
|
184
|
+
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
|
|
185
|
+
|
|
186
|
+
```tsx fileName="app/routes/[lang]/page.content.ts" contentDeclarationFormat="typescript"
|
|
187
|
+
import { t, type Dictionary } from "intlayer";
|
|
188
|
+
|
|
189
|
+
const pageContent = {
|
|
190
|
+
key: "page",
|
|
191
|
+
content: {
|
|
192
|
+
title: t({
|
|
193
|
+
en: "Welcome to React Router v7 + Intlayer",
|
|
194
|
+
tr: "React Router v7 + Intlayer'a Hoş Geldiniz",
|
|
195
|
+
}),
|
|
196
|
+
description: t({
|
|
197
|
+
en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
|
|
198
|
+
tr: "React Router v7 ve Intlayer kullanarak kolayca çok dilli uygulamalar geliştirin.",
|
|
199
|
+
}),
|
|
200
|
+
aboutLink: t({
|
|
201
|
+
en: "تعرف علينا",
|
|
202
|
+
tr: "Hakkımızda Öğrenin",
|
|
203
|
+
}),
|
|
204
|
+
homeLink: t({
|
|
205
|
+
en: "الرئيسية",
|
|
206
|
+
tr: "Ana Sayfa",
|
|
207
|
+
}),
|
|
208
|
+
},
|
|
209
|
+
} satisfies Dictionary;
|
|
210
|
+
|
|
211
|
+
export default pageContent;
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./app`). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
215
|
+
|
|
216
|
+
> لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md).
|
|
217
|
+
|
|
218
|
+
### الخطوة 7: إنشاء مكونات مدركة للغة
|
|
219
|
+
|
|
220
|
+
قم بإنشاء مكون `LocalizedLink` للتنقل المدرك للغة:
|
|
221
|
+
|
|
222
|
+
```tsx fileName="app/components/localized-link.tsx" codeFormat="typescript"
|
|
223
|
+
// app/components/localized-link.tsx
|
|
224
|
+
import { getLocalizedUrl } from "intlayer";
|
|
225
|
+
import { useLocale } from "react-intlayer";
|
|
226
|
+
import React from "react";
|
|
227
|
+
import { Link, useLocation } from "react-router";
|
|
228
|
+
|
|
229
|
+
type RouterLinkProps = React.ComponentProps<typeof Link>;
|
|
230
|
+
|
|
231
|
+
export default function LocalizedLink({ to, ...props }: RouterLinkProps) {
|
|
232
|
+
const { locale } = useLocale();
|
|
233
|
+
const location = useLocation();
|
|
234
|
+
|
|
235
|
+
// دالة للتحقق مما إذا كان الرابط خارجيًا
|
|
236
|
+
const isExternal = (path: string) =>
|
|
237
|
+
/^([a-z][a-z0-9+.-]*:)?\/\//i.test(path) || path.startsWith("mailto:");
|
|
238
|
+
|
|
239
|
+
if (typeof to === "string") {
|
|
240
|
+
if (to.startsWith("/") && !isExternal(to)) {
|
|
241
|
+
return <Link to={getLocalizedUrl(to, locale)} {...props} />;
|
|
242
|
+
}
|
|
243
|
+
return <Link to={to} {...props} />;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (to && typeof to === "object") {
|
|
247
|
+
const pathname = (to as { pathname?: string }).pathname;
|
|
248
|
+
if (pathname && pathname.startsWith("/") && !isExternal(pathname)) {
|
|
249
|
+
return (
|
|
250
|
+
<Link
|
|
251
|
+
to={{ ...to, pathname: getLocalizedUrl(pathname, locale) }}
|
|
252
|
+
{...props}
|
|
253
|
+
/>
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
return <Link to={to} {...props} />;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return (
|
|
260
|
+
<Link
|
|
261
|
+
to={getLocalizedUrl(location.pathname + location.search, locale)}
|
|
262
|
+
{...props}
|
|
263
|
+
/>
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### الخطوة 8: استخدام Intlayer في صفحاتك
|
|
269
|
+
|
|
270
|
+
قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
|
|
271
|
+
|
|
272
|
+
#### صفحة إعادة التوجيه الجذرية
|
|
273
|
+
|
|
274
|
+
```tsx fileName="app/routes/page.tsx" codeFormat="typescript"
|
|
275
|
+
// app/routes/page.tsx
|
|
276
|
+
import { useLocale } from "react-intlayer";
|
|
277
|
+
import { Navigate } from "react-router";
|
|
278
|
+
|
|
279
|
+
export default function Page() {
|
|
280
|
+
const { locale } = useLocale();
|
|
281
|
+
|
|
282
|
+
return <Navigate replace to={locale} />;
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
#### الصفحة الرئيسية المترجمة
|
|
287
|
+
|
|
288
|
+
```tsx fileName="app/routes/[lang]/page.tsx" codeFormat="typescript"
|
|
289
|
+
import { useIntlayer } from "react-intlayer";
|
|
290
|
+
import LocalizedLink from "~/components/localized-link";
|
|
291
|
+
|
|
292
|
+
export default function Page() {
|
|
293
|
+
const content = useIntlayer("page");
|
|
294
|
+
|
|
295
|
+
return (
|
|
296
|
+
<div style={{ padding: "2rem", textAlign: "center" }}>
|
|
297
|
+
<h1>{content.title}</h1>
|
|
298
|
+
<p>{content.description}</p>
|
|
299
|
+
<nav style={{ marginTop: "2rem" }}>
|
|
300
|
+
<LocalizedLink
|
|
301
|
+
to="/about"
|
|
302
|
+
style={{
|
|
303
|
+
display: "inline-block",
|
|
304
|
+
padding: "0.5rem 1rem",
|
|
305
|
+
backgroundColor: "#007bff",
|
|
306
|
+
color: "white",
|
|
307
|
+
textDecoration: "none",
|
|
308
|
+
borderRadius: "4px",
|
|
309
|
+
}}
|
|
310
|
+
>
|
|
311
|
+
{content.aboutLink}
|
|
312
|
+
</LocalizedLink>
|
|
313
|
+
</nav>
|
|
314
|
+
</div>
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
> لمعرفة المزيد عن الخطاف `useIntlayer`، راجع [التوثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useIntlayer.md).
|
|
320
|
+
|
|
321
|
+
### الخطوة 9: إنشاء مكون لتبديل اللغة
|
|
322
|
+
|
|
323
|
+
قم بإنشاء مكون يسمح للمستخدمين بتغيير اللغة:
|
|
324
|
+
|
|
325
|
+
```tsx fileName="app/components/locale-switcher.tsx" codeFormat="typescript"
|
|
326
|
+
import { getLocalizedUrl, getLocaleName } from "intlayer";
|
|
327
|
+
import { useLocale } from "react-intlayer";
|
|
328
|
+
import { useLocation, useNavigate } from "react-router";
|
|
329
|
+
|
|
330
|
+
export default function LocaleSwitcher() {
|
|
331
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
332
|
+
const location = useLocation();
|
|
333
|
+
const navigate = useNavigate();
|
|
334
|
+
|
|
335
|
+
const handleLocaleChange = (newLocale: string) => {
|
|
336
|
+
const localizedUrl = getLocalizedUrl(
|
|
337
|
+
location.pathname + location.search,
|
|
338
|
+
newLocale
|
|
339
|
+
);
|
|
340
|
+
setLocale(newLocale);
|
|
341
|
+
navigate(localizedUrl);
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
return (
|
|
345
|
+
<div style={{ margin: "1rem 0" }}>
|
|
346
|
+
<label htmlFor="locale-select">اختر اللغة: </label>
|
|
347
|
+
<select
|
|
348
|
+
id="locale-select"
|
|
349
|
+
value={locale}
|
|
350
|
+
onChange={(e) => handleLocaleChange(e.target.value)}
|
|
351
|
+
style={{ padding: "0.25rem", marginLeft: "0.5rem" }}
|
|
352
|
+
>
|
|
353
|
+
{availableLocales.map((availableLocale) => (
|
|
354
|
+
<option key={availableLocale} value={availableLocale}>
|
|
355
|
+
{getLocaleName(availableLocale)}
|
|
356
|
+
</option>
|
|
357
|
+
))}
|
|
358
|
+
</select>
|
|
359
|
+
</div>
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
> لمعرفة المزيد عن الخطاف `useLocale`، راجع [التوثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md).
|
|
365
|
+
|
|
366
|
+
### الخطوة 10: إضافة إدارة خصائص HTML (اختياري)
|
|
367
|
+
|
|
368
|
+
أنشئ خطافًا لإدارة خصائص lang و dir في HTML:
|
|
369
|
+
|
|
370
|
+
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
371
|
+
// app/hooks/useI18nHTMLAttributes.tsx
|
|
372
|
+
import { getHTMLTextDir } from "intlayer";
|
|
373
|
+
import { useEffect } from "react";
|
|
374
|
+
import { useLocale } from "react-intlayer";
|
|
375
|
+
|
|
376
|
+
tsx;
|
|
377
|
+
export const useI18nHTMLAttributes = () => {
|
|
378
|
+
const { locale } = useLocale();
|
|
379
|
+
|
|
380
|
+
useEffect(() => {
|
|
381
|
+
document.documentElement.lang = locale;
|
|
382
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
383
|
+
}, [locale]);
|
|
384
|
+
};
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
ثم استخدمها في مكون الجذر الخاص بك:
|
|
388
|
+
|
|
389
|
+
```tsx fileName="app/root.tsx" codeFormat="typescript"
|
|
390
|
+
// app/routes/layout.tsx
|
|
391
|
+
import { Outlet } from "react-router";
|
|
392
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
393
|
+
|
|
394
|
+
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // استيراد الـ hook
|
|
395
|
+
|
|
396
|
+
export default function RootLayout() {
|
|
397
|
+
useI18nHTMLAttributes(); // استدعاء الـ hook
|
|
398
|
+
|
|
399
|
+
return (
|
|
400
|
+
<IntlayerProvider>
|
|
401
|
+
<Outlet />
|
|
402
|
+
</IntlayerProvider>
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### الخطوة 11: بناء وتشغيل تطبيقك
|
|
408
|
+
|
|
409
|
+
قم ببناء قواميس المحتوى وتشغيل تطبيقك:
|
|
410
|
+
|
|
411
|
+
```bash packageManager="npm"
|
|
412
|
+
# بناء قواميس Intlayer
|
|
413
|
+
npm run intlayer:build
|
|
414
|
+
|
|
415
|
+
# بدء خادم التطوير
|
|
416
|
+
npm run dev
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
```bash packageManager="pnpm"
|
|
420
|
+
# بناء قواميس Intlayer
|
|
421
|
+
pnpm intlayer:build
|
|
422
|
+
|
|
423
|
+
# بدء خادم التطوير
|
|
424
|
+
pnpm dev
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
```bash packageManager="yarn"
|
|
428
|
+
# بناء قواميس Intlayer
|
|
429
|
+
yarn intlayer:build
|
|
430
|
+
|
|
431
|
+
# بدء خادم التطوير
|
|
432
|
+
yarn dev
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### الخطوة 12: تكوين TypeScript (اختياري)
|
|
436
|
+
|
|
437
|
+
يستخدم Intlayer تعزيز الوحدات (module augmentation) للاستفادة من TypeScript وجعل قاعدة الشيفرة الخاصة بك أقوى.
|
|
438
|
+
|
|
439
|
+
تأكد من أن تكوين TypeScript الخاص بك يشمل الأنواع التي تم إنشاؤها تلقائيًا:
|
|
440
|
+
|
|
441
|
+
```json5 fileName="tsconfig.json"
|
|
442
|
+
{
|
|
443
|
+
compilerOptions: {
|
|
444
|
+
// ... تكوينات TypeScript الحالية الخاصة بك
|
|
445
|
+
},
|
|
446
|
+
include: [
|
|
447
|
+
// ... تكوينات الإدراج الحالية الخاصة بك
|
|
448
|
+
".intlayer/**/*.ts", // تضمين الأنواع التي تم إنشاؤها تلقائيًا
|
|
449
|
+
],
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### تكوين Git
|
|
454
|
+
|
|
455
|
+
يوصى بتجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب الالتزام بها في مستودع Git الخاص بك.
|
|
456
|
+
|
|
457
|
+
للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
|
|
458
|
+
|
|
459
|
+
```plaintext fileName=".gitignore"
|
|
460
|
+
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
|
|
461
|
+
.intlayer
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## النشر في بيئة الإنتاج
|
|
467
|
+
|
|
468
|
+
عند نشر تطبيقك:
|
|
469
|
+
|
|
470
|
+
1. **قم ببناء تطبيقك:**
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
npm run build
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
2. **قم ببناء قواميس Intlayer:**
|
|
477
|
+
|
|
478
|
+
```bash
|
|
479
|
+
npm run intlayer:build
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
3. **نقل `vite-intlayer` إلى التبعيات** إذا كنت تستخدم الوسيط (middleware) في الإنتاج:
|
|
483
|
+
```bash
|
|
484
|
+
npm install vite-intlayer --save
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
سيدعم تطبيقك الآن:
|
|
488
|
+
|
|
489
|
+
- **هيكلية عناوين URL**: `/en`، `/en/about`، `/tr`، `/tr/about`
|
|
490
|
+
- **الكشف التلقائي عن اللغة** بناءً على تفضيلات المتصفح
|
|
491
|
+
- **التوجيه المدرك للغة** باستخدام React Router v7
|
|
492
|
+
- **دعم TypeScript** مع أنواع مولدة تلقائيًا
|
|
493
|
+
- **التصيير على جانب الخادم** مع التعامل الصحيح مع اللغة
|
|
494
|
+
|
|
495
|
+
## إضافة VS Code
|
|
496
|
+
|
|
497
|
+
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **إضافة Intlayer الرسمية لـ VS Code**.
|
|
498
|
+
|
|
499
|
+
[التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
500
|
+
|
|
501
|
+
تقدم هذه الإضافة:
|
|
502
|
+
|
|
503
|
+
- **الإكمال التلقائي** لمفاتيح الترجمة.
|
|
504
|
+
- **الكشف الفوري عن الأخطاء** للترجمات المفقودة.
|
|
505
|
+
- **معاينات داخلية** للمحتوى المترجم.
|
|
506
|
+
- **إجراءات سريعة** لإنشاء الترجمة وتحديثها بسهولة.
|
|
507
|
+
|
|
508
|
+
لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع [توثيق إضافة Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## التقدم أكثر
|
|
513
|
+
|
|
514
|
+
للتقدم أكثر، يمكنك تنفيذ [المحرر المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_visual_editor.md) أو إخراج المحتوى الخاص بك باستخدام [نظام إدارة المحتوى (CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_CMS.md).
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## مراجع التوثيق
|
|
519
|
+
|
|
520
|
+
- [توثيق Intlayer](https://intlayer.org)
|
|
521
|
+
- [توثيق React Router v7](https://reactrouter.com/)
|
|
522
|
+
- [هوك useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useIntlayer.md)
|
|
523
|
+
- [خطاف useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md)
|
|
524
|
+
- [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)
|
|
525
|
+
- [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)
|
|
526
|
+
|
|
527
|
+
يوفر هذا الدليل الشامل كل ما تحتاجه لدمج Intlayer مع React Router v7 لتطبيق دولي بالكامل مع توجيه مدرك للغة ودعم TypeScript.
|
|
528
|
+
|
|
529
|
+
## تاريخ الوثيقة
|
|
530
|
+
|
|
531
|
+
| الإصدار | التاريخ | التغييرات |
|
|
532
|
+
| ------- | --------- | ----------------------- |
|
|
533
|
+
| 5.8.2 | 2025-09-4 | أضيف لـ React Router v7 |
|