@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,288 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-13
|
|
3
|
+
updatedAt: 2026-09-13
|
|
4
|
+
title: "vue-i18n vs @intlayer/vue-i18n: Aynı API, Farklı Bundle"
|
|
5
|
+
description: Bir Vue 3 uygulaması vue-i18n çağrılarını tuttuğunda ancak @intlayer/vue-i18n compat adapter aracılığıyla sunduğunda neler değişiyor. Aynı Vite + Vue kodunda sayfa başına JavaScript, runtime boyutu, component boyutu ve sızıntı ölçüldü; adapter'ın ne tuttuğu, ne yoksaydığı ve neyi değiştiremeyeceği.
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- "@intlayer/vue-i18n"
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Compat adapter
|
|
11
|
+
- Migration
|
|
12
|
+
- Internationalization
|
|
13
|
+
- i18n
|
|
14
|
+
- Benchmark
|
|
15
|
+
- Bundle size
|
|
16
|
+
- Blog
|
|
17
|
+
- Vue
|
|
18
|
+
- Nuxt
|
|
19
|
+
- Vite
|
|
20
|
+
slugs:
|
|
21
|
+
- blog
|
|
22
|
+
- vue-i18n-vs-intlayer-vue-i18n
|
|
23
|
+
author: aymericzip
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# vue-i18n VS @intlayer/vue-i18n | Aynı API, Farklı Bundle
|
|
27
|
+
|
|
28
|
+
`@intlayer/vue-i18n`, bir uyumluluk adaptörüdür: `vue-i18n` API'sini (`createI18n`, `useI18n`, `t()`, `d()`, `n()`, `$t`, `v-t`, `i18n.global.locale`...) ortaya çıkarır ve bunu Intlayer tarafından derlenmiş sözlüklerden sunar. `.vue` dosyalarınız değişmez. `t("footer.github")`'nin bağlı olduğu şey değişir.
|
|
29
|
+
|
|
30
|
+
Bu makale, aynı Vite + Vue 3 uygulamasında bu değişimi ölçer; bir kez `vue-i18n` ile ve bir kez adapter ile oluşturulmuştur. Sayılar [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) kaynağından gelmektedir. `vue-i18n` ve Intlayer'ı kütüphaneler olarak karşılaştırmak için [vue-i18n vs Intlayer](https://intlayer.org/blog/vue-i18n-vs-intlayer) ve [vue-i18n vs Intlayer benchmark](https://intlayer.org/blog/vue-i18n-vs-intlayer-benchmark) makalesini okuyun. Bu makale, bileşenlerinizi olduğu gibi tuttuğunuzda adapterın ne değiştirdiği hakkındadır.
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
33
|
+
|
|
34
|
+
> **tl;dr**: Aynı Vite + Vue 3 uygulamasında, `vue-i18n` yerine `@intlayer/vue-i18n` kullanmak sayfa başına JavaScript'i gzip olarak **134.9 KB'den 47.0 KB'ye** düşürdü (i18n olmadan uygulama 41.3 KB ağırlığında), runtime'ı **24.3 KB'den 7.9 KB'ye**, ortalama component'i **196 KB'den 8.4 KB'ye** ve yabancı sayfa string sızıntısını **%90'dan %0'a** indirdi, hiçbir `.vue` dosyası düzenlenmedi. `createI18n({ messages })` fallback olarak çalışmaya devam eder; yukarıdaki sayıları elde etmek için JSON imports'ları kaldırın. SFC `<i18n>` blokları ve runtime `setLocaleMessage()`, bu özelliklerin aktarılmayan iki özelliğidir.
|
|
35
|
+
|
|
36
|
+
## `@intlayer/vue-i18n` nedir
|
|
37
|
+
|
|
38
|
+
`vue-i18n` bir çalışma zamanıdır. `createI18n({ messages: { en, fr, ... } })` her yerel ayarın tüm mesajlarını tutan genel bir örnek oluşturur; `useI18n()` her bileşeni buna bağlar; `t("footer.github")` render zamanında ağacı dolaşır. Bu tasarım, SFC `<i18n>` bloklarını ve `setLocaleMessage()` mümkün kılan şeydir ve aynı zamanda her bileşenin bağımlılık grafiğinin tüm ağacı içermesinin nedenidir.
|
|
39
|
+
|
|
40
|
+
`@intlayer/vue-i18n` API'yi korur ve ağacı değiştirir:
|
|
41
|
+
|
|
42
|
+
1. **İçe aktarma takma adı.** `@intlayer/vue-i18n/plugin` içindeki `vueI18nVitePlugin()`, `vite-intlayer`'ı sarmalanır ve `vue-i18n`'in `@intlayer/vue-i18n` olarak çözülmesi için bir `resolve.alias` ekler. Hiçbir içe aktarma yeniden adlandırılmaz.
|
|
43
|
+
2. **JSON as source of truth.** The `syncJSON` plugin reads your existing `locales/{locale}.json` with `format: "vue-i18n"` (so `{name}`, `{0}` list interpolation and `"car | cars"` pipe plurals are parsed correctly) and writes translations back when the CLI or the CMS updates them.
|
|
44
|
+
3. **Call-site binding.** The Intlayer optimize pass rewrites `useI18n()` call sites so the component receives the dictionaries its keys name, in the active locale, as imports the bundler can trace and split.
|
|
45
|
+
|
|
46
|
+
```vue fileName="src/components/Footer.vue"
|
|
47
|
+
<!-- Kodunuz, değiştirilmemiş -->
|
|
48
|
+
<script setup lang="ts">
|
|
49
|
+
import { useI18n } from "vue-i18n";
|
|
50
|
+
|
|
51
|
+
const { t } = useI18n();
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<template>
|
|
55
|
+
<a href="https://github.com/intlayer-org/benchmark-bloom">{{
|
|
56
|
+
t("footer.github")
|
|
57
|
+
}}</a>
|
|
58
|
+
</template>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```ts fileName="Derleyicinin yayınladığı şey (basitleştirilmiş)"
|
|
62
|
+
import _dicHash_footer from "../.intlayer/dictionaries/footer.mjs";
|
|
63
|
+
import { useDictionary as useI18n } from "@intlayer/vue-i18n";
|
|
64
|
+
|
|
65
|
+
const { t } = useI18n(_dicHash_footer);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Bileşen artık global mesaj ağacına ulaşmıyor. Yalnızca `footer`'a ulaşıyor. Bu nedenle aşağıdaki bileşen boyutu sütunu 196 KB'den 8 KB'ye düşüyor.
|
|
69
|
+
|
|
70
|
+
## Adaptörün ne tuttuğu, ne görmezden geldiği ve ne değiştirmediği
|
|
71
|
+
|
|
72
|
+
| `vue-i18n` API | `@intlayer/vue-i18n` ile |
|
|
73
|
+
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
74
|
+
| `useI18n()` → `{ t, d, n, te, tm, rt, locale, availableLocales }` | ✅ Korundu. `t` anahtarları sözlüklerinize göre yazılmıştır |
|
|
75
|
+
| `t("key", { name })`, `t("key", [a, b])`, `t("key", count)` | ✅ Korundu. `{name}`, `{0}` ve pipe ile ayrılmış çoğullar daha önce olduğu gibi çözülür |
|
|
76
|
+
| `d(date, "long")`, `n(value, "currency")` | ✅ Korundu. `createI18n()` öğesinden `datetimeFormats` / `numberFormats` yerine getirilir, yerel `Intl` ile desteklenir |
|
|
77
|
+
| `i18n.global.locale.value = "fr"` | ✅ Korundu. Intlayer'in istemcisi tarafından desteklenen bir `WritableComputedRef`; reaktivite önceki gibi davranır |
|
|
78
|
+
| `$t`, `$tc`, `$te`, `$tm`, `$rt`, `$d`, `$n`, `$i18n` (Options API) | ✅ Korundu. `app.use(i18n)` tarafından `app.config.globalProperties` üzerine kaydedildi |
|
|
79
|
+
| `v-t` directive | ✅ Korundu |
|
|
80
|
+
| `legacy: true` | ✅ Kabul edildi |
|
|
81
|
+
| `createI18n({ messages })` | ⚠️ `messages` bir **runtime fallback** olarak kullanılır ve dev uyarısı gösterilir. Bundle kazançları için JSON importlarını kaldırın |
|
|
82
|
+
| `setLocaleMessage()`, `mergeLocaleMessage()` | ❌ Uyarı gösterilir ve hiçbir şey yapmaz. Runtime message yükleme, build-time sözlükleri ile değiştirilir |
|
|
83
|
+
| SFC `<i18n>` custom blocks | ❌ Okunmaz. Bu mesajları locale JSON'a (veya bileşenin yanındaki `.content.ts`'e) taşıyın |
|
|
84
|
+
| `@nuxtjs/i18n` | ⚠️ Ayrı adapter, bkz. [Nuxt compat docu](https://intlayer.org/doc/compatibility/nuxtjs-i18n) |
|
|
85
|
+
|
|
86
|
+
## Benchmark
|
|
87
|
+
|
|
88
|
+
### Ölçülen içerik
|
|
89
|
+
|
|
90
|
+
[Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) paketi, **aynı Vite + Vue 3 uygulamasını** her setup ile derler: **10 sayfa** (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), **10 locale** (`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`), özdeş bileşenler ve özdeş içerik. Sayfalar `en` ve `fr` dilinde ölçülür.
|
|
91
|
+
|
|
92
|
+
Her ikisi de **static** konfigürasyonda derlenmiştir; çoğu Vue projesinin sevk ettiği konfigürasyon: `vue-i18n` için, her locale'in JSON'u import edilip `createI18n({ messages })` öğesine iletilir; adapter için, `vite.config.ts` ve `intlayer.config.ts` değiştirilmiş aynı bileşenler ve `messages` import'u kaldırılmıştır. Referans için native `vue-intlayer` dahil edilmiştir.
|
|
93
|
+
|
|
94
|
+
Her derleme için, suite şunları kaydeder:
|
|
95
|
+
|
|
96
|
+
- **Kütüphane boyutu**: i18n kütüphanesini yalnızca içe aktaran boş bir bileşenin gzip (ve küçültülmüş) boyutu.
|
|
97
|
+
- **Sayfa JS**: sayfa başına indirilen gzip JavaScript, tüm sayfalar ve locale'ler üzerinde ortalama.
|
|
98
|
+
- **Locale sızıntısı %**: indirilen JS'teki çevrilmiş dizelerin kullanıcının **görüntülemediği** bir locale'e ait olan yüzdesi.
|
|
99
|
+
- **Sayfa sızıntısı %**: indirilen JS'teki çevrilmiş dizelerin kullanıcının **bulunmadığı** bir sayfaya ait olan yüzdesi.
|
|
100
|
+
- **Bileşen ortalaması**: izolasyon halinde derlenen her bileşenin ortalama gzip boyutu.
|
|
101
|
+
- **E2E tepkisellik**: yeni bir locale seçimi ile DOM'da `html[lang]` güncellemesi arasındaki duvar saati zamanı (Playwright, 5 yineleme).
|
|
102
|
+
- **Sayfa yükleme**: `PerformanceNavigationTiming.duration`.
|
|
103
|
+
|
|
104
|
+
> Aşağıdaki rakamlar **2026-09-12** tarihinde `vue-i18n` 11.4.0 ve `@intlayer/vue-i18n` 9.5.1 ile yapılan çalıştırmadan gelmiştir. Test uygulaması kasıtlı olarak küçüktür (locale başına birkaç düzine string), bu nedenle sızıntı yüzdeleri bir **pattern** açıklar: içeriğiniz büyüdükçe artar, ancak runtime maliyeti sabit kalır.
|
|
105
|
+
|
|
106
|
+
### Vite + Vue 3 Sonuçları
|
|
107
|
+
|
|
108
|
+
| Kurulum | Strategi | Lib size (gz) | Lib size (min) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Page load |
|
|
109
|
+
| ------------------------ | -------- | ------------: | -------------: | ---------------: | ----------: | --------: | -----------------: | -------------: | ---------: |
|
|
110
|
+
| **base** (i18n yok) | - | 0.0 KB | 0.0 KB | 41.3 KB | 0.0% | - | 1.1 KB | 1.8 ms | 10.8 ms |
|
|
111
|
+
| `vue-i18n` | static | 24.3 KB | 83.2 KB | 134.9 KB | 50.0% | 90.0% | 196.0 KB | 2.8 ms | 13.6 ms |
|
|
112
|
+
| **`@intlayer/vue-i18n`** | static | **7.9 KB** | **23.2 KB** | **47.0 KB** | **15.0%** | **0.0%** | **8.4 KB** | **1.5 ms** | **9.3 ms** |
|
|
113
|
+
| `vue-intlayer` (native) | static | 3.9 KB | 11.1 KB | 57.1 KB | 56.8% | 0.0% | 7.7 KB | 4.5 ms | 13.8 ms |
|
|
114
|
+
| `vue-intlayer` (native) | dynamic | 3.9 KB | 11.1 KB | 59.8 KB | 50.0% | 0.0% | 6.5 KB | 4.0 ms | 15.8 ms |
|
|
115
|
+
|
|
116
|
+
> Temel uygulamanın page-leak sütunu boş bırakılmıştır: i18n kütüphanesi olmadan, parmak izi alma paylaşılan chunk'lardaki sabit kodlanmış stringleri alır ve sayı anlamlı değildir.
|
|
117
|
+
|
|
118
|
+
**Nasıl okunur**
|
|
119
|
+
|
|
120
|
+
- **Sayfa başına 88 KB daha az, aynı bileşenler.** `vue-i18n`, 41.3 KB uygulamayı **134.9 KB** olarak alır. Aynı bileşenlerin adapter derlemesi **47.0 KB** ile sonuçlanır, temel uygulamadan 5.7 KB üstündedir. Farkın çoğu, `createI18n({ messages })` tarafından her sayfaya çekilen 74.9 KB `src/locales` ve adaptörün asla bir blok olarak paketlemediği şeydir.
|
|
121
|
+
- **Runtime 3 kat küçülüyor.** Sadece `vue-i18n` içe aktaran boş bir component **24.3 KB gzip / 83.2 KB minified** maliyetlidir: `@intlify/core-base`, mesaj derleyicisi ve runtime. Adapter **7.9 KB / 23.2 KB** maliyetlidir, çoğunluğu Intlayer'ın core'u artı `vue-i18n` API surface'idir.
|
|
122
|
+
- **Componentler: 23 kat daha küçük.** İzolasyon halinde derlenen bir `useI18n()` component ortalaması **196 KB**'dir, çünkü `t` her locale'in her mesajını tutan instance'a bağlıdır. Adapter ile aynı component ortalaması **8.4 KB**'dir: kendi sözlüğüne ulaşır.
|
|
123
|
+
- **Sızıntı.** `vue-i18n`, her yerel ayarı ve her sayfanın dizelerini her sayfada gönderir: %50 yerel ayar sızıntısı (iki parmakli yerel ayarda; on yerel ayar paketlenmiş olsa bile gerçek harcama daha yüksektir), %90 sayfa sızıntısı. Adapter, her bileşen yalnızca kendi sözlüklerini içe aktardığından sayfa sızıntısını **%0**'a düşürür. Bu `static` çalıştırmada yerel ayar sızıntısı %15'tedir; `importMode: 'dynamic'` bunu kaldıran ayardır ve bu yapılandırma bu Vue çalıştırmasının bir parçası değildi.
|
|
124
|
+
- **Reaktivite ve sayfa yükü.** Yerel ayar değiştirme her ikisi için de ucuzdur (1,5-2,8 ms); Vue'nin reaktivite sistemi mesajlar bellekte olduktan sonra bunu sağlar. Sayfa yükü 13,6 ms'den **9,3 ms**'ye gider; ayrıştırılacak 88 KB daha az JavaScript ile uyumludur.
|
|
125
|
+
- **Yerel satırlar hakkında.** `vue-intlayer` bu çalıştırmada `static` modunda her yerel ayarı paketledi ve 3,9 KB çalışma zamanı ile 57,1 KB'ye ulaştı; adaptörün senkronize edilen sözlükleri daha az yabancı yerel ayar dizesi içeriyordu, bu nedenle sayfa başına daha düşük rakam. Yerel çalışma zamanı üçünün en hafifi olmaya devam ediyor ve `.content.ts` modeli SFC `<i18n>` bloklarının eşdeğerini bulduğu yerdir.
|
|
126
|
+
|
|
127
|
+
## Sayılar neden değişiyor
|
|
128
|
+
|
|
129
|
+
`src/components/` içinde hiçbir şey değişmedi, bu nedenle kazançlar `useI18n` bağlı olduğu şeyden geliyor.
|
|
130
|
+
|
|
131
|
+
**`vue-i18n` ile**, bağlama global örnek olur. `createI18n({ messages: { en, fr, ... } })` her şeyi içeren tek bir importtur; `useI18n()` çağıran her bileşen tümüne erişebilir, bu nedenle bundler örneğin altında bölemez. Optimize etmek, _siz_ `en.json` dosyasını rota tarafından bölmeniz, bir router guard içinde `setLocaleMessage()` çağırmanız ve bileşenler hareket ettikçe rota-dosya haritasını doğru tutmanız anlamına gelir.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
.
|
|
135
|
+
├── locales
|
|
136
|
+
│ ├── en.json # her sayfanın stringleri
|
|
137
|
+
│ └── fr.json
|
|
138
|
+
└── src
|
|
139
|
+
├── i18n.ts # createI18n({ messages: { en, fr, ... } })
|
|
140
|
+
├── main.ts # app.use(i18n)
|
|
141
|
+
└── components
|
|
142
|
+
└── Footer.vue # useI18n(); t("footer.github")
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**`@intlayer/vue-i18n` ile**, binding sözlüktür. `syncJSON` her `en.json` dosyasının üst düzey anahtarını bir sözlüğe dönüştürür; optimize işlemi komponente adlarını verdiği anahtarları, bundler'ın izlediği ve sayfa başına böldüğü importlar olarak geçirir.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
.
|
|
149
|
+
├── intlayer.config.ts # syncJSON({ format: "vue-i18n", source: ... })
|
|
150
|
+
├── locales
|
|
151
|
+
│ ├── en.json # unchanged, still the source of truth
|
|
152
|
+
│ └── fr.json
|
|
153
|
+
├── .intlayer/ # generated: one dictionary per top-level key, per locale
|
|
154
|
+
└── src
|
|
155
|
+
├── i18n.ts # createI18n({}) ← messages import removed
|
|
156
|
+
├── main.ts # app.use(i18n) ← unchanged
|
|
157
|
+
└── components
|
|
158
|
+
└── Footer.vue # useI18n(); t("footer.github") ← unchanged
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`i18n.ts` dosyasındaki `messages` import'ı silinecek tek satırdır. Bu 88 KB'dir.
|
|
162
|
+
|
|
163
|
+
## Üç adımda geçiş
|
|
164
|
+
|
|
165
|
+
<Steps>
|
|
166
|
+
<Step number={1} title="Kurulum">
|
|
167
|
+
|
|
168
|
+
```bash packageManager="npm"
|
|
169
|
+
npx intlayer init --interactive
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```bash packageManager="pnpm"
|
|
173
|
+
pnpm dlx intlayer init --interactive
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
```bash packageManager="yarn"
|
|
177
|
+
yarn dlx intlayer init --interactive
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```bash packageManager="bun"
|
|
181
|
+
bunx intlayer init --interactive
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Komut `vue-i18n`'i algılar, `intlayer`, `vue-intlayer`, `@intlayer/vue-i18n` ve `@intlayer/sync-json-plugin`'i kurar ve `intlayer.config.ts`'i önceden doldurur. `vue-i18n`'i kurulu tutun: bu bir peer bağımlılığıdır ve türleri sağlar.
|
|
185
|
+
|
|
186
|
+
</Step>
|
|
187
|
+
<Step number={2} title="Intlayer'ı yerel dosyalarınıza yönlendirin">
|
|
188
|
+
|
|
189
|
+
```ts fileName="intlayer.config.ts"
|
|
190
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
191
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
192
|
+
|
|
193
|
+
const config: IntlayerConfig = {
|
|
194
|
+
internationalization: {
|
|
195
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
196
|
+
defaultLocale: Locales.ENGLISH,
|
|
197
|
+
},
|
|
198
|
+
dictionary: {
|
|
199
|
+
// "static" her yerel ayarı paketler; "dynamic" aktif olanı talep üzerine yükler
|
|
200
|
+
importMode: "dynamic",
|
|
201
|
+
format: "vue-i18n",
|
|
202
|
+
},
|
|
203
|
+
plugins: [
|
|
204
|
+
syncJSON({
|
|
205
|
+
// vue-i18n lehçesi: {name}, {0}, "car | cars"
|
|
206
|
+
format: "vue-i18n",
|
|
207
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
208
|
+
location: "locales",
|
|
209
|
+
}),
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export default config;
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`locales/{locale}.json` bulunduğu yerde kalır. Her üst düzey anahtar (`footer`, `hero`...) bir sözlük haline gelir.
|
|
217
|
+
|
|
218
|
+
</Step>
|
|
219
|
+
<Step number={3} title="Eklentiyi ekleyin ve mesaj importunu kaldırın">
|
|
220
|
+
|
|
221
|
+
```ts fileName="vite.config.ts"
|
|
222
|
+
import { defineConfig } from "vite";
|
|
223
|
+
import vue from "@vitejs/plugin-vue";
|
|
224
|
+
import { vueI18nVitePlugin } from "@intlayer/vue-i18n/plugin";
|
|
225
|
+
|
|
226
|
+
export default defineConfig({
|
|
227
|
+
plugins: [vue(), vueI18nVitePlugin()],
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
```ts fileName="src/i18n.ts"
|
|
232
|
+
import { createI18n } from "vue-i18n";
|
|
233
|
+
|
|
234
|
+
// Önce: createI18n({ locale: "en", messages: { en, fr, es } })
|
|
235
|
+
export const i18n = createI18n({ locale: "en" });
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
`vueI18nVitePlugin()` eklentisi `vite-intlayer`'ı (içerik izleme, sözlük derleme, optimize geçişi) sarmaladığından ve `vue-i18n`'i adaptöre alias ettiğinden; `messages` importunu kaldırmak 88 KB'lik tasarrufu sağlar; bunu bırakmak uygulamanın çalışmasını devam ettirse de hem eski hem de yeni versiyonu yükler.
|
|
239
|
+
|
|
240
|
+
</Step>
|
|
241
|
+
</Steps>
|
|
242
|
+
|
|
243
|
+
### Sonra silebileceğiniz şeyler
|
|
244
|
+
|
|
245
|
+
| Dosya / pattern | Nedeni |
|
|
246
|
+
| -------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
247
|
+
| `import en from "./locales/en.json"` ve benzerleri | Adapter tarafından yalnızca fallback olarak kullanılır. 88 KB'ın geldiği yer burasıdır |
|
|
248
|
+
| Router guards içindeki `setLocaleMessage()` | İşlevsiz. Route başına yükleme artık derleyicinin işidir |
|
|
249
|
+
| `@intlify/unplugin-vue-i18n` | Gerekli değildir: mesajları önceden derler ve SFC blokları adapter tarafından okunmaz |
|
|
250
|
+
| SFC `<i18n>` blokları | Okunmaz; bunları locale JSON'ına veya bileşen başına `.content.ts` dosyasına taşıyın |
|
|
251
|
+
|
|
252
|
+
### Baytların ötesinde neler kazanırsınız
|
|
253
|
+
|
|
254
|
+
- **Yazılı anahtarlar.** `t("footer.github")` derlenmiş `footer` sözlüğüne karşı yazılıdır; yanlış bir yol, metni anahtar olarak render etmek yerine bir TypeScript hatasıdır.
|
|
255
|
+
- **`npx intlayer test`** herhangi bir locale'de eksik bir anahtar için CI'yi başarısız kılar. **`npx intlayer fill`** eksik olanları kendi sağlayıcı anahtarınızla (OpenAI, Anthropic, Mistral, Gemini...) çevirir ve bunları `locales/{locale}.json` dosyasına geri yazar.
|
|
256
|
+
- **Visual Editor ve CMS** aynı JSON üzerinde çalışır, bu nedenle geliştirici olmayanlar bir UI aracılığıyla düzenler ve dosyalar güncellenir.
|
|
257
|
+
- **`.content.ts` dosyasına kademeli geçiş.** Herhangi bir component, bir co-located content dosyası ile `useI18n()` öğesinden `useIntlayer("footer")` öğesine geçebilir. JSON ve `.content.ts` sözlükleri bir arada bulunur ve birleşir.
|
|
258
|
+
|
|
259
|
+
## Başlamadan önce bilmeniz gereken sınırlamalar
|
|
260
|
+
|
|
261
|
+
- **SFC `<i18n>` blokları okunmaz.** Mesajlarınız componentler içinde bulunuyorsa, bunların locale dosyalarına (veya türleri olan `.content.ts` dosyasına, bu da aynı fikrin türlü halidir) taşınması gerekir.
|
|
262
|
+
- **Runtime mesaj yükleme kaldırılmıştır.** `setLocaleMessage()` ve `mergeLocaleMessage()` uyarı verir ve geri döner. CMS'den runtime'da alınan çeviriler, Intlayer'ın CMS'ini veya `intlayer pull` / `push` komutlarını gerektirir.
|
|
263
|
+
- **`messages` bir fallback'tir, ücretsiz değildir.** `createI18n()` içindeki JSON import'larını tutmak, bundle'a 75 KB ekler. `intlayer test` geçtikten sonra bunları silin.
|
|
264
|
+
- **Adapter, native runtime değildir.** 7.9 KB vs `vue-intlayer` için 3.9 KB. Her component `useIntlayer`'a geçtikten sonra bunu kaldırabilirsiniz.
|
|
265
|
+
|
|
266
|
+
## Hangisini ne zaman kullanmalı?
|
|
267
|
+
|
|
268
|
+
- **`vue-i18n` üzerinde kalın** eğer uygulamanız SFC `<i18n>` blocks'a, runtime `setLocaleMessage()` flows'a bağlı ise, veya 90 KB per page sizin audience'ınız için bir sorun değilse.
|
|
269
|
+
- **`@intlayer/vue-i18n` kullanın** eğer `vue-i18n` üzerindeyseniz ve 88 KB, 23x daha küçük components, 0% page leakage, typed keys ve `.vue` dosyasını düzenlemeden CI checks istiyorsanız. Bu, mevcut bir `vue-i18n` codebase'i için giriş noktasıdır.
|
|
270
|
+
- **Native'ye gidin (`vue-intlayer`)** yeni projeler için veya adapter işini bitirdikten sonra. En hafif runtime'a (3.9 KB) ve `<i18n>` blocks'ı typed content ile değiştiren per-component `.content.ts` modelini içerir.
|
|
271
|
+
|
|
272
|
+
## İlgili karşılaştırmalar
|
|
273
|
+
|
|
274
|
+
- [vue-i18n vs Intlayer](https://intlayer.org/blog/vue-i18n-vs-intlayer) (özellikler ve DX)
|
|
275
|
+
- [vue-i18n vs Intlayer benchmark](https://intlayer.org/blog/vue-i18n-vs-intlayer-benchmark) (kütüphaneler, aynı benchmark)
|
|
276
|
+
- [next-intl vs @intlayer/next-intl](https://intlayer.org/blog/next-intl-vs-intlayer-next-intl) (aynı adapter serisi)
|
|
277
|
+
- [i18next vs @intlayer/i18next](https://intlayer.org/blog/i18next-vs-intlayer-i18next) (aynı adapter serisi)
|
|
278
|
+
- [Lingui vs @intlayer/lingui](https://intlayer.org/blog/lingui-vs-intlayer-lingui) (aynı adapter serisi)
|
|
279
|
+
- [Geçiş rehberi: vue-i18n to Intlayer](https://intlayer.org/doc/migration/vue-i18n)
|
|
280
|
+
- [Compat adapter reference: vue-i18n](https://intlayer.org/doc/compatibility/vue-i18n), [Nuxt i18n](https://intlayer.org/doc/compatibility/nuxtjs-i18n)
|
|
281
|
+
|
|
282
|
+
## Sonuç
|
|
283
|
+
|
|
284
|
+
`@intlayer/vue-i18n`, `useI18n()` işlevini değiştirir: her yerel ayarın her mesajını tutan global bir instance'dan, o bileşen için derlenmiş bir sözlüğe. **88 KB daha küçük sayfa başına**, **3x daha küçük runtime**, **23x daha küçük bileşenler** ve **%0 sayfa sızıntısı** ile aynı Vite + Vue 3 uygulamasında, bir config dosyası, bir plugin satırı ve silinen bir import için. SFC `<i18n>` blokları ve runtime message yüklenmesi, taşımadığı iki şeydir ve native `vue-intlayer` runtime'ı boyutunun yarısı kalır.
|
|
285
|
+
|
|
286
|
+
Tüm ham veriler, test uygulamaları ve scriptler [Benchmark Bloom repository](https://github.com/intlayer-org/benchmark-bloom) içinde bulunmaktadır. Kendiniz çalıştırabilirsiniz.
|
|
287
|
+
|
|
288
|
+
Daha fazla ayrıntı için ['Neden Intlayer?' dokümantasyonuna](https://intlayer.org/doc/why) bakınız.
|
|
@@ -235,7 +235,7 @@ Bu yaklaşım:
|
|
|
235
235
|
|
|
236
236
|
GitHub yıldızları, bir projenin popülaritesinin, topluluk güveninin ve uzun vadeli öneminin güçlü bir göstergesidir. Teknik kalitenin doğrudan bir ölçüsü olmasa da, kaç geliştiricinin projeyi yararlı bulduğunu, ilerlemesini takip ettiğini ve muhtemelen benimsediğini yansıtır. Bir projenin değerini tahmin etmek için yıldızlar, alternatifler arasındaki çekişmeyi karşılaştırmaya ve ekosistem büyümesine ilişkin içgörüler sağlamaya yardımcı olur.
|
|
237
237
|
|
|
238
|
-
[](https://
|
|
238
|
+
[](https://star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
|
|
239
239
|
|
|
240
240
|
## Sonuç
|
|
241
241
|
|
|
File without changes
|
|
@@ -49,7 +49,7 @@ author: aymericzip
|
|
|
49
49
|
|
|
50
50
|
У цій статті проаналізовано цю еволюцію з 2011 по 2026 рік: завдання кожного покоління інструментів, їхні сильні та слабкі сторони, а також вплив архітектури фронтенду на сучасні підходи до i18n.
|
|
51
51
|
|
|
52
|
-

|
|
53
53
|
|
|
54
54
|
## Зміст
|
|
55
55
|
|
|
@@ -149,87 +149,87 @@ author: aymericzip
|
|
|
149
149
|
|
|
150
150
|
<Tab label="Core JavaScript" value="javascript">
|
|
151
151
|
|
|
152
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
153
|
-
| ------------ | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
154
|
-
| Січень 2012 | `i18next` | Стандартизація словникового пошуку під час виконання для браузера та Node.js без прив'язки до фреймворку. | Модульна архітектура, що відокремлює логіку перекладу від завантажувачів, модулів визначення мови та кешування. |
|
|
155
|
-
| Лютий 2021 | `typesafe-i18n` | Уникнення прихованих помилок під час виконання та неправильної інтерполяції через нетипізовані рядкові ключі. | Повністю типізовані функції перекладу, що генеруються безпосередньо з об'єктів локалізації без рантайм-залежностей. |
|
|
156
|
-
| Жовтень 2023 | `paraglide` (`@inlang/paraglide-js`) | Усунення пошуку за словниками під час виконання, важких парсерів і зайвого коду в бандлі. | Компіляція повідомлень у чисті ECMAScript-модулі та функції з підтримкою tree-shaking. |
|
|
157
|
-
|
|
|
158
|
-
| Червень 2025 | `wuchale` | Позбавлення від ручного вилучення рядків і вигадування ключів перекладу під час розробки. | Препроцесор рівня AST, який розпізнає вбудований текст і компілює його у локалізовані функції під час збірки. |
|
|
152
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
153
|
+
| ------------ | ------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
154
|
+
| Січень 2012 | `i18next` | Jan Mühlemann (`@jamuhl`) | Стандартизація словникового пошуку під час виконання для браузера та Node.js без прив'язки до фреймворку. | Модульна архітектура, що відокремлює логіку перекладу від завантажувачів, модулів визначення мови та кешування. |
|
|
155
|
+
| Лютий 2021 | `typesafe-i18n` | Ivan Hofer (`@ivanhofer`) | Уникнення прихованих помилок під час виконання та неправильної інтерполяції через нетипізовані рядкові ключі. | Повністю типізовані функції перекладу, що генеруються безпосередньо з об'єктів локалізації без рантайм-залежностей. |
|
|
156
|
+
| Жовтень 2023 | `paraglide` (`@inlang/paraglide-js`) | Samuel Stroschein (`@samuelstroschein`) / Inlang (`@inlang`) | Усунення пошуку за словниками під час виконання, важких парсерів і зайвого коду в бандлі. | Компіляція повідомлень у чисті ECMAScript-модулі та функції з підтримкою tree-shaking. |
|
|
157
|
+
| Серпень 2024 | `intlayer` | Aymeric Pineau (`@aymericzip`) | Заміна складних просторів імен, усунення витоку контенту між сторінками, зменшення конфліктів у git та сувора типізація в TypeScript. | Розміщення файлів `.content` поруч із компонентами, автоматична генерація типів TypeScript, інтегрована візуальна CMS та інструменти перекладу через CLI. |
|
|
158
|
+
| Червень 2025 | `wuchale` | Kidus Adugna (`@K1DV5`) | Позбавлення від ручного вилучення рядків і вигадування ключів перекладу під час розробки. | Препроцесор рівня AST, який розпізнає вбудований текст і компілює його у локалізовані функції під час збірки. |
|
|
159
159
|
|
|
160
160
|
</Tab>
|
|
161
161
|
|
|
162
162
|
<Tab label="React" value="react">
|
|
163
163
|
|
|
164
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
165
|
-
| ------------ | ---------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
166
|
-
| Червень 2014 | `react-intl` | Стандартизація форматування чисел, дат, валют і складних форм множини в React. | Декларативні компоненти (`<FormattedMessage>`, `<FormattedDate>`) на базі ICU MessageFormat та стандарту ECMA-402. |
|
|
167
|
-
| Грудень 2015 | `react-i18next` | Зручна інтеграція `i18next` у React з реактивним оновленням інтерфейсу. | Розвиток разом із React: перехід від Higher-Order Components до інтерполяції JSX через `<Trans>` і хука `useTranslation`. |
|
|
168
|
-
| Січень 2018 | `@lingui/react` | Зменшення розміру бандла завдяки уникненню складних ICU-парсерів у браузері. | Макроси Babel/SWC, які компілюють `<Trans>` і `t` у компактні індексовані масиви під час збірки. |
|
|
169
|
-
| Грудень 2020 | `use-intl` | Легковажна альтернатива старим бібліотекам з орієнтацією на хуки та типізацію для React. | Зручні хуки `useTranslations` та `useFormatter` із глибокою інтеграцією в TypeScript. |
|
|
170
|
-
| Лютий 2021 | `@tolgee/react` | Прискорення комунікації між розробниками, перекладачами та дизайнерами. | Редагування текстів у контексті браузера за Alt-кліком зі збереженням та створенням скріншотів на льоту. |
|
|
171
|
-
|
|
|
172
|
-
| Липень 2024 | `gt-react` | Автоматизація ручного експорту файлів і підтримки перекладів. | Автоматична локалізація за допомогою ШІ безпосередньо в компонентах React через хмарні процеси. |
|
|
173
|
-
|
|
|
164
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
165
|
+
| ------------ | ---------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
166
|
+
| Червень 2014 | `react-intl` | Yahoo! / FormatJS | Стандартизація форматування чисел, дат, валют і складних форм множини в React. | Декларативні компоненти (`<FormattedMessage>`, `<FormattedDate>`) на базі ICU MessageFormat та стандарту ECMA-402. |
|
|
167
|
+
| Грудень 2015 | `react-i18next` | Jan Mühlemann (`@jamuhl`) | Зручна інтеграція `i18next` у React з реактивним оновленням інтерфейсу. | Розвиток разом із React: перехід від Higher-Order Components до інтерполяції JSX через `<Trans>` і хука `useTranslation`. |
|
|
168
|
+
| Січень 2018 | `@lingui/react` | Tomáš Ehrlich (`@tricoder42`) | Зменшення розміру бандла завдяки уникненню складних ICU-парсерів у браузері. | Макроси Babel/SWC, які компілюють `<Trans>` і `t` у компактні індексовані масиви під час збірки. |
|
|
169
|
+
| Грудень 2020 | `use-intl` | Jan Amann (`@amannn`) | Легковажна альтернатива старим бібліотекам з орієнтацією на хуки та типізацію для React. | Зручні хуки `useTranslations` та `useFormatter` із глибокою інтеграцією в TypeScript. |
|
|
170
|
+
| Лютий 2021 | `@tolgee/react` | Jan Cizmar (`@jcizmar`) | Прискорення комунікації між розробниками, перекладачами та дизайнерами. | Редагування текстів у контексті браузера за Alt-кліком зі збереженням та створенням скріншотів на льоту. |
|
|
171
|
+
| Серпень 2024 | `react-intlayer` | Aymeric Pineau (`@aymericzip`) | Швидке рішення для життєвого циклу React без централізованих JSON-монолітів та громіздких просторів імен. | Хук `useIntlayer` під рендеринг React, автогенерація типів TypeScript, tree-shaking для кожного компонента та пряма синхронізація з візуальною CMS. |
|
|
172
|
+
| Липень 2024 | `gt-react` | Ernest McCarter (`@eoinest`) | Автоматизація ручного експорту файлів і підтримки перекладів. | Автоматична локалізація за допомогою ШІ безпосередньо в компонентах React через хмарні процеси. |
|
|
173
|
+
| Червень 2025 | `@wuchale/jsx` | Kidus Adugna (`@K1DV5`) | Відмова від ручного створення ключів і повторюваних хуків у JSX. | AST-трансформація, що виділяє текстові вузли JSX і компілює їх у локалізовані аналоги. |
|
|
174
174
|
|
|
175
175
|
</Tab>
|
|
176
176
|
|
|
177
177
|
<Tab label="Next.js" value="nextjs">
|
|
178
178
|
|
|
179
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
180
|
-
| ------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
181
|
-
| Листопад 2018 | `next-i18next` | Підтримка SSR та SSG з `i18next` у Next.js Pages Router без каскадних запитів на клієнті. | Функції `serverSideTranslations` та `appWithTranslation` для передачі локалізованих даних через пропси сторінок. |
|
|
182
|
-
| Грудень
|
|
183
|
-
|
|
|
184
|
-
| Липень 2022 | `next-international` | Максимальна безпека типів TypeScript із мінімальним впливом на клієнтський код у Next.js. | Сувора генерація типів для обмежених ключів із легкими адаптерами для App Router і Pages Router. |
|
|
185
|
-
|
|
|
186
|
-
|
|
|
187
|
-
|
|
|
179
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
180
|
+
| ------------- | ------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
181
|
+
| Листопад 2018 | `next-i18next` | Isaac Hinman (`@isaachinman`) | Підтримка SSR та SSG з `i18next` у Next.js Pages Router без каскадних запитів на клієнті. | Функції `serverSideTranslations` та `appWithTranslation` для передачі локалізованих даних через пропси сторінок. |
|
|
182
|
+
| Грудень 2020 | `next-translate` | Arvin Wiyono (`@arvinn`) / Vinissimus (`@vinissimus`) | Спрощення конфігурації та оптимізація розміру бандла у додатках Pages Router. | Плагін для завантажувача Webpack, що додає на кожну сторінку лише потрібні простори імен перекладу. |
|
|
183
|
+
| Грудень 2020 | `next-intl` | Jan Amann (`@amannn`) | Переосмислення інтернаціоналізації для App Router, React Server Components (RSC) та потокового SSR. | Нативна інтеграція з middleware, Server Actions та асинхронними Server Components без необхідності передавати клієнтський JS. |
|
|
184
|
+
| Липень 2022 | `next-international` | Tom Dussaix (`@tom-dussaix`) | Максимальна безпека типів TypeScript із мінімальним впливом на клієнтський код у Next.js. | Сувора генерація типів для обмежених ключів із легкими адаптерами для App Router і Pages Router. |
|
|
185
|
+
| Жовтень 2023 | `paraglide-next` (`@inlang/paraglide-next`) | Samuel Stroschein (`@samuelstroschein`) / Inlang (`@inlang`) | Скомпільовані повідомлення без додаткового рантайму для App Router та Pages Router у Next.js. | Маршрутизація на middleware разом із функціями повідомлень, що виключають аналіз JSON у рантаймі RSC та клієнтських бандлах. |
|
|
186
|
+
| Серпень 2024 | `next-intlayer` | Aymeric Pineau (`@aymericzip`) | Адаптер для Server Components без потреби передавати функції `t()` чи словники через пропси між компонентами. | Прямий виклик `useIntlayer` у синхронних Server Components без prop-drilling, рендеринг без затримок на сервері, локалізований middleware і синхронізація з CMS. |
|
|
187
|
+
| Липень 2024 | `gt-next` | Ernest McCarter (`@eoinest`) | Автоматизація створення багатомовного вмісту та динамічної маршрутизації в Next.js за допомогою ШІ. | Інтеграція з App Router, яка поєднує машинний переклад у хмарі з edge-middleware та кешуванням Next.js. |
|
|
188
188
|
|
|
189
189
|
</Tab>
|
|
190
190
|
|
|
191
191
|
<Tab label="Vue & Nuxt" value="vue">
|
|
192
192
|
|
|
193
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
194
|
-
| ------------- | -------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
195
|
-
| Травень 2014 | `vue-i18n` | Зручна реактивна інтернаціоналізація для застосунків на Vue.js. | Глибока інтеграція з реактивністю Vue, директиви шаблонів (`v-t`), помічники `$t` та блоки `<i18n>` в однофайлових компонентах (SFC). |
|
|
196
|
-
| Листопад 2017 | `@nuxt/i18n` | Маршрутизація локалізованих URL, теги SEO hreflang і гідратація SSR у Nuxt. | Повноцінний модуль маршрутизації, який створює шляхи (префікси, домени), мета-теги та забезпечує ліниве завантаження фрагментів перекладу. |
|
|
197
|
-
| Серпень
|
|
198
|
-
|
|
|
193
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
194
|
+
| ------------- | -------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
195
|
+
| Травень 2014 | `vue-i18n` | Kazupon (`@kazupon`) | Зручна реактивна інтернаціоналізація для застосунків на Vue.js. | Глибока інтеграція з реактивністю Vue, директиви шаблонів (`v-t`), помічники `$t` та блоки `<i18n>` в однофайлових компонентах (SFC). |
|
|
196
|
+
| Листопад 2017 | `@nuxt/i18n` | Спільнота Nuxt | Маршрутизація локалізованих URL, теги SEO hreflang і гідратація SSR у Nuxt. | Повноцінний модуль маршрутизації, який створює шляхи (префікси, домени), мета-теги та забезпечує ліниве завантаження фрагментів перекладу. |
|
|
197
|
+
| Серпень 2020 | `fluent-vue` | Mozilla (`@mozilla`) / Demivan (`@demivan`) | Підтримка складного граматичного роду, відмінків і несиметричних структур у Vue. | Інтеграція синтаксису Project Fluent від Mozilla, що усуває потребу у розгалужених умовних конструкціях для мовних нюансів. |
|
|
198
|
+
| Січень 2025 | `vue-intlayer` | Aymeric Pineau (`@aymericzip`) | Рішення на базі Intlayer для Composition API у Vue 3 та Nuxt без засмічення глобальної області видимості. | Композабл `useIntlayer` з урахуванням реактивності Vue 3, ізоляція на рівні компонентів, повне автодоповнення TypeScript та підтримка візуального редактора. |
|
|
199
199
|
|
|
200
200
|
</Tab>
|
|
201
201
|
|
|
202
202
|
<Tab label="Angular" value="angular">
|
|
203
203
|
|
|
204
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
205
|
-
| ------------- | ------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
206
|
-
| Лютий 2017 | `ngx-translate` | Динамічний переклад під час виконання в Angular без створення окремих збірок для кожної мови. | Сервіс `TranslateService` та пайп `translate` для динамічного завантаження текстів і перемикання мов на льоту. |
|
|
207
|
-
| Липень 2019 | `@ngneat/transloco` | Усунення обмежень продуктивності та відсутності ізоляції у старіших інструментах Angular. | Структурна директива (`*transloco`), ізольовані переклади для лінивих модулів, підтримка SSR і CLI для вилучення текстів. |
|
|
208
|
-
| Вересень 2019 | `@angular/localize` | Модернізація вбудованої системи i18n в Angular без повної перекомпіляції TypeScript для кожної мови. | Теговані шаблонні літерали з `$localize`, які обробляються як швидкий крок після збірки в компіляторі Ivy. |
|
|
209
|
-
| Лютий 2021 | `@tolgee/ngx` | Спільний переклад у контексті інтерфейсу та збереження знімків екрана в робочих процесах Angular. | Пайпи та директиви з підключенням до Tolgee для зміни тексту безпосередньо у вікні браузера. |
|
|
210
|
-
|
|
|
204
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
205
|
+
| ------------- | ------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
206
|
+
| Лютий 2017 | `ngx-translate` | Olivier Combe (`@ocombe`) | Динамічний переклад під час виконання в Angular без створення окремих збірок для кожної мови. | Сервіс `TranslateService` та пайп `translate` для динамічного завантаження текстів і перемикання мов на льоту. |
|
|
207
|
+
| Липень 2019 | `@ngneat/transloco` | Netanel Basal (`@NetanelBasal`) & Shahar Kazaz (`@shahar_k`) | Усунення обмежень продуктивності та відсутності ізоляції у старіших інструментах Angular. | Структурна директива (`*transloco`), ізольовані переклади для лінивих модулів, підтримка SSR і CLI для вилучення текстів. |
|
|
208
|
+
| Вересень 2019 | `@angular/localize` | Команда Angular (@angular) | Модернізація вбудованої системи i18n в Angular без повної перекомпіляції TypeScript для кожної мови. | Теговані шаблонні літерали з `$localize`, які обробляються як швидкий крок після збірки в компіляторі Ivy. |
|
|
209
|
+
| Лютий 2021 | `@tolgee/ngx` | Jan Cizmar (`@jcizmar`) | Спільний переклад у контексті інтерфейсу та збереження знімків екрана в робочих процесах Angular. | Пайпи та директиви з підключенням до Tolgee для зміни тексту безпосередньо у вікні браузера. |
|
|
210
|
+
| Березень 2026 | `angular-intlayer` | Aymeric Pineau (`@aymericzip`) | Нативна інтеграція Intlayer для сучасного Angular (Signals, standalone-компоненти та SSR). | Реактивна інтеграція на базі Signals для механізму Change Detection в Angular, робота зі standalone-компонентами та миттєва синхронізація з візуальною CMS. |
|
|
211
211
|
|
|
212
212
|
</Tab>
|
|
213
213
|
|
|
214
214
|
<Tab label="Svelte & SvelteKit" value="svelte">
|
|
215
215
|
|
|
216
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
217
|
-
| ------------- | ----------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
218
|
-
| Липень 2018 | `svelte-i18n` | Реактивна бібліотека інтернаціоналізації на основі сховищ (stores) Svelte. | Пошук через `$t` на базі сховищ, що гарантує точне оновлення DOM у разі зміни мови. |
|
|
219
|
-
| Грудень 2021 | `sveltekit-i18n` | Коректна обробка SSR і завантаження перекладів за маршрутами у додатках SvelteKit. | Модульна архітектура завантажувача, що отримує лише ті рядки та форматери, які потрібні для активного маршруту. |
|
|
220
|
-
| Листопад 2021 | `@tolgee/svelte` | Переклад у контексті інтерфейсу для застосунків на Svelte. | Зв'язування зі сховищами Svelte з інтеграцією в оверлей Tolgee та автоматичним створенням скріншотів. |
|
|
221
|
-
|
|
|
222
|
-
| Липень 2025 | `@wuchale/svelte` | Усунення рутини з оголошення словників та імпорту функцій `$t` у компонентах Svelte. | Препроцесор Svelte, що аналізує шаблони під час збірки та компілює текстові вузли у локалізований вивід без додаткових обгорток. |
|
|
216
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
217
|
+
| ------------- | ----------------- | ------------------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
218
|
+
| Липень 2018 | `svelte-i18n` | Kaisermann (`@kaisermann`) | Реактивна бібліотека інтернаціоналізації на основі сховищ (stores) Svelte. | Пошук через `$t` на базі сховищ, що гарантує точне оновлення DOM у разі зміни мови. |
|
|
219
|
+
| Грудень 2021 | `sveltekit-i18n` | Ivan Fevrier (`@ivanfevrier`) | Коректна обробка SSR і завантаження перекладів за маршрутами у додатках SvelteKit. | Модульна архітектура завантажувача, що отримує лише ті рядки та форматери, які потрібні для активного маршруту. |
|
|
220
|
+
| Листопад 2021 | `@tolgee/svelte` | Jan Cizmar (`@jcizmar`) | Переклад у контексті інтерфейсу для застосунків на Svelte. | Зв'язування зі сховищами Svelte з інтеграцією в оверлей Tolgee та автоматичним створенням скріншотів. |
|
|
221
|
+
| Жовтень 2025 | `svelte-intlayer` | Aymeric Pineau (`@aymericzip`) | Швидке рішення Intlayer, розроблене безпосередньо для Svelte 5 та SvelteKit. | Реактивні зв'язки для рун Svelte 5 (`$state`), файли `.content` поруч із компонентами, збірка без конфігурації та візуальний редактор. |
|
|
222
|
+
| Липень 2025 | `@wuchale/svelte` | Kidus Adugna (`@K1DV5`) | Усунення рутини з оголошення словників та імпорту функцій `$t` у компонентах Svelte. | Препроцесор Svelte, що аналізує шаблони під час збірки та компілює текстові вузли у локалізований вивід без додаткових обгорток. |
|
|
223
223
|
|
|
224
224
|
</Tab>
|
|
225
225
|
|
|
226
226
|
<Tab label="SolidJS" value="solid">
|
|
227
227
|
|
|
228
|
-
| Перший реліз | Бібліотека | Мета створення | Ключова інновація |
|
|
229
|
-
| ------------- | ------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
230
|
-
| Вересень 2021 | `@solid-primitives/i18n` | Примітив i18n, що відповідає гранулярній реактивності SolidJS. | Реактивний резолвер перекладів на сигналах, який оновлює вузли DOM без Virtual DOM і зайвих повторних рендерів. |
|
|
231
|
-
|
|
|
232
|
-
| Червень 2026 | `@lingui/solid` | Екстракція через макроси під час збірки та підтримка ICU MessageFormat у SolidJS. | Макротрансформації, адаптовані до сигналів Solid, що перетворюють повідомлення на компактні структури для виконання. |
|
|
228
|
+
| Перший реліз | Бібліотека | Автор | Мета створення | Ключова інновація |
|
|
229
|
+
| ------------- | ------------------------ | ------------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
230
|
+
| Вересень 2021 | `@solid-primitives/i18n` | Спільнота SolidJS | Примітив i18n, що відповідає гранулярній реактивності SolidJS. | Реактивний резолвер перекладів на сигналах, який оновлює вузли DOM без Virtual DOM і зайвих повторних рендерів. |
|
|
231
|
+
| Липень 2025 | `solid-intlayer` | Aymeric Pineau (`@aymericzip`) | Продуктивне рішення Intlayer, створене спеціально для SolidJS та SolidStart. | Прив'язка до сигналів Solid без накладних витрат Virtual DOM, повна автопідстановка схем TypeScript та інтеграція з візуальним редактором. |
|
|
232
|
+
| Червень 2026 | `@lingui/solid` | Tomáš Ehrlich (`@tricoder42`) | Екстракція через макроси під час збірки та підтримка ICU MessageFormat у SolidJS. | Макротрансформації, адаптовані до сигналів Solid, що перетворюють повідомлення на компактні структури для виконання. |
|
|
233
233
|
|
|
234
234
|
</Tab>
|
|
235
235
|
|
|
@@ -237,7 +237,7 @@ author: aymericzip
|
|
|
237
237
|
|
|
238
238
|
## Чотири архітектурні епохи JavaScript i18n
|
|
239
239
|
|
|
240
|
-

|
|
241
241
|
|
|
242
242
|
Аналізуючи п'ятнадцять років розвитку, історію інтернаціоналізації в JavaScript можна розділити на чотири ключові періоди:
|
|
243
243
|
|
|
@@ -287,7 +287,7 @@ author: aymericzip
|
|
|
287
287
|
|
|
288
288
|
Зі зниженням вартості роботи великих мовних моделей до часток цента за високої якості з'явилося нове покоління комерційних інструментів:
|
|
289
289
|
|
|
290
|
-
- Рішення на кшталт
|
|
290
|
+
- Рішення на кшталт **lingo.dev** або **General Translation** (`gt-react`, `gt-next`) пропонують власні хмарні платформи за передплатою.
|
|
291
291
|
- На противагу цьому, **Intlayer** надає можливість перекладу за допомогою ШІ безпосередньо через власну CLI, дозволяючи командам підключати власні ключі API (OpenAI, Anthropic, Mistral або Google Gemini). Без посередників, націнок чи прив'язки до сервісу розрахунок відбувається за прямими тарифами обраного провайдера.
|
|
292
292
|
|
|
293
293
|
### Більше ніж i18n: повноцінна система багатомовного контенту
|