@intlayer/docs 9.5.1 → 9.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/history_of_i18n.md +304 -0
- package/blog/de/history_of_i18n.md +304 -0
- package/blog/en/history_of_i18n.md +304 -0
- package/blog/en-GB/history_of_i18n.md +304 -0
- package/blog/es/history_of_i18n.md +304 -0
- package/blog/fr/history_of_i18n.md +304 -0
- package/blog/hi/history_of_i18n.md +304 -0
- package/blog/id/history_of_i18n.md +304 -0
- package/blog/it/history_of_i18n.md +304 -0
- package/blog/ja/history_of_i18n.md +304 -0
- package/blog/ko/history_of_i18n.md +304 -0
- package/blog/pl/history_of_i18n.md +304 -0
- package/blog/pt/history_of_i18n.md +304 -0
- package/blog/ru/history_of_i18n.md +304 -0
- package/blog/tr/history_of_i18n.md +304 -0
- package/blog/uk/history_of_i18n.md +304 -0
- package/blog/vi/history_of_i18n.md +304 -0
- package/blog/zh/history_of_i18n.md +304 -0
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +0 -20
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +0 -20
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +0 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/index.md +4 -1
- package/docs/ar/benchmark/nextjs.md +32 -27
- package/docs/ar/benchmark/solid.md +13 -10
- package/docs/ar/benchmark/svelte.md +12 -9
- package/docs/ar/benchmark/tanstack.md +29 -24
- package/docs/ar/benchmark/vue.md +11 -7
- package/docs/ar/cli/build.md +8 -1
- package/docs/ar/cli/configuration.md +3 -1
- package/docs/ar/cli/doc-review.md +8 -1
- package/docs/ar/cli/doc-translate.md +5 -1
- package/docs/ar/cli/extract.md +2 -1
- package/docs/ar/cli/fill.md +5 -1
- package/docs/ar/cli/index.md +4 -5
- package/docs/ar/cli/live.md +5 -1
- package/docs/ar/cli/login.md +2 -2
- package/docs/ar/cli/pull.md +5 -1
- package/docs/ar/cli/push.md +5 -1
- package/docs/ar/cli/scan.md +5 -1
- package/docs/ar/cli/standalone.md +5 -1
- package/docs/ar/cli/test.md +5 -1
- package/docs/ar/cli/watch.md +5 -1
- package/docs/ar/compat/i18n-js.md +1 -1
- package/docs/ar/compat/i18next.md +1 -1
- package/docs/ar/compat/lingui.md +1 -1
- package/docs/ar/compat/next-i18next.md +1 -1
- package/docs/ar/compat/next-intl.md +1 -1
- package/docs/ar/compat/next-translate.md +1 -1
- package/docs/ar/compat/ngx-translate.md +1 -1
- package/docs/ar/compat/nuxtjs-i18n.md +1 -1
- package/docs/ar/compat/polyglot.md +1 -1
- package/docs/ar/compat/react-i18next.md +1 -1
- package/docs/ar/compat/react-intl.md +1 -1
- package/docs/ar/compat/svelte-i18n.md +1 -1
- package/docs/ar/compat/transloco.md +1 -1
- package/docs/ar/compat/vue-i18n.md +1 -1
- package/docs/ar/intlayer_with_remix_3.md +543 -0
- package/docs/bn/cli/index.md +4 -5
- package/docs/bn/cli/scan.md +5 -1
- package/docs/bn/cli/standalone.md +5 -1
- package/docs/cs/cli/index.md +4 -5
- package/docs/cs/cli/scan.md +5 -1
- package/docs/cs/cli/standalone.md +5 -1
- package/docs/de/benchmark/index.md +4 -1
- package/docs/de/benchmark/nextjs.md +32 -27
- package/docs/de/benchmark/solid.md +13 -10
- package/docs/de/benchmark/svelte.md +12 -9
- package/docs/de/benchmark/tanstack.md +29 -24
- package/docs/de/benchmark/vue.md +11 -7
- package/docs/de/cli/build.md +8 -1
- package/docs/de/cli/configuration.md +3 -1
- package/docs/de/cli/doc-review.md +8 -1
- package/docs/de/cli/doc-translate.md +5 -1
- package/docs/de/cli/extract.md +2 -1
- package/docs/de/cli/fill.md +5 -1
- package/docs/de/cli/index.md +4 -5
- package/docs/de/cli/live.md +5 -1
- package/docs/de/cli/login.md +2 -2
- package/docs/de/cli/pull.md +5 -1
- package/docs/de/cli/push.md +5 -1
- package/docs/de/cli/scan.md +5 -1
- package/docs/de/cli/standalone.md +5 -1
- package/docs/de/cli/test.md +5 -1
- package/docs/de/cli/watch.md +5 -1
- package/docs/de/compat/i18n-js.md +1 -1
- package/docs/de/compat/i18next.md +1 -1
- package/docs/de/compat/lingui.md +1 -1
- package/docs/de/compat/next-i18next.md +1 -1
- package/docs/de/compat/next-intl.md +1 -1
- package/docs/de/compat/next-translate.md +1 -1
- package/docs/de/compat/ngx-translate.md +1 -1
- package/docs/de/compat/nuxtjs-i18n.md +1 -1
- package/docs/de/compat/polyglot.md +1 -1
- package/docs/de/compat/react-i18next.md +1 -1
- package/docs/de/compat/react-intl.md +1 -1
- package/docs/de/compat/svelte-i18n.md +1 -1
- package/docs/de/compat/transloco.md +1 -1
- package/docs/de/compat/vue-i18n.md +1 -1
- package/docs/de/intlayer_with_remix_3.md +543 -0
- package/docs/en/benchmark/index.md +4 -1
- package/docs/en/benchmark/nextjs.md +32 -27
- package/docs/en/benchmark/solid.md +13 -10
- package/docs/en/benchmark/svelte.md +12 -9
- package/docs/en/benchmark/tanstack.md +30 -25
- package/docs/en/benchmark/vue.md +11 -7
- package/docs/en/cli/build.md +8 -1
- package/docs/en/cli/configuration.md +3 -1
- package/docs/en/cli/doc-review.md +8 -1
- package/docs/en/cli/doc-translate.md +5 -1
- package/docs/en/cli/extract.md +2 -1
- package/docs/en/cli/fill.md +5 -1
- package/docs/en/cli/index.md +4 -5
- package/docs/en/cli/live.md +5 -1
- package/docs/en/cli/login.md +2 -2
- package/docs/en/cli/pull.md +5 -1
- package/docs/en/cli/push.md +5 -1
- package/docs/en/cli/scan.md +5 -1
- package/docs/en/cli/standalone.md +5 -1
- package/docs/en/cli/test.md +5 -1
- package/docs/en/cli/watch.md +5 -1
- package/docs/en/compat/i18n-js.md +1 -1
- package/docs/en/compat/i18next.md +1 -1
- package/docs/en/compat/lingui.md +1 -1
- package/docs/en/compat/next-i18next.md +1 -1
- package/docs/en/compat/next-intl.md +1 -1
- package/docs/en/compat/next-translate.md +1 -1
- package/docs/en/compat/ngx-translate.md +1 -1
- package/docs/en/compat/nuxtjs-i18n.md +1 -1
- package/docs/en/compat/polyglot.md +1 -1
- package/docs/en/compat/react-i18next.md +1 -1
- package/docs/en/compat/react-intl.md +1 -1
- package/docs/en/compat/svelte-i18n.md +1 -1
- package/docs/en/compat/transloco.md +1 -1
- package/docs/en/compat/vue-i18n.md +1 -1
- package/docs/en/intlayer_with_remix_3.md +103 -71
- package/docs/en-GB/benchmark/index.md +4 -1
- package/docs/en-GB/benchmark/nextjs.md +32 -27
- package/docs/en-GB/benchmark/solid.md +13 -10
- package/docs/en-GB/benchmark/svelte.md +12 -9
- package/docs/en-GB/benchmark/tanstack.md +29 -24
- package/docs/en-GB/benchmark/vue.md +11 -7
- package/docs/en-GB/cli/build.md +8 -1
- package/docs/en-GB/cli/configuration.md +3 -1
- package/docs/en-GB/cli/doc-review.md +8 -1
- package/docs/en-GB/cli/doc-translate.md +5 -1
- package/docs/en-GB/cli/extract.md +2 -1
- package/docs/en-GB/cli/fill.md +5 -1
- package/docs/en-GB/cli/index.md +4 -5
- package/docs/en-GB/cli/live.md +5 -1
- package/docs/en-GB/cli/login.md +2 -2
- package/docs/en-GB/cli/pull.md +5 -1
- package/docs/en-GB/cli/push.md +5 -1
- package/docs/en-GB/cli/scan.md +5 -1
- package/docs/en-GB/cli/standalone.md +5 -1
- package/docs/en-GB/cli/test.md +5 -1
- package/docs/en-GB/cli/watch.md +5 -1
- package/docs/en-GB/compat/i18n-js.md +1 -1
- package/docs/en-GB/compat/i18next.md +1 -1
- package/docs/en-GB/compat/lingui.md +1 -1
- package/docs/en-GB/compat/next-i18next.md +1 -1
- package/docs/en-GB/compat/next-intl.md +1 -1
- package/docs/en-GB/compat/next-translate.md +1 -1
- package/docs/en-GB/compat/ngx-translate.md +1 -1
- package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
- package/docs/en-GB/compat/polyglot.md +1 -1
- package/docs/en-GB/compat/react-i18next.md +1 -1
- package/docs/en-GB/compat/react-intl.md +1 -1
- package/docs/en-GB/compat/svelte-i18n.md +1 -1
- package/docs/en-GB/compat/transloco.md +1 -1
- package/docs/en-GB/compat/vue-i18n.md +1 -1
- package/docs/en-GB/intlayer_with_remix_3.md +558 -0
- package/docs/es/benchmark/index.md +4 -1
- package/docs/es/benchmark/nextjs.md +32 -27
- package/docs/es/benchmark/solid.md +13 -10
- package/docs/es/benchmark/svelte.md +12 -9
- package/docs/es/benchmark/tanstack.md +29 -24
- package/docs/es/benchmark/vue.md +11 -7
- package/docs/es/cli/build.md +8 -1
- package/docs/es/cli/configuration.md +3 -1
- package/docs/es/cli/doc-review.md +8 -1
- package/docs/es/cli/doc-translate.md +5 -1
- package/docs/es/cli/extract.md +2 -1
- package/docs/es/cli/fill.md +5 -1
- package/docs/es/cli/index.md +4 -5
- package/docs/es/cli/live.md +5 -1
- package/docs/es/cli/login.md +2 -2
- package/docs/es/cli/pull.md +5 -1
- package/docs/es/cli/push.md +5 -1
- package/docs/es/cli/scan.md +5 -1
- package/docs/es/cli/standalone.md +5 -1
- package/docs/es/cli/test.md +5 -1
- package/docs/es/cli/watch.md +5 -1
- package/docs/es/compat/i18n-js.md +1 -1
- package/docs/es/compat/i18next.md +1 -1
- package/docs/es/compat/lingui.md +1 -1
- package/docs/es/compat/next-i18next.md +1 -1
- package/docs/es/compat/next-intl.md +1 -1
- package/docs/es/compat/next-translate.md +1 -1
- package/docs/es/compat/ngx-translate.md +1 -1
- package/docs/es/compat/nuxtjs-i18n.md +1 -1
- package/docs/es/compat/polyglot.md +1 -1
- package/docs/es/compat/react-i18next.md +1 -1
- package/docs/es/compat/react-intl.md +1 -1
- package/docs/es/compat/svelte-i18n.md +1 -1
- package/docs/es/compat/transloco.md +1 -1
- package/docs/es/compat/vue-i18n.md +1 -1
- package/docs/es/intlayer_with_remix_3.md +540 -0
- package/docs/fr/benchmark/index.md +4 -1
- package/docs/fr/benchmark/nextjs.md +32 -27
- package/docs/fr/benchmark/solid.md +13 -10
- package/docs/fr/benchmark/svelte.md +12 -9
- package/docs/fr/benchmark/tanstack.md +29 -24
- package/docs/fr/benchmark/vue.md +11 -7
- package/docs/fr/cli/build.md +8 -1
- package/docs/fr/cli/configuration.md +3 -1
- package/docs/fr/cli/doc-review.md +8 -1
- package/docs/fr/cli/doc-translate.md +5 -1
- package/docs/fr/cli/extract.md +2 -1
- package/docs/fr/cli/fill.md +5 -1
- package/docs/fr/cli/index.md +4 -5
- package/docs/fr/cli/live.md +5 -1
- package/docs/fr/cli/login.md +2 -2
- package/docs/fr/cli/pull.md +5 -1
- package/docs/fr/cli/push.md +5 -1
- package/docs/fr/cli/scan.md +5 -1
- package/docs/fr/cli/standalone.md +5 -1
- package/docs/fr/cli/test.md +5 -1
- package/docs/fr/cli/watch.md +5 -1
- package/docs/fr/compat/i18n-js.md +1 -1
- package/docs/fr/compat/i18next.md +1 -1
- package/docs/fr/compat/lingui.md +1 -1
- package/docs/fr/compat/next-i18next.md +1 -1
- package/docs/fr/compat/next-intl.md +1 -1
- package/docs/fr/compat/next-translate.md +1 -1
- package/docs/fr/compat/ngx-translate.md +1 -1
- package/docs/fr/compat/nuxtjs-i18n.md +1 -1
- package/docs/fr/compat/polyglot.md +1 -1
- package/docs/fr/compat/react-i18next.md +1 -1
- package/docs/fr/compat/react-intl.md +1 -1
- package/docs/fr/compat/svelte-i18n.md +1 -1
- package/docs/fr/compat/transloco.md +1 -1
- package/docs/fr/compat/vue-i18n.md +1 -1
- package/docs/fr/intlayer_with_remix_3.md +540 -0
- package/docs/hi/benchmark/index.md +4 -1
- package/docs/hi/benchmark/nextjs.md +32 -27
- package/docs/hi/benchmark/solid.md +13 -10
- package/docs/hi/benchmark/svelte.md +12 -9
- package/docs/hi/benchmark/tanstack.md +29 -24
- package/docs/hi/benchmark/vue.md +11 -7
- package/docs/hi/cli/build.md +8 -1
- package/docs/hi/cli/configuration.md +3 -1
- package/docs/hi/cli/doc-review.md +8 -1
- package/docs/hi/cli/doc-translate.md +5 -1
- package/docs/hi/cli/extract.md +2 -1
- package/docs/hi/cli/fill.md +5 -1
- package/docs/hi/cli/index.md +4 -5
- package/docs/hi/cli/live.md +5 -1
- package/docs/hi/cli/login.md +2 -2
- package/docs/hi/cli/pull.md +5 -1
- package/docs/hi/cli/push.md +5 -1
- package/docs/hi/cli/scan.md +5 -1
- package/docs/hi/cli/standalone.md +5 -1
- package/docs/hi/cli/test.md +5 -1
- package/docs/hi/cli/watch.md +5 -1
- package/docs/hi/compat/i18n-js.md +1 -1
- package/docs/hi/compat/i18next.md +1 -1
- package/docs/hi/compat/lingui.md +1 -1
- package/docs/hi/compat/next-i18next.md +1 -1
- package/docs/hi/compat/next-intl.md +1 -1
- package/docs/hi/compat/next-translate.md +1 -1
- package/docs/hi/compat/ngx-translate.md +1 -1
- package/docs/hi/compat/nuxtjs-i18n.md +1 -1
- package/docs/hi/compat/polyglot.md +1 -1
- package/docs/hi/compat/react-i18next.md +1 -1
- package/docs/hi/compat/react-intl.md +1 -1
- package/docs/hi/compat/svelte-i18n.md +1 -1
- package/docs/hi/compat/transloco.md +1 -1
- package/docs/hi/compat/vue-i18n.md +1 -1
- package/docs/hi/intlayer_with_remix_3.md +543 -0
- package/docs/id/benchmark/index.md +4 -1
- package/docs/id/benchmark/nextjs.md +32 -27
- package/docs/id/benchmark/solid.md +13 -10
- package/docs/id/benchmark/svelte.md +12 -9
- package/docs/id/benchmark/tanstack.md +29 -24
- package/docs/id/benchmark/vue.md +11 -7
- package/docs/id/cli/build.md +8 -1
- package/docs/id/cli/configuration.md +3 -1
- package/docs/id/cli/doc-review.md +8 -1
- package/docs/id/cli/doc-translate.md +5 -1
- package/docs/id/cli/extract.md +2 -1
- package/docs/id/cli/fill.md +5 -1
- package/docs/id/cli/index.md +4 -5
- package/docs/id/cli/live.md +5 -1
- package/docs/id/cli/login.md +2 -2
- package/docs/id/cli/pull.md +5 -1
- package/docs/id/cli/push.md +5 -1
- package/docs/id/cli/scan.md +5 -1
- package/docs/id/cli/standalone.md +5 -1
- package/docs/id/cli/test.md +5 -1
- package/docs/id/cli/watch.md +5 -1
- package/docs/id/compat/i18n-js.md +1 -1
- package/docs/id/compat/i18next.md +1 -1
- package/docs/id/compat/lingui.md +1 -1
- package/docs/id/compat/next-i18next.md +1 -1
- package/docs/id/compat/next-intl.md +1 -1
- package/docs/id/compat/next-translate.md +1 -1
- package/docs/id/compat/ngx-translate.md +1 -1
- package/docs/id/compat/nuxtjs-i18n.md +1 -1
- package/docs/id/compat/polyglot.md +1 -1
- package/docs/id/compat/react-i18next.md +1 -1
- package/docs/id/compat/react-intl.md +1 -1
- package/docs/id/compat/svelte-i18n.md +1 -1
- package/docs/id/compat/transloco.md +1 -1
- package/docs/id/compat/vue-i18n.md +1 -1
- package/docs/id/intlayer_with_remix_3.md +566 -0
- package/docs/it/benchmark/index.md +4 -1
- package/docs/it/benchmark/nextjs.md +32 -27
- package/docs/it/benchmark/solid.md +13 -10
- package/docs/it/benchmark/svelte.md +12 -9
- package/docs/it/benchmark/tanstack.md +29 -24
- package/docs/it/benchmark/vue.md +11 -7
- package/docs/it/cli/build.md +8 -1
- package/docs/it/cli/configuration.md +3 -1
- package/docs/it/cli/doc-review.md +8 -1
- package/docs/it/cli/doc-translate.md +5 -1
- package/docs/it/cli/extract.md +2 -1
- package/docs/it/cli/fill.md +5 -1
- package/docs/it/cli/index.md +4 -5
- package/docs/it/cli/live.md +5 -1
- package/docs/it/cli/login.md +2 -2
- package/docs/it/cli/pull.md +5 -1
- package/docs/it/cli/push.md +5 -1
- package/docs/it/cli/scan.md +5 -1
- package/docs/it/cli/standalone.md +5 -1
- package/docs/it/cli/test.md +5 -1
- package/docs/it/cli/watch.md +5 -1
- package/docs/it/compat/i18n-js.md +1 -1
- package/docs/it/compat/i18next.md +1 -1
- package/docs/it/compat/lingui.md +1 -1
- package/docs/it/compat/next-i18next.md +1 -1
- package/docs/it/compat/next-intl.md +1 -1
- package/docs/it/compat/next-translate.md +1 -1
- package/docs/it/compat/ngx-translate.md +1 -1
- package/docs/it/compat/nuxtjs-i18n.md +1 -1
- package/docs/it/compat/polyglot.md +1 -1
- package/docs/it/compat/react-i18next.md +1 -1
- package/docs/it/compat/react-intl.md +1 -1
- package/docs/it/compat/svelte-i18n.md +1 -1
- package/docs/it/compat/transloco.md +1 -1
- package/docs/it/compat/vue-i18n.md +1 -1
- package/docs/it/intlayer_with_remix_3.md +558 -0
- package/docs/ja/benchmark/index.md +4 -1
- package/docs/ja/benchmark/nextjs.md +32 -27
- package/docs/ja/benchmark/solid.md +13 -10
- package/docs/ja/benchmark/svelte.md +12 -9
- package/docs/ja/benchmark/tanstack.md +29 -24
- package/docs/ja/benchmark/vue.md +11 -7
- package/docs/ja/cli/build.md +8 -1
- package/docs/ja/cli/configuration.md +3 -1
- package/docs/ja/cli/doc-review.md +8 -1
- package/docs/ja/cli/doc-translate.md +5 -1
- package/docs/ja/cli/extract.md +2 -1
- package/docs/ja/cli/fill.md +5 -1
- package/docs/ja/cli/index.md +4 -5
- package/docs/ja/cli/live.md +5 -1
- package/docs/ja/cli/login.md +2 -2
- package/docs/ja/cli/pull.md +5 -1
- package/docs/ja/cli/push.md +5 -1
- package/docs/ja/cli/scan.md +5 -1
- package/docs/ja/cli/standalone.md +5 -1
- package/docs/ja/cli/test.md +5 -1
- package/docs/ja/cli/watch.md +5 -1
- package/docs/ja/compat/i18n-js.md +1 -1
- package/docs/ja/compat/i18next.md +1 -1
- package/docs/ja/compat/lingui.md +1 -1
- package/docs/ja/compat/next-i18next.md +1 -1
- package/docs/ja/compat/next-intl.md +1 -1
- package/docs/ja/compat/next-translate.md +1 -1
- package/docs/ja/compat/ngx-translate.md +1 -1
- package/docs/ja/compat/nuxtjs-i18n.md +1 -1
- package/docs/ja/compat/polyglot.md +1 -1
- package/docs/ja/compat/react-i18next.md +1 -1
- package/docs/ja/compat/react-intl.md +1 -1
- package/docs/ja/compat/svelte-i18n.md +1 -1
- package/docs/ja/compat/transloco.md +1 -1
- package/docs/ja/compat/vue-i18n.md +1 -1
- package/docs/ja/intlayer_with_remix_3.md +558 -0
- package/docs/ko/benchmark/index.md +4 -1
- package/docs/ko/benchmark/nextjs.md +32 -27
- package/docs/ko/benchmark/solid.md +13 -10
- package/docs/ko/benchmark/svelte.md +12 -9
- package/docs/ko/benchmark/tanstack.md +29 -24
- package/docs/ko/benchmark/vue.md +11 -7
- package/docs/ko/cli/build.md +8 -1
- package/docs/ko/cli/configuration.md +3 -1
- package/docs/ko/cli/doc-review.md +8 -1
- package/docs/ko/cli/doc-translate.md +5 -1
- package/docs/ko/cli/extract.md +2 -1
- package/docs/ko/cli/fill.md +5 -1
- package/docs/ko/cli/index.md +4 -5
- package/docs/ko/cli/live.md +5 -1
- package/docs/ko/cli/login.md +2 -2
- package/docs/ko/cli/pull.md +5 -1
- package/docs/ko/cli/push.md +5 -1
- package/docs/ko/cli/scan.md +5 -1
- package/docs/ko/cli/standalone.md +5 -1
- package/docs/ko/cli/test.md +5 -1
- package/docs/ko/cli/watch.md +5 -1
- package/docs/ko/compat/i18n-js.md +1 -1
- package/docs/ko/compat/i18next.md +1 -1
- package/docs/ko/compat/lingui.md +1 -1
- package/docs/ko/compat/next-i18next.md +1 -1
- package/docs/ko/compat/next-intl.md +1 -1
- package/docs/ko/compat/next-translate.md +1 -1
- package/docs/ko/compat/ngx-translate.md +1 -1
- package/docs/ko/compat/nuxtjs-i18n.md +1 -1
- package/docs/ko/compat/polyglot.md +1 -1
- package/docs/ko/compat/react-i18next.md +1 -1
- package/docs/ko/compat/react-intl.md +1 -1
- package/docs/ko/compat/svelte-i18n.md +1 -1
- package/docs/ko/compat/transloco.md +1 -1
- package/docs/ko/compat/vue-i18n.md +1 -1
- package/docs/ko/intlayer_with_remix_3.md +543 -0
- package/docs/nl/cli/index.md +4 -5
- package/docs/nl/cli/scan.md +5 -1
- package/docs/nl/cli/standalone.md +5 -1
- package/docs/pl/benchmark/index.md +4 -1
- package/docs/pl/benchmark/nextjs.md +32 -27
- package/docs/pl/benchmark/solid.md +13 -10
- package/docs/pl/benchmark/svelte.md +12 -9
- package/docs/pl/benchmark/tanstack.md +29 -24
- package/docs/pl/benchmark/vue.md +11 -7
- package/docs/pl/cli/build.md +8 -1
- package/docs/pl/cli/configuration.md +3 -1
- package/docs/pl/cli/doc-review.md +8 -1
- package/docs/pl/cli/doc-translate.md +5 -1
- package/docs/pl/cli/extract.md +2 -1
- package/docs/pl/cli/fill.md +5 -1
- package/docs/pl/cli/index.md +4 -5
- package/docs/pl/cli/live.md +5 -1
- package/docs/pl/cli/login.md +2 -2
- package/docs/pl/cli/pull.md +5 -1
- package/docs/pl/cli/push.md +5 -1
- package/docs/pl/cli/scan.md +5 -1
- package/docs/pl/cli/standalone.md +5 -1
- package/docs/pl/cli/test.md +5 -1
- package/docs/pl/cli/watch.md +5 -1
- package/docs/pl/compat/i18n-js.md +1 -1
- package/docs/pl/compat/i18next.md +1 -1
- package/docs/pl/compat/lingui.md +1 -1
- package/docs/pl/compat/next-i18next.md +1 -1
- package/docs/pl/compat/next-intl.md +1 -1
- package/docs/pl/compat/next-translate.md +1 -1
- package/docs/pl/compat/ngx-translate.md +1 -1
- package/docs/pl/compat/nuxtjs-i18n.md +1 -1
- package/docs/pl/compat/polyglot.md +1 -1
- package/docs/pl/compat/react-i18next.md +1 -1
- package/docs/pl/compat/react-intl.md +1 -1
- package/docs/pl/compat/svelte-i18n.md +1 -1
- package/docs/pl/compat/transloco.md +1 -1
- package/docs/pl/compat/vue-i18n.md +1 -1
- package/docs/pl/intlayer_with_remix_3.md +551 -0
- package/docs/pt/benchmark/index.md +4 -1
- package/docs/pt/benchmark/nextjs.md +32 -27
- package/docs/pt/benchmark/solid.md +13 -10
- package/docs/pt/benchmark/svelte.md +12 -9
- package/docs/pt/benchmark/tanstack.md +29 -24
- package/docs/pt/benchmark/vue.md +11 -7
- package/docs/pt/cli/build.md +8 -1
- package/docs/pt/cli/configuration.md +3 -1
- package/docs/pt/cli/doc-review.md +8 -1
- package/docs/pt/cli/doc-translate.md +5 -1
- package/docs/pt/cli/extract.md +2 -1
- package/docs/pt/cli/fill.md +5 -1
- package/docs/pt/cli/index.md +4 -5
- package/docs/pt/cli/live.md +5 -1
- package/docs/pt/cli/login.md +2 -2
- package/docs/pt/cli/pull.md +5 -1
- package/docs/pt/cli/push.md +5 -1
- package/docs/pt/cli/scan.md +5 -1
- package/docs/pt/cli/standalone.md +5 -1
- package/docs/pt/cli/test.md +5 -1
- package/docs/pt/cli/watch.md +5 -1
- package/docs/pt/compat/i18n-js.md +1 -1
- package/docs/pt/compat/i18next.md +1 -1
- package/docs/pt/compat/lingui.md +1 -1
- package/docs/pt/compat/next-i18next.md +1 -1
- package/docs/pt/compat/next-intl.md +1 -1
- package/docs/pt/compat/next-translate.md +1 -1
- package/docs/pt/compat/ngx-translate.md +1 -1
- package/docs/pt/compat/nuxtjs-i18n.md +1 -1
- package/docs/pt/compat/polyglot.md +1 -1
- package/docs/pt/compat/react-i18next.md +1 -1
- package/docs/pt/compat/react-intl.md +1 -1
- package/docs/pt/compat/svelte-i18n.md +1 -1
- package/docs/pt/compat/transloco.md +1 -1
- package/docs/pt/compat/vue-i18n.md +1 -1
- package/docs/pt/intlayer_with_remix_3.md +558 -0
- package/docs/ru/benchmark/index.md +4 -1
- package/docs/ru/benchmark/nextjs.md +32 -27
- package/docs/ru/benchmark/solid.md +13 -10
- package/docs/ru/benchmark/svelte.md +12 -9
- package/docs/ru/benchmark/tanstack.md +29 -24
- package/docs/ru/benchmark/vue.md +11 -7
- package/docs/ru/cli/build.md +8 -1
- package/docs/ru/cli/configuration.md +3 -1
- package/docs/ru/cli/doc-review.md +8 -1
- package/docs/ru/cli/doc-translate.md +5 -1
- package/docs/ru/cli/extract.md +2 -1
- package/docs/ru/cli/fill.md +5 -1
- package/docs/ru/cli/index.md +4 -5
- package/docs/ru/cli/live.md +5 -1
- package/docs/ru/cli/login.md +2 -2
- package/docs/ru/cli/pull.md +5 -1
- package/docs/ru/cli/push.md +5 -1
- package/docs/ru/cli/scan.md +5 -1
- package/docs/ru/cli/standalone.md +5 -1
- package/docs/ru/cli/test.md +5 -1
- package/docs/ru/cli/watch.md +5 -1
- package/docs/ru/compat/i18n-js.md +1 -1
- package/docs/ru/compat/i18next.md +1 -1
- package/docs/ru/compat/lingui.md +1 -1
- package/docs/ru/compat/next-i18next.md +1 -1
- package/docs/ru/compat/next-intl.md +1 -1
- package/docs/ru/compat/next-translate.md +1 -1
- package/docs/ru/compat/ngx-translate.md +1 -1
- package/docs/ru/compat/nuxtjs-i18n.md +1 -1
- package/docs/ru/compat/polyglot.md +1 -1
- package/docs/ru/compat/react-i18next.md +1 -1
- package/docs/ru/compat/react-intl.md +1 -1
- package/docs/ru/compat/svelte-i18n.md +1 -1
- package/docs/ru/compat/transloco.md +1 -1
- package/docs/ru/compat/vue-i18n.md +1 -1
- package/docs/ru/intlayer_with_remix_3.md +558 -0
- package/docs/tr/benchmark/index.md +4 -1
- package/docs/tr/benchmark/nextjs.md +32 -27
- package/docs/tr/benchmark/solid.md +13 -10
- package/docs/tr/benchmark/svelte.md +12 -9
- package/docs/tr/benchmark/tanstack.md +29 -24
- package/docs/tr/benchmark/vue.md +11 -7
- package/docs/tr/cli/build.md +8 -1
- package/docs/tr/cli/configuration.md +3 -1
- package/docs/tr/cli/doc-review.md +8 -1
- package/docs/tr/cli/doc-translate.md +5 -1
- package/docs/tr/cli/extract.md +2 -1
- package/docs/tr/cli/fill.md +5 -1
- package/docs/tr/cli/index.md +4 -5
- package/docs/tr/cli/live.md +5 -1
- package/docs/tr/cli/login.md +2 -2
- package/docs/tr/cli/pull.md +5 -1
- package/docs/tr/cli/push.md +5 -1
- package/docs/tr/cli/scan.md +5 -1
- package/docs/tr/cli/standalone.md +5 -1
- package/docs/tr/cli/test.md +5 -1
- package/docs/tr/cli/watch.md +5 -1
- package/docs/tr/compat/i18n-js.md +1 -1
- package/docs/tr/compat/i18next.md +1 -1
- package/docs/tr/compat/lingui.md +1 -1
- package/docs/tr/compat/next-i18next.md +1 -1
- package/docs/tr/compat/next-intl.md +1 -1
- package/docs/tr/compat/next-translate.md +1 -1
- package/docs/tr/compat/ngx-translate.md +1 -1
- package/docs/tr/compat/nuxtjs-i18n.md +1 -1
- package/docs/tr/compat/polyglot.md +1 -1
- package/docs/tr/compat/react-i18next.md +1 -1
- package/docs/tr/compat/react-intl.md +1 -1
- package/docs/tr/compat/svelte-i18n.md +1 -1
- package/docs/tr/compat/transloco.md +1 -1
- package/docs/tr/compat/vue-i18n.md +1 -1
- package/docs/tr/intlayer_with_remix_3.md +566 -0
- package/docs/uk/benchmark/index.md +4 -1
- package/docs/uk/benchmark/nextjs.md +32 -27
- package/docs/uk/benchmark/solid.md +13 -10
- package/docs/uk/benchmark/svelte.md +12 -9
- package/docs/uk/benchmark/tanstack.md +29 -24
- package/docs/uk/benchmark/vue.md +11 -7
- package/docs/uk/cli/build.md +8 -1
- package/docs/uk/cli/configuration.md +3 -1
- package/docs/uk/cli/doc-review.md +8 -1
- package/docs/uk/cli/doc-translate.md +5 -1
- package/docs/uk/cli/extract.md +2 -1
- package/docs/uk/cli/fill.md +5 -1
- package/docs/uk/cli/index.md +4 -5
- package/docs/uk/cli/live.md +5 -1
- package/docs/uk/cli/login.md +2 -2
- package/docs/uk/cli/pull.md +5 -1
- package/docs/uk/cli/push.md +5 -1
- package/docs/uk/cli/scan.md +5 -1
- package/docs/uk/cli/standalone.md +5 -1
- package/docs/uk/cli/test.md +5 -1
- package/docs/uk/cli/watch.md +5 -1
- package/docs/uk/compat/i18n-js.md +1 -1
- package/docs/uk/compat/i18next.md +1 -1
- package/docs/uk/compat/lingui.md +1 -1
- package/docs/uk/compat/next-i18next.md +1 -1
- package/docs/uk/compat/next-intl.md +1 -1
- package/docs/uk/compat/next-translate.md +1 -1
- package/docs/uk/compat/ngx-translate.md +1 -1
- package/docs/uk/compat/nuxtjs-i18n.md +1 -1
- package/docs/uk/compat/polyglot.md +1 -1
- package/docs/uk/compat/react-i18next.md +1 -1
- package/docs/uk/compat/react-intl.md +1 -1
- package/docs/uk/compat/svelte-i18n.md +1 -1
- package/docs/uk/compat/transloco.md +1 -1
- package/docs/uk/compat/vue-i18n.md +1 -1
- package/docs/uk/intlayer_with_remix_3.md +566 -0
- package/docs/ur/cli/index.md +4 -5
- package/docs/ur/cli/scan.md +5 -1
- package/docs/ur/cli/standalone.md +5 -1
- package/docs/vi/benchmark/index.md +4 -1
- package/docs/vi/benchmark/nextjs.md +32 -27
- package/docs/vi/benchmark/solid.md +13 -10
- package/docs/vi/benchmark/svelte.md +12 -9
- package/docs/vi/benchmark/tanstack.md +29 -24
- package/docs/vi/benchmark/vue.md +11 -7
- package/docs/vi/cli/build.md +8 -1
- package/docs/vi/cli/configuration.md +3 -1
- package/docs/vi/cli/doc-review.md +8 -1
- package/docs/vi/cli/doc-translate.md +5 -1
- package/docs/vi/cli/extract.md +2 -1
- package/docs/vi/cli/fill.md +5 -1
- package/docs/vi/cli/index.md +4 -5
- package/docs/vi/cli/live.md +5 -1
- package/docs/vi/cli/login.md +2 -2
- package/docs/vi/cli/pull.md +5 -1
- package/docs/vi/cli/push.md +5 -1
- package/docs/vi/cli/scan.md +5 -1
- package/docs/vi/cli/standalone.md +5 -1
- package/docs/vi/cli/test.md +5 -1
- package/docs/vi/cli/watch.md +5 -1
- package/docs/vi/compat/i18n-js.md +1 -1
- package/docs/vi/compat/i18next.md +1 -1
- package/docs/vi/compat/lingui.md +1 -1
- package/docs/vi/compat/next-i18next.md +1 -1
- package/docs/vi/compat/next-intl.md +1 -1
- package/docs/vi/compat/next-translate.md +1 -1
- package/docs/vi/compat/ngx-translate.md +1 -1
- package/docs/vi/compat/nuxtjs-i18n.md +1 -1
- package/docs/vi/compat/polyglot.md +1 -1
- package/docs/vi/compat/react-i18next.md +1 -1
- package/docs/vi/compat/react-intl.md +1 -1
- package/docs/vi/compat/svelte-i18n.md +1 -1
- package/docs/vi/compat/transloco.md +1 -1
- package/docs/vi/compat/vue-i18n.md +1 -1
- package/docs/vi/intlayer_with_remix_3.md +566 -0
- package/docs/zh/benchmark/index.md +4 -1
- package/docs/zh/benchmark/nextjs.md +32 -27
- package/docs/zh/benchmark/solid.md +13 -10
- package/docs/zh/benchmark/svelte.md +12 -9
- package/docs/zh/benchmark/tanstack.md +29 -24
- package/docs/zh/benchmark/vue.md +11 -7
- package/docs/zh/cli/build.md +8 -1
- package/docs/zh/cli/configuration.md +3 -1
- package/docs/zh/cli/doc-review.md +8 -1
- package/docs/zh/cli/doc-translate.md +5 -1
- package/docs/zh/cli/extract.md +2 -1
- package/docs/zh/cli/fill.md +5 -1
- package/docs/zh/cli/index.md +4 -5
- package/docs/zh/cli/live.md +5 -1
- package/docs/zh/cli/login.md +2 -2
- package/docs/zh/cli/pull.md +5 -1
- package/docs/zh/cli/push.md +5 -1
- package/docs/zh/cli/scan.md +5 -1
- package/docs/zh/cli/standalone.md +5 -1
- package/docs/zh/cli/test.md +5 -1
- package/docs/zh/cli/watch.md +5 -1
- package/docs/zh/compat/i18n-js.md +1 -1
- package/docs/zh/compat/i18next.md +1 -1
- package/docs/zh/compat/lingui.md +1 -1
- package/docs/zh/compat/next-i18next.md +1 -1
- package/docs/zh/compat/next-intl.md +1 -1
- package/docs/zh/compat/next-translate.md +1 -1
- package/docs/zh/compat/ngx-translate.md +1 -1
- package/docs/zh/compat/nuxtjs-i18n.md +1 -1
- package/docs/zh/compat/polyglot.md +1 -1
- package/docs/zh/compat/react-i18next.md +1 -1
- package/docs/zh/compat/react-intl.md +1 -1
- package/docs/zh/compat/svelte-i18n.md +1 -1
- package/docs/zh/compat/transloco.md +1 -1
- package/docs/zh/compat/vue-i18n.md +1 -1
- package/docs/zh/intlayer_with_remix_3.md +558 -0
- package/package.json +7 -7
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +0 -20
- package/docs/ar/cli/ci.md +0 -186
- package/docs/de/cli/ci.md +0 -186
- package/docs/en/cli/ci.md +0 -216
- package/docs/en-GB/cli/ci.md +0 -186
- package/docs/es/cli/ci.md +0 -186
- package/docs/fr/cli/ci.md +0 -186
- package/docs/hi/cli/ci.md +0 -186
- package/docs/id/cli/ci.md +0 -186
- package/docs/it/cli/ci.md +0 -186
- package/docs/ja/cli/ci.md +0 -186
- package/docs/ko/cli/ci.md +0 -186
- package/docs/pl/cli/ci.md +0 -186
- package/docs/pt/cli/ci.md +0 -186
- package/docs/ru/cli/ci.md +0 -186
- package/docs/tr/cli/ci.md +0 -186
- package/docs/uk/cli/ci.md +0 -186
- package/docs/vi/cli/ci.md +0 -186
- package/docs/zh/cli/ci.md +0 -186
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-09
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
|
+
title: "Remix 3 i18n - Guida completa per tradurre la tua applicazione"
|
|
5
|
+
description: "Dimentica i18next. La guida 2026 per creare un'applicazione Remix 3 multilingue (i18n). Traduci con agenti IA e ottimizza le dimensioni del bundle, la SEO e le prestazioni."
|
|
6
|
+
keywords:
|
|
7
|
+
- Internazionalizzazione
|
|
8
|
+
- Documentazione
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Remix 3
|
|
11
|
+
- Remix
|
|
12
|
+
- JavaScript
|
|
13
|
+
- TypeScript
|
|
14
|
+
- Standard Web
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- environment
|
|
18
|
+
- remix-3
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-remix-3-template
|
|
20
|
+
applicationShowcase: https://intlayer-remix-3-template.vercel.app
|
|
21
|
+
history:
|
|
22
|
+
- version: 9.5.0
|
|
23
|
+
date: 2026-09-09
|
|
24
|
+
changes: "Documentazione iniziale per Remix 3"
|
|
25
|
+
author: aymericzip
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Traduci il tuo sito web Remix 3 usando Intlayer | Internazionalizzazione (i18n)
|
|
29
|
+
|
|
30
|
+
Questa guida illustra come integrare **Intlayer** per un'internazionalizzazione fluida nelle applicazioni **Remix 3** con routing basato sulla lingua, dichiarazioni di contenuti con sicurezza dei tipi, componenti JSX renderizzati lato server e supporto multi-runtime su Node.js, Bun, Deno e Cloudflare Workers.
|
|
31
|
+
|
|
32
|
+
## Cos'è Remix 3?
|
|
33
|
+
|
|
34
|
+
**Remix 3** rappresenta una fondamentale evoluzione architetturale verso un **framework web componibile e indipendente dal runtime, costruito interamente su standard web**. Anziché essere vincolato a bundler specifici o API proprietarie del server, Remix 3 è distribuito come pacchetti componibili a scopo singolo:
|
|
35
|
+
|
|
36
|
+
- **`remix/fetch-router`** (o `remix/router`): Routing leggero e conforme agli standard basato sulle Fetch API (`Request` e `Response`).
|
|
37
|
+
- **`remix/ui`**: Un modello di componenti JSX (`jsxImportSource: "remix/ui"`). Un componente è una funzione di setup che restituisce una funzione di render, simile a React ma con lo stato gestito in semplici closure JavaScript.
|
|
38
|
+
- **`remix/middleware/render`**: Installa `context.render(<Page />)` su ogni richiesta, trasmettendo l'albero JSX in una `Response` HTML.
|
|
39
|
+
- **`remix/node-fetch-server`**: Adattatori server per Node.js, con supporto nativo per Bun, Deno e runtime edge.
|
|
40
|
+
- **`remix/cookie`**: Parsing e serializzazione di cookie crittograficamente sicuri.
|
|
41
|
+
|
|
42
|
+
In combinazione con **Intlayer**, ottieni un sistema completo di internazionalizzazione che garantisce sicurezza in fase di compilazione, traduzioni automatizzate con IA, rendering lato server a zero overhead e routing fluido per locale.
|
|
43
|
+
|
|
44
|
+
## Sommario
|
|
45
|
+
|
|
46
|
+
<TOC/>
|
|
47
|
+
|
|
48
|
+
## Perché scegliere Intlayer rispetto alle alternative?
|
|
49
|
+
|
|
50
|
+
Rispetto alle soluzioni tradizionali come `i18next` o caricatori di traduzioni personalizzati, Intlayer offre un'esperienza di sviluppo integrata e ottimizzata per l'architettura web moderna:
|
|
51
|
+
|
|
52
|
+
<AccordionGroup>
|
|
53
|
+
<Accordion header="Copertura completa di Remix 3 e degli standard web">
|
|
54
|
+
|
|
55
|
+
Intlayer è progettato per funzionare nativamente con gli standard web (`Request`, `Response`, `Headers` e `URL`). Si integra perfettamente nel router Fetch di Remix 3 tramite un middleware leggero, estraendo i valori di lingua dai percorsi URL, dai cookie o dagli header `Accept-Language` senza vincolarti a un runtime specifico.
|
|
56
|
+
|
|
57
|
+
</Accordion>
|
|
58
|
+
<Accordion header="Dichiarazioni di contenuto con sicurezza dei tipi">
|
|
59
|
+
|
|
60
|
+
Dì addio alle chiavi JSON non tipizzate e agli errori di runtime dovuti a chiavi mancanti. Intlayer applica i controlli di TypeScript su tutte le lingue dichiarate, avvisandoti in fase di compilazione se una traduzione manca o non è valida.
|
|
61
|
+
|
|
62
|
+
</Accordion>
|
|
63
|
+
<Accordion header="Zero overhead di bundle sul server">
|
|
64
|
+
|
|
65
|
+
Remix 3 esegue il rendering dei componenti JSX sul server e trasmette l'HTML al client. Solo il testo risolto per la lingua richiesta viene inviato nel flusso di output. Non sono necessari bundle di idratazione client né pesanti cataloghi di traduzione, a meno che un componente non sia esplicitamente contrassegnato come `clientEntry`.
|
|
66
|
+
|
|
67
|
+
</Accordion>
|
|
68
|
+
<Accordion header="Pronto per agenti IA e automazione">
|
|
69
|
+
|
|
70
|
+
Intlayer posiziona le dichiarazioni di contenuto (`.content.ts`) accanto alla logica delle route, riducendo il contesto di token necessario per i Large Language Models (LLM). I comandi CLI integrati come `intlayer fill` e `intlayer test` ti consentono di automatizzare le traduzioni nelle pipeline di CI/CD al costo diretto del tuo fornitore di IA.
|
|
71
|
+
|
|
72
|
+
</Accordion>
|
|
73
|
+
<Accordion header="Editor visivo e integrazione con CMS">
|
|
74
|
+
|
|
75
|
+
Oltre ai flussi di lavoro incentrati sul codice, Intlayer fornisce un [Editor Visivo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md) self-hosted e un [CMS Remoto](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_CMS.md), consentendo a redattori e traduttori di aggiornare i contenuti senza dover ridistribuire l'applicazione.
|
|
76
|
+
|
|
77
|
+
</Accordion>
|
|
78
|
+
</AccordionGroup>
|
|
79
|
+
|
|
80
|
+
## Guida passo dopo passo
|
|
81
|
+
|
|
82
|
+
<Tabs defaultTab="code">
|
|
83
|
+
<Tab label="Codice" value="code">
|
|
84
|
+
|
|
85
|
+
<iframe
|
|
86
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-remix-3-template?file=intlayer.config.ts"
|
|
87
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
88
|
+
title="Demo CodeSandbox - Come internazionalizzare la tua applicazione con Intlayer"
|
|
89
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
90
|
+
loading="lazy"
|
|
91
|
+
/>
|
|
92
|
+
|
|
93
|
+
</Tab>
|
|
94
|
+
<Tab label="Demo" value="demo">
|
|
95
|
+
|
|
96
|
+
<iframe
|
|
97
|
+
src="https://intlayer-remix-3-template.vercel.app"
|
|
98
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
99
|
+
title="Demo Template Remix 3 Intlayer"
|
|
100
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
101
|
+
loading="lazy"
|
|
102
|
+
/>
|
|
103
|
+
|
|
104
|
+
</Tab>
|
|
105
|
+
</Tabs>
|
|
106
|
+
|
|
107
|
+
Consulta il [Modello di Applicazione](https://github.com/aymericzip/intlayer-remix-3-template) su GitHub.
|
|
108
|
+
|
|
109
|
+
<Steps>
|
|
110
|
+
<Step number={1} title="Installare le dipendenze">
|
|
111
|
+
|
|
112
|
+
Installa `intlayer` e `remix` (versione 3) utilizzando il tuo gestore di pacchetti preferito:
|
|
113
|
+
|
|
114
|
+
```bash packageManager="npm"
|
|
115
|
+
npm install intlayer remix@next
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
```bash packageManager="pnpm"
|
|
119
|
+
pnpm add intlayer remix@next
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```bash packageManager="yarn"
|
|
123
|
+
yarn add intlayer remix@next
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```bash packageManager="bun"
|
|
127
|
+
bun add intlayer remix@next
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- **`intlayer`**: Motore principale di internazionalizzazione per la gestione della configurazione, la dichiarazione dei dizionari (`t()`, `Dictionary`), gli strumenti CLI e l'interprete a runtime.
|
|
131
|
+
- **`remix`**: Il pacchetto unificato del framework Remix 3 che esporta `remix/router`, `remix/routes`, `remix/ui`, `remix/middleware/render` e `remix/node-fetch-server`.
|
|
132
|
+
|
|
133
|
+
</Step>
|
|
134
|
+
<Step number={2} title="Configurare Intlayer">
|
|
135
|
+
|
|
136
|
+
Crea un file `intlayer.config.ts` nella radice del progetto per dichiarare le lingue supportate e le impostazioni di internazionalizzazione:
|
|
137
|
+
|
|
138
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
139
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
140
|
+
|
|
141
|
+
const config: IntlayerConfig = {
|
|
142
|
+
internationalization: {
|
|
143
|
+
locales: [
|
|
144
|
+
Locales.ENGLISH,
|
|
145
|
+
Locales.FRENCH,
|
|
146
|
+
Locales.SPANISH,
|
|
147
|
+
Locales.ITALIAN,
|
|
148
|
+
],
|
|
149
|
+
defaultLocale: Locales.ENGLISH,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export default config;
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
157
|
+
import { Locales } from "intlayer";
|
|
158
|
+
|
|
159
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
160
|
+
const config = {
|
|
161
|
+
internationalization: {
|
|
162
|
+
locales: [
|
|
163
|
+
Locales.ENGLISH,
|
|
164
|
+
Locales.FRENCH,
|
|
165
|
+
Locales.SPANISH,
|
|
166
|
+
Locales.ITALIAN,
|
|
167
|
+
],
|
|
168
|
+
defaultLocale: Locales.ENGLISH,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export default config;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
176
|
+
const { Locales } = require("intlayer");
|
|
177
|
+
|
|
178
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
179
|
+
const config = {
|
|
180
|
+
internationalization: {
|
|
181
|
+
locales: [
|
|
182
|
+
Locales.ENGLISH,
|
|
183
|
+
Locales.FRENCH,
|
|
184
|
+
Locales.SPANISH,
|
|
185
|
+
Locales.ITALIAN,
|
|
186
|
+
],
|
|
187
|
+
defaultLocale: Locales.ENGLISH,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
module.exports = config;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
> Per ulteriori opzioni di configurazione, consulta la [documentazione di configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md).
|
|
195
|
+
|
|
196
|
+
</Step>
|
|
197
|
+
<Step number={3} title="Dichiarare i contenuti multilingue">
|
|
198
|
+
|
|
199
|
+
Dichiara i tuoi contenuti localizzati in un file `.content.ts`:
|
|
200
|
+
|
|
201
|
+
```typescript fileName="src/home.content.ts" contentDeclarationFormat={["typescript", "esm"]}
|
|
202
|
+
import { t, type Dictionary } from "intlayer";
|
|
203
|
+
|
|
204
|
+
const homeContent = {
|
|
205
|
+
key: "home",
|
|
206
|
+
content: {
|
|
207
|
+
title: t({
|
|
208
|
+
it: "Benvenuto su Remix 3",
|
|
209
|
+
en: "Welcome to Remix 3",
|
|
210
|
+
fr: "Bienvenue sur Remix 3",
|
|
211
|
+
es: "Bienvenido a Remix 3",
|
|
212
|
+
}),
|
|
213
|
+
description: t({
|
|
214
|
+
it: "Un'applicazione componibile basata su standard web con i18n nativa.",
|
|
215
|
+
en: "A composable, web-standard application with native i18n.",
|
|
216
|
+
fr: "Une application composable basée sur les standards web avec i18n native.",
|
|
217
|
+
es: "Una aplicación componible basada en estándares web con i18n nativa.",
|
|
218
|
+
}),
|
|
219
|
+
switchLanguage: t({
|
|
220
|
+
it: "Cambia lingua:",
|
|
221
|
+
en: "Switch language:",
|
|
222
|
+
fr: "Changer de langue :",
|
|
223
|
+
es: "Cambiar idioma:",
|
|
224
|
+
}),
|
|
225
|
+
},
|
|
226
|
+
} satisfies Dictionary;
|
|
227
|
+
|
|
228
|
+
export default homeContent;
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
> Intlayer supporta anche i formati JSON, YAML e CommonJS. Vedi la [Documentazione sulla Dichiarazione dei Contenuti](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/content_file.md).
|
|
232
|
+
|
|
233
|
+
</Step>
|
|
234
|
+
<Step number={4} title="Compilare i dizionari Intlayer">
|
|
235
|
+
|
|
236
|
+
Compila le definizioni dei dizionari per generare i tipi TypeScript e i registri di runtime:
|
|
237
|
+
|
|
238
|
+
```bash packageManager="npm"
|
|
239
|
+
npx intlayer build
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
```bash packageManager="pnpm"
|
|
243
|
+
pnpm dlx intlayer build
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```bash packageManager="yarn"
|
|
247
|
+
yarn dlx intlayer build
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
```bash packageManager="bun"
|
|
251
|
+
bun x intlayer build
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Ciò compila i tuoi contenuti nella directory degli artefatti `.intlayer`, offrendo completamento automatico completo in TypeScript e un rapido recupero dei dizionari.
|
|
255
|
+
|
|
256
|
+
</Step>
|
|
257
|
+
<Step number={5} title="Implementare il middleware Intlayer">
|
|
258
|
+
|
|
259
|
+
Remix 3 fornisce una pipeline di middleware componibile tramite `createRouter({ middleware: [...] })`.
|
|
260
|
+
|
|
261
|
+
Crea un middleware Intlayer che risolve la lingua di ciascuna richiesta in entrata seguendo:
|
|
262
|
+
|
|
263
|
+
1. Il prefisso del percorso URL tramite `getLocaleFromPath` di Intlayer (ad es. `/it` o `/fr`).
|
|
264
|
+
2. L'utility `getLocale` di Intlayer, che negozia automaticamente attraverso i cookie di memoria (`INTLAYER_LOCALE`), header personalizzati (`x-intlayer-locale`), header standard `Accept-Language` e la tua `defaultLocale`.
|
|
265
|
+
|
|
266
|
+
```typescript fileName="src/middleware/intlayer.ts" codeFormat={["typescript", "esm"]}
|
|
267
|
+
import {
|
|
268
|
+
defaultLocale,
|
|
269
|
+
getCookie,
|
|
270
|
+
getLocale,
|
|
271
|
+
getLocaleFromPath,
|
|
272
|
+
type Locale,
|
|
273
|
+
} from "intlayer";
|
|
274
|
+
import { createContextKey, type Middleware } from "remix/router";
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Chiave di contesto con sicurezza dei tipi per recuperare la lingua risolta dal RequestContext di Remix 3.
|
|
278
|
+
*/
|
|
279
|
+
export const localeKey = createContextKey<Locale>(defaultLocale);
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Middleware Intlayer per Remix 3.
|
|
283
|
+
*
|
|
284
|
+
* Risolve la lingua della richiesta secondo la seguente priorità:
|
|
285
|
+
* 1. Prefisso del percorso URL (es. `/it/...`) tramite `getLocaleFromPath`
|
|
286
|
+
* 2. Negoziazione di header e cookie tramite `getLocale` (cookie, header personalizzato, Accept-Language, fallback defaultLocale)
|
|
287
|
+
*
|
|
288
|
+
* Associa la lingua risolta al RequestContext di Remix 3.
|
|
289
|
+
*/
|
|
290
|
+
export const intlayer = (): Middleware => {
|
|
291
|
+
return async (context, next) => {
|
|
292
|
+
// Rilevamento percorso (/it/about -> "it", /about -> undefined)
|
|
293
|
+
const pathLocale = getLocaleFromPath(context.url.pathname);
|
|
294
|
+
|
|
295
|
+
if (pathLocale) {
|
|
296
|
+
// Assegna la lingua risolta al contesto di richiesta di Remix 3
|
|
297
|
+
context.set(localeKey, pathLocale);
|
|
298
|
+
|
|
299
|
+
return next();
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const storedLocale = await getLocale({
|
|
303
|
+
getHeader: (name) => context.headers.get(name),
|
|
304
|
+
getCookie: (name) =>
|
|
305
|
+
getCookie(name, context.headers.get("cookie") ?? undefined),
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Assegna la lingua risolta al contesto di richiesta di Remix 3
|
|
309
|
+
context.set(localeKey, storedLocale ?? defaultLocale);
|
|
310
|
+
|
|
311
|
+
return next();
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
</Step>
|
|
317
|
+
<Step number={6} title="Definire route con sicurezza dei tipi">
|
|
318
|
+
|
|
319
|
+
Definisci le route della tua applicazione utilizzando `route()` da `remix/routes`:
|
|
320
|
+
|
|
321
|
+
```typescript fileName="src/routes.ts" codeFormat={["typescript", "esm"]}
|
|
322
|
+
import { route } from "remix/routes";
|
|
323
|
+
|
|
324
|
+
export const routes = route({
|
|
325
|
+
// Route della lingua predefinita
|
|
326
|
+
home: "/",
|
|
327
|
+
|
|
328
|
+
// Route localizzata con segmento dinamico :locale
|
|
329
|
+
localizedHome: "/:locale",
|
|
330
|
+
});
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
L'utilizzo di `route()` fornisce una generazione di URL type-safe in tutta l'applicazione:
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
routes.home.href(); // "/"
|
|
337
|
+
routes.localizedHome.href({ locale: "it" }); // "/it"
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
</Step>
|
|
341
|
+
<Step number={7} title="Renderizzare pagine localizzate con JSX">
|
|
342
|
+
|
|
343
|
+
Remix 3 esegue il rendering dell'interfaccia utente con componenti JSX provenienti da `remix/ui`. Un componente è una **funzione di setup** che riceve un `Handle` e restituisce una **funzione di render**. Il setup viene eseguito una sola volta per istanza, il render viene eseguito a ogni aggiornamento e le props vengono lette tramite `handle.props`.
|
|
344
|
+
|
|
345
|
+
Inizia con una shell condivisa `Document` che imposta gli attributi `<html lang="..." dir="...">` a partire dalla lingua risolta:
|
|
346
|
+
|
|
347
|
+
```tsx fileName="src/views/document.tsx" codeFormat={["typescript", "esm"]}
|
|
348
|
+
import { getHTMLTextDir, type Locale } from "intlayer";
|
|
349
|
+
import type { Handle, RemixNode } from "remix/ui";
|
|
350
|
+
|
|
351
|
+
type DocumentProps = {
|
|
352
|
+
locale: Locale;
|
|
353
|
+
title: string;
|
|
354
|
+
children?: RemixNode;
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
export const Document = (handle: Handle<DocumentProps>) => () => {
|
|
358
|
+
const { locale, title, children } = handle.props;
|
|
359
|
+
|
|
360
|
+
return (
|
|
361
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
362
|
+
<head>
|
|
363
|
+
<meta charSet="utf-8" />
|
|
364
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
365
|
+
<title>{title}</title>
|
|
366
|
+
</head>
|
|
367
|
+
<body>{children}</body>
|
|
368
|
+
</html>
|
|
369
|
+
);
|
|
370
|
+
};
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Crea quindi la pagina iniziale. Estrae il dizionario localizzato con `getIntlayer` e mostra un selettore di lingua:
|
|
374
|
+
|
|
375
|
+
```tsx fileName="src/views/home.tsx" codeFormat={["typescript", "esm"]}
|
|
376
|
+
import {
|
|
377
|
+
getIntlayer,
|
|
378
|
+
getLocaleName,
|
|
379
|
+
getLocalizedPath,
|
|
380
|
+
type Locale,
|
|
381
|
+
locales,
|
|
382
|
+
} from "intlayer";
|
|
383
|
+
import type { Handle } from "remix/ui";
|
|
384
|
+
import { routes } from "../routes";
|
|
385
|
+
import { Document } from "./document";
|
|
386
|
+
|
|
387
|
+
type HomePageProps = {
|
|
388
|
+
locale: Locale;
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
392
|
+
const { locale } = handle.props;
|
|
393
|
+
const home = getIntlayer("home", locale);
|
|
394
|
+
|
|
395
|
+
return (
|
|
396
|
+
<Document locale={locale} title={home.title}>
|
|
397
|
+
<header>
|
|
398
|
+
<nav aria-label="Languages">
|
|
399
|
+
<span>{home.switchLanguage}</span>
|
|
400
|
+
{locales.map((targetLocale) => {
|
|
401
|
+
const isActive = targetLocale === locale;
|
|
402
|
+
|
|
403
|
+
return (
|
|
404
|
+
<a
|
|
405
|
+
key={targetLocale}
|
|
406
|
+
href={getLocalizedPath(routes.home.href(), targetLocale)}
|
|
407
|
+
class={isActive ? "active" : undefined}
|
|
408
|
+
aria-current={isActive ? "page" : undefined}
|
|
409
|
+
>
|
|
410
|
+
{getLocaleName(targetLocale, locale)}
|
|
411
|
+
</a>
|
|
412
|
+
);
|
|
413
|
+
})}
|
|
414
|
+
</nav>
|
|
415
|
+
</header>
|
|
416
|
+
<main>
|
|
417
|
+
<h1>{home.title}</h1>
|
|
418
|
+
<p>{home.description}</p>
|
|
419
|
+
</main>
|
|
420
|
+
</Document>
|
|
421
|
+
);
|
|
422
|
+
};
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
> Il JSX di Remix non è React: non ci sono hook, `class` viene scritto così com'è (è accettato anche `className`) e i re-render vengono attivati esplicitamente con `handle.update()`. I valori interpolati vengono sottoposti automaticamente a escaping.
|
|
426
|
+
|
|
427
|
+
</Step>
|
|
428
|
+
<Step number={8} title="Collegare il router e il server">
|
|
429
|
+
|
|
430
|
+
Aggiungi il middleware `render()` di `remix/middleware/render` accanto al middleware di Intlayer. Installa `context.render(node, init)` su ogni richiesta, trasmettendo l'albero JSX in una `Response` HTML (anteponendo `<!DOCTYPE html>` e impostando l'header `Content-Type`):
|
|
431
|
+
|
|
432
|
+
```tsx fileName="src/router.tsx" codeFormat={["typescript", "esm"]}
|
|
433
|
+
import { isDeclaredLocale } from "intlayer";
|
|
434
|
+
import { render } from "remix/middleware/render";
|
|
435
|
+
import { createRouter } from "remix/router";
|
|
436
|
+
import { intlayer, localeKey } from "./middleware/intlayer";
|
|
437
|
+
import { routes } from "./routes";
|
|
438
|
+
import { HomePage } from "./views/home";
|
|
439
|
+
|
|
440
|
+
// 1. Inizializzare il router con i middleware Intlayer + render
|
|
441
|
+
export const router = createRouter({
|
|
442
|
+
middleware: [intlayer(), render()],
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
// 2. Mappare i gestori di route
|
|
446
|
+
router.map(routes, {
|
|
447
|
+
actions: {
|
|
448
|
+
// Route per la lingua predefinita
|
|
449
|
+
home(context) {
|
|
450
|
+
const locale = context.get(localeKey);
|
|
451
|
+
return context.render(<HomePage locale={locale} />);
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
// Route localizzata
|
|
455
|
+
localizedHome(context) {
|
|
456
|
+
if (!isDeclaredLocale(context.params.locale)) {
|
|
457
|
+
return new Response("Not Found", { status: 404 });
|
|
458
|
+
}
|
|
459
|
+
const locale = context.get(localeKey);
|
|
460
|
+
return context.render(<HomePage locale={locale} />);
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
});
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
> `context.render` accetta un `ResponseInit` opzionale come secondo argomento, ad es. `context.render(<NotFoundPage locale={locale} />, { status: 404 })`.
|
|
467
|
+
|
|
468
|
+
Infine, esponi il router tramite un gestore `fetch` standard. Lo stesso router funziona su Node.js, Bun, Deno e Cloudflare Workers:
|
|
469
|
+
|
|
470
|
+
```typescript fileName="src/server.ts" codeFormat={["typescript", "esm"]}
|
|
471
|
+
import * as http from "node:http";
|
|
472
|
+
import { createRequestListener } from "remix/node-fetch-server";
|
|
473
|
+
import { router } from "./router";
|
|
474
|
+
|
|
475
|
+
const PORT = Number(process.env.PORT || 3000);
|
|
476
|
+
|
|
477
|
+
// Node.js
|
|
478
|
+
const server = http.createServer(
|
|
479
|
+
createRequestListener((request) => router.fetch(request))
|
|
480
|
+
);
|
|
481
|
+
|
|
482
|
+
server.listen(PORT, () => {
|
|
483
|
+
console.log(`Server in esecuzione su http://localhost:${PORT}`);
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
// Bun / Deno / Cloudflare Workers
|
|
487
|
+
export default {
|
|
488
|
+
port: PORT,
|
|
489
|
+
fetch(request: Request) {
|
|
490
|
+
return router.fetch(request);
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
</Step>
|
|
496
|
+
<Step number={9} title="Verificare e completare automaticamente le traduzioni">
|
|
497
|
+
|
|
498
|
+
Intlayer include una CLI per rilevare le traduzioni mancanti e completarle automaticamente tramite intelligenza artificiale:
|
|
499
|
+
|
|
500
|
+
```bash packageManager="npm"
|
|
501
|
+
# Verifica le traduzioni mancanti
|
|
502
|
+
npx intlayer test
|
|
503
|
+
|
|
504
|
+
# Completa le traduzioni mancanti con l'IA
|
|
505
|
+
npx intlayer fill
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
```bash packageManager="pnpm"
|
|
509
|
+
# Verifica le traduzioni mancanti
|
|
510
|
+
pnpm dlx intlayer test
|
|
511
|
+
|
|
512
|
+
# Completa le traduzioni mancanti con l'IA
|
|
513
|
+
pnpm dlx intlayer fill
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
```bash packageManager="yarn"
|
|
517
|
+
# Verifica le traduzioni mancanti
|
|
518
|
+
yarn dlx intlayer test
|
|
519
|
+
|
|
520
|
+
# Completa le traduzioni mancanti con l'IA
|
|
521
|
+
yarn dlx intlayer fill
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
```bash packageManager="bun"
|
|
525
|
+
# Verifica le traduzioni mancanti
|
|
526
|
+
bun x intlayer test
|
|
527
|
+
|
|
528
|
+
# Completa le traduzioni mancanti con l'IA
|
|
529
|
+
bun x intlayer fill
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
</Step>
|
|
533
|
+
</Steps>
|
|
534
|
+
|
|
535
|
+
## Configurazione TypeScript
|
|
536
|
+
|
|
537
|
+
Punta JSX al runtime `remix/ui` e assicurati che il tuo `tsconfig.json` includa i tipi generati in `.intlayer`:
|
|
538
|
+
|
|
539
|
+
```json fileName="tsconfig.json"
|
|
540
|
+
{
|
|
541
|
+
"compilerOptions": {
|
|
542
|
+
"moduleResolution": "Bundler",
|
|
543
|
+
"module": "ESNext",
|
|
544
|
+
"target": "ESNext",
|
|
545
|
+
"jsx": "react-jsx",
|
|
546
|
+
"jsxImportSource": "remix/ui",
|
|
547
|
+
"skipLibCheck": true,
|
|
548
|
+
"strict": true
|
|
549
|
+
},
|
|
550
|
+
"include": ["src/**/*", ".intlayer/**/*.ts"]
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
> `jsxImportSource: "remix/ui"` è ciò che permette a `<HomePage />` di risolversi con il `createElement` di Remix anziché con quello di React.
|
|
555
|
+
|
|
556
|
+
## Conclusione
|
|
557
|
+
|
|
558
|
+
Con Remix 3 e Intlayer, disponi di uno stack leggero, completamente tipizzato e multipiattaforma, fedele agli standard web aperti. La tua applicazione può scalare con facilità da semplici pagine marketing localizzate a servizi edge distribuiti globalmente.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
4
|
title: i18nライブラリのベンチマーク
|
|
5
5
|
description: パフォーマンスとバンドルサイズの観点から、Intlayerが他のi18nライブラリとどのように比較されるかをご覧ください。
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- benchmark
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.5.1
|
|
18
|
+
date: 2026-09-11
|
|
19
|
+
changes: "ベンチマーク結果を更新"
|
|
17
20
|
- version: 8.7.5
|
|
18
21
|
date: 2026-01-06
|
|
19
22
|
changes: "ベンチマーク初期化"
|