@intlayer/docs 9.5.3 → 9.5.4
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,460 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-16
|
|
3
|
+
updatedAt: 2026-09-16
|
|
4
|
+
title: "Jak wybrać odpowiednią bibliotekę i18n dla Svelte w 2026 roku"
|
|
5
|
+
description: Przewodnik decyzyjny dotyczący internacjonalizacji Svelte i SvelteKit. Na jakie pytania odpowiedzieć przed porównaniem svelte-i18n, Paraglide, typesafe-i18n, wuchale i Intlayer oraz ile każdy wybór kosztuje pod względem rozmiaru bundle, typowania i bezpieczeństwa SSR.
|
|
6
|
+
keywords:
|
|
7
|
+
- svelte i18n
|
|
8
|
+
- sveltekit i18n
|
|
9
|
+
- svelte internationalization
|
|
10
|
+
- svelte internacjonalizacja
|
|
11
|
+
- svelte-i18n
|
|
12
|
+
- Paraglide
|
|
13
|
+
- typesafe-i18n
|
|
14
|
+
- wuchale
|
|
15
|
+
- Intlayer
|
|
16
|
+
- porównanie bibliotek i18n
|
|
17
|
+
slugs:
|
|
18
|
+
- blog
|
|
19
|
+
- how-to-pick-svelte-i18n-library
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Jak wybrać odpowiednią bibliotekę i18n dla Svelte
|
|
24
|
+
|
|
25
|
+
Svelte nie dostarcza żadnych wbudowanych narzędzi do i18n. Brak `$t`, brak prymitywu locale, brak formatu wiadomości. Każda opcja to rozwiązanie zewnętrzne, a ekosystem Svelte to miejsce, w którym i18n w czasie kompilacji poszło najdalej, dlatego poszczególni kandydaci różnią się od siebie bardziej niż w przypadku React czy Vue.
|
|
26
|
+
|
|
27
|
+
Ten przewodnik wymienia pytania, na które warto odpowiedzieć w pierwszej kolejności, a następnie przypisuje odpowiedzi do `svelte-i18n`, Paraglide, `typesafe-i18n`, `wuchale` i Intlayer, zarówno dla Vite + Svelte, jak i dla SvelteKit.
|
|
28
|
+
|
|
29
|
+

