@intlayer/docs 9.5.6 → 9.5.7
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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/docs.entry.cjs +40 -40
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/esm/generated/docs.entry.mjs +40 -40
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/types/generated/docs.entry.d.ts +2 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +13 -13
- package/docs/ar/benchmark/solid.md +5 -5
- package/docs/ar/benchmark/svelte.md +4 -4
- package/docs/ar/benchmark/tanstack.md +14 -13
- package/docs/ar/benchmark/vue.md +5 -5
- package/docs/ar/chrome_extension.md +130 -0
- package/docs/ar/cli/index.md +6 -1
- package/docs/ar/cli/infra.md +162 -0
- package/docs/ar/cli/init.md +24 -1
- 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 +13 -13
- package/docs/de/benchmark/solid.md +5 -5
- package/docs/de/benchmark/svelte.md +4 -4
- package/docs/de/benchmark/tanstack.md +14 -13
- package/docs/de/benchmark/vue.md +5 -5
- package/docs/de/chrome_extension.md +130 -0
- package/docs/de/cli/index.md +6 -1
- package/docs/de/cli/infra.md +162 -0
- package/docs/de/cli/init.md +24 -1
- 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/benchmark/nextjs.md +13 -13
- package/docs/en/benchmark/solid.md +5 -5
- package/docs/en/benchmark/svelte.md +4 -4
- package/docs/en/benchmark/tanstack.md +14 -13
- package/docs/en/benchmark/vue.md +5 -5
- package/docs/en/chrome_extension.md +130 -0
- package/docs/en/cli/index.md +6 -1
- package/docs/en/cli/infra.md +175 -0
- package/docs/en/cli/init.md +25 -1
- 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 +13 -13
- package/docs/en-GB/benchmark/solid.md +5 -5
- package/docs/en-GB/benchmark/svelte.md +4 -4
- package/docs/en-GB/benchmark/tanstack.md +14 -13
- package/docs/en-GB/benchmark/vue.md +5 -5
- package/docs/en-GB/chrome_extension.md +130 -0
- package/docs/en-GB/cli/index.md +6 -1
- package/docs/en-GB/cli/infra.md +162 -0
- package/docs/en-GB/cli/init.md +24 -1
- 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 +13 -13
- package/docs/es/benchmark/solid.md +5 -5
- package/docs/es/benchmark/svelte.md +4 -4
- package/docs/es/benchmark/tanstack.md +14 -13
- package/docs/es/benchmark/vue.md +5 -5
- package/docs/es/chrome_extension.md +130 -0
- package/docs/es/cli/index.md +6 -1
- package/docs/es/cli/infra.md +162 -0
- package/docs/es/cli/init.md +24 -1
- 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 +13 -13
- package/docs/fr/benchmark/solid.md +5 -5
- package/docs/fr/benchmark/svelte.md +4 -4
- package/docs/fr/benchmark/tanstack.md +14 -13
- package/docs/fr/benchmark/vue.md +5 -5
- package/docs/fr/chrome_extension.md +130 -0
- package/docs/fr/cli/index.md +6 -1
- package/docs/fr/cli/infra.md +162 -0
- package/docs/fr/cli/init.md +24 -1
- 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 +13 -13
- package/docs/hi/benchmark/solid.md +5 -5
- package/docs/hi/benchmark/svelte.md +4 -4
- package/docs/hi/benchmark/tanstack.md +14 -13
- package/docs/hi/benchmark/vue.md +5 -5
- package/docs/hi/chrome_extension.md +130 -0
- package/docs/hi/cli/index.md +6 -1
- package/docs/hi/cli/infra.md +162 -0
- package/docs/hi/cli/init.md +24 -1
- 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 +13 -13
- package/docs/id/benchmark/solid.md +5 -5
- package/docs/id/benchmark/svelte.md +4 -4
- package/docs/id/benchmark/tanstack.md +14 -13
- package/docs/id/benchmark/vue.md +5 -5
- package/docs/id/chrome_extension.md +130 -0
- package/docs/id/cli/index.md +6 -1
- package/docs/id/cli/infra.md +162 -0
- package/docs/id/cli/init.md +24 -1
- 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 +13 -13
- package/docs/it/benchmark/solid.md +5 -5
- package/docs/it/benchmark/svelte.md +4 -4
- package/docs/it/benchmark/tanstack.md +14 -13
- package/docs/it/benchmark/vue.md +5 -5
- package/docs/it/chrome_extension.md +130 -0
- package/docs/it/cli/index.md +6 -1
- package/docs/it/cli/infra.md +162 -0
- package/docs/it/cli/init.md +24 -1
- 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 +13 -13
- package/docs/ja/benchmark/solid.md +5 -5
- package/docs/ja/benchmark/svelte.md +4 -4
- package/docs/ja/benchmark/tanstack.md +13 -12
- package/docs/ja/benchmark/vue.md +5 -5
- package/docs/ja/chrome_extension.md +130 -0
- package/docs/ja/cli/index.md +6 -1
- package/docs/ja/cli/infra.md +162 -0
- package/docs/ja/cli/init.md +24 -1
- 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 +13 -13
- package/docs/ko/benchmark/solid.md +5 -5
- package/docs/ko/benchmark/svelte.md +4 -4
- package/docs/ko/benchmark/tanstack.md +14 -13
- package/docs/ko/benchmark/vue.md +5 -5
- package/docs/ko/chrome_extension.md +130 -0
- package/docs/ko/cli/index.md +6 -1
- package/docs/ko/cli/infra.md +162 -0
- package/docs/ko/cli/init.md +24 -1
- 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 +13 -13
- package/docs/pl/benchmark/solid.md +5 -5
- package/docs/pl/benchmark/svelte.md +4 -4
- package/docs/pl/benchmark/tanstack.md +14 -13
- package/docs/pl/benchmark/vue.md +5 -5
- package/docs/pl/chrome_extension.md +130 -0
- package/docs/pl/cli/index.md +6 -1
- package/docs/pl/cli/infra.md +162 -0
- package/docs/pl/cli/init.md +24 -1
- 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 +13 -13
- package/docs/pt/benchmark/solid.md +5 -5
- package/docs/pt/benchmark/svelte.md +4 -4
- package/docs/pt/benchmark/tanstack.md +14 -13
- package/docs/pt/benchmark/vue.md +5 -5
- package/docs/pt/chrome_extension.md +130 -0
- package/docs/pt/cli/index.md +6 -1
- package/docs/pt/cli/infra.md +162 -0
- package/docs/pt/cli/init.md +24 -1
- 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 +13 -13
- package/docs/ru/benchmark/solid.md +5 -5
- package/docs/ru/benchmark/svelte.md +4 -4
- package/docs/ru/benchmark/tanstack.md +14 -13
- package/docs/ru/benchmark/vue.md +5 -5
- package/docs/ru/chrome_extension.md +130 -0
- package/docs/ru/cli/index.md +6 -1
- package/docs/ru/cli/infra.md +162 -0
- package/docs/ru/cli/init.md +24 -1
- 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 +13 -13
- package/docs/tr/benchmark/solid.md +5 -5
- package/docs/tr/benchmark/svelte.md +4 -4
- package/docs/tr/benchmark/tanstack.md +14 -13
- package/docs/tr/benchmark/vue.md +5 -5
- package/docs/tr/chrome_extension.md +130 -0
- package/docs/tr/cli/index.md +6 -1
- package/docs/tr/cli/infra.md +162 -0
- package/docs/tr/cli/init.md +24 -1
- 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 +13 -13
- package/docs/uk/benchmark/solid.md +5 -5
- package/docs/uk/benchmark/svelte.md +4 -4
- package/docs/uk/benchmark/tanstack.md +14 -13
- package/docs/uk/benchmark/vue.md +5 -5
- package/docs/uk/chrome_extension.md +130 -0
- package/docs/uk/cli/index.md +6 -1
- package/docs/uk/cli/infra.md +162 -0
- package/docs/uk/cli/init.md +24 -1
- 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 +13 -13
- package/docs/vi/benchmark/solid.md +5 -5
- package/docs/vi/benchmark/svelte.md +4 -4
- package/docs/vi/benchmark/tanstack.md +14 -13
- package/docs/vi/benchmark/vue.md +5 -5
- package/docs/vi/chrome_extension.md +130 -0
- package/docs/vi/cli/index.md +6 -1
- package/docs/vi/cli/infra.md +162 -0
- package/docs/vi/cli/init.md +24 -1
- 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 +13 -13
- package/docs/zh/benchmark/solid.md +5 -5
- package/docs/zh/benchmark/svelte.md +4 -4
- package/docs/zh/benchmark/tanstack.md +14 -13
- package/docs/zh/benchmark/vue.md +5 -5
- package/docs/zh/chrome_extension.md +130 -0
- package/docs/zh/cli/index.md +6 -1
- package/docs/zh/cli/infra.md +162 -0
- package/docs/zh/cli/init.md +24 -1
- 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 +1 -1
- package/src/generated/docs.entry.ts +40 -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: 2026-01-20
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: Zawartość HTML
|
|
5
5
|
description: Dowiedz się, jak deklarować i używać zawartości HTML z niestandardowymi komponentami w Intlayer. Postępuj zgodnie z tą dokumentacją, aby osadzić bogate, przypominające HTML treści z dynamiczną podmianą komponentów w swoim zlokalizowanym projekcie.
|
|
6
6
|
keywords:
|
|
@@ -13,6 +13,8 @@ keywords:
|
|
|
13
13
|
- React
|
|
14
14
|
- Vue
|
|
15
15
|
- Svelte
|
|
16
|
+
- Remix
|
|
17
|
+
- Astro
|
|
16
18
|
- Solid
|
|
17
19
|
- Angular
|
|
18
20
|
slugs:
|
|
@@ -238,6 +240,83 @@ Kiedy uzyskujesz dostęp do treści za pomocą `useIntlayer`, węzły HTML są j
|
|
|
238
240
|
```
|
|
239
241
|
|
|
240
242
|
</Tab>
|
|
243
|
+
<Tab label="Remix" value="remix">
|
|
244
|
+
W Remix 3 węzły HTML są rozwiązywane do ciągu znaków HTML. Wstrzyknij go za pomocą właściwości `innerHTML` w Remix JSX lub za pomocą `html.raw` w widoku `html-template`.
|
|
245
|
+
|
|
246
|
+
```tsx fileName="src/views/home.tsx"
|
|
247
|
+
import { useIntlayer } from "remix-intlayer";
|
|
248
|
+
|
|
249
|
+
export const HomePage = () => () => {
|
|
250
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
251
|
+
|
|
252
|
+
return <div innerHTML={myHtmlContent.value} />;
|
|
253
|
+
};
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
```ts fileName="src/views/home.ts"
|
|
257
|
+
import { html } from "remix/html-template";
|
|
258
|
+
import { useIntlayer } from "remix-intlayer";
|
|
259
|
+
|
|
260
|
+
export const renderHomePage = () => {
|
|
261
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
262
|
+
|
|
263
|
+
return html.raw`<div>${myHtmlContent.value}</div>`;
|
|
264
|
+
};
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
> Remix domyślnie eskapuje interpolowane wartości. `innerHTML` i `html.raw` to dwa wyjątki, które są potrzebne dla ciągu znaków HTML.
|
|
268
|
+
|
|
269
|
+
Użyj metody `.use()`, aby nadpisać znaczniki lub zmapować niestandardowe komponenty. Nadpisania to funkcje zwracające ciąg znaków HTML:
|
|
270
|
+
|
|
271
|
+
```tsx
|
|
272
|
+
<div
|
|
273
|
+
innerHTML={myHtmlContent.use({
|
|
274
|
+
p: ({ children }) => `<p class="prose">${children}</p>`,
|
|
275
|
+
CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
|
|
276
|
+
})}
|
|
277
|
+
/>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
</Tab>
|
|
281
|
+
<Tab label="Astro" value="astro">
|
|
282
|
+
W Astro węzły HTML są rozwiązywane do ciągu znaków HTML. Wstrzyknij go za pomocą dyrektywy `set:html` w szablonie lub za pomocą `innerHTML` w tagu `<script>` klienta.
|
|
283
|
+
|
|
284
|
+
```astro fileName="src/pages/index.astro"
|
|
285
|
+
---
|
|
286
|
+
import { useIntlayer } from "astro-intlayer";
|
|
287
|
+
|
|
288
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
<div set:html={myHtmlContent.value} />
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
```astro fileName="src/components/Content.astro"
|
|
295
|
+
<div id="content"></div>
|
|
296
|
+
|
|
297
|
+
<script>
|
|
298
|
+
import { useIntlayer } from "astro-intlayer";
|
|
299
|
+
|
|
300
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
301
|
+
|
|
302
|
+
document.querySelector("#content")!.innerHTML = myHtmlContent.value;
|
|
303
|
+
</script>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
> Astro domyślnie eskapuje `{wyrażenia}`. `set:html` jest wyjątkiem, którego potrzebuje ciąg znaków HTML.
|
|
307
|
+
|
|
308
|
+
Użyj metody `.use()`, aby nadpisać znaczniki lub zmapować niestandardowe komponenty. Nadpisania to funkcje zwracające ciąg znaków HTML:
|
|
309
|
+
|
|
310
|
+
```astro
|
|
311
|
+
<div
|
|
312
|
+
set:html={myHtmlContent.use({
|
|
313
|
+
p: ({ children }) => `<p class="prose">${children}</p>`,
|
|
314
|
+
CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
|
|
315
|
+
})}
|
|
316
|
+
/>
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
</Tab>
|
|
241
320
|
</Tabs>
|
|
242
321
|
|
|
243
322
|
## Konfiguracja globalna z `HTMLProvider`
|
|
@@ -473,6 +552,41 @@ Możesz skonfigurować renderowanie HTML globalnie dla całej aplikacji. To idea
|
|
|
473
552
|
> Dynamiczne importowanie silnika renderującego HTML to dobry sposób na zmniejszenie rozmiaru paczki (bundle) Twojej aplikacji.
|
|
474
553
|
|
|
475
554
|
</Tab>
|
|
555
|
+
<Tab label="Remix" value="remix">
|
|
556
|
+
|
|
557
|
+
Remix nie ma drzewa komponentów, które mogłoby pomieścić providera, więc konfiguracja jest instalowana raz, jako singleton, przy starcie serwera. Konfiguruje ona renderer zwracany przez `useHTMLRenderer()`. Węzły `html` zwracane przez `useIntlayer` są renderowane w obecnej postaci; nadpisuj ich znaczniki dla każdego węzła za pomocą `.use()`.
|
|
558
|
+
|
|
559
|
+
```typescript fileName="src/router.ts"
|
|
560
|
+
import { installIntlayerHTML } from "remix-intlayer/html";
|
|
561
|
+
|
|
562
|
+
installIntlayerHTML({
|
|
563
|
+
renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
|
|
564
|
+
});
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
> Użyj `installIntlayerHTMLDynamic(async () => …)`, aby załadować sam renderer leniwie; moduł ładujący uruchamia się tylko przy pierwszym wywołaniu.
|
|
568
|
+
|
|
569
|
+
</Tab>
|
|
570
|
+
<Tab label="Astro" value="astro">
|
|
571
|
+
|
|
572
|
+
Astro nie ma drzewa komponentów, które mogłoby pomieścić providera, więc konfiguracja jest instalowana raz, jako singleton, w middleware (serwer) oraz w tagu `<script>` klienta (przeglądarka). Konfiguruje ona renderer zwracany przez `useHTMLRenderer()`. Węzły `html` zwracane przez `useIntlayer` są renderowane w obecnej postaci; nadpisuj ich znaczniki dla każdego węzła za pomocą `.use()`.
|
|
573
|
+
|
|
574
|
+
```typescript fileName="src/middleware.ts"
|
|
575
|
+
import { installIntlayerHTML } from "astro-intlayer/html";
|
|
576
|
+
import { defineMiddleware } from "astro:middleware";
|
|
577
|
+
|
|
578
|
+
// Uruchamia się raz przy starcie serwera; sam middleware Intlayer jest
|
|
579
|
+
// rejestrowany przez integrację przed tym plikiem.
|
|
580
|
+
installIntlayerHTML({
|
|
581
|
+
renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
export const onRequest = defineMiddleware((_context, next) => next());
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
> Użyj `installIntlayerHTMLDynamic(async () => …)`, aby załadować sam renderer leniwie; moduł ładujący uruchamia się tylko przy pierwszym wywołaniu.
|
|
588
|
+
|
|
589
|
+
</Tab>
|
|
476
590
|
</Tabs>
|
|
477
591
|
|
|
478
592
|
### Ręczne renderowanie i zaawansowane narzędzia
|
|
@@ -645,15 +759,69 @@ Jeśli musisz renderować surowe łańcuchy HTML lub potrzebujesz większej kont
|
|
|
645
759
|
```
|
|
646
760
|
|
|
647
761
|
</Tab>
|
|
762
|
+
<Tab label="Remix" value="remix">
|
|
763
|
+
#### Hook `useHTMLRenderer()`
|
|
764
|
+
|
|
765
|
+
Uzyskaj funkcję renderującą wstępnie skonfigurowaną przez `installIntlayerHTML()`. Zwraca ona ciąg znaków HTML.
|
|
766
|
+
|
|
767
|
+
```tsx
|
|
768
|
+
import { useHTMLRenderer } from "remix-intlayer/html";
|
|
769
|
+
|
|
770
|
+
const renderHTML = useHTMLRenderer();
|
|
771
|
+
|
|
772
|
+
return <div innerHTML={renderHTML("<p>Hello <strong>World</strong></p>")} />;
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
#### Narzędzie `renderHTML()`
|
|
776
|
+
|
|
777
|
+
Autonomiczne narzędzie, które ignoruje globalną konfigurację.
|
|
778
|
+
|
|
779
|
+
```tsx
|
|
780
|
+
import { renderHTML } from "remix-intlayer/html";
|
|
781
|
+
|
|
782
|
+
const html = renderHTML("<p>Hello</p>");
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
</Tab>
|
|
786
|
+
<Tab label="Astro" value="astro">
|
|
787
|
+
#### Hook `useHTMLRenderer()`
|
|
788
|
+
|
|
789
|
+
Uzyskaj funkcję renderującą wstępnie skonfigurowaną przez `installIntlayerHTML()`. Zwraca ona ciąg znaków HTML.
|
|
790
|
+
|
|
791
|
+
```astro
|
|
792
|
+
---
|
|
793
|
+
import { useHTMLRenderer } from "astro-intlayer/html";
|
|
794
|
+
|
|
795
|
+
const renderHTML = useHTMLRenderer();
|
|
796
|
+
---
|
|
797
|
+
|
|
798
|
+
<div set:html={renderHTML("<p>Hello <strong>World</strong></p>")} />
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
#### Narzędzie `renderHTML()`
|
|
802
|
+
|
|
803
|
+
Autonomiczne narzędzie, które ignoruje globalną konfigurację.
|
|
804
|
+
|
|
805
|
+
```astro
|
|
806
|
+
---
|
|
807
|
+
import { renderHTML } from "astro-intlayer/html";
|
|
808
|
+
|
|
809
|
+
const html = renderHTML("<p>Hello</p>");
|
|
810
|
+
---
|
|
811
|
+
|
|
812
|
+
<div set:html={html} />
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
</Tab>
|
|
648
816
|
</Tabs>
|
|
649
817
|
|
|
650
818
|
## Referencja opcji
|
|
651
819
|
|
|
652
820
|
Te opcje mogą być przekazane do `HTMLProvider`, `HTMLRenderer`, `useHTMLRenderer` i `renderHTML`.
|
|
653
821
|
|
|
654
|
-
| Opcja | Typ | Domyślnie | Opis
|
|
655
|
-
| :----------- | :-------------------- | :-------- |
|
|
656
|
-
| `components` | `Record<string, any>` | `{}` | Mapa tagów HTML lub niestandardowych nazw komponentów do odpowiadających im komponentów.
|
|
657
|
-
| `renderHTML` | `Function` | `null` | Funkcja renderująca, która całkowicie zastąpi domyślny parser HTML (
|
|
822
|
+
| Opcja | Typ | Domyślnie | Opis |
|
|
823
|
+
| :----------- | :-------------------- | :-------- | :---------------------------------------------------------------------------------------------------------- |
|
|
824
|
+
| `components` | `Record<string, any>` | `{}` | Mapa tagów HTML lub niestandardowych nazw komponentów do odpowiadających im komponentów. |
|
|
825
|
+
| `renderHTML` | `Function` | `null` | Funkcja renderująca, która całkowicie zastąpi domyślny parser HTML (providerzy Vue, Svelte, Remix i Astro). |
|
|
658
826
|
|
|
659
827
|
> Uwaga: Dla React i Preact standardowe tagi HTML są dostarczane automatycznie. Prop `components` trzeba przekazać tylko wtedy, gdy chcesz je nadpisać lub dodać niestandardowe komponenty.
|
|
@@ -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: Dowiedz się, jak deklarować i używać treści Markdown na swojej wielojęzycznej stronie internetowej za pomocą Intlayer. Postępuj zgodnie z instrukcjami w tej dokumentacji online, aby bezproblemowo zintegrować Markdown ze swoim projektem.
|
|
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
|
|
@@ -487,6 +489,111 @@ Renderowanie Markdown obsługuje **MDX** — użyj dowolnego komponentu JSX/fram
|
|
|
487
489
|
```
|
|
488
490
|
|
|
489
491
|
</Tab>
|
|
492
|
+
<Tab label="Remix" value="remix">
|
|
493
|
+
W Remix 3 węzły Markdown są renderowane na serwerze do ciągu znaków HTML. Wstrzyknij go za pomocą właściwości `innerHTML` w Remix JSX lub za pomocą `html.raw` w widoku `html-template`.
|
|
494
|
+
|
|
495
|
+
```tsx fileName="src/views/home.tsx"
|
|
496
|
+
import { useIntlayer } from "remix-intlayer";
|
|
497
|
+
|
|
498
|
+
export const HomePage = () => () => {
|
|
499
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
500
|
+
|
|
501
|
+
return <div innerHTML={myMarkdownContent.value} />;
|
|
502
|
+
};
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
```ts fileName="src/views/home.ts"
|
|
506
|
+
import { html } from "remix/html-template";
|
|
507
|
+
import { useIntlayer } from "remix-intlayer";
|
|
508
|
+
|
|
509
|
+
export const renderHomePage = () => {
|
|
510
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
511
|
+
|
|
512
|
+
return html.raw`<div>${myMarkdownContent.value}</div>`;
|
|
513
|
+
};
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
> Remix domyślnie eskapuje interpolowane wartości. `innerHTML` i `html.raw` to dwa wyjątki, które są potrzebne dla wyrenderowanego ciągu znaków Markdown.
|
|
517
|
+
|
|
518
|
+
Możesz także zapewnić lokalne nadpisania dla określonych znaczników za pomocą metody `.use()`. Nadpisania to funkcje zwracające ciąg znaków HTML:
|
|
519
|
+
|
|
520
|
+
```tsx
|
|
521
|
+
<div
|
|
522
|
+
innerHTML={myMarkdownContent.use({
|
|
523
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
524
|
+
})}
|
|
525
|
+
/>
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
`.value` to wyrenderowany ciąg HTML, podczas gdy `String()` / `.toString()` zwracają surowy kod źródłowy Markdown:
|
|
529
|
+
|
|
530
|
+
```tsx
|
|
531
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
532
|
+
String(myMarkdownContent) // "# …"
|
|
533
|
+
myMarkdownContent.toString() // "# …"
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
I możesz uzyskać dostęp do metadanych markdown w następujący sposób:
|
|
537
|
+
|
|
538
|
+
```tsx
|
|
539
|
+
myMarkdownContent.metadata
|
|
540
|
+
myMarkdownContent.metadata.title
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
</Tab>
|
|
544
|
+
<Tab label="Astro" value="astro">
|
|
545
|
+
W Astro węzły Markdown są renderowane do ciągu znaków HTML. Wstrzyknij go za pomocą dyrektywy `set:html` w szablonie lub za pomocą `innerHTML` w tagu `<script>` klienta.
|
|
546
|
+
|
|
547
|
+
```astro fileName="src/pages/index.astro"
|
|
548
|
+
---
|
|
549
|
+
import { useIntlayer } from "astro-intlayer";
|
|
550
|
+
|
|
551
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
<div set:html={myMarkdownContent.value} />
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
```astro fileName="src/components/Content.astro"
|
|
558
|
+
<div id="content"></div>
|
|
559
|
+
|
|
560
|
+
<script>
|
|
561
|
+
import { useIntlayer } from "astro-intlayer";
|
|
562
|
+
|
|
563
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
564
|
+
|
|
565
|
+
document.querySelector("#content")!.innerHTML = myMarkdownContent.value;
|
|
566
|
+
</script>
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
> Astro domyślnie eskapuje `{wyrażenia}`. `set:html` jest wyjątkiem, którego potrzebuje wyrenderowany ciąg znaków Markdown.
|
|
570
|
+
|
|
571
|
+
Możesz także zapewnić lokalne nadpisania dla określonych znaczników za pomocą metody `.use()`. Nadpisania to funkcje zwracające ciąg znaków HTML:
|
|
572
|
+
|
|
573
|
+
```astro
|
|
574
|
+
<div
|
|
575
|
+
set:html={myMarkdownContent.use({
|
|
576
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
577
|
+
})}
|
|
578
|
+
/>
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
`.value` to wyrenderowany ciąg HTML, podczas gdy `String()` / `.toString()` zwracają surowy kod źródłowy Markdown:
|
|
582
|
+
|
|
583
|
+
```astro
|
|
584
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
585
|
+
String(myMarkdownContent) // "# …"
|
|
586
|
+
myMarkdownContent.toString() // "# …"
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
I możesz uzyskać dostęp do metadanych markdown w następujący sposób:
|
|
590
|
+
|
|
591
|
+
```astro
|
|
592
|
+
myMarkdownContent.metadata
|
|
593
|
+
myMarkdownContent.metadata.title
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
</Tab>
|
|
490
597
|
</Tabs>
|
|
491
598
|
|
|
492
599
|
### 2. Narzędzia pomocnicze (tylko ciągi znaków Markdown)
|
|
@@ -698,6 +805,60 @@ Te narzędzia renderują **tylko surowe ciągi znaków Markdown** i są niezale
|
|
|
698
805
|
```
|
|
699
806
|
|
|
700
807
|
</Tab>
|
|
808
|
+
<Tab label="Remix" value="remix">
|
|
809
|
+
#### Hook `useMarkdownRenderer()`
|
|
810
|
+
|
|
811
|
+
Uzyskaj funkcję renderującą wstępnie skonfigurowaną przez `installIntlayerMarkdown()`. Zwraca ona ciąg znaków HTML.
|
|
812
|
+
|
|
813
|
+
```tsx
|
|
814
|
+
import { useMarkdownRenderer } from "remix-intlayer/markdown";
|
|
815
|
+
|
|
816
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
817
|
+
|
|
818
|
+
return <div innerHTML={renderMarkdown("# My Title")} />;
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
#### Narzędzie `renderMarkdown()`
|
|
822
|
+
|
|
823
|
+
Autonomiczne narzędzie, które ignoruje globalną konfigurację.
|
|
824
|
+
|
|
825
|
+
```tsx
|
|
826
|
+
import { renderMarkdown } from "remix-intlayer/markdown";
|
|
827
|
+
|
|
828
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
</Tab>
|
|
832
|
+
<Tab label="Astro" value="astro">
|
|
833
|
+
#### Hook `useMarkdownRenderer()`
|
|
834
|
+
|
|
835
|
+
Uzyskaj funkcję renderującą wstępnie skonfigurowaną przez `installIntlayerMarkdown()`. Zwraca ona ciąg znaków HTML.
|
|
836
|
+
|
|
837
|
+
```astro
|
|
838
|
+
---
|
|
839
|
+
import { useMarkdownRenderer } from "astro-intlayer/markdown";
|
|
840
|
+
|
|
841
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
842
|
+
---
|
|
843
|
+
|
|
844
|
+
<div set:html={renderMarkdown("# My Title")} />
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
#### Narzędzie `renderMarkdown()`
|
|
848
|
+
|
|
849
|
+
Autonomiczne narzędzie, które ignoruje globalną konfigurację.
|
|
850
|
+
|
|
851
|
+
```astro
|
|
852
|
+
---
|
|
853
|
+
import { renderMarkdown } from "astro-intlayer/markdown";
|
|
854
|
+
|
|
855
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
856
|
+
---
|
|
857
|
+
|
|
858
|
+
<div set:html={html} />
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
</Tab>
|
|
701
862
|
</Tabs>
|
|
702
863
|
|
|
703
864
|
## Konfiguracja globalna z `MarkdownProvider`
|
|
@@ -997,6 +1158,73 @@ Te narzędzia renderują **tylko surowe ciągi znaków Markdown** i są niezale
|
|
|
997
1158
|
> Dynamiczne importowanie twojego renderera Markdown to świetny sposób na zmniejszenie rozmiaru pakietu twojej aplikacji.
|
|
998
1159
|
|
|
999
1160
|
</Tab>
|
|
1161
|
+
<Tab label="Remix" value="remix">
|
|
1162
|
+
|
|
1163
|
+
Remix nie ma drzewa komponentów, które mogłoby pomieścić providera, więc konfiguracja jest instalowana raz, jako singleton, przy starcie serwera. Konfiguruje ona renderer zwracany przez `useMarkdownRenderer()`. Węzły `md` zwracane przez `useIntlayer` są renderowane za pomocą domyślnego kompilatora; nadpisuj ich znaczniki dla każdego węzła za pomocą `.use()`.
|
|
1164
|
+
|
|
1165
|
+
```typescript fileName="src/router.ts"
|
|
1166
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1167
|
+
|
|
1168
|
+
installIntlayerMarkdown({
|
|
1169
|
+
forceBlock: true,
|
|
1170
|
+
components: {
|
|
1171
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1172
|
+
},
|
|
1173
|
+
});
|
|
1174
|
+
```
|
|
1175
|
+
|
|
1176
|
+
Możesz także użyć własnego renderera markdown:
|
|
1177
|
+
|
|
1178
|
+
```typescript fileName="src/router.ts"
|
|
1179
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1180
|
+
|
|
1181
|
+
installIntlayerMarkdown({
|
|
1182
|
+
renderMarkdown: async (md) => {
|
|
1183
|
+
const { marked } = await import("marked");
|
|
1184
|
+
return marked(md) as string;
|
|
1185
|
+
},
|
|
1186
|
+
});
|
|
1187
|
+
```
|
|
1188
|
+
|
|
1189
|
+
> Użyj `installIntlayerMarkdownDynamic(async () => …)`, aby załadować sam renderer leniwie; moduł ładujący uruchamia się tylko przy pierwszym wywołaniu.
|
|
1190
|
+
|
|
1191
|
+
</Tab>
|
|
1192
|
+
<Tab label="Astro" value="astro">
|
|
1193
|
+
|
|
1194
|
+
Astro nie ma drzewa komponentów, które mogłoby pomieścić providera, więc konfiguracja jest instalowana raz, jako singleton, w middleware (serwer) oraz w tagu `<script>` klienta (przeglądarka). Konfiguruje ona renderer zwracany przez `useMarkdownRenderer()`. Węzły `md` zwracane przez `useIntlayer` są renderowane za pomocą domyślnego kompilatora; nadpisuj ich znaczniki dla każdego węzła za pomocą `.use()`.
|
|
1195
|
+
|
|
1196
|
+
```typescript fileName="src/middleware.ts"
|
|
1197
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1198
|
+
import { defineMiddleware } from "astro:middleware";
|
|
1199
|
+
|
|
1200
|
+
// Uruchamia się raz przy starcie serwera; sam middleware Intlayer jest
|
|
1201
|
+
// rejestrowany przez integrację przed tym plikiem.
|
|
1202
|
+
installIntlayerMarkdown({
|
|
1203
|
+
forceBlock: true,
|
|
1204
|
+
components: {
|
|
1205
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1206
|
+
},
|
|
1207
|
+
});
|
|
1208
|
+
|
|
1209
|
+
export const onRequest = defineMiddleware((_context, next) => next());
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
Możesz także użyć własnego renderera markdown:
|
|
1213
|
+
|
|
1214
|
+
```typescript fileName="src/middleware.ts"
|
|
1215
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1216
|
+
|
|
1217
|
+
installIntlayerMarkdown({
|
|
1218
|
+
renderMarkdown: async (md) => {
|
|
1219
|
+
const { marked } = await import("marked");
|
|
1220
|
+
return marked(md) as string;
|
|
1221
|
+
},
|
|
1222
|
+
});
|
|
1223
|
+
```
|
|
1224
|
+
|
|
1225
|
+
> Użyj `installIntlayerMarkdownDynamic(async () => …)`, aby załadować sam renderer leniwie; moduł ładujący uruchamia się tylko przy pierwszym wywołaniu.
|
|
1226
|
+
|
|
1227
|
+
</Tab>
|
|
1000
1228
|
</Tabs>
|
|
1001
1229
|
|
|
1002
1230
|
## Suspense
|
|
@@ -1325,6 +1553,40 @@ Możesz użyć funkcji `parseMarkdown` z pakietu Intlayer swojego frameworka po
|
|
|
1325
1553
|
```
|
|
1326
1554
|
|
|
1327
1555
|
</Tab>
|
|
1556
|
+
<Tab label="Remix" value="remix">
|
|
1557
|
+
|
|
1558
|
+
Remix 3 renderuje na serwerze i strumieniuje HTML, więc żadne AST nie musi trafiać do klienta. Przetwórz raz i renderuj AST wszędzie tam, gdzie budowana jest strona:
|
|
1559
|
+
|
|
1560
|
+
```tsx fileName="src/views/article.tsx"
|
|
1561
|
+
import { parseMarkdown, renderMarkdown } from "remix-intlayer/markdown";
|
|
1562
|
+
|
|
1563
|
+
// 1. Przetwórz markdown na serializowalne AST (np. raz, podczas ładowania modułu)
|
|
1564
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1565
|
+
|
|
1566
|
+
export const ArticlePage = () => () => (
|
|
1567
|
+
// 2. Renderuj AST: renderer akceptuje surowy ciąg znaków lub przetworzone AST
|
|
1568
|
+
<article innerHTML={renderMarkdown(ast)} />
|
|
1569
|
+
);
|
|
1570
|
+
```
|
|
1571
|
+
|
|
1572
|
+
</Tab>
|
|
1573
|
+
<Tab label="Astro" value="astro">
|
|
1574
|
+
|
|
1575
|
+
Strony Astro są renderowane na serwerze, więc żadne AST nie musi trafiać do klienta. Przetwórz Markdown w frontmatter i wyrenderuj go za pomocą `set:html`:
|
|
1576
|
+
|
|
1577
|
+
```astro fileName="src/pages/article.astro"
|
|
1578
|
+
---
|
|
1579
|
+
import { parseMarkdown, renderMarkdown } from "astro-intlayer/markdown";
|
|
1580
|
+
|
|
1581
|
+
// 1. Przetwórz markdown na serializowalne AST
|
|
1582
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1583
|
+
---
|
|
1584
|
+
|
|
1585
|
+
<!-- 2. Renderuj AST: renderer akceptuje surowy ciąg znaków lub przetworzone AST -->
|
|
1586
|
+
<article set:html={renderMarkdown(ast)} />
|
|
1587
|
+
```
|
|
1588
|
+
|
|
1589
|
+
</Tab>
|
|
1328
1590
|
</Tabs>
|
|
1329
1591
|
|
|
1330
1592
|
Ten wzorzec zapewnia, że logika parsowania Markdown jest wykonywana całkowicie na serwerze, co znacznie skraca czas wykonywania po stronie klienta i poprawia szybkość początkowej hydratacji.
|
|
@@ -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 - Kompletny przewodnik po tłumaczeniu swojej aplikacji"
|
|
5
5
|
description: "Koniec z i18next. Przewodnik 2026 do budowania wielojęzycznej (i18n) aplikacji Analog. Tłumacz z agentami AI i optymalizuj rozmiar bundle, SEO i wydajność."
|
|
6
6
|
keywords:
|
|
@@ -157,6 +157,28 @@ bun add intlayer angular-intlayer vite-intlayer
|
|
|
157
157
|
</Step>
|
|
158
158
|
<Step number={2} title="Konfiguracja projektu">
|
|
159
159
|
|
|
160
|
+
### Architektura
|
|
161
|
+
|
|
162
|
+
W tej architekturze `angular-intlayer` zapewnia `provideIntlayer()`, zarejestrowane w `src/app/app.config.ts`, dzięki czemu każdy komponent i strona oparta na plikach może odczytywać swoją zawartość za pomocą sygnału `useIntlayer`. Analog bazuje na Vite, więc wtyczka `intlayer()` z `vite-intlayer` jest dodawana obok `analog()` w `vite.config.ts`, aby śledzić i przebudowywać deklaracje zawartości oraz uruchamiać proxy locale. Deklaracje zawartości są umieszczane obok komponentów i stron w `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
|
+
### Konfiguracja
|
|
181
|
+
|
|
160
182
|
Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
|
|
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 - Kompletny przewodnik po tłumaczeniu swojej aplikacji"
|
|
5
5
|
description: "Koniec z i18next. Przewodnik 2026 do budowania wielojęzycznej (i18n) aplikacji Angular 19. Tłumacz z agentami AI i optymalizuj rozmiar bundle, SEO i wydajność."
|
|
6
6
|
keywords:
|
|
@@ -164,6 +164,29 @@ bun add @angular-builders/custom-webpack --dev
|
|
|
164
164
|
</Step>
|
|
165
165
|
<Step number={2} title="Konfiguracja projektu">
|
|
166
166
|
|
|
167
|
+
### Architektura
|
|
168
|
+
|
|
169
|
+
W tej architekturze `angular-intlayer` zapewnia `provideIntlayer()`, zarejestrowane w `src/app/app.config.ts`, dzięki czemu każdy komponent może odczytywać swoją zawartość za pomocą sygnału `useIntlayer`. Angular CLI jest przełączany na niestandardowy builder Webpack, a `webpack.config.ts` łączy wtyczkę Intlayer w procesie budowania, aby śledzić i przebudowywać deklaracje zawartości. Deklaracje zawartości są umieszczane obok komponentów w `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
|
+
### Konfiguracja
|
|
189
|
+
|
|
167
190
|
Utwórz plik konfiguracyjny, aby ustawić języki swojej aplikacji:
|
|
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 - Kompletny przewodnik po tłumaczeniu swojej aplikacji"
|
|
5
5
|
description: "Koniec z i18next. Przewodnik 2026 do budowania wielojęzycznej (i18n) aplikacji Angular 22. Tłumacz z agentami AI i optymalizuj rozmiar bundle, SEO i wydajność."
|
|
6
6
|
keywords:
|
|
@@ -166,6 +166,29 @@ bun add @angular-builders/custom-esbuild --dev
|
|
|
166
166
|
</Step>
|
|
167
167
|
<Step number={2} title="Konfiguracja twojego projektu">
|
|
168
168
|
|
|
169
|
+
### Architektura
|
|
170
|
+
|
|
171
|
+
W tej architekturze `angular-intlayer` zapewnia `provideIntlayer()`, zarejestrowane w `src/app/app.config.ts`, dzięki czemu każdy komponent może odczytywać swoją zawartość za pomocą sygnału `useIntlayer`. Angular CLI jest przełączany na niestandardowy builder esbuild, a `esbuild.plugins.ts` rejestruje wtyczkę Intlayer w procesie budowania, aby śledzić i przebudowywać deklaracje zawartości. Deklaracje zawartości są umieszczane obok komponentów w `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
|
+
### Konfiguracja
|
|
191
|
+
|
|
169
192
|
Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
|
|
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 - Kompletny przewodnik po tłumaczeniu swojej aplikacji"
|
|
5
5
|
description: "Koniec z i18next. Przewodnik 2026 do budowania wielojęzycznej (i18n) aplikacji Astro. Tłumacz z agentami AI i optymalizuj rozmiar bundle, SEO i wydajność."
|
|
6
6
|
keywords:
|
|
@@ -160,6 +160,29 @@ bun add intlayer astro-intlayer
|
|
|
160
160
|
</Step>
|
|
161
161
|
<Step number={2} title="Skonfiguruj swój projekt">
|
|
162
162
|
|
|
163
|
+
### Architektura
|
|
164
|
+
|
|
165
|
+
W tej architekturze integracja `intlayer()` zarejestrowana w `astro.config.ts` buduje Twoje słowniki i dodaje middleware, który rozwiązuje locale każdego żądania i udostępnia je w `Astro.locals.intlayer`. Strony znajdują się w segmencie rest `src/pages/[...locale]/`, dzięki czemu domyślne locale jest serwowane bez prefiksu, a każde inne locale otrzymuje własny dedykowany adres URL. Pliki `.astro` odczytują zawartość za pomocą hooków `useIntlayer` / `useLocale` z `astro-intlayer`, a deklaracje zawartości są umieszczane obok Twoich komponentów w `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
|
+
### Konfiguracja
|
|
185
|
+
|
|
163
186
|
Utwórz plik konfiguracyjny, aby zdefiniować języki swojej aplikacji:
|
|
164
187
|
|
|
165
188
|
```typescript fileName="intlayer.config.ts"
|