@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: HTMLコンテンツ
|
|
5
5
|
description: IntlayerでHTMLコンテンツを宣言し、カスタムコンポーネントとともに使用する方法を学びます。このドキュメントに従い、国際化されたプロジェクト内で動的にコンポーネントを置換可能なリッチなHTMLライクコンテンツを埋め込む方法を解説します。
|
|
6
6
|
keywords:
|
|
@@ -13,6 +13,8 @@ keywords:
|
|
|
13
13
|
- React
|
|
14
14
|
- Vue
|
|
15
15
|
- Svelte
|
|
16
|
+
- Remix
|
|
17
|
+
- Astro
|
|
16
18
|
slugs:
|
|
17
19
|
- doc
|
|
18
20
|
- concept
|
|
@@ -235,6 +237,83 @@ HTML ノードで `.use()` メソッドを使用する場合、提供された
|
|
|
235
237
|
```
|
|
236
238
|
|
|
237
239
|
</Tab>
|
|
240
|
+
<Tab label="Remix" value="remix">
|
|
241
|
+
Remix 3 では、HTML ノードは HTML 文字列に解決されます。Remix JSX の `innerHTML` プロパティ、または `html-template` ビューの `html.raw` を使用して挿入します。
|
|
242
|
+
|
|
243
|
+
```tsx fileName="src/views/home.tsx"
|
|
244
|
+
import { useIntlayer } from "remix-intlayer";
|
|
245
|
+
|
|
246
|
+
export const HomePage = () => () => {
|
|
247
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
248
|
+
|
|
249
|
+
return <div innerHTML={myHtmlContent.value} />;
|
|
250
|
+
};
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```ts fileName="src/views/home.ts"
|
|
254
|
+
import { html } from "remix/html-template";
|
|
255
|
+
import { useIntlayer } from "remix-intlayer";
|
|
256
|
+
|
|
257
|
+
export const renderHomePage = () => {
|
|
258
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
259
|
+
|
|
260
|
+
return html.raw`<div>${myHtmlContent.value}</div>`;
|
|
261
|
+
};
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
> Remix はデフォルトで補間された値をエスケープします。`innerHTML` と `html.raw` はエスケープを回避する2つの方法であり、HTML 文字列に必要なものです。
|
|
265
|
+
|
|
266
|
+
タグをオーバーライドしたりカスタムコンポーネントをマッピングするには、`.use()` メソッドを使用します。オーバーライドは HTML 文字列を返す関数です:
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
<div
|
|
270
|
+
innerHTML={myHtmlContent.use({
|
|
271
|
+
p: ({ children }) => `<p class="prose">${children}</p>`,
|
|
272
|
+
CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
|
|
273
|
+
})}
|
|
274
|
+
/>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
</Tab>
|
|
278
|
+
<Tab label="Astro" value="astro">
|
|
279
|
+
Astro では、HTML ノードは HTML 文字列に解決されます。テンプレート内の `set:html` ディレクティブ、またはクライアントの `<script>` 内の `innerHTML` を使用して挿入します。
|
|
280
|
+
|
|
281
|
+
```astro fileName="src/pages/index.astro"
|
|
282
|
+
---
|
|
283
|
+
import { useIntlayer } from "astro-intlayer";
|
|
284
|
+
|
|
285
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
<div set:html={myHtmlContent.value} />
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
```astro fileName="src/components/Content.astro"
|
|
292
|
+
<div id="content"></div>
|
|
293
|
+
|
|
294
|
+
<script>
|
|
295
|
+
import { useIntlayer } from "astro-intlayer";
|
|
296
|
+
|
|
297
|
+
const { myHtmlContent } = useIntlayer("app");
|
|
298
|
+
|
|
299
|
+
document.querySelector("#content")!.innerHTML = myHtmlContent.value;
|
|
300
|
+
</script>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
> Astro はデフォルトで `{式}` をエスケープします。`set:html` はエスケープを回避する方法であり、HTML 文字列に必要なものです。
|
|
304
|
+
|
|
305
|
+
タグをオーバーライドしたりカスタムコンポーネントをマッピングするには、`.use()` メソッドを使用します。オーバーライドは HTML 文字列を返す関数です:
|
|
306
|
+
|
|
307
|
+
```astro
|
|
308
|
+
<div
|
|
309
|
+
set:html={myHtmlContent.use({
|
|
310
|
+
p: ({ children }) => `<p class="prose">${children}</p>`,
|
|
311
|
+
CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
|
|
312
|
+
})}
|
|
313
|
+
/>
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
</Tab>
|
|
238
317
|
</Tabs>
|
|
239
318
|
|
|
240
319
|
## `HTMLProvider`によるグローバル設定
|
|
@@ -470,6 +549,41 @@ HTML ノードで `.use()` メソッドを使用する場合、提供された
|
|
|
470
549
|
> HTML レンダラーを動的にインポートすることは、アプリケーションのバンドルサイズを削減するための良い方法です。
|
|
471
550
|
|
|
472
551
|
</Tab>
|
|
552
|
+
<Tab label="Remix" value="remix">
|
|
553
|
+
|
|
554
|
+
Remix にはプロバイダーを保持するコンポーネントツリーがないため、設定はサーバー起動時にシングルトンとして一度だけインストールされます。`useHTMLRenderer()` によって返されるレンダラーを設定します。`useIntlayer` によって返される `html` ノードはそのままレンダリングされます。ノードごとに `.use()` でタグをオーバーライドします。
|
|
555
|
+
|
|
556
|
+
```typescript fileName="src/router.ts"
|
|
557
|
+
import { installIntlayerHTML } from "remix-intlayer/html";
|
|
558
|
+
|
|
559
|
+
installIntlayerHTML({
|
|
560
|
+
renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
|
|
561
|
+
});
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
> レンダラー自体を遅延読み込みするには `installIntlayerHTMLDynamic(async () => …)` を使用します。ローダーは最初の呼び出し時にのみ実行されます。
|
|
565
|
+
|
|
566
|
+
</Tab>
|
|
567
|
+
<Tab label="Astro" value="astro">
|
|
568
|
+
|
|
569
|
+
Astro にはプロバイダーを保持するコンポーネントツリーがないため、設定はミドルウェア(サーバー)およびクライアント `<script>`(ブラウザ)でシングルトンとして一度だけインストールされます。`useHTMLRenderer()` によって返されるレンダラーを設定します。`useIntlayer` によって返される `html` ノードはそのままレンダリングされます。ノードごとに `.use()` でタグをオーバーライドします。
|
|
570
|
+
|
|
571
|
+
```typescript fileName="src/middleware.ts"
|
|
572
|
+
import { installIntlayerHTML } from "astro-intlayer/html";
|
|
573
|
+
import { defineMiddleware } from "astro:middleware";
|
|
574
|
+
|
|
575
|
+
// サーバー起動時に1回実行されます。Intlayerミドルウェア自体は、
|
|
576
|
+
// このファイルより前にインテグレーションによって登録されます。
|
|
577
|
+
installIntlayerHTML({
|
|
578
|
+
renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
export const onRequest = defineMiddleware((_context, next) => next());
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
> レンダラー自体を遅延読み込みするには `installIntlayerHTMLDynamic(async () => …)` を使用します。ローダーは最初の呼び出し時にのみ実行されます。
|
|
585
|
+
|
|
586
|
+
</Tab>
|
|
473
587
|
</Tabs>
|
|
474
588
|
|
|
475
589
|
### 手動レンダリングと高度なツール
|
|
@@ -643,15 +757,69 @@ HTML ノードで `.use()` メソッドを使用する場合、提供された
|
|
|
643
757
|
```
|
|
644
758
|
|
|
645
759
|
</Tab>
|
|
760
|
+
<Tab label="Remix" value="remix">
|
|
761
|
+
#### `useHTMLRenderer()` フック
|
|
762
|
+
|
|
763
|
+
`installIntlayerHTML()` によって事前設定されたレンダラー関数を取得します。HTML 文字列を返します。
|
|
764
|
+
|
|
765
|
+
```tsx
|
|
766
|
+
import { useHTMLRenderer } from "remix-intlayer/html";
|
|
767
|
+
|
|
768
|
+
const renderHTML = useHTMLRenderer();
|
|
769
|
+
|
|
770
|
+
return <div innerHTML={renderHTML("<p>Hello <strong>World</strong></p>")} />;
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
#### `renderHTML()` ユーティリティ
|
|
774
|
+
|
|
775
|
+
グローバル設定を無視するスタンドアロンユーティリティ。
|
|
776
|
+
|
|
777
|
+
```tsx
|
|
778
|
+
import { renderHTML } from "remix-intlayer/html";
|
|
779
|
+
|
|
780
|
+
const html = renderHTML("<p>Hello</p>");
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
</Tab>
|
|
784
|
+
<Tab label="Astro" value="astro">
|
|
785
|
+
#### `useHTMLRenderer()` フック
|
|
786
|
+
|
|
787
|
+
`installIntlayerHTML()` によって事前設定されたレンダラー関数を取得します。HTML 文字列を返します。
|
|
788
|
+
|
|
789
|
+
```astro
|
|
790
|
+
---
|
|
791
|
+
import { useHTMLRenderer } from "astro-intlayer/html";
|
|
792
|
+
|
|
793
|
+
const renderHTML = useHTMLRenderer();
|
|
794
|
+
---
|
|
795
|
+
|
|
796
|
+
<div set:html={renderHTML("<p>Hello <strong>World</strong></p>")} />
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
#### `renderHTML()` ユーティリティ
|
|
800
|
+
|
|
801
|
+
グローバル設定を無視するスタンドアロンユーティリティ。
|
|
802
|
+
|
|
803
|
+
```astro
|
|
804
|
+
---
|
|
805
|
+
import { renderHTML } from "astro-intlayer/html";
|
|
806
|
+
|
|
807
|
+
const html = renderHTML("<p>Hello</p>");
|
|
808
|
+
---
|
|
809
|
+
|
|
810
|
+
<div set:html={html} />
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
</Tab>
|
|
646
814
|
</Tabs>
|
|
647
815
|
|
|
648
816
|
## オプションリファレンス
|
|
649
817
|
|
|
650
818
|
これらのオプションは `HTMLProvider`、`HTMLRenderer`、`useHTMLRenderer`、および `renderHTML` に渡すことができます。
|
|
651
819
|
|
|
652
|
-
| オプション | 型 | デフォルト | 説明
|
|
653
|
-
| :----------- | :-------------------- | :--------- |
|
|
654
|
-
| `components` | `Record<string, any>` | `{}` | HTMLタグまたはカスタムコンポーネント名をコンポーネントにマッピングするオブジェクト。
|
|
655
|
-
| `renderHTML` | `Function` | `null` | デフォルトのHTML
|
|
820
|
+
| オプション | 型 | デフォルト | 説明 |
|
|
821
|
+
| :----------- | :-------------------- | :--------- | :------------------------------------------------------------------------------------------------------------ |
|
|
822
|
+
| `components` | `Record<string, any>` | `{}` | HTMLタグまたはカスタムコンポーネント名をコンポーネントにマッピングするオブジェクト。 |
|
|
823
|
+
| `renderHTML` | `Function` | `null` | デフォルトのHTMLパーサーを完全に置き換えるカスタムレンダリング関数(Vue、Svelte、Remix、Astroプロバイダー)。 |
|
|
656
824
|
|
|
657
825
|
> 注: ReactおよびPreactでは、標準のHTMLタグが自動的に提供されます。これらを上書きしたりカスタムコンポーネントを追加したい場合にのみ、`components`プロップを渡してください。
|
|
@@ -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: Intlayerを使用して多言語Webサイトでマークダウンコンテンツを宣言および使用する方法を学びます。このオンラインドキュメントの手順に従って、マークダウンをプロジェクトにシームレスに統合します。
|
|
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
|
|
@@ -489,6 +491,111 @@ Markdown レンダリングは **MDX** をサポートしています — Markdo
|
|
|
489
491
|
```
|
|
490
492
|
|
|
491
493
|
</Tab>
|
|
494
|
+
<Tab label="Remix" value="remix">
|
|
495
|
+
Remix 3 では、Markdown ノードはサーバー上で HTML 文字列にレンダリングされます。Remix JSX の `innerHTML` プロパティ、または `html-template` ビューの `html.raw` を使用して挿入します。
|
|
496
|
+
|
|
497
|
+
```tsx fileName="src/views/home.tsx"
|
|
498
|
+
import { useIntlayer } from "remix-intlayer";
|
|
499
|
+
|
|
500
|
+
export const HomePage = () => () => {
|
|
501
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
502
|
+
|
|
503
|
+
return <div innerHTML={myMarkdownContent.value} />;
|
|
504
|
+
};
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
```ts fileName="src/views/home.ts"
|
|
508
|
+
import { html } from "remix/html-template";
|
|
509
|
+
import { useIntlayer } from "remix-intlayer";
|
|
510
|
+
|
|
511
|
+
export const renderHomePage = () => {
|
|
512
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
513
|
+
|
|
514
|
+
return html.raw`<div>${myMarkdownContent.value}</div>`;
|
|
515
|
+
};
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
> Remix はデフォルトで補間された値をエスケープします。`innerHTML` と `html.raw` はエスケープを回避する2つの方法であり、レンダリングされた Markdown 文字列に必要なものです。
|
|
519
|
+
|
|
520
|
+
`.use()` メソッドを使用して、特定のタグのローカルオーバーライドを指定することもできます。オーバーライドは HTML 文字列を返す関数です:
|
|
521
|
+
|
|
522
|
+
```tsx
|
|
523
|
+
<div
|
|
524
|
+
innerHTML={myMarkdownContent.use({
|
|
525
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
526
|
+
})}
|
|
527
|
+
/>
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
`.value` はレンダリングされたHTML文字列であり、`String()` / `.toString()` は生のMarkdownソースを返します:
|
|
531
|
+
|
|
532
|
+
```tsx
|
|
533
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
534
|
+
String(myMarkdownContent) // "# …"
|
|
535
|
+
myMarkdownContent.toString() // "# …"
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
また、次のようにMarkdownメタデータにアクセスできます:
|
|
539
|
+
|
|
540
|
+
```tsx
|
|
541
|
+
myMarkdownContent.metadata
|
|
542
|
+
myMarkdownContent.metadata.title
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
</Tab>
|
|
546
|
+
<Tab label="Astro" value="astro">
|
|
547
|
+
Astro では、Markdown ノードは HTML 文字列にレンダリングされます。テンプレート内の `set:html` ディレクティブ、またはクライアントの `<script>` 内の `innerHTML` を使用して挿入します。
|
|
548
|
+
|
|
549
|
+
```astro fileName="src/pages/index.astro"
|
|
550
|
+
---
|
|
551
|
+
import { useIntlayer } from "astro-intlayer";
|
|
552
|
+
|
|
553
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
<div set:html={myMarkdownContent.value} />
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
```astro fileName="src/components/Content.astro"
|
|
560
|
+
<div id="content"></div>
|
|
561
|
+
|
|
562
|
+
<script>
|
|
563
|
+
import { useIntlayer } from "astro-intlayer";
|
|
564
|
+
|
|
565
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
566
|
+
|
|
567
|
+
document.querySelector("#content")!.innerHTML = myMarkdownContent.value;
|
|
568
|
+
</script>
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
> Astro はデフォルトで `{式}` をエスケープします。`set:html` はエスケープを回避する方法であり、レンダリングされた Markdown 文字列に必要なものです。
|
|
572
|
+
|
|
573
|
+
`.use()` メソッドを使用して、特定のタグのローカルオーバーライドを指定することもできます。オーバーライドは HTML 文字列を返す関数です:
|
|
574
|
+
|
|
575
|
+
```astro
|
|
576
|
+
<div
|
|
577
|
+
set:html={myMarkdownContent.use({
|
|
578
|
+
h1: ({ children }) => `<h1 class="text-3xl font-bold">${children}</h1>`,
|
|
579
|
+
})}
|
|
580
|
+
/>
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
`.value` はレンダリングされたHTML文字列であり、`String()` / `.toString()` は生のMarkdownソースを返します:
|
|
584
|
+
|
|
585
|
+
```astro
|
|
586
|
+
myMarkdownContent.value // "<h1>…</h1>"
|
|
587
|
+
String(myMarkdownContent) // "# …"
|
|
588
|
+
myMarkdownContent.toString() // "# …"
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
また、次のようにMarkdownメタデータにアクセスできます:
|
|
592
|
+
|
|
593
|
+
```astro
|
|
594
|
+
myMarkdownContent.metadata
|
|
595
|
+
myMarkdownContent.metadata.title
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
</Tab>
|
|
492
599
|
</Tabs>
|
|
493
600
|
|
|
494
601
|
### 2. ヘルパーユーティリティ(Markdown文字列のみ)
|
|
@@ -700,6 +807,60 @@ Markdown レンダリングは **MDX** をサポートしています — Markdo
|
|
|
700
807
|
```
|
|
701
808
|
|
|
702
809
|
</Tab>
|
|
810
|
+
<Tab label="Remix" value="remix">
|
|
811
|
+
#### `useMarkdownRenderer()` フック
|
|
812
|
+
|
|
813
|
+
`installIntlayerMarkdown()` によって事前設定されたレンダラー関数を取得します。HTML 文字列を返します。
|
|
814
|
+
|
|
815
|
+
```tsx
|
|
816
|
+
import { useMarkdownRenderer } from "remix-intlayer/markdown";
|
|
817
|
+
|
|
818
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
819
|
+
|
|
820
|
+
return <div innerHTML={renderMarkdown("# My Title")} />;
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
#### `renderMarkdown()` ユーティリティ
|
|
824
|
+
|
|
825
|
+
グローバル設定を無視するスタンドアロンユーティリティ。
|
|
826
|
+
|
|
827
|
+
```tsx
|
|
828
|
+
import { renderMarkdown } from "remix-intlayer/markdown";
|
|
829
|
+
|
|
830
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
</Tab>
|
|
834
|
+
<Tab label="Astro" value="astro">
|
|
835
|
+
#### `useMarkdownRenderer()` フック
|
|
836
|
+
|
|
837
|
+
`installIntlayerMarkdown()` によって事前設定されたレンダラー関数を取得します。HTML 文字列を返します。
|
|
838
|
+
|
|
839
|
+
```astro
|
|
840
|
+
---
|
|
841
|
+
import { useMarkdownRenderer } from "astro-intlayer/markdown";
|
|
842
|
+
|
|
843
|
+
const renderMarkdown = useMarkdownRenderer({ forceBlock: true });
|
|
844
|
+
---
|
|
845
|
+
|
|
846
|
+
<div set:html={renderMarkdown("# My Title")} />
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
#### `renderMarkdown()` ユーティリティ
|
|
850
|
+
|
|
851
|
+
グローバル設定を無視するスタンドアロンユーティリティ。
|
|
852
|
+
|
|
853
|
+
```astro
|
|
854
|
+
---
|
|
855
|
+
import { renderMarkdown } from "astro-intlayer/markdown";
|
|
856
|
+
|
|
857
|
+
const html = renderMarkdown("# My Title", { forceBlock: true });
|
|
858
|
+
---
|
|
859
|
+
|
|
860
|
+
<div set:html={html} />
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
</Tab>
|
|
703
864
|
</Tabs>
|
|
704
865
|
|
|
705
866
|
## `MarkdownProvider` を使用したグローバル設定
|
|
@@ -999,6 +1160,73 @@ Markdown レンダリングは **MDX** をサポートしています — Markdo
|
|
|
999
1160
|
> Markdown レンダラーを動的にインポートすることは、アプリケーションのバンドルサイズを削減するためのよい方法です。
|
|
1000
1161
|
|
|
1001
1162
|
</Tab>
|
|
1163
|
+
<Tab label="Remix" value="remix">
|
|
1164
|
+
|
|
1165
|
+
Remix にはプロバイダーを保持するコンポーネントツリーがないため、設定はサーバー起動時にシングルトンとして一度だけインストールされます。`useMarkdownRenderer()` によって返されるレンダラーを設定します。`useIntlayer` によって返される `md` ノードはデフォルトのコンパイラでレンダリングされます。ノードごとに `.use()` でタグをオーバーライドします。
|
|
1166
|
+
|
|
1167
|
+
```typescript fileName="src/router.ts"
|
|
1168
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1169
|
+
|
|
1170
|
+
installIntlayerMarkdown({
|
|
1171
|
+
forceBlock: true,
|
|
1172
|
+
components: {
|
|
1173
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1174
|
+
},
|
|
1175
|
+
});
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
独自のMarkdownレンダラーを使用することもできます:
|
|
1179
|
+
|
|
1180
|
+
```typescript fileName="src/router.ts"
|
|
1181
|
+
import { installIntlayerMarkdown } from "remix-intlayer/markdown";
|
|
1182
|
+
|
|
1183
|
+
installIntlayerMarkdown({
|
|
1184
|
+
renderMarkdown: async (md) => {
|
|
1185
|
+
const { marked } = await import("marked");
|
|
1186
|
+
return marked(md) as string;
|
|
1187
|
+
},
|
|
1188
|
+
});
|
|
1189
|
+
```
|
|
1190
|
+
|
|
1191
|
+
> レンダラー自体を遅延読み込みするには `installIntlayerMarkdownDynamic(async () => …)` を使用します。ローダーは最初の呼び出し時にのみ実行されます。
|
|
1192
|
+
|
|
1193
|
+
</Tab>
|
|
1194
|
+
<Tab label="Astro" value="astro">
|
|
1195
|
+
|
|
1196
|
+
Astro にはプロバイダーを保持するコンポーネントツリーがないため、設定はミドルウェア(サーバー)およびクライアント `<script>`(ブラウザ)でシングルトンとして一度だけインストールされます。`useMarkdownRenderer()` によって返されるレンダラーを設定します。`useIntlayer` によって返される `md` ノードはデフォルトのコンパイラでレンダリングされます。ノードごとに `.use()` でタグをオーバーライドします。
|
|
1197
|
+
|
|
1198
|
+
```typescript fileName="src/middleware.ts"
|
|
1199
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1200
|
+
import { defineMiddleware } from "astro:middleware";
|
|
1201
|
+
|
|
1202
|
+
// サーバー起動時に1回実行されます。Intlayerミドルウェア自体は、
|
|
1203
|
+
// このファイルより前にインテグレーションによって登録されます。
|
|
1204
|
+
installIntlayerMarkdown({
|
|
1205
|
+
forceBlock: true,
|
|
1206
|
+
components: {
|
|
1207
|
+
h1: ({ children }) => `<h1 class="text-2xl font-bold">${children}</h1>`,
|
|
1208
|
+
},
|
|
1209
|
+
});
|
|
1210
|
+
|
|
1211
|
+
export const onRequest = defineMiddleware((_context, next) => next());
|
|
1212
|
+
```
|
|
1213
|
+
|
|
1214
|
+
独自のMarkdownレンダラーを使用することもできます:
|
|
1215
|
+
|
|
1216
|
+
```typescript fileName="src/middleware.ts"
|
|
1217
|
+
import { installIntlayerMarkdown } from "astro-intlayer/markdown";
|
|
1218
|
+
|
|
1219
|
+
installIntlayerMarkdown({
|
|
1220
|
+
renderMarkdown: async (md) => {
|
|
1221
|
+
const { marked } = await import("marked");
|
|
1222
|
+
return marked(md) as string;
|
|
1223
|
+
},
|
|
1224
|
+
});
|
|
1225
|
+
```
|
|
1226
|
+
|
|
1227
|
+
> レンダラー自体を遅延読み込みするには `installIntlayerMarkdownDynamic(async () => …)` を使用します。ローダーは最初の呼び出し時にのみ実行されます。
|
|
1228
|
+
|
|
1229
|
+
</Tab>
|
|
1002
1230
|
</Tabs>
|
|
1003
1231
|
|
|
1004
1232
|
## Suspense
|
|
@@ -1327,6 +1555,40 @@ remark / rehype などの他の Markdown パーサーと比較して、Intlayer
|
|
|
1327
1555
|
```
|
|
1328
1556
|
|
|
1329
1557
|
</Tab>
|
|
1558
|
+
<Tab label="Remix" value="remix">
|
|
1559
|
+
|
|
1560
|
+
Remix 3 はサーバー上でレンダリングして HTML をストリーミングするため、AST をクライアントに送信する必要はありません。一度パースし、ページが構築される場所で AST をレンダリングします:
|
|
1561
|
+
|
|
1562
|
+
```tsx fileName="src/views/article.tsx"
|
|
1563
|
+
import { parseMarkdown, renderMarkdown } from "remix-intlayer/markdown";
|
|
1564
|
+
|
|
1565
|
+
// 1. Markdownをシリアライズ可能なASTにパースする(例: モジュール読み込み時に1回)
|
|
1566
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1567
|
+
|
|
1568
|
+
export const ArticlePage = () => () => (
|
|
1569
|
+
// 2. ASTをレンダリングする: レンダラーは生の文字列またはパースされたASTを受け入れます
|
|
1570
|
+
<article innerHTML={renderMarkdown(ast)} />
|
|
1571
|
+
);
|
|
1572
|
+
```
|
|
1573
|
+
|
|
1574
|
+
</Tab>
|
|
1575
|
+
<Tab label="Astro" value="astro">
|
|
1576
|
+
|
|
1577
|
+
Astro ページはサーバー上でレンダリングされるため、AST をクライアントに送信する必要はありません。frontmatter で Markdown をパースし、`set:html` でレンダリングします:
|
|
1578
|
+
|
|
1579
|
+
```astro fileName="src/pages/article.astro"
|
|
1580
|
+
---
|
|
1581
|
+
import { parseMarkdown, renderMarkdown } from "astro-intlayer/markdown";
|
|
1582
|
+
|
|
1583
|
+
// 1. Markdownをシリアライズ可能なASTにパースする
|
|
1584
|
+
const ast = parseMarkdown("## My title \n\nLorem Ipsum");
|
|
1585
|
+
---
|
|
1586
|
+
|
|
1587
|
+
<!-- 2. ASTをレンダリングする: レンダラーは生の文字列またはパースされたASTを受け入れます -->
|
|
1588
|
+
<article set:html={renderMarkdown(ast)} />
|
|
1589
|
+
```
|
|
1590
|
+
|
|
1591
|
+
</Tab>
|
|
1330
1592
|
</Tabs>
|
|
1331
1593
|
|
|
1332
1594
|
このパターンにより、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アプリを構築するためのガイド。AIエージェントで翻訳し、バンドルサイズ、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 上に構築されているため、`vite-intlayer` の `intlayer()` プラグインが `vite.config.ts` 内で `analog()` の隣に追加され、コンテンツ宣言の監視と再構築、およびロケールプロキシの実行を行います。コンテンツ宣言は `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アプリを構築するためのガイド。AIエージェントで翻訳し、バンドルサイズ、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 21アプリを構築するためのガイド。AIエージェントで翻訳し、バンドルサイズ、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アプリを構築するためのガイド。AIエージェントで翻訳し、バンドルサイズ、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
|
+
このアーキテクチャでは、`astro.config.ts` に登録された `intlayer()` 統合が辞書をビルドし、各リクエストのロケールを解決して `Astro.locals.intlayer` に公開するミドルウェアを追加します。ページは `src/pages/[...locale]/` レストセグメントの下に配置されるため、デフォルトロケールはプレフィックスなしで提供され、他のすべてのロケールには専用の URL が割り当てられます。`.astro` ファイルは `astro-intlayer` の `useIntlayer` / `useLocale` フックを使用してコンテンツを読み取り、コンテンツ宣言は `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"
|