@intlayer/docs 9.5.0 → 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 +20 -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 +20 -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 +1 -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_nextjs_15.md +1 -1
- package/docs/ar/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/de/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/en/intlayer_with_nextjs_16.md +1 -1
- package/docs/en/intlayer_with_remix_3.md +540 -0
- 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_nextjs_15.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/hi/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/id/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/it/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/ja/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/pl/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/pt/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/ru/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/tr/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/uk/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/vi/intlayer_with_nextjs_16.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_nextjs_15.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.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 +20 -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,540 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-09
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
|
+
title: "Remix 3 i18n - Guide complet pour traduire votre application"
|
|
5
|
+
description: "Oubliez i18next. Le guide 2026 pour créer une application Remix 3 multilingue (i18n). Traduisez avec des agents IA et optimisez la taille du bundle, le SEO et les performances."
|
|
6
|
+
keywords:
|
|
7
|
+
- Internationalisation
|
|
8
|
+
- Documentation
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Remix 3
|
|
11
|
+
- Remix
|
|
12
|
+
- JavaScript
|
|
13
|
+
- TypeScript
|
|
14
|
+
- Standards 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: "Documentation initiale pour Remix 3"
|
|
25
|
+
author: aymericzip
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Traduisez votre site web Remix 3 avec Intlayer | Internationalisation (i18n)
|
|
29
|
+
|
|
30
|
+
Ce guide montre comment intégrer **Intlayer** pour une internationalisation fluide dans les applications **Remix 3** avec un routage sensible à la locale, des déclarations de contenu typées, des composants JSX rendus côté serveur et un support multi-runtime sur Node.js, Bun, Deno et Cloudflare Workers.
|
|
31
|
+
|
|
32
|
+
## Qu'est-ce que Remix 3 ?
|
|
33
|
+
|
|
34
|
+
**Remix 3** représente une évolution architecturale majeure vers un **framework web composable et agnostique au runtime, entièrement basé sur les standards web**. Plutôt que d'être lié à des bundlers spécifiques ou à des API serveur propriétaires, Remix 3 est distribué sous forme de packages composables à usage unique :
|
|
35
|
+
|
|
36
|
+
- **`remix/fetch-router`** (ou `remix/router`) : Routage léger et conforme aux standards basé sur l'API Fetch (`Request` et `Response`).
|
|
37
|
+
- **`remix/ui`** : Un modèle de composant JSX (`jsxImportSource: "remix/ui"`). Un composant est une fonction de setup qui renvoie une fonction de rendu, ce qui ressemble à React mais conserve l'état dans des fermetures JavaScript simples.
|
|
38
|
+
- **`remix/middleware/render`** : Installe `context.render(<Page />)` sur chaque requête, diffusant l'arbre JSX sous forme de `Response` HTML.
|
|
39
|
+
- **`remix/node-fetch-server`** : Adaptateurs de serveur pour Node.js, avec support natif pour Bun, Deno et les runtimes edge.
|
|
40
|
+
- **`remix/cookie`** : Analyse et sérialisation de cookies sécurisées par chiffrement.
|
|
41
|
+
|
|
42
|
+
Associé à **Intlayer**, vous bénéficiez d'un système d'internationalisation complet offrant une sécurité au moment de la compilation, des traductions automatisées par IA, un rendu serveur sans surcharge et un routage fluide par locale.
|
|
43
|
+
|
|
44
|
+
## Table des matières
|
|
45
|
+
|
|
46
|
+
<TOC/>
|
|
47
|
+
|
|
48
|
+
## Pourquoi choisir Intlayer plutôt que les alternatives ?
|
|
49
|
+
|
|
50
|
+
Comparé aux solutions traditionnelles telles que `i18next` ou aux chargeurs de traduction sur mesure, Intlayer offre une expérience développeur intégrée, optimisée pour l'architecture web moderne :
|
|
51
|
+
|
|
52
|
+
<AccordionGroup>
|
|
53
|
+
<Accordion header="Couverture complète de Remix 3 et des standards web">
|
|
54
|
+
|
|
55
|
+
Intlayer est conçu pour fonctionner nativement avec les standards web (`Request`, `Response`, `Headers` et `URL`). Il s'intègre naturellement dans le Fetch router de Remix 3 via un middleware léger, extrayant les locales des chemins d'URL, des cookies ou des en-têtes `Accept-Language` sans dépendre d'un runtime spécifique.
|
|
56
|
+
|
|
57
|
+
</Accordion>
|
|
58
|
+
<Accordion header="Déclarations de contenu sécurisées par le typage">
|
|
59
|
+
|
|
60
|
+
Fini les clés JSON non vérifiées et les erreurs de clés manquantes au runtime. Intlayer applique les vérifications TypeScript sur toutes les locales déclarées, vous avertissant dès la compilation si une traduction est absente ou invalide.
|
|
61
|
+
|
|
62
|
+
</Accordion>
|
|
63
|
+
<Accordion header="Zéro surcharge de bundle côté serveur">
|
|
64
|
+
|
|
65
|
+
Remix 3 effectue le rendu des composants JSX sur le serveur et diffuse le flux HTML vers le client. Seul le texte résolu pour la locale demandée se retrouve dans le flux de sortie. Aucun bundle d'hydratation client ni catalogue de traduction encombrant n'est requis, sauf si un composant est explicitement marqué comme `clientEntry`.
|
|
66
|
+
|
|
67
|
+
</Accordion>
|
|
68
|
+
<Accordion header="Prêt pour les agents IA et l'automatisation">
|
|
69
|
+
|
|
70
|
+
Intlayer colocalise les déclarations de contenu (`.content.ts`) avec la logique de vos routes, réduisant le contexte de tokens nécessaire pour les grands modèles de langage (LLM). Les commandes CLI intégrées telles que `intlayer fill` et `intlayer test` vous permettent d'automatiser les traductions dans vos pipelines CI/CD au coût direct de votre fournisseur d'IA.
|
|
71
|
+
|
|
72
|
+
</Accordion>
|
|
73
|
+
<Accordion header="Éditeur visuel et intégration CMS">
|
|
74
|
+
|
|
75
|
+
Au-delà des flux de travail orientés code, Intlayer propose un [Éditeur Visuel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) auto-hébergé et un [CMS Distant](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md), permettant aux éditeurs, traducteurs et rédacteurs de modifier le contenu sans redéployer l'application.
|
|
76
|
+
|
|
77
|
+
</Accordion>
|
|
78
|
+
</AccordionGroup>
|
|
79
|
+
|
|
80
|
+
## Guide étape par étape
|
|
81
|
+
|
|
82
|
+
<Tabs defaultTab="code">
|
|
83
|
+
<Tab label="Code" 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="Démo CodeSandbox - Comment internationaliser votre application avec 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="Démo" 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="Démo 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
|
+
Consultez le [Modèle d'Application](https://github.com/aymericzip/intlayer-remix-3-template) sur GitHub.
|
|
108
|
+
|
|
109
|
+
<Steps>
|
|
110
|
+
<Step number={1} title="Installer les dépendances">
|
|
111
|
+
|
|
112
|
+
Installez `intlayer` et `remix` (version 3) à l'aide de votre gestionnaire de paquets préféré :
|
|
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`** : Moteur d'internationalisation de base gérant la configuration, la déclaration des dictionnaires (`t()`, `Dictionary`), les outils CLI et l'interpréteur de runtime.
|
|
131
|
+
- **`remix`** : Package unifié du framework Remix 3 exportant `remix/router`, `remix/routes`, `remix/ui`, `remix/middleware/render` et `remix/node-fetch-server`.
|
|
132
|
+
|
|
133
|
+
</Step>
|
|
134
|
+
<Step number={2} title="Configurer Intlayer">
|
|
135
|
+
|
|
136
|
+
Créez un fichier `intlayer.config.ts` à la racine de votre projet pour déclarer les langues prises en charge et les paramètres d'internationalisation :
|
|
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: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
144
|
+
defaultLocale: Locales.ENGLISH,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
export default config;
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
152
|
+
import { Locales } from "intlayer";
|
|
153
|
+
|
|
154
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
155
|
+
const config = {
|
|
156
|
+
internationalization: {
|
|
157
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
158
|
+
defaultLocale: Locales.ENGLISH,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export default config;
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
166
|
+
const { Locales } = require("intlayer");
|
|
167
|
+
|
|
168
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
169
|
+
const config = {
|
|
170
|
+
internationalization: {
|
|
171
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
172
|
+
defaultLocale: Locales.ENGLISH,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
module.exports = config;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
> Pour d'autres paramètres de configuration (comme le mode strict ou les préférences de stockage de routage), consultez la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
|
|
180
|
+
|
|
181
|
+
</Step>
|
|
182
|
+
<Step number={3} title="Déclarer votre contenu multilingue">
|
|
183
|
+
|
|
184
|
+
Déclarez votre contenu localisé dans un fichier `.content.ts` :
|
|
185
|
+
|
|
186
|
+
```typescript fileName="src/home.content.ts" contentDeclarationFormat={["typescript", "esm"]}
|
|
187
|
+
import { t, type Dictionary } from "intlayer";
|
|
188
|
+
|
|
189
|
+
const homeContent = {
|
|
190
|
+
key: "home",
|
|
191
|
+
content: {
|
|
192
|
+
title: t({
|
|
193
|
+
fr: "Bienvenue sur Remix 3",
|
|
194
|
+
en: "Welcome to Remix 3",
|
|
195
|
+
es: "Bienvenido a Remix 3",
|
|
196
|
+
}),
|
|
197
|
+
description: t({
|
|
198
|
+
fr: "Une application composable basée sur les standards web avec i18n native.",
|
|
199
|
+
en: "A composable, web-standard application with native i18n.",
|
|
200
|
+
es: "Una aplicación componible basada en estándares web con i18n nativa.",
|
|
201
|
+
}),
|
|
202
|
+
switchLanguage: t({
|
|
203
|
+
fr: "Changer de langue :",
|
|
204
|
+
en: "Switch language:",
|
|
205
|
+
es: "Cambiar idioma:",
|
|
206
|
+
}),
|
|
207
|
+
},
|
|
208
|
+
} satisfies Dictionary;
|
|
209
|
+
|
|
210
|
+
export default homeContent;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> Intlayer prend également en charge les formats JSON, YAML et CommonJS. Voir la [Documentation sur la Déclaration de Contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md).
|
|
214
|
+
|
|
215
|
+
</Step>
|
|
216
|
+
<Step number={4} title="Générer les dictionnaires Intlayer">
|
|
217
|
+
|
|
218
|
+
Compilez les définitions de dictionnaires pour générer les types TypeScript et les registres de runtime :
|
|
219
|
+
|
|
220
|
+
```bash packageManager="npm"
|
|
221
|
+
npx intlayer build
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```bash packageManager="pnpm"
|
|
225
|
+
pnpm dlx intlayer build
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
```bash packageManager="yarn"
|
|
229
|
+
yarn dlx intlayer build
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```bash packageManager="bun"
|
|
233
|
+
bun x intlayer build
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Cette commande compile votre contenu dans le répertoire `.intlayer`, offrant une auto-complétion TypeScript complète et un accès rapide aux dictionnaires.
|
|
237
|
+
|
|
238
|
+
</Step>
|
|
239
|
+
<Step number={5} title="Implémenter le middleware Intlayer">
|
|
240
|
+
|
|
241
|
+
Remix 3 propose un pipeline de middlewares composable via `createRouter({ middleware: [...] })`.
|
|
242
|
+
|
|
243
|
+
Créez un middleware Intlayer qui résout la locale de chaque requête entrante selon :
|
|
244
|
+
|
|
245
|
+
1. Le préfixe d'URL via `getLocaleFromPath` d'Intlayer (par exemple `/fr` ou `/es`).
|
|
246
|
+
2. L'utilitaire `getLocale` d'Intlayer, qui négocie automatiquement via les cookies de stockage (`INTLAYER_LOCALE`), les en-têtes personnalisés (`x-intlayer-locale`), l'en-tête standard `Accept-Language` et votre `defaultLocale`.
|
|
247
|
+
|
|
248
|
+
```typescript fileName="src/middleware/intlayer.ts" codeFormat={["typescript", "esm"]}
|
|
249
|
+
import {
|
|
250
|
+
defaultLocale,
|
|
251
|
+
getCookie,
|
|
252
|
+
getLocale,
|
|
253
|
+
getLocaleFromPath,
|
|
254
|
+
type Locale,
|
|
255
|
+
} from "intlayer";
|
|
256
|
+
import { createContextKey, type Middleware } from "remix/router";
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Clé de contexte typée pour récupérer la locale résolue depuis le RequestContext de Remix 3.
|
|
260
|
+
*/
|
|
261
|
+
export const localeKey = createContextKey<Locale>(defaultLocale);
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Middleware Intlayer pour Remix 3.
|
|
265
|
+
*
|
|
266
|
+
* Résout la locale de la requête selon l'ordre de priorité suivant :
|
|
267
|
+
* 1. Préfixe du chemin d'URL (ex. `/fr/...`) via `getLocaleFromPath`
|
|
268
|
+
* 2. Négociation des en-têtes et du stockage via `getLocale` (cookie, en-tête personnalisé, négociation Accept-Language, repli sur defaultLocale)
|
|
269
|
+
*
|
|
270
|
+
* Attache la locale résolue au RequestContext de Remix 3.
|
|
271
|
+
*/
|
|
272
|
+
export const intlayer = (): Middleware => {
|
|
273
|
+
return async (context, next) => {
|
|
274
|
+
// Détection du chemin (/fr/about -> "fr", /about -> undefined)
|
|
275
|
+
const pathLocale = getLocaleFromPath(context.url.pathname);
|
|
276
|
+
|
|
277
|
+
if (pathLocale) {
|
|
278
|
+
// Attacher la locale résolue au contexte de requête Remix 3
|
|
279
|
+
context.set(localeKey, pathLocale);
|
|
280
|
+
|
|
281
|
+
return next();
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const storedLocale = await getLocale({
|
|
285
|
+
getHeader: (name) => context.headers.get(name),
|
|
286
|
+
getCookie: (name) =>
|
|
287
|
+
getCookie(name, context.headers.get("cookie") ?? undefined),
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
// Attacher la locale résolue au contexte de requête Remix 3
|
|
291
|
+
context.set(localeKey, storedLocale ?? defaultLocale);
|
|
292
|
+
|
|
293
|
+
return next();
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
</Step>
|
|
299
|
+
<Step number={6} title="Définir des routes typées">
|
|
300
|
+
|
|
301
|
+
Définissez vos routes d'application à l'aide de `route()` issu de `remix/routes` :
|
|
302
|
+
|
|
303
|
+
```typescript fileName="src/routes.ts" codeFormat={["typescript", "esm"]}
|
|
304
|
+
import { route } from "remix/routes";
|
|
305
|
+
|
|
306
|
+
export const routes = route({
|
|
307
|
+
// Route pour la locale par défaut
|
|
308
|
+
home: "/",
|
|
309
|
+
|
|
310
|
+
// Route localisée avec segment dynamique :locale
|
|
311
|
+
localizedHome: "/:locale",
|
|
312
|
+
});
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
L'utilisation de `route()` garantit la génération d'URL typées dans toute votre application :
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
routes.home.href(); // "/"
|
|
319
|
+
routes.localizedHome.href({ locale: "fr" }); // "/fr"
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
</Step>
|
|
323
|
+
<Step number={7} title="Afficher des pages localisées avec JSX">
|
|
324
|
+
|
|
325
|
+
Remix 3 effectue le rendu de l'interface utilisateur avec des composants JSX issus de `remix/ui`. Un composant est une **fonction de setup** qui reçoit un `Handle` et renvoie une **fonction de rendu**. Le setup s'exécute une seule fois par instance, le rendu s'exécute à chaque mise à jour, et les props sont lues via `handle.props`.
|
|
326
|
+
|
|
327
|
+
Commencez par un shell partagé `Document` qui applique les attributs `<html lang="..." dir="...">` à partir de la locale résolue :
|
|
328
|
+
|
|
329
|
+
```tsx fileName="src/views/document.tsx" codeFormat={["typescript", "esm"]}
|
|
330
|
+
import { getHTMLTextDir, type Locale } from "intlayer";
|
|
331
|
+
import type { Handle, RemixNode } from "remix/ui";
|
|
332
|
+
|
|
333
|
+
type DocumentProps = {
|
|
334
|
+
locale: Locale;
|
|
335
|
+
title: string;
|
|
336
|
+
children?: RemixNode;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
export const Document = (handle: Handle<DocumentProps>) => () => {
|
|
340
|
+
const { locale, title, children } = handle.props;
|
|
341
|
+
|
|
342
|
+
return (
|
|
343
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
344
|
+
<head>
|
|
345
|
+
<meta charSet="utf-8" />
|
|
346
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
347
|
+
<title>{title}</title>
|
|
348
|
+
</head>
|
|
349
|
+
<body>{children}</body>
|
|
350
|
+
</html>
|
|
351
|
+
);
|
|
352
|
+
};
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Créez ensuite la page d'accueil. Elle extrait le dictionnaire localisé avec `getIntlayer` et affiche un sélecteur de langue :
|
|
356
|
+
|
|
357
|
+
```tsx fileName="src/views/home.tsx" codeFormat={["typescript", "esm"]}
|
|
358
|
+
import {
|
|
359
|
+
getIntlayer,
|
|
360
|
+
getLocaleName,
|
|
361
|
+
getLocalizedPath,
|
|
362
|
+
type Locale,
|
|
363
|
+
locales,
|
|
364
|
+
} from "intlayer";
|
|
365
|
+
import type { Handle } from "remix/ui";
|
|
366
|
+
import { routes } from "../routes";
|
|
367
|
+
import { Document } from "./document";
|
|
368
|
+
|
|
369
|
+
type HomePageProps = {
|
|
370
|
+
locale: Locale;
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
374
|
+
const { locale } = handle.props;
|
|
375
|
+
const home = getIntlayer("home", locale);
|
|
376
|
+
|
|
377
|
+
return (
|
|
378
|
+
<Document locale={locale} title={home.title}>
|
|
379
|
+
<header>
|
|
380
|
+
<nav aria-label="Languages">
|
|
381
|
+
<span>{home.switchLanguage}</span>
|
|
382
|
+
{locales.map((targetLocale) => {
|
|
383
|
+
const isActive = targetLocale === locale;
|
|
384
|
+
|
|
385
|
+
return (
|
|
386
|
+
<a
|
|
387
|
+
key={targetLocale}
|
|
388
|
+
href={getLocalizedPath(routes.home.href(), targetLocale)}
|
|
389
|
+
class={isActive ? "active" : undefined}
|
|
390
|
+
aria-current={isActive ? "page" : undefined}
|
|
391
|
+
>
|
|
392
|
+
{getLocaleName(targetLocale, locale)}
|
|
393
|
+
</a>
|
|
394
|
+
);
|
|
395
|
+
})}
|
|
396
|
+
</nav>
|
|
397
|
+
</header>
|
|
398
|
+
<main>
|
|
399
|
+
<h1>{home.title}</h1>
|
|
400
|
+
<p>{home.description}</p>
|
|
401
|
+
</main>
|
|
402
|
+
</Document>
|
|
403
|
+
);
|
|
404
|
+
};
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
> Le JSX de Remix n'est pas React : il n'y a pas de hooks, `class` s'écrit tel quel (`className` est également accepté) et les nouveaux rendus sont déclenchés explicitement avec `handle.update()`. Les valeurs interpolées sont automatiquement échappées.
|
|
408
|
+
|
|
409
|
+
</Step>
|
|
410
|
+
<Step number={8} title="Connecter le routeur et le serveur">
|
|
411
|
+
|
|
412
|
+
Ajoutez le middleware `render()` de `remix/middleware/render` aux côtés du middleware Intlayer. Il installe `context.render(node, init)` sur chaque requête, ce qui diffuse l'arbre JSX dans une `Response` HTML (en ajoutant `<!DOCTYPE html>` au début et en définissant l'en-tête `Content-Type`) :
|
|
413
|
+
|
|
414
|
+
```tsx fileName="src/router.tsx" codeFormat={["typescript", "esm"]}
|
|
415
|
+
import { isDeclaredLocale } from "intlayer";
|
|
416
|
+
import { render } from "remix/middleware/render";
|
|
417
|
+
import { createRouter } from "remix/router";
|
|
418
|
+
import { intlayer, localeKey } from "./middleware/intlayer";
|
|
419
|
+
import { routes } from "./routes";
|
|
420
|
+
import { HomePage } from "./views/home";
|
|
421
|
+
|
|
422
|
+
// 1. Initialiser le routeur avec les middlewares Intlayer + render
|
|
423
|
+
export const router = createRouter({
|
|
424
|
+
middleware: [intlayer(), render()],
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
// 2. Associer les gestionnaires de route
|
|
428
|
+
router.map(routes, {
|
|
429
|
+
actions: {
|
|
430
|
+
// Route de locale par défaut
|
|
431
|
+
home(context) {
|
|
432
|
+
const locale = context.get(localeKey);
|
|
433
|
+
return context.render(<HomePage locale={locale} />);
|
|
434
|
+
},
|
|
435
|
+
|
|
436
|
+
// Route localisée
|
|
437
|
+
localizedHome(context) {
|
|
438
|
+
if (!isDeclaredLocale(context.params.locale)) {
|
|
439
|
+
return new Response("Not Found", { status: 404 });
|
|
440
|
+
}
|
|
441
|
+
const locale = context.get(localeKey);
|
|
442
|
+
return context.render(<HomePage locale={locale} />);
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
});
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
> `context.render` accepte un `ResponseInit` optionnel comme second argument, par ex. `context.render(<NotFoundPage locale={locale} />, { status: 404 })`.
|
|
449
|
+
|
|
450
|
+
Enfin, exposez le routeur via un gestionnaire `fetch` standard. Le même routeur fonctionne sur Node.js, Bun, Deno et Cloudflare Workers :
|
|
451
|
+
|
|
452
|
+
```typescript fileName="src/server.ts" codeFormat={["typescript", "esm"]}
|
|
453
|
+
import * as http from "node:http";
|
|
454
|
+
import { createRequestListener } from "remix/node-fetch-server";
|
|
455
|
+
import { router } from "./router";
|
|
456
|
+
|
|
457
|
+
const PORT = Number(process.env.PORT || 3000);
|
|
458
|
+
|
|
459
|
+
// Node.js
|
|
460
|
+
const server = http.createServer(
|
|
461
|
+
createRequestListener((request) => router.fetch(request))
|
|
462
|
+
);
|
|
463
|
+
|
|
464
|
+
server.listen(PORT, () => {
|
|
465
|
+
console.log(`Serveur démarré sur http://localhost:${PORT}`);
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
// Bun / Deno / Cloudflare Workers
|
|
469
|
+
export default {
|
|
470
|
+
port: PORT,
|
|
471
|
+
fetch(request: Request) {
|
|
472
|
+
return router.fetch(request);
|
|
473
|
+
},
|
|
474
|
+
};
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
</Step>
|
|
478
|
+
<Step number={9} title="Auditer et auto-compléter les traductions">
|
|
479
|
+
|
|
480
|
+
Intlayer fournit un CLI pour auditer les traductions manquantes et les compléter automatiquement grâce à l'IA :
|
|
481
|
+
|
|
482
|
+
```bash packageManager="npm"
|
|
483
|
+
# Auditer les traductions manquantes
|
|
484
|
+
npx intlayer test
|
|
485
|
+
|
|
486
|
+
# Compléter les traductions manquantes via l'IA
|
|
487
|
+
npx intlayer fill
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
```bash packageManager="pnpm"
|
|
491
|
+
# Auditer les traductions manquantes
|
|
492
|
+
pnpm dlx intlayer test
|
|
493
|
+
|
|
494
|
+
# Compléter les traductions manquantes via l'IA
|
|
495
|
+
pnpm dlx intlayer fill
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
```bash packageManager="yarn"
|
|
499
|
+
# Auditer les traductions manquantes
|
|
500
|
+
yarn dlx intlayer test
|
|
501
|
+
|
|
502
|
+
# Compléter les traductions manquantes via l'IA
|
|
503
|
+
yarn dlx intlayer fill
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
```bash packageManager="bun"
|
|
507
|
+
# Auditer les traductions manquantes
|
|
508
|
+
bun x intlayer test
|
|
509
|
+
|
|
510
|
+
# Compléter les traductions manquantes via l'IA
|
|
511
|
+
bun x intlayer fill
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
</Step>
|
|
515
|
+
</Steps>
|
|
516
|
+
|
|
517
|
+
## Configuration TypeScript
|
|
518
|
+
|
|
519
|
+
Pointez JSX vers le runtime `remix/ui` et assurez-vous que votre `tsconfig.json` inclut les types générés par `.intlayer` :
|
|
520
|
+
|
|
521
|
+
```json fileName="tsconfig.json"
|
|
522
|
+
{
|
|
523
|
+
"compilerOptions": {
|
|
524
|
+
"moduleResolution": "Bundler",
|
|
525
|
+
"module": "ESNext",
|
|
526
|
+
"target": "ESNext",
|
|
527
|
+
"jsx": "react-jsx",
|
|
528
|
+
"jsxImportSource": "remix/ui",
|
|
529
|
+
"skipLibCheck": true,
|
|
530
|
+
"strict": true
|
|
531
|
+
},
|
|
532
|
+
"include": ["src/**/*", ".intlayer/**/*.ts"]
|
|
533
|
+
}
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
> `jsxImportSource: "remix/ui"` est ce qui permet à `<HomePage />` d'être résolu avec le `createElement` de Remix plutôt qu'avec celui de React.
|
|
537
|
+
|
|
538
|
+
## Conclusion
|
|
539
|
+
|
|
540
|
+
Avec Remix 3 et Intlayer, vous bénéficiez d'une stack légère, typée et portable, conforme aux standards du web ouvert. Votre application peut évoluer aisément de pages marketing simples à des services distribués mondialement et rendus en périphérie (edge).
|
|
@@ -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: "बेंचमार्क इनिशियलाइज़ेशन"
|