@intlayer/docs 9.5.3 → 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 +8 -8
- 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/is_i18next_outdated.md +5 -1
- package/blog/ar/is_next-intl_outdated.md +5 -1
- package/blog/ar/is_vue-i18n_outdated.md +7 -1
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
- package/blog/ar/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/de/is_next-intl_outdated.md +5 -1
- package/blog/de/is_vue-i18n_outdated.md +7 -1
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/en/is_next-intl_outdated.md +5 -1
- package/blog/en/is_vue-i18n_outdated.md +7 -1
- package/blog/en/list_i18n_technologies/frameworks/react-router.md +2 -3
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/en/per-component_vs_centralized_i18n.md +9 -4
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/en-GB/is_next-intl_outdated.md +5 -1
- package/blog/en-GB/is_vue-i18n_outdated.md +7 -1
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/en-GB/per-component_vs_centralized_i18n.md +9 -4
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/es/is_next-intl_outdated.md +5 -1
- package/blog/es/is_vue-i18n_outdated.md +7 -1
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/fr/is_next-intl_outdated.md +5 -1
- package/blog/fr/is_vue-i18n_outdated.md +7 -1
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/hi/is_next-intl_outdated.md +5 -1
- package/blog/hi/is_vue-i18n_outdated.md +7 -1
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
- package/blog/hi/per-component_vs_centralized_i18n.md +9 -4
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/id/is_next-intl_outdated.md +5 -1
- package/blog/id/is_vue-i18n_outdated.md +7 -1
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/id/per-component_vs_centralized_i18n.md +9 -4
- package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/it/is_next-intl_outdated.md +5 -1
- package/blog/it/is_vue-i18n_outdated.md +7 -1
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/ja/is_next-intl_outdated.md +5 -1
- package/blog/ja/is_vue-i18n_outdated.md +7 -1
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/ja/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/ko/is_next-intl_outdated.md +5 -1
- package/blog/ko/is_vue-i18n_outdated.md +7 -1
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/ko/per-component_vs_centralized_i18n.md +9 -4
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/pl/is_next-intl_outdated.md +5 -1
- package/blog/pl/is_vue-i18n_outdated.md +7 -1
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/pl/per-component_vs_centralized_i18n.md +9 -4
- package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/pt/is_next-intl_outdated.md +5 -1
- package/blog/pt/is_vue-i18n_outdated.md +7 -1
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/ru/is_next-intl_outdated.md +5 -1
- package/blog/ru/is_vue-i18n_outdated.md +7 -1
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
- 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/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/is_i18next_outdated.md +5 -1
- package/blog/tr/is_next-intl_outdated.md +5 -1
- package/blog/tr/is_vue-i18n_outdated.md +7 -1
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/tr/per-component_vs_centralized_i18n.md +9 -4
- package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/uk/is_next-intl_outdated.md +5 -1
- package/blog/uk/is_vue-i18n_outdated.md +7 -1
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/uk/per-component_vs_centralized_i18n.md +9 -4
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/vi/is_next-intl_outdated.md +5 -1
- package/blog/vi/is_vue-i18n_outdated.md +7 -1
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/vi/per-component_vs_centralized_i18n.md +9 -4
- package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- 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/is_i18next_outdated.md +5 -1
- package/blog/zh/is_next-intl_outdated.md +5 -1
- package/blog/zh/is_vue-i18n_outdated.md +7 -1
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
- package/blog/zh/per-component_vs_centralized_i18n.md +9 -4
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
- package/dist/cjs/generated/blog.entry.cjs +80 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/esm/generated/blog.entry.mjs +80 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/types/generated/blog.entry.d.ts +4 -0
- package/dist/types/generated/blog.entry.d.ts.map +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 +6 -6
- 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 +21 -21
- 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 +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/de/how_works_intlayer.md +2 -2
- package/docs/de/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/en/how_works_intlayer.md +2 -2
- package/docs/en/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/en-GB/how_works_intlayer.md +2 -2
- package/docs/en-GB/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/es/how_works_intlayer.md +2 -2
- package/docs/es/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/fr/how_works_intlayer.md +2 -2
- package/docs/fr/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/hi/how_works_intlayer.md +2 -2
- package/docs/hi/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/id/how_works_intlayer.md +2 -2
- package/docs/id/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/it/how_works_intlayer.md +2 -2
- package/docs/it/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/ja/how_works_intlayer.md +2 -2
- package/docs/ja/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/ko/how_works_intlayer.md +2 -2
- package/docs/ko/interest_of_intlayer.md +6 -6
- 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 +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/pl/how_works_intlayer.md +2 -2
- package/docs/pl/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/pt/how_works_intlayer.md +2 -2
- package/docs/pt/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/ru/how_works_intlayer.md +2 -2
- package/docs/ru/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/tr/how_works_intlayer.md +2 -2
- package/docs/tr/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/uk/how_works_intlayer.md +2 -2
- package/docs/uk/interest_of_intlayer.md +6 -6
- 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 +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/vi/how_works_intlayer.md +2 -2
- package/docs/vi/interest_of_intlayer.md +6 -6
- 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/bundle_optimization.md +5 -1
- package/docs/zh/how_works_intlayer.md +2 -2
- package/docs/zh/interest_of_intlayer.md +6 -6
- 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 +6 -6
- package/docs/zh-TW/intlayer_with_angular_21.md +1 -1
- package/docs/zh-TW/introduction.md +0 -1
- package/package.json +8 -7
- package/src/generated/blog.entry.ts +80 -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,457 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-16
|
|
3
|
+
updatedAt: 2026-09-16
|
|
4
|
+
title: "2026年に最適なSvelte i18nライブラリを選ぶ方法"
|
|
5
|
+
description: SvelteおよびSvelteKitの国際化(i18n)に関する意思決定ガイド。svelte-i18n、Paraglide、typesafe-i18n、wuchale、Intlayerを比較する前に答えるべき質問と、バンドルサイズ、型定義、SSR安全性における各選択肢のコストを解説します。
|
|
6
|
+
keywords:
|
|
7
|
+
- svelte i18n
|
|
8
|
+
- sveltekit i18n
|
|
9
|
+
- svelte 国際化
|
|
10
|
+
- svelte-i18n
|
|
11
|
+
- Paraglide
|
|
12
|
+
- typesafe-i18n
|
|
13
|
+
- wuchale
|
|
14
|
+
- Intlayer
|
|
15
|
+
- i18n ライブラリ比較
|
|
16
|
+
slugs:
|
|
17
|
+
- blog
|
|
18
|
+
- how-to-pick-svelte-i18n-library
|
|
19
|
+
author: aymericzip
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# 最適なSvelte i18nライブラリを選ぶ方法
|
|
23
|
+
|
|
24
|
+
Svelteにはi18n用の機能が標準で用意されていません。`$t`も、ロケールプリミティブも、メッセージフォーマットもありません。すべての選択肢がサードパーティ製であり、Svelteエコシステムはコンパイル時i18nが最も進んでいる領域であるため、各候補の違いはReactやVue以上に大きくなります。
|
|
25
|
+
|
|
26
|
+
本ガイドでは、まず確認すべき質問事項を整理し、それらに基づいて`svelte-i18n`、Paraglide、`typesafe-i18n`、`wuchale`、Intlayerを、Vite + SvelteおよびSvelteKitの両方の環境で比較・マッピングしていきます。
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
## 目次
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
33
|
+
|
|
34
|
+
## ライブラリを比較する前に答えるべき6つの質問
|
|
35
|
+
|
|
36
|
+
1. **Vite SPAか、SvelteKitか?** SPAであればモジュールレベルのストアで問題ありません。1つのタブ、1人のユーザー、1つのロケールで完結するからです。しかしSvelteKitでは、同じシングルトンがサーバー上の並行リクエスト間で共有されてしまい、リクエストBがリクエストAの言語でレンダリングされてしまう危険があります。ライブラリがリクエストごとの分離機構(コンテキストや`locals`)を提供しているか、あるいは開発者自身で実装する必要があります。
|
|
37
|
+
2. **誰が翻訳を作成するか?** 開発者か、TMS(翻訳管理システム)か、ICU形式を納品する翻訳会社か、それともAIパイプラインか。`svelte-i18n`はICUに対応しています。Paraglideと`typesafe-i18n`は独自の構文を使用します。翻訳フローに合ったフォーマットを選びましょう。
|
|
38
|
+
3. **ロケール数とページ数はどのくらいか?** 2つのロケールと5ページ程度であれば、すべてをまとめて配信できます。10ロケールと40ルートがある場合はそれが不可能になり、ランタイムカタログとコンパイル済みメッセージの差が最大のコスト要因になります。
|
|
39
|
+
4. **キーの型安全性は必要か?** `svelte-i18n`では`$_("cart.totl")`のようなタイポは実行時エラー(またはフォールバック)になります。コンパイル時ライブラリは構造上これを型エラーとして検出します。
|
|
40
|
+
5. **Svelte 4のストアか、Svelte 5のRunesか?** Runesはロケール状態の構文を変えるものであり、共有問題そのものを解決するわけではありません。ただし、`.ts`ファイル内の`$state`は単純な変数にコンパイルされるため、Svelte 5を使用している場合はライブラリのランタイムがRuneに対応している必要があります。
|
|
41
|
+
6. **リポジトリ内に生成ファイルが含まれても問題ないか?** Paraglideと`typesafe-i18n`は、ソースツリー内にJavaScriptまたはTypeScriptを生成します。これを許容できるチームもあれば、並行ブランチごとにマージコンフリクトが発生して困るチームもあります。
|
|
42
|
+
|
|
43
|
+
回答を書き出してみてください。以降の内容はすべてこれらの項目を前提に進めます。
|
|
44
|
+
|
|
45
|
+
## 1枚の図で見る全体像
|
|
46
|
+
|
|
47
|
+
Svelteのi18nはReactやVueよりも後に登場したため、初期の段階をスキップして直接コンパイル時の波へと進みました。
|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
<AccordionGroup>
|
|
52
|
+
<Accordion header="ランタイム辞書(2019年〜2020年): svelte-i18n, sveltekit-i18n">
|
|
53
|
+
|
|
54
|
+
JSONカタログを使用し、`intl-messageformat`経由でブラウザ内でICUをパースし、モジュールレベルのストア(`$locale`, `$_`)でロケールを保持します。最も普及しておりドキュメントも豊富ですが、SSRの連携は自前で構築する必要があります。
|
|
55
|
+
|
|
56
|
+
</Accordion>
|
|
57
|
+
<Accordion header="生成された型(2020年〜2022年): typesafe-i18n">
|
|
58
|
+
|
|
59
|
+
ジェネレーターがカタログを監視し、型付きアクセサ(`$LL.cart.total()`)を出力します。優れたモデルですが、リポジトリ内にファイルが生成され、最近はリポジトリの更新があまり活発ではありません。
|
|
60
|
+
|
|
61
|
+
</Accordion>
|
|
62
|
+
<Accordion header="コンパイラとコロケーション(2022年〜2026年): Paraglide, wuchale, Intlayer">
|
|
63
|
+
|
|
64
|
+
Paraglideは各メッセージをエクスポート関数にコンパイルし、ルートが呼び出さないメッセージをバンドラーがツリーシェイキングできるようにします。`wuchale`はビルド時にマークアップから文字列を抽出します。Intlayerはコンポーネントごとにコンテンツを宣言し、型とコンポーネントごとの辞書を生成します。
|
|
65
|
+
|
|
66
|
+
</Accordion>
|
|
67
|
+
</AccordionGroup>
|
|
68
|
+
|
|
69
|
+
各世代の詳細については、[JavaScript i18nの歴史](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/history_of_i18n.md)で詳しく解説しています。
|
|
70
|
+
|
|
71
|
+
## 最も重要な意思決定: コンテンツの配置場所と読み込みタイミング
|
|
72
|
+
|
|
73
|
+
構成におけるバンドルサイズの差の大部分は、主に2つの構造的な選択によって決まります。
|
|
74
|
+
|
|
75
|
+
- **集中管理か、コンポーネントごとのスコープ管理か。** アプリ全体で1つの`locales/en.json`を持つか、コンポーネントごとに1つの宣言を持つか。
|
|
76
|
+
- **静的インポートか、動的インポートか。** 起動時にすべて読み込むか、アクティブなロケール(理想的にはアクティブなルートも)をオンデマンドで取得するか。
|
|
77
|
+
|
|
78
|
+
以下のグラフは、1〜10ページ、1〜10ロケール、1ページあたり約30 KBのテキストを持つ理論上のアプリにおけるペイロードの推定値を示しています。
|
|
79
|
+
|
|
80
|
+

