@intlayer/docs 9.5.1 → 9.5.3
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/README.md +1 -1
- package/blog/ar/history_of_i18n.md +304 -0
- package/blog/ar/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ar/i18next_vs_intlayer.md +445 -0
- package/blog/ar/is_i18next_outdated.md +1 -1
- package/blog/ar/is_next-intl_outdated.md +1 -1
- package/blog/ar/is_vue-i18n_outdated.md +1 -1
- package/blog/ar/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ar/lingui_vs_intlayer.md +381 -0
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ar/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ar/next-intl_vs_intlayer.md +397 -0
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +286 -0
- package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/de/history_of_i18n.md +304 -0
- package/blog/de/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/de/i18next_vs_intlayer.md +445 -0
- package/blog/de/is_i18next_outdated.md +1 -1
- package/blog/de/is_next-intl_outdated.md +1 -1
- package/blog/de/is_vue-i18n_outdated.md +1 -1
- package/blog/de/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/de/lingui_vs_intlayer.md +381 -0
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/de/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/de/next-intl_vs_intlayer.md +415 -0
- package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/de/vue-i18n_vs_intlayer_benchmark.md +355 -0
- package/blog/en/history_of_i18n.md +304 -0
- package/blog/en/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/en/i18next_vs_intlayer.md +445 -0
- package/blog/en/is_i18next_outdated.md +1 -1
- package/blog/en/is_next-intl_outdated.md +1 -1
- package/blog/en/is_vue-i18n_outdated.md +1 -1
- package/blog/en/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/en/lingui_vs_intlayer.md +381 -0
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/en/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/en/next-intl_vs_intlayer.md +415 -0
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/en/vue-i18n_vs_intlayer.md +1 -1
- package/blog/en/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/en-GB/history_of_i18n.md +304 -0
- package/blog/en-GB/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/en-GB/i18next_vs_intlayer.md +445 -0
- package/blog/en-GB/is_i18next_outdated.md +1 -1
- package/blog/en-GB/is_next-intl_outdated.md +1 -1
- package/blog/en-GB/is_vue-i18n_outdated.md +1 -1
- package/blog/en-GB/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/en-GB/lingui_vs_intlayer.md +381 -0
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/en-GB/next-intl_vs_intlayer.md +415 -0
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/en-GB/vue-i18n_vs_intlayer.md +1 -1
- package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +245 -0
- package/blog/es/history_of_i18n.md +304 -0
- package/blog/es/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/es/i18next_vs_intlayer.md +445 -0
- package/blog/es/is_i18next_outdated.md +1 -1
- package/blog/es/is_next-intl_outdated.md +1 -1
- package/blog/es/is_vue-i18n_outdated.md +1 -1
- package/blog/es/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/es/lingui_vs_intlayer.md +381 -0
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/es/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/es/next-intl_vs_intlayer.md +417 -0
- package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/es/vue-i18n_vs_intlayer_benchmark.md +363 -0
- package/blog/fr/history_of_i18n.md +304 -0
- package/blog/fr/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/fr/i18next_vs_intlayer.md +445 -0
- package/blog/fr/is_i18next_outdated.md +1 -1
- package/blog/fr/is_next-intl_outdated.md +1 -1
- package/blog/fr/is_vue-i18n_outdated.md +1 -1
- package/blog/fr/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/fr/lingui_vs_intlayer.md +381 -0
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/fr/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/fr/next-intl_vs_intlayer.md +417 -0
- package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +287 -0
- package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +39 -0
- package/blog/hi/history_of_i18n.md +304 -0
- package/blog/hi/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/hi/i18next_vs_intlayer.md +445 -0
- package/blog/hi/is_i18next_outdated.md +1 -1
- package/blog/hi/is_next-intl_outdated.md +1 -1
- package/blog/hi/is_vue-i18n_outdated.md +1 -1
- package/blog/hi/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/hi/lingui_vs_intlayer.md +381 -0
- package/blog/hi/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/hi/next-intl_vs_intlayer.md +397 -0
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/id/history_of_i18n.md +304 -0
- package/blog/id/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/id/i18next_vs_intlayer.md +445 -0
- package/blog/id/is_i18next_outdated.md +1 -1
- package/blog/id/is_next-intl_outdated.md +1 -1
- package/blog/id/is_vue-i18n_outdated.md +1 -1
- package/blog/id/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/id/lingui_vs_intlayer.md +381 -0
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/id/next-intl_vs_intlayer-next-intl.md +310 -0
- package/blog/id/next-intl_vs_intlayer.md +397 -0
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +36 -0
- package/blog/id/vue-i18n_vs_intlayer.md +1 -1
- package/blog/id/vue-i18n_vs_intlayer_benchmark.md +41 -0
- package/blog/it/history_of_i18n.md +304 -0
- package/blog/it/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/it/i18next_vs_intlayer.md +445 -0
- package/blog/it/is_i18next_outdated.md +1 -1
- package/blog/it/is_next-intl_outdated.md +1 -1
- package/blog/it/is_vue-i18n_outdated.md +1 -1
- package/blog/it/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/it/lingui_vs_intlayer.md +381 -0
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/it/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/it/next-intl_vs_intlayer.md +418 -0
- package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/it/vue-i18n_vs_intlayer_benchmark.md +34 -0
- package/blog/ja/history_of_i18n.md +304 -0
- package/blog/ja/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ja/i18next_vs_intlayer.md +447 -0
- package/blog/ja/is_i18next_outdated.md +1 -1
- package/blog/ja/is_next-intl_outdated.md +1 -1
- package/blog/ja/is_vue-i18n_outdated.md +1 -1
- package/blog/ja/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ja/lingui_vs_intlayer.md +381 -0
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ja/next-intl_vs_intlayer-next-intl.md +310 -0
- package/blog/ja/next-intl_vs_intlayer.md +422 -0
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ja/vue-i18n_vs_intlayer.md +1 -1
- package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/ko/history_of_i18n.md +304 -0
- package/blog/ko/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ko/i18next_vs_intlayer.md +447 -0
- package/blog/ko/is_i18next_outdated.md +1 -1
- package/blog/ko/is_next-intl_outdated.md +1 -1
- package/blog/ko/is_vue-i18n_outdated.md +1 -1
- package/blog/ko/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ko/lingui_vs_intlayer.md +381 -0
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ko/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ko/next-intl_vs_intlayer.md +397 -0
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ko/vue-i18n_vs_intlayer.md +1 -1
- package/blog/ko/vue-i18n_vs_intlayer_benchmark.md +366 -0
- package/blog/pl/history_of_i18n.md +304 -0
- package/blog/pl/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/pl/i18next_vs_intlayer.md +445 -0
- package/blog/pl/is_i18next_outdated.md +1 -1
- package/blog/pl/is_next-intl_outdated.md +1 -1
- package/blog/pl/is_vue-i18n_outdated.md +1 -1
- package/blog/pl/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/pl/lingui_vs_intlayer.md +381 -0
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/pl/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/pl/next-intl_vs_intlayer.md +397 -0
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +289 -0
- package/blog/pl/vue-i18n_vs_intlayer.md +1 -1
- package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/pt/history_of_i18n.md +304 -0
- package/blog/pt/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/pt/i18next_vs_intlayer.md +445 -0
- package/blog/pt/is_i18next_outdated.md +1 -1
- package/blog/pt/is_next-intl_outdated.md +1 -1
- package/blog/pt/is_vue-i18n_outdated.md +1 -1
- package/blog/pt/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/pt/lingui_vs_intlayer.md +381 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/pt/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/pt/next-intl_vs_intlayer.md +411 -0
- package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/ru/history_of_i18n.md +304 -0
- package/blog/ru/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/ru/i18next_vs_intlayer.md +445 -0
- package/blog/ru/is_i18next_outdated.md +1 -1
- package/blog/ru/is_next-intl_outdated.md +1 -1
- package/blog/ru/is_vue-i18n_outdated.md +1 -1
- package/blog/ru/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/ru/lingui_vs_intlayer.md +381 -0
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ru/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/ru/next-intl_vs_intlayer.md +417 -0
- package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +54 -0
- package/blog/tr/history_of_i18n.md +304 -0
- package/blog/tr/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/tr/i18next_vs_intlayer.md +445 -0
- package/blog/tr/is_i18next_outdated.md +1 -1
- package/blog/tr/is_next-intl_outdated.md +1 -1
- package/blog/tr/is_vue-i18n_outdated.md +1 -1
- package/blog/tr/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/tr/lingui_vs_intlayer.md +381 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/tr/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/tr/next-intl_vs_intlayer.md +397 -0
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/tr/vue-i18n_vs_intlayer.md +1 -1
- package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/uk/history_of_i18n.md +304 -0
- package/blog/uk/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/uk/i18next_vs_intlayer.md +445 -0
- package/blog/uk/is_i18next_outdated.md +1 -1
- package/blog/uk/is_next-intl_outdated.md +1 -1
- package/blog/uk/is_vue-i18n_outdated.md +1 -1
- package/blog/uk/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/uk/lingui_vs_intlayer.md +381 -0
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/uk/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/uk/next-intl_vs_intlayer.md +397 -0
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +270 -0
- package/blog/uk/vue-i18n_vs_intlayer.md +1 -1
- package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/vi/history_of_i18n.md +304 -0
- package/blog/vi/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/vi/i18next_vs_intlayer.md +445 -0
- package/blog/vi/is_i18next_outdated.md +1 -1
- package/blog/vi/is_next-intl_outdated.md +1 -1
- package/blog/vi/is_vue-i18n_outdated.md +1 -1
- package/blog/vi/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/vi/lingui_vs_intlayer.md +381 -0
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/vi/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/vi/next-intl_vs_intlayer.md +397 -0
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/vi/vue-i18n_vs_intlayer.md +1 -1
- package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +0 -0
- package/blog/zh/history_of_i18n.md +304 -0
- package/blog/zh/i18next_vs_intlayer-i18next.md +327 -0
- package/blog/zh/i18next_vs_intlayer.md +445 -0
- package/blog/zh/is_i18next_outdated.md +1 -1
- package/blog/zh/is_next-intl_outdated.md +1 -1
- package/blog/zh/is_vue-i18n_outdated.md +1 -1
- package/blog/zh/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/zh/lingui_vs_intlayer.md +381 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/zh/next-intl_vs_intlayer-next-intl.md +309 -0
- package/blog/zh/next-intl_vs_intlayer.md +422 -0
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
- package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
- package/blog/zh/vue-i18n_vs_intlayer.md +1 -1
- package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +30 -0
- package/dist/cjs/generated/blog.entry.cjs +180 -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/cjs/generated/frequentQuestions.entry.cjs +20 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +180 -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/esm/generated/frequentQuestions.entry.mjs +20 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +9 -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/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/index.md +4 -1
- package/docs/ar/benchmark/nextjs.md +33 -28
- package/docs/ar/benchmark/solid.md +14 -11
- package/docs/ar/benchmark/svelte.md +13 -10
- package/docs/ar/benchmark/tanstack.md +30 -25
- package/docs/ar/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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/bn/interest_of_intlayer.md +1 -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/cs/interest_of_intlayer.md +1 -1
- package/docs/de/benchmark/index.md +4 -1
- package/docs/de/benchmark/nextjs.md +33 -28
- package/docs/de/benchmark/solid.md +14 -11
- package/docs/de/benchmark/svelte.md +13 -10
- package/docs/de/benchmark/tanstack.md +30 -25
- package/docs/de/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/en/benchmark/solid.md +14 -11
- package/docs/en/benchmark/svelte.md +13 -10
- package/docs/en/benchmark/tanstack.md +31 -26
- package/docs/en/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/en-GB/benchmark/solid.md +14 -11
- package/docs/en-GB/benchmark/svelte.md +13 -10
- package/docs/en-GB/benchmark/tanstack.md +30 -25
- package/docs/en-GB/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/es/benchmark/solid.md +14 -11
- package/docs/es/benchmark/svelte.md +13 -10
- package/docs/es/benchmark/tanstack.md +30 -25
- package/docs/es/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/fr/benchmark/solid.md +14 -11
- package/docs/fr/benchmark/svelte.md +13 -10
- package/docs/fr/benchmark/tanstack.md +30 -25
- package/docs/fr/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/hi/benchmark/solid.md +14 -11
- package/docs/hi/benchmark/svelte.md +13 -10
- package/docs/hi/benchmark/tanstack.md +30 -25
- package/docs/hi/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/id/benchmark/solid.md +14 -11
- package/docs/id/benchmark/svelte.md +13 -10
- package/docs/id/benchmark/tanstack.md +30 -25
- package/docs/id/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/it/benchmark/solid.md +14 -11
- package/docs/it/benchmark/svelte.md +13 -10
- package/docs/it/benchmark/tanstack.md +30 -25
- package/docs/it/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/ja/benchmark/solid.md +14 -11
- package/docs/ja/benchmark/svelte.md +13 -10
- package/docs/ja/benchmark/tanstack.md +30 -25
- package/docs/ja/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/ko/benchmark/solid.md +14 -11
- package/docs/ko/benchmark/svelte.md +13 -10
- package/docs/ko/benchmark/tanstack.md +30 -25
- package/docs/ko/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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/nl/interest_of_intlayer.md +1 -1
- package/docs/pl/benchmark/index.md +4 -1
- package/docs/pl/benchmark/nextjs.md +33 -28
- package/docs/pl/benchmark/solid.md +14 -11
- package/docs/pl/benchmark/svelte.md +13 -10
- package/docs/pl/benchmark/tanstack.md +30 -25
- package/docs/pl/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/pt/benchmark/solid.md +14 -11
- package/docs/pt/benchmark/svelte.md +13 -10
- package/docs/pt/benchmark/tanstack.md +30 -25
- package/docs/pt/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/ru/benchmark/solid.md +14 -11
- package/docs/ru/benchmark/svelte.md +13 -10
- package/docs/ru/benchmark/tanstack.md +30 -25
- package/docs/ru/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/tr/benchmark/solid.md +14 -11
- package/docs/tr/benchmark/svelte.md +13 -10
- package/docs/tr/benchmark/tanstack.md +30 -25
- package/docs/tr/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/uk/benchmark/solid.md +14 -11
- package/docs/uk/benchmark/svelte.md +13 -10
- package/docs/uk/benchmark/tanstack.md +30 -25
- package/docs/uk/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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/ur/interest_of_intlayer.md +1 -1
- package/docs/vi/benchmark/index.md +4 -1
- package/docs/vi/benchmark/nextjs.md +33 -28
- package/docs/vi/benchmark/solid.md +14 -11
- package/docs/vi/benchmark/svelte.md +13 -10
- package/docs/vi/benchmark/tanstack.md +30 -25
- package/docs/vi/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.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 +33 -28
- package/docs/zh/benchmark/solid.md +14 -11
- package/docs/zh/benchmark/svelte.md +13 -10
- package/docs/zh/benchmark/tanstack.md +30 -25
- package/docs/zh/benchmark/vue.md +12 -8
- 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/interest_of_intlayer.md +1 -1
- package/docs/zh/intlayer_with_remix_3.md +558 -0
- package/docs/zh-TW/interest_of_intlayer.md +1 -1
- package/frequent_questions/ar/claude_code_token_consumption.md +152 -0
- package/frequent_questions/de/claude_code_token_consumption.md +152 -0
- package/frequent_questions/en/claude_code_token_consumption.md +152 -0
- package/frequent_questions/en-GB/claude_code_token_consumption.md +152 -0
- package/frequent_questions/es/claude_code_token_consumption.md +152 -0
- package/frequent_questions/fr/claude_code_token_consumption.md +152 -0
- package/frequent_questions/hi/claude_code_token_consumption.md +152 -0
- package/frequent_questions/id/claude_code_token_consumption.md +152 -0
- package/frequent_questions/it/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ja/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ko/claude_code_token_consumption.md +152 -0
- package/frequent_questions/pl/claude_code_token_consumption.md +152 -0
- package/frequent_questions/pt/claude_code_token_consumption.md +152 -0
- package/frequent_questions/ru/claude_code_token_consumption.md +152 -0
- package/frequent_questions/tr/claude_code_token_consumption.md +152 -0
- package/frequent_questions/uk/claude_code_token_consumption.md +152 -0
- package/frequent_questions/vi/claude_code_token_consumption.md +152 -0
- package/frequent_questions/zh/claude_code_token_consumption.md +152 -0
- package/package.json +7 -7
- package/src/generated/blog.entry.ts +180 -0
- package/src/generated/docs.entry.ts +0 -20
- package/src/generated/frequentQuestions.entry.ts +20 -0
- 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,327 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: "i18next vs @intlayer/i18next: Mesma API, Outro Bundle"
|
|
5
|
+
description: O que muda quando uma aplicação React ou Next.js mantém suas chamadas de i18next, react-i18next e next-i18next mas as executa através dos adaptadores @intlayer/i18next. JavaScript por página, tamanho de componentes, vazamento de conteúdo e hidratação medidos no mesmo código, além do que os adaptadores mantêm, ignoram e não substituem.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- react-i18next
|
|
9
|
+
- next-i18next
|
|
10
|
+
- "@intlayer/i18next"
|
|
11
|
+
- "@intlayer/react-i18next"
|
|
12
|
+
- "@intlayer/next-i18next"
|
|
13
|
+
- Intlayer
|
|
14
|
+
- Adaptador de compatibilidade
|
|
15
|
+
- Migração
|
|
16
|
+
- Internacionalização
|
|
17
|
+
- i18n
|
|
18
|
+
- Benchmark
|
|
19
|
+
- Tamanho de bundle
|
|
20
|
+
- Blog
|
|
21
|
+
- Next.js
|
|
22
|
+
- React
|
|
23
|
+
slugs:
|
|
24
|
+
- blog
|
|
25
|
+
- i18next-vs-intlayer-i18next
|
|
26
|
+
author: aymericzip
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# i18next VS @intlayer/i18next | Mesma API, Outro Bundle
|
|
30
|
+
|
|
31
|
+
`@intlayer/i18next`, `@intlayer/react-i18next` e `@intlayer/next-i18next` são adaptadores de compatibilidade. Eles expõem a API do `i18next` que seu código já utiliza (`useTranslation`, `t()`, `<Trans>`, `i18n.changeLanguage()`, `getFixedT`, `serverSideTranslations`...) e a fornecem a partir de dicionários compilados pelo Intlayer. Os componentes não mudam. O runtime abaixo deles sim.
|
|
32
|
+
|
|
33
|
+
Este artigo analisa essa substituição na mesma aplicação Next.js, construída uma vez com `next-i18next` e outra com `@intlayer/next-i18next`. Os dados são do [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). Para comparar `i18next` e Intlayer como bibliotecas completas, leia [i18next vs Intlayer](https://intlayer.org/pt/blog/i18next-vs-intlayer). Este artigo se concentra no que o adaptador transforma quando você preserva seu código como está.
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
> **tl;dr**: Na mesma aplicação Next.js, substituir `next-i18next` por `@intlayer/next-i18next` reduziu o JavaScript por página de **218.5 KB para 150.7 KB** gzip (setup básico) e superou o setup do `next-i18next` totalmente otimizado (163.4 KB) em **12.7 KB**. O componente médio caiu de **78.5 KB para 9.7 KB**, o vazamento de strings para outras páginas foi de **~90% para 0%**, a hidratação de **15.6 ms para 11.3 ms** e o runtime de **19.7 KB para 9.4 KB**. Nenhum componente foi editado; apenas um arquivo de provider foi ajustado. Plugins do `i18next` (backends, detectores de idioma) são aceitos mas não realizam nada: não há mais nada para carregar ou detectar em tempo de execução.
|
|
38
|
+
|
|
39
|
+
## O que é o `@intlayer/i18next`
|
|
40
|
+
|
|
41
|
+
O `i18next` é um runtime. `i18n.init({ resources })` ou um plugin de backend carrega `locales/{lng}/{ns}.json` em uma instância global; `useTranslation("about")` inscreve o componente nela; `t("title")` busca a chave no momento da renderização. Namespaces, carregamento sob demanda (lazy loading), listas de namespaces por página e segurança de tipos ficam sob sua responsabilidade de configuração e manutenção.
|
|
42
|
+
|
|
43
|
+
Os adaptadores preservam a API e substituem a instância:
|
|
44
|
+
|
|
45
|
+
1. **Aliases de importação.** `createNextI18nPlugin()` do `@intlayer/next-i18next/plugin` (ou `withI18next`) envolve o `withIntlayer` e cria aliases no Webpack / Turbopack para que `next-i18next`, `react-i18next` e `i18next` resolvam para os pacotes `@intlayer/*`. No Vite, o `reactI18nextVitePlugin()` do `@intlayer/react-i18next/plugin` tem o mesmo papel. Nenhuma importação precisa ser renomeada.
|
|
46
|
+
2. **JSON como fonte de verdade.** O plugin `syncJSON` lê seus arquivos existentes `locales/{lng}/{ns}.json` com `format: "i18next"` (garantindo que `{{name}}`, aninhamento `$t()`, `_one` / `_other` e sufixos de contexto sejam interpretados adequadamente) e regrava as traduções quando a CLI ou o CMS as atualizam.
|
|
47
|
+
3. **Vinculação no ponto de chamada.** A etapa de otimização do Intlayer reescreve `useTranslation("about")` em uma chamada que recebe o dicionário `about` diretamente, no idioma ativo. O componente deixa de acessar a store global.
|
|
48
|
+
|
|
49
|
+
```tsx fileName="components/About.tsx"
|
|
50
|
+
// Seu código, inalterado
|
|
51
|
+
import { useTranslation } from "react-i18next";
|
|
52
|
+
|
|
53
|
+
const About = () => {
|
|
54
|
+
const { t } = useTranslation("about");
|
|
55
|
+
return <h1>{t("title")}</h1>;
|
|
56
|
+
};
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```tsx fileName="O que o compilador emite (simplificado)"
|
|
60
|
+
import _dicHash_about from "../.intlayer/dictionaries/about.mjs";
|
|
61
|
+
import { useDictionary as useTranslation } from "@intlayer/react-i18next";
|
|
62
|
+
|
|
63
|
+
const About = () => {
|
|
64
|
+
const { t } = useTranslation(_dicHash_about);
|
|
65
|
+
return <h1>{t("title")}</h1>;
|
|
66
|
+
};
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Essa transformação é a razão pela qual as colunas de tamanho de componente e vazamento de página caem drasticamente nos dados abaixo.
|
|
70
|
+
|
|
71
|
+
## O que os adaptadores mantêm, ignoram e não substituem
|
|
72
|
+
|
|
73
|
+
| API do `i18next` | Com `@intlayer/*` |
|
|
74
|
+
| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
75
|
+
| `useTranslation("ns")`, `useTranslation("ns", { keyPrefix })` | ✅ Mantido. Vinculado ao dicionário `ns` em tempo de compilação; tipado com seu conteúdo |
|
|
76
|
+
| `t("key", { name })`, `{{interpolation}}`, aninhamento `$t(key)` | ✅ Mantido |
|
|
77
|
+
| Plurais `key_one` / `key_other`, contexto `key_male`, `returnObjects` | ✅ Mantido. Plurais calculados com `Intl.PluralRules` |
|
|
78
|
+
| `<Trans>` com `components`, tags numeradas `<1>...</1>`, `values` | ✅ Mantido |
|
|
79
|
+
| `withTranslation`, `Translation`, `I18nContext` | ✅ Mantido |
|
|
80
|
+
| `i18n.changeLanguage()`, `i18n.language`, `i18n.dir()`, `on("languageChanged")` | ✅ Mantido. `changeLanguage` controla o idioma do Intlayer |
|
|
81
|
+
| `getFixedT(lng, ns, keyPrefix)`, `i18n.exists()`, `hasLoadedNamespace()` | ✅ Mantido |
|
|
82
|
+
| `i18n.use(Backend).use(LanguageDetector).init({...})` | ⚠️ `use()` executa o `init` do plugin e encerra; backends e detectores não têm nada para carregar ou detectar |
|
|
83
|
+
| `init({ resources })`, `addResourceBundle()` | ⚠️ `resources` é **ignorado** com alerta de desenvolvimento; remova imports de JSON para obter ganhos reais de bundle |
|
|
84
|
+
| `I18nextProvider i18n={i18n}` | ⚠️ Renderiza um `IntlayerProvider`; a prop `i18n` é ignorada. No App Router, passe o locale (veja abaixo) |
|
|
85
|
+
| `serverSideTranslations(locale, ["common"])` (next-i18next) | ⚠️ Retorna a estrutura esperada e não carrega nada. Seguro de manter, seguro de remover |
|
|
86
|
+
| `appWithTranslation(App)` (next-i18next) | ✅ Mantido |
|
|
87
|
+
| `next-i18next.config.js` | ⚠️ Não é lido. Os idiomas são configurados no `intlayer.config.ts` |
|
|
88
|
+
| `useTranslation()` sem namespace | ✅ Opera contra o dicionário geral `translation` do arquivo inteiro (`splitKeys: false`) |
|
|
89
|
+
|
|
90
|
+
## O benchmark
|
|
91
|
+
|
|
92
|
+
### O que foi medido
|
|
93
|
+
|
|
94
|
+
A suite [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) compila **a mesma aplicação** em cada ambiente: **10 páginas** (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), **10 locales** (`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`), componentes idênticos e conteúdo idêntico. As páginas são avaliadas em `en` e `fr`.
|
|
95
|
+
|
|
96
|
+
O `next-i18next` foi configurado em quatro estratégias de carregamento, desde o JSON de cada idioma importado em `resources` (`static`) até um namespace por rota, carregado de forma diferida via backend (`scoped-dynamic`). O adaptador foi testado sobre **os mesmos componentes do setup inicial**, com alterações limitadas a `next.config.ts`, `intlayer.config.ts` e ao arquivo do provider. Ele não possui variante "scoped" manual: o compilador define o escopo do conteúdo por componente.
|
|
97
|
+
|
|
98
|
+
Para cada compilação, registram-se:
|
|
99
|
+
|
|
100
|
+
- **Tamanho da lib**: tamanho gzip de um componente vazio que apenas importa a biblioteca de i18n.
|
|
101
|
+
- **JS por página**: média de JavaScript gzip transferido por página em todas as rotas e locales.
|
|
102
|
+
- **% de vazamento de locale**: parcela de strings traduzidas no JS que pertence a um idioma que o usuário **não** está visualizando.
|
|
103
|
+
- **% de vazamento de página**: parcela de strings traduzidas no JS que pertence a uma página em que o usuário **não** está navegando.
|
|
104
|
+
- **Média por componente**: tamanho médio gzip de cada componente compilado de forma isolada.
|
|
105
|
+
- **Reatividade E2E**: intervalo de tempo real entre selecionar um novo idioma e a alteração de `html[lang]` no DOM (Playwright, 5 repetições).
|
|
106
|
+
- **Hidratação**: tempo de duração da fase de hidratação do React.
|
|
107
|
+
|
|
108
|
+
> Os dados abaixo resultam da execução de **12/09/2026** com `next-i18next` 16.3.0 (`react-i18next` 17.0.13, `i18next` 26.4.2) e `@intlayer/next-i18next` 9.5.1. A aplicação de teste foi projetada com escopo enxuto propositalmente (algumas dezenas de strings por idioma), portanto os percentuais de vazamento ilustram um **comportamento**: expandem-se proporcionalmente ao crescimento do conteúdo enquanto o custo do runtime permanece estático.
|
|
109
|
+
|
|
110
|
+
### Resultados no Next.js
|
|
111
|
+
|
|
112
|
+
| Setup | Estratégia | Tamanho lib (gz) | Média JS pág (gz) | Vazamento locale | Vazamento pág | Média comp (gz) | Reatividade E2E | Hidratação |
|
|
113
|
+
| ---------------------------- | -------------- | ---------------: | ----------------: | ---------------: | ------------: | --------------: | --------------: | ----------: |
|
|
114
|
+
| **base** (sem i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
|
|
115
|
+
| `next-i18next` | static | 19.7 KB | 218.5 KB | 0.0% | 89.8% | 78.5 KB | 16.4 ms | 15.6 ms |
|
|
116
|
+
| `next-i18next` | dynamic | 19.7 KB | 169.5 KB | 50.0% | 89.8% | 26.1 KB | 15.4 ms | 27.7 ms |
|
|
117
|
+
| `next-i18next` | scoped-static | 19.7 KB | 220.1 KB | 0.0% | 89.8% | 78.9 KB | 16.4 ms | 14.7 ms |
|
|
118
|
+
| `next-i18next` | scoped-dynamic | 19.7 KB | 163.4 KB | 0.0% | 0.0% | 27.1 KB | 15.9 ms | 15.1 ms |
|
|
119
|
+
| **`@intlayer/next-i18next`** | static | **9.4 KB** | **150.7 KB** | **0.0%** | **0.0%** | **9.7 KB** | **10.7 ms** | **11.3 ms** |
|
|
120
|
+
| **`@intlayer/next-i18next`** | dynamic | **9.4 KB** | **150.7 KB** | **0.0%** | **0.0%** | **9.7 KB** | **11.9 ms** | **10.6 ms** |
|
|
121
|
+
| `next-intlayer` (nativo) | static | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 8.5 KB | 15.5 ms | 16.9 ms |
|
|
122
|
+
| `next-intlayer` (nativo) | dynamic | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 6.9 KB | 15.3 ms | 15.9 ms |
|
|
123
|
+
|
|
124
|
+
**Como interpretar os dados**
|
|
125
|
+
|
|
126
|
+
- **68 KB a menos por página em relação ao setup básico.** `resources: { en, fr, ... }` despacha todos os idiomas e namespaces para cada rota: **218.5 KB**. O build com o adaptador cai para **150.7 KB**. Supera também a configuração mais elaborada do `next-i18next` (163.4 KB, namespace único por rota, carregado sob demanda) em 12.7 KB, pois a própria biblioteca `i18next` consome 19.7 KB contra 9.4 KB.
|
|
127
|
+
- **O vazamento atinge 0% sem intervenção em componentes.** Cada configuração do `next-i18next`, à exceção da modularizada manualmente, entrega ~90% de strings de rotas distintas. A linha `dynamic` é pior na prática do que aparenta: preserva o vazamento entre páginas e adiciona **50% de vazamento de idioma**, dado que o backend busca todo o namespace `translation` do locale ativo. O adaptador estabelece 0% / 0% a partir do código original.
|
|
128
|
+
- **Componentes: 8x mais enxutos.** Um componente com `useTranslation()` isolado consome **78.5 KB** com `resources` inlined e **26-27 KB** com backend, já que `t` continua preso à store global. No adaptador, a média cai para **9.7 KB**.
|
|
129
|
+
- **Hidratação e alternância de idioma aceleradas.** A hidratação cai de 15.6 ms para **11.3 ms** (e de 27.7 ms no modo `dynamic`, no qual o carregamento do backend reside no caminho crítico). A troca de idioma cai de 15-16 ms para **11-12 ms**.
|
|
130
|
+
- **O adaptador é diferente do runtime nativo.** O `next-intlayer` crava **141.3 KB**, meros +0.3 KB acima do app sem i18n. O adaptador suporta as particularidades da API do `i18next` (expressões de interpolação, sufixos de plural e contexto, tags `<Trans>`) sobre o núcleo do Intlayer: 9.4 KB e +9.4 KB por página em relação ao nativo. Atua como transição, não como destino final.
|
|
131
|
+
|
|
132
|
+
> O adaptador `react-i18next` no Vite / TanStack Start não constou desta rodada de testes. A medição para `react-i18next` no TanStack Start pode ser verificada em [i18next vs Intlayer](https://intlayer.org/pt/blog/i18next-vs-intlayer): 127-184 KB por página e 123-185 ms na troca de idioma com backend sob demanda.
|
|
133
|
+
|
|
134
|
+
## O motivo da mudança nos indicadores
|
|
135
|
+
|
|
136
|
+
Nenhum arquivo em `components/` foi alterado, logo o ganho advém da entidade à qual `useTranslation` se acopla.
|
|
137
|
+
|
|
138
|
+
**Com o `i18next`**, a ligação é feita na instância global. Qualquer recurso alocado nela (todos os idiomas em `static`, o namespace completo do idioma ativo em `dynamic`) torna-se acessível para qualquer componente chamador de `useTranslation()`. O bundler não consegue fragmentar abaixo do volume contido na instância, e o runtime não é capaz de prever quais chaves serão demandadas em renderização.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
.
|
|
142
|
+
├── next-i18next.config.js
|
|
143
|
+
├── public/locales
|
|
144
|
+
│ ├── en/translation.json # strings de todas as páginas
|
|
145
|
+
│ └── fr/translation.json
|
|
146
|
+
├── i18n/i18n.ts # i18n.use(initReactI18next).init({ resources })
|
|
147
|
+
└── components
|
|
148
|
+
├── AppProviders.tsx # <I18nextProvider i18n={i18n}>
|
|
149
|
+
└── About.tsx # useTranslation(); t("about.title")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Com o `@intlayer/next-i18next`**, a ligação é feita diretamente com o dicionário. O plugin `syncJSON` transforma cada arquivo de namespace em um dicionário; o ciclo de otimização repassa ao componente apenas o dicionário declarado, na forma de import que o empacotador rastreia e separa por página e locale.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
.
|
|
156
|
+
├── intlayer.config.ts # syncJSON({ format: "i18next", source: ... })
|
|
157
|
+
├── public/locales
|
|
158
|
+
│ ├── en/translation.json # inalterado, continua como fonte da verdade
|
|
159
|
+
│ └── fr/translation.json
|
|
160
|
+
├── .intlayer/ # gerado: um dicionário por namespace, por locale
|
|
161
|
+
└── components
|
|
162
|
+
├── AppProviders.tsx # <IntlayerClientProvider locale={locale}>
|
|
163
|
+
└── About.tsx # useTranslation(); t("about.title") ← inalterado
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
O arquivo `i18n/i18n.ts` e sua importação de `resources` tornam-se código inerte. É daí que procedem os 68 KB de alívio.
|
|
167
|
+
|
|
168
|
+
## Migração em três etapas
|
|
169
|
+
|
|
170
|
+
<Steps>
|
|
171
|
+
<Step number={1} title="Instalação">
|
|
172
|
+
|
|
173
|
+
```bash packageManager="npm"
|
|
174
|
+
npx intlayer init --interactive
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
```bash packageManager="pnpm"
|
|
178
|
+
pnpm dlx intlayer init --interactive
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
```bash packageManager="yarn"
|
|
182
|
+
yarn dlx intlayer init --interactive
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```bash packageManager="bun"
|
|
186
|
+
bunx intlayer init --interactive
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
O comando identifica `i18next` / `react-i18next` / `next-i18next`, instala o `intlayer`, o pacote do framework (`next-intlayer` ou `react-intlayer`), o respectivo adaptador `@intlayer/*` e o `@intlayer/sync-json-plugin`, além de preencher o `intlayer.config.ts`. Conserve as dependências originais instaladas: elas operam como peer dependencies e entregam as tipagens.
|
|
190
|
+
|
|
191
|
+
</Step>
|
|
192
|
+
<Step number={2} title="Aponte o Intlayer para seus arquivos de tradução">
|
|
193
|
+
|
|
194
|
+
```ts fileName="intlayer.config.ts"
|
|
195
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
196
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
197
|
+
|
|
198
|
+
const config: IntlayerConfig = {
|
|
199
|
+
internationalization: {
|
|
200
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
201
|
+
defaultLocale: Locales.ENGLISH,
|
|
202
|
+
},
|
|
203
|
+
dictionary: {
|
|
204
|
+
importMode: "dynamic",
|
|
205
|
+
format: "i18next",
|
|
206
|
+
},
|
|
207
|
+
plugins: [
|
|
208
|
+
syncJSON({
|
|
209
|
+
// dialeto i18next: {{name}}, $t(key), key_one / key_other, key_male
|
|
210
|
+
format: "i18next",
|
|
211
|
+
// Um arquivo por namespace: `useTranslation("about")` → about.json
|
|
212
|
+
source: ({ locale, key }) => `./public/locales/${locale}/${key}.json`,
|
|
213
|
+
location: "public/locales",
|
|
214
|
+
}),
|
|
215
|
+
],
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export default config;
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Caso você mantenha um único arquivo `translation.json` por locale (o namespace padrão do i18next), configure `splitKeys: false` para que o arquivo integral permaneça como um único dicionário e invocações diretas de `useTranslation()` prossigam sem falhas.
|
|
222
|
+
|
|
223
|
+
</Step>
|
|
224
|
+
<Step number={3} title="Adicione o plugin">
|
|
225
|
+
|
|
226
|
+
<Tabs>
|
|
227
|
+
<Tab label="Next.js">
|
|
228
|
+
|
|
229
|
+
```ts fileName="next.config.ts"
|
|
230
|
+
import type { NextConfig } from "next";
|
|
231
|
+
import { withI18next } from "@intlayer/next-i18next/plugin";
|
|
232
|
+
|
|
233
|
+
const nextConfig: NextConfig = {};
|
|
234
|
+
|
|
235
|
+
export default withI18next(nextConfig);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
No App Router, componentes de cliente identificam o idioma pelo segmento `[locale]`. O `I18nextProvider` do adaptador não aceita locale como propriedade, logo substitua-o uma única vez no arquivo de provider:
|
|
239
|
+
|
|
240
|
+
```tsx fileName="components/AppProviders.tsx"
|
|
241
|
+
"use client";
|
|
242
|
+
|
|
243
|
+
import { IntlayerClientProvider } from "next-intlayer";
|
|
244
|
+
import type { LocalesValues } from "intlayer";
|
|
245
|
+
|
|
246
|
+
export const AppProviders = ({
|
|
247
|
+
locale,
|
|
248
|
+
children,
|
|
249
|
+
}: {
|
|
250
|
+
locale: LocalesValues;
|
|
251
|
+
children: React.ReactNode;
|
|
252
|
+
}) => (
|
|
253
|
+
<IntlayerClientProvider locale={locale}>{children}</IntlayerClientProvider>
|
|
254
|
+
);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Todos os componentes abaixo continuam invocando `useTranslation()`.
|
|
258
|
+
|
|
259
|
+
</Tab>
|
|
260
|
+
<Tab label="Vite / TanStack Start">
|
|
261
|
+
|
|
262
|
+
```ts fileName="vite.config.ts"
|
|
263
|
+
import { defineConfig } from "vite";
|
|
264
|
+
import react from "@vitejs/plugin-react";
|
|
265
|
+
import { reactI18nextVitePlugin } from "@intlayer/react-i18next/plugin";
|
|
266
|
+
|
|
267
|
+
export default defineConfig({
|
|
268
|
+
plugins: [react(), reactI18nextVitePlugin()],
|
|
269
|
+
});
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
O `reactI18nextVitePlugin()` encapsula o `vite-intlayer` e define os aliases para `react-i18next` e `i18next`. Para projetos sem React, `i18nextVitePlugin()` do `@intlayer/i18next/plugin` provê o alias somente para `i18next`.
|
|
273
|
+
|
|
274
|
+
</Tab>
|
|
275
|
+
</Tabs>
|
|
276
|
+
|
|
277
|
+
</Step>
|
|
278
|
+
</Steps>
|
|
279
|
+
|
|
280
|
+
### O que você pode remover em seguida
|
|
281
|
+
|
|
282
|
+
| Arquivo / padrão | Motivo |
|
|
283
|
+
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
|
|
284
|
+
| `resources: { en, fr, ... }` e importações JSON | Ignorados pelo adaptador. Era aqui que se concentravam os 68 KB |
|
|
285
|
+
| `i18next-http-backend`, `i18next-resources-to-backend` | Não há nada a carregar dinamicamente |
|
|
286
|
+
| `i18next-browser-languagedetector` | A identificação é controlada pelo roteamento do Intlayer (prefixo de URL, cookie, cabeçalho) |
|
|
287
|
+
| `serverSideTranslations()` em `getStaticProps` | Devolve um objeto vazio; inofensivo, mas inútil |
|
|
288
|
+
| `next-i18next.config.js` | Não é consultado. Idiomas residem no `intlayer.config.ts` |
|
|
289
|
+
| Listas de `ns: [...]` por página | O compilador detecta os namespaces por componente |
|
|
290
|
+
|
|
291
|
+
### O que você ganha além da redução em bytes
|
|
292
|
+
|
|
293
|
+
- **Tipagem estrita de chaves.** `useTranslation("about")` valida chaves contra o dicionário `about` compilado; `t("does.not.exist")` gera um erro do compilador TypeScript em vez de retornar a string crua.
|
|
294
|
+
- **`npx intlayer test`** bloqueia a integração contínua (CI) se faltar qualquer tradução em qualquer idioma. **`npx intlayer fill`** traduz pendências com sua própria chave de provedor (OpenAI, Anthropic, Mistral, Gemini...) e as salva em `locales/{lng}/{ns}.json`.
|
|
295
|
+
- **Editor Visual e CMS** atuam diretamente no mesmo JSON, permitindo que editores atualizem textos por interface gráfica enquanto os arquivos Git são versionados.
|
|
296
|
+
- **Migração gradual para `.content.ts`.** Cada componente pode migrar de `useTranslation("about")` para `useIntlayer("about")` adotando um arquivo de conteúdo co-localizado. Dicionários JSON e `.content.ts` operam juntos harmonicamente.
|
|
297
|
+
|
|
298
|
+
## Limitações importantes antes de iniciar
|
|
299
|
+
|
|
300
|
+
- **Backends e detectores ficam desativados.** `i18n.use(HttpBackend)` executa o método `init` do plugin e encerra. Se seu projeto dependia de buscar traduções em um CMS em tempo de execução, esse fluxo é descontinuado; use o CMS do Intlayer ou os comandos `intlayer pull` / `push`.
|
|
301
|
+
- **`resources` é descartado, não combinado.** Ao contrário de certos adaptadores, o `@intlayer/i18next` não usa `resources` inline como recurso de segurança. Toda chave precisa existir nos dicionários sincronizados, o que é validado por `intlayer test`.
|
|
302
|
+
- **App Router necessita do ajuste de provider.** Apenas um arquivo, apresentado acima. O Pages Router com `appWithTranslation` opera sem ajustes adicionais.
|
|
303
|
+
- **`next-i18next.config.js` não é aproveitado.** Parâmetros como `localePath`, `fallbackLng` e `reloadOnPrerender` não são lidos; configurações de idioma e fallback residem em `intlayer.config.ts`.
|
|
304
|
+
- **O adaptador possui um custo.** 9.4 KB de runtime e +9.4 KB por página em relação ao `next-intlayer`. Assim que todos os componentes forem convertidos para `useIntlayer`, ele pode ser desinstalado.
|
|
305
|
+
|
|
306
|
+
## Quando utilizar cada alternativa?
|
|
307
|
+
|
|
308
|
+
- **Mantenha-se no `i18next`** se sua infraestrutura depender de backends dinâmicos em tempo de execução (traduções servidas sob demanda por CMS), de plugins exclusivos ou de um ambiente fora do ecossistema React não atendido pelos adaptadores.
|
|
309
|
+
- **Adote `@intlayer/*`** se você já opera com `react-i18next` / `next-i18next` e deseja resgatar 68 KB, atingir componentes 8x menores, eliminar vazamento (0%), obter chaves tipadas e validação na CI sem reescrever seus componentes. É a transição recomendada para bases existentes de `i18next`.
|
|
310
|
+
- **Prefira o modelo nativo (`next-intlayer` / `react-intlayer`)** em projetos novos ou logo após o adaptador consolidar a migração. Trata-se da opção mais rápida (5.5 KB, +0.3 KB por página), liberando Server Components síncronos e arquivos `.content.ts` por componente.
|
|
311
|
+
|
|
312
|
+
## Comparações relacionadas
|
|
313
|
+
|
|
314
|
+
- [i18next vs Intlayer](https://intlayer.org/pt/blog/i18next-vs-intlayer) (comparação das bibliotecas, mesmo benchmark)
|
|
315
|
+
- [next-intl vs @intlayer/next-intl](https://intlayer.org/pt/blog/next-intl-vs-intlayer-next-intl) (mesma série de adaptadores)
|
|
316
|
+
- [Lingui vs @intlayer/lingui](https://intlayer.org/pt/blog/lingui-vs-intlayer-lingui) (mesma série de adaptadores)
|
|
317
|
+
- [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/pt/blog/vue-i18n-vs-intlayer-vue-i18n) (mesma série de adaptadores)
|
|
318
|
+
- Guias de migração: [i18next](https://intlayer.org/pt/doc/migration/i18next), [react-i18next](https://intlayer.org/pt/doc/migration/react-i18next), [next-i18next](https://intlayer.org/pt/doc/migration/next-i18next)
|
|
319
|
+
- Referência dos adaptadores: [i18next](https://intlayer.org/pt/doc/compatibility/i18next), [react-i18next](https://intlayer.org/pt/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/pt/doc/compatibility/next-i18next)
|
|
320
|
+
|
|
321
|
+
## Conclusão
|
|
322
|
+
|
|
323
|
+
O `i18next` figura como o runtime mais pesado deste benchmark, e os adaptadores cortam a maior parte dessa carga sem exigir que você abandone sua API habitual. Na mesma aplicação Next.js, isso representa **68 KB a menos por página** comparado à configuração inicial, **12.7 KB a menos** em relação à opção mais otimizada manualmente, **componentes 8x mais leves**, **0% de vazamento** e **4 ms a menos de hidratação**, demandando apenas um arquivo de configuração, uma inclusão de plugin e um ajuste no provider. Backends e detectores tornam-se inócuos, `resources` é descartado ao invés de incorporado, e a implementação nativa do `next-intlayer` preserva outros 9 KB de leveza adicional.
|
|
324
|
+
|
|
325
|
+
A totalidade dos dados brutos, aplicações de teste e scripts encontra-se publicada no [repositório do Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom).
|
|
326
|
+
|
|
327
|
+
Consulte o documento [Por que Intlayer?](https://intlayer.org/pt/doc/why) para aprofundar.
|