@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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/docs",
|
|
3
|
-
"version": "9.5.
|
|
3
|
+
"version": "9.5.4-canary.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer documentation",
|
|
6
6
|
"keywords": [
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"prepublish": "cp -f ../README.md ./README.md",
|
|
62
62
|
"publish": "bun publish || true",
|
|
63
63
|
"publish:canary": "bun publish --access public --tag canary || true",
|
|
64
|
+
"publish:ci": "bun ../scripts/publish-package.mjs",
|
|
64
65
|
"publish:latest": "bun publish --access public --tag latest || true",
|
|
65
66
|
"review": "bun tools/review.ts",
|
|
66
67
|
"serve": "webpack serve --config ./webpack.config.ts",
|
|
@@ -73,13 +74,13 @@
|
|
|
73
74
|
"watch": "webpack --config ./webpack.config.ts --watch"
|
|
74
75
|
},
|
|
75
76
|
"dependencies": {
|
|
76
|
-
"@intlayer/config": "9.5.
|
|
77
|
-
"@intlayer/core": "9.5.
|
|
78
|
-
"@intlayer/types": "9.5.
|
|
77
|
+
"@intlayer/config": "9.5.4-canary.0",
|
|
78
|
+
"@intlayer/core": "9.5.4-canary.0",
|
|
79
|
+
"@intlayer/types": "9.5.4-canary.0"
|
|
79
80
|
},
|
|
80
81
|
"devDependencies": {
|
|
81
|
-
"@intlayer/api": "9.5.
|
|
82
|
-
"@intlayer/cli": "9.5.
|
|
82
|
+
"@intlayer/api": "9.5.4-canary.0",
|
|
83
|
+
"@intlayer/cli": "9.5.4-canary.0",
|
|
83
84
|
"@types/node": "^22",
|
|
84
85
|
"@utils/ts-config": "1.0.4",
|
|
85
86
|
"@utils/ts-config-types": "1.0.4",
|
|
@@ -88,7 +89,7 @@
|
|
|
88
89
|
"rimraf": "6.1.3",
|
|
89
90
|
"tsdown": "0.23.0",
|
|
90
91
|
"typescript": "7.0.2",
|
|
91
|
-
"vitest": "5.0.
|
|
92
|
+
"vitest": "5.0.1"
|
|
92
93
|
},
|
|
93
94
|
"engines": {
|
|
94
95
|
"node": ">=14.18"
|
|
@@ -165,6 +165,86 @@ export const blogEntry = {
|
|
|
165
165
|
vi: readLocale('history_of_i18n.md', 'vi'),
|
|
166
166
|
uk: readLocale('history_of_i18n.md', 'uk'),
|
|
167
167
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
168
|
+
'./blog/en/how_to_pick_react_i18n_library.md': {
|
|
169
|
+
en: readLocale('how_to_pick_react_i18n_library.md', 'en'),
|
|
170
|
+
es: readLocale('how_to_pick_react_i18n_library.md', 'es'),
|
|
171
|
+
ru: readLocale('how_to_pick_react_i18n_library.md', 'ru'),
|
|
172
|
+
ja: readLocale('how_to_pick_react_i18n_library.md', 'ja'),
|
|
173
|
+
fr: readLocale('how_to_pick_react_i18n_library.md', 'fr'),
|
|
174
|
+
ko: readLocale('how_to_pick_react_i18n_library.md', 'ko'),
|
|
175
|
+
zh: readLocale('how_to_pick_react_i18n_library.md', 'zh'),
|
|
176
|
+
de: readLocale('how_to_pick_react_i18n_library.md', 'de'),
|
|
177
|
+
ar: readLocale('how_to_pick_react_i18n_library.md', 'ar'),
|
|
178
|
+
it: readLocale('how_to_pick_react_i18n_library.md', 'it'),
|
|
179
|
+
'en-GB': readLocale('how_to_pick_react_i18n_library.md', 'en-GB'),
|
|
180
|
+
pt: readLocale('how_to_pick_react_i18n_library.md', 'pt'),
|
|
181
|
+
hi: readLocale('how_to_pick_react_i18n_library.md', 'hi'),
|
|
182
|
+
tr: readLocale('how_to_pick_react_i18n_library.md', 'tr'),
|
|
183
|
+
pl: readLocale('how_to_pick_react_i18n_library.md', 'pl'),
|
|
184
|
+
id: readLocale('how_to_pick_react_i18n_library.md', 'id'),
|
|
185
|
+
vi: readLocale('how_to_pick_react_i18n_library.md', 'vi'),
|
|
186
|
+
uk: readLocale('how_to_pick_react_i18n_library.md', 'uk'),
|
|
187
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
188
|
+
'./blog/en/how_to_pick_solid_i18n_library.md': {
|
|
189
|
+
en: readLocale('how_to_pick_solid_i18n_library.md', 'en'),
|
|
190
|
+
es: readLocale('how_to_pick_solid_i18n_library.md', 'es'),
|
|
191
|
+
ru: readLocale('how_to_pick_solid_i18n_library.md', 'ru'),
|
|
192
|
+
ja: readLocale('how_to_pick_solid_i18n_library.md', 'ja'),
|
|
193
|
+
fr: readLocale('how_to_pick_solid_i18n_library.md', 'fr'),
|
|
194
|
+
ko: readLocale('how_to_pick_solid_i18n_library.md', 'ko'),
|
|
195
|
+
zh: readLocale('how_to_pick_solid_i18n_library.md', 'zh'),
|
|
196
|
+
de: readLocale('how_to_pick_solid_i18n_library.md', 'de'),
|
|
197
|
+
ar: readLocale('how_to_pick_solid_i18n_library.md', 'ar'),
|
|
198
|
+
it: readLocale('how_to_pick_solid_i18n_library.md', 'it'),
|
|
199
|
+
'en-GB': readLocale('how_to_pick_solid_i18n_library.md', 'en-GB'),
|
|
200
|
+
pt: readLocale('how_to_pick_solid_i18n_library.md', 'pt'),
|
|
201
|
+
hi: readLocale('how_to_pick_solid_i18n_library.md', 'hi'),
|
|
202
|
+
tr: readLocale('how_to_pick_solid_i18n_library.md', 'tr'),
|
|
203
|
+
pl: readLocale('how_to_pick_solid_i18n_library.md', 'pl'),
|
|
204
|
+
id: readLocale('how_to_pick_solid_i18n_library.md', 'id'),
|
|
205
|
+
vi: readLocale('how_to_pick_solid_i18n_library.md', 'vi'),
|
|
206
|
+
uk: readLocale('how_to_pick_solid_i18n_library.md', 'uk'),
|
|
207
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
208
|
+
'./blog/en/how_to_pick_svelte_i18n_library.md': {
|
|
209
|
+
en: readLocale('how_to_pick_svelte_i18n_library.md', 'en'),
|
|
210
|
+
es: readLocale('how_to_pick_svelte_i18n_library.md', 'es'),
|
|
211
|
+
ru: readLocale('how_to_pick_svelte_i18n_library.md', 'ru'),
|
|
212
|
+
ja: readLocale('how_to_pick_svelte_i18n_library.md', 'ja'),
|
|
213
|
+
fr: readLocale('how_to_pick_svelte_i18n_library.md', 'fr'),
|
|
214
|
+
ko: readLocale('how_to_pick_svelte_i18n_library.md', 'ko'),
|
|
215
|
+
zh: readLocale('how_to_pick_svelte_i18n_library.md', 'zh'),
|
|
216
|
+
de: readLocale('how_to_pick_svelte_i18n_library.md', 'de'),
|
|
217
|
+
ar: readLocale('how_to_pick_svelte_i18n_library.md', 'ar'),
|
|
218
|
+
it: readLocale('how_to_pick_svelte_i18n_library.md', 'it'),
|
|
219
|
+
'en-GB': readLocale('how_to_pick_svelte_i18n_library.md', 'en-GB'),
|
|
220
|
+
pt: readLocale('how_to_pick_svelte_i18n_library.md', 'pt'),
|
|
221
|
+
hi: readLocale('how_to_pick_svelte_i18n_library.md', 'hi'),
|
|
222
|
+
tr: readLocale('how_to_pick_svelte_i18n_library.md', 'tr'),
|
|
223
|
+
pl: readLocale('how_to_pick_svelte_i18n_library.md', 'pl'),
|
|
224
|
+
id: readLocale('how_to_pick_svelte_i18n_library.md', 'id'),
|
|
225
|
+
vi: readLocale('how_to_pick_svelte_i18n_library.md', 'vi'),
|
|
226
|
+
uk: readLocale('how_to_pick_svelte_i18n_library.md', 'uk'),
|
|
227
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
228
|
+
'./blog/en/how_to_pick_vue_i18n_library.md': {
|
|
229
|
+
en: readLocale('how_to_pick_vue_i18n_library.md', 'en'),
|
|
230
|
+
es: readLocale('how_to_pick_vue_i18n_library.md', 'es'),
|
|
231
|
+
ru: readLocale('how_to_pick_vue_i18n_library.md', 'ru'),
|
|
232
|
+
ja: readLocale('how_to_pick_vue_i18n_library.md', 'ja'),
|
|
233
|
+
fr: readLocale('how_to_pick_vue_i18n_library.md', 'fr'),
|
|
234
|
+
ko: readLocale('how_to_pick_vue_i18n_library.md', 'ko'),
|
|
235
|
+
zh: readLocale('how_to_pick_vue_i18n_library.md', 'zh'),
|
|
236
|
+
de: readLocale('how_to_pick_vue_i18n_library.md', 'de'),
|
|
237
|
+
ar: readLocale('how_to_pick_vue_i18n_library.md', 'ar'),
|
|
238
|
+
it: readLocale('how_to_pick_vue_i18n_library.md', 'it'),
|
|
239
|
+
'en-GB': readLocale('how_to_pick_vue_i18n_library.md', 'en-GB'),
|
|
240
|
+
pt: readLocale('how_to_pick_vue_i18n_library.md', 'pt'),
|
|
241
|
+
hi: readLocale('how_to_pick_vue_i18n_library.md', 'hi'),
|
|
242
|
+
tr: readLocale('how_to_pick_vue_i18n_library.md', 'tr'),
|
|
243
|
+
pl: readLocale('how_to_pick_vue_i18n_library.md', 'pl'),
|
|
244
|
+
id: readLocale('how_to_pick_vue_i18n_library.md', 'id'),
|
|
245
|
+
vi: readLocale('how_to_pick_vue_i18n_library.md', 'vi'),
|
|
246
|
+
uk: readLocale('how_to_pick_vue_i18n_library.md', 'uk'),
|
|
247
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
168
248
|
'./blog/en/hreflang_guide_multilingual_seo.md': {
|
|
169
249
|
en: readLocale('hreflang_guide_multilingual_seo.md', 'en'),
|
|
170
250
|
es: readLocale('hreflang_guide_multilingual_seo.md', 'es'),
|
|
@@ -285,6 +365,46 @@ export const blogEntry = {
|
|
|
285
365
|
vi: readLocale('i18n_using_next-intl.md', 'vi'),
|
|
286
366
|
uk: readLocale('i18n_using_next-intl.md', 'uk'),
|
|
287
367
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
368
|
+
'./blog/en/i18next_vs_intlayer-i18next.md': {
|
|
369
|
+
en: readLocale('i18next_vs_intlayer-i18next.md', 'en'),
|
|
370
|
+
es: readLocale('i18next_vs_intlayer-i18next.md', 'es'),
|
|
371
|
+
ru: readLocale('i18next_vs_intlayer-i18next.md', 'ru'),
|
|
372
|
+
ja: readLocale('i18next_vs_intlayer-i18next.md', 'ja'),
|
|
373
|
+
fr: readLocale('i18next_vs_intlayer-i18next.md', 'fr'),
|
|
374
|
+
ko: readLocale('i18next_vs_intlayer-i18next.md', 'ko'),
|
|
375
|
+
zh: readLocale('i18next_vs_intlayer-i18next.md', 'zh'),
|
|
376
|
+
de: readLocale('i18next_vs_intlayer-i18next.md', 'de'),
|
|
377
|
+
ar: readLocale('i18next_vs_intlayer-i18next.md', 'ar'),
|
|
378
|
+
it: readLocale('i18next_vs_intlayer-i18next.md', 'it'),
|
|
379
|
+
'en-GB': readLocale('i18next_vs_intlayer-i18next.md', 'en-GB'),
|
|
380
|
+
pt: readLocale('i18next_vs_intlayer-i18next.md', 'pt'),
|
|
381
|
+
hi: readLocale('i18next_vs_intlayer-i18next.md', 'hi'),
|
|
382
|
+
tr: readLocale('i18next_vs_intlayer-i18next.md', 'tr'),
|
|
383
|
+
pl: readLocale('i18next_vs_intlayer-i18next.md', 'pl'),
|
|
384
|
+
id: readLocale('i18next_vs_intlayer-i18next.md', 'id'),
|
|
385
|
+
vi: readLocale('i18next_vs_intlayer-i18next.md', 'vi'),
|
|
386
|
+
uk: readLocale('i18next_vs_intlayer-i18next.md', 'uk'),
|
|
387
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
388
|
+
'./blog/en/i18next_vs_intlayer.md': {
|
|
389
|
+
en: readLocale('i18next_vs_intlayer.md', 'en'),
|
|
390
|
+
es: readLocale('i18next_vs_intlayer.md', 'es'),
|
|
391
|
+
ru: readLocale('i18next_vs_intlayer.md', 'ru'),
|
|
392
|
+
ja: readLocale('i18next_vs_intlayer.md', 'ja'),
|
|
393
|
+
fr: readLocale('i18next_vs_intlayer.md', 'fr'),
|
|
394
|
+
ko: readLocale('i18next_vs_intlayer.md', 'ko'),
|
|
395
|
+
zh: readLocale('i18next_vs_intlayer.md', 'zh'),
|
|
396
|
+
de: readLocale('i18next_vs_intlayer.md', 'de'),
|
|
397
|
+
ar: readLocale('i18next_vs_intlayer.md', 'ar'),
|
|
398
|
+
it: readLocale('i18next_vs_intlayer.md', 'it'),
|
|
399
|
+
'en-GB': readLocale('i18next_vs_intlayer.md', 'en-GB'),
|
|
400
|
+
pt: readLocale('i18next_vs_intlayer.md', 'pt'),
|
|
401
|
+
hi: readLocale('i18next_vs_intlayer.md', 'hi'),
|
|
402
|
+
tr: readLocale('i18next_vs_intlayer.md', 'tr'),
|
|
403
|
+
pl: readLocale('i18next_vs_intlayer.md', 'pl'),
|
|
404
|
+
id: readLocale('i18next_vs_intlayer.md', 'id'),
|
|
405
|
+
vi: readLocale('i18next_vs_intlayer.md', 'vi'),
|
|
406
|
+
uk: readLocale('i18next_vs_intlayer.md', 'uk'),
|
|
407
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
288
408
|
'./blog/en/icu_message_format.md': {
|
|
289
409
|
en: readLocale('icu_message_format.md', 'en'),
|
|
290
410
|
es: readLocale('icu_message_format.md', 'es'),
|
|
@@ -585,6 +705,46 @@ export const blogEntry = {
|
|
|
585
705
|
vi: readLocale('l10n_platform_alternative/phrase.md', 'vi'),
|
|
586
706
|
uk: readLocale('l10n_platform_alternative/phrase.md', 'uk'),
|
|
587
707
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
708
|
+
'./blog/en/lingui_vs_intlayer-lingui.md': {
|
|
709
|
+
en: readLocale('lingui_vs_intlayer-lingui.md', 'en'),
|
|
710
|
+
es: readLocale('lingui_vs_intlayer-lingui.md', 'es'),
|
|
711
|
+
ru: readLocale('lingui_vs_intlayer-lingui.md', 'ru'),
|
|
712
|
+
ja: readLocale('lingui_vs_intlayer-lingui.md', 'ja'),
|
|
713
|
+
fr: readLocale('lingui_vs_intlayer-lingui.md', 'fr'),
|
|
714
|
+
ko: readLocale('lingui_vs_intlayer-lingui.md', 'ko'),
|
|
715
|
+
zh: readLocale('lingui_vs_intlayer-lingui.md', 'zh'),
|
|
716
|
+
de: readLocale('lingui_vs_intlayer-lingui.md', 'de'),
|
|
717
|
+
ar: readLocale('lingui_vs_intlayer-lingui.md', 'ar'),
|
|
718
|
+
it: readLocale('lingui_vs_intlayer-lingui.md', 'it'),
|
|
719
|
+
'en-GB': readLocale('lingui_vs_intlayer-lingui.md', 'en-GB'),
|
|
720
|
+
pt: readLocale('lingui_vs_intlayer-lingui.md', 'pt'),
|
|
721
|
+
hi: readLocale('lingui_vs_intlayer-lingui.md', 'hi'),
|
|
722
|
+
tr: readLocale('lingui_vs_intlayer-lingui.md', 'tr'),
|
|
723
|
+
pl: readLocale('lingui_vs_intlayer-lingui.md', 'pl'),
|
|
724
|
+
id: readLocale('lingui_vs_intlayer-lingui.md', 'id'),
|
|
725
|
+
vi: readLocale('lingui_vs_intlayer-lingui.md', 'vi'),
|
|
726
|
+
uk: readLocale('lingui_vs_intlayer-lingui.md', 'uk'),
|
|
727
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
728
|
+
'./blog/en/lingui_vs_intlayer.md': {
|
|
729
|
+
en: readLocale('lingui_vs_intlayer.md', 'en'),
|
|
730
|
+
es: readLocale('lingui_vs_intlayer.md', 'es'),
|
|
731
|
+
ru: readLocale('lingui_vs_intlayer.md', 'ru'),
|
|
732
|
+
ja: readLocale('lingui_vs_intlayer.md', 'ja'),
|
|
733
|
+
fr: readLocale('lingui_vs_intlayer.md', 'fr'),
|
|
734
|
+
ko: readLocale('lingui_vs_intlayer.md', 'ko'),
|
|
735
|
+
zh: readLocale('lingui_vs_intlayer.md', 'zh'),
|
|
736
|
+
de: readLocale('lingui_vs_intlayer.md', 'de'),
|
|
737
|
+
ar: readLocale('lingui_vs_intlayer.md', 'ar'),
|
|
738
|
+
it: readLocale('lingui_vs_intlayer.md', 'it'),
|
|
739
|
+
'en-GB': readLocale('lingui_vs_intlayer.md', 'en-GB'),
|
|
740
|
+
pt: readLocale('lingui_vs_intlayer.md', 'pt'),
|
|
741
|
+
hi: readLocale('lingui_vs_intlayer.md', 'hi'),
|
|
742
|
+
tr: readLocale('lingui_vs_intlayer.md', 'tr'),
|
|
743
|
+
pl: readLocale('lingui_vs_intlayer.md', 'pl'),
|
|
744
|
+
id: readLocale('lingui_vs_intlayer.md', 'id'),
|
|
745
|
+
vi: readLocale('lingui_vs_intlayer.md', 'vi'),
|
|
746
|
+
uk: readLocale('lingui_vs_intlayer.md', 'uk'),
|
|
747
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
588
748
|
'./blog/en/list_i18n_technologies/build-tools/vite.md': {
|
|
589
749
|
en: readLocale('list_i18n_technologies/build-tools/vite.md', 'en'),
|
|
590
750
|
es: readLocale('list_i18n_technologies/build-tools/vite.md', 'es'),
|
|
@@ -880,6 +1040,46 @@ export const blogEntry = {
|
|
|
880
1040
|
vi: readLocale('next-i18next_vs_next-intl_vs_intlayer.md', 'vi'),
|
|
881
1041
|
uk: readLocale('next-i18next_vs_next-intl_vs_intlayer.md', 'uk'),
|
|
882
1042
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1043
|
+
'./blog/en/next-intl_vs_intlayer-next-intl.md': {
|
|
1044
|
+
en: readLocale('next-intl_vs_intlayer-next-intl.md', 'en'),
|
|
1045
|
+
es: readLocale('next-intl_vs_intlayer-next-intl.md', 'es'),
|
|
1046
|
+
ru: readLocale('next-intl_vs_intlayer-next-intl.md', 'ru'),
|
|
1047
|
+
ja: readLocale('next-intl_vs_intlayer-next-intl.md', 'ja'),
|
|
1048
|
+
fr: readLocale('next-intl_vs_intlayer-next-intl.md', 'fr'),
|
|
1049
|
+
ko: readLocale('next-intl_vs_intlayer-next-intl.md', 'ko'),
|
|
1050
|
+
zh: readLocale('next-intl_vs_intlayer-next-intl.md', 'zh'),
|
|
1051
|
+
de: readLocale('next-intl_vs_intlayer-next-intl.md', 'de'),
|
|
1052
|
+
ar: readLocale('next-intl_vs_intlayer-next-intl.md', 'ar'),
|
|
1053
|
+
it: readLocale('next-intl_vs_intlayer-next-intl.md', 'it'),
|
|
1054
|
+
'en-GB': readLocale('next-intl_vs_intlayer-next-intl.md', 'en-GB'),
|
|
1055
|
+
pt: readLocale('next-intl_vs_intlayer-next-intl.md', 'pt'),
|
|
1056
|
+
hi: readLocale('next-intl_vs_intlayer-next-intl.md', 'hi'),
|
|
1057
|
+
tr: readLocale('next-intl_vs_intlayer-next-intl.md', 'tr'),
|
|
1058
|
+
pl: readLocale('next-intl_vs_intlayer-next-intl.md', 'pl'),
|
|
1059
|
+
id: readLocale('next-intl_vs_intlayer-next-intl.md', 'id'),
|
|
1060
|
+
vi: readLocale('next-intl_vs_intlayer-next-intl.md', 'vi'),
|
|
1061
|
+
uk: readLocale('next-intl_vs_intlayer-next-intl.md', 'uk'),
|
|
1062
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1063
|
+
'./blog/en/next-intl_vs_intlayer.md': {
|
|
1064
|
+
en: readLocale('next-intl_vs_intlayer.md', 'en'),
|
|
1065
|
+
es: readLocale('next-intl_vs_intlayer.md', 'es'),
|
|
1066
|
+
ru: readLocale('next-intl_vs_intlayer.md', 'ru'),
|
|
1067
|
+
ja: readLocale('next-intl_vs_intlayer.md', 'ja'),
|
|
1068
|
+
fr: readLocale('next-intl_vs_intlayer.md', 'fr'),
|
|
1069
|
+
ko: readLocale('next-intl_vs_intlayer.md', 'ko'),
|
|
1070
|
+
zh: readLocale('next-intl_vs_intlayer.md', 'zh'),
|
|
1071
|
+
de: readLocale('next-intl_vs_intlayer.md', 'de'),
|
|
1072
|
+
ar: readLocale('next-intl_vs_intlayer.md', 'ar'),
|
|
1073
|
+
it: readLocale('next-intl_vs_intlayer.md', 'it'),
|
|
1074
|
+
'en-GB': readLocale('next-intl_vs_intlayer.md', 'en-GB'),
|
|
1075
|
+
pt: readLocale('next-intl_vs_intlayer.md', 'pt'),
|
|
1076
|
+
hi: readLocale('next-intl_vs_intlayer.md', 'hi'),
|
|
1077
|
+
tr: readLocale('next-intl_vs_intlayer.md', 'tr'),
|
|
1078
|
+
pl: readLocale('next-intl_vs_intlayer.md', 'pl'),
|
|
1079
|
+
id: readLocale('next-intl_vs_intlayer.md', 'id'),
|
|
1080
|
+
vi: readLocale('next-intl_vs_intlayer.md', 'vi'),
|
|
1081
|
+
uk: readLocale('next-intl_vs_intlayer.md', 'uk'),
|
|
1082
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
883
1083
|
'./blog/en/nextjs-multilingual-seo-comparison.md': {
|
|
884
1084
|
en: readLocale('nextjs-multilingual-seo-comparison.md', 'en'),
|
|
885
1085
|
es: readLocale('nextjs-multilingual-seo-comparison.md', 'es'),
|
|
@@ -1006,6 +1206,26 @@ export const blogEntry = {
|
|
|
1006
1206
|
vi: readLocale('transform_existing_vite_react_app_using_compiler.md', 'vi'),
|
|
1007
1207
|
uk: readLocale('transform_existing_vite_react_app_using_compiler.md', 'uk'),
|
|
1008
1208
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1209
|
+
'./blog/en/vue-i18n_vs_intlayer-vue-i18n.md': {
|
|
1210
|
+
en: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'en'),
|
|
1211
|
+
es: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'es'),
|
|
1212
|
+
ru: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'ru'),
|
|
1213
|
+
ja: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'ja'),
|
|
1214
|
+
fr: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'fr'),
|
|
1215
|
+
ko: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'ko'),
|
|
1216
|
+
zh: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'zh'),
|
|
1217
|
+
de: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'de'),
|
|
1218
|
+
ar: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'ar'),
|
|
1219
|
+
it: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'it'),
|
|
1220
|
+
'en-GB': readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'en-GB'),
|
|
1221
|
+
pt: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'pt'),
|
|
1222
|
+
hi: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'hi'),
|
|
1223
|
+
tr: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'tr'),
|
|
1224
|
+
pl: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'pl'),
|
|
1225
|
+
id: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'id'),
|
|
1226
|
+
vi: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'vi'),
|
|
1227
|
+
uk: readLocale('vue-i18n_vs_intlayer-vue-i18n.md', 'uk'),
|
|
1228
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1009
1229
|
'./blog/en/vue-i18n_vs_intlayer.md': {
|
|
1010
1230
|
en: readLocale('vue-i18n_vs_intlayer.md', 'en'),
|
|
1011
1231
|
es: readLocale('vue-i18n_vs_intlayer.md', 'es'),
|
|
@@ -1026,6 +1246,26 @@ export const blogEntry = {
|
|
|
1026
1246
|
vi: readLocale('vue-i18n_vs_intlayer.md', 'vi'),
|
|
1027
1247
|
uk: readLocale('vue-i18n_vs_intlayer.md', 'uk'),
|
|
1028
1248
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1249
|
+
'./blog/en/vue-i18n_vs_intlayer_benchmark.md': {
|
|
1250
|
+
en: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'en'),
|
|
1251
|
+
es: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'es'),
|
|
1252
|
+
ru: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'ru'),
|
|
1253
|
+
ja: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'ja'),
|
|
1254
|
+
fr: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'fr'),
|
|
1255
|
+
ko: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'ko'),
|
|
1256
|
+
zh: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'zh'),
|
|
1257
|
+
de: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'de'),
|
|
1258
|
+
ar: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'ar'),
|
|
1259
|
+
it: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'it'),
|
|
1260
|
+
'en-GB': readLocale('vue-i18n_vs_intlayer_benchmark.md', 'en-GB'),
|
|
1261
|
+
pt: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'pt'),
|
|
1262
|
+
hi: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'hi'),
|
|
1263
|
+
tr: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'tr'),
|
|
1264
|
+
pl: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'pl'),
|
|
1265
|
+
id: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'id'),
|
|
1266
|
+
vi: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'vi'),
|
|
1267
|
+
uk: readLocale('vue-i18n_vs_intlayer_benchmark.md', 'uk'),
|
|
1268
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
1029
1269
|
'./blog/en/what_is_internationalization.md': {
|
|
1030
1270
|
en: readLocale('what_is_internationalization.md', 'en'),
|
|
1031
1271
|
es: readLocale('what_is_internationalization.md', 'es'),
|
|
@@ -191,6 +191,26 @@ export const frequentQuestionsEntry = {
|
|
|
191
191
|
vi: readLocale('bun_set_up.md', 'vi'),
|
|
192
192
|
uk: readLocale('bun_set_up.md', 'uk'),
|
|
193
193
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
194
|
+
'./frequent_questions/en/claude_code_token_consumption.md': {
|
|
195
|
+
en: readLocale('claude_code_token_consumption.md', 'en'),
|
|
196
|
+
es: readLocale('claude_code_token_consumption.md', 'es'),
|
|
197
|
+
ru: readLocale('claude_code_token_consumption.md', 'ru'),
|
|
198
|
+
ja: readLocale('claude_code_token_consumption.md', 'ja'),
|
|
199
|
+
fr: readLocale('claude_code_token_consumption.md', 'fr'),
|
|
200
|
+
ko: readLocale('claude_code_token_consumption.md', 'ko'),
|
|
201
|
+
zh: readLocale('claude_code_token_consumption.md', 'zh'),
|
|
202
|
+
de: readLocale('claude_code_token_consumption.md', 'de'),
|
|
203
|
+
ar: readLocale('claude_code_token_consumption.md', 'ar'),
|
|
204
|
+
it: readLocale('claude_code_token_consumption.md', 'it'),
|
|
205
|
+
'en-GB': readLocale('claude_code_token_consumption.md', 'en-GB'),
|
|
206
|
+
pt: readLocale('claude_code_token_consumption.md', 'pt'),
|
|
207
|
+
hi: readLocale('claude_code_token_consumption.md', 'hi'),
|
|
208
|
+
tr: readLocale('claude_code_token_consumption.md', 'tr'),
|
|
209
|
+
pl: readLocale('claude_code_token_consumption.md', 'pl'),
|
|
210
|
+
id: readLocale('claude_code_token_consumption.md', 'id'),
|
|
211
|
+
vi: readLocale('claude_code_token_consumption.md', 'vi'),
|
|
212
|
+
uk: readLocale('claude_code_token_consumption.md', 'uk'),
|
|
213
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
194
214
|
'./frequent_questions/en/customized_locale_list.md': {
|
|
195
215
|
en: readLocale('customized_locale_list.md', 'en'),
|
|
196
216
|
es: readLocale('customized_locale_list.md', 'es'),
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
createdAt: 2025-09-10
|
|
3
|
-
updatedAt: 2025-09-10
|
|
4
|
-
title: "Per-Component vs. Centralized i18n: A New Approach with Intlayer"
|
|
5
|
-
description: A deep dive into internationalization strategies in React, comparing centralized, per-key, and per-component approaches, and introducing Intlayer.
|
|
6
|
-
keywords:
|
|
7
|
-
- i18n
|
|
8
|
-
- React
|
|
9
|
-
- Internationalization
|
|
10
|
-
- Intlayer
|
|
11
|
-
- Optimization
|
|
12
|
-
- Bundle Size
|
|
13
|
-
slugs:
|
|
14
|
-
- blog
|
|
15
|
-
- per-component-vs-centralized-i18n
|
|
16
|
-
author:
|
|
17
|
-
name: Aymeric PINEAU
|
|
18
|
-
github: aymericzip
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# Per-Component vs. Centralized i18n
|
|
22
|
-
|
|
23
|
-
I'm the creator of Intlayer, an i18n solution that takes a **per-component approach**.
|
|
24
|
-
|
|
25
|
-
The per-component approach isn't exactly new.
|
|
26
|
-
On the Vue side, `vue-i18n` has a ['Single File Components'](https://vue-i18n.intlify.dev/guide/advanced/sfc.html) approach.It also exists in Nuxt with per-component translations [here](https://i18n.nuxtjs.org/docs/guide/per-component-translations).
|
|
27
|
-
|
|
28
|
-
Even in a Flutter app, we can often find this pattern:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
lib/
|
|
32
|
-
├── features/
|
|
33
|
-
│ ├── login/
|
|
34
|
-
│ │ ├── login_screen.dart
|
|
35
|
-
│ │ └── login_screen.i18n.dart <- Translations live here
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
```dart
|
|
40
|
-
import 'package:i18n_extension/i18n_extension.dart';
|
|
41
|
-
|
|
42
|
-
extension Localization on String {
|
|
43
|
-
static var _t = Translations("en_us") +
|
|
44
|
-
{
|
|
45
|
-
"en_us": "Hello",
|
|
46
|
-
"pt_br": "Olá",
|
|
47
|
-
"es": "Hola",
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
String get i18n => localize(this, _t);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
However, in the React world, we mainly see different approaches, that I will group in three categories:
|
|
56
|
-
|
|
57
|
-
1. **Centralized approach** (i18next, next-intl, react-intl, lingui)
|
|
58
|
-
2. **Per-component approach** (Intlayer)
|
|
59
|
-
3. **Per-key approach** (inlang)
|
|
60
|
-
|
|
61
|
-
In this blog, I won't focus on compiler-based solutions, which I already covered here: [Compiler vs Declarative i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/en/compiler_vs_declarative_i18n.md).
|
|
62
|
-
Note that compiler-based i18n (e.g., Lingui) simply automates the extraction and loading of content. Under the hood, they often share the same limitations as the centralized approach.
|
|
63
|
-
|
|
64
|
-
So, what are the differences?
|
|
65
|
-
|
|
66
|
-
- **A Centralized approach** (with no namespaces) considers a single source to retrieve content. By default, you load the content from all pages when your app loads.
|
|
67
|
-
- **Per-component and Per-key approaches** fine-grain the content retrieval.
|
|
68
|
-
|
|
69
|
-
> Note that the more you fine-grain how you retrieve your content, the more you risk inserting additional state and logic into your components.
|
|
70
|
-
> For instance, a page can easily include 500 text nodes (`<p>`, `<span>`). A per-key approach will effectively insert 500 new component instances to handle the translation, each potentially using their own `useState`, `useEffect`, or `useContext`.
|
|
71
|
-
|
|
72
|
-
Here is a visualization of the trade-off:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
Count of useState / Overhead (100 blocks <p> / 10 components)
|
|
76
|
-
100 | x Per-key
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
...
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
10 | x Per-component
|
|
85
|
-
|
|
|
86
|
-
1 | x Centralized
|
|
87
|
-
|-------------------------------------------------------->
|
|
88
|
-
0 900 1000
|
|
89
|
-
% of unused content (Based on 10 unique pages)
|
|
90
|
-
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
In parallel, you should know that when you dynamically load your content (`await import()`), you end up with extra requests to your server. One extra `useState` or hook relates to one extra request to your server.
|
|
94
|
-
|
|
95
|
-
> To fix this point, Intlayer suggests grouping multiple content definitions under a same key, Intlayer will then merge that content.
|
|
96
|
-
|
|
97
|
-
### So why is the Centralized approach so popular?
|
|
98
|
-
|
|
99
|
-
- First, i18next was the first solution to become widely used, following an approach inspired by PHP and Java, which rely on a clear separation of concerns (MVP). i18next arrive even before the trend of frontend frameworks and component based architecture.
|
|
100
|
-
- Then, once a library is widely adopted, it becomes difficult to shift the ecosystem to other patterns.
|
|
101
|
-
- Using a centralized approach also makes things easier in Translation Management Systems such as Crowdin, Phrase, or Localized.
|
|
102
|
-
- The logic behind a per-component approach is more complex than a centralized one and takes extra time to develop, especially when you have to solve problems like identifying where the content is located.
|
|
103
|
-
|
|
104
|
-
### Okay, but why not just stick to a Centralized approach?
|
|
105
|
-
|
|
106
|
-
Let me tell you why it can be problematic for your app:
|
|
107
|
-
|
|
108
|
-
- **Unused Data:** When a page loads, you often load the content from all other pages. (In a 10-page app, that's 90% unused content loaded). You lazy load a modal? The i18n library doesn't care, it loads the strings first anyway.
|
|
109
|
-
- **Performance:** For each re-render, every single one of your components is hydrated with a massive JSON payload, which impacts your app's reactivity as it grows.
|
|
110
|
-
- **Maintenance:** Maintaining large JSON files is painful. You have to jump across files to insert a translation, ensuring no translations are missing and no **orphan keys** are left behind.
|
|
111
|
-
- **Design-system:** It creates incompatibility with design systems (e.g., a `LoginForm` component) and constrains component duplication across different apps.
|
|
112
|
-
|
|
113
|
-
**"But we invented Namespaces!"**
|
|
114
|
-
|
|
115
|
-
Sure, and that's an massive move forward. Let's look at the comparison of the main bundle size of a Vite + React + React Router v7 + Intlayer setup. We simulated a 20-page application.
|
|
116
|
-
|
|
117
|
-
The first example does not include lazy-loaded translations per locale and no namespace splitting. The second includes content purging + dynamic loading for translations.
|
|
118
|
-
|
|
119
|
-
| Optimized bundle | Bundle not optimized |
|
|
120
|
-
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
121
|
-
|  |  |
|
|
122
|
-
|
|
123
|
-
So thanks for namespaces, we moved from this structure:
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
locale/
|
|
127
|
-
├── en.json
|
|
128
|
-
├── fr.json
|
|
129
|
-
├── es.json
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
To this one:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
locale/
|
|
137
|
-
├── en/
|
|
138
|
-
│ ├── common.json
|
|
139
|
-
│ ├── navbar.json
|
|
140
|
-
│ ├── footer.json
|
|
141
|
-
│ ├── home.json
|
|
142
|
-
│ ├── about.json
|
|
143
|
-
├── fr/
|
|
144
|
-
│ ├── ...
|
|
145
|
-
├── es/
|
|
146
|
-
│ ├── ...
|
|
147
|
-
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Now you have to finely manage what part of your app content should be loaded, and where. Conclusion, 90% of projects just skip this part due to the complexity (see [next-i18next guide](https://github.com/aymericzip/intlayer/blob/main/docs/blog/en/i18n_using_next-i18next.md) for instance to see the challenges that represents (just) following good practices).
|
|
151
|
-
Consequently, 95% of projects end up with the massive JSON loading problem explained earlier.
|
|
152
|
-
|
|
153
|
-
However, not all per-component approaches solve this. For instance, `vue-i18n`'s approach does not inherently lazy load the translations, so you face the same bundle issues.
|
|
154
|
-
Moreover, without proper separation of concerns, it becomes much more difficult to extract and provide your translations to translators for review.
|
|
155
|
-
|
|
156
|
-
### How Intlayer's per-component approach solves this
|
|
157
|
-
|
|
158
|
-
Intlayer proceeds in several steps:
|
|
159
|
-
|
|
160
|
-
1. **Declaration:** Declare your content anywhere in your codebase using `.content.{ts|jsx|cjs|json|json5|...}` files. This ensures separation of concerns while keeping content colocated. A content file can be per-locale or multilingual.
|
|
161
|
-
2. **Processing:** Intlayer runs a build step to process JS logic, handle missing translation fallbacks, generate TypeScript types, manage duplicated content, and fetch content from your CMS, and more.
|
|
162
|
-
3. **Purging:** When your app builds, Intlayer purges unused content (a bit like how Tailwind manages your classes) by replacing the content as follows:
|
|
163
|
-
|
|
164
|
-
**Declaration:**
|
|
165
|
-
|
|
166
|
-
```tsx
|
|
167
|
-
// src/MyComponent.tsx
|
|
168
|
-
export const MyComponent = () => {
|
|
169
|
-
const content = useIntlayer("my-key");
|
|
170
|
-
return <h1>{content.title}</h1>;
|
|
171
|
-
};
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
```tsx
|
|
175
|
-
// src/myComponent.content.ts
|
|
176
|
-
export const {
|
|
177
|
-
key: "my-key",
|
|
178
|
-
content: t({
|
|
179
|
-
en: { title: "My title" },
|
|
180
|
-
fr: { title: "Mon titre" }
|
|
181
|
-
})
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
**Processing:** Intlayer builds the dictionary based on the `.content` file and generates:
|
|
187
|
-
|
|
188
|
-
```json5
|
|
189
|
-
// .intlayer/dynamic_dictionary/en/my-key.json
|
|
190
|
-
{
|
|
191
|
-
"key": "my-key",
|
|
192
|
-
"content": { "title": "My title" },
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**Replacement:** intlayer extracts your component during the application build.
|
|
197
|
-
|
|
198
|
-
**- Static Import Mode:**
|
|
199
|
-
|
|
200
|
-
```tsx
|
|
201
|
-
// Representation of the component in JSX-like syntax
|
|
202
|
-
export const MyComponent = () => {
|
|
203
|
-
const content = useDictionary({
|
|
204
|
-
key: "my-key",
|
|
205
|
-
content: {
|
|
206
|
-
nodeType: "translation",
|
|
207
|
-
translation: {
|
|
208
|
-
en: { title: "My title" },
|
|
209
|
-
fr: { title: "Mon titre" },
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
return <h1>{content.title}</h1>;
|
|
215
|
-
};
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
**- Dynamic Import Mode:**
|
|
219
|
-
|
|
220
|
-
```tsx
|
|
221
|
-
// Representation of the component in JSX-like syntax
|
|
222
|
-
export const MyComponent = () => {
|
|
223
|
-
const content = useDictionaryAsync({
|
|
224
|
-
en: () =>
|
|
225
|
-
import(".intlayer/dynamic_dictionary/en/my-key.json", {
|
|
226
|
-
with: { type: "json" },
|
|
227
|
-
}).then((mod) => mod.default),
|
|
228
|
-
// Same for other languages
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
return <h1>{content.title}</h1>;
|
|
232
|
-
};
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
> `useDictionaryAsync` uses a Suspense-like mechanism to load the localized JSON only when needed.
|
|
236
|
-
|
|
237
|
-
**Key benefits of this per-component approach:**
|
|
238
|
-
|
|
239
|
-
- Keeping your content declaration close to your components allows better maintainability (e.g moving a components to another app or design system. Deleting the component folder remove the related content too, as you probably already do for your `.test`, `.stories`)
|
|
240
|
-
|
|
241
|
-
- A per-component approach prevents AI agents from needing to jump across all your different files. It treats all translations in one place, limiting the complexity of the task, and the amount of tokens used.
|
|
242
|
-
|
|
243
|
-
### Limitations
|
|
244
|
-
|
|
245
|
-
Of course, this approach comes with trade-offs:
|
|
246
|
-
|
|
247
|
-
- It is harder to connect to other l10n systems and extra tooling.
|
|
248
|
-
- You get locked in (which is basically already the case with any i18n solution due to their specific syntax).
|
|
249
|
-
|
|
250
|
-
That's the reason why Intlayer tries to provide a complete toolset for i18n (100% free and OSS), including AI translation using your own AI Provider and API keys. Intlayer also provides tooling to synchronize your JSON, functioning like ICU / vue-i18n / i18next message formatters to map the content to their specific formats.
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
Is it overkill? Or will it become the next Tailwind for content?
|
|
255
|
-
I'm happy to take your honest feedback about it. Your objections really help me build a better product.
|