@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
|
@@ -715,41 +715,71 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
715
715
|
Link.displayName = "Link";
|
|
716
716
|
```
|
|
717
717
|
|
|
718
|
-
|
|
718
|
+
#### 작동 방식
|
|
719
719
|
|
|
720
|
-
|
|
720
|
+
- **외부 링크 감지**:
|
|
721
|
+
헬퍼 함수 `checkIsExternalLink`는 URL이 외부 링크인지 여부를 결정합니다. 외부 링크는 로컬라이제이션이 필요하지 않기 때문에 변경되지 않습니다.
|
|
722
|
+
- **현재 로케일 검색**:
|
|
723
|
+
`useLocale` 훅은 현재 로케일(예: 프랑스어의 경우 `fr`)을 제공합니다.
|
|
724
|
+
- **URL 로컬라이징**:
|
|
725
|
+
내부 링크(즉, 외부가 아닌)의 경우, `getLocalizedUrl`을 사용하여 자동으로 URL에 현재 로케일을 접두사로 추가합니다. 이는 사용자가 프랑스어를 사용 중인 경우 `href`로 `/about`을 전달하면 `/fr/about`으로 변환된다는 의미입니다.
|
|
726
|
+
- **링크 반환**:
|
|
727
|
+
컴포넌트는 로컬라이징된 URL과 함께 `<a>` 요소를 반환하여 네비게이션이 로케일과 일치하도록 보장합니다.
|
|
721
728
|
|
|
722
|
-
|
|
729
|
+
</Step>
|
|
723
730
|
|
|
724
|
-
|
|
731
|
+
<Step number={11} title="Markdown 및 HTML 렌더링" isOptional={true}>
|
|
725
732
|
|
|
726
|
-
|
|
727
|
-
- 누락된 번역에 대한 **실시간 오류 감지**.
|
|
728
|
-
- 번역된 콘텐츠의 **인라인 미리보기**.
|
|
729
|
-
- 번역을 쉽게 생성하고 업데이트할 수 있는 **빠른 작업**.
|
|
733
|
+
Intlayer는 Preact에서 Markdown 및 HTML 콘텐츠 렌더링을 지원합니다.
|
|
730
734
|
|
|
731
|
-
|
|
735
|
+
`.use()` 메서드를 사용하여 Markdown 및 HTML 콘텐츠의 렌더링을 커스터마이징할 수 있습니다. 이 메서드를 사용하면 특정 태그의 기본 렌더링을 재정의할 수 있습니다.
|
|
732
736
|
|
|
733
|
-
|
|
737
|
+
```tsx
|
|
738
|
+
import { useIntlayer } from "preact-intlayer";
|
|
734
739
|
|
|
735
|
-
|
|
740
|
+
const { myMarkdownContent, myHtmlContent } = useIntlayer("my-component");
|
|
741
|
+
|
|
742
|
+
// ...
|
|
743
|
+
|
|
744
|
+
return (
|
|
745
|
+
<div>
|
|
746
|
+
{/* 기본 렌더링 */}
|
|
747
|
+
{myMarkdownContent}
|
|
748
|
+
|
|
749
|
+
{/* Markdown에 대한 커스텀 렌더링 */}
|
|
750
|
+
{myMarkdownContent.use({
|
|
751
|
+
h1: (props) => <h1 style={{ color: "red" }} {...props} />,
|
|
752
|
+
})}
|
|
753
|
+
|
|
754
|
+
{/* HTML에 대한 기본 렌더링 */}
|
|
755
|
+
{myHtmlContent}
|
|
756
|
+
|
|
757
|
+
{/* HTML에 대한 커스텀 렌더링 */}
|
|
758
|
+
{myHtmlContent.use({
|
|
759
|
+
b: (props) => <strong style={{ color: "blue" }} {...props} />,
|
|
760
|
+
})}
|
|
761
|
+
</div>
|
|
762
|
+
);
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
</Step>
|
|
736
766
|
|
|
737
|
-
<Step number={
|
|
767
|
+
<Step number={12} title="컴포넌트의 콘텐츠 추출" isOptional={true}>
|
|
738
768
|
|
|
739
|
-
기존
|
|
769
|
+
기존 codebase가 있는 경우 수천 개의 파일을 변환하는 것은 시간이 많이 걸릴 수 있습니다.
|
|
740
770
|
|
|
741
|
-
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를
|
|
771
|
+
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를 추출할 수 있는 [compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md) / [extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/extract.md)를 제공합니다.
|
|
742
772
|
|
|
743
|
-
설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수
|
|
773
|
+
이를 설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수 있습니다:
|
|
744
774
|
|
|
745
775
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
746
776
|
import { type IntlayerConfig } from "intlayer";
|
|
747
777
|
|
|
748
778
|
const config: IntlayerConfig = {
|
|
749
|
-
// ... 나머지
|
|
779
|
+
// ... 나머지 설정
|
|
750
780
|
compiler: {
|
|
751
781
|
/**
|
|
752
|
-
*
|
|
782
|
+
* 컴파일러를 활성화할지 여부를 나타냅니다.
|
|
753
783
|
*/
|
|
754
784
|
enabled: true,
|
|
755
785
|
|
|
@@ -759,7 +789,11 @@ const config: IntlayerConfig = {
|
|
|
759
789
|
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
760
790
|
|
|
761
791
|
/**
|
|
762
|
-
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다.
|
|
792
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다.
|
|
793
|
+
*
|
|
794
|
+
* - `true`인 경우, 컴파일러는 컴포넌트 파일을 디스크에 다시 작성합니다. 따라서 변환이 영구적이고 컴파일러는 다음 프로세스에서 변환을 건너뜁니다. 이렇게 하면 컴파일러가 앱을 변환한 후 제거할 수 있습니다.
|
|
795
|
+
*
|
|
796
|
+
* - `false`인 경우, 컴파일러는 빌드 출력에만 `useIntlayer()` 함수 호출을 주입하고 기본 codebase를 그대로 유지합니다. 변환은 메모리에서만 수행됩니다.
|
|
763
797
|
*/
|
|
764
798
|
saveComponents: false,
|
|
765
799
|
|
|
@@ -776,7 +810,7 @@ export default config;
|
|
|
776
810
|
<Tabs>
|
|
777
811
|
<Tab value='추출 명령'>
|
|
778
812
|
|
|
779
|
-
컴포넌트를 변환하고 콘텐츠를
|
|
813
|
+
추출기를 실행하여 컴포넌트를 변환하고 콘텐츠를 추출합니다.
|
|
780
814
|
|
|
781
815
|
```bash packageManager="npm"
|
|
782
816
|
npx intlayer extract
|
|
@@ -797,9 +831,9 @@ bun x intlayer extract
|
|
|
797
831
|
</Tab>
|
|
798
832
|
<Tab value='Babel 컴파일러'>
|
|
799
833
|
|
|
800
|
-
>
|
|
834
|
+
> v9부터 `intlayerCompiler`는 `intlayer` 플러그인에 포함되어 있습니다. 따라서 수동으로 추가할 필요가 없습니다.
|
|
801
835
|
|
|
802
|
-
`vite.config.ts`를
|
|
836
|
+
`intlayerCompiler` 플러그인을 포함하도록 `vite.config.ts`를 업데이트합니다:
|
|
803
837
|
|
|
804
838
|
```ts fileName="vite.config.ts"
|
|
805
839
|
import { defineConfig } from "vite";
|
|
@@ -808,7 +842,7 @@ import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
|
808
842
|
export default defineConfig({
|
|
809
843
|
plugins: [
|
|
810
844
|
intlayer(),
|
|
811
|
-
intlayerCompiler(), //
|
|
845
|
+
intlayerCompiler(), // 컴파일러 플러그인 추가
|
|
812
846
|
],
|
|
813
847
|
});
|
|
814
848
|
```
|
|
@@ -826,7 +860,7 @@ yarn build # 또는 yarn dev
|
|
|
826
860
|
```
|
|
827
861
|
|
|
828
862
|
```bash packageManager="bun"
|
|
829
|
-
bun run build #
|
|
863
|
+
bun run build # 또는 bun run dev
|
|
830
864
|
```
|
|
831
865
|
|
|
832
866
|
</Tab>
|
|
@@ -66,30 +66,32 @@ getLocalizedUrl(
|
|
|
66
66
|
- **Type**: `Locales`
|
|
67
67
|
- **Required**: Yes
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
- `
|
|
72
|
-
- **설명**:
|
|
73
|
-
- **타입**: `
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- `
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- `
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
- `
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
69
|
+
### 선택적 매개변수
|
|
70
|
+
|
|
71
|
+
- `options?: object`
|
|
72
|
+
- **설명**: URL 로컬라이제이션 동작을 위한 구성 객체입니다.
|
|
73
|
+
- **타입**: `object`
|
|
74
|
+
- **필수**: 아니오 (선택적)
|
|
75
|
+
|
|
76
|
+
- `options.locales?: Locales[]`
|
|
77
|
+
- **설명**: 지원되는 로컬의 배열입니다. 제공되지 않으면 프로젝트 구성에서 구성된 로컬을 사용합니다.
|
|
78
|
+
- **타입**: `Locales[]`
|
|
79
|
+
- **기본값**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md#middleware)
|
|
80
|
+
|
|
81
|
+
- `options.defaultLocale?: Locales`
|
|
82
|
+
- **설명**: 애플리케이션의 기본 로컬입니다. 제공되지 않으면 프로젝트 구성에서 구성된 기본 로컬을 사용합니다.
|
|
83
|
+
- **타입**: `Locales`
|
|
84
|
+
- **기본값**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md#middleware)
|
|
85
|
+
|
|
86
|
+
- `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
87
|
+
- **설명**: 로컬 처리를 위한 URL 라우팅 모드입니다. 제공되지 않으면 프로젝트 구성에서 구성된 모드를 사용합니다.
|
|
88
|
+
- **타입**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
89
|
+
- **기본값**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md#middleware)
|
|
90
|
+
- **모드**:
|
|
91
|
+
- `prefix-no-default`: 기본 로컬에는 접두사 없음, 다른 모든 로컬에는 접두사 사용
|
|
92
|
+
- `prefix-all`: 기본 로컬을 포함한 모든 로컬에 접두사 사용
|
|
93
|
+
- `no-prefix`: URL에 로컬 접두사 없음
|
|
94
|
+
- `search-params`: 로컬에 쿼리 매개변수 사용 (예: `?locale=fr`)
|
|
93
95
|
|
|
94
96
|
### 반환값
|
|
95
97
|
|
|
@@ -50,26 +50,12 @@ getMultilingualUrls(
|
|
|
50
50
|
|
|
51
51
|
## 매개변수
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
### 필수 매개변수
|
|
54
54
|
|
|
55
55
|
- `url: string`
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
- `locales: Locales[]`
|
|
60
|
-
- **설명**: 선택적 지원 로케일 배열입니다. 프로젝트에 구성된 로케일이 기본값입니다.
|
|
61
|
-
- **타입**: `Locales[]`
|
|
62
|
-
- **기본값**: `localesDefault`
|
|
63
|
-
|
|
64
|
-
- `defaultLocale: Locales`
|
|
65
|
-
- **설명**: 애플리케이션의 기본 로케일입니다. 프로젝트에 구성된 기본 로케일이 기본값입니다.
|
|
66
|
-
- **타입**: `Locales`
|
|
67
|
-
- **기본값**: `defaultLocaleDefault`
|
|
68
|
-
|
|
69
|
-
- `prefixDefault: boolean`
|
|
70
|
-
- **설명**: 기본 로케일에 접두사를 붙일지 여부입니다. 프로젝트에 구성된 값이 기본값입니다.
|
|
71
|
-
- **타입**: `boolean`
|
|
72
|
-
- **기본값**: `prefixDefaultDefault`
|
|
56
|
+
- **Description**: 로케일로 접두어가 붙을 원본 URL 문자열입니다.
|
|
57
|
+
- **Type**: `string`
|
|
58
|
+
- **Required**: Yes
|
|
73
59
|
|
|
74
60
|
### 선택적 매개변수
|
|
75
61
|
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | 로케일 감지와 라우팅을 처리하는 개발용 미들웨어 플러그인. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**사용 중단**) `intlayerProxy`의 별칭. | - |
|
|
50
50
|
| `intlayerPrune` | 빌드 시 사용되지 않는 사전(딕셔너리)을 트리 쉐이킹하여 제거하는 플러그인. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### 유틸리티
|
|
53
|
+
|
|
54
|
+
| Export | Description | Related Doc |
|
|
55
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | 프레임워크에 독립적인 Node.js `(req, res, next)` 미들웨어를 반환하며, locale-routing 로직을 포함합니다. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### 타입
|
|
59
|
+
|
|
60
|
+
| Export | Description |
|
|
61
|
+
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | `intlayer()`에서 허용하는 옵션입니다. `GetConfigurationOptions`를 `compatCallers` 및 `proxy`로 확장합니다. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | `intlayerProxy()` 및 `createIntlayerProxyHandler()`에서 허용하는 옵션입니다. `ignore` 및 `configOptions`를 포함합니다. |
|
|
64
|
+
| `IntlayerCompilerOptions` | `intlayerCompiler()`에서 허용하는 옵션입니다. `configOptions` 및 `compilerConfig`를 포함합니다. |
|
|
65
|
+
| `CompatCallerConfig` | `@intlayer/babel`에서 재내보내기됩니다. 필드 사용 분석을 위한 compat-adapter 호출자 패턴을 설명합니다. |
|
|
@@ -39,11 +39,126 @@ export default defineConfig({
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## 옵션
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`IntlayerPluginOptions`는 `GetConfigurationOptions` (참고: `@intlayer/config`)를 확장하며 다음의 추가 필드를 포함합니다:
|
|
49
|
+
|
|
50
|
+
| 옵션 | 타입 | 기본값 | 설명 |
|
|
51
|
+
| --------------- | ------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | compat-adapter 패키지(예: `@intlayer/react-i18next`)에 대한 추가 caller 패턴. 빌드 시간에 field-usage 분석기에 전달됩니다. |
|
|
53
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | bundled locale-routing proxy로 전달되는 옵션. `ignore`를 사용하여 특정 경로(예: API 라우트)를 locale 라우팅에서 제외합니다. |
|
|
54
|
+
|
|
55
|
+
다른 모든 옵션(`override`, `configFile`, …)은 `getConfiguration()`으로 직접 전달됩니다.
|
|
56
|
+
|
|
57
|
+
### 예시
|
|
58
|
+
|
|
59
|
+
#### 로케일 라우팅에서 API 경로 무시하기
|
|
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
|
+
#### 커스텀 설정 파일 경로 포함
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
plugins: [
|
|
82
|
+
intlayer({
|
|
83
|
+
configFile: "./config/intlayer.config.ts",
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### compat-adapter callers와 함께
|
|
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
|
+
## 플러그인의 역할
|
|
105
|
+
|
|
106
|
+
### 1. Dictionary preparation
|
|
107
|
+
|
|
108
|
+
빌드가 시작되기 전에(그리고 dev에서는 한 시간에 한 번), `intlayer`는 `prepareIntlayer`를 호출하여 모든 `.content.ts` 파일을 `.intlayer/`에 저장된 최적화된 JSON 딕셔너리로 컴파일합니다.
|
|
109
|
+
|
|
110
|
+
### 2. Module aliases
|
|
111
|
+
|
|
112
|
+
플러그인은 Vite resolve aliases를 추가하여 `import { myDict } from 'intlayer/dictionaries/my-dict'`가 디스크의 컴파일된 JSON 파일로 해석되도록 합니다. SSR 빌드는 `ssr.noExternal`을 사용하여 모든 `@intlayer/*` 패키지가 aliases와 함께 번들링되도록 합니다.
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
개발 모드에서 `chokidar` watcher가 시작됩니다. `.content.ts` 파일이 변경되면 dictionaries가 다시 컴파일되고 Vite의 HMR이 브라우저에 업데이트를 전파합니다.
|
|
117
|
+
|
|
118
|
+
### 4. 번들된 locale-routing proxy (v9+)
|
|
119
|
+
|
|
120
|
+
Intlayer v9 이후로 `intlayerProxy` 미들웨어는 `intlayer()` 내부에 자동으로 등록됩니다. 다음을 처리합니다:
|
|
121
|
+
|
|
122
|
+
- URL 접두사, 쿠키 및 `Accept-Language` 헤더에서 locale 감지.
|
|
123
|
+
- 감지된 locale이 현재 URL과 일치하지 않을 때 301 리다이렉트.
|
|
124
|
+
- 프레임워크가 올바른 `[locale]` 경로 매개변수를 인식하도록 하는 내부 URL 재작성.
|
|
125
|
+
|
|
126
|
+
프록시는 Intlayer 구성의 `routing.enableProxy`(기본값 `true`)로 제어됩니다. 완전히 비활성화하려면:
|
|
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
|
+
별도의 `intlayerProxy()` 호출 없이 프록시 동작을 사용자 정의하려면 메인 플러그인에 `proxy` 옵션을 전달하세요:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
전체 라우팅 동작 참조는 [intlayerProxy documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/vite-intlayer/intlayerProxy.md)를 참조하세요.
|
|
144
|
+
|
|
145
|
+
### 5. Bundled compiler (v9+)
|
|
146
|
+
|
|
147
|
+
`compiler.enabled`가 `true`이고 **그리고** Intlayer 설정에서 `compiler.output`이 설정되어 있으면, `intlayer()`는 `intlayerCompiler`을 자동으로 등록합니다. 컴파일러는 component 파일 내에 직접 작성된 인라인 content 선언을 추출하고 변환 시간에 dictionaries에 작성합니다. [intlayerCompiler documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/vite-intlayer/intlayerCompiler.md)을 참조하세요.
|
|
148
|
+
|
|
149
|
+
### 6. Build optimisations
|
|
150
|
+
|
|
151
|
+
프로덕션 빌드 중에 플러그인은 다음을 추가합니다:
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – `useIntlayer('key')` → `useDictionary(hash)`를 다시 작성하고 직접 JSON 임포트를 주입하는 Babel transform입니다.
|
|
154
|
+
- **intlayerPrune** – dictionary JSON에서 사용하지 않는 content 필드를 제거합니다.
|
|
155
|
+
- **intlayerMinify** – dictionary JSON을 압축하고 선택적으로 필드 이름을 난독화합니다.
|
|
156
|
+
|
|
157
|
+
이들은 development 모드에서는 비활성화됩니다.
|
|
158
|
+
|
|
159
|
+
## 더 이상 사용되지 않는 별칭
|
|
45
160
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
161
|
+
| 더 이상 사용되지 않는 export | 대체 항목 |
|
|
162
|
+
| ---------------------------- | ---------- |
|
|
163
|
+
| `intlayerPlugin` | `intlayer` |
|
|
164
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -28,18 +28,91 @@ author: aymericzip
|
|
|
28
28
|
|
|
29
29
|
`intlayerPrune` Vite 플러그인은 애플리케이션 번들에서 사용되지 않는 사전(dictionary)을 트리 쉐이킹하고 제거(prune)하는 데 사용됩니다. 이를 통해 필요한 다국어 콘텐츠만 포함되어 최종 번들 크기를 줄일 수 있습니다.
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## 사용법
|
|
32
|
+
|
|
33
|
+
### `intlayer()`의 일부로 (권장)
|
|
34
|
+
|
|
35
|
+
Intlayer config를 통해 pruning을 활성화하면 main plugin이 모든 것을 처리합니다:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // prune과 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
|
+
플러그인 스택을 수동으로 구성하는 경우, `intlayerPrune`과 `intlayerMinify`는 한 번 생성하고 둘 다에 전달해야 하는 `PruneContext` 객체를 공유합니다:
|
|
32
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), // 선택사항, 동일한 context에서 읽음
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## 어떻게 작동하는가
|
|
81
|
+
|
|
82
|
+
### 1. Usage analysis (buildStart)
|
|
83
|
+
|
|
84
|
+
`buildStart` 중에 `intlayerOptimize` 플러그인(`intlayer()`의 일부)은 `build.filesList`에 나열된 모든 component 소스 파일을 스캔합니다. 각 `useIntlayer('key')` 또는 `getIntlayer('key')` 호출에 대해, 정확히 어떤 필드가 액세스되는지 기록합니다. 예를 들어:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// records: myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
이는 모든 `transform` 호출이 실행되기 전에 `pruneContext.fieldUsageMap`을 구성합니다.
|
|
92
|
+
|
|
93
|
+
### 2. JSON pruning (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
Vite가 컴파일된 dictionary JSON 파일을 처리할 때, `intlayerPrune`은 Vite의 built-in JSON → ESM 변환 전에 이를 가로챕니다. `pruneContext`에서 field-usage map을 읽고 기록된 usage set에 없는 모든 content field를 제거합니다.
|
|
96
|
+
|
|
97
|
+
두 가지 content shape이 지원됩니다:
|
|
98
|
+
|
|
99
|
+
- **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Fields는 `translation` 내에서 per-locale별로 pruned됩니다.
|
|
100
|
+
- **Dynamic (per-locale) dictionaries** — flat `{ fieldA: ..., fieldB: ... }`. Fields는 top level에서 pruned됩니다.
|
|
101
|
+
|
|
102
|
+
### 3. Edge cases
|
|
103
|
+
|
|
104
|
+
사전의 콘텐츠 구조를 인식할 수 없는 경우(예: 비정상적인 중첩된 형태), 이는 `pruneContext.dictionariesWithEdgeCases`에 추가되고 **변경되지 않은 상태로 유지**됩니다. 경고가 기록됩니다. `intlayerMinify`도 이러한 사전을 건너뜁니다.
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
pruning이 성공하면, `intlayerPrune`은 `pruneContext.dictionaryKeyToFieldRenameMap`도 작성합니다. 이는 원본 필드 이름을 짧은 별칭으로 매핑합니다. `intlayerMinify`는 이 맵을 읽어 출력 JSON의 필드 이름을 변경하고, `intlayerOptimize`의 Babel rename pass는 소스 파일의 property 접근을 그에 따라 업데이트합니다.
|
|
109
|
+
|
|
110
|
+
## 활성화 조건
|
|
111
|
+
|
|
112
|
+
`intlayerPrune`은 다음의 모든 조건이 참일 때**만** 활성화됩니다:
|
|
113
|
+
|
|
114
|
+
1. Vite 명령이 `build`입니다.
|
|
115
|
+
2. `build.optimize`가 `true`입니다 (또는 `undefined`인 경우, 빌드에 대해 기본값이 `true`입니다).
|
|
116
|
+
3. Intlayer 구성에서 `build.purge`가 `true`입니다.
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
`editor.enabled`가 `true`일 때는 편집기가 전체 사전 콘텐츠를 필요로 하기 때문에 자동으로 **비활성화**됩니다.
|
package/docs/ko/releases/v9.md
CHANGED
|
@@ -361,6 +361,18 @@ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
|
|
|
361
361
|
|
|
362
362
|
---
|
|
363
363
|
|
|
364
|
+
## Self-Hosting
|
|
365
|
+
|
|
366
|
+
Intlayer v9는 단일 명령으로 자신의 Intlayer 인스턴스를 실행할 수 있는 일급 지원을 제공합니다. Intlayer Cloud 계정이 필요하지 않습니다.
|
|
367
|
+
|
|
368
|
+
```sh
|
|
369
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
설치 프로그램은 `docker-compose.yml` 및 `.env`를 다운로드하고, 필요한 시크릿을 자동으로 생성하며, `docker compose up -d`를 실행합니다. 대시보드, API, 데이터베이스, 객체 스토리지, 트랜잭션 이메일 등 모든 것이 컨테이너에서 로컬로 실행됩니다.
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
364
376
|
## v8에서의 마이그레이션 노트
|
|
365
377
|
|
|
366
378
|
v8에서 업그레이드하는 경우, v9에는 하위 호환성을 깨뜨리는 변경 사항(breaking changes)이 포함되어 있지 않습니다. 하지만 다음과 같은 주요 변경 사항이 있습니다:
|