@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
|
@@ -70,9 +70,184 @@ Intlayer 不仅仅是一个 i18n 解决方案,还提供了一个**自托管的
|
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
## 在 Nuxt 应用中设置 Intlayer 的分步指南
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
<Tabs defaultTab="video">
|
|
76
|
+
<Tab label="视频" value="video">
|
|
77
|
+
|
|
78
|
+
<iframe title="How to translate an Nuxt and Vue app using Intlayer? Discover 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/nhUcUAVQ6eQ?autoplay=0&origin=https://intlayer.org&controls=0&rel=1"/>
|
|
79
|
+
|
|
80
|
+
</Tab>
|
|
81
|
+
<Tab label="代码" value="code">
|
|
82
|
+
|
|
83
|
+
<iframe
|
|
84
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-nuxt-4-template?file=intlayer.config.ts"
|
|
85
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
86
|
+
title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
|
|
87
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
88
|
+
loading="lazy"
|
|
89
|
+
/>
|
|
90
|
+
|
|
91
|
+
</Tab>
|
|
92
|
+
<Tab label="演示" value="demo">
|
|
93
|
+
|
|
94
|
+
<iframe
|
|
95
|
+
src="https://intlayer-nuxt-4-template.vercel.app"
|
|
96
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
97
|
+
title="Demo - intlayer-nuxt-4-template"
|
|
98
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
99
|
+
loading="lazy"
|
|
100
|
+
/>
|
|
101
|
+
|
|
102
|
+
</Tab>
|
|
103
|
+
</Tabs>
|
|
104
|
+
|
|
105
|
+
查看 GitHub 上的[应用模板](https://github.com/aymericzip/intlayer-nuxt-4-template)。
|
|
106
|
+
|
|
107
|
+
<Steps>
|
|
108
|
+
|
|
109
|
+
<Step number={1} title="安装依赖">
|
|
110
|
+
|
|
111
|
+
使用 npm 安装必要的包:
|
|
112
|
+
|
|
113
|
+
```bash packageManager="npm"
|
|
114
|
+
npx intlayer init --interactive
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```bash packageManager="pnpm"
|
|
118
|
+
pnpm dlx intlayer@canary init --interactive
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```bash packageManager="yarn"
|
|
122
|
+
yarn dlx intlayer@canary init --interactive
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```bash packageManager="bun"
|
|
126
|
+
bunx intlayer@canary init --interactive
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
> `--interactive` 标志是可选的。如果您是 AI 代理,请使用 `intlayer-cli init`。
|
|
130
|
+
|
|
131
|
+
> 此命令将检测您的环境并安装所需的包。例如:
|
|
132
|
+
|
|
133
|
+
```bash packageManager="npm"
|
|
134
|
+
npm install intlayer vue-intlayer
|
|
135
|
+
npm install --save-dev nuxt-intlayer
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```bash packageManager="pnpm"
|
|
139
|
+
pnpm add intlayer vue-intlayer
|
|
140
|
+
pnpm add --save-dev nuxt-intlayer
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```bash packageManager="yarn"
|
|
144
|
+
yarn add intlayer vue-intlayer
|
|
145
|
+
yarn add --save-dev nuxt-intlayer
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```bash packageManager="bun"
|
|
149
|
+
bun add intlayer vue-intlayer
|
|
150
|
+
bun add --dev nuxt-intlayer
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- **intlayer**
|
|
154
|
+
|
|
155
|
+
核心包,为配置管理、翻译、[内容声明](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)提供国际化工具。
|
|
156
|
+
|
|
157
|
+
- **vue-intlayer**
|
|
158
|
+
将 Intlayer 与 Vue 应用集成的包。为 Vue 组件提供 composables。
|
|
159
|
+
|
|
160
|
+
- **nuxt-intlayer**
|
|
161
|
+
将 Intlayer 与 Nuxt 应用集成的 Nuxt 模块。它提供自动设置、locale 检测中间件、cookie 管理和 URL 重定向。
|
|
162
|
+
|
|
163
|
+
</Step>
|
|
164
|
+
|
|
165
|
+
<Step number={2} title="配置您的项目">
|
|
166
|
+
|
|
167
|
+
创建一个配置文件来配置您的应用程序的语言:
|
|
168
|
+
|
|
169
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
170
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
171
|
+
|
|
172
|
+
const config: IntlayerConfig = {
|
|
173
|
+
internationalization: {
|
|
174
|
+
locales: [
|
|
175
|
+
Locales.ENGLISH,
|
|
176
|
+
Locales.FRENCH,
|
|
177
|
+
Locales.SPANISH,
|
|
178
|
+
// 您的其他 locales
|
|
179
|
+
],
|
|
180
|
+
defaultLocale: Locales.ENGLISH,
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export default config;
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
> 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
188
|
+
|
|
189
|
+
</Step>
|
|
190
|
+
|
|
191
|
+
<Step number={3} title="在您的 Nuxt 配置中集成 Intlayer">
|
|
192
|
+
|
|
193
|
+
将 intlayer 模块添加到您的 Nuxt 配置中:
|
|
194
|
+
|
|
195
|
+
```typescript fileName="nuxt.config.ts"
|
|
196
|
+
import { defineNuxtConfig } from "nuxt/config";
|
|
197
|
+
|
|
198
|
+
export default defineNuxtConfig({
|
|
199
|
+
// ... 您现有的 Nuxt 配置
|
|
200
|
+
modules: ["nuxt-intlayer"],
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
> `nuxt-intlayer` 模块自动处理 Intlayer 与 Nuxt 的集成。它设置内容声明构建、在开发模式下监视文件、提供 locale 检测中间件,并管理本地化路由。
|
|
205
|
+
|
|
206
|
+
</Step>
|
|
207
|
+
|
|
208
|
+
<Step number={4} title="声明您的内容">
|
|
209
|
+
|
|
210
|
+
创建并管理您的内容声明以存储翻译:
|
|
211
|
+
|
|
212
|
+
```tsx fileName="content/home-page.content.ts" contentDeclarationFormat=["typescript", "esm", "cjs"]
|
|
213
|
+
import { type Dictionary, t } from "intlayer";
|
|
214
|
+
|
|
215
|
+
const content = {
|
|
216
|
+
key: "home-page",
|
|
217
|
+
content: {
|
|
218
|
+
title: t({
|
|
219
|
+
zh: "你好,世界",
|
|
220
|
+
en: "Hello world",
|
|
221
|
+
fr: "Bonjour le monde",
|
|
222
|
+
es: "Hola mundo",
|
|
223
|
+
}),
|
|
224
|
+
metaTitle: t({
|
|
225
|
+
zh: "欢迎 | 我的应用",
|
|
226
|
+
en: "Welcome | My Application",
|
|
227
|
+
fr: "Bienvenue | Mon Application",
|
|
228
|
+
es: "Bienvenido | Mi Aplicación",
|
|
229
|
+
}),
|
|
230
|
+
metaDescription: t({
|
|
231
|
+
zh: "发现由 Intlayer 支持的多语言 Nuxt 应用主页。",
|
|
232
|
+
en: "Discover your multilingual Nuxt app homepage powered by Intlayer.",
|
|
233
|
+
fr: "Découvrez la page d'accueil multilingue de votre application Nuxt propulsée par Intlayer.",
|
|
234
|
+
es: "Descubre la página de inicio multilingüe de tu aplicación Nuxt impulsada por Intlayer.",
|
|
235
|
+
}),
|
|
236
|
+
},
|
|
237
|
+
} satisfies Dictionary;
|
|
238
|
+
|
|
239
|
+
export default content;
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
> 您的内容声明可以定义在应用程序中的任何位置,只要它们包含在 `contentDir` 目录中(默认情况下为 `./src`)。并匹配内容声明文件扩展名(默认情况下为 `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`)。
|
|
243
|
+
|
|
244
|
+
> 有关更多详细信息,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
|
|
245
|
+
|
|
246
|
+
</Step>
|
|
247
|
+
|
|
248
|
+
<Step number={5} title="在您的代码中使用 Intlayer">
|
|
249
|
+
|
|
250
|
+
使用 `useIntlayer` composable 在整个 Nuxt 应用中访问您的内容字典:
|
|
76
251
|
|
|
77
252
|
```vue fileName="components/HelloWorld.vue"
|
|
78
253
|
<script setup lang="ts">
|
|
@@ -80,7 +255,7 @@ import { ref } from "vue";
|
|
|
80
255
|
import { useIntlayer } from "vue-intlayer";
|
|
81
256
|
|
|
82
257
|
defineProps({
|
|
83
|
-
msg: String,
|
|
258
|
+
msg: String,
|
|
84
259
|
});
|
|
85
260
|
|
|
86
261
|
const {
|
|
@@ -91,8 +266,8 @@ const {
|
|
|
91
266
|
learnMore,
|
|
92
267
|
nuxtDocs,
|
|
93
268
|
readTheDocs,
|
|
94
|
-
} = useIntlayer("helloworld");
|
|
95
|
-
const countRef = ref(0);
|
|
269
|
+
} = useIntlayer("helloworld");
|
|
270
|
+
const countRef = ref(0);
|
|
96
271
|
</script>
|
|
97
272
|
|
|
98
273
|
<template>
|
|
@@ -110,11 +285,11 @@ const countRef = ref(0); // 计数引用
|
|
|
110
285
|
<checkOut />
|
|
111
286
|
<a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"
|
|
112
287
|
>Nuxt</a
|
|
113
|
-
|
|
288
|
+
>, <nuxtIntlayer />
|
|
114
289
|
</p>
|
|
115
290
|
<p>
|
|
116
291
|
<learnMore />
|
|
117
|
-
<a href="https://nuxt.com" target="_blank"><nuxtDocs /></a
|
|
292
|
+
<a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.
|
|
118
293
|
</p>
|
|
119
294
|
<p class="read-the-docs"><readTheDocs /></p>
|
|
120
295
|
<p class="read-the-docs">{{ readTheDocs }}</p>
|
|
@@ -81,9 +81,13 @@ Intlayer 不仅仅是一个 i18n 解决方案,还提供了一个**自托管的
|
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
## 在 React Router v7 应用中设置 Intlayer 的分步指南
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
<Steps>
|
|
87
|
+
|
|
88
|
+
<Step number={1} title="安装依赖">
|
|
89
|
+
|
|
90
|
+
使用您首选的包管理器安装必要的包:
|
|
87
91
|
|
|
88
92
|
```bash packageManager="npm"
|
|
89
93
|
npx intlayer init --interactive
|
|
@@ -101,9 +105,9 @@ yarn dlx intlayer@canary init --interactive
|
|
|
101
105
|
bunx intlayer@canary init --interactive
|
|
102
106
|
```
|
|
103
107
|
|
|
104
|
-
> `--interactive` 标志是可选的。如果您是 AI
|
|
108
|
+
> `--interactive` 标志是可选的。如果您是 AI agent,请使用 `intlayer-cli init`。
|
|
105
109
|
|
|
106
|
-
>
|
|
110
|
+
> 此命令将检测您的环境并安装所需的包。例如:
|
|
107
111
|
|
|
108
112
|
```bash packageManager="npm"
|
|
109
113
|
npm install intlayer react-intlayer
|
|
@@ -127,13 +131,21 @@ bun add vite-intlayer --dev
|
|
|
127
131
|
|
|
128
132
|
- **intlayer**
|
|
129
133
|
|
|
130
|
-
|
|
134
|
+
核心包,提供国际化工具,用于配置管理、翻译、[内容声明](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)。
|
|
131
135
|
|
|
132
136
|
- **react-intlayer**
|
|
133
|
-
将 Intlayer
|
|
137
|
+
将 Intlayer 与 React 应用集成的包。它为 React 国际化提供了上下文提供者和钩子。
|
|
134
138
|
|
|
135
139
|
- **vite-intlayer**
|
|
136
|
-
|
|
140
|
+
包括用于将 Intlayer 与 [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production) 集成的 Vite 插件,以及用于检测用户首选区域设置、管理 cookie 和处理 URL 重定向的中间件。
|
|
141
|
+
|
|
142
|
+
</Step>
|
|
143
|
+
|
|
144
|
+
<Step number={2} title="配置您的项目">
|
|
145
|
+
|
|
146
|
+
</Step>
|
|
147
|
+
|
|
148
|
+
</Steps>
|
|
137
149
|
|
|
138
150
|
## 在 React Router v7 应用程序中使用基于文件系统的路由设置 Intlayer 的分步指南
|
|
139
151
|
|
|
@@ -236,9 +248,123 @@ export function Layout({
|
|
|
236
248
|
}
|
|
237
249
|
```
|
|
238
250
|
|
|
239
|
-
|
|
251
|
+
#### 本地化主页
|
|
252
|
+
|
|
253
|
+
```tsx fileName="app/routes/page.tsx"
|
|
254
|
+
import { getIntlayer, validatePrefix } from "intlayer";
|
|
255
|
+
import { useIntlayer } from "react-intlayer";
|
|
256
|
+
import { data } from "react-router";
|
|
257
|
+
|
|
258
|
+
import { LocaleSwitcher } from "~/components/locale-switcher";
|
|
259
|
+
|
|
260
|
+
import { Navbar } from "~/components/navbar";
|
|
261
|
+
import type { Route } from "./+types/page";
|
|
262
|
+
|
|
263
|
+
export const loader = ({ params }: Route.LoaderArgs) => {
|
|
264
|
+
const { locale } = params;
|
|
265
|
+
|
|
266
|
+
const { isValid } = validatePrefix(locale);
|
|
267
|
+
|
|
268
|
+
if (!isValid) {
|
|
269
|
+
throw data("Locale not supported", { status: 404 });
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export const meta: Route.MetaFunction = ({ params }) => {
|
|
274
|
+
const content = getIntlayer("page", params.locale);
|
|
275
|
+
|
|
276
|
+
return [
|
|
277
|
+
{ title: content.title },
|
|
278
|
+
{ content: content.description, name: "description" },
|
|
279
|
+
];
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
export default function Page() {
|
|
283
|
+
const { title, description, aboutLink } = useIntlayer("page");
|
|
284
|
+
|
|
285
|
+
return (
|
|
286
|
+
<div>
|
|
287
|
+
<h1>{title}</h1>
|
|
288
|
+
<p>{description}</p>
|
|
289
|
+
<nav>
|
|
290
|
+
<LocalizedLink to="/about">{aboutLink}</LocalizedLink>
|
|
291
|
+
</nav>
|
|
292
|
+
</div>
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
> 了解更多关于 `useIntlayer` hook 的信息,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useIntlayer.md)。
|
|
298
|
+
|
|
299
|
+
> 如果你的应用已经存在,你可以使用 [Intlayer 编译器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md)以及[提取命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md),在一秒内转换数千个组件。
|
|
300
|
+
|
|
301
|
+
</Step>
|
|
302
|
+
|
|
303
|
+
<Step number={9} title="创建语言切换器组件">
|
|
304
|
+
|
|
305
|
+
创建一个组件以允许用户更改语言:
|
|
306
|
+
|
|
307
|
+
```tsx fileName="app/components/locale-switcher.tsx"
|
|
308
|
+
import type { FC } from "react";
|
|
309
|
+
|
|
310
|
+
import {
|
|
311
|
+
getHTMLTextDir,
|
|
312
|
+
getLocaleName,
|
|
313
|
+
getLocalizedUrl,
|
|
314
|
+
getPathWithoutLocale,
|
|
315
|
+
} from "intlayer";
|
|
316
|
+
import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
|
|
317
|
+
import { Link, useLocation } from "react-router";
|
|
318
|
+
|
|
319
|
+
export const LocaleSwitcher: FC = () => {
|
|
320
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
321
|
+
const { pathname } = useLocation();
|
|
322
|
+
|
|
323
|
+
const { availableLocales, locale } = useLocale();
|
|
324
|
+
|
|
325
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
326
|
+
|
|
327
|
+
return (
|
|
328
|
+
<ol>
|
|
329
|
+
{availableLocales.map((localeItem) => (
|
|
330
|
+
<li key={localeItem}>
|
|
331
|
+
<Link
|
|
332
|
+
aria-current={localeItem === locale ? "page" : undefined}
|
|
333
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
|
|
334
|
+
onClick={() => setLocale(localeItem)}
|
|
335
|
+
to={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
336
|
+
>
|
|
337
|
+
<span>
|
|
338
|
+
{/* 语言环境代码 - 例如 FR */}
|
|
339
|
+
{localeItem}
|
|
340
|
+
</span>
|
|
341
|
+
<span>
|
|
342
|
+
{/* 用其自身语言环境表示的语言 - 例如 Français */}
|
|
343
|
+
{getLocaleName(localeItem, locale)}
|
|
344
|
+
</span>
|
|
345
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
346
|
+
{/* 用当前语言环境表示的语言 - 例如当前语言环境设置为 Locales.SPANISH 时的 Francés */}
|
|
347
|
+
{getLocaleName(localeItem)}
|
|
348
|
+
</span>
|
|
349
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
350
|
+
{/* 用英文表示的语言 - 例如 French */}
|
|
351
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
352
|
+
</span>
|
|
353
|
+
</Link>
|
|
354
|
+
</li>
|
|
355
|
+
))}
|
|
356
|
+
</ol>
|
|
357
|
+
);
|
|
358
|
+
};
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
> 了解更多关于 `useLocale` hook 的信息,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useLocale.md)。
|
|
362
|
+
|
|
363
|
+
</Step>
|
|
364
|
+
|
|
365
|
+
<Step number={10} title="添加 HTML 属性管理">
|
|
240
366
|
|
|
241
|
-
|
|
367
|
+
创建一个 hook 来管理 HTML lang 和 dir 属性:
|
|
242
368
|
|
|
243
369
|
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
|
|
244
370
|
import { getHTMLTextDir } from "intlayer";
|
|
@@ -261,10 +387,10 @@ export const useI18nHTMLAttributes = () => {
|
|
|
261
387
|
import { Outlet } from "react-router";
|
|
262
388
|
import { IntlayerProvider } from "react-intlayer";
|
|
263
389
|
|
|
264
|
-
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; //
|
|
390
|
+
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // 导入 hook
|
|
265
391
|
|
|
266
392
|
export default function RootLayout() {
|
|
267
|
-
useI18nHTMLAttributes(); //
|
|
393
|
+
useI18nHTMLAttributes(); // 调用 hook
|
|
268
394
|
|
|
269
395
|
return (
|
|
270
396
|
<IntlayerProvider>
|
|
@@ -274,24 +400,52 @@ export default function RootLayout() {
|
|
|
274
400
|
}
|
|
275
401
|
```
|
|
276
402
|
|
|
277
|
-
|
|
403
|
+
</Step>
|
|
404
|
+
|
|
405
|
+
<Step number={11} title="添加中间件">
|
|
406
|
+
|
|
407
|
+
你也可以使用 `intlayerProxy` 来为你的应用添加服务器端路由。这个插件将自动根据 URL 检测当前语言环境并设置适当的语言 cookie。如果未指定语言环境,该插件将根据用户的浏览器语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。
|
|
408
|
+
|
|
409
|
+
> 注意,要在生产环境中使用 `intlayerProxy`,你需要将 `vite-intlayer` 包从 `devDependencies` 切换到 `dependencies`。
|
|
410
|
+
|
|
411
|
+
> 自 Intlayer v9 起,`intlayerProxy()` 直接捆绑在 `intlayer()` 插件中,并通过 `routing.enableProxy` 选项(默认为 `true`)默认启用。如下所示单独注册它现在是可选的 — 它保留用于向后兼容性和需要控制插件顺序的设置。设置 `routing.enableProxy: false` 以选择退出。查看 [v9 发布说明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/releases/v9.md)。
|
|
412
|
+
|
|
413
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
414
|
+
import { defineConfig } from "vite";
|
|
415
|
+
import react from "@vitejs/plugin-react-swc";
|
|
416
|
+
import { intlayer } from "vite-intlayer";
|
|
417
|
+
|
|
418
|
+
// https://vitejs.dev/config/
|
|
419
|
+
export default defineConfig({
|
|
420
|
+
plugins: [
|
|
421
|
+
react(),
|
|
422
|
+
intlayer({
|
|
423
|
+
proxy: {
|
|
424
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
425
|
+
},
|
|
426
|
+
}),
|
|
427
|
+
],
|
|
428
|
+
});
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
</Step>
|
|
278
432
|
|
|
279
|
-
<Step number={
|
|
433
|
+
<Step number={12} title="提取组件的内容" isOptional={true}>
|
|
280
434
|
|
|
281
|
-
|
|
435
|
+
如果你有一个现有的代码库,转换数千个文件可能很耗时。
|
|
282
436
|
|
|
283
|
-
|
|
437
|
+
为了简化这个过程,Intlayer 提供了一个[编译器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md) / [提取器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md)来转换你的组件并提取内容。
|
|
284
438
|
|
|
285
|
-
|
|
439
|
+
要进行设置,你可以在 `intlayer.config.ts` 文件中添加一个 `compiler` 部分:
|
|
286
440
|
|
|
287
441
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
288
442
|
import { type IntlayerConfig } from "intlayer";
|
|
289
443
|
|
|
290
444
|
const config: IntlayerConfig = {
|
|
291
|
-
// ...
|
|
445
|
+
// ... 其余配置
|
|
292
446
|
compiler: {
|
|
293
447
|
/**
|
|
294
|
-
*
|
|
448
|
+
* 指示编译器是否应该被启用。
|
|
295
449
|
*/
|
|
296
450
|
enabled: true,
|
|
297
451
|
|
|
@@ -301,12 +455,16 @@ const config: IntlayerConfig = {
|
|
|
301
455
|
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
302
456
|
|
|
303
457
|
/**
|
|
304
|
-
*
|
|
458
|
+
* 指示组件在转换后是否应该被保存。
|
|
459
|
+
*
|
|
460
|
+
* - 如果为 `true`,编译器将重新将组件文件写入磁盘。因此转换将是永久的,编译器将跳过下一个过程的转换。这样,编译器可以转换应用,然后可以删除它。
|
|
461
|
+
*
|
|
462
|
+
* - 如果为 `false`,编译器仅在构建输出中注入 `useIntlayer()` 函数调用,并保持基础代码库完整。转换仅在内存中完成。
|
|
305
463
|
*/
|
|
306
464
|
saveComponents: false,
|
|
307
465
|
|
|
308
466
|
/**
|
|
309
|
-
*
|
|
467
|
+
* 词典键前缀
|
|
310
468
|
*/
|
|
311
469
|
dictionaryKeyPrefix: "",
|
|
312
470
|
},
|
|
@@ -318,7 +476,7 @@ export default config;
|
|
|
318
476
|
<Tabs>
|
|
319
477
|
<Tab value='提取命令'>
|
|
320
478
|
|
|
321
|
-
|
|
479
|
+
运行提取器来转换你的组件并提取内容
|
|
322
480
|
|
|
323
481
|
```bash packageManager="npm"
|
|
324
482
|
npx intlayer extract
|
|
@@ -339,9 +497,9 @@ bun x intlayer extract
|
|
|
339
497
|
</Tab>
|
|
340
498
|
<Tab value='Babel 编译器'>
|
|
341
499
|
|
|
342
|
-
>
|
|
500
|
+
> 自 v9 起,`intlayerCompiler` 已包含在 `intlayer` 插件中。因此你不需要手动添加它。
|
|
343
501
|
|
|
344
|
-
|
|
502
|
+
更新你的 `vite.config.ts` 以包含 `intlayerCompiler` 插件:
|
|
345
503
|
|
|
346
504
|
```ts fileName="vite.config.ts"
|
|
347
505
|
import { defineConfig } from "vite";
|
|
@@ -350,7 +508,7 @@ import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
|
350
508
|
export default defineConfig({
|
|
351
509
|
plugins: [
|
|
352
510
|
intlayer(),
|
|
353
|
-
intlayerCompiler(), //
|
|
511
|
+
intlayerCompiler(), // 添加编译器插件
|
|
354
512
|
],
|
|
355
513
|
});
|
|
356
514
|
```
|
|
@@ -368,7 +526,7 @@ yarn build # 或 yarn dev
|
|
|
368
526
|
```
|
|
369
527
|
|
|
370
528
|
```bash packageManager="bun"
|
|
371
|
-
bun run build #
|
|
529
|
+
bun run build # 或 bun run dev
|
|
372
530
|
```
|
|
373
531
|
|
|
374
532
|
</Tab>
|