@intlayer/docs 8.4.10 → 8.5.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/dist/cjs/generated/docs.entry.cjs +40 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +40 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/dictionary/html.md +22 -22
- package/docs/ar/dictionary/markdown.md +18 -18
- package/docs/ar/intlayer_with_analog.md +2 -13
- package/docs/ar/intlayer_with_angular.md +1 -12
- package/docs/ar/intlayer_with_nextjs_14.md +1 -1
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +6 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/ar/intlayer_with_storybook.md +2 -5
- package/docs/ar/intlayer_with_svelte_kit.md +9 -5
- package/docs/ar/intlayer_with_vite+lit.md +738 -0
- package/docs/ar/intlayer_with_vite+react.md +16 -4
- package/docs/ar/intlayer_with_vite+solid.md +1 -1
- package/docs/ar/intlayer_with_vite+svelte.md +13 -6
- package/docs/ar/intlayer_with_vite+vanilla.md +722 -0
- package/docs/ar/intlayer_with_vite+vue.md +21 -5
- package/docs/ar/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/ar/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/ar/releases/v8.md +27 -27
- package/docs/bn/intlayer_with_storybook.md +2 -5
- package/docs/bn/intlayer_with_vite+lit.md +738 -0
- package/docs/bn/intlayer_with_vite+vanilla.md +722 -0
- package/docs/cs/intlayer_with_storybook.md +2 -5
- package/docs/cs/intlayer_with_vite+lit.md +738 -0
- package/docs/cs/intlayer_with_vite+vanilla.md +722 -0
- package/docs/de/dictionary/html.md +146 -24
- package/docs/de/dictionary/markdown.md +143 -25
- package/docs/de/intlayer_with_analog.md +2 -13
- package/docs/de/intlayer_with_angular.md +1 -12
- package/docs/de/intlayer_with_nextjs_14.md +1 -1
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_react_router_v7.md +6 -1
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/de/intlayer_with_storybook.md +2 -5
- package/docs/de/intlayer_with_svelte_kit.md +9 -5
- package/docs/de/intlayer_with_vite+lit.md +747 -0
- package/docs/de/intlayer_with_vite+react.md +16 -4
- package/docs/de/intlayer_with_vite+solid.md +1 -1
- package/docs/de/intlayer_with_vite+svelte.md +19 -6
- package/docs/de/intlayer_with_vite+vanilla.md +722 -0
- package/docs/de/intlayer_with_vite+vue.md +21 -5
- package/docs/de/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/de/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/de/releases/v8.md +27 -27
- package/docs/en/compiler.md +4 -1
- package/docs/en/configuration.md +4 -1
- package/docs/en/dictionary/html.md +146 -24
- package/docs/en/dictionary/markdown.md +143 -21
- package/docs/en/intlayer_with_analog.md +3 -14
- package/docs/en/intlayer_with_angular.md +1 -12
- package/docs/en/intlayer_with_nextjs_14.md +1 -1
- package/docs/en/intlayer_with_nextjs_16.md +12 -3
- package/docs/en/intlayer_with_nextjs_compiler.md +16 -4
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +17 -4
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +18 -4
- package/docs/en/intlayer_with_storybook.md +2 -5
- package/docs/en/intlayer_with_svelte_kit.md +21 -8
- package/docs/en/intlayer_with_tanstack.md +12 -3
- package/docs/en/intlayer_with_vite+lit.md +750 -0
- package/docs/en/intlayer_with_vite+preact.md +31 -3
- package/docs/en/intlayer_with_vite+react.md +28 -7
- package/docs/en/intlayer_with_vite+react_compiler.md +4 -1
- package/docs/en/intlayer_with_vite+solid.md +31 -3
- package/docs/en/intlayer_with_vite+svelte.md +30 -9
- package/docs/en/intlayer_with_vite+vanilla.md +725 -0
- package/docs/en/intlayer_with_vite+vue.md +28 -7
- package/docs/en/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/en/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/en/readme.md +1 -0
- package/docs/en/releases/v8.md +27 -27
- package/docs/en-GB/compiler.md +4 -1
- package/docs/en-GB/configuration.md +4 -1
- package/docs/en-GB/dictionary/html.md +22 -22
- package/docs/en-GB/dictionary/markdown.md +18 -18
- package/docs/en-GB/intlayer_with_analog.md +2 -13
- package/docs/en-GB/intlayer_with_angular.md +1 -12
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7.md +6 -1
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/en-GB/intlayer_with_storybook.md +2 -5
- package/docs/en-GB/intlayer_with_svelte_kit.md +9 -5
- package/docs/en-GB/intlayer_with_vite+lit.md +750 -0
- package/docs/en-GB/intlayer_with_vite+react.md +15 -3
- package/docs/en-GB/intlayer_with_vite+solid.md +1 -1
- package/docs/en-GB/intlayer_with_vite+svelte.md +17 -5
- package/docs/en-GB/intlayer_with_vite+vanilla.md +725 -0
- package/docs/en-GB/intlayer_with_vite+vue.md +16 -4
- package/docs/en-GB/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/en-GB/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/en-GB/releases/v8.md +27 -27
- package/docs/es/dictionary/html.md +147 -25
- package/docs/es/dictionary/markdown.md +143 -25
- package/docs/es/intlayer_with_analog.md +2 -13
- package/docs/es/intlayer_with_angular.md +1 -12
- package/docs/es/intlayer_with_nextjs_14.md +1 -1
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +6 -1
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/es/intlayer_with_storybook.md +2 -5
- package/docs/es/intlayer_with_svelte_kit.md +9 -5
- package/docs/es/intlayer_with_vite+lit.md +747 -0
- package/docs/es/intlayer_with_vite+react.md +16 -4
- package/docs/es/intlayer_with_vite+solid.md +1 -1
- package/docs/es/intlayer_with_vite+svelte.md +16 -6
- package/docs/es/intlayer_with_vite+vanilla.md +722 -0
- package/docs/es/intlayer_with_vite+vue.md +21 -5
- package/docs/es/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/es/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/es/releases/v8.md +27 -27
- package/docs/fr/dictionary/html.md +146 -24
- package/docs/fr/dictionary/markdown.md +143 -25
- package/docs/fr/intlayer_with_analog.md +2 -13
- package/docs/fr/intlayer_with_angular.md +1 -12
- package/docs/fr/intlayer_with_nextjs_14.md +1 -1
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +6 -1
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/fr/intlayer_with_storybook.md +2 -5
- package/docs/fr/intlayer_with_svelte_kit.md +9 -5
- package/docs/fr/intlayer_with_vite+lit.md +747 -0
- package/docs/fr/intlayer_with_vite+react.md +16 -4
- package/docs/fr/intlayer_with_vite+solid.md +1 -1
- package/docs/fr/intlayer_with_vite+svelte.md +19 -6
- package/docs/fr/intlayer_with_vite+vanilla.md +722 -0
- package/docs/fr/intlayer_with_vite+vue.md +21 -5
- package/docs/fr/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/fr/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/fr/releases/v8.md +27 -27
- package/docs/hi/dictionary/html.md +22 -22
- package/docs/hi/dictionary/markdown.md +18 -18
- package/docs/hi/intlayer_with_analog.md +2 -13
- package/docs/hi/intlayer_with_angular.md +1 -12
- package/docs/hi/intlayer_with_nextjs_14.md +1 -1
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +6 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/hi/intlayer_with_storybook.md +2 -5
- package/docs/hi/intlayer_with_svelte_kit.md +9 -5
- package/docs/hi/intlayer_with_vite+lit.md +738 -0
- package/docs/hi/intlayer_with_vite+react.md +16 -4
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+svelte.md +13 -6
- package/docs/hi/intlayer_with_vite+vanilla.md +722 -0
- package/docs/hi/intlayer_with_vite+vue.md +21 -5
- package/docs/hi/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/hi/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/hi/releases/v8.md +27 -27
- package/docs/id/dictionary/html.md +22 -22
- package/docs/id/dictionary/markdown.md +18 -18
- package/docs/id/intlayer_with_analog.md +2 -13
- package/docs/id/intlayer_with_angular.md +1 -12
- package/docs/id/intlayer_with_nextjs_14.md +1 -1
- package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/id/intlayer_with_react_router_v7.md +6 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/id/intlayer_with_storybook.md +2 -5
- package/docs/id/intlayer_with_svelte_kit.md +9 -5
- package/docs/id/intlayer_with_vite+lit.md +738 -0
- package/docs/id/intlayer_with_vite+react.md +16 -4
- package/docs/id/intlayer_with_vite+solid.md +1 -1
- package/docs/id/intlayer_with_vite+svelte.md +13 -6
- package/docs/id/intlayer_with_vite+vanilla.md +722 -0
- package/docs/id/intlayer_with_vite+vue.md +16 -4
- package/docs/id/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/id/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/id/releases/v8.md +27 -27
- package/docs/it/dictionary/html.md +146 -24
- package/docs/it/dictionary/markdown.md +143 -21
- package/docs/it/intlayer_with_analog.md +2 -13
- package/docs/it/intlayer_with_angular.md +1 -12
- package/docs/it/intlayer_with_nextjs_14.md +1 -1
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +6 -1
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/it/intlayer_with_storybook.md +2 -5
- package/docs/it/intlayer_with_svelte_kit.md +9 -5
- package/docs/it/intlayer_with_vite+lit.md +747 -0
- package/docs/it/intlayer_with_vite+react.md +16 -4
- package/docs/it/intlayer_with_vite+solid.md +1 -1
- package/docs/it/intlayer_with_vite+svelte.md +13 -6
- package/docs/it/intlayer_with_vite+vanilla.md +722 -0
- package/docs/it/intlayer_with_vite+vue.md +21 -5
- package/docs/it/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/it/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/it/releases/v8.md +27 -27
- package/docs/ja/dictionary/html.md +148 -27
- package/docs/ja/dictionary/markdown.md +139 -24
- package/docs/ja/intlayer_with_analog.md +2 -13
- package/docs/ja/intlayer_with_angular.md +1 -12
- package/docs/ja/intlayer_with_nextjs_14.md +1 -1
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +6 -1
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/ja/intlayer_with_storybook.md +2 -5
- package/docs/ja/intlayer_with_vite+lit.md +747 -0
- package/docs/ja/intlayer_with_vite+solid.md +1 -1
- package/docs/ja/intlayer_with_vite+svelte.md +13 -6
- package/docs/ja/intlayer_with_vite+vanilla.md +722 -0
- package/docs/ja/intlayer_with_vite+vue.md +21 -5
- package/docs/ja/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/ja/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/ja/releases/v8.md +27 -27
- package/docs/ko/dictionary/html.md +149 -28
- package/docs/ko/dictionary/markdown.md +143 -25
- package/docs/ko/intlayer_with_analog.md +2 -13
- package/docs/ko/intlayer_with_angular.md +1 -12
- package/docs/ko/intlayer_with_nextjs_14.md +1 -1
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +6 -1
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/ko/intlayer_with_storybook.md +2 -5
- package/docs/ko/intlayer_with_svelte_kit.md +9 -5
- package/docs/ko/intlayer_with_vite+lit.md +747 -0
- package/docs/ko/intlayer_with_vite+react.md +16 -4
- package/docs/ko/intlayer_with_vite+solid.md +1 -1
- package/docs/ko/intlayer_with_vite+svelte.md +13 -6
- package/docs/ko/intlayer_with_vite+vanilla.md +722 -0
- package/docs/ko/intlayer_with_vite+vue.md +21 -5
- package/docs/ko/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/ko/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/ko/releases/v8.md +27 -27
- package/docs/nl/intlayer_with_storybook.md +2 -5
- package/docs/nl/intlayer_with_vite+lit.md +738 -0
- package/docs/nl/intlayer_with_vite+vanilla.md +722 -0
- package/docs/pl/dictionary/html.md +146 -24
- package/docs/pl/dictionary/markdown.md +143 -25
- package/docs/pl/intlayer_with_analog.md +2 -13
- package/docs/pl/intlayer_with_angular.md +1 -12
- package/docs/pl/intlayer_with_nextjs_14.md +1 -1
- package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pl/intlayer_with_react_router_v7.md +6 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/pl/intlayer_with_storybook.md +2 -5
- package/docs/pl/intlayer_with_svelte_kit.md +9 -5
- package/docs/pl/intlayer_with_vite+lit.md +738 -0
- package/docs/pl/intlayer_with_vite+react.md +16 -4
- package/docs/pl/intlayer_with_vite+solid.md +1 -1
- package/docs/pl/intlayer_with_vite+svelte.md +13 -6
- package/docs/pl/intlayer_with_vite+vanilla.md +722 -0
- package/docs/pl/intlayer_with_vite+vue.md +16 -4
- package/docs/pl/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/pl/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/pl/releases/v8.md +27 -27
- package/docs/pt/dictionary/html.md +127 -24
- package/docs/pt/dictionary/markdown.md +143 -25
- package/docs/pt/intlayer_with_analog.md +2 -13
- package/docs/pt/intlayer_with_angular.md +1 -12
- package/docs/pt/intlayer_with_nextjs_14.md +1 -1
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +6 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/pt/intlayer_with_storybook.md +2 -5
- package/docs/pt/intlayer_with_svelte_kit.md +9 -5
- package/docs/pt/intlayer_with_vite+lit.md +747 -0
- package/docs/pt/intlayer_with_vite+react.md +16 -4
- package/docs/pt/intlayer_with_vite+solid.md +1 -1
- package/docs/pt/intlayer_with_vite+svelte.md +16 -6
- package/docs/pt/intlayer_with_vite+vanilla.md +722 -0
- package/docs/pt/intlayer_with_vite+vue.md +21 -5
- package/docs/pt/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/pt/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/pt/releases/v8.md +27 -27
- package/docs/ru/dictionary/html.md +148 -27
- package/docs/ru/dictionary/markdown.md +143 -23
- package/docs/ru/intlayer_with_analog.md +2 -13
- package/docs/ru/intlayer_with_angular.md +1 -12
- package/docs/ru/intlayer_with_nextjs_14.md +1 -1
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +6 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/ru/intlayer_with_storybook.md +2 -5
- package/docs/ru/intlayer_with_svelte_kit.md +9 -5
- package/docs/ru/intlayer_with_vite+lit.md +747 -0
- package/docs/ru/intlayer_with_vite+react.md +16 -4
- package/docs/ru/intlayer_with_vite+solid.md +1 -1
- package/docs/ru/intlayer_with_vite+svelte.md +13 -6
- package/docs/ru/intlayer_with_vite+vanilla.md +722 -0
- package/docs/ru/intlayer_with_vite+vue.md +21 -5
- package/docs/ru/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/ru/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/ru/releases/v8.md +27 -27
- package/docs/tr/dictionary/html.md +129 -27
- package/docs/tr/dictionary/markdown.md +143 -23
- package/docs/tr/intlayer_with_analog.md +2 -13
- package/docs/tr/intlayer_with_angular.md +1 -12
- package/docs/tr/intlayer_with_nextjs_14.md +1 -1
- package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/tr/intlayer_with_react_router_v7.md +6 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/tr/intlayer_with_storybook.md +2 -5
- package/docs/tr/intlayer_with_svelte_kit.md +9 -5
- package/docs/tr/intlayer_with_vite+lit.md +738 -0
- package/docs/tr/intlayer_with_vite+react.md +16 -4
- package/docs/tr/intlayer_with_vite+solid.md +1 -1
- package/docs/tr/intlayer_with_vite+svelte.md +13 -6
- package/docs/tr/intlayer_with_vite+vanilla.md +722 -0
- package/docs/tr/intlayer_with_vite+vue.md +16 -4
- package/docs/tr/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/tr/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/tr/releases/v8.md +27 -27
- package/docs/uk/dictionary/html.md +22 -22
- package/docs/uk/dictionary/markdown.md +18 -18
- package/docs/uk/intlayer_with_analog.md +2 -13
- package/docs/uk/intlayer_with_angular.md +1 -12
- package/docs/uk/intlayer_with_nextjs_14.md +1 -1
- package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/uk/intlayer_with_react_router_v7.md +5 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/uk/intlayer_with_storybook.md +2 -5
- package/docs/uk/intlayer_with_svelte_kit.md +9 -5
- package/docs/uk/intlayer_with_vite+lit.md +738 -0
- package/docs/uk/intlayer_with_vite+react.md +16 -4
- package/docs/uk/intlayer_with_vite+solid.md +1 -1
- package/docs/uk/intlayer_with_vite+svelte.md +18 -6
- package/docs/uk/intlayer_with_vite+vanilla.md +722 -0
- package/docs/uk/intlayer_with_vite+vue.md +16 -4
- package/docs/uk/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/uk/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/uk/releases/v8.md +27 -27
- package/docs/ur/intlayer_with_storybook.md +2 -5
- package/docs/ur/intlayer_with_vite+lit.md +738 -0
- package/docs/ur/intlayer_with_vite+vanilla.md +722 -0
- package/docs/vi/dictionary/html.md +22 -22
- package/docs/vi/dictionary/markdown.md +18 -18
- package/docs/vi/intlayer_with_analog.md +2 -13
- package/docs/vi/intlayer_with_angular.md +1 -12
- package/docs/vi/intlayer_with_nextjs_14.md +1 -1
- package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/vi/intlayer_with_react_router_v7.md +6 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/vi/intlayer_with_storybook.md +2 -5
- package/docs/vi/intlayer_with_svelte_kit.md +9 -5
- package/docs/vi/intlayer_with_vite+lit.md +738 -0
- package/docs/vi/intlayer_with_vite+react.md +16 -4
- package/docs/vi/intlayer_with_vite+solid.md +1 -1
- package/docs/vi/intlayer_with_vite+svelte.md +17 -5
- package/docs/vi/intlayer_with_vite+vanilla.md +722 -0
- package/docs/vi/intlayer_with_vite+vue.md +16 -4
- package/docs/vi/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/vi/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/vi/releases/v8.md +27 -27
- package/docs/zh/dictionary/html.md +148 -27
- package/docs/zh/dictionary/markdown.md +143 -21
- package/docs/zh/intlayer_with_analog.md +2 -13
- package/docs/zh/intlayer_with_angular.md +1 -12
- package/docs/zh/intlayer_with_nextjs_14.md +1 -1
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +6 -1
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +6 -1
- package/docs/zh/intlayer_with_storybook.md +2 -5
- package/docs/zh/intlayer_with_svelte_kit.md +9 -5
- package/docs/zh/intlayer_with_vite+lit.md +747 -0
- package/docs/zh/intlayer_with_vite+react.md +16 -4
- package/docs/zh/intlayer_with_vite+solid.md +1 -1
- package/docs/zh/intlayer_with_vite+svelte.md +16 -6
- package/docs/zh/intlayer_with_vite+vanilla.md +722 -0
- package/docs/zh/intlayer_with_vite+vue.md +16 -4
- package/docs/zh/packages/react-intlayer/MarkdownRenderer.md +1 -1
- package/docs/zh/packages/svelte-intlayer/useRewriteURL.md +1 -1
- package/docs/zh/releases/v8.md +27 -27
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +40 -0
|
@@ -0,0 +1,722 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-03-23
|
|
3
|
+
updatedAt: 2026-03-23
|
|
4
|
+
title: i18n Vite + Vanilla JS - كيفية ترجمة تطبيق Vanilla JS في عام 2026
|
|
5
|
+
description: اكتشف كيفية جعل موقع الويب الخاص بك باستخدام Vite و Vanilla JS متعدد اللغات. اتبع التوثيق للتدويل (i18n) والترجمة.
|
|
6
|
+
keywords:
|
|
7
|
+
- التدويل
|
|
8
|
+
- التوثيق
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Vite
|
|
11
|
+
- Vanilla JS
|
|
12
|
+
- JavaScript
|
|
13
|
+
- TypeScript
|
|
14
|
+
- HTML
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- environment
|
|
18
|
+
- vite-and-vanilla
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-vanilla-template
|
|
20
|
+
history:
|
|
21
|
+
- version: 8.4.10
|
|
22
|
+
date: 2026-03-23
|
|
23
|
+
changes: "Init history"
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# ترجم موقع الويب الخاص بك باستخدام Vite و Vanilla JS باستخدام Intlayer | التدويل (i18n)
|
|
27
|
+
|
|
28
|
+
## جدول المحتويات
|
|
29
|
+
|
|
30
|
+
<TOC/>
|
|
31
|
+
|
|
32
|
+
## ما هو Intlayer؟
|
|
33
|
+
|
|
34
|
+
**Intlayer** هي مكتبة تدويل (i18n) مبتكرة ومفتوحة المصدر مصممة لتبسيط الدعم متعدد اللغات في تطبيقات الويب الحديثة.
|
|
35
|
+
|
|
36
|
+
مع Intlayer، يمكنك:
|
|
37
|
+
|
|
38
|
+
- **إدارة الترجمات بسهولة** باستخدام القواميس التصريحية على مستوى المكونات.
|
|
39
|
+
- **توطين البيانات الوصفية والمسارات والمحتوى ديناميكيًا**.
|
|
40
|
+
- **ضمان دعم TypeScript** مع أنواع يتم إنشاؤها تلقائيًا، مما يحسن من الإكمال التلقائي واكتشاف الأخطاء.
|
|
41
|
+
- **الاستفادة من الميزات المتقدمة**، مثل الكشف عن اللغة وتبديلها ديناميكيًا.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## دليل خطوة بخطوة لإعداد Intlayer في تطبيق Vite و Vanilla JS
|
|
46
|
+
|
|
47
|
+
### الخطوة 1: تثبيت الاعتماديات
|
|
48
|
+
|
|
49
|
+
قم بتثبيت الحزم اللازمة باستخدام npm:
|
|
50
|
+
|
|
51
|
+
```bash packageManager="npm"
|
|
52
|
+
npm install intlayer vanilla-intlayer
|
|
53
|
+
npm install vite-intlayer --save-dev
|
|
54
|
+
npx intlayer init
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```bash packageManager="pnpm"
|
|
58
|
+
pnpm add intlayer vanilla-intlayer
|
|
59
|
+
pnpm add vite-intlayer --save-dev
|
|
60
|
+
pnpm intlayer init
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```bash packageManager="yarn"
|
|
64
|
+
yarn add intlayer vanilla-intlayer
|
|
65
|
+
yarn add vite-intlayer --save-dev
|
|
66
|
+
yarn intlayer init
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```bash packageManager="bun"
|
|
70
|
+
bun add intlayer vanilla-intlayer
|
|
71
|
+
bun add vite-intlayer --dev
|
|
72
|
+
bunx intlayer init
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- **intlayer**
|
|
76
|
+
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، الترجمة، [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md)، التحويل البرمجي، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/index.md).
|
|
77
|
+
|
|
78
|
+
- **vanilla-intlayer**
|
|
79
|
+
الحزمة التي تدمج Intlayer مع تطبيقات JavaScript / TypeScript الصرفة. توفر نموذجًا مفردًا للنشر/الاشتراك (`IntlayerClient`) ومساعدين قائمين على رد الاتصال (`useIntlayer` و `useLocale` وما إلى ذلك) بحيث يمكن لأي جزء من تطبيقك التفاعل مع تغييرات اللغة دون الاعتماد على إطار عمل واجهة المستخدم.
|
|
80
|
+
|
|
81
|
+
- **vite-intlayer**
|
|
82
|
+
تتضمن ملحق Vite لدمج Intlayer مع [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى برمجية وسيطة لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط، ومعالجة إعادة توجيه عناوين URL.
|
|
83
|
+
|
|
84
|
+
### الخطوة 2: تكوين مشروعك
|
|
85
|
+
|
|
86
|
+
قم بإنشاء ملف تكوين لتهيئة لغات تطبيقك:
|
|
87
|
+
|
|
88
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
89
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
90
|
+
|
|
91
|
+
const config: IntlayerConfig = {
|
|
92
|
+
internationalization: {
|
|
93
|
+
locales: [
|
|
94
|
+
Locales.ENGLISH,
|
|
95
|
+
Locales.FRENCH,
|
|
96
|
+
Locales.SPANISH,
|
|
97
|
+
// لغاتك الأخرى
|
|
98
|
+
],
|
|
99
|
+
defaultLocale: Locales.ENGLISH,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default config;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
107
|
+
import { Locales } from "intlayer";
|
|
108
|
+
|
|
109
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
110
|
+
const config = {
|
|
111
|
+
internationalization: {
|
|
112
|
+
locales: [
|
|
113
|
+
Locales.ENGLISH,
|
|
114
|
+
Locales.FRENCH,
|
|
115
|
+
Locales.SPANISH,
|
|
116
|
+
// لغاتك الأخرى
|
|
117
|
+
],
|
|
118
|
+
defaultLocale: Locales.ENGLISH,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default config;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
126
|
+
const { Locales } = require("intlayer");
|
|
127
|
+
|
|
128
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
129
|
+
const config = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [
|
|
132
|
+
Locales.ENGLISH,
|
|
133
|
+
Locales.FRENCH,
|
|
134
|
+
Locales.SPANISH,
|
|
135
|
+
// لغاتك الأخرى
|
|
136
|
+
],
|
|
137
|
+
defaultLocale: Locales.ENGLISH,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
module.exports = config;
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
> من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL الموطنة، وإعادة توجيه البرمجيات الوسيطة، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، ارجع إلى [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
|
|
145
|
+
|
|
146
|
+
### الخطوة 3: دمج Intlayer في تكوين Vite الخاص بك
|
|
147
|
+
|
|
148
|
+
أضف ملحق intlayer إلى التكوين الخاص بك.
|
|
149
|
+
|
|
150
|
+
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
151
|
+
import { defineConfig } from "vite";
|
|
152
|
+
import { intlayer } from "vite-intlayer";
|
|
153
|
+
|
|
154
|
+
// https://vitejs.dev/config/
|
|
155
|
+
export default defineConfig({
|
|
156
|
+
plugins: [intlayer()],
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
```javascript fileName="vite.config.mjs" codeFormat="esm"
|
|
161
|
+
import { defineConfig } from "vite";
|
|
162
|
+
import { intlayer } from "vite-intlayer";
|
|
163
|
+
|
|
164
|
+
// https://vitejs.dev/config/
|
|
165
|
+
export default defineConfig({
|
|
166
|
+
plugins: [intlayer()],
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```javascript fileName="vite.config.cjs" codeFormat="commonjs"
|
|
171
|
+
const { defineConfig } = require("vite");
|
|
172
|
+
const { intlayer } = require("vite-intlayer");
|
|
173
|
+
|
|
174
|
+
// https://vitejs.dev/config/
|
|
175
|
+
module.exports = defineConfig({
|
|
176
|
+
plugins: [intlayer()],
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
> يستخدم ملحق Vite `intlayer()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. يحدد متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، فإنه يوفر أسماء مستعارة لتحسين الأداء.
|
|
181
|
+
|
|
182
|
+
### الخطوة 4: تهيئة Intlayer في نقطة الدخول الخاصة بك
|
|
183
|
+
|
|
184
|
+
استدعِ `installIntlayer()` **قبل** عرض أي محتوى بحيث يكون نموذج اللغة العالمي المفرد جاهزًا.
|
|
185
|
+
|
|
186
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
187
|
+
import { installIntlayer } from "vanilla-intlayer";
|
|
188
|
+
|
|
189
|
+
// يجب استدعاؤه قبل عرض أي محتوى i18n.
|
|
190
|
+
installIntlayer();
|
|
191
|
+
|
|
192
|
+
// استيراد وتشغيل وحدات التطبيق الخاصة بك.
|
|
193
|
+
import "./app.js";
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
إذا كنت تستخدم أيضًا إعلانات محتوى `md()` (Markdown)، فقم بتثبيت عرض Markdown أيضًا:
|
|
197
|
+
|
|
198
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
199
|
+
import { installIntlayer, installIntlayerMarkdown } from "vanilla-intlayer";
|
|
200
|
+
|
|
201
|
+
installIntlayer();
|
|
202
|
+
installIntlayerMarkdown();
|
|
203
|
+
|
|
204
|
+
import "./app.js";
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### الخطوة 5: إعلان المحتوى الخاص بك
|
|
208
|
+
|
|
209
|
+
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
|
|
210
|
+
|
|
211
|
+
```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
|
|
212
|
+
import { insert, t, type Dictionary } from "intlayer";
|
|
213
|
+
|
|
214
|
+
const appContent = {
|
|
215
|
+
key: "app",
|
|
216
|
+
content: {
|
|
217
|
+
title: "Vite + Vanilla",
|
|
218
|
+
|
|
219
|
+
viteLogoLabel: t({
|
|
220
|
+
en: "Vite Logo",
|
|
221
|
+
fr: "Logo Vite",
|
|
222
|
+
es: "Logo Vite",
|
|
223
|
+
}),
|
|
224
|
+
|
|
225
|
+
count: insert(
|
|
226
|
+
t({
|
|
227
|
+
en: "count is {{count}}",
|
|
228
|
+
fr: "le compte est {{count}}",
|
|
229
|
+
es: "el recuento es {{count}}",
|
|
230
|
+
})
|
|
231
|
+
),
|
|
232
|
+
|
|
233
|
+
readTheDocs: t({
|
|
234
|
+
en: "Click on the Vite logo to learn more",
|
|
235
|
+
fr: "Cliquez sur le logo Vite pour en savoir plus",
|
|
236
|
+
es: "انقر على شعار Vite لمعرفة المزيد",
|
|
237
|
+
}),
|
|
238
|
+
},
|
|
239
|
+
} satisfies Dictionary;
|
|
240
|
+
|
|
241
|
+
export default appContent;
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
|
|
245
|
+
import { insert, t } from "intlayer";
|
|
246
|
+
|
|
247
|
+
/** @type {import('intlayer').Dictionary} */
|
|
248
|
+
const appContent = {
|
|
249
|
+
key: "app",
|
|
250
|
+
content: {
|
|
251
|
+
title: "Vite + Vanilla",
|
|
252
|
+
|
|
253
|
+
viteLogoLabel: t({
|
|
254
|
+
en: "Vite Logo",
|
|
255
|
+
fr: "Logo Vite",
|
|
256
|
+
es: "Logo Vite",
|
|
257
|
+
}),
|
|
258
|
+
|
|
259
|
+
count: insert(
|
|
260
|
+
t({
|
|
261
|
+
en: "count is {{count}}",
|
|
262
|
+
fr: "le compte est {{count}}",
|
|
263
|
+
es: "el recuento es {{count}}",
|
|
264
|
+
})
|
|
265
|
+
),
|
|
266
|
+
|
|
267
|
+
readTheDocs: t({
|
|
268
|
+
en: "Click on the Vite logo to learn more",
|
|
269
|
+
fr: "Cliquez sur le logo Vite pour en savoir plus",
|
|
270
|
+
es: "انقر على شعار Vite لمعرفة المزيد",
|
|
271
|
+
}),
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
export default appContent;
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
|
|
279
|
+
const { insert, t } = require("intlayer");
|
|
280
|
+
|
|
281
|
+
/** @type {import('intlayer').Dictionary} */
|
|
282
|
+
const appContent = {
|
|
283
|
+
key: "app",
|
|
284
|
+
content: {
|
|
285
|
+
title: "Vite + Vanilla",
|
|
286
|
+
|
|
287
|
+
viteLogoLabel: t({
|
|
288
|
+
en: "Vite Logo",
|
|
289
|
+
fr: "Logo Vite",
|
|
290
|
+
es: "Logo Vite",
|
|
291
|
+
}),
|
|
292
|
+
|
|
293
|
+
count: insert(
|
|
294
|
+
t({
|
|
295
|
+
en: "count is {{count}}",
|
|
296
|
+
fr: "le compte est {{count}}",
|
|
297
|
+
es: "el recuento es {{count}}",
|
|
298
|
+
})
|
|
299
|
+
),
|
|
300
|
+
|
|
301
|
+
readTheDocs: t({
|
|
302
|
+
en: "Click on the Vite logo to learn more",
|
|
303
|
+
fr: "Cliqueز sur le logo Vite pour en savoir plus",
|
|
304
|
+
es: "انقر على شعار Vite لمعرفة المزيد",
|
|
305
|
+
}),
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
module.exports = appContent;
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
```json fileName="src/app.content.json" contentDeclarationFormat="json"
|
|
313
|
+
{
|
|
314
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
315
|
+
"key": "app",
|
|
316
|
+
"content": {
|
|
317
|
+
"title": "Vite + Vanilla",
|
|
318
|
+
"viteLogoLabel": {
|
|
319
|
+
"nodeType": "translation",
|
|
320
|
+
"translation": {
|
|
321
|
+
"en": "Vite Logo",
|
|
322
|
+
"fr": "Logo Vite",
|
|
323
|
+
"es": "Logo Vite"
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
"count": {
|
|
327
|
+
"nodeType": "insertion",
|
|
328
|
+
"insertion": {
|
|
329
|
+
"nodeType": "translation",
|
|
330
|
+
"translation": {
|
|
331
|
+
"en": "count is {{count}}",
|
|
332
|
+
"fr": "le compte est {{count}}",
|
|
333
|
+
"es": "el recuento es {{count}}"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"readTheDocs": {
|
|
338
|
+
"nodeType": "translation",
|
|
339
|
+
"translation": {
|
|
340
|
+
"en": "Click on the Vite logo to learn more",
|
|
341
|
+
"fr": "Cliquez sur le logo Vite pour en savoir plus",
|
|
342
|
+
"es": "انقر على شعار Vite لمعرفة المزيد"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./src`). وتتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
350
|
+
>
|
|
351
|
+
> لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md).
|
|
352
|
+
|
|
353
|
+
### الخطوة 6: استخدام Intlayer في JavaScript الخاص بك
|
|
354
|
+
|
|
355
|
+
تعكس `vanilla-intlayer` واجهة برمجة تطبيقات `react-intlayer`: `useIntlayer(key, locale?)` تعيد المحتوى المترجم مباشرة. قم بربط `.onChange()` مع النتيجة للاشتراك في تغييرات اللغة — المعادل الصريح لإعادة العرض في React.
|
|
356
|
+
|
|
357
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
358
|
+
import { installIntlayer, useIntlayer } from "vanilla-intlayer";
|
|
359
|
+
|
|
360
|
+
installIntlayer();
|
|
361
|
+
|
|
362
|
+
// الحصول على المحتوى الأولي للغة الحالية.
|
|
363
|
+
// ربط .onChange() ليتم إعلامك متى تغيرت اللغة.
|
|
364
|
+
const content = useIntlayer("app").onChange((newContent) => {
|
|
365
|
+
// إعادة العرض أو تصحيح عقد DOM المتأثرة فقط
|
|
366
|
+
document.querySelector<HTMLHeadingElement>("h1")!.textContent = String(
|
|
367
|
+
newContent.title
|
|
368
|
+
);
|
|
369
|
+
document.querySelector<HTMLParagraphElement>(".read-the-docs")!.textContent =
|
|
370
|
+
String(newContent.readTheDocs);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
// العرض الأولي
|
|
374
|
+
document.querySelector<HTMLHeadingElement>("h1")!.textContent = String(
|
|
375
|
+
content.title
|
|
376
|
+
);
|
|
377
|
+
document.querySelector<HTMLParagraphElement>(".read-the-docs")!.textContent =
|
|
378
|
+
String(content.readTheDocs);
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
> الوصول إلى القيم الطرفية كسلاسل من خلال تغليفها في `String()`، والتي تستدعي طريقة `toString()` للعقدة وتعيد النص المترجم.
|
|
382
|
+
>
|
|
383
|
+
> عندما تحتاج إلى قيمة لسمة HTML أصلية (مثل `alt` و `aria-label`)، استخدم `.value` مباشرة:
|
|
384
|
+
>
|
|
385
|
+
> ```typescript
|
|
386
|
+
> img.alt = content.viteLogoLabel.value;
|
|
387
|
+
> ```
|
|
388
|
+
|
|
389
|
+
### (اختياري) الخطوة 7: تغيير لغة المحتوى الخاص بك
|
|
390
|
+
|
|
391
|
+
لتغيير لغة المحتوى الخاص بك، استخدم وظيفة `setLocale` التي كشفت عنها `useLocale`.
|
|
392
|
+
|
|
393
|
+
```typescript fileName="src/locale-switcher.ts" codeFormat="typescript"
|
|
394
|
+
import { getLocaleName } from "intlayer";
|
|
395
|
+
import { useLocale } from "vanilla-intlayer";
|
|
396
|
+
|
|
397
|
+
export function setupLocaleSwitcher(container: HTMLElement): () => void {
|
|
398
|
+
const { locale, availableLocales, setLocale, subscribe } = useLocale();
|
|
399
|
+
|
|
400
|
+
const select = document.createElement("select");
|
|
401
|
+
select.setAttribute("aria-label", "Language");
|
|
402
|
+
|
|
403
|
+
const render = (currentLocale: string) => {
|
|
404
|
+
select.innerHTML = availableLocales
|
|
405
|
+
.map(
|
|
406
|
+
(loc) =>
|
|
407
|
+
`<option value="${loc}"${loc === currentLocale ? " selected" : ""}>
|
|
408
|
+
${getLocaleName(loc)}
|
|
409
|
+
</option>`
|
|
410
|
+
)
|
|
411
|
+
.join("");
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
render(locale);
|
|
415
|
+
container.appendChild(select);
|
|
416
|
+
|
|
417
|
+
select.addEventListener("change", () => setLocale(select.value as any));
|
|
418
|
+
|
|
419
|
+
// الحفاظ على مزامنة القائمة المنسدلة عند تغيير اللغة من مكان آخر
|
|
420
|
+
return subscribe((newLocale) => render(newLocale));
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### (اختياري) الخطوة 8: عرض محتوى Markdown و HTML
|
|
425
|
+
|
|
426
|
+
يدعم Intlayer إعلانات المحتوى `md()` و `html()`. في vanilla JS، يتم إدراج المخرج المترجم كـ HTML خام عبر `innerHTML`.
|
|
427
|
+
|
|
428
|
+
```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
|
|
429
|
+
import { md, t, type Dictionary } from "intlayer";
|
|
430
|
+
|
|
431
|
+
const appContent = {
|
|
432
|
+
key: "app",
|
|
433
|
+
content: {
|
|
434
|
+
// ...
|
|
435
|
+
editNote: md(
|
|
436
|
+
t({
|
|
437
|
+
en: "Edit `src/main.ts` and save to test **HMR**",
|
|
438
|
+
fr: "Modifiez `src/main.ts` et enregistrez pour tester **HMR**",
|
|
439
|
+
es: "Edite `src/main.ts` y guarde para probar **HMR**",
|
|
440
|
+
})
|
|
441
|
+
),
|
|
442
|
+
},
|
|
443
|
+
} satisfies Dictionary;
|
|
444
|
+
|
|
445
|
+
export default appContent;
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
ترجمة وحقن HTML:
|
|
449
|
+
|
|
450
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
451
|
+
import {
|
|
452
|
+
compileMarkdown,
|
|
453
|
+
installIntlayerMarkdown,
|
|
454
|
+
useIntlayer,
|
|
455
|
+
} from "vanilla-intlayer";
|
|
456
|
+
|
|
457
|
+
installIntlayerMarkdown();
|
|
458
|
+
|
|
459
|
+
const content = useIntlayer("app").onChange((newContent) => {
|
|
460
|
+
const el = document.querySelector<HTMLDivElement>(".edit-note")!;
|
|
461
|
+
el.innerHTML = compileMarkdown(String(newContent.editNote));
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
document.querySelector<HTMLDivElement>(".edit-note")!.innerHTML =
|
|
465
|
+
compileMarkdown(String(content.editNote));
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
> [!TIP]
|
|
469
|
+
> `String(content.editNote)` تستدعي `toString()` على `IntlayerNode` التي تعيد سلسلة Markdown الخام. مررها إلى `compileMarkdown` للحصول على سلسلة HTML، ثم قم بضبطها عبر `innerHTML`.
|
|
470
|
+
|
|
471
|
+
> [!WARNING]
|
|
472
|
+
> استخدم `innerHTML` فقط مع المحتوى الموثوق به. إذا كان markdown يأتي من إدخال المستخدم، فقم بتطهيره أولاً (مثل استخدام DOMPurify). يمكنك تثبيت عارض تطهير ديناميكيًا:
|
|
473
|
+
>
|
|
474
|
+
> ```typescript
|
|
475
|
+
> import { installIntlayerMarkdownDynamic } from "vanilla-intlayer";
|
|
476
|
+
>
|
|
477
|
+
> await installIntlayerMarkdownDynamic(async () => {
|
|
478
|
+
> const DOMPurify = await import("dompurify");
|
|
479
|
+
> return (markdown) => DOMPurify.sanitize(compileMarkdown(markdown));
|
|
480
|
+
> });
|
|
481
|
+
> ```
|
|
482
|
+
|
|
483
|
+
### (اختياري) الخطوة 9: إضافة التوجيه الموطن إلى تطبيقك
|
|
484
|
+
|
|
485
|
+
لإنشاء مسارات فريدة لكل لغة (مفيد لتحسين محركات البحث)، يمكنك استخدام `intlayerProxy` في تكوين Vite الخاص بك لاكتشاف اللغة من جانب الخادم.
|
|
486
|
+
|
|
487
|
+
أولاً، أضف `intlayerProxy` إلى تكوين Vite الخاص بك:
|
|
488
|
+
|
|
489
|
+
> لاحظ أنه لاستخدام `intlayerProxy` في الإنتاج، تحتاج إلى نقل `vite-intlayer` من `devDependencies` إلى `dependencies`.
|
|
490
|
+
|
|
491
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
492
|
+
import { defineConfig } from "vite";
|
|
493
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
494
|
+
|
|
495
|
+
export default defineConfig({
|
|
496
|
+
plugins: [
|
|
497
|
+
intlayerProxy(), // يجب وضعه أولاً
|
|
498
|
+
intlayer(),
|
|
499
|
+
],
|
|
500
|
+
});
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
504
|
+
import { defineConfig } from "vite";
|
|
505
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
506
|
+
|
|
507
|
+
export default defineConfig({
|
|
508
|
+
plugins: [
|
|
509
|
+
intlayerProxy(), // يجب وضعه أولاً
|
|
510
|
+
intlayer(),
|
|
511
|
+
],
|
|
512
|
+
});
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
516
|
+
const { defineConfig } = require("vite");
|
|
517
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
518
|
+
|
|
519
|
+
module.exports = defineConfig({
|
|
520
|
+
plugins: [
|
|
521
|
+
intlayerProxy(), // يجب وضعه أولاً
|
|
522
|
+
intlayer(),
|
|
523
|
+
],
|
|
524
|
+
});
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### (اختياري) الخطوة 10: تغيير عنوان URL عند تغيير اللغة
|
|
528
|
+
|
|
529
|
+
لتحديث عنوان URL للمتصفح عند تغيير اللغة، استدعِ `useRewriteURL()` بعد تثبيت Intlayer:
|
|
530
|
+
|
|
531
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
532
|
+
import { installIntlayer, useRewriteURL } from "vanilla-intlayer";
|
|
533
|
+
|
|
534
|
+
installIntlayer();
|
|
535
|
+
|
|
536
|
+
// يعيد كتابة عنوان URL فورًا وعند كل تغيير لاحق للغة.
|
|
537
|
+
// يعيد وظيفة إلغاء الاشتراك للتنظيف.
|
|
538
|
+
const stopRewriteURL = useRewriteURL();
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
### (اختياري) الخطوة 11: تبديل سمات لغة HTML والاتجاه
|
|
542
|
+
|
|
543
|
+
قم بتحديث سمات `lang` و `dir` لعلامة `<html>` لتتوافق مع اللغة الحالية لسهولة الاستخدام وتحسين محركات البحث.
|
|
544
|
+
|
|
545
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
546
|
+
import { getHTMLTextDir } from "intlayer";
|
|
547
|
+
import { installIntlayer, useLocale } from "vanilla-intlayer";
|
|
548
|
+
|
|
549
|
+
installIntlayer();
|
|
550
|
+
|
|
551
|
+
useLocale({
|
|
552
|
+
onLocaleChange: (locale) => {
|
|
553
|
+
document.documentElement.lang = locale;
|
|
554
|
+
document.documentElement.dir = getHTMLTextDir(locale);
|
|
555
|
+
},
|
|
556
|
+
});
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
### (اختياري) الخطوة 12: تحميل القواميس ببطء حسب اللغة
|
|
560
|
+
|
|
561
|
+
للتطبيقات الكبيرة، قد ترغب في تقسيم قاموس كل لغة إلى قطعة خاصة به. استخدم `useDictionaryDynamic` جنبًا إلى جنب مع `import()` الديناميكي من Vite:
|
|
562
|
+
|
|
563
|
+
```typescript fileName="src/app.ts" codeFormat="typescript"
|
|
564
|
+
import { installIntlayer, useDictionaryDynamic } from "vanilla-intlayer";
|
|
565
|
+
|
|
566
|
+
installIntlayer();
|
|
567
|
+
|
|
568
|
+
const unsubscribe = useDictionaryDynamic(
|
|
569
|
+
{
|
|
570
|
+
en: () => import("../.intlayer/dictionaries/en/app.mjs"),
|
|
571
|
+
fr: () => import("../.intlayer/dictionaries/fr/app.mjs"),
|
|
572
|
+
es: () => import("../.intlayer/dictionaries/es/app.mjs"),
|
|
573
|
+
},
|
|
574
|
+
"app"
|
|
575
|
+
).onChange((content) => {
|
|
576
|
+
document.querySelector("h1")!.textContent = String(content.title);
|
|
577
|
+
});
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
> يتم جلب حزمة كل لغة فقط عندما تصبح تلك اللغة نشطة ويتم تخزين النتيجة مؤقتًا — التبديلات اللاحقة لنفس اللغة تكون فورية.
|
|
581
|
+
|
|
582
|
+
### (اختياري) الخطوة 13: استخراج محتوى مكوناتك
|
|
583
|
+
|
|
584
|
+
إذا كان لديك كود موجود مسبقًا، فقد يستغرق تحويل آلاف الملفات وقتًا طويلاً.
|
|
585
|
+
|
|
586
|
+
لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
|
|
587
|
+
|
|
588
|
+
لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
|
|
589
|
+
|
|
590
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
591
|
+
import { type IntlayerConfig } from "intlayer";
|
|
592
|
+
|
|
593
|
+
const config: IntlayerConfig = {
|
|
594
|
+
// ... بقية التكوين الخاص بك
|
|
595
|
+
compiler: {
|
|
596
|
+
/**
|
|
597
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
598
|
+
*/
|
|
599
|
+
enabled: true,
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* يحدد مسار ملفات المخرجات
|
|
603
|
+
*/
|
|
604
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها.
|
|
608
|
+
* بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
609
|
+
*/
|
|
610
|
+
saveComponents: false,
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* بادئة مفتاح القاموس
|
|
614
|
+
*/
|
|
615
|
+
dictionaryKeyPrefix: "",
|
|
616
|
+
},
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
export default config;
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
<Tabs>
|
|
623
|
+
<Tab value='أمر Extract'>
|
|
624
|
+
|
|
625
|
+
قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
|
|
626
|
+
|
|
627
|
+
```bash packageManager="npm"
|
|
628
|
+
npx intlayer extract
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
```bash packageManager="pnpm"
|
|
632
|
+
pnpm intlayer extract
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
```bash packageManager="yarn"
|
|
636
|
+
yarn intlayer extract
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
```bash packageManager="bun"
|
|
640
|
+
bunx intlayer extract
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
</Tab>
|
|
644
|
+
<Tab value='مترجم Babel'>
|
|
645
|
+
|
|
646
|
+
قم بتحديث `vite.config.ts` الخاص بك لتضمين ملحق `intlayerCompiler`:
|
|
647
|
+
|
|
648
|
+
```ts fileName="vite.config.ts"
|
|
649
|
+
import { defineConfig } from "vite";
|
|
650
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
651
|
+
|
|
652
|
+
export default defineConfig({
|
|
653
|
+
plugins: [
|
|
654
|
+
intlayer(),
|
|
655
|
+
intlayerCompiler(), // يضيف ملحق المترجم
|
|
656
|
+
],
|
|
657
|
+
});
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
```bash packageManager="npm"
|
|
661
|
+
npm run build # أو npm run dev
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
```bash packageManager="pnpm"
|
|
665
|
+
pnpm run build # أو pnpm run dev
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
```bash packageManager="yarn"
|
|
669
|
+
yarn build # أو yarn dev
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
```bash packageManager="bun"
|
|
673
|
+
bun run build # أو bun run dev
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
</Tab>
|
|
677
|
+
</Tabs>
|
|
678
|
+
|
|
679
|
+
### تكوين TypeScript
|
|
680
|
+
|
|
681
|
+
تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع التي يتم إنشاؤها تلقائيًا.
|
|
682
|
+
|
|
683
|
+
```json5 fileName="tsconfig.json"
|
|
684
|
+
{
|
|
685
|
+
"compilerOptions": {
|
|
686
|
+
// ...
|
|
687
|
+
},
|
|
688
|
+
"include": ["src", ".intlayer/**/*.ts"],
|
|
689
|
+
}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
### تكوين Git
|
|
693
|
+
|
|
694
|
+
يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب إضافتها إلى مستودع Git الخاص بك.
|
|
695
|
+
|
|
696
|
+
للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
|
|
697
|
+
|
|
698
|
+
```bash
|
|
699
|
+
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
|
|
700
|
+
.intlayer
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
### ملحق VS Code
|
|
704
|
+
|
|
705
|
+
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **ملحق Intlayer VS Code الرسمي**.
|
|
706
|
+
|
|
707
|
+
[تثبيت من VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
708
|
+
|
|
709
|
+
يوفر هذا الملحق:
|
|
710
|
+
|
|
711
|
+
- **الإكمال التلقائي** لمفاتيح الترجمة.
|
|
712
|
+
- **اكتشاف الأخطاء في الوقت الفعلي** للترجمات المفقودة.
|
|
713
|
+
- **معاينات مضمنة** للمحتوى المترجم.
|
|
714
|
+
- **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.
|
|
715
|
+
|
|
716
|
+
لمزيد من التفاصيل حول كيفية استخدام الملحق، ارجع إلى [توثيق ملحق Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
### اذهب أبعد من ذلك
|
|
721
|
+
|
|
722
|
+
للذهاب أبعد من ذلك، يمكنك تنفيذ [المحرر المرئي](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).
|