|
|
81
|
+
|
|
82
|
+
`svelte-i18n`はデフォルトで左上に位置します。`register("fr", () => import("./fr.json"))`によりロケールごとの動的読み込みは可能ですが、ロケールカタログは1つのオブジェクトであるため、それを読み込むと全ページのテキストが読み込まれます。Paraglideは興味深いケースです。すべてのメッセージが個別のエクスポートとなるため、ツリーシェイキングによってページ軸の最適化が無償で得られます。[Svelteベンチマーク](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/benchmark/svelte.md)でも、Vite + Svelte環境で期待通りに機能することが確認されています(ReactやNext.jsのベンチマークでは機能しませんでした)。Intlayerはコンポーネントごとの宣言によって同じ領域に到達します。
|
|
83
|
+
|
|
84
|
+
質問3の回答が「多くのページがある」だった場合は、APIの好みよりもこのセクションを重視してください。[コンポーネント単位 vs 集中管理型 i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/per-component_vs_centralized_i18n.md)の記事では、このトレードオフのメンテナンス面について解説しています。
|
|
85
|
+
|
|
86
|
+
## 比較対象の候補
|
|
87
|
+
|
|
88
|
+
ライブラリのサイズは、10ページ・10ロケールのアプリを対象にした[Svelteベンチマーク](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/benchmark/svelte.md)(バンドル、ツリーシェイキング、minify後の空コンポーネントにおけるストア+アクセサ)の数値です。コンテンツのサイズは個別に測定しています。
|
|
89
|
+
|
|
90
|
+
| ライブラリ | メッセージの配置場所 | ロケール状態 | 型安全性 | メッセージフォーマット | ルートごとの分割 | ライブラリサイズ |
|
|
91
|
+
| :-------------- | :----------------------------------- | :----------------------------------------- | :------------------------------- | :---------------------------- | :----------------------------- | :----------------------------------------------- |
|
|
92
|
+
| `svelte-i18n` | ロケールごとのJSONカタログ | モジュールレベルのSvelteストア | 2/5 — 手動Union型 | ICU | なし | 約16.6 kB |
|
|
93
|
+
| `typesafe-i18n` | 生成されたTSモジュール | ストアアダプター | 4/5 — 自動生成 | 独自構文 | 一部対応 | 軽量 |
|
|
94
|
+
| Paraglide | inlangプロジェクト、関数へコンパイル | Cookie、URL、Storageから呼び出しごとに取得 | 3.5/5 — 自動生成 | 独自構文 | あり(ツリーシェイキング経由) | ほぼゼロ(コードベースに生成されるコードのため) |
|
|
95
|
+
| `wuchale` | ビルド時にマークアップから抽出 | ストア | 該当なし(キーなし) | 独自構文 | あり | 約30.7 kB |
|
|
96
|
+
| Intlayer | コンポーネント隣の`.content.ts` | コンテキスト+ストア、Rune対応 | 5/5 — 自動生成、デフォルトで有効 | Intlayer (+ ICU, i18next, PO) | あり(コンポーネント単位) | ~3.6 kB |
|
|
97
|
+
|
|
98
|
+
> 数値はベンチマーク実施バージョンのスナップショットです。サイズだけで判断する前に、実際のアプリで計測してください。
|
|
99
|
+
> 型安全性:5/5は、URLフォーマッターやヘルパーを含め、キー・パラメータ・すべてのロケールが手動設定なしに検証されることを意味します。
|
|
100
|
+
|
|
101
|
+
Paraglideのライブラリサイズがほぼゼロである理由は構造によるものです。ランタイムがリポジトリ内に直接生成されます。Intlayerは`vite-intlayer`を必要とするため、ビルドステップなしでは動作しません。
|
|
102
|
+
|
|
103
|
+
## 回答に合ったライブラリを選ぶ
|
|
104
|
+
|
|
105
|
+
<AccordionGroup>
|
|
106
|
+
<Accordion header="Vite SPA、小規模チーム、少数のロケール">
|
|
107
|
+
|
|
108
|
+
`svelte-i18n`。最もドキュメントが充実した選択肢であり、`$_`はマークアップ内で自然に読め、`register`と`waitLocale()`によりロケールごとの遅延ロードがカバーされます。初回ペイントを`isLoading`で制御しないと、生のキーが一瞬表示(フラッシュ)されてしまいます。将来的にサーバー(SSR)を導入する可能性がある場合は、モジュールストアに頼るのではなく、初日からロケールをSvelteコンテキストに配置してください。今ならコストはかからず、本番環境でのみ発生するバグを未然に防ぐことができます。
|
|
109
|
+
|
|
110
|
+
</Accordion>
|
|
111
|
+
<Accordion header="ロケールルーティングとSSRを伴うSvelteKit">
|
|
112
|
+
|
|
113
|
+
共有問題が決定打となります。`svelte-i18n`はSvelteKitでも動作しますが、リクエストごとの連携(`hooks.server.ts`、`locals`、`load`、そして`setContext`)は自前で記述する必要があり、微妙なミスが起きやすいです。Paraglideはルーティングを処理し呼び出しごとにロケールを読み取るSvelteKit統合を提供しており、シングルトンの問題を回避できます。Intlayerは`load`データからコンテキストへとロケールを設定します。[SvelteKit i18nの記事](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/list_i18n_technologies/frameworks/sveltekit.md)では`[[lang]]`と`reroute`の選択について解説しています。ライブラリを選ぶ前に決めておきましょう。
|
|
114
|
+
|
|
115
|
+
</Accordion>
|
|
116
|
+
<Accordion header="翻訳がTMSまたはICUを納品する翻訳会社から提供される場合">
|
|
117
|
+
|
|
118
|
+
`svelte-i18n`は`intl-messageformat`によるネイティブなICU対応を備えているため、多くのベンダーと直接連携できます。Paraglideと`typesafe-i18n`は独自の構文を使用しているため変換が必要です。IntlayerのICUサポートは部分的なものにとどまるため、現在ICU文字列を受け取っている場合はブロッカー(採用を見送る理由)として扱う必要があります。
|
|
119
|
+
|
|
120
|
+
</Accordion>
|
|
121
|
+
<Accordion header="バンドルサイズが最優先の制約である場合">
|
|
122
|
+
|
|
123
|
+
コンパイル時ライブラリ。ParaglideのツリーシェイキングはVite + Svelteで効果的に機能し、ライブラリコストはほぼゼロです。Intlayerのコンポーネントごとの辞書も、リポジトリ内にファイルを生成することなく同様の結果をもたらします。`svelte-i18n`はICUパーサーとカタログ全体を同梱するため、コンテンツを含める前のベンチマーク段階で`svelte-intlayer`の約4.5倍のサイズになります。
|
|
124
|
+
|
|
125
|
+
</Accordion>
|
|
126
|
+
<Accordion header="型安全性が必須である場合">
|
|
127
|
+
|
|
128
|
+
素の`svelte-i18n`以外のすべてです。`svelte-i18n`での唯一の型付けは手書きのUnion型であり、JSONとすぐに乖離してしまいます。`typesafe-i18n`、Paraglide、Intlayerはいずれもコンテンツから型を自動生成します。コードベースをコミットする前に`typesafe-i18n`のリポジトリのアクティビティを確認してください。[不足している翻訳の検出](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/detecting_missing_translations.md)の記事では、ビルド時にそれぞれが何を検知できるかを比較しています。
|
|
129
|
+
|
|
130
|
+
</Accordion>
|
|
131
|
+
<Accordion header="リポジトリ内に生成ファイルを置きたくない場合">
|
|
132
|
+
|
|
133
|
+
Paraglideと`typesafe-i18n`は候補から外れます。`svelte-i18n`とIntlayerは出力を`node_modules`またはビルドディレクトリ内に保持します。Intlayerの場合、`.content.ts`ファイルは手書きのソースコードであり、コンパイルされた辞書と型は`.intlayer/`内に配置されgitignoreされます。
|
|
134
|
+
|
|
135
|
+
</Accordion>
|
|
136
|
+
<Accordion header="翻訳をAIで生成する場合">
|
|
137
|
+
|
|
138
|
+
集中管理されたJSONを維持する理由はなくなります。コロケーションされたコンテンツと、不足しているロケールを補完するCLIを組み合わせるのが近道です。Intlayerの`fill`コマンドは自身のAPIキー(OpenAI、Anthropic、Mistral、Gemini)で動作し、変更された部分のみを再翻訳します。Paraglideのinlangエコシステムでも、独自のプランを持つホスト型同等機能が提供されています。
|
|
139
|
+
|
|
140
|
+
</Accordion>
|
|
141
|
+
</AccordionGroup>
|
|
142
|
+
|
|
143
|
+
## 各ライブラリの弱点・課題
|
|
144
|
+
|
|
145
|
+
- **`svelte-i18n`**: 最も重く、キーの型がなく、ルートごとの分割がなく、コンテキストを自前で接続しない限りSvelteKit上でリクエストをまたいで共有ストアがリークする。
|
|
146
|
+
- **`typesafe-i18n`**: ウォッチャープロセスが必要で、リポジトリ内にファイルが生成され、最近リポジトリの動きがあまりない。
|
|
147
|
+
- **Paraglide**: リポジトリにコミットされプッシュごとに再生成される生成ファイル、並行ブランチでのマージコンフリクト、ストアからではなくメッセージ呼び出しごとにCookieやストレージからロケールを読み取るためロケール変更時の処理コストがかかる。
|
|
148
|
+
- **`wuchale`**: マークアップ抽出という興味深いアイデアだが、まだ初期段階。Reactベンチマークではプロバイダーの再レンダリングを強制する必要があるリアクティビティの問題が発生し、ドキュメントも少ない。
|
|
149
|
+
- **Intlayer**: 必須のビルドプラグイン、比較的小さなエコシステム、部分的なICUサポート、そして設計上コンテンツがコードベース全体に分散しているため翻訳者向けに1つのJSONをエクスポートするにはツールが必要。
|
|
150
|
+
|
|
151
|
+
## 各選択肢のコード例
|
|
152
|
+
|
|
153
|
+
タイトルと複数形を含む同じカート概要コンポーネントを、各候補で記述した例です。注目すべきはマークアップではなく、コンテンツがどこに配置され、ロケールがどのように保持され、型チェッカーが何を把握しているかです。
|
|
154
|
+
|
|
155
|
+
<Tabs defaultTab="svelte-i18n">
|
|
156
|
+
<Tab label="svelte-i18n" value="svelte-i18n">
|
|
157
|
+
|
|
158
|
+
<Tabs group="locale">
|
|
159
|
+
<Tab value="en" label="英語">
|
|
160
|
+
|
|
161
|
+
```json fileName="src/locales/en.json"
|
|
162
|
+
{
|
|
163
|
+
"cart": {
|
|
164
|
+
"title": "Your cart",
|
|
165
|
+
"items": "{count, plural, one {# item} other {# items}}"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
</Tab>
|
|
171
|
+
<Tab value="fr" label="フランス語">
|
|
172
|
+
|
|
173
|
+
```json fileName="src/locales/fr.json"
|
|
174
|
+
{
|
|
175
|
+
"cart": {
|
|
176
|
+
"title": "Votre panier",
|
|
177
|
+
"items": "{count, plural, one {# article} other {# articles}}"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
</Tab>
|
|
183
|
+
<Tab value="es" label="スペイン語">
|
|
184
|
+
|
|
185
|
+
```json fileName="src/locales/es.json"
|
|
186
|
+
{
|
|
187
|
+
"cart": {
|
|
188
|
+
"title": "Tu carrito",
|
|
189
|
+
"items": "{count, plural, one {# artículo} other {# artículos}}"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
</Tab>
|
|
195
|
+
</Tabs>
|
|
196
|
+
|
|
197
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
198
|
+
<script lang="ts">
|
|
199
|
+
import { _ } from "svelte-i18n";
|
|
200
|
+
|
|
201
|
+
let { count }: { count: number } = $props();
|
|
202
|
+
</script>
|
|
203
|
+
|
|
204
|
+
<section>
|
|
205
|
+
<h2>{$_("cart.title")}</h2>
|
|
206
|
+
<p>{$_("cart.items", { values: { count } })}</p>
|
|
207
|
+
</section>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
`intl-messageformat`によるICU、モジュールレベルのストアで保持されるロケール。`$_`は任意の文字列を受け付けます。型付けは手書きのUnion型のみです。
|
|
211
|
+
|
|
212
|
+
</Tab>
|
|
213
|
+
<Tab label="Paraglide" value="paraglide">
|
|
214
|
+
|
|
215
|
+
<Tabs group="locale">
|
|
216
|
+
<Tab value="en" label="英語">
|
|
217
|
+
|
|
218
|
+
```json fileName="messages/en.json"
|
|
219
|
+
{
|
|
220
|
+
"cart_title": "Your cart",
|
|
221
|
+
"cart_items": "{count} items"
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
</Tab>
|
|
226
|
+
<Tab value="fr" label="フランス語">
|
|
227
|
+
|
|
228
|
+
```json fileName="messages/fr.json"
|
|
229
|
+
{
|
|
230
|
+
"cart_title": "Votre panier",
|
|
231
|
+
"cart_items": "{count} articles"
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
</Tab>
|
|
236
|
+
<Tab value="es" label="スペイン語">
|
|
237
|
+
|
|
238
|
+
```json fileName="messages/es.json"
|
|
239
|
+
{
|
|
240
|
+
"cart_title": "Tu carrito",
|
|
241
|
+
"cart_items": "{count} artículos"
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
</Tab>
|
|
246
|
+
</Tabs>
|
|
247
|
+
|
|
248
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
249
|
+
<script lang="ts">
|
|
250
|
+
import { m } from "$lib/paraglide/messages.js";
|
|
251
|
+
|
|
252
|
+
let { count }: { count: number } = $props();
|
|
253
|
+
</script>
|
|
254
|
+
|
|
255
|
+
<section>
|
|
256
|
+
<h2>{m.cart_title()}</h2>
|
|
257
|
+
<p>{m.cart_items({ count })}</p>
|
|
258
|
+
</section>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
すべてのメッセージが生成された型付き関数であり、呼び出されなければツリーシェイキングされます。`paraglide/`フォルダーはリポジトリ内に生成され、ロケールはストアからではなく呼び出しごとに読み取られます。
|
|
262
|
+
|
|
263
|
+
</Tab>
|
|
264
|
+
<Tab label="typesafe-i18n" value="typesafe-i18n">
|
|
265
|
+
|
|
266
|
+
<Tabs group="locale">
|
|
267
|
+
<Tab value="en" label="英語">
|
|
268
|
+
|
|
269
|
+
```ts fileName="src/i18n/en/index.ts"
|
|
270
|
+
import type { BaseTranslation } from "../i18n-types";
|
|
271
|
+
|
|
272
|
+
const en = {
|
|
273
|
+
cart: {
|
|
274
|
+
title: "Your cart",
|
|
275
|
+
items: "{count} item{{s}}",
|
|
276
|
+
},
|
|
277
|
+
} satisfies BaseTranslation;
|
|
278
|
+
|
|
279
|
+
export default en;
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
</Tab>
|
|
283
|
+
<Tab value="fr" label="フランス語">
|
|
284
|
+
|
|
285
|
+
```ts fileName="src/i18n/fr/index.ts"
|
|
286
|
+
import type { Translation } from "../i18n-types";
|
|
287
|
+
|
|
288
|
+
const fr = {
|
|
289
|
+
cart: {
|
|
290
|
+
title: "Votre panier",
|
|
291
|
+
items: "{count} article{{s}}",
|
|
292
|
+
},
|
|
293
|
+
} satisfies Translation;
|
|
294
|
+
|
|
295
|
+
export default fr;
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
</Tab>
|
|
299
|
+
<Tab value="es" label="スペイン語">
|
|
300
|
+
|
|
301
|
+
```ts fileName="src/i18n/es/index.ts"
|
|
302
|
+
import type { Translation } from "../i18n-types";
|
|
303
|
+
|
|
304
|
+
const es = {
|
|
305
|
+
cart: {
|
|
306
|
+
title: "Tu carrito",
|
|
307
|
+
items: "{count} artículo{{s}}",
|
|
308
|
+
},
|
|
309
|
+
} satisfies Translation;
|
|
310
|
+
|
|
311
|
+
export default es;
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
</Tab>
|
|
315
|
+
</Tabs>
|
|
316
|
+
|
|
317
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
318
|
+
<script lang="ts">
|
|
319
|
+
import LL from "$i18n/i18n-svelte";
|
|
320
|
+
|
|
321
|
+
let { count }: { count: number } = $props();
|
|
322
|
+
</script>
|
|
323
|
+
|
|
324
|
+
<section>
|
|
325
|
+
<h2>{$LL.cart.title()}</h2>
|
|
326
|
+
<p>{$LL.cart.items({ count })}</p>
|
|
327
|
+
</section>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
ウォッチャープロセスによって生成される型付きアクセサ。モデルは堅牢ですが、生成ファイルがリポジトリ内に存在し、プロジェクトは最近静かです。
|
|
331
|
+
|
|
332
|
+
</Tab>
|
|
333
|
+
<Tab label="Intlayer" value="intlayer">
|
|
334
|
+
|
|
335
|
+
```ts fileName="src/lib/cartSummary.content.ts"
|
|
336
|
+
import { plural, t, type Dictionary } from "intlayer";
|
|
337
|
+
|
|
338
|
+
const cartSummaryContent = {
|
|
339
|
+
key: "cart-summary",
|
|
340
|
+
content: {
|
|
341
|
+
title: t({
|
|
342
|
+
ja: "ショッピングカート",
|
|
343
|
+
en: "Your cart",
|
|
344
|
+
fr: "Votre panier",
|
|
345
|
+
es: "Tu carrito",
|
|
346
|
+
}),
|
|
347
|
+
items: t({
|
|
348
|
+
ja: plural({
|
|
349
|
+
one: "{{count}}個のアイテム",
|
|
350
|
+
other: "{{count}}個のアイテム",
|
|
351
|
+
}),
|
|
352
|
+
en: plural({ one: "{{count}} item", other: "{{count}} items" }),
|
|
353
|
+
fr: plural({ one: "{{count}} article", other: "{{count}} articles" }),
|
|
354
|
+
es: plural({ one: "{{count}} artículo", other: "{{count}} artículos" }),
|
|
355
|
+
}),
|
|
356
|
+
},
|
|
357
|
+
} satisfies Dictionary;
|
|
358
|
+
|
|
359
|
+
export default cartSummaryContent;
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
363
|
+
<script lang="ts">
|
|
364
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
365
|
+
|
|
366
|
+
let { count }: { count: number } = $props();
|
|
367
|
+
const content = useIntlayer("cart-summary");
|
|
368
|
+
</script>
|
|
369
|
+
|
|
370
|
+
<section>
|
|
371
|
+
<h2>{$content.title}</h2>
|
|
372
|
+
<p>{$content.items(count)}</p>
|
|
373
|
+
</section>
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
全ロケールがコンポーネントの隣にある1つのファイルに記述されます。`useIntlayer`は読み取り可能なストアを返すため、`$content`はお馴染みの自動購読(auto-subscription)となり、ロケールはモジュールシングルトンではなくコンテキスト(SSRセーフ)で保持されます。
|
|
377
|
+
|
|
378
|
+
</Tab>
|
|
379
|
+
</Tabs>
|
|
380
|
+
|
|
381
|
+
すでに`svelte-i18n`を使用している場合、[`@intlayer/svelte-i18n`互換アダプター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/compat/svelte-i18n.md)によってバンドラーレベルでパッケージがエイリアスされるため、Intlayerがコンテンツを提供しながら`$_`、`$date`、`$number`およびフラットなキーを引き続き機能させることができます。
|
|
382
|
+
|
|
383
|
+
## 採用を決める前のチェックポイント
|
|
384
|
+
|
|
385
|
+
機能比較表は現在の機能を示しているに過ぎません。以下のポイントは、実際にそのライブラリを運用していく際の体験を左右します。
|
|
386
|
+
|
|
387
|
+
**リポジトリのアクティビティを確認する。**
|
|
388
|
+
|
|
389
|
+
コミット頻度、Issueへの返答時間、最新のマイナーリリースが今年行われているかを確認してください。メンテナーのいない優れた設計は、いずれ移行作業を迫られることになります。
|
|
390
|
+
|
|
391
|
+
**npmのダウンロード数だけで選ばない。**
|
|
392
|
+
|
|
393
|
+
最もインストールされているライブラリは、最初にリリースされたものであり、必ずしも2026年のSvelteコードベースに適合しているわけではありません。ダウンロード数は歴史の長さを示すものであり、適合度を示すものではありません。
|
|
394
|
+
|
|
395
|
+

|
|
396
|
+
|
|
397
|
+
**メンテナーの収益モデルと販売対象を確認する。**
|
|
398
|
+
|
|
399
|
+
`svelte-i18n`は`next-intl`や`vue-i18n`と同様にCrowdinが支援しています。`i18next`はLocizeが支援しています。Tolgee、Paraglide(inlang)、Intlayerはそれぞれ独自のプラットフォームを運営しています。ホスティング翻訳サービスを主な収益源とするベンダーは、開発ツールチェーン内での無料翻訳を促進する動機が薄くなりがちです。Intlayerはこの中で唯一、独自のAPIキーを使ったCLI経由のAI翻訳と、セルフホスト可能なCMSを提供しています。
|
|
400
|
+
|
|
401
|
+
**AIエージェントに対応しているか?**
|
|
402
|
+
|
|
403
|
+
AIエージェントは依然としてi18nの扱いに苦労することが多く、ロケールの不足、キーの捏造、メッセージ構文の混同などが起きがちです。エージェントがコンテンツのリストアップ、補完、テストを行えるように、ライブラリが[Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/agent_skills.md)や[MCPサーバー](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/mcp_server.md)を提供しているか確認してください。またコンテンツの読み込みがデフォルトで最適化されているか、あるいは四半期ごとにネームスペースや遅延インポートの見直しが必要になるかも重要です。
|
|
404
|
+
|
|
405
|
+
**設定なし(out of the box)での型安全性。**
|
|
406
|
+
|
|
407
|
+
「追加の設定を行えば型付けできる」ではなく、「新規インストール状態で存在しないキーを指定すると`tsc`が失敗する」かどうかです。存在しないキーを指定した場合や、1つのロケールで翻訳が欠落している場合に何が起きるかを確認してください。
|
|
408
|
+
|
|
409
|
+
**未使用コンテンツの検出。**
|
|
410
|
+
|
|
411
|
+
カタログは増え続ける一方です。Intlayerのビルドは未使用のフィールドを削除しログを出力します(`build.purge`)。Paraglideは呼び出されないメッセージ関数がツリーシェイキングされる構造になっています。他のライブラリでは未使用キーの整理を自前で行う必要があります。
|
|
412
|
+
|
|
413
|
+
**開発者体験(Developer Experience)。**
|
|
414
|
+
|
|
415
|
+
最初の翻訳文字列を表示するまでのセットアップ時間、ホバー時に翻訳を表示し定義元へジャンプできる[LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/lsp.md)や[VS Code拡張機能](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/vs_code_extension.md)、補完・テスト・プッシュを行うための[CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/cli/index.md)、コンポーネント内のハードコードされた文字列を抽出してキーごとに管理する手間をなくす[コンパイラー](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/compiler.md)や抽出ツール、そして開発者以外でもプルリクエストなしでコンテンツを編集できる手段([ビジュアルエディタ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)や[CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md))の有無を確認してください。
|
|
416
|
+
|
|
417
|
+
## よくある質問
|
|
418
|
+
|
|
419
|
+
<FAQ>
|
|
420
|
+
|
|
421
|
+
<Question title="2026年でもsvelte-i18nはデフォルトの選択肢として適切ですか?">
|
|
422
|
+
|
|
423
|
+
カタログが小さいVite SPAであれば適切です。最もドキュメントが充実した選択肢であり、ICUの互換性は多くのチームにとって重要です。ただしSvelteKit上や数十ページを超える規模になると、そのコスト(型がない、スコープ分割がない、共有ストア)が顕在化し始めます。
|
|
424
|
+
|
|
425
|
+
</Question>
|
|
426
|
+
|
|
427
|
+
<Question title="Paraglideのツリーシェイキングは本当に機能しますか?">
|
|
428
|
+
|
|
429
|
+
Vite + Svelteにおいては機能し、ベンチマークでもそれが確認されています。TanStack Startを用いたReactやNext.jsでは同じベンチマークで効果が見られませんでした。どちらの結果も盲信するのではなく、自身のスタックで検証してください。
|
|
430
|
+
|
|
431
|
+
</Question>
|
|
432
|
+
|
|
433
|
+
<Question title="Runesの導入によって選ぶべきライブラリは変わりますか?">
|
|
434
|
+
|
|
435
|
+
Runesはロケール状態の記述構文を変えるものであり、共有問題そのものを変えるわけではありません。重要なのは、Svelte 5においてライブラリのランタイムがRuneに対応しているかどうか、そしてモジュールストアではなくコンテキストを使用しているかどうかです。両方を確認してください。
|
|
436
|
+
|
|
437
|
+
</Question>
|
|
438
|
+
|
|
439
|
+
<Question title="ライブラリの選択はSEOに影響しますか?">
|
|
440
|
+
|
|
441
|
+
間接的に影響します。クローラーはルーティング、`hreflang`、`<html lang>`、およびサーバーレンダリングされたHTML内にテキストが存在するかどうかを評価します。[hreflangガイド](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/hreflang_guide_multilingual_seo.md)を参照してください。
|
|
442
|
+
|
|
443
|
+
</Question>
|
|
444
|
+
|
|
445
|
+
</FAQ>
|
|
446
|
+
|
|
447
|
+
## さらに詳しく
|
|
448
|
+
|
|
449
|
+
- [Svelte i18nベンチマーク: バンドルサイズ、リーク、ロケール切り替え時間](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/benchmark/svelte.md)
|
|
450
|
+
- [Svelte i18n: ストア、Runes、モジュールレベルの罠](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/list_i18n_technologies/frameworks/svelte.md)および[SvelteKit i18n: ルーティング、SSR、共有状態](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/list_i18n_technologies/frameworks/sveltekit.md)
|
|
451
|
+
- [そのまま使えるsvelte-i18n互換アダプター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/compat/svelte-i18n.md)
|
|
452
|
+
- [JavaScript i18nの歴史](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/history_of_i18n.md)
|
|
453
|
+
- [コンパイラ vs 宣言型 i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/compiler_vs_declarative_i18n.md)
|
|
454
|
+
- [コンポーネント単位 vs 集中管理型 i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/per-component_vs_centralized_i18n.md)
|
|
455
|
+
- [ビルド時におけるバンドル最適化の仕組み](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/bundle_optimization.md)
|
|
456
|
+
- [Vite + Svelteアプリでのi18n設定](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_with_vite+svelte.md)および[SvelteKitアプリでの設定](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_with_svelte_kit.md)
|
|
457
|
+
- [React](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/how_to_pick_react_i18n_library.md)、[Vue](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/how_to_pick_vue_i18n_library.md)、[Solid](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ja/how_to_pick_solid_i18n_library.md)向けの同様のガイド
|