|
|
30
|
+
|
|
31
|
+
## Spis treści
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
## Sześć pytań, na które należy odpowiedzieć przed porównaniem bibliotek
|
|
36
|
+
|
|
37
|
+
1. **Vite SPA czy SvelteKit?** W SPA store na poziomie modułu jest poprawny: jedna karta, jeden użytkownik, jedno locale. W SvelteKit ten sam singleton jest współdzielony między równoległymi żądaniami na serwerze, przez co żądanie B może wyrenderować się w języku żądania A. Biblioteka albo zapewnia strukturę dla każdego żądania (context, `locals`), albo pozostawia jej implementację Tobie.
|
|
38
|
+
2. **Kto pisze tłumaczenia?** Programiści, TMS, agencja dostarczająca ciągi ICU, czy pipeline AI. `svelte-i18n` obsługuje ICU. Paraglide i `typesafe-i18n` używają własnej składni. Dopasuj rozwiązanie do dostawcy treści.
|
|
39
|
+
3. **Ile masz wersji językowych (locales) i podstron?** Dwa języki i pięć podstron mogą wysłać wszystko do klienta. Dziesięć języków i czterdzieści tras już nie, a różnica między katalogami runtime a skompilowanymi wiadomościami staje się głównym kosztem.
|
|
40
|
+
4. **Czy potrzebujesz typowania kluczy?** `$_("cart.totl")` to błąd w runtime w `svelte-i18n`. Biblioteki czasu kompilacji czynią z tego błąd typowania już na etapie kompilacji.
|
|
41
|
+
5. **Store'y ze Svelte 4 czy runes ze Svelte 5?** Runes zmieniają składnię stanu locale, a nie problem współdzielenia stanu. Jednak `$state` w pliku `.ts` kompiluje się do zwykłej zmiennej, więc runtime biblioteki musi obsługiwać runes, jeśli korzystasz ze Svelte 5.
|
|
42
|
+
6. **Czy akceptujesz wygenerowane pliki w repozytorium?** Zarówno Paraglide, jak i `typesafe-i18n` generują kod JavaScript lub TypeScript bezpośrednio w Twoim drzewie źródłowym. Dla niektórych zespołów to żaden problem, inni mierzą się z konfliktami scalania (merge conflicts) na każdej równoległej gałęzi.
|
|
43
|
+
|
|
44
|
+
Zapisz swoje odpowiedzi. Wszystkie poniższe sekcje będą się do nich odnosić.
|
|
45
|
+
|
|
46
|
+
## Krajobraz w jednym ujęciu
|
|
47
|
+
|
|
48
|
+
i18n w Svelte pojawiło się później niż w React czy Vue i od razu przeszło do fal opartych na kompilacji.
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
|
|
52
|
+
<AccordionGroup>
|
|
53
|
+
<Accordion header="Słowniki w czasie wykonywania (2019 do 2020): svelte-i18n, sveltekit-i18n">
|
|
54
|
+
|
|
55
|
+
Katalogi JSON, ICU parsowane w przeglądarce za pomocą `intl-messageformat`, locale w store'ach na poziomie modułu (`$locale`, `$_`). Najbardziej popularne, dobrze udokumentowane, konfiguracja SSR leży po Twojej stronie.
|
|
56
|
+
|
|
57
|
+
</Accordion>
|
|
58
|
+
<Accordion header="Generowane typy (2020 do 2022): typesafe-i18n">
|
|
59
|
+
|
|
60
|
+
Generator obserwuje Twoje katalogi i generuje typowane akcesory (`$LL.cart.total()`). Solidny model, pliki generowane w repozytorium, a sam projekt nie był ostatnio zbyt aktywnie rozwijany.
|
|
61
|
+
|
|
62
|
+
</Accordion>
|
|
63
|
+
<Accordion header="Kompilator i współdzielona treść (2022 do 2026): Paraglide, wuchale, Intlayer">
|
|
64
|
+
|
|
65
|
+
Paraglide kompiluje każdą wiadomość do wyeksportowanej funkcji, dzięki czemu bundler eliminuje w procesie tree-shaking to, czego dana trasa nigdy nie wywołuje. `wuchale` wyodrębnia ciągi znaków ze znaczników podczas budowania. Intlayer deklaruje treść dla każdego komponentu oraz generuje typy i słowniki per komponent.
|
|
66
|
+
|
|
67
|
+
</Accordion>
|
|
68
|
+
</AccordionGroup>
|
|
69
|
+
|
|
70
|
+
Artykuł [historia JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/history_of_i18n.md) szczegółowo opisuje każdą z tych fal.
|
|
71
|
+
|
|
72
|
+
## Decyzja, która ma największe znaczenie: gdzie znajduje się treść i kiedy jest ładowana
|
|
73
|
+
|
|
74
|
+
Dwa wybory strukturalne odpowiadają za większość różnic w rozmiarze bundle między konfiguracjami:
|
|
75
|
+
|
|
76
|
+
- **Treść scentralizowana lub per komponent (scoped).** Jeden plik `locales/en.json` dla całej aplikacji lub pojedyncza deklaracja obok każdego komponentu.
|
|
77
|
+
- **Import statyczny lub dynamiczny.** Wszystko ładowane przy starcie albo aktywne locale (oraz optymalnie aktywna trasa) pobierane na żądanie.
|
|
78
|
+
|
|
79
|
+
Wykres szacuje payload dla teoretycznej aplikacji mającej od 1 do 10 podstron, przetłumaczonej na 1 do 10 języków, z około 30 KB tekstu na stronę.
|
|
80
|
+
|
|
81
|
+

