@intlayer/docs 9.5.2 → 9.5.4-canary.0
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 +9 -9
- package/blog/ar/history_of_i18n.md +54 -54
- package/blog/ar/how_to_pick_react_i18n_library.md +548 -0
- package/blog/ar/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/ar/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/ar/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/ar/is_next-intl_outdated.md +6 -2
- package/blog/ar/is_vue-i18n_outdated.md +8 -2
- 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 +9 -5
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/de/how_to_pick_react_i18n_library.md +548 -0
- package/blog/de/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/de/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/de/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/de/is_next-intl_outdated.md +6 -2
- package/blog/de/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/en/how_to_pick_react_i18n_library.md +542 -0
- package/blog/en/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/en/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/en/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/en/is_next-intl_outdated.md +6 -2
- package/blog/en/is_vue-i18n_outdated.md +8 -2
- package/blog/en/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/en/lingui_vs_intlayer.md +381 -0
- package/blog/en/list_i18n_technologies/frameworks/react-router.md +2 -3
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/en-GB/how_to_pick_react_i18n_library.md +542 -0
- package/blog/en-GB/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/en-GB/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/en-GB/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/en-GB/is_next-intl_outdated.md +6 -2
- package/blog/en-GB/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/es/how_to_pick_react_i18n_library.md +542 -0
- package/blog/es/how_to_pick_solid_i18n_library.md +446 -0
- package/blog/es/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/es/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/es/is_next-intl_outdated.md +6 -2
- package/blog/es/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/fr/how_to_pick_react_i18n_library.md +542 -0
- package/blog/fr/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/fr/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/fr/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/fr/is_next-intl_outdated.md +6 -2
- package/blog/fr/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/hi/how_to_pick_react_i18n_library.md +548 -0
- package/blog/hi/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/hi/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/hi/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/hi/is_next-intl_outdated.md +6 -2
- package/blog/hi/is_vue-i18n_outdated.md +8 -2
- package/blog/hi/lingui_vs_intlayer-lingui.md +304 -0
- package/blog/hi/lingui_vs_intlayer.md +381 -0
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/id/how_to_pick_react_i18n_library.md +548 -0
- package/blog/id/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/id/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/id/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/id/is_next-intl_outdated.md +6 -2
- package/blog/id/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/it/how_to_pick_react_i18n_library.md +549 -0
- package/blog/it/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/it/how_to_pick_svelte_i18n_library.md +455 -0
- package/blog/it/how_to_pick_vue_i18n_library.md +449 -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 +6 -2
- package/blog/it/is_next-intl_outdated.md +6 -2
- package/blog/it/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/ja/how_to_pick_react_i18n_library.md +542 -0
- package/blog/ja/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/ja/how_to_pick_svelte_i18n_library.md +457 -0
- package/blog/ja/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/ja/is_next-intl_outdated.md +6 -2
- package/blog/ja/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/ko/how_to_pick_react_i18n_library.md +548 -0
- package/blog/ko/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/ko/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/ko/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/ko/is_next-intl_outdated.md +6 -2
- package/blog/ko/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/pl/how_to_pick_react_i18n_library.md +549 -0
- package/blog/pl/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/pl/how_to_pick_svelte_i18n_library.md +460 -0
- package/blog/pl/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/pl/is_next-intl_outdated.md +6 -2
- package/blog/pl/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/pt/how_to_pick_react_i18n_library.md +549 -0
- package/blog/pt/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/pt/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/pt/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/pt/is_next-intl_outdated.md +6 -2
- package/blog/pt/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/ru/how_to_pick_react_i18n_library.md +553 -0
- package/blog/ru/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/ru/how_to_pick_svelte_i18n_library.md +459 -0
- package/blog/ru/how_to_pick_vue_i18n_library.md +453 -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 +6 -2
- package/blog/ru/is_next-intl_outdated.md +6 -2
- package/blog/ru/is_vue-i18n_outdated.md +8 -2
- 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 +9 -5
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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 +54 -54
- package/blog/tr/how_to_pick_react_i18n_library.md +548 -0
- package/blog/tr/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/tr/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/tr/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/tr/is_next-intl_outdated.md +6 -2
- package/blog/tr/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/uk/how_to_pick_react_i18n_library.md +542 -0
- package/blog/uk/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/uk/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/uk/how_to_pick_vue_i18n_library.md +443 -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 +6 -2
- package/blog/uk/is_next-intl_outdated.md +6 -2
- package/blog/uk/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/vi/how_to_pick_react_i18n_library.md +548 -0
- package/blog/vi/how_to_pick_solid_i18n_library.md +438 -0
- package/blog/vi/how_to_pick_svelte_i18n_library.md +448 -0
- package/blog/vi/how_to_pick_vue_i18n_library.md +442 -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 +6 -2
- package/blog/vi/is_next-intl_outdated.md +6 -2
- package/blog/vi/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +54 -54
- package/blog/zh/how_to_pick_react_i18n_library.md +548 -0
- package/blog/zh/how_to_pick_solid_i18n_library.md +451 -0
- package/blog/zh/how_to_pick_svelte_i18n_library.md +454 -0
- package/blog/zh/how_to_pick_vue_i18n_library.md +448 -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 +6 -2
- package/blog/zh/is_next-intl_outdated.md +6 -2
- package/blog/zh/is_vue-i18n_outdated.md +8 -2
- 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 +10 -6
- 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/per-component_vs_centralized_i18n.md +9 -4
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +6 -2
- 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 +240 -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/cjs/index.cjs +1 -1
- package/dist/esm/generated/blog.entry.mjs +240 -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/esm/index.mjs +1 -1
- package/dist/types/generated/blog.entry.d.ts +12 -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/bundle_optimization.md +5 -1
- package/docs/ar/how_works_intlayer.md +2 -2
- package/docs/ar/interest_of_intlayer.md +7 -7
- package/docs/ar/intlayer_CMS.md +1 -1
- package/docs/ar/intlayer_with_adonisjs.md +1 -1
- package/docs/ar/intlayer_with_analog.md +1 -1
- package/docs/ar/intlayer_with_angular_19.md +1 -1
- package/docs/ar/intlayer_with_angular_21.md +1 -1
- package/docs/ar/intlayer_with_astro.md +1 -1
- package/docs/ar/intlayer_with_astro_lit.md +1 -1
- package/docs/ar/intlayer_with_astro_preact.md +1 -1
- package/docs/ar/intlayer_with_astro_react.md +1 -1
- package/docs/ar/intlayer_with_astro_solid.md +1 -1
- package/docs/ar/intlayer_with_astro_svelte.md +1 -1
- package/docs/ar/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ar/intlayer_with_astro_vue.md +1 -1
- package/docs/ar/intlayer_with_create_react_app.md +1 -1
- package/docs/ar/intlayer_with_express.md +1 -1
- package/docs/ar/intlayer_with_hono.md +1 -1
- package/docs/ar/intlayer_with_nestjs.md +1 -1
- package/docs/ar/intlayer_with_nextjs_14.md +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +1 -1
- package/docs/ar/intlayer_with_nextjs_16.md +1 -1
- package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7.md +1 -1
- package/docs/ar/intlayer_with_vite+preact.md +1 -1
- package/docs/ar/intlayer_with_vite+react.md +1 -1
- package/docs/ar/intlayer_with_vite+vue.md +1 -1
- package/docs/ar/introduction.md +0 -1
- package/docs/ar/readme.md +8 -8
- package/docs/bn/bundle_optimization.md +5 -1
- package/docs/bn/interest_of_intlayer.md +22 -22
- package/docs/bn/intlayer_CMS.md +1 -1
- package/docs/bn/intlayer_with_angular_21.md +1 -1
- package/docs/bn/intlayer_with_hono.md +1 -1
- package/docs/bn/introduction.md +0 -1
- package/docs/cs/bundle_optimization.md +5 -1
- package/docs/cs/interest_of_intlayer.md +7 -7
- package/docs/cs/intlayer_with_angular_21.md +1 -1
- package/docs/cs/intlayer_with_hono.md +1 -1
- package/docs/cs/introduction.md +0 -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/bundle_optimization.md +5 -1
- package/docs/de/how_works_intlayer.md +2 -2
- package/docs/de/interest_of_intlayer.md +7 -7
- package/docs/de/intlayer_CMS.md +1 -1
- package/docs/de/intlayer_with_adonisjs.md +1 -1
- package/docs/de/intlayer_with_analog.md +1 -1
- package/docs/de/intlayer_with_angular_19.md +1 -1
- package/docs/de/intlayer_with_angular_21.md +1 -1
- package/docs/de/intlayer_with_astro.md +1 -1
- package/docs/de/intlayer_with_astro_lit.md +1 -1
- package/docs/de/intlayer_with_astro_preact.md +1 -1
- package/docs/de/intlayer_with_astro_react.md +1 -1
- package/docs/de/intlayer_with_astro_solid.md +1 -1
- package/docs/de/intlayer_with_astro_svelte.md +1 -1
- package/docs/de/intlayer_with_astro_vanilla.md +1 -1
- package/docs/de/intlayer_with_astro_vue.md +1 -1
- package/docs/de/intlayer_with_create_react_app.md +1 -1
- package/docs/de/intlayer_with_express.md +1 -1
- package/docs/de/intlayer_with_hono.md +1 -1
- package/docs/de/intlayer_with_nestjs.md +1 -1
- package/docs/de/intlayer_with_nextjs_14.md +1 -1
- package/docs/de/intlayer_with_nextjs_15.md +1 -1
- package/docs/de/intlayer_with_nextjs_16.md +1 -1
- package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/de/intlayer_with_vite+preact.md +1 -1
- package/docs/de/intlayer_with_vite+react.md +1 -1
- package/docs/de/intlayer_with_vite+vue.md +1 -1
- package/docs/de/introduction.md +0 -1
- package/docs/de/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/en/how_works_intlayer.md +2 -2
- package/docs/en/interest_of_intlayer.md +7 -7
- package/docs/en/intlayer_CMS.md +1 -1
- package/docs/en/intlayer_with_adonisjs.md +1 -1
- package/docs/en/intlayer_with_analog.md +1 -1
- package/docs/en/intlayer_with_angular_19.md +1 -1
- package/docs/en/intlayer_with_angular_21.md +1 -1
- package/docs/en/intlayer_with_astro.md +1 -1
- package/docs/en/intlayer_with_astro_lit.md +1 -1
- package/docs/en/intlayer_with_astro_preact.md +1 -1
- package/docs/en/intlayer_with_astro_react.md +1 -1
- package/docs/en/intlayer_with_astro_solid.md +1 -1
- package/docs/en/intlayer_with_astro_svelte.md +1 -1
- package/docs/en/intlayer_with_astro_vanilla.md +1 -1
- package/docs/en/intlayer_with_astro_vue.md +1 -1
- package/docs/en/intlayer_with_create_react_app.md +1 -1
- package/docs/en/intlayer_with_express.md +1 -1
- package/docs/en/intlayer_with_hono.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +1 -1
- package/docs/en/intlayer_with_nextjs_14.md +1 -1
- package/docs/en/intlayer_with_nextjs_15.md +1 -1
- package/docs/en/intlayer_with_nextjs_16.md +1 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_vite+preact.md +1 -1
- package/docs/en/intlayer_with_vite+react.md +1 -1
- package/docs/en/intlayer_with_vite+vue.md +1 -1
- package/docs/en/introduction.md +0 -1
- package/docs/en/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/en-GB/how_works_intlayer.md +2 -2
- package/docs/en-GB/interest_of_intlayer.md +7 -7
- package/docs/en-GB/intlayer_CMS.md +1 -1
- package/docs/en-GB/intlayer_with_adonisjs.md +1 -1
- package/docs/en-GB/intlayer_with_analog.md +1 -1
- package/docs/en-GB/intlayer_with_angular_19.md +1 -1
- package/docs/en-GB/intlayer_with_angular_21.md +1 -1
- package/docs/en-GB/intlayer_with_astro.md +1 -1
- package/docs/en-GB/intlayer_with_astro_lit.md +1 -1
- package/docs/en-GB/intlayer_with_astro_preact.md +1 -1
- package/docs/en-GB/intlayer_with_astro_react.md +1 -1
- package/docs/en-GB/intlayer_with_astro_solid.md +1 -1
- package/docs/en-GB/intlayer_with_astro_svelte.md +1 -1
- package/docs/en-GB/intlayer_with_astro_vanilla.md +1 -1
- package/docs/en-GB/intlayer_with_astro_vue.md +1 -1
- package/docs/en-GB/intlayer_with_create_react_app.md +1 -1
- package/docs/en-GB/intlayer_with_express.md +1 -1
- package/docs/en-GB/intlayer_with_hono.md +1 -1
- package/docs/en-GB/intlayer_with_nestjs.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en-GB/intlayer_with_vite+preact.md +1 -1
- package/docs/en-GB/intlayer_with_vite+react.md +1 -1
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -1
- package/docs/en-GB/introduction.md +0 -1
- package/docs/en-GB/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/es/how_works_intlayer.md +2 -2
- package/docs/es/interest_of_intlayer.md +7 -7
- package/docs/es/intlayer_CMS.md +1 -1
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_analog.md +1 -1
- package/docs/es/intlayer_with_angular_19.md +1 -1
- package/docs/es/intlayer_with_angular_21.md +1 -1
- package/docs/es/intlayer_with_astro.md +1 -1
- package/docs/es/intlayer_with_astro_lit.md +1 -1
- package/docs/es/intlayer_with_astro_preact.md +1 -1
- package/docs/es/intlayer_with_astro_react.md +1 -1
- package/docs/es/intlayer_with_astro_solid.md +1 -1
- package/docs/es/intlayer_with_astro_svelte.md +1 -1
- package/docs/es/intlayer_with_astro_vanilla.md +1 -1
- package/docs/es/intlayer_with_astro_vue.md +1 -1
- package/docs/es/intlayer_with_create_react_app.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_14.md +1 -1
- package/docs/es/intlayer_with_nextjs_15.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +1 -1
- package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/es/intlayer_with_vite+preact.md +1 -1
- package/docs/es/intlayer_with_vite+react.md +1 -1
- package/docs/es/intlayer_with_vite+vue.md +1 -1
- package/docs/es/introduction.md +0 -1
- package/docs/es/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/fr/how_works_intlayer.md +2 -2
- package/docs/fr/interest_of_intlayer.md +7 -7
- package/docs/fr/intlayer_CMS.md +1 -1
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_analog.md +1 -1
- package/docs/fr/intlayer_with_angular_19.md +1 -1
- package/docs/fr/intlayer_with_angular_21.md +1 -1
- package/docs/fr/intlayer_with_astro.md +1 -1
- package/docs/fr/intlayer_with_astro_lit.md +1 -1
- package/docs/fr/intlayer_with_astro_preact.md +1 -1
- package/docs/fr/intlayer_with_astro_react.md +1 -1
- package/docs/fr/intlayer_with_astro_solid.md +1 -1
- package/docs/fr/intlayer_with_astro_svelte.md +1 -1
- package/docs/fr/intlayer_with_astro_vanilla.md +1 -1
- package/docs/fr/intlayer_with_astro_vue.md +1 -1
- package/docs/fr/intlayer_with_create_react_app.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_14.md +1 -1
- package/docs/fr/intlayer_with_nextjs_15.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +1 -1
- package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/fr/intlayer_with_react_router_v7.md +2 -2
- package/docs/fr/intlayer_with_vite+preact.md +1 -1
- package/docs/fr/intlayer_with_vite+react.md +1 -1
- package/docs/fr/intlayer_with_vite+vue.md +1 -1
- package/docs/fr/introduction.md +0 -1
- package/docs/fr/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/hi/how_works_intlayer.md +2 -2
- package/docs/hi/interest_of_intlayer.md +7 -7
- package/docs/hi/intlayer_CMS.md +1 -1
- package/docs/hi/intlayer_with_adonisjs.md +1 -1
- package/docs/hi/intlayer_with_analog.md +1 -1
- package/docs/hi/intlayer_with_angular_19.md +1 -1
- package/docs/hi/intlayer_with_angular_21.md +1 -1
- package/docs/hi/intlayer_with_astro.md +1 -1
- package/docs/hi/intlayer_with_astro_lit.md +1 -1
- package/docs/hi/intlayer_with_astro_preact.md +1 -1
- package/docs/hi/intlayer_with_astro_react.md +1 -1
- package/docs/hi/intlayer_with_astro_solid.md +1 -1
- package/docs/hi/intlayer_with_astro_svelte.md +1 -1
- package/docs/hi/intlayer_with_astro_vanilla.md +1 -1
- package/docs/hi/intlayer_with_astro_vue.md +1 -1
- package/docs/hi/intlayer_with_create_react_app.md +1 -1
- package/docs/hi/intlayer_with_express.md +1 -1
- package/docs/hi/intlayer_with_hono.md +1 -1
- package/docs/hi/intlayer_with_nestjs.md +1 -1
- package/docs/hi/intlayer_with_nextjs_14.md +1 -1
- package/docs/hi/intlayer_with_nextjs_15.md +1 -1
- package/docs/hi/intlayer_with_nextjs_16.md +1 -1
- package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7.md +1 -1
- package/docs/hi/intlayer_with_vite+preact.md +1 -1
- package/docs/hi/intlayer_with_vite+react.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +1 -1
- package/docs/hi/introduction.md +0 -1
- package/docs/hi/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/id/how_works_intlayer.md +2 -2
- package/docs/id/interest_of_intlayer.md +7 -7
- package/docs/id/intlayer_CMS.md +1 -1
- package/docs/id/intlayer_with_adonisjs.md +1 -1
- package/docs/id/intlayer_with_analog.md +1 -1
- package/docs/id/intlayer_with_angular_19.md +1 -1
- package/docs/id/intlayer_with_angular_21.md +1 -1
- package/docs/id/intlayer_with_astro.md +1 -1
- package/docs/id/intlayer_with_astro_lit.md +1 -1
- package/docs/id/intlayer_with_astro_preact.md +1 -1
- package/docs/id/intlayer_with_astro_react.md +1 -1
- package/docs/id/intlayer_with_astro_solid.md +1 -1
- package/docs/id/intlayer_with_astro_svelte.md +1 -1
- package/docs/id/intlayer_with_astro_vanilla.md +1 -1
- package/docs/id/intlayer_with_astro_vue.md +1 -1
- package/docs/id/intlayer_with_create_react_app.md +1 -1
- package/docs/id/intlayer_with_express.md +1 -1
- package/docs/id/intlayer_with_hono.md +1 -1
- package/docs/id/intlayer_with_nestjs.md +1 -1
- package/docs/id/intlayer_with_nextjs_14.md +1 -1
- package/docs/id/intlayer_with_nextjs_15.md +1 -1
- package/docs/id/intlayer_with_nextjs_16.md +1 -1
- package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/id/intlayer_with_react_router_v7.md +1 -1
- package/docs/id/intlayer_with_vite+preact.md +1 -1
- package/docs/id/intlayer_with_vite+react.md +1 -1
- package/docs/id/intlayer_with_vite+vue.md +1 -1
- package/docs/id/introduction.md +0 -1
- package/docs/id/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/it/how_works_intlayer.md +2 -2
- package/docs/it/interest_of_intlayer.md +7 -7
- package/docs/it/intlayer_CMS.md +1 -1
- package/docs/it/intlayer_with_adonisjs.md +1 -1
- package/docs/it/intlayer_with_analog.md +1 -1
- package/docs/it/intlayer_with_angular_19.md +1 -1
- package/docs/it/intlayer_with_angular_21.md +1 -1
- package/docs/it/intlayer_with_astro.md +1 -1
- package/docs/it/intlayer_with_astro_lit.md +1 -1
- package/docs/it/intlayer_with_astro_preact.md +1 -1
- package/docs/it/intlayer_with_astro_react.md +1 -1
- package/docs/it/intlayer_with_astro_solid.md +1 -1
- package/docs/it/intlayer_with_astro_svelte.md +1 -1
- package/docs/it/intlayer_with_astro_vanilla.md +1 -1
- package/docs/it/intlayer_with_astro_vue.md +1 -1
- package/docs/it/intlayer_with_create_react_app.md +1 -1
- package/docs/it/intlayer_with_express.md +1 -1
- package/docs/it/intlayer_with_hono.md +1 -1
- package/docs/it/intlayer_with_nestjs.md +1 -1
- package/docs/it/intlayer_with_nextjs_14.md +1 -1
- package/docs/it/intlayer_with_nextjs_15.md +1 -1
- package/docs/it/intlayer_with_nextjs_16.md +1 -1
- package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/it/intlayer_with_react_router_v7.md +2 -2
- package/docs/it/intlayer_with_vite+preact.md +1 -1
- package/docs/it/intlayer_with_vite+react.md +1 -1
- package/docs/it/intlayer_with_vite+vue.md +1 -1
- package/docs/it/introduction.md +0 -1
- package/docs/it/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/ja/how_works_intlayer.md +2 -2
- package/docs/ja/interest_of_intlayer.md +7 -7
- package/docs/ja/intlayer_CMS.md +1 -1
- package/docs/ja/intlayer_with_adonisjs.md +1 -1
- package/docs/ja/intlayer_with_analog.md +1 -1
- package/docs/ja/intlayer_with_angular_19.md +1 -1
- package/docs/ja/intlayer_with_angular_21.md +1 -1
- package/docs/ja/intlayer_with_astro.md +1 -1
- package/docs/ja/intlayer_with_astro_lit.md +1 -1
- package/docs/ja/intlayer_with_astro_preact.md +1 -1
- package/docs/ja/intlayer_with_astro_react.md +1 -1
- package/docs/ja/intlayer_with_astro_solid.md +1 -1
- package/docs/ja/intlayer_with_astro_svelte.md +1 -1
- package/docs/ja/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ja/intlayer_with_astro_vue.md +1 -1
- package/docs/ja/intlayer_with_create_react_app.md +1 -1
- package/docs/ja/intlayer_with_express.md +1 -1
- package/docs/ja/intlayer_with_hono.md +1 -1
- package/docs/ja/intlayer_with_nestjs.md +1 -1
- package/docs/ja/intlayer_with_nextjs_14.md +1 -1
- package/docs/ja/intlayer_with_nextjs_15.md +1 -1
- package/docs/ja/intlayer_with_nextjs_16.md +1 -1
- package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ja/intlayer_with_vite+preact.md +1 -1
- package/docs/ja/intlayer_with_vite+react.md +1 -1
- package/docs/ja/intlayer_with_vite+vue.md +1 -1
- package/docs/ja/introduction.md +0 -1
- package/docs/ja/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/ko/how_works_intlayer.md +2 -2
- package/docs/ko/interest_of_intlayer.md +7 -7
- package/docs/ko/intlayer_CMS.md +1 -1
- package/docs/ko/intlayer_with_adonisjs.md +1 -1
- package/docs/ko/intlayer_with_analog.md +1 -1
- package/docs/ko/intlayer_with_angular_19.md +1 -1
- package/docs/ko/intlayer_with_angular_21.md +1 -1
- package/docs/ko/intlayer_with_astro.md +1 -1
- package/docs/ko/intlayer_with_astro_lit.md +1 -1
- package/docs/ko/intlayer_with_astro_preact.md +1 -1
- package/docs/ko/intlayer_with_astro_react.md +1 -1
- package/docs/ko/intlayer_with_astro_solid.md +1 -1
- package/docs/ko/intlayer_with_astro_svelte.md +1 -1
- package/docs/ko/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ko/intlayer_with_astro_vue.md +1 -1
- package/docs/ko/intlayer_with_create_react_app.md +1 -1
- package/docs/ko/intlayer_with_express.md +1 -1
- package/docs/ko/intlayer_with_hono.md +1 -1
- package/docs/ko/intlayer_with_nestjs.md +1 -1
- package/docs/ko/intlayer_with_nextjs_14.md +1 -1
- package/docs/ko/intlayer_with_nextjs_15.md +1 -1
- package/docs/ko/intlayer_with_nextjs_16.md +1 -1
- package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ko/intlayer_with_react_router_v7.md +2 -2
- package/docs/ko/intlayer_with_vite+preact.md +1 -1
- package/docs/ko/intlayer_with_vite+react.md +1 -1
- package/docs/ko/intlayer_with_vite+vue.md +1 -1
- package/docs/ko/introduction.md +0 -1
- package/docs/ko/readme.md +8 -8
- package/docs/nl/bundle_optimization.md +5 -1
- package/docs/nl/interest_of_intlayer.md +7 -7
- package/docs/nl/intlayer_with_angular_21.md +1 -1
- package/docs/nl/intlayer_with_hono.md +1 -1
- package/docs/nl/introduction.md +0 -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/bundle_optimization.md +5 -1
- package/docs/pl/how_works_intlayer.md +2 -2
- package/docs/pl/interest_of_intlayer.md +7 -7
- package/docs/pl/intlayer_CMS.md +1 -1
- package/docs/pl/intlayer_with_adonisjs.md +1 -1
- package/docs/pl/intlayer_with_analog.md +1 -1
- package/docs/pl/intlayer_with_angular_19.md +1 -1
- package/docs/pl/intlayer_with_angular_21.md +1 -1
- package/docs/pl/intlayer_with_astro.md +1 -1
- package/docs/pl/intlayer_with_astro_lit.md +1 -1
- package/docs/pl/intlayer_with_astro_preact.md +1 -1
- package/docs/pl/intlayer_with_astro_react.md +1 -1
- package/docs/pl/intlayer_with_astro_solid.md +1 -1
- package/docs/pl/intlayer_with_astro_svelte.md +1 -1
- package/docs/pl/intlayer_with_astro_vanilla.md +1 -1
- package/docs/pl/intlayer_with_astro_vue.md +1 -1
- package/docs/pl/intlayer_with_create_react_app.md +1 -1
- package/docs/pl/intlayer_with_express.md +1 -1
- package/docs/pl/intlayer_with_hono.md +1 -1
- package/docs/pl/intlayer_with_nestjs.md +1 -1
- package/docs/pl/intlayer_with_nextjs_14.md +1 -1
- package/docs/pl/intlayer_with_nextjs_15.md +1 -1
- package/docs/pl/intlayer_with_nextjs_16.md +1 -1
- package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pl/intlayer_with_react_router_v7.md +2 -2
- package/docs/pl/intlayer_with_vite+preact.md +1 -1
- package/docs/pl/intlayer_with_vite+react.md +1 -1
- package/docs/pl/intlayer_with_vite+vue.md +1 -1
- package/docs/pl/introduction.md +0 -1
- package/docs/pl/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/pt/how_works_intlayer.md +2 -2
- package/docs/pt/interest_of_intlayer.md +7 -7
- package/docs/pt/intlayer_CMS.md +1 -1
- package/docs/pt/intlayer_with_adonisjs.md +1 -1
- package/docs/pt/intlayer_with_analog.md +1 -1
- package/docs/pt/intlayer_with_angular_19.md +1 -1
- package/docs/pt/intlayer_with_angular_21.md +1 -1
- package/docs/pt/intlayer_with_astro.md +1 -1
- package/docs/pt/intlayer_with_astro_lit.md +1 -1
- package/docs/pt/intlayer_with_astro_preact.md +1 -1
- package/docs/pt/intlayer_with_astro_react.md +1 -1
- package/docs/pt/intlayer_with_astro_solid.md +1 -1
- package/docs/pt/intlayer_with_astro_svelte.md +1 -1
- package/docs/pt/intlayer_with_astro_vanilla.md +1 -1
- package/docs/pt/intlayer_with_astro_vue.md +1 -1
- package/docs/pt/intlayer_with_create_react_app.md +1 -1
- package/docs/pt/intlayer_with_express.md +1 -1
- package/docs/pt/intlayer_with_hono.md +1 -1
- package/docs/pt/intlayer_with_nestjs.md +1 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -1
- package/docs/pt/intlayer_with_nextjs_15.md +1 -1
- package/docs/pt/intlayer_with_nextjs_16.md +1 -1
- package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/pt/intlayer_with_react_router_v7.md +2 -2
- package/docs/pt/intlayer_with_vite+preact.md +1 -1
- package/docs/pt/intlayer_with_vite+react.md +1 -1
- package/docs/pt/intlayer_with_vite+vue.md +1 -1
- package/docs/pt/introduction.md +0 -1
- package/docs/pt/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/ru/how_works_intlayer.md +2 -2
- package/docs/ru/interest_of_intlayer.md +7 -7
- package/docs/ru/intlayer_CMS.md +1 -1
- package/docs/ru/intlayer_with_adonisjs.md +1 -1
- package/docs/ru/intlayer_with_analog.md +1 -1
- package/docs/ru/intlayer_with_angular_19.md +1 -1
- package/docs/ru/intlayer_with_angular_21.md +1 -1
- package/docs/ru/intlayer_with_astro.md +1 -1
- package/docs/ru/intlayer_with_astro_lit.md +1 -1
- package/docs/ru/intlayer_with_astro_preact.md +1 -1
- package/docs/ru/intlayer_with_astro_react.md +1 -1
- package/docs/ru/intlayer_with_astro_solid.md +1 -1
- package/docs/ru/intlayer_with_astro_svelte.md +1 -1
- package/docs/ru/intlayer_with_astro_vanilla.md +1 -1
- package/docs/ru/intlayer_with_astro_vue.md +1 -1
- package/docs/ru/intlayer_with_create_react_app.md +1 -1
- package/docs/ru/intlayer_with_express.md +1 -1
- package/docs/ru/intlayer_with_hono.md +1 -1
- package/docs/ru/intlayer_with_nestjs.md +1 -1
- package/docs/ru/intlayer_with_nextjs_14.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +1 -1
- package/docs/ru/intlayer_with_nextjs_16.md +1 -1
- package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/ru/intlayer_with_react_router_v7.md +2 -2
- package/docs/ru/intlayer_with_vite+preact.md +1 -1
- package/docs/ru/intlayer_with_vite+react.md +1 -1
- package/docs/ru/intlayer_with_vite+vue.md +1 -1
- package/docs/ru/introduction.md +0 -1
- package/docs/ru/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/tr/how_works_intlayer.md +2 -2
- package/docs/tr/interest_of_intlayer.md +7 -7
- package/docs/tr/intlayer_CMS.md +1 -1
- package/docs/tr/intlayer_with_adonisjs.md +1 -1
- package/docs/tr/intlayer_with_analog.md +1 -1
- package/docs/tr/intlayer_with_angular_19.md +1 -1
- package/docs/tr/intlayer_with_angular_21.md +1 -1
- package/docs/tr/intlayer_with_astro.md +1 -1
- package/docs/tr/intlayer_with_astro_lit.md +1 -1
- package/docs/tr/intlayer_with_astro_preact.md +1 -1
- package/docs/tr/intlayer_with_astro_react.md +1 -1
- package/docs/tr/intlayer_with_astro_solid.md +1 -1
- package/docs/tr/intlayer_with_astro_svelte.md +1 -1
- package/docs/tr/intlayer_with_astro_vanilla.md +1 -1
- package/docs/tr/intlayer_with_astro_vue.md +1 -1
- package/docs/tr/intlayer_with_create_react_app.md +1 -1
- package/docs/tr/intlayer_with_express.md +1 -1
- package/docs/tr/intlayer_with_hono.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +1 -1
- package/docs/tr/intlayer_with_nextjs_14.md +1 -1
- package/docs/tr/intlayer_with_nextjs_15.md +1 -1
- package/docs/tr/intlayer_with_nextjs_16.md +1 -1
- package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/tr/intlayer_with_react_router_v7.md +1 -1
- package/docs/tr/intlayer_with_vite+preact.md +1 -1
- package/docs/tr/intlayer_with_vite+react.md +1 -1
- package/docs/tr/intlayer_with_vite+vue.md +1 -1
- package/docs/tr/introduction.md +0 -1
- package/docs/tr/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/uk/how_works_intlayer.md +2 -2
- package/docs/uk/interest_of_intlayer.md +7 -7
- package/docs/uk/intlayer_CMS.md +1 -1
- package/docs/uk/intlayer_with_adonisjs.md +1 -1
- package/docs/uk/intlayer_with_analog.md +1 -1
- package/docs/uk/intlayer_with_angular_19.md +1 -1
- package/docs/uk/intlayer_with_angular_21.md +1 -1
- package/docs/uk/intlayer_with_astro.md +1 -1
- package/docs/uk/intlayer_with_astro_lit.md +1 -1
- package/docs/uk/intlayer_with_astro_preact.md +1 -1
- package/docs/uk/intlayer_with_astro_react.md +1 -1
- package/docs/uk/intlayer_with_astro_solid.md +1 -1
- package/docs/uk/intlayer_with_astro_svelte.md +1 -1
- package/docs/uk/intlayer_with_astro_vanilla.md +1 -1
- package/docs/uk/intlayer_with_astro_vue.md +1 -1
- package/docs/uk/intlayer_with_create_react_app.md +1 -1
- package/docs/uk/intlayer_with_express.md +1 -1
- package/docs/uk/intlayer_with_hono.md +1 -1
- package/docs/uk/intlayer_with_nestjs.md +1 -1
- package/docs/uk/intlayer_with_nextjs_14.md +1 -1
- package/docs/uk/intlayer_with_nextjs_15.md +1 -1
- package/docs/uk/intlayer_with_nextjs_16.md +1 -1
- package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/uk/intlayer_with_react_router_v7.md +1 -1
- package/docs/uk/intlayer_with_vite+preact.md +1 -1
- package/docs/uk/intlayer_with_vite+react.md +1 -1
- package/docs/uk/intlayer_with_vite+vue.md +1 -1
- package/docs/uk/introduction.md +0 -1
- package/docs/uk/readme.md +8 -8
- package/docs/ur/bundle_optimization.md +5 -1
- package/docs/ur/interest_of_intlayer.md +7 -7
- package/docs/ur/intlayer_with_angular_21.md +1 -1
- package/docs/ur/intlayer_with_hono.md +1 -1
- package/docs/ur/introduction.md +0 -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/bundle_optimization.md +5 -1
- package/docs/vi/how_works_intlayer.md +2 -2
- package/docs/vi/interest_of_intlayer.md +7 -7
- package/docs/vi/intlayer_CMS.md +1 -1
- package/docs/vi/intlayer_with_adonisjs.md +1 -1
- package/docs/vi/intlayer_with_analog.md +1 -1
- package/docs/vi/intlayer_with_angular_19.md +1 -1
- package/docs/vi/intlayer_with_angular_21.md +1 -1
- package/docs/vi/intlayer_with_astro.md +1 -1
- package/docs/vi/intlayer_with_astro_lit.md +1 -1
- package/docs/vi/intlayer_with_astro_preact.md +1 -1
- package/docs/vi/intlayer_with_astro_react.md +1 -1
- package/docs/vi/intlayer_with_astro_solid.md +1 -1
- package/docs/vi/intlayer_with_astro_svelte.md +1 -1
- package/docs/vi/intlayer_with_astro_vanilla.md +1 -1
- package/docs/vi/intlayer_with_astro_vue.md +1 -1
- package/docs/vi/intlayer_with_create_react_app.md +1 -1
- package/docs/vi/intlayer_with_express.md +1 -1
- package/docs/vi/intlayer_with_hono.md +1 -1
- package/docs/vi/intlayer_with_nestjs.md +1 -1
- package/docs/vi/intlayer_with_nextjs_14.md +1 -1
- package/docs/vi/intlayer_with_nextjs_15.md +1 -1
- package/docs/vi/intlayer_with_nextjs_16.md +1 -1
- package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/vi/intlayer_with_vite+preact.md +1 -1
- package/docs/vi/intlayer_with_vite+react.md +1 -1
- package/docs/vi/intlayer_with_vite+vue.md +1 -1
- package/docs/vi/introduction.md +0 -1
- package/docs/vi/readme.md +8 -8
- 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/bundle_optimization.md +5 -1
- package/docs/zh/how_works_intlayer.md +2 -2
- package/docs/zh/interest_of_intlayer.md +7 -7
- package/docs/zh/intlayer_CMS.md +1 -1
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_analog.md +1 -1
- package/docs/zh/intlayer_with_angular_19.md +1 -1
- package/docs/zh/intlayer_with_angular_21.md +1 -1
- package/docs/zh/intlayer_with_astro.md +1 -1
- package/docs/zh/intlayer_with_astro_lit.md +1 -1
- package/docs/zh/intlayer_with_astro_preact.md +1 -1
- package/docs/zh/intlayer_with_astro_react.md +1 -1
- package/docs/zh/intlayer_with_astro_solid.md +1 -1
- package/docs/zh/intlayer_with_astro_svelte.md +1 -1
- package/docs/zh/intlayer_with_astro_vanilla.md +1 -1
- package/docs/zh/intlayer_with_astro_vue.md +1 -1
- package/docs/zh/intlayer_with_create_react_app.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_14.md +1 -1
- package/docs/zh/intlayer_with_nextjs_15.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +1 -1
- package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +2 -2
- package/docs/zh/intlayer_with_vite+preact.md +1 -1
- package/docs/zh/intlayer_with_vite+react.md +1 -1
- package/docs/zh/intlayer_with_vite+vue.md +1 -1
- package/docs/zh/introduction.md +0 -1
- package/docs/zh/readme.md +8 -8
- package/docs/zh-TW/bundle_optimization.md +5 -1
- package/docs/zh-TW/interest_of_intlayer.md +7 -7
- package/docs/zh-TW/intlayer_with_angular_21.md +1 -1
- package/docs/zh-TW/introduction.md +0 -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 +8 -7
- package/src/generated/blog.entry.ts +240 -0
- package/src/generated/frequentQuestions.entry.ts +20 -0
- package/blog/en/___per-component_vs_centralized_i18n.md +0 -255
- package/blog/pl/___per-component_vs_centralized_i18n.md +0 -100
- package/docs/en/benchmark/___NOTE.md +0 -101
- package/docs/en/benchmark/___nextjs.md +0 -197
- package/docs/en/benchmark/___solid.md +0 -12
- package/docs/en/benchmark/___svelte.md +0 -16
- package/docs/en/benchmark/___tanstack.md +0 -190
- package/docs/en/benchmark/___vue.md +0 -7
- package/docs/pl/benchmark/___NOTE.md +0 -101
- package/docs/pl/benchmark/___nextjs.md +0 -198
- package/docs/pl/benchmark/___solid.md +0 -36
- package/docs/pl/benchmark/___svelte.md +0 -36
- package/docs/pl/benchmark/___tanstack.md +0 -36
- package/docs/pl/benchmark/___vue.md +0 -36
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: "Lingui बनाम @intlayer/lingui: समान मैक्रोज़, अलग रनटाइम"
|
|
5
|
+
description: "क्या बदलता है जब एक React ऐप अपने Lingui मैक्रोज़ को बनाए रखता है लेकिन उन्हें @intlayer/lingui कम्पैट एडॉप्टर के माध्यम से प्रस्तुत करता है। घटक आकार, हाइड्रेशन, लीकेज और प्रति-पेज जावास्क्रिप्ट उसी TanStack Start कोड पर मापा गया, जिसमें यह भी शामिल है कि एडॉप्टर कहाँ पिछड़ता है।"
|
|
6
|
+
keywords:
|
|
7
|
+
- Lingui
|
|
8
|
+
- "@intlayer/lingui"
|
|
9
|
+
- Intlayer
|
|
10
|
+
- कम्पैट एडॉप्टर
|
|
11
|
+
- माइग्रेशन
|
|
12
|
+
- अंतर्राष्ट्रीयकरण
|
|
13
|
+
- i18n
|
|
14
|
+
- बेंचमार्क
|
|
15
|
+
- बंडल आकार
|
|
16
|
+
- ब्लॉग
|
|
17
|
+
- React
|
|
18
|
+
- TanStack Start
|
|
19
|
+
- Vite
|
|
20
|
+
slugs:
|
|
21
|
+
- blog
|
|
22
|
+
- lingui-vs-intlayer-lingui
|
|
23
|
+
author: aymericzip
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Lingui बनाम @intlayer/lingui | समान मैक्रोज़, अलग रनटाइम
|
|
27
|
+
|
|
28
|
+
`@intlayer/lingui`, `@lingui/core` और `@lingui/react` के लिए एक कम्पैट एडॉप्टर (संगतता एडॉप्टर) है। आपके `` t`...` ``, `<Trans>`, `useLingui()` और `i18n._()` कॉल्स बिल्कुल वैसे ही बने रहते हैं; मैक्रोज़ पहले की तरह कंपाइल होते रहते हैं; जो बदलता है वह यह है कि रनटाइम पर संदेश कहाँ से आते हैं। प्रति भाषा एक संकलित कैटलॉग के बजाय, प्रत्येक कॉल साइट इसके लिए विशेष रूप से संकलित Intlayer डिक्शनरी से बंधी होती है।
|
|
29
|
+
|
|
30
|
+
यह लेख उसी TanStack Start एप्लिकेशन पर इस बदलाव को मापता है, जिसे एक बार शुद्ध Lingui के साथ और एक बार एडॉप्टर के साथ बनाया गया है। ये आंकड़े [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) से लिए गए हैं। दोनों लाइब्रेरीज़ की तुलना देखने के लिए [Lingui बनाम Intlayer](https://intlayer.org/hi/blog/lingui-vs-intlayer) पढ़ें। यह लेख इस बात पर केंद्रित है कि एडॉप्टर क्या बदलता है, और कहाँ यह अतिरिक्त लाभ नहीं देता।
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
33
|
+
|
|
34
|
+
> **संक्षेप में (tl;dr)**: उसी TanStack Start ऐप पर, `@intlayer/lingui` ने मैक्रोज़ को छुए बिना औसत घटक आकार को **85.5 KB से घटाकर 12.8 KB** gzip कर दिया, हाइड्रेशन को **28 ms से 19.7 ms** और भाषा स्विचिंग को **5.9 ms से घटाकर 2.9 ms** कर दिया। बुनियादी सेटअप में (जहाँ हर कैटलॉग पहले से लोड होता है) इसने **90% पेज लीकेज** को भी हटा दिया और प्रति पेज 12 KB की बचत की। लेकिन लेज़ी-लोडेड सेटअप में यह साधारण Lingui के 115 KB के मुकाबले **137 KB प्रति पेज** भेजता है: इसका कारण यह है कि एडॉप्टर रनटाइम पर ICU को हल करता है जबकि Lingui प्रीकंपाइल्ड टोकन एरे प्रदान करता है। स्रोत-भाषा लीकेज (~9-10%) दोनों पक्षों में समान है, क्योंकि यह घटकों में एम्बेडेड `message` फ़ॉलबैक से आता है, रनटाइम से नहीं। यह एडॉप्टर एक Vite प्लगइन है; इसे TanStack Start पर मापा गया था।
|
|
35
|
+
|
|
36
|
+
## `@intlayer/lingui` क्या है
|
|
37
|
+
|
|
38
|
+
Lingui एक कंपाइलर और रनटाइम का संयोजन है। आपके सोर्स कोड के मैक्रोज़ को प्रत्येक भाषा के लिए `.po` (या JSON) कैटलॉग में निकाला जाता है, प्रति भाषा एक JS मॉड्यूल में कंपाइल किया जाता है, और `i18n.load()` + `i18n.activate()` के माध्यम से एक वैश्विक `I18n` इंस्टेंस में लोड किया जाता है। प्रत्येक `useLingui()` उस इंस्टेंस को सब्सक्राइब करता है; प्रत्येक `_()` कॉल सक्रिय कैटलॉग में अपनी आईडी खोजता है।
|
|
39
|
+
|
|
40
|
+
`@intlayer/lingui` मैक्रोज़ और API को बनाए रखता है और कैटलॉग लुकअप को बदल देता है:
|
|
41
|
+
|
|
42
|
+
1. **इम्पोर्ट एलियासिंग (Import aliasing)।** `@intlayer/lingui/plugin` से `lingui()` प्लगइन `vite-intlayer` को रैप करता है और `resolve.alias` प्रविष्टियाँ जोड़ता है ताकि `@lingui/core` और `@lingui/react` सीधे `@intlayer/lingui` पर निर्देशित हों। आपके कोड इम्पोर्ट में कोई बदलाव नहीं होता।
|
|
43
|
+
2. **सच्चाई के स्रोत के रूप में कैटलॉग।** `syncJSON` प्लगइन (`.po` फ़ाइलों के लिए `syncPO`) आपके मौजूदा कैटलॉग को पढ़ता है और उन्हें Intlayer डिक्शनरी में बदल देता है, जब भी CLI या CMS अपडेट करता है तो अनुवाद वापस लिख देता है। `splitKeys: "key-prefix"` के साथ, डॉटेड आईडी (`footer.github`, `hero.title`) का एक फ्लैट कैटलॉग 244 KB की एक भारी फ़ाइल के बजाय प्रति प्रीफ़िक्स छोटी डिक्शनरी में विभाजित हो जाता है।
|
|
44
|
+
3. **कॉल-साइट बाइंडिंग।** Intlayer ऑप्टिमाइज़ पास प्रत्येक फ़ाइल में `_`, `t` और `<Trans>` को पास की गई आईडी को एकत्र करता है, और केवल मेल खाने वाली डिक्शनरी ही घटक को सौंपता है। `<Trans id="hero.title">` स्वतंत्र रूप से बाइंड होता है; `useLingui()` फ़ाइल में उपयोग किए गए प्रत्येक प्रीफ़िक्स से बाइंड होता है। बिना डॉट वाली आईडी (हैश की गई आईडी, `mockBanner`) Lingui की एकल `messages` फ़ॉलबैक डिक्शनरी पर वापस आ जाती हैं।
|
|
45
|
+
|
|
46
|
+
```tsx fileName="src/components/Hero.tsx"
|
|
47
|
+
// आपका कोड, बिना किसी बदलाव के
|
|
48
|
+
import { useLingui } from "@lingui/react";
|
|
49
|
+
import { Trans } from "@lingui/react/macro";
|
|
50
|
+
|
|
51
|
+
const Hero = () => {
|
|
52
|
+
const { _ } = useLingui();
|
|
53
|
+
return (
|
|
54
|
+
<section>
|
|
55
|
+
<h1>{_({ id: "hero.title", message: "Measure what you ship" })}</h1>
|
|
56
|
+
<Trans id="hero.subtitle">Every byte counts</Trans>
|
|
57
|
+
</section>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```tsx fileName="कंपाइलर क्या आउटपुट करता है (सरलीकृत)"
|
|
63
|
+
import _dicHash_hero from "../.intlayer/dictionaries/hero.mjs";
|
|
64
|
+
import {
|
|
65
|
+
useDictionary as useLingui,
|
|
66
|
+
TransDictionary as Trans,
|
|
67
|
+
} from "@intlayer/lingui";
|
|
68
|
+
|
|
69
|
+
const Hero = () => {
|
|
70
|
+
const { _ } = useLingui(_dicHash_hero);
|
|
71
|
+
return (
|
|
72
|
+
<section>
|
|
73
|
+
<h1>{_({ id: "hero.title", message: "Measure what you ship" })}</h1>
|
|
74
|
+
<Trans id="hero.subtitle" dictionary={_dicHash_hero}>
|
|
75
|
+
Every byte counts
|
|
76
|
+
</Trans>
|
|
77
|
+
</section>
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
घटक अब वैश्विक इंस्टेंस और उसके पीछे मौजूद विशाल कैटलॉग तक नहीं पहुँचता। यह केवल `hero` तक पहुँचता है। यही मुख्य कारण है कि नीचे दी गई तालिका में घटक आकार का कॉलम 7 गुना कम हो जाता है।
|
|
83
|
+
|
|
84
|
+
## एडॉप्टर क्या रखता है, क्या अनदेखा करता है, और क्या नहीं बदलता
|
|
85
|
+
|
|
86
|
+
| Lingui API | `@intlayer/lingui` के साथ |
|
|
87
|
+
| ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
88
|
+
| `` t`...` ``, `msg`, `plural`, `select`, `<Trans>` मैक्रोज़ | ✅ बनाए रखा गया। Intlayer पास से पहले बिल्ड में `@lingui/babel-plugin-lingui-macro` या `@lingui/swc-plugin` रखें |
|
|
89
|
+
| `useLingui()` → `{ i18n, _, t }` | ✅ बनाए रखा गया। प्रोवाइडर के बाहर भी काम करता है (`react-intlayer` से भाषा प्राप्त होती है) |
|
|
90
|
+
| `i18n._(id, values)`, `i18n.t()` | ✅ बनाए रखा गया। स्पष्ट और हैश की गई आईडी दोनों का समाधान करता है |
|
|
91
|
+
| ICU बहुवचन रूप, `select`, `selectordinal`, `#` | ✅ बनाए रखा गया, Intlayer के ICU रिज़ॉल्वर के माध्यम से |
|
|
92
|
+
| `i18n.date()`, `i18n.number()`, `formats` | ✅ बनाए रखा गया, नेटिव `Intl` द्वारा समर्थित |
|
|
93
|
+
| `I18nProvider` | ✅ बनाए रखा गया। `IntlayerProvider` को लपेटता है; `i18n.on("change")` सुनता है ताकि `activate()` पर री-रेंडर हो |
|
|
94
|
+
| `i18n.activate(locale)` | ✅ बनाए रखा गया |
|
|
95
|
+
| `i18n.load(locale, messages)` / `loadAndActivate()` | ⚠️ **रनटाइम फ़ॉलबैक** के रूप में स्वीकृत। संकलित डिक्शनरी को प्राथमिकता; कोड हटाने का सुझाव देने वाली चेतावनी |
|
|
96
|
+
| `setupI18n({ messages, missing })` | ⚠️ `messages` फ़ॉलबैक के रूप में मर्ज होते हैं; `missing` को अनदेखा किया जाता है |
|
|
97
|
+
| `lingui extract` / `lingui compile` | ✅ आपका सामान्य वर्कफ़्लो बना रहता है। निकाले गए कैटलॉग की ओर `syncPO` / `syncJSON` को इंगित करें |
|
|
98
|
+
| `I18nProvider` पर `defaultComponent` | ⚠️ संदर्भ में संग्रहीत, लेकिन रेंडरिंग के समय लागू नहीं होता |
|
|
99
|
+
| Next.js | ❌ यह प्लगइन `vite-intlayer` को रैप करता है। केवल Vite, TanStack Start और React Router समर्थित |
|
|
100
|
+
|
|
101
|
+
## बेंचमार्क तुलना
|
|
102
|
+
|
|
103
|
+
### क्या मापा गया था
|
|
104
|
+
|
|
105
|
+
[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`), समान घटक और समान सामग्री। पेजों को `en` और `fr` में मापा गया।
|
|
106
|
+
|
|
107
|
+
Lingui को चार लोडिंग रणनीतियों में बनाया गया था: पहले से सभी संकलित कैटलॉग इम्पोर्ट करने (`static`) से लेकर रूट-वाइज़ लेज़ी-लोडेड कैटलॉग (`scoped-dynamic`) तक। एडॉप्टर को **समान घटकों** पर केवल `vite.config.ts` और `intlayer.config.ts` में बदलाव करके बनाया गया था। इसकी `static` पंक्ति सभी भाषाओं को बंडल करती है; इसकी `dynamic` पंक्ति (`importMode: 'dynamic'`) आवश्यकता पड़ने पर सक्रिय भाषा लोड करती है। कोई "scoped" संस्करण नहीं है: क्योंकि ऑप्टिमाइज़ पास स्वचालित रूप से प्रति कॉल-साइट स्कोप करता है।
|
|
108
|
+
|
|
109
|
+
प्रत्येक बिल्ड के लिए निम्नलिखित मेट्रिक्स दर्ज किए जाते हैं:
|
|
110
|
+
|
|
111
|
+
- **Lib size**: केवल i18n लाइब्रेरी इम्पोर्ट करने वाले खाली घटक का gzip आकार।
|
|
112
|
+
- **Page JS**: प्रति पेज डाउनलोड किया गया gzip जावास्क्रिप्ट, सभी पेजों और भाषाओं का औसत।
|
|
113
|
+
- **Locale leak %**: डाउनलोड किए गए JS में अनूदित स्ट्रिंग्स का अनुपात जो उस भाषा से संबंधित हैं जिसे उपयोगकर्ता **नहीं** देख रहा है।
|
|
114
|
+
- **Page leak %**: डाउनलोड किए गए JS में उन स्ट्रिंग्स का अनुपात जो उस पेज से संबंधित हैं जिस पर उपयोगकर्ता **नहीं** है।
|
|
115
|
+
- **Component avg**: अलग से कंपाइल किए गए प्रत्येक घटक का औसत gzip आकार।
|
|
116
|
+
- **E2E reactivity**: नई भाषा चुनने और DOM में `html[lang]` अपडेट होने के बीच का वास्तविक समय (Playwright, 5 बार दोहराव)।
|
|
117
|
+
- **Hydration**: React हाइड्रेशन चरण की अवधि।
|
|
118
|
+
|
|
119
|
+
> नीचे दिए गए आंकड़े `@lingui/react` 6.6.0 और `@intlayer/lingui` 9.5.1 के साथ **2026-09-12** के परीक्षण से हैं। परीक्षण ऐप जानबूझकर छोटा रखा गया है (प्रति भाषा कुछ दर्जन स्ट्रिंग्स), इसलिए लीकेज प्रतिशत एक **संरचनात्मक पैटर्न** दर्शाते हैं: सामग्री बढ़ने पर वे बढ़ते हैं जबकि रनटाइम लागत स्थिर रहती है।
|
|
120
|
+
|
|
121
|
+
### TanStack Start पर परिणाम
|
|
122
|
+
|
|
123
|
+
| सेटअप | रणनीति | Lib size (gz) | Page JS औसत (gz) | भाषा लीकेज | पेज लीकेज | घटक औसत (gz) | E2E प्रतिक्रिया | हाइड्रेशन |
|
|
124
|
+
| ---------------------- | -------------- | ------------: | ---------------: | ---------: | --------: | -----------: | --------------: | ----------: |
|
|
125
|
+
| **base** (बिना i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
|
|
126
|
+
| Lingui | static | 11.2 KB | 152.2 KB | 50.0% | 90.0% | 58.0 KB | 3.9 ms | 19.9 ms |
|
|
127
|
+
| Lingui | dynamic | 11.2 KB | **115.2 KB** | 9.3% | 0.0% | 85.5 KB | 5.9 ms | 28.0 ms |
|
|
128
|
+
| Lingui | scoped-static | 11.2 KB | 120.8 KB | 4.0% | 0.0% | 147.9 KB | 7.1 ms | 33.9 ms |
|
|
129
|
+
| Lingui | scoped-dynamic | 11.2 KB | 120.2 KB | 8.6% | 0.0% | 83.7 KB | 42.1 ms | 32.9 ms |
|
|
130
|
+
| **`@intlayer/lingui`** | static | **10.3 KB** | 140.5 KB | 50.0% | **0.0%** | **14.9 KB** | **3.3 ms** | **11.3 ms** |
|
|
131
|
+
| **`@intlayer/lingui`** | dynamic | **10.3 KB** | 137.0 KB | 9.9% | **0.0%** | **12.8 KB** | **2.9 ms** | **19.7 ms** |
|
|
132
|
+
| `intlayer` (नेटिव) | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms | 11.5 ms |
|
|
133
|
+
| `intlayer` (नेटिव) | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms | 14.1 ms |
|
|
134
|
+
|
|
135
|
+
**परिणामों का विश्लेषण**
|
|
136
|
+
|
|
137
|
+
- **घटक: 7 गुना छोटे।** यह एडॉप्टर का मुख्य लाभ है। अलग से संकलित एक Lingui घटक रणनीति के आधार पर औसतन **58-148 KB** का होता है, क्योंकि `useLingui()` वैश्विक इंस्टेंस और उसमें लोड किए गए प्रत्येक कैटलॉग तक पहुँचता है। एडॉप्टर वाला वही घटक औसतन केवल **12.8-14.9 KB** का होता है: यह केवल अपनी डिक्शनरी और ICU रिज़ॉल्वर तक पहुँचता है।
|
|
138
|
+
- **हाइड्रेशन: 8-14 ms तेज़।** `i18n.load()` + `i18n.activate()` React हाइड्रेशन से पहले क्लाइंट पर निष्पादित होते हैं; Lingui सेटअप जितना अधिक लेज़ी-लोडेड होगा, उतना अधिक समय लगेगा (28-34 ms)। एडॉप्टर के साथ, डिक्शनरी नियमित इम्पोर्ट के रूप में आती हैं जिन्हें बंडलर पहले ही पेज चंक में रख चुका होता है: `static` में **11.3 ms**, `dynamic` में **19.7 ms**।
|
|
139
|
+
- **भाषा बदलना: 2 गुना तेज़, और कोई अटकाव नहीं।** Lingui के अनुकूलित `scoped-dynamic` सेटअप को `html[lang]` अपडेट करने में **42 ms** लगते हैं, क्योंकि बदलाव दिखने से पहले रूट कैटलॉग को फ़ेच, लोड और सक्रिय किया जाना होता है। एडॉप्टर दोनों मोड में स्थिर रूप से **2.9-3.3 ms** पर रहता है।
|
|
140
|
+
- **बुनियादी सेटअप स्वतः अनुकूलित हो जाता है।** स्टेटिक Lingui हर पेज पर हर कैटलॉग भेजता है: 152.2 KB और 90% पेज लीकेज। स्टेटिक एडॉप्टर: 140.5 KB, 0% पेज लीकेज, उन्हीं घटकों के साथ।
|
|
141
|
+
- **प्रति पेज बाइट्स: `dynamic` में Lingui 22 KB से आगे है।** इसे निष्पक्ष रूप से समझना आवश्यक है। Lingui निर्माण के समय संदेशों को टोकन एरे में कंपाइल करता है और केवल 11 KB का रनटाइम शिप करता है। एडॉप्टर Intlayer का ICU रिज़ॉल्वर (नेटिव बिल्ड की तुलना में लगभग 15 KB अधिक `@intlayer/core`), एडॉप्टर लेयर (~10 KB) और `react-intlayer` (~6 KB) शिप करता है। इस ऐप पर, यह **137.0 KB बनाम 115.2 KB** है। यदि प्रति पेज न्यूनतम बाइट्स ही आपकी एकमात्र प्राथमिकता है और आप पहले से ही लेज़ी-लोडेड Lingui का उपयोग कर रहे हैं, तो एडॉप्टर वहाँ मदद नहीं करेगा।
|
|
142
|
+
- **भाषा लीकेज दोनों पक्षों में समान है।** `dynamic` में Lingui के लिए 9.3%, एडॉप्टर के लिए 9.9%। यह घटकों से आता है: `i18n._({ id: "careers-benefits.pay", message: "Top-of-market compensation" })` फ़ॉलबैक के रूप में अंग्रेजी स्रोत रखता है, और मैक्रो आउटपुट भी ऐसा ही करता है जब तक कि message फ़ील्ड को हटा न दिया जाए। अनुवाद चाहे किसी भी रनटाइम से दिया जाए, यह अंग्रेजी टेक्स्ट `fr` चंक में पहुँचता है। नेटिव `intlayer` (`.content.ts`, बिना इनलाइन टेक्स्ट के) पर यह 0% है।
|
|
143
|
+
|
|
144
|
+
## संख्याएँ क्यों बदलती हैं, और एक क्यों स्थिर रहती है
|
|
145
|
+
|
|
146
|
+
दो कारक इन परिणामों को निर्धारित करते हैं: **एक घटक किससे बंधा है**, और **संदेश किस प्रारूप में भेजे जाते हैं**।
|
|
147
|
+
|
|
148
|
+
**बाइंडिंग (Binding)।** Lingui में मूल इकाई पूरी भाषा है। `fr` के लिए `messages.mjs` एक एकल मॉड्यूल है; जो भी घटक इसे लोड करने वाले इंस्टेंस को इम्पोर्ट करता है, वह इसकी संपूर्ण सामग्री तक पहुँच सकता है, जिससे बंडलर भाषा से नीचे विभाजित नहीं कर सकता। एडॉप्टर के साथ, इकाई कॉल साइट बन जाती है: `hero` और `footer` अलग-अलग इम्पोर्ट हैं, जिन्हें प्रति घटक विभाजित और मांग पर लोड किया जाता है। यही घटक आकार, हाइड्रेशन और पेज लीकेज में सुधार की वजह है।
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
.
|
|
152
|
+
├── lingui.config.ts
|
|
153
|
+
└── src
|
|
154
|
+
├── i18n.ts # setupI18n(), load(), activate()
|
|
155
|
+
├── locales
|
|
156
|
+
│ ├── en/messages.mjs # lingui compile आउटपुट, प्रति भाषा एक
|
|
157
|
+
│ └── fr/messages.mjs
|
|
158
|
+
└── components
|
|
159
|
+
└── Hero.tsx # useLingui(); _("hero.title")
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
.
|
|
164
|
+
├── intlayer.config.ts # syncJSON({ splitKeys: "key-prefix" })
|
|
165
|
+
├── .intlayer/ # जनरेटेड: प्रति आईडी प्रीफ़िक्स, प्रति भाषा एक डिक्शनरी
|
|
166
|
+
└── src
|
|
167
|
+
├── locales
|
|
168
|
+
│ ├── en/messages.json # अपरिवर्तित, सच्चाई का स्रोत बना हुआ है
|
|
169
|
+
│ └── fr/messages.json
|
|
170
|
+
└── components
|
|
171
|
+
└── Hero.tsx # useLingui(); _("hero.title") ← अपरिवर्तित
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**प्रारूप (Format)।** Lingui का कंपाइल चरण `{count, plural, one {# item} other {# items}}` को टोकन एरे में बदल देता है; रनटाइम को कभी भी ICU सिंटैक्स पार्स करने की आवश्यकता नहीं होती। एडॉप्टर संदेश को टेक्स्ट के रूप में रखता है और Intlayer के ICU रिज़ॉल्वर से पार्स करता है। यह प्रति पेज लगभग 15 KB का एक निश्चित ओवरहेड है, और यही कारण है कि `dynamic` पंक्ति बाइट्स में पीछे रह जाती है जबकि अन्य सभी क्षेत्रों में जीतती है। नेटिव Intlayer इससे बचता है क्योंकि `.content.ts` डिक्शनरी कंपाइलर द्वारा पूर्व-सुलझाए गए `enu()` / `insert()` नोड्स का उपयोग करती हैं।
|
|
175
|
+
|
|
176
|
+
## तीन चरणों में माइग्रेशन
|
|
177
|
+
|
|
178
|
+
<Steps>
|
|
179
|
+
<Step number={1} title="इंस्टॉलेशन">
|
|
180
|
+
|
|
181
|
+
```bash packageManager="npm"
|
|
182
|
+
npx intlayer init --interactive
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```bash packageManager="pnpm"
|
|
186
|
+
pnpm dlx intlayer init --interactive
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
```bash packageManager="yarn"
|
|
190
|
+
yarn dlx intlayer init --interactive
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```bash packageManager="bun"
|
|
194
|
+
bunx intlayer init --interactive
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
यह कमांड Lingui का पता लगाता है, `lingui.config.ts` पढ़कर `syncPO` (`.po` कैटलॉग) या `syncJSON` (JSON कैटलॉग) चुनता है, `intlayer`, `react-intlayer`, `@intlayer/lingui` और उपयुक्त सिंक प्लगइन इंस्टॉल करता है, और `vite.config.ts` में `@lingui/vite-plugin` को एडॉप्टर प्लगइन से बदल देता है। `@lingui/core`, `@lingui/react` और अपने मैक्रो प्लगइन को इंस्टॉल रखें: मैक्रोज़ कंपाइल होते रहेंगे और एडॉप्टर Lingui के प्रकारों का उपयोग करता है।
|
|
198
|
+
|
|
199
|
+
</Step>
|
|
200
|
+
<Step number={2} title="Intlayer को अपने कैटलॉग से जोड़ें">
|
|
201
|
+
|
|
202
|
+
JSON कैटलॉग के लिए (`lingui.config.ts` में `format: "minimal"`):
|
|
203
|
+
|
|
204
|
+
```ts fileName="intlayer.config.ts"
|
|
205
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
206
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
207
|
+
|
|
208
|
+
const config: IntlayerConfig = {
|
|
209
|
+
internationalization: {
|
|
210
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
211
|
+
defaultLocale: Locales.ENGLISH,
|
|
212
|
+
},
|
|
213
|
+
dictionary: {
|
|
214
|
+
importMode: "dynamic",
|
|
215
|
+
format: "icu",
|
|
216
|
+
},
|
|
217
|
+
plugins: [
|
|
218
|
+
syncJSON({
|
|
219
|
+
format: "icu",
|
|
220
|
+
source: ({ locale, key }) => `./src/locales/${locale}/${key}.json`,
|
|
221
|
+
// डॉटेड आईडी को पहले सेगमेंट द्वारा समूहीकृत करें: `footer.github` → डिक्शनरी `footer`
|
|
222
|
+
splitKeys: "key-prefix",
|
|
223
|
+
}),
|
|
224
|
+
],
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export default config;
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`.po` कैटलॉग के लिए, `syncJSON` को `@intlayer/sync-po-plugin` के `syncPO` से बदलें और `.po` एक्सटेंशन के साथ समान `source` पैटर्न का उपयोग करें। [Sync PO प्लगइन दस्तावेज़](https://intlayer.org/hi/doc/plugin/sync-po) देखें।
|
|
231
|
+
|
|
232
|
+
`splitKeys: "key-prefix"` घटक आकार को अत्यधिक कम करने का प्रमुख कारक है। कैटलॉग फ़ाइल अपना फ्लैट आकार बनाए रखती है; विभाजन केवल उत्पन्न डिक्शनरी में मौजूद होता है, और रिवर्स सिंक स्वचालित रूप से कुंजियों को फिर से जोड़ देता है।
|
|
233
|
+
|
|
234
|
+
</Step>
|
|
235
|
+
<Step number={3} title="प्लगइन जोड़ें">
|
|
236
|
+
|
|
237
|
+
```ts fileName="vite.config.ts"
|
|
238
|
+
import { defineConfig } from "vite";
|
|
239
|
+
import { tanstackStart } from "@tanstack/react-start/plugin/vite";
|
|
240
|
+
import viteReact from "@vitejs/plugin-react";
|
|
241
|
+
import { lingui } from "@intlayer/lingui/plugin";
|
|
242
|
+
|
|
243
|
+
export default defineConfig({
|
|
244
|
+
plugins: [
|
|
245
|
+
tanstackStart(),
|
|
246
|
+
viteReact({
|
|
247
|
+
// मैक्रो प्लगइन बनाए रखें; इसे Intlayer पास से पहले चलना चाहिए
|
|
248
|
+
babel: { plugins: ["@lingui/babel-plugin-lingui-macro"] },
|
|
249
|
+
}),
|
|
250
|
+
lingui(),
|
|
251
|
+
],
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
`lingui()` प्लगइन `vite-intlayer` (कंटेंट वॉचिंग, डिक्शनरी कंपाइलेशन, ऑप्टिमाइज़ पास) को समाहित करता है और `@lingui/core` और `@lingui/react` को एडॉप्टर पर एलियास करता है। बिल्ड करें, और उपरोक्त लाभ तुरंत लागू हो जाएंगे।
|
|
256
|
+
|
|
257
|
+
</Step>
|
|
258
|
+
</Steps>
|
|
259
|
+
|
|
260
|
+
### इसके बाद आप क्या हटा सकते हैं
|
|
261
|
+
|
|
262
|
+
| फ़ाइल / पैटर्न | कारण |
|
|
263
|
+
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
264
|
+
| `await import(\`./locales/${locale}/messages.mjs\`)` | डिक्शनरी उन घटकों द्वारा सीधे इम्पोर्ट की जाती हैं जो उनका उपयोग करते हैं। `i18n.load()` फ़ॉलबैक बन जाता है |
|
|
265
|
+
| `i18n.load()` / `i18n.loadAndActivate()` | `i18n.activate(locale)` रखें; कैटलॉग की मैन्युअल लोडिंग हटा दें |
|
|
266
|
+
| बिल्ड स्क्रिप्ट में `lingui compile` | केवल तभी जब आप JSON या `.po` को प्राथमिक स्रोत के रूप में उपयोग कर रहे हैं और संकलित मॉड्यूल इम्पोर्ट नहीं कर रहे |
|
|
267
|
+
|
|
268
|
+
### बाइट्स की बचत के अलावा लाभ
|
|
269
|
+
|
|
270
|
+
- **अनुपस्थित अनुवादों का स्वतः पता लगाना।** `npx intlayer test` किसी भी भाषा में कुंजी गायब होने पर CI को विफल कर देता है; जबकि `lingui extract` केवल सांख्यिकी रिपोर्ट करता है।
|
|
271
|
+
- **`npx intlayer fill`** अपनी पसंद के AI प्रदाता (OpenAI, Anthropic, Mistral, Gemini...) के साथ छूटे हुए अनुवाद भरता है और उन्हें सीधे आपके कैटलॉग में वापस सहेजता है।
|
|
272
|
+
- **विजुअल एडिटर और CMS** उन्हीं डिक्शनरी पर काम करते हैं, जिससे गैर-तकनीकी टीम के सदस्य ग्राफिकल इंटरफ़ेस के माध्यम से `.po` और JSON फ़ाइलों को संपादित कर सकते हैं।
|
|
273
|
+
- **`.content.ts` में क्रमिक बदलाव।** किसी भी घटक को किसी भी समय `useLingui()` से स्थानीय कंटेंट फ़ाइल के साथ `useIntlayer("hero")` में बदला जा सकता है। दोनों प्रकार की डिक्शनरी सुचारू रूप से सह-अस्तित्व में रहती हैं।
|
|
274
|
+
|
|
275
|
+
## शुरू करने से पहले जानने योग्य सीमाएँ
|
|
276
|
+
|
|
277
|
+
- **`dynamic` मोड में प्रति पेज लागत।** जैसा कि ऊपर बताया गया है: छोटे ऐप पर लेज़ी-लोडेड Lingui सेटअप के मुकाबले प्रति पेज लगभग +20 KB की उम्मीद करें। सामग्री बढ़ने पर यह अंतर बढ़ता नहीं है (क्योंकि यह रिज़ॉल्वर से जुड़ा है, कैटलॉग से नहीं), लेकिन यह कम भी नहीं होता।
|
|
278
|
+
- **स्रोत-भाषा लीकेज बना रहता है।** संदेश विवरण और कंपाइल किए गए मैक्रोज़ फ़ॉलबैक के रूप में मूल अंग्रेजी टेक्स्ट एम्बेड करते हैं। यदि इसे पूरी तरह हटाना है, तो `message` फ़ील्ड को साफ़ करना होगा या घटक को `.content.ts` में ले जाना होगा।
|
|
279
|
+
- **`i18n.load()` केवल फ़ॉलबैक है।** यदि आप संकलित कैटलॉग इम्पोर्ट करना और `load()` कॉल करना जारी रखते हैं, तो पुराना बंडल और नया बंडल दोनों लोड होंगे। उन इम्पोर्ट्स को हटा दें।
|
|
280
|
+
- **केवल Vite समर्थित।** `@intlayer/lingui` के लिए कोई Next.js प्लगइन उपलब्ध नहीं है। Lingui पर आधारित Next.js परियोजनाओं को सीधे [`next-intlayer`](https://intlayer.org/hi/doc/environment/nextjs) पर विचार करना चाहिए।
|
|
281
|
+
- **`defaultComponent` लागू नहीं होता।** यदि आप प्रत्येक `<Trans>` को स्वचालित रूप से लपेटने के लिए इस पर निर्भर हैं, तो घटकों में स्पष्ट रूप से रैपर जोड़ें।
|
|
282
|
+
|
|
283
|
+
## कब किसका उपयोग करें?
|
|
284
|
+
|
|
285
|
+
- **Lingui पर बने रहें** यदि आप पहले से ही `scoped-dynamic` चला रहे हैं, आपका एकमात्र मानदंड प्रति पेज न्यूनतम बाइट्स है, और 42 ms का भाषा स्विच और 30 ms का हाइड्रेशन आपके ऐप के लिए पूरी तरह स्वीकार्य है।
|
|
286
|
+
- **`@intlayer/lingui` का उपयोग करें** यदि आप Lingui का उपयोग कर रहे हैं और मैक्रोज़ को छुए बिना हल्के घटक, तेज़ हाइड्रेशन और भाषा स्विचिंग, सरल सेटअप में 0% पेज लीकेज, टाइप की गई आईडी, CI जांच और AI अनुवाद चाहते हैं। यह मौजूदा Lingui कोडबेस के लिए आदर्श अपग्रेड पथ है।
|
|
287
|
+
- **नेटिव Intlayer (`react-intlayer`) पर स्विच करें** जब आप घटकों का व्यापक रीफैक्टरिंग शुरू करें। यह तुलना तालिका में **0% भाषा लीकेज**, 5 KB रनटाइम और बेस ऐप की तुलना में केवल +7.6 KB प्रति पेज जोड़ने वाला एकमात्र समाधान है।
|
|
288
|
+
|
|
289
|
+
## संबंधित तुलनात्मक लेख
|
|
290
|
+
|
|
291
|
+
- [Lingui बनाम Intlayer](https://intlayer.org/hi/blog/lingui-vs-intlayer) (समान बेंचमार्क पर दोनों लाइब्रेरीज़ की सीधी तुलना)
|
|
292
|
+
- [next-intl बनाम @intlayer/next-intl](https://intlayer.org/hi/blog/next-intl-vs-intlayer-next-intl) (कम्पैट एडॉप्टर तुलना श्रृंखला)
|
|
293
|
+
- [i18next बनाम @intlayer/i18next](https://intlayer.org/hi/blog/i18next-vs-intlayer-i18next) (कम्पैट एडॉप्टर तुलना श्रृंखला)
|
|
294
|
+
- [vue-i18n बनाम @intlayer/vue-i18n](https://intlayer.org/hi/blog/vue-i18n-vs-intlayer-vue-i18n) (कम्पैट एडॉप्टर तुलना श्रृंखला)
|
|
295
|
+
- [कम्पैट एडॉप्टर संदर्भ: Lingui](https://intlayer.org/hi/doc/compatibility/lingui)
|
|
296
|
+
- [कंपाइलर बनाम घोषणात्मक i18n](https://intlayer.org/hi/blog/compiler-vs-declarative-i18n)
|
|
297
|
+
|
|
298
|
+
## निष्कर्ष
|
|
299
|
+
|
|
300
|
+
`@intlayer/lingui` Lingui कॉल साइट्स के बाइंडिंग लक्ष्य को बदल देता है: वैश्विक इंस्टेंस और उसके विशाल भाषा कैटलॉग के बजाय, यह उस विशेष घटक के लिए संकलित डिक्शनरी से जुड़ता है। उसी TanStack Start ऐप पर, यह बिना किसी मैक्रो संपादन के **घटकों को 7 गुना छोटा**, **हाइड्रेशन को 8-14 ms तेज़**, **भाषा स्विचिंग को 2 गुना तेज़** बनाता है और 42 ms के प्रदर्शन अंतराल को समाप्त करता है। यह घटकों में एम्बेडेड फ़ॉलबैक को नहीं बदलता (इसलिए स्रोत-भाषा लीकेज बनी रहती है) और रनटाइम पर ICU को पार्स करता है (जिससे डायनामिक मोड में शुद्ध Lingui की तुलना में प्रति पेज लगभग 20 KB अधिक लोड होता है)। अपने प्रोजेक्ट के प्रदर्शन बजट के अनुसार उपयुक्त विकल्प चुनें।
|
|
301
|
+
|
|
302
|
+
सभी मूल डेटा, परीक्षण ऐप्स और बेंचमार्क स्क्रिप्ट्स [Benchmark Bloom रिपॉजिटरी](https://github.com/intlayer-org/benchmark-bloom) में उपलब्ध हैं। आप इसे स्वयं चलाकर देख सकते हैं।
|
|
303
|
+
|
|
304
|
+
अधिक जानकारी के लिए ['Intlayer क्यों चुनें?' दस्तावेज़](https://intlayer.org/hi/doc/why) देखें।
|