@intlayer/docs 9.5.2 → 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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 +160 -0
- package/dist/cjs/generated/blog.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 +160 -0
- package/dist/esm/generated/blog.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 +8 -0
- package/dist/types/generated/blog.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/nextjs.md +1 -1
- package/docs/ar/benchmark/solid.md +1 -1
- package/docs/ar/benchmark/svelte.md +1 -1
- package/docs/ar/benchmark/tanstack.md +1 -1
- package/docs/ar/benchmark/vue.md +1 -1
- package/docs/ar/interest_of_intlayer.md +1 -1
- package/docs/bn/interest_of_intlayer.md +1 -1
- package/docs/cs/interest_of_intlayer.md +1 -1
- package/docs/de/benchmark/nextjs.md +1 -1
- package/docs/de/benchmark/solid.md +1 -1
- package/docs/de/benchmark/svelte.md +1 -1
- package/docs/de/benchmark/tanstack.md +1 -1
- package/docs/de/benchmark/vue.md +1 -1
- package/docs/de/interest_of_intlayer.md +1 -1
- package/docs/en/benchmark/nextjs.md +1 -1
- package/docs/en/benchmark/solid.md +1 -1
- package/docs/en/benchmark/svelte.md +1 -1
- package/docs/en/benchmark/tanstack.md +1 -1
- package/docs/en/benchmark/vue.md +1 -1
- package/docs/en/interest_of_intlayer.md +1 -1
- package/docs/en-GB/benchmark/nextjs.md +1 -1
- package/docs/en-GB/benchmark/solid.md +1 -1
- package/docs/en-GB/benchmark/svelte.md +1 -1
- package/docs/en-GB/benchmark/tanstack.md +1 -1
- package/docs/en-GB/benchmark/vue.md +1 -1
- package/docs/en-GB/interest_of_intlayer.md +1 -1
- package/docs/es/benchmark/nextjs.md +1 -1
- package/docs/es/benchmark/solid.md +1 -1
- package/docs/es/benchmark/svelte.md +1 -1
- package/docs/es/benchmark/tanstack.md +1 -1
- package/docs/es/benchmark/vue.md +1 -1
- package/docs/es/interest_of_intlayer.md +1 -1
- package/docs/fr/benchmark/nextjs.md +1 -1
- package/docs/fr/benchmark/solid.md +1 -1
- package/docs/fr/benchmark/svelte.md +1 -1
- package/docs/fr/benchmark/tanstack.md +1 -1
- package/docs/fr/benchmark/vue.md +1 -1
- package/docs/fr/interest_of_intlayer.md +1 -1
- package/docs/hi/benchmark/nextjs.md +1 -1
- package/docs/hi/benchmark/solid.md +1 -1
- package/docs/hi/benchmark/svelte.md +1 -1
- package/docs/hi/benchmark/tanstack.md +1 -1
- package/docs/hi/benchmark/vue.md +1 -1
- package/docs/hi/interest_of_intlayer.md +1 -1
- package/docs/id/benchmark/nextjs.md +1 -1
- package/docs/id/benchmark/solid.md +1 -1
- package/docs/id/benchmark/svelte.md +1 -1
- package/docs/id/benchmark/tanstack.md +1 -1
- package/docs/id/benchmark/vue.md +1 -1
- package/docs/id/interest_of_intlayer.md +1 -1
- package/docs/it/benchmark/nextjs.md +1 -1
- package/docs/it/benchmark/solid.md +1 -1
- package/docs/it/benchmark/svelte.md +1 -1
- package/docs/it/benchmark/tanstack.md +1 -1
- package/docs/it/benchmark/vue.md +1 -1
- package/docs/it/interest_of_intlayer.md +1 -1
- package/docs/ja/benchmark/nextjs.md +1 -1
- package/docs/ja/benchmark/solid.md +1 -1
- package/docs/ja/benchmark/svelte.md +1 -1
- package/docs/ja/benchmark/tanstack.md +1 -1
- package/docs/ja/benchmark/vue.md +1 -1
- package/docs/ja/interest_of_intlayer.md +1 -1
- package/docs/ko/benchmark/nextjs.md +1 -1
- package/docs/ko/benchmark/solid.md +1 -1
- package/docs/ko/benchmark/svelte.md +1 -1
- package/docs/ko/benchmark/tanstack.md +1 -1
- package/docs/ko/benchmark/vue.md +1 -1
- package/docs/ko/interest_of_intlayer.md +1 -1
- package/docs/nl/interest_of_intlayer.md +1 -1
- package/docs/pl/benchmark/nextjs.md +1 -1
- package/docs/pl/benchmark/solid.md +1 -1
- package/docs/pl/benchmark/svelte.md +1 -1
- package/docs/pl/benchmark/tanstack.md +1 -1
- package/docs/pl/benchmark/vue.md +1 -1
- package/docs/pl/interest_of_intlayer.md +1 -1
- package/docs/pt/benchmark/nextjs.md +1 -1
- package/docs/pt/benchmark/solid.md +1 -1
- package/docs/pt/benchmark/svelte.md +1 -1
- package/docs/pt/benchmark/tanstack.md +1 -1
- package/docs/pt/benchmark/vue.md +1 -1
- package/docs/pt/interest_of_intlayer.md +1 -1
- package/docs/ru/benchmark/nextjs.md +1 -1
- package/docs/ru/benchmark/solid.md +1 -1
- package/docs/ru/benchmark/svelte.md +1 -1
- package/docs/ru/benchmark/tanstack.md +1 -1
- package/docs/ru/benchmark/vue.md +1 -1
- package/docs/ru/interest_of_intlayer.md +1 -1
- package/docs/tr/benchmark/nextjs.md +1 -1
- package/docs/tr/benchmark/solid.md +1 -1
- package/docs/tr/benchmark/svelte.md +1 -1
- package/docs/tr/benchmark/tanstack.md +1 -1
- package/docs/tr/benchmark/vue.md +1 -1
- package/docs/tr/interest_of_intlayer.md +1 -1
- package/docs/uk/benchmark/nextjs.md +1 -1
- package/docs/uk/benchmark/solid.md +1 -1
- package/docs/uk/benchmark/svelte.md +1 -1
- package/docs/uk/benchmark/tanstack.md +1 -1
- package/docs/uk/benchmark/vue.md +1 -1
- package/docs/uk/interest_of_intlayer.md +1 -1
- package/docs/ur/interest_of_intlayer.md +1 -1
- package/docs/vi/benchmark/nextjs.md +1 -1
- package/docs/vi/benchmark/solid.md +1 -1
- package/docs/vi/benchmark/svelte.md +1 -1
- package/docs/vi/benchmark/tanstack.md +1 -1
- package/docs/vi/benchmark/vue.md +1 -1
- package/docs/vi/interest_of_intlayer.md +1 -1
- package/docs/zh/benchmark/nextjs.md +1 -1
- package/docs/zh/benchmark/solid.md +1 -1
- package/docs/zh/benchmark/svelte.md +1 -1
- package/docs/zh/benchmark/tanstack.md +1 -1
- package/docs/zh/benchmark/vue.md +1 -1
- package/docs/zh/interest_of_intlayer.md +1 -1
- 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 +6 -6
- package/src/generated/blog.entry.ts +160 -0
- package/src/generated/frequentQuestions.entry.ts +20 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: "i18next बनाम Intlayer: 2026 बेंचमार्क और विस्तृत तुलना"
|
|
5
|
+
description: "Next.js और TanStack Start पर Intlayer के मुकाबले react-i18next और next-i18next का परीक्षण। बंडल साइज, कंटेंट लीकेज, भाषा बदलने की प्रतिक्रिया और डेवलपर अनुभव का विश्लेषण।"
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- react-i18next
|
|
9
|
+
- next-i18next
|
|
10
|
+
- Intlayer
|
|
11
|
+
- अंतर्राष्ट्रीयकरण
|
|
12
|
+
- i18n
|
|
13
|
+
- बेंचमार्क
|
|
14
|
+
- बंडल साइज
|
|
15
|
+
- ब्लॉग
|
|
16
|
+
- Next.js
|
|
17
|
+
- TanStack Start
|
|
18
|
+
- JavaScript
|
|
19
|
+
- React
|
|
20
|
+
slugs:
|
|
21
|
+
- blog
|
|
22
|
+
- i18next-vs-intlayer
|
|
23
|
+
author: aymericzip
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# i18next बनाम Intlayer | React और Next.js अंतर्राष्ट्रीयकरण (i18n) बेंचमार्क
|
|
27
|
+
|
|
28
|
+
`i18next` जावास्क्रिप्ट इकोसिस्टम में सबसे व्यापक रूप से उपयोग किया जाने वाला i18n फ्रेमवर्क है। `react-i18next` और `next-i18next` के माध्यम से यह अनगिनत React और Next.js एप्लिकेशनों को संचालित करता है। Intlayer एक आधुनिक, कंपाइलर-आधारित और कंपोनेंट-स्कोप्ड विकल्प है।
|
|
29
|
+
|
|
30
|
+
यह लेख केवल फीचर लिस्ट के बजाय वास्तविक मापों के आधार पर दोनों की तुलना करता है। सभी आंकड़े [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) से लिए गए हैं, जो एक ओपन-सोर्स बेंचमार्क सूट है जो प्रत्येक लाइब्रेरी के साथ समान एप्लिकेशन बनाता है और ब्राउज़र द्वारा वास्तव में डाउनलोड किए गए डेटा को रिकॉर्ड करता है।
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
33
|
+
|
|
34
|
+
> **संक्षेप में (tl;dr)**: `i18next` बेंचमार्क में सबसे भारी रनटाइम है: साधारण सेटअप में Next.js पर **प्रति पेज +77 KB gzip**, और पूर्ण नेमस्पेस + लेज़ी-लोडिंग अनुकूलन के बाद भी **+22 KB** जोड़ता है। जबकि Intlayer केवल **+0.3 KB** जोड़ता है। पूर्ण रूप से स्कोप्ड कॉन्फ़िगरेशन को छोड़कर, प्रत्येक `i18next` सेटअप **अन्य पेजों के लगभग 90% अनुवादित स्ट्रिंग्स को लीक** करता है; Intlayer डिफ़ॉल्ट रूप से **0%** लीक करता है। लेज़ी-लोडेड बैकएंड के साथ भाषा बदलने में `react-i18next` में **123-185 ms** लगे, जबकि Intlayer में केवल **3-4 ms**। `@intlayer/next-i18next` एडेप्टर `i18next` API को बनाए रखता है और मूल के **218.5 KB** के मुकाबले **150.7 KB** प्रति पेज पर आ गया।
|
|
35
|
+
|
|
36
|
+
## मुख्य बिंदु
|
|
37
|
+
|
|
38
|
+
- **i18next / react-i18next / next-i18next** - परिपक्व, प्लगइन्स से भरपूर, और फ्रेमवर्क-अज्ञेयवादी। नेमस्पेस, लैंग्वेज डिटेक्टर्स, बैकएंड्स, प्लगइन के जरिए ICU, और रिच कंटेंट के लिए `<Trans>` का समर्थन। कंटेंट `locales/{lng}/{ns}.json` में केंद्रीकृत रहता है। शक्तिशाली है, लेकिन प्रत्येक अनुकूलन (नेमस्पेस विभाजन, प्रति पेज लोडिंग, टाइप सुरक्षा) मैन्युअल कॉन्फ़िगरेशन मांगता है।
|
|
39
|
+
- **Intlayer** - कंपोनेंट-केंद्रित कंटेंट मॉडल। `.content.ts` शब्दकोश उसी कंपोनेंट के बगल में स्थित होते हैं जिसे वे सेवा प्रदान करते हैं, बिल्ड-टाइम कंपाइलर कंपोनेंट और लोकेल के आधार पर ट्री-शेकिंग और लेज़ी-लोडिंग करता है, कंटेंट से स्वचालित रूप से सख्त TypeScript प्रकार उत्पन्न होते हैं, और अनुवाद छूटने पर बिल्ड तुरंत फेल हो जाता है। मिडलवेयर, SEO हेल्पर्स, विजुअल एडिटर / CMS और AI अनुवाद प्रदान करता है।
|
|
40
|
+
|
|
41
|
+
| लाइब्रेरी | GitHub स्टार्स | कुल कमिट्स | अंतिम कमिट | पहला संस्करण | NPM संस्करण | NPM मासिक डाउनलोड |
|
|
42
|
+
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `aymericzip/intlayer` | [](https://github.com/aymericzip/intlayer/stargazers) | [](https://github.com/aymericzip/intlayer/commits) | [](https://github.com/aymericzip/intlayer/commits) | अप्रैल 2024 | [](https://www.npmjs.com/package/intlayer) | [](https://www.npmjs.com/package/intlayer) |
|
|
44
|
+
| `i18next/i18next` | [](https://github.com/i18next/i18next/stargazers) | [](https://github.com/i18next/i18next/commits) | [](https://github.com/i18next/i18next/commits) | जनवरी 2012 | [](https://www.npmjs.com/package/i18next) | [](https://www.npmjs.com/package/i18next) |
|
|
45
|
+
| `i18next/react-i18next` | [](https://github.com/i18next/react-i18next/stargazers) | [](https://github.com/i18next/react-i18next/commits) | [](https://github.com/i18next/react-i18next/commits) | दिसंबर 2015 | [](https://www.npmjs.com/package/react-i18next) | [](https://www.npmjs.com/package/react-i18next) |
|
|
46
|
+
| `i18next/next-i18next` | [](https://github.com/i18next/next-i18next/stargazers) | [](https://github.com/i18next/next-i18next/commits) | [](https://github.com/i18next/next-i18next/commits) | नवंबर 2018 | [](https://www.npmjs.com/package/next-i18next) | [](https://www.npmjs.com/package/next-i18next) |
|
|
47
|
+
|
|
48
|
+
> बैज अपने आप अपडेट होते हैं। आंकड़े समय के साथ बदल सकते हैं।
|
|
49
|
+
|
|
50
|
+
## तुलनात्मक फीचर विश्लेषण
|
|
51
|
+
|
|
52
|
+
| फीचर | Intlayer (`react-intlayer` / `next-intlayer`) | i18next (`react-i18next` / `next-i18next`) |
|
|
53
|
+
| --------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
|
54
|
+
| **कंपोनेंट के पास अनुवाद** | ✅ हाँ, `.content.ts` प्रत्येक कंपोनेंट के साथ स्थित | ❌ नहीं, `locales/{lng}/{ns}.json` में केंद्रीकृत |
|
|
55
|
+
| **TypeScript एकीकरण** | ✅ कंटेंट से स्वतः सख्त प्रकार उत्पन्न | ⚠️ बुनियादी; सख्त कुंजियों के लिए `CustomTypeOptions` विस्तार आवश्यक |
|
|
56
|
+
| **छूटे हुए अनुवाद का पता लगाना** | ✅ TypeScript त्रुटि + बिल्ड समय पर त्रुटि/चेतावनी | ⚠️ रनटाइम फ़ॉलबैक (`saveMissing`, कुंजी की प्रतिध्वनि) |
|
|
57
|
+
| **रिच कंटेंट (JSX / Markdown / कंपोनेंट्स)** | ✅ प्रत्यक्ष मूल समर्थन | ⚠️ अनुक्रमित प्लेसहोल्डर्स के साथ `<Trans>` |
|
|
58
|
+
| **ICU समर्थन** | ⚠️ प्रगति पर है | ⚠️ प्लगइन के माध्यम से (`i18next-icu`) |
|
|
59
|
+
| **बहुवचन (Pluralization)** | ✅ गणना आधारित पैटर्न | ✅ `_one` / `_other` प्रत्यय (Intl.PluralRules) |
|
|
60
|
+
| **प्रारूपण (दिनांक, संख्याएँ, मुद्राएँ)** | ✅ `useNumber`, `useDate`, आदि (आंतरिक रूप से Intl आधारित) | ⚠️ इंटरपोलेशन फॉर्मैटर्स या मैन्युअल `Intl.*` कॉल |
|
|
61
|
+
| **स्थानीयकृत रूटिंग और मिडलवेयर** | ✅ अंतर्निहित प्रॉक्सी/मिडलवेयर, `getMultilingualUrls` | ⚠️ मुख्य लाइब्रेरी में नहीं; कस्टम मिडलवेयर या तीसरे पक्ष के टूल आवश्यक |
|
|
62
|
+
| **SEO हेल्पर्स (hreflang, sitemap, robots)** | ✅ अंतर्निहित सहायता | ❌ मैन्युअल |
|
|
63
|
+
| **सिंक्रोनस सर्वर कंपोनेंट्स** | ✅ `next-intlayer/server` से `useIntlayer` किसी भी सर्वर कंपोनेंट में चलता है | ⚠️ पेज स्तर पर `getFixedT`, फिर Props के रूप में `t` को नीचे भेजना |
|
|
64
|
+
| **ट्री-शेकिंग (केवल प्रयुक्त सामग्री शामिल)** | ✅ कंपोनेंट और भाषा स्तर पर कंपाइलर द्वारा स्वचालित | ⚠️ मैन्युअल: नेमस्पेस + पेज स्तर पर `ns` सूची + बैकएंड |
|
|
65
|
+
| **लेज़ी लोडिंग (Lazy loading)** | ✅ `importMode: 'dynamic'` (कॉन्फ़िगरेशन की एक पंक्ति) | ✅ बैकएंड प्लगइन्स के माध्यम से (`i18next-resources-to-backend` आदि) |
|
|
66
|
+
| **अप्रयुक्त सामग्री हटाना (Purge)** | ✅ अप्रयुक्त शब्दकोश बिल्ड के समय हटा दिए जाते हैं | ❌ अंतर्निहित नहीं |
|
|
67
|
+
| **अनुवाद परीक्षण (CLI / CI)** | ✅ `npx intlayer content test` | ⚠️ `i18next-parser` या बाहरी उपकरण |
|
|
68
|
+
| **AI-संचालित अनुवाद** | ✅ अंतर्निहित, आपकी अपनी API कुंजियों का उपयोग करता है | ❌ नहीं (Locize एक अलग सशुल्क सेवा है) |
|
|
69
|
+
| **विजुअल एडिटर / CMS** | ✅ मुफ़्त विजुअल एडिटर + वैकल्पिक CMS | ❌ नहीं (Locize या बाहरी प्लेटफ़ॉर्म) |
|
|
70
|
+
| **MCP सर्वर और Agent Skills** | ✅ समर्थित | ❌ असमर्थित |
|
|
71
|
+
| **इकोसिस्टम और समुदाय** | ⚠️ नया लेकिन तेजी से बढ़ रहा है | ✅ सबसे बड़ा और सबसे परिपक्व |
|
|
72
|
+
|
|
73
|
+
## बेंचमार्क परिणाम
|
|
74
|
+
|
|
75
|
+
### क्या मापा गया
|
|
76
|
+
|
|
77
|
+
[Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) सूट प्रत्येक लाइब्रेरी के साथ **समान एप्लिकेशन** बनाता है: **10 पेज** (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), **10 भाषाएँ** (`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`), समान कंपोनेंट्स और समान कंटेंट। परीक्षण अंग्रेजी और फ्रेंच में किए गए। प्रत्येक लाइब्रेरी को चार **लोडिंग रणनीतियों** में परखा गया:
|
|
78
|
+
|
|
79
|
+
| रणनीति | विवरण | सामान्य उपयोग |
|
|
80
|
+
| ------------------ | ----------------------------------------------------------------------------- | --------------------------------- |
|
|
81
|
+
| **static** | सभी भाषाएँ और सभी पेज एक साथ बंडल किए गए (`init()` में इनलाइन `resources`) | त्वरित प्रोटोटाइप, AI-जनरेटेड कोड |
|
|
82
|
+
| **dynamic** | केवल सक्रिय भाषा बैकएंड के माध्यम से लोड होती है, लेकिन सभी नेमस्पेस एक साथ | अधिकांश सामान्य प्रोजेक्ट्स |
|
|
83
|
+
| **scoped-static** | प्रति रूट एक नेमस्पेस, सभी पहले से बंडल | दुर्लभ |
|
|
84
|
+
| **scoped-dynamic** | प्रति रूट एक नेमस्पेस + बैकएंड लेज़ी लोडिंग। केवल वर्तमान पेज और वर्तमान भाषा | सख्त प्रदर्शन बजट वाले एप्लिकेशन |
|
|
85
|
+
|
|
86
|
+
Intlayer में कोई "scoped" संस्करण नहीं है: कंपाइलर स्वचालित रूप से **प्रति कंपोनेंट** सामग्री को अलग करता है, इसलिए इसके `static` और `dynamic` विकल्प पहले से ही अनुकूलित हैं।
|
|
87
|
+
|
|
88
|
+
प्रत्येक बिल्ड के लिए दर्ज किए गए मेट्रिक्स:
|
|
89
|
+
|
|
90
|
+
- **Lib size**: केवल i18n लाइब्रेरी आयात करने वाले खाली कंपोनेंट का gzip आकार।
|
|
91
|
+
- **Page JS**: प्रति पेज डाउनलोड किया गया औसत JavaScript gzip आकार।
|
|
92
|
+
- **Locale leak %**: डाउनलोड किए गए JS में उन अनुवादित स्ट्रिंग्स का अनुपात जो उस भाषा से संबंधित हैं जिसे उपयोगकर्ता **नहीं** देख रहा है।
|
|
93
|
+
- **Page leak %**: डाउनलोड किए गए JS में उन अनुवादित स्ट्रिंग्स का अनुपात जो उस पेज से संबंधित हैं जिस पर उपयोगकर्ता **नहीं** है।
|
|
94
|
+
- **Component avg**: अलग से कंपाइल किए गए प्रत्येक कंपोनेंट का औसत gzip आकार।
|
|
95
|
+
- **E2E reactivity**: नई भाषा चुनने और DOM में `html[lang]` अपडेट होने के बीच का वास्तविक समय (Playwright, 5 पुनरावृत्तियाँ)।
|
|
96
|
+
- **Hydration**: React के हाइड्रेशन चरण की अवधि।
|
|
97
|
+
|
|
98
|
+
> नीचे दिए गए आंकड़े **2026-09-12** के परीक्षण से हैं, जिसमें `next-i18next` 16.3.0, `react-i18next` 17.0.13 और `intlayer` 9.5.1 का उपयोग किया गया। परीक्षण ऐप जानबूझकर छोटा रखा गया है, इसलिए लीकेज प्रतिशत एक **पैटर्न** दिखाते हैं: जैसे-जैसे आपकी सामग्री बढ़ेगी, लीकेज बढ़ेगा जबकि रनटाइम लागत स्थिर रहेगी।
|
|
99
|
+
|
|
100
|
+
### Next.js पर परिणाम (`next-i18next`)
|
|
101
|
+
|
|
102
|
+
| लाइब्रेरी | रणनीति | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E प्रतिक्रिया | Hydration |
|
|
103
|
+
| ------------------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | --------------: | --------: |
|
|
104
|
+
| **base** (बिना i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
|
|
105
|
+
| `next-i18next` | static | 19.7 KB | 218.5 KB | 0.0% | 89.8% | 78.5 KB | 16.4 ms | 15.6 ms |
|
|
106
|
+
| `next-i18next` | dynamic | 19.7 KB | 169.5 KB | 50.0% | 89.8% | 26.1 KB | 15.4 ms | 27.7 ms |
|
|
107
|
+
| `next-i18next` | scoped-static | 19.7 KB | 220.1 KB | 0.0% | 89.8% | 78.9 KB | 16.4 ms | 14.7 ms |
|
|
108
|
+
| `next-i18next` | scoped-dynamic | 19.7 KB | 163.4 KB | 0.0% | 0.0% | 27.1 KB | 15.9 ms | 15.1 ms |
|
|
109
|
+
| **`next-intlayer`** | static | **5.5 KB** | **141.3 KB** | **0.0%** | **0.0%** | **8.5 KB** | **15.5 ms** | 16.9 ms |
|
|
110
|
+
| **`next-intlayer`** | dynamic | **5.5 KB** | **141.3 KB** | **0.0%** | **0.0%** | **6.9 KB** | **15.3 ms** | 15.9 ms |
|
|
111
|
+
| `@intlayer/next-i18next` (संगत) | static | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 10.7 ms | 11.3 ms |
|
|
112
|
+
| `@intlayer/next-i18next` (संगत) | dynamic | 9.4 KB | 150.7 KB | 0.0% | 0.0% | 9.7 KB | 11.9 ms | 10.6 ms |
|
|
113
|
+
|
|
114
|
+
**डेटा का विश्लेषण**
|
|
115
|
+
|
|
116
|
+
- **रनटाइम लागत**: `react-i18next` के साथ `i18next` का कोर सबसे भारी रनटाइम है: खाली कंपोनेंट के लिए **19.7 KB gzip**, जबकि `next-intlayer` के लिए केवल 5.5 KB।
|
|
117
|
+
- **साधारण सेटअप की उच्च लागत**: `init()` में इनलाइन `resources` से **218.5 KB प्रति पेज** बनता है, जो बेस ऐप से +77.5 KB अधिक है। हर पेज हर नेमस्पेस को ढोता है।
|
|
118
|
+
- **अनुकूलन में भारी मेहनत**: बैकएंड (`dynamic`) पर जाने से 49 KB की बचत होती है लेकिन फिर भी **अन्य पेजों के 90% स्ट्रिंग्स लीक** होते हैं। रूट स्तर पर नेमस्पेस विभाजित करने (`scoped-dynamic`) पर 0% लीकेज के साथ आकार **163.4 KB** हो जाता है, जो फिर भी Intlayer (141.3 KB) से **+22.4 KB प्रति पेज भारी** है।
|
|
119
|
+
- **कंपोनेंट आकार**: `useTranslation()` का उपयोग करने वाला कंपोनेंट 26-79 KB में कंपाइल होता है; वही कंपोनेंट `useIntlayer()` के साथ केवल 6.9 KB में कंपाइल होता है।
|
|
120
|
+
- **हाइड्रेशन**: `dynamic` सेटअप में हाइड्रेशन 27.7 ms तक बढ़ जाता है क्योंकि React के हाइड्रेट होने से पहले i18next इंस्टेंस को क्लाइंट पर बैकएंड हल करना पड़ता है।
|
|
121
|
+
|
|
122
|
+
### TanStack Start पर परिणाम (`react-i18next`)
|
|
123
|
+
|
|
124
|
+
Next.js की विशेषताओं को अलग करके TanStack Start पर शुद्ध `react-i18next` के साथ समान परीक्षण:
|
|
125
|
+
|
|
126
|
+
| लाइब्रेरी | रणनीति | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E प्रतिक्रिया | Hydration |
|
|
127
|
+
| -------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | --------------: | --------: |
|
|
128
|
+
| **base** (बिना i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
|
|
129
|
+
| `react-i18next` | static | 18.4 KB | 180.3 KB | 50.0% | 89.8% | 24.3 KB | 12.9 ms | 85.1 ms |
|
|
130
|
+
| `react-i18next` | dynamic | 18.4 KB | 136.4 KB | 23.1% | 89.8% | 24.8 KB | 123.1 ms | 32.9 ms |
|
|
131
|
+
| `react-i18next` | scoped-static | 18.4 KB | 184.2 KB | 50.7% | 89.8% | 25.3 KB | 185.1 ms | 25.2 ms |
|
|
132
|
+
| `react-i18next` | scoped-dynamic | 18.4 KB | 127.2 KB | 0.0% | 0.0% | 26.7 KB | 17.6 ms | 11.3 ms |
|
|
133
|
+
| **`intlayer`** | static | **5.0 KB** | **125.8 KB** | 50.0% | **0.0%** | **8.1 KB** | **3.2 ms** | 11.5 ms |
|
|
134
|
+
| **`intlayer`** | dynamic | **5.0 KB** | **118.6 KB** | **0.0%** | **0.0%** | **6.3 KB** | **3.6 ms** | 14.1 ms |
|
|
135
|
+
|
|
136
|
+
**डेटा का विश्लेषण**
|
|
137
|
+
|
|
138
|
+
- साधारण `react-i18next` ऐप बेस ऐप की तुलना में **प्रति पेज +69 KB** अधिक डेटा भेजता है, और हाइड्रेशन में **85 ms** (बेस का 4 गुना) का समय लगता है क्योंकि पहली रेंडरिंग से पहले पूरे रिसोर्स ट्री को प्रोसेस किया जाता है।
|
|
139
|
+
- **भाषा बदलने में देरी**: बैकएंड के जरिए लेज़ी-लोडिंग करते समय भाषा बदलने पर नेटवर्क राउंड-ट्रिप की आवश्यकता होती है: `dynamic` में **123 ms** और `scoped-static` में **185 ms**। जबकि Intlayer दोनों मोड में **3-4 ms** में DOM अपडेट करता है।
|
|
140
|
+
- पूरी तरह से अनुकूलित `scoped-dynamic` 127.2 KB पर पहुँचता है, जो फिर भी Intlayer के `dynamic` से **+8.6 KB अधिक** है, और इसके लिए रूट-टू-नेमस्पेस मैप व Suspense बाउंड्री की आवश्यकता पड़ी।
|
|
141
|
+
- Intlayer का `static` विकल्प पहले से ही **0% पेज लीकेज** देता है क्योंकि केवल वर्तमान पेज के कंपोनेंट्स द्वारा आयातित शब्दकोश ही बंडल होते हैं। `importMode: 'dynamic'` चालू करने से भाषा लीकेज भी पूरी तरह समाप्त हो जाती है।
|
|
142
|
+
- **कंपोनेंट आकार**: `react-i18next` में प्रति कंपोनेंट 24-27 KB बनाम Intlayer में 6-8 KB।
|
|
143
|
+
|
|
144
|
+
## यह अंतर क्यों है? ग्लोबल इंस्टेंस बनाम कंपाइल किए गए शब्दकोश
|
|
145
|
+
|
|
146
|
+
`i18next` को 2012 में एक रनटाइम के रूप में डिजाइन किया गया था: एक ग्लोबल इंस्टेंस संसाधन भंडार रखता है, प्लगइन्स इसे विस्तारित करते हैं, और रेंडर समय पर `t()` कुंजियों को खोजता है। यह इसे अत्यधिक लचीला बनाता है लेकिन भारी भी बनाता है:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
.
|
|
150
|
+
├── i18n.ts # createInstance().use(...).use(...).init({...})
|
|
151
|
+
└── src
|
|
152
|
+
├── locales
|
|
153
|
+
│ ├── en
|
|
154
|
+
│ │ ├── common.json
|
|
155
|
+
│ │ ├── home.json
|
|
156
|
+
│ │ └── about.json
|
|
157
|
+
│ └── fr
|
|
158
|
+
│ ├── common.json
|
|
159
|
+
│ ├── home.json
|
|
160
|
+
│ └── about.json
|
|
161
|
+
├── components
|
|
162
|
+
│ └── Counter.tsx # useTranslation("about") + t("counter.label")
|
|
163
|
+
└── app
|
|
164
|
+
└── [locale]
|
|
165
|
+
└── about
|
|
166
|
+
└── page.tsx # इसे जानना होगा कि इसे ["common", "about"] की आवश्यकता है
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
ग्लोबल इंस्टेंस यह अनुमान नहीं लगा सकता कि कंपोनेंट को किन कुंजियों की आवश्यकता होगी, इसलिए यह उन सभी नेमस्पेस को बनाए रखता है जिन्हें लोड करने के लिए कहा गया है। अनुकूलन का अर्थ है कि **आप** फाइलों को विभाजित करें, **आप** प्रत्येक पेज के लिए आवश्यक नेमस्पेस सूचीबद्ध करें, और कंपोनेंट बदलने पर उस सूची को बनाए रखें। जैसा कि [बेंचमार्क रिपोर्ट](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md) में कहा गया है: "टाइप सुरक्षा बनाए रखना और यह जानना कि किस पेज पर कौन सा नेमस्पेस चाहिए, एक दुःस्वप्न है।"
|
|
170
|
+
|
|
171
|
+
Intlayer ग्लोबल इंस्टेंस को पूरी तरह समाप्त कर देता है। कंटेंट सीधे कंपोनेंट के बगल में घोषित होता है, और कंपाइलर बिल्ड समय पर निर्भरता ट्री को हल करता है:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
.
|
|
175
|
+
├── intlayer.config.ts
|
|
176
|
+
└── src
|
|
177
|
+
├── components
|
|
178
|
+
│ └── Counter
|
|
179
|
+
│ ├── index.tsx # useIntlayer("counter")
|
|
180
|
+
│ └── index.content.ts
|
|
181
|
+
└── app
|
|
182
|
+
└── [locale]
|
|
183
|
+
└── about
|
|
184
|
+
├── page.tsx
|
|
185
|
+
└── page.content.ts
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`@intlayer/swc` / `@intlayer/babel` यह पहचानता है कि कौन सा कंपोनेंट किस शब्दकोश को आयात करता है, केवल उन्हें और केवल सक्रिय भाषा के लिए बंडल करता है, और बाकी को हटा देता है। "scoped-dynamic" पैटर्न बिल्ड का स्वचालित परिणाम बन जाता है।
|
|
189
|
+
|
|
190
|
+
> `dynamic` पंक्ति के परिणाम प्राप्त करने के लिए `intlayer.config.ts` में `dictionary.importMode: 'dynamic'` सेट करें। अधिक जानकारी के लिए [बंडल ऑप्टिमाइज़ेशन दस्तावेज़](https://intlayer.org/hi/doc/concept/bundle-optimization) देखें।
|
|
191
|
+
|
|
192
|
+
## डेवलपर अनुभव (DX)
|
|
193
|
+
|
|
194
|
+
### सेटअप
|
|
195
|
+
|
|
196
|
+
**next-i18next (App Router)**
|
|
197
|
+
|
|
198
|
+
```ts fileName="src/app/i18n/server.ts"
|
|
199
|
+
import { createInstance } from "i18next";
|
|
200
|
+
import { initReactI18next } from "react-i18next/initReactI18next";
|
|
201
|
+
import resourcesToBackend from "i18next-resources-to-backend";
|
|
202
|
+
import { defaultLocale } from "@/i18n.config";
|
|
203
|
+
|
|
204
|
+
const backend = resourcesToBackend(
|
|
205
|
+
(locale: string, namespace: string) =>
|
|
206
|
+
import(`../../locales/${locale}/${namespace}.json`)
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
export const initI18next = async (
|
|
210
|
+
locale: string,
|
|
211
|
+
namespaces: string[] = ["common"]
|
|
212
|
+
) => {
|
|
213
|
+
const i18n = createInstance();
|
|
214
|
+
await i18n
|
|
215
|
+
.use(initReactI18next)
|
|
216
|
+
.use(backend)
|
|
217
|
+
.init({
|
|
218
|
+
lng: locale,
|
|
219
|
+
fallbackLng: defaultLocale,
|
|
220
|
+
ns: namespaces,
|
|
221
|
+
defaultNS: "common",
|
|
222
|
+
interpolation: { escapeValue: false },
|
|
223
|
+
react: { useSuspense: false },
|
|
224
|
+
});
|
|
225
|
+
return i18n;
|
|
226
|
+
};
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
इसके अलावा क्लाइंट-साइड `I18nProvider`, `generateStaticParams`, और हर पेज पर `namespaces` सूची को बनाए रखना पड़ता है।
|
|
230
|
+
|
|
231
|
+
**Intlayer**
|
|
232
|
+
|
|
233
|
+
```ts fileName="intlayer.config.ts"
|
|
234
|
+
import { type IntlayerConfig, Locales } from "intlayer";
|
|
235
|
+
|
|
236
|
+
const config: IntlayerConfig = {
|
|
237
|
+
internationalization: {
|
|
238
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
239
|
+
defaultLocale: Locales.ENGLISH,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export default config;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```tsx fileName="src/app/[locale]/layout.tsx"
|
|
247
|
+
import { getHTMLTextDir } from "intlayer";
|
|
248
|
+
import { IntlayerClientProvider, type NextLayoutIntlayer } from "next-intlayer";
|
|
249
|
+
|
|
250
|
+
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
251
|
+
const { locale } = await params;
|
|
252
|
+
|
|
253
|
+
return (
|
|
254
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
255
|
+
<body>
|
|
256
|
+
<IntlayerClientProvider locale={locale}>
|
|
257
|
+
{children}
|
|
258
|
+
</IntlayerClientProvider>
|
|
259
|
+
</body>
|
|
260
|
+
</html>
|
|
261
|
+
);
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export default LocaleLayout;
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### क्लाइंट कंपोनेंट
|
|
268
|
+
|
|
269
|
+
**react-i18next**
|
|
270
|
+
|
|
271
|
+
```json fileName="src/locales/en/about.json"
|
|
272
|
+
{
|
|
273
|
+
"counter": {
|
|
274
|
+
"label": "Counter",
|
|
275
|
+
"increment": "Increment"
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
```tsx fileName="src/components/Counter.tsx"
|
|
281
|
+
"use client";
|
|
282
|
+
|
|
283
|
+
import { useState } from "react";
|
|
284
|
+
import { useTranslation } from "react-i18next";
|
|
285
|
+
|
|
286
|
+
export const Counter = () => {
|
|
287
|
+
const { t, i18n } = useTranslation("about");
|
|
288
|
+
const [count, setCount] = useState(0);
|
|
289
|
+
const numberFormat = new Intl.NumberFormat(i18n.language);
|
|
290
|
+
|
|
291
|
+
return (
|
|
292
|
+
<div>
|
|
293
|
+
<p>{numberFormat.format(count)}</p>
|
|
294
|
+
<button
|
|
295
|
+
aria-label={t("counter.label")}
|
|
296
|
+
onClick={() => setCount((c) => c + 1)}
|
|
297
|
+
>
|
|
298
|
+
{t("counter.increment")}
|
|
299
|
+
</button>
|
|
300
|
+
</div>
|
|
301
|
+
);
|
|
302
|
+
};
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
> इस कंपोनेंट को रेंडर करने वाले पेज को `about` नेमस्पेस लोड करना होगा, और `CustomTypeOptions` का विस्तार किए बिना `t("counter.label")` केवल एक सामान्य स्ट्रिंग है।
|
|
306
|
+
|
|
307
|
+
**Intlayer**
|
|
308
|
+
|
|
309
|
+
```ts fileName="src/components/Counter/index.content.ts"
|
|
310
|
+
import { t, type Dictionary } from "intlayer";
|
|
311
|
+
|
|
312
|
+
const counterContent = {
|
|
313
|
+
key: "counter",
|
|
314
|
+
content: {
|
|
315
|
+
label: t({ en: "Counter", fr: "Compteur" }),
|
|
316
|
+
increment: t({ en: "Increment", fr: "Incrémenter" }),
|
|
317
|
+
},
|
|
318
|
+
} satisfies Dictionary;
|
|
319
|
+
|
|
320
|
+
export default counterContent;
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
```tsx fileName="src/components/Counter/index.tsx"
|
|
324
|
+
"use client";
|
|
325
|
+
|
|
326
|
+
import { useState } from "react";
|
|
327
|
+
import { useIntlayer } from "next-intlayer";
|
|
328
|
+
import { useNumber } from "next-intlayer/format";
|
|
329
|
+
|
|
330
|
+
export const Counter = () => {
|
|
331
|
+
const { label, increment } = useIntlayer("counter");
|
|
332
|
+
const number = useNumber();
|
|
333
|
+
const [count, setCount] = useState(0);
|
|
334
|
+
|
|
335
|
+
return (
|
|
336
|
+
<div>
|
|
337
|
+
<p>{number(count)}</p>
|
|
338
|
+
<button aria-label={label} onClick={() => setCount((c) => c + 1)}>
|
|
339
|
+
{increment}
|
|
340
|
+
</button>
|
|
341
|
+
</div>
|
|
342
|
+
);
|
|
343
|
+
};
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
`label` और `increment` पूरी तरह से टाइप-सुरक्षित हैं; वर्तनी की गलती TypeScript त्रुटि देती है और फ्रेंच अनुवाद गायब होने पर बिल्ड रुक जाता है।
|
|
347
|
+
|
|
348
|
+
### सिंक्रोनस सर्वर कंपोनेंट
|
|
349
|
+
|
|
350
|
+
**next-i18next**
|
|
351
|
+
|
|
352
|
+
```tsx fileName="src/components/ServerCounter.tsx"
|
|
353
|
+
type ServerCounterProps = {
|
|
354
|
+
t: (key: string) => string;
|
|
355
|
+
locale: string;
|
|
356
|
+
count: number;
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
export const ServerCounter = ({ t, locale, count }: ServerCounterProps) => (
|
|
360
|
+
<div>
|
|
361
|
+
<p>{new Intl.NumberFormat(locale).format(count)}</p>
|
|
362
|
+
<button aria-label={t("counter.label")}>{t("counter.increment")}</button>
|
|
363
|
+
</div>
|
|
364
|
+
);
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
पेज को `i18n.getFixedT(locale, "about")` कॉल करके `t` और `locale` को Props के रूप में नीचे भेजना पड़ता है।
|
|
368
|
+
|
|
369
|
+
**Intlayer**
|
|
370
|
+
|
|
371
|
+
```tsx fileName="src/components/ServerCounter.tsx"
|
|
372
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
373
|
+
import { useNumber } from "next-intlayer/server/format";
|
|
374
|
+
|
|
375
|
+
export const ServerCounter = ({ count }: { count: number }) => {
|
|
376
|
+
const { label, increment } = useIntlayer("counter");
|
|
377
|
+
const number = useNumber();
|
|
378
|
+
|
|
379
|
+
return (
|
|
380
|
+
<div>
|
|
381
|
+
<p>{number(count)}</p>
|
|
382
|
+
<button aria-label={label}>{increment}</button>
|
|
383
|
+
</div>
|
|
384
|
+
);
|
|
385
|
+
};
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## i18next API बनाए रखें, Intlayer का बेहतर प्रदर्शन पाएं
|
|
389
|
+
|
|
390
|
+
बेंचमार्क परिणामों का लाभ उठाने के लिए आपको अपने कंपोनेंट्स को फिर से लिखने की आवश्यकता नहीं है। `@intlayer/i18next`, `@intlayer/react-i18next`, और `@intlayer/next-i18next` ड्रॉप-इन एडेप्टर हैं: `useTranslation`, `t()`, `<Trans>`, `{{interpolation}}`, बहुवचन और संदर्भ प्रत्यय बिना किसी बदलाव के काम करते रहते हैं।
|
|
391
|
+
|
|
392
|
+
```ts fileName="next.config.ts"
|
|
393
|
+
import type { NextConfig } from "next";
|
|
394
|
+
import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
|
|
395
|
+
|
|
396
|
+
const withIntlayer = createNextI18nPlugin();
|
|
397
|
+
|
|
398
|
+
const nextConfig: NextConfig = {};
|
|
399
|
+
|
|
400
|
+
export default withIntlayer(nextConfig);
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
```ts fileName="vite.config.ts"
|
|
404
|
+
import { defineConfig } from "vite";
|
|
405
|
+
import { reactI18nextVitePlugin } from "@intlayer/react-i18next/plugin";
|
|
406
|
+
|
|
407
|
+
export default defineConfig({
|
|
408
|
+
plugins: [reactI18nextVitePlugin()],
|
|
409
|
+
});
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
बेंचमार्क में, उसी Next.js ऐप का संगत बिल्ड एप्लिकेशन कोड को छुए बिना **218.5 KB से 150.7 KB** प्रति पेज, कंपोनेंट **78.5 KB से 9.7 KB**, पेज लीकेज **~90% से 0%**, और हाइड्रेशन 15.6 ms से घटकर 11.3 ms हो गया। आपकी मौजूदा `locales/{lng}/{ns}.json` फाइलें JSON सिंक प्लगइन के माध्यम से प्राथमिक डेटा स्रोत बनी रह सकती हैं।
|
|
413
|
+
|
|
414
|
+
माइग्रेशन गाइड देखें: [i18next](https://intlayer.org/hi/doc/migration/i18next), [react-i18next](https://intlayer.org/hi/doc/migration/react-i18next), [next-i18next](https://intlayer.org/hi/doc/migration/next-i18next)।
|
|
415
|
+
|
|
416
|
+
## कब किसका चयन करें?
|
|
417
|
+
|
|
418
|
+
- **i18next चुनें**: यदि आपको इसके विशाल प्लगइन इकोसिस्टम की आवश्यकता है, आप React के बाहर भी स्थानीयकरण करते हैं (Node सेवाएँ, Vanilla JS, अन्य फ्रेमवर्क), आपकी टीम पहले से इसमें कुशल है, या कोई अनुवाद प्लेटफ़ॉर्म `locales/{lng}/{ns}.json` फ़ाइलों की अपेक्षा करता है। प्रदर्शन महत्वपूर्ण होने पर नेमस्पेस विभाजन और पेज मैपिंग के लिए समय निकालें।
|
|
419
|
+
- **Intlayer चुनें**: यदि आप **कंपोनेंट-स्तरीय कंटेंट**, **सख्त TypeScript सुरक्षा**, **बिल्ड-समय पर अनुवाद सत्यापन**, **शून्य-प्रयास ट्री-शेकिंग और लेज़ी लोडिंग**, त्वरित भाषा स्विचिंग, सिंक्रोनस सर्वर कंपोनेंट्स और अंतर्निहित संपादन उपकरण (विजुअल एडिटर, CMS, AI अनुवाद, MCP सर्वर) चाहते हैं। मॉड्यूलर कोडबेस और डिज़ाइन सिस्टम के लिए यह सर्वोत्तम है।
|
|
420
|
+
- **`@intlayer/*-i18next` एडेप्टर चुनें**: यदि आप पहले से ही i18next का उपयोग कर रहे हैं और कोड को फिर से लिखे बिना बंडल साइज और प्रतिक्रिया गति में सुधार चाहते हैं।
|
|
421
|
+
|
|
422
|
+
## संबंधित तुलनात्मक लेख
|
|
423
|
+
|
|
424
|
+
- [next-intl बनाम Intlayer](https://intlayer.org/hi/blog/next-intl-vs-intlayer) (समान बेंचमार्क)
|
|
425
|
+
- [Lingui बनाम Intlayer](https://intlayer.org/hi/blog/lingui-vs-intlayer) (समान बेंचमार्क)
|
|
426
|
+
- [vue-i18n बनाम Intlayer बेंचमार्क](https://intlayer.org/hi/blog/vue-i18n-vs-intlayer-benchmark) (समान बेंचमार्क)
|
|
427
|
+
- [next-i18next बनाम next-intl बनाम Intlayer](https://intlayer.org/hi/blog/next-i18next-vs-next-intl-vs-intlayer)
|
|
428
|
+
- [react-i18next बनाम react-intl बनाम Intlayer](https://intlayer.org/hi/blog/react-i18next-vs-react-intl-vs-intlayer)
|
|
429
|
+
- [क्या i18next पुराना हो चुका है?](https://intlayer.org/hi/blog/is-i18next-outdated)
|
|
430
|
+
|
|
431
|
+
## GitHub स्टार्स
|
|
432
|
+
|
|
433
|
+
GitHub स्टार्स किसी प्रोजेक्ट की लोकप्रियता, सामुदायिक विश्वास और दीर्घकालिक प्रासंगिकता का एक स्पष्ट संकेत हैं। हालांकि वे सीधे तकनीकी गुणवत्ता का पैमाना नहीं हैं, वे दिखाते हैं कि कितने डेवलपर्स इसे उपयोगी पाते हैं और अपना रहे हैं।
|
|
434
|
+
|
|
435
|
+
[](https://star-history.com/#i18next/i18next&i18next/react-i18next&i18next/next-i18next&aymericzip/intlayer)
|
|
436
|
+
|
|
437
|
+
## निष्कर्ष
|
|
438
|
+
|
|
439
|
+
`i18next` ने अपना सम्मानजनक स्थान बनाया है: यह हर जगह काम करता है, हर चीज़ के लिए प्लगइन प्रदान करता है, और इसे एक दशक से अधिक समय से संवारा गया है। लेकिन बेंचमार्क इसके रनटाइम-केंद्रित डिज़ाइन की लागत को उजागर करता है। सामान्य सेटअप **प्रति पेज +70-77 KB gzip** जोड़ता है, **~90% अन्य पेजों की सामग्री लीक** करता है, और भाषा बदलने में **100 ms से अधिक** समय लेता है। इसे शून्य तक ले जाना संभव है लेकिन उसके लिए भारी मैन्युअल प्रबंधन की आवश्यकता होती है।
|
|
440
|
+
|
|
441
|
+
Intlayer इस पूरे कार्य को कंपाइलर पर स्थानांतरित करता है। प्रति-कंपोनेंट शब्दकोश, प्रति-भाषा लेज़ी लोडिंग और अप्रयुक्त सामग्री को हटाना बिल्ड के स्वाभाविक परिणाम हैं। उसी ऐप पर: **प्रति पेज केवल +0.3 KB**, **0% लीकेज**, कंपोनेंट्स **3-10 गुना छोटे**, और भाषा स्विचिंग मात्र **3-4 ms** में।
|
|
442
|
+
|
|
443
|
+
सभी आंकड़े, परीक्षण एप्लिकेशन और स्क्रिप्ट [Benchmark Bloom रिपॉजिटरी](https://github.com/intlayer-org/benchmark-bloom) में सार्वजनिक रूप से उपलब्ध हैं।
|
|
444
|
+
|
|
445
|
+
अधिक जानकारी के लिए ['Intlayer क्यों चुनें?' दस्तावेज़](https://intlayer.org/hi/doc/why) देखें।
|
|
@@ -70,7 +70,7 @@ author: aymericzip
|
|
|
70
70
|
| `i18next` core | 2,626 | **259** | छोटे सुधार |
|
|
71
71
|
| Intlayer | 7,156 | **4,343** | कंपाइलर, आईडीई टूल्स और एआई इंजन विकास |
|
|
72
72
|
|
|
73
|
-
[](https://
|
|
73
|
+
[](https://star-history.com/#i18next/i18next&i18next/react-i18next&i18next/next-i18next&aymericzip/intlayer)
|
|
74
74
|
|
|
75
75
|
एक स्थापित लाइब्रेरी स्थिरता देती है। लेकिन i18n टूल्स का परिदृश्य बदल चुका है: मॉडर्न बंडलर्स बिल्ड के दौरान अप्रयुक्त कंटेंट हटाते हैं, एलएलएम सीधे सीआई में ट्रांसलेट करते हैं, और एडिटर्स लैंग्वेज सर्वर (LSP) और एआई एजेंट्स पर निर्भर हैं। केवल रनटाइम पर आधारित आर्किटेक्चर इन प्रगतियों को आसानी से नहीं अपना सकता।
|
|
76
76
|
|
|
@@ -66,7 +66,7 @@ Crowdin का आधिकारिक पार्टनर होने क
|
|
|
66
66
|
- `amannn/next-intl`: **187 कमिट्स** (मुख्यतः फ्रेमवर्क अपडेट्स और छोटे सुधार)।
|
|
67
67
|
- `aymericzip/intlayer`: **4,343 कमिट्स** (कंपाइलर, आईडीई एक्सटेंशन, एमसीपी सर्वर और एआई ट्रांसलेशन इंजन पर निरंतर विकास)।
|
|
68
68
|
|
|
69
|
-
[](https://
|
|
69
|
+
[](https://star-history.com/#amannn/next-intl&aymericzip/intlayer)
|
|
70
70
|
|
|
71
71
|
एक स्थापित लाइब्रेरी सुरक्षा का अनुभव कराती है। लेकिन आधुनिक i18n की दुनिया बदल चुकी है: कंपाइलर्स अप्रयुक्त टेक्स्ट को बिल्ड के समय हटाते हैं, एलएलएम सीआई पाइपलाइन में अनुवाद करते हैं, और डेवलपर्स लैंग्वेज सर्वर (LSP) और एआई एजेंट्स की मदद लेते हैं। रनटाइम-केंद्रित लाइब्रेरी इन सुविधाओं को आसानी से आत्मसात नहीं कर पाती।
|
|
72
72
|
|
|
@@ -64,7 +64,7 @@ Vite + Vue पर आधारित केवल 31.5 KB के बुनिय
|
|
|
64
64
|
- `intlify/vue-i18n`: **259 कमिट्स** (Vue 3 और Nuxt का नियमित रखरखाव)।
|
|
65
65
|
- `aymericzip/intlayer`: **4,343 कमिट्स** (कंपाइलर ऑप्टिमाइजेशन, LSP टूल्स और एआई इंटीग्रेशन पर सक्रिय विकास)।
|
|
66
66
|
|
|
67
|
-
[](https://
|
|
67
|
+
[](https://star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
68
68
|
|
|
69
69
|
एक पुरानी लाइब्रेरी स्थिरता तो देती है, लेकिन आधुनिक फ्रंटएंड अब बिल्ड-टाइम AST ट्रांसफॉर्मेशन, डेड-कोड रिमूवल और एआई ऑटोमेशन पर आधारित है। केवल रनटाइम पर चलने वाली लाइब्रेरी इन आधुनिक तकनीकों को सहजता से नहीं अपना पाती।
|
|
70
70
|
|