|
|
82
|
+
|
|
83
|
+
`svelte-i18n` domyślnie znajduje się w lewym górnym rogu: `register("fr", () => import("./fr.json"))` zapewnia dynamiczne ładowanie dla każdego locale, ale katalog danego języka to jeden obiekt i załadowanie go powoduje wczytanie treści wszystkich podstron. Paraglide to interesujący przypadek: ponieważ każda wiadomość jest osobnym exportem, tree-shaking zapewnia podział na poziomie podstron bez dodatkowej pracy, a [benchmark Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/benchmark/svelte.md) potwierdza, że działa to zgodnie z opisem w Vite + Svelte (w benchmarkach React i Next.js tak nie było). Intlayer osiąga ten sam rezultat dzięki deklaracjom na poziomie pojedynczych komponentów.
|
|
84
|
+
|
|
85
|
+
Jeśli Twoją odpowiedzią na pytanie 3 było "wiele podstron", potraktuj tę sekcję priorytetowo ponad preferencjami dotyczącymi API. Wpis [i18n per komponent a scentralizowane](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/per-component_vs_centralized_i18n.md) omawia kwestię utrzymania tego samego kompromisu.
|
|
86
|
+
|
|
87
|
+
## Kandydaci
|
|
88
|
+
|
|
89
|
+
Rozmiary bibliotek pochodzą z [benchmarku Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/benchmark/svelte.md): store wraz z akcesorem w pustym komponencie, po bundle, tree-shakingu i minifikacji, w aplikacji z 10 podstronami i 10 wersjami językowymi. Sama treść jest mierzona osobno.
|
|
90
|
+
|
|
91
|
+
| Biblioteka | Gdzie trafiają wiadomości | Stan locale | Bezpieczeństwo typów | Format wiadomości | Podział per trasa | Rozmiar biblioteki |
|
|
92
|
+
| :-------------- | :------------------------------------- | :--------------------------------------------- | :-------------------------- | :---------------------------- | :---------------------- | :--------------------------------------------------- |
|
|
93
|
+
| `svelte-i18n` | Katalogi JSON per locale | Svelte store na poziomie modułu | 2/5 — Ręczna unia | ICU | Nie | ~16.6 kB |
|
|
94
|
+
| `typesafe-i18n` | Generowane moduły TS | Adapter store | 4/5 — Generowane | Własny | Częściowy | Mały |
|
|
95
|
+
| Paraglide | Projekt inlang, kompilowany do funkcji | Odczyt per wywołanie z cookie, URL lub storage | 3.5/5 — Generowane | Własny | Tak, przez tree-shaking | Bliski zeru (dzięki kodowi generowanemu w projekcie) |
|
|
96
|
+
| `wuchale` | Ekstrakcja z markup podczas budowania | Store | N/D (brak kluczy) | Własny | Tak | ~30.7 kB |
|
|
97
|
+
| Intlayer | `.content.ts` obok komponentu | Context plus store, obsługa runes | 5/5 — Generowane, domyślnie | Intlayer (+ ICU, i18next, PO) | Tak, per komponent | ~3.6 kB |
|
|
98
|
+
|
|
99
|
+
> Liczby są migawką dla wersji z benchmarku. Uruchom go na własnej aplikacji przed podjęciem decyzji opartej wyłącznie na rozmiarze.
|
|
100
|
+
> Bezpieczeństwo typów: 5/5 oznacza, że klucze, parametry i każda lokalizacja są sprawdzane bez ręcznej konfiguracji, w tym formatery URL i helpery.
|
|
101
|
+
|
|
102
|
+
Rozmiar biblioteki Paraglide bliski zeru wynika z jej konstrukcji: runtime jest generowany bezpośrednio do Twojego repozytorium. Intlayer wymaga wtyczki `vite-intlayer`, więc nie działa bez kroku budowania.
|
|
103
|
+
|
|
104
|
+
## Dopasuj swoje odpowiedzi do biblioteki
|
|
105
|
+
|
|
106
|
+
<AccordionGroup>
|
|
107
|
+
<Accordion header="Vite SPA, mały zespół, niewiele języków">
|
|
108
|
+
|
|
109
|
+
`svelte-i18n`. To najbardziej udokumentowana opcja, `$_` czyta się naturalnie w markup, a `register` wraz z `waitLocale()` pokrywa lazy loading dla każdego locale. Zablokuj pierwsze renderowanie (first paint) za pomocą `isLoading`, w przeciwnym razie użytkownik zobaczy surowe klucze. Jeśli aplikacja może w przyszłości zyskać serwer, umieść locale w Svelte context od pierwszego dnia zamiast polegać na store modułu; teraz nic to nie kosztuje, a zapobiega trudnym do wykrycia błędom na produkcji.
|
|
110
|
+
|
|
111
|
+
</Accordion>
|
|
112
|
+
<Accordion header="SvelteKit z routingiem językowym i SSR">
|
|
113
|
+
|
|
114
|
+
Problem współdzielenia stanu jest tutaj decydujący. `svelte-i18n` działa w SvelteKit, ale konfiguracja per żądanie (`hooks.server.ts`, `locals`, `load`, a następnie `setContext`) leży po Twojej stronie i łatwo popełnić w niej subtelny błąd. Paraglide dostarcza integrację ze SvelteKit, która obsługuje routing i odczytuje locale przy każdym wywołaniu, co pozwala uniknąć problemu singletona. Intlayer ustawia locale z danych `load` do contextu. Artykuł o [SvelteKit i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/sveltekit.md) wyjaśnia wybór między `[[lang]]` a `reroute`, który warto podjąć przed wyborem biblioteki.
|
|
115
|
+
|
|
116
|
+
</Accordion>
|
|
117
|
+
<Accordion header="Tłumaczenia pochodzą z TMS lub agencji dostarczającej ICU">
|
|
118
|
+
|
|
119
|
+
`svelte-i18n` natywnie obsługuje ICU dzięki `intl-messageformat`, więc integruje się bezpośrednio z większością dostawców. Paraglide i `typesafe-i18n` używają własnej składni i wymagają konwersji. Wsparcie dla ICU w Intlayer jest częściowe, więc jeśli otrzymujesz obecnie ciągi ICU, potraktuj to jako czynnik blokujący.
|
|
120
|
+
|
|
121
|
+
</Accordion>
|
|
122
|
+
<Accordion header="Rozmiar bundle to główny priorytet">
|
|
123
|
+
|
|
124
|
+
Rozwiązania czasu kompilacji. Tree-shaking w Paraglide działa w Vite + Svelte, a koszt biblioteki jest bliski zeru. Słowniki per komponent w Intlayer dają ten sam rezultat bez generowania plików w repozytorium. `svelte-i18n` dołącza parser ICU oraz cały katalog, osiągając w benchmarku około 4,5× rozmiar `svelte-intlayer` jeszcze przed dodaniem jakiejkolwiek treści.
|
|
125
|
+
|
|
126
|
+
</Accordion>
|
|
127
|
+
<Accordion header="Bezpieczeństwo typów jest bezdyskusyjne">
|
|
128
|
+
|
|
129
|
+
Wszystko poza podstawową konfiguracją `svelte-i18n`, gdzie jedynym typowaniem jest ręcznie pisana unia, która natychmiast rozjeżdża się z plikiem JSON. `typesafe-i18n`, Paraglide i Intlayer generują typy bezpośrednio z treści. Sprawdź aktywność repozytorium `typesafe-i18n` przed oparciem na nim swojej bazy kodu. Artykuł [wykrywanie brakujących tłumaczeń](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/detecting_missing_translations.md) porównuje, co poszczególne narzędzia wyłapują w czasie budowania.
|
|
130
|
+
|
|
131
|
+
</Accordion>
|
|
132
|
+
<Accordion header="Nie chcesz wygenerowanych plików w repozytorium">
|
|
133
|
+
|
|
134
|
+
To eliminuje Paraglide oraz `typesafe-i18n`. `svelte-i18n` i Intlayer trzymają swoje pliki wyjściowe w `node_modules` lub w katalogu budowania. W przypadku Intlayer pliki `.content.ts` są ręcznie pisanym kodem źródłowym, a skompilowane słowniki i typy trafiają do `.intlayer/` i są ignorowane przez git.
|
|
135
|
+
|
|
136
|
+
</Accordion>
|
|
137
|
+
<Accordion header="Tłumaczenia będą generowane przez AI">
|
|
138
|
+
|
|
139
|
+
Wtedy scentralizowany JSON traci swoje uzasadnienie. Treść współdzielona z komponentem w połączeniu z CLI uzupełniającym brakujące wersje językowe to najprostsza droga. Polecenie `fill` w Intlayer działa z Twoim własnym kluczem API (OpenAI, Anthropic, Mistral, Gemini) i tłumaczy ponownie tylko to, co uległo zmianie. Ekosystem inlang w Paraglide oferuje hostowane odpowiedniki z osobnymi planami.
|
|
140
|
+
|
|
141
|
+
</Accordion>
|
|
142
|
+
</AccordionGroup>
|
|
143
|
+
|
|
144
|
+
## Gdzie każda biblioteka ma słabe punkty
|
|
145
|
+
|
|
146
|
+
- **`svelte-i18n`**: najcięższa z zestawu, brak typów dla kluczy, brak podziału per trasa, store na poziomie modułu, który wycieka między żądaniami w SvelteKit, chyba że samodzielnie skonfigurujesz context.
|
|
147
|
+
- **`typesafe-i18n`**: proces obserwatora (watcher), generowane pliki w repozytorium oraz repozytorium, które nie było ostatnio aktywnie rozwijane.
|
|
148
|
+
- **Paraglide**: generowane pliki commitowane do repozytorium i regenerowane przed każdym pushem, konflikty scalania na równoległych gałęziach oraz locale odczytywane z cookie lub storage przy każdym wywołaniu wiadomości zamiast ze store'a, co generuje narzut przy zmianie języka.
|
|
149
|
+
- **`wuchale`**: ciekawy pomysł na ekstrakcję, ale wciąż wczesny etap. Benchmark React napotkał problemy z reaktywnością, które wymagały wymuszania ponownego renderowania providera, a dokumentacja jest skromna.
|
|
150
|
+
- **Intlayer**: wymagana wtyczka do buildera, mniejszy ekosystem, częściowe wsparcie ICU oraz treść rozproszona po całej bazie kodu z założenia, więc wyeksportowanie pojedynczego pliku JSON dla tłumacza wymaga dodatkowych narzędzi.
|
|
151
|
+
|
|
152
|
+
## Jak każda opcja wygląda w kodzie
|
|
153
|
+
|
|
154
|
+
Ten sam komponent, podsumowanie koszyka z tytułem i liczbą mnogą, napisany przy użyciu każdego kandydata. Najciekawszą częścią nie jest sam markup, lecz to, gdzie znajduje się treść, jak przechowywane jest locale i co wie system typów.
|
|
155
|
+
|
|
156
|
+
<Tabs defaultTab="svelte-i18n">
|
|
157
|
+
<Tab label="svelte-i18n" value="svelte-i18n">
|
|
158
|
+
|
|
159
|
+
<Tabs group="locale">
|
|
160
|
+
<Tab value="en" label="Angielski">
|
|
161
|
+
|
|
162
|
+
```json fileName="src/locales/en.json"
|
|
163
|
+
{
|
|
164
|
+
"cart": {
|
|
165
|
+
"title": "Your cart",
|
|
166
|
+
"items": "{count, plural, one {# item} other {# items}}"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
</Tab>
|
|
172
|
+
<Tab value="fr" label="Francuski">
|
|
173
|
+
|
|
174
|
+
```json fileName="src/locales/fr.json"
|
|
175
|
+
{
|
|
176
|
+
"cart": {
|
|
177
|
+
"title": "Votre panier",
|
|
178
|
+
"items": "{count, plural, one {# article} other {# articles}}"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
</Tab>
|
|
184
|
+
<Tab value="es" label="Hiszpański">
|
|
185
|
+
|
|
186
|
+
```json fileName="src/locales/es.json"
|
|
187
|
+
{
|
|
188
|
+
"cart": {
|
|
189
|
+
"title": "Tu carrito",
|
|
190
|
+
"items": "{count, plural, one {# artículo} other {# artículos}}"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
</Tab>
|
|
196
|
+
</Tabs>
|
|
197
|
+
|
|
198
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
199
|
+
<script lang="ts">
|
|
200
|
+
import { _ } from "svelte-i18n";
|
|
201
|
+
|
|
202
|
+
let { count }: { count: number } = $props();
|
|
203
|
+
</script>
|
|
204
|
+
|
|
205
|
+
<section>
|
|
206
|
+
<h2>{$_("cart.title")}</h2>
|
|
207
|
+
<p>{$_("cart.items", { values: { count } })}</p>
|
|
208
|
+
</section>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
ICU przez `intl-messageformat`, locale w store na poziomie modułu. `$_` przyjmuje dowolny ciąg znaków; jedynym typowaniem jest unia pisana ręcznie.
|
|
212
|
+
|
|
213
|
+
</Tab>
|
|
214
|
+
<Tab label="Paraglide" value="paraglide">
|
|
215
|
+
|
|
216
|
+
<Tabs group="locale">
|
|
217
|
+
<Tab value="en" label="Angielski">
|
|
218
|
+
|
|
219
|
+
```json fileName="messages/en.json"
|
|
220
|
+
{
|
|
221
|
+
"cart_title": "Your cart",
|
|
222
|
+
"cart_items": "{count} items"
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
</Tab>
|
|
227
|
+
<Tab value="fr" label="Francuski">
|
|
228
|
+
|
|
229
|
+
```json fileName="messages/fr.json"
|
|
230
|
+
{
|
|
231
|
+
"cart_title": "Votre panier",
|
|
232
|
+
"cart_items": "{count} articles"
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
</Tab>
|
|
237
|
+
<Tab value="es" label="Hiszpański">
|
|
238
|
+
|
|
239
|
+
```json fileName="messages/es.json"
|
|
240
|
+
{
|
|
241
|
+
"cart_title": "Tu carrito",
|
|
242
|
+
"cart_items": "{count} artículos"
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
</Tab>
|
|
247
|
+
</Tabs>
|
|
248
|
+
|
|
249
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
250
|
+
<script lang="ts">
|
|
251
|
+
import { m } from "$lib/paraglide/messages.js";
|
|
252
|
+
|
|
253
|
+
let { count }: { count: number } = $props();
|
|
254
|
+
</script>
|
|
255
|
+
|
|
256
|
+
<section>
|
|
257
|
+
<h2>{m.cart_title()}</h2>
|
|
258
|
+
<p>{m.cart_items({ count })}</p>
|
|
259
|
+
</section>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Każda wiadomość jest wygenerowaną, typowaną funkcją, eliminowaną przez tree-shaking, jeśli nie zostanie wywołana. Folder `paraglide/` jest generowany w Twoim repozytorium, a locale jest odczytywane przy każdym wywołaniu zamiast ze store'a.
|
|
263
|
+
|
|
264
|
+
</Tab>
|
|
265
|
+
<Tab label="typesafe-i18n" value="typesafe-i18n">
|
|
266
|
+
|
|
267
|
+
<Tabs group="locale">
|
|
268
|
+
<Tab value="en" label="Angielski">
|
|
269
|
+
|
|
270
|
+
```ts fileName="src/i18n/en/index.ts"
|
|
271
|
+
import type { BaseTranslation } from "../i18n-types";
|
|
272
|
+
|
|
273
|
+
const en = {
|
|
274
|
+
cart: {
|
|
275
|
+
title: "Your cart",
|
|
276
|
+
items: "{count} item{{s}}",
|
|
277
|
+
},
|
|
278
|
+
} satisfies BaseTranslation;
|
|
279
|
+
|
|
280
|
+
export default en;
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
</Tab>
|
|
284
|
+
<Tab value="fr" label="Francuski">
|
|
285
|
+
|
|
286
|
+
```ts fileName="src/i18n/fr/index.ts"
|
|
287
|
+
import type { Translation } from "../i18n-types";
|
|
288
|
+
|
|
289
|
+
const fr = {
|
|
290
|
+
cart: {
|
|
291
|
+
title: "Votre panier",
|
|
292
|
+
items: "{count} article{{s}}",
|
|
293
|
+
},
|
|
294
|
+
} satisfies Translation;
|
|
295
|
+
|
|
296
|
+
export default fr;
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
</Tab>
|
|
300
|
+
<Tab value="es" label="Hiszpański">
|
|
301
|
+
|
|
302
|
+
```ts fileName="src/i18n/es/index.ts"
|
|
303
|
+
import type { Translation } from "../i18n-types";
|
|
304
|
+
|
|
305
|
+
const es = {
|
|
306
|
+
cart: {
|
|
307
|
+
title: "Tu carrito",
|
|
308
|
+
items: "{count} artículo{{s}}",
|
|
309
|
+
},
|
|
310
|
+
} satisfies Translation;
|
|
311
|
+
|
|
312
|
+
export default es;
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
</Tab>
|
|
316
|
+
</Tabs>
|
|
317
|
+
|
|
318
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
319
|
+
<script lang="ts">
|
|
320
|
+
import LL from "$i18n/i18n-svelte";
|
|
321
|
+
|
|
322
|
+
let { count }: { count: number } = $props();
|
|
323
|
+
</script>
|
|
324
|
+
|
|
325
|
+
<section>
|
|
326
|
+
<h2>{$LL.cart.title()}</h2>
|
|
327
|
+
<p>{$LL.cart.items({ count })}</p>
|
|
328
|
+
</section>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Typowane akcesory generowane przez proces watcher. Model jest poprawny; wygenerowane pliki trafiają do repozytorium, a projekt nie notował ostatnio dużej aktywności.
|
|
332
|
+
|
|
333
|
+
</Tab>
|
|
334
|
+
<Tab label="Intlayer" value="intlayer">
|
|
335
|
+
|
|
336
|
+
```ts fileName="src/lib/cartSummary.content.ts"
|
|
337
|
+
import { plural, t, type Dictionary } from "intlayer";
|
|
338
|
+
|
|
339
|
+
const cartSummaryContent = {
|
|
340
|
+
key: "cart-summary",
|
|
341
|
+
content: {
|
|
342
|
+
title: t({
|
|
343
|
+
pl: "Twój koszyk",
|
|
344
|
+
en: "Your cart",
|
|
345
|
+
fr: "Votre panier",
|
|
346
|
+
es: "Tu carrito",
|
|
347
|
+
}),
|
|
348
|
+
items: t({
|
|
349
|
+
pl: plural({
|
|
350
|
+
one: "{{count}} produkt",
|
|
351
|
+
few: "{{count}} produkty",
|
|
352
|
+
many: "{{count}} produktów",
|
|
353
|
+
other: "{{count}} produktów",
|
|
354
|
+
}),
|
|
355
|
+
en: plural({ one: "{{count}} item", other: "{{count}} items" }),
|
|
356
|
+
fr: plural({ one: "{{count}} article", other: "{{count}} articles" }),
|
|
357
|
+
es: plural({ one: "{{count}} artículo", other: "{{count}} artículos" }),
|
|
358
|
+
}),
|
|
359
|
+
},
|
|
360
|
+
} satisfies Dictionary;
|
|
361
|
+
|
|
362
|
+
export default cartSummaryContent;
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
```svelte fileName="src/lib/CartSummary.svelte"
|
|
366
|
+
<script lang="ts">
|
|
367
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
368
|
+
|
|
369
|
+
let { count }: { count: number } = $props();
|
|
370
|
+
const content = useIntlayer("cart-summary");
|
|
371
|
+
</script>
|
|
372
|
+
|
|
373
|
+
<section>
|
|
374
|
+
<h2>{$content.title}</h2>
|
|
375
|
+
<p>{$content.items(count)}</p>
|
|
376
|
+
</section>
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Wszystkie wersje językowe w jednym pliku obok komponentu. `useIntlayer` zwraca czytelny store, więc `$content` to automatyczna subskrypcja, którą już znasz, a locale jest przechowywane w context (bezpiecznym dla SSR), a nie w singletonie modułu.
|
|
380
|
+
|
|
381
|
+
</Tab>
|
|
382
|
+
</Tabs>
|
|
383
|
+
|
|
384
|
+
Korzystasz już z `svelte-i18n`? [Adapter kompatybilności `@intlayer/svelte-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/compat/svelte-i18n.md) tworzy alias dla pakietu na poziomie bundlera, dzięki czemu `$_`, `$date`, `$number` oraz Twoje płaskie klucze nadal działają, podczas gdy Intlayer dostarcza treść.
|
|
385
|
+
|
|
386
|
+
## Zanim podejmiesz decyzję
|
|
387
|
+
|
|
388
|
+
Tabela funkcji mówi o tym, co biblioteka potrafi dzisiaj. Poniższe punkty pokazują, jak będzie wyglądać codzienna praca z nią.
|
|
389
|
+
|
|
390
|
+
**Sprawdź aktywność repozytorium.**
|
|
391
|
+
|
|
392
|
+
Commity, czas odpowiedzi na zgłoszenia (issues) oraz informacja, czy ostatnie wydanie minor miało miejsce w tym roku. Dobry projekt bez maintainera to odroczona w czasie migracja.
|
|
393
|
+
|
|
394
|
+
**Nie wybieraj na podstawie liczby pobrań z npm.**
|
|
395
|
+
|
|
396
|
+
Najczęściej instalowana biblioteka to ta, która powstała jako pierwsza, a nie ta, która najlepiej pasuje do bazy kodu Svelte w 2026 roku. Liczba pobrań mierzy historię, a nie dopasowanie.
|
|
397
|
+
|
|
398
|
+

|
|
399
|
+
|
|
400
|
+
**Sprawdź, kto finansuje maintainera i co sprzedaje.**
|
|
401
|
+
|
|
402
|
+
`svelte-i18n` jest wspierane przez Crowdin, podobnie jak `next-intl` czy `vue-i18n`. `i18next` jest wspierane przez Locize. Tolgee, Paraglide (inlang) oraz Intlayer prowadzą własne platformy. Dostawca, którego przychód zależy od hostowanych tłumaczeń, nie ma motywacji, aby tłumaczenie wewnątrz Twojego toolchaina było bezpłatne. Intlayer jako jedyny z tego zestawu dostarcza tłumaczenie AI przez CLI z Twoim własnym kluczem API oraz CMS, który możesz samodzielnie hostować.
|
|
403
|
+
|
|
404
|
+
**Czy rozwiązanie jest gotowe na agentów AI?**
|
|
405
|
+
|
|
406
|
+
Agenci AI wciąż miewają trudności z i18n: zapominają o wersjach językowych, wymyślają klucze i mieszają składnie wiadomości. Czy biblioteka dostarcza [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/agent_skills.md) lub [serwer MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/mcp_server.md), aby agent mógł listować, uzupełniać i testować treści? Oraz czy ładowanie treści jest domyślnie zoptymalizowane, czy też ktoś musi co kwartał robić przegląd przestrzeni nazw (namespaces) i dynamicznych importów?
|
|
407
|
+
|
|
408
|
+
**Bezpieczeństwo typów od pierwszego uruchomienia.**
|
|
409
|
+
|
|
410
|
+
Nie "możliwe do otypowania po dodatkowej konfiguracji", ale "błędny klucz powoduje błąd `tsc` zaraz po instalacji". Sprawdź, co się dzieje z kluczem, który nie istnieje, oraz z językiem, w którym brakuje jednego tłumaczenia.
|
|
411
|
+
|
|
412
|
+
**Wykrywanie nieużywanej treści.**
|
|
413
|
+
|
|
414
|
+
Katalogi mają tendencję wyłącznie do rozrastania się. Build Intlayer usuwa nieużywane pola i raportuje je (`build.purge`). Paraglide osiąga to dzięki swojej architekturze, ponieważ niewywołana funkcja wiadomości jest usuwana w procesie tree-shaking. Każda inna biblioteka pozostawia to zadanie Tobie.
|
|
415
|
+
|
|
416
|
+
**Doświadczenie programisty (Developer Experience).**
|
|
417
|
+
|
|
418
|
+
Czas od konfiguracji do pierwszego przetłumaczonego tekstu, [LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/lsp.md) lub [rozszerzenie do VS Code](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/vs_code_extension.md), które wyświetla tłumaczenie po najechaniu kursorem i przenosi do deklaracji, [CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/cli/index.md) do uzupełniania, testowania i publikowania, [kompilator](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/compiler.md) lub ekstraktor, który wyciąga zakodowane na stałe ciągi z komponentów, aby nie zarządzać każdym ciągiem klucz po kluczu oraz sposób na edycję treści dla osób nietechnicznych ([edytor wizualny](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_visual_editor.md) lub [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_CMS.md)) bez konieczności tworzenia pull requesta.
|
|
419
|
+
|
|
420
|
+
## Często zadawane pytania
|
|
421
|
+
|
|
422
|
+
<FAQ>
|
|
423
|
+
|
|
424
|
+
<Question title="Czy svelte-i18n to wciąż właściwy domyślny wybór w 2026 roku?">
|
|
425
|
+
|
|
426
|
+
W przypadku Vite SPA z małym katalogiem, tak. To najbardziej udokumentowana opcja, a kompatybilność z ICU ma znaczenie dla wielu zespołów. W SvelteKit lub przy kilkudziesięciu podstronach jej koszty (brak typów, brak podziału, współdzielony store) zaczynają przeważać.
|
|
427
|
+
|
|
428
|
+
</Question>
|
|
429
|
+
|
|
430
|
+
<Question title="Czy tree-shaking w Paraglide naprawdę działa?">
|
|
431
|
+
|
|
432
|
+
W Vite + Svelte tak, benchmark to potwierdza. W React z TanStack Start lub Next.js nie przyniosło to efektu w tym samym benchmarku. Zweryfikuj to we własnym stacku zamiast bezkrytycznie polegać na którymkolwiek z wyników.
|
|
433
|
+
|
|
434
|
+
</Question>
|
|
435
|
+
|
|
436
|
+
<Question title="Czy runes zmieniają to, którą bibliotekę wybrać?">
|
|
437
|
+
|
|
438
|
+
Zmieniają składnię Twojego własnego stanu locale, a nie problem współdzielenia stanu. Liczy się to, czy runtime biblioteki obsługuje runes w Svelte 5 i czy używa context zamiast store'a modułu. Sprawdź oba te aspekty.
|
|
439
|
+
|
|
440
|
+
</Question>
|
|
441
|
+
|
|
442
|
+
<Question title="Czy wybór biblioteki wpływa na SEO?">
|
|
443
|
+
|
|
444
|
+
Pośrednio. Roboty indeksujące zwracają uwagę na routing, `hreflang`, `<html lang>` oraz to, czy tekst znajduje się w kodzie HTML wyrenderowanym po stronie serwera. Zobacz [przewodnik po hreflang](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/hreflang_guide_multilingual_seo.md).
|
|
445
|
+
|
|
446
|
+
</Question>
|
|
447
|
+
|
|
448
|
+
</FAQ>
|
|
449
|
+
|
|
450
|
+
## Idąc dalej
|
|
451
|
+
|
|
452
|
+
- [Benchmark Svelte i18n: rozmiar bundle, wycieki i czasy przełączania locale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/benchmark/svelte.md)
|
|
453
|
+
- [Svelte i18n: store'y, runes i pułapka na poziomie modułu](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/svelte.md) oraz [SvelteKit i18n: routing, SSR i współdzielony stan](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/list_i18n_technologies/frameworks/sveltekit.md)
|
|
454
|
+
- [Gotowy adapter kompatybilności `svelte-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/compat/svelte-i18n.md)
|
|
455
|
+
- [Historia JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/history_of_i18n.md)
|
|
456
|
+
- [Kompilator a deklaratywne i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/compiler_vs_declarative_i18n.md)
|
|
457
|
+
- [i18n per komponent a scentralizowane](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/per-component_vs_centralized_i18n.md)
|
|
458
|
+
- [Jak działa optymalizacja bundle podczas budowania](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/bundle_optimization.md)
|
|
459
|
+
- [Konfiguracja i18n w aplikacji Vite + Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_vite+svelte.md) oraz w [aplikacji SvelteKit](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_svelte_kit.md)
|
|
460
|
+
- Ten sam przewodnik dla [React](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/how_to_pick_react_i18n_library.md), [Vue](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/how_to_pick_vue_i18n_library.md) oraz [Solid](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/how_to_pick_solid_i18n_library.md)
|