@intlayer/docs 9.1.3 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/index.md +1 -1
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/index.md +1 -1
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en/index.md +1 -1
- package/blog/en-GB/index.md +1 -1
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/index.md +1 -1
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -1
- package/blog/fr/index.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
- package/blog/fr/rag_powered_documentation_assistant.md +6 -0
- package/blog/hi/index.md +1 -1
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
- package/blog/hi/rag_powered_documentation_assistant.md +7 -0
- package/blog/id/index.md +1 -1
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/index.md +1 -1
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/index.md +1 -1
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/index.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/index.md +1 -1
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/index.md +1 -1
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- package/blog/ru/index.md +1 -1
- package/blog/ru/rag_powered_documentation_assistant.md +7 -0
- package/blog/tr/intlayer_with_react-intl.md +3 -1
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
- package/blog/tr/rag_powered_documentation_assistant.md +6 -0
- package/blog/uk/index.md +1 -1
- package/blog/uk/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/index.md +1 -1
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- package/blog/zh/index.md +1 -1
- package/blog/zh/intlayer_with_i18next.md +87 -28
- package/blog/zh/intlayer_with_next-i18next.md +86 -29
- package/blog/zh/intlayer_with_next-intl.md +88 -28
- package/blog/zh/intlayer_with_react-i18next.md +87 -28
- package/blog/zh/intlayer_with_react-intl.md +88 -27
- package/blog/zh/intlayer_with_vue-i18n.md +117 -8
- package/blog/zh/rag_powered_documentation_assistant.md +6 -0
- package/dist/cjs/common.cjs +24 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +58 -31
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +265 -218
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +48 -21
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +33 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +24 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +58 -31
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +265 -218
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +48 -21
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +33 -6
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- package/docs/ar/bundle_optimization.md +58 -25
- package/docs/ar/configuration.md +25 -8
- package/docs/ar/dictionary/file.md +3 -1
- package/docs/ar/dictionary/nesting.md +47 -30
- package/docs/ar/formatters.md +148 -193
- package/docs/ar/intlayer_CMS.md +152 -0
- package/docs/ar/intlayer_with_angular_21.md +9 -9
- package/docs/ar/intlayer_with_nextjs_14.md +1 -28
- package/docs/ar/intlayer_with_nextjs_15.md +1 -33
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/ar/intlayer_with_solid_start.md +1078 -0
- package/docs/ar/intlayer_with_vite+vue.md +1 -3
- package/docs/ar/live-sync.md +4 -0
- package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/ar/packages/vite-intlayer/exports.md +15 -0
- package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
- package/docs/ar/releases/v9.md +0 -37
- package/docs/ar/self_hosting.md +46 -49
- package/docs/bn/bundle_optimization.md +58 -25
- package/docs/bn/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- package/docs/cs/bundle_optimization.md +58 -25
- package/docs/cs/configuration.md +25 -8
- package/docs/cs/intlayer_with_angular_21.md +9 -9
- package/docs/de/analytics.md +222 -0
- package/docs/de/autoFill.md +28 -9
- package/docs/de/bundle_optimization.md +58 -25
- package/docs/de/configuration.md +25 -8
- package/docs/de/dictionary/file.md +3 -1
- package/docs/de/dictionary/nesting.md +47 -31
- package/docs/de/formatters.md +208 -334
- package/docs/de/intlayer_CMS.md +66 -15
- package/docs/de/intlayer_with_angular_21.md +9 -9
- package/docs/de/intlayer_with_nestjs.md +11 -7
- package/docs/de/intlayer_with_nextjs_14.md +1 -28
- package/docs/de/intlayer_with_nextjs_15.md +1 -33
- package/docs/de/intlayer_with_solid_start.md +1078 -0
- package/docs/de/intlayer_with_vite+vue.md +1 -3
- package/docs/de/live-sync.md +4 -0
- package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
- package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
- package/docs/de/packages/vite-intlayer/exports.md +15 -0
- package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/de/releases/v9.md +0 -15
- package/docs/de/self_hosting.md +46 -50
- package/docs/en/bundle_optimization.md +51 -23
- package/docs/en/cli/doc-review.md +13 -2
- package/docs/en/configuration.md +24 -15
- package/docs/en/intlayer_with_angular_21.md +9 -9
- package/docs/en/intlayer_with_solid_start.md +1091 -0
- package/docs/en/intlayer_with_vite+solid.md +12 -0
- package/docs/en/live-sync.md +4 -0
- package/docs/en-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- package/docs/en-GB/bundle_optimization.md +58 -25
- package/docs/en-GB/configuration.md +25 -8
- package/docs/en-GB/dictionary/file.md +2 -0
- package/docs/en-GB/dictionary/nesting.md +64 -205
- package/docs/en-GB/formatters.md +146 -181
- package/docs/en-GB/intlayer_CMS.md +152 -0
- package/docs/en-GB/intlayer_with_angular_21.md +9 -9
- package/docs/en-GB/intlayer_with_nestjs.md +6 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
- package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
- package/docs/en-GB/live-sync.md +4 -0
- package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
- package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
- package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
- package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/en-GB/self_hosting.md +60 -49
- package/docs/es/analytics.md +222 -0
- package/docs/es/autoFill.md +28 -9
- package/docs/es/bundle_optimization.md +58 -25
- package/docs/es/configuration.md +24 -7
- package/docs/es/dictionary/file.md +3 -1
- package/docs/es/dictionary/nesting.md +47 -30
- package/docs/es/formatters.md +114 -168
- package/docs/es/intlayer_CMS.md +35 -10
- package/docs/es/intlayer_with_angular_21.md +9 -9
- package/docs/es/intlayer_with_nextjs_14.md +1 -28
- package/docs/es/intlayer_with_nextjs_15.md +1 -33
- package/docs/es/intlayer_with_solid_start.md +1078 -0
- package/docs/es/live-sync.md +4 -0
- package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
- package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/es/packages/vite-intlayer/exports.md +15 -0
- package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
- package/docs/es/releases/v9.md +0 -15
- package/docs/es/self_hosting.md +46 -49
- package/docs/fr/analytics.md +222 -0
- package/docs/fr/autoFill.md +27 -8
- package/docs/fr/bundle_optimization.md +58 -25
- package/docs/fr/configuration.md +25 -8
- package/docs/fr/dictionary/file.md +2 -0
- package/docs/fr/dictionary/nesting.md +37 -184
- package/docs/fr/formatters.md +95 -236
- package/docs/fr/intlayer_CMS.md +66 -15
- package/docs/fr/intlayer_with_angular_21.md +9 -9
- package/docs/fr/intlayer_with_nextjs_14.md +1 -28
- package/docs/fr/intlayer_with_nextjs_15.md +1 -33
- package/docs/fr/intlayer_with_solid_start.md +1078 -0
- package/docs/fr/live-sync.md +4 -0
- package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
- package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
- package/docs/fr/packages/vite-intlayer/exports.md +15 -0
- package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/fr/releases/v9.md +0 -15
- package/docs/fr/self_hosting.md +46 -49
- package/docs/hi/analytics.md +222 -0
- package/docs/hi/autoFill.md +28 -9
- package/docs/hi/bundle_optimization.md +58 -25
- package/docs/hi/configuration.md +25 -8
- package/docs/hi/dictionary/file.md +3 -1
- package/docs/hi/dictionary/nesting.md +47 -30
- package/docs/hi/formatters.md +233 -334
- package/docs/hi/how_works_intlayer.md +3 -1
- package/docs/hi/intlayer_CMS.md +152 -0
- package/docs/hi/intlayer_with_angular_21.md +9 -9
- package/docs/hi/intlayer_with_nestjs.md +11 -7
- package/docs/hi/intlayer_with_nextjs_14.md +1 -28
- package/docs/hi/intlayer_with_nextjs_15.md +1 -33
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/hi/intlayer_with_solid_start.md +1077 -0
- package/docs/hi/intlayer_with_vite+preact.md +56 -49
- package/docs/hi/intlayer_with_vite+react.md +48 -41
- package/docs/hi/intlayer_with_vite+solid.md +32 -41
- package/docs/hi/intlayer_with_vite+vue.md +49 -44
- package/docs/hi/live-sync.md +4 -0
- package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/hi/packages/next-intlayer/t.md +33 -1
- package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/hi/packages/vite-intlayer/exports.md +15 -0
- package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/hi/plugins/sync-json.md +9 -9
- package/docs/hi/releases/v9.md +0 -15
- package/docs/hi/self_hosting.md +38 -51
- package/docs/id/analytics.md +223 -0
- package/docs/id/bundle_optimization.md +58 -25
- package/docs/id/configuration.md +25 -8
- package/docs/id/dictionary/nesting.md +37 -184
- package/docs/id/formatters.md +208 -305
- package/docs/id/intlayer_CMS.md +164 -0
- package/docs/id/intlayer_with_angular_21.md +9 -9
- package/docs/id/intlayer_with_nextjs_14.md +1 -26
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/id/intlayer_with_solid_start.md +1078 -0
- package/docs/id/live-sync.md +4 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/id/packages/vite-intlayer/exports.md +15 -0
- package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/id/releases/v9.md +12 -0
- package/docs/id/self_hosting.md +61 -50
- package/docs/it/analytics.md +222 -0
- package/docs/it/autoFill.md +27 -8
- package/docs/it/bundle_optimization.md +58 -25
- package/docs/it/configuration.md +25 -8
- package/docs/it/dictionary/file.md +3 -1
- package/docs/it/dictionary/nesting.md +47 -30
- package/docs/it/formatters.md +114 -168
- package/docs/it/intlayer_CMS.md +66 -15
- package/docs/it/intlayer_with_angular_21.md +9 -9
- package/docs/it/intlayer_with_nestjs.md +11 -7
- package/docs/it/intlayer_with_nextjs_14.md +1 -28
- package/docs/it/intlayer_with_nextjs_15.md +1 -33
- package/docs/it/intlayer_with_solid_start.md +1078 -0
- package/docs/it/intlayer_with_vite+vue.md +1 -3
- package/docs/it/live-sync.md +4 -0
- package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/it/packages/vite-intlayer/exports.md +15 -0
- package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/it/releases/v9.md +0 -15
- package/docs/it/self_hosting.md +60 -49
- package/docs/ja/analytics.md +222 -0
- package/docs/ja/autoFill.md +28 -9
- package/docs/ja/bundle_optimization.md +58 -25
- package/docs/ja/configuration.md +25 -8
- package/docs/ja/dictionary/content_file.md +15 -7
- package/docs/ja/dictionary/file.md +3 -1
- package/docs/ja/dictionary/nesting.md +47 -30
- package/docs/ja/formatters.md +133 -187
- package/docs/ja/intlayer_visual_editor.md +3 -1
- package/docs/ja/intlayer_with_angular_21.md +6 -6
- package/docs/ja/intlayer_with_nestjs.md +2 -12
- package/docs/ja/intlayer_with_nextjs_14.md +1 -28
- package/docs/ja/intlayer_with_nextjs_15.md +1 -33
- package/docs/ja/intlayer_with_react_router_v7.md +456 -20
- package/docs/ja/intlayer_with_solid_start.md +1078 -0
- package/docs/ja/intlayer_with_vite+preact.md +73 -41
- package/docs/ja/intlayer_with_vite+vue.md +1 -3
- package/docs/ja/live-sync.md +4 -0
- package/docs/ja/mcp_server.md +3 -9
- package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
- package/docs/ja/packages/vite-intlayer/exports.md +15 -0
- package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ja/releases/v9.md +12 -0
- package/docs/ja/self_hosting.md +46 -50
- package/docs/ko/analytics.md +222 -0
- package/docs/ko/autoFill.md +28 -9
- package/docs/ko/bundle_optimization.md +58 -25
- package/docs/ko/configuration.md +25 -8
- package/docs/ko/dictionary/file.md +3 -1
- package/docs/ko/dictionary/nesting.md +47 -30
- package/docs/ko/formatters.md +133 -187
- package/docs/ko/intlayer_with_angular_21.md +9 -9
- package/docs/ko/intlayer_with_lynx+react.md +133 -39
- package/docs/ko/intlayer_with_nextjs_14.md +1 -28
- package/docs/ko/intlayer_with_nextjs_15.md +1 -33
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
- package/docs/ko/intlayer_with_solid_start.md +1078 -0
- package/docs/ko/intlayer_with_vite+preact.md +57 -23
- package/docs/ko/intlayer_with_vite+vue.md +1 -3
- package/docs/ko/live-sync.md +4 -0
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ko/packages/vite-intlayer/exports.md +15 -0
- package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ko/releases/v9.md +12 -0
- package/docs/ko/self_hosting.md +60 -49
- package/docs/nl/bundle_optimization.md +58 -25
- package/docs/nl/configuration.md +25 -8
- package/docs/nl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/analytics.md +220 -0
- package/docs/pl/bundle_optimization.md +58 -25
- package/docs/pl/configuration.md +25 -8
- package/docs/pl/dictionary/nesting.md +47 -30
- package/docs/pl/formatters.md +208 -305
- package/docs/pl/intlayer_CMS.md +152 -0
- package/docs/pl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/intlayer_with_nextjs_14.md +1 -26
- package/docs/pl/intlayer_with_solid_start.md +1078 -0
- package/docs/pl/live-sync.md +4 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/pl/packages/vite-intlayer/exports.md +15 -0
- package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/pl/releases/v9.md +0 -15
- package/docs/pl/self_hosting.md +60 -49
- package/docs/pt/analytics.md +222 -0
- package/docs/pt/bundle_optimization.md +58 -24
- package/docs/pt/configuration.md +25 -8
- package/docs/pt/dictionary/file.md +3 -1
- package/docs/pt/dictionary/nesting.md +47 -30
- package/docs/pt/formatters.md +112 -168
- package/docs/pt/intlayer_CMS.md +66 -15
- package/docs/pt/intlayer_with_angular_21.md +9 -9
- package/docs/pt/intlayer_with_astro_lit.md +26 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -28
- package/docs/pt/intlayer_with_nextjs_15.md +1 -33
- package/docs/pt/intlayer_with_solid_start.md +1078 -0
- package/docs/pt/intlayer_with_vite+vue.md +1 -3
- package/docs/pt/live-sync.md +4 -0
- package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pt/packages/vite-intlayer/exports.md +15 -0
- package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
- package/docs/pt/releases/v9.md +0 -15
- package/docs/pt/self_hosting.md +60 -49
- package/docs/ru/analytics.md +222 -0
- package/docs/ru/autoFill.md +27 -8
- package/docs/ru/bundle_optimization.md +58 -25
- package/docs/ru/configuration.md +25 -8
- package/docs/ru/dictionary/file.md +3 -1
- package/docs/ru/dictionary/nesting.md +64 -205
- package/docs/ru/formatters.md +108 -128
- package/docs/ru/intlayer_with_angular_21.md +9 -9
- package/docs/ru/intlayer_with_nextjs_14.md +1 -28
- package/docs/ru/intlayer_with_nextjs_15.md +1 -33
- package/docs/ru/intlayer_with_solid_start.md +1078 -0
- package/docs/ru/intlayer_with_vite+vue.md +1 -3
- package/docs/ru/live-sync.md +4 -0
- package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ru/packages/vite-intlayer/exports.md +15 -0
- package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/ru/releases/v9.md +0 -15
- package/docs/ru/self_hosting.md +60 -49
- package/docs/tr/analytics.md +222 -0
- package/docs/tr/autoFill.md +28 -9
- package/docs/tr/bundle_optimization.md +58 -25
- package/docs/tr/configuration.md +25 -8
- package/docs/tr/dictionary/file.md +2 -0
- package/docs/tr/dictionary/nesting.md +47 -30
- package/docs/tr/formatters.md +144 -190
- package/docs/tr/intlayer_CMS.md +152 -0
- package/docs/tr/intlayer_with_angular_21.md +9 -9
- package/docs/tr/intlayer_with_nestjs.md +2 -12
- package/docs/tr/intlayer_with_nextjs_15.md +1 -33
- package/docs/tr/intlayer_with_solid_start.md +1078 -0
- package/docs/tr/intlayer_with_vite+vue.md +1 -3
- package/docs/tr/live-sync.md +4 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/tr/packages/vite-intlayer/exports.md +15 -0
- package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/tr/self_hosting.md +47 -50
- package/docs/uk/analytics.md +222 -0
- package/docs/uk/bundle_optimization.md +58 -25
- package/docs/uk/configuration.md +25 -8
- package/docs/uk/dictionary/nesting.md +47 -30
- package/docs/uk/formatters.md +128 -185
- package/docs/uk/intlayer_CMS.md +152 -0
- package/docs/uk/intlayer_with_angular_21.md +9 -9
- package/docs/uk/intlayer_with_nextjs_14.md +1 -26
- package/docs/uk/intlayer_with_solid_start.md +1078 -0
- package/docs/uk/live-sync.md +4 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/uk/packages/vite-intlayer/exports.md +15 -0
- package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/uk/releases/v9.md +0 -15
- package/docs/uk/self_hosting.md +60 -50
- package/docs/ur/bundle_optimization.md +58 -25
- package/docs/ur/configuration.md +25 -8
- package/docs/ur/intlayer_with_angular_21.md +9 -9
- package/docs/vi/analytics.md +222 -0
- package/docs/vi/bundle_optimization.md +58 -25
- package/docs/vi/configuration.md +24 -8
- package/docs/vi/dictionary/nesting.md +37 -184
- package/docs/vi/formatters.md +208 -309
- package/docs/vi/intlayer_CMS.md +164 -0
- package/docs/vi/intlayer_with_angular_21.md +9 -9
- package/docs/vi/intlayer_with_nextjs_14.md +0 -25
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/vi/intlayer_with_solid_start.md +1078 -0
- package/docs/vi/live-sync.md +4 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/vi/packages/vite-intlayer/exports.md +15 -0
- package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/vi/plugins/sync-json.md +6 -6
- package/docs/vi/releases/v9.md +12 -0
- package/docs/vi/self_hosting.md +61 -50
- package/docs/zh/CI_CD.md +4 -0
- package/docs/zh/analytics.md +222 -0
- package/docs/zh/autoFill.md +28 -9
- package/docs/zh/bundle_optimization.md +58 -25
- package/docs/zh/configuration.md +24 -8
- package/docs/zh/dictionary/file.md +2 -0
- package/docs/zh/dictionary/nesting.md +47 -30
- package/docs/zh/formatters.md +140 -188
- package/docs/zh/intlayer_CMS.md +164 -0
- package/docs/zh/intlayer_with_analog.md +193 -3
- package/docs/zh/intlayer_with_angular_19.md +272 -3
- package/docs/zh/intlayer_with_angular_21.md +7 -7
- package/docs/zh/intlayer_with_create_react_app.md +348 -26
- package/docs/zh/intlayer_with_lynx+react.md +263 -4
- package/docs/zh/intlayer_with_nextjs_14.md +1 -28
- package/docs/zh/intlayer_with_nextjs_15.md +1 -33
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
- package/docs/zh/intlayer_with_nuxt.md +182 -7
- package/docs/zh/intlayer_with_react_router_v7.md +183 -25
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
- package/docs/zh/intlayer_with_solid_start.md +1077 -0
- package/docs/zh/intlayer_with_storybook.md +260 -3
- package/docs/zh/intlayer_with_svelte_kit.md +428 -48
- package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
- package/docs/zh/intlayer_with_tanstack.md +731 -20
- package/docs/zh/intlayer_with_vanilla.md +314 -4
- package/docs/zh/intlayer_with_vite+lit.md +465 -4
- package/docs/zh/intlayer_with_vite+preact.md +422 -116
- package/docs/zh/intlayer_with_vite+react.md +324 -45
- package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
- package/docs/zh/intlayer_with_vite+solid.md +462 -32
- package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
- package/docs/zh/live-sync.md +4 -0
- package/docs/zh/mcp_server.md +3 -9
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/zh/packages/vite-intlayer/exports.md +29 -0
- package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/zh/releases/v9.md +12 -0
- package/docs/zh/self_hosting.md +60 -50
- package/docs/zh-TW/bundle_optimization.md +58 -25
- package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
- package/package.json +7 -7
- package/src/common.ts +39 -2
- package/src/generated/blog.entry.ts +66 -34
- package/src/generated/docs.entry.ts +273 -221
- package/src/generated/frequentQuestions.entry.ts +56 -24
- package/src/generated/legal.entry.ts +41 -9
package/docs/id/live-sync.md
CHANGED
|
@@ -50,26 +50,12 @@ getMultilingualUrls(
|
|
|
50
50
|
|
|
51
51
|
## Parameter
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
### Parameter yang Diperlukan
|
|
54
54
|
|
|
55
55
|
- `url: string`
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
- `locales: Locales[]`
|
|
60
|
-
- **Deskripsi**: Array opsional dari locale yang didukung. Defaultnya adalah locale yang dikonfigurasi dalam proyek.
|
|
61
|
-
- **Tipe**: `Locales[]`
|
|
62
|
-
- **Default**: `localesDefault`
|
|
63
|
-
|
|
64
|
-
- `defaultLocale: Locales`
|
|
65
|
-
- **Deskripsi**: Locale default untuk aplikasi. Defaultnya adalah locale default yang dikonfigurasi dalam proyek.
|
|
66
|
-
- **Tipe**: `Locales`
|
|
67
|
-
- **Default**: `defaultLocaleDefault`
|
|
68
|
-
|
|
69
|
-
- `prefixDefault: boolean`
|
|
70
|
-
- **Deskripsi**: Apakah akan menambahkan prefix pada locale default. Defaultnya adalah nilai yang dikonfigurasi dalam proyek.
|
|
71
|
-
- **Tipe**: `boolean`
|
|
72
|
-
- **Default**: `prefixDefaultDefault`
|
|
56
|
+
- **Description**: String URL asli yang akan diawali dengan locale.
|
|
57
|
+
- **Type**: `string`
|
|
58
|
+
- **Required**: Yes
|
|
73
59
|
|
|
74
60
|
### Parameter Opsional
|
|
75
61
|
|
|
@@ -25,9 +25,9 @@ history:
|
|
|
25
25
|
author: aymericzip
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
# Dokumentasi Hook useIntlayer
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Hook `useIntlayer` memungkinkan Anda untuk mengambil konten terlokalisasi dari kamus menggunakan kuncinya. Hook ini didasarkan pada `useDictionary` tetapi secara otomatis menyuntikkan versi yang dioptimalkan dari kamus dari deklarasi yang dihasilkan.
|
|
31
31
|
|
|
32
32
|
## Contoh Penggunaan di React
|
|
33
33
|
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | Plugin middleware pengembangan untuk menangani deteksi locale dan routing. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**Tidak lagi digunakan**) Alias untuk `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | Plugin untuk melakukan tree-shake dan memangkas kamus yang tidak digunakan selama build. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### Utilitas
|
|
53
|
+
|
|
54
|
+
| Export | Deskripsi | Dokumentasi Terkait |
|
|
55
|
+
| ---------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | Mengembalikan middleware Node.js `(req, res, next)` yang framework-agnostic dengan logika locale-routing. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### Tipe
|
|
59
|
+
|
|
60
|
+
| Export | Deskripsi |
|
|
61
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | Opsi yang diterima oleh `intlayer()`. Memperluas `GetConfigurationOptions` dengan `compatCallers` dan `proxy`. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | Opsi yang diterima oleh `intlayerProxy()` dan `createIntlayerProxyHandler()`. Mencakup `ignore` dan `configOptions`. |
|
|
64
|
+
| `IntlayerCompilerOptions` | Opsi yang diterima oleh `intlayerCompiler()`. Mencakup `configOptions` dan `compilerConfig`. |
|
|
65
|
+
| `CompatCallerConfig` | Re-export dari `@intlayer/babel`. Menjelaskan pola compat-adapter caller untuk analisis penggunaan field. |
|
|
@@ -39,11 +39,126 @@ export default defineConfig({
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## Opsi
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`IntlayerPluginOptions` extends `GetConfigurationOptions` (lihat `@intlayer/config`) dengan field tambahan berikut:
|
|
49
|
+
|
|
50
|
+
| Opsi | Tipe | Default | Deskripsi |
|
|
51
|
+
| --------------- | ------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | Pola caller tambahan untuk package compat-adapter (misalnya `@intlayer/react-i18next`). Diteruskan ke field-usage analyser pada saat build. |
|
|
53
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Opsi yang diteruskan ke bundled locale-routing proxy. Gunakan `ignore` untuk mengecualikan path tertentu (misalnya API routes) dari locale routing. |
|
|
54
|
+
|
|
55
|
+
Semua opsi lainnya (`override`, `configFile`, …) diteruskan langsung ke `getConfiguration()`.
|
|
56
|
+
|
|
57
|
+
### Contoh
|
|
58
|
+
|
|
59
|
+
#### Abaikan rute API dari routing lokal
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// vite.config.ts
|
|
63
|
+
import { defineConfig } from "vite";
|
|
64
|
+
import { intlayer } from "vite-intlayer";
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
plugins: [
|
|
68
|
+
intlayer({
|
|
69
|
+
proxy: {
|
|
70
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### Dengan jalur file konfigurasi kustom
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
plugins: [
|
|
82
|
+
intlayer({
|
|
83
|
+
configFile: "./config/intlayer.config.ts",
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Dengan pemanggil compat-adapter
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { intlayer } from "vite-intlayer";
|
|
93
|
+
import { reactI18nextCallerConfig } from "@intlayer/react-i18next/plugin";
|
|
94
|
+
|
|
95
|
+
export default defineConfig({
|
|
96
|
+
plugins: [
|
|
97
|
+
intlayer({
|
|
98
|
+
compatCallers: [reactI18nextCallerConfig],
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Apa yang dilakukan plugin ini
|
|
105
|
+
|
|
106
|
+
### 1. Persiapan Kamus
|
|
107
|
+
|
|
108
|
+
Sebelum build dimulai (dan sekali per jam dalam dev), `intlayer` memanggil `prepareIntlayer` untuk mengompilasi semua file `.content.ts` menjadi kamus JSON yang dioptimalkan disimpan di `.intlayer/`.
|
|
109
|
+
|
|
110
|
+
### 2. Alias modul
|
|
111
|
+
|
|
112
|
+
Plugin menambahkan Vite resolve aliases sehingga `import { myDict } from 'intlayer/dictionaries/my-dict'` mengarah ke file JSON yang sudah dikompilasi di disk. SSR builds menggunakan `ssr.noExternal` untuk memastikan semua paket `@intlayer/*` dibundle dengan aliases yang diterapkan.
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
Dalam mode pengembangan, sebuah `chokidar` watcher dimulai. Ketika file `.content.ts` berubah, kamus-kamus dikompilasi ulang dan HMR Vite menyebarkan pembaruan ke browser.
|
|
117
|
+
|
|
118
|
+
### 4. Bundled locale-routing proxy (v9+)
|
|
119
|
+
|
|
120
|
+
Sejak Intlayer v9 middleware `intlayerProxy` didaftarkan secara otomatis di dalam `intlayer()`. Ini menangani:
|
|
121
|
+
|
|
122
|
+
- Deteksi locale dari prefiks URL, cookies, dan header `Accept-Language`.
|
|
123
|
+
- 301 redirects ketika locale yang terdeteksi tidak cocok dengan URL saat ini.
|
|
124
|
+
- Internal URL rewrites sehingga framework melihat parameter rute `[locale]` yang benar.
|
|
125
|
+
|
|
126
|
+
Proxy dikendalikan oleh `routing.enableProxy` (default `true`) dalam konfigurasi Intlayer Anda. Untuk menonaktifkannya sepenuhnya:
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
// intlayer.config.ts
|
|
130
|
+
import { defineConfig } from "intlayer";
|
|
131
|
+
|
|
132
|
+
export default defineConfig({
|
|
133
|
+
routing: { enableProxy: false },
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Untuk menyesuaikan perilaku proxy tanpa panggilan `intlayerProxy()` terpisah, teruskan opsi `proxy` ke plugin utama:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Lihat [dokumentasi intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/intlayerProxy.md) untuk referensi perilaku routing lengkap.
|
|
144
|
+
|
|
145
|
+
### 5. Bundled compiler (v9+)
|
|
146
|
+
|
|
147
|
+
Ketika `compiler.enabled` adalah `true` **dan** `compiler.output` diatur dalam konfigurasi Intlayer Anda, `intlayer()` mendaftarkan `intlayerCompiler` secara otomatis. Compiler mengekstrak deklarasi konten inline yang ditulis langsung di dalam file komponen dan menulis konten tersebut ke dalam kamus saat transform time. Lihat [dokumentasi intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/intlayerCompiler.md).
|
|
148
|
+
|
|
149
|
+
### 6. Optimisasi Build
|
|
150
|
+
|
|
151
|
+
Selama build produksi, plugin menambahkan:
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – transformasi Babel yang menulis ulang `useIntlayer('key')` → `useDictionary(hash)` dan menyuntikkan impor JSON langsung.
|
|
154
|
+
- **intlayerPrune** – menghapus bidang konten yang tidak digunakan dari JSON kamus.
|
|
155
|
+
- **intlayerMinify** – mengompresi JSON kamus dan secara opsional mengubah nama bidang.
|
|
156
|
+
|
|
157
|
+
Ini tidak aktif dalam mode pengembangan.
|
|
158
|
+
|
|
159
|
+
## Alias yang Sudah Usang
|
|
45
160
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
161
|
+
| Ekspor yang Sudah Usang | Pengganti |
|
|
162
|
+
| ----------------------- | ---------- |
|
|
163
|
+
| `intlayerPlugin` | `intlayer` |
|
|
164
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -30,16 +30,89 @@ Plugin Vite `intlayerPrune` digunakan untuk melakukan tree-shaking dan memangkas
|
|
|
30
30
|
|
|
31
31
|
## Penggunaan
|
|
32
32
|
|
|
33
|
+
### Sebagai bagian dari `intlayer()` (direkomendasikan)
|
|
34
|
+
|
|
35
|
+
Aktifkan pruning melalui konfigurasi Intlayer Anda dan plugin utama menangani semuanya:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // mengaktifkan pruning dan minify
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// vite.config.ts
|
|
50
|
+
import { defineConfig } from "vite";
|
|
51
|
+
import { intlayer } from "vite-intlayer";
|
|
52
|
+
|
|
53
|
+
export default defineConfig({
|
|
54
|
+
plugins: [intlayer()],
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Standalone
|
|
59
|
+
|
|
60
|
+
Jika Anda menyusun stack plugin secara manual, `intlayerPrune` dan `intlayerMinify` berbagi objek `PruneContext` yang harus dibuat sekali dan dilewatkan ke keduanya:
|
|
61
|
+
|
|
33
62
|
```ts
|
|
34
|
-
// vite.config.ts
|
|
63
|
+
// vite.config.ts
|
|
35
64
|
import { defineConfig } from "vite";
|
|
36
|
-
import {
|
|
65
|
+
import { intlayerPrune, intlayerMinify } from "vite-intlayer";
|
|
66
|
+
import { createPruneContext } from "@intlayer/babel";
|
|
67
|
+
import { getConfiguration } from "@intlayer/config/node";
|
|
68
|
+
|
|
69
|
+
const intlayerConfig = getConfiguration();
|
|
70
|
+
const pruneContext = createPruneContext();
|
|
37
71
|
|
|
38
72
|
export default defineConfig({
|
|
39
|
-
plugins: [
|
|
73
|
+
plugins: [
|
|
74
|
+
intlayerPrune(intlayerConfig, pruneContext),
|
|
75
|
+
intlayerMinify(intlayerConfig, pruneContext), // opsional, membaca dari konteks yang sama
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## Cara Kerjanya
|
|
81
|
+
|
|
82
|
+
### 1. Analisis Penggunaan (buildStart)
|
|
83
|
+
|
|
84
|
+
Selama `buildStart`, plugin `intlayerOptimize` (juga bagian dari `intlayer()`) memindai setiap file sumber komponen yang tercantum dalam `build.filesList`. Untuk setiap panggilan `useIntlayer('key')` atau `getIntlayer('key')`, plugin ini mencatat dengan tepat bidang mana yang diakses, misalnya:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// mencatat: myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Ini membangun `pruneContext.fieldUsageMap` sebelum panggilan `transform` apa pun dijalankan.
|
|
92
|
+
|
|
93
|
+
### 2. JSON pruning (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
Ketika Vite memproses file JSON kamus yang telah dikompilasi, `intlayerPrune` mencegat sebelum konversi JSON → ESM bawaan Vite. Ini membaca peta penggunaan field dari `pruneContext` dan menghapus setiap field konten yang tidak ada dalam set penggunaan yang tercatat.
|
|
96
|
+
|
|
97
|
+
Dua bentuk konten didukung:
|
|
98
|
+
|
|
99
|
+
- **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Field dipangkas per-locale di dalam `translation`.
|
|
100
|
+
- **Dynamic (per-locale) dictionaries** — flat `{ fieldA: ..., fieldB: ... }`. Field dipangkas di tingkat atas.
|
|
101
|
+
|
|
102
|
+
### 3. Kasus Edge Cases
|
|
103
|
+
|
|
104
|
+
Jika struktur konten kamus tidak dapat dikenali (misalnya, bentuk nested yang tidak biasa), kamus tersebut ditambahkan ke `pruneContext.dictionariesWithEdgeCases` dan **dibiarkan tanpa diubah**. Peringatan dicatat. `intlayerMinify` juga melewati kamus-kamus ini.
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
Ketika pruning berhasil, `intlayerPrune` juga menulis `pruneContext.dictionaryKeyToFieldRenameMap` — sebuah pemetaan dari nama field asli ke alias pendek. `intlayerMinify` membaca peta ini untuk mengubah nama field dalam output JSON, dan Babel rename pass milik `intlayerOptimize` memperbarui akses properti dalam file sumber sesuai dengan itu.
|
|
109
|
+
|
|
110
|
+
## Kondisi Aktivasi
|
|
111
|
+
|
|
112
|
+
`intlayerPrune` aktif **hanya** ketika semua kondisi berikut terpenuhi:
|
|
113
|
+
|
|
114
|
+
1. Perintah Vite adalah `build`.
|
|
115
|
+
2. `build.optimize` adalah `true` (atau `undefined`, yang secara default adalah `true` untuk build).
|
|
116
|
+
3. `build.purge` adalah `true` dalam konfigurasi Intlayer Anda.
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
Secara otomatis **dinonaktifkan** ketika `editor.enabled` adalah `true` karena editor memerlukan konten kamus lengkap.
|
package/docs/id/releases/v9.md
CHANGED
|
@@ -362,6 +362,18 @@ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
|
|
|
362
362
|
|
|
363
363
|
---
|
|
364
364
|
|
|
365
|
+
## Self-Hosting
|
|
366
|
+
|
|
367
|
+
Intlayer v9 menyediakan dukungan first-class untuk menjalankan instance Intlayer Anda sendiri dengan satu perintah. Tidak ada akun Intlayer Cloud yang diperlukan.
|
|
368
|
+
|
|
369
|
+
```sh
|
|
370
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Installer mengunduh `docker-compose.yml` dan `.env`, auto-generate secret yang diperlukan, dan menjalankan `docker compose up -d`. Semuanya — dashboard, API, database, object storage, dan transactional email — berjalan secara lokal dalam container.
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
365
377
|
## Catatan migrasi dari v8
|
|
366
378
|
|
|
367
379
|
Jika Anda memperbarui dari v8, perhatikan bahwa v9 tidak menyertakan breaking changes (perubahan yang merusak). Namun berikut adalah perubahan utamanya:
|
package/docs/id/self_hosting.md
CHANGED
|
@@ -62,6 +62,32 @@ Chromium (digunakan untuk pembuatan screenshot Puppeteer) dibundel di dalam imag
|
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
65
|
+
## Mulai Cepat
|
|
66
|
+
|
|
67
|
+
Pull dan jalankan image yang dipublikasikan, dengan menyediakan kredensial dan secrets MongoDB Atlas Anda:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
docker run -d --name intlayer \
|
|
71
|
+
-p 3000:3000 \
|
|
72
|
+
-p 3100:3100 \
|
|
73
|
+
-p 9000:9000 \
|
|
74
|
+
-p 9001:9001 \
|
|
75
|
+
-v intlayer-data:/data \
|
|
76
|
+
-e DB_ID="<atlas-user>" \
|
|
77
|
+
-e DB_MDP="<atlas-password>" \
|
|
78
|
+
-e DB_CLUSTER="<cluster>.xxxxx.mongodb.net" \
|
|
79
|
+
-e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
|
|
80
|
+
-e S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" \
|
|
81
|
+
-e RESEND_API_KEY="<your-resend-key>" \
|
|
82
|
+
aymericzip/intlayer-selfhost
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Kemudian buka **http://localhost:3000**.
|
|
86
|
+
|
|
87
|
+
> Dashboard disajikan di `localhost`. Lihat [Batasan](#batasan) — domain kustom tidak didukung oleh image yang dipublikasikan.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
65
91
|
## Memulai Cepat
|
|
66
92
|
|
|
67
93
|
```sh
|
|
@@ -97,9 +123,18 @@ Port internal (mongo, redis) tidak terekspos ke host secara default.
|
|
|
97
123
|
|
|
98
124
|
---
|
|
99
125
|
|
|
100
|
-
## Variabel
|
|
126
|
+
## Variabel lingkungan
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
### Diperlukan
|
|
129
|
+
|
|
130
|
+
| Variable | Example | Description |
|
|
131
|
+
| ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
132
|
+
| `DB_ID` | `intlayer` | MongoDB Atlas user |
|
|
133
|
+
| `DB_MDP` | _(your password)_ | MongoDB Atlas password |
|
|
134
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster host (used in the `mongodb+srv://` URI) |
|
|
135
|
+
| `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
|
|
136
|
+
| `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
|
|
137
|
+
| `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless you configure a global SMTP mailer (see [Global mailer](#global-mailer)) |
|
|
103
138
|
|
|
104
139
|
### Wajib (dibuat secara otomatis atau diminta)
|
|
105
140
|
|
|
@@ -141,6 +176,26 @@ Installer menghasilkan `.env` yang siap pakai. Tabel di bawah ini menjelaskan se
|
|
|
141
176
|
|
|
142
177
|
---
|
|
143
178
|
|
|
179
|
+
### Global mailer
|
|
180
|
+
|
|
181
|
+
Secara default, semua email transaksional dikirim melalui Resend menggunakan `RESEND_API_KEY`. Deployment yang self-hosted dapat mengarahkan **setiap** email — termasuk email non-organisasi seperti reset password dan magic links — melalui global mailer yang dikonfigurasi dengan environment variables.
|
|
182
|
+
|
|
183
|
+
Atur `MAIL_PROVIDER` untuk mengaktifkannya. Ketika tidak diatur, mailer Resend default digunakan.
|
|
184
|
+
|
|
185
|
+
| Variable | Example | Description |
|
|
186
|
+
| -------------------- | ------------------------------ | -------------------------------------------------------------------------------------- |
|
|
187
|
+
| `MAIL_PROVIDER` | `smtp` | Global transport: `smtp` atau `resend`. Biarkan tidak diatur untuk menggunakan default |
|
|
188
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header. Menerima alamat bare atau format `Name <email>` |
|
|
189
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host (diperlukan ketika `MAIL_PROVIDER=smtp`) |
|
|
190
|
+
| `MAIL_SMTP_PORT` | `587` | SMTP port (default ke `587`) |
|
|
191
|
+
| `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Atur `true` untuk port `465` |
|
|
192
|
+
| `MAIL_SMTP_USER` | _(user anda)_ | SMTP username (opsional; abaikan untuk unauthenticated relays) |
|
|
193
|
+
| `MAIL_SMTP_PASSWORD` | _(password anda)_ | SMTP password |
|
|
194
|
+
|
|
195
|
+
> Precedence: mailer milik organisasi sendiri (dikonfigurasi dari dashboard **Organization**) mengambil prioritas atas global mailer, yang pada gilirannya mengambil prioritas atas kunci Resend default.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
144
199
|
## Menghubungkan proyek Intlayer Anda
|
|
145
200
|
|
|
146
201
|
Setelah stack berjalan, arahkan proyek Anda ke backend dan dashboard yang di-self-host, bukan ke `intlayer.org`.
|
|
@@ -259,47 +314,11 @@ docker run --rm \
|
|
|
259
314
|
|
|
260
315
|
---
|
|
261
316
|
|
|
262
|
-
##
|
|
317
|
+
## Keterbatasan
|
|
263
318
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
```nginx
|
|
269
|
-
server {
|
|
270
|
-
listen 80;
|
|
271
|
-
server_name cms.example.com;
|
|
272
|
-
|
|
273
|
-
location / {
|
|
274
|
-
proxy_pass http://localhost:3000;
|
|
275
|
-
proxy_set_header Host $host;
|
|
276
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
server {
|
|
281
|
-
listen 80;
|
|
282
|
-
server_name api.example.com;
|
|
283
|
-
|
|
284
|
-
location / {
|
|
285
|
-
proxy_pass http://localhost:3100;
|
|
286
|
-
proxy_set_header Host $host;
|
|
287
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
Perbarui variabel `.env` berikut agar sesuai dengan domain publik Anda:
|
|
293
|
-
|
|
294
|
-
```sh
|
|
295
|
-
BACKEND_URL=https://api.example.com
|
|
296
|
-
APP_URL=https://cms.example.com
|
|
297
|
-
DOMAIN=example.com
|
|
298
|
-
VITE_BACKEND_URL=https://api.example.com
|
|
299
|
-
VITE_DOMAIN=example.com
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
> Variabel `VITE_*` tertanam dalam image dashboard pada waktu build. Jika Anda mengubahnya setelah image dibuat, Anda perlu membangun ulang image `app` (`docker compose build app`) atau menggunakan injeksi konfigurasi runtime.
|
|
319
|
+
- **MongoDB harus external (Atlas).** Backend terhubung hanya melalui `mongodb+srv://` (dibangun dari `DB_ID` / `DB_MDP` / `DB_CLUSTER`), jadi plain `mongodb://host:27017` — termasuk `mongod` bundled container sendiri — tidak dapat digunakan. Sediakan cluster MongoDB Atlas.
|
|
320
|
+
- **Tidak ada custom domain.** Semua URL `VITE_*` yang dihadapi browser di-inline ke dalam app pada saat build, dan image yang dipublikasikan dilengkapi dengan nilai `localhost`. Dashboard harus diakses di `http://localhost:3000`; melayaninya di domain publik memerlukan rebuilding image dengan target URLs yang tertanam dan tidak didukung out of the box.
|
|
321
|
+
- **Email memerlukan mailer yang berfungsi.** Setup first-run menerapkan verifikasi email, jadi baik `RESEND_API_KEY` atau [global SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) harus dikonfigurasi. Setelah admin pertama masuk, setiap organisasi juga dapat mengonfigurasi SMTP atau Resend mailer-nya sendiri dari dashboard.
|
|
303
322
|
|
|
304
323
|
---
|
|
305
324
|
|
|
@@ -324,14 +343,6 @@ docker compose build app
|
|
|
324
343
|
docker compose up -d app
|
|
325
344
|
```
|
|
326
345
|
|
|
327
|
-
### Email tidak terkirim
|
|
328
|
-
|
|
329
|
-
Secara default, semua email keluar ditangkap oleh Mailpit. Buka `http://localhost:8025` untuk melihat pesan yang terkirim. Untuk mengirim email sungguhan, setel `MAIL_PROVIDER=resend` dan `RESEND_API_KEY=<your-key>` di `.env`, lalu restart backend:
|
|
330
|
-
|
|
331
|
-
```sh
|
|
332
|
-
docker compose restart backend
|
|
333
|
-
```
|
|
334
|
-
|
|
335
346
|
### Bucket MinIO hilang
|
|
336
347
|
|
|
337
348
|
Jika layanan one-shot `minio-init` tidak berjalan (atau berjalan sebelum MinIO siap), buat bucket secara manual:
|