@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
|
@@ -84,9 +84,101 @@ Intlayer는 단순한 i18n 솔루션 그 이상으로 관리에 도움이 되는
|
|
|
84
84
|
|
|
85
85
|
---
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
### 패키지
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
- **intlayer**
|
|
90
|
+
설정, 사전 콘텐츠, 타입 생성 및 CLI 명령을 위한 핵심 i18n 도구 모음입니다.
|
|
91
|
+
|
|
92
|
+
- **react-intlayer**
|
|
93
|
+
Lynx에서 로케일을 얻고 전환하기 위해 사용할 컨텍스트 제공자와 React 훅을 제공하는 React 통합입니다.
|
|
94
|
+
|
|
95
|
+
- **lynx-intlayer**
|
|
96
|
+
Intlayer를 Lynx bundler와 통합하기 위한 플러그인을 제공하는 Lynx 통합입니다.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
</Step>
|
|
101
|
+
|
|
102
|
+
<Step number={2} title="Intlayer 설정 파일 생성">
|
|
103
|
+
|
|
104
|
+
프로젝트 루트(또는 편한 위치)에 **Intlayer 설정** 파일을 생성합니다. 다음과 같이 보일 수 있습니다:
|
|
105
|
+
|
|
106
|
+
```ts fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
107
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
108
|
+
|
|
109
|
+
const config: IntlayerConfig = {
|
|
110
|
+
internationalization: {
|
|
111
|
+
locales: [
|
|
112
|
+
Locales.ENGLISH,
|
|
113
|
+
Locales.FRENCH,
|
|
114
|
+
Locales.SPANISH,
|
|
115
|
+
// ... 필요한 다른 로케일을 추가합니다
|
|
116
|
+
],
|
|
117
|
+
defaultLocale: Locales.ENGLISH,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default config;
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
이 설정 내에서 다음을 수행할 수 있습니다:
|
|
125
|
+
|
|
126
|
+
- **지원하는 로케일 목록**을 구성합니다.
|
|
127
|
+
- **기본** 로케일을 설정합니다.
|
|
128
|
+
- 나중에 더 고급 옵션을 추가할 수 있습니다(예: 로그, 사용자 정의 콘텐츠 디렉터리 등).
|
|
129
|
+
- [Intlayer 설정 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
|
|
130
|
+
|
|
131
|
+
</Step>
|
|
132
|
+
|
|
133
|
+
<Step number={3} title="Intlayer 플러그인을 Lynx bundler에 추가">
|
|
134
|
+
|
|
135
|
+
Intlayer를 Lynx와 함께 사용하려면 `lynx.config.ts` 파일에 플러그인을 추가해야 합니다:
|
|
136
|
+
|
|
137
|
+
```ts fileName="lynx.config.ts"
|
|
138
|
+
import { defineConfig } from "@lynx-js/rspeedy";
|
|
139
|
+
import { pluginIntlayerLynx } from "lynx-intlayer/plugin";
|
|
140
|
+
|
|
141
|
+
export default defineConfig({
|
|
142
|
+
plugins: [
|
|
143
|
+
// ... 다른 플러그인
|
|
144
|
+
pluginIntlayerLynx(),
|
|
145
|
+
],
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
</Step>
|
|
150
|
+
|
|
151
|
+
<Step number={4} title="Intlayer 제공자 추가">
|
|
152
|
+
|
|
153
|
+
애플리케이션 전체에서 사용자 언어를 동기화된 상태로 유지하려면 `react-intlayer`의 `IntlayerProvider` 컴포넌트로 루트 컴포넌트를 감싸야 합니다.
|
|
154
|
+
|
|
155
|
+
또한 Intlayer가 제대로 작동하도록 보장하기 위해 `intlayerPolyfill` 함수 파일을 추가해야 합니다.
|
|
156
|
+
|
|
157
|
+
```tsx fileName="src/index.tsx"
|
|
158
|
+
import { root } from "@lynx-js/react";
|
|
159
|
+
|
|
160
|
+
import { App } from "./App.js";
|
|
161
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
162
|
+
import { intlayerPolyfill } from "lynx-intlayer";
|
|
163
|
+
|
|
164
|
+
intlayerPolyfill();
|
|
165
|
+
|
|
166
|
+
root.render(
|
|
167
|
+
<IntlayerProvider>
|
|
168
|
+
<App />
|
|
169
|
+
</IntlayerProvider>
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
if (import.meta.webpackHot) {
|
|
173
|
+
import.meta.webpackHot.accept();
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
</Step>
|
|
178
|
+
|
|
179
|
+
<Step number={5} title="콘텐츠 선언">
|
|
180
|
+
|
|
181
|
+
프로젝트의 어느 곳이든(일반적으로 `src/` 내) Intlayer가 지원하는 모든 확장명 형식을 사용하여 **콘텐츠 선언** 파일을 생성합니다:
|
|
90
182
|
|
|
91
183
|
- `.content.json`
|
|
92
184
|
- `.content.jsonc`
|
|
@@ -114,12 +206,13 @@ const appContent = {
|
|
|
114
206
|
content: {
|
|
115
207
|
title: "React",
|
|
116
208
|
subtitle: t({
|
|
209
|
+
ko: "Lynx에서",
|
|
117
210
|
en: "on Lynx",
|
|
118
211
|
fr: "sur Lynx",
|
|
119
212
|
es: "en Lynx",
|
|
120
213
|
}),
|
|
121
214
|
description: t({
|
|
122
|
-
ko: "로고를
|
|
215
|
+
ko: "로고를 탭하고 즐겨보세요!",
|
|
123
216
|
en: "Tap the logo and have fun!",
|
|
124
217
|
fr: "Appuyez sur le logo et amusez-vous!",
|
|
125
218
|
es: "¡Toca el logo y diviértete!",
|
|
@@ -133,7 +226,7 @@ const appContent = {
|
|
|
133
226
|
}),
|
|
134
227
|
" src/App.tsx ",
|
|
135
228
|
t({
|
|
136
|
-
ko: "업데이트를
|
|
229
|
+
ko: "업데이트를 보려면!",
|
|
137
230
|
en: "to see updates!",
|
|
138
231
|
fr: "pour voir les mises à jour!",
|
|
139
232
|
es: "para ver actualizaciones!",
|
|
@@ -159,50 +252,50 @@ export default appContent;
|
|
|
159
252
|
"fr": "sur Lynx",
|
|
160
253
|
"es": "en Lynx"
|
|
161
254
|
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
"description": {
|
|
165
|
-
"nodeType": "translation",
|
|
166
|
-
"translation": {
|
|
167
|
-
"ko": "로고를 누르고 즐기세요!",
|
|
168
|
-
"en": "Tap the logo and have fun!",
|
|
169
|
-
"fr": "Appuyez sur le logo et amusez-vous!",
|
|
170
|
-
"es": "¡Toca el logo y diviértete!"
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
"hint": [
|
|
174
|
-
{
|
|
255
|
+
},
|
|
256
|
+
"description": {
|
|
175
257
|
"nodeType": "translation",
|
|
176
258
|
"translation": {
|
|
177
|
-
"ko": "
|
|
178
|
-
"en": "
|
|
179
|
-
"fr": "
|
|
180
|
-
"es": "
|
|
259
|
+
"ko": "로고를 탭하고 즐겨보세요!",
|
|
260
|
+
"en": "Tap the logo and have fun!",
|
|
261
|
+
"fr": "Appuyez sur le logo et amusez-vous!",
|
|
262
|
+
"es": "¡Toca el logo y diviértete!"
|
|
181
263
|
}
|
|
182
264
|
},
|
|
183
|
-
"
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
265
|
+
"hint": [
|
|
266
|
+
{
|
|
267
|
+
"nodeType": "translation",
|
|
268
|
+
"translation": {
|
|
269
|
+
"ko": "편집",
|
|
270
|
+
"en": "Edit",
|
|
271
|
+
"fr": "Modifier",
|
|
272
|
+
"es": "Editar"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
" src/App.tsx ",
|
|
276
|
+
{
|
|
277
|
+
"nodeType": "translation",
|
|
278
|
+
"translation": {
|
|
279
|
+
"ko": "업데이트를 보려면!",
|
|
280
|
+
"en": "to see updates!",
|
|
281
|
+
"fr": "pour voir les mises à jour!",
|
|
282
|
+
"es": "para ver actualizaciones!"
|
|
283
|
+
}
|
|
191
284
|
}
|
|
192
|
-
|
|
193
|
-
|
|
285
|
+
]
|
|
286
|
+
}
|
|
194
287
|
}
|
|
195
288
|
```
|
|
196
289
|
|
|
197
|
-
> 콘텐츠 선언에 대한 자세한 내용은 [Intlayer
|
|
290
|
+
> 콘텐츠 선언에 대한 자세한 내용은 [Intlayer 콘텐츠 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)를 참조하세요.
|
|
198
291
|
|
|
199
292
|
---
|
|
200
293
|
|
|
201
|
-
|
|
294
|
+
</Step>
|
|
202
295
|
|
|
203
|
-
<Step number={
|
|
296
|
+
<Step number={6} title="컴포넌트에서 Intlayer 사용">
|
|
204
297
|
|
|
205
|
-
`useIntlayer` 훅을
|
|
298
|
+
자식 컴포넌트에서 `useIntlayer` 훅을 사용하여 지역화된 콘텐츠를 얻습니다.
|
|
206
299
|
|
|
207
300
|
```tsx fileName="src/App.tsx"
|
|
208
301
|
import { useCallback, useState } from "@lynx-js/react";
|
|
@@ -217,8 +310,9 @@ import { LocaleSwitcher } from "./components/LocaleSwitcher.jsx";
|
|
|
217
310
|
export const App = () => {
|
|
218
311
|
const [alterLogo, setAlterLogo] = useState(false);
|
|
219
312
|
const { title, subtitle, description, hint } = useIntlayer("app");
|
|
313
|
+
|
|
220
314
|
const onTap = useCallback(() => {
|
|
221
|
-
|
|
315
|
+
"background only";
|
|
222
316
|
setAlterLogo(!alterLogo);
|
|
223
317
|
}, [alterLogo]);
|
|
224
318
|
|
|
@@ -254,13 +348,13 @@ export const App = () => {
|
|
|
254
348
|
};
|
|
255
349
|
```
|
|
256
350
|
|
|
257
|
-
> 문자열 기반
|
|
351
|
+
> 문자열 기반 props(예: 버튼의 `title` 또는 `Text` 컴포넌트의 `children`)에서 `content.someKey`를 사용할 때는 **실제 문자열을 얻기 위해 `content.someKey.value`를 호출합니다**.
|
|
258
352
|
|
|
259
353
|
---
|
|
260
354
|
|
|
261
355
|
</Step>
|
|
262
356
|
|
|
263
|
-
<Step number={
|
|
357
|
+
<Step number={7} title="앱 로케일 변경" isOptional={true}>
|
|
264
358
|
|
|
265
359
|
컴포넌트 내에서 로케일을 전환하려면 `useLocale` 훅의 `setLocale` 메서드를 사용할 수 있습니다:
|
|
266
360
|
|
|
@@ -299,7 +393,7 @@ export const LocaleSwitcher: FC = () => {
|
|
|
299
393
|
};
|
|
300
394
|
```
|
|
301
395
|
|
|
302
|
-
|
|
396
|
+
이것은 Intlayer 콘텐츠를 사용하는 모든 컴포넌트의 다시 렌더링을 트리거하며, 이제 새로운 로케일에 대한 번역을 표시합니다.
|
|
303
397
|
|
|
304
398
|
> 자세한 내용은 [`useLocale` 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/react-intlayer/useLocale.md)를 참조하세요.
|
|
305
399
|
|
|
@@ -30,34 +30,7 @@ history:
|
|
|
30
30
|
author: aymericzip
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
# Intlayer
|
|
34
|
-
|
|
35
|
-
<Tabs defaultTab="code">
|
|
36
|
-
<Tab label="코드" value="code">
|
|
37
|
-
|
|
38
|
-
<iframe
|
|
39
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-next-14-template?file=intlayer.config.ts"
|
|
40
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
41
|
-
title="Demo CodeSandbox - Intlayer"
|
|
42
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
43
|
-
loading="lazy"
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
</Tab>
|
|
47
|
-
<Tab label="데모" value="demo">
|
|
48
|
-
|
|
49
|
-
<iframe
|
|
50
|
-
src="https://intlayer-next-14-template.vercel.app"
|
|
51
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
52
|
-
title="데모 - intlayer-next-14-template"
|
|
53
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
54
|
-
loading="lazy"
|
|
55
|
-
/>
|
|
56
|
-
|
|
57
|
-
</Tab>
|
|
58
|
-
</Tabs>
|
|
59
|
-
|
|
60
|
-
GitHub에서 [애플리케이션 템플릿](https://github.com/aymericzip/intlayer-next-14-template)을 확인하세요.
|
|
33
|
+
# Intlayer를 사용하여 Next.js 14 및 App Router 웹사이트 번역 | 국제화 (i18n)
|
|
61
34
|
|
|
62
35
|
## 목차
|
|
63
36
|
|
|
@@ -31,39 +31,7 @@ history:
|
|
|
31
31
|
author: aymericzip
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
# Intlayer
|
|
35
|
-
|
|
36
|
-
<Tabs defaultTab="video">
|
|
37
|
-
<Tab label="동영상" value="video">
|
|
38
|
-
|
|
39
|
-
<iframe title="Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/e_PPG7PTqGU?autoplay=0&origin=https://intlayer.org&controls=0&rel=1"/>
|
|
40
|
-
|
|
41
|
-
</Tab>
|
|
42
|
-
<Tab label="코드" value="code">
|
|
43
|
-
|
|
44
|
-
<iframe
|
|
45
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-next-15-template?file=intlayer.config.ts"
|
|
46
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
47
|
-
title="Demo CodeSandbox - Intlayer"
|
|
48
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
49
|
-
loading="lazy"
|
|
50
|
-
/>
|
|
51
|
-
|
|
52
|
-
</Tab>
|
|
53
|
-
<Tab label="데모" value="demo">
|
|
54
|
-
|
|
55
|
-
<iframe
|
|
56
|
-
src="https://next-15-intlayer-template-xt83.vercel.app"
|
|
57
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
58
|
-
title="데모 - intlayer-next-15-template"
|
|
59
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
60
|
-
loading="lazy"
|
|
61
|
-
/>
|
|
62
|
-
|
|
63
|
-
</Tab>
|
|
64
|
-
</Tabs>
|
|
65
|
-
|
|
66
|
-
GitHub에서 [애플리케이션 템플릿](https://github.com/aymericzip/intlayer-next-15-template)을 확인하세요.
|
|
34
|
+
# Intlayer를 사용하여 Next.js 15 웹사이트 번역하기 | 국제화 (i18n)
|
|
67
35
|
|
|
68
36
|
## 목차
|
|
69
37
|
|
|
@@ -183,204 +183,56 @@ app/
|
|
|
183
183
|
- `_index` - 인덱스 경로 (부모 경로에서 렌더링)
|
|
184
184
|
- `.` (점) - 경로 세그먼트 구분 (예: `($locale).about` → `/:locale?/about`)
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
#### Layout 컴포넌트
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
|
|
200
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
201
|
-
loading="lazy"
|
|
202
|
-
/>
|
|
203
|
-
|
|
204
|
-
</Tab>
|
|
205
|
-
<Tab label="데모" value="demo">
|
|
206
|
-
|
|
207
|
-
<iframe
|
|
208
|
-
src="https://intlayer-react-router-v7.vercel.app"
|
|
209
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
210
|
-
title="데모 - intlayer-react-router-v7-template"
|
|
211
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
212
|
-
loading="lazy"
|
|
213
|
-
/>
|
|
214
|
-
|
|
215
|
-
</Tab>
|
|
216
|
-
</Tabs>
|
|
217
|
-
|
|
218
|
-
See [Application Template](https://github.com/aymericzip/intlayer-react-router-v7-template) on GitHub.
|
|
219
|
-
|
|
220
|
-
애플리케이션의 언어를 구성하기 위한 설정 파일을 만드세요:
|
|
221
|
-
|
|
222
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
223
|
-
import { type IntlayerConfig, Locales } from "intlayer";
|
|
224
|
-
|
|
225
|
-
const config: IntlayerConfig = {
|
|
226
|
-
internationalization: {
|
|
227
|
-
defaultLocale: Locales.ENGLISH, // 기본 로케일 설정
|
|
228
|
-
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // 지원하는 로케일 목록
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
export default config;
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
> 이 구성 파일을 통해 지역화된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자 설정, 콘솔에서 Intlayer 로그 비활성화 등 다양한 설정을 할 수 있습니다. 사용 가능한 모든 매개변수 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
|
|
236
|
-
|
|
237
|
-
<Steps>
|
|
238
|
-
|
|
239
|
-
<Step number={3} title="Vite 구성에 Intlayer 통합하기">
|
|
240
|
-
|
|
241
|
-
구성에 intlayer 플러그인을 추가하세요:
|
|
242
|
-
|
|
243
|
-
```typescript fileName="vite.config.ts"
|
|
244
|
-
import { reactRouter } from "@react-router/dev/vite";
|
|
245
|
-
import { defineConfig } from "vite";
|
|
246
|
-
import { intlayer } from "vite-intlayer";
|
|
247
|
-
|
|
248
|
-
export default defineConfig({
|
|
249
|
-
plugins: [reactRouter(), intlayer()],
|
|
250
|
-
});
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
> `intlayer()` Vite 플러그인은 Intlayer를 Vite와 통합하는 데 사용됩니다. 이 플러그인은 콘텐츠 선언 파일의 빌드를 보장하고 개발 모드에서 이를 모니터링합니다. 또한 Vite 애플리케이션 내에서 Intlayer 환경 변수를 정의하며, 성능 최적화를 위한 별칭(alias)도 제공합니다.
|
|
254
|
-
|
|
255
|
-
</Step>
|
|
256
|
-
|
|
257
|
-
</Steps>
|
|
258
|
-
|
|
259
|
-
<Steps>
|
|
260
|
-
|
|
261
|
-
<Step number={4} title="React Router v7 라우트 구성">
|
|
262
|
-
|
|
263
|
-
로케일 인식 라우트로 라우팅 구성을 설정하세요:
|
|
264
|
-
|
|
265
|
-
```typescript fileName="app/routes.ts"
|
|
266
|
-
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
267
|
-
|
|
268
|
-
export default [
|
|
269
|
-
layout("routes/layout.tsx", [
|
|
270
|
-
route("/:lang?", "routes/page.tsx"), // 지역화된 홈 페이지
|
|
271
|
-
route("/:lang?/about", "routes/about/page.tsx"), // 지역화된 소개 페이지
|
|
272
|
-
]),
|
|
273
|
-
] satisfies RouteConfig;
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
</Step>
|
|
277
|
-
|
|
278
|
-
<Step number={5} title="컴포넌트 콘텐츠 추출" isOptional={true}>
|
|
279
|
-
|
|
280
|
-
기존 코드베이스가 있는 경우 수천 개의 파일을 변환하는 데 시간이 많이 걸릴 수 있습니다.
|
|
281
|
-
|
|
282
|
-
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를 추출하기 위한 [컴파일러](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md) / [추출기](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/extract.md)를 제안합니다.
|
|
283
|
-
|
|
284
|
-
설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수 있습니다.
|
|
285
|
-
|
|
286
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
287
|
-
import { type IntlayerConfig } from "intlayer";
|
|
288
|
-
|
|
289
|
-
const config: IntlayerConfig = {
|
|
290
|
-
// ... 나머지 구성
|
|
291
|
-
compiler: {
|
|
292
|
-
/**
|
|
293
|
-
* 컴파일러 활성화 여부를 나타냅니다.
|
|
294
|
-
*/
|
|
295
|
-
enabled: true,
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* 출력 파일 경로를 정의합니다.
|
|
299
|
-
*/
|
|
300
|
-
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
304
|
-
*/
|
|
305
|
-
saveComponents: false,
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* 사전 키 접두사
|
|
309
|
-
*/
|
|
310
|
-
dictionaryKeyPrefix: "",
|
|
311
|
-
},
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
export default config;
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
<Tabs>
|
|
318
|
-
<Tab value='추출 명령'>
|
|
319
|
-
|
|
320
|
-
컴포넌트를 변환하고 콘텐츠를 추출하기 위해 추출기를 실행합니다
|
|
321
|
-
|
|
322
|
-
```bash packageManager="npm"
|
|
323
|
-
npx intlayer extract
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
```bash packageManager="pnpm"
|
|
327
|
-
pnpm intlayer extract
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
```bash packageManager="yarn"
|
|
331
|
-
yarn intlayer extract
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
```bash packageManager="bun"
|
|
335
|
-
bun x intlayer extract
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
</Tab>
|
|
339
|
-
<Tab value='Babel 컴파일러'>
|
|
340
|
-
|
|
341
|
-
> Since v9, the `intlayerCompiler` is included in the `intlayer` plugin. So you don't need to add it manually.
|
|
188
|
+
```tsx fileName="app/root.tsx"
|
|
189
|
+
import { getLocaleFromPath } from "intlayer";
|
|
190
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
191
|
+
import {
|
|
192
|
+
isRouteErrorResponse,
|
|
193
|
+
Meta,
|
|
194
|
+
Outlet,
|
|
195
|
+
Scripts,
|
|
196
|
+
ScrollRestoration,
|
|
197
|
+
useLoaderData,
|
|
198
|
+
} from "react-router";
|
|
342
199
|
|
|
343
|
-
|
|
200
|
+
import type { Route } from "./+types/root";
|
|
344
201
|
|
|
345
|
-
|
|
346
|
-
import { defineConfig } from "vite";
|
|
347
|
-
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
202
|
+
import "./app.css";
|
|
348
203
|
|
|
349
|
-
|
|
350
|
-
plugins: [
|
|
351
|
-
intlayer(),
|
|
352
|
-
intlayerCompiler(), // Adds the compiler plugin
|
|
353
|
-
],
|
|
354
|
-
});
|
|
355
|
-
```
|
|
204
|
+
// ... 변경되지 않은 App, links 및 ErrorBoundary 코드
|
|
356
205
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
```
|
|
206
|
+
export async function loader({ request }: Route.LoaderArgs) {
|
|
207
|
+
const locale = getLocaleFromPath(request.url);
|
|
360
208
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
```
|
|
209
|
+
return { locale };
|
|
210
|
+
}
|
|
364
211
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
212
|
+
export function Layout({
|
|
213
|
+
children,
|
|
214
|
+
}: { children: React.ReactNode } & Route.ComponentProps) {
|
|
215
|
+
const data = useLoaderData<typeof loader>();
|
|
216
|
+
const { locale } = data ?? {};
|
|
368
217
|
|
|
369
|
-
|
|
370
|
-
|
|
218
|
+
return (
|
|
219
|
+
<html lang={locale}>
|
|
220
|
+
<head>
|
|
221
|
+
<meta charSet="utf-8" />
|
|
222
|
+
<meta content="width=device-width, initial-scale=1" name="viewport" />
|
|
223
|
+
<Meta />
|
|
224
|
+
<Links />
|
|
225
|
+
</head>
|
|
226
|
+
<body>
|
|
227
|
+
<IntlayerProvider locale={locale}>{children}</IntlayerProvider>
|
|
228
|
+
<ScrollRestoration />
|
|
229
|
+
<Scripts />
|
|
230
|
+
</body>
|
|
231
|
+
</html>
|
|
232
|
+
);
|
|
233
|
+
}
|
|
371
234
|
```
|
|
372
235
|
|
|
373
|
-
</Tab>
|
|
374
|
-
</Tabs>
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
</Step>
|
|
379
|
-
|
|
380
|
-
<Step number={5} title="레이아웃 컴포넌트 생성">
|
|
381
|
-
|
|
382
|
-
루트 레이아웃과 로케일별 레이아웃을 설정하세요:
|
|
383
|
-
|
|
384
236
|
#### 루트 레이아웃
|
|
385
237
|
|
|
386
238
|
```tsx fileName="app/routes/layout.tsx"
|