@intlayer/docs 8.4.10 → 8.5.1
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 +32 -25
- package/docs/ar/dictionary/markdown.md +33 -35
- package/docs/ar/intlayer_with_analog.md +10 -27
- 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 +689 -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 +24 -8
- 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 +689 -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 +689 -0
- package/docs/cs/intlayer_with_vite+vanilla.md +722 -0
- package/docs/de/compiler.md +6 -1
- package/docs/de/configuration.md +12 -9
- package/docs/de/dictionary/html.md +151 -26
- package/docs/de/dictionary/markdown.md +154 -42
- package/docs/de/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +6 -1
- package/docs/en/configuration.md +12 -9
- package/docs/en/dictionary/html.md +152 -27
- package/docs/en/dictionary/markdown.md +154 -38
- package/docs/en/intlayer_with_analog.md +10 -27
- 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 +703 -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 +41 -10
- 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 +32 -25
- package/docs/en-GB/dictionary/markdown.md +34 -36
- package/docs/en-GB/intlayer_with_analog.md +10 -27
- 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 +703 -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 +19 -7
- 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/compiler.md +6 -1
- package/docs/es/configuration.md +12 -9
- package/docs/es/dictionary/html.md +152 -27
- package/docs/es/dictionary/markdown.md +155 -43
- package/docs/es/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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/compiler.md +8 -3
- package/docs/fr/configuration.md +12 -9
- package/docs/fr/dictionary/html.md +151 -26
- package/docs/fr/dictionary/markdown.md +155 -43
- package/docs/fr/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +32 -25
- package/docs/hi/dictionary/markdown.md +35 -37
- package/docs/hi/intlayer_with_analog.md +10 -27
- 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 +689 -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 +24 -8
- 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 +32 -25
- package/docs/id/dictionary/markdown.md +35 -37
- package/docs/id/intlayer_with_analog.md +10 -27
- 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 +689 -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 +19 -7
- 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/compiler.md +8 -3
- package/docs/it/configuration.md +12 -9
- package/docs/it/dictionary/html.md +151 -26
- package/docs/it/dictionary/markdown.md +155 -39
- package/docs/it/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +153 -29
- package/docs/ja/dictionary/markdown.md +154 -42
- package/docs/ja/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +154 -30
- package/docs/ko/dictionary/markdown.md +155 -43
- package/docs/ko/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +689 -0
- package/docs/nl/intlayer_with_vite+vanilla.md +722 -0
- package/docs/pl/dictionary/html.md +151 -26
- package/docs/pl/dictionary/markdown.md +155 -43
- package/docs/pl/intlayer_with_analog.md +10 -27
- 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 +689 -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 +19 -7
- 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/compiler.md +7 -2
- package/docs/pt/configuration.md +11 -9
- package/docs/pt/dictionary/html.md +132 -26
- package/docs/pt/dictionary/markdown.md +155 -43
- package/docs/pt/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +153 -29
- package/docs/ru/dictionary/markdown.md +155 -41
- package/docs/ru/intlayer_with_analog.md +10 -27
- 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 +698 -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 +24 -8
- 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 +134 -29
- package/docs/tr/dictionary/markdown.md +155 -41
- package/docs/tr/intlayer_with_analog.md +10 -27
- 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 +689 -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 +19 -7
- 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 +32 -25
- package/docs/uk/dictionary/markdown.md +35 -37
- package/docs/uk/intlayer_with_analog.md +10 -27
- 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 +689 -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 +19 -7
- 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 +689 -0
- package/docs/ur/intlayer_with_vite+vanilla.md +722 -0
- package/docs/vi/dictionary/html.md +32 -25
- package/docs/vi/dictionary/markdown.md +35 -37
- package/docs/vi/intlayer_with_analog.md +10 -27
- 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 +689 -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 +19 -7
- 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/compiler.md +8 -3
- package/docs/zh/configuration.md +4 -1
- package/docs/zh/dictionary/html.md +153 -29
- package/docs/zh/dictionary/markdown.md +155 -39
- package/docs/zh/intlayer_with_analog.md +10 -27
- 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 +698 -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 +19 -7
- 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,689 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-03-23
|
|
3
|
+
updatedAt: 2026-03-23
|
|
4
|
+
title: i18n Vite + Lit - Cara menerjemahkan aplikasi Lit di tahun 2026
|
|
5
|
+
description: Temukan cara membuat situs web Vite dan Lit Anda multibahasa. Ikuti dokumentasi untuk internasionalisasi (i18n) dan terjemahan.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internasionalisasi
|
|
8
|
+
- Dokumentasi
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Vite
|
|
11
|
+
- Lit
|
|
12
|
+
- Web Components
|
|
13
|
+
- JavaScript
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- environment
|
|
17
|
+
- vite-and-lit
|
|
18
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-lit-template
|
|
19
|
+
history:
|
|
20
|
+
- version: 8.4.10
|
|
21
|
+
date: 2026-03-23
|
|
22
|
+
changes: "Init history"
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Terjemahkan situs web Vite dan Lit Anda dengan Intlayer | Internasionalisasi (i18n)
|
|
26
|
+
|
|
27
|
+
<iframe
|
|
28
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-lit-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
29
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
30
|
+
title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
|
|
31
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
32
|
+
loading="lazy"
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
## Daftar Isi
|
|
36
|
+
|
|
37
|
+
<TOC/>
|
|
38
|
+
|
|
39
|
+
## Apa itu Intlayer?
|
|
40
|
+
|
|
41
|
+
**Intlayer** adalah perpustakaan internasionalisasi (i18n) sumber terbuka yang inovatif yang dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern.
|
|
42
|
+
|
|
43
|
+
Dengan Intlayer, Anda dapat:
|
|
44
|
+
|
|
45
|
+
- **Mengelola terjemahan dengan mudah** menggunakan kamus deklaratif di tingkat komponen.
|
|
46
|
+
- **Melokalkan metadata, rute, dan konten secara dinamis**.
|
|
47
|
+
- **Memastikan dukungan TypeScript** dengan tipe yang dibuat secara otomatis, meningkatkan pelengkapan otomatis dan deteksi kesalahan.
|
|
48
|
+
- **Memanfaatkan fitur-fitur canggih**, seperti deteksi dan pengalihan bahasa dinamis.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Panduan langkah demi langkah untuk menyiapkan Intlayer di aplikasi Vite dan Lit
|
|
53
|
+
|
|
54
|
+
### Langkah 1: Instal Dependensi
|
|
55
|
+
|
|
56
|
+
Instal paket-paket yang diperlukan menggunakan npm:
|
|
57
|
+
|
|
58
|
+
```bash packageManager="npm"
|
|
59
|
+
npm install intlayer lit-intlayer
|
|
60
|
+
npm install vite-intlayer --save-dev
|
|
61
|
+
npx intlayer init
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```bash packageManager="pnpm"
|
|
65
|
+
pnpm add intlayer lit-intlayer
|
|
66
|
+
pnpm add vite-intlayer --save-dev
|
|
67
|
+
pnpm intlayer init
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```bash packageManager="yarn"
|
|
71
|
+
yarn add intlayer lit-intlayer
|
|
72
|
+
yarn add vite-intlayer --save-dev
|
|
73
|
+
yarn intlayer init
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```bash packageManager="bun"
|
|
77
|
+
bun add intlayer lit-intlayer
|
|
78
|
+
bun add vite-intlayer --dev
|
|
79
|
+
bunx intlayer init
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
- **intlayer**
|
|
83
|
+
|
|
84
|
+
Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, [deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md), transpilasi, dan [perintah CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/index.md).
|
|
85
|
+
|
|
86
|
+
- **lit-intlayer**
|
|
87
|
+
Paket yang mengintegrasikan Intlayer dengan aplikasi Lit. Paket ini menyediakan hook berbasis `ReactiveController` (`useIntlayer`, `useLocale`, dll.) sehingga LitElement secara otomatis merender ulang saat bahasa berubah.
|
|
88
|
+
|
|
89
|
+
- **vite-intlayer**
|
|
90
|
+
Menyertakan plugin Vite untuk mengintegrasikan Intlayer dengan [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), serta middleware untuk mendeteksi bahasa pilihan pengguna, mengelola cookie, dan menangani pengalihan URL.
|
|
91
|
+
|
|
92
|
+
### Langkah 2: Konfigurasi Proyek Anda
|
|
93
|
+
|
|
94
|
+
Buat file konfigurasi untuk menyiapkan bahasa aplikasi Anda:
|
|
95
|
+
|
|
96
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
97
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
98
|
+
|
|
99
|
+
const config: IntlayerConfig = {
|
|
100
|
+
internationalization: {
|
|
101
|
+
locales: [
|
|
102
|
+
Locales.ENGLISH,
|
|
103
|
+
Locales.FRENCH,
|
|
104
|
+
Locales.SPANISH,
|
|
105
|
+
// Bahasa lainnya
|
|
106
|
+
],
|
|
107
|
+
defaultLocale: Locales.ENGLISH,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export default config;
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
115
|
+
import { Locales } from "intlayer";
|
|
116
|
+
|
|
117
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
118
|
+
const config = {
|
|
119
|
+
internationalization: {
|
|
120
|
+
locales: [
|
|
121
|
+
Locales.ENGLISH,
|
|
122
|
+
Locales.FRENCH,
|
|
123
|
+
Locales.SPANISH,
|
|
124
|
+
// Bahasa lainnya
|
|
125
|
+
],
|
|
126
|
+
defaultLocale: Locales.ENGLISH,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default config;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
134
|
+
const { Locales } = require("intlayer");
|
|
135
|
+
|
|
136
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
137
|
+
const config = {
|
|
138
|
+
internationalization: {
|
|
139
|
+
locales: [
|
|
140
|
+
Locales.ENGLISH,
|
|
141
|
+
Locales.FRENCH,
|
|
142
|
+
Locales.SPANISH,
|
|
143
|
+
// Bahasa lainnya
|
|
144
|
+
],
|
|
145
|
+
defaultLocale: Locales.ENGLISH,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
module.exports = config;
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
> Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan banyak lagi. Untuk daftar lengkap parameter yang tersedia, lihat [dokumentasi konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md).
|
|
153
|
+
|
|
154
|
+
### Langkah 3: Integrasikan Intlayer ke dalam Konfigurasi Vite Anda
|
|
155
|
+
|
|
156
|
+
Tambahkan plugin intlayer ke konfigurasi Anda.
|
|
157
|
+
|
|
158
|
+
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
159
|
+
import { defineConfig } from "vite";
|
|
160
|
+
import { intlayer } from "vite-intlayer";
|
|
161
|
+
|
|
162
|
+
// https://vitejs.dev/config/
|
|
163
|
+
export default defineConfig({
|
|
164
|
+
plugins: [intlayer()],
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
```javascript fileName="vite.config.mjs" codeFormat="esm"
|
|
169
|
+
import { defineConfig } from "vite";
|
|
170
|
+
import { intlayer } from "vite-intlayer";
|
|
171
|
+
|
|
172
|
+
// https://vitejs.dev/config/
|
|
173
|
+
export default defineConfig({
|
|
174
|
+
plugins: [intlayer()],
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```javascript fileName="vite.config.cjs" codeFormat="commonjs"
|
|
179
|
+
const { defineConfig } = require("vite");
|
|
180
|
+
const { intlayer } = require("vite-intlayer");
|
|
181
|
+
|
|
182
|
+
// https://vitejs.dev/config/
|
|
183
|
+
module.exports = defineConfig({
|
|
184
|
+
plugins: [intlayer()],
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
> Plugin Vite `intlayer()` digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembangunan file deklarasi konten dan memantaunya dalam mode pengembangan. Plugin ini mendefinisikan variabel lingkungan Intlayer di dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.
|
|
189
|
+
|
|
190
|
+
### Langkah 4: Bootstrap Intlayer di Entry Point Anda
|
|
191
|
+
|
|
192
|
+
Panggil `installIntlayer()` **sebelum** elemen kustom apa pun didaftarkan sehingga singleton lokal global siap saat elemen pertama terhubung.
|
|
193
|
+
|
|
194
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
195
|
+
import { installIntlayer } from "lit-intlayer";
|
|
196
|
+
|
|
197
|
+
// Harus dipanggil sebelum LitElement apa pun terhubung ke DOM.
|
|
198
|
+
installIntlayer();
|
|
199
|
+
|
|
200
|
+
// Impor dan daftarkan elemen kustom Anda.
|
|
201
|
+
import "./my-element.js";
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Jika Anda juga menggunakan deklarasi konten `md()` (Markdown), instal juga perender markdown:
|
|
205
|
+
|
|
206
|
+
```typescript fileName="src/main.ts" codeFormat="typescript"
|
|
207
|
+
import { installIntlayer, installIntlayerMarkdown } from "lit-intlayer";
|
|
208
|
+
|
|
209
|
+
installIntlayer();
|
|
210
|
+
installIntlayerMarkdown();
|
|
211
|
+
|
|
212
|
+
import "./my-element.js";
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Langkah 5: Deklarasikan Konten Anda
|
|
216
|
+
|
|
217
|
+
Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
|
|
218
|
+
|
|
219
|
+
```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
|
|
220
|
+
import { t, type Dictionary } from "intlayer";
|
|
221
|
+
|
|
222
|
+
const appContent = {
|
|
223
|
+
key: "app",
|
|
224
|
+
content: {
|
|
225
|
+
title: "Vite + Lit",
|
|
226
|
+
|
|
227
|
+
viteLogo: t({
|
|
228
|
+
en: "Vite logo",
|
|
229
|
+
fr: "Logo Vite",
|
|
230
|
+
es: "Logo Vite",
|
|
231
|
+
}),
|
|
232
|
+
litLogo: t({
|
|
233
|
+
en: "Lit logo",
|
|
234
|
+
fr: "Logo Lit",
|
|
235
|
+
es: "Logo Lit",
|
|
236
|
+
}),
|
|
237
|
+
|
|
238
|
+
count: t({
|
|
239
|
+
en: "count is {{count}}",
|
|
240
|
+
fr: "le compte est {{count}}",
|
|
241
|
+
es: "el recuento es {{count}}",
|
|
242
|
+
}),
|
|
243
|
+
|
|
244
|
+
readTheDocs: t({
|
|
245
|
+
en: "Click on the Vite and Lit logos to learn more",
|
|
246
|
+
fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
|
|
247
|
+
es: "Haga clic en los logotipos de Vite y Lit para obtener lebih lanjut",
|
|
248
|
+
}),
|
|
249
|
+
},
|
|
250
|
+
} satisfies Dictionary;
|
|
251
|
+
|
|
252
|
+
export default appContent;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
|
|
256
|
+
import { t } from "intlayer";
|
|
257
|
+
|
|
258
|
+
/** @type {import('intlayer').Dictionary} */
|
|
259
|
+
const appContent = {
|
|
260
|
+
key: "app",
|
|
261
|
+
content: {
|
|
262
|
+
title: "Vite + Lit",
|
|
263
|
+
|
|
264
|
+
viteLogo: t({
|
|
265
|
+
en: "Vite logo",
|
|
266
|
+
fr: "Logo Vite",
|
|
267
|
+
es: "Logo Vite",
|
|
268
|
+
}),
|
|
269
|
+
litLogo: t({
|
|
270
|
+
en: "Lit logo",
|
|
271
|
+
fr: "Logo Lit",
|
|
272
|
+
es: "Logo Lit",
|
|
273
|
+
}),
|
|
274
|
+
|
|
275
|
+
count: t({
|
|
276
|
+
en: "count is {{count}}",
|
|
277
|
+
fr: "le compte est {{count}}",
|
|
278
|
+
es: "el recuento es {{count}}",
|
|
279
|
+
}),
|
|
280
|
+
|
|
281
|
+
readTheDocs: t({
|
|
282
|
+
en: "Click on the Vite and Lit logos to learn more",
|
|
283
|
+
fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
|
|
284
|
+
es: "Haga clic en los logotipos de Vite y Lit para obtener lebih lanjut",
|
|
285
|
+
}),
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
export default appContent;
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
|
|
293
|
+
const { t } = require("intlayer");
|
|
294
|
+
|
|
295
|
+
/** @type {import('intlayer').Dictionary} */
|
|
296
|
+
const appContent = {
|
|
297
|
+
key: "app",
|
|
298
|
+
content: {
|
|
299
|
+
title: "Vite + Lit",
|
|
300
|
+
|
|
301
|
+
viteLogo: t({
|
|
302
|
+
en: "Vite logo",
|
|
303
|
+
fr: "Logo Vite",
|
|
304
|
+
es: "Logo Vite",
|
|
305
|
+
}),
|
|
306
|
+
litLogo: t({
|
|
307
|
+
en: "Lit logo",
|
|
308
|
+
fr: "Logo Lit",
|
|
309
|
+
es: "Logo Lit",
|
|
310
|
+
}),
|
|
311
|
+
|
|
312
|
+
count: t({
|
|
313
|
+
en: "count is {{count}}",
|
|
314
|
+
fr: "le compte est {{count}}",
|
|
315
|
+
es: "el recuento es {{count}}",
|
|
316
|
+
}),
|
|
317
|
+
|
|
318
|
+
readTheDocs: t({
|
|
319
|
+
en: "Click on the Vite and Lit logos to learn more",
|
|
320
|
+
fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
|
|
321
|
+
es: "Haga clic en los logotipos de Vite y Lit para obtener lebih lanjut",
|
|
322
|
+
}),
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
module.exports = appContent;
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
```json fileName="src/app.content.json" contentDeclarationFormat="json"
|
|
330
|
+
{
|
|
331
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
332
|
+
"key": "app",
|
|
333
|
+
"content": {
|
|
334
|
+
"title": "Vite + Lit",
|
|
335
|
+
"viteLogo": {
|
|
336
|
+
"nodeType": "translation",
|
|
337
|
+
"translation": {
|
|
338
|
+
"en": "Vite logo",
|
|
339
|
+
"fr": "Logo Vite",
|
|
340
|
+
"es": "Logo Vite"
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
"litLogo": {
|
|
344
|
+
"nodeType": "translation",
|
|
345
|
+
"translation": {
|
|
346
|
+
"en": "Lit logo",
|
|
347
|
+
"fr": "Logo Lit",
|
|
348
|
+
"es": "Logo Lit"
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"count": {
|
|
352
|
+
"nodeType": "translation",
|
|
353
|
+
"translation": {
|
|
354
|
+
"en": "count is {{count}}",
|
|
355
|
+
"fr": "le compte est {{count}}",
|
|
356
|
+
"es": "el recuento es {{count}}"
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"readTheDocs": {
|
|
360
|
+
"nodeType": "translation",
|
|
361
|
+
"translation": {
|
|
362
|
+
"en": "Click on the Vite and Lit logos to learn more",
|
|
363
|
+
"fr": "Cliquez sur les logos Vite et Lit pour en savoir plus",
|
|
364
|
+
"es": "Haga clic en los logotipos de Vite y Lit para obtener lebih lanjut"
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
> Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama disertakan dalam direktori `contentDir` (secara default, `./src`) dan sesuai dengan ekstensi file deklarasi konten (secara default, `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
372
|
+
>
|
|
373
|
+
> Untuk detail lebih lanjut, lihat [dokumentasi deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
|
|
374
|
+
|
|
375
|
+
### Langkah 6: Gunakan Intlayer di LitElement Anda
|
|
376
|
+
|
|
377
|
+
Gunakan `useIntlayer` di dalam `LitElement`. Ini mengembalikan proxy `ReactiveController` yang secara otomatis memicu perenderan ulang setiap kali bahasa aktif berubah — tidak diperlukan pengaturan tambahan.
|
|
378
|
+
|
|
379
|
+
```typescript fileName="src/my-element.ts" codeFormat="typescript"
|
|
380
|
+
import { LitElement, html } from "lit";
|
|
381
|
+
import { customElement, property } from "lit/decorators.js";
|
|
382
|
+
import { useIntlayer } from "lit-intlayer";
|
|
383
|
+
|
|
384
|
+
@customElement("my-element")
|
|
385
|
+
export class MyElement extends LitElement {
|
|
386
|
+
@property({ type: Number })
|
|
387
|
+
count = 0;
|
|
388
|
+
|
|
389
|
+
// useIntlayer mendaftarkan dirinya sebagai ReactiveController.
|
|
390
|
+
// Elemen dirrender ulang secara otomatis saat bahasa berubah.
|
|
391
|
+
private content = useIntlayer(this, "app");
|
|
392
|
+
|
|
393
|
+
override render() {
|
|
394
|
+
const { content } = this;
|
|
395
|
+
|
|
396
|
+
return html`
|
|
397
|
+
<h1>${content.title}</h1>
|
|
398
|
+
|
|
399
|
+
<img src="/vite.svg" alt=${content.viteLogo.value} />
|
|
400
|
+
<img src="/lit.svg" alt=${content.litLogo.value} />
|
|
401
|
+
|
|
402
|
+
<button @click=${() => this.count++}>
|
|
403
|
+
${content.count({ count: this.count })}
|
|
404
|
+
</button>
|
|
405
|
+
|
|
406
|
+
<p>${content.readTheDocs}</p>
|
|
407
|
+
`;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
> [!NOTE]
|
|
413
|
+
> Saat Anda memerlukan string terjemahan dalam atribut HTML asli (misalnya, `alt`, `aria-label`, `title`), hubungi `.value` pada simpul daun:
|
|
414
|
+
>
|
|
415
|
+
> ```typescript
|
|
416
|
+
> html`<img alt=${content.viteLogo.value} />`;
|
|
417
|
+
> ```
|
|
418
|
+
|
|
419
|
+
### (Opsional) Langkah 7: Ubah Bahasa Konten Anda
|
|
420
|
+
|
|
421
|
+
Untuk mengubah bahasa konten Anda, gunakan metode `setLocale` yang disediakan oleh pengontrol `useLocale`.
|
|
422
|
+
|
|
423
|
+
```typescript fileName="src/locale-switcher.ts" codeFormat="typescript"
|
|
424
|
+
import { LitElement, html } from "lit";
|
|
425
|
+
import { customElement } from "lit/decorators.js";
|
|
426
|
+
import { getLocaleName } from "intlayer";
|
|
427
|
+
import { useLocale } from "lit-intlayer";
|
|
428
|
+
|
|
429
|
+
@customElement("locale-switcher")
|
|
430
|
+
export class LocaleSwitcher extends LitElement {
|
|
431
|
+
private locale = useLocale(this);
|
|
432
|
+
|
|
433
|
+
private _onChange(e: Event) {
|
|
434
|
+
const select = e.target as HTMLSelectElement;
|
|
435
|
+
this.locale.setLocale(select.value as any);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
override render() {
|
|
439
|
+
return html`
|
|
440
|
+
<select @change=${this._onChange}>
|
|
441
|
+
${this.locale.availableLocales.map(
|
|
442
|
+
(loc) => html`
|
|
443
|
+
<option value=${loc} ?selected=${loc === this.locale.locale}>
|
|
444
|
+
${getLocaleName(loc)}
|
|
445
|
+
</option>
|
|
446
|
+
`
|
|
447
|
+
)}
|
|
448
|
+
</select>
|
|
449
|
+
`;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### (Opsional) Langkah 8: Render Konten Markdown dan HTML
|
|
455
|
+
|
|
456
|
+
Intlayer mendukung deklarasi konten `md()` dan `html()`. Di Lit, output terkompilasi disuntikkan sebagai HTML mentah melalui arahan `unsafeHTML`.
|
|
457
|
+
|
|
458
|
+
```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
|
|
459
|
+
import { md, t, type Dictionary } from "intlayer";
|
|
460
|
+
|
|
461
|
+
const appContent = {
|
|
462
|
+
key: "app",
|
|
463
|
+
content: {
|
|
464
|
+
// ...
|
|
465
|
+
editNote: md(
|
|
466
|
+
t({
|
|
467
|
+
en: "Edit `src/my-element.ts` and save to test **HMR**",
|
|
468
|
+
fr: "Modifiez `src/my-element.ts` et enregistrez pour tester **HMR**",
|
|
469
|
+
es: "Edite `src/my-element.ts` y guarde para probar **HMR**",
|
|
470
|
+
})
|
|
471
|
+
),
|
|
472
|
+
},
|
|
473
|
+
} satisfies Dictionary;
|
|
474
|
+
|
|
475
|
+
export default appContent;
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
Render HTML terkompilasi di elemen Anda:
|
|
479
|
+
|
|
480
|
+
```typescript fileName="src/my-element.ts" codeFormat="typescript"
|
|
481
|
+
import { LitElement, html } from "lit";
|
|
482
|
+
import { customElement } from "lit/decorators.js";
|
|
483
|
+
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
484
|
+
import { useIntlayer } from "lit-intlayer";
|
|
485
|
+
import { compileMarkdown } from "lit-intlayer/markdown";
|
|
486
|
+
|
|
487
|
+
@customElement("my-element")
|
|
488
|
+
export class MyElement extends LitElement {
|
|
489
|
+
private content = useIntlayer(this, "app");
|
|
490
|
+
|
|
491
|
+
override render() {
|
|
492
|
+
return html`
|
|
493
|
+
<div class="edit-note">
|
|
494
|
+
${unsafeHTML(compileMarkdown(String(this.content.editNote)))}
|
|
495
|
+
</div>
|
|
496
|
+
`;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
> [!TIP]
|
|
502
|
+
> `String(content.editNote)` memanggil `toString()` pada `IntlayerNode`, yang mengembalikan string Markdown mentah. Berikan ke `compileMarkdown` untuk mendapatkan string HTML, lalu render dengan arahan `unsafeHTML` Lit.
|
|
503
|
+
|
|
504
|
+
### (Opsional) Langkah 9: Tambahkan Perutean Terlokalisasi ke Aplikasi Anda
|
|
505
|
+
|
|
506
|
+
Untuk membuat rute unik untuk setiap bahasa (berguna untuk SEO), Anda dapat menggunakan perute sisi klien bersama dengan pembantu `localeMap` / `localeFlatMap` Intlayer, dan plugin Vite `intlayerProxy` untuk deteksi bahasa sisi server.
|
|
507
|
+
|
|
508
|
+
Pertama, tambahkan `intlayerProxy` ke konfigurasi Vite Anda:
|
|
509
|
+
|
|
510
|
+
> Perhatikan bahwa untuk menggunakan `intlayerProxy` dalam produksi, Anda perlu memindahkan `vite-intlayer` dari `devDependencies` ke `dependencies`.
|
|
511
|
+
|
|
512
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
513
|
+
import { defineConfig } from "vite";
|
|
514
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
515
|
+
|
|
516
|
+
export default defineConfig({
|
|
517
|
+
plugins: [intlayer(), intlayerProxy()],
|
|
518
|
+
});
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
522
|
+
import { defineConfig } from "vite";
|
|
523
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
524
|
+
|
|
525
|
+
export default defineConfig({
|
|
526
|
+
plugins: [intlayer(), intlayerProxy()],
|
|
527
|
+
});
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
531
|
+
const { defineConfig } = require("vite");
|
|
532
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
533
|
+
|
|
534
|
+
module.exports = defineConfig({
|
|
535
|
+
plugins: [intlayer(), intlayerProxy()],
|
|
536
|
+
});
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### (Opsional) Langkah 10: Ubah URL saat Bahasa Berubah
|
|
540
|
+
|
|
541
|
+
Untuk memperbarui URL browser saat bahasa berubah, gunakan `useRewriteURL` beserta pengalih bahasa:
|
|
542
|
+
|
|
543
|
+
```typescript fileName="src/locale-switcher.ts" codeFormat="typescript"
|
|
544
|
+
import { LitElement, html } from "lit";
|
|
545
|
+
import { customElement } from "lit/decorators.js";
|
|
546
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
547
|
+
import { useLocale, useRewriteURL } from "lit-intlayer";
|
|
548
|
+
|
|
549
|
+
@customElement("locale-switcher")
|
|
550
|
+
export class LocaleSwitcher extends LitElement {
|
|
551
|
+
private locale = useLocale(this);
|
|
552
|
+
|
|
553
|
+
// Menulis ulang URL saat ini secara otomatis saat bahasa berubah.
|
|
554
|
+
private _rewriteURL = useRewriteURL(this);
|
|
555
|
+
|
|
556
|
+
private _onChange(e: Event) {
|
|
557
|
+
const select = e.target as HTMLSelectElement;
|
|
558
|
+
this.locale.setLocale(select.value as any);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
override render() {
|
|
562
|
+
return html`
|
|
563
|
+
<select @change=${this._onChange}>
|
|
564
|
+
${this.locale.availableLocales.map(
|
|
565
|
+
(loc) => html`
|
|
566
|
+
<option value=${loc} ?selected=${loc === this.locale.locale}>
|
|
567
|
+
${getLocaleName(loc)}
|
|
568
|
+
</option>
|
|
569
|
+
`
|
|
570
|
+
)}
|
|
571
|
+
</select>
|
|
572
|
+
`;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
### (Opsional) Langkah 11: Alihkan Atribut Bahasa dan Arah HTML
|
|
578
|
+
|
|
579
|
+
Perbarui atribut `lang` dan `dir` dari tag `<html>` agar sesuai dengan bahasa saat ini untuk aksesibilitas dan SEO.
|
|
580
|
+
|
|
581
|
+
```typescript fileName="src/my-element.ts" codeFormat="typescript"
|
|
582
|
+
import { LitElement, html } from "lit";
|
|
583
|
+
import { customElement } from "lit/decorators.js";
|
|
584
|
+
import { getHTMLTextDir } from "intlayer";
|
|
585
|
+
import { useLocale } from "lit-intlayer";
|
|
586
|
+
|
|
587
|
+
@customElement("my-element")
|
|
588
|
+
export class MyElement extends LitElement {
|
|
589
|
+
private locale = useLocale(this, {
|
|
590
|
+
onLocaleChange: (loc) => {
|
|
591
|
+
document.documentElement.lang = loc;
|
|
592
|
+
document.documentElement.dir = getHTMLTextDir(loc);
|
|
593
|
+
},
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
override render() {
|
|
597
|
+
return html`<!-- konten Anda -->`;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
### (Opsional) Langkah 12: Ekstrak Konten Komponen Anda
|
|
603
|
+
|
|
604
|
+
Jika Anda memiliki codebase yang ada, mengubah ribuan file bisa memakan waktu lama.
|
|
605
|
+
|
|
606
|
+
Untuk mempermudah proses ini, Intlayer mengusulkan [compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compiler.md) / [extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/extract.md) untuk mengubah komponen Anda dan mengekstrak konten.
|
|
607
|
+
|
|
608
|
+
Untuk menyiapkannya, Anda dapat menambahkan bagian `compiler` di file `intlayer.config.ts` Anda:
|
|
609
|
+
|
|
610
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
611
|
+
import { type IntlayerConfig } from "intlayer";
|
|
612
|
+
|
|
613
|
+
const config: IntlayerConfig = {
|
|
614
|
+
// ... sisa konfigurasi Anda
|
|
615
|
+
compiler: {
|
|
616
|
+
/**
|
|
617
|
+
* Menandakan apakah kompiler harus diaktifkan.
|
|
618
|
+
*/
|
|
619
|
+
enabled: true,
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Menentukan jalur file output
|
|
623
|
+
*/
|
|
624
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* Menandakan apakah komponen harus disimpan setelah diubah.
|
|
628
|
+
* Dengan begitu, kompiler hanya perlu dijalankan sekali untuk mengubah aplikasi, dan kemudian dapat dihapus.
|
|
629
|
+
*/
|
|
630
|
+
saveComponents: false,
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* Awalan kunci kamus
|
|
634
|
+
*/
|
|
635
|
+
dictionaryKeyPrefix: "",
|
|
636
|
+
},
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
export default config;
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Konfigurasi TypeScript
|
|
643
|
+
|
|
644
|
+
Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dibuat secara otomatis.
|
|
645
|
+
|
|
646
|
+
```json5 fileName="tsconfig.json"
|
|
647
|
+
{
|
|
648
|
+
"compilerOptions": {
|
|
649
|
+
// ...
|
|
650
|
+
"experimentalDecorators": true,
|
|
651
|
+
"useDefineForClassFields": false,
|
|
652
|
+
},
|
|
653
|
+
"include": ["src", ".intlayer/**/*.ts"],
|
|
654
|
+
}
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
> `experimentalDecorators` dan `useDefineForClassFields: false` diperlukan oleh Lit untuk dukungan dekorator.
|
|
658
|
+
|
|
659
|
+
### Konfigurasi Git
|
|
660
|
+
|
|
661
|
+
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari komit ke repositori Git Anda.
|
|
662
|
+
|
|
663
|
+
Untuk melakukannya, Anda dapat menambahkan petunjuk berikut ke file `.gitignore` Anda:
|
|
664
|
+
|
|
665
|
+
```bash
|
|
666
|
+
# Abaikan file yang dihasilkan oleh Intlayer
|
|
667
|
+
.intlayer
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### Ekstensi VS Code
|
|
671
|
+
|
|
672
|
+
Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Intlayer VS Code Extension** resmi.
|
|
673
|
+
|
|
674
|
+
[Instal dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
675
|
+
|
|
676
|
+
Ekstensi ini menyediakan:
|
|
677
|
+
|
|
678
|
+
- **Pelengkapan otomatis** untuk kunci terjemahan.
|
|
679
|
+
- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.
|
|
680
|
+
- **Pratinjau sebaris** dari konten yang diterjemahkan.
|
|
681
|
+
- **Tindakan cepat** untuk membuat dan memperbarui terjemahan dengan mudah.
|
|
682
|
+
|
|
683
|
+
Untuk detail lebih lanjut tentang cara menggunakan ekstensi, lihat [dokumentasi Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
### Melangkah Lebih Jauh
|
|
688
|
+
|
|
689
|
+
Untuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md) atau mengeksternalisasikan konten Anda menggunakan [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).
|