@intlayer/docs 8.5.1 → 8.5.2
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/intlayer_with_i18next.md +1 -1
- package/blog/ar/intlayer_with_next-i18next.md +1 -1
- package/blog/ar/intlayer_with_next-intl.md +1 -1
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/ar/intlayer_with_vue-i18n.md +1 -1
- package/blog/de/intlayer_with_i18next.md +1 -1
- package/blog/de/intlayer_with_next-i18next.md +1 -1
- package/blog/de/intlayer_with_next-intl.md +1 -1
- package/blog/de/intlayer_with_react-i18next.md +1 -1
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/de/intlayer_with_vue-i18n.md +1 -1
- package/blog/en/intlayer_with_i18next.md +1 -1
- package/blog/en/intlayer_with_next-i18next.md +1 -1
- package/blog/en/intlayer_with_next-intl.md +1 -1
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en/intlayer_with_vue-i18n.md +1 -1
- package/blog/en-GB/intlayer_with_i18next.md +1 -1
- package/blog/en-GB/intlayer_with_next-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_next-intl.md +1 -1
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/intlayer_with_vue-i18n.md +1 -1
- package/blog/es/intlayer_with_i18next.md +1 -1
- package/blog/es/intlayer_with_next-i18next.md +1 -1
- package/blog/es/intlayer_with_next-intl.md +1 -1
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/es/intlayer_with_vue-i18n.md +1 -1
- package/blog/fr/intlayer_with_i18next.md +1 -1
- package/blog/fr/intlayer_with_next-i18next.md +1 -1
- package/blog/fr/intlayer_with_next-intl.md +1 -1
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/fr/intlayer_with_vue-i18n.md +1 -1
- package/blog/hi/intlayer_with_i18next.md +1 -1
- package/blog/hi/intlayer_with_next-i18next.md +1 -1
- package/blog/hi/intlayer_with_next-intl.md +1 -1
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/hi/intlayer_with_vue-i18n.md +1 -1
- package/blog/id/intlayer_with_i18next.md +1 -1
- package/blog/id/intlayer_with_next-i18next.md +1 -1
- package/blog/id/intlayer_with_next-intl.md +1 -1
- package/blog/id/intlayer_with_react-i18next.md +1 -1
- package/blog/id/intlayer_with_react-intl.md +1 -1
- package/blog/id/intlayer_with_vue-i18n.md +1 -1
- package/blog/it/intlayer_with_i18next.md +1 -1
- package/blog/it/intlayer_with_next-i18next.md +1 -1
- package/blog/it/intlayer_with_next-intl.md +1 -1
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/it/intlayer_with_vue-i18n.md +1 -1
- package/blog/ja/intlayer_with_i18next.md +1 -1
- package/blog/ja/intlayer_with_next-i18next.md +1 -1
- package/blog/ja/intlayer_with_next-intl.md +1 -1
- package/blog/ja/intlayer_with_react-i18next.md +1 -1
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ja/intlayer_with_vue-i18n.md +1 -1
- package/blog/ko/intlayer_with_i18next.md +1 -1
- package/blog/ko/intlayer_with_next-i18next.md +1 -1
- package/blog/ko/intlayer_with_next-intl.md +1 -1
- package/blog/ko/intlayer_with_react-i18next.md +1 -1
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/ko/intlayer_with_vue-i18n.md +1 -1
- package/blog/pl/intlayer_with_i18next.md +1 -1
- package/blog/pl/intlayer_with_next-i18next.md +1 -1
- package/blog/pl/intlayer_with_next-intl.md +1 -1
- package/blog/pl/intlayer_with_react-i18next.md +1 -1
- package/blog/pl/intlayer_with_react-intl.md +1 -1
- package/blog/pl/intlayer_with_vue-i18n.md +1 -1
- package/blog/pt/intlayer_with_i18next.md +1 -1
- package/blog/pt/intlayer_with_next-i18next.md +1 -1
- package/blog/pt/intlayer_with_next-intl.md +1 -1
- package/blog/pt/intlayer_with_react-i18next.md +1 -1
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/pt/intlayer_with_vue-i18n.md +1 -1
- package/blog/ru/intlayer_with_i18next.md +1 -1
- package/blog/ru/intlayer_with_next-i18next.md +1 -1
- package/blog/ru/intlayer_with_next-intl.md +1 -1
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/ru/intlayer_with_vue-i18n.md +1 -1
- package/blog/tr/intlayer_with_i18next.md +1 -1
- package/blog/tr/intlayer_with_next-i18next.md +1 -1
- package/blog/tr/intlayer_with_next-intl.md +1 -1
- package/blog/tr/intlayer_with_react-i18next.md +1 -1
- package/blog/tr/intlayer_with_react-intl.md +1 -1
- package/blog/tr/intlayer_with_vue-i18n.md +1 -1
- package/blog/uk/intlayer_with_i18next.md +1 -1
- package/blog/uk/intlayer_with_next-i18next.md +1 -1
- package/blog/uk/intlayer_with_next-intl.md +1 -1
- package/blog/uk/intlayer_with_react-i18next.md +1 -1
- package/blog/uk/intlayer_with_react-intl.md +1 -1
- package/blog/uk/intlayer_with_vue-i18n.md +1 -1
- package/blog/vi/intlayer_with_i18next.md +1 -1
- package/blog/vi/intlayer_with_next-i18next.md +1 -1
- package/blog/vi/intlayer_with_next-intl.md +1 -1
- package/blog/vi/intlayer_with_react-i18next.md +1 -1
- package/blog/vi/intlayer_with_react-intl.md +1 -1
- package/blog/vi/intlayer_with_vue-i18n.md +1 -1
- package/blog/zh/intlayer_with_i18next.md +1 -1
- package/blog/zh/intlayer_with_next-i18next.md +1 -1
- package/blog/zh/intlayer_with_next-intl.md +1 -1
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/blog/zh/intlayer_with_vue-i18n.md +1 -1
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.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/intlayer_CMS.md +1 -1
- package/docs/ar/intlayer_with_adonisjs.md +1 -1
- package/docs/ar/intlayer_with_analog.md +1 -1
- package/docs/ar/intlayer_with_angular.md +1 -1
- package/docs/ar/intlayer_with_create_react_app.md +1 -1
- package/docs/ar/intlayer_with_express.md +1 -1
- package/docs/ar/intlayer_with_fastify.md +1 -1
- package/docs/ar/intlayer_with_hono.md +1 -1
- package/docs/ar/intlayer_with_lynx+react.md +1 -1
- package/docs/ar/intlayer_with_nestjs.md +1 -1
- package/docs/ar/intlayer_with_next-i18next.md +1 -1
- package/docs/ar/intlayer_with_next-intl.md +1 -1
- package/docs/ar/intlayer_with_nextjs_14.md +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +1 -1
- package/docs/ar/intlayer_with_nextjs_16.md +2 -2
- package/docs/ar/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/ar/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_nuxt.md +1 -1
- package/docs/ar/intlayer_with_react_native+expo.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +2 -2
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/ar/intlayer_with_svelte_kit.md +3 -3
- package/docs/ar/intlayer_with_tanstack+solid.md +911 -0
- package/docs/ar/intlayer_with_tanstack.md +2 -2
- package/docs/ar/intlayer_with_vite+lit.md +1 -1
- package/docs/ar/intlayer_with_vite+preact.md +2 -2
- package/docs/ar/intlayer_with_vite+react.md +2 -2
- package/docs/ar/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ar/intlayer_with_vite+solid.md +2 -2
- package/docs/ar/intlayer_with_vite+svelte.md +2 -2
- package/docs/ar/intlayer_with_vite+vanilla.md +2 -2
- package/docs/ar/intlayer_with_vite+vue.md +2 -2
- package/docs/bn/intlayer_with_fastify.md +1 -1
- package/docs/bn/intlayer_with_hono.md +1 -1
- package/docs/bn/intlayer_with_vite+lit.md +1 -1
- package/docs/bn/intlayer_with_vite+vanilla.md +2 -2
- package/docs/cs/intlayer_with_fastify.md +1 -1
- package/docs/cs/intlayer_with_hono.md +1 -1
- package/docs/cs/intlayer_with_vite+lit.md +1 -1
- package/docs/cs/intlayer_with_vite+vanilla.md +2 -2
- package/docs/de/intlayer_CMS.md +1 -1
- package/docs/de/intlayer_with_adonisjs.md +1 -1
- package/docs/de/intlayer_with_analog.md +1 -1
- package/docs/de/intlayer_with_angular.md +1 -1
- package/docs/de/intlayer_with_create_react_app.md +1 -1
- package/docs/de/intlayer_with_express.md +1 -1
- package/docs/de/intlayer_with_fastify.md +1 -1
- package/docs/de/intlayer_with_hono.md +1 -1
- package/docs/de/intlayer_with_lynx+react.md +1 -1
- package/docs/de/intlayer_with_nestjs.md +1 -1
- package/docs/de/intlayer_with_next-i18next.md +1 -1
- package/docs/de/intlayer_with_next-intl.md +1 -1
- package/docs/de/intlayer_with_nextjs_14.md +1 -1
- package/docs/de/intlayer_with_nextjs_15.md +1 -1
- package/docs/de/intlayer_with_nextjs_16.md +2 -2
- package/docs/de/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/de/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_nuxt.md +1 -1
- package/docs/de/intlayer_with_react_router_v7.md +2 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/de/intlayer_with_svelte_kit.md +3 -3
- package/docs/de/intlayer_with_tanstack+solid.md +911 -0
- package/docs/de/intlayer_with_tanstack.md +2 -2
- package/docs/de/intlayer_with_vite+lit.md +1 -1
- package/docs/de/intlayer_with_vite+preact.md +2 -2
- package/docs/de/intlayer_with_vite+react.md +2 -2
- package/docs/de/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/de/intlayer_with_vite+solid.md +2 -2
- package/docs/de/intlayer_with_vite+svelte.md +2 -2
- package/docs/de/intlayer_with_vite+vanilla.md +2 -2
- package/docs/de/intlayer_with_vite+vue.md +2 -2
- package/docs/en/intlayer_CMS.md +1 -1
- package/docs/en/intlayer_with_adonisjs.md +1 -1
- package/docs/en/intlayer_with_analog.md +1 -1
- package/docs/en/intlayer_with_angular.md +1 -1
- package/docs/en/intlayer_with_create_react_app.md +1 -1
- package/docs/en/intlayer_with_express.md +1 -1
- package/docs/en/intlayer_with_fastify.md +1 -1
- package/docs/en/intlayer_with_hono.md +1 -1
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +1 -1
- package/docs/en/intlayer_with_next-i18next.md +1 -1
- package/docs/en/intlayer_with_next-intl.md +1 -1
- package/docs/en/intlayer_with_nextjs_14.md +1 -1
- package/docs/en/intlayer_with_nextjs_15.md +1 -1
- package/docs/en/intlayer_with_nextjs_16.md +2 -2
- package/docs/en/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/en/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_nuxt.md +1 -1
- package/docs/en/intlayer_with_react_native+expo.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +2 -2
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/en/intlayer_with_svelte_kit.md +2 -2
- package/docs/en/intlayer_with_tanstack+solid.md +911 -0
- package/docs/en/intlayer_with_tanstack.md +2 -2
- package/docs/en/intlayer_with_vite+lit.md +1 -1
- package/docs/en/intlayer_with_vite+preact.md +2 -2
- package/docs/en/intlayer_with_vite+react.md +2 -2
- package/docs/en/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vanilla.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +2 -2
- package/docs/en-GB/intlayer_CMS.md +1 -1
- package/docs/en-GB/intlayer_with_adonisjs.md +1 -1
- package/docs/en-GB/intlayer_with_analog.md +1 -1
- package/docs/en-GB/intlayer_with_angular.md +1 -1
- package/docs/en-GB/intlayer_with_create_react_app.md +2 -2
- package/docs/en-GB/intlayer_with_express.md +1 -1
- package/docs/en-GB/intlayer_with_fastify.md +1 -1
- package/docs/en-GB/intlayer_with_hono.md +1 -1
- package/docs/en-GB/intlayer_with_lynx+react.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +1 -1
- package/docs/en-GB/intlayer_with_next-i18next.md +1 -1
- package/docs/en-GB/intlayer_with_next-intl.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_compiler.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_nuxt.md +1 -1
- package/docs/en-GB/intlayer_with_react_native+expo.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7.md +1 -1
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/en-GB/intlayer_with_svelte_kit.md +2 -2
- package/docs/en-GB/intlayer_with_tanstack+solid.md +912 -0
- package/docs/en-GB/intlayer_with_tanstack.md +1 -1
- package/docs/en-GB/intlayer_with_vite+lit.md +1 -1
- package/docs/en-GB/intlayer_with_vite+preact.md +1 -1
- package/docs/en-GB/intlayer_with_vite+react.md +1 -1
- package/docs/en-GB/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/en-GB/intlayer_with_vite+solid.md +1 -1
- package/docs/en-GB/intlayer_with_vite+svelte.md +1 -1
- package/docs/en-GB/intlayer_with_vite+vanilla.md +2 -2
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -1
- package/docs/es/intlayer_CMS.md +1 -1
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_analog.md +1 -1
- package/docs/es/intlayer_with_angular.md +1 -1
- package/docs/es/intlayer_with_create_react_app.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_lynx+react.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_next-i18next.md +1 -1
- package/docs/es/intlayer_with_next-intl.md +1 -1
- package/docs/es/intlayer_with_nextjs_14.md +1 -1
- package/docs/es/intlayer_with_nextjs_15.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +2 -2
- package/docs/es/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/es/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_native+expo.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +2 -2
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/es/intlayer_with_svelte_kit.md +3 -3
- package/docs/es/intlayer_with_tanstack+solid.md +911 -0
- package/docs/es/intlayer_with_tanstack.md +2 -2
- package/docs/es/intlayer_with_vite+lit.md +1 -1
- package/docs/es/intlayer_with_vite+preact.md +2 -2
- package/docs/es/intlayer_with_vite+react.md +2 -2
- package/docs/es/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/es/intlayer_with_vite+solid.md +2 -2
- package/docs/es/intlayer_with_vite+svelte.md +2 -2
- package/docs/es/intlayer_with_vite+vanilla.md +2 -2
- package/docs/es/intlayer_with_vite+vue.md +2 -2
- package/docs/es/packages/next-intlayer/index.md +1 -1
- package/docs/es/packages/react-intlayer/index.md +1 -1
- package/docs/fr/intlayer_CMS.md +1 -1
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_analog.md +1 -1
- package/docs/fr/intlayer_with_angular.md +1 -1
- package/docs/fr/intlayer_with_create_react_app.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_lynx+react.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_next-i18next.md +1 -1
- package/docs/fr/intlayer_with_next-intl.md +1 -1
- package/docs/fr/intlayer_with_nextjs_14.md +1 -1
- package/docs/fr/intlayer_with_nextjs_15.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +2 -2
- package/docs/fr/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/fr/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_nuxt.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +2 -2
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/fr/intlayer_with_svelte_kit.md +3 -3
- package/docs/fr/intlayer_with_tanstack+solid.md +911 -0
- package/docs/fr/intlayer_with_tanstack.md +2 -2
- package/docs/fr/intlayer_with_vite+lit.md +1 -1
- package/docs/fr/intlayer_with_vite+preact.md +2 -2
- package/docs/fr/intlayer_with_vite+react.md +2 -2
- package/docs/fr/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/fr/intlayer_with_vite+solid.md +2 -2
- package/docs/fr/intlayer_with_vite+svelte.md +2 -2
- package/docs/fr/intlayer_with_vite+vanilla.md +2 -2
- package/docs/fr/intlayer_with_vite+vue.md +2 -2
- package/docs/fr/packages/react-intlayer/index.md +1 -1
- package/docs/hi/intlayer_CMS.md +1 -1
- package/docs/hi/intlayer_with_adonisjs.md +1 -1
- package/docs/hi/intlayer_with_analog.md +1 -1
- package/docs/hi/intlayer_with_angular.md +1 -1
- package/docs/hi/intlayer_with_create_react_app.md +1 -1
- package/docs/hi/intlayer_with_express.md +1 -1
- package/docs/hi/intlayer_with_fastify.md +1 -1
- package/docs/hi/intlayer_with_hono.md +1 -1
- package/docs/hi/intlayer_with_lynx+react.md +1 -1
- package/docs/hi/intlayer_with_nestjs.md +1 -1
- package/docs/hi/intlayer_with_next-i18next.md +1 -1
- package/docs/hi/intlayer_with_next-intl.md +1 -1
- package/docs/hi/intlayer_with_nextjs_14.md +1 -1
- package/docs/hi/intlayer_with_nextjs_15.md +1 -1
- package/docs/hi/intlayer_with_nextjs_16.md +2 -2
- package/docs/hi/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/hi/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_nuxt.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +2 -2
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/hi/intlayer_with_svelte_kit.md +3 -3
- package/docs/hi/intlayer_with_tanstack+solid.md +911 -0
- package/docs/hi/intlayer_with_tanstack.md +2 -2
- package/docs/hi/intlayer_with_vite+lit.md +1 -1
- package/docs/hi/intlayer_with_vite+preact.md +2 -2
- package/docs/hi/intlayer_with_vite+react.md +2 -2
- package/docs/hi/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/hi/intlayer_with_vite+solid.md +2 -2
- package/docs/hi/intlayer_with_vite+svelte.md +2 -2
- package/docs/hi/intlayer_with_vite+vanilla.md +2 -2
- package/docs/hi/intlayer_with_vite+vue.md +2 -2
- package/docs/hi/packages/intlayer/index.md +1 -1
- package/docs/id/intlayer_CMS.md +1 -1
- package/docs/id/intlayer_with_adonisjs.md +1 -1
- package/docs/id/intlayer_with_analog.md +1 -1
- package/docs/id/intlayer_with_angular.md +1 -1
- package/docs/id/intlayer_with_create_react_app.md +1 -1
- package/docs/id/intlayer_with_express.md +1 -1
- package/docs/id/intlayer_with_fastify.md +1 -1
- package/docs/id/intlayer_with_hono.md +1 -1
- package/docs/id/intlayer_with_lynx+react.md +1 -1
- package/docs/id/intlayer_with_nestjs.md +1 -1
- package/docs/id/intlayer_with_next-i18next.md +1 -1
- package/docs/id/intlayer_with_next-intl.md +1 -1
- package/docs/id/intlayer_with_nextjs_14.md +1 -1
- package/docs/id/intlayer_with_nextjs_15.md +1 -1
- package/docs/id/intlayer_with_nextjs_16.md +2 -2
- package/docs/id/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/id/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/id/intlayer_with_nuxt.md +1 -1
- package/docs/id/intlayer_with_react_native+expo.md +1 -1
- package/docs/id/intlayer_with_react_router_v7.md +2 -2
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/id/intlayer_with_svelte_kit.md +3 -3
- package/docs/id/intlayer_with_tanstack+solid.md +911 -0
- package/docs/id/intlayer_with_tanstack.md +2 -2
- package/docs/id/intlayer_with_vite+lit.md +1 -1
- package/docs/id/intlayer_with_vite+preact.md +2 -2
- package/docs/id/intlayer_with_vite+react.md +2 -2
- package/docs/id/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/id/intlayer_with_vite+solid.md +2 -2
- package/docs/id/intlayer_with_vite+svelte.md +2 -2
- package/docs/id/intlayer_with_vite+vanilla.md +2 -2
- package/docs/id/intlayer_with_vite+vue.md +2 -2
- package/docs/it/intlayer_CMS.md +1 -1
- package/docs/it/intlayer_with_adonisjs.md +1 -1
- package/docs/it/intlayer_with_analog.md +1 -1
- package/docs/it/intlayer_with_angular.md +1 -1
- package/docs/it/intlayer_with_create_react_app.md +1 -1
- package/docs/it/intlayer_with_express.md +1 -1
- package/docs/it/intlayer_with_fastify.md +1 -1
- package/docs/it/intlayer_with_hono.md +1 -1
- package/docs/it/intlayer_with_lynx+react.md +1 -1
- package/docs/it/intlayer_with_nestjs.md +1 -1
- package/docs/it/intlayer_with_next-i18next.md +1 -1
- package/docs/it/intlayer_with_next-intl.md +1 -1
- package/docs/it/intlayer_with_nextjs_14.md +1 -1
- package/docs/it/intlayer_with_nextjs_15.md +1 -1
- package/docs/it/intlayer_with_nextjs_16.md +2 -2
- package/docs/it/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/it/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_nuxt.md +1 -1
- package/docs/it/intlayer_with_react_native+expo.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +2 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/it/intlayer_with_svelte_kit.md +3 -3
- package/docs/it/intlayer_with_tanstack+solid.md +911 -0
- package/docs/it/intlayer_with_tanstack.md +2 -2
- package/docs/it/intlayer_with_vite+lit.md +1 -1
- package/docs/it/intlayer_with_vite+preact.md +2 -2
- package/docs/it/intlayer_with_vite+react.md +2 -2
- package/docs/it/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/it/intlayer_with_vite+solid.md +2 -2
- package/docs/it/intlayer_with_vite+svelte.md +2 -2
- package/docs/it/intlayer_with_vite+vanilla.md +2 -2
- package/docs/it/intlayer_with_vite+vue.md +2 -2
- package/docs/ja/intlayer_CMS.md +1 -1
- package/docs/ja/intlayer_with_adonisjs.md +1 -1
- package/docs/ja/intlayer_with_analog.md +1 -1
- package/docs/ja/intlayer_with_angular.md +1 -1
- package/docs/ja/intlayer_with_create_react_app.md +1 -1
- package/docs/ja/intlayer_with_express.md +1 -1
- package/docs/ja/intlayer_with_fastify.md +1 -1
- package/docs/ja/intlayer_with_hono.md +1 -1
- package/docs/ja/intlayer_with_lynx+react.md +1 -1
- package/docs/ja/intlayer_with_nestjs.md +1 -1
- package/docs/ja/intlayer_with_next-i18next.md +1 -1
- package/docs/ja/intlayer_with_next-intl.md +1 -1
- package/docs/ja/intlayer_with_nextjs_14.md +1 -1
- package/docs/ja/intlayer_with_nextjs_15.md +1 -1
- package/docs/ja/intlayer_with_nextjs_16.md +2 -2
- package/docs/ja/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_nuxt.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7.md +1 -1
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/ja/intlayer_with_svelte_kit.md +1 -1
- package/docs/ja/intlayer_with_tanstack+solid.md +911 -0
- package/docs/ja/intlayer_with_tanstack.md +1 -1
- package/docs/ja/intlayer_with_vite+lit.md +1 -1
- package/docs/ja/intlayer_with_vite+preact.md +1 -1
- package/docs/ja/intlayer_with_vite+react.md +1 -1
- package/docs/ja/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ja/intlayer_with_vite+solid.md +2 -2
- package/docs/ja/intlayer_with_vite+svelte.md +2 -2
- package/docs/ja/intlayer_with_vite+vanilla.md +2 -2
- package/docs/ja/intlayer_with_vite+vue.md +2 -2
- package/docs/ko/intlayer_CMS.md +1 -1
- package/docs/ko/intlayer_with_adonisjs.md +1 -1
- package/docs/ko/intlayer_with_analog.md +1 -1
- package/docs/ko/intlayer_with_angular.md +1 -1
- package/docs/ko/intlayer_with_create_react_app.md +1 -1
- package/docs/ko/intlayer_with_express.md +1 -1
- package/docs/ko/intlayer_with_fastify.md +1 -1
- package/docs/ko/intlayer_with_hono.md +1 -1
- package/docs/ko/intlayer_with_lynx+react.md +1 -1
- package/docs/ko/intlayer_with_nestjs.md +1 -1
- package/docs/ko/intlayer_with_next-i18next.md +1 -1
- package/docs/ko/intlayer_with_next-intl.md +1 -1
- package/docs/ko/intlayer_with_nextjs_14.md +1 -1
- package/docs/ko/intlayer_with_nextjs_15.md +1 -1
- package/docs/ko/intlayer_with_nextjs_16.md +2 -2
- package/docs/ko/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_nuxt.md +1 -1
- package/docs/ko/intlayer_with_react_native+expo.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +2 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/ko/intlayer_with_svelte_kit.md +3 -3
- package/docs/ko/intlayer_with_tanstack+solid.md +911 -0
- package/docs/ko/intlayer_with_tanstack.md +2 -2
- package/docs/ko/intlayer_with_vite+lit.md +1 -1
- package/docs/ko/intlayer_with_vite+preact.md +2 -2
- package/docs/ko/intlayer_with_vite+react.md +2 -2
- package/docs/ko/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ko/intlayer_with_vite+solid.md +2 -2
- package/docs/ko/intlayer_with_vite+svelte.md +2 -2
- package/docs/ko/intlayer_with_vite+vanilla.md +2 -2
- package/docs/ko/intlayer_with_vite+vue.md +2 -2
- package/docs/nl/intlayer_with_fastify.md +1 -1
- package/docs/nl/intlayer_with_hono.md +1 -1
- package/docs/nl/intlayer_with_vite+lit.md +1 -1
- package/docs/nl/intlayer_with_vite+vanilla.md +2 -2
- package/docs/pl/intlayer_CMS.md +1 -1
- package/docs/pl/intlayer_with_adonisjs.md +1 -1
- package/docs/pl/intlayer_with_analog.md +1 -1
- package/docs/pl/intlayer_with_angular.md +1 -1
- package/docs/pl/intlayer_with_create_react_app.md +1 -1
- package/docs/pl/intlayer_with_express.md +1 -1
- package/docs/pl/intlayer_with_fastify.md +1 -1
- package/docs/pl/intlayer_with_hono.md +1 -1
- package/docs/pl/intlayer_with_lynx+react.md +1 -1
- package/docs/pl/intlayer_with_nestjs.md +1 -1
- package/docs/pl/intlayer_with_next-i18next.md +1 -1
- package/docs/pl/intlayer_with_next-intl.md +1 -1
- package/docs/pl/intlayer_with_nextjs_14.md +1 -1
- package/docs/pl/intlayer_with_nextjs_15.md +1 -1
- package/docs/pl/intlayer_with_nextjs_16.md +2 -2
- package/docs/pl/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/pl/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pl/intlayer_with_nuxt.md +1 -1
- package/docs/pl/intlayer_with_react_native+expo.md +1 -1
- package/docs/pl/intlayer_with_react_router_v7.md +2 -2
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/pl/intlayer_with_svelte_kit.md +3 -3
- package/docs/pl/intlayer_with_tanstack+solid.md +911 -0
- package/docs/pl/intlayer_with_tanstack.md +2 -2
- package/docs/pl/intlayer_with_vite+lit.md +1 -1
- package/docs/pl/intlayer_with_vite+preact.md +2 -2
- package/docs/pl/intlayer_with_vite+react.md +2 -2
- package/docs/pl/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/pl/intlayer_with_vite+solid.md +2 -2
- package/docs/pl/intlayer_with_vite+svelte.md +2 -2
- package/docs/pl/intlayer_with_vite+vanilla.md +2 -2
- package/docs/pl/intlayer_with_vite+vue.md +2 -2
- package/docs/pt/intlayer_CMS.md +1 -1
- package/docs/pt/intlayer_with_adonisjs.md +1 -1
- package/docs/pt/intlayer_with_analog.md +1 -1
- package/docs/pt/intlayer_with_angular.md +1 -1
- package/docs/pt/intlayer_with_create_react_app.md +1 -1
- package/docs/pt/intlayer_with_express.md +1 -1
- package/docs/pt/intlayer_with_fastify.md +1 -1
- package/docs/pt/intlayer_with_hono.md +1 -1
- package/docs/pt/intlayer_with_lynx+react.md +1 -1
- package/docs/pt/intlayer_with_nestjs.md +1 -1
- package/docs/pt/intlayer_with_next-i18next.md +1 -1
- package/docs/pt/intlayer_with_next-intl.md +1 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -1
- package/docs/pt/intlayer_with_nextjs_15.md +1 -1
- package/docs/pt/intlayer_with_nextjs_16.md +2 -2
- package/docs/pt/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/pt/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_nuxt.md +1 -1
- package/docs/pt/intlayer_with_react_native+expo.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +2 -2
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/pt/intlayer_with_svelte_kit.md +3 -3
- package/docs/pt/intlayer_with_tanstack+solid.md +911 -0
- package/docs/pt/intlayer_with_tanstack.md +2 -2
- package/docs/pt/intlayer_with_vite+lit.md +1 -1
- package/docs/pt/intlayer_with_vite+preact.md +2 -2
- package/docs/pt/intlayer_with_vite+react.md +2 -2
- package/docs/pt/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/pt/intlayer_with_vite+solid.md +2 -2
- package/docs/pt/intlayer_with_vite+svelte.md +2 -2
- package/docs/pt/intlayer_with_vite+vanilla.md +2 -2
- package/docs/pt/intlayer_with_vite+vue.md +2 -2
- package/docs/ru/intlayer_CMS.md +1 -1
- package/docs/ru/intlayer_with_adonisjs.md +1 -1
- package/docs/ru/intlayer_with_analog.md +1 -1
- package/docs/ru/intlayer_with_angular.md +1 -1
- package/docs/ru/intlayer_with_create_react_app.md +1 -1
- package/docs/ru/intlayer_with_express.md +1 -1
- package/docs/ru/intlayer_with_fastify.md +1 -1
- package/docs/ru/intlayer_with_hono.md +1 -1
- package/docs/ru/intlayer_with_lynx+react.md +1 -1
- package/docs/ru/intlayer_with_nestjs.md +1 -1
- package/docs/ru/intlayer_with_next-i18next.md +1 -1
- package/docs/ru/intlayer_with_next-intl.md +1 -1
- package/docs/ru/intlayer_with_nextjs_14.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +1 -1
- package/docs/ru/intlayer_with_nextjs_16.md +2 -2
- package/docs/ru/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/ru/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_nuxt.md +1 -1
- package/docs/ru/intlayer_with_react_native+expo.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +2 -2
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/ru/intlayer_with_svelte_kit.md +3 -3
- package/docs/ru/intlayer_with_tanstack+solid.md +911 -0
- package/docs/ru/intlayer_with_tanstack.md +2 -2
- package/docs/ru/intlayer_with_vite+lit.md +1 -1
- package/docs/ru/intlayer_with_vite+preact.md +2 -2
- package/docs/ru/intlayer_with_vite+react.md +2 -2
- package/docs/ru/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/ru/intlayer_with_vite+solid.md +2 -2
- package/docs/ru/intlayer_with_vite+svelte.md +2 -2
- package/docs/ru/intlayer_with_vite+vanilla.md +2 -2
- package/docs/ru/intlayer_with_vite+vue.md +2 -2
- package/docs/tr/intlayer_CMS.md +1 -1
- package/docs/tr/intlayer_with_adonisjs.md +1 -1
- package/docs/tr/intlayer_with_analog.md +1 -1
- package/docs/tr/intlayer_with_angular.md +1 -1
- package/docs/tr/intlayer_with_create_react_app.md +1 -1
- package/docs/tr/intlayer_with_express.md +1 -1
- package/docs/tr/intlayer_with_fastify.md +1 -1
- package/docs/tr/intlayer_with_hono.md +1 -1
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +1 -1
- package/docs/tr/intlayer_with_next-i18next.md +1 -1
- package/docs/tr/intlayer_with_next-intl.md +1 -1
- package/docs/tr/intlayer_with_nextjs_14.md +1 -1
- package/docs/tr/intlayer_with_nextjs_15.md +1 -1
- package/docs/tr/intlayer_with_nextjs_16.md +2 -2
- package/docs/tr/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/tr/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/tr/intlayer_with_nuxt.md +1 -1
- package/docs/tr/intlayer_with_react_native+expo.md +1 -1
- package/docs/tr/intlayer_with_react_router_v7.md +2 -2
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/tr/intlayer_with_svelte_kit.md +3 -3
- package/docs/tr/intlayer_with_tanstack+solid.md +912 -0
- package/docs/tr/intlayer_with_tanstack.md +2 -2
- package/docs/tr/intlayer_with_vite+lit.md +1 -1
- package/docs/tr/intlayer_with_vite+preact.md +2 -2
- package/docs/tr/intlayer_with_vite+react.md +2 -2
- package/docs/tr/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vanilla.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +2 -2
- package/docs/uk/intlayer_CMS.md +1 -1
- package/docs/uk/intlayer_with_adonisjs.md +1 -1
- package/docs/uk/intlayer_with_analog.md +1 -1
- package/docs/uk/intlayer_with_angular.md +1 -1
- package/docs/uk/intlayer_with_create_react_app.md +1 -1
- package/docs/uk/intlayer_with_express.md +1 -1
- package/docs/uk/intlayer_with_fastify.md +1 -1
- package/docs/uk/intlayer_with_hono.md +1 -1
- package/docs/uk/intlayer_with_lynx+react.md +1 -1
- package/docs/uk/intlayer_with_nestjs.md +1 -1
- package/docs/uk/intlayer_with_next-i18next.md +1 -1
- package/docs/uk/intlayer_with_next-intl.md +1 -1
- package/docs/uk/intlayer_with_nextjs_14.md +1 -1
- package/docs/uk/intlayer_with_nextjs_15.md +1 -1
- package/docs/uk/intlayer_with_nextjs_16.md +2 -2
- package/docs/uk/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/uk/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/uk/intlayer_with_nuxt.md +1 -1
- package/docs/uk/intlayer_with_react_native+expo.md +1 -1
- package/docs/uk/intlayer_with_react_router_v7.md +2 -2
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/uk/intlayer_with_svelte_kit.md +2 -2
- package/docs/uk/intlayer_with_tanstack+solid.md +911 -0
- package/docs/uk/intlayer_with_tanstack.md +2 -2
- package/docs/uk/intlayer_with_vite+lit.md +1 -1
- package/docs/uk/intlayer_with_vite+preact.md +2 -2
- package/docs/uk/intlayer_with_vite+react.md +2 -2
- package/docs/uk/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/uk/intlayer_with_vite+solid.md +2 -2
- package/docs/uk/intlayer_with_vite+svelte.md +2 -2
- package/docs/uk/intlayer_with_vite+vanilla.md +2 -2
- package/docs/uk/intlayer_with_vite+vue.md +2 -2
- package/docs/ur/intlayer_with_fastify.md +1 -1
- package/docs/ur/intlayer_with_hono.md +1 -1
- package/docs/ur/intlayer_with_vite+lit.md +1 -1
- package/docs/ur/intlayer_with_vite+vanilla.md +1 -1
- package/docs/vi/cli/index.md +1 -1
- package/docs/vi/intlayer_CMS.md +1 -1
- package/docs/vi/intlayer_with_adonisjs.md +1 -1
- package/docs/vi/intlayer_with_analog.md +1 -1
- package/docs/vi/intlayer_with_angular.md +1 -1
- package/docs/vi/intlayer_with_create_react_app.md +1 -1
- package/docs/vi/intlayer_with_express.md +1 -1
- package/docs/vi/intlayer_with_fastify.md +1 -1
- package/docs/vi/intlayer_with_hono.md +1 -1
- package/docs/vi/intlayer_with_lynx+react.md +1 -1
- package/docs/vi/intlayer_with_nestjs.md +1 -1
- package/docs/vi/intlayer_with_next-i18next.md +1 -1
- package/docs/vi/intlayer_with_next-intl.md +1 -1
- package/docs/vi/intlayer_with_nextjs_14.md +1 -1
- package/docs/vi/intlayer_with_nextjs_15.md +1 -1
- package/docs/vi/intlayer_with_nextjs_16.md +2 -2
- package/docs/vi/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/vi/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/vi/intlayer_with_nuxt.md +1 -1
- package/docs/vi/intlayer_with_react_native+expo.md +1 -1
- package/docs/vi/intlayer_with_react_router_v7.md +2 -2
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/vi/intlayer_with_svelte_kit.md +3 -3
- package/docs/vi/intlayer_with_tanstack+solid.md +911 -0
- package/docs/vi/intlayer_with_tanstack.md +2 -2
- package/docs/vi/intlayer_with_vite+lit.md +1 -1
- package/docs/vi/intlayer_with_vite+preact.md +2 -2
- package/docs/vi/intlayer_with_vite+react.md +2 -2
- package/docs/vi/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/vi/intlayer_with_vite+solid.md +2 -2
- package/docs/vi/intlayer_with_vite+svelte.md +2 -2
- package/docs/vi/intlayer_with_vite+vanilla.md +2 -2
- package/docs/vi/intlayer_with_vite+vue.md +2 -2
- package/docs/zh/intlayer_CMS.md +1 -1
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_analog.md +1 -1
- package/docs/zh/intlayer_with_angular.md +1 -1
- package/docs/zh/intlayer_with_create_react_app.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_lynx+react.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_next-i18next.md +1 -1
- package/docs/zh/intlayer_with_next-intl.md +1 -1
- package/docs/zh/intlayer_with_nextjs_14.md +1 -1
- package/docs/zh/intlayer_with_nextjs_15.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +2 -2
- package/docs/zh/intlayer_with_nextjs_compiler.md +2 -2
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +1 -1
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_nuxt.md +1 -1
- package/docs/zh/intlayer_with_react_native+expo.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +2 -2
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +2 -2
- package/docs/zh/intlayer_with_svelte_kit.md +3 -3
- package/docs/zh/intlayer_with_tanstack+solid.md +911 -0
- package/docs/zh/intlayer_with_tanstack.md +2 -2
- package/docs/zh/intlayer_with_vite+lit.md +1 -1
- package/docs/zh/intlayer_with_vite+preact.md +2 -2
- package/docs/zh/intlayer_with_vite+react.md +2 -2
- package/docs/zh/intlayer_with_vite+react_compiler.md +1 -1
- package/docs/zh/intlayer_with_vite+solid.md +2 -2
- package/docs/zh/intlayer_with_vite+svelte.md +2 -2
- package/docs/zh/intlayer_with_vite+vanilla.md +2 -2
- package/docs/zh/intlayer_with_vite+vue.md +2 -2
- package/package.json +5 -5
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-25
|
|
3
|
+
updatedAt: 2026-03-25
|
|
4
|
+
title: i18n Tanstack Start — Как перевести приложение Tanstack Start с использованием Solid.js в 2026 году
|
|
5
|
+
description: Узнайте, как добавить интернационализацию (i18n) в ваше приложение Tanstack Start с помощью Intlayer и Solid.js. Следуйте этому подробному руководству, чтобы сделать ваше приложение многоязычным с маршрутизацией, учитывающей локаль.
|
|
6
|
+
keywords:
|
|
7
|
+
- Интернационализация
|
|
8
|
+
- Документация
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Tanstack Start
|
|
11
|
+
- Solid
|
|
12
|
+
- i18n
|
|
13
|
+
- TypeScript
|
|
14
|
+
- Маршрутизация локалей
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- environment
|
|
18
|
+
- tanstack-start
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-solid-template
|
|
20
|
+
youtubeVideo: https://www.youtube.com/watch?v=_XTdKVWaeqg
|
|
21
|
+
history:
|
|
22
|
+
- version: 8.5.1
|
|
23
|
+
date: 2026-03-25
|
|
24
|
+
changes: "Добавлено для Tanstack Start Solid.js"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Переведите ваш сайт на Tanstack Start с Solid.js, используя Intlayer | Интернационализация (i18n)
|
|
28
|
+
|
|
29
|
+
## Содержание
|
|
30
|
+
|
|
31
|
+
<TOC/>
|
|
32
|
+
|
|
33
|
+
Это руководство демонстрирует, как интегрировать **Intlayer** для бесшовной интернационализации в проектах Tanstack Start с Solid.js, маршрутизацией с учетом локали, поддержкой TypeScript и современными практиками разработки.
|
|
34
|
+
|
|
35
|
+
## Что такое Intlayer?
|
|
36
|
+
|
|
37
|
+
**Intlayer** — это инновационная библиотека интернационализации (i18n) с открытым исходным кодом, разработанная для упрощения многоязычной поддержки в современных веб-приложениях.
|
|
38
|
+
|
|
39
|
+
С Intlayer вы можете:
|
|
40
|
+
|
|
41
|
+
- **Легко управлять переводами**, используя декларативные словари на уровне компонентов.
|
|
42
|
+
- **Динамически локализовать метаданные**, маршруты и контент.
|
|
43
|
+
- **Обеспечить поддержку TypeScript** с помощью автоматически генерируемых типов, что улучшает автодополнение и обнаружение ошибок.
|
|
44
|
+
- **Пользоваться расширенными функциями**, такими как динамическое определение и переключение локали.
|
|
45
|
+
- **Включить маршрутизацию с учетом локали** с помощью файловой системы маршрутизации Tanstack Start.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Пошаговое руководство по настройке Intlayer в приложении Tanstack Start
|
|
50
|
+
|
|
51
|
+
<Tabs defaultTab="video">
|
|
52
|
+
<Tab label="Видео" value="video">
|
|
53
|
+
|
|
54
|
+
<iframe title="Лучшее решение i18n для Tanstack Start? Откройте для себя 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/_XTdKVWaeqg?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
55
|
+
|
|
56
|
+
</Tab>
|
|
57
|
+
<Tab label="Код" value="code">
|
|
58
|
+
|
|
59
|
+
<iframe
|
|
60
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-tanstack-start-solid-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
61
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
62
|
+
title="Демо CodeSandbox — Как интернационализировать ваше приложение с помощью Intlayer"
|
|
63
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
64
|
+
loading="lazy"
|
|
65
|
+
/>
|
|
66
|
+
|
|
67
|
+
</Tab>
|
|
68
|
+
</Tabs>
|
|
69
|
+
|
|
70
|
+
См. [Шаблон приложения](https://github.com/aymericzip/intlayer-tanstack-start-solid-template) на GitHub.
|
|
71
|
+
|
|
72
|
+
### Шаг 1: Создание проекта
|
|
73
|
+
|
|
74
|
+
Начните с создания нового проекта TanStack Start, следуя руководству [Запуск нового проекта](https://tanstack.com/start/latest/docs/framework/solid/quick-start) на сайте TanStack Start.
|
|
75
|
+
|
|
76
|
+
### Шаг 2: Установка пакетов Intlayer
|
|
77
|
+
|
|
78
|
+
Установите необходимые пакеты с помощью вашего любимого менеджера пакетов:
|
|
79
|
+
|
|
80
|
+
```bash packageManager="npm"
|
|
81
|
+
npm install intlayer solid-intlayer
|
|
82
|
+
npm install vite-intlayer --save-dev
|
|
83
|
+
npx intlayer init
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```bash packageManager="pnpm"
|
|
87
|
+
pnpm add intlayer solid-intlayer
|
|
88
|
+
pnpm add vite-intlayer --save-dev
|
|
89
|
+
pnpm intlayer init
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```bash packageManager="yarn"
|
|
93
|
+
yarn add intlayer solid-intlayer
|
|
94
|
+
yarn add vite-intlayer --save-dev
|
|
95
|
+
yarn intlayer init
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```bash packageManager="bun"
|
|
99
|
+
bun add intlayer solid-intlayer
|
|
100
|
+
bun add vite-intlayer --dev
|
|
101
|
+
bun x intlayer init
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **intlayer**
|
|
105
|
+
|
|
106
|
+
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, [декларации контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md), транспиляции и [команд CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md).
|
|
107
|
+
|
|
108
|
+
- **solid-intlayer**
|
|
109
|
+
Пакет, интегрирующий Intlayer в приложение Solid. Он предоставляет провайдеры контекста и хуки для интернационализации Solid.
|
|
110
|
+
|
|
111
|
+
- **vite-intlayer**
|
|
112
|
+
Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также промежуточное ПО (middleware) для определения предпочтительной локали пользователя, управления куки и обработки перенаправлений URL.
|
|
113
|
+
|
|
114
|
+
### Шаг 3: Конфигурация вашего проекта
|
|
115
|
+
|
|
116
|
+
Создайте файл конфигурации для настройки языков вашего приложения:
|
|
117
|
+
|
|
118
|
+
```typescript fileName="intlayer.config.ts"
|
|
119
|
+
import type { IntlayerConfig } from "intlayer";
|
|
120
|
+
|
|
121
|
+
import { Locales } from "intlayer";
|
|
122
|
+
|
|
123
|
+
const config: IntlayerConfig = {
|
|
124
|
+
internationalization: {
|
|
125
|
+
defaultLocale: Locales.ENGLISH,
|
|
126
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default config;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> Через этот файл конфигурации вы можете настроить локализованные URL-адреса, перенаправление middleware, имена куки, местоположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Полный список доступных параметров см. в [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
|
|
134
|
+
|
|
135
|
+
### Шаг 4: Интеграция Intlayer в конфигурацию Vite
|
|
136
|
+
|
|
137
|
+
Добавьте плагин intlayer в вашу конфигурацию:
|
|
138
|
+
|
|
139
|
+
```typescript fileName="vite.config.ts"
|
|
140
|
+
import { intlayer } from "vite-intlayer";
|
|
141
|
+
import { defineConfig } from "vite";
|
|
142
|
+
import { devtools } from "@tanstack/devtools-vite";
|
|
143
|
+
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
144
|
+
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
145
|
+
import solidPlugin from "vite-plugin-solid";
|
|
146
|
+
|
|
147
|
+
export default defineConfig({
|
|
148
|
+
plugins: [
|
|
149
|
+
devtools(),
|
|
150
|
+
viteTsConfigPaths({
|
|
151
|
+
projects: ["./tsconfig.json"],
|
|
152
|
+
}),
|
|
153
|
+
tanstackStart({
|
|
154
|
+
router: {
|
|
155
|
+
routeFileIgnorePattern:
|
|
156
|
+
".content.(ts|tsx|js|mjs|cjs|jsx|json|jsonc|json5)$",
|
|
157
|
+
},
|
|
158
|
+
}),
|
|
159
|
+
solidPlugin({ ssr: true }),
|
|
160
|
+
intlayer(),
|
|
161
|
+
],
|
|
162
|
+
});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
> Плагин Vite `intlayer()` используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов декларации контента и отслеживает их изменения в режиме разработки. Он определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, он предоставляет псевдонимы (aliases) для оптимизации производительности.
|
|
166
|
+
|
|
167
|
+
### Шаг 5: Создание корневого макета (Root Layout)
|
|
168
|
+
|
|
169
|
+
Настройте ваш корневой макет для поддержки интернационализации, используя `useMatches` для определения текущей локали и устанавливая атрибуты `lang` и `dir` для тега `html`.
|
|
170
|
+
|
|
171
|
+
```tsx fileName="src/routes/__root.tsx"
|
|
172
|
+
import {
|
|
173
|
+
HeadContent,
|
|
174
|
+
Outlet,
|
|
175
|
+
Scripts,
|
|
176
|
+
createRootRouteWithContext,
|
|
177
|
+
useMatches,
|
|
178
|
+
} from "@tanstack/solid-router";
|
|
179
|
+
import { TanStackRouterDevtools } from "@tanstack/solid-router-devtools";
|
|
180
|
+
import { HydrationScript } from "solid-js/web";
|
|
181
|
+
import { Suspense } from "solid-js";
|
|
182
|
+
import { IntlayerProvider } from "solid-intlayer";
|
|
183
|
+
import { defaultLocale, getHTMLTextDir, type Locale } from "intlayer";
|
|
184
|
+
|
|
185
|
+
export const Route = createRootRouteWithContext()({
|
|
186
|
+
shellComponent: RootComponent,
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
type Params = {
|
|
190
|
+
locale: Locale;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
function RootComponent() {
|
|
194
|
+
const matches = useMatches();
|
|
195
|
+
|
|
196
|
+
// Попытка найти локаль в параметрах любого активного совпадения
|
|
197
|
+
// Это предполагает, что вы используете динамический сегмент "/{-$locale}" в дереве маршрутов
|
|
198
|
+
const locale =
|
|
199
|
+
(
|
|
200
|
+
matches().find((match) => match.routeId === "/{-$locale}/")
|
|
201
|
+
?.params as Params
|
|
202
|
+
)?.locale ?? defaultLocale;
|
|
203
|
+
|
|
204
|
+
return (
|
|
205
|
+
<html dir={getHTMLTextDir(locale)} lang={locale}>
|
|
206
|
+
<head>
|
|
207
|
+
<HydrationScript />
|
|
208
|
+
</head>
|
|
209
|
+
<body>
|
|
210
|
+
<HeadContent />
|
|
211
|
+
<IntlayerProvider locale={locale}>
|
|
212
|
+
<Suspense>
|
|
213
|
+
<Outlet />
|
|
214
|
+
<TanStackRouterDevtools />
|
|
215
|
+
</Suspense>
|
|
216
|
+
</IntlayerProvider>
|
|
217
|
+
<Scripts />
|
|
218
|
+
</body>
|
|
219
|
+
</html>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
> [!NOTE]
|
|
225
|
+
> В Solid `useMatches` возвращает **сигнал** (реактивный аксессор). Используйте `matches()` (со скобками) для реактивного доступа к текущему значению.
|
|
226
|
+
|
|
227
|
+
### Шаг 6: Создание макета локали (необязательно)
|
|
228
|
+
|
|
229
|
+
Создайте макет, который обрабатывает префикс локали и выполняет валидацию. Этот макет гарантирует, что будут обрабатываться только допустимые локали.
|
|
230
|
+
|
|
231
|
+
> Этот шаг является необязательным, если вам не нужно проверять префикс локали на уровне маршрута.
|
|
232
|
+
|
|
233
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
234
|
+
import { createFileRoute, Outlet, redirect } from "@tanstack/solid-router";
|
|
235
|
+
import { validatePrefix } from "intlayer";
|
|
236
|
+
|
|
237
|
+
export const Route = createFileRoute("/{-$locale}")({
|
|
238
|
+
beforeLoad: ({ params }) => {
|
|
239
|
+
const localeParam = params.locale;
|
|
240
|
+
|
|
241
|
+
// Валидация префикса локали
|
|
242
|
+
const { isValid, localePrefix } = validatePrefix(localeParam);
|
|
243
|
+
|
|
244
|
+
if (!isValid) {
|
|
245
|
+
throw redirect({
|
|
246
|
+
to: "/{-$locale}/404",
|
|
247
|
+
params: { locale: localePrefix },
|
|
248
|
+
replace: true,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
component: Outlet,
|
|
253
|
+
});
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
> Здесь `{-$locale}` — это динамический параметр маршрута, который заменяется текущей локалью. Такая нотация делает сегмент необязательным, позволяя ему работать с такими режимами маршрутизации, как `'prefix-no-default'` и т.д.
|
|
257
|
+
|
|
258
|
+
> Имейте в виду, что этот сегмент может вызвать проблемы, если вы используете несколько динамических сегментов в одном маршруте (например, `/{-$locale}/other-path/$anotherDynamicPath/...`).
|
|
259
|
+
> Для режима `'prefix-all'` вы можете предпочесть заменить сегмент на `$locale`.
|
|
260
|
+
> Для режима `'no-prefix'` или `'search-params'` вы можете полностью удалить сегмент.
|
|
261
|
+
|
|
262
|
+
### Шаг 7: Декларация вашего контента
|
|
263
|
+
|
|
264
|
+
Создавайте и управляйте декларациями контента для хранения переводов:
|
|
265
|
+
|
|
266
|
+
```tsx fileName="src/contents/page.content.ts"
|
|
267
|
+
import type { Dictionary } from "intlayer";
|
|
268
|
+
|
|
269
|
+
import { t } from "intlayer";
|
|
270
|
+
|
|
271
|
+
const appContent = {
|
|
272
|
+
content: {
|
|
273
|
+
links: {
|
|
274
|
+
about: t({
|
|
275
|
+
en: "About",
|
|
276
|
+
es: "Acerca de",
|
|
277
|
+
fr: "À propos",
|
|
278
|
+
}),
|
|
279
|
+
home: t({
|
|
280
|
+
en: "Home",
|
|
281
|
+
es: "Inicio",
|
|
282
|
+
fr: "Accueil",
|
|
283
|
+
}),
|
|
284
|
+
},
|
|
285
|
+
meta: {
|
|
286
|
+
title: t({
|
|
287
|
+
en: "Welcome to Intlayer + TanStack Router",
|
|
288
|
+
es: "Bienvenido a Intlayer + TanStack Router",
|
|
289
|
+
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
290
|
+
}),
|
|
291
|
+
description: t({
|
|
292
|
+
en: "This is an example of using Intlayer with TanStack Router",
|
|
293
|
+
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
294
|
+
fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
295
|
+
}),
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
key: "app",
|
|
299
|
+
} satisfies Dictionary;
|
|
300
|
+
|
|
301
|
+
export default appContent;
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
> Ваши декларации контента могут быть определены в любом месте вашего приложения, при условии, что они включены в каталог `contentDir` (по умолчанию `./app`). И соответствуют расширению файлов декларации контента (по умолчанию `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
305
|
+
|
|
306
|
+
> Подробнее см. в [документации по декларации контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md).
|
|
307
|
+
|
|
308
|
+
### Шаг 8: Использование локально-зависимых компонентов и хуков
|
|
309
|
+
|
|
310
|
+
Создайте компонент `LocalizedLink` для навигации с учетом локали:
|
|
311
|
+
|
|
312
|
+
```tsx fileName="src/components/LocalizedLink.tsx"
|
|
313
|
+
import { Link, type LinkProps } from "@tanstack/solid-router";
|
|
314
|
+
import { getPrefix } from "intlayer";
|
|
315
|
+
import { useLocale } from "solid-intlayer";
|
|
316
|
+
import type { JSX } from "solid-js";
|
|
317
|
+
|
|
318
|
+
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
319
|
+
|
|
320
|
+
export type RemoveLocaleParam<TVal> = TVal extends string
|
|
321
|
+
? RemoveLocaleFromString<TVal>
|
|
322
|
+
: TVal;
|
|
323
|
+
|
|
324
|
+
export type To = RemoveLocaleParam<LinkProps["to"]>;
|
|
325
|
+
|
|
326
|
+
type CollapseDoubleSlashes<TString extends string> =
|
|
327
|
+
TString extends `${infer THead}//${infer TTail}`
|
|
328
|
+
? CollapseDoubleSlashes<`${THead}/${TTail}`>
|
|
329
|
+
: TString;
|
|
330
|
+
|
|
331
|
+
export type LocalizedLinkProps = Omit<LinkProps, "to"> & {
|
|
332
|
+
to?: To;
|
|
333
|
+
} & JSX.AnchorHTMLAttributes<HTMLAnchorElement>;
|
|
334
|
+
|
|
335
|
+
type RemoveAll<
|
|
336
|
+
TString extends string,
|
|
337
|
+
TSub extends string,
|
|
338
|
+
> = TString extends `${infer THead}${TSub}${infer TTail}`
|
|
339
|
+
? RemoveAll<`${THead}${TTail}`, TSub>
|
|
340
|
+
: TString;
|
|
341
|
+
|
|
342
|
+
type RemoveLocaleFromString<TString extends string> = CollapseDoubleSlashes<
|
|
343
|
+
RemoveAll<TString, typeof LOCALE_ROUTE>
|
|
344
|
+
>;
|
|
345
|
+
|
|
346
|
+
export const LocalizedLink = (props: LocalizedLinkProps) => {
|
|
347
|
+
const { locale } = useLocale();
|
|
348
|
+
|
|
349
|
+
return (
|
|
350
|
+
<Link
|
|
351
|
+
{...props}
|
|
352
|
+
params={{
|
|
353
|
+
locale: getPrefix(locale()).localePrefix,
|
|
354
|
+
...(typeof props.params === "object" ? props.params : {}),
|
|
355
|
+
}}
|
|
356
|
+
to={`/${LOCALE_ROUTE}${props.to ?? ""}` as LinkProps["to"]}
|
|
357
|
+
/>
|
|
358
|
+
);
|
|
359
|
+
};
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Этот компонент преследует две цели:
|
|
363
|
+
|
|
364
|
+
- Удаление ненужного префикса `{-$locale}` из URL.
|
|
365
|
+
- Внедрение параметра локали в URL, чтобы пользователь был напрямую перенаправлен на локализованный маршрут.
|
|
366
|
+
|
|
367
|
+
Затем мы можем создать хук `useLocalizedNavigate` для программной навигации:
|
|
368
|
+
|
|
369
|
+
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
370
|
+
import { useNavigate } from "@tanstack/solid-router";
|
|
371
|
+
import { getLocalizedUrl } from "intlayer";
|
|
372
|
+
import { useLocale } from "solid-intlayer";
|
|
373
|
+
|
|
374
|
+
export const useLocalizedNavigate = () => {
|
|
375
|
+
const navigate = useNavigate();
|
|
376
|
+
const { locale } = useLocale();
|
|
377
|
+
|
|
378
|
+
const localizedNavigate = (to: string) => {
|
|
379
|
+
const localizedTo = getLocalizedUrl(to, locale());
|
|
380
|
+
return navigate({ to: localizedTo });
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
return localizedNavigate;
|
|
384
|
+
};
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Шаг 9: Использование Intlayer на ваших страницах
|
|
388
|
+
|
|
389
|
+
Получайте доступ к вашим словарям контента во всем приложении:
|
|
390
|
+
|
|
391
|
+
#### Локализованная домашняя страница
|
|
392
|
+
|
|
393
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
394
|
+
import { createFileRoute } from "@tanstack/solid-router";
|
|
395
|
+
import { useIntlayer } from "solid-intlayer";
|
|
396
|
+
import { LocalizedLink } from "@/components/LocalizedLink";
|
|
397
|
+
|
|
398
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
399
|
+
component: RouteComponent,
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
function RouteComponent() {
|
|
403
|
+
const content = useIntlayer("index-page");
|
|
404
|
+
|
|
405
|
+
return (
|
|
406
|
+
<main>
|
|
407
|
+
<h1>{content().heroTitle}</h1>
|
|
408
|
+
<p>{content().heroDesc}</p>
|
|
409
|
+
<div>
|
|
410
|
+
<LocalizedLink to="/">{content().navHome}</LocalizedLink>
|
|
411
|
+
<LocalizedLink to="/about">{content().navAbout}</LocalizedLink>
|
|
412
|
+
</div>
|
|
413
|
+
</main>
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
> [!NOTE]
|
|
419
|
+
> В Solid хук `useIntlayer` возвращает функцию-**аксессор** (например, `content()`). Вы должны вызвать эту функцию для доступа к реактивному контенту.
|
|
420
|
+
>
|
|
421
|
+
> Чтобы узнать больше о хуке `useIntlayer`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/solid-intlayer/useIntlayer.md).
|
|
422
|
+
|
|
423
|
+
### Шаг 10: Создание компонента переключения локали
|
|
424
|
+
|
|
425
|
+
Создайте компонент, позволяющий пользователям менять языки:
|
|
426
|
+
|
|
427
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx"
|
|
428
|
+
import { useLocation } from "@tanstack/solid-router";
|
|
429
|
+
import { getLocaleName, getPathWithoutLocale, getPrefix } from "intlayer";
|
|
430
|
+
import { For } from "solid-js";
|
|
431
|
+
import { useIntlayer, useLocale } from "solid-intlayer";
|
|
432
|
+
import { LocalizedLink, type To } from "./LocalizedLink";
|
|
433
|
+
|
|
434
|
+
export const LocaleSwitcher = () => {
|
|
435
|
+
const content = useIntlayer("locale-switcher");
|
|
436
|
+
const location = useLocation();
|
|
437
|
+
|
|
438
|
+
const { availableLocales, locale, setLocale } = useLocale();
|
|
439
|
+
|
|
440
|
+
const pathWithoutLocale = () => getPathWithoutLocale(location().pathname);
|
|
441
|
+
|
|
442
|
+
return (
|
|
443
|
+
<div class="flex flex-row gap-2">
|
|
444
|
+
<For each={availableLocales}>
|
|
445
|
+
{(localeEl) => (
|
|
446
|
+
<LocalizedLink
|
|
447
|
+
aria-current={localeEl === locale() ? "page" : undefined}
|
|
448
|
+
onClick={() => setLocale(localeEl)}
|
|
449
|
+
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
450
|
+
to={pathWithoutLocale() as To}
|
|
451
|
+
>
|
|
452
|
+
{getLocaleName(localeEl)}
|
|
453
|
+
</LocalizedLink>
|
|
454
|
+
)}
|
|
455
|
+
</For>
|
|
456
|
+
</div>
|
|
457
|
+
);
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
export default LocaleSwitcher;
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
> [!NOTE]
|
|
464
|
+
> В Solid `locale` из `useLocale` — это **аксессор сигнала**. Используйте `locale()` (со скобками) для реактивного чтения текущего значения.
|
|
465
|
+
>
|
|
466
|
+
> Чтобы узнать больше о хуке `useLocale`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/solid-intlayer/useLocale.md).
|
|
467
|
+
|
|
468
|
+
### Шаг 11: Управление HTML-атрибутами
|
|
469
|
+
|
|
470
|
+
Как показано на шаге 5, вы можете управлять атрибутами `lang` и `dir` тега `html`, используя `useMatches` в вашем корневом компоненте. Это гарантирует правильную установку атрибутов как на сервере, так и на клиенте.
|
|
471
|
+
|
|
472
|
+
```tsx fileName="src/routes/__root.tsx"
|
|
473
|
+
const RootComponent: ParentComponent = (props) => {
|
|
474
|
+
const matches = useMatches();
|
|
475
|
+
|
|
476
|
+
// Попытка найти локаль в параметрах любого активного совпадения
|
|
477
|
+
const locale =
|
|
478
|
+
(
|
|
479
|
+
matches().find((match) => match.routeId === "/{-$locale}/")
|
|
480
|
+
?.params as Params
|
|
481
|
+
)?.locale ?? defaultLocale;
|
|
482
|
+
|
|
483
|
+
return (
|
|
484
|
+
<html dir={getHTMLTextDir(locale)} lang={locale}>
|
|
485
|
+
{/* ... */}
|
|
486
|
+
</html>
|
|
487
|
+
);
|
|
488
|
+
};
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
### Шаг 12: Добавление промежуточного ПО (необязательно)
|
|
494
|
+
|
|
495
|
+
Вы также можете использовать `intlayerProxy` для добавления серверной маршрутизации в ваше приложение. Этот плагин будет автоматически определять текущую локаль на основе URL и устанавливать соответствующую локаль в куки. Если локаль не указана, плагин будет определять наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не обнаружена, произойдет перенаправление на локаль по умолчанию.
|
|
496
|
+
|
|
497
|
+
> Обратите внимание, что для использования `intlayerProxy` в режиме production вам необходимо перенести пакет `vite-intlayer` из `devDependencies` в `dependencies`.
|
|
498
|
+
|
|
499
|
+
```typescript {7,14-17} fileName="vite.config.ts"
|
|
500
|
+
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
501
|
+
import solid from "vite-plugin-solid";
|
|
502
|
+
import { nitro } from "nitro/vite";
|
|
503
|
+
import { defineConfig } from "vite";
|
|
504
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
505
|
+
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
506
|
+
|
|
507
|
+
export default defineConfig({
|
|
508
|
+
plugins: [
|
|
509
|
+
intlayerProxy(), // Прокси должен быть размещен перед сервером, если вы используете Nitro
|
|
510
|
+
nitro(),
|
|
511
|
+
viteTsConfigPaths({
|
|
512
|
+
projects: ["./tsconfig.json"],
|
|
513
|
+
}),
|
|
514
|
+
intlayer(),
|
|
515
|
+
tanstackStart({
|
|
516
|
+
router: {
|
|
517
|
+
routeFileIgnorePattern:
|
|
518
|
+
".content.(ts|tsx|js|mjs|cjs|jsx|json|jsonc|json5)$",
|
|
519
|
+
},
|
|
520
|
+
}),
|
|
521
|
+
solid(),
|
|
522
|
+
],
|
|
523
|
+
});
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
### Шаг 13: Интернационализация ваших метаданных (необязательно)
|
|
529
|
+
|
|
530
|
+
Вы также можете использовать функцию `getIntlayer` для доступа к вашим словарям контента внутри загрузчика `head` для метаданных с учетом локали:
|
|
531
|
+
|
|
532
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
533
|
+
import { createFileRoute } from "@tanstack/solid-router";
|
|
534
|
+
import { getIntlayer } from "intlayer";
|
|
535
|
+
|
|
536
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
537
|
+
component: RouteComponent,
|
|
538
|
+
head: ({ params }) => {
|
|
539
|
+
const { locale } = params;
|
|
540
|
+
const metaContent = getIntlayer("page-metadata", locale);
|
|
541
|
+
|
|
542
|
+
return {
|
|
543
|
+
meta: [
|
|
544
|
+
{ title: metaContent.title },
|
|
545
|
+
{ content: metaContent.description, name: "description" },
|
|
546
|
+
],
|
|
547
|
+
};
|
|
548
|
+
},
|
|
549
|
+
});
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
### Шаг 14: Получение локали в ваших серверных действиях (необязательно)
|
|
555
|
+
|
|
556
|
+
Возможно, вы захотите получить доступ к текущей локали внутри ваших серверных действий (server actions) или конечных точек API.
|
|
557
|
+
Вы можете сделать это с помощью помощника `getLocale` из `intlayer`.
|
|
558
|
+
|
|
559
|
+
Вот пример использования серверных функций TanStack Start:
|
|
560
|
+
|
|
561
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
562
|
+
import { createServerFn } from "@tanstack/solid-start";
|
|
563
|
+
import {
|
|
564
|
+
getRequestHeader,
|
|
565
|
+
getRequestHeaders,
|
|
566
|
+
} from "@tanstack/solid-start/server";
|
|
567
|
+
import { getCookie, getIntlayer, getLocale } from "intlayer";
|
|
568
|
+
|
|
569
|
+
export const getLocaleServer = createServerFn().handler(async () => {
|
|
570
|
+
const locale = await getLocale({
|
|
571
|
+
// Получение куки из запроса (по умолчанию: 'INTLAYER_LOCALE')
|
|
572
|
+
getCookie: (name) => {
|
|
573
|
+
const cookieString = getRequestHeader("cookie");
|
|
574
|
+
|
|
575
|
+
return getCookie(name, cookieString);
|
|
576
|
+
},
|
|
577
|
+
// Получение заголовка из запроса (по умолчанию: 'x-intlayer-locale')
|
|
578
|
+
// Запасной вариант с использованием согласования Accept-Language
|
|
579
|
+
getHeader: (name) => getRequestHeader(name),
|
|
580
|
+
});
|
|
581
|
+
|
|
582
|
+
// Получение контента с помощью getIntlayer()
|
|
583
|
+
const content = getIntlayer("app", locale);
|
|
584
|
+
|
|
585
|
+
return { locale, content };
|
|
586
|
+
});
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
### Шаг 15: Управление страницами 404 (необязательно)
|
|
592
|
+
|
|
593
|
+
Когда пользователь посещает несуществующую страницу, вы можете отобразить кастомную страницу 404. Префикс локали может влиять на то, как срабатывает страница "Запрашиваемый ресурс не найден".
|
|
594
|
+
|
|
595
|
+
#### Понимание обработки 404 в TanStack Router с префиксами локалей
|
|
596
|
+
|
|
597
|
+
В TanStack Router обработка страниц 404 с локализованными маршрутами требует многоуровневого подхода:
|
|
598
|
+
|
|
599
|
+
1. **Выделенный маршрут 404**: Специальный маршрут для отображения интерфейса 404.
|
|
600
|
+
2. **Валидация на уровне маршрута**: Проверяет префиксы локалей и перенаправляет невалидные на 404.
|
|
601
|
+
3. **Универсальный маршрут (Catch-all)**: Перехватывает любые несовпадающие пути внутри сегмента локали.
|
|
602
|
+
|
|
603
|
+
```tsx fileName="src/routes/{-$locale}/404.tsx"
|
|
604
|
+
import { createFileRoute } from "@tanstack/solid-router";
|
|
605
|
+
|
|
606
|
+
// Создает выделенный маршрут /[locale]/404
|
|
607
|
+
// Используется как прямой маршрут и импортируется как компонент в другие файлы
|
|
608
|
+
export const Route = createFileRoute("/{-$locale}/404")({
|
|
609
|
+
component: NotFoundComponent,
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
// Экспортируется отдельно, чтобы его можно было использовать в notFoundComponent и catch-all маршрутах
|
|
613
|
+
export function NotFoundComponent() {
|
|
614
|
+
return (
|
|
615
|
+
<div>
|
|
616
|
+
<h1>404</h1>
|
|
617
|
+
</div>
|
|
618
|
+
);
|
|
619
|
+
}
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
623
|
+
import { createFileRoute, Outlet, redirect } from "@tanstack/solid-router";
|
|
624
|
+
import { validatePrefix } from "intlayer";
|
|
625
|
+
import { NotFoundComponent } from "./404";
|
|
626
|
+
|
|
627
|
+
export const Route = createFileRoute("/{-$locale}")({
|
|
628
|
+
// beforeLoad выполняется перед рендерингом маршрута (на сервере и на клиенте)
|
|
629
|
+
// Это идеальное место для валидации префикса локали
|
|
630
|
+
beforeLoad: ({ params }) => {
|
|
631
|
+
const localeParam = params.locale;
|
|
632
|
+
|
|
633
|
+
// validatePrefix проверяет, валидна ли локаль согласно вашему конфигу intlayer
|
|
634
|
+
const { isValid, localePrefix } = validatePrefix(localeParam);
|
|
635
|
+
|
|
636
|
+
if (!isValid) {
|
|
637
|
+
// Невалидный префикс локали — перенаправление на страницу 404 с валидным префиксом
|
|
638
|
+
throw redirect({
|
|
639
|
+
to: "/{-$locale}/404",
|
|
640
|
+
params: { locale: localePrefix },
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
component: Outlet,
|
|
645
|
+
// notFoundComponent вызывается, когда дочерний маршрут не существует
|
|
646
|
+
// напр., /en/non-existent-page вызывает это внутри макета /en
|
|
647
|
+
notFoundComponent: NotFoundComponent,
|
|
648
|
+
});
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
```tsx fileName="src/routes/{-$locale}/$.tsx"
|
|
652
|
+
import { createFileRoute } from "@tanstack/solid-router";
|
|
653
|
+
|
|
654
|
+
import { NotFoundComponent } from "./404";
|
|
655
|
+
|
|
656
|
+
// Маршрут $ (splat/catch-all) совпадает с любым путем, который не подошел под другие маршруты
|
|
657
|
+
// напр., /en/some/deeply/nested/invalid/path
|
|
658
|
+
// Это гарантирует, что ВСЕ несовпадающие пути внутри локали покажут страницу 404
|
|
659
|
+
// Без этого глубокие несовпадающие пути могли бы показать пустую страницу или ошибку
|
|
660
|
+
export const Route = createFileRoute("/{-$locale}/$")({
|
|
661
|
+
component: NotFoundComponent,
|
|
662
|
+
});
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
### (Необязательно) Шаг 16: Извлечение контента из ваших компонентов
|
|
666
|
+
|
|
667
|
+
Если у вас есть существующая кодовая база, трансформация тысяч файлов может занять много времени.
|
|
668
|
+
|
|
669
|
+
Чтобы облегчить этот процесс, Intlayer предлагает [компилятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md) / [экстрактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/extract.md) для трансформации ваших компонентов и извлечения контента.
|
|
670
|
+
|
|
671
|
+
Для настройки добавьте раздел `compiler` в ваш файл `intlayer.config.ts`:
|
|
672
|
+
|
|
673
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
674
|
+
import { type IntlayerConfig } from "intlayer";
|
|
675
|
+
|
|
676
|
+
const config: IntlayerConfig = {
|
|
677
|
+
// ... Остальная часть конфига
|
|
678
|
+
compiler: {
|
|
679
|
+
/**
|
|
680
|
+
* Указывает, должен ли компилятор быть включен.
|
|
681
|
+
*/
|
|
682
|
+
enabled: true,
|
|
683
|
+
|
|
684
|
+
/**
|
|
685
|
+
* Определяет путь к выходным файлам
|
|
686
|
+
*/
|
|
687
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* Указывает, должны ли компоненты сохраняться после трансформации.
|
|
691
|
+
*
|
|
692
|
+
* - Если `true`, компилятор перезапишет файл компонента на диске. Таким образом, трансформация станет постоянной, и компилятор пропустит ее при следующем запуске. Таким образом, компилятор может трансформировать приложение, а затем его можно удалить.
|
|
693
|
+
*
|
|
694
|
+
* - Если `false`, компилятор будет внедрять вызов функции `useIntlayer()` в код только в выходных файлах сборки, оставляя основную базу кода нетронутой. Трансформация будет выполняться только в памяти.
|
|
695
|
+
*/
|
|
696
|
+
saveComponents: false,
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Префикс ключей словаря
|
|
700
|
+
*/
|
|
701
|
+
dictionaryKeyPrefix: "",
|
|
702
|
+
},
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
export default config;
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
709
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
710
|
+
const config = {
|
|
711
|
+
// ... Остальная часть конфига
|
|
712
|
+
compiler: {
|
|
713
|
+
/**
|
|
714
|
+
* Указывает, должен ли компилятор быть включен.
|
|
715
|
+
*/
|
|
716
|
+
enabled: true,
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* Определяет путь к выходным файлам
|
|
720
|
+
*/
|
|
721
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
722
|
+
|
|
723
|
+
/**
|
|
724
|
+
* Указывает, должны ли компоненты сохраняться после трансформации.
|
|
725
|
+
*
|
|
726
|
+
* - Если `true`, компилятор перезапишет файл компонента на диске. Таким образом, трансформация станет постоянной, и компилятор пропустит ее при следующем запуске. Таким образом, компилятор может трансформировать приложение, а затем его можно удалить.
|
|
727
|
+
*
|
|
728
|
+
* - Если `false`, компилятор будет внедрять вызов функции `useIntlayer()` в код только в выходных файлах сборки, оставляя основную базу кода нетронутой. Трансформация будет выполняться только в памяти.
|
|
729
|
+
*/
|
|
730
|
+
saveComponents: false,
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* Префикс ключей словаря
|
|
734
|
+
*/
|
|
735
|
+
dictionaryKeyPrefix: "",
|
|
736
|
+
},
|
|
737
|
+
};
|
|
738
|
+
|
|
739
|
+
export default config;
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
743
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
744
|
+
const config = {
|
|
745
|
+
// ... Остальная часть конфига
|
|
746
|
+
compiler: {
|
|
747
|
+
/**
|
|
748
|
+
* Указывает, должен ли компилятор быть включен.
|
|
749
|
+
*/
|
|
750
|
+
enabled: true,
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Определяет путь к выходным файлам
|
|
754
|
+
*/
|
|
755
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
* Указывает, должны ли компоненты сохраняться после трансформации.
|
|
759
|
+
*
|
|
760
|
+
* - Если `true`, компилятор перезапишет файл компонента на диске. Таким образом, трансформация станет постоянной, и компилятор пропустит ее при следующем запуске. Таким образом, компилятор может трансформировать приложение, а затем его можно удалить.
|
|
761
|
+
*
|
|
762
|
+
* - Если `false`, компилятор будет внедрять вызов функции `useIntlayer()` в код только в выходных файлах сборки, оставляя основную базу кода нетронутой. Трансформация будет выполняться только в памяти.
|
|
763
|
+
*/
|
|
764
|
+
saveComponents: false,
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Префикс ключей словаря
|
|
768
|
+
*/
|
|
769
|
+
dictionaryKeyPrefix: "",
|
|
770
|
+
},
|
|
771
|
+
};
|
|
772
|
+
|
|
773
|
+
module.exports = config;
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
<Tabs>
|
|
777
|
+
<Tab value='Команда extract'>
|
|
778
|
+
|
|
779
|
+
Запустите экстрактор для трансформации ваших компонентов и извлечения контента:
|
|
780
|
+
|
|
781
|
+
```bash packageManager="npm"
|
|
782
|
+
npx intlayer extract
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
```bash packageManager="pnpm"
|
|
786
|
+
pnpm intlayer extract
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
```bash packageManager="yarn"
|
|
790
|
+
yarn intlayer extract
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
```bash packageManager="bun"
|
|
794
|
+
bun x intlayer extract
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
</Tab>
|
|
798
|
+
<Tab value='Babel-компилятор'>
|
|
799
|
+
|
|
800
|
+
Обновите ваш `vite.config.ts`, включив плагин `intlayerCompiler`:
|
|
801
|
+
|
|
802
|
+
```ts fileName="vite.config.ts"
|
|
803
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
804
|
+
import { defineConfig } from "vite";
|
|
805
|
+
import { devtools } from "@tanstack/devtools-vite";
|
|
806
|
+
import viteTsConfigPaths from "vite-tsconfig-paths";
|
|
807
|
+
import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
|
|
808
|
+
import solidPlugin from "vite-plugin-solid";
|
|
809
|
+
|
|
810
|
+
export default defineConfig({
|
|
811
|
+
plugins: [
|
|
812
|
+
devtools(),
|
|
813
|
+
viteTsConfigPaths({
|
|
814
|
+
projects: ["./tsconfig.json"],
|
|
815
|
+
}),
|
|
816
|
+
tanstackStart({
|
|
817
|
+
router: {
|
|
818
|
+
routeFileIgnorePattern:
|
|
819
|
+
".content.(ts|tsx|js|mjs|cjs|jsx|json|jsonc|json5)$",
|
|
820
|
+
},
|
|
821
|
+
}),
|
|
822
|
+
solidPlugin({ ssr: true }),
|
|
823
|
+
intlayer(),
|
|
824
|
+
intlayerCompiler(),
|
|
825
|
+
],
|
|
826
|
+
});
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
```bash packageManager="npm"
|
|
830
|
+
npm run build # Или npm run dev
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
```bash packageManager="pnpm"
|
|
834
|
+
pnpm run build # Или pnpm run dev
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
```bash packageManager="yarn"
|
|
838
|
+
yarn build # Или yarn dev
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
```bash packageManager="bun"
|
|
842
|
+
bun run build # Или bun run dev
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
</Tab>
|
|
846
|
+
</Tabs>
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
### Шаг 17: Настройка TypeScript (необязательно)
|
|
851
|
+
|
|
852
|
+
Intlayer использует расширение модулей (module augmentation), чтобы задействовать преимущества TypeScript и сделать вашу кодовую базу более надежной.
|
|
853
|
+
|
|
854
|
+
Убедитесь, что ваша конфигурация TypeScript включает автогенерируемые типы:
|
|
855
|
+
|
|
856
|
+
```json5 fileName="tsconfig.json"
|
|
857
|
+
{
|
|
858
|
+
// ... ваши существующие настройки
|
|
859
|
+
include: [
|
|
860
|
+
// ... ваши существующие пути
|
|
861
|
+
".intlayer/**/*.ts", // Включение автоматически генерируемых типов
|
|
862
|
+
],
|
|
863
|
+
}
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
---
|
|
867
|
+
|
|
868
|
+
### Конфигурация Git
|
|
869
|
+
|
|
870
|
+
Рекомендуется игнорировать файлы, генерируемые Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.
|
|
871
|
+
|
|
872
|
+
Для этого добавьте следующие инструкции в ваш файл `.gitignore`:
|
|
873
|
+
|
|
874
|
+
```plaintext fileName=".gitignore"
|
|
875
|
+
# Игнорировать файлы, генерируемые Intlayer
|
|
876
|
+
.intlayer
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
---
|
|
880
|
+
|
|
881
|
+
## Расширение VS Code
|
|
882
|
+
|
|
883
|
+
Для улучшения процесса разработки с Intlayer вы можете установить официальное **расширение Intlayer для VS Code**.
|
|
884
|
+
|
|
885
|
+
[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
886
|
+
|
|
887
|
+
Это расширение предоставляет:
|
|
888
|
+
|
|
889
|
+
- **Автодополнение** для ключей перевода.
|
|
890
|
+
- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.
|
|
891
|
+
- **Встроенная предварительный просмотр** переведенного контента.
|
|
892
|
+
- **Быстрые действия** для легкого создания и обновления переводов.
|
|
893
|
+
|
|
894
|
+
Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
895
|
+
|
|
896
|
+
---
|
|
897
|
+
|
|
898
|
+
## Что дальше?
|
|
899
|
+
|
|
900
|
+
Для дальнейшего развития вы можете внедрить [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или вынести ваш контент во внешнюю систему, используя [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
|
|
901
|
+
|
|
902
|
+
---
|
|
903
|
+
|
|
904
|
+
## Ссылки на документацию
|
|
905
|
+
|
|
906
|
+
- [Документация Intlayer](https://intlayer.org)
|
|
907
|
+
- [Документация Tanstack Start](https://tanstack.com/start/latest)
|
|
908
|
+
- [Хук useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/solid-intlayer/useIntlayer.md)
|
|
909
|
+
- [Хук useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/solid-intlayer/useLocale.md)
|
|
910
|
+
- [Декларация контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md)
|
|
911
|
+
- [Конфигурация](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
|