@intlayer/docs 9.1.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -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/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
- package/blog/hi/rag_powered_documentation_assistant.md +7 -0
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- 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/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- 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/generated/blog.entry.cjs +27 -27
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +234 -214
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +17 -17
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +2 -2
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +27 -27
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +234 -214
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +17 -17
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +2 -2
- package/dist/esm/generated/legal.entry.mjs.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/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- 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/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/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- 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/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/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/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-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/configuration.md +25 -8
- package/docs/nl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/analytics.md +220 -0
- 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/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/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/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/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/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/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/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/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/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/configuration.md +25 -8
- package/docs/ur/intlayer_with_angular_21.md +9 -9
- package/docs/vi/analytics.md +222 -0
- 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/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/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/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/intlayer_with_angular_21.md +7 -7
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +27 -27
- package/src/generated/docs.entry.ts +234 -214
- package/src/generated/frequentQuestions.entry.ts +17 -17
- package/src/generated/legal.entry.ts +2 -2
|
@@ -59,36 +59,44 @@ getLocalizedUrl(
|
|
|
59
59
|
|
|
60
60
|
## Paramètres
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
La fonction `getLocalizedUrl` génère une URL localisée en préfixant l'URL donnée avec la locale spécifiée. Elle gère à la fois les URL absolues et relatives, en s'assurant que le préfixe de locale correct est appliqué selon la configuration.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Paramètres
|
|
62
|
+
### Paramètres obligatoires
|
|
69
63
|
|
|
70
64
|
- `url: string`
|
|
71
|
-
- **Description
|
|
72
|
-
- **Type
|
|
65
|
+
- **Description**: La chaîne d'URL originale à préfixer avec une locale.
|
|
66
|
+
- **Type**: `string`
|
|
67
|
+
- **Required**: Yes
|
|
73
68
|
|
|
74
69
|
- `currentLocale: Locales`
|
|
75
|
-
- **Description
|
|
76
|
-
- **Type
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
- **
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
-
|
|
70
|
+
- **Description**: La locale actuelle pour laquelle l'URL est localisée.
|
|
71
|
+
- **Type**: `Locales`
|
|
72
|
+
- **Required**: Yes
|
|
73
|
+
|
|
74
|
+
### Paramètres Optionnels
|
|
75
|
+
|
|
76
|
+
- `options?: object`
|
|
77
|
+
- **Description**: Objet de configuration pour le comportement de localisation des URL.
|
|
78
|
+
- **Type**: `object`
|
|
79
|
+
- **Required**: Non (Optionnel)
|
|
80
|
+
|
|
81
|
+
- `options.locales?: Locales[]`
|
|
82
|
+
- **Description**: Tableau des locales supportées. Si non fourni, utilise les locales configurées dans la configuration de votre projet.
|
|
83
|
+
- **Type**: `Locales[]`
|
|
84
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
|
|
85
|
+
|
|
86
|
+
- `options.defaultLocale?: Locales`
|
|
87
|
+
- **Description**: La locale par défaut pour l'application. Si non fournie, utilise la locale par défaut configurée dans la configuration de votre projet.
|
|
88
|
+
- **Type**: `Locales`
|
|
89
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
|
|
90
|
+
|
|
91
|
+
- `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
92
|
+
- **Description**: Le mode de routage des URL pour la gestion des locales. Si non fourni, utilise le mode configuré dans la configuration de votre projet.
|
|
93
|
+
- **Type**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
94
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
|
|
95
|
+
- **Modes**:
|
|
96
|
+
- `prefix-no-default`: Aucun préfixe pour la locale par défaut, préfixe pour toutes les autres
|
|
97
|
+
- `prefix-all`: Préfixe pour toutes les locales, y compris la locale par défaut
|
|
98
|
+
- `no-prefix`: Aucun préfixe de locale dans l'URL
|
|
99
|
+
- `search-params`: Utiliser les paramètres de requête pour la locale (par ex., `?locale=fr`)
|
|
92
100
|
|
|
93
101
|
### Retour
|
|
94
102
|
|
|
@@ -114,7 +122,9 @@ getLocalizedUrl("/about", Locales.ENGLISH);
|
|
|
114
122
|
// Output: "/about" ou "/en/about" (en fonction de votre paramètre de mode)
|
|
115
123
|
```
|
|
116
124
|
|
|
117
|
-
|
|
125
|
+
### Utilisation avancée (avec paramètres optionnels)
|
|
126
|
+
|
|
127
|
+
Vous pouvez remplacer la configuration par défaut en fournissant le paramètre optionnel `options` :
|
|
118
128
|
|
|
119
129
|
### URLs relatives
|
|
120
130
|
|
|
@@ -49,26 +49,12 @@ La fonction `getMultilingualUrls` génère une correspondance d'URLs multilingue
|
|
|
49
49
|
|
|
50
50
|
## Paramètres
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
### Paramètres obligatoires
|
|
53
53
|
|
|
54
54
|
- `url: string`
|
|
55
|
-
- **Description
|
|
56
|
-
- **Type
|
|
57
|
-
|
|
58
|
-
- `locales: Locales[]`
|
|
59
|
-
- **Description** : Tableau optionnel des locales supportées. Par défaut, les locales configurées dans le projet.
|
|
60
|
-
- **Type** : `Locales[]`
|
|
61
|
-
- **Défaut** : `localesDefault`
|
|
62
|
-
|
|
63
|
-
- `defaultLocale: Locales`
|
|
64
|
-
- **Description** : La locale par défaut pour l'application. Par défaut, la locale par défaut configurée dans le projet.
|
|
65
|
-
- **Type** : `Locales`
|
|
66
|
-
- **Défaut** : `defaultLocaleDefault`
|
|
67
|
-
|
|
68
|
-
- `prefixDefault: boolean`
|
|
69
|
-
- **Description** : Indique s'il faut préfixer la locale par défaut. Par défaut, la valeur configurée dans le projet.
|
|
70
|
-
- **Type** : `boolean`
|
|
71
|
-
- **Défaut** : `prefixDefaultDefault`
|
|
55
|
+
- **Description**: La chaîne d'URL originale à préfixer avec les locales.
|
|
56
|
+
- **Type**: `string`
|
|
57
|
+
- **Required**: Yes
|
|
72
58
|
|
|
73
59
|
### Paramètres Optionnels
|
|
74
60
|
|
|
@@ -104,10 +90,22 @@ La fonction `getMultilingualUrls` génère une correspondance d'URLs multilingue
|
|
|
104
90
|
|
|
105
91
|
---
|
|
106
92
|
|
|
107
|
-
## Utilisation d'exemple
|
|
108
|
-
|
|
109
93
|
## Exemple d'utilisation
|
|
110
94
|
|
|
95
|
+
### Utilisation basique (Utilise la configuration du projet)
|
|
96
|
+
|
|
97
|
+
```typescript codeFormat={["typescript", "esm", "commonjs"]}
|
|
98
|
+
import { getMultilingualUrls, Locales } from "intlayer";
|
|
99
|
+
|
|
100
|
+
// Utilise la configuration de votre projet pour les locales, defaultLocale et mode
|
|
101
|
+
getMultilingualUrls("/dashboard");
|
|
102
|
+
// Sortie (en supposant que la configuration du projet a en, fr avec le mode 'prefix-no-default'):
|
|
103
|
+
// {
|
|
104
|
+
// en: "/dashboard",
|
|
105
|
+
// fr: "/fr/dashboard"
|
|
106
|
+
// }
|
|
107
|
+
```
|
|
108
|
+
|
|
111
109
|
### URLs relatives
|
|
112
110
|
|
|
113
111
|
```typescript codeFormat={["typescript", "esm", "commonjs"]}
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | Plugin middleware de développement pour gérer la détection de la locale et le routage. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**Déprécié**) Alias pour `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | Plugin pour effectuer du tree-shaking et élaguer les dictionnaires inutilisés lors du build. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### Utilities
|
|
53
|
+
|
|
54
|
+
| Export | Description | Related Doc |
|
|
55
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | Retourne un middleware Node.js `(req, res, next)` agnostique du framework avec logique de routage de locale. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### Types
|
|
59
|
+
|
|
60
|
+
| Export | Description |
|
|
61
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | Options acceptées par `intlayer()`. Étend `GetConfigurationOptions` avec `compatCallers` et `proxy`. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | Options acceptées par `intlayerProxy()` et `createIntlayerProxyHandler()`. Inclut `ignore` et `configOptions`. |
|
|
64
|
+
| `IntlayerCompilerOptions` | Options acceptées par `intlayerCompiler()`. Inclut `configOptions` et `compilerConfig`. |
|
|
65
|
+
| `CompatCallerConfig` | Ré-export depuis `@intlayer/babel`. Décrit un motif d'appelant compat-adapter pour l'analyse de l'utilisation des champs. |
|
|
@@ -39,11 +39,126 @@ export default defineConfig({
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## Options
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`IntlayerPluginOptions` extends `GetConfigurationOptions` (voir `@intlayer/config`) avec les champs supplémentaires suivants :
|
|
49
|
+
|
|
50
|
+
| Option | Type | Default | Description |
|
|
51
|
+
| --------------- | ------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | Patterns d'appelants supplémentaires pour les packages compat-adapter (par ex. `@intlayer/react-i18next`). Transmis à l'analyseur d'utilisation de champs au moment de la compilation. |
|
|
53
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Options transmises au proxy de routage de locale inclus. Utilisez `ignore` pour exclure des chemins spécifiques (par ex. les routes API) du routage de locale. |
|
|
54
|
+
|
|
55
|
+
Toutes les autres options (`override`, `configFile`, …) sont transmises directement à `getConfiguration()`.
|
|
56
|
+
|
|
57
|
+
### Exemples
|
|
58
|
+
|
|
59
|
+
#### Ignorer les routes API du routage des locales
|
|
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
|
+
#### Avec un chemin de fichier de configuration personnalisé
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
plugins: [
|
|
82
|
+
intlayer({
|
|
83
|
+
configFile: "./config/intlayer.config.ts",
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Avec les callers 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
|
+
## Ce que fait le plugin
|
|
105
|
+
|
|
106
|
+
### 1. Préparation du dictionnaire
|
|
107
|
+
|
|
108
|
+
Avant le démarrage de la construction (et une fois par heure en dev), `intlayer` appelle `prepareIntlayer` pour compiler tous les fichiers `.content.ts` en dictionnaires JSON optimisés stockés dans `.intlayer/`.
|
|
109
|
+
|
|
110
|
+
### 2. Alias de modules
|
|
111
|
+
|
|
112
|
+
Le plugin ajoute des alias de résolution Vite afin que `import { myDict } from 'intlayer/dictionaries/my-dict'` soit résolu vers le fichier JSON compilé sur le disque. Les builds SSR utilisent `ssr.noExternal` pour s'assurer que tous les packages `@intlayer/*` sont regroupés avec les alias appliqués.
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
En mode développement, un watcher `chokidar` est démarré. Quand un fichier `.content.ts` change, les dictionnaires sont recompilés et le HMR de Vite propage la mise à jour au navigateur.
|
|
117
|
+
|
|
118
|
+
### 4. Proxy de routage des locales intégré (v9+)
|
|
119
|
+
|
|
120
|
+
Depuis Intlayer v9, le middleware `intlayerProxy` est enregistré automatiquement à l'intérieur de `intlayer()`. Il gère :
|
|
121
|
+
|
|
122
|
+
- La détection de la locale à partir du préfixe d'URL, des cookies et de l'en-tête `Accept-Language`.
|
|
123
|
+
- Les redirections 301 lorsque la locale détectée ne correspond pas à l'URL actuelle.
|
|
124
|
+
- Les réécritures d'URL internes afin que le framework voie le bon paramètre de route `[locale]`.
|
|
125
|
+
|
|
126
|
+
Le proxy est contrôlé par `routing.enableProxy` (par défaut `true`) dans votre configuration Intlayer. Pour le désactiver complètement :
|
|
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
|
+
Pour personnaliser le comportement du proxy sans appel `intlayerProxy()` séparé, transmettez les options `proxy` au plugin principal :
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Consultez la [documentation intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerProxy.md) pour la référence complète du comportement du routage.
|
|
144
|
+
|
|
145
|
+
### 5. Compilateur fourni (v9+)
|
|
146
|
+
|
|
147
|
+
Quand `compiler.enabled` est `true` **et** `compiler.output` est défini dans votre config Intlayer, `intlayer()` enregistre `intlayerCompiler` automatiquement. Le compilateur extrait les déclarations de contenu inline écrites directement dans les fichiers de composants et les écrit dans les dictionnaires au moment de la transformation. Voir la [documentation intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerCompiler.md).
|
|
148
|
+
|
|
149
|
+
### 6. Optimisations de build
|
|
150
|
+
|
|
151
|
+
Pendant un build de production, le plugin ajoute :
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – transformation Babel qui réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte les imports JSON directs.
|
|
154
|
+
- **intlayerPrune** – supprime les champs de contenu inutilisés du JSON du dictionnaire.
|
|
155
|
+
- **intlayerMinify** – compacte le JSON du dictionnaire et optionnellement modifie les noms de champs.
|
|
156
|
+
|
|
157
|
+
Ces derniers sont inactifs en mode développement.
|
|
158
|
+
|
|
159
|
+
## Aliases dépréciés
|
|
45
160
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
161
|
+
| Export déprécié | Remplacement |
|
|
162
|
+
| ---------------- | ------------ |
|
|
163
|
+
| `intlayerPlugin` | `intlayer` |
|
|
164
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -30,16 +30,89 @@ Le plugin Vite `intlayerPrune` permet d'effectuer du tree-shaking et de supprime
|
|
|
30
30
|
|
|
31
31
|
## Utilisation
|
|
32
32
|
|
|
33
|
+
### Dans le cadre de `intlayer()` (recommandé)
|
|
34
|
+
|
|
35
|
+
Activez le pruning via votre configuration Intlayer et le plugin principal gère tout :
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // active à la fois le pruning et la minification
|
|
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
|
+
Si vous composez manuellement la pile de plugins, `intlayerPrune` et `intlayerMinify` partagent un objet `PruneContext` qui doit être créé une seule fois et passé aux deux :
|
|
61
|
+
|
|
33
62
|
```ts
|
|
34
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), // optionnel, lit depuis le même contexte
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## Comment ça marche
|
|
81
|
+
|
|
82
|
+
### 1. Analyse d'utilisation (buildStart)
|
|
83
|
+
|
|
84
|
+
Durante `buildStart`, le plugin `intlayerOptimize` (également partie de `intlayer()`) analyse chaque fichier source de composant listé dans `build.filesList`. Pour chaque appel `useIntlayer('key')` ou `getIntlayer('key')`, il enregistre exactement quels champs sont accédés, par exemple :
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// enregistre : myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Cela construit `pruneContext.fieldUsageMap` avant que les appels `transform` ne s'exécutent.
|
|
92
|
+
|
|
93
|
+
### 2. Élagage JSON (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
Lorsque Vite traite un fichier JSON de dictionnaire compilé, `intlayerPrune` l'intercepte avant la conversion JSON → ESM intégrée de Vite. Il lit la carte d'utilisation des champs à partir de `pruneContext` et supprime tout champ de contenu qui ne figure pas dans l'ensemble d'utilisation enregistré.
|
|
96
|
+
|
|
97
|
+
Deux formes de contenu sont supportées :
|
|
98
|
+
|
|
99
|
+
- **Dictionnaires statiques** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Les champs sont élagués par locale à l'intérieur de `translation`.
|
|
100
|
+
- **Dictionnaires dynamiques (par locale)** — flat `{ fieldA: ..., fieldB: ... }`. Les champs sont élagués au niveau supérieur.
|
|
101
|
+
|
|
102
|
+
### 3. Cas limites
|
|
103
|
+
|
|
104
|
+
Si la structure de contenu d'un dictionnaire ne peut pas être reconnue (par exemple, une forme imbriquée inhabituelle), il est ajouté à `pruneContext.dictionariesWithEdgeCases` et **laissé inchangé**. Un avertissement est enregistré. `intlayerMinify` ignore également ces dictionnaires.
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
Lorsque l'élagage réussit, `intlayerPrune` écrit également `pruneContext.dictionaryKeyToFieldRenameMap` — un mapping entre les noms de champs originaux et leurs alias courts. `intlayerMinify` lit cette carte pour renommer les champs dans le JSON de sortie, et la passe de renommage Babel d'`intlayerOptimize` met à jour les accès aux propriétés dans les fichiers sources en conséquence.
|
|
109
|
+
|
|
110
|
+
## Conditions d'activation
|
|
111
|
+
|
|
112
|
+
`intlayerPrune` est actif **uniquement** quand toutes les conditions suivantes sont vraies :
|
|
113
|
+
|
|
114
|
+
1. La commande Vite est `build`.
|
|
115
|
+
2. `build.optimize` est `true` (ou `undefined`, qui est `true` par défaut pour les builds).
|
|
116
|
+
3. `build.purge` est `true` dans votre configuration Intlayer.
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
Il est automatiquement **désactivé** quand `editor.enabled` est `true` car l'éditeur a besoin du contenu complet du dictionnaire.
|
package/docs/fr/releases/v9.md
CHANGED
|
@@ -370,21 +370,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
370
370
|
|
|
371
371
|
Le programme d'installation télécharge un `docker-compose.yml` et un `.env`, génère automatiquement les secrets requis et exécute `docker compose up -d`. Tout — le tableau de bord, l'API, la base de données, le stockage d'objets et les e-mails transactionnels — s'exécute localement dans des conteneurs.
|
|
372
372
|
|
|
373
|
-
### Services inclus
|
|
374
|
-
|
|
375
|
-
| Service | Objectif |
|
|
376
|
-
| --------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
377
|
-
| **app** (TanStack Start) | Interface du tableau de bord sur le port `3000` |
|
|
378
|
-
| **backend** (Fastify/Bun) | API REST sur le port `3100` |
|
|
379
|
-
| **MongoDB 7** (single-node replica set) | Base de données principale |
|
|
380
|
-
| **Redis 7** | Files d'attente de tâches et mise en cache |
|
|
381
|
-
| **MinIO** | Stockage d'objets compatible S3 (avatars, captures d'écran) |
|
|
382
|
-
| **Mailpit** | Puits SMTP local + interface web pour les e-mails transactionnels sur le port `8025` |
|
|
383
|
-
|
|
384
|
-
Chromium (utilisé pour la génération de captures d'écran Puppeteer) est intégré dans l'image du backend — aucun conteneur supplémentaire n'est nécessaire.
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
373
|
## Notes de migration depuis la v8
|
|
389
374
|
|
|
390
375
|
Si vous effectuez une mise à niveau depuis la v8, notez que la v9 n'inclut pas de changements majeurs (breaking changes). Voici cependant les changements clés :
|
package/docs/fr/self_hosting.md
CHANGED
|
@@ -80,6 +80,18 @@ Une fois la stack démarrée, ouvrez **http://localhost:3000** et créez votre p
|
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
83
|
+
## Configuration initiale
|
|
84
|
+
|
|
85
|
+
Sur une instance vierge (base de données vide), l'ouverture du dashboard vous redirige vers la page **`/init`** :
|
|
86
|
+
|
|
87
|
+
1. Créez le premier compte. Comme la collection users est vide, ce compte est automatiquement promu **super admin**.
|
|
88
|
+
2. Un email de vérification est envoyé (via Resend). La vérification d'email est **obligatoire** — c'est pourquoi `RESEND_API_KEY` doit être défini avant de commencer.
|
|
89
|
+
3. Cliquez sur le lien dans l'email, puis connectez-vous.
|
|
90
|
+
|
|
91
|
+
Une fois qu'un admin existe, `/init` redirige vers la page de connexion standard.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
83
95
|
## Services
|
|
84
96
|
|
|
85
97
|
| Service | Image | Port(s) hôte | Objectif |
|
|
@@ -99,7 +111,16 @@ Les ports internes (mongo, redis) ne sont pas exposés à l'hôte par défaut.
|
|
|
99
111
|
|
|
100
112
|
## Variables d'environnement
|
|
101
113
|
|
|
102
|
-
|
|
114
|
+
### Requis
|
|
115
|
+
|
|
116
|
+
| Variable | Exemple | Description |
|
|
117
|
+
| ---------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| `DB_ID` | `intlayer` | Utilisateur MongoDB Atlas |
|
|
119
|
+
| `DB_MDP` | _(votre mot de passe)_ | Mot de passe MongoDB Atlas |
|
|
120
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Hôte du cluster MongoDB Atlas (utilisé dans l'URI `mongodb+srv://`) |
|
|
121
|
+
| `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature de session |
|
|
122
|
+
| `S3_SECRET_ACCESS_KEY` | _(généré)_ | Secret pour le MinIO intégré |
|
|
123
|
+
| `RESEND_API_KEY` | _(votre clé)_ | Email transactionnel via Resend. Requis pour la première configuration sauf si vous configurez un mailer SMTP global (voir [Global mailer](#global-mailer)) |
|
|
103
124
|
|
|
104
125
|
### Requis (auto-généré ou demandé)
|
|
105
126
|
|
|
@@ -141,6 +162,26 @@ L'installateur génère un fichier `.env` prêt à l'emploi. Le tableau ci-desso
|
|
|
141
162
|
|
|
142
163
|
---
|
|
143
164
|
|
|
165
|
+
### Mailer global
|
|
166
|
+
|
|
167
|
+
Par défaut, tous les emails transactionnels sont envoyés via Resend en utilisant `RESEND_API_KEY`. Les déploiements auto-hébergés peuvent à la place router **tous** les emails — y compris les emails non-organisationnels tels que les réinitialisations de mot de passe et les liens magiques — via un mailer global configuré avec des variables d'environnement.
|
|
168
|
+
|
|
169
|
+
Définissez `MAIL_PROVIDER` pour l'activer. S'il n'est pas défini, le mailer Resend par défaut est utilisé.
|
|
170
|
+
|
|
171
|
+
| Variable | Exemple | Description |
|
|
172
|
+
| -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------- |
|
|
173
|
+
| `MAIL_PROVIDER` | `smtp` | Transport global : `smtp` ou `resend`. Laissez vide pour utiliser les valeurs par défaut |
|
|
174
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | En-tête d'expéditeur. Accepte une adresse simple ou un format `Nom <email>` |
|
|
175
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | Hôte SMTP (requis quand `MAIL_PROVIDER=smtp`) |
|
|
176
|
+
| `MAIL_SMTP_PORT` | `587` | Port SMTP (par défaut `587`) |
|
|
177
|
+
| `MAIL_SMTP_SECURE` | `false` | TLS implicite. Définissez `true` pour le port `465` |
|
|
178
|
+
| `MAIL_SMTP_USER` | _(votre utilisateur)_ | Nom d'utilisateur SMTP (optionnel ; omettez pour les relais non authentifiés) |
|
|
179
|
+
| `MAIL_SMTP_PASSWORD` | _(votre mot de passe)_ | Mot de passe SMTP |
|
|
180
|
+
|
|
181
|
+
> Priorité : le mailer propre d'une organisation (configuré depuis le tableau de bord **Organization**) a priorité sur le mailer global, qui a lui-même priorité sur la clé Resend par défaut.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
144
185
|
## Connexion de votre projet Intlayer
|
|
145
186
|
|
|
146
187
|
Une fois la stack en cours d'exécution, pointez votre projet vers le backend et le tableau de bord auto-hébergés au lieu de `intlayer.org`.
|
|
@@ -259,47 +300,11 @@ docker run --rm \
|
|
|
259
300
|
|
|
260
301
|
---
|
|
261
302
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
Pour les déploiements de production, placez un proxy inverse devant les conteneurs de l'application et du backend au lieu de les exposer directement.
|
|
303
|
+
## Limitations
|
|
265
304
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
Mettez à jour les variables `.env` suivantes pour qu'elles correspondent à vos domaines publics :
|
|
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
|
-
> Les variables `VITE_*` sont intégrées à l'image du tableau de bord lors de la construction. Si vous les modifiez après la construction de l'image, vous devez reconstruire l'image `app` (`docker compose build app`) ou utiliser l'injection de configuration au moment de l'exécution.
|
|
305
|
+
- **MongoDB must be external (Atlas).** The backend connects only over `mongodb+srv://` (built from `DB_ID` / `DB_MDP` / `DB_CLUSTER`), so a plain `mongodb://host:27017` — including the container's own bundled `mongod` — cannot be used. Provide a MongoDB Atlas cluster.
|
|
306
|
+
- **No custom domain.** All browser-facing `VITE_*` URLs are inlined into the app at build time, and the published image ships with `localhost` values. The dashboard must be accessed at `http://localhost:3000`; serving it on a public domain would require rebuilding the image with the target URLs baked in and is not supported out of the box.
|
|
307
|
+
- **Email requires a working mailer.** First-run setup enforces email verification, so either `RESEND_API_KEY` or a [global SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) must be configured. After the first admin signs in, each organization can also configure its own SMTP or Resend mailer from the dashboard.
|
|
303
308
|
|
|
304
309
|
---
|
|
305
310
|
|
|
@@ -324,14 +329,6 @@ docker compose build app
|
|
|
324
329
|
docker compose up -d app
|
|
325
330
|
```
|
|
326
331
|
|
|
327
|
-
### Les e-mails ne sont pas envoyés
|
|
328
|
-
|
|
329
|
-
Par défaut, tous les e-mails sortants sont capturés par Mailpit. Ouvrez `http://localhost:8025` pour voir les messages envoyés. Pour envoyer de vrais e-mails, définissez `MAIL_PROVIDER=resend` et `RESEND_API_KEY=<your-key>` dans `.env`, puis redémarrez le backend :
|
|
330
|
-
|
|
331
|
-
```sh
|
|
332
|
-
docker compose restart backend
|
|
333
|
-
```
|
|
334
|
-
|
|
335
332
|
### Bucket MinIO manquant
|
|
336
333
|
|
|
337
334
|
Si le service ponctuel `minio-init` n'a pas fonctionné (ou a fonctionné avant que MinIO ne soit prêt), créez le bucket manuellement :
|