@intlayer/docs 5.5.11 → 5.6.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/intlayer_with_next-intl.md +0 -1
- package/blog/ar/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ar/what_is_internationalization.md +2 -2
- package/blog/de/intlayer_with_next-intl.md +0 -1
- package/blog/de/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/de/what_is_internationalization.md +2 -2
- package/blog/en/intlayer_with_next-intl.md +0 -1
- package/blog/en/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en/what_is_internationalization.md +2 -2
- package/blog/en-GB/intlayer_with_next-intl.md +0 -1
- package/blog/en-GB/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en-GB/what_is_internationalization.md +2 -2
- package/blog/es/intlayer_with_next-intl.md +0 -1
- package/blog/es/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/es/what_is_internationalization.md +2 -2
- package/blog/fr/intlayer_with_next-intl.md +0 -1
- package/blog/fr/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/fr/what_is_internationalization.md +2 -2
- package/blog/hi/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/hi/what_is_internationalization.md +2 -2
- package/blog/it/intlayer_with_next-intl.md +0 -1
- package/blog/it/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/it/what_is_internationalization.md +2 -2
- package/blog/ja/intlayer_with_next-intl.md +0 -1
- package/blog/ja/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ja/what_is_internationalization.md +2 -2
- package/blog/ko/intlayer_with_next-intl.md +0 -1
- package/blog/ko/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/intlayer_with_next-intl.md +0 -1
- package/blog/pt/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/what_is_internationalization.md +2 -2
- package/blog/ru/intlayer_with_next-intl.md +0 -1
- package/blog/ru/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ru/what_is_internationalization.md +2 -2
- package/blog/zh/intlayer_with_next-intl.md +0 -1
- package/blog/zh/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/zh/what_is_internationalization.md +2 -2
- package/dist/cjs/blog.cjs +2 -2
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +17 -6
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs +2 -2
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +2 -2
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1152 -252
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +3778 -1124
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +794 -161
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +32 -31
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/legal.cjs +2 -2
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs +2 -2
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +17 -6
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs +2 -2
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs +2 -2
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +1151 -252
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +3777 -1124
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +793 -161
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +31 -31
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/legal.mjs +2 -2
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts +2 -2
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts +5 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/doc.d.ts +2 -2
- package/dist/types/doc.d.ts.map +1 -1
- package/dist/types/frequentQuestions.d.ts +2 -2
- package/dist/types/frequentQuestions.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/dist/types/legal.d.ts +2 -2
- package/dist/types/legal.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +1 -0
- package/docs/ar/intlayer_cli.md +292 -177
- package/docs/ar/intlayer_visual_editor.md +1 -0
- package/docs/ar/intlayer_with_angular.md +1 -0
- package/docs/ar/intlayer_with_create_react_app.md +1 -0
- package/docs/ar/intlayer_with_lynx+react.md +1 -0
- package/docs/ar/intlayer_with_nextjs_14.md +1 -0
- package/docs/ar/intlayer_with_nextjs_15.md +3 -1
- package/docs/ar/intlayer_with_nuxt.md +1 -0
- package/docs/ar/intlayer_with_react_native+expo.md +1 -0
- package/docs/ar/intlayer_with_vite+preact.md +4 -3
- package/docs/ar/intlayer_with_vite+react.md +108 -112
- package/docs/ar/intlayer_with_vite+solid.md +4 -3
- package/docs/ar/intlayer_with_vite+svelte.md +4 -3
- package/docs/ar/intlayer_with_vite+vue.md +5 -4
- package/docs/ar/mcp_server.md +126 -92
- package/docs/de/intlayer_CMS.md +1 -0
- package/docs/de/intlayer_cli.md +291 -171
- package/docs/de/intlayer_visual_editor.md +1 -0
- package/docs/de/intlayer_with_angular.md +1 -0
- package/docs/de/intlayer_with_create_react_app.md +1 -0
- package/docs/de/intlayer_with_lynx+react.md +1 -0
- package/docs/de/intlayer_with_nextjs_14.md +1 -0
- package/docs/de/intlayer_with_nextjs_15.md +3 -1
- package/docs/de/intlayer_with_nuxt.md +1 -0
- package/docs/de/intlayer_with_react_native+expo.md +1 -0
- package/docs/de/intlayer_with_vite+preact.md +4 -3
- package/docs/de/intlayer_with_vite+react.md +128 -146
- package/docs/de/intlayer_with_vite+solid.md +4 -3
- package/docs/de/intlayer_with_vite+svelte.md +4 -3
- package/docs/de/intlayer_with_vite+vue.md +5 -4
- package/docs/de/mcp_server.md +116 -112
- package/docs/en/CI_CD.md +3 -1
- package/docs/en/autoFill.md +3 -1
- package/docs/en/configuration.md +7 -3
- package/docs/en/dictionary/condition.md +3 -1
- package/docs/en/dictionary/content_extention_customization.md +3 -1
- package/docs/en/dictionary/enumeration.md +3 -1
- package/docs/en/dictionary/file.md +3 -1
- package/docs/en/dictionary/function_fetching.md +3 -1
- package/docs/en/dictionary/get_started.md +3 -1
- package/docs/en/dictionary/insertion.md +3 -1
- package/docs/en/dictionary/markdown.md +3 -1
- package/docs/en/dictionary/nesting.md +3 -1
- package/docs/en/dictionary/translation.md +3 -1
- package/docs/en/how_works_intlayer.md +3 -1
- package/docs/en/index.md +3 -1
- package/docs/en/interest_of_intlayer.md +3 -1
- package/docs/en/intlayer_CMS.md +4 -1
- package/docs/en/intlayer_cli.md +246 -136
- package/docs/en/intlayer_visual_editor.md +4 -1
- package/docs/en/intlayer_with_angular.md +4 -1
- package/docs/en/intlayer_with_create_react_app.md +4 -1
- package/docs/en/intlayer_with_express.md +3 -1
- package/docs/en/intlayer_with_lynx+react.md +4 -1
- package/docs/en/intlayer_with_nextjs_14.md +7 -1
- package/docs/en/intlayer_with_nextjs_15.md +8 -2
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en/intlayer_with_nuxt.md +4 -1
- package/docs/en/intlayer_with_react_native+expo.md +4 -1
- package/docs/en/intlayer_with_vite+preact.md +9 -4
- package/docs/en/intlayer_with_vite+react.md +18 -10
- package/docs/en/intlayer_with_vite+solid.md +7 -4
- package/docs/en/intlayer_with_vite+svelte.md +7 -4
- package/docs/en/intlayer_with_vite+vue.md +10 -5
- package/docs/en/introduction.md +3 -1
- package/docs/en/mcp_server.md +114 -80
- package/docs/en/packages/@intlayer/api/index.md +3 -1
- package/docs/en/packages/@intlayer/chokidar/index.md +3 -1
- package/docs/en/packages/@intlayer/cli/index.md +3 -1
- package/docs/en/packages/@intlayer/config/index.md +3 -1
- package/docs/en/packages/@intlayer/core/index.md +3 -1
- package/docs/en/packages/@intlayer/design-system/index.md +3 -1
- package/docs/en/packages/@intlayer/dictionary-entry/index.md +3 -1
- package/docs/en/packages/@intlayer/editor/index.md +3 -1
- package/docs/en/packages/@intlayer/editor-react/index.md +3 -1
- package/docs/en/packages/@intlayer/webpack/index.md +3 -1
- package/docs/en/packages/angular-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/t.md +3 -1
- package/docs/en/packages/intlayer/getConfiguration.md +3 -1
- package/docs/en/packages/intlayer/getEnumeration.md +3 -1
- package/docs/en/packages/intlayer/getHTMLTextDir.md +3 -1
- package/docs/en/packages/intlayer/getLocaleLang.md +3 -1
- package/docs/en/packages/intlayer/getLocaleName.md +3 -1
- package/docs/en/packages/intlayer/getLocalizedUrl.md +3 -1
- package/docs/en/packages/intlayer/getMultilingualUrls.md +3 -1
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +3 -1
- package/docs/en/packages/intlayer/getTranslation.md +3 -1
- package/docs/en/packages/intlayer/getTranslationContent.md +3 -1
- package/docs/en/packages/intlayer/index.md +3 -1
- package/docs/en/packages/intlayer-cli/index.md +3 -1
- package/docs/en/packages/intlayer-editor/index.md +3 -1
- package/docs/en/packages/lynx-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/t.md +3 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/next-intlayer/useLocale.md +3 -1
- package/docs/en/packages/nuxt-intlayer/index.md +3 -1
- package/docs/en/packages/preact-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/t.md +3 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/react-intlayer/useLocale.md +3 -1
- package/docs/en/packages/react-native-intlayer/index.md +3 -1
- package/docs/en/packages/react-scripts-intlayer/index.md +3 -1
- package/docs/en/packages/solid-intlayer/index.md +3 -1
- package/docs/en/packages/svelte-intlayer/index.md +3 -1
- package/docs/en/packages/vite-intlayer/index.md +3 -1
- package/docs/en/packages/vue-intlayer/index.md +3 -1
- package/docs/en/per_locale_file.md +3 -1
- package/docs/en/roadmap.md +5 -2
- package/docs/en/vs_code_extension.md +3 -1
- package/docs/en-GB/intlayer_CMS.md +1 -0
- package/docs/en-GB/intlayer_cli.md +257 -138
- package/docs/en-GB/intlayer_visual_editor.md +1 -0
- package/docs/en-GB/intlayer_with_angular.md +1 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +1 -0
- package/docs/en-GB/intlayer_with_lynx+react.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_15.md +3 -1
- package/docs/en-GB/intlayer_with_nuxt.md +1 -0
- package/docs/en-GB/intlayer_with_react_native+expo.md +1 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +4 -3
- package/docs/en-GB/intlayer_with_vite+react.md +71 -87
- package/docs/en-GB/intlayer_with_vite+solid.md +4 -3
- package/docs/en-GB/intlayer_with_vite+svelte.md +4 -3
- package/docs/en-GB/intlayer_with_vite+vue.md +5 -4
- package/docs/en-GB/mcp_server.md +116 -82
- package/docs/es/intlayer_CMS.md +1 -0
- package/docs/es/intlayer_cli.md +283 -164
- package/docs/es/intlayer_visual_editor.md +1 -0
- package/docs/es/intlayer_with_angular.md +1 -0
- package/docs/es/intlayer_with_create_react_app.md +1 -0
- package/docs/es/intlayer_with_lynx+react.md +1 -0
- package/docs/es/intlayer_with_nextjs_14.md +1 -0
- package/docs/es/intlayer_with_nextjs_15.md +3 -1
- package/docs/es/intlayer_with_nuxt.md +1 -0
- package/docs/es/intlayer_with_react_native+expo.md +1 -0
- package/docs/es/intlayer_with_vite+preact.md +4 -3
- package/docs/es/intlayer_with_vite+react.md +98 -98
- package/docs/es/intlayer_with_vite+solid.md +4 -3
- package/docs/es/intlayer_with_vite+svelte.md +4 -3
- package/docs/es/intlayer_with_vite+vue.md +5 -4
- package/docs/es/mcp_server.md +120 -86
- package/docs/es/vs_code_extension.md +1 -0
- package/docs/fr/intlayer_CMS.md +1 -0
- package/docs/fr/intlayer_cli.md +280 -184
- package/docs/fr/intlayer_visual_editor.md +1 -0
- package/docs/fr/intlayer_with_angular.md +1 -0
- package/docs/fr/intlayer_with_create_react_app.md +1 -0
- package/docs/fr/intlayer_with_lynx+react.md +1 -0
- package/docs/fr/intlayer_with_nextjs_14.md +1 -0
- package/docs/fr/intlayer_with_nextjs_15.md +3 -1
- package/docs/fr/intlayer_with_nuxt.md +1 -0
- package/docs/fr/intlayer_with_react_native+expo.md +1 -0
- package/docs/fr/intlayer_with_vite+preact.md +5 -4
- package/docs/fr/intlayer_with_vite+react.md +80 -69
- package/docs/fr/intlayer_with_vite+solid.md +4 -3
- package/docs/fr/intlayer_with_vite+svelte.md +4 -3
- package/docs/fr/intlayer_with_vite+vue.md +5 -4
- package/docs/fr/mcp_server.md +121 -87
- package/docs/hi/intlayer_CMS.md +1 -0
- package/docs/hi/intlayer_cli.md +295 -174
- package/docs/hi/intlayer_visual_editor.md +1 -0
- package/docs/hi/intlayer_with_angular.md +1 -0
- package/docs/hi/intlayer_with_create_react_app.md +1 -0
- package/docs/hi/intlayer_with_lynx+react.md +1 -0
- package/docs/hi/intlayer_with_nextjs_14.md +1 -0
- package/docs/hi/intlayer_with_nextjs_15.md +3 -1
- package/docs/hi/intlayer_with_nuxt.md +1 -0
- package/docs/hi/intlayer_with_react_native+expo.md +1 -0
- package/docs/hi/intlayer_with_vite+preact.md +4 -3
- package/docs/hi/intlayer_with_vite+react.md +114 -111
- package/docs/hi/intlayer_with_vite+solid.md +4 -3
- package/docs/hi/intlayer_with_vite+svelte.md +4 -3
- package/docs/hi/intlayer_with_vite+vue.md +5 -4
- package/docs/hi/mcp_server.md +118 -84
- package/docs/it/intlayer_CMS.md +1 -0
- package/docs/it/intlayer_cli.md +282 -167
- package/docs/it/intlayer_visual_editor.md +1 -0
- package/docs/it/intlayer_with_angular.md +1 -0
- package/docs/it/intlayer_with_create_react_app.md +1 -0
- package/docs/it/intlayer_with_lynx+react.md +1 -0
- package/docs/it/intlayer_with_nextjs_14.md +1 -0
- package/docs/it/intlayer_with_nextjs_15.md +3 -1
- package/docs/it/intlayer_with_nuxt.md +1 -0
- package/docs/it/intlayer_with_react_native+expo.md +1 -0
- package/docs/it/intlayer_with_vite+preact.md +4 -3
- package/docs/it/intlayer_with_vite+react.md +163 -116
- package/docs/it/intlayer_with_vite+solid.md +4 -3
- package/docs/it/intlayer_with_vite+svelte.md +4 -3
- package/docs/it/intlayer_with_vite+vue.md +4 -4
- package/docs/it/mcp_server.md +120 -86
- package/docs/ja/intlayer_CMS.md +1 -0
- package/docs/ja/intlayer_cli.md +285 -168
- package/docs/ja/intlayer_visual_editor.md +1 -0
- package/docs/ja/intlayer_with_angular.md +1 -0
- package/docs/ja/intlayer_with_create_react_app.md +1 -0
- package/docs/ja/intlayer_with_lynx+react.md +1 -0
- package/docs/ja/intlayer_with_nextjs_14.md +1 -0
- package/docs/ja/intlayer_with_nextjs_15.md +3 -1
- package/docs/ja/intlayer_with_nuxt.md +1 -0
- package/docs/ja/intlayer_with_react_native+expo.md +1 -0
- package/docs/ja/intlayer_with_vite+preact.md +4 -3
- package/docs/ja/intlayer_with_vite+react.md +160 -222
- package/docs/ja/intlayer_with_vite+solid.md +4 -3
- package/docs/ja/intlayer_with_vite+svelte.md +4 -3
- package/docs/ja/intlayer_with_vite+vue.md +5 -4
- package/docs/ja/mcp_server.md +121 -85
- package/docs/ko/intlayer_CMS.md +1 -0
- package/docs/ko/intlayer_cli.md +291 -175
- package/docs/ko/intlayer_visual_editor.md +1 -0
- package/docs/ko/intlayer_with_angular.md +1 -0
- package/docs/ko/intlayer_with_create_react_app.md +1 -0
- package/docs/ko/intlayer_with_lynx+react.md +1 -0
- package/docs/ko/intlayer_with_nextjs_14.md +1 -0
- package/docs/ko/intlayer_with_nextjs_15.md +3 -1
- package/docs/ko/intlayer_with_nuxt.md +1 -0
- package/docs/ko/intlayer_with_react_native+expo.md +1 -0
- package/docs/ko/intlayer_with_vite+preact.md +4 -3
- package/docs/ko/intlayer_with_vite+react.md +123 -152
- package/docs/ko/intlayer_with_vite+solid.md +4 -3
- package/docs/ko/intlayer_with_vite+svelte.md +4 -3
- package/docs/ko/intlayer_with_vite+vue.md +5 -4
- package/docs/ko/mcp_server.md +117 -83
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
- package/docs/pt/intlayer_CMS.md +1 -0
- package/docs/pt/intlayer_cli.md +274 -154
- package/docs/pt/intlayer_visual_editor.md +1 -0
- package/docs/pt/intlayer_with_angular.md +1 -0
- package/docs/pt/intlayer_with_create_react_app.md +1 -0
- package/docs/pt/intlayer_with_lynx+react.md +1 -0
- package/docs/pt/intlayer_with_nextjs_14.md +1 -0
- package/docs/pt/intlayer_with_nextjs_15.md +3 -1
- package/docs/pt/intlayer_with_nuxt.md +1 -0
- package/docs/pt/intlayer_with_react_native+expo.md +1 -0
- package/docs/pt/intlayer_with_vite+preact.md +4 -3
- package/docs/pt/intlayer_with_vite+react.md +117 -136
- package/docs/pt/intlayer_with_vite+solid.md +4 -3
- package/docs/pt/intlayer_with_vite+svelte.md +4 -3
- package/docs/pt/intlayer_with_vite+vue.md +4 -4
- package/docs/pt/mcp_server.md +121 -87
- package/docs/ru/intlayer_CMS.md +1 -0
- package/docs/ru/intlayer_cli.md +287 -170
- package/docs/ru/intlayer_visual_editor.md +1 -0
- package/docs/ru/intlayer_with_angular.md +1 -0
- package/docs/ru/intlayer_with_create_react_app.md +1 -0
- package/docs/ru/intlayer_with_lynx+react.md +1 -0
- package/docs/ru/intlayer_with_nextjs_14.md +1 -0
- package/docs/ru/intlayer_with_nextjs_15.md +3 -1
- package/docs/ru/intlayer_with_nuxt.md +1 -0
- package/docs/ru/intlayer_with_react_native+expo.md +1 -0
- package/docs/ru/intlayer_with_vite+preact.md +4 -3
- package/docs/ru/intlayer_with_vite+react.md +105 -87
- package/docs/ru/intlayer_with_vite+solid.md +4 -3
- package/docs/ru/intlayer_with_vite+svelte.md +4 -3
- package/docs/ru/intlayer_with_vite+vue.md +5 -4
- package/docs/ru/mcp_server.md +119 -85
- package/docs/zh/intlayer_CMS.md +1 -0
- package/docs/zh/intlayer_cli.md +275 -155
- package/docs/zh/intlayer_visual_editor.md +1 -0
- package/docs/zh/intlayer_with_angular.md +1 -0
- package/docs/zh/intlayer_with_create_react_app.md +1 -0
- package/docs/zh/intlayer_with_lynx+react.md +1 -0
- package/docs/zh/intlayer_with_nextjs_14.md +1 -0
- package/docs/zh/intlayer_with_nextjs_15.md +3 -1
- package/docs/zh/intlayer_with_nuxt.md +1 -0
- package/docs/zh/intlayer_with_react_native+expo.md +1 -0
- package/docs/zh/intlayer_with_vite+preact.md +4 -3
- package/docs/zh/intlayer_with_vite+react.md +154 -188
- package/docs/zh/intlayer_with_vite+solid.md +4 -3
- package/docs/zh/intlayer_with_vite+svelte.md +4 -3
- package/docs/zh/intlayer_with_vite+vue.md +5 -4
- package/docs/zh/mcp_server.md +119 -86
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +1 -23
- package/frequent_questions/ar/build_error_CI_CD.md +75 -0
- package/frequent_questions/de/build_error_CI_CD.md +75 -0
- package/frequent_questions/en/build_error_CI_CD.md +75 -0
- package/frequent_questions/en-GB/build_error_CI_CD.md +75 -0
- package/frequent_questions/es/build_error_CI_CD.md +75 -0
- package/frequent_questions/fr/build_error_CI_CD.md +75 -0
- package/frequent_questions/hi/build_error_CI_CD.md +75 -0
- package/frequent_questions/it/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/intlayer_command_undefined.md +3 -3
- package/frequent_questions/ko/build_error_CI_CD.md +75 -0
- package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
- package/frequent_questions/pt/build_error_CI_CD.md +75 -0
- package/frequent_questions/ru/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
- package/legal/ar/privacy_notice.md +83 -0
- package/legal/ar/terms_of_service.md +55 -0
- package/legal/de/privacy_notice.md +83 -0
- package/legal/de/terms_of_service.md +55 -0
- package/legal/en/privacy_notice.md +83 -0
- package/legal/en/terms_of_service.md +55 -0
- package/legal/en-GB/privacy_notice.md +83 -0
- package/legal/en-GB/terms_of_service.md +55 -0
- package/legal/es/privacy_notice.md +83 -0
- package/legal/es/terms_of_service.md +55 -0
- package/legal/fr/privacy_notice.md +83 -0
- package/legal/fr/terms_of_service.md +55 -0
- package/legal/hi/privacy_notice.md +83 -0
- package/legal/hi/terms_of_service.md +55 -0
- package/legal/it/privacy_notice.md +83 -0
- package/legal/it/terms_of_service.md +55 -0
- package/legal/ja/privacy_notice.md +83 -0
- package/legal/ja/terms_of_service.md +55 -0
- package/legal/ko/privacy_notice.md +83 -0
- package/legal/ko/terms_of_service.md +55 -0
- package/legal/pt/privacy_notice.md +83 -0
- package/legal/pt/terms_of_service.md +55 -0
- package/legal/ru/privacy_notice.md +83 -0
- package/legal/ru/terms_of_service.md +55 -0
- package/legal/zh/privacy_notice.md +83 -0
- package/legal/zh/terms_of_service.md +55 -0
- package/package.json +12 -11
- package/src/blog.ts +6 -4
- package/src/common.ts +25 -7
- package/src/doc.ts +6 -4
- package/src/frequentQuestions.ts +6 -4
- package/src/generated/blog.entry.ts +1177 -280
- package/src/generated/docs.entry.ts +3868 -1217
- package/src/generated/frequentQuestions.entry.ts +808 -178
- package/src/generated/legal.entry.ts +34 -36
- package/src/legal.ts +6 -4
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt:
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2024-03-07
|
|
4
|
+
title: البدء مع Intlayer في Vite + React
|
|
5
|
+
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق Vite و React الخاص بك باستخدام Intlayer. اتبع هذا الدليل لجعل تطبيقك متعدد اللغات.
|
|
6
6
|
keywords:
|
|
7
7
|
- التدويل
|
|
8
|
-
-
|
|
8
|
+
- التوثيق
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Vite
|
|
11
11
|
- React
|
|
12
|
-
-
|
|
12
|
+
- i18n
|
|
13
13
|
- جافا سكريبت
|
|
14
14
|
slugs:
|
|
15
15
|
- doc
|
|
16
16
|
- environment
|
|
17
|
-
-
|
|
18
|
-
|
|
17
|
+
- vite-and-react
|
|
18
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
19
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4---
|
|
19
20
|
|
|
20
21
|
# البدء في التدويل (i18n) باستخدام Intlayer و Vite و React
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
<iframe title="The best i18n solution for Vite and React? 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/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
24
|
+
|
|
25
|
+
راجع [نموذج التطبيق](https://github.com/aymericzip/intlayer-vite-react-template) على GitHub.
|
|
26
|
+
|
|
23
27
|
|
|
24
28
|
## ما هو Intlayer؟
|
|
25
29
|
|
|
@@ -28,8 +32,8 @@ slugs:
|
|
|
28
32
|
مع Intlayer، يمكنك:
|
|
29
33
|
|
|
30
34
|
- **إدارة الترجمات بسهولة** باستخدام القواميس التصريحية على مستوى المكونات.
|
|
31
|
-
- **توطين البيانات الوصفية والمسارات والمحتوى
|
|
32
|
-
- **ضمان دعم TypeScript**
|
|
35
|
+
- **توطين البيانات الوصفية والمسارات والمحتوى ديناميكيًا**.
|
|
36
|
+
- **ضمان دعم TypeScript** مع الأنواع التي يتم إنشاؤها تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
|
|
33
37
|
- **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة وتبديلها.
|
|
34
38
|
|
|
35
39
|
---
|
|
@@ -42,17 +46,17 @@ slugs:
|
|
|
42
46
|
|
|
43
47
|
```bash packageManager="npm"
|
|
44
48
|
npm install intlayer react-intlayer
|
|
45
|
-
npm install --save-dev
|
|
49
|
+
npm install vite-intlayer --save-dev
|
|
46
50
|
```
|
|
47
51
|
|
|
48
52
|
```bash packageManager="pnpm"
|
|
49
53
|
pnpm add intlayer react-intlayer
|
|
50
|
-
pnpm add --save-dev
|
|
54
|
+
pnpm add vite-intlayer --save-dev
|
|
51
55
|
```
|
|
52
56
|
|
|
53
57
|
```bash packageManager="yarn"
|
|
54
58
|
yarn add intlayer react-intlayer
|
|
55
|
-
yarn add --save-dev
|
|
59
|
+
yarn add vite-intlayer --save-dev
|
|
56
60
|
```
|
|
57
61
|
|
|
58
62
|
- **intlayer**
|
|
@@ -60,14 +64,14 @@ yarn add --save-dev vite-intlayer
|
|
|
60
64
|
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](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
65
|
|
|
62
66
|
- **react-intlayer**
|
|
63
|
-
الحزمة التي تدمج Intlayer مع تطبيق React. توفر
|
|
67
|
+
الحزمة التي تدمج Intlayer مع تطبيق React. توفر مزودي السياق (context providers) وخطافات (hooks) لتدويل React.
|
|
64
68
|
|
|
65
69
|
- **vite-intlayer**
|
|
66
|
-
تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط
|
|
70
|
+
تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة الكوكيز، والتعامل مع إعادة توجيه URL.
|
|
67
71
|
|
|
68
72
|
### الخطوة 2: تكوين مشروعك
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
قم بإنشاء ملف تكوين لتحديد لغات تطبيقك:
|
|
71
75
|
|
|
72
76
|
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
73
77
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -78,7 +82,7 @@ const config: IntlayerConfig = {
|
|
|
78
82
|
Locales.ENGLISH,
|
|
79
83
|
Locales.FRENCH,
|
|
80
84
|
Locales.SPANISH,
|
|
81
|
-
//
|
|
85
|
+
// لغاتك الأخرى
|
|
82
86
|
],
|
|
83
87
|
defaultLocale: Locales.ENGLISH,
|
|
84
88
|
},
|
|
@@ -91,14 +95,13 @@ export default config;
|
|
|
91
95
|
import { Locales } from "intlayer";
|
|
92
96
|
|
|
93
97
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
-
// تكوين إعدادات التدويل
|
|
95
98
|
const config = {
|
|
96
99
|
internationalization: {
|
|
97
100
|
locales: [
|
|
98
101
|
Locales.ENGLISH,
|
|
99
102
|
Locales.FRENCH,
|
|
100
103
|
Locales.SPANISH,
|
|
101
|
-
//
|
|
104
|
+
// لغاتك الأخرى
|
|
102
105
|
],
|
|
103
106
|
defaultLocale: Locales.ENGLISH,
|
|
104
107
|
},
|
|
@@ -111,14 +114,13 @@ export default config;
|
|
|
111
114
|
const { Locales } = require("intlayer");
|
|
112
115
|
|
|
113
116
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
114
|
-
// تكوين إعدادات التدويل
|
|
115
117
|
const config = {
|
|
116
118
|
internationalization: {
|
|
117
119
|
locales: [
|
|
118
120
|
Locales.ENGLISH,
|
|
119
121
|
Locales.FRENCH,
|
|
120
122
|
Locales.SPANISH,
|
|
121
|
-
//
|
|
123
|
+
// لغاتك الأخرى
|
|
122
124
|
],
|
|
123
125
|
defaultLocale: Locales.ENGLISH,
|
|
124
126
|
},
|
|
@@ -127,11 +129,11 @@ const config = {
|
|
|
127
129
|
module.exports = config;
|
|
128
130
|
```
|
|
129
131
|
|
|
130
|
-
> من خلال ملف
|
|
132
|
+
> من خلال ملف التهيئة هذا، يمكنك إعداد عناوين URL محلية، وإعادة توجيه الوسيط، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التهيئة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
|
|
131
133
|
|
|
132
|
-
### الخطوة 3: دمج Intlayer في
|
|
134
|
+
### الخطوة 3: دمج Intlayer في تهيئة Vite الخاصة بك
|
|
133
135
|
|
|
134
|
-
أضف مكون intlayer الإضافي إلى
|
|
136
|
+
أضف مكون intlayer الإضافي إلى تهيئتك.
|
|
135
137
|
|
|
136
138
|
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
137
139
|
import { defineConfig } from "vite";
|
|
@@ -166,9 +168,9 @@ module.exports = defineConfig({
|
|
|
166
168
|
});
|
|
167
169
|
```
|
|
168
170
|
|
|
169
|
-
> يتم استخدام مكون Vite الإضافي `intlayerPlugin()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما
|
|
171
|
+
> يتم استخدام مكون Vite الإضافي `intlayerPlugin()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما يعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر أسماء مستعارة لتحسين الأداء.
|
|
170
172
|
|
|
171
|
-
### الخطوة 4:
|
|
173
|
+
### الخطوة 4: إعلان المحتوى الخاص بك
|
|
172
174
|
|
|
173
175
|
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
|
|
174
176
|
|
|
@@ -187,13 +189,13 @@ const appContent = {
|
|
|
187
189
|
reactLogo: t({
|
|
188
190
|
en: "React logo",
|
|
189
191
|
fr: "Logo React",
|
|
190
|
-
es: "
|
|
192
|
+
es: "Logo React",
|
|
191
193
|
}),
|
|
192
194
|
|
|
193
195
|
title: "Vite + React",
|
|
194
196
|
|
|
195
197
|
count: t({
|
|
196
|
-
en: "
|
|
198
|
+
en: "count is ",
|
|
197
199
|
fr: "le compte est ",
|
|
198
200
|
es: "el recuento es ",
|
|
199
201
|
}),
|
|
@@ -235,12 +237,12 @@ const appContent = {
|
|
|
235
237
|
key: "app",
|
|
236
238
|
content: {
|
|
237
239
|
viteLogo: t({
|
|
238
|
-
en: "
|
|
240
|
+
en: "Vite logo",
|
|
239
241
|
fr: "Logo Vite",
|
|
240
242
|
es: "Logo Vite",
|
|
241
243
|
}),
|
|
242
244
|
reactLogo: t({
|
|
243
|
-
en: "
|
|
245
|
+
en: "React logo",
|
|
244
246
|
fr: "Logo React",
|
|
245
247
|
es: "Logo React",
|
|
246
248
|
}),
|
|
@@ -248,7 +250,7 @@ const appContent = {
|
|
|
248
250
|
title: "Vite + React",
|
|
249
251
|
|
|
250
252
|
count: t({
|
|
251
|
-
en: "
|
|
253
|
+
en: "count is ",
|
|
252
254
|
fr: "le compte est ",
|
|
253
255
|
es: "el recuento es ",
|
|
254
256
|
}),
|
|
@@ -257,7 +259,7 @@ const appContent = {
|
|
|
257
259
|
t <
|
|
258
260
|
ReactNode >
|
|
259
261
|
{
|
|
260
|
-
// لا
|
|
262
|
+
// لا تنس استيراد React إذا كنت تستخدم عقدة React في المحتوى الخاص بك
|
|
261
263
|
en: (
|
|
262
264
|
<>
|
|
263
265
|
Edit <code>src/App.tsx</code> and save to test HMR
|
|
@@ -270,13 +272,13 @@ const appContent = {
|
|
|
270
272
|
),
|
|
271
273
|
es: (
|
|
272
274
|
<>
|
|
273
|
-
|
|
275
|
+
Edita <code>src/App.tsx</code> y guarda para probar HMR
|
|
274
276
|
</>
|
|
275
277
|
),
|
|
276
278
|
},
|
|
277
279
|
|
|
278
280
|
readTheDocs: t({
|
|
279
|
-
en: "
|
|
281
|
+
en: "انقر على شعارات Vite و React لمعرفة المزيد",
|
|
280
282
|
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
281
283
|
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
282
284
|
}),
|
|
@@ -297,13 +299,11 @@ const appContent = {
|
|
|
297
299
|
en: "Vite logo",
|
|
298
300
|
fr: "Logo Vite",
|
|
299
301
|
es: "Logo Vite",
|
|
300
|
-
ar: "شعار Vite",
|
|
301
302
|
}),
|
|
302
303
|
reactLogo: t({
|
|
303
304
|
en: "React logo",
|
|
304
305
|
fr: "Logo React",
|
|
305
306
|
es: "Logo React",
|
|
306
|
-
ar: "شعار React",
|
|
307
307
|
}),
|
|
308
308
|
|
|
309
309
|
title: "Vite + React",
|
|
@@ -312,7 +312,6 @@ const appContent = {
|
|
|
312
312
|
en: "count is ",
|
|
313
313
|
fr: "le compte est ",
|
|
314
314
|
es: "el recuento es ",
|
|
315
|
-
ar: "العدد هو ",
|
|
316
315
|
}),
|
|
317
316
|
|
|
318
317
|
edit:
|
|
@@ -332,16 +331,15 @@ const appContent = {
|
|
|
332
331
|
),
|
|
333
332
|
es: (
|
|
334
333
|
<>
|
|
335
|
-
Edita <code>src/App.tsx</code>
|
|
334
|
+
Edita <code>src/App.tsx</code> و احفظ لتجربة HMR
|
|
336
335
|
</>
|
|
337
336
|
),
|
|
338
337
|
},
|
|
339
338
|
|
|
340
339
|
readTheDocs: t({
|
|
341
|
-
en: "
|
|
340
|
+
en: "انقر على شعارات Vite و React لمعرفة المزيد",
|
|
342
341
|
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
343
342
|
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
344
|
-
ar: "انقر على شعارات Vite و React لمعرفة المزيد",
|
|
345
343
|
}),
|
|
346
344
|
},
|
|
347
345
|
};
|
|
@@ -359,8 +357,7 @@ module.exports = appContent;
|
|
|
359
357
|
"translation": {
|
|
360
358
|
"en": "Vite logo",
|
|
361
359
|
"fr": "Logo Vite",
|
|
362
|
-
"es": "Logo Vite"
|
|
363
|
-
"ar": "شعار Vite"
|
|
360
|
+
"es": "Logo Vite"
|
|
364
361
|
}
|
|
365
362
|
},
|
|
366
363
|
"reactLogo": {
|
|
@@ -412,13 +409,13 @@ module.exports = appContent;
|
|
|
412
409
|
}
|
|
413
410
|
```
|
|
414
411
|
|
|
415
|
-
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./src`). ويجب أن
|
|
412
|
+
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./src`). ويجب أن تطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
416
413
|
|
|
417
414
|
> لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md).
|
|
418
415
|
|
|
419
|
-
> إذا كان ملف المحتوى الخاص بك يتضمن كود TSX،
|
|
416
|
+
> إذا كان ملف المحتوى الخاص بك يتضمن كود TSX، يجب أن تفكر في استيراد `import React from "react";` في ملف المحتوى الخاص بك.
|
|
420
417
|
|
|
421
|
-
### الخطوة 5: استخدام Intlayer في
|
|
418
|
+
### الخطوة 5: استخدام Intlayer في الكود الخاص بك
|
|
422
419
|
|
|
423
420
|
قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
|
|
424
421
|
|
|
@@ -563,7 +560,7 @@ const App = () => (
|
|
|
563
560
|
module.exports = App;
|
|
564
561
|
```
|
|
565
562
|
|
|
566
|
-
> إذا كنت
|
|
563
|
+
> إذا كنت ترغب في استخدام المحتوى الخاص بك في خاصية من نوع `string`، مثل `alt`، `title`، `href`، `aria-label`، إلخ، يجب عليك استدعاء قيمة الدالة، مثل:
|
|
567
564
|
|
|
568
565
|
> ```jsx
|
|
569
566
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
@@ -634,30 +631,30 @@ const LocaleSwitcher = () => {
|
|
|
634
631
|
- https://example.com/fr/about
|
|
635
632
|
```
|
|
636
633
|
|
|
637
|
-
> بشكل افتراضي، لا يتم إضافة بادئة للمسارات للغة الافتراضية. إذا كنت ترغب في إضافة بادئة للغة الافتراضية، يمكنك تعيين الخيار `middleware.prefixDefault` إلى `true` في
|
|
634
|
+
> بشكل افتراضي، لا يتم إضافة بادئة للمسارات للغة الافتراضية. إذا كنت ترغب في إضافة بادئة للغة الافتراضية، يمكنك تعيين الخيار `middleware.prefixDefault` إلى `true` في إعداداتك. راجع [توثيق الإعدادات](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md) لمزيد من المعلومات.
|
|
638
635
|
|
|
639
|
-
لإضافة التوجيه المحلي إلى تطبيقك، يمكنك إنشاء مكون `LocaleRouter` الذي يلف مسارات تطبيقك ويتعامل مع التوجيه بناءً على اللغة. إليك
|
|
636
|
+
لإضافة التوجيه المحلي إلى تطبيقك، يمكنك إنشاء مكون `LocaleRouter` الذي يلف مسارات تطبيقك ويتعامل مع التوجيه بناءً على اللغة. إليك مثالًا باستخدام [React Router](https://reactrouter.com/home):
|
|
640
637
|
|
|
641
638
|
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
642
639
|
// استيراد التبعيات والوظائف اللازمة
|
|
643
640
|
import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // دوال مساعدة وأنواع من 'intlayer'
|
|
644
641
|
import type { FC, PropsWithChildren } from "react"; // أنواع React للمكونات الوظيفية والخصائص
|
|
645
|
-
import { IntlayerProvider } from "react-intlayer"; //
|
|
642
|
+
import { IntlayerProvider } from "react-intlayer"; // مزود سياق التدويل
|
|
646
643
|
import {
|
|
647
644
|
BrowserRouter,
|
|
648
645
|
Routes,
|
|
649
646
|
Route,
|
|
650
647
|
Navigate,
|
|
651
648
|
useLocation,
|
|
652
|
-
} from "react-router-dom"; // مكونات
|
|
649
|
+
} from "react-router-dom"; // مكونات الموجه لإدارة التنقل
|
|
653
650
|
|
|
654
|
-
// تفكيك
|
|
651
|
+
// تفكيك التكوين من Intlayer
|
|
655
652
|
const { internationalization, middleware } = configuration;
|
|
656
653
|
const { locales, defaultLocale } = internationalization;
|
|
657
654
|
|
|
658
655
|
/**
|
|
659
656
|
* مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
|
|
660
|
-
* يدير اكتشاف اللغة بناءً على عنوان URL والتحقق
|
|
657
|
+
* يدير اكتشاف اللغة بناءً على عنوان URL والتحقق منها.
|
|
661
658
|
*/
|
|
662
659
|
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
663
660
|
children,
|
|
@@ -688,7 +685,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
688
685
|
);
|
|
689
686
|
}
|
|
690
687
|
|
|
691
|
-
// تغليف العناصر الفرعية
|
|
688
|
+
// تغليف العناصر الفرعية بـ IntlayerProvider وتعيين اللغة الحالية
|
|
692
689
|
return (
|
|
693
690
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
694
691
|
);
|
|
@@ -737,7 +734,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
737
734
|
))}
|
|
738
735
|
|
|
739
736
|
{
|
|
740
|
-
// إذا كان تعطيل
|
|
737
|
+
// إذا كان تعطيل بادئة اللغة الافتراضية، يتم عرض الأطفال مباشرة في المسار الجذري
|
|
741
738
|
!middleware.prefixDefault && (
|
|
742
739
|
<Route
|
|
743
740
|
path="*"
|
|
@@ -754,8 +751,8 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
754
751
|
|
|
755
752
|
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
756
753
|
// استيراد التبعيات والوظائف اللازمة
|
|
757
|
-
import { configuration, getPathWithoutLocale } from "intlayer"; // وظائف مساعدة
|
|
758
|
-
// وظائف مساعدة
|
|
754
|
+
import { configuration, getPathWithoutLocale } from "intlayer"; // وظائف وأصناف مساعدة من 'intlayer'
|
|
755
|
+
// وظائف وأصناف مساعدة من 'intlayer'
|
|
759
756
|
import { IntlayerProvider } from "react-intlayer"; // مزود لسياق التدويل
|
|
760
757
|
import {
|
|
761
758
|
BrowserRouter,
|
|
@@ -763,7 +760,7 @@ import {
|
|
|
763
760
|
Route,
|
|
764
761
|
Navigate,
|
|
765
762
|
useLocation,
|
|
766
|
-
} from "react-router-dom"; // مكونات
|
|
763
|
+
} from "react-router-dom"; // مكونات الموجه لإدارة التنقل
|
|
767
764
|
|
|
768
765
|
// تفكيك التكوين من Intlayer
|
|
769
766
|
const { internationalization, middleware } = configuration;
|
|
@@ -771,8 +768,7 @@ const { locales, defaultLocale } = internationalization;
|
|
|
771
768
|
|
|
772
769
|
/**
|
|
773
770
|
* مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
|
|
774
|
-
|
|
775
|
-
* يدير الكشف عن اللغة بناءً على عنوان URL والتحقق من صحتها.
|
|
771
|
+
* يدير اكتشاف اللغة بناءً على عنوان URL والتحقق من صحتها.
|
|
776
772
|
*/
|
|
777
773
|
const AppLocalized = ({ children, locale }) => {
|
|
778
774
|
const { pathname, search } = useLocation(); // الحصول على مسار URL الحالي
|
|
@@ -780,7 +776,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
780
776
|
// تحديد اللغة الحالية، والرجوع إلى اللغة الافتراضية إذا لم يتم توفيرها
|
|
781
777
|
const currentLocale = locale ?? defaultLocale;
|
|
782
778
|
|
|
783
|
-
// إزالة بادئة اللغة من المسار
|
|
779
|
+
// إزالة بادئة اللغة من المسار لبناء مسار أساسي
|
|
784
780
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
785
781
|
pathname // مسار URL الحالي
|
|
786
782
|
);
|
|
@@ -795,7 +791,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
795
791
|
return (
|
|
796
792
|
<Navigate
|
|
797
793
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
798
|
-
replace // استبدال
|
|
794
|
+
replace // استبدال إدخال السجل الحالي بالإدخال الجديد
|
|
799
795
|
/>
|
|
800
796
|
);
|
|
801
797
|
}
|
|
@@ -807,7 +803,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
807
803
|
} else {
|
|
808
804
|
/**
|
|
809
805
|
* عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة للغة الافتراضية.
|
|
810
|
-
*
|
|
806
|
+
* تأكد من أن اللغة الحالية صالحة وليست اللغة الافتراضية.
|
|
811
807
|
*/
|
|
812
808
|
if (
|
|
813
809
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -830,7 +826,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
830
826
|
|
|
831
827
|
/**
|
|
832
828
|
* مكون راوتر يقوم بإعداد مسارات خاصة بكل لغة.
|
|
833
|
-
* يستخدم React Router لإدارة التنقل وعرض المكونات
|
|
829
|
+
* يستخدم React Router لإدارة التنقل وعرض المكونات المحلية.
|
|
834
830
|
*/
|
|
835
831
|
export const LocaleRouter = ({ children }) => (
|
|
836
832
|
<BrowserRouter>
|
|
@@ -841,7 +837,7 @@ export const LocaleRouter = ({ children }) => (
|
|
|
841
837
|
)
|
|
842
838
|
.map((locale) => (
|
|
843
839
|
<Route
|
|
844
|
-
// نمط المسار لالتقاط اللغة (مثل /en/، /fr/) ومطابقة جميع المسارات
|
|
840
|
+
// نمط المسار لالتقاط اللغة (مثل /en/، /fr/) ومطابقة جميع المسارات التالية
|
|
845
841
|
path={`/${locale}/*`}
|
|
846
842
|
key={locale}
|
|
847
843
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // يلف الأطفال بإدارة اللغة
|
|
@@ -866,8 +862,8 @@ export const LocaleRouter = ({ children }) => (
|
|
|
866
862
|
|
|
867
863
|
```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
|
|
868
864
|
// استيراد التبعيات والوظائف اللازمة
|
|
869
|
-
const { configuration, getPathWithoutLocale } = require("intlayer"); // وظائف
|
|
870
|
-
const { IntlayerProvider, useLocale } = require("react-intlayer"); //
|
|
865
|
+
const { configuration, getPathWithoutLocale } = require("intlayer"); // وظائف مساعدة وأنواع من 'intlayer'
|
|
866
|
+
const { IntlayerProvider, useLocale } = require("react-intlayer"); // موفر لسياق التدويل
|
|
871
867
|
const {
|
|
872
868
|
BrowserRouter,
|
|
873
869
|
Routes,
|
|
@@ -882,7 +878,7 @@ const { locales, defaultLocale } = internationalization;
|
|
|
882
878
|
|
|
883
879
|
/**
|
|
884
880
|
* مكون يتعامل مع التدويل ويغلف الأطفال بسياق اللغة المناسب.
|
|
885
|
-
* يدير اكتشاف اللغة
|
|
881
|
+
* يدير اكتشاف اللغة بناءً على عنوان URL والتحقق منها.
|
|
886
882
|
*/
|
|
887
883
|
const AppLocalized = ({ children, locale }) => {
|
|
888
884
|
const { pathname, search } = useLocation(); // الحصول على مسار URL الحالي
|
|
@@ -910,13 +906,13 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
910
906
|
);
|
|
911
907
|
}
|
|
912
908
|
|
|
913
|
-
//
|
|
909
|
+
// تغليف العناصر الفرعية بمزود Intlayer وتعيين اللغة الحالية
|
|
914
910
|
return (
|
|
915
911
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
916
912
|
);
|
|
917
913
|
} else {
|
|
918
914
|
/**
|
|
919
|
-
* عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة
|
|
915
|
+
* عندما تكون middleware.prefixDefault خاطئة، لا يتم إضافة بادئة للغة الافتراضية.
|
|
920
916
|
* تأكد من أن اللغة الحالية صالحة وليست اللغة الافتراضية.
|
|
921
917
|
*/
|
|
922
918
|
if (
|
|
@@ -940,7 +936,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
940
936
|
|
|
941
937
|
/**
|
|
942
938
|
* مكون راوتر يقوم بإعداد مسارات خاصة بكل لغة.
|
|
943
|
-
* يستخدم React Router لإدارة التنقل وعرض المكونات
|
|
939
|
+
* يستخدم React Router لإدارة التنقل وعرض المكونات المترجمة.
|
|
944
940
|
*/
|
|
945
941
|
const LocaleRouter = ({ children }) => (
|
|
946
942
|
<BrowserRouter>
|
|
@@ -959,7 +955,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
959
955
|
))}
|
|
960
956
|
|
|
961
957
|
{
|
|
962
|
-
// إذا تم تعطيل إضافة بادئة اللغة الافتراضية،
|
|
958
|
+
// إذا تم تعطيل إضافة بادئة اللغة الافتراضية، يتم عرض الأطفال مباشرة في المسار الجذري
|
|
963
959
|
!middleware.prefixDefault && (
|
|
964
960
|
<Route
|
|
965
961
|
path="*"
|
|
@@ -1013,7 +1009,7 @@ const App = () => (
|
|
|
1013
1009
|
);
|
|
1014
1010
|
```
|
|
1015
1011
|
|
|
1016
|
-
بالتوازي، يمكنك أيضًا استخدام `intLayerMiddlewarePlugin` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي تلقائيًا
|
|
1012
|
+
بالتوازي، يمكنك أيضًا استخدام `intLayerMiddlewarePlugin` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
|
|
1017
1013
|
|
|
1018
1014
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1019
1015
|
import { defineConfig } from "vite";
|
|
@@ -1050,7 +1046,7 @@ module.exports = defineConfig({
|
|
|
1050
1046
|
|
|
1051
1047
|
### (اختياري) الخطوة 8: تغيير عنوان URL عند تغيير اللغة
|
|
1052
1048
|
|
|
1053
|
-
لتغيير عنوان URL عند تغيير اللغة، يمكنك استخدام الخاصية `onLocaleChange` المقدمة من الخطاف `useLocale`.
|
|
1049
|
+
لتغيير عنوان URL عند تغيير اللغة، يمكنك استخدام الخاصية `onLocaleChange` المقدمة من الخطاف `useLocale`. وبالتوازي، يمكنك استخدام الخطافين `useLocation` و `useNavigate` من مكتبة `react-router-dom` لتحديث مسار عنوان URL.
|
|
1054
1050
|
|
|
1055
1051
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
1056
1052
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -1094,15 +1090,15 @@ const LocaleSwitcher: FC = () => {
|
|
|
1094
1090
|
key={localeItem}
|
|
1095
1091
|
>
|
|
1096
1092
|
<span>
|
|
1097
|
-
{/* اللغة
|
|
1093
|
+
{/* اللغة - مثلاً FR */}
|
|
1098
1094
|
{localeItem}
|
|
1099
1095
|
</span>
|
|
1100
1096
|
<span>
|
|
1101
|
-
{/* اللغة بلغتها
|
|
1097
|
+
{/* اللغة بلغتها الأصلية - مثلاً Français */}
|
|
1102
1098
|
{getLocaleName(localeItem, locale)}
|
|
1103
1099
|
</span>
|
|
1104
1100
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1105
|
-
{/* اللغة باللغة
|
|
1101
|
+
{/* اللغة باللغة الحالية - مثلاً Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
|
|
1106
1102
|
{getLocaleName(localeItem)}
|
|
1107
1103
|
</span>
|
|
1108
1104
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1222,19 +1218,19 @@ const LocaleSwitcher = () => {
|
|
|
1222
1218
|
key={localeItem}
|
|
1223
1219
|
>
|
|
1224
1220
|
<span>
|
|
1225
|
-
{/* اللغة المحلية -
|
|
1221
|
+
{/* اللغة المحلية - مثل FR */}
|
|
1226
1222
|
{localeItem}
|
|
1227
1223
|
</span>
|
|
1228
1224
|
<span>
|
|
1229
|
-
{/* اللغة بلغتها المحلية -
|
|
1225
|
+
{/* اللغة بلغتها المحلية - مثل Français */}
|
|
1230
1226
|
{getLocaleName(localeItem, locale)}
|
|
1231
1227
|
</span>
|
|
1232
1228
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1233
|
-
{/* اللغة
|
|
1229
|
+
{/* اللغة باللغة المحلية الحالية - مثل Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
|
|
1234
1230
|
{getLocaleName(localeItem)}
|
|
1235
1231
|
</span>
|
|
1236
1232
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1237
|
-
{/* اللغة بالإنجليزية - على سبيل المثال
|
|
1233
|
+
{/* اللغة بالإنجليزية - على سبيل المثال الفرنسية */}
|
|
1238
1234
|
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1239
1235
|
</span>
|
|
1240
1236
|
</a>
|
|
@@ -1256,7 +1252,7 @@ const LocaleSwitcher = () => {
|
|
|
1256
1252
|
> - [`dir` attribute`](https://developer.mozilla.org/ar/docs/Web/HTML/Global_attributes/dir)
|
|
1257
1253
|
> - [`aria-current` attribute`](https://developer.mozilla.org/ar/docs/Web/Accessibility/ARIA/Attributes/aria-current)
|
|
1258
1254
|
|
|
1259
|
-
فيما يلي الخطوة التاسعة المحدثة مع
|
|
1255
|
+
فيما يلي الخطوة التاسعة المحدثة مع توضيحات إضافية وأمثلة كود محسنة:
|
|
1260
1256
|
|
|
1261
1257
|
---
|
|
1262
1258
|
|
|
@@ -1264,7 +1260,7 @@ const LocaleSwitcher = () => {
|
|
|
1264
1260
|
|
|
1265
1261
|
عندما يدعم تطبيقك لغات متعددة، من الضروري تحديث سمات `lang` و `dir` في وسم `<html>` لتتوافق مع اللغة الحالية. يضمن ذلك:
|
|
1266
1262
|
|
|
1267
|
-
-
|
|
1263
|
+
- **سهولة الوصول**: تعتمد برامج قراءة الشاشة وتقنيات المساعدة على سمة `lang` الصحيحة لنطق المحتوى وتفسيره بدقة.
|
|
1268
1264
|
- **عرض النص**: تضمن سمة `dir` (الاتجاه) عرض النص بالترتيب الصحيح (مثلًا من اليسار إلى اليمين للإنجليزية، ومن اليمين إلى اليسار للعربية أو العبرية)، وهو أمر أساسي لسهولة القراءة.
|
|
1269
1265
|
- **تحسين محركات البحث (SEO)**: تستخدم محركات البحث سمة `lang` لتحديد لغة الصفحة، مما يساعد في تقديم المحتوى المحلي المناسب في نتائج البحث.
|
|
1270
1266
|
|
|
@@ -1272,7 +1268,7 @@ const LocaleSwitcher = () => {
|
|
|
1272
1268
|
|
|
1273
1269
|
#### تنفيذ الـ Hook
|
|
1274
1270
|
|
|
1275
|
-
قم بإنشاء hook مخصص لإدارة سمات HTML. يستمع الـ hook لتغييرات اللغة
|
|
1271
|
+
قم بإنشاء hook مخصص لإدارة سمات HTML. يستمع الـ hook لتغييرات اللغة ويحدث السمات وفقًا لذلك:
|
|
1276
1272
|
|
|
1277
1273
|
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
1278
1274
|
import { useEffect } from "react";
|
|
@@ -1284,7 +1280,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1284
1280
|
* - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
|
|
1285
1281
|
* - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
|
|
1286
1282
|
*
|
|
1287
|
-
* هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات
|
|
1283
|
+
* هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات البحث.
|
|
1288
1284
|
*/
|
|
1289
1285
|
export const useI18nHTMLAttributes = () => {
|
|
1290
1286
|
const { locale } = useLocale();
|
|
@@ -1307,7 +1303,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1307
1303
|
/**
|
|
1308
1304
|
* يقوم بتحديث خصائص `lang` و `dir` لعنصر HTML <html> بناءً على اللغة الحالية.
|
|
1309
1305
|
* - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
|
|
1310
|
-
* - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
|
|
1306
|
+
* - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، و 'rtl' للعربية).
|
|
1311
1307
|
*
|
|
1312
1308
|
* هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وللوصولية، وتحسين محركات البحث.
|
|
1313
1309
|
*/
|
|
@@ -1332,7 +1328,7 @@ const { getHTMLTextDir } = require("intlayer");
|
|
|
1332
1328
|
/**
|
|
1333
1329
|
* يقوم بتحديث خصائص `lang` و `dir` لعنصر HTML <html> بناءً على اللغة الحالية.
|
|
1334
1330
|
* - `lang`: يُعلم المتصفحات ومحركات البحث بلغة الصفحة.
|
|
1335
|
-
* - `dir`: يضمن ترتيب القراءة الصحيح (
|
|
1331
|
+
* - `dir`: يضمن ترتيب القراءة الصحيح (مثل 'ltr' للإنجليزية، 'rtl' للعربية).
|
|
1336
1332
|
*
|
|
1337
1333
|
* هذا التحديث الديناميكي ضروري لعرض النص بشكل صحيح، وتحسين إمكانية الوصول، وتحسين محركات البحث.
|
|
1338
1334
|
*/
|
|
@@ -1353,7 +1349,7 @@ module.exports = { useI18nHTMLAttributes };
|
|
|
1353
1349
|
|
|
1354
1350
|
#### استخدام الـ Hook في تطبيقك
|
|
1355
1351
|
|
|
1356
|
-
قم بدمج الـ hook في المكون الرئيسي الخاص بك بحيث يتم تحديث خصائص HTML
|
|
1352
|
+
قم بدمج الـ hook في المكون الرئيسي الخاص بك بحيث يتم تحديث خصائص HTML في كل مرة يتغير فيها اللغة:
|
|
1357
1353
|
|
|
1358
1354
|
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
1359
1355
|
import type { FC } from "react";
|
|
@@ -1383,7 +1379,7 @@ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
|
1383
1379
|
import "./App.css";
|
|
1384
1380
|
|
|
1385
1381
|
const AppContent = () => {
|
|
1386
|
-
// تطبيق الـ hook لتحديث خصائص lang و dir
|
|
1382
|
+
// تطبيق الـ hook لتحديث خصائص lang و dir لعلامة <html> بناءً على اللغة الحالية.
|
|
1387
1383
|
useI18nHTMLAttributes();
|
|
1388
1384
|
|
|
1389
1385
|
// ... بقية مكوناتك
|
|
@@ -1405,7 +1401,7 @@ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
|
1405
1401
|
require("./App.css");
|
|
1406
1402
|
|
|
1407
1403
|
const AppContent = () => {
|
|
1408
|
-
// تطبيق الخطاف لتحديث خصائص lang و dir
|
|
1404
|
+
// تطبيق الخطاف لتحديث خصائص lang و dir في وسم <html> بناءً على اللغة المحلية.
|
|
1409
1405
|
useI18nHTMLAttributes();
|
|
1410
1406
|
|
|
1411
1407
|
// ... بقية مكوناتك
|
|
@@ -1420,23 +1416,23 @@ const App = () => (
|
|
|
1420
1416
|
module.exports = App;
|
|
1421
1417
|
```
|
|
1422
1418
|
|
|
1423
|
-
|
|
1419
|
+
بتطبيق هذه التغييرات، سيقوم تطبيقك بـ:
|
|
1424
1420
|
|
|
1425
1421
|
- ضمان أن خاصية **اللغة** (`lang`) تعكس اللغة المحلية الحالية بشكل صحيح، وهو أمر مهم لتحسين محركات البحث وسلوك المتصفح.
|
|
1426
1422
|
- ضبط **اتجاه النص** (`dir`) وفقًا للغة المحلية، مما يعزز من قابلية القراءة وسهولة الاستخدام للغات ذات اتجاهات قراءة مختلفة.
|
|
1427
|
-
- توفير تجربة أكثر **سهولة في الوصول**، حيث تعتمد تقنيات المساعدة على هذه الخصائص لتعمل بشكل
|
|
1423
|
+
- توفير تجربة أكثر **سهولة في الوصول**، حيث تعتمد تقنيات المساعدة على هذه الخصائص لتعمل بشكل مثالي.
|
|
1428
1424
|
|
|
1429
|
-
### (اختياري) الخطوة 10: إنشاء مكون رابط محلي
|
|
1425
|
+
### (اختياري) الخطوة 10: إنشاء مكون رابط محلي
|
|
1430
1426
|
|
|
1431
1427
|
لضمان أن تحترم تنقلات تطبيقك اللغة الحالية، يمكنك إنشاء مكون `Link` مخصص. يقوم هذا المكون تلقائيًا بإضافة بادئة اللغة الحالية إلى عناوين URL الداخلية، بحيث عند نقر مستخدم يتحدث الفرنسية على رابط لصفحة "حول"، يتم توجيهه إلى `/fr/about` بدلاً من `/about`.
|
|
1432
1428
|
|
|
1433
1429
|
هذا السلوك مفيد لعدة أسباب:
|
|
1434
1430
|
|
|
1435
|
-
- **تحسين محركات البحث وتجربة المستخدم**: تساعد عناوين URL
|
|
1436
|
-
- **الاتساق**: باستخدام رابط
|
|
1437
|
-
- **قابلية الصيانة**:
|
|
1431
|
+
- **تحسين محركات البحث وتجربة المستخدم**: تساعد عناوين URL المترجمة محركات البحث على فهرسة الصفحات الخاصة بكل لغة بشكل صحيح وتوفر للمستخدمين محتوى بلغتهم المفضلة.
|
|
1432
|
+
- **الاتساق**: باستخدام رابط مترجم في جميع أنحاء تطبيقك، تضمن أن التنقل يبقى ضمن اللغة الحالية، مما يمنع التبديلات غير المتوقعة في اللغة.
|
|
1433
|
+
- **قابلية الصيانة**: توحيد منطق التوطين في مكون واحد يبسط إدارة عناوين URL، مما يجعل قاعدة الكود الخاصة بك أسهل في الصيانة والتطوير مع نمو تطبيقك.
|
|
1438
1434
|
|
|
1439
|
-
فيما يلي تنفيذ لمكون `Link` مخصص
|
|
1435
|
+
فيما يلي تنفيذ لمكون `Link` مخصص يدعم التوطين باستخدام TypeScript:
|
|
1440
1436
|
|
|
1441
1437
|
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
1442
1438
|
import { getLocalizedUrl } from "intlayer";
|
|
@@ -1455,13 +1451,13 @@ export interface LinkProps
|
|
|
1455
1451
|
|
|
1456
1452
|
/**
|
|
1457
1453
|
* دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
|
|
1458
|
-
* إذا بدأ عنوان URL بـ http:// أو https://،
|
|
1454
|
+
* إذا بدأ عنوان URL بـ http:// أو https://، يعتبر خارجيًا.
|
|
1459
1455
|
*/
|
|
1460
1456
|
export const checkIsExternalLink = (href?: string): boolean =>
|
|
1461
1457
|
/^https?:\/\//.test(href ?? "");
|
|
1462
1458
|
|
|
1463
1459
|
/**
|
|
1464
|
-
* مكون
|
|
1460
|
+
* مكون رابط مخصص يقوم بتعديل خاصية href بناءً على اللغة الحالية.
|
|
1465
1461
|
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى الرابط (مثل /fr/about).
|
|
1466
1462
|
* هذا يضمن أن التنقل يبقى ضمن نفس سياق اللغة.
|
|
1467
1463
|
*/
|
|
@@ -1470,7 +1466,7 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
1470
1466
|
const { locale } = useLocale();
|
|
1471
1467
|
const isExternalLink = checkIsExternalLink(href);
|
|
1472
1468
|
|
|
1473
|
-
// إذا
|
|
1469
|
+
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على الرابط المحلي.
|
|
1474
1470
|
const hrefI18n =
|
|
1475
1471
|
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
|
|
1476
1472
|
|
|
@@ -1491,22 +1487,22 @@ import { useLocale } from "react-intlayer";
|
|
|
1491
1487
|
import { forwardRef } from "react";
|
|
1492
1488
|
|
|
1493
1489
|
/**
|
|
1494
|
-
* دالة مساعدة للتحقق مما إذا كان
|
|
1495
|
-
* إذا بدأ
|
|
1490
|
+
* دالة مساعدة للتحقق مما إذا كان الرابط المعطى خارجيًا.
|
|
1491
|
+
* إذا بدأ الرابط بـ http:// أو https://، فإنه يعتبر خارجيًا.
|
|
1496
1492
|
*/
|
|
1497
1493
|
export const checkIsExternalLink = (href?: string): boolean =>
|
|
1498
1494
|
/^https?:\/\//.test(href ?? "");
|
|
1499
1495
|
|
|
1500
1496
|
/**
|
|
1501
1497
|
* مكون رابط مخصص يقوم بتكييف خاصية href بناءً على اللغة الحالية.
|
|
1502
|
-
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى
|
|
1498
|
+
* بالنسبة للروابط الداخلية، يستخدم `getLocalizedUrl` لإضافة بادئة اللغة إلى الرابط (مثلاً /fr/about).
|
|
1503
1499
|
* هذا يضمن أن التنقل يبقى ضمن نفس سياق اللغة.
|
|
1504
1500
|
*/
|
|
1505
1501
|
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1506
1502
|
const { locale } = useLocale();
|
|
1507
1503
|
const isExternalLink = checkIsExternalLink(href);
|
|
1508
1504
|
|
|
1509
|
-
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على
|
|
1505
|
+
// إذا كان الرابط داخليًا وتم توفير href صالح، احصل على الرابط المحلي.
|
|
1510
1506
|
const hrefI18n =
|
|
1511
1507
|
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
|
|
1512
1508
|
|
|
@@ -1527,7 +1523,7 @@ const { forwardRef } = require("react");
|
|
|
1527
1523
|
|
|
1528
1524
|
/**
|
|
1529
1525
|
* دالة مساعدة للتحقق مما إذا كان عنوان URL معين خارجيًا.
|
|
1530
|
-
* إذا بدأ عنوان URL بـ http:// أو https://،
|
|
1526
|
+
* إذا بدأ عنوان URL بـ http:// أو https://، يُعتبر خارجيًا.
|
|
1531
1527
|
*/
|
|
1532
1528
|
const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1533
1529
|
|
|
@@ -1561,18 +1557,18 @@ Link.displayName = "Link";
|
|
|
1561
1557
|
#### كيف يعمل
|
|
1562
1558
|
|
|
1563
1559
|
- **كشف الروابط الخارجية**:
|
|
1564
|
-
تقوم الدالة المساعدة `checkIsExternalLink` بتحديد ما إذا كان الرابط خارجيًا.
|
|
1560
|
+
تقوم الدالة المساعدة `checkIsExternalLink` بتحديد ما إذا كان الرابط URL خارجيًا. يتم ترك الروابط الخارجية كما هي لأنها لا تحتاج إلى تعريب.
|
|
1565
1561
|
|
|
1566
1562
|
- **استرجاع اللغة الحالية**:
|
|
1567
1563
|
يوفر الخطاف `useLocale` اللغة الحالية (مثلًا `fr` للفرنسية).
|
|
1568
1564
|
|
|
1569
1565
|
- **تعريب الرابط**:
|
|
1570
|
-
بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدام `getLocalizedUrl` لإضافة بادئة اللغة تلقائيًا إلى الرابط. هذا يعني أنه إذا كان المستخدم يتصفح باللغة الفرنسية، فإن تمرير `/about` كـ `href` سيُحوَّل إلى `/fr/about`.
|
|
1566
|
+
بالنسبة للروابط الداخلية (أي غير الخارجية)، يتم استخدام `getLocalizedUrl` لإضافة بادئة اللغة الحالية تلقائيًا إلى الرابط. هذا يعني أنه إذا كان المستخدم يتصفح باللغة الفرنسية، فإن تمرير `/about` كـ `href` سيُحوَّل إلى `/fr/about`.
|
|
1571
1567
|
|
|
1572
1568
|
- **إرجاع الرابط**:
|
|
1573
1569
|
يعيد المكون عنصر `<a>` مع عنوان URL المحلي، مما يضمن أن التنقل متسق مع اللغة المختارة.
|
|
1574
1570
|
|
|
1575
|
-
من خلال دمج هذا المكون `Link`
|
|
1571
|
+
من خلال دمج هذا المكون `Link` عبر تطبيقك، تحافظ على تجربة مستخدم متماسكة وواعية باللغة، مع الاستفادة أيضًا من تحسين محركات البحث وسهولة الاستخدام.
|
|
1576
1572
|
|
|
1577
1573
|
### تكوين TypeScript
|
|
1578
1574
|
|
|
@@ -1605,16 +1601,16 @@ Link.displayName = "Link";
|
|
|
1605
1601
|
.intlayer
|
|
1606
1602
|
```
|
|
1607
1603
|
|
|
1608
|
-
###
|
|
1604
|
+
### إضافة VS Code
|
|
1609
1605
|
|
|
1610
|
-
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت
|
|
1606
|
+
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **إضافة Intlayer الرسمية لـ VS Code**.
|
|
1611
1607
|
|
|
1612
1608
|
[التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1613
1609
|
|
|
1614
|
-
|
|
1610
|
+
تقدم هذه الإضافة:
|
|
1615
1611
|
|
|
1616
1612
|
- **الإكمال التلقائي** لمفاتيح الترجمة.
|
|
1617
|
-
- **الكشف
|
|
1613
|
+
- **الكشف عن الأخطاء في الوقت الحقيقي** للترجمات المفقودة.
|
|
1618
1614
|
- **معاينات داخلية** للمحتوى المترجم.
|
|
1619
1615
|
- **إجراءات سريعة** لإنشاء الترجمات وتحديثها بسهولة.
|
|
1620
1616
|
|