@intlayer/docs 9.5.6 → 9.5.8
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/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ar/i18next_vs_intlayer.md +130 -16
- package/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ar/lingui_vs_intlayer.md +122 -15
- package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ar/next-intl_vs_intlayer.md +136 -20
- package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
- package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/de/i18next_vs_intlayer.md +128 -14
- package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/de/lingui_vs_intlayer.md +122 -15
- package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/de/next-intl_vs_intlayer.md +125 -15
- package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/de/vue-i18n_vs_intlayer.md +193 -31
- package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en/i18next_vs_intlayer.md +128 -14
- package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
- package/blog/en/lingui_vs_intlayer.md +124 -15
- package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
- package/blog/en/next-intl_vs_intlayer.md +125 -13
- package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
- package/blog/en/vue-i18n_vs_intlayer.md +188 -27
- package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en-GB/i18next_vs_intlayer.md +128 -14
- package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
- package/blog/en-GB/lingui_vs_intlayer.md +122 -15
- package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
- package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
- package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
- package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/es/i18next_vs_intlayer.md +128 -14
- package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/es/lingui_vs_intlayer.md +122 -15
- package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/es/next-intl_vs_intlayer.md +125 -15
- package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/es/vue-i18n_vs_intlayer.md +193 -31
- package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/fr/i18next_vs_intlayer.md +128 -14
- package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/fr/lingui_vs_intlayer.md +122 -15
- package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/fr/next-intl_vs_intlayer.md +127 -15
- package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
- package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
- package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
- package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/hi/i18next_vs_intlayer.md +130 -16
- package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/hi/lingui_vs_intlayer.md +122 -15
- package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/hi/next-intl_vs_intlayer.md +135 -19
- package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
- package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/id/i18next_vs_intlayer.md +128 -14
- package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/id/lingui_vs_intlayer.md +122 -15
- package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/id/next-intl_vs_intlayer.md +135 -19
- package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
- package/blog/id/vue-i18n_vs_intlayer.md +188 -26
- package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
- package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/it/i18next_vs_intlayer.md +128 -14
- package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/it/lingui_vs_intlayer.md +122 -15
- package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/it/next-intl_vs_intlayer.md +125 -15
- package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/it/vue-i18n_vs_intlayer.md +191 -31
- package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
- package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ja/i18next_vs_intlayer.md +129 -17
- package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ja/lingui_vs_intlayer.md +122 -15
- package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ja/next-intl_vs_intlayer.md +124 -14
- package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ko/i18next_vs_intlayer.md +129 -17
- package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ko/lingui_vs_intlayer.md +122 -15
- package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ko/next-intl_vs_intlayer.md +134 -18
- package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pl/i18next_vs_intlayer.md +128 -14
- package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pl/lingui_vs_intlayer.md +122 -15
- package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pl/next-intl_vs_intlayer.md +134 -18
- package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
- package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pt/i18next_vs_intlayer.md +128 -14
- package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pt/lingui_vs_intlayer.md +122 -15
- package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pt/next-intl_vs_intlayer.md +131 -15
- package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ru/i18next_vs_intlayer.md +130 -16
- package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ru/lingui_vs_intlayer.md +122 -15
- package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
- package/blog/ru/next-intl_vs_intlayer.md +123 -13
- package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
- package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
- package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/tr/i18next_vs_intlayer.md +128 -14
- package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/tr/lingui_vs_intlayer.md +122 -15
- package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/tr/next-intl_vs_intlayer.md +136 -20
- package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
- package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/uk/i18next_vs_intlayer.md +130 -16
- package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/uk/lingui_vs_intlayer.md +122 -15
- package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/uk/next-intl_vs_intlayer.md +135 -19
- package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
- package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
- package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/vi/i18next_vs_intlayer.md +128 -14
- package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/vi/lingui_vs_intlayer.md +122 -15
- package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/vi/next-intl_vs_intlayer.md +135 -19
- package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
- package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/zh/i18next_vs_intlayer.md +128 -14
- package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/zh/lingui_vs_intlayer.md +122 -15
- package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/zh/next-intl_vs_intlayer.md +125 -15
- package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
- package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +60 -40
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +60 -40
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +3 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +19 -16
- package/docs/ar/benchmark/solid.md +26 -9
- package/docs/ar/benchmark/svelte.md +22 -7
- package/docs/ar/benchmark/tanstack.md +20 -16
- package/docs/ar/benchmark/vue.md +19 -10
- package/docs/ar/chrome_extension.md +130 -0
- package/docs/ar/cli/index.md +11 -1
- package/docs/ar/cli/infra.md +162 -0
- package/docs/ar/cli/init.md +24 -1
- package/docs/ar/cli/upgrade.md +125 -0
- package/docs/ar/dictionary/html.md +173 -5
- package/docs/ar/dictionary/markdown.md +263 -1
- package/docs/ar/intlayer_with_analog.md +23 -1
- package/docs/ar/intlayer_with_angular_19.md +24 -1
- package/docs/ar/intlayer_with_angular_21.md +24 -1
- package/docs/ar/intlayer_with_astro.md +24 -1
- package/docs/ar/intlayer_with_astro_lit.md +25 -1
- package/docs/ar/intlayer_with_astro_preact.md +26 -1
- package/docs/ar/intlayer_with_astro_react.md +26 -1
- package/docs/ar/intlayer_with_astro_solid.md +26 -1
- package/docs/ar/intlayer_with_astro_svelte.md +25 -1
- package/docs/ar/intlayer_with_astro_vue.md +25 -1
- package/docs/ar/intlayer_with_remix_3.md +22 -1
- package/docs/ar/self_hosting.md +406 -231
- package/docs/de/benchmark/nextjs.md +19 -16
- package/docs/de/benchmark/solid.md +26 -9
- package/docs/de/benchmark/svelte.md +22 -7
- package/docs/de/benchmark/tanstack.md +20 -16
- package/docs/de/benchmark/vue.md +19 -10
- package/docs/de/chrome_extension.md +130 -0
- package/docs/de/cli/index.md +11 -1
- package/docs/de/cli/infra.md +162 -0
- package/docs/de/cli/init.md +24 -1
- package/docs/de/cli/upgrade.md +125 -0
- package/docs/de/dictionary/html.md +173 -5
- package/docs/de/dictionary/markdown.md +263 -1
- package/docs/de/intlayer_with_analog.md +23 -1
- package/docs/de/intlayer_with_angular_19.md +24 -1
- package/docs/de/intlayer_with_angular_21.md +24 -1
- package/docs/de/intlayer_with_astro.md +24 -1
- package/docs/de/intlayer_with_astro_lit.md +25 -1
- package/docs/de/intlayer_with_astro_preact.md +26 -1
- package/docs/de/intlayer_with_astro_react.md +26 -1
- package/docs/de/intlayer_with_astro_solid.md +26 -1
- package/docs/de/intlayer_with_astro_svelte.md +25 -1
- package/docs/de/intlayer_with_astro_vue.md +25 -1
- package/docs/de/intlayer_with_remix_3.md +22 -1
- package/docs/de/self_hosting.md +404 -227
- package/docs/en/agent_skills.md +29 -1
- package/docs/en/benchmark/nextjs.md +19 -16
- package/docs/en/benchmark/solid.md +26 -9
- package/docs/en/benchmark/svelte.md +22 -7
- package/docs/en/benchmark/tanstack.md +21 -17
- package/docs/en/benchmark/vue.md +20 -11
- package/docs/en/chrome_extension.md +130 -0
- package/docs/en/cli/index.md +11 -1
- package/docs/en/cli/infra.md +175 -0
- package/docs/en/cli/init.md +25 -1
- package/docs/en/cli/upgrade.md +125 -0
- package/docs/en/dictionary/html.md +173 -5
- package/docs/en/dictionary/markdown.md +263 -1
- package/docs/en/intlayer_with_analog.md +23 -1
- package/docs/en/intlayer_with_angular_19.md +24 -1
- package/docs/en/intlayer_with_angular_21.md +24 -1
- package/docs/en/intlayer_with_astro.md +24 -1
- package/docs/en/intlayer_with_astro_lit.md +25 -1
- package/docs/en/intlayer_with_astro_preact.md +26 -1
- package/docs/en/intlayer_with_astro_react.md +26 -1
- package/docs/en/intlayer_with_astro_solid.md +26 -1
- package/docs/en/intlayer_with_astro_svelte.md +25 -1
- package/docs/en/intlayer_with_astro_vue.md +25 -1
- package/docs/en/intlayer_with_remix_3.md +22 -1
- package/docs/en/self_hosting.md +418 -176
- package/docs/en-GB/benchmark/nextjs.md +19 -16
- package/docs/en-GB/benchmark/solid.md +26 -9
- package/docs/en-GB/benchmark/svelte.md +22 -7
- package/docs/en-GB/benchmark/tanstack.md +20 -16
- package/docs/en-GB/benchmark/vue.md +20 -11
- package/docs/en-GB/chrome_extension.md +130 -0
- package/docs/en-GB/cli/index.md +11 -1
- package/docs/en-GB/cli/infra.md +162 -0
- package/docs/en-GB/cli/init.md +24 -1
- package/docs/en-GB/cli/upgrade.md +125 -0
- package/docs/en-GB/dictionary/html.md +173 -5
- package/docs/en-GB/dictionary/markdown.md +263 -1
- package/docs/en-GB/intlayer_with_analog.md +23 -1
- package/docs/en-GB/intlayer_with_angular_19.md +24 -1
- package/docs/en-GB/intlayer_with_angular_21.md +24 -1
- package/docs/en-GB/intlayer_with_astro.md +24 -1
- package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
- package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
- package/docs/en-GB/intlayer_with_astro_react.md +26 -1
- package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
- package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
- package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
- package/docs/en-GB/intlayer_with_remix_3.md +22 -1
- package/docs/en-GB/self_hosting.md +381 -206
- package/docs/es/benchmark/nextjs.md +19 -16
- package/docs/es/benchmark/solid.md +26 -9
- package/docs/es/benchmark/svelte.md +22 -7
- package/docs/es/benchmark/tanstack.md +20 -16
- package/docs/es/benchmark/vue.md +19 -10
- package/docs/es/chrome_extension.md +130 -0
- package/docs/es/cli/index.md +11 -1
- package/docs/es/cli/infra.md +162 -0
- package/docs/es/cli/init.md +24 -1
- package/docs/es/cli/upgrade.md +125 -0
- package/docs/es/dictionary/html.md +173 -5
- package/docs/es/dictionary/markdown.md +263 -1
- package/docs/es/intlayer_with_analog.md +23 -1
- package/docs/es/intlayer_with_angular_19.md +24 -1
- package/docs/es/intlayer_with_angular_21.md +24 -1
- package/docs/es/intlayer_with_astro.md +24 -1
- package/docs/es/intlayer_with_astro_lit.md +25 -1
- package/docs/es/intlayer_with_astro_preact.md +26 -1
- package/docs/es/intlayer_with_astro_react.md +26 -1
- package/docs/es/intlayer_with_astro_solid.md +26 -1
- package/docs/es/intlayer_with_astro_svelte.md +25 -1
- package/docs/es/intlayer_with_astro_vue.md +25 -1
- package/docs/es/intlayer_with_remix_3.md +22 -1
- package/docs/es/self_hosting.md +400 -223
- package/docs/fr/benchmark/nextjs.md +19 -16
- package/docs/fr/benchmark/solid.md +26 -9
- package/docs/fr/benchmark/svelte.md +22 -7
- package/docs/fr/benchmark/tanstack.md +20 -16
- package/docs/fr/benchmark/vue.md +20 -11
- package/docs/fr/chrome_extension.md +130 -0
- package/docs/fr/cli/index.md +11 -1
- package/docs/fr/cli/infra.md +162 -0
- package/docs/fr/cli/init.md +24 -1
- package/docs/fr/cli/upgrade.md +125 -0
- package/docs/fr/dictionary/html.md +173 -5
- package/docs/fr/dictionary/markdown.md +265 -4
- package/docs/fr/intlayer_with_analog.md +23 -1
- package/docs/fr/intlayer_with_angular_19.md +24 -1
- package/docs/fr/intlayer_with_angular_21.md +24 -1
- package/docs/fr/intlayer_with_astro.md +24 -1
- package/docs/fr/intlayer_with_astro_lit.md +25 -1
- package/docs/fr/intlayer_with_astro_preact.md +26 -1
- package/docs/fr/intlayer_with_astro_react.md +26 -1
- package/docs/fr/intlayer_with_astro_solid.md +26 -1
- package/docs/fr/intlayer_with_astro_svelte.md +25 -1
- package/docs/fr/intlayer_with_astro_vue.md +25 -1
- package/docs/fr/intlayer_with_remix_3.md +22 -1
- package/docs/fr/self_hosting.md +401 -224
- package/docs/hi/benchmark/nextjs.md +19 -16
- package/docs/hi/benchmark/solid.md +26 -9
- package/docs/hi/benchmark/svelte.md +22 -7
- package/docs/hi/benchmark/tanstack.md +20 -16
- package/docs/hi/benchmark/vue.md +20 -11
- package/docs/hi/chrome_extension.md +130 -0
- package/docs/hi/cli/index.md +11 -1
- package/docs/hi/cli/infra.md +162 -0
- package/docs/hi/cli/init.md +24 -1
- package/docs/hi/cli/upgrade.md +125 -0
- package/docs/hi/dictionary/html.md +173 -5
- package/docs/hi/dictionary/markdown.md +263 -1
- package/docs/hi/intlayer_with_analog.md +23 -1
- package/docs/hi/intlayer_with_angular_19.md +24 -1
- package/docs/hi/intlayer_with_angular_21.md +24 -1
- package/docs/hi/intlayer_with_astro.md +24 -1
- package/docs/hi/intlayer_with_astro_lit.md +25 -1
- package/docs/hi/intlayer_with_astro_preact.md +26 -1
- package/docs/hi/intlayer_with_astro_react.md +26 -1
- package/docs/hi/intlayer_with_astro_solid.md +26 -1
- package/docs/hi/intlayer_with_astro_svelte.md +25 -1
- package/docs/hi/intlayer_with_astro_vue.md +25 -1
- package/docs/hi/intlayer_with_remix_3.md +22 -1
- package/docs/hi/self_hosting.md +409 -235
- package/docs/id/benchmark/nextjs.md +19 -16
- package/docs/id/benchmark/solid.md +26 -9
- package/docs/id/benchmark/svelte.md +22 -7
- package/docs/id/benchmark/tanstack.md +20 -16
- package/docs/id/benchmark/vue.md +20 -11
- package/docs/id/chrome_extension.md +130 -0
- package/docs/id/cli/index.md +11 -1
- package/docs/id/cli/infra.md +162 -0
- package/docs/id/cli/init.md +24 -1
- package/docs/id/cli/upgrade.md +125 -0
- package/docs/id/dictionary/html.md +173 -5
- package/docs/id/dictionary/markdown.md +263 -1
- package/docs/id/intlayer_with_analog.md +23 -1
- package/docs/id/intlayer_with_angular_19.md +24 -1
- package/docs/id/intlayer_with_angular_21.md +24 -1
- package/docs/id/intlayer_with_astro.md +24 -1
- package/docs/id/intlayer_with_astro_lit.md +25 -1
- package/docs/id/intlayer_with_astro_preact.md +26 -1
- package/docs/id/intlayer_with_astro_react.md +26 -1
- package/docs/id/intlayer_with_astro_solid.md +26 -1
- package/docs/id/intlayer_with_astro_svelte.md +25 -1
- package/docs/id/intlayer_with_astro_vue.md +25 -1
- package/docs/id/intlayer_with_remix_3.md +22 -1
- package/docs/id/self_hosting.md +416 -243
- package/docs/it/benchmark/nextjs.md +19 -16
- package/docs/it/benchmark/solid.md +26 -9
- package/docs/it/benchmark/svelte.md +22 -7
- package/docs/it/benchmark/tanstack.md +20 -16
- package/docs/it/benchmark/vue.md +19 -10
- package/docs/it/chrome_extension.md +130 -0
- package/docs/it/cli/index.md +11 -1
- package/docs/it/cli/infra.md +162 -0
- package/docs/it/cli/init.md +24 -1
- package/docs/it/cli/upgrade.md +125 -0
- package/docs/it/dictionary/html.md +173 -5
- package/docs/it/dictionary/markdown.md +263 -1
- package/docs/it/intlayer_with_analog.md +23 -1
- package/docs/it/intlayer_with_angular_19.md +24 -1
- package/docs/it/intlayer_with_angular_21.md +24 -1
- package/docs/it/intlayer_with_astro.md +24 -1
- package/docs/it/intlayer_with_astro_lit.md +25 -1
- package/docs/it/intlayer_with_astro_preact.md +26 -1
- package/docs/it/intlayer_with_astro_react.md +26 -1
- package/docs/it/intlayer_with_astro_solid.md +26 -1
- package/docs/it/intlayer_with_astro_svelte.md +25 -1
- package/docs/it/intlayer_with_astro_vue.md +25 -1
- package/docs/it/intlayer_with_remix_3.md +22 -1
- package/docs/it/self_hosting.md +412 -237
- package/docs/ja/benchmark/nextjs.md +19 -16
- package/docs/ja/benchmark/solid.md +26 -9
- package/docs/ja/benchmark/svelte.md +22 -7
- package/docs/ja/benchmark/tanstack.md +18 -14
- package/docs/ja/benchmark/vue.md +19 -10
- package/docs/ja/chrome_extension.md +130 -0
- package/docs/ja/cli/index.md +11 -1
- package/docs/ja/cli/infra.md +162 -0
- package/docs/ja/cli/init.md +24 -1
- package/docs/ja/cli/upgrade.md +125 -0
- package/docs/ja/dictionary/html.md +173 -5
- package/docs/ja/dictionary/markdown.md +263 -1
- package/docs/ja/intlayer_with_analog.md +23 -1
- package/docs/ja/intlayer_with_angular_19.md +24 -1
- package/docs/ja/intlayer_with_angular_21.md +24 -1
- package/docs/ja/intlayer_with_astro.md +24 -1
- package/docs/ja/intlayer_with_astro_lit.md +25 -1
- package/docs/ja/intlayer_with_astro_preact.md +26 -1
- package/docs/ja/intlayer_with_astro_react.md +26 -1
- package/docs/ja/intlayer_with_astro_solid.md +26 -1
- package/docs/ja/intlayer_with_astro_svelte.md +25 -1
- package/docs/ja/intlayer_with_astro_vue.md +25 -1
- package/docs/ja/intlayer_with_remix_3.md +22 -1
- package/docs/ja/self_hosting.md +398 -223
- package/docs/ko/benchmark/nextjs.md +19 -16
- package/docs/ko/benchmark/solid.md +26 -9
- package/docs/ko/benchmark/svelte.md +22 -7
- package/docs/ko/benchmark/tanstack.md +20 -16
- package/docs/ko/benchmark/vue.md +20 -11
- package/docs/ko/chrome_extension.md +130 -0
- package/docs/ko/cli/index.md +11 -1
- package/docs/ko/cli/infra.md +162 -0
- package/docs/ko/cli/init.md +24 -1
- package/docs/ko/cli/upgrade.md +126 -0
- package/docs/ko/dictionary/html.md +173 -5
- package/docs/ko/dictionary/markdown.md +263 -1
- package/docs/ko/intlayer_with_analog.md +23 -1
- package/docs/ko/intlayer_with_angular_19.md +24 -1
- package/docs/ko/intlayer_with_angular_21.md +24 -1
- package/docs/ko/intlayer_with_astro.md +24 -1
- package/docs/ko/intlayer_with_astro_lit.md +25 -1
- package/docs/ko/intlayer_with_astro_preact.md +26 -1
- package/docs/ko/intlayer_with_astro_react.md +26 -1
- package/docs/ko/intlayer_with_astro_solid.md +26 -1
- package/docs/ko/intlayer_with_astro_svelte.md +25 -1
- package/docs/ko/intlayer_with_astro_vue.md +25 -1
- package/docs/ko/intlayer_with_remix_3.md +22 -1
- package/docs/ko/self_hosting.md +411 -238
- package/docs/pl/benchmark/nextjs.md +19 -16
- package/docs/pl/benchmark/solid.md +26 -9
- package/docs/pl/benchmark/svelte.md +22 -7
- package/docs/pl/benchmark/tanstack.md +20 -16
- package/docs/pl/benchmark/vue.md +20 -11
- package/docs/pl/chrome_extension.md +130 -0
- package/docs/pl/cli/index.md +11 -1
- package/docs/pl/cli/infra.md +162 -0
- package/docs/pl/cli/init.md +24 -1
- package/docs/pl/cli/upgrade.md +125 -0
- package/docs/pl/dictionary/html.md +173 -5
- package/docs/pl/dictionary/markdown.md +263 -1
- package/docs/pl/intlayer_with_analog.md +23 -1
- package/docs/pl/intlayer_with_angular_19.md +24 -1
- package/docs/pl/intlayer_with_angular_21.md +24 -1
- package/docs/pl/intlayer_with_astro.md +24 -1
- package/docs/pl/intlayer_with_astro_lit.md +25 -1
- package/docs/pl/intlayer_with_astro_preact.md +26 -1
- package/docs/pl/intlayer_with_astro_react.md +26 -1
- package/docs/pl/intlayer_with_astro_solid.md +26 -1
- package/docs/pl/intlayer_with_astro_svelte.md +25 -1
- package/docs/pl/intlayer_with_astro_vue.md +25 -1
- package/docs/pl/intlayer_with_remix_3.md +22 -1
- package/docs/pl/self_hosting.md +408 -233
- package/docs/pt/benchmark/nextjs.md +19 -16
- package/docs/pt/benchmark/solid.md +26 -9
- package/docs/pt/benchmark/svelte.md +22 -7
- package/docs/pt/benchmark/tanstack.md +20 -16
- package/docs/pt/benchmark/vue.md +19 -10
- package/docs/pt/chrome_extension.md +130 -0
- package/docs/pt/cli/index.md +11 -1
- package/docs/pt/cli/infra.md +162 -0
- package/docs/pt/cli/init.md +24 -1
- package/docs/pt/cli/upgrade.md +125 -0
- package/docs/pt/dictionary/html.md +173 -5
- package/docs/pt/dictionary/markdown.md +263 -1
- package/docs/pt/intlayer_with_analog.md +23 -1
- package/docs/pt/intlayer_with_angular_19.md +24 -1
- package/docs/pt/intlayer_with_angular_21.md +24 -1
- package/docs/pt/intlayer_with_astro.md +24 -1
- package/docs/pt/intlayer_with_astro_lit.md +25 -1
- package/docs/pt/intlayer_with_astro_preact.md +26 -1
- package/docs/pt/intlayer_with_astro_react.md +26 -1
- package/docs/pt/intlayer_with_astro_solid.md +26 -1
- package/docs/pt/intlayer_with_astro_svelte.md +25 -1
- package/docs/pt/intlayer_with_astro_vue.md +25 -1
- package/docs/pt/intlayer_with_remix_3.md +22 -1
- package/docs/pt/self_hosting.md +399 -224
- package/docs/ru/benchmark/nextjs.md +19 -16
- package/docs/ru/benchmark/solid.md +26 -9
- package/docs/ru/benchmark/svelte.md +22 -7
- package/docs/ru/benchmark/tanstack.md +20 -16
- package/docs/ru/benchmark/vue.md +20 -11
- package/docs/ru/chrome_extension.md +130 -0
- package/docs/ru/cli/index.md +11 -1
- package/docs/ru/cli/infra.md +162 -0
- package/docs/ru/cli/init.md +24 -1
- package/docs/ru/cli/upgrade.md +125 -0
- package/docs/ru/dictionary/html.md +173 -5
- package/docs/ru/dictionary/markdown.md +263 -1
- package/docs/ru/intlayer_with_analog.md +23 -1
- package/docs/ru/intlayer_with_angular_19.md +24 -1
- package/docs/ru/intlayer_with_angular_21.md +24 -1
- package/docs/ru/intlayer_with_astro.md +24 -1
- package/docs/ru/intlayer_with_astro_lit.md +25 -1
- package/docs/ru/intlayer_with_astro_preact.md +26 -1
- package/docs/ru/intlayer_with_astro_react.md +26 -1
- package/docs/ru/intlayer_with_astro_solid.md +26 -1
- package/docs/ru/intlayer_with_astro_svelte.md +25 -1
- package/docs/ru/intlayer_with_astro_vue.md +25 -1
- package/docs/ru/intlayer_with_remix_3.md +22 -1
- package/docs/ru/self_hosting.md +403 -228
- package/docs/tr/benchmark/nextjs.md +19 -16
- package/docs/tr/benchmark/solid.md +26 -9
- package/docs/tr/benchmark/svelte.md +22 -7
- package/docs/tr/benchmark/tanstack.md +20 -16
- package/docs/tr/benchmark/vue.md +20 -11
- package/docs/tr/chrome_extension.md +130 -0
- package/docs/tr/cli/index.md +11 -1
- package/docs/tr/cli/infra.md +162 -0
- package/docs/tr/cli/init.md +24 -1
- package/docs/tr/cli/upgrade.md +125 -0
- package/docs/tr/dictionary/html.md +173 -5
- package/docs/tr/dictionary/markdown.md +263 -1
- package/docs/tr/intlayer_with_analog.md +23 -1
- package/docs/tr/intlayer_with_angular_19.md +24 -1
- package/docs/tr/intlayer_with_angular_21.md +24 -1
- package/docs/tr/intlayer_with_astro.md +24 -1
- package/docs/tr/intlayer_with_astro_lit.md +25 -1
- package/docs/tr/intlayer_with_astro_preact.md +26 -1
- package/docs/tr/intlayer_with_astro_react.md +26 -1
- package/docs/tr/intlayer_with_astro_solid.md +26 -1
- package/docs/tr/intlayer_with_astro_svelte.md +25 -1
- package/docs/tr/intlayer_with_astro_vue.md +25 -1
- package/docs/tr/intlayer_with_remix_3.md +22 -1
- package/docs/tr/self_hosting.md +410 -234
- package/docs/uk/benchmark/nextjs.md +19 -16
- package/docs/uk/benchmark/solid.md +26 -9
- package/docs/uk/benchmark/svelte.md +22 -7
- package/docs/uk/benchmark/tanstack.md +20 -16
- package/docs/uk/benchmark/vue.md +20 -11
- package/docs/uk/chrome_extension.md +130 -0
- package/docs/uk/cli/index.md +11 -1
- package/docs/uk/cli/infra.md +162 -0
- package/docs/uk/cli/init.md +24 -1
- package/docs/uk/cli/upgrade.md +125 -0
- package/docs/uk/dictionary/html.md +173 -5
- package/docs/uk/dictionary/markdown.md +263 -1
- package/docs/uk/intlayer_with_analog.md +23 -1
- package/docs/uk/intlayer_with_angular_19.md +24 -1
- package/docs/uk/intlayer_with_angular_21.md +24 -1
- package/docs/uk/intlayer_with_astro.md +24 -1
- package/docs/uk/intlayer_with_astro_lit.md +25 -1
- package/docs/uk/intlayer_with_astro_preact.md +26 -1
- package/docs/uk/intlayer_with_astro_react.md +26 -1
- package/docs/uk/intlayer_with_astro_solid.md +26 -1
- package/docs/uk/intlayer_with_astro_svelte.md +25 -1
- package/docs/uk/intlayer_with_astro_vue.md +25 -1
- package/docs/uk/intlayer_with_remix_3.md +22 -1
- package/docs/uk/self_hosting.md +413 -238
- package/docs/vi/benchmark/nextjs.md +19 -16
- package/docs/vi/benchmark/solid.md +26 -9
- package/docs/vi/benchmark/svelte.md +22 -7
- package/docs/vi/benchmark/tanstack.md +20 -16
- package/docs/vi/benchmark/vue.md +20 -11
- package/docs/vi/chrome_extension.md +130 -0
- package/docs/vi/cli/index.md +11 -1
- package/docs/vi/cli/infra.md +162 -0
- package/docs/vi/cli/init.md +24 -1
- package/docs/vi/cli/upgrade.md +125 -0
- package/docs/vi/dictionary/html.md +173 -5
- package/docs/vi/dictionary/markdown.md +263 -1
- package/docs/vi/intlayer_with_analog.md +23 -1
- package/docs/vi/intlayer_with_angular_19.md +24 -1
- package/docs/vi/intlayer_with_angular_21.md +24 -1
- package/docs/vi/intlayer_with_astro.md +24 -1
- package/docs/vi/intlayer_with_astro_lit.md +25 -1
- package/docs/vi/intlayer_with_astro_preact.md +26 -1
- package/docs/vi/intlayer_with_astro_react.md +26 -1
- package/docs/vi/intlayer_with_astro_solid.md +26 -1
- package/docs/vi/intlayer_with_astro_svelte.md +25 -1
- package/docs/vi/intlayer_with_astro_vue.md +25 -1
- package/docs/vi/intlayer_with_remix_3.md +22 -1
- package/docs/vi/self_hosting.md +408 -234
- package/docs/zh/benchmark/nextjs.md +19 -16
- package/docs/zh/benchmark/solid.md +26 -9
- package/docs/zh/benchmark/svelte.md +22 -7
- package/docs/zh/benchmark/tanstack.md +19 -15
- package/docs/zh/benchmark/vue.md +20 -11
- package/docs/zh/chrome_extension.md +130 -0
- package/docs/zh/cli/index.md +11 -1
- package/docs/zh/cli/infra.md +162 -0
- package/docs/zh/cli/init.md +24 -1
- package/docs/zh/cli/upgrade.md +125 -0
- package/docs/zh/dictionary/html.md +172 -5
- package/docs/zh/dictionary/markdown.md +262 -1
- package/docs/zh/intlayer_with_analog.md +23 -1
- package/docs/zh/intlayer_with_angular_19.md +24 -1
- package/docs/zh/intlayer_with_angular_21.md +24 -1
- package/docs/zh/intlayer_with_astro.md +24 -1
- package/docs/zh/intlayer_with_astro_lit.md +25 -1
- package/docs/zh/intlayer_with_astro_preact.md +26 -1
- package/docs/zh/intlayer_with_astro_react.md +26 -1
- package/docs/zh/intlayer_with_astro_solid.md +26 -1
- package/docs/zh/intlayer_with_astro_svelte.md +25 -1
- package/docs/zh/intlayer_with_astro_vue.md +25 -1
- package/docs/zh/intlayer_with_remix_3.md +22 -1
- package/docs/zh/self_hosting.md +410 -237
- package/legal/ar/privacy_notice.md +9 -3
- package/legal/de/privacy_notice.md +9 -3
- package/legal/en/privacy_notice.md +10 -3
- package/legal/en-GB/privacy_notice.md +9 -3
- package/legal/es/privacy_notice.md +9 -3
- package/legal/fr/privacy_notice.md +9 -3
- package/legal/hi/privacy_notice.md +9 -3
- package/legal/id/privacy_notice.md +9 -3
- package/legal/it/privacy_notice.md +9 -3
- package/legal/ja/privacy_notice.md +9 -3
- package/legal/ko/privacy_notice.md +9 -3
- package/legal/pl/privacy_notice.md +9 -3
- package/legal/pt/privacy_notice.md +9 -3
- package/legal/ru/privacy_notice.md +9 -3
- package/legal/tr/privacy_notice.md +9 -3
- package/legal/uk/privacy_notice.md +9 -3
- package/legal/vi/privacy_notice.md +9 -3
- package/legal/zh/privacy_notice.md +9 -3
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +60 -40
- package/docs/ar/roadmap.md +0 -321
- package/docs/de/roadmap.md +0 -322
- package/docs/en/intlayer_with_astro_vanilla.md +0 -713
- package/docs/en/roadmap.md +0 -325
- package/docs/en-GB/roadmap.md +0 -322
- package/docs/es/roadmap.md +0 -322
- package/docs/fr/roadmap.md +0 -322
- package/docs/hi/roadmap.md +0 -322
- package/docs/id/roadmap.md +0 -325
- package/docs/it/roadmap.md +0 -322
- package/docs/ja/roadmap.md +0 -322
- package/docs/ko/roadmap.md +0 -322
- package/docs/pl/roadmap.md +0 -325
- package/docs/pt/roadmap.md +0 -322
- package/docs/ru/roadmap.md +0 -322
- package/docs/tr/roadmap.md +0 -325
- package/docs/uk/roadmap.md +0 -325
- package/docs/vi/roadmap.md +0 -325
- package/docs/zh/roadmap.md +0 -322
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: Markdown
|
|
5
5
|
description: Узнайте, как объявлять и использовать Markdown-контент на вашем многоязычном сайте с помощью Intlayer. Следуйте инструкциям в этой документации, чтобы легко интегрировать Markdown в ваш проект.
|
|
6
6
|
keywords:
|
|
@@ -11,6 +11,8 @@ keywords:
|
|
|
11
11
|
- Next.js
|
|
12
12
|
- JavaScript
|
|
13
13
|
- React
|
|
14
|
+
- Remix
|
|
15
|
+
- Astro
|
|
14
16
|
slugs:
|
|
15
17
|
- doc
|
|
16
18
|
- concept
|
|
@@ -494,6 +496,111 @@ Intlayer предоставляет два независимых способа
|
|
|
494
496
|
```
|
|
495
497
|
|
|
496
498
|
</Tab>
|
|
499
|
+
<Tab label="Remix" value="remix">
|
|
500
|
+
В Remix 3 узлы Markdown рендерятся на сервере в строку HTML. Внедрите ее с помощью пропа `innerHTML` в Remix JSX или с помощью `html.raw` в представлении `html-template`.
|
|
501
|
+
|
|
502
|
+
```tsx fileName="src/views/home.tsx"
|
|
503
|
+
import { useIntlayer } from "remix-intlayer";
|
|
504
|
+
|
|
505
|
+
export const HomePage = () => () => {
|
|
506
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
507
|
+
|
|
508
|
+
return <div innerHTML={myMarkdownContent.value} />;
|
|
509
|
+
};
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
```ts fileName="src/views/home.ts"
|
|
513
|
+
import { html } from "remix/html-template";
|
|
514
|
+
import { useIntlayer } from "remix-intlayer";
|
|
515
|
+
|
|
516
|
+
export const renderHomePage = () => {
|
|
517
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
518
|
+
|
|
519
|
+
return html.raw`<div>${myMarkdownContent.value}</div>`;
|
|
520
|
+
};
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
> Remix экранирует интерполированные значения по умолчанию. `innerHTML` и `html.raw` — это два способа отказа от экранирования, что и требуется для отрендеренной строки Markdown.
|
|
524
|
+
|
|
525
|
+
Вы также можете предоставить локальные переопределения для определенных тегов с помощью метода `.use()`. Переопределения — это функции, возвращающие строку HTML:
|
|
526
|
+
|
|
527
|
+
```tsx
|
|
528
|
+
<div
|
|
529
|
+
innerHTML={myMarkdownContent.use({
|
|
530
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
531
|
+
})}
|
|
532
|
+
/>
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
`.value` — это отрендеренная HTML-строка, в то время как `String()` / `.toString()` возвращают исходный код Markdown:
|
|
536
|
+
|
|
537
|
+
```tsx
|
|
538
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
539
|
+
String(myMarkdownContent) // "# …"
|
|
540
|
+
myMarkdownContent.toString() // "# …"
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
И вы можете получить доступ к метаданным markdown следующим образом:
|
|
544
|
+
|
|
545
|
+
```tsx
|
|
546
|
+
myMarkdownContent.metadata
|
|
547
|
+
myMarkdownContent.metadata.title
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
</Tab>
|
|
551
|
+
<Tab label="Astro" value="astro">
|
|
552
|
+
В Astro узлы Markdown рендерятся в строку HTML. Внедрите ее с помощью директивы `set:html` в шаблоне или с помощью `innerHTML` в клиентском теге `<script>`.
|
|
553
|
+
|
|
554
|
+
```astro fileName="src/pages/index.astro"
|
|
555
|
+
---
|
|
556
|
+
import { useIntlayer } from "astro-intlayer";
|
|
557
|
+
|
|
558
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
<div set:html={myMarkdownContent.value} />
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
```astro fileName="src/components/Content.astro"
|
|
565
|
+
<div id="content"></div>
|
|
566
|
+
|
|
567
|
+
<script>
|
|
568
|
+
import { useIntlayer } from "astro-intlayer";
|
|
569
|
+
|
|
570
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
571
|
+
|
|
572
|
+
document.querySelector("#content")!.innerHTML = myMarkdownContent.value;
|
|
573
|
+
</script>
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
> Astro экранирует `{выражения}` по умолчанию. `set:html` — это способ отказа от экранирования, что и требуется для отрендеренной строки Markdown.
|
|
577
|
+
|
|
578
|
+
Вы также можете предоставить локальные переопределения для определенных тегов с помощью метода `.use()`. Переопределения — это функции, возвращающие строку HTML:
|
|
579
|
+
|
|
580
|
+
```astro
|
|
581
|
+
<div
|
|
582
|
+
set:html={myMarkdownContent.use({
|
|
583
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
584
|
+
})}
|
|
585
|
+
/>
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
`.value` — это отрендеренная HTML-строка, в то время как `String()` / `.toString()` возвращают исходный код Markdown:
|
|
589
|
+
|
|
590
|
+
```astro
|
|
591
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
592
|
+
String(myMarkdownContent) // "# …"
|
|
593
|
+
myMarkdownContent.toString() // "# …"
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
И вы можете получить доступ к метаданным markdown следующим образом:
|
|
597
|
+
|
|
598
|
+
```astro
|
|
599
|
+
myMarkdownContent.metadata
|
|
600
|
+
myMarkdownContent.metadata.title
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
</Tab>
|
|
497
604
|
</Tabs>
|
|
498
605
|
|
|
499
606
|
### 2. Вспомогательные утилиты (только строки Markdown)
|
|
@@ -705,6 +812,60 @@ Intlayer предоставляет два независимых способа
|
|
|
705
812
|
```
|
|
706
813
|
|
|
707
814
|
</Tab>
|
|
815
|
+
<Tab label="Remix" value="remix">
|
|
816
|
+
#### Хук `useMarkdownRenderer()`
|
|
817
|
+
|
|
818
|
+
Получите функцию рендеринга, предварительно настроенную с помощью `installIntlayerMarkdown()`. Она возвращает строку HTML.
|
|
819
|
+
|
|
820
|
+
```tsx
|
|
821
|
+
import { useMarkdownRenderer } from "remix-intlayer/markdown";
|
|
822
|
+
|
|
823
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
824
|
+
|
|
825
|
+
return <div innerHTML={renderMarkdown("# My Title")} />;
|
|
826
|
+
```
|
|
827
|
+
|
|
828
|
+
#### Утилита `renderMarkdown()`
|
|
829
|
+
|
|
830
|
+
Автономная утилита, игнорирующая глобальную конфигурацию.
|
|
831
|
+
|
|
832
|
+
```tsx
|
|
833
|
+
import { renderMarkdown } from "remix-intlayer/markdown";
|
|
834
|
+
|
|
835
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
</Tab>
|
|
839
|
+
<Tab label="Astro" value="astro">
|
|
840
|
+
#### Хук `useMarkdownRenderer()`
|
|
841
|
+
|
|
842
|
+
Получите функцию рендеринга, предварительно настроенную с помощью `installIntlayerMarkdown()`. Она возвращает строку HTML.
|
|
843
|
+
|
|
844
|
+
```astro
|
|
845
|
+
---
|
|
846
|
+
import { useMarkdownRenderer } from "astro-intlayer/markdown";
|
|
847
|
+
|
|
848
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
849
|
+
---
|
|
850
|
+
|
|
851
|
+
<div set:html={renderMarkdown("# My Title")} />
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
#### Утилита `renderMarkdown()`
|
|
855
|
+
|
|
856
|
+
Автономная утилита, игнорирующая глобальную конфигурацию.
|
|
857
|
+
|
|
858
|
+
```astro
|
|
859
|
+
---
|
|
860
|
+
import { renderMarkdown } from "astro-intlayer/markdown";
|
|
861
|
+
|
|
862
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
863
|
+
---
|
|
864
|
+
|
|
865
|
+
<div set:html={html} />
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
</Tab>
|
|
708
869
|
</Tabs>
|
|
709
870
|
|
|
710
871
|
## Глобальная конфигурация с `MarkdownProvider`
|
|
@@ -1004,6 +1165,73 @@ Intlayer предоставляет два независимых способа
|
|
|
1004
1165
|
> Динамический импорт вашего renderer Markdown — это хороший способ уменьшить размер bundle приложения.
|
|
1005
1166
|
|
|
1006
1167
|
</Tab>
|
|
1168
|
+
<Tab label="Remix" value="remix">
|
|
1169
|
+
|
|
1170
|
+
В Remix нет дерева компонентов для размещения провайдера, поэтому конфигурация устанавливается один раз как синглтон при запуске сервера. Она настраивает рендерер, возвращаемый `useMarkdownRenderer()`. Узлы `md`, возвращаемые `useIntlayer`, рендерятся с помощью компилятора по умолчанию; переопределяйте их теги для каждого узла с помощью `.use()`.
|
|
1171
|
+
|
|
1172
|
+
```typescript fileName="src/router.ts"
|
|
1173
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1174
|
+
|
|
1175
|
+
installIntlayerMarkdown({
|
|
1176
|
+
forceBlock: true,
|
|
1177
|
+
components: {
|
|
1178
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1179
|
+
},
|
|
1180
|
+
});
|
|
1181
|
+
```
|
|
1182
|
+
|
|
1183
|
+
Вы также можете использовать собственный рендерер markdown:
|
|
1184
|
+
|
|
1185
|
+
```typescript fileName="src/router.ts"
|
|
1186
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1187
|
+
|
|
1188
|
+
installIntlayerMarkdown({
|
|
1189
|
+
renderMarkdown: async (md) => {
|
|
1190
|
+
const { marked } = await import("marked");
|
|
1191
|
+
return marked(md) as string;
|
|
1192
|
+
},
|
|
1193
|
+
});
|
|
1194
|
+
```
|
|
1195
|
+
|
|
1196
|
+
> Используйте `installIntlayerMarkdownDynamic(async () => …)` для отложенной загрузки самого рендерера; загрузчик выполняется только при первом вызове.
|
|
1197
|
+
|
|
1198
|
+
</Tab>
|
|
1199
|
+
<Tab label="Astro" value="astro">
|
|
1200
|
+
|
|
1201
|
+
В Astro нет дерева компонентов для размещения провайдера, поэтому конфигурация устанавливается один раз как синглтон в middleware (сервер) и в клиентском теге `<script>` (браузер). Она настраивает рендерер, возвращаемый `useMarkdownRenderer()`. Узлы `md`, возвращаемые `useIntlayer`, рендерятся с помощью компилятора по умолчанию; переопределяйте их теги для каждого узла с помощью `.use()`.
|
|
1202
|
+
|
|
1203
|
+
```typescript fileName="src/middleware.ts"
|
|
1204
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1205
|
+
import { defineMiddleware } from "astro:middleware";
|
|
1206
|
+
|
|
1207
|
+
// Запускается один раз при старте сервера; сам middleware Intlayer
|
|
1208
|
+
// регистрируется интеграцией перед этим файлом.
|
|
1209
|
+
installIntlayerMarkdown({
|
|
1210
|
+
forceBlock: true,
|
|
1211
|
+
components: {
|
|
1212
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1213
|
+
},
|
|
1214
|
+
});
|
|
1215
|
+
|
|
1216
|
+
export const onRequest = defineMiddleware((_context, next) => next());
|
|
1217
|
+
```
|
|
1218
|
+
|
|
1219
|
+
Вы также можете использовать собственный рендерер markdown:
|
|
1220
|
+
|
|
1221
|
+
```typescript fileName="src/middleware.ts"
|
|
1222
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1223
|
+
|
|
1224
|
+
installIntlayerMarkdown({
|
|
1225
|
+
renderMarkdown: async (md) => {
|
|
1226
|
+
const { marked } = await import("marked");
|
|
1227
|
+
return marked(md) as string;
|
|
1228
|
+
},
|
|
1229
|
+
});
|
|
1230
|
+
```
|
|
1231
|
+
|
|
1232
|
+
> Используйте `installIntlayerMarkdownDynamic(async () => …)` для отложенной загрузки самого рендерера; загрузчик выполняется только при первом вызове.
|
|
1233
|
+
|
|
1234
|
+
</Tab>
|
|
1007
1235
|
</Tabs>
|
|
1008
1236
|
|
|
1009
1237
|
## Suspense
|
|
@@ -1332,6 +1560,40 @@ export class MyComponent {
|
|
|
1332
1560
|
```
|
|
1333
1561
|
|
|
1334
1562
|
</Tab>
|
|
1563
|
+
<Tab label="Remix" value="remix">
|
|
1564
|
+
|
|
1565
|
+
Remix 3 выполняет рендеринг на сервере и передает HTML потоком, поэтому AST не требуется передавать клиенту. Выполните парсинг один раз и рендерите AST везде, где строится страница:
|
|
1566
|
+
|
|
1567
|
+
```tsx fileName="src/views/article.tsx"
|
|
1568
|
+
import { parseMarkdown, renderMarkdown } from "remix-intlayer/markdown";
|
|
1569
|
+
|
|
1570
|
+
// 1. Парсинг markdown в сериализуемый AST (например, один раз при загрузке модуля)
|
|
1571
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1572
|
+
|
|
1573
|
+
export const ArticlePage = () => () => (
|
|
1574
|
+
// 2. Рендеринг AST: рендерер принимает исходную строку или спарсенный AST
|
|
1575
|
+
<article innerHTML={renderMarkdown(ast)} />
|
|
1576
|
+
);
|
|
1577
|
+
```
|
|
1578
|
+
|
|
1579
|
+
</Tab>
|
|
1580
|
+
<Tab label="Astro" value="astro">
|
|
1581
|
+
|
|
1582
|
+
Страницы Astro рендерятся на сервере, поэтому AST не требуется передавать клиенту. Выполните парсинг Markdown во frontmatter и отрендерите его с помощью `set:html`:
|
|
1583
|
+
|
|
1584
|
+
```astro fileName="src/pages/article.astro"
|
|
1585
|
+
---
|
|
1586
|
+
import { parseMarkdown, renderMarkdown } from "astro-intlayer/markdown";
|
|
1587
|
+
|
|
1588
|
+
// 1. Парсинг markdown в сериализуемый AST
|
|
1589
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1590
|
+
---
|
|
1591
|
+
|
|
1592
|
+
<!-- 2. Рендеринг AST: рендерер принимает исходную строку или спарсенный AST -->
|
|
1593
|
+
<article set:html={renderMarkdown(ast)} />
|
|
1594
|
+
```
|
|
1595
|
+
|
|
1596
|
+
</Tab>
|
|
1335
1597
|
</Tabs>
|
|
1336
1598
|
|
|
1337
1599
|
Этот подход гарантирует, что логика анализа Markdown полностью выполняется на сервере, что значительно сокращает время выполнения на стороне клиента и повышает скорость первоначальной гидратации.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Analog i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Analog. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -157,6 +157,28 @@ bun add intlayer angular-intlayer vite-intlayer
|
|
|
157
157
|
</Step>
|
|
158
158
|
<Step number={2} title="Конфигурация вашего проекта">
|
|
159
159
|
|
|
160
|
+
### Архитектура
|
|
161
|
+
|
|
162
|
+
В этой архитектуре `angular-intlayer` предоставляет `provideIntlayer()`, зарегистрированный в `src/app/app.config.ts`, чтобы каждый компонент и файловая страница могли читать свой контент через сигнал `useIntlayer`. Analog построен на Vite, поэтому плагин `intlayer()` из `vite-intlayer` добавляется рядом с `analog()` в `vite.config.ts` для отслеживания и пересборки ваших объявлений контента, а также для работы прокси локали. Объявления контента размещаются рядом с компонентами и страницами в `src/app/`.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
.
|
|
166
|
+
├── src
|
|
167
|
+
│ ├── app
|
|
168
|
+
│ │ ├── pages
|
|
169
|
+
│ │ │ └── index.page.ts # File-based route using useIntlayer
|
|
170
|
+
│ │ ├── app.config.ts # Application config with provideIntlayer()
|
|
171
|
+
│ │ ├── app.content.ts # App content declaration
|
|
172
|
+
│ │ └── locale-switcher.component.ts
|
|
173
|
+
│ └── main.ts
|
|
174
|
+
├── intlayer.config.ts
|
|
175
|
+
├── package.json
|
|
176
|
+
├── tsconfig.json
|
|
177
|
+
└── vite.config.ts # analog() and intlayer() Vite plugins
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Конфигурация
|
|
181
|
+
|
|
160
182
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
161
183
|
|
|
162
184
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Angular 19 i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Angular 19. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -164,6 +164,29 @@ bun add @angular-builders/custom-webpack --dev
|
|
|
164
164
|
</Step>
|
|
165
165
|
<Step number={2} title="Конфигурация вашего проекта">
|
|
166
166
|
|
|
167
|
+
### Архитектура
|
|
168
|
+
|
|
169
|
+
В этой архитектуре `angular-intlayer` предоставляет `provideIntlayer()`, зарегистрированный в `src/app/app.config.ts`, чтобы каждый компонент мог читать свой контент через сигнал `useIntlayer`. Angular CLI переключается на кастомный сборщик Webpack, а `webpack.config.ts` объединяет плагин Intlayer со сборкой для отслеживания и пересборки объявлений контента. Объявления контента размещаются рядом с компонентами в `src/app/`.
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
.
|
|
173
|
+
├── src
|
|
174
|
+
│ ├── app
|
|
175
|
+
│ │ ├── app.component.html # Root template reading the content signal
|
|
176
|
+
│ │ ├── app.component.ts # Root component using useIntlayer
|
|
177
|
+
│ │ ├── app.config.ts # Application config with provideIntlayer()
|
|
178
|
+
│ │ ├── app.content.ts # App content declaration
|
|
179
|
+
│ │ └── locale-switcher.component.ts
|
|
180
|
+
│ └── main.ts
|
|
181
|
+
├── angular.json # Custom Webpack builder for build and serve
|
|
182
|
+
├── intlayer.config.ts
|
|
183
|
+
├── package.json
|
|
184
|
+
├── tsconfig.json
|
|
185
|
+
└── webpack.config.ts # mergeConfig() from angular-intlayer/webpack
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Конфигурация
|
|
189
|
+
|
|
167
190
|
Создайте файл конфигурации для настройки языков вашего приложения:
|
|
168
191
|
|
|
169
192
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Angular 22 i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Angular 22. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -166,6 +166,29 @@ bun add @angular-builders/custom-esbuild --dev
|
|
|
166
166
|
</Step>
|
|
167
167
|
<Step number={2} title="Настройка вашего проекта">
|
|
168
168
|
|
|
169
|
+
### Архитектура
|
|
170
|
+
|
|
171
|
+
В этой архитектуре `angular-intlayer` предоставляет `provideIntlayer()`, зарегистрированный в `src/app/app.config.ts`, чтобы каждый компонент мог читать свой контент через сигнал `useIntlayer`. Angular CLI переключается на кастомный сборщик esbuild, а `esbuild.plugins.ts` регистрирует плагин Intlayer в сборке для отслеживания и пересборки объявлений контента. Объявления контента размещаются рядом с компонентами в `src/app/`.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
.
|
|
175
|
+
├── src
|
|
176
|
+
│ ├── app
|
|
177
|
+
│ │ ├── app.component.html # Root template reading the content signal
|
|
178
|
+
│ │ ├── app.component.ts # Root component using useIntlayer
|
|
179
|
+
│ │ ├── app.config.ts # Application config with provideIntlayer()
|
|
180
|
+
│ │ ├── app.content.ts # App content declaration
|
|
181
|
+
│ │ └── locale-switcher.component.ts
|
|
182
|
+
│ └── main.ts
|
|
183
|
+
├── angular.json # Custom esbuild builder for build and serve
|
|
184
|
+
├── esbuild.plugins.ts # intlayerEsbuildPlugin() from angular-intlayer/esbuild
|
|
185
|
+
├── intlayer.config.ts
|
|
186
|
+
├── package.json
|
|
187
|
+
└── tsconfig.json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Конфигурация
|
|
191
|
+
|
|
169
192
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
170
193
|
|
|
171
194
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-03-07
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -160,6 +160,29 @@ bun add intlayer astro-intlayer
|
|
|
160
160
|
</Step>
|
|
161
161
|
<Step number={2} title="Настройка вашего проекта">
|
|
162
162
|
|
|
163
|
+
### Архитектура
|
|
164
|
+
|
|
165
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer`, а объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
.
|
|
169
|
+
├── src
|
|
170
|
+
│ ├── app.content.tsx # App content declaration
|
|
171
|
+
│ ├── components
|
|
172
|
+
│ │ └── LocaleSwitcher.astro # Locale switcher component
|
|
173
|
+
│ └── pages
|
|
174
|
+
│ ├── [...locale]
|
|
175
|
+
│ │ └── index.astro # Localized page (rest param also serves the default locale)
|
|
176
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
177
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
178
|
+
├── astro.config.ts # Astro config with the intlayer() integration
|
|
179
|
+
├── intlayer.config.ts
|
|
180
|
+
├── package.json
|
|
181
|
+
└── tsconfig.json
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Конфигурация
|
|
185
|
+
|
|
163
186
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
164
187
|
|
|
165
188
|
```typescript fileName="intlayer.config.ts"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-24
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro + Lit i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Lit. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -180,6 +180,30 @@ bun x intlayer init
|
|
|
180
180
|
</Step>
|
|
181
181
|
<Step number={2} title="Настройка вашего проекта">
|
|
182
182
|
|
|
183
|
+
### Архитектура
|
|
184
|
+
|
|
185
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer` для серверного рендеринга, а остров Lit (`src/components/lit/LitDemo.ts`) получает определённую сервером локаль в качестве пропа и передаёт её в `lit-intlayer` для интерактивной части. Объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
.
|
|
189
|
+
├── src
|
|
190
|
+
│ ├── components
|
|
191
|
+
│ │ └── lit
|
|
192
|
+
│ │ ├── app.content.ts # App content declaration
|
|
193
|
+
│ │ └── LitDemo.ts # Lit custom element (content + locale switcher)
|
|
194
|
+
│ └── pages
|
|
195
|
+
│ ├── [...locale]
|
|
196
|
+
│ │ └── index.astro # Localized page mounting the custom element
|
|
197
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
198
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
199
|
+
├── astro.config.ts # Astro config with the intlayer() and lit() integrations
|
|
200
|
+
├── intlayer.config.ts
|
|
201
|
+
├── package.json
|
|
202
|
+
└── tsconfig.json
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Конфигурация
|
|
206
|
+
|
|
183
207
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
184
208
|
|
|
185
209
|
```typescript fileName="intlayer.config.ts"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-24
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro + Preact i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Preact. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -179,6 +179,31 @@ bun x intlayer init
|
|
|
179
179
|
</Step>
|
|
180
180
|
<Step number={2} title="Настройка вашего проекта">
|
|
181
181
|
|
|
182
|
+
### Архитектура
|
|
183
|
+
|
|
184
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer` для серверного рендеринга, а остров Preact (`src/components/preact/PreactIsland.tsx`) получает определённую сервером локаль в качестве пропа и передаёт её в `preact-intlayer` для интерактивной части. Объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
.
|
|
188
|
+
├── src
|
|
189
|
+
│ ├── app.content.tsx # App content declaration
|
|
190
|
+
│ ├── components
|
|
191
|
+
│ │ └── preact
|
|
192
|
+
│ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
|
|
193
|
+
│ │ └── PreactIsland.tsx # Preact island wrapping the tree in IntlayerProvider
|
|
194
|
+
│ └── pages
|
|
195
|
+
│ ├── [...locale]
|
|
196
|
+
│ │ └── index.astro # Localized page mounting the island
|
|
197
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
198
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
199
|
+
├── astro.config.ts # Astro config with the intlayer() and preact() integrations
|
|
200
|
+
├── intlayer.config.ts
|
|
201
|
+
├── package.json
|
|
202
|
+
└── tsconfig.json
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Конфигурация
|
|
206
|
+
|
|
182
207
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
183
208
|
|
|
184
209
|
```typescript fileName="intlayer.config.ts"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-03-07
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro + React i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + React. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -182,6 +182,31 @@ bun x intlayer init
|
|
|
182
182
|
</Step>
|
|
183
183
|
<Step number={2} title="Настройка вашего проекта">
|
|
184
184
|
|
|
185
|
+
### Архитектура
|
|
186
|
+
|
|
187
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer` для серверного рендеринга, а остров React (`src/components/react/ReactIsland.tsx`) получает определённую сервером локаль в качестве пропа и передаёт её в `react-intlayer` для интерактивной части. Объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
.
|
|
191
|
+
├── src
|
|
192
|
+
│ ├── app.content.tsx # App content declaration
|
|
193
|
+
│ ├── components
|
|
194
|
+
│ │ └── react
|
|
195
|
+
│ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
|
|
196
|
+
│ │ └── ReactIsland.tsx # React island wrapping the tree in IntlayerProvider
|
|
197
|
+
│ └── pages
|
|
198
|
+
│ ├── [...locale]
|
|
199
|
+
│ │ └── index.astro # Localized page mounting the island
|
|
200
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
201
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
202
|
+
├── astro.config.ts # Astro config with the intlayer() and react() integrations
|
|
203
|
+
├── intlayer.config.ts
|
|
204
|
+
├── package.json
|
|
205
|
+
└── tsconfig.json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Конфигурация
|
|
209
|
+
|
|
185
210
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
186
211
|
|
|
187
212
|
```typescript fileName="intlayer.config.ts"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-24
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro + Solid i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Solid. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -179,6 +179,31 @@ bun x intlayer init
|
|
|
179
179
|
</Step>
|
|
180
180
|
<Step number={2} title="Настройка вашего проекта">
|
|
181
181
|
|
|
182
|
+
### Архитектура
|
|
183
|
+
|
|
184
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer` для серверного рендеринга, а остров Solid (`src/components/solid/SolidIsland.tsx`) получает определённую сервером локаль в качестве пропа и передаёт её в `solid-intlayer` для интерактивной части. Объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
.
|
|
188
|
+
├── src
|
|
189
|
+
│ ├── app.content.tsx # App content declaration
|
|
190
|
+
│ ├── components
|
|
191
|
+
│ │ └── solid
|
|
192
|
+
│ │ ├── LocaleSwitcher.tsx # Locale switcher rendered inside the island
|
|
193
|
+
│ │ └── SolidIsland.tsx # Solid island wrapping the tree in IntlayerProvider
|
|
194
|
+
│ └── pages
|
|
195
|
+
│ ├── [...locale]
|
|
196
|
+
│ │ └── index.astro # Localized page mounting the island
|
|
197
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
198
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
199
|
+
├── astro.config.ts # Astro config with the intlayer() and solid() integrations
|
|
200
|
+
├── intlayer.config.ts
|
|
201
|
+
├── package.json
|
|
202
|
+
└── tsconfig.json
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Конфигурация
|
|
206
|
+
|
|
182
207
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
183
208
|
|
|
184
209
|
```typescript fileName="intlayer.config.ts"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-24
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: "Astro + Svelte i18n - Полное руководство по переводу вашего приложения"
|
|
5
5
|
description: "Больше никакого i18next. Руководство 2026 по созданию многоязычного (i18n) приложения Astro + Svelte. Переводите с помощью ИИ-агентов и оптимизируйте размер бандла, SEO и производительность."
|
|
6
6
|
keywords:
|
|
@@ -179,6 +179,30 @@ bun x intlayer init
|
|
|
179
179
|
</Step>
|
|
180
180
|
<Step number={2} title="Настройка вашего проекта">
|
|
181
181
|
|
|
182
|
+
### Архитектура
|
|
183
|
+
|
|
184
|
+
В этой архитектуре интеграция `intlayer()`, зарегистрированная в `astro.config.ts`, собирает ваши словари и добавляет middleware, который определяет локаль каждого запроса и предоставляет её в `Astro.locals.intlayer`. Страницы располагаются в сегменте rest `src/pages/[...locale]/`, благодаря чему локаль по умолчанию отдается без префикса, а каждая другая локаль получает собственный выделенный URL. Файлы `.astro` читают контент с помощью хуков `useIntlayer` / `useLocale` из `astro-intlayer` для серверного рендеринга, а остров Svelte (`src/components/svelte/SvelteIsland.svelte`) получает определённую сервером локаль в качестве пропа и передаёт её в `svelte-intlayer` для интерактивной части. Объявления контента размещаются рядом с вашими компонентами в `src/`.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
.
|
|
188
|
+
├── src
|
|
189
|
+
│ ├── app.content.ts # App content declaration
|
|
190
|
+
│ ├── components
|
|
191
|
+
│ │ └── svelte
|
|
192
|
+
│ │ └── SvelteIsland.svelte # Svelte island (content + locale switcher)
|
|
193
|
+
│ └── pages
|
|
194
|
+
│ ├── [...locale]
|
|
195
|
+
│ │ └── index.astro # Localized page mounting the island
|
|
196
|
+
│ ├── robots.txt.ts # robots.txt endpoint
|
|
197
|
+
│ └── sitemap.xml.ts # Localized sitemap endpoint
|
|
198
|
+
├── astro.config.ts # Astro config with the intlayer() and svelte() integrations
|
|
199
|
+
├── intlayer.config.ts
|
|
200
|
+
├── package.json
|
|
201
|
+
└── tsconfig.json
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Конфигурация
|
|
205
|
+
|
|
182
206
|
Создайте конфигурационный файл для настройки языков вашего приложения:
|
|
183
207
|
|
|
184
208
|
```typescript fileName="intlayer.config.ts"
|