@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
package/docs/en/cli/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: CLI - All Intlayer CLI commands for your multilingual website
|
|
5
5
|
description: Discover how to use the Intlayer CLI to manage your multilingual website. Follow the steps in this online documentation to set up your project in a few minutes.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
- concept
|
|
18
18
|
- cli
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.2
|
|
21
|
+
date: 2026-09-12
|
|
22
|
+
changes: "Replace the `ci` command by the `--ci` flag"
|
|
20
23
|
- version: 9.0.0
|
|
21
24
|
date: 2026-06-11
|
|
22
25
|
changes: "Add scan command"
|
|
@@ -160,10 +163,6 @@ To see how to configure available locales, or other parameters, refer to the [co
|
|
|
160
163
|
- **[Editor Commands](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/editor.md)** - Use the Intlayer editor commands
|
|
161
164
|
- **[Live Sync Commands](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/live.md)** - Use Live Sync to reflect CMS content changes at runtime
|
|
162
165
|
|
|
163
|
-
### CI/CD & Automation
|
|
164
|
-
|
|
165
|
-
- **[CI Command](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/ci.md)** - Run Intlayer commands with auto-injected credentials for CI/CD pipelines
|
|
166
|
-
|
|
167
166
|
### Auditing & Diagnostics
|
|
168
167
|
|
|
169
168
|
- **[Scan Website](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/scan.md)** - Measure page size and audit i18n/SEO health of any public URL
|
package/docs/en/cli/live.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Live Sync Commands
|
|
5
5
|
description: Learn how to use Live Sync to reflect CMS content changes at runtime.
|
|
6
6
|
keywords:
|
|
@@ -37,6 +37,10 @@ Live Sync lets your app reflect CMS content changes at runtime. No rebuild or re
|
|
|
37
37
|
|
|
38
38
|
> Example: `npx intlayer dictionary push --env-file .env.production.local`
|
|
39
39
|
|
|
40
|
+
- **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
41
|
+
|
|
42
|
+
> Example: `npx intlayer live --ci`
|
|
43
|
+
|
|
40
44
|
**Log options:**
|
|
41
45
|
|
|
42
46
|
- **`--verbose`**: Enable verbose logging for debugging. (default to true using CLI)
|
package/docs/en/cli/login.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-12-16
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: CLI - Login
|
|
5
5
|
description: Learn how to use the Intlayer CLI login command to authenticate with the Intlayer CMS and obtain access credentials.
|
|
6
6
|
keywords:
|
|
@@ -142,7 +142,7 @@ Intlayer enforces this rather than only documenting it:
|
|
|
142
142
|
|
|
143
143
|
Commenting `clientId` out is enough to disable every credentialed behaviour — remote dictionary fetching, CMS access, analytics — even when the environment variables are still defined.
|
|
144
144
|
|
|
145
|
-
For CI pipelines, prefer the
|
|
145
|
+
For CI pipelines, prefer the `--ci` flag, which injects the credentials for the duration of a single run instead of persisting them.
|
|
146
146
|
|
|
147
147
|
## Manual Configuration
|
|
148
148
|
|
package/docs/en/cli/pull.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Pull Dictionaries
|
|
5
5
|
description: Learn how to pull dictionaries from the Intlayer editor and CMS.
|
|
6
6
|
keywords:
|
|
@@ -66,6 +66,10 @@ If [intlayer editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/
|
|
|
66
66
|
|
|
67
67
|
> Example: `npx intlayer build --no-cache`
|
|
68
68
|
|
|
69
|
+
- **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
70
|
+
|
|
71
|
+
> Example: `npx intlayer pull --ci`
|
|
72
|
+
|
|
69
73
|
**Environment variables options:**
|
|
70
74
|
|
|
71
75
|
- **`--env`**: Specify the environment (e.g., `development`, `production`).
|
package/docs/en/cli/push.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Push Dictionaries
|
|
5
5
|
description: Learn how to push your dictionaries to the Intlayer editor and CMS.
|
|
6
6
|
keywords:
|
|
@@ -66,6 +66,10 @@ If [intlayer editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/
|
|
|
66
66
|
|
|
67
67
|
> Example: `npx intlayer build --no-cache`
|
|
68
68
|
|
|
69
|
+
- **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
70
|
+
|
|
71
|
+
> Example: `npx intlayer push --ci`
|
|
72
|
+
|
|
69
73
|
**Environment variables options:**
|
|
70
74
|
|
|
71
75
|
- **`--env`**: Specify the environment (e.g., `development`, `production`). Useful in the case you use environment variables in your intlayer configuration file.
|
package/docs/en/cli/scan.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-11
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Scan Website
|
|
5
5
|
description: Learn how to use the Intlayer CLI scan command to measure page size and audit the i18n/SEO health of any website.
|
|
6
6
|
keywords:
|
|
@@ -18,6 +18,9 @@ slugs:
|
|
|
18
18
|
- cli
|
|
19
19
|
- scan
|
|
20
20
|
history:
|
|
21
|
+
- version: 9.5.2
|
|
22
|
+
date: 2026-09-12
|
|
23
|
+
changes: "Add `--ci` flag"
|
|
21
24
|
- version: 9.0.0
|
|
22
25
|
date: 2026-06-11
|
|
23
26
|
changes: "Add scan command"
|
|
@@ -112,6 +115,7 @@ Output the full scan result as a JSON object instead of a formatted report. Usef
|
|
|
112
115
|
- **`-e, --env`** — Target environment (e.g. `development`, `production`).
|
|
113
116
|
- **`--env-file`** — Path to a custom `.env` file.
|
|
114
117
|
- **`--no-cache`** — Disable configuration cache.
|
|
118
|
+
- **`--ci`** — Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
115
119
|
- **`--verbose`** — Enable verbose logging (default in CLI mode).
|
|
116
120
|
- **`--prefix`** — Custom log prefix.
|
|
117
121
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Standalone Bundle
|
|
5
5
|
description: Learn how to create a standalone bundle of the application content.
|
|
6
6
|
keywords:
|
|
@@ -16,6 +16,9 @@ slugs:
|
|
|
16
16
|
- cli
|
|
17
17
|
- standalone
|
|
18
18
|
history:
|
|
19
|
+
- version: 9.5.2
|
|
20
|
+
date: 2026-09-12
|
|
21
|
+
changes: "Add `--ci` flag"
|
|
19
22
|
- version: 8.6.4
|
|
20
23
|
date: 2026-03-31
|
|
21
24
|
changes: "Init standalone command documentation"
|
|
@@ -61,6 +64,7 @@ bun x intlayer standalone --packages [packages...] [options]
|
|
|
61
64
|
- `-e, --env [env]` - Environment.
|
|
62
65
|
- `--base-dir [baseDir]` - Base directory.
|
|
63
66
|
- `--no-cache` - Disable cache.
|
|
67
|
+
- `--ci` - Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
64
68
|
- `--verbose` - Verbose output.
|
|
65
69
|
|
|
66
70
|
## Examples:
|
package/docs/en/cli/test.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Test Missing Translations
|
|
5
5
|
description: Learn how to test and identify missing translations in your dictionaries.
|
|
6
6
|
keywords:
|
|
@@ -71,6 +71,10 @@ Total missing required locales: 0
|
|
|
71
71
|
|
|
72
72
|
> Example: `npx intlayer build --no-cache`
|
|
73
73
|
|
|
74
|
+
- **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
75
|
+
|
|
76
|
+
> Example: `npx intlayer test --ci`
|
|
77
|
+
|
|
74
78
|
**Preparation options:**
|
|
75
79
|
|
|
76
80
|
- **`--build`**: Build the dictionaries before pushing to ensure the content is up to date. True will force the build, false will skip the build, undefined will allow using the cache of the build.
|
package/docs/en/cli/watch.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-09-12
|
|
4
4
|
title: Watch Dictionaries
|
|
5
5
|
description: Learn how to watch for changes in your content declaration files and automatically build dictionaries.
|
|
6
6
|
keywords:
|
|
@@ -48,3 +48,7 @@ This command is the equivalent of `npx intlayer build --watch --skip-prepare`.
|
|
|
48
48
|
- **`--with`**: Start command in parallel with the watch.
|
|
49
49
|
|
|
50
50
|
> Example: `npx intlayer watch --with "next dev --turbopack"`
|
|
51
|
+
|
|
52
|
+
- **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
|
|
53
|
+
|
|
54
|
+
> Example: `npx intlayer watch --ci`
|
|
@@ -28,7 +28,7 @@ Transitioning from the `i18n-js` library to Intlayer is a highly optimized migra
|
|
|
28
28
|
Execute the following setup command in your repository:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
npx intlayer init
|
|
31
|
+
npx intlayer init --interactive
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
With `intlayer.config.ts` prepared, you can add Intlayer's alias to your bundler configuration so that any imports of `i18n-js` target the compat package `@intlayer/i18n-js`.
|
|
@@ -33,7 +33,7 @@ Intlayer perfectly replicates the core runtime characteristics of `i18next`. By
|
|
|
33
33
|
To begin, initialize Intlayer in your project:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
npx intlayer init
|
|
36
|
+
npx intlayer init --interactive
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
If you are using Vite, include the Intlayer plugin to route imports to `@intlayer/i18next`:
|
package/docs/en/compat/lingui.md
CHANGED
|
@@ -28,7 +28,7 @@ If your project currently relies on Lingui's macro-based compilation, transition
|
|
|
28
28
|
To begin, initialize Intlayer in your project:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
npx intlayer init
|
|
31
|
+
npx intlayer init --interactive
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
This creates your `intlayer.config.ts`. Ensure you retain `@lingui/babel-plugin-lingui-macro` / `@lingui/swc-plugin` in your build step to run _before_ the Intlayer compiler. Then, use the bundler plugin alias to route `@lingui/core` and `@lingui/react` to `@intlayer/lingui`.
|
|
@@ -31,7 +31,7 @@ Intlayer handles all Next.js Pages Router and App Router implementations transpa
|
|
|
31
31
|
To begin, run:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npx intlayer init
|
|
34
|
+
npx intlayer init --interactive
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
This creates the required Intlayer setup file. To swap to Intlayer behind the scenes, update your `next.config.ts`:
|
|
@@ -31,7 +31,7 @@ Migrating from `next-intl` to Intlayer allows you to maintain your application r
|
|
|
31
31
|
Execute the following command in your repository:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npx intlayer init
|
|
34
|
+
npx intlayer init --interactive
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
This will create an `intlayer.config.ts`. In your `next.config.ts`, use the plugin wrapper to seamlessly inject the `next-intl` aliases towards `@intlayer/next-intl`.
|
|
@@ -29,7 +29,7 @@ Migrating from `next-translate` to Intlayer is a near drop-in replacement that r
|
|
|
29
29
|
Initialize Intlayer in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
The CLI will scaffold your configuration. You can then apply the Intlayer plugin in your `next.config.ts`, which injects build-time subpath aliases mapping `next-translate/useTranslation` to `@intlayer/next-translate`.
|
|
@@ -29,7 +29,7 @@ Migrating your Angular application from `ngx-translate` to Intlayer is easy with
|
|
|
29
29
|
Begin by running:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
This sets up the `intlayer.config.ts`. Replace your `TranslateModule.forRoot()` setups and import aliases appropriately to point to `@intlayer/ngx-translate`.
|
|
@@ -30,7 +30,7 @@ Migrating your Nuxt application from `@nuxtjs/i18n` to Intlayer is a seamless pr
|
|
|
30
30
|
To initialize the project, run:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npx intlayer init
|
|
33
|
+
npx intlayer init --interactive
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
This will set up `intlayer.config.ts`. Then, add the Intlayer Nuxt module (e.g. `@intlayer/nuxt-i18n`) in your `nuxt.config.ts` modules array. This automatically applies the compat configuration for your application.
|
|
@@ -29,7 +29,7 @@ If you are using Airbnb's Polyglot.js, migrating to Intlayer is extremely straig
|
|
|
29
29
|
Simply run the initialization command in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
This generates `intlayer.config.ts`. You can then utilize the bundler plugin alias to transparently redirect Polyglot imports to `@intlayer/polyglot`.
|
|
@@ -31,7 +31,7 @@ Using Intlayer's compat adapter allows you to migrate from `react-i18next` witho
|
|
|
31
31
|
To initialize the project, run:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npx intlayer init
|
|
34
|
+
npx intlayer init --interactive
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
During initialization, Intlayer will install `@intlayer/react-i18next` and create `intlayer.config.ts`. In your bundler (like Vite), apply the Intlayer plugin:
|
|
@@ -29,7 +29,7 @@ If your React application uses `react-intl` (FormatJS), transitioning to Intlaye
|
|
|
29
29
|
Start by running the initialization command in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Then, set up the Intlayer Vite or Next.js plugin in your configuration. This plugin injects build-time aliases to redirect `react-intl` imports to `@intlayer/react-intl`.
|
|
@@ -29,7 +29,7 @@ Moving your Svelte application from `svelte-i18n` to Intlayer takes just a momen
|
|
|
29
29
|
Simply run the initialization command in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
This generates `intlayer.config.ts`. Ensure your SvelteKit / Vite plugins are wrapped with Intlayer's alias plugin to seamlessly map `svelte-i18n` to `@intlayer/svelte-i18n`.
|
|
@@ -29,7 +29,7 @@ If your Angular application currently uses `@jsverse/transloco`, you can migrate
|
|
|
29
29
|
Simply run the initialization command in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
This will generate the necessary `intlayer.config.ts` configuration. You will then replace your Transloco imports with `@intlayer/transloco` modules or rely on the build aliases.
|
|
@@ -29,7 +29,7 @@ If your Vue application currently uses `vue-i18n`, you can migrate to Intlayer w
|
|
|
29
29
|
To get started, simply run the initialization command in your project:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx intlayer init
|
|
32
|
+
npx intlayer init --interactive
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
During the initialization, Intlayer will set up your configuration file (`intlayer.config.ts`) and prepare your project for migration. You will just need to add the Intlayer plugin to your Vite configuration to automatically alias the `vue-i18n` imports.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-09-09
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
4
|
title: "Remix 3 i18n - Complete guide to translate your app"
|
|
5
5
|
description: "No more i18next. The 2026 guide to building a multilingual (i18n) Remix 3 app. Translate with AI agents and optimize bundle size, SEO and performances."
|
|
6
6
|
keywords:
|
|
@@ -27,30 +27,24 @@ author: aymericzip
|
|
|
27
27
|
|
|
28
28
|
# Translate your Remix 3 website using Intlayer | Internationalization (i18n)
|
|
29
29
|
|
|
30
|
-
This guide demonstrates how to integrate **Intlayer** for seamless internationalization in **Remix 3** applications with locale-aware routing, type-safe content declarations,
|
|
31
|
-
|
|
32
|
-
---
|
|
30
|
+
This guide demonstrates how to integrate **Intlayer** for seamless internationalization in **Remix 3** applications with locale-aware routing, type-safe content declarations, server-rendered JSX components, and cross-runtime support across Node.js, Bun, Deno, and Cloudflare Workers.
|
|
33
31
|
|
|
34
32
|
## What is Remix 3?
|
|
35
33
|
|
|
36
34
|
**Remix 3** represents a fundamental architectural shift towards a **composable, runtime-agnostic web framework built entirely on web standards**. Rather than being coupled to specific bundlers or proprietary server APIs, Remix 3 is distributed as single-purpose, composable packages:
|
|
37
35
|
|
|
38
36
|
- **`remix/fetch-router`** (or `remix/router`): Lightweight, standard-compliant routing built on the Fetch API (`Request` and `Response`).
|
|
39
|
-
- **`remix/
|
|
40
|
-
- **`remix/
|
|
37
|
+
- **`remix/ui`**: A JSX component model (`jsxImportSource: "remix/ui"`). A component is a setup function that returns a render function, so it looks like React but keeps state in plain JavaScript closures.
|
|
38
|
+
- **`remix/middleware/render`**: Installs `context.render(<Page />)` on every request, streaming the JSX tree to an HTML `Response`.
|
|
41
39
|
- **`remix/node-fetch-server`**: Server adapters for Node.js, while natively supporting Bun, Deno, and edge runtimes.
|
|
42
40
|
- **`remix/cookie`**: Cryptographically secure cookie parsing and serialization.
|
|
43
41
|
|
|
44
42
|
Combined with **Intlayer**, you get a complete internationalization system that delivers compile-time safety, automated AI translations, zero-overhead server rendering, and seamless locale routing.
|
|
45
43
|
|
|
46
|
-
---
|
|
47
|
-
|
|
48
44
|
## Table of Contents
|
|
49
45
|
|
|
50
46
|
<TOC/>
|
|
51
47
|
|
|
52
|
-
---
|
|
53
|
-
|
|
54
48
|
## Why Intlayer over alternatives?
|
|
55
49
|
|
|
56
50
|
Compared to traditional solutions like `i18next` or bespoke translation loaders, Intlayer offers an integrated developer experience optimized for modern web architecture:
|
|
@@ -68,7 +62,7 @@ Say goodbye to loose JSON keys and runtime missing-key crashes. Intlayer enforce
|
|
|
68
62
|
</Accordion>
|
|
69
63
|
<Accordion header="Zero Bundle Overhead on the Server">
|
|
70
64
|
|
|
71
|
-
|
|
65
|
+
Remix 3 renders JSX components on the server and streams the HTML to the client. Only the resolved text for the requested locale ends up in the output stream. No client hydration bundles or bulky translation catalogs are needed unless a component is explicitly marked as a `clientEntry`.
|
|
72
66
|
|
|
73
67
|
</Accordion>
|
|
74
68
|
<Accordion header="AI Agent & Automation Ready">
|
|
@@ -83,8 +77,6 @@ Beyond code-first workflows, Intlayer provides a self-hosted [Visual Editor](htt
|
|
|
83
77
|
</Accordion>
|
|
84
78
|
</AccordionGroup>
|
|
85
79
|
|
|
86
|
-
---
|
|
87
|
-
|
|
88
80
|
## Step-by-Step Guide
|
|
89
81
|
|
|
90
82
|
<Tabs defaultTab="code">
|
|
@@ -136,7 +128,7 @@ bun add intlayer remix@next
|
|
|
136
128
|
```
|
|
137
129
|
|
|
138
130
|
- **`intlayer`**: Core internationalization engine providing configuration management, dictionary declaration (`t()`, `Dictionary`), CLI tools, and runtime interpreter.
|
|
139
|
-
- **`remix`**: The unified Remix 3 framework package exporting `remix/router`, `remix/routes`, `remix/
|
|
131
|
+
- **`remix`**: The unified Remix 3 framework package exporting `remix/router`, `remix/routes`, `remix/ui`, `remix/middleware/render`, and `remix/node-fetch-server`.
|
|
140
132
|
|
|
141
133
|
</Step>
|
|
142
134
|
<Step number={2} title="Configure Intlayer">
|
|
@@ -328,80 +320,108 @@ routes.localizedHome.href({ locale: "fr" }); // "/fr"
|
|
|
328
320
|
```
|
|
329
321
|
|
|
330
322
|
</Step>
|
|
331
|
-
<Step number={7} title="Render Localized
|
|
323
|
+
<Step number={7} title="Render Localized Pages with JSX">
|
|
324
|
+
|
|
325
|
+
Remix 3 renders UI with JSX components from `remix/ui`. A component is a **setup function** that receives a `Handle` and returns a **render function**. Setup runs once per instance, render runs on every update, and props are read through `handle.props`.
|
|
326
|
+
|
|
327
|
+
Start with a shared `Document` shell that sets the `<html lang="..." dir="...">` attributes from the resolved locale:
|
|
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
332
|
|
|
333
|
-
|
|
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;
|
|
334
341
|
|
|
335
|
-
|
|
336
|
-
|
|
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
|
+
Then create the home page. It extracts the localized dictionary with `getIntlayer` and renders a language switcher:
|
|
356
|
+
|
|
357
|
+
```tsx fileName="src/views/home.tsx" codeFormat={["typescript", "esm"]}
|
|
337
358
|
import {
|
|
338
359
|
getIntlayer,
|
|
339
|
-
getHTMLTextDir,
|
|
340
360
|
getLocaleName,
|
|
341
361
|
getLocalizedPath,
|
|
342
362
|
type Locale,
|
|
343
363
|
locales,
|
|
344
364
|
} from "intlayer";
|
|
365
|
+
import type { Handle } from "remix/ui";
|
|
345
366
|
import { routes } from "../routes";
|
|
367
|
+
import { Document } from "./document";
|
|
368
|
+
|
|
369
|
+
type HomePageProps = {
|
|
370
|
+
locale: Locale;
|
|
371
|
+
};
|
|
346
372
|
|
|
347
|
-
export const
|
|
373
|
+
export const HomePage = (handle: Handle<HomePageProps>) => () => {
|
|
374
|
+
const { locale } = handle.props;
|
|
348
375
|
const home = getIntlayer("home", locale);
|
|
349
376
|
|
|
350
|
-
return
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
<main>
|
|
378
|
-
<h1>${home.title}</h1>
|
|
379
|
-
<p>${home.description}</p>
|
|
380
|
-
</main>
|
|
381
|
-
</body>
|
|
382
|
-
</html>
|
|
383
|
-
`;
|
|
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
|
+
);
|
|
384
404
|
};
|
|
385
405
|
```
|
|
386
406
|
|
|
407
|
+
> Remix JSX is not React: there are no hooks, `class` is written as-is (`className` is also accepted), and re-renders are triggered explicitly with `handle.update()`. Interpolated values are escaped automatically.
|
|
408
|
+
|
|
387
409
|
</Step>
|
|
388
|
-
<Step number={8} title="Wire Up the Server
|
|
410
|
+
<Step number={8} title="Wire Up the Router and Server">
|
|
389
411
|
|
|
390
|
-
|
|
412
|
+
Add the `render()` middleware from `remix/middleware/render` next to the Intlayer middleware. It installs `context.render(node, init)` on every request, which streams the JSX tree into an HTML `Response` (prepending `<!DOCTYPE html>` and setting the `Content-Type` header):
|
|
391
413
|
|
|
392
|
-
```
|
|
393
|
-
import * as http from "node:http";
|
|
394
|
-
import { createRouter } from "remix/router";
|
|
395
|
-
import { createRequestListener } from "remix/node-fetch-server";
|
|
396
|
-
import { createHtmlResponse } from "remix/response/html";
|
|
414
|
+
```tsx fileName="src/router.tsx" codeFormat={["typescript", "esm"]}
|
|
397
415
|
import { isDeclaredLocale } from "intlayer";
|
|
416
|
+
import { render } from "remix/middleware/render";
|
|
417
|
+
import { createRouter } from "remix/router";
|
|
398
418
|
import { intlayer, localeKey } from "./middleware/intlayer";
|
|
399
419
|
import { routes } from "./routes";
|
|
400
|
-
import {
|
|
420
|
+
import { HomePage } from "./views/home";
|
|
401
421
|
|
|
402
|
-
// 1. Initialize router with Intlayer middleware
|
|
422
|
+
// 1. Initialize router with Intlayer + render middleware
|
|
403
423
|
export const router = createRouter({
|
|
404
|
-
middleware: [intlayer()],
|
|
424
|
+
middleware: [intlayer(), render()],
|
|
405
425
|
});
|
|
406
426
|
|
|
407
427
|
// 2. Map route handlers
|
|
@@ -410,7 +430,7 @@ router.map(routes, {
|
|
|
410
430
|
// Default locale route
|
|
411
431
|
home(context) {
|
|
412
432
|
const locale = context.get(localeKey);
|
|
413
|
-
return
|
|
433
|
+
return context.render(<HomePage locale={locale} />);
|
|
414
434
|
},
|
|
415
435
|
|
|
416
436
|
// Localized route
|
|
@@ -419,13 +439,24 @@ router.map(routes, {
|
|
|
419
439
|
return new Response("Not Found", { status: 404 });
|
|
420
440
|
}
|
|
421
441
|
const locale = context.get(localeKey);
|
|
422
|
-
return
|
|
442
|
+
return context.render(<HomePage locale={locale} />);
|
|
423
443
|
},
|
|
424
444
|
},
|
|
425
445
|
});
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
> `context.render` accepts an optional `ResponseInit` as second argument, e.g. `context.render(<NotFoundPage locale={locale} />, { status: 404 })`.
|
|
449
|
+
|
|
450
|
+
Finally, expose the router through a standard `fetch` handler. The same router runs on Node.js, Bun, Deno, and 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";
|
|
426
456
|
|
|
427
|
-
// 3. Start server
|
|
428
457
|
const PORT = Number(process.env.PORT || 3000);
|
|
458
|
+
|
|
459
|
+
// Node.js
|
|
429
460
|
const server = http.createServer(
|
|
430
461
|
createRequestListener((request) => router.fetch(request))
|
|
431
462
|
);
|
|
@@ -434,6 +465,7 @@ server.listen(PORT, () => {
|
|
|
434
465
|
console.log(`Server running at http://localhost:${PORT}`);
|
|
435
466
|
});
|
|
436
467
|
|
|
468
|
+
// Bun / Deno / Cloudflare Workers
|
|
437
469
|
export default {
|
|
438
470
|
port: PORT,
|
|
439
471
|
fetch(request: Request) {
|
|
@@ -482,11 +514,9 @@ bun x intlayer fill
|
|
|
482
514
|
</Step>
|
|
483
515
|
</Steps>
|
|
484
516
|
|
|
485
|
-
---
|
|
486
|
-
|
|
487
517
|
## TypeScript Configuration
|
|
488
518
|
|
|
489
|
-
|
|
519
|
+
Point JSX at the `remix/ui` runtime and ensure that your `tsconfig.json` includes the generated `.intlayer` types:
|
|
490
520
|
|
|
491
521
|
```json fileName="tsconfig.json"
|
|
492
522
|
{
|
|
@@ -494,6 +524,8 @@ Ensure that your `tsconfig.json` includes the generated `.intlayer` types:
|
|
|
494
524
|
"moduleResolution": "Bundler",
|
|
495
525
|
"module": "ESNext",
|
|
496
526
|
"target": "ESNext",
|
|
527
|
+
"jsx": "react-jsx",
|
|
528
|
+
"jsxImportSource": "remix/ui",
|
|
497
529
|
"skipLibCheck": true,
|
|
498
530
|
"strict": true
|
|
499
531
|
},
|
|
@@ -501,7 +533,7 @@ Ensure that your `tsconfig.json` includes the generated `.intlayer` types:
|
|
|
501
533
|
}
|
|
502
534
|
```
|
|
503
535
|
|
|
504
|
-
|
|
536
|
+
> `jsxImportSource: "remix/ui"` is what makes `<HomePage />` resolve to Remix's `createElement` instead of React's.
|
|
505
537
|
|
|
506
538
|
## Conclusion
|
|
507
539
|
|