@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
|
@@ -53,9 +53,68 @@ author: aymericzip
|
|
|
53
53
|
|
|
54
54
|
<TOC/>
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
## 为什么选择 Intlayer 而不是其他方案?
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
与 `@solid-primitives/i18n` 或 `i18next` 等主要解决方案相比,Intlayer 是一个集成了优化功能的解决方案,例如:
|
|
59
|
+
|
|
60
|
+
<AccordionGroup>
|
|
61
|
+
|
|
62
|
+
<Accordion header="完整的 Solid 支持">
|
|
63
|
+
|
|
64
|
+
Intlayer 针对 Solid 进行了优化,提供 **组件级内容作用域**、**响应式翻译** 以及国际化 (i18n) 扩展所需的所有功能。
|
|
65
|
+
|
|
66
|
+
</Accordion>
|
|
67
|
+
|
|
68
|
+
<Accordion header="Bundle 大小">
|
|
69
|
+
|
|
70
|
+
不再将庞大的 JSON 文件加载到页面中,只加载必要的内容。Intlayer 帮助 **将 bundle 和页面大小减少高达 50%**。
|
|
71
|
+
|
|
72
|
+
</Accordion>
|
|
73
|
+
|
|
74
|
+
<Accordion header="可维护性">
|
|
75
|
+
|
|
76
|
+
对应用程序的内容进行作用域划分 **便于维护** 大型应用程序。您可以复制或删除单个功能文件夹,而无需费力审查整个内容代码库。此外,Intlayer **完全类型化**,确保内容的准确性。
|
|
77
|
+
|
|
78
|
+
</Accordion>
|
|
79
|
+
|
|
80
|
+
<Accordion header="AI Agent">
|
|
81
|
+
|
|
82
|
+
将内容共置 **减少了** 大型语言模型 (LLMs) **所需的上下文**。Intlayer 还提供一套工具,例如用于测试缺失翻译的 **CLI**、**[LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/lsp.md)**、**[MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/mcp_server.md)** 和 **[agent skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/agent_skills.md)**,使 AI agents 的开发者体验 (DX) 更加顺畅。
|
|
83
|
+
|
|
84
|
+
</Accordion>
|
|
85
|
+
|
|
86
|
+
<Accordion header="自动化">
|
|
87
|
+
|
|
88
|
+
在 CI/CD 管道中使用自动化翻译,选择您的 LLM,按照 AI 提供商的成本计费。Intlayer 还提供 **编译器** 来自动提取内容,以及一个 [web 平台](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md) 来帮助 **后台翻译**。
|
|
89
|
+
|
|
90
|
+
</Accordion>
|
|
91
|
+
|
|
92
|
+
<Accordion header="性能">
|
|
93
|
+
|
|
94
|
+
将庞大的 JSON 文件连接到组件可能导致性能和反应性问题。Intlayer 在构建时优化了内容加载。
|
|
95
|
+
|
|
96
|
+
</Accordion>
|
|
97
|
+
|
|
98
|
+
<Accordion header="与非开发人员协作扩展">
|
|
99
|
+
|
|
100
|
+
Intlayer 不仅仅是一个 i18n 解决方案,它还提供 **自托管 [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)** 和 **[完整 CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)** 来帮助您 **实时** 管理多语言内容,使与翻译人员、文案撰写人和其他团队成员的协作无缝进行。内容可以本地存储和/或远程存储。
|
|
101
|
+
|
|
102
|
+
</Accordion>
|
|
103
|
+
</AccordionGroup>
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Vite 和 Solid 应用程序中 Intlayer 的分步设置指南
|
|
108
|
+
|
|
109
|
+
## 目录
|
|
110
|
+
|
|
111
|
+
<TOC/>
|
|
112
|
+
|
|
113
|
+
<Steps>
|
|
114
|
+
|
|
115
|
+
<Step number={1} title="安装依赖">
|
|
116
|
+
|
|
117
|
+
使用 npm 安装必要的包:
|
|
59
118
|
|
|
60
119
|
```bash packageManager="npm"
|
|
61
120
|
npx intlayer init --interactive
|
|
@@ -73,9 +132,9 @@ yarn dlx intlayer@canary init --interactive
|
|
|
73
132
|
bunx intlayer@canary init --interactive
|
|
74
133
|
```
|
|
75
134
|
|
|
76
|
-
> `--interactive` 标志是可选的。如果您是 AI
|
|
135
|
+
> `--interactive` 标志是可选的。如果您是 AI agent,请使用 `intlayer-cli init`。
|
|
77
136
|
|
|
78
|
-
>
|
|
137
|
+
> 此命令将检测您的环境并安装必要的包。例如:
|
|
79
138
|
|
|
80
139
|
```bash packageManager="npm"
|
|
81
140
|
npm install intlayer solid-intlayer
|
|
@@ -98,17 +157,20 @@ bun add vite-intlayer --dev
|
|
|
98
157
|
```
|
|
99
158
|
|
|
100
159
|
- **intlayer**
|
|
101
|
-
|
|
160
|
+
|
|
161
|
+
核心包,为配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译和 [CLI 命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)提供国际化工具。
|
|
102
162
|
|
|
103
163
|
- **solid-intlayer**
|
|
104
|
-
将 Intlayer
|
|
164
|
+
将 Intlayer 与 Solid 应用程序集成的包。它为 Solid 国际化提供上下文提供者和 hooks。
|
|
105
165
|
|
|
106
166
|
- **vite-intlayer**
|
|
107
|
-
|
|
167
|
+
包括用于将 Intlayer 与 [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production) 集成的 Vite 插件,以及用于检测用户首选语言、管理 cookie 和处理 URL 重定向的中间件。
|
|
168
|
+
|
|
169
|
+
</Step>
|
|
108
170
|
|
|
109
|
-
|
|
171
|
+
<Step number={2} title="配置您的项目">
|
|
110
172
|
|
|
111
|
-
|
|
173
|
+
创建一个配置文件来配置您的应用程序的语言:
|
|
112
174
|
|
|
113
175
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
114
176
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -128,35 +190,71 @@ const config: IntlayerConfig = {
|
|
|
128
190
|
export default config;
|
|
129
191
|
```
|
|
130
192
|
|
|
131
|
-
>
|
|
193
|
+
> 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
132
194
|
|
|
133
|
-
|
|
195
|
+
</Step>
|
|
134
196
|
|
|
135
|
-
|
|
197
|
+
<Step number={3} title="在您的 Vite 配置中集成 Intlayer">
|
|
198
|
+
|
|
199
|
+
将 intlayer 插件添加到您的配置中。
|
|
136
200
|
|
|
137
201
|
```typescript fileName="vite.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
138
202
|
import { defineConfig } from "vite";
|
|
139
|
-
import
|
|
203
|
+
import solid from "vite-plugin-solid";
|
|
140
204
|
import { intlayer } from "vite-intlayer";
|
|
141
205
|
|
|
142
206
|
// https://vitejs.dev/config/
|
|
143
207
|
export default defineConfig({
|
|
144
|
-
plugins: [
|
|
208
|
+
plugins: [solid(), intlayer()],
|
|
145
209
|
});
|
|
146
210
|
```
|
|
147
211
|
|
|
148
|
-
> `intlayer()`
|
|
212
|
+
> `intlayer()` Vite 插件用于将 Intlayer 与 Vite 集成。它确保内容声明文件的构建,并在开发模式下监视它们。它在 Vite 应用程序中定义 Intlayer 环境变量。此外,它提供别名以优化性能。
|
|
213
|
+
|
|
214
|
+
</Step>
|
|
149
215
|
|
|
150
|
-
|
|
216
|
+
<Step number={4} title="声明您的内容">
|
|
151
217
|
|
|
152
|
-
|
|
218
|
+
创建和管理您的内容声明来存储翻译:
|
|
153
219
|
|
|
154
220
|
```tsx fileName="src/app.content.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
|
|
155
221
|
import { t, type Dictionary } from "intlayer";
|
|
156
222
|
|
|
157
223
|
const appContent = {
|
|
158
224
|
key: "app",
|
|
159
|
-
content: {
|
|
225
|
+
content: {
|
|
226
|
+
viteLogo: t({
|
|
227
|
+
zh: "Vite logo",
|
|
228
|
+
en: "Vite logo",
|
|
229
|
+
fr: "Logo Vite",
|
|
230
|
+
es: "Logo Vite",
|
|
231
|
+
}),
|
|
232
|
+
solidLogo: t({
|
|
233
|
+
zh: "Solid logo",
|
|
234
|
+
en: "Solid logo",
|
|
235
|
+
fr: "Logo Solid",
|
|
236
|
+
es: "Logo Solid",
|
|
237
|
+
}),
|
|
238
|
+
title: "Vite + Solid",
|
|
239
|
+
count: t({
|
|
240
|
+
zh: "计数为 {{count}}",
|
|
241
|
+
en: "count is {{count}}",
|
|
242
|
+
fr: "le compte est {{count}}",
|
|
243
|
+
es: "el recuento es {{count}}",
|
|
244
|
+
}),
|
|
245
|
+
edit: t({
|
|
246
|
+
zh: "编辑 src/App.tsx 并保存以测试 HMR",
|
|
247
|
+
en: "Edit src/App.tsx and save to test HMR",
|
|
248
|
+
fr: "Éditez src/App.tsx et enregistrez pour tester HMR",
|
|
249
|
+
es: "Edita src/App.tsx y guarda para probar HMR",
|
|
250
|
+
}),
|
|
251
|
+
readTheDocs: t({
|
|
252
|
+
zh: "点击 Vite 和 Solid logo 以了解更多",
|
|
253
|
+
en: "Click on the Vite and Solid logos to learn more",
|
|
254
|
+
fr: "Cliquez sur les logos Vite et Solid pour en savoir plus",
|
|
255
|
+
es: "Haga clic en los logotipos de Vite and Solid para obtener más información",
|
|
256
|
+
}),
|
|
257
|
+
},
|
|
160
258
|
} satisfies Dictionary;
|
|
161
259
|
|
|
162
260
|
export default appContent;
|
|
@@ -166,15 +264,72 @@ export default appContent;
|
|
|
166
264
|
{
|
|
167
265
|
"$schema": "https://intlayer.org/schema.json",
|
|
168
266
|
"key": "app",
|
|
169
|
-
"content": {
|
|
267
|
+
"content": {
|
|
268
|
+
"viteLogo": {
|
|
269
|
+
"nodeType": "translation",
|
|
270
|
+
"translation": {
|
|
271
|
+
"zh": "Vite logo",
|
|
272
|
+
"en": "Vite logo",
|
|
273
|
+
"fr": "Logo Vite",
|
|
274
|
+
"es": "Logo Vite"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"solidLogo": {
|
|
278
|
+
"nodeType": "translation",
|
|
279
|
+
"translation": {
|
|
280
|
+
"zh": "Solid logo",
|
|
281
|
+
"en": "Solid logo",
|
|
282
|
+
"fr": "Logo Solid",
|
|
283
|
+
"es": "Logo Solid"
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
"title": {
|
|
287
|
+
"nodeType": "translation",
|
|
288
|
+
"translation": {
|
|
289
|
+
"zh": "Vite + Solid",
|
|
290
|
+
"en": "Vite + Solid",
|
|
291
|
+
"fr": "Vite + Solid",
|
|
292
|
+
"es": "Vite + Solid"
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"count": {
|
|
296
|
+
"nodeType": "translation",
|
|
297
|
+
"translation": {
|
|
298
|
+
"zh": "计数为 {{count}}",
|
|
299
|
+
"en": "count is {{count}}",
|
|
300
|
+
"fr": "le compte est {{count}}",
|
|
301
|
+
"es": "el recuento es {{count}}"
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"edit": {
|
|
305
|
+
"nodeType": "translation",
|
|
306
|
+
"translation": {
|
|
307
|
+
"zh": "编辑 src/App.tsx 并保存以测试 HMR",
|
|
308
|
+
"en": "Edit src/App.tsx and save to test HMR",
|
|
309
|
+
"fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
|
|
310
|
+
"es": "Edita src/App.tsx y guarda para probar HMR"
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
"readTheDocs": {
|
|
314
|
+
"nodeType": "translation",
|
|
315
|
+
"translation": {
|
|
316
|
+
"zh": "点击 Vite 和 Solid logo 以了解更多",
|
|
317
|
+
"en": "Click on the Vite and Solid logos to learn more",
|
|
318
|
+
"fr": "Cliquez sur les logos Vite et Solid pour en savoir plus",
|
|
319
|
+
"es": "Haga clic en los logotipos de Vite and Solid para obtener más información"
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
170
323
|
}
|
|
171
324
|
```
|
|
172
325
|
|
|
173
|
-
>
|
|
326
|
+
> 您的内容声明可以在应用程序中的任何位置定义,只要它们包含在 `contentDir` 目录中(默认为 `./src`)。并且匹配内容声明文件扩展名(默认为 `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`)。
|
|
327
|
+
>
|
|
328
|
+
> 有关更多详细信息,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
|
|
174
329
|
|
|
175
|
-
>
|
|
330
|
+
</Step>
|
|
176
331
|
|
|
177
|
-
|
|
332
|
+
<Step number={5} title="在您的代码中使用 Intlayer">
|
|
178
333
|
|
|
179
334
|
在整个应用程序中访问您的内容字典:
|
|
180
335
|
|
|
@@ -224,9 +379,9 @@ const App: Component = () => (
|
|
|
224
379
|
export default App;
|
|
225
380
|
```
|
|
226
381
|
|
|
227
|
-
> 在 Solid 中,`useIntlayer`
|
|
382
|
+
> 在 Solid 中,`useIntlayer` 返回反应式内容(例如 `content`)。您可以直接访问其属性。
|
|
228
383
|
|
|
229
|
-
> 如果您想在 `string`
|
|
384
|
+
> 如果您想在 `string` 属性中使用您的内容,例如 `alt`、`title`、`href`、`aria-label` 等,您可以使用函数的值,如:
|
|
230
385
|
>
|
|
231
386
|
> ```html
|
|
232
387
|
> <img src="{content.image.src.value}" alt="{content.image.value}" />
|
|
@@ -234,9 +389,11 @@ export default App;
|
|
|
234
389
|
> <img src="{String(content.image.src)}" alt="{String(content.image)}" />
|
|
235
390
|
> ```
|
|
236
391
|
|
|
237
|
-
|
|
392
|
+
</Step>
|
|
393
|
+
|
|
394
|
+
<Step number={6} title="更改内容的语言" isOptional={true}>
|
|
238
395
|
|
|
239
|
-
|
|
396
|
+
要更改内容的语言,您可以使用 `useLocale` hook 提供的 `setLocale` 函数。此函数允许您设置应用程序的语言环境并相应地更新内容。
|
|
240
397
|
|
|
241
398
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
242
399
|
import { type Component, For } from "solid-js";
|
|
@@ -263,9 +420,11 @@ const LocaleSwitcher: Component = () => {
|
|
|
263
420
|
};
|
|
264
421
|
```
|
|
265
422
|
|
|
266
|
-
|
|
423
|
+
</Step>
|
|
267
424
|
|
|
268
|
-
|
|
425
|
+
<Step number={7} title="为您的应用程序添加本地化路由" isOptional={true}>
|
|
426
|
+
|
|
427
|
+
此步骤的目的是为每种语言创建独特的路由。这对 SEO 和 SEO 友好的 URL 很有用。
|
|
269
428
|
示例:
|
|
270
429
|
|
|
271
430
|
```plaintext
|
|
@@ -276,13 +435,13 @@ const LocaleSwitcher: Component = () => {
|
|
|
276
435
|
|
|
277
436
|
要为您的应用程序添加本地化路由,您可以使用 `@solidjs/router`。
|
|
278
437
|
|
|
279
|
-
|
|
438
|
+
首先,安装必要的依赖:
|
|
280
439
|
|
|
281
440
|
```bash packageManager="npm"
|
|
282
441
|
npm install @solidjs/router
|
|
283
442
|
```
|
|
284
443
|
|
|
285
|
-
|
|
444
|
+
然后,使用 `Router` 包装您的应用程序,并使用 `localeMap` 定义您的路由:
|
|
286
445
|
|
|
287
446
|
```tsx fileName="src/index.tsx" codeFormat="typescript"
|
|
288
447
|
import { render } from "solid-js/web";
|
|
@@ -328,9 +487,11 @@ const App: Component = () => (
|
|
|
328
487
|
export default App;
|
|
329
488
|
```
|
|
330
489
|
|
|
331
|
-
|
|
490
|
+
</Step>
|
|
491
|
+
|
|
492
|
+
<Step number={8} title="当语言环境更改时更改 URL" isOptional={true}>
|
|
332
493
|
|
|
333
|
-
要在语言环境更改时更改 URL,您可以使用 `useLocale`
|
|
494
|
+
要在语言环境更改时更改 URL,您可以使用 `useLocale` hook 提供的 `onLocaleChange` 属性。您可以使用 `@solidjs/router` 中的 `useNavigate` 和 `useLocation` hooks 来更新 URL 路径。
|
|
334
495
|
|
|
335
496
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
336
497
|
import { type Component, For } from "solid-js";
|
|
@@ -365,6 +526,275 @@ const LocaleSwitcher: Component = () => {
|
|
|
365
526
|
};
|
|
366
527
|
```
|
|
367
528
|
|
|
529
|
+
</Step>
|
|
530
|
+
|
|
531
|
+
<Step number={9} title="切换 HTML 语言和方向属性" isOptional={true}>
|
|
532
|
+
|
|
533
|
+
更新 `<html>` 标签的 `lang` 和 `dir` 属性以匹配当前的语言环境,以提高可访问性和 SEO。
|
|
534
|
+
|
|
535
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
536
|
+
import { createEffect, type Component } from "solid-js";
|
|
537
|
+
import { useLocale } from "solid-intlayer";
|
|
538
|
+
import { getHTMLTextDir } from "intlayer";
|
|
539
|
+
|
|
540
|
+
const AppContent: Component = () => {
|
|
541
|
+
const { locale } = useLocale();
|
|
542
|
+
|
|
543
|
+
createEffect(() => {
|
|
544
|
+
document.documentElement.lang = locale();
|
|
545
|
+
document.documentElement.dir = getHTMLTextDir(locale());
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
return (
|
|
549
|
+
// ... 您的应用程序内容
|
|
550
|
+
);
|
|
551
|
+
};
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
</Step>
|
|
555
|
+
|
|
556
|
+
<Step number={10} title="创建本地化链接组件" isOptional={true}>
|
|
557
|
+
|
|
558
|
+
创建一个自定义 `Link` 组件,该组件自动为内部 URL 添加当前语言的前缀。
|
|
559
|
+
|
|
560
|
+
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
561
|
+
import { type ParentComponent } from "solid-js";
|
|
562
|
+
import { A, type AnchorProps } from "@solidjs/router";
|
|
563
|
+
import { getLocalizedUrl } from "intlayer";
|
|
564
|
+
import { useLocale } from "solid-intlayer";
|
|
565
|
+
|
|
566
|
+
export const Link: ParentComponent<AnchorProps> = (props) => {
|
|
567
|
+
const { locale } = useLocale();
|
|
568
|
+
|
|
569
|
+
const isExternal = () => props.href.startsWith("http");
|
|
570
|
+
const localizedHref = () =>
|
|
571
|
+
isExternal() ? props.href : getLocalizedUrl(props.href, locale());
|
|
572
|
+
|
|
573
|
+
return <A {...props} href={localizedHref()} />;
|
|
574
|
+
};
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
同时,您也可以使用 `intlayerProxy` 为您的应用程序添加服务器端路由。此插件将根据 URL 自动检测当前语言环境并设置相应的语言环境 cookie。如果未指定语言环境,该插件将根据用户的浏览器语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。
|
|
578
|
+
|
|
579
|
+
> 注意:要在生产中使用 `intlayerProxy`,您需要将 `vite-intlayer` 包从 `devDependencies` 切换到 `dependencies`。
|
|
580
|
+
|
|
581
|
+
> 自从 Intlayer v9 以来,`intlayerProxy()` 直接捆绑到 `intlayer()` 插件中,并通过 `routing.enableProxy` 选项(默认为 `true`)默认启用。如下所示单独注册它现在是可选的——保留它是为了向后兼容性以及需要控制插件顺序的设置。设置 `routing.enableProxy: false` 以退出。请参阅 [v9 发布说明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/releases/v9.md)。
|
|
582
|
+
|
|
583
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
584
|
+
import { defineConfig } from "vite";
|
|
585
|
+
import solid from "vite-plugin-solid";
|
|
586
|
+
import { intlayer } from "vite-intlayer";
|
|
587
|
+
|
|
588
|
+
// https://vitejs.dev/config/
|
|
589
|
+
export default defineConfig({
|
|
590
|
+
plugins: [
|
|
591
|
+
solid(),
|
|
592
|
+
intlayer({
|
|
593
|
+
proxy: {
|
|
594
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
595
|
+
},
|
|
596
|
+
}),
|
|
597
|
+
],
|
|
598
|
+
});
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
</Step>
|
|
602
|
+
|
|
603
|
+
<Step number={11} title="提取您的组件的内容" isOptional={true}>
|
|
604
|
+
|
|
605
|
+
如果您有现有的 codebase,转换数千个文件可能很耗时。
|
|
606
|
+
|
|
607
|
+
为了简化此过程,Intlayer 提供了一个 [compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md) / [extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md) 来转换您的组件并提取内容。
|
|
608
|
+
|
|
609
|
+
要设置它,您可以在 `intlayer.config.ts` 文件中添加 `compiler` 部分:
|
|
610
|
+
|
|
611
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
612
|
+
import { type IntlayerConfig } from "intlayer";
|
|
613
|
+
|
|
614
|
+
const config: IntlayerConfig = {
|
|
615
|
+
// ... 您的其他配置
|
|
616
|
+
compiler: {
|
|
617
|
+
/**
|
|
618
|
+
* 指示是否应启用编译器。
|
|
619
|
+
*/
|
|
620
|
+
enabled: true,
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* 定义输出文件路径
|
|
624
|
+
*/
|
|
625
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* 指示转换后是否应保存组件。
|
|
629
|
+
*
|
|
630
|
+
* - 如果为 `true`,编译器将重写磁盘中的组件文件。因此转换将是永久的,编译器将跳过下一个过程的转换。这样,编译器可以转换应用程序,然后可以将其删除。
|
|
631
|
+
*
|
|
632
|
+
* - 如果为 `false`,编译器将仅在构建输出中注入 `useIntlayer()` 函数调用,并保持基础 codebase 完整。转换仅在内存中进行。
|
|
633
|
+
*/
|
|
634
|
+
saveComponents: false,
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* 字典键前缀
|
|
638
|
+
*/
|
|
639
|
+
dictionaryKeyPrefix: "",
|
|
640
|
+
},
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
export default config;
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
<Tabs>
|
|
647
|
+
<Tab value='Extract command'>
|
|
648
|
+
|
|
649
|
+
运行提取器来转换您的组件并提取内容
|
|
650
|
+
|
|
651
|
+
```bash packageManager="npm"
|
|
652
|
+
npx intlayer extract
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
```bash packageManager="pnpm"
|
|
656
|
+
pnpm intlayer extract
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
```bash packageManager="yarn"
|
|
660
|
+
yarn intlayer extract
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
```bash packageManager="bun"
|
|
664
|
+
bun x intlayer extract
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
</Tab>
|
|
668
|
+
<Tab value='Babel compiler'>
|
|
669
|
+
|
|
670
|
+
> 自从 v9 以来,`intlayerCompiler` 已包含在 `intlayer` 插件中。因此您无需手动添加它。
|
|
671
|
+
|
|
672
|
+
更新您的 `vite.config.ts` 以包含 `intlayerCompiler` 插件:
|
|
673
|
+
|
|
674
|
+
```ts fileName="vite.config.ts"
|
|
675
|
+
import { defineConfig } from "vite";
|
|
676
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
677
|
+
|
|
678
|
+
export default defineConfig({
|
|
679
|
+
plugins: [
|
|
680
|
+
intlayer(),
|
|
681
|
+
intlayerCompiler(), // 添加编译器插件
|
|
682
|
+
],
|
|
683
|
+
});
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
```bash packageManager="npm"
|
|
687
|
+
npm run build # 或 npm run dev
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
```bash packageManager="pnpm"
|
|
691
|
+
pnpm run build # 或 pnpm run dev
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
```bash packageManager="yarn"
|
|
695
|
+
yarn build # 或 yarn dev
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
```bash packageManager="bun"
|
|
699
|
+
bun run build # 或 bun run dev
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
</Tab>
|
|
703
|
+
</Tabs>
|
|
704
|
+
</Step>
|
|
705
|
+
|
|
706
|
+
</Steps>
|
|
707
|
+
|
|
708
|
+
### 第3步:在你的 Vite 配置中集成 Intlayer
|
|
709
|
+
|
|
710
|
+
将 intlayer 插件添加到你的配置中。
|
|
711
|
+
|
|
712
|
+
```typescript fileName="vite.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
713
|
+
import { defineConfig } from "vite";
|
|
714
|
+
import react from "@vitejs/plugin-react-swc";
|
|
715
|
+
import { intlayer } from "vite-intlayer";
|
|
716
|
+
|
|
717
|
+
// https://vitejs.dev/config/
|
|
718
|
+
export default defineConfig({
|
|
719
|
+
plugins: [react(), intlayer()],
|
|
720
|
+
});
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
> `intlayer()` 是用于将 Intlayer 集成到 Vite 中的插件。它确保内容声明文件的构建,并在开发模式下监视这些文件。它在 Vite 应用中定义了 Intlayer 的环境变量。此外,它还提供别名以优化性能。
|
|
724
|
+
|
|
725
|
+
#### 网站地图
|
|
726
|
+
|
|
727
|
+
Intlayer 的网站地图生成器尊重您的语言环境设置,并包含爬虫程序的常见元数据。
|
|
728
|
+
|
|
729
|
+
> 生成的网站地图支持 `xhtml:link` 命名空间(hreflang XML 扩展)。与仅发出平面 URL 的基本生成器不同,Intlayer 在每个页面的每个本地化变体之间建立双向链接(例如 `/about`、`/fr/about` 或 `/about?lang=fr`,具体取决于您的路由模式),这有助于搜索引擎关联本地化 URL。
|
|
730
|
+
|
|
731
|
+
#### Robots.txt
|
|
732
|
+
|
|
733
|
+
使用 `getMultilingualUrls` 以便 `Disallow` 条目覆盖敏感路径的每个本地化拼写。
|
|
734
|
+
|
|
735
|
+
#### 1. 在项目根目录添加 `generate-seo.mjs`
|
|
736
|
+
|
|
737
|
+
```javascript fileName="generate-seo.mjs"
|
|
738
|
+
import fs from "fs";
|
|
739
|
+
import path from "path";
|
|
740
|
+
import { fileURLToPath } from "url";
|
|
741
|
+
import { generateSitemap, getMultilingualUrls } from "intlayer";
|
|
742
|
+
|
|
743
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
744
|
+
|
|
745
|
+
const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(
|
|
746
|
+
/\/$/,
|
|
747
|
+
""
|
|
748
|
+
);
|
|
749
|
+
|
|
750
|
+
const pathList = [
|
|
751
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
752
|
+
{ path: "/about", changefreq: "monthly", priority: 0.7 },
|
|
753
|
+
];
|
|
754
|
+
|
|
755
|
+
// 生成网站地图
|
|
756
|
+
const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });
|
|
757
|
+
fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);
|
|
758
|
+
|
|
759
|
+
// 获取所有多语言 URL
|
|
760
|
+
const getAllMultilingualUrls = (urls) =>
|
|
761
|
+
urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
|
|
762
|
+
|
|
763
|
+
const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);
|
|
764
|
+
|
|
765
|
+
// 生成 robots.txt
|
|
766
|
+
const robotsTxt = [
|
|
767
|
+
"User-agent: *",
|
|
768
|
+
"Allow: /",
|
|
769
|
+
...disallowedPaths.map((path) => `Disallow: ${path}`),
|
|
770
|
+
"",
|
|
771
|
+
`Sitemap: ${SITE_URL}/sitemap.xml`,
|
|
772
|
+
].join("\n");
|
|
773
|
+
|
|
774
|
+
fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);
|
|
775
|
+
|
|
776
|
+
console.log("SEO files generated successfully.");
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
必须安装 `intlayer` 以便脚本可以导入它。为生产环境设置环境变量中的 `SITE_URL`(例如在 CI 中)。
|
|
780
|
+
|
|
781
|
+
> 优先使用 Node ESM 的 `generate-seo.mjs`。如果改用 `generate-seo.js`,请确保在 `package.json` 中设置 `"type": "module"`,或使用 ESM 启用的方式运行 Node。
|
|
782
|
+
|
|
783
|
+
#### 2. 在 Vite 之前运行脚本
|
|
784
|
+
|
|
785
|
+
```json fileName="package.json"
|
|
786
|
+
{
|
|
787
|
+
"scripts": {
|
|
788
|
+
"dev": "vite",
|
|
789
|
+
"prebuild": "node generate-seo.mjs",
|
|
790
|
+
"build": "vite build",
|
|
791
|
+
"preview": "vite preview"
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
如果你使用 pnpm 或 yarn,请相应调整。你也可以从 CI 或其他步骤中调用相同的脚本,如果这适合你的工作流程。
|
|
797
|
+
|
|
368
798
|
### 配置 TypeScript
|
|
369
799
|
|
|
370
800
|
确保您的 TypeScript 配置包含自动生成的类型。
|