@intlayer/docs 9.5.4 → 9.5.5
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/README.md +2 -1
- package/blog/ar/how_to_pick_react_i18n_library.md +28 -0
- package/blog/ar/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/de/how_to_pick_react_i18n_library.md +28 -0
- package/blog/de/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/en/how_to_pick_react_i18n_library.md +28 -0
- package/blog/en/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/en-GB/how_to_pick_react_i18n_library.md +28 -0
- package/blog/en-GB/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/es/how_to_pick_react_i18n_library.md +28 -0
- package/blog/es/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/fr/how_to_pick_react_i18n_library.md +28 -0
- package/blog/fr/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/hi/how_to_pick_react_i18n_library.md +28 -0
- package/blog/hi/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/id/how_to_pick_react_i18n_library.md +28 -0
- package/blog/id/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/it/how_to_pick_react_i18n_library.md +28 -0
- package/blog/it/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/ja/how_to_pick_react_i18n_library.md +28 -0
- package/blog/ja/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/ko/how_to_pick_react_i18n_library.md +28 -0
- package/blog/ko/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/pl/how_to_pick_react_i18n_library.md +28 -0
- package/blog/pl/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/pt/how_to_pick_react_i18n_library.md +28 -0
- package/blog/pt/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/ru/how_to_pick_react_i18n_library.md +28 -0
- package/blog/ru/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/tr/how_to_pick_react_i18n_library.md +28 -0
- package/blog/tr/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/uk/how_to_pick_react_i18n_library.md +28 -0
- package/blog/uk/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/vi/how_to_pick_react_i18n_library.md +28 -0
- package/blog/vi/how_to_pick_solid_i18n_library.md +19 -5
- package/blog/zh/how_to_pick_react_i18n_library.md +28 -0
- package/blog/zh/how_to_pick_solid_i18n_library.md +19 -5
- package/dist/cjs/generated/docs.entry.cjs +220 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +220 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +11 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/how_works_intlayer.md +86 -14
- package/docs/ar/intlayer_visual_editor.md +7 -0
- package/docs/ar/intlayer_with_astro.md +60 -36
- package/docs/ar/intlayer_with_astro_preact.md +7 -0
- package/docs/ar/intlayer_with_astro_react.md +7 -0
- package/docs/ar/intlayer_with_astro_solid.md +7 -0
- package/docs/ar/intlayer_with_astro_svelte.md +7 -0
- package/docs/ar/intlayer_with_astro_vanilla.md +7 -0
- package/docs/ar/intlayer_with_astro_vue.md +7 -0
- package/docs/ar/intlayer_with_nextjs_14.md +7 -0
- package/docs/ar/intlayer_with_nextjs_15.md +7 -0
- package/docs/ar/intlayer_with_nextjs_16.md +7 -0
- package/docs/ar/intlayer_with_react_router_v7.md +7 -0
- package/docs/ar/intlayer_with_remix_3.md +73 -112
- package/docs/ar/intlayer_with_tanstack+solid.md +7 -0
- package/docs/ar/intlayer_with_tanstack.md +7 -0
- package/docs/ar/intlayer_with_vite+preact.md +7 -0
- package/docs/ar/intlayer_with_vite+react.md +7 -0
- package/docs/ar/intlayer_with_vite+solid.md +7 -0
- package/docs/ar/packages/astro-intlayer/exports.md +161 -9
- package/docs/ar/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/ar/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/ar/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/ar/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/ar/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/ar/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/ar/packages/remix-intlayer/exports.md +80 -0
- package/docs/ar/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/ar/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/ar/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/ar/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/ar/readme.md +2 -1
- package/docs/de/how_works_intlayer.md +86 -14
- package/docs/de/intlayer_visual_editor.md +7 -0
- package/docs/de/intlayer_with_astro.md +60 -36
- package/docs/de/intlayer_with_astro_preact.md +7 -0
- package/docs/de/intlayer_with_astro_react.md +7 -0
- package/docs/de/intlayer_with_astro_solid.md +7 -0
- package/docs/de/intlayer_with_astro_svelte.md +7 -0
- package/docs/de/intlayer_with_astro_vanilla.md +7 -0
- package/docs/de/intlayer_with_astro_vue.md +7 -0
- package/docs/de/intlayer_with_nextjs_14.md +7 -0
- package/docs/de/intlayer_with_nextjs_15.md +7 -0
- package/docs/de/intlayer_with_nextjs_16.md +7 -0
- package/docs/de/intlayer_with_react_router_v7.md +7 -0
- package/docs/de/intlayer_with_remix_3.md +70 -109
- package/docs/de/intlayer_with_tanstack+solid.md +7 -0
- package/docs/de/intlayer_with_tanstack.md +7 -0
- package/docs/de/intlayer_with_vite+preact.md +7 -0
- package/docs/de/intlayer_with_vite+react.md +7 -0
- package/docs/de/intlayer_with_vite+solid.md +7 -0
- package/docs/de/packages/astro-intlayer/exports.md +164 -12
- package/docs/de/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/de/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/de/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/de/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/de/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/de/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/de/packages/remix-intlayer/exports.md +176 -0
- package/docs/de/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/de/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/de/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/de/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/de/readme.md +2 -1
- package/docs/en/how_works_intlayer.md +86 -14
- package/docs/en/intlayer_visual_editor.md +7 -0
- package/docs/en/intlayer_with_astro.md +63 -41
- package/docs/en/intlayer_with_astro_preact.md +7 -0
- package/docs/en/intlayer_with_astro_react.md +7 -0
- package/docs/en/intlayer_with_astro_solid.md +7 -0
- package/docs/en/intlayer_with_astro_svelte.md +7 -0
- package/docs/en/intlayer_with_astro_vanilla.md +7 -0
- package/docs/en/intlayer_with_astro_vue.md +7 -0
- package/docs/en/intlayer_with_nextjs_14.md +7 -0
- package/docs/en/intlayer_with_nextjs_15.md +7 -0
- package/docs/en/intlayer_with_nextjs_16.md +7 -0
- package/docs/en/intlayer_with_react_router_v7.md +7 -0
- package/docs/en/intlayer_with_remix_3.md +74 -122
- package/docs/en/intlayer_with_tanstack+solid.md +7 -0
- package/docs/en/intlayer_with_tanstack.md +7 -0
- package/docs/en/intlayer_with_vite+preact.md +7 -0
- package/docs/en/intlayer_with_vite+react.md +7 -0
- package/docs/en/intlayer_with_vite+solid.md +7 -0
- package/docs/en/introduction.md +2 -1
- package/docs/en/packages/astro-intlayer/exports.md +161 -9
- package/docs/en/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/en/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/en/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/en/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/en/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/en/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/en/packages/remix-intlayer/exports.md +176 -0
- package/docs/en/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/en/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/en/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/en/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/en/readme.md +2 -1
- package/docs/en-GB/how_works_intlayer.md +86 -14
- package/docs/en-GB/intlayer_visual_editor.md +7 -0
- package/docs/en-GB/intlayer_with_astro.md +60 -36
- package/docs/en-GB/intlayer_with_astro_preact.md +7 -0
- package/docs/en-GB/intlayer_with_astro_react.md +7 -0
- package/docs/en-GB/intlayer_with_astro_solid.md +7 -0
- package/docs/en-GB/intlayer_with_astro_svelte.md +7 -0
- package/docs/en-GB/intlayer_with_astro_vanilla.md +7 -0
- package/docs/en-GB/intlayer_with_astro_vue.md +7 -0
- package/docs/en-GB/intlayer_with_nextjs_14.md +7 -0
- package/docs/en-GB/intlayer_with_nextjs_15.md +7 -0
- package/docs/en-GB/intlayer_with_nextjs_16.md +7 -0
- package/docs/en-GB/intlayer_with_react_router_v7.md +7 -0
- package/docs/en-GB/intlayer_with_remix_3.md +66 -105
- package/docs/en-GB/intlayer_with_tanstack+solid.md +7 -0
- package/docs/en-GB/intlayer_with_tanstack.md +7 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +7 -0
- package/docs/en-GB/intlayer_with_vite+react.md +7 -0
- package/docs/en-GB/intlayer_with_vite+solid.md +7 -0
- package/docs/en-GB/packages/astro-intlayer/exports.md +162 -10
- package/docs/en-GB/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/en-GB/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/en-GB/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/en-GB/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/en-GB/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/en-GB/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/en-GB/packages/remix-intlayer/exports.md +176 -0
- package/docs/en-GB/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/en-GB/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/en-GB/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/en-GB/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/en-GB/readme.md +2 -1
- package/docs/es/how_works_intlayer.md +86 -14
- package/docs/es/intlayer_visual_editor.md +7 -0
- package/docs/es/intlayer_with_astro.md +60 -36
- package/docs/es/intlayer_with_astro_preact.md +7 -0
- package/docs/es/intlayer_with_astro_react.md +7 -0
- package/docs/es/intlayer_with_astro_solid.md +7 -0
- package/docs/es/intlayer_with_astro_svelte.md +7 -0
- package/docs/es/intlayer_with_astro_vanilla.md +7 -0
- package/docs/es/intlayer_with_astro_vue.md +7 -0
- package/docs/es/intlayer_with_nextjs_14.md +7 -0
- package/docs/es/intlayer_with_nextjs_15.md +7 -0
- package/docs/es/intlayer_with_nextjs_16.md +7 -0
- package/docs/es/intlayer_with_react_router_v7.md +7 -0
- package/docs/es/intlayer_with_remix_3.md +73 -112
- package/docs/es/intlayer_with_tanstack+solid.md +7 -0
- package/docs/es/intlayer_with_tanstack.md +7 -0
- package/docs/es/intlayer_with_vite+preact.md +7 -0
- package/docs/es/intlayer_with_vite+react.md +7 -0
- package/docs/es/intlayer_with_vite+solid.md +7 -0
- package/docs/es/packages/astro-intlayer/exports.md +162 -10
- package/docs/es/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/es/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/es/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/es/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/es/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/es/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/es/packages/remix-intlayer/exports.md +176 -0
- package/docs/es/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/es/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/es/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/es/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/es/readme.md +2 -1
- package/docs/fr/how_works_intlayer.md +86 -14
- package/docs/fr/intlayer_visual_editor.md +7 -0
- package/docs/fr/intlayer_with_astro.md +60 -36
- package/docs/fr/intlayer_with_astro_preact.md +7 -0
- package/docs/fr/intlayer_with_astro_react.md +7 -0
- package/docs/fr/intlayer_with_astro_solid.md +7 -0
- package/docs/fr/intlayer_with_astro_svelte.md +7 -0
- package/docs/fr/intlayer_with_astro_vanilla.md +7 -0
- package/docs/fr/intlayer_with_astro_vue.md +7 -0
- package/docs/fr/intlayer_with_nextjs_14.md +7 -0
- package/docs/fr/intlayer_with_nextjs_15.md +7 -0
- package/docs/fr/intlayer_with_nextjs_16.md +7 -0
- package/docs/fr/intlayer_with_react_router_v7.md +7 -0
- package/docs/fr/intlayer_with_remix_3.md +74 -122
- package/docs/fr/intlayer_with_tanstack+solid.md +7 -0
- package/docs/fr/intlayer_with_tanstack.md +7 -0
- package/docs/fr/intlayer_with_vite+preact.md +7 -0
- package/docs/fr/intlayer_with_vite+react.md +7 -0
- package/docs/fr/intlayer_with_vite+solid.md +7 -0
- package/docs/fr/packages/astro-intlayer/exports.md +162 -10
- package/docs/fr/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/fr/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/fr/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/fr/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/fr/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/fr/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/fr/packages/remix-intlayer/exports.md +176 -0
- package/docs/fr/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/fr/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/fr/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/fr/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/fr/readme.md +2 -1
- package/docs/hi/how_works_intlayer.md +86 -14
- package/docs/hi/intlayer_visual_editor.md +7 -0
- package/docs/hi/intlayer_with_astro.md +61 -37
- package/docs/hi/intlayer_with_astro_preact.md +7 -0
- package/docs/hi/intlayer_with_astro_react.md +7 -0
- package/docs/hi/intlayer_with_astro_solid.md +7 -0
- package/docs/hi/intlayer_with_astro_svelte.md +7 -0
- package/docs/hi/intlayer_with_astro_vanilla.md +7 -0
- package/docs/hi/intlayer_with_astro_vue.md +7 -0
- package/docs/hi/intlayer_with_nextjs_14.md +7 -0
- package/docs/hi/intlayer_with_nextjs_15.md +7 -0
- package/docs/hi/intlayer_with_nextjs_16.md +7 -0
- package/docs/hi/intlayer_with_react_router_v7.md +7 -0
- package/docs/hi/intlayer_with_remix_3.md +73 -112
- package/docs/hi/intlayer_with_tanstack+solid.md +7 -0
- package/docs/hi/intlayer_with_tanstack.md +7 -0
- package/docs/hi/intlayer_with_vite+preact.md +7 -0
- package/docs/hi/intlayer_with_vite+react.md +7 -0
- package/docs/hi/intlayer_with_vite+solid.md +7 -0
- package/docs/hi/packages/astro-intlayer/exports.md +165 -13
- package/docs/hi/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/hi/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/hi/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/hi/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/hi/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/hi/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/hi/packages/remix-intlayer/exports.md +80 -0
- package/docs/hi/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/hi/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/hi/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/hi/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/hi/readme.md +2 -1
- package/docs/id/how_works_intlayer.md +86 -14
- package/docs/id/intlayer_visual_editor.md +7 -0
- package/docs/id/intlayer_with_astro.md +60 -36
- package/docs/id/intlayer_with_astro_preact.md +7 -0
- package/docs/id/intlayer_with_astro_react.md +7 -0
- package/docs/id/intlayer_with_astro_solid.md +7 -0
- package/docs/id/intlayer_with_astro_svelte.md +7 -0
- package/docs/id/intlayer_with_astro_vanilla.md +7 -0
- package/docs/id/intlayer_with_astro_vue.md +7 -0
- package/docs/id/intlayer_with_nextjs_14.md +7 -0
- package/docs/id/intlayer_with_nextjs_15.md +7 -0
- package/docs/id/intlayer_with_nextjs_16.md +7 -0
- package/docs/id/intlayer_with_react_router_v7.md +7 -0
- package/docs/id/intlayer_with_remix_3.md +101 -148
- package/docs/id/intlayer_with_tanstack+solid.md +7 -0
- package/docs/id/intlayer_with_tanstack.md +7 -0
- package/docs/id/intlayer_with_vite+preact.md +7 -0
- package/docs/id/intlayer_with_vite+react.md +7 -0
- package/docs/id/intlayer_with_vite+solid.md +7 -0
- package/docs/id/packages/astro-intlayer/exports.md +163 -11
- package/docs/id/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/id/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/id/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/id/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/id/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/id/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/id/packages/remix-intlayer/exports.md +80 -0
- package/docs/id/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/id/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/id/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/id/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/id/readme.md +2 -1
- package/docs/it/how_works_intlayer.md +86 -14
- package/docs/it/intlayer_visual_editor.md +7 -0
- package/docs/it/intlayer_with_astro.md +60 -36
- package/docs/it/intlayer_with_astro_preact.md +7 -0
- package/docs/it/intlayer_with_astro_react.md +7 -0
- package/docs/it/intlayer_with_astro_solid.md +7 -0
- package/docs/it/intlayer_with_astro_svelte.md +7 -0
- package/docs/it/intlayer_with_astro_vanilla.md +7 -0
- package/docs/it/intlayer_with_astro_vue.md +7 -0
- package/docs/it/intlayer_with_nextjs_14.md +7 -0
- package/docs/it/intlayer_with_nextjs_15.md +7 -0
- package/docs/it/intlayer_with_nextjs_16.md +7 -0
- package/docs/it/intlayer_with_react_router_v7.md +7 -0
- package/docs/it/intlayer_with_remix_3.md +70 -109
- package/docs/it/intlayer_with_tanstack+solid.md +7 -0
- package/docs/it/intlayer_with_tanstack.md +7 -0
- package/docs/it/intlayer_with_vite+preact.md +7 -0
- package/docs/it/intlayer_with_vite+react.md +7 -0
- package/docs/it/intlayer_with_vite+solid.md +7 -0
- package/docs/it/packages/astro-intlayer/exports.md +161 -9
- package/docs/it/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/it/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/it/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/it/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/it/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/it/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/it/packages/remix-intlayer/exports.md +176 -0
- package/docs/it/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/it/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/it/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/it/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/it/readme.md +2 -1
- package/docs/ja/how_works_intlayer.md +86 -14
- package/docs/ja/intlayer_visual_editor.md +7 -0
- package/docs/ja/intlayer_with_astro.md +61 -37
- package/docs/ja/intlayer_with_astro_preact.md +7 -0
- package/docs/ja/intlayer_with_astro_react.md +7 -0
- package/docs/ja/intlayer_with_astro_solid.md +7 -0
- package/docs/ja/intlayer_with_astro_svelte.md +7 -0
- package/docs/ja/intlayer_with_astro_vanilla.md +7 -0
- package/docs/ja/intlayer_with_astro_vue.md +7 -0
- package/docs/ja/intlayer_with_nextjs_14.md +7 -0
- package/docs/ja/intlayer_with_nextjs_15.md +7 -0
- package/docs/ja/intlayer_with_nextjs_16.md +7 -0
- package/docs/ja/intlayer_with_react_router_v7.md +7 -0
- package/docs/ja/intlayer_with_remix_3.md +73 -112
- package/docs/ja/intlayer_with_tanstack+solid.md +7 -0
- package/docs/ja/intlayer_with_tanstack.md +7 -0
- package/docs/ja/intlayer_with_vite+preact.md +7 -0
- package/docs/ja/intlayer_with_vite+react.md +7 -0
- package/docs/ja/intlayer_with_vite+solid.md +7 -0
- package/docs/ja/packages/astro-intlayer/exports.md +163 -11
- package/docs/ja/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/ja/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/ja/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/ja/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/ja/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/ja/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/ja/packages/remix-intlayer/exports.md +80 -0
- package/docs/ja/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/ja/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/ja/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/ja/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/ja/readme.md +2 -1
- package/docs/ko/how_works_intlayer.md +86 -14
- package/docs/ko/intlayer_visual_editor.md +7 -0
- package/docs/ko/intlayer_with_astro.md +61 -37
- package/docs/ko/intlayer_with_astro_preact.md +7 -0
- package/docs/ko/intlayer_with_astro_react.md +7 -0
- package/docs/ko/intlayer_with_astro_solid.md +7 -0
- package/docs/ko/intlayer_with_astro_svelte.md +7 -0
- package/docs/ko/intlayer_with_astro_vanilla.md +7 -0
- package/docs/ko/intlayer_with_astro_vue.md +7 -0
- package/docs/ko/intlayer_with_nextjs_14.md +7 -0
- package/docs/ko/intlayer_with_nextjs_15.md +7 -0
- package/docs/ko/intlayer_with_nextjs_16.md +7 -0
- package/docs/ko/intlayer_with_react_router_v7.md +7 -0
- package/docs/ko/intlayer_with_remix_3.md +73 -112
- package/docs/ko/intlayer_with_tanstack+solid.md +7 -0
- package/docs/ko/intlayer_with_tanstack.md +7 -0
- package/docs/ko/intlayer_with_vite+preact.md +7 -0
- package/docs/ko/intlayer_with_vite+react.md +7 -0
- package/docs/ko/intlayer_with_vite+solid.md +7 -0
- package/docs/ko/packages/astro-intlayer/exports.md +163 -11
- package/docs/ko/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/ko/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/ko/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/ko/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/ko/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/ko/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/ko/packages/remix-intlayer/exports.md +80 -0
- package/docs/ko/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/ko/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/ko/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/ko/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/ko/readme.md +2 -1
- package/docs/pl/how_works_intlayer.md +86 -14
- package/docs/pl/intlayer_visual_editor.md +7 -0
- package/docs/pl/intlayer_with_astro.md +61 -37
- package/docs/pl/intlayer_with_astro_preact.md +7 -0
- package/docs/pl/intlayer_with_astro_react.md +7 -0
- package/docs/pl/intlayer_with_astro_solid.md +7 -0
- package/docs/pl/intlayer_with_astro_svelte.md +7 -0
- package/docs/pl/intlayer_with_astro_vanilla.md +7 -0
- package/docs/pl/intlayer_with_astro_vue.md +7 -0
- package/docs/pl/intlayer_with_nextjs_14.md +7 -0
- package/docs/pl/intlayer_with_nextjs_15.md +7 -0
- package/docs/pl/intlayer_with_nextjs_16.md +7 -0
- package/docs/pl/intlayer_with_react_router_v7.md +7 -0
- package/docs/pl/intlayer_with_remix_3.md +101 -148
- package/docs/pl/intlayer_with_tanstack+solid.md +7 -0
- package/docs/pl/intlayer_with_tanstack.md +7 -0
- package/docs/pl/intlayer_with_vite+preact.md +7 -0
- package/docs/pl/intlayer_with_vite+react.md +7 -0
- package/docs/pl/intlayer_with_vite+solid.md +7 -0
- package/docs/pl/packages/astro-intlayer/exports.md +162 -10
- package/docs/pl/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/pl/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/pl/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/pl/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/pl/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/pl/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/pl/packages/remix-intlayer/exports.md +80 -0
- package/docs/pl/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/pl/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/pl/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/pl/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/pl/readme.md +2 -1
- package/docs/pt/how_works_intlayer.md +86 -14
- package/docs/pt/intlayer_visual_editor.md +7 -0
- package/docs/pt/intlayer_with_astro.md +61 -37
- package/docs/pt/intlayer_with_astro_preact.md +7 -0
- package/docs/pt/intlayer_with_astro_react.md +7 -0
- package/docs/pt/intlayer_with_astro_solid.md +7 -0
- package/docs/pt/intlayer_with_astro_svelte.md +7 -0
- package/docs/pt/intlayer_with_astro_vanilla.md +7 -0
- package/docs/pt/intlayer_with_astro_vue.md +7 -0
- package/docs/pt/intlayer_with_nextjs_14.md +7 -0
- package/docs/pt/intlayer_with_nextjs_15.md +7 -0
- package/docs/pt/intlayer_with_nextjs_16.md +7 -0
- package/docs/pt/intlayer_with_react_router_v7.md +7 -0
- package/docs/pt/intlayer_with_remix_3.md +73 -112
- package/docs/pt/intlayer_with_tanstack+solid.md +7 -0
- package/docs/pt/intlayer_with_tanstack.md +7 -0
- package/docs/pt/intlayer_with_vite+preact.md +7 -0
- package/docs/pt/intlayer_with_vite+react.md +7 -0
- package/docs/pt/intlayer_with_vite+solid.md +7 -0
- package/docs/pt/packages/astro-intlayer/exports.md +162 -10
- package/docs/pt/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/pt/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/pt/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/pt/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/pt/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/pt/packages/remix-intlayer/Intlayer.md +77 -0
- package/docs/pt/packages/remix-intlayer/exports.md +176 -0
- package/docs/pt/packages/remix-intlayer/intlayerMiddleware.md +101 -0
- package/docs/pt/packages/remix-intlayer/useDictionary.md +94 -0
- package/docs/pt/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/pt/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/pt/readme.md +2 -1
- package/docs/ru/how_works_intlayer.md +86 -14
- package/docs/ru/intlayer_visual_editor.md +7 -0
- package/docs/ru/intlayer_with_astro.md +61 -37
- package/docs/ru/intlayer_with_astro_preact.md +7 -0
- package/docs/ru/intlayer_with_astro_react.md +7 -0
- package/docs/ru/intlayer_with_astro_solid.md +7 -0
- package/docs/ru/intlayer_with_astro_svelte.md +7 -0
- package/docs/ru/intlayer_with_astro_vanilla.md +7 -0
- package/docs/ru/intlayer_with_astro_vue.md +7 -0
- package/docs/ru/intlayer_with_nextjs_14.md +7 -0
- package/docs/ru/intlayer_with_nextjs_15.md +7 -0
- package/docs/ru/intlayer_with_nextjs_16.md +7 -0
- package/docs/ru/intlayer_with_react_router_v7.md +7 -0
- package/docs/ru/intlayer_with_remix_3.md +73 -112
- package/docs/ru/intlayer_with_tanstack+solid.md +7 -0
- package/docs/ru/intlayer_with_tanstack.md +7 -0
- package/docs/ru/intlayer_with_vite+preact.md +7 -0
- package/docs/ru/intlayer_with_vite+react.md +7 -0
- package/docs/ru/intlayer_with_vite+solid.md +7 -0
- package/docs/ru/packages/astro-intlayer/exports.md +164 -12
- package/docs/ru/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/ru/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/ru/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/ru/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/ru/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/ru/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/ru/packages/remix-intlayer/exports.md +80 -0
- package/docs/ru/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/ru/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/ru/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/ru/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/ru/readme.md +2 -1
- package/docs/tr/how_works_intlayer.md +86 -14
- package/docs/tr/intlayer_visual_editor.md +7 -0
- package/docs/tr/intlayer_with_astro.md +60 -36
- package/docs/tr/intlayer_with_astro_preact.md +7 -0
- package/docs/tr/intlayer_with_astro_react.md +7 -0
- package/docs/tr/intlayer_with_astro_solid.md +7 -0
- package/docs/tr/intlayer_with_astro_svelte.md +7 -0
- package/docs/tr/intlayer_with_astro_vanilla.md +7 -0
- package/docs/tr/intlayer_with_astro_vue.md +7 -0
- package/docs/tr/intlayer_with_nextjs_14.md +7 -0
- package/docs/tr/intlayer_with_nextjs_15.md +7 -0
- package/docs/tr/intlayer_with_nextjs_16.md +7 -0
- package/docs/tr/intlayer_with_react_router_v7.md +7 -0
- package/docs/tr/intlayer_with_remix_3.md +101 -148
- package/docs/tr/intlayer_with_tanstack+solid.md +7 -0
- package/docs/tr/intlayer_with_tanstack.md +7 -0
- package/docs/tr/intlayer_with_vite+preact.md +7 -0
- package/docs/tr/intlayer_with_vite+react.md +7 -0
- package/docs/tr/intlayer_with_vite+solid.md +7 -0
- package/docs/tr/packages/astro-intlayer/exports.md +165 -13
- package/docs/tr/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/tr/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/tr/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/tr/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/tr/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/tr/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/tr/packages/remix-intlayer/exports.md +80 -0
- package/docs/tr/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/tr/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/tr/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/tr/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/tr/readme.md +2 -1
- package/docs/uk/how_works_intlayer.md +86 -14
- package/docs/uk/intlayer_visual_editor.md +7 -0
- package/docs/uk/intlayer_with_astro.md +61 -37
- package/docs/uk/intlayer_with_astro_preact.md +7 -0
- package/docs/uk/intlayer_with_astro_react.md +7 -0
- package/docs/uk/intlayer_with_astro_solid.md +7 -0
- package/docs/uk/intlayer_with_astro_svelte.md +7 -0
- package/docs/uk/intlayer_with_astro_vanilla.md +7 -0
- package/docs/uk/intlayer_with_astro_vue.md +7 -0
- package/docs/uk/intlayer_with_nextjs_14.md +7 -0
- package/docs/uk/intlayer_with_nextjs_15.md +7 -0
- package/docs/uk/intlayer_with_nextjs_16.md +7 -0
- package/docs/uk/intlayer_with_react_router_v7.md +7 -0
- package/docs/uk/intlayer_with_remix_3.md +101 -148
- package/docs/uk/intlayer_with_tanstack+solid.md +7 -0
- package/docs/uk/intlayer_with_tanstack.md +7 -0
- package/docs/uk/intlayer_with_vite+preact.md +7 -0
- package/docs/uk/intlayer_with_vite+react.md +7 -0
- package/docs/uk/intlayer_with_vite+solid.md +7 -0
- package/docs/uk/packages/astro-intlayer/exports.md +162 -10
- package/docs/uk/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/uk/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/uk/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/uk/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/uk/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/uk/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/uk/packages/remix-intlayer/exports.md +80 -0
- package/docs/uk/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/uk/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/uk/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/uk/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/uk/readme.md +2 -1
- package/docs/vi/how_works_intlayer.md +86 -14
- package/docs/vi/intlayer_visual_editor.md +7 -0
- package/docs/vi/intlayer_with_astro.md +60 -36
- package/docs/vi/intlayer_with_astro_preact.md +7 -0
- package/docs/vi/intlayer_with_astro_react.md +7 -0
- package/docs/vi/intlayer_with_astro_solid.md +7 -0
- package/docs/vi/intlayer_with_astro_svelte.md +7 -0
- package/docs/vi/intlayer_with_astro_vanilla.md +7 -0
- package/docs/vi/intlayer_with_astro_vue.md +7 -0
- package/docs/vi/intlayer_with_nextjs_14.md +7 -0
- package/docs/vi/intlayer_with_nextjs_15.md +7 -0
- package/docs/vi/intlayer_with_nextjs_16.md +7 -0
- package/docs/vi/intlayer_with_react_router_v7.md +7 -0
- package/docs/vi/intlayer_with_remix_3.md +101 -148
- package/docs/vi/intlayer_with_tanstack+solid.md +7 -0
- package/docs/vi/intlayer_with_tanstack.md +7 -0
- package/docs/vi/intlayer_with_vite+preact.md +7 -0
- package/docs/vi/intlayer_with_vite+react.md +7 -0
- package/docs/vi/intlayer_with_vite+solid.md +7 -0
- package/docs/vi/packages/astro-intlayer/exports.md +167 -15
- package/docs/vi/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/vi/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/vi/packages/astro-intlayer/useDictionary.md +94 -0
- package/docs/vi/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/vi/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/vi/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/vi/packages/remix-intlayer/exports.md +80 -0
- package/docs/vi/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/vi/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/vi/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/vi/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/vi/readme.md +2 -1
- package/docs/zh/how_works_intlayer.md +86 -14
- package/docs/zh/intlayer_visual_editor.md +7 -0
- package/docs/zh/intlayer_with_astro.md +61 -37
- package/docs/zh/intlayer_with_astro_preact.md +7 -0
- package/docs/zh/intlayer_with_astro_react.md +7 -0
- package/docs/zh/intlayer_with_astro_solid.md +7 -0
- package/docs/zh/intlayer_with_astro_svelte.md +7 -0
- package/docs/zh/intlayer_with_astro_vanilla.md +7 -0
- package/docs/zh/intlayer_with_astro_vue.md +7 -0
- package/docs/zh/intlayer_with_nextjs_14.md +7 -0
- package/docs/zh/intlayer_with_nextjs_15.md +7 -0
- package/docs/zh/intlayer_with_nextjs_16.md +7 -0
- package/docs/zh/intlayer_with_react_router_v7.md +7 -0
- package/docs/zh/intlayer_with_remix_3.md +74 -112
- package/docs/zh/intlayer_with_tanstack+solid.md +7 -0
- package/docs/zh/intlayer_with_tanstack.md +7 -0
- package/docs/zh/intlayer_with_vite+preact.md +7 -0
- package/docs/zh/intlayer_with_vite+react.md +7 -0
- package/docs/zh/intlayer_with_vite+solid.md +7 -0
- package/docs/zh/packages/astro-intlayer/exports.md +166 -14
- package/docs/zh/packages/astro-intlayer/intlayer.md +76 -0
- package/docs/zh/packages/astro-intlayer/onRequest.md +76 -0
- package/docs/zh/packages/astro-intlayer/useDictionary.md +95 -0
- package/docs/zh/packages/astro-intlayer/useIntlayer.md +98 -0
- package/docs/zh/packages/astro-intlayer/useLocale.md +126 -0
- package/docs/zh/packages/remix-intlayer/Intlayer.md +55 -0
- package/docs/zh/packages/remix-intlayer/exports.md +80 -0
- package/docs/zh/packages/remix-intlayer/intlayerMiddleware.md +55 -0
- package/docs/zh/packages/remix-intlayer/useDictionary.md +95 -0
- package/docs/zh/packages/remix-intlayer/useIntlayer.md +94 -0
- package/docs/zh/packages/remix-intlayer/useLocale.md +104 -0
- package/docs/zh/readme.md +2 -1
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +223 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-09-09
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-19
|
|
4
4
|
title: "Remix 3 i18n - 完整的应用多语言国际化翻译指南"
|
|
5
5
|
description: "告别 i18next。2026 年构建多语言 (i18n) Remix 3 应用的权威指南。借助 AI 智能体完成翻译,并优化打包体积、SEO 和性能。"
|
|
6
6
|
keywords:
|
|
@@ -19,6 +19,9 @@ slugs:
|
|
|
19
19
|
applicationTemplate: https://github.com/aymericzip/intlayer-remix-3-template
|
|
20
20
|
applicationShowcase: https://intlayer-remix-3-template.vercel.app
|
|
21
21
|
history:
|
|
22
|
+
- version: 9.5.5
|
|
23
|
+
date: 2026-09-19
|
|
24
|
+
changes: "使用 remix-intlayer 中间件和钩子"
|
|
22
25
|
- version: 9.5.0
|
|
23
26
|
date: 2026-09-09
|
|
24
27
|
changes: "Remix 3 初始文档"
|
|
@@ -39,7 +42,7 @@ author: aymericzip
|
|
|
39
42
|
- **`remix/node-fetch-server`**: Node.js 服务器适配器,原生支持 Bun、Deno 与边缘运行时。
|
|
40
43
|
- **`remix/cookie`**: 具备加密安全性的 Cookie 解析与序列化工具。
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
结合 **Intlayer** 和 **`remix-intlayer`** 软件包(包含语言环境中间件以及与 `react-intlayer` 相同的 `useIntlayer` / `useDictionary` / `useLocale` 钩子,绑定到 Remix 请求上下文),你将获得一个完整的国际化系统,提供编译时安全性、自动化 AI 翻译、零开销服务端渲染以及流畅的语言环境路由。
|
|
43
46
|
|
|
44
47
|
## 目录
|
|
45
48
|
|
|
@@ -52,7 +55,7 @@ author: aymericzip
|
|
|
52
55
|
<AccordionGroup>
|
|
53
56
|
<Accordion header="全面支持 Remix 3 和 Web 标准">
|
|
54
57
|
|
|
55
|
-
Intlayer
|
|
58
|
+
Intlayer 专为与 Web 标准(`Request`、`Response`、`Headers` 和 `URL`)无缝协作而构建。`remix-intlayer` 作为轻量级中间件插入 Remix 3 的 Fetch 路由器中,从 URL 路径、Cookie 或 `Accept-Language` 请求头中提取语言环境,并将其暴露给请求的其余部分、处理程序、视图和 `remix/ui` 组件,无需手动传递参数,也不会将你锁定在特定运行时。
|
|
56
59
|
|
|
57
60
|
</Accordion>
|
|
58
61
|
<Accordion header="类型安全的内容声明">
|
|
@@ -109,25 +112,27 @@ Intlayer 将内容声明 (`.content.ts`) 与路由业务逻辑就近同构,大
|
|
|
109
112
|
<Steps>
|
|
110
113
|
<Step number={1} title="安装依赖">
|
|
111
114
|
|
|
112
|
-
|
|
115
|
+
使用你喜欢的包管理器安装 `intlayer`、`remix-intlayer` 和 `remix`(版本 3):
|
|
113
116
|
|
|
114
117
|
```bash packageManager="npm"
|
|
115
|
-
npm install intlayer remix@next
|
|
118
|
+
npm install intlayer remix-intlayer remix@next
|
|
116
119
|
```
|
|
117
120
|
|
|
118
121
|
```bash packageManager="pnpm"
|
|
119
|
-
pnpm add intlayer remix@next
|
|
122
|
+
pnpm add intlayer remix-intlayer remix@next
|
|
120
123
|
```
|
|
121
124
|
|
|
122
125
|
```bash packageManager="yarn"
|
|
123
|
-
yarn add intlayer remix@next
|
|
126
|
+
yarn add intlayer remix-intlayer remix@next
|
|
124
127
|
```
|
|
125
128
|
|
|
126
129
|
```bash packageManager="bun"
|
|
127
|
-
bun add intlayer remix@next
|
|
130
|
+
bun add intlayer remix-intlayer remix@next
|
|
128
131
|
```
|
|
129
132
|
|
|
130
133
|
- **`intlayer`**: 核心国际化引擎,负责配置管理、字典声明 (`t()`, `Dictionary`)、CLI 工具和运行时解释器。
|
|
134
|
+
- **`remix-intlayer`**:Remix 3 集成:解析每个请求语言环境的 `intlayer()` 路由器中间件,以及在下游任何位置读取它的 `useIntlayer`、`useDictionary` 和 `useLocale` 钩子。
|
|
135
|
+
- **`remix-intlayer`**:Remix 3 集成:解析每个请求语言环境的 `intlayer()` 路由器中间件,以及在下游任何位置读取它的 `useIntlayer`、`useDictionary` 和 `useLocale` 钩子。
|
|
131
136
|
- **`remix`**: 统一的 Remix 3 框架包,导出 `remix/router`、`remix/routes`、`remix/ui`、`remix/middleware/render` 以及 `remix/node-fetch-server`。
|
|
132
137
|
|
|
133
138
|
</Step>
|
|
@@ -254,65 +259,30 @@ bun x intlayer build
|
|
|
254
259
|
此操作会将内容编译至 `.intlayer` 产物目录中,提供完整的 TypeScript 自动补全和快速字典查询。
|
|
255
260
|
|
|
256
261
|
</Step>
|
|
257
|
-
<Step number={5} title="
|
|
258
|
-
|
|
259
|
-
Remix 3 通过 `createRouter({ middleware: [...] })`
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
1.
|
|
264
|
-
2.
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* 用于从 Remix 3 RequestContext 中获取已解析语言的类型安全上下文键。
|
|
278
|
-
*/
|
|
279
|
-
export const localeKey = createContextKey<Locale>(defaultLocale);
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Remix 3 的 Intlayer 中间件。
|
|
283
|
-
*
|
|
284
|
-
* 按照以下优先级解析请求语言:
|
|
285
|
-
* 1. URL 路径前缀(例如 `/zh/...`),通过 `getLocaleFromPath` 获取
|
|
286
|
-
* 2. 存储与请求头协商,通过 `getLocale` 获取(Cookie、自定义请求头、Accept-Language 协商、fallback 回退 defaultLocale)
|
|
287
|
-
*
|
|
288
|
-
* 将解析出的语言附加至 Remix 3 RequestContext。
|
|
289
|
-
*/
|
|
290
|
-
export const intlayer = (): Middleware => {
|
|
291
|
-
return async (context, next) => {
|
|
292
|
-
// 路径检测 (/zh/about -> "zh", /about -> undefined)
|
|
293
|
-
const pathLocale = getLocaleFromPath(context.url.pathname);
|
|
294
|
-
|
|
295
|
-
if (pathLocale) {
|
|
296
|
-
// 将解析出的语言附加至 Remix 3 请求上下文
|
|
297
|
-
context.set(localeKey, pathLocale);
|
|
298
|
-
|
|
299
|
-
return next();
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
const storedLocale = await getLocale({
|
|
303
|
-
getHeader: (name) => context.headers.get(name),
|
|
304
|
-
getCookie: (name) =>
|
|
305
|
-
getCookie(name, context.headers.get("cookie") ?? undefined),
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
// 将解析出的语言附加至 Remix 3 请求上下文
|
|
309
|
-
context.set(localeKey, storedLocale ?? defaultLocale);
|
|
310
|
-
|
|
311
|
-
return next();
|
|
312
|
-
};
|
|
313
|
-
};
|
|
262
|
+
<Step number={5} title="添加 Intlayer 中间件">
|
|
263
|
+
|
|
264
|
+
Remix 3 通过 `createRouter({ middleware: [...] })` 提供可组合的中间件管道。
|
|
265
|
+
|
|
266
|
+
`remix-intlayer` 提供了 `intlayer()` 中间件。对于每个传入请求,它使用以下内容解析语言环境:
|
|
267
|
+
|
|
268
|
+
1. 除 `no-prefix` 之外的所有路由模式下的 URL:路径前缀(例如 `/zh` 或 `/en`)或 `?locale=` 查询参数。
|
|
269
|
+
2. 客户端持久化的语言环境:存储 Cookie(`INTLAYER_LOCALE`)或自定义标头(`x-intlayer-locale`)。
|
|
270
|
+
3. 标准 `Accept-Language` 协商,回退到配置的 `defaultLocale`。
|
|
271
|
+
|
|
272
|
+
结果作为 `context.intlayer`(或 `context.get(Intlayer)`)存储在 Remix 请求上下文中,包含 `locale`、`defaultLocale` 和 `availableLocales`。中间件随后在绑定到该上下文的 `AsyncLocalStorage` 作用域内运行请求的其余部分,使得该包的钩子无需传递参数即可读取语言环境,无论是在路由处理程序、视图还是 `remix/ui` 组件中:
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
import { useIntlayer, useLocale } from "remix-intlayer";
|
|
276
|
+
|
|
277
|
+
// 中间件下游的任何位置
|
|
278
|
+
const { locale, availableLocales } = useLocale();
|
|
279
|
+
const { title } = useIntlayer("home");
|
|
314
280
|
```
|
|
315
281
|
|
|
282
|
+
`useIntlayer("home", "fr")` 或 `useIntlayer("faq", { item: 2 })` 可在单次调用中覆盖请求语言环境,而 `useDictionary(homeContent)` 读取导入的字典而不是键。在请求之外,钩子会回退到默认语言环境。
|
|
283
|
+
|
|
284
|
+
> 中间件还会在服务器启动时准备 Intlayer 字典,因此即使缺少 `intlayer build` 也不会导致注册表为空。
|
|
285
|
+
|
|
316
286
|
</Step>
|
|
317
287
|
<Step number={6} title="定义类型安全路由">
|
|
318
288
|
|
|
@@ -342,20 +312,21 @@ routes.localizedHome.href({ locale: "zh" }); // "/zh"
|
|
|
342
312
|
|
|
343
313
|
Remix 3 使用来自 `remix/ui` 的 JSX 组件渲染 UI。组件是一个接收 `Handle` 并返回**渲染函数**的**设置函数**。设置函数每个实例仅执行一次,渲染函数在每次更新时执行,并通过 `handle.props` 读取属性。
|
|
344
314
|
|
|
345
|
-
|
|
315
|
+
从一个共享的 `Document` 外壳开始,它根据中间件解析的语言环境设置 `<html lang="..." dir="...">` 属性:
|
|
346
316
|
|
|
347
317
|
```tsx fileName="src/views/document.tsx" codeFormat={["typescript", "esm"]}
|
|
348
|
-
import { getHTMLTextDir
|
|
318
|
+
import { getHTMLTextDir } from "intlayer";
|
|
319
|
+
import { useLocale } from "remix-intlayer";
|
|
349
320
|
import type { Handle, RemixNode } from "remix/ui";
|
|
350
321
|
|
|
351
322
|
type DocumentProps = {
|
|
352
|
-
locale: Locale;
|
|
353
323
|
title: string;
|
|
354
324
|
children?: RemixNode;
|
|
355
325
|
};
|
|
356
326
|
|
|
357
327
|
export const Document = (handle: Handle<DocumentProps>) => () => {
|
|
358
|
-
const {
|
|
328
|
+
const { title, children } = handle.props;
|
|
329
|
+
const { locale } = useLocale();
|
|
359
330
|
|
|
360
331
|
return (
|
|
361
332
|
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
@@ -370,47 +341,40 @@ export const Document = (handle: Handle<DocumentProps>) => () => {
|
|
|
370
341
|
};
|
|
371
342
|
```
|
|
372
343
|
|
|
373
|
-
|
|
344
|
+
然后创建主页。它使用 `useIntlayer` 读取本地化字典并渲染语言切换器:
|
|
374
345
|
|
|
375
346
|
```tsx fileName="src/views/home.tsx" codeFormat={["typescript", "esm"]}
|
|
376
|
-
import {
|
|
377
|
-
|
|
378
|
-
getLocaleName,
|
|
379
|
-
getLocalizedPath,
|
|
380
|
-
type Locale,
|
|
381
|
-
locales,
|
|
382
|
-
} from "intlayer";
|
|
383
|
-
import type { Handle } from "remix/ui";
|
|
384
|
-
import { routes } from "../routes";
|
|
347
|
+
import { getLocaleName, getLocalizedUrl, getPathWithoutLocale } from "intlayer";
|
|
348
|
+
import { useIntlayer, useLocale } from "remix-intlayer";
|
|
385
349
|
import { Document } from "./document";
|
|
386
350
|
|
|
387
|
-
|
|
388
|
-
locale
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
392
|
-
const { locale } = handle.props;
|
|
393
|
-
const home = getIntlayer("home", locale);
|
|
351
|
+
export const HomePage = () => () => {
|
|
352
|
+
const { locale, availableLocales } = useLocale();
|
|
353
|
+
const home = useIntlayer("home");
|
|
354
|
+
const pathWithoutLocale = getPathWithoutLocale();
|
|
394
355
|
|
|
395
356
|
return (
|
|
396
|
-
<Document
|
|
357
|
+
<Document title={home.title}>
|
|
397
358
|
<header>
|
|
398
359
|
<nav aria-label="Languages">
|
|
399
360
|
<span>{home.switchLanguage}</span>
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
key={
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
361
|
+
<ul>
|
|
362
|
+
{availableLocales.map((localeItem) => {
|
|
363
|
+
const isActive = localeItem === locale;
|
|
364
|
+
|
|
365
|
+
return (
|
|
366
|
+
<li key={localeItem} class="p-1">
|
|
367
|
+
<a
|
|
368
|
+
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
369
|
+
class={isActive ? "active" : undefined}
|
|
370
|
+
aria-current={isActive ? "page" : undefined}
|
|
371
|
+
>
|
|
372
|
+
{getLocaleName(localeItem, locale)}
|
|
373
|
+
</a>
|
|
374
|
+
</li>
|
|
375
|
+
);
|
|
376
|
+
})}
|
|
377
|
+
</ul>
|
|
414
378
|
</nav>
|
|
415
379
|
</header>
|
|
416
380
|
<main>
|
|
@@ -422,7 +386,7 @@ export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
|
422
386
|
};
|
|
423
387
|
```
|
|
424
388
|
|
|
425
|
-
> Remix JSX
|
|
389
|
+
> Remix JSX 不是 React:`class` 原样书写(也接受 `className`),并且通过 `handle.update()` 显式触发重新渲染。插值会自动转义。Intlayer 钩子是读取请求作用域的普通函数,因此可以从 setup 函数或 render 函数中调用。
|
|
426
390
|
|
|
427
391
|
</Step>
|
|
428
392
|
<Step number={8} title="串联路由器与服务器">
|
|
@@ -431,39 +395,37 @@ export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
|
431
395
|
|
|
432
396
|
```tsx fileName="src/router.tsx" codeFormat={["typescript", "esm"]}
|
|
433
397
|
import { isDeclaredLocale } from "intlayer";
|
|
398
|
+
import { intlayer } from "remix-intlayer";
|
|
434
399
|
import { render } from "remix/middleware/render";
|
|
435
400
|
import { createRouter } from "remix/router";
|
|
436
|
-
import { intlayer, localeKey } from "./middleware/intlayer";
|
|
437
401
|
import { routes } from "./routes";
|
|
438
402
|
import { HomePage } from "./views/home";
|
|
439
403
|
|
|
440
|
-
// 1.
|
|
404
|
+
// 1. Initialize router with Intlayer + render middleware
|
|
441
405
|
export const router = createRouter({
|
|
442
406
|
middleware: [intlayer(), render()],
|
|
443
407
|
});
|
|
444
408
|
|
|
445
|
-
// 2.
|
|
409
|
+
// 2. Map route handlers
|
|
446
410
|
router.map(routes, {
|
|
447
411
|
actions: {
|
|
448
|
-
//
|
|
412
|
+
// Default locale route
|
|
449
413
|
home(context) {
|
|
450
|
-
|
|
451
|
-
return context.render(<HomePage locale={locale} />);
|
|
414
|
+
return context.render(<HomePage />);
|
|
452
415
|
},
|
|
453
416
|
|
|
454
|
-
//
|
|
417
|
+
// Localized route
|
|
455
418
|
localizedHome(context) {
|
|
456
419
|
if (!isDeclaredLocale(context.params.locale)) {
|
|
457
420
|
return new Response("Not Found", { status: 404 });
|
|
458
421
|
}
|
|
459
|
-
|
|
460
|
-
return context.render(<HomePage locale={locale} />);
|
|
422
|
+
return context.render(<HomePage />);
|
|
461
423
|
},
|
|
462
424
|
},
|
|
463
425
|
});
|
|
464
426
|
```
|
|
465
427
|
|
|
466
|
-
> `context.render`
|
|
428
|
+
> `context.render` 接受可选的 `ResponseInit` 作为第二个参数,例如 `context.render(<NotFoundPage />, { status: 404 })`。解析后的语言环境仍可作为 `context.intlayer.locale` 从处理程序访问,例如用于构建 `Response.json` 响应体。
|
|
467
429
|
|
|
468
430
|
最后,通过标准 `fetch` 处理函数暴露路由器。同一个路由器可无缝运行在 Node.js、Bun、Deno 及 Cloudflare Workers 上:
|
|
469
431
|
|
|
@@ -1266,6 +1266,13 @@ TanStack Start 本身不包含 i18n 层,而在 Solid 生态中可用的选择
|
|
|
1266
1266
|
|
|
1267
1267
|
可以通过在您自己的基础设施上运行的 [可视化编辑器](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) 进行无需重新部署的内容外部化更新。
|
|
1268
1268
|
|
|
1269
|
+
</Question>
|
|
1270
|
+
<Question title="可视化编辑器的成本是多少?如果我不需要它,会不会显得多余?">
|
|
1271
|
+
|
|
1272
|
+
如果未进行配置,Intlayer [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)对您的应用程序是 **零成本** 的。额外的逻辑仅在显式启用并在需要时才会加载。
|
|
1273
|
+
|
|
1274
|
+
即使启用,其开销也极其轻量(仅在激活时动态加载 +5 kB),因为主要逻辑由 [app.intlayer.org](https://app.intlayer.org) 上的服务端编辑器或通过 `intlayer-editor` 软件包进行处理。如果您只需要一个无需可视化编辑的简单翻译方案,Intlayer 不会给您的应用带来任何额外负担。
|
|
1275
|
+
|
|
1269
1276
|
</Question>
|
|
1270
1277
|
<Question title="Intlayer 是免费且开源的吗?">
|
|
1271
1278
|
|
|
@@ -1336,6 +1336,13 @@ TanStack Start 本身没有自带的 i18n 层,因此需要选择第三方库
|
|
|
1336
1336
|
|
|
1337
1337
|
可以通过在您自己的基础设施上运行的 [可视化编辑器](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) 进行无需重新部署的内容外部化更新。
|
|
1338
1338
|
|
|
1339
|
+
</Question>
|
|
1340
|
+
<Question title="可视化编辑器的成本是多少?如果我不需要它,会不会显得多余?">
|
|
1341
|
+
|
|
1342
|
+
如果未进行配置,Intlayer [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)对您的应用程序是 **零成本** 的。额外的逻辑仅在显式启用并在需要时才会加载。
|
|
1343
|
+
|
|
1344
|
+
即使启用,其开销也极其轻量(仅在激活时动态加载 +5 kB),因为主要逻辑由 [app.intlayer.org](https://app.intlayer.org) 上的服务端编辑器或通过 `intlayer-editor` 软件包进行处理。如果您只需要一个无需可视化编辑的简单翻译方案,Intlayer 不会给您的应用带来任何额外负担。
|
|
1345
|
+
|
|
1339
1346
|
</Question>
|
|
1340
1347
|
<Question title="Intlayer 是免费且开源的吗?">
|
|
1341
1348
|
|
|
@@ -1161,6 +1161,13 @@ Vite 本身对 i18n 没有特定偏好,因此选择主要来自 Preact 生态
|
|
|
1161
1161
|
|
|
1162
1162
|
可以通过自托管的 [可视化编辑器](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) 进行无需重新部署的内容外部化更新。
|
|
1163
1163
|
|
|
1164
|
+
</Question>
|
|
1165
|
+
<Question title="可视化编辑器的成本是多少?如果我不需要它,会不会显得多余?">
|
|
1166
|
+
|
|
1167
|
+
如果未进行配置,Intlayer [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)对您的应用程序是 **零成本** 的。额外的逻辑仅在显式启用并在需要时才会加载。
|
|
1168
|
+
|
|
1169
|
+
即使启用,其开销也极其轻量(仅在激活时动态加载 +5 kB),因为主要逻辑由 [app.intlayer.org](https://app.intlayer.org) 上的服务端编辑器或通过 `intlayer-editor` 软件包进行处理。如果您只需要一个无需可视化编辑的简单翻译方案,Intlayer 不会给您的应用带来任何额外负担。
|
|
1170
|
+
|
|
1164
1171
|
</Question>
|
|
1165
1172
|
<Question title="Intlayer 是免费且开源的吗?">
|
|
1166
1173
|
|
|
@@ -1080,6 +1080,13 @@ Intlayer 处理语言环境解析,并将路由交由您的路由库处理。
|
|
|
1080
1080
|
|
|
1081
1081
|
可以通过自托管的 [可视化编辑器](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) 进行无需重新部署的内容外部化更新。
|
|
1082
1082
|
|
|
1083
|
+
</Question>
|
|
1084
|
+
<Question title="可视化编辑器的成本是多少?如果我不需要它,会不会显得多余?">
|
|
1085
|
+
|
|
1086
|
+
如果未进行配置,Intlayer [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)对您的应用程序是 **零成本** 的。额外的逻辑仅在显式启用并在需要时才会加载。
|
|
1087
|
+
|
|
1088
|
+
即使启用,其开销也极其轻量(仅在激活时动态加载 +5 kB),因为主要逻辑由 [app.intlayer.org](https://app.intlayer.org) 上的服务端编辑器或通过 `intlayer-editor` 软件包进行处理。如果您只需要一个无需可视化编辑的简单翻译方案,Intlayer 不会给您的应用带来任何额外负担。
|
|
1089
|
+
|
|
1083
1090
|
</Question>
|
|
1084
1091
|
<Question title="Intlayer 是免费且开源的吗?">
|
|
1085
1092
|
|
|
@@ -918,6 +918,13 @@ Vite 本身对 i18n 没有特定偏好,因此选择主要来自 Solid 生态
|
|
|
918
918
|
|
|
919
919
|
可以通过自托管的 [可视化编辑器](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) 进行无需重新部署的内容外部化更新。
|
|
920
920
|
|
|
921
|
+
</Question>
|
|
922
|
+
<Question title="可视化编辑器的成本是多少?如果我不需要它,会不会显得多余?">
|
|
923
|
+
|
|
924
|
+
如果未进行配置,Intlayer [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)对您的应用程序是 **零成本** 的。额外的逻辑仅在显式启用并在需要时才会加载。
|
|
925
|
+
|
|
926
|
+
即使启用,其开销也极其轻量(仅在激活时动态加载 +5 kB),因为主要逻辑由 [app.intlayer.org](https://app.intlayer.org) 上的服务端编辑器或通过 `intlayer-editor` 软件包进行处理。如果您只需要一个无需可视化编辑的简单翻译方案,Intlayer 不会给您的应用带来任何额外负担。
|
|
927
|
+
|
|
921
928
|
</Question>
|
|
922
929
|
<Question title="Intlayer 是免费且开源的吗?">
|
|
923
930
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-01-21
|
|
3
|
-
updatedAt: 2026-
|
|
4
|
-
title: astro-intlayer
|
|
5
|
-
description:
|
|
3
|
+
updatedAt: 2026-09-19
|
|
4
|
+
title: astro-intlayer 软件包文档
|
|
5
|
+
description: Intlayer 的 Astro 集成,提供基于语言环境的路由、中间件、钩子 (hooks)、客户端存储以及字典管理配置。
|
|
6
6
|
keywords:
|
|
7
7
|
- astro-intlayer
|
|
8
8
|
- astro
|
|
9
|
-
-
|
|
9
|
+
- 国际化
|
|
10
10
|
- i18n
|
|
11
11
|
slugs:
|
|
12
12
|
- doc
|
|
@@ -14,15 +14,18 @@ slugs:
|
|
|
14
14
|
- astro-intlayer
|
|
15
15
|
- exports
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.5.5
|
|
18
|
+
date: 2026-09-19
|
|
19
|
+
changes: "添加 useIntlayer、useDictionary、useLocale 钩子、中间件和格式化工具文档"
|
|
17
20
|
- version: 8.0.0
|
|
18
21
|
date: 2026-01-21
|
|
19
|
-
changes: "
|
|
22
|
+
changes: "所有导出内容的统一文档"
|
|
20
23
|
author: aymericzip
|
|
21
24
|
---
|
|
22
25
|
|
|
23
|
-
# astro-intlayer
|
|
26
|
+
# astro-intlayer 软件包
|
|
24
27
|
|
|
25
|
-
`astro-intlayer`
|
|
28
|
+
`astro-intlayer` 软件包提供了将 Intlayer 集成到 Astro 应用程序中所需的工具。它配置基于语言环境的路由、字典管理、构建时页面重写、请求中间件以及用于在服务器端渲染的 `.astro` 组件和客户端脚本中访问多语言内容的钩子。
|
|
26
29
|
|
|
27
30
|
## 安装
|
|
28
31
|
|
|
@@ -30,26 +33,175 @@ author: aymericzip
|
|
|
30
33
|
npm install astro-intlayer
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
##
|
|
36
|
+
## 导出项
|
|
34
37
|
|
|
35
38
|
### 集成
|
|
36
39
|
|
|
37
|
-
astro-intlayer
|
|
40
|
+
`astro-intlayer` 软件包提供了一个 Astro 集成,用于在项目中配置 Intlayer。
|
|
38
41
|
|
|
39
42
|
导入:
|
|
40
43
|
|
|
41
44
|
```tsx
|
|
42
|
-
import "astro-intlayer";
|
|
45
|
+
import { intlayer } from "astro-intlayer";
|
|
43
46
|
```
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
或在 `astro.config.mjs` 中使用默认导入:
|
|
46
49
|
|
|
47
50
|
```ts
|
|
51
|
+
import { defineConfig } from "astro/config";
|
|
52
|
+
import intlayer from "astro-intlayer";
|
|
53
|
+
|
|
48
54
|
export default defineConfig({
|
|
49
55
|
integrations: [intlayer()],
|
|
50
56
|
});
|
|
51
57
|
```
|
|
52
58
|
|
|
53
|
-
| 函数 |
|
|
54
|
-
| ---------- |
|
|
55
|
-
| `intlayer` |
|
|
59
|
+
| 函数 | 描述 | 相关文档 |
|
|
60
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
61
|
+
| `intlayer` | Astro 集成,负责准备字典、配置 Vite 插件(别名、路由代理、剪裁)、自动注册请求中间件并在重写的本地化 URL 输出预渲染页面。 | [intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/astro-intlayer/intlayer.md) |
|
|
62
|
+
|
|
63
|
+
### 钩子(服务端与客户端)
|
|
64
|
+
|
|
65
|
+
导入:
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
import { useIntlayer, useDictionary, useLocale } from "astro-intlayer";
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
| 钩子 | 描述 | 相关文档 |
|
|
72
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
73
|
+
| `useIntlayer` | 根据键选择一个字典并返回其本地化内容。在 `.astro` frontmatter 中从 `Astro.locals` 读取请求语言环境,在 `<script>` 中从客户端 store 读取。 | [useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/astro-intlayer/useIntlayer.md) |
|
|
74
|
+
| `useDictionary` | 转换字典对象并返回解析后的语言环境对应的内容。在 frontmatter 和客户端脚本中均可使用。 | [useDictionary](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/astro-intlayer/useDictionary.md) |
|
|
75
|
+
| `useLocale` | 返回当前语言环境、默认语言环境、可用语言环境列表以及更新语言环境的函数。 | [useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/astro-intlayer/useLocale.md) |
|
|
76
|
+
|
|
77
|
+
### 中间件 (astro-intlayer/middleware)
|
|
78
|
+
|
|
79
|
+
导入:
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
import { onRequest } from "astro-intlayer/middleware";
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
| 导出项 | 类型 | 描述 | 相关文档 |
|
|
86
|
+
| ----------- | ------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| `onRequest` | `MiddlewareHandler` | 检测请求语言环境并附加 `Astro.locals.intlayer` 的 Astro 中间件。由 `intlayer()` 自动注册,或者手动导入进行组合。 | [onRequest](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/astro-intlayer/onRequest.md) |
|
|
88
|
+
|
|
89
|
+
### 实用工具
|
|
90
|
+
|
|
91
|
+
导入:
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
import { getIntlayerLocals } from "astro-intlayer";
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
| 函数 | 描述 | 相关文档 |
|
|
98
|
+
| ------------------- | ---------------------------------------------------------------------------------- | -------- |
|
|
99
|
+
| `getIntlayerLocals` | 辅助函数,用于在 `Astro.locals` 之外从请求存储范围检索当前 `IntlayerLocals` 对象。 | - |
|
|
100
|
+
|
|
101
|
+
### 客户端实用工具 (astro-intlayer/client)
|
|
102
|
+
|
|
103
|
+
导入:
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
import {
|
|
107
|
+
useIntlayer,
|
|
108
|
+
useDictionary,
|
|
109
|
+
useDictionaryDynamic,
|
|
110
|
+
useLocale,
|
|
111
|
+
useLocaleStorage,
|
|
112
|
+
useLocaleCookie,
|
|
113
|
+
getIntlayer,
|
|
114
|
+
getDictionary,
|
|
115
|
+
installIntlayer,
|
|
116
|
+
setLocaleInStorage,
|
|
117
|
+
setLocaleCookie,
|
|
118
|
+
localeInStorage,
|
|
119
|
+
localeCookie,
|
|
120
|
+
} from "astro-intlayer/client";
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
在浏览器或客户端 `<script>` 标签内导入时,`astro-intlayer` 会自动映射到 `astro-intlayer/client`(由 `vanilla-intlayer` 提供支持),提供客户端字典获取器、store 订阅者和语言环境持久化工具。
|
|
124
|
+
|
|
125
|
+
### 格式化工具 (astro-intlayer/format)
|
|
126
|
+
|
|
127
|
+
导入:
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
import {
|
|
131
|
+
useIntl,
|
|
132
|
+
useDate,
|
|
133
|
+
useNumber,
|
|
134
|
+
useCurrency,
|
|
135
|
+
usePercentage,
|
|
136
|
+
useRelativeTime,
|
|
137
|
+
useList,
|
|
138
|
+
useUnit,
|
|
139
|
+
useCompact,
|
|
140
|
+
} from "astro-intlayer/format";
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
| 钩子 | 描述 |
|
|
144
|
+
| ----------------- | -------------------------------------------------------------------------- |
|
|
145
|
+
| `useIntl` | 返回绑定到请求或客户端语言环境的 Intl 实例,具备缓存和订阅功能。 |
|
|
146
|
+
| `useDate` | 返回预绑定到当前语言环境的日期格式化函数 (`Intl.DateTimeFormat`)。 |
|
|
147
|
+
| `useNumber` | 返回预绑定到当前语言环境的数字格式化函数 (`Intl.NumberFormat`)。 |
|
|
148
|
+
| `useCurrency` | 返回预绑定到当前语言环境的货币格式化函数。 |
|
|
149
|
+
| `usePercentage` | 返回预绑定到当前语言环境的百分比格式化函数。 |
|
|
150
|
+
| `useRelativeTime` | 返回预绑定到当前语言环境的相对时间格式化函数 (`Intl.RelativeTimeFormat`)。 |
|
|
151
|
+
| `useList` | 返回预绑定到当前语言环境的列表格式化函数 (`Intl.ListFormat`)。 |
|
|
152
|
+
| `useUnit` | 返回预绑定到当前语言环境的单位格式化函数。 |
|
|
153
|
+
| `useCompact` | 返回预绑定到当前语言环境的紧凑数字格式化函数(例如 `1.5K`)。 |
|
|
154
|
+
|
|
155
|
+
### HTML 实用工具 (astro-intlayer/html)
|
|
156
|
+
|
|
157
|
+
导入:
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
import { renderHTML, useHTML, useHTMLRenderer } from "astro-intlayer/html";
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
| 导出项 | 类型 | 描述 |
|
|
164
|
+
| ----------------- | ---------- | ------------------------------------ |
|
|
165
|
+
| `renderHTML` | `Function` | 用于渲染 HTML 节点的独立实用函数。 |
|
|
166
|
+
| `useHTML` | `Hook` | 获取 HTML 提供者上下文和配置的钩子。 |
|
|
167
|
+
| `useHTMLRenderer` | `Hook` | 获取预配置的 HTML 渲染器函数的钩子。 |
|
|
168
|
+
|
|
169
|
+
### Markdown 实用工具 (astro-intlayer/markdown)
|
|
170
|
+
|
|
171
|
+
导入:
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
import {
|
|
175
|
+
compileMarkdown,
|
|
176
|
+
renderMarkdown,
|
|
177
|
+
parseMarkdown,
|
|
178
|
+
useMarkdown,
|
|
179
|
+
useMarkdownRenderer,
|
|
180
|
+
} from "astro-intlayer/markdown";
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
| 导出项 | 类型 | 描述 |
|
|
184
|
+
| --------------------- | ---------- | ---------------------------------------- |
|
|
185
|
+
| `compileMarkdown` | `Function` | 将 Markdown 字符串编译为结构化表示。 |
|
|
186
|
+
| `renderMarkdown` | `Function` | 将 Markdown 内容渲染为输出节点。 |
|
|
187
|
+
| `parseMarkdown` | `Function` | 将原始 Markdown 内容解析为 AST。 |
|
|
188
|
+
| `useMarkdown` | `Hook` | 获取 Markdown 提供者上下文的钩子。 |
|
|
189
|
+
| `useMarkdownRenderer` | `Hook` | 获取预配置的 Markdown 渲染器函数的钩子。 |
|
|
190
|
+
|
|
191
|
+
### 类型
|
|
192
|
+
|
|
193
|
+
导入:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
import type {
|
|
197
|
+
IntlayerLocals,
|
|
198
|
+
UseLocaleProps,
|
|
199
|
+
UseLocaleResult,
|
|
200
|
+
} from "astro-intlayer";
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
| 类型 | 描述 |
|
|
204
|
+
| ----------------- | --------------------------------------------------------------------------------------------- |
|
|
205
|
+
| `IntlayerLocals` | 附加到 `Astro.locals.intlayer` 的对象,包含 `locale`、`defaultLocale` 和 `availableLocales`。 |
|
|
206
|
+
| `UseLocaleProps` | `useLocale()` 接受的可选配置属性。 |
|
|
207
|
+
| `UseLocaleResult` | `useLocale()` 的返回类型,提供语言环境属性和更新方法。 |
|