@intlayer/docs 9.5.1 → 9.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/history_of_i18n.md +304 -0
- package/blog/de/history_of_i18n.md +304 -0
- package/blog/en/history_of_i18n.md +304 -0
- package/blog/en-GB/history_of_i18n.md +304 -0
- package/blog/es/history_of_i18n.md +304 -0
- package/blog/fr/history_of_i18n.md +304 -0
- package/blog/hi/history_of_i18n.md +304 -0
- package/blog/id/history_of_i18n.md +304 -0
- package/blog/it/history_of_i18n.md +304 -0
- package/blog/ja/history_of_i18n.md +304 -0
- package/blog/ko/history_of_i18n.md +304 -0
- package/blog/pl/history_of_i18n.md +304 -0
- package/blog/pt/history_of_i18n.md +304 -0
- package/blog/ru/history_of_i18n.md +304 -0
- package/blog/tr/history_of_i18n.md +304 -0
- package/blog/uk/history_of_i18n.md +304 -0
- package/blog/vi/history_of_i18n.md +304 -0
- package/blog/zh/history_of_i18n.md +304 -0
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +0 -20
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +0 -20
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +0 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/index.md +4 -1
- package/docs/ar/benchmark/nextjs.md +32 -27
- package/docs/ar/benchmark/solid.md +13 -10
- package/docs/ar/benchmark/svelte.md +12 -9
- package/docs/ar/benchmark/tanstack.md +29 -24
- package/docs/ar/benchmark/vue.md +11 -7
- package/docs/ar/cli/build.md +8 -1
- package/docs/ar/cli/configuration.md +3 -1
- package/docs/ar/cli/doc-review.md +8 -1
- package/docs/ar/cli/doc-translate.md +5 -1
- package/docs/ar/cli/extract.md +2 -1
- package/docs/ar/cli/fill.md +5 -1
- package/docs/ar/cli/index.md +4 -5
- package/docs/ar/cli/live.md +5 -1
- package/docs/ar/cli/login.md +2 -2
- package/docs/ar/cli/pull.md +5 -1
- package/docs/ar/cli/push.md +5 -1
- package/docs/ar/cli/scan.md +5 -1
- package/docs/ar/cli/standalone.md +5 -1
- package/docs/ar/cli/test.md +5 -1
- package/docs/ar/cli/watch.md +5 -1
- package/docs/ar/compat/i18n-js.md +1 -1
- package/docs/ar/compat/i18next.md +1 -1
- package/docs/ar/compat/lingui.md +1 -1
- package/docs/ar/compat/next-i18next.md +1 -1
- package/docs/ar/compat/next-intl.md +1 -1
- package/docs/ar/compat/next-translate.md +1 -1
- package/docs/ar/compat/ngx-translate.md +1 -1
- package/docs/ar/compat/nuxtjs-i18n.md +1 -1
- package/docs/ar/compat/polyglot.md +1 -1
- package/docs/ar/compat/react-i18next.md +1 -1
- package/docs/ar/compat/react-intl.md +1 -1
- package/docs/ar/compat/svelte-i18n.md +1 -1
- package/docs/ar/compat/transloco.md +1 -1
- package/docs/ar/compat/vue-i18n.md +1 -1
- package/docs/ar/intlayer_with_remix_3.md +543 -0
- package/docs/bn/cli/index.md +4 -5
- package/docs/bn/cli/scan.md +5 -1
- package/docs/bn/cli/standalone.md +5 -1
- package/docs/cs/cli/index.md +4 -5
- package/docs/cs/cli/scan.md +5 -1
- package/docs/cs/cli/standalone.md +5 -1
- package/docs/de/benchmark/index.md +4 -1
- package/docs/de/benchmark/nextjs.md +32 -27
- package/docs/de/benchmark/solid.md +13 -10
- package/docs/de/benchmark/svelte.md +12 -9
- package/docs/de/benchmark/tanstack.md +29 -24
- package/docs/de/benchmark/vue.md +11 -7
- package/docs/de/cli/build.md +8 -1
- package/docs/de/cli/configuration.md +3 -1
- package/docs/de/cli/doc-review.md +8 -1
- package/docs/de/cli/doc-translate.md +5 -1
- package/docs/de/cli/extract.md +2 -1
- package/docs/de/cli/fill.md +5 -1
- package/docs/de/cli/index.md +4 -5
- package/docs/de/cli/live.md +5 -1
- package/docs/de/cli/login.md +2 -2
- package/docs/de/cli/pull.md +5 -1
- package/docs/de/cli/push.md +5 -1
- package/docs/de/cli/scan.md +5 -1
- package/docs/de/cli/standalone.md +5 -1
- package/docs/de/cli/test.md +5 -1
- package/docs/de/cli/watch.md +5 -1
- package/docs/de/compat/i18n-js.md +1 -1
- package/docs/de/compat/i18next.md +1 -1
- package/docs/de/compat/lingui.md +1 -1
- package/docs/de/compat/next-i18next.md +1 -1
- package/docs/de/compat/next-intl.md +1 -1
- package/docs/de/compat/next-translate.md +1 -1
- package/docs/de/compat/ngx-translate.md +1 -1
- package/docs/de/compat/nuxtjs-i18n.md +1 -1
- package/docs/de/compat/polyglot.md +1 -1
- package/docs/de/compat/react-i18next.md +1 -1
- package/docs/de/compat/react-intl.md +1 -1
- package/docs/de/compat/svelte-i18n.md +1 -1
- package/docs/de/compat/transloco.md +1 -1
- package/docs/de/compat/vue-i18n.md +1 -1
- package/docs/de/intlayer_with_remix_3.md +543 -0
- package/docs/en/benchmark/index.md +4 -1
- package/docs/en/benchmark/nextjs.md +32 -27
- package/docs/en/benchmark/solid.md +13 -10
- package/docs/en/benchmark/svelte.md +12 -9
- package/docs/en/benchmark/tanstack.md +30 -25
- package/docs/en/benchmark/vue.md +11 -7
- package/docs/en/cli/build.md +8 -1
- package/docs/en/cli/configuration.md +3 -1
- package/docs/en/cli/doc-review.md +8 -1
- package/docs/en/cli/doc-translate.md +5 -1
- package/docs/en/cli/extract.md +2 -1
- package/docs/en/cli/fill.md +5 -1
- package/docs/en/cli/index.md +4 -5
- package/docs/en/cli/live.md +5 -1
- package/docs/en/cli/login.md +2 -2
- package/docs/en/cli/pull.md +5 -1
- package/docs/en/cli/push.md +5 -1
- package/docs/en/cli/scan.md +5 -1
- package/docs/en/cli/standalone.md +5 -1
- package/docs/en/cli/test.md +5 -1
- package/docs/en/cli/watch.md +5 -1
- package/docs/en/compat/i18n-js.md +1 -1
- package/docs/en/compat/i18next.md +1 -1
- package/docs/en/compat/lingui.md +1 -1
- package/docs/en/compat/next-i18next.md +1 -1
- package/docs/en/compat/next-intl.md +1 -1
- package/docs/en/compat/next-translate.md +1 -1
- package/docs/en/compat/ngx-translate.md +1 -1
- package/docs/en/compat/nuxtjs-i18n.md +1 -1
- package/docs/en/compat/polyglot.md +1 -1
- package/docs/en/compat/react-i18next.md +1 -1
- package/docs/en/compat/react-intl.md +1 -1
- package/docs/en/compat/svelte-i18n.md +1 -1
- package/docs/en/compat/transloco.md +1 -1
- package/docs/en/compat/vue-i18n.md +1 -1
- package/docs/en/intlayer_with_remix_3.md +103 -71
- package/docs/en-GB/benchmark/index.md +4 -1
- package/docs/en-GB/benchmark/nextjs.md +32 -27
- package/docs/en-GB/benchmark/solid.md +13 -10
- package/docs/en-GB/benchmark/svelte.md +12 -9
- package/docs/en-GB/benchmark/tanstack.md +29 -24
- package/docs/en-GB/benchmark/vue.md +11 -7
- package/docs/en-GB/cli/build.md +8 -1
- package/docs/en-GB/cli/configuration.md +3 -1
- package/docs/en-GB/cli/doc-review.md +8 -1
- package/docs/en-GB/cli/doc-translate.md +5 -1
- package/docs/en-GB/cli/extract.md +2 -1
- package/docs/en-GB/cli/fill.md +5 -1
- package/docs/en-GB/cli/index.md +4 -5
- package/docs/en-GB/cli/live.md +5 -1
- package/docs/en-GB/cli/login.md +2 -2
- package/docs/en-GB/cli/pull.md +5 -1
- package/docs/en-GB/cli/push.md +5 -1
- package/docs/en-GB/cli/scan.md +5 -1
- package/docs/en-GB/cli/standalone.md +5 -1
- package/docs/en-GB/cli/test.md +5 -1
- package/docs/en-GB/cli/watch.md +5 -1
- package/docs/en-GB/compat/i18n-js.md +1 -1
- package/docs/en-GB/compat/i18next.md +1 -1
- package/docs/en-GB/compat/lingui.md +1 -1
- package/docs/en-GB/compat/next-i18next.md +1 -1
- package/docs/en-GB/compat/next-intl.md +1 -1
- package/docs/en-GB/compat/next-translate.md +1 -1
- package/docs/en-GB/compat/ngx-translate.md +1 -1
- package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
- package/docs/en-GB/compat/polyglot.md +1 -1
- package/docs/en-GB/compat/react-i18next.md +1 -1
- package/docs/en-GB/compat/react-intl.md +1 -1
- package/docs/en-GB/compat/svelte-i18n.md +1 -1
- package/docs/en-GB/compat/transloco.md +1 -1
- package/docs/en-GB/compat/vue-i18n.md +1 -1
- package/docs/en-GB/intlayer_with_remix_3.md +558 -0
- package/docs/es/benchmark/index.md +4 -1
- package/docs/es/benchmark/nextjs.md +32 -27
- package/docs/es/benchmark/solid.md +13 -10
- package/docs/es/benchmark/svelte.md +12 -9
- package/docs/es/benchmark/tanstack.md +29 -24
- package/docs/es/benchmark/vue.md +11 -7
- package/docs/es/cli/build.md +8 -1
- package/docs/es/cli/configuration.md +3 -1
- package/docs/es/cli/doc-review.md +8 -1
- package/docs/es/cli/doc-translate.md +5 -1
- package/docs/es/cli/extract.md +2 -1
- package/docs/es/cli/fill.md +5 -1
- package/docs/es/cli/index.md +4 -5
- package/docs/es/cli/live.md +5 -1
- package/docs/es/cli/login.md +2 -2
- package/docs/es/cli/pull.md +5 -1
- package/docs/es/cli/push.md +5 -1
- package/docs/es/cli/scan.md +5 -1
- package/docs/es/cli/standalone.md +5 -1
- package/docs/es/cli/test.md +5 -1
- package/docs/es/cli/watch.md +5 -1
- package/docs/es/compat/i18n-js.md +1 -1
- package/docs/es/compat/i18next.md +1 -1
- package/docs/es/compat/lingui.md +1 -1
- package/docs/es/compat/next-i18next.md +1 -1
- package/docs/es/compat/next-intl.md +1 -1
- package/docs/es/compat/next-translate.md +1 -1
- package/docs/es/compat/ngx-translate.md +1 -1
- package/docs/es/compat/nuxtjs-i18n.md +1 -1
- package/docs/es/compat/polyglot.md +1 -1
- package/docs/es/compat/react-i18next.md +1 -1
- package/docs/es/compat/react-intl.md +1 -1
- package/docs/es/compat/svelte-i18n.md +1 -1
- package/docs/es/compat/transloco.md +1 -1
- package/docs/es/compat/vue-i18n.md +1 -1
- package/docs/es/intlayer_with_remix_3.md +540 -0
- package/docs/fr/benchmark/index.md +4 -1
- package/docs/fr/benchmark/nextjs.md +32 -27
- package/docs/fr/benchmark/solid.md +13 -10
- package/docs/fr/benchmark/svelte.md +12 -9
- package/docs/fr/benchmark/tanstack.md +29 -24
- package/docs/fr/benchmark/vue.md +11 -7
- package/docs/fr/cli/build.md +8 -1
- package/docs/fr/cli/configuration.md +3 -1
- package/docs/fr/cli/doc-review.md +8 -1
- package/docs/fr/cli/doc-translate.md +5 -1
- package/docs/fr/cli/extract.md +2 -1
- package/docs/fr/cli/fill.md +5 -1
- package/docs/fr/cli/index.md +4 -5
- package/docs/fr/cli/live.md +5 -1
- package/docs/fr/cli/login.md +2 -2
- package/docs/fr/cli/pull.md +5 -1
- package/docs/fr/cli/push.md +5 -1
- package/docs/fr/cli/scan.md +5 -1
- package/docs/fr/cli/standalone.md +5 -1
- package/docs/fr/cli/test.md +5 -1
- package/docs/fr/cli/watch.md +5 -1
- package/docs/fr/compat/i18n-js.md +1 -1
- package/docs/fr/compat/i18next.md +1 -1
- package/docs/fr/compat/lingui.md +1 -1
- package/docs/fr/compat/next-i18next.md +1 -1
- package/docs/fr/compat/next-intl.md +1 -1
- package/docs/fr/compat/next-translate.md +1 -1
- package/docs/fr/compat/ngx-translate.md +1 -1
- package/docs/fr/compat/nuxtjs-i18n.md +1 -1
- package/docs/fr/compat/polyglot.md +1 -1
- package/docs/fr/compat/react-i18next.md +1 -1
- package/docs/fr/compat/react-intl.md +1 -1
- package/docs/fr/compat/svelte-i18n.md +1 -1
- package/docs/fr/compat/transloco.md +1 -1
- package/docs/fr/compat/vue-i18n.md +1 -1
- package/docs/fr/intlayer_with_remix_3.md +540 -0
- package/docs/hi/benchmark/index.md +4 -1
- package/docs/hi/benchmark/nextjs.md +32 -27
- package/docs/hi/benchmark/solid.md +13 -10
- package/docs/hi/benchmark/svelte.md +12 -9
- package/docs/hi/benchmark/tanstack.md +29 -24
- package/docs/hi/benchmark/vue.md +11 -7
- package/docs/hi/cli/build.md +8 -1
- package/docs/hi/cli/configuration.md +3 -1
- package/docs/hi/cli/doc-review.md +8 -1
- package/docs/hi/cli/doc-translate.md +5 -1
- package/docs/hi/cli/extract.md +2 -1
- package/docs/hi/cli/fill.md +5 -1
- package/docs/hi/cli/index.md +4 -5
- package/docs/hi/cli/live.md +5 -1
- package/docs/hi/cli/login.md +2 -2
- package/docs/hi/cli/pull.md +5 -1
- package/docs/hi/cli/push.md +5 -1
- package/docs/hi/cli/scan.md +5 -1
- package/docs/hi/cli/standalone.md +5 -1
- package/docs/hi/cli/test.md +5 -1
- package/docs/hi/cli/watch.md +5 -1
- package/docs/hi/compat/i18n-js.md +1 -1
- package/docs/hi/compat/i18next.md +1 -1
- package/docs/hi/compat/lingui.md +1 -1
- package/docs/hi/compat/next-i18next.md +1 -1
- package/docs/hi/compat/next-intl.md +1 -1
- package/docs/hi/compat/next-translate.md +1 -1
- package/docs/hi/compat/ngx-translate.md +1 -1
- package/docs/hi/compat/nuxtjs-i18n.md +1 -1
- package/docs/hi/compat/polyglot.md +1 -1
- package/docs/hi/compat/react-i18next.md +1 -1
- package/docs/hi/compat/react-intl.md +1 -1
- package/docs/hi/compat/svelte-i18n.md +1 -1
- package/docs/hi/compat/transloco.md +1 -1
- package/docs/hi/compat/vue-i18n.md +1 -1
- package/docs/hi/intlayer_with_remix_3.md +543 -0
- package/docs/id/benchmark/index.md +4 -1
- package/docs/id/benchmark/nextjs.md +32 -27
- package/docs/id/benchmark/solid.md +13 -10
- package/docs/id/benchmark/svelte.md +12 -9
- package/docs/id/benchmark/tanstack.md +29 -24
- package/docs/id/benchmark/vue.md +11 -7
- package/docs/id/cli/build.md +8 -1
- package/docs/id/cli/configuration.md +3 -1
- package/docs/id/cli/doc-review.md +8 -1
- package/docs/id/cli/doc-translate.md +5 -1
- package/docs/id/cli/extract.md +2 -1
- package/docs/id/cli/fill.md +5 -1
- package/docs/id/cli/index.md +4 -5
- package/docs/id/cli/live.md +5 -1
- package/docs/id/cli/login.md +2 -2
- package/docs/id/cli/pull.md +5 -1
- package/docs/id/cli/push.md +5 -1
- package/docs/id/cli/scan.md +5 -1
- package/docs/id/cli/standalone.md +5 -1
- package/docs/id/cli/test.md +5 -1
- package/docs/id/cli/watch.md +5 -1
- package/docs/id/compat/i18n-js.md +1 -1
- package/docs/id/compat/i18next.md +1 -1
- package/docs/id/compat/lingui.md +1 -1
- package/docs/id/compat/next-i18next.md +1 -1
- package/docs/id/compat/next-intl.md +1 -1
- package/docs/id/compat/next-translate.md +1 -1
- package/docs/id/compat/ngx-translate.md +1 -1
- package/docs/id/compat/nuxtjs-i18n.md +1 -1
- package/docs/id/compat/polyglot.md +1 -1
- package/docs/id/compat/react-i18next.md +1 -1
- package/docs/id/compat/react-intl.md +1 -1
- package/docs/id/compat/svelte-i18n.md +1 -1
- package/docs/id/compat/transloco.md +1 -1
- package/docs/id/compat/vue-i18n.md +1 -1
- package/docs/id/intlayer_with_remix_3.md +566 -0
- package/docs/it/benchmark/index.md +4 -1
- package/docs/it/benchmark/nextjs.md +32 -27
- package/docs/it/benchmark/solid.md +13 -10
- package/docs/it/benchmark/svelte.md +12 -9
- package/docs/it/benchmark/tanstack.md +29 -24
- package/docs/it/benchmark/vue.md +11 -7
- package/docs/it/cli/build.md +8 -1
- package/docs/it/cli/configuration.md +3 -1
- package/docs/it/cli/doc-review.md +8 -1
- package/docs/it/cli/doc-translate.md +5 -1
- package/docs/it/cli/extract.md +2 -1
- package/docs/it/cli/fill.md +5 -1
- package/docs/it/cli/index.md +4 -5
- package/docs/it/cli/live.md +5 -1
- package/docs/it/cli/login.md +2 -2
- package/docs/it/cli/pull.md +5 -1
- package/docs/it/cli/push.md +5 -1
- package/docs/it/cli/scan.md +5 -1
- package/docs/it/cli/standalone.md +5 -1
- package/docs/it/cli/test.md +5 -1
- package/docs/it/cli/watch.md +5 -1
- package/docs/it/compat/i18n-js.md +1 -1
- package/docs/it/compat/i18next.md +1 -1
- package/docs/it/compat/lingui.md +1 -1
- package/docs/it/compat/next-i18next.md +1 -1
- package/docs/it/compat/next-intl.md +1 -1
- package/docs/it/compat/next-translate.md +1 -1
- package/docs/it/compat/ngx-translate.md +1 -1
- package/docs/it/compat/nuxtjs-i18n.md +1 -1
- package/docs/it/compat/polyglot.md +1 -1
- package/docs/it/compat/react-i18next.md +1 -1
- package/docs/it/compat/react-intl.md +1 -1
- package/docs/it/compat/svelte-i18n.md +1 -1
- package/docs/it/compat/transloco.md +1 -1
- package/docs/it/compat/vue-i18n.md +1 -1
- package/docs/it/intlayer_with_remix_3.md +558 -0
- package/docs/ja/benchmark/index.md +4 -1
- package/docs/ja/benchmark/nextjs.md +32 -27
- package/docs/ja/benchmark/solid.md +13 -10
- package/docs/ja/benchmark/svelte.md +12 -9
- package/docs/ja/benchmark/tanstack.md +29 -24
- package/docs/ja/benchmark/vue.md +11 -7
- package/docs/ja/cli/build.md +8 -1
- package/docs/ja/cli/configuration.md +3 -1
- package/docs/ja/cli/doc-review.md +8 -1
- package/docs/ja/cli/doc-translate.md +5 -1
- package/docs/ja/cli/extract.md +2 -1
- package/docs/ja/cli/fill.md +5 -1
- package/docs/ja/cli/index.md +4 -5
- package/docs/ja/cli/live.md +5 -1
- package/docs/ja/cli/login.md +2 -2
- package/docs/ja/cli/pull.md +5 -1
- package/docs/ja/cli/push.md +5 -1
- package/docs/ja/cli/scan.md +5 -1
- package/docs/ja/cli/standalone.md +5 -1
- package/docs/ja/cli/test.md +5 -1
- package/docs/ja/cli/watch.md +5 -1
- package/docs/ja/compat/i18n-js.md +1 -1
- package/docs/ja/compat/i18next.md +1 -1
- package/docs/ja/compat/lingui.md +1 -1
- package/docs/ja/compat/next-i18next.md +1 -1
- package/docs/ja/compat/next-intl.md +1 -1
- package/docs/ja/compat/next-translate.md +1 -1
- package/docs/ja/compat/ngx-translate.md +1 -1
- package/docs/ja/compat/nuxtjs-i18n.md +1 -1
- package/docs/ja/compat/polyglot.md +1 -1
- package/docs/ja/compat/react-i18next.md +1 -1
- package/docs/ja/compat/react-intl.md +1 -1
- package/docs/ja/compat/svelte-i18n.md +1 -1
- package/docs/ja/compat/transloco.md +1 -1
- package/docs/ja/compat/vue-i18n.md +1 -1
- package/docs/ja/intlayer_with_remix_3.md +558 -0
- package/docs/ko/benchmark/index.md +4 -1
- package/docs/ko/benchmark/nextjs.md +32 -27
- package/docs/ko/benchmark/solid.md +13 -10
- package/docs/ko/benchmark/svelte.md +12 -9
- package/docs/ko/benchmark/tanstack.md +29 -24
- package/docs/ko/benchmark/vue.md +11 -7
- package/docs/ko/cli/build.md +8 -1
- package/docs/ko/cli/configuration.md +3 -1
- package/docs/ko/cli/doc-review.md +8 -1
- package/docs/ko/cli/doc-translate.md +5 -1
- package/docs/ko/cli/extract.md +2 -1
- package/docs/ko/cli/fill.md +5 -1
- package/docs/ko/cli/index.md +4 -5
- package/docs/ko/cli/live.md +5 -1
- package/docs/ko/cli/login.md +2 -2
- package/docs/ko/cli/pull.md +5 -1
- package/docs/ko/cli/push.md +5 -1
- package/docs/ko/cli/scan.md +5 -1
- package/docs/ko/cli/standalone.md +5 -1
- package/docs/ko/cli/test.md +5 -1
- package/docs/ko/cli/watch.md +5 -1
- package/docs/ko/compat/i18n-js.md +1 -1
- package/docs/ko/compat/i18next.md +1 -1
- package/docs/ko/compat/lingui.md +1 -1
- package/docs/ko/compat/next-i18next.md +1 -1
- package/docs/ko/compat/next-intl.md +1 -1
- package/docs/ko/compat/next-translate.md +1 -1
- package/docs/ko/compat/ngx-translate.md +1 -1
- package/docs/ko/compat/nuxtjs-i18n.md +1 -1
- package/docs/ko/compat/polyglot.md +1 -1
- package/docs/ko/compat/react-i18next.md +1 -1
- package/docs/ko/compat/react-intl.md +1 -1
- package/docs/ko/compat/svelte-i18n.md +1 -1
- package/docs/ko/compat/transloco.md +1 -1
- package/docs/ko/compat/vue-i18n.md +1 -1
- package/docs/ko/intlayer_with_remix_3.md +543 -0
- package/docs/nl/cli/index.md +4 -5
- package/docs/nl/cli/scan.md +5 -1
- package/docs/nl/cli/standalone.md +5 -1
- package/docs/pl/benchmark/index.md +4 -1
- package/docs/pl/benchmark/nextjs.md +32 -27
- package/docs/pl/benchmark/solid.md +13 -10
- package/docs/pl/benchmark/svelte.md +12 -9
- package/docs/pl/benchmark/tanstack.md +29 -24
- package/docs/pl/benchmark/vue.md +11 -7
- package/docs/pl/cli/build.md +8 -1
- package/docs/pl/cli/configuration.md +3 -1
- package/docs/pl/cli/doc-review.md +8 -1
- package/docs/pl/cli/doc-translate.md +5 -1
- package/docs/pl/cli/extract.md +2 -1
- package/docs/pl/cli/fill.md +5 -1
- package/docs/pl/cli/index.md +4 -5
- package/docs/pl/cli/live.md +5 -1
- package/docs/pl/cli/login.md +2 -2
- package/docs/pl/cli/pull.md +5 -1
- package/docs/pl/cli/push.md +5 -1
- package/docs/pl/cli/scan.md +5 -1
- package/docs/pl/cli/standalone.md +5 -1
- package/docs/pl/cli/test.md +5 -1
- package/docs/pl/cli/watch.md +5 -1
- package/docs/pl/compat/i18n-js.md +1 -1
- package/docs/pl/compat/i18next.md +1 -1
- package/docs/pl/compat/lingui.md +1 -1
- package/docs/pl/compat/next-i18next.md +1 -1
- package/docs/pl/compat/next-intl.md +1 -1
- package/docs/pl/compat/next-translate.md +1 -1
- package/docs/pl/compat/ngx-translate.md +1 -1
- package/docs/pl/compat/nuxtjs-i18n.md +1 -1
- package/docs/pl/compat/polyglot.md +1 -1
- package/docs/pl/compat/react-i18next.md +1 -1
- package/docs/pl/compat/react-intl.md +1 -1
- package/docs/pl/compat/svelte-i18n.md +1 -1
- package/docs/pl/compat/transloco.md +1 -1
- package/docs/pl/compat/vue-i18n.md +1 -1
- package/docs/pl/intlayer_with_remix_3.md +551 -0
- package/docs/pt/benchmark/index.md +4 -1
- package/docs/pt/benchmark/nextjs.md +32 -27
- package/docs/pt/benchmark/solid.md +13 -10
- package/docs/pt/benchmark/svelte.md +12 -9
- package/docs/pt/benchmark/tanstack.md +29 -24
- package/docs/pt/benchmark/vue.md +11 -7
- package/docs/pt/cli/build.md +8 -1
- package/docs/pt/cli/configuration.md +3 -1
- package/docs/pt/cli/doc-review.md +8 -1
- package/docs/pt/cli/doc-translate.md +5 -1
- package/docs/pt/cli/extract.md +2 -1
- package/docs/pt/cli/fill.md +5 -1
- package/docs/pt/cli/index.md +4 -5
- package/docs/pt/cli/live.md +5 -1
- package/docs/pt/cli/login.md +2 -2
- package/docs/pt/cli/pull.md +5 -1
- package/docs/pt/cli/push.md +5 -1
- package/docs/pt/cli/scan.md +5 -1
- package/docs/pt/cli/standalone.md +5 -1
- package/docs/pt/cli/test.md +5 -1
- package/docs/pt/cli/watch.md +5 -1
- package/docs/pt/compat/i18n-js.md +1 -1
- package/docs/pt/compat/i18next.md +1 -1
- package/docs/pt/compat/lingui.md +1 -1
- package/docs/pt/compat/next-i18next.md +1 -1
- package/docs/pt/compat/next-intl.md +1 -1
- package/docs/pt/compat/next-translate.md +1 -1
- package/docs/pt/compat/ngx-translate.md +1 -1
- package/docs/pt/compat/nuxtjs-i18n.md +1 -1
- package/docs/pt/compat/polyglot.md +1 -1
- package/docs/pt/compat/react-i18next.md +1 -1
- package/docs/pt/compat/react-intl.md +1 -1
- package/docs/pt/compat/svelte-i18n.md +1 -1
- package/docs/pt/compat/transloco.md +1 -1
- package/docs/pt/compat/vue-i18n.md +1 -1
- package/docs/pt/intlayer_with_remix_3.md +558 -0
- package/docs/ru/benchmark/index.md +4 -1
- package/docs/ru/benchmark/nextjs.md +32 -27
- package/docs/ru/benchmark/solid.md +13 -10
- package/docs/ru/benchmark/svelte.md +12 -9
- package/docs/ru/benchmark/tanstack.md +29 -24
- package/docs/ru/benchmark/vue.md +11 -7
- package/docs/ru/cli/build.md +8 -1
- package/docs/ru/cli/configuration.md +3 -1
- package/docs/ru/cli/doc-review.md +8 -1
- package/docs/ru/cli/doc-translate.md +5 -1
- package/docs/ru/cli/extract.md +2 -1
- package/docs/ru/cli/fill.md +5 -1
- package/docs/ru/cli/index.md +4 -5
- package/docs/ru/cli/live.md +5 -1
- package/docs/ru/cli/login.md +2 -2
- package/docs/ru/cli/pull.md +5 -1
- package/docs/ru/cli/push.md +5 -1
- package/docs/ru/cli/scan.md +5 -1
- package/docs/ru/cli/standalone.md +5 -1
- package/docs/ru/cli/test.md +5 -1
- package/docs/ru/cli/watch.md +5 -1
- package/docs/ru/compat/i18n-js.md +1 -1
- package/docs/ru/compat/i18next.md +1 -1
- package/docs/ru/compat/lingui.md +1 -1
- package/docs/ru/compat/next-i18next.md +1 -1
- package/docs/ru/compat/next-intl.md +1 -1
- package/docs/ru/compat/next-translate.md +1 -1
- package/docs/ru/compat/ngx-translate.md +1 -1
- package/docs/ru/compat/nuxtjs-i18n.md +1 -1
- package/docs/ru/compat/polyglot.md +1 -1
- package/docs/ru/compat/react-i18next.md +1 -1
- package/docs/ru/compat/react-intl.md +1 -1
- package/docs/ru/compat/svelte-i18n.md +1 -1
- package/docs/ru/compat/transloco.md +1 -1
- package/docs/ru/compat/vue-i18n.md +1 -1
- package/docs/ru/intlayer_with_remix_3.md +558 -0
- package/docs/tr/benchmark/index.md +4 -1
- package/docs/tr/benchmark/nextjs.md +32 -27
- package/docs/tr/benchmark/solid.md +13 -10
- package/docs/tr/benchmark/svelte.md +12 -9
- package/docs/tr/benchmark/tanstack.md +29 -24
- package/docs/tr/benchmark/vue.md +11 -7
- package/docs/tr/cli/build.md +8 -1
- package/docs/tr/cli/configuration.md +3 -1
- package/docs/tr/cli/doc-review.md +8 -1
- package/docs/tr/cli/doc-translate.md +5 -1
- package/docs/tr/cli/extract.md +2 -1
- package/docs/tr/cli/fill.md +5 -1
- package/docs/tr/cli/index.md +4 -5
- package/docs/tr/cli/live.md +5 -1
- package/docs/tr/cli/login.md +2 -2
- package/docs/tr/cli/pull.md +5 -1
- package/docs/tr/cli/push.md +5 -1
- package/docs/tr/cli/scan.md +5 -1
- package/docs/tr/cli/standalone.md +5 -1
- package/docs/tr/cli/test.md +5 -1
- package/docs/tr/cli/watch.md +5 -1
- package/docs/tr/compat/i18n-js.md +1 -1
- package/docs/tr/compat/i18next.md +1 -1
- package/docs/tr/compat/lingui.md +1 -1
- package/docs/tr/compat/next-i18next.md +1 -1
- package/docs/tr/compat/next-intl.md +1 -1
- package/docs/tr/compat/next-translate.md +1 -1
- package/docs/tr/compat/ngx-translate.md +1 -1
- package/docs/tr/compat/nuxtjs-i18n.md +1 -1
- package/docs/tr/compat/polyglot.md +1 -1
- package/docs/tr/compat/react-i18next.md +1 -1
- package/docs/tr/compat/react-intl.md +1 -1
- package/docs/tr/compat/svelte-i18n.md +1 -1
- package/docs/tr/compat/transloco.md +1 -1
- package/docs/tr/compat/vue-i18n.md +1 -1
- package/docs/tr/intlayer_with_remix_3.md +566 -0
- package/docs/uk/benchmark/index.md +4 -1
- package/docs/uk/benchmark/nextjs.md +32 -27
- package/docs/uk/benchmark/solid.md +13 -10
- package/docs/uk/benchmark/svelte.md +12 -9
- package/docs/uk/benchmark/tanstack.md +29 -24
- package/docs/uk/benchmark/vue.md +11 -7
- package/docs/uk/cli/build.md +8 -1
- package/docs/uk/cli/configuration.md +3 -1
- package/docs/uk/cli/doc-review.md +8 -1
- package/docs/uk/cli/doc-translate.md +5 -1
- package/docs/uk/cli/extract.md +2 -1
- package/docs/uk/cli/fill.md +5 -1
- package/docs/uk/cli/index.md +4 -5
- package/docs/uk/cli/live.md +5 -1
- package/docs/uk/cli/login.md +2 -2
- package/docs/uk/cli/pull.md +5 -1
- package/docs/uk/cli/push.md +5 -1
- package/docs/uk/cli/scan.md +5 -1
- package/docs/uk/cli/standalone.md +5 -1
- package/docs/uk/cli/test.md +5 -1
- package/docs/uk/cli/watch.md +5 -1
- package/docs/uk/compat/i18n-js.md +1 -1
- package/docs/uk/compat/i18next.md +1 -1
- package/docs/uk/compat/lingui.md +1 -1
- package/docs/uk/compat/next-i18next.md +1 -1
- package/docs/uk/compat/next-intl.md +1 -1
- package/docs/uk/compat/next-translate.md +1 -1
- package/docs/uk/compat/ngx-translate.md +1 -1
- package/docs/uk/compat/nuxtjs-i18n.md +1 -1
- package/docs/uk/compat/polyglot.md +1 -1
- package/docs/uk/compat/react-i18next.md +1 -1
- package/docs/uk/compat/react-intl.md +1 -1
- package/docs/uk/compat/svelte-i18n.md +1 -1
- package/docs/uk/compat/transloco.md +1 -1
- package/docs/uk/compat/vue-i18n.md +1 -1
- package/docs/uk/intlayer_with_remix_3.md +566 -0
- package/docs/ur/cli/index.md +4 -5
- package/docs/ur/cli/scan.md +5 -1
- package/docs/ur/cli/standalone.md +5 -1
- package/docs/vi/benchmark/index.md +4 -1
- package/docs/vi/benchmark/nextjs.md +32 -27
- package/docs/vi/benchmark/solid.md +13 -10
- package/docs/vi/benchmark/svelte.md +12 -9
- package/docs/vi/benchmark/tanstack.md +29 -24
- package/docs/vi/benchmark/vue.md +11 -7
- package/docs/vi/cli/build.md +8 -1
- package/docs/vi/cli/configuration.md +3 -1
- package/docs/vi/cli/doc-review.md +8 -1
- package/docs/vi/cli/doc-translate.md +5 -1
- package/docs/vi/cli/extract.md +2 -1
- package/docs/vi/cli/fill.md +5 -1
- package/docs/vi/cli/index.md +4 -5
- package/docs/vi/cli/live.md +5 -1
- package/docs/vi/cli/login.md +2 -2
- package/docs/vi/cli/pull.md +5 -1
- package/docs/vi/cli/push.md +5 -1
- package/docs/vi/cli/scan.md +5 -1
- package/docs/vi/cli/standalone.md +5 -1
- package/docs/vi/cli/test.md +5 -1
- package/docs/vi/cli/watch.md +5 -1
- package/docs/vi/compat/i18n-js.md +1 -1
- package/docs/vi/compat/i18next.md +1 -1
- package/docs/vi/compat/lingui.md +1 -1
- package/docs/vi/compat/next-i18next.md +1 -1
- package/docs/vi/compat/next-intl.md +1 -1
- package/docs/vi/compat/next-translate.md +1 -1
- package/docs/vi/compat/ngx-translate.md +1 -1
- package/docs/vi/compat/nuxtjs-i18n.md +1 -1
- package/docs/vi/compat/polyglot.md +1 -1
- package/docs/vi/compat/react-i18next.md +1 -1
- package/docs/vi/compat/react-intl.md +1 -1
- package/docs/vi/compat/svelte-i18n.md +1 -1
- package/docs/vi/compat/transloco.md +1 -1
- package/docs/vi/compat/vue-i18n.md +1 -1
- package/docs/vi/intlayer_with_remix_3.md +566 -0
- package/docs/zh/benchmark/index.md +4 -1
- package/docs/zh/benchmark/nextjs.md +32 -27
- package/docs/zh/benchmark/solid.md +13 -10
- package/docs/zh/benchmark/svelte.md +12 -9
- package/docs/zh/benchmark/tanstack.md +29 -24
- package/docs/zh/benchmark/vue.md +11 -7
- package/docs/zh/cli/build.md +8 -1
- package/docs/zh/cli/configuration.md +3 -1
- package/docs/zh/cli/doc-review.md +8 -1
- package/docs/zh/cli/doc-translate.md +5 -1
- package/docs/zh/cli/extract.md +2 -1
- package/docs/zh/cli/fill.md +5 -1
- package/docs/zh/cli/index.md +4 -5
- package/docs/zh/cli/live.md +5 -1
- package/docs/zh/cli/login.md +2 -2
- package/docs/zh/cli/pull.md +5 -1
- package/docs/zh/cli/push.md +5 -1
- package/docs/zh/cli/scan.md +5 -1
- package/docs/zh/cli/standalone.md +5 -1
- package/docs/zh/cli/test.md +5 -1
- package/docs/zh/cli/watch.md +5 -1
- package/docs/zh/compat/i18n-js.md +1 -1
- package/docs/zh/compat/i18next.md +1 -1
- package/docs/zh/compat/lingui.md +1 -1
- package/docs/zh/compat/next-i18next.md +1 -1
- package/docs/zh/compat/next-intl.md +1 -1
- package/docs/zh/compat/next-translate.md +1 -1
- package/docs/zh/compat/ngx-translate.md +1 -1
- package/docs/zh/compat/nuxtjs-i18n.md +1 -1
- package/docs/zh/compat/polyglot.md +1 -1
- package/docs/zh/compat/react-i18next.md +1 -1
- package/docs/zh/compat/react-intl.md +1 -1
- package/docs/zh/compat/svelte-i18n.md +1 -1
- package/docs/zh/compat/transloco.md +1 -1
- package/docs/zh/compat/vue-i18n.md +1 -1
- package/docs/zh/intlayer_with_remix_3.md +558 -0
- package/package.json +7 -7
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +0 -20
- package/docs/ar/cli/ci.md +0 -186
- package/docs/de/cli/ci.md +0 -186
- package/docs/en/cli/ci.md +0 -216
- package/docs/en-GB/cli/ci.md +0 -186
- package/docs/es/cli/ci.md +0 -186
- package/docs/fr/cli/ci.md +0 -186
- package/docs/hi/cli/ci.md +0 -186
- package/docs/id/cli/ci.md +0 -186
- package/docs/it/cli/ci.md +0 -186
- package/docs/ja/cli/ci.md +0 -186
- package/docs/ko/cli/ci.md +0 -186
- package/docs/pl/cli/ci.md +0 -186
- package/docs/pt/cli/ci.md +0 -186
- package/docs/ru/cli/ci.md +0 -186
- package/docs/tr/cli/ci.md +0 -186
- package/docs/uk/cli/ci.md +0 -186
- package/docs/vi/cli/ci.md +0 -186
- package/docs/zh/cli/ci.md +0 -186
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-09
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
|
+
title: "Remix 3 i18n - Повний посібник з перекладу вашого застосунку"
|
|
5
|
+
description: "Забудьте про i18next. Посібник 2026 року зі створення багатомовного (i18n) застосунку Remix 3. Перекладайте за допомогою агентів ШІ та оптимізуйте розмір бандла, SEO та продуктивність."
|
|
6
|
+
keywords:
|
|
7
|
+
- Інтернаціоналізація
|
|
8
|
+
- Документація
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Remix 3
|
|
11
|
+
- Remix
|
|
12
|
+
- JavaScript
|
|
13
|
+
- TypeScript
|
|
14
|
+
- Веб-стандарти
|
|
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: "Початкова документація для Remix 3"
|
|
25
|
+
author: aymericzip
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Переклад вашого веб-сайту Remix 3 за допомогою Intlayer | Інтернаціоналізація (i18n)
|
|
29
|
+
|
|
30
|
+
Цей посібник демонструє, як інтегрувати **Intlayer** для безперешкодної інтернаціоналізації в застосунках **Remix 3** з маршрутизацією з урахуванням локалі, типобезпечними оголошеннями вмісту, серверними компонентами JSX та підтримкою середовищ виконання Node.js, Bun, Deno та Cloudflare Workers.
|
|
31
|
+
|
|
32
|
+
## Що таке Remix 3?
|
|
33
|
+
|
|
34
|
+
**Remix 3** являє собою фундаментальну архітектурну зміну у бік **модульного, незалежного від середовища виконання веб-фреймворку, повністю побудованого на веб-стандартах**. Замість прив'язки до конкретних бандлерів або пропрієтарних серверних API, Remix 3 поширюється у вигляді спеціалізованих модульних пакетів:
|
|
35
|
+
|
|
36
|
+
- **`remix/fetch-router`** (або `remix/router`): Легковажна маршрутизація відповідно до стандартів на базі Fetch API (`Request` та `Response`).
|
|
37
|
+
- **`remix/ui`**: Модель компонентів JSX (`jsxImportSource: "remix/ui"`). Компонент є функцією налаштування (setup function), яка повертає функцію рендерингу (render function), отримуючи пропси через типізований дескриптор (handle).
|
|
38
|
+
- **`remix/middleware/render`**: Встановлює `context.render(<Page />)` для кожного запиту, транслюючи (streaming) дерево JSX у HTML-відповідь `Response`.
|
|
39
|
+
- **`remix/node-fetch-server`**: Серверні адаптери для Node.js із нативною підтримкою Bun, Deno та edge-середовищ.
|
|
40
|
+
- **`remix/cookie`**: Криптографічно підписаний парсинг і серіалізація файлів cookie.
|
|
41
|
+
|
|
42
|
+
У поєднанні з **Intlayer** ви отримуєте повноцінну систему інтернаціоналізації, що гарантує безпеку під час компіляції, автоматизовані переклади за допомогою ШІ, серверний рендеринг без додаткових накладних витрат та зручну маршрутизацію локалей.
|
|
43
|
+
|
|
44
|
+
## Зміст
|
|
45
|
+
|
|
46
|
+
<TOC/>
|
|
47
|
+
|
|
48
|
+
## Чому варто обрати Intlayer?
|
|
49
|
+
|
|
50
|
+
У порівнянні з традиційними рішеннями, такими як `i18next` або спеціальними завантажувачами перекладів, Intlayer пропонує інтегрований досвід розробки, оптимізований для сучасної веб-архітектури:
|
|
51
|
+
|
|
52
|
+
<AccordionGroup>
|
|
53
|
+
<Accordion header="Повне охоплення Remix 3 та веб-стандартів">
|
|
54
|
+
|
|
55
|
+
Intlayer розроблений для бездоганної роботи з веб-стандартами (`Request`, `Response`, `Headers` та `URL`). Він легко інтегрується у Fetch-роутер Remix 3 через легке middleware, витягуючи локалі зі шляхів URL, cookie або заголовків `Accept-Language` без прив'язки до певного рантайму.
|
|
56
|
+
|
|
57
|
+
</Accordion>
|
|
58
|
+
<Accordion header="Типобезпечні оголошення вмісту">
|
|
59
|
+
|
|
60
|
+
Попрощайтеся з нетипізованими рядковими ключами JSON та помилками відсутності перекладів під час виконання. Intlayer забезпечує суворі перевірки TypeScript для всіх оголошених локалей, попереджаючи вас ще під час компіляції, якщо переклад відсутній або некоректний.
|
|
61
|
+
|
|
62
|
+
</Accordion>
|
|
63
|
+
<Accordion header="Нульовий оверхед бандла на сервері">
|
|
64
|
+
|
|
65
|
+
При використанні серверних компонентів JSX у Remix 3 у вихідний потік потрапляє лише готовий текст для запитаної локалі. Компоненти виконуються виключно на сервері, якщо ви явно не налаштували клієнтську гідратацію через `clientEntry`. За замовчуванням клієнту не надсилаються жодні каталоги перекладів або середовища виконання гідратації.
|
|
66
|
+
|
|
67
|
+
</Accordion>
|
|
68
|
+
<Accordion header="Готовність до агентів ШІ та автоматизації">
|
|
69
|
+
|
|
70
|
+
Intlayer розміщує оголошення контенту (`.content.ts`) поруч із логікою маршрутів, зменшуючи контекст токенів, необхідний для великих мовних моделей (LLM). Вбудовані команди CLI, такі як `intlayer fill` та `intlayer test`, дозволяють автоматизувати переклади в пайплайнах CI/CD за прямою ціною вашого постачальника ШІ.
|
|
71
|
+
|
|
72
|
+
</Accordion>
|
|
73
|
+
<Accordion header="Візуальний редактор та інтеграція з CMS">
|
|
74
|
+
|
|
75
|
+
Окрім роботи через код, Intlayer надає автономний [Візуальний редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md) та [Віддалену CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md), дозволяючи редакторам та перекладачам оновлювати вміст без повторного розгортання проєкту.
|
|
76
|
+
|
|
77
|
+
</Accordion>
|
|
78
|
+
</AccordionGroup>
|
|
79
|
+
|
|
80
|
+
## Покроковий посібник
|
|
81
|
+
|
|
82
|
+
<Tabs defaultTab="code">
|
|
83
|
+
<Tab label="Код" 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="Демо CodeSandbox - Як інтернаціоналізувати ваш застосунок за допомогою 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="Демо" 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="Демо шаблону Intlayer Remix 3"
|
|
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
|
+
Перегляньте [Шаблон застосунку](https://github.com/aymericzip/intlayer-remix-3-template) на GitHub.
|
|
108
|
+
|
|
109
|
+
<Steps>
|
|
110
|
+
<Step number={1} title="Встановлення залежностей">
|
|
111
|
+
|
|
112
|
+
Встановіть `intlayer` та `remix` (версії 3) за допомогою обраного пакетного менеджера:
|
|
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`**: Основний рушій інтернаціоналізації для керування конфігурацією, оголошення словників (`t()`, `Dictionary`), утиліт CLI та рантайм-інтерпретатора.
|
|
131
|
+
- **`remix`**: Уніфікований пакет фреймворку Remix 3, що експортує `remix/router`, `remix/routes`, `remix/ui`, `remix/middleware/render` та `remix/node-fetch-server`.
|
|
132
|
+
|
|
133
|
+
</Step>
|
|
134
|
+
<Step number={2} title="Налаштування Intlayer">
|
|
135
|
+
|
|
136
|
+
Створіть файл `intlayer.config.ts` у корені проєкту для оголошення підтримуваних мов та налаштувань інтернаціоналізації:
|
|
137
|
+
|
|
138
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
139
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
140
|
+
|
|
141
|
+
const config: IntlayerConfig = {
|
|
142
|
+
internationalization: {
|
|
143
|
+
locales: [
|
|
144
|
+
Locales.ENGLISH,
|
|
145
|
+
Locales.FRENCH,
|
|
146
|
+
Locales.SPANISH,
|
|
147
|
+
Locales.UKRAINIAN,
|
|
148
|
+
],
|
|
149
|
+
defaultLocale: Locales.ENGLISH,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export default config;
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
157
|
+
import { Locales } from "intlayer";
|
|
158
|
+
|
|
159
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
160
|
+
const config = {
|
|
161
|
+
internationalization: {
|
|
162
|
+
locales: [
|
|
163
|
+
Locales.ENGLISH,
|
|
164
|
+
Locales.FRENCH,
|
|
165
|
+
Locales.SPANISH,
|
|
166
|
+
Locales.UKRAINIAN,
|
|
167
|
+
],
|
|
168
|
+
defaultLocale: Locales.ENGLISH,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export default config;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
176
|
+
const { Locales } = require("intlayer");
|
|
177
|
+
|
|
178
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
179
|
+
const config = {
|
|
180
|
+
internationalization: {
|
|
181
|
+
locales: [
|
|
182
|
+
Locales.ENGLISH,
|
|
183
|
+
Locales.FRENCH,
|
|
184
|
+
Locales.SPANISH,
|
|
185
|
+
Locales.UKRAINIAN,
|
|
186
|
+
],
|
|
187
|
+
defaultLocale: Locales.ENGLISH,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
module.exports = config;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
> Додаткові параметри конфігурації можна знайти в [документації з налаштування](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).
|
|
195
|
+
|
|
196
|
+
</Step>
|
|
197
|
+
<Step number={3} title="Оголошення багатомовного контенту">
|
|
198
|
+
|
|
199
|
+
Оголосіть локалізований вміст у файлі `.content.ts`:
|
|
200
|
+
|
|
201
|
+
```typescript fileName="src/home.content.ts" contentDeclarationFormat={["typescript", "esm"]}
|
|
202
|
+
import { t, type Dictionary } from "intlayer";
|
|
203
|
+
|
|
204
|
+
const homeContent = {
|
|
205
|
+
key: "home",
|
|
206
|
+
content: {
|
|
207
|
+
title: t({
|
|
208
|
+
uk: "Ласкаво просимо до Remix 3",
|
|
209
|
+
en: "Welcome to Remix 3",
|
|
210
|
+
fr: "Bienvenue sur Remix 3",
|
|
211
|
+
es: "Bienvenido a Remix 3",
|
|
212
|
+
}),
|
|
213
|
+
description: t({
|
|
214
|
+
uk: "Модульний застосунок на базі веб-стандартів із вбудованою i18n.",
|
|
215
|
+
en: "A composable, web-standard application with native i18n.",
|
|
216
|
+
fr: "Une application composable basée sur les standards web avec i18n native.",
|
|
217
|
+
es: "Una aplicación componible basada en estándares web con i18n nativa.",
|
|
218
|
+
}),
|
|
219
|
+
switchLanguage: t({
|
|
220
|
+
uk: "Змінити мову:",
|
|
221
|
+
en: "Switch language:",
|
|
222
|
+
fr: "Changer de langue :",
|
|
223
|
+
es: "Cambiar idioma:",
|
|
224
|
+
}),
|
|
225
|
+
},
|
|
226
|
+
} satisfies Dictionary;
|
|
227
|
+
|
|
228
|
+
export default homeContent;
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
> Intlayer також підтримує формати JSON, YAML та CommonJS. Див. [Документацію щодо оголошення контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md).
|
|
232
|
+
|
|
233
|
+
</Step>
|
|
234
|
+
<Step number={4} title="Збірка словників Intlayer">
|
|
235
|
+
|
|
236
|
+
Скомпілюйте визначення словників для створення типів TypeScript і реєстрів середовища виконання:
|
|
237
|
+
|
|
238
|
+
```bash packageManager="npm"
|
|
239
|
+
npx intlayer build
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
```bash packageManager="pnpm"
|
|
243
|
+
pnpm dlx intlayer build
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```bash packageManager="yarn"
|
|
247
|
+
yarn dlx intlayer build
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
```bash packageManager="bun"
|
|
251
|
+
bun x intlayer build
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Ця команда компілює ваш контент у каталог артефактів `.intlayer`, надаючи автодоповнення TypeScript та швидкий доступ до словників.
|
|
255
|
+
|
|
256
|
+
</Step>
|
|
257
|
+
<Step number={5} title="Реалізація middleware Intlayer">
|
|
258
|
+
|
|
259
|
+
Remix 3 надає конвеєр middleware через `createRouter({ middleware: [...] })`.
|
|
260
|
+
|
|
261
|
+
Створіть middleware Intlayer для визначення мови кожного вхідного запиту за:
|
|
262
|
+
|
|
263
|
+
1. Префіксом шляху URL через `getLocaleFromPath` (наприклад, `/uk` або `/fr`).
|
|
264
|
+
2. Допоміжною функцією `getLocale`, яка узгоджує мову через cookie (`INTLAYER_LOCALE`), власні заголовки (`x-intlayer-locale`), стандартні заголовки `Accept-Language` та значення `defaultLocale`.
|
|
265
|
+
|
|
266
|
+
```typescript fileName="src/middleware/intlayer.ts" codeFormat={["typescript", "esm"]}
|
|
267
|
+
import {
|
|
268
|
+
defaultLocale,
|
|
269
|
+
getCookie,
|
|
270
|
+
getLocale,
|
|
271
|
+
getLocaleFromPath,
|
|
272
|
+
type Locale,
|
|
273
|
+
} from "intlayer";
|
|
274
|
+
import { createContextKey, type Middleware } from "remix/router";
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Типобезпечний ключ контексту для отримання визначеної локалі з RequestContext Remix 3.
|
|
278
|
+
*/
|
|
279
|
+
export const localeKey = createContextKey<Locale>(defaultLocale);
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Middleware Intlayer для Remix 3.
|
|
283
|
+
*
|
|
284
|
+
* Визначає локаль запиту за таким пріоритетом:
|
|
285
|
+
* 1. Префікс шляху URL (напр. `/uk/...`) через `getLocaleFromPath`
|
|
286
|
+
* 2. Узгодження заголовків і сховища через `getLocale` (cookie, власний заголовок, Accept-Language, fallback defaultLocale)
|
|
287
|
+
*
|
|
288
|
+
* Прикріплює визначену локаль до RequestContext Remix 3.
|
|
289
|
+
*/
|
|
290
|
+
export const intlayer = (): Middleware => {
|
|
291
|
+
return async (context, next) => {
|
|
292
|
+
// Визначення шляху (/uk/about -> "uk", /about -> undefined)
|
|
293
|
+
const pathLocale = getLocaleFromPath(context.url.pathname);
|
|
294
|
+
|
|
295
|
+
if (pathLocale) {
|
|
296
|
+
// Додати визначену локаль до контексту запиту Remix 3
|
|
297
|
+
context.set(localeKey, pathLocale);
|
|
298
|
+
|
|
299
|
+
return next();
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const storedLocale = await getLocale({
|
|
303
|
+
getHeader: (name) => context.headers.get(name),
|
|
304
|
+
getCookie: (name) =>
|
|
305
|
+
getCookie(name, context.headers.get("cookie") ?? undefined),
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Додати визначену локаль до контексту запиту Remix 3
|
|
309
|
+
context.set(localeKey, storedLocale ?? defaultLocale);
|
|
310
|
+
|
|
311
|
+
return next();
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
</Step>
|
|
317
|
+
<Step number={6} title="Визначення типобезпечних маршрутів">
|
|
318
|
+
|
|
319
|
+
Визначте маршрути програми за допомогою `route()` з `remix/routes`:
|
|
320
|
+
|
|
321
|
+
```typescript fileName="src/routes.ts" codeFormat={["typescript", "esm"]}
|
|
322
|
+
import { route } from "remix/routes";
|
|
323
|
+
|
|
324
|
+
export const routes = route({
|
|
325
|
+
// Маршрут за замовчуванням
|
|
326
|
+
home: "/",
|
|
327
|
+
|
|
328
|
+
// Локалізований маршрут з динамічним сегментом :locale
|
|
329
|
+
localizedHome: "/:locale",
|
|
330
|
+
});
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Використання `route()` гарантує типобезпечну генерацію URL-адрес у всьому застосунку:
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
routes.home.href(); // "/"
|
|
337
|
+
routes.localizedHome.href({ locale: "uk" }); // "/uk"
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
</Step>
|
|
341
|
+
<Step number={7} title="Рендеринг локалізованих сторінок за допомогою JSX">
|
|
342
|
+
|
|
343
|
+
Remix 3 використовує `remix/ui` для компонентів JSX. Компонент є **функцією налаштування (setup function)**, яка повертає **функцію рендерингу (render function)**. Пропси передаються через типізований `handle` (наприклад, `handle.props.locale`):
|
|
344
|
+
|
|
345
|
+
Створіть спільну оболонку HTML-документа:
|
|
346
|
+
|
|
347
|
+
```tsx fileName="src/views/document.tsx" codeFormat={["typescript", "esm"]}
|
|
348
|
+
import type { SetupFunction } from "remix/ui";
|
|
349
|
+
|
|
350
|
+
export const Document: SetupFunction<{
|
|
351
|
+
title: string;
|
|
352
|
+
lang?: string;
|
|
353
|
+
dir?: string;
|
|
354
|
+
children?: any;
|
|
355
|
+
}> = (handle) => {
|
|
356
|
+
return () => {
|
|
357
|
+
const { title, lang = "en", dir = "ltr", children } = handle.props;
|
|
358
|
+
|
|
359
|
+
return (
|
|
360
|
+
<html lang={lang} dir={dir}>
|
|
361
|
+
<head>
|
|
362
|
+
<meta charSet="utf-8" />
|
|
363
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
364
|
+
<title>{title}</title>
|
|
365
|
+
</head>
|
|
366
|
+
<body>{children}</body>
|
|
367
|
+
</html>
|
|
368
|
+
);
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Потім створіть відображення головної сторінки. Використовуйте `getIntlayer` для отримання вмісту словника для активної локалі та відобразіть перемикач мов за допомогою `getLocalizedPath`:
|
|
374
|
+
|
|
375
|
+
```tsx fileName="src/views/home.tsx" codeFormat={["typescript", "esm"]}
|
|
376
|
+
import {
|
|
377
|
+
getIntlayer,
|
|
378
|
+
getHTMLTextDir,
|
|
379
|
+
getLocaleName,
|
|
380
|
+
getLocalizedPath,
|
|
381
|
+
type Locale,
|
|
382
|
+
locales,
|
|
383
|
+
} from "intlayer";
|
|
384
|
+
import type { SetupFunction } from "remix/ui";
|
|
385
|
+
import { routes } from "../routes";
|
|
386
|
+
import { Document } from "./document";
|
|
387
|
+
|
|
388
|
+
export const HomePage: SetupFunction<{ locale: Locale }> = (handle) => {
|
|
389
|
+
return () => {
|
|
390
|
+
const { locale } = handle.props;
|
|
391
|
+
const content = getIntlayer("home", locale);
|
|
392
|
+
|
|
393
|
+
return (
|
|
394
|
+
<Document
|
|
395
|
+
title={content.title}
|
|
396
|
+
lang={locale}
|
|
397
|
+
dir={getHTMLTextDir(locale)}
|
|
398
|
+
>
|
|
399
|
+
<header>
|
|
400
|
+
<nav aria-label="Languages">
|
|
401
|
+
<span>{content.switchLanguage}</span>
|
|
402
|
+
{locales.map((loc) => {
|
|
403
|
+
const href = getLocalizedPath(routes.home.href(), loc);
|
|
404
|
+
const isActive = loc === locale;
|
|
405
|
+
return (
|
|
406
|
+
<a
|
|
407
|
+
href={href}
|
|
408
|
+
class={isActive ? "active" : undefined}
|
|
409
|
+
aria-current={isActive ? "page" : undefined}
|
|
410
|
+
>
|
|
411
|
+
{getLocaleName(loc, locale)}
|
|
412
|
+
</a>
|
|
413
|
+
);
|
|
414
|
+
})}
|
|
415
|
+
</nav>
|
|
416
|
+
</header>
|
|
417
|
+
<main>
|
|
418
|
+
<h1>{content.title}</h1>
|
|
419
|
+
<p>{content.description}</p>
|
|
420
|
+
</main>
|
|
421
|
+
</Document>
|
|
422
|
+
);
|
|
423
|
+
};
|
|
424
|
+
};
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
> Remix JSX не є React: тут немає хуків, `class` пишеться як є (не `className`), а компоненти транслюються безпосередньо в HTML-відповідь без будь-яких накладних витрат JavaScript на стороні клієнта.
|
|
428
|
+
|
|
429
|
+
</Step>
|
|
430
|
+
<Step number={8} title="Підключення маршрутизатора та сервера">
|
|
431
|
+
|
|
432
|
+
Створіть `src/router.tsx` для реєстрації middleware та визначення дій маршрутів. Використовуйте `remix/middleware/render`, щоб встановити хелпер `context.render()`, і передайте свій компонент JSX напряму:
|
|
433
|
+
|
|
434
|
+
```tsx fileName="src/router.tsx" codeFormat={["typescript", "esm"]}
|
|
435
|
+
import { isDeclaredLocale } from "intlayer";
|
|
436
|
+
import { render } from "remix/middleware/render";
|
|
437
|
+
import { createRouter } from "remix/router";
|
|
438
|
+
import { intlayer, localeKey } from "./middleware/intlayer";
|
|
439
|
+
import { routes } from "./routes";
|
|
440
|
+
import { HomePage } from "./views/home";
|
|
441
|
+
|
|
442
|
+
export const router = createRouter({
|
|
443
|
+
middleware: [intlayer(), render()],
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
router.map(routes, {
|
|
447
|
+
actions: {
|
|
448
|
+
// Маршрут мови за замовчуванням (наприклад /)
|
|
449
|
+
home(context) {
|
|
450
|
+
const locale = context.get(localeKey);
|
|
451
|
+
return context.render(<HomePage locale={locale} />);
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
// Локалізований маршрут (наприклад /fr, /es)
|
|
455
|
+
localizedHome(context) {
|
|
456
|
+
const { locale } = context.params;
|
|
457
|
+
|
|
458
|
+
if (!isDeclaredLocale(locale)) {
|
|
459
|
+
return new Response("Not Found", { status: 404 });
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
return context.render(<HomePage locale={locale} />);
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
});
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
> `context.render` приймає необов'язковий `ResponseInit` другим аргументом, що дозволяє встановлювати власні заголовки (наприклад `Content-Language` або `Cache-Control`) поруч із відрендереною сторінкою:
|
|
469
|
+
>
|
|
470
|
+
> ```typescript
|
|
471
|
+
> return context.render(<HomePage locale={locale} />, {
|
|
472
|
+
> headers: { "Content-Language": locale },
|
|
473
|
+
> });
|
|
474
|
+
> ```
|
|
475
|
+
|
|
476
|
+
Тепер підключіть `src/server.ts`, використовуючи `remix/node-fetch-server` для Node.js (або експортуйте обробник `fetch` напряму для Bun, Deno або Cloudflare Workers):
|
|
477
|
+
|
|
478
|
+
```typescript fileName="src/server.ts" codeFormat={["typescript", "esm"]}
|
|
479
|
+
import * as http from "node:http";
|
|
480
|
+
import { createRequestListener } from "remix/node-fetch-server";
|
|
481
|
+
import { router } from "./router";
|
|
482
|
+
|
|
483
|
+
const PORT = Number(process.env.PORT || 3000);
|
|
484
|
+
|
|
485
|
+
// Сервер HTTP Node.js
|
|
486
|
+
const server = http.createServer(
|
|
487
|
+
createRequestListener((request) => router.fetch(request))
|
|
488
|
+
);
|
|
489
|
+
|
|
490
|
+
server.listen(PORT, () => {
|
|
491
|
+
console.log(`Сервер запущено на http://localhost:${PORT}`);
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
// Експорт для Bun / Deno / Cloudflare Workers
|
|
495
|
+
export default {
|
|
496
|
+
port: PORT,
|
|
497
|
+
fetch(request: Request) {
|
|
498
|
+
return router.fetch(request);
|
|
499
|
+
},
|
|
500
|
+
};
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
</Step>
|
|
504
|
+
<Step number={9} title="Аудит та автозаповнення перекладів">
|
|
505
|
+
|
|
506
|
+
Intlayer надає зручний CLI для аудиту відсутніх перекладів та їх автоматичного заповнення за допомогою ШІ:
|
|
507
|
+
|
|
508
|
+
```bash packageManager="npm"
|
|
509
|
+
# Перевірка відсутніх перекладів
|
|
510
|
+
npx intlayer test
|
|
511
|
+
|
|
512
|
+
# Автозаповнення відсутніх перекладів через ШІ
|
|
513
|
+
npx intlayer fill
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
```bash packageManager="pnpm"
|
|
517
|
+
# Перевірка відсутніх перекладів
|
|
518
|
+
pnpm dlx intlayer test
|
|
519
|
+
|
|
520
|
+
# Автозаповнення відсутніх перекладів через ШІ
|
|
521
|
+
pnpm dlx intlayer fill
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
```bash packageManager="yarn"
|
|
525
|
+
# Перевірка відсутніх перекладів
|
|
526
|
+
yarn dlx intlayer test
|
|
527
|
+
|
|
528
|
+
# Автозаповнення відсутніх перекладів через ШІ
|
|
529
|
+
yarn dlx intlayer fill
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
```bash packageManager="bun"
|
|
533
|
+
# Перевірка відсутніх перекладів
|
|
534
|
+
bun x intlayer test
|
|
535
|
+
|
|
536
|
+
# Автозаповнення відсутніх перекладів через ШІ
|
|
537
|
+
bun x intlayer fill
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
</Step>
|
|
541
|
+
</Steps>
|
|
542
|
+
|
|
543
|
+
## Конфігурація TypeScript
|
|
544
|
+
|
|
545
|
+
Налаштуйте `tsconfig.json`, щоб спрямувати JSX на середовище виконання `remix/ui` та включити згенеровані типи `.intlayer`:
|
|
546
|
+
|
|
547
|
+
```json fileName="tsconfig.json"
|
|
548
|
+
{
|
|
549
|
+
"compilerOptions": {
|
|
550
|
+
"moduleResolution": "Bundler",
|
|
551
|
+
"module": "ESNext",
|
|
552
|
+
"target": "ESNext",
|
|
553
|
+
"jsx": "react-jsx",
|
|
554
|
+
"jsxImportSource": "remix/ui",
|
|
555
|
+
"skipLibCheck": true,
|
|
556
|
+
"strict": true
|
|
557
|
+
},
|
|
558
|
+
"include": ["src/**/*", ".intlayer/**/*.ts"]
|
|
559
|
+
}
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
> `jsxImportSource: "remix/ui"` змушує `<HomePage />` перетворюватися на `createElement` від Remix замість React. Жодне середовище виконання React не завантажується.
|
|
563
|
+
|
|
564
|
+
## Висновок
|
|
565
|
+
|
|
566
|
+
Завдяки Remix 3 та Intlayer ви отримуєте легкий, типобезпечний і портативний стек, що відповідає відкритим веб-стандартам. Ваш застосунок може легко масштабуватися від простих локалізованих маркетингових сторінок до глобально розподілених сервісів, що рендеряться на edge.
|
package/docs/ur/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 - آپ کی کثیر لسانی ویب سائٹ کے لیے تمام Intlayer CLI کمانڈز
|
|
5
5
|
description: اپنی کثیر لسانی ویب سائٹ کو منظم کرنے کے لیے Intlayer CLI کا استعمال سیکھیں۔ چند منٹوں میں اپنے پروجیکٹ کو ترتیب دینے کے لیے اس آن لائن دستاویزات کے مراحل پر عمل کریں۔
|
|
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: "`ci` کمانڈ کو `--ci` فلیگ سے بدل دیا گیا"
|
|
20
23
|
- version: 9.0.0
|
|
21
24
|
date: 2026-06-11
|
|
22
25
|
changes: "اسکین (scan) کمانڈ شامل کی گئی"
|
|
@@ -158,10 +161,6 @@ Intlayer کئی کنفیگریشن فائل فارمیٹس قبول کرتا ہ
|
|
|
158
161
|
- **[Editor Commands](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/cli/editor.md)** - Intlayer ایڈیٹر کمانڈز استعمال کریں
|
|
159
162
|
- **[Live Sync Commands](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/cli/live.md)** - CMS سے مواد کی تبدیلیوں کو ریئل ٹائم میں لاگو کرنے کے لیے لائیو سنک کا استعمال کریں
|
|
160
163
|
|
|
161
|
-
### CI/CD اور خودکاری
|
|
162
|
-
|
|
163
|
-
- **[CI Command](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/cli/ci.md)** - CI/CD پائپ لائنز کے لیے خودکار طور پر شامل اسناد کے ساتھ Intlayer کمانڈز پر عمل کریں
|
|
164
|
-
|
|
165
164
|
### آڈٹ اور تشخیصی عمل
|
|
166
165
|
|
|
167
166
|
- **[ویب سائٹ اسکین کریں](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/cli/scan.md)** - کسی بھی پبلک URL کے پیج سائز کی پیمائش کریں اور i18n/SEO صحت کا آڈٹ کریں
|
package/docs/ur/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: ویب سائٹ اسکین کریں
|
|
5
5
|
description: کسی بھی ویب سائٹ کے صفحے کے سائز کی پیمائش کرنے اور i18n/SEO کی صحت کا آڈٹ کرنے کے لیے Intlayer CLI اسکین کمانڈ استعمال کرنے کا طریقہ سیکھیں۔
|
|
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: "`--ci` فلیگ شامل کیا گیا"
|
|
21
24
|
- version: 9.0.0
|
|
22
25
|
date: 2026-06-11
|
|
23
26
|
changes: "اسکین (scan) کمانڈ شامل کی گئی"
|
|
@@ -112,6 +115,7 @@ Bundle locale weight:
|
|
|
112
115
|
- **`-e, --env`** — ہدف کا ماحول (مثال کے طور پر `development` یا `production`)۔
|
|
113
116
|
- **`--env-file`** — اپنی مرضی کے مطابق `.env` فائل کا راستہ۔
|
|
114
117
|
- **`--no-cache`** — کنفیگریشن کیشے کو غیر فعال کریں۔
|
|
118
|
+
- **`--ci`** — monorepo کے ہر Intlayer پروجیکٹ میں کمانڈ چلاتا ہے (پروجیکٹ ڈائریکٹری سے چلانے پر صرف موجودہ پروجیکٹ میں)۔ ہر پروجیکٹ کی اسناد `INTLAYER_PROJECT_CREDENTIALS` کے ذریعے شامل کی جا سکتی ہیں، جو پروجیکٹ پاتھ کو `{ "clientId", "clientSecret" }` سے نقشہ کرنے والا ایک JSON آبجیکٹ ہے۔
|
|
115
119
|
- **`--verbose`** — تفصیلی لاگنگ کو فعال کریں (CLI موڈ میں پہلے سے طے شدہ)۔
|
|
116
120
|
- **`--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: سیکھیں کہ ایپ کے مواد کے لیے اسٹینڈ اکیلے JavaScript بنڈل کیسے تیار کیا جائے۔
|
|
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: "`--ci` فلیگ شامل کیا گیا"
|
|
19
22
|
- version: 8.6.4
|
|
20
23
|
date: 2026-03-31
|
|
21
24
|
changes: "اسٹینڈ اکیلے کمانڈ کی دستاویزات کا آغاز"
|
|
@@ -61,6 +64,7 @@ bun x intlayer standalone --packages [پیکیجز...] [اختیارات]
|
|
|
61
64
|
- `-e, --env [env]` - ماحول۔
|
|
62
65
|
- `--base-dir [baseDir]` - بیس ڈائریکٹری۔
|
|
63
66
|
- `--no-cache` - کیشے کو غیر فعال کریں۔
|
|
67
|
+
- `--ci` - monorepo کے ہر Intlayer پروجیکٹ میں کمانڈ چلاتا ہے (پروجیکٹ ڈائریکٹری سے چلانے پر صرف موجودہ پروجیکٹ میں)۔ ہر پروجیکٹ کی اسناد `INTLAYER_PROJECT_CREDENTIALS` کے ذریعے شامل کی جا سکتی ہیں، جو پروجیکٹ پاتھ کو `{ "clientId", "clientSecret" }` سے نقشہ کرنے والا ایک JSON آبجیکٹ ہے۔
|
|
64
68
|
- `--verbose` - تفصیلی آؤٹ پٹ دکھائیں۔
|
|
65
69
|
|
|
66
70
|
## مثالیں:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-11
|
|
4
4
|
title: Điểm chuẩn các thư viện i18n
|
|
5
5
|
description: Tìm hiểu cách Intlayer so sánh với các thư viện i18n khác về hiệu năng và kích thước bundle bundle.
|
|
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: "Cập nhật kết quả benchmark"
|
|
17
20
|
- version: 8.7.5
|
|
18
21
|
date: 2026-01-06
|
|
19
22
|
changes: "Khởi tạo benchmark